summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c210
-rw-r--r--src/apprentice.c2
-rw-r--r--src/battle_anim.c144
-rw-r--r--src/battle_anim_effects_1.c1524
-rwxr-xr-xsrc/battle_anim_effects_2.c948
-rwxr-xr-xsrc/battle_anim_effects_3.c110
-rw-r--r--src/battle_anim_mons.c22
-rwxr-xr-xsrc/battle_anim_special.c28
-rw-r--r--src/battle_anim_status_effects.c24
-rw-r--r--src/battle_anim_utility_funcs.c10
-rw-r--r--src/battle_controller_player.c23
-rw-r--r--src/battle_controllers.c46
-rw-r--r--src/battle_dome.c4
-rw-r--r--src/battle_factory_screen.c2
-rw-r--r--src/battle_gfx_sfx_util.c8
-rw-r--r--src/battle_main.c115
-rw-r--r--src/battle_message.c6
-rw-r--r--src/battle_pike.c28
-rw-r--r--src/battle_pyramid.c34
-rw-r--r--src/battle_pyramid_bag.c29
-rw-r--r--src/battle_records.c2
-rw-r--r--src/battle_script_commands.c49
-rw-r--r--src/battle_setup.c64
-rw-r--r--src/battle_tower.c10
-rw-r--r--src/battle_transition.c2
-rw-r--r--src/battle_util2.c14
-rw-r--r--src/berry_blender.c8
-rwxr-xr-xsrc/berry_crush.c2
-rw-r--r--src/berry_fix_program.c2
-rw-r--r--src/berry_tag_screen.c8
-rw-r--r--src/bg.c1256
-rw-r--r--src/bike.c97
-rw-r--r--src/birch_pc.c8
-rw-r--r--src/blit.c209
-rw-r--r--src/bug.c18
-rw-r--r--src/cable_car.c2
-rw-r--r--src/cable_club.c122
-rw-r--r--src/contest.c23
-rw-r--r--src/contest_link_80F57C4.c10
-rw-r--r--src/contest_painting.c2
-rw-r--r--src/credits.c134
-rw-r--r--src/dark.c10
-rw-r--r--src/data.c2
-rwxr-xr-xsrc/data/field_event_obj/event_object_graphics_info_pointers.h14
-rwxr-xr-xsrc/data/field_event_obj/movement_action_func_tables.h20
-rw-r--r--src/data/party_menu.h1255
-rw-r--r--src/data/script_menu.h8
-rw-r--r--src/data/trade.h1197
-rw-r--r--src/data/union_room.h1044
-rwxr-xr-xsrc/data/wild_encounters.json7
-rwxr-xr-xsrc/data/wild_encounters.json.txt14
-rw-r--r--src/daycare.c15
-rw-r--r--src/decompress.c2
-rw-r--r--src/decoration.c157
-rw-r--r--src/dewford_trend.c2
-rw-r--r--src/diploma.c2
-rw-r--r--src/dma3_manager.c181
-rw-r--r--src/dodrio_berry_picking.c18
-rw-r--r--src/dragon.c12
-rw-r--r--src/easy_chat.c105
-rw-r--r--src/egg_hatch.c2
-rw-r--r--src/electric.c36
-rwxr-xr-xsrc/ereader_helpers.c2
-rwxr-xr-xsrc/ereader_screen.c4
-rw-r--r--src/event_obj_lock.c4
-rw-r--r--src/event_object_movement.c69
-rw-r--r--src/evolution_scene.c60
-rw-r--r--src/field_control_avatar.c30
-rw-r--r--src/field_effect.c8
-rwxr-xr-xsrc/field_effect_helpers.c2
-rw-r--r--src/field_player_avatar.c121
-rw-r--r--src/field_poison.c20
-rw-r--r--src/field_region_map.c2
-rw-r--r--src/field_screen_effect.c168
-rw-r--r--src/field_special_scene.c4
-rw-r--r--src/field_specials.c170
-rw-r--r--src/field_tasks.c17
-rw-r--r--src/field_weather_effect.c2
-rw-r--r--src/fight.c42
-rw-r--r--src/fire.c42
-rw-r--r--src/fldeff_cut.c6
-rw-r--r--src/fldeff_flash.c16
-rw-r--r--src/fldeff_misc.c6
-rw-r--r--src/fldeff_softboiled.c90
-rw-r--r--src/flying.c863
-rw-r--r--src/frontier_pass.c10
-rw-r--r--src/frontier_util.c8
-rw-r--r--src/ghost.c18
-rw-r--r--src/gpu_regs.c195
-rw-r--r--src/graphics.c27
-rw-r--r--src/ground.c14
-rw-r--r--src/hall_of_fame.c2
-rw-r--r--src/ice.c38
-rw-r--r--src/intro.c2
-rw-r--r--src/item.c10
-rw-r--r--src/item_icon.c2
-rwxr-xr-xsrc/item_menu.c71
-rwxr-xr-xsrc/item_use.c117
-rw-r--r--src/libagbsyscall.s116
-rw-r--r--src/link.c37
-rw-r--r--src/link_rfu.c84
-rw-r--r--src/list_menu.c2
-rw-r--r--src/load_save.c2
-rw-r--r--src/mail.c2
-rw-r--r--src/mail_data.c2
-rw-r--r--src/main.c2
-rw-r--r--src/main_menu.c12
-rw-r--r--src/match_call.c24
-rw-r--r--src/mauville_old_man.c340
-rw-r--r--src/menu.c32
-rw-r--r--src/menu_helpers.c12
-rw-r--r--src/menu_specialized.c8
-rw-r--r--src/mevent_801BAAC.c6
-rw-r--r--src/mevent_client.c2
-rw-r--r--src/mevent_server.c2
-rw-r--r--src/mevent_server_helpers.c2
-rw-r--r--src/mirage_tower.c2
-rw-r--r--src/mossdeep_gym.c314
-rw-r--r--src/move_relearner.c6
-rw-r--r--src/mystery_event_menu.c2
-rw-r--r--src/mystery_event_script.c2
-rw-r--r--src/mystery_gift.c2
-rw-r--r--src/naming_screen.c130
-rw-r--r--src/normal.c20
-rw-r--r--src/overworld.c22
-rwxr-xr-xsrc/party_menu.c5710
-rw-r--r--src/player_pc.c10
-rw-r--r--src/poison.c16
-rw-r--r--src/pokeball.c2
-rw-r--r--src/pokeblock.c4
-rw-r--r--src/pokeblock_feed.c2
-rw-r--r--src/pokedex.c16
-rwxr-xr-xsrc/pokedex_area_screen.c2
-rw-r--r--src/pokedex_cry_screen.c2
-rw-r--r--src/pokemon.c37
-rw-r--r--src/pokemon_icon.c18
-rwxr-xr-xsrc/pokemon_jump.c34
-rw-r--r--src/pokemon_size_record.c4
-rw-r--r--src/pokemon_storage_system.c41
-rw-r--r--src/pokemon_summary_screen.c71
-rw-r--r--src/pokenav.c2
-rw-r--r--src/pokenav_unk_2.c2
-rw-r--r--src/post_battle_event_funcs.c2
-rw-r--r--src/psychic.c36
-rw-r--r--src/rayquaza_scene.c2
-rw-r--r--src/record_mixing.c4
-rw-r--r--src/recorded_battle.c2
-rw-r--r--src/region_map.c19
-rw-r--r--src/reset_rtc_screen.c8
-rw-r--r--src/reset_save_heap.c2
-rw-r--r--src/rock.c28
-rw-r--r--src/rom_8034C54.c2
-rw-r--r--src/rom_81520A8.c2
-rw-r--r--src/rotating_tile_puzzle.c338
-rw-r--r--src/roulette.c58
-rw-r--r--src/safari_zone.c16
-rw-r--r--src/scrcmd.c53
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c4
-rw-r--r--src/secret_base.c42
-rwxr-xr-xsrc/shop.c11
-rw-r--r--src/slot_machine.c4
-rw-r--r--src/sprite.c1758
-rw-r--r--src/start_menu.c2
-rw-r--r--src/string_util.c784
-rw-r--r--src/strings.c4
-rw-r--r--src/text.c2540
-rw-r--r--src/trade.c6813
-rw-r--r--src/trader.c8
-rwxr-xr-xsrc/trainer_card.c36
-rw-r--r--src/trainer_hill.c14
-rw-r--r--src/trainer_pokemon_sprites.c2
-rw-r--r--src/trainer_see.c37
-rw-r--r--src/tv.c25
-rw-r--r--src/union_room.c1326
-rw-r--r--src/union_room_battle.c2
-rwxr-xr-xsrc/union_room_chat.c132
-rw-r--r--src/unk_pokedex_area_screen_helper.c2
-rw-r--r--src/use_pokeblock.c2
-rw-r--r--src/water.c52
-rw-r--r--src/wild_encounter.c21
-rw-r--r--src/window.c721
181 files changed, 12825 insertions, 20973 deletions
diff --git a/src/alloc.c b/src/alloc.c
deleted file mode 100644
index 4d1a9fe5c..000000000
--- a/src/alloc.c
+++ /dev/null
@@ -1,210 +0,0 @@
-#include "global.h"
-
-static void *sHeapStart;
-static u32 sHeapSize;
-static u32 malloc_c_unused_0300000c; // needed to align dma3_manager.o(.bss)
-
-#define MALLOC_SYSTEM_ID 0xA3A3
-
-struct MemBlock {
- // Whether this block is currently allocated.
- bool16 flag;
-
- // Magic number used for error checking. Should equal MALLOC_SYSTEM_ID.
- u16 magic;
-
- // Size of the block (not including this header struct).
- u32 size;
-
- // Previous block pointer. Equals sHeapStart if this is the first block.
- struct MemBlock *prev;
-
- // Next block pointer. Equals sHeapStart if this is the last block.
- struct MemBlock *next;
-
- // Data in the memory block. (Arrays of length 0 are a GNU extension.)
- u8 data[0];
-};
-
-void PutMemBlockHeader(void *block, struct MemBlock *prev, struct MemBlock *next, u32 size)
-{
- struct MemBlock *header = (struct MemBlock *)block;
-
- header->flag = FALSE;
- header->magic = MALLOC_SYSTEM_ID;
- header->size = size;
- header->prev = prev;
- header->next = next;
-}
-
-void PutFirstMemBlockHeader(void *block, u32 size)
-{
- PutMemBlockHeader(block, (struct MemBlock *)block, (struct MemBlock *)block, size - sizeof(struct MemBlock));
-}
-
-void *AllocInternal(void *heapStart, u32 size)
-{
- struct MemBlock *pos = (struct MemBlock *)heapStart;
- struct MemBlock *head = pos;
- struct MemBlock *splitBlock;
- u32 foundBlockSize;
-
- // Alignment
- if (size & 3)
- size = 4 * ((size / 4) + 1);
-
- for (;;) {
- // Loop through the blocks looking for unused block that's big enough.
-
- if (!pos->flag) {
- foundBlockSize = pos->size;
-
- if (foundBlockSize >= size) {
- if (foundBlockSize - size < 2 * sizeof(struct MemBlock)) {
- // The block isn't much bigger than the requested size,
- // so just use it.
- pos->flag = TRUE;
- } else {
- // The block is significantly bigger than the requested
- // size, so split the rest into a separate block.
- foundBlockSize -= sizeof(struct MemBlock);
- foundBlockSize -= size;
-
- splitBlock = (struct MemBlock *)(pos->data + size);
-
- pos->flag = TRUE;
- pos->size = size;
-
- PutMemBlockHeader(splitBlock, pos, pos->next, foundBlockSize);
-
- pos->next = splitBlock;
-
- if (splitBlock->next != head)
- splitBlock->next->prev = splitBlock;
- }
-
- return pos->data;
- }
- }
-
- if (pos->next == head)
- return NULL;
-
- pos = pos->next;
- }
-}
-
-void FreeInternal(void *heapStart, void *pointer)
-{
- if (pointer) {
- struct MemBlock *head = (struct MemBlock *)heapStart;
- struct MemBlock *block = (struct MemBlock *)((u8 *)pointer - sizeof(struct MemBlock));
- block->flag = FALSE;
-
- // If the freed block isn't the last one, merge with the next block
- // if it's not in use.
- if (block->next != head) {
- if (!block->next->flag) {
- block->size += sizeof(struct MemBlock) + block->next->size;
- block->next->magic = 0;
- block->next = block->next->next;
- if (block->next != head)
- block->next->prev = block;
- }
- }
-
- // If the freed block isn't the first one, merge with the previous block
- // if it's not in use.
- if (block != head) {
- if (!block->prev->flag) {
- block->prev->next = block->next;
-
- if (block->next != head)
- block->next->prev = block->prev;
-
- block->magic = 0;
- block->prev->size += sizeof(struct MemBlock) + block->size;
- }
- }
- }
-}
-
-void *AllocZeroedInternal(void *heapStart, u32 size)
-{
- void *mem = AllocInternal(heapStart, size);
-
- if (mem != NULL) {
- if (size & 3)
- size = 4 * ((size / 4) + 1);
-
- CpuFill32(0, mem, size);
- }
-
- return mem;
-}
-
-bool32 CheckMemBlockInternal(void *heapStart, void *pointer)
-{
- struct MemBlock *head = (struct MemBlock *)heapStart;
- struct MemBlock *block = (struct MemBlock *)((u8 *)pointer - sizeof(struct MemBlock));
-
- if (block->magic != MALLOC_SYSTEM_ID)
- return FALSE;
-
- if (block->next->magic != MALLOC_SYSTEM_ID)
- return FALSE;
-
- if (block->next != head && block->next->prev != block)
- return FALSE;
-
- if (block->prev->magic != MALLOC_SYSTEM_ID)
- return FALSE;
-
- if (block->prev != head && block->prev->next != block)
- return FALSE;
-
- if (block->next != head && block->next != (struct MemBlock *)(block->data + block->size))
- return FALSE;
-
- return TRUE;
-}
-
-void InitHeap(void *heapStart, u32 heapSize)
-{
- sHeapStart = heapStart;
- sHeapSize = heapSize;
- PutFirstMemBlockHeader(heapStart, heapSize);
-}
-
-void *Alloc(u32 size)
-{
- return AllocInternal(sHeapStart, size);
-}
-
-void *AllocZeroed(u32 size)
-{
- return AllocZeroedInternal(sHeapStart, size);
-}
-
-void Free(void *pointer)
-{
- FreeInternal(sHeapStart, pointer);
-}
-
-bool32 CheckMemBlock(void *pointer)
-{
- return CheckMemBlockInternal(sHeapStart, pointer);
-}
-
-bool32 CheckHeap()
-{
- struct MemBlock *pos = (struct MemBlock *)sHeapStart;
-
- do {
- if (!CheckMemBlockInternal(sHeapStart, pos->data))
- return FALSE;
- pos = pos->next;
- } while (pos != (struct MemBlock *)sHeapStart);
-
- return TRUE;
-}
diff --git a/src/apprentice.c b/src/apprentice.c
index 113b22f6e..189647991 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -10,7 +10,7 @@
#include "item.h"
#include "item_menu.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "new_game.h"
#include "party_menu.h"
diff --git a/src/battle_anim.c b/src/battle_anim.c
index ab1e5ed6a..25abbfece 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -114,7 +114,7 @@ EWRAM_DATA u8 gBattleAnimTarget = 0;
EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gUnknown_02038440 = 0;
-const struct OamData gUnknown_08524904 =
+const struct OamData gOamData_AffineOff_ObjNormal_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -129,7 +129,7 @@ const struct OamData gUnknown_08524904 =
};
-const struct OamData gUnknown_0852490C =
+const struct OamData gOamData_AffineOff_ObjNormal_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -143,7 +143,7 @@ const struct OamData gUnknown_0852490C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524914 =
+const struct OamData gOamData_AffineOff_ObjNormal_32x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -157,7 +157,7 @@ const struct OamData gUnknown_08524914 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852491C =
+const struct OamData gOamData_AffineOff_ObjNormal_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -171,7 +171,7 @@ const struct OamData gUnknown_0852491C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524924 =
+const struct OamData gOamData_AffineOff_ObjNormal_16x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -185,7 +185,7 @@ const struct OamData gUnknown_08524924 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852492C =
+const struct OamData gOamData_AffineOff_ObjNormal_32x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -199,7 +199,7 @@ const struct OamData gUnknown_0852492C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524934 =
+const struct OamData gOamData_AffineOff_ObjNormal_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -213,7 +213,7 @@ const struct OamData gUnknown_08524934 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852493C =
+const struct OamData gOamData_AffineOff_ObjNormal_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -227,7 +227,7 @@ const struct OamData gUnknown_0852493C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524944 =
+const struct OamData gOamData_AffineOff_ObjNormal_8x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -241,7 +241,7 @@ const struct OamData gUnknown_08524944 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852494C =
+const struct OamData gOamData_AffineOff_ObjNormal_8x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -255,7 +255,7 @@ const struct OamData gUnknown_0852494C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524954 =
+const struct OamData gOamData_AffineOff_ObjNormal_16x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -269,7 +269,7 @@ const struct OamData gUnknown_08524954 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852495C =
+const struct OamData gOamData_AffineOff_ObjNormal_32x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -283,7 +283,7 @@ const struct OamData gUnknown_0852495C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524964 =
+const struct OamData gOamData_AffineNormal_ObjNormal_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -297,7 +297,7 @@ const struct OamData gUnknown_08524964 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852496C =
+const struct OamData gOamData_AffineNormal_ObjNormal_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -311,7 +311,7 @@ const struct OamData gUnknown_0852496C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524974 =
+const struct OamData gOamData_AffineNormal_ObjNormal_32x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -325,7 +325,7 @@ const struct OamData gUnknown_08524974 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852497C =
+const struct OamData gOamData_AffineNormal_ObjNormal_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -339,7 +339,7 @@ const struct OamData gUnknown_0852497C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524984 =
+const struct OamData gOamData_AffineNormal_ObjNormal_16x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -353,7 +353,7 @@ const struct OamData gUnknown_08524984 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852498C =
+const struct OamData gOamData_AffineNormal_ObjNormal_32x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -367,7 +367,7 @@ const struct OamData gUnknown_0852498C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524994 =
+const struct OamData gOamData_AffineNormal_ObjNormal_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -381,7 +381,7 @@ const struct OamData gUnknown_08524994 =
.paletteNum = 0,
};
-const struct OamData gUnknown_0852499C =
+const struct OamData gOamData_AffineNormal_ObjNormal_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -395,7 +395,7 @@ const struct OamData gUnknown_0852499C =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249A4 =
+const struct OamData gOamData_AffineNormal_ObjNormal_8x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -409,7 +409,7 @@ const struct OamData gUnknown_085249A4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249AC =
+const struct OamData gOamData_AffineNormal_ObjNormal_8x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -423,7 +423,7 @@ const struct OamData gUnknown_085249AC =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249B4 =
+const struct OamData gOamData_AffineNormal_ObjNormal_16x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -437,7 +437,7 @@ const struct OamData gUnknown_085249B4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249BC =
+const struct OamData gOamData_AffineNormal_ObjNormal_32x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -451,7 +451,7 @@ const struct OamData gUnknown_085249BC =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249C4 =
+const struct OamData gOamData_AffineDouble_ObjNormal_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -465,7 +465,7 @@ const struct OamData gUnknown_085249C4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249CC =
+const struct OamData gOamData_AffineDouble_ObjNormal_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -479,7 +479,7 @@ const struct OamData gUnknown_085249CC =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249D4 =
+const struct OamData gOamData_AffineDouble_ObjNormal_32x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -493,7 +493,7 @@ const struct OamData gUnknown_085249D4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249DC =
+const struct OamData gOamData_AffineDouble_ObjNormal_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -507,7 +507,7 @@ const struct OamData gUnknown_085249DC =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249E4 =
+const struct OamData gOamData_AffineDouble_ObjNormal_16x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -521,7 +521,7 @@ const struct OamData gUnknown_085249E4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249EC =
+const struct OamData gOamData_AffineDouble_ObjNormal_32x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -535,7 +535,7 @@ const struct OamData gUnknown_085249EC =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249F4 =
+const struct OamData gOamData_AffineDouble_ObjNormal_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -549,7 +549,7 @@ const struct OamData gUnknown_085249F4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_085249FC =
+const struct OamData gOamData_AffineDouble_ObjNormal_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -563,7 +563,7 @@ const struct OamData gUnknown_085249FC =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A04 =
+const struct OamData gOamData_AffineDouble_ObjNormal_8x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -577,7 +577,7 @@ const struct OamData gUnknown_08524A04 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A0C =
+const struct OamData gOamData_AffineDouble_ObjNormal_8x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -591,7 +591,7 @@ const struct OamData gUnknown_08524A0C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A14 =
+const struct OamData gOamData_AffineDouble_ObjNormal_16x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -605,7 +605,7 @@ const struct OamData gUnknown_08524A14 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A1C =
+const struct OamData gOamData_AffineDouble_ObjNormal_32x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -619,7 +619,7 @@ const struct OamData gUnknown_08524A1C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A24 =
+const struct OamData gOamData_AffineOff_ObjBlend_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -633,7 +633,7 @@ const struct OamData gUnknown_08524A24 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A2C =
+const struct OamData gOamData_AffineOff_ObjBlend_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -647,7 +647,7 @@ const struct OamData gUnknown_08524A2C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A34 =
+const struct OamData gOamData_AffineOff_ObjBlend_32x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -661,7 +661,7 @@ const struct OamData gUnknown_08524A34 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A3C =
+const struct OamData gOamData_AffineOff_ObjBlend_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -675,7 +675,7 @@ const struct OamData gUnknown_08524A3C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A44 =
+const struct OamData gOamData_AffineOff_ObjBlend_16x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -689,7 +689,7 @@ const struct OamData gUnknown_08524A44 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A4C =
+const struct OamData gOamData_AffineOff_ObjBlend_32x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -703,7 +703,7 @@ const struct OamData gUnknown_08524A4C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A54 =
+const struct OamData gOamData_AffineOff_ObjBlend_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -717,7 +717,7 @@ const struct OamData gUnknown_08524A54 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A5C =
+const struct OamData gOamData_AffineOff_ObjBlend_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -731,7 +731,7 @@ const struct OamData gUnknown_08524A5C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A64 =
+const struct OamData gOamData_AffineOff_ObjBlend_8x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -745,7 +745,7 @@ const struct OamData gUnknown_08524A64 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A6C =
+const struct OamData gOamData_AffineOff_ObjBlend_8x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -759,7 +759,7 @@ const struct OamData gUnknown_08524A6C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A74 =
+const struct OamData gOamData_AffineOff_ObjBlend_16x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -773,7 +773,7 @@ const struct OamData gUnknown_08524A74 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A7C =
+const struct OamData gOamData_AffineOff_ObjBlend_32x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -787,7 +787,7 @@ const struct OamData gUnknown_08524A7C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A84 =
+const struct OamData gOamData_AffineNormal_ObjBlend_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -801,7 +801,7 @@ const struct OamData gUnknown_08524A84 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A8C =
+const struct OamData gOamData_AffineNormal_ObjBlend_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -815,7 +815,7 @@ const struct OamData gUnknown_08524A8C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A94 =
+const struct OamData gOamData_AffineNormal_ObjBlend_32x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -829,7 +829,7 @@ const struct OamData gUnknown_08524A94 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524A9C =
+const struct OamData gOamData_AffineNormal_ObjBlend_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -843,7 +843,7 @@ const struct OamData gUnknown_08524A9C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AA4 =
+const struct OamData gOamData_AffineNormal_ObjBlend_16x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -857,7 +857,7 @@ const struct OamData gUnknown_08524AA4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AAC =
+const struct OamData gOamData_AffineNormal_ObjBlend_32x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -871,7 +871,7 @@ const struct OamData gUnknown_08524AAC =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AB4 =
+const struct OamData gOamData_AffineNormal_ObjBlend_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -885,7 +885,7 @@ const struct OamData gUnknown_08524AB4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524ABC =
+const struct OamData gOamData_AffineNormal_ObjBlend_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -899,7 +899,7 @@ const struct OamData gUnknown_08524ABC =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AC4 =
+const struct OamData gOamData_AffineNormal_ObjBlend_8x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -913,7 +913,7 @@ const struct OamData gUnknown_08524AC4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524ACC =
+const struct OamData gOamData_AffineNormal_ObjBlend_8x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -927,7 +927,7 @@ const struct OamData gUnknown_08524ACC =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AD4 =
+const struct OamData gOamData_AffineNormal_ObjBlend_16x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -941,7 +941,7 @@ const struct OamData gUnknown_08524AD4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524ADC =
+const struct OamData gOamData_AffineNormal_ObjBlend_32x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
@@ -955,7 +955,7 @@ const struct OamData gUnknown_08524ADC =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AE4 =
+const struct OamData gOamData_AffineDouble_ObjBlend_8x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -969,7 +969,7 @@ const struct OamData gUnknown_08524AE4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AEC =
+const struct OamData gOamData_AffineDouble_ObjBlend_16x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -983,7 +983,7 @@ const struct OamData gUnknown_08524AEC =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AF4 =
+const struct OamData gOamData_AffineDouble_ObjBlend_32x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -997,7 +997,7 @@ const struct OamData gUnknown_08524AF4 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524AFC =
+const struct OamData gOamData_AffineDouble_ObjBlend_64x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -1011,7 +1011,7 @@ const struct OamData gUnknown_08524AFC =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524B04 =
+const struct OamData gOamData_AffineDouble_ObjBlend_16x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -1025,7 +1025,7 @@ const struct OamData gUnknown_08524B04 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524B0C =
+const struct OamData gOamData_AffineDouble_ObjBlend_32x8 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -1039,7 +1039,7 @@ const struct OamData gUnknown_08524B0C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524B14 =
+const struct OamData gOamData_AffineDouble_ObjBlend_32x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -1053,7 +1053,7 @@ const struct OamData gUnknown_08524B14 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524B1C =
+const struct OamData gOamData_AffineDouble_ObjBlend_64x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -1067,7 +1067,7 @@ const struct OamData gUnknown_08524B1C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524B24 =
+const struct OamData gOamData_AffineDouble_ObjBlend_8x16 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -1081,7 +1081,7 @@ const struct OamData gUnknown_08524B24 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524B2C =
+const struct OamData gOamData_AffineDouble_ObjBlend_8x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -1095,7 +1095,7 @@ const struct OamData gUnknown_08524B2C =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524B34 =
+const struct OamData gOamData_AffineDouble_ObjBlend_16x32 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
@@ -1109,7 +1109,7 @@ const struct OamData gUnknown_08524B34 =
.paletteNum = 0,
};
-const struct OamData gUnknown_08524B3C =
+const struct OamData gOamData_AffineDouble_ObjBlend_32x64 =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_DOUBLE,
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index db9057cb4..1efa860d3 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle_anim.h"
#include "battle_interface.h"
#include "decompress.h"
@@ -41,43 +41,43 @@ void AnimKnockOffItem(struct Sprite *);
void AnimPresentHealParticle(struct Sprite *);
void AnimItemSteal(struct Sprite *);
void AnimTrickBag(struct Sprite *);
-void sub_8100640(struct Sprite *);
-void sub_8100898(struct Sprite *);
+void AnimFlyingParticle(struct Sprite *);
+void AnimNeedleArmSpike(struct Sprite *);
void sub_81009F8(struct Sprite *);
-void sub_8100A50(struct Sprite *);
+void AnimWhipHit(struct Sprite *);
void sub_8100A94(struct Sprite *);
void AnimCuttingSlice(struct Sprite *);
-void sub_8100B88(struct Sprite *);
+void AnimAirCutterSlice(struct Sprite *);
void sub_8100E1C(struct Sprite *);
-void sub_8100EF0(struct Sprite *);
-void sub_81010CC(struct Sprite *);
-void sub_810130C(struct Sprite *);
-void sub_810135C(struct Sprite *);
+void AnimProtect(struct Sprite *);
+void AnimMilkBottle(struct Sprite *);
+void AnimGrantingStars(struct Sprite *);
+void AnimSparkingStars(struct Sprite *);
void sub_8101440(struct Sprite *);
-void sub_81014F4(struct Sprite *);
-void sub_81015AC(struct Sprite *);
-void sub_8101898(struct Sprite *);
-void sub_8101940(struct Sprite *);
+void AnimSleepLetterZ(struct Sprite *);
+void AnimLockOnTarget(struct Sprite *);
+void AnimLockOnMoveTarget(struct Sprite *);
+void AnimBowMon(struct Sprite *);
void sub_8101B90(struct Sprite *);
-void sub_8101F40(struct Sprite *);
-void sub_8101FA8(struct Sprite *);
-void sub_8101FF0(struct Sprite *);
-void sub_81020D8(struct Sprite *);
-void sub_810217C(struct Sprite *);
-void sub_8102268(struct Sprite *);
-void sub_810234C(struct Sprite *);
-void sub_81024E0(struct Sprite *);
-void sub_8102540(struct Sprite *);
-void sub_8102844(struct Sprite *);
-void sub_8102BCC(struct Sprite *);
-void sub_8102CD4(struct Sprite *);
-void sub_8102EB0(struct Sprite *);
-void sub_8102FB8(struct Sprite *);
-void sub_8103028(struct Sprite *);
-void sub_8103164(struct Sprite *);
-void sub_8103208(struct Sprite *);
-void sub_8103284(struct Sprite *);
-void sub_8103390(struct Sprite *);
+void AnimSlashSlice(struct Sprite *);
+void AnimFalseSwipeSlice(struct Sprite *);
+void AnimFalseSwipePositionedSlice(struct Sprite *);
+void AnimEndureEnergy(struct Sprite *);
+void AnimSharpenSphere(struct Sprite *);
+void AnimConversion(struct Sprite *);
+void AnimConversion2(struct Sprite *);
+void AnimMoon(struct Sprite *);
+void AnimMoonlightSparkle(struct Sprite *);
+void AnimHornHit(struct Sprite *);
+void AnimSuperFang(struct Sprite *);
+void AnimWavyMusicNotes(struct Sprite *);
+void AnimFlyingMusicNotes(struct Sprite *);
+void AnimBellyDrumHand(struct Sprite *);
+void AnimSlowFlyingMusicNotes(struct Sprite *);
+void AnimThoughtBubble(struct Sprite *);
+void AnimMetronomeFinger(struct Sprite *);
+void AnimFollowMeFinger(struct Sprite *);
+void AnimTauntFinger(struct Sprite *);
static void AnimMovePowderParticleStep(struct Sprite *);
static void AnimSolarbeamSmallOrbStep(struct Sprite *);
static void AnimAbsorptionOrbStep(struct Sprite *);
@@ -93,64 +93,64 @@ static void AnimTranslateLinearSingleSineWaveStep(struct Sprite *);
static void AnimMoveTwisterParticleStep(struct Sprite *);
static void AnimConstrictBindingStep1(struct Sprite *);
static void AnimConstrictBindingStep2(struct Sprite *);
-static void sub_80FF53C(u8);
-static void sub_80FF5CC(u8);
-static void AnimItemStealStep(struct Sprite *);
+static void AnimTask_DuplicateAndShrinkToPosStep1(u8);
+static void AnimTask_DuplicateAndShrinkToPosStep2(u8);
+static void AnimItemStealStep3(struct Sprite *);
static void AnimRootFlickerOut(struct Sprite *);
static void AnimTrickBagStep1(struct Sprite *);
static void AnimTrickBagStep2(struct Sprite *);
static void AnimTrickBagStep3(struct Sprite *);
-static void sub_8100128(u8);
-static s16 sub_8100504(struct Sprite *);
-static void sub_8100524(struct Task *, u8);
-static void sub_80CC408(struct Sprite *);
-static void sub_810074C(struct Sprite *);
-static void sub_81009A0(struct Sprite *);
+static void AnimTask_LeafBladeStep(u8);
+static s16 LeafBladeGetPosFactor(struct Sprite *);
+static void AnimTask_LeafBladeStep2(struct Task *, u8);
+static void AnimTask_LeafBladeStep2_Callback(struct Sprite *);
+static void AnimFlyingParticleStep(struct Sprite *);
+static void AnimNeedleArmSpikeStep(struct Sprite *);
static void AnimSliceStep(struct Sprite *);
static void sub_8100E80(struct Sprite *);
-static void sub_8100FD4(struct Sprite *);
-static void sub_8101138(struct Sprite *);
-static void sub_8101298(struct Sprite *, int, int);
+static void AnimProtectStep(struct Sprite *);
+static void AnimMilkBottleStep1(struct Sprite *);
+static void AnimMilkBottleStep2(struct Sprite *, int, int);
static void sub_81014A0(struct Sprite *);
-static void sub_8101560(struct Sprite *);
-static void sub_81015D4(struct Sprite *);
-static void sub_8101684(struct Sprite *);
-static void sub_81016B8(struct Sprite *);
-static void sub_8101774(struct Sprite *);
-static void sub_8101820(struct Sprite *);
-static void sub_8101848(struct Sprite *);
-static void sub_8101998(struct Sprite *);
-static void sub_81019E8(struct Sprite *);
-static void sub_8101A74(struct Sprite *);
-static void sub_8101AC4(struct Sprite *);
-static void sub_8101B84(struct Sprite *);
-static void sub_8101AE8(struct Sprite *);
+static void AnimSleepLetterZStep(struct Sprite *);
+static void AnimLockOnTargetStep1(struct Sprite *);
+static void AnimLockOnTargetStep2(struct Sprite *);
+static void AnimLockOnTargetStep3(struct Sprite *);
+static void AnimLockOnTargetStep4(struct Sprite *);
+static void AnimLockOnTargetStep5(struct Sprite *);
+static void AnimLockOnTargetStep6(struct Sprite *);
+static void AnimBowMonStep1(struct Sprite *);
+static void AnimBowMonStep1_Callback(struct Sprite *);
+static void AnimBowMonStep2(struct Sprite *);
+static void AnimBowMonStep3(struct Sprite *);
+static void AnimBowMonStep4(struct Sprite *);
+static void AnimBowMonStep3_Callback(struct Sprite *);
static void sub_8101BA0(struct Sprite *);
-static void sub_8101D2C(u8);
-static void sub_8101EEC(u8);
-static void sub_8102044(struct Sprite *);
-static void sub_810207C(struct Sprite *);
-static void sub_810208C(struct Sprite *);
-static void sub_810213C(struct Sprite *);
-static void sub_81021CC(struct Sprite *);
-static void sub_810237C(struct Sprite *);
-static void sub_8102528(struct Sprite *);
-static void sub_8102584(struct Sprite *);
-static void sub_810296C(struct Sprite *);
-static void sub_8102AE0(u8);
-static void sub_8102B3C(struct Sprite *);
-static void sub_8102D8C(s16, s16, s16 *, s16 *, s8);
-static void sub_8102DE4(struct Sprite *);
-static void sub_8102F40(struct Sprite *);
-static void sub_81030B0(struct Sprite *);
-static void sub_81031D0(struct Sprite *);
-static void sub_8103250(struct Sprite *);
-static void sub_8103300(struct Sprite *);
-static void sub_8103320(struct Sprite *);
-static void sub_81033F0(struct Sprite *);
-static void sub_810342C(struct Sprite *);
-
-const union AnimCmd gUnknown_085920F0[] =
+static void AnimTask_SkullBashPositionSet(u8);
+static void AnimTask_SkullBashPositionReset(u8);
+static void AnimFalseSwipeSliceStep1(struct Sprite *);
+static void AnimFalseSwipeSliceStep2(struct Sprite *);
+static void AnimFalseSwipeSliceStep3(struct Sprite *);
+static void AnimEndureEnergyStep(struct Sprite *);
+static void AnimSharpenSphereStep(struct Sprite *);
+static void AnimConversion2Step(struct Sprite *);
+static void AnimMoonStep(struct Sprite *);
+static void AnimMoonlightSparkleStep(struct Sprite *);
+static void AnimHornHitStep(struct Sprite *);
+static void AnimTask_DoubleTeamStep(u8);
+static void AnimTask_DoubleTeamCallback(struct Sprite *);
+static void AnimWavyMusicNotesGetNextPos(s16, s16, s16 *, s16 *, s8);
+static void AnimWavyMusicNotesStep(struct Sprite *);
+static void AnimFlyingMusicNotesStep(struct Sprite *);
+static void AnimSlowFlyingMusicNotesStep(struct Sprite *);
+static void AnimThoughtBubbleStep(struct Sprite *);
+static void AnimMetronomeFingerStep(struct Sprite *);
+static void AnimFollowMeFingerStep1(struct Sprite *);
+static void AnimFollowMeFingerStep2(struct Sprite *);
+static void AnimTauntFingerStep1(struct Sprite *);
+static void AnimTauntFingerStep2(struct Sprite *);
+
+const union AnimCmd gPowderParticlesAnimCmds[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(2, 5),
@@ -163,17 +163,17 @@ const union AnimCmd gUnknown_085920F0[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_08592114[] =
+const union AnimCmd *const gPowderParticlesAnimTable[] =
{
- gUnknown_085920F0,
+ gPowderParticlesAnimCmds,
};
const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_SLEEP_POWDER,
.paletteTag = ANIM_TAG_SLEEP_POWDER,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
+ .oam = &gOamData_AffineOff_ObjNormal_8x16,
+ .anims = gPowderParticlesAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMovePowderParticle,
@@ -183,8 +183,8 @@ const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_STUN_SPORE,
.paletteTag = ANIM_TAG_STUN_SPORE,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
+ .oam = &gOamData_AffineOff_ObjNormal_8x16,
+ .anims = gPowderParticlesAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMovePowderParticle,
@@ -194,105 +194,105 @@ const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_POWDER,
.paletteTag = ANIM_TAG_POISON_POWDER,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
+ .oam = &gOamData_AffineOff_ObjNormal_8x16,
+ .anims = gPowderParticlesAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMovePowderParticle,
};
-const union AnimCmd gUnknown_08592160[] =
+const union AnimCmd gSolarbeamBigOrbAnimCmds1[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592168[] =
+const union AnimCmd gSolarbeamBigOrbAnimCmds2[] =
{
ANIMCMD_FRAME(1, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592170[] =
+const union AnimCmd gSolarbeamBigOrbAnimCmds3[] =
{
ANIMCMD_FRAME(2, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592178[] =
+const union AnimCmd gSolarbeamBigOrbAnimCmds4[] =
{
ANIMCMD_FRAME(3, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592180[] =
+const union AnimCmd gSolarbeamBigOrbAnimCmds5[] =
{
ANIMCMD_FRAME(4, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592188[] =
+const union AnimCmd gSolarbeamBigOrbAnimCmds6[] =
{
ANIMCMD_FRAME(5, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592190[] =
+const union AnimCmd gSolarbeamBigOrbAnimCmds7[] =
{
ANIMCMD_FRAME(6, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592198[] =
+const union AnimCmd gSolarbeamSmallOrbAnimCms[] =
{
ANIMCMD_FRAME(7, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085921A0[] =
+const union AnimCmd gPowerAbsorptionOrbAnimCmds[] =
{
ANIMCMD_FRAME(8, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085921A8[] =
+const union AnimCmd *const gSolarbeamBigOrbAnimTable[] =
{
- gUnknown_08592160,
- gUnknown_08592168,
- gUnknown_08592170,
- gUnknown_08592178,
- gUnknown_08592180,
- gUnknown_08592188,
- gUnknown_08592190,
+ gSolarbeamBigOrbAnimCmds1,
+ gSolarbeamBigOrbAnimCmds2,
+ gSolarbeamBigOrbAnimCmds3,
+ gSolarbeamBigOrbAnimCmds4,
+ gSolarbeamBigOrbAnimCmds5,
+ gSolarbeamBigOrbAnimCmds6,
+ gSolarbeamBigOrbAnimCmds7,
};
-const union AnimCmd *const gUnknown_085921C4[] =
+const union AnimCmd *const gSolarbeamSmallOrbAnimTable[] =
{
- gUnknown_08592198,
+ gSolarbeamSmallOrbAnimCms,
};
-const union AnimCmd *const gUnknown_085921C8[] =
+const union AnimCmd *const gPowerAbsorptionOrbAnimTable[] =
{
- gUnknown_085921A0,
+ gPowerAbsorptionOrbAnimCmds,
};
-const union AffineAnimCmd gUnknown_085921CC[] = {
+const union AffineAnimCmd gPowerAbsorptionOrbAffineAnimCmds[] = {
AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_085921DC[] = {
- gUnknown_085921CC,
+const union AffineAnimCmd *const gPowerAbsorptionOrbAffineAnimTable[] = {
+ gPowerAbsorptionOrbAffineAnimCmds,
};
const struct SpriteTemplate gPowerAbsorptionOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524A8C,
- .anims = gUnknown_085921C8,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085921DC,
+ .affineAnims = gPowerAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb,
};
@@ -300,8 +300,8 @@ const struct SpriteTemplate gSolarbeamBigOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921A8,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarbeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSolarbeamBigOrb,
@@ -311,51 +311,51 @@ const struct SpriteTemplate gSolarbeamSmallOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921C4,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarbeamSmallOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSolarbeamSmallOrb,
};
-const union AffineAnimCmd gUnknown_08592228[] = {
+const union AffineAnimCmd gStockpileAbsorptionOrbAffineCmds[] = {
AFFINEANIMCMD_FRAME(320, 320, 0, 0),
AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd *const gUnknown_08592240[] = {
- gUnknown_08592228,
+const union AffineAnimCmd *const gStockpileAbsorptionOrbAffineAnimTable[] = {
+ gStockpileAbsorptionOrbAffineCmds,
};
const struct SpriteTemplate gStockpileAbsorptionOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_GRAY_ORB,
.paletteTag = ANIM_TAG_GRAY_ORB,
- .oam = &gUnknown_085249C4,
+ .oam = &gOamData_AffineDouble_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592240,
+ .affineAnims = gStockpileAbsorptionOrbAffineAnimTable,
.callback = AnimPowerAbsorptionOrb,
};
-const union AffineAnimCmd gUnknown_0859225C[] = {
+const union AffineAnimCmd gAbsorptionOrbAffineAnimCmds[] = {
AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_0859226C[] = {
- gUnknown_0859225C,
+const union AffineAnimCmd *const gAbsorptionOrbAffineAnimTable[] = {
+ gAbsorptionOrbAffineAnimCmds,
};
const struct SpriteTemplate gAbsorptionOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524A8C,
- .anims = gUnknown_085921C8,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
- .affineAnims = gUnknown_0859226C,
+ .affineAnims = gAbsorptionOrbAffineAnimTable,
.callback = AnimAbsorptionOrb,
};
@@ -363,100 +363,100 @@ const struct SpriteTemplate gHyperBeamOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921A8,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gSolarbeamBigOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimHyperBeamOrb,
};
-const union AnimCmd gUnknown_085922A0[] =
+const union AnimCmd gLeechSeedAnimCmds1[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085922A8[] =
+const union AnimCmd gLeechSeedAnimCmds2[] =
{
ANIMCMD_FRAME(4, 7),
ANIMCMD_FRAME(8, 7),
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_085922B4[] =
+const union AnimCmd *const gLeechSeedAnimTable[] =
{
- gUnknown_085922A0,
- gUnknown_085922A8,
+ gLeechSeedAnimCmds1,
+ gLeechSeedAnimCmds2,
};
const struct SpriteTemplate gLeechSeedSpriteTemplate =
{
.tileTag = ANIM_TAG_SEED,
.paletteTag = ANIM_TAG_SEED,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085922B4,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gLeechSeedAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimLeechSeed,
};
-const union AnimCmd gUnknown_085922D4[] =
+const union AnimCmd gSporeParticleAnimCmds1[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085922DC[] =
+const union AnimCmd gSporeParticleAnimCmds2[] =
{
ANIMCMD_FRAME(4, 7),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085922E4[] =
+const union AnimCmd *const gSporeParticleAnimTable[] =
{
- gUnknown_085922D4,
- gUnknown_085922DC,
+ gSporeParticleAnimCmds1,
+ gSporeParticleAnimCmds2,
};
const struct SpriteTemplate gSporeParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_SPORE,
.paletteTag = ANIM_TAG_SPORE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085922E4,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gSporeParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSporeParticle,
};
-const union AnimCmd gUnknown_08592304[] =
+const union AnimCmd gPetalDanceBigFlowerAnimCmds[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_0859230C[] =
+const union AnimCmd gPetalDanceSmallFlowerAnimCmds[] =
{
ANIMCMD_FRAME(4, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592314[] =
+const union AnimCmd *const gPetalDanceBigFlowerAnimTable[] =
{
- gUnknown_08592304,
+ gPetalDanceBigFlowerAnimCmds,
};
-const union AnimCmd *const gUnknown_08592318[] =
+const union AnimCmd *const gPetalDanceSmallFlowerAnimTable[] =
{
- gUnknown_0859230C,
+ gPetalDanceSmallFlowerAnimCmds,
};
const struct SpriteTemplate gPetalDanceBigFlowerSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592314,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gPetalDanceBigFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimPetalDanceBigFlower,
@@ -466,14 +466,14 @@ const struct SpriteTemplate gPetalDanceSmallFlowerSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592318,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gPetalDanceSmallFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimPetalDanceSmallFlower,
};
-const union AnimCmd gUnknown_0859234C[] =
+const union AnimCmd gRazorLeafParticleAnimCmds1[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(4, 5),
@@ -488,7 +488,7 @@ const union AnimCmd gUnknown_0859234C[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd gUnknown_08592378[] =
+const union AnimCmd gRazorLeafParticleAnimCmds2[] =
{
ANIMCMD_FRAME(24, 5),
ANIMCMD_FRAME(28, 5),
@@ -496,18 +496,18 @@ const union AnimCmd gUnknown_08592378[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592388[] =
+const union AnimCmd *const gRazorLeafParticleAnimTable[] =
{
- gUnknown_0859234C,
- gUnknown_08592378,
+ gRazorLeafParticleAnimCmds1,
+ gRazorLeafParticleAnimCmds2,
};
const struct SpriteTemplate gRazorLeafParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592388,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimRazorLeafParticle,
@@ -517,14 +517,14 @@ const struct SpriteTemplate gTwisterLeafParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592388,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gRazorLeafParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMoveTwisterParticle,
};
-const union AnimCmd gUnknown_085923C0[] =
+const union AnimCmd gRazorLeafCutterAnimCmds[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
@@ -533,43 +533,43 @@ const union AnimCmd gUnknown_085923C0[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_085923D4[] =
+const union AnimCmd *const gRazorLeafCutterAnimTable[] =
{
- gUnknown_085923C0,
+ gRazorLeafCutterAnimCmds,
};
const struct SpriteTemplate gRazorLeafCutterSpriteTemplate =
{
.tileTag = ANIM_TAG_RAZOR_LEAF,
.paletteTag = ANIM_TAG_RAZOR_LEAF,
- .oam = &gUnknown_08524934,
- .anims = gUnknown_085923D4,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gRazorLeafCutterAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimTranslateLinearSingleSineWave,
};
-const union AffineAnimCmd gUnknown_085923F0[] = {
+const union AffineAnimCmd gSwiftStarAffineAnimCmds[] = {
AFFINEANIMCMD_FRAME(0, 0, 0, 1),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_08592400[] = {
- gUnknown_085923F0,
+const union AffineAnimCmd *const gSwiftStarAffineAnimTable[] = {
+ gSwiftStarAffineAnimCmds,
};
const struct SpriteTemplate gSwiftStarSpriteTemplate =
{
.tileTag = ANIM_TAG_YELLOW_STAR,
.paletteTag = ANIM_TAG_YELLOW_STAR,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592400,
+ .affineAnims = gSwiftStarAffineAnimTable,
.callback = AnimTranslateLinearSingleSineWave,
};
-const union AnimCmd gUnknown_0859241C[] =
+const union AnimCmd gConstrictBindingAnimCmds1[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(32, 4),
@@ -578,7 +578,7 @@ const union AnimCmd gUnknown_0859241C[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592430[] =
+const union AnimCmd gConstrictBindingAnimCmds2[] =
{
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
@@ -587,70 +587,70 @@ const union AnimCmd gUnknown_08592430[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592444[] =
+const union AnimCmd *const gConstrictBindingAnimTable[] =
{
- gUnknown_0859241C,
- gUnknown_08592430,
+ gConstrictBindingAnimCmds1,
+ gConstrictBindingAnimCmds2,
};
-const union AffineAnimCmd gUnknown_0859244C[] = {
+const union AffineAnimCmd gConstrictBindingAffineAnimCmds1[] = {
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
AFFINEANIMCMD_FRAME(11, 0, 0, 6),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_0859246C[] = {
+const union AffineAnimCmd gConstrictBindingAffineAnimCmds2[] = {
AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(11, 0, 0, 6),
AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_0859248C[] = {
- gUnknown_0859244C,
- gUnknown_0859246C,
+const union AffineAnimCmd *const gConstrictBindingAffineAnimTable[] = {
+ gConstrictBindingAffineAnimCmds1,
+ gConstrictBindingAffineAnimCmds2,
};
const struct SpriteTemplate gConstrictBindingSpriteTemplate =
{
.tileTag = ANIM_TAG_TENDRILS,
.paletteTag = ANIM_TAG_TENDRILS,
- .oam = &gUnknown_0852499C,
- .anims = gUnknown_08592444,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x32,
+ .anims = gConstrictBindingAnimTable,
.images = NULL,
- .affineAnims = gUnknown_0859248C,
+ .affineAnims = gConstrictBindingAffineAnimTable,
.callback = AnimConstrictBinding,
};
-const union AffineAnimCmd gUnknown_085924AC[] = {
+const union AffineAnimCmd gMimicOrbAffineAnimCmds1[] = {
AFFINEANIMCMD_FRAME(0, 0, 0, 0),
AFFINEANIMCMD_FRAME(48, 48, 0, 14),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_085924C4[] = {
+const union AffineAnimCmd gMimicOrbAffineAnimCmds2[] = {
AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_085924D4[] = {
- gUnknown_085924AC,
- gUnknown_085924C4,
+const union AffineAnimCmd *const gMimicOrbAffineAnimTable[] = {
+ gMimicOrbAffineAnimCmds1,
+ gMimicOrbAffineAnimCmds2,
};
const struct SpriteTemplate gMimicOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_085921C8,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gPowerAbsorptionOrbAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085924D4,
+ .affineAnims = gMimicOrbAffineAnimTable,
.callback = AnimMimicOrb,
};
-const union AnimCmd gUnknown_085924F4[] =
+const union AnimCmd gIngrainRootAnimCmds1[] =
{
ANIMCMD_FRAME(0, 7),
ANIMCMD_FRAME(16, 7),
@@ -659,7 +659,7 @@ const union AnimCmd gUnknown_085924F4[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592508[] =
+const union AnimCmd gIngrainRootAnimCmds2[] =
{
ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
@@ -668,7 +668,7 @@ const union AnimCmd gUnknown_08592508[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_0859251C[] =
+const union AnimCmd gIngrainRootAnimCmds3[] =
{
ANIMCMD_FRAME(0, 7),
ANIMCMD_FRAME(16, 7),
@@ -676,7 +676,7 @@ const union AnimCmd gUnknown_0859251C[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_0859252C[] =
+const union AnimCmd gIngrainRootAnimCmds4[] =
{
ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
@@ -684,20 +684,20 @@ const union AnimCmd gUnknown_0859252C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_0859253C[] =
+const union AnimCmd *const gIngrainRootAnimTable[] =
{
- gUnknown_085924F4,
- gUnknown_08592508,
- gUnknown_0859251C,
- gUnknown_0859252C,
+ gIngrainRootAnimCmds1,
+ gIngrainRootAnimCmds2,
+ gIngrainRootAnimCmds3,
+ gIngrainRootAnimCmds4,
};
const struct SpriteTemplate gIngrainRootSpriteTemplate =
{
.tileTag = ANIM_TAG_ROOTS,
.paletteTag = ANIM_TAG_ROOTS,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859253C,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gIngrainRootAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimIngrainRoot,
@@ -707,55 +707,55 @@ const struct SpriteTemplate gFrenzyPlantRootSpriteTemplate =
{
.tileTag = ANIM_TAG_ROOTS,
.paletteTag = ANIM_TAG_ROOTS,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859253C,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gIngrainRootAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimFrenzyPlantRoot,
};
-const union AnimCmd gUnknown_0859257C[] =
+const union AnimCmd gIngrainOrbAnimCmds[] =
{
ANIMCMD_FRAME(3, 3),
ANIMCMD_FRAME(0, 5),
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_08592588[] =
+const union AnimCmd *const gIngrainOrbAnimTable[] =
{
- gUnknown_0859257C,
+ gIngrainOrbAnimCmds,
};
const struct SpriteTemplate gIngrainOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ORBS,
.paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592588,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gIngrainOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimIngrainOrb,
};
-const union AnimCmd gUnknown_085925A4[] =
+const union AnimCmd gFallingBagAnimCmds[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085925AC[] =
+const union AnimCmd *const gFallingBagAnimTable[] =
{
- gUnknown_085925A4,
+ gFallingBagAnimCmds,
};
-const union AffineAnimCmd gUnknown_085925B0[] = {
+const union AffineAnimCmd gFallingBagAffineAnimCmds1[] = {
AFFINEANIMCMD_FRAME(0, 0, -4, 10),
AFFINEANIMCMD_FRAME(0, 0, 4, 20),
AFFINEANIMCMD_FRAME(0, 0, -4, 10),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_085925D0[] = {
+const union AffineAnimCmd gFallingBagAffineAnimCmds2[] = {
AFFINEANIMCMD_FRAME(0, 0, -1, 2),
AFFINEANIMCMD_FRAME(0, 0, 1, 4),
AFFINEANIMCMD_FRAME(0, 0, -1, 4),
@@ -765,19 +765,19 @@ const union AffineAnimCmd gUnknown_085925D0[] = {
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_08592608[] = {
- gUnknown_085925B0,
- gUnknown_085925D0,
+const union AffineAnimCmd *const gFallingBagAffineAnimTable[] = {
+ gFallingBagAffineAnimCmds1,
+ gFallingBagAffineAnimCmds2,
};
const struct SpriteTemplate gPresentSpriteTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gFallingBagAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592608,
+ .affineAnims = gFallingBagAffineAnimTable,
.callback = AnimPresent,
};
@@ -785,14 +785,14 @@ const struct SpriteTemplate gKnockOffItemSpriteTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gFallingBagAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592608,
+ .affineAnims = gFallingBagAffineAnimTable,
.callback = AnimKnockOffItem,
};
-const union AnimCmd gUnknown_08592640[] =
+const union AnimCmd gPresentHealParticleAnimCmds[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(4, 4),
@@ -801,17 +801,17 @@ const union AnimCmd gUnknown_08592640[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592654[] =
+const union AnimCmd *const gPresentHealParticleAnimTable[] =
{
- gUnknown_08592640,
+ gPresentHealParticleAnimCmds,
};
const struct SpriteTemplate gPresentHealParticleSpriteTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPARKLE,
.paletteTag = ANIM_TAG_GREEN_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592654,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gPresentHealParticleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimPresentHealParticle,
@@ -821,19 +821,19 @@ const struct SpriteTemplate gItemStealSpriteTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gFallingBagAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592608,
+ .affineAnims = gFallingBagAffineAnimTable,
.callback = AnimItemSteal,
};
-const union AffineAnimCmd gUnknown_08592688[] = {
+const union AffineAnimCmd gTrickBagAffineAnimCmds1[] = {
AFFINEANIMCMD_FRAME(0, 0, 0, 3),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08592698[] = {
+const union AffineAnimCmd gTrickBagAffineAnimCmds2[] = {
AFFINEANIMCMD_FRAME(0, -10, 0, 3),
AFFINEANIMCMD_FRAME(0, -6, 0, 3),
AFFINEANIMCMD_FRAME(0, -2, 0, 3),
@@ -844,25 +844,25 @@ const union AffineAnimCmd gUnknown_08592698[] = {
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_085926D8[] = {
- gUnknown_08592688,
- gUnknown_08592698,
- gUnknown_085925B0,
- gUnknown_085925D0,
+const union AffineAnimCmd *const gTrickBagAffineAnimTable[] = {
+ gTrickBagAffineAnimCmds1,
+ gTrickBagAffineAnimCmds2,
+ gFallingBagAffineAnimCmds1,
+ gFallingBagAffineAnimCmds2,
};
const struct SpriteTemplate gTrickBagSpriteTemplate =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gFallingBagAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085926D8,
+ .affineAnims = gTrickBagAffineAnimTable,
.callback = AnimTrickBag,
};
-const s8 gUnknown_08592700[][3] =
+const s8 gTrickBagCoordinates[][3] =
{
{5, 24, 1},
{0, 4, 0},
@@ -877,163 +877,163 @@ const s8 gUnknown_08592700[][3] =
{0, 0, 127},
};
-const union AnimCmd gUnknown_08592724[] =
+const union AnimCmd gLeafBladeAnimCmds1[] =
{
ANIMCMD_FRAME(28, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_0859272C[] =
+const union AnimCmd gLeafBladeAnimCmds2[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592734[] =
+const union AnimCmd gLeafBladeAnimCmds3[] =
{
ANIMCMD_FRAME(20, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_0859273C[] =
+const union AnimCmd gLeafBladeAnimCmds4[] =
{
ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592744[] =
+const union AnimCmd gLeafBladeAnimCmds5[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_0859274C[] =
+const union AnimCmd gLeafBladeAnimCmds6[] =
{
ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592754[] =
+const union AnimCmd gLeafBladeAnimCmds7[] =
{
ANIMCMD_FRAME(28, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_0859275C[] =
+const union AnimCmd *const gLeafBladeAnimTable[] =
{
- gUnknown_08592724,
- gUnknown_0859272C,
- gUnknown_08592734,
- gUnknown_0859273C,
- gUnknown_08592744,
- gUnknown_0859274C,
- gUnknown_08592754,
+ gLeafBladeAnimCmds1,
+ gLeafBladeAnimCmds2,
+ gLeafBladeAnimCmds3,
+ gLeafBladeAnimCmds4,
+ gLeafBladeAnimCmds5,
+ gLeafBladeAnimCmds6,
+ gLeafBladeAnimCmds7,
};
-const struct SpriteTemplate gUnknown_08592778 =
+const struct SpriteTemplate gLeafBladeSpriteTemplate =
{
.tileTag = ANIM_TAG_LEAF,
.paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_0859275C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gLeafBladeAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy,
};
-const union AffineAnimCmd gUnknown_08592790[] = {
+const union AffineAnimCmd gAromatherapyBigFlowerAffineAnimCmds[] = {
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, 4, 1),
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd *const gUnknown_085927A8[] = {
- gUnknown_08592790,
+const union AffineAnimCmd *const gAromatherapyBigFlowerAffineAnimTable[] = {
+ gAromatherapyBigFlowerAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_085927AC =
+const struct SpriteTemplate gAromatherapySmallFlowerSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592318,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
+ .anims = gPetalDanceSmallFlowerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100640,
+ .callback = AnimFlyingParticle,
};
-const struct SpriteTemplate gUnknown_085927C4 =
+const struct SpriteTemplate gAromatherapyBigFlowerSpriteTemplate =
{
.tileTag = ANIM_TAG_FLOWER,
.paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592314,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gPetalDanceBigFlowerAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085927A8,
- .callback = sub_8100640,
+ .affineAnims = gAromatherapyBigFlowerAffineAnimTable,
+ .callback = AnimFlyingParticle,
};
-const union AffineAnimCmd gUnknown_085927DC[] = {
+const union AffineAnimCmd gSilverWindBigSparkAffineAnimCmds[] = {
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, -10, 1),
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd gUnknown_085927F4[] = {
+const union AffineAnimCmd gSilverWindMediumSparkAffineAnimCmds[] = {
AFFINEANIMCMD_FRAME(192, 192, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, -12, 1),
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd gUnknown_0859280C[] = {
+const union AffineAnimCmd gSilverWindSmallSparkAffineAnimCmds[] = {
AFFINEANIMCMD_FRAME(143, 143, 0, 0),
AFFINEANIMCMD_FRAME(0, 0, -15, 1),
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd *const gUnknown_08592824[] = {
- gUnknown_085927DC,
+const union AffineAnimCmd *const gSilverWindBigSparkAffineAnimTable[] = {
+ gSilverWindBigSparkAffineAnimCmds,
};
-const union AffineAnimCmd *const gUnknown_08592828[] = {
- gUnknown_085927F4,
+const union AffineAnimCmd *const gSilverWindMediumSparkAffineAnimTable[] = {
+ gSilverWindMediumSparkAffineAnimCmds,
};
-const union AffineAnimCmd *const gUnknown_0859282C[] = {
- gUnknown_0859280C,
+const union AffineAnimCmd *const gSilverWindSmallSparkAffineAnimTable[] = {
+ gSilverWindSmallSparkAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_08592830 =
+const struct SpriteTemplate gSilverWindBigSparkSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_6,
.paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592824,
- .callback = sub_8100640,
+ .affineAnims = gSilverWindBigSparkAffineAnimTable,
+ .callback = AnimFlyingParticle,
};
-const struct SpriteTemplate gUnknown_08592848 =
+const struct SpriteTemplate gSilverWindMediumSparkSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_6,
.paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592828,
- .callback = sub_8100640,
+ .affineAnims = gSilverWindMediumSparkAffineAnimTable,
+ .callback = AnimFlyingParticle,
};
-const struct SpriteTemplate gUnknown_08592860 =
+const struct SpriteTemplate gSilverWindSmallSparkSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_6,
.paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_0859282C,
- .callback = sub_8100640,
+ .affineAnims = gSilverWindSmallSparkAffineAnimTable,
+ .callback = AnimFlyingParticle,
};
const u16 gMagicalLeafBlendColors[] =
@@ -1047,18 +1047,18 @@ const u16 gMagicalLeafBlendColors[] =
RGB(22, 21, 31),
};
-const struct SpriteTemplate gUnknown_08592888 =
+const struct SpriteTemplate gNeedleArmSpikeSpriteTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPIKE,
.paletteTag = ANIM_TAG_GREEN_SPIKE,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100898,
+ .callback = AnimNeedleArmSpike,
};
-const union AnimCmd gUnknown_085928A0[] =
+const union AnimCmd gWhipAnimCmds1[] =
{
ANIMCMD_FRAME(64, 3),
ANIMCMD_FRAME(80, 3),
@@ -1067,7 +1067,7 @@ const union AnimCmd gUnknown_085928A0[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085928B4[] =
+const union AnimCmd gWhipAnimCmds2[] =
{
ANIMCMD_FRAME(64, 3, .hFlip = TRUE),
ANIMCMD_FRAME(80, 3, .hFlip = TRUE),
@@ -1076,32 +1076,32 @@ const union AnimCmd gUnknown_085928B4[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085928C8[] =
+const union AnimCmd *const gWhipAnimTable[] =
{
- gUnknown_085928A0,
- gUnknown_085928B4,
+ gWhipAnimCmds1,
+ gWhipAnimCmds2,
};
-const struct SpriteTemplate gUnknown_085928D0 =
+const struct SpriteTemplate gSlamHitSpriteTemplate =
{
.tileTag = ANIM_TAG_SLAM_HIT,
.paletteTag = ANIM_TAG_SLAM_HIT,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085928C8,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gWhipAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100A50,
+ .callback = AnimWhipHit,
};
const struct SpriteTemplate gVineWhipSpriteTemplate =
{
.tileTag = ANIM_TAG_WHIP_HIT,
.paletteTag = ANIM_TAG_WHIP_HIT,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085928C8,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gWhipAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100A50,
+ .callback = AnimWhipHit,
};
const union AnimCmd gUnknown_08592900[] =
@@ -1119,22 +1119,24 @@ const union AnimCmd *const gUnknown_08592918[] =
gUnknown_08592900,
};
+// Unused
const struct SpriteTemplate gUnknown_0859291C =
{
.tileTag = ANIM_TAG_HIT,
.paletteTag = ANIM_TAG_HIT,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08592918,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_81009F8,
};
+// Unused
const struct SpriteTemplate gUnknown_08592934 =
{
.tileTag = ANIM_TAG_HIT_2,
.paletteTag = ANIM_TAG_HIT_2,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08592918,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1192,18 +1194,19 @@ const union AffineAnimCmd *const gUnknown_085929CC[] = {
gUnknown_085929BC,
};
+// Unused
const struct SpriteTemplate gUnknown_085929EC =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085929CC,
.callback = sub_8100A94,
};
-const union AnimCmd gUnknown_08592A04[] =
+const union AnimCmd gCuttingSliceAnimCmds[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(16, 5),
@@ -1212,31 +1215,31 @@ const union AnimCmd gUnknown_08592A04[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592A18[] =
+const union AnimCmd *const gCuttingSliceAnimTable[] =
{
- gUnknown_08592A04,
+ gCuttingSliceAnimCmds,
};
const struct SpriteTemplate gCuttingSliceSpriteTemplate =
{
.tileTag = ANIM_TAG_CUT,
.paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08592A18,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gCuttingSliceAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimCuttingSlice,
};
-const struct SpriteTemplate gUnknown_08592A34 =
+const struct SpriteTemplate gAirCutterSliceSpriteTemplate =
{
.tileTag = ANIM_TAG_CUT,
.paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08592A18,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gCuttingSliceAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100B88,
+ .callback = AnimAirCutterSlice,
};
const union AnimCmd gUnknown_08592A4C[] =
@@ -1313,11 +1316,12 @@ const union AnimCmd *const gUnknown_08592A9C[] =
gUnknown_08592A94,
};
+// Unused
const struct SpriteTemplate gUnknown_08592AC4 =
{
.tileTag = ANIM_TAG_MUSIC_NOTES,
.paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gUnknown_08592A9C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1328,20 +1332,20 @@ const struct SpriteTemplate gUnknown_08592ADC =
{
.tileTag = ANIM_TAG_PROTECT,
.paletteTag = ANIM_TAG_PROTECT,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100EF0,
+ .callback = AnimProtect,
};
-const union AffineAnimCmd gUnknown_08592AF4[] =
+const union AffineAnimCmd gMilkBottleAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08592B04[] =
+const union AffineAnimCmd gMilkBottleAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
@@ -1351,24 +1355,24 @@ const union AffineAnimCmd gUnknown_08592B04[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_08592B34[] =
+const union AffineAnimCmd *const gMilkBottleAffineAnimTable[] =
{
- gUnknown_08592AF4,
- gUnknown_08592B04,
+ gMilkBottleAffineAnimCmds1,
+ gMilkBottleAffineAnimCmds2,
};
-const struct SpriteTemplate gUnknown_08592B3C =
+const struct SpriteTemplate gMilkBottleSpriteTemplate =
{
.tileTag = ANIM_TAG_MILK_BOTTLE,
.paletteTag = ANIM_TAG_MILK_BOTTLE,
- .oam = &gUnknown_08524A94,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592B34,
- .callback = sub_81010CC,
+ .affineAnims = gMilkBottleAffineAnimTable,
+ .callback = AnimMilkBottle,
};
-const union AnimCmd gUnknown_08592B54[] =
+const union AnimCmd gGrantingStarsAnimCmds[] =
{
ANIMCMD_FRAME(0, 7),
ANIMCMD_FRAME(16, 7),
@@ -1381,31 +1385,31 @@ const union AnimCmd gUnknown_08592B54[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_08592B78[] =
+const union AnimCmd *const gGrantingStarsAnimTable[] =
{
- gUnknown_08592B54,
+ gGrantingStarsAnimCmds,
};
-const struct SpriteTemplate gUnknown_08592B7C =
+const struct SpriteTemplate gGrantingStarsSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_SPARKLE_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592B78,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810130C,
+ .callback = AnimGrantingStars,
};
-const struct SpriteTemplate gUnknown_08592B94 =
+const struct SpriteTemplate gSparklingStarsSpriteTemplate =
{
.tileTag = ANIM_TAG_SPARKLE_2,
.paletteTag = ANIM_TAG_SPARKLE_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592B78,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gGrantingStarsAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810135C,
+ .callback = AnimSparkingStars,
};
const union AnimCmd gUnknown_08592BAC[] =
@@ -1440,96 +1444,97 @@ const union AnimCmd *const gUnknown_08592BF4[] =
gUnknown_08592BD0,
};
+// Unused
const struct SpriteTemplate gUnknown_08592BFC =
{
.tileTag = ANIM_TAG_BUBBLE_BURST,
.paletteTag = ANIM_TAG_BUBBLE_BURST,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gUnknown_08592BF4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_8101440,
};
-const union AnimCmd gUnknown_08592C14[] =
+const union AnimCmd gSleepLetterZAnimCmds[] =
{
ANIMCMD_FRAME(0, 40),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592C1C[] =
+const union AnimCmd *const gSleepLetterZAnimTable[] =
{
- gUnknown_08592C14,
+ gSleepLetterZAnimCmds,
};
-const union AffineAnimCmd gUnknown_08592C20[] =
+const union AffineAnimCmd gSleepLetterZAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0),
AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08592C20_2[] =
+const union AffineAnimCmd gSleepLetterZAffineAnimCmds1_2[] =
{
AFFINEANIMCMD_LOOP(0),
AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
AFFINEANIMCMD_LOOP(10),
};
-const union AffineAnimCmd gUnknown_08592C50[] =
+const union AffineAnimCmd gSleepLetterZAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0),
AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08592C50_2[] =
+const union AffineAnimCmd gSleepLetterZAffineAnimCmds2_2[] =
{
AFFINEANIMCMD_LOOP(0),
AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24),
AFFINEANIMCMD_LOOP(10),
};
-const union AffineAnimCmd *const gUnknown_08592C80[] =
+const union AffineAnimCmd *const gSleepLetterZAffineAnimTable[] =
{
- gUnknown_08592C20,
- gUnknown_08592C50,
+ gSleepLetterZAffineAnimCmds1,
+ gSleepLetterZAffineAnimCmds2,
};
-const struct SpriteTemplate gUnknown_08592C88 =
+const struct SpriteTemplate gSleepLetterZSpriteTemplate =
{
.tileTag = ANIM_TAG_LETTER_Z,
.paletteTag = ANIM_TAG_LETTER_Z,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_08592C1C,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gSleepLetterZAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592C80,
- .callback = sub_81014F4,
+ .affineAnims = gSleepLetterZAffineAnimTable,
+ .callback = AnimSleepLetterZ,
};
-const struct SpriteTemplate gUnknown_08592CA0 =
+const struct SpriteTemplate gLockOnTargetSpriteTemplate =
{
.tileTag = ANIM_TAG_LOCK_ON,
.paletteTag = ANIM_TAG_LOCK_ON,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81015AC,
+ .callback = AnimLockOnTarget,
};
-const struct SpriteTemplate gUnknown_08592CB8 =
+const struct SpriteTemplate gLockOnMoveTargetSpriteTemplate =
{
.tileTag = ANIM_TAG_LOCK_ON,
.paletteTag = ANIM_TAG_LOCK_ON,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101898,
+ .callback = AnimLockOnMoveTarget,
};
-const s8 gUnknown_08592CD0[][2] =
+const s8 gInclineMonCoordTable[][2] =
{
{ 64, 64},
{ 0, -64},
@@ -1537,7 +1542,7 @@ const s8 gUnknown_08592CD0[][2] =
{ 32, -32},
};
-const struct SpriteTemplate gUnknown_08592CD8 =
+const struct SpriteTemplate gBowMonSpriteTemplate =
{
.tileTag = 0,
.paletteTag = 0,
@@ -1545,9 +1550,10 @@ const struct SpriteTemplate gUnknown_08592CD8 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101940,
+ .callback = AnimBowMon,
};
+// Unused
const struct SpriteTemplate gUnknown_08592CF0 =
{
.tileTag = 0,
@@ -1559,7 +1565,7 @@ const struct SpriteTemplate gUnknown_08592CF0 =
.callback = sub_8101B90,
};
-const union AnimCmd gUnknown_08592D08[] =
+const union AnimCmd gSlashSliceAnimCmds1[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(16, 4),
@@ -1568,52 +1574,52 @@ const union AnimCmd gUnknown_08592D08[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592D1C[] =
+const union AnimCmd gSlashSliceAnimCmds2[] =
{
ANIMCMD_FRAME(48, 4),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592D24[] =
+const union AnimCmd *const gSlashSliceAnimTable[] =
{
- gUnknown_08592D08,
- gUnknown_08592D1C,
+ gSlashSliceAnimCmds1,
+ gSlashSliceAnimCmds2,
};
-const struct SpriteTemplate gUnknown_08592D2C =
+const struct SpriteTemplate gSlashSliceSpriteTemplate =
{
.tileTag = ANIM_TAG_SLASH,
.paletteTag = ANIM_TAG_SLASH,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gSlashSliceAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101F40,
+ .callback = AnimSlashSlice,
};
-const struct SpriteTemplate gUnknown_08592D44 =
+const struct SpriteTemplate gFalseSwipeSliceSpriteTemplate =
{
.tileTag = ANIM_TAG_SLASH_2,
.paletteTag = ANIM_TAG_SLASH_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gSlashSliceAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101FA8,
+ .callback = AnimFalseSwipeSlice,
};
-const struct SpriteTemplate gUnknown_08592D5C =
+const struct SpriteTemplate gFalseSwipePositionedSliceSpriteTemplate =
{
.tileTag = ANIM_TAG_SLASH_2,
.paletteTag = ANIM_TAG_SLASH_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gSlashSliceAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101FF0,
+ .callback = AnimFalseSwipePositionedSlice,
};
-const union AnimCmd gUnknown_08592D74[] =
+const union AnimCmd gEndureEnergyAnimCmds[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(8, 12),
@@ -1622,23 +1628,23 @@ const union AnimCmd gUnknown_08592D74[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592D88[] =
+const union AnimCmd *const gEndureEnergyAnimTable[] =
{
- gUnknown_08592D74,
+ gEndureEnergyAnimCmds,
};
-const struct SpriteTemplate gUnknown_08592D8C =
+const struct SpriteTemplate gEndureEnergySpriteTemplate =
{
.tileTag = ANIM_TAG_FOCUS_ENERGY,
.paletteTag = ANIM_TAG_FOCUS_ENERGY,
- .oam = &gUnknown_08524954,
- .anims = gUnknown_08592D88,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
+ .anims = gEndureEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81020D8,
+ .callback = AnimEndureEnergy,
};
-const union AnimCmd gUnknown_08592DA4[] =
+const union AnimCmd gSharpenSphereAnimCmds[] =
{
ANIMCMD_FRAME(0, 18),
ANIMCMD_FRAME(0, 6),
@@ -1657,34 +1663,34 @@ const union AnimCmd gUnknown_08592DA4[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592DE0[] =
+const union AnimCmd *const gSharpenSphereAnimTable[] =
{
- gUnknown_08592DA4,
+ gSharpenSphereAnimCmds,
};
-const struct SpriteTemplate gUnknown_08592DE4 =
+const struct SpriteTemplate gSharpenSphereSpriteTemplate =
{
.tileTag = ANIM_TAG_SPHERE_TO_CUBE,
.paletteTag = ANIM_TAG_SPHERE_TO_CUBE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592DE0,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gSharpenSphereAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810217C,
+ .callback = AnimSharpenSphere,
};
-const struct SpriteTemplate gUnknown_08592DFC =
+const struct SpriteTemplate gOctazookaBallSpriteTemplate =
{
.tileTag = ANIM_TAG_BLACK_BALL,
.paletteTag = ANIM_TAG_BLACK_BALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation,
};
-const union AnimCmd gUnknown_08592E14[] =
+const union AnimCmd gOctazookaAnimCmds[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
@@ -1694,23 +1700,23 @@ const union AnimCmd gUnknown_08592E14[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592E2C[] =
+const union AnimCmd *const gOctazookaAnimTable[] =
{
- gUnknown_08592E14,
+ gOctazookaAnimCmds,
};
-const struct SpriteTemplate gUnknown_08592E30 =
+const struct SpriteTemplate gOctazookaSmokeSpriteTemplate =
{
.tileTag = ANIM_TAG_GRAY_SMOKE,
.paletteTag = ANIM_TAG_GRAY_SMOKE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592E2C,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOctazookaAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
-const union AnimCmd gUnknown_08592E48[] =
+const union AnimCmd gConversionAnimCmds[] =
{
ANIMCMD_FRAME(3, 5),
ANIMCMD_FRAME(2, 5),
@@ -1719,34 +1725,34 @@ const union AnimCmd gUnknown_08592E48[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592E5C[] =
+const union AnimCmd *const gConversionAnimTable[] =
{
- gUnknown_08592E48,
+ gConversionAnimCmds,
};
-const union AffineAnimCmd gUnknown_08592E60[] =
+const union AffineAnimCmd gConversionAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_08592E70[] =
+const union AffineAnimCmd *const gConversionAffineAnimTable[] =
{
- gUnknown_08592E60,
+ gConversionAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_08592E74 =
+const struct SpriteTemplate gConversionSpriteTemplate =
{
.tileTag = ANIM_TAG_CONVERSION,
.paletteTag = ANIM_TAG_CONVERSION,
- .oam = &gUnknown_08524AE4,
- .anims = gUnknown_08592E5C,
+ .oam = &gOamData_AffineDouble_ObjBlend_8x8,
+ .anims = gConversionAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592E70,
- .callback = sub_8102268,
+ .affineAnims = gConversionAffineAnimTable,
+ .callback = AnimConversion,
};
-const union AnimCmd gUnknown_08592E8C[] =
+const union AnimCmd gConversion2AnimCmds[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(1, 5),
@@ -1755,34 +1761,34 @@ const union AnimCmd gUnknown_08592E8C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592EA0[] =
+const union AnimCmd *const gConversion2AnimTable[] =
{
- gUnknown_08592E8C,
+ gConversion2AnimCmds,
};
-const struct SpriteTemplate gUnknown_08592EA4 =
+const struct SpriteTemplate gConversion2SpriteTemplate =
{
.tileTag = ANIM_TAG_CONVERSION,
.paletteTag = ANIM_TAG_CONVERSION,
- .oam = &gUnknown_08524AE4,
- .anims = gUnknown_08592EA0,
+ .oam = &gOamData_AffineDouble_ObjBlend_8x8,
+ .anims = gConversion2AnimTable,
.images = NULL,
- .affineAnims = gUnknown_08592E70,
- .callback = sub_810234C,
+ .affineAnims = gConversionAffineAnimTable,
+ .callback = AnimConversion2,
};
-const struct SpriteTemplate gUnknown_08592EBC =
+const struct SpriteTemplate gMoonSpriteTemplate =
{
.tileTag = ANIM_TAG_MOON,
.paletteTag = ANIM_TAG_MOON,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81024E0,
+ .callback = AnimMoon,
};
-const union AnimCmd gUnknown_08592ED4[] =
+const union AnimCmd gMoonlightSparkleAnimCmds[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(4, 8),
@@ -1791,23 +1797,23 @@ const union AnimCmd gUnknown_08592ED4[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_08592EE8[] =
+const union AnimCmd *const gMoonlightSparkleAnimTable[] =
{
- gUnknown_08592ED4,
+ gMoonlightSparkleAnimCmds,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8592EEC =
+const struct SpriteTemplate gMoonlightSparkleSpriteTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPARKLE,
.paletteTag = ANIM_TAG_GREEN_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592EE8,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gMoonlightSparkleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102540,
+ .callback = AnimMoonlightSparkle,
};
-const union AnimCmd gUnknown_08592F04[] =
+const union AnimCmd gHealingBlueStarAnimCmds[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(16, 2),
@@ -1820,34 +1826,34 @@ const union AnimCmd gUnknown_08592F04[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592F28[] =
+const union AnimCmd *const gHealingBlueStarAnimTable[] =
{
- gUnknown_08592F04,
+ gHealingBlueStarAnimCmds,
};
-const struct SpriteTemplate gUnknown_08592F2C =
+const struct SpriteTemplate gHealingBlueStarSpriteTemplate =
{
.tileTag = ANIM_TAG_BLUE_STAR,
.paletteTag = ANIM_TAG_BLUE_STAR,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592F28,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gHealingBlueStarAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
-const struct SpriteTemplate gUnknown_08592F44 =
+const struct SpriteTemplate gHornHitSpriteTemplate =
{
.tileTag = ANIM_TAG_HORN_HIT,
.paletteTag = ANIM_TAG_HORN_HIT,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102844,
+ .callback = AnimHornHit,
};
-const union AnimCmd gUnknown_08592F5C[] =
+const union AnimCmd gSuperFangAnimCmds[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(16, 2),
@@ -1856,106 +1862,106 @@ const union AnimCmd gUnknown_08592F5C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592F70[] =
+const union AnimCmd *const gSuperFangAnimTable[] =
{
- gUnknown_08592F5C,
+ gSuperFangAnimCmds,
};
-const struct SpriteTemplate gUnknown_08592F74 =
+const struct SpriteTemplate gSuperFangSpriteTemplate =
{
.tileTag = ANIM_TAG_FANG_ATTACK,
.paletteTag = ANIM_TAG_FANG_ATTACK,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592F70,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gSuperFangAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102BCC,
+ .callback = AnimSuperFang,
};
-const union AnimCmd gUnknown_08592F8C[] =
+const union AnimCmd gWavyMusicNotesAnimCmds1[] =
{
ANIMCMD_FRAME(0, 10),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592F94[] =
+const union AnimCmd gWavyMusicNotesAnimCmds2[] =
{
ANIMCMD_FRAME(4, 10),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592F9C[] =
+const union AnimCmd gWavyMusicNotesAnimCmds3[] =
{
ANIMCMD_FRAME(8, 41),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592FA4[] =
+const union AnimCmd gWavyMusicNotesAnimCmds4[] =
{
ANIMCMD_FRAME(12, 10),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592FAC[] =
+const union AnimCmd gWavyMusicNotesAnimCmds5[] =
{
ANIMCMD_FRAME(16, 10),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592FB4[] =
+const union AnimCmd gWavyMusicNotesAnimCmds6[] =
{
ANIMCMD_FRAME(20, 10),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592FBC[] =
+const union AnimCmd gWavyMusicNotesAnimCmds7[] =
{
ANIMCMD_FRAME(0, 10, .vFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08592FC4[] =
+const union AnimCmd gWavyMusicNotesAnimCmds8[] =
{
ANIMCMD_FRAME(4, 10, .vFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08592FCC[] =
+const union AnimCmd *const gMusicNotesAnimTable[] =
{
- gUnknown_08592F8C,
- gUnknown_08592F94,
- gUnknown_08592F9C,
- gUnknown_08592FA4,
- gUnknown_08592FAC,
- gUnknown_08592FB4,
- gUnknown_08592FBC,
- gUnknown_08592FC4,
+ gWavyMusicNotesAnimCmds1,
+ gWavyMusicNotesAnimCmds2,
+ gWavyMusicNotesAnimCmds3,
+ gWavyMusicNotesAnimCmds4,
+ gWavyMusicNotesAnimCmds5,
+ gWavyMusicNotesAnimCmds6,
+ gWavyMusicNotesAnimCmds7,
+ gWavyMusicNotesAnimCmds8,
};
-const union AffineAnimCmd gUnknown_08592FEC[] =
+const union AffineAnimCmd gWavyMusicNotesAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16),
AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_08593004[] =
+const union AffineAnimCmd *const gMusicNotesAffineAnimTable[] =
{
- gUnknown_08592FEC,
+ gWavyMusicNotesAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_08593008 =
+const struct SpriteTemplate gWavyMusicNotesSpriteTemplate =
{
.tileTag = ANIM_TAG_MUSIC_NOTES,
.paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gMusicNotesAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593004,
- .callback = sub_8102CD4,
+ .affineAnims = gMusicNotesAffineAnimTable,
+ .callback = AnimWavyMusicNotes,
};
-const u16 gUnknown_08593020[][6] =
+const u16 gParticlesColorBlendTable[][6] =
{
{ANIM_TAG_MUSIC_NOTES, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)},
{ANIM_TAG_BENT_SPOON, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)},
@@ -1963,52 +1969,52 @@ const u16 gUnknown_08593020[][6] =
{ANIM_TAG_LARGE_FRESH_EGG, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)},
};
-const struct SpriteTemplate gUnknown_08593050 =
+const struct SpriteTemplate gFastFlyingMusicNotesSpriteTemplate =
{
.tileTag = ANIM_TAG_MUSIC_NOTES,
.paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gMusicNotesAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593004,
- .callback = sub_8102EB0,
+ .affineAnims = gMusicNotesAffineAnimTable,
+ .callback = AnimFlyingMusicNotes,
};
-const struct SpriteTemplate gUnknown_08593068 =
+const struct SpriteTemplate gBellyDrumHandSpriteTemplate =
{
.tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
.paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102FB8,
+ .callback = AnimBellyDrumHand,
};
-const union AffineAnimCmd gUnknown_08593080[] =
+const union AffineAnimCmd gSlowFlyingMusicNotesAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1),
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd *const gUnknown_08593098[] =
+const union AffineAnimCmd *const gSlowFlyingMusicNotesAffineAnimTable[] =
{
- gUnknown_08593080,
+ gSlowFlyingMusicNotesAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_0859309C =
+const struct SpriteTemplate gSlowFlyingMusicNotesSpriteTemplate =
{
.tileTag = ANIM_TAG_MUSIC_NOTES,
.paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
+ .anims = gMusicNotesAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593098,
- .callback = sub_8103028,
+ .affineAnims = gSlowFlyingMusicNotesAffineAnimTable,
+ .callback = AnimSlowFlyingMusicNotes,
};
-const union AnimCmd gUnknown_085930B4[] =
+const union AnimCmd gMetronomeThroughtBubbleAnimCmds1[] =
{
ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
@@ -2017,7 +2023,7 @@ const union AnimCmd gUnknown_085930B4[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085930C8[] =
+const union AnimCmd gMetronomeThroughtBubbleAnimCmds3[] =
{
ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
@@ -2026,7 +2032,7 @@ const union AnimCmd gUnknown_085930C8[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085930DC[] =
+const union AnimCmd gMetronomeThroughtBubbleAnimCmds2[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(16, 2),
@@ -2035,7 +2041,7 @@ const union AnimCmd gUnknown_085930DC[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085930F0[] =
+const union AnimCmd gMetronomeThroughtBubbleAnimCmds4[] =
{
ANIMCMD_FRAME(48, 2),
ANIMCMD_FRAME(32, 2),
@@ -2044,33 +2050,33 @@ const union AnimCmd gUnknown_085930F0[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593104[] =
+const union AnimCmd *const gMetronomeThroughtBubbleAnimTable[] =
{
- gUnknown_085930B4,
- gUnknown_085930DC,
- gUnknown_085930C8,
- gUnknown_085930F0,
+ gMetronomeThroughtBubbleAnimCmds1,
+ gMetronomeThroughtBubbleAnimCmds2,
+ gMetronomeThroughtBubbleAnimCmds3,
+ gMetronomeThroughtBubbleAnimCmds4,
};
-const struct SpriteTemplate gUnknown_08593114 =
+const struct SpriteTemplate gThoughtBubbleSpriteTemplate =
{
.tileTag = ANIM_TAG_THOUGHT_BUBBLE,
.paletteTag = ANIM_TAG_THOUGHT_BUBBLE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593104,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gMetronomeThroughtBubbleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103164,
+ .callback = AnimThoughtBubble,
};
-const union AffineAnimCmd gUnknown_0859312C[] =
+const union AffineAnimCmd gMetronomeFingerAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08593144[] =
+const union AffineAnimCmd gMetronomeFingerAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11),
AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11),
@@ -2079,7 +2085,7 @@ const union AffineAnimCmd gUnknown_08593144[] =
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08593144_2[] =
+const union AffineAnimCmd gMetronomeFingerAffineAnimCmds2_2[] =
{
AFFINEANIMCMD_FRAME(16, 16, 0, 0),
AFFINEANIMCMD_FRAME(30, 30, 0, 8),
@@ -2092,47 +2098,47 @@ const union AffineAnimCmd gUnknown_08593144_2[] =
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_085931B4[] =
+const union AffineAnimCmd *const gMetronomeFingerAffineAnimTable[] =
{
- gUnknown_0859312C,
- gUnknown_08593144,
+ gMetronomeFingerAffineAnimCmds1,
+ gMetronomeFingerAffineAnimCmds2,
};
-const struct SpriteTemplate gUnknown_085931BC =
+const struct SpriteTemplate gMetronomeFingerSpriteTemplate =
{
.tileTag = ANIM_TAG_FINGER,
.paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085931B4,
- .callback = sub_8103208,
+ .affineAnims = gMetronomeFingerAffineAnimTable,
+ .callback = AnimMetronomeFinger,
};
-const struct SpriteTemplate gUnknown_085931D4 =
+const struct SpriteTemplate gFollowMeFingerSpriteTemplate =
{
.tileTag = ANIM_TAG_FINGER,
.paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085931B4,
- .callback = sub_8103284,
+ .affineAnims = gMetronomeFingerAffineAnimTable,
+ .callback = AnimFollowMeFinger,
};
-const union AnimCmd gUnknown_085931EC[] =
+const union AnimCmd gTauntFingerAnimCmds1[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085931F4[] =
+const union AnimCmd gTauntFingerAnimCmds2[] =
{
ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085931FC[] =
+const union AnimCmd gTauntFingerAnimCmds3[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(16, 4),
@@ -2144,7 +2150,7 @@ const union AnimCmd gUnknown_085931FC[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_0859321C[] =
+const union AnimCmd gTauntFingerAnimCmds4[] =
{
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
@@ -2156,23 +2162,23 @@ const union AnimCmd gUnknown_0859321C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_0859323C[] =
+const union AnimCmd *const gTauntFingerAnimTable[] =
{
- gUnknown_085931EC,
- gUnknown_085931F4,
- gUnknown_085931FC,
- gUnknown_0859321C,
+ gTauntFingerAnimCmds1,
+ gTauntFingerAnimCmds2,
+ gTauntFingerAnimCmds3,
+ gTauntFingerAnimCmds4,
};
-const struct SpriteTemplate gUnknown_0859324C =
+const struct SpriteTemplate gTauntFingerSpriteTemplate =
{
.tileTag = ANIM_TAG_FINGER_2,
.paletteTag = ANIM_TAG_FINGER_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859323C,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gTauntFingerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103390,
+ .callback = AnimTauntFinger,
};
// Animates the falling particles that horizontally wave back and forth.
@@ -2803,11 +2809,11 @@ void sub_80FF458(u8 taskId)
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[11] = 0x100;
- gTasks[taskId].func = sub_80FF53C;
+ gTasks[taskId].func = AnimTask_DuplicateAndShrinkToPosStep1;
}
}
-static void sub_80FF53C(u8 taskId)
+static void AnimTask_DuplicateAndShrinkToPosStep1(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
gTasks[taskId].data[10] += gTasks[taskId].data[0];
@@ -2821,11 +2827,11 @@ static void sub_80FF53C(u8 taskId)
if (--gTasks[taskId].data[1] == 0)
{
gTasks[taskId].data[0] = 0;
- gTasks[taskId].func = sub_80FF5CC;
+ gTasks[taskId].func = AnimTask_DuplicateAndShrinkToPosStep2;
}
}
-static void sub_80FF5CC(u8 taskId)
+static void AnimTask_DuplicateAndShrinkToPosStep2(u8 taskId)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
@@ -2981,38 +2987,38 @@ static void sub_80FF9B8(struct Sprite* sprite, s16 c)
sprite->data[7] = c;
}
-bool8 sub_80FF9E0(struct Sprite* sprite)
+bool8 moveAlongLinearPath(struct Sprite* sprite)
{
- u16 r10 = (u8)(sprite->data[5] >> 8);
- u16 r9 = (u8)sprite->data[5];
- s32 r2 = (u8)(sprite->data[6] >> 8);
- s32 r4 = (u8)sprite->data[6];
- s16 r6 = sprite->data[7] >> 8;
- s16 r3 = sprite->data[7] & 0xFF;
- s16 r4_2;
+ u16 xStartPos = (u8)(sprite->data[5] >> 8);
+ u16 yStartPos = (u8)sprite->data[5];
+ s32 xEndPos = (u8)(sprite->data[6] >> 8);
+ s32 yEndPos = (u8)sprite->data[6];
+ s16 totalTime = sprite->data[7] >> 8;
+ s16 currentTime = sprite->data[7] & 0xFF;
+ s16 yEndPos_2;
s16 r0;
s32 var1;
- s32 var2;
-
- if (r2 == 0)
- r2 = -32;
- else if (r2 == 255)
- r2 = 272;
-
- r4_2 = r4 - r9;
- r0 = r2 - r10;
- var1 = r0 * r3 / r6;
- var2 = r4_2 * r3 / r6;
- sprite->pos1.x = var1 + r10;
- sprite->pos1.y = var2 + r9;
- if (++r3 == r6)
+ s32 vaxEndPos;
+
+ if (xEndPos == 0)
+ xEndPos = -32;
+ else if (xEndPos == 255)
+ xEndPos = 272;
+
+ yEndPos_2 = yEndPos - yStartPos;
+ r0 = xEndPos - xStartPos;
+ var1 = r0 * currentTime / totalTime;
+ vaxEndPos = yEndPos_2 * currentTime / totalTime;
+ sprite->pos1.x = var1 + xStartPos;
+ sprite->pos1.y = vaxEndPos + yStartPos;
+ if (++currentTime == totalTime)
return TRUE;
- sprite->data[7] = (r6 << 8) | r3;
+ sprite->data[7] = (totalTime << 8) | currentTime;
return FALSE;
}
-void sub_80FFA84(struct Sprite* sprite)
+void AnimItemStealStep2(struct Sprite* sprite)
{
if (sprite->data[0] == 10)
StartSpriteAffineAnim(sprite, 1);
@@ -3022,7 +3028,7 @@ void sub_80FFA84(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-static void sub_80FFAB4(struct Sprite* sprite)
+static void AnimItemStealStep1(struct Sprite* sprite)
{
sprite->data[0] += sprite->data[3] * 128 / sprite->data[4];
if (sprite->data[0] >= 128)
@@ -3032,11 +3038,11 @@ static void sub_80FFAB4(struct Sprite* sprite)
}
sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8);
- if (sub_80FF9E0(sprite))
+ if (moveAlongLinearPath(sprite))
{
sprite->pos2.y = 0;
sprite->data[0] = 0;
- sprite->callback = sub_80FFA84;
+ sprite->callback = AnimItemStealStep2;
}
}
@@ -3063,7 +3069,7 @@ void AnimPresent(struct Sprite* sprite)
}
sprite->data[4] = 60;
- sprite->callback = sub_80FFAB4;
+ sprite->callback = AnimItemStealStep1;
}
static void sub_80FFB90(struct Sprite* sprite)
@@ -3078,7 +3084,7 @@ static void sub_80FFB90(struct Sprite* sprite)
}
sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8);
- if (sub_80FF9E0(sprite))
+ if (moveAlongLinearPath(sprite))
{
sprite->pos2.y = zero;
sprite->data[0] = zero;
@@ -3096,7 +3102,7 @@ void AnimKnockOffItem(struct Sprite* sprite)
sub_80FF9B8(sprite, 40);
sprite->data[3] = 3;
sprite->data[4] = 60;
- sprite->callback = sub_80FFAB4;
+ sprite->callback = AnimItemStealStep1;
}
else
{
@@ -3154,10 +3160,10 @@ void AnimItemSteal(struct Sprite* sprite)
}
sprite->data[4] = 60;
- sprite->callback = AnimItemStealStep;
+ sprite->callback = AnimItemStealStep3;
}
-static void AnimItemStealStep(struct Sprite* sprite)
+static void AnimItemStealStep3(struct Sprite* sprite)
{
int zero;
sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
@@ -3172,11 +3178,11 @@ static void AnimItemStealStep(struct Sprite* sprite)
if (sprite->pos2.y == 0)
PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(63));
- if (sub_80FF9E0(sprite))
+ if (moveAlongLinearPath(sprite))
{
sprite->pos2.y = 0;
sprite->data[0] = 0;
- sprite->callback = sub_80FFA84;
+ sprite->callback = AnimItemStealStep2;
PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
}
}
@@ -3253,9 +3259,9 @@ static void AnimTrickBagStep1(struct Sprite* sprite)
static void AnimTrickBagStep2(struct Sprite* sprite)
{
- if (sprite->data[2] == gUnknown_08592700[sprite->data[0]][1])
+ if (sprite->data[2] == gTrickBagCoordinates[sprite->data[0]][1])
{
- if (gUnknown_08592700[sprite->data[0]][2] == 127)
+ if (gTrickBagCoordinates[sprite->data[0]][2] == 127)
{
sprite->data[0] = 0;
sprite->callback = AnimTrickBagStep3;
@@ -3267,7 +3273,7 @@ static void AnimTrickBagStep2(struct Sprite* sprite)
else
{
sprite->data[2]++;
- sprite->data[1] = (gUnknown_08592700[sprite->data[0]][0] * gUnknown_08592700[sprite->data[0]][2] + sprite->data[1]) & 0xFF;
+ sprite->data[1] = (gTrickBagCoordinates[sprite->data[0]][0] * gTrickBagCoordinates[sprite->data[0]][2] + sprite->data[1]) & 0xFF;
if (!IsContest())
{
if ((u16)(sprite->data[1] - 1) < 191)
@@ -3290,7 +3296,7 @@ static void AnimTrickBagStep3(struct Sprite* sprite)
sprite->data[0]++;
}
-void sub_80FFFC0(u8 taskId)
+void AnimTask_LeafBlade(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -3302,7 +3308,7 @@ void sub_80FFFC0(u8 taskId)
task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1;
task->data[9] = 56 - (task->data[5] * 64);
task->data[8] = task->data[7] - task->data[9] + task->data[6];
- task->data[2] = CreateSprite(&gUnknown_08592778, task->data[8], task->data[9], task->data[4]);
+ task->data[2] = CreateSprite(&gLeafBladeSpriteTemplate, task->data[8], task->data[9], task->data[4]);
if (task->data[2] == MAX_SPRITES)
DestroyAnimVisualTask(taskId);
@@ -3311,12 +3317,12 @@ void sub_80FFFC0(u8 taskId)
gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5];
gSprites[task->data[2]].data[3] = task->data[9];
gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5];
- gSprites[task->data[2]].data[5] = sub_8100504(&gSprites[task->data[2]]);
+ gSprites[task->data[2]].data[5] = LeafBladeGetPosFactor(&gSprites[task->data[2]]);
InitAnimArcTranslation(&gSprites[task->data[2]]);
- task->func = sub_8100128;
+ task->func = AnimTask_LeafBladeStep;
}
-static void sub_8100128(u8 taskId)
+static void AnimTask_LeafBladeStep(u8 taskId)
{
struct Task* task = &gTasks[taskId];
struct Sprite* sprite = &gSprites[task->data[2]];
@@ -3324,7 +3330,7 @@ static void sub_8100128(u8 taskId)
switch (a)
{
case 4:
- sub_8100524(task, taskId);
+ AnimTask_LeafBladeStep2(task, taskId);
if (TranslateAnimHorizontalArc(sprite))
{
task->data[15] = 5;
@@ -3332,7 +3338,7 @@ static void sub_8100128(u8 taskId)
}
break;
case 8:
- sub_8100524(task, taskId);
+ AnimTask_LeafBladeStep2(task, taskId);
if (TranslateAnimHorizontalArc(sprite))
{
task->data[15] = 9;
@@ -3340,7 +3346,7 @@ static void sub_8100128(u8 taskId)
}
break;
case 0:
- sub_8100524(task, taskId);
+ AnimTask_LeafBladeStep2(task, taskId);
if (TranslateAnimHorizontalArc(sprite))
{
task->data[15] = 1;
@@ -3357,7 +3363,7 @@ static void sub_8100128(u8 taskId)
sprite->data[2] = task->data[6];
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = task->data[7];
- sprite->data[5] = sub_8100504(sprite);
+ sprite->data[5] = LeafBladeGetPosFactor(sprite);
task->data[4] += 2;
task->data[3] = a;
sprite->subpriority = task->data[4];
@@ -3366,7 +3372,7 @@ static void sub_8100128(u8 taskId)
task->data[0]++;
break;
case 2:
- sub_8100524(task, taskId);
+ AnimTask_LeafBladeStep2(task, taskId);
if (TranslateAnimHorizontalArc(sprite))
{
task->data[15] = 3;
@@ -3383,7 +3389,7 @@ static void sub_8100128(u8 taskId)
sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5];
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5];
- sprite->data[5] = sub_8100504(sprite);
+ sprite->data[5] = LeafBladeGetPosFactor(sprite);
task->data[3] = 2;
sprite->subpriority = task->data[4];
StartSpriteAnim(sprite, task->data[3]);
@@ -3400,7 +3406,7 @@ static void sub_8100128(u8 taskId)
sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5];
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5];
- sprite->data[5] = sub_8100504(sprite);
+ sprite->data[5] = LeafBladeGetPosFactor(sprite);
task->data[4] -= 2;
task->data[3] = 3;
sprite->subpriority = task->data[4];
@@ -3409,7 +3415,7 @@ static void sub_8100128(u8 taskId)
task->data[0]++;
break;
case 6:
- sub_8100524(task, taskId);
+ AnimTask_LeafBladeStep2(task, taskId);
if (TranslateAnimHorizontalArc(sprite))
{
task->data[15] = 7;
@@ -3426,7 +3432,7 @@ static void sub_8100128(u8 taskId)
sprite->data[2] = task->data[6];
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = task->data[7];
- sprite->data[5] = sub_8100504(sprite);
+ sprite->data[5] = LeafBladeGetPosFactor(sprite);
task->data[4] += 2;
task->data[3] = 4;
sprite->subpriority = task->data[4];
@@ -3444,7 +3450,7 @@ static void sub_8100128(u8 taskId)
sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5];
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5];
- sprite->data[5] = sub_8100504(sprite);
+ sprite->data[5] = LeafBladeGetPosFactor(sprite);
task->data[3] = 5;
sprite->subpriority = task->data[4];
StartSpriteAnim(sprite, task->data[3]);
@@ -3452,7 +3458,7 @@ static void sub_8100128(u8 taskId)
task->data[0]++;
break;
case 10:
- sub_8100524(task, taskId);
+ AnimTask_LeafBladeStep2(task, taskId);
if (TranslateAnimHorizontalArc(sprite))
{
task->data[15] = 11;
@@ -3470,7 +3476,7 @@ static void sub_8100128(u8 taskId)
sprite->data[2] = task->data[8];
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = task->data[9];
- sprite->data[5] = sub_8100504(sprite);
+ sprite->data[5] = LeafBladeGetPosFactor(sprite);
task->data[4] -= 2;
task->data[3] = 6;
sprite->subpriority = task->data[4];
@@ -3480,7 +3486,7 @@ static void sub_8100128(u8 taskId)
break;
}
case 12:
- sub_8100524(task, taskId);
+ AnimTask_LeafBladeStep2(task, taskId);
if (TranslateAnimHorizontalArc(sprite))
{
DestroySprite(sprite);
@@ -3501,7 +3507,7 @@ static void sub_8100128(u8 taskId)
}
}
-static s16 sub_8100504(struct Sprite* sprite)
+static s16 LeafBladeGetPosFactor(struct Sprite* sprite)
{
s16 var = 8;
if (sprite->data[4] < sprite->pos1.y)
@@ -3510,7 +3516,7 @@ static s16 sub_8100504(struct Sprite* sprite)
return var;
}
-static void sub_8100524(struct Task* task, u8 taskId)
+static void AnimTask_LeafBladeStep2(struct Task* task, u8 taskId)
{
task->data[14]++;
if (task->data[14] > 0)
@@ -3521,7 +3527,7 @@ static void sub_8100524(struct Task* task, u8 taskId)
task->data[14] = 0;
spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x;
spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y;
- spriteId = CreateSprite(&gUnknown_08592778, spriteX, spriteY, task->data[4]);
+ spriteId = CreateSprite(&gLeafBladeSpriteTemplate, spriteX, spriteY, task->data[4]);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[6] = taskId;
@@ -3531,12 +3537,12 @@ static void sub_8100524(struct Task* task, u8 taskId)
gTasks[taskId].data[13]++;
StartSpriteAnim(&gSprites[spriteId], task->data[3]);
gSprites[spriteId].subpriority = task->data[4];
- gSprites[spriteId].callback = sub_80CC408;
+ gSprites[spriteId].callback = AnimTask_LeafBladeStep2_Callback;
}
}
}
-static void sub_80CC408(struct Sprite* sprite)
+static void AnimTask_LeafBladeStep2_Callback(struct Sprite* sprite)
{
sprite->data[0]++;
if (sprite->data[0] > 1)
@@ -3552,7 +3558,7 @@ static void sub_80CC408(struct Sprite* sprite)
}
}
-void sub_8100640(struct Sprite* sprite)
+void AnimFlyingParticle(struct Sprite* sprite)
{
u8 battler;
if (!gBattleAnimArgs[6])
@@ -3597,10 +3603,10 @@ void sub_8100640(struct Sprite* sprite)
break;
}
- sprite->callback = sub_810074C;
+ sprite->callback = AnimFlyingParticleStep;
}
-static void sub_810074C(struct Sprite* sprite)
+static void AnimFlyingParticleStep(struct Sprite* sprite)
{
int a = sprite->data[7];
sprite->data[7]++;
@@ -3651,7 +3657,7 @@ void sub_81007C4(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_8100898(struct Sprite* sprite)
+void AnimNeedleArmSpike(struct Sprite* sprite)
{
u8 a;
u8 b;
@@ -3703,11 +3709,11 @@ void sub_8100898(struct Sprite* sprite)
c -= 0x8000;
TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c);
- sprite->callback = sub_81009A0;
+ sprite->callback = AnimNeedleArmSpikeStep;
}
}
-static void sub_81009A0(struct Sprite* sprite)
+static void AnimNeedleArmSpikeStep(struct Sprite* sprite)
{
if (sprite->data[0])
{
@@ -3746,7 +3752,7 @@ void sub_81009F8(struct Sprite* sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_8100A50(struct Sprite* sprite)
+void AnimWhipHit(struct Sprite* sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
StartSpriteAnim(sprite, 1);
@@ -3800,7 +3806,7 @@ void AnimCuttingSlice(struct Sprite* sprite)
sprite->data[1] = -sprite->data[1];
}
-void sub_8100B88(struct Sprite* sprite)
+void AnimAirCutterSlice(struct Sprite* sprite)
{
u8 a;
u8 b;
@@ -3937,7 +3943,7 @@ static void sub_8100E80(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_8100EF0(struct Sprite* sprite)
+void AnimProtect(struct Sprite* sprite)
{
if (IsContest())
gBattleAnimArgs[1] += 8;
@@ -3954,10 +3960,10 @@ void sub_8100EF0(struct Sprite* sprite)
sprite->data[7] = 16;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7]));
- sprite->callback = sub_8100FD4;
+ sprite->callback = AnimProtectStep;
}
-static void sub_8100FD4(struct Sprite *sprite)
+static void AnimProtectStep(struct Sprite *sprite)
{
int a;
int i;
@@ -4000,7 +4006,7 @@ static void sub_8100FD4(struct Sprite *sprite)
}
}
-void sub_81010CC(struct Sprite* sprite)
+void AnimMilkBottle(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 0xFFE8;
@@ -4013,10 +4019,10 @@ void sub_81010CC(struct Sprite* sprite)
sprite->data[7] = 16;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
- sprite->callback = sub_8101138;
+ sprite->callback = AnimMilkBottleStep1;
}
-static void sub_8101138(struct Sprite* sprite)
+static void AnimMilkBottleStep1(struct Sprite* sprite)
{
switch (sprite->data[0])
{
@@ -4049,7 +4055,7 @@ static void sub_8101138(struct Sprite* sprite)
}
break;
case 2:
- sub_8101298(sprite, 16, 4);
+ AnimMilkBottleStep2(sprite, 16, 4);
if (++sprite->data[1] > 2)
{
sprite->data[1] = 0;
@@ -4089,7 +4095,7 @@ static void sub_8101138(struct Sprite* sprite)
}
}
-static void sub_8101298(struct Sprite* sprite, int unk1, int unk2)
+static void AnimMilkBottleStep2(struct Sprite* sprite, int unk1, int unk2)
{
if (sprite->data[3] <= 11)
sprite->data[4] += 2;
@@ -4110,7 +4116,7 @@ static void sub_8101298(struct Sprite* sprite, int unk1, int unk2)
sprite->data[3] = 0;
}
-void sub_810130C(struct Sprite* sprite)
+void AnimGrantingStars(struct Sprite* sprite)
{
if (!gBattleAnimArgs[2])
SetSpriteCoordsToAnimAttackerCoords(sprite);
@@ -4124,7 +4130,7 @@ void sub_810130C(struct Sprite* sprite)
sprite->callback = TranslateSpriteLinearFixedPoint;
}
-void sub_810135C(struct Sprite* sprite)
+void AnimSparkingStars(struct Sprite* sprite)
{
u8 battler;
if (!gBattleAnimArgs[2])
@@ -4192,7 +4198,7 @@ static void sub_81014A0(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_81014F4(struct Sprite* sprite)
+void AnimSleepLetterZ(struct Sprite* sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
@@ -4209,10 +4215,10 @@ void sub_81014F4(struct Sprite* sprite)
StartSpriteAffineAnim(sprite, 1);
}
- sprite->callback = sub_8101560;
+ sprite->callback = AnimSleepLetterZStep;
}
-static void sub_8101560(struct Sprite* sprite)
+static void AnimSleepLetterZStep(struct Sprite* sprite)
{
sprite->pos2.y = -(sprite->data[0] / 0x28);
sprite->pos2.x = sprite->data[4] / 10;
@@ -4222,23 +4228,23 @@ static void sub_8101560(struct Sprite* sprite)
DestroySpriteAndMatrix(sprite);
}
-void sub_81015AC(struct Sprite* sprite)
+void AnimLockOnTarget(struct Sprite* sprite)
{
sprite->pos1.x -= 32;
sprite->pos1.y -= 32;
sprite->data[0] = 20;
sprite->callback = WaitAnimForDuration;
- StoreSpriteCallbackInData6(sprite, sub_81015D4);
+ StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep1);
}
-static void sub_81015D4(struct Sprite* sprite)
+static void AnimLockOnTargetStep1(struct Sprite* sprite)
{
switch (sprite->data[5] & 1)
{
case 0:
sprite->data[0] = 1;
sprite->callback = WaitAnimForDuration;
- StoreSpriteCallbackInData6(sprite, sub_81015D4);
+ StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep1);
break;
case 1:
sprite->pos1.x += sprite->pos2.x;
@@ -4246,10 +4252,10 @@ static void sub_81015D4(struct Sprite* sprite)
sprite->pos2.y = 0;
sprite->pos2.x = 0;
sprite->data[0] = 8;
- sprite->data[2] = sprite->pos1.x + gUnknown_08592CD0[sprite->data[5] >> 8][0];
- sprite->data[4] = sprite->pos1.y + gUnknown_08592CD0[sprite->data[5] >> 8][1];
+ sprite->data[2] = sprite->pos1.x + gInclineMonCoordTable[sprite->data[5] >> 8][0];
+ sprite->data[4] = sprite->pos1.y + gInclineMonCoordTable[sprite->data[5] >> 8][1];
sprite->callback = StartAnimLinearTranslation;
- StoreSpriteCallbackInData6(sprite, sub_8101684);
+ StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep2);
sprite->data[5] += 0x100;
PlaySE12WithPanning(SE_W199, BattleAnimAdjustPanning(63));
break;
@@ -4258,21 +4264,21 @@ static void sub_81015D4(struct Sprite* sprite)
sprite->data[5] ^= 1;
}
-static void sub_8101684(struct Sprite* sprite)
+static void AnimLockOnTargetStep2(struct Sprite* sprite)
{
if ((sprite->data[5] >> 8) == 4)
{
sprite->data[0] = 10;
sprite->callback = WaitAnimForDuration;
- StoreSpriteCallbackInData6(sprite, sub_81016B8);
+ StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep3);
}
else
{
- sprite->callback = sub_81015D4;
+ sprite->callback = AnimLockOnTargetStep1;
}
}
-static void sub_81016B8(struct Sprite* sprite)
+static void AnimLockOnTargetStep3(struct Sprite* sprite)
{
s16 a;
s16 b;
@@ -4282,7 +4288,7 @@ static void sub_81016B8(struct Sprite* sprite)
sprite->data[1] = 0;
sprite->data[2] = 0;
sprite->callback = WaitAnimForDuration;
- StoreSpriteCallbackInData6(sprite, sub_8101774);
+ StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep4);
}
else
{
@@ -4314,11 +4320,11 @@ static void sub_81016B8(struct Sprite* sprite)
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + a;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + b;
sprite->callback = StartAnimLinearTranslation;
- StoreSpriteCallbackInData6(sprite, sub_8101820);
+ StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep5);
}
}
-static void sub_8101774(struct Sprite* sprite)
+static void AnimLockOnTargetStep4(struct Sprite* sprite)
{
if (sprite->data[2] == 0)
{
@@ -4341,21 +4347,21 @@ static void sub_8101774(struct Sprite* sprite)
}
else if (sprite->data[1] == 0)
{
- sprite->callback = sub_8101820;
+ sprite->callback = AnimLockOnTargetStep5;
}
}
-static void sub_8101820(struct Sprite* sprite)
+static void AnimLockOnTargetStep5(struct Sprite* sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
sprite->data[1] = 0;
sprite->data[0] = 0;
- sprite->callback = sub_8101848;
+ sprite->callback = AnimLockOnTargetStep6;
}
}
-static void sub_8101848(struct Sprite* sprite)
+static void AnimLockOnTargetStep6(struct Sprite* sprite)
{
if (sprite->data[0] % 3 == 0)
{
@@ -4368,7 +4374,7 @@ static void sub_8101848(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_8101898(struct Sprite* sprite)
+void AnimLockOnMoveTarget(struct Sprite* sprite)
{
sprite->oam.affineParam = gBattleAnimArgs[0];
if ((s16)sprite->oam.affineParam == 1)
@@ -4396,42 +4402,42 @@ void sub_8101898(struct Sprite* sprite)
}
sprite->oam.tileNum = (sprite->oam.tileNum + 16);
- sprite->callback = sub_81015AC;
+ sprite->callback = AnimLockOnTarget;
sprite->callback(sprite);
}
-void sub_8101940(struct Sprite* sprite)
+void AnimBowMon(struct Sprite* sprite)
{
sprite->invisible = 1;
sprite->data[0] = 0;
switch (gBattleAnimArgs[0])
{
case 0:
- sprite->callback = sub_8101998;
+ sprite->callback = AnimBowMonStep1;
break;
case 1:
- sprite->callback = sub_8101A74;
+ sprite->callback = AnimBowMonStep2;
break;
case 2:
- sprite->callback = sub_8101AC4;
+ sprite->callback = AnimBowMonStep3;
break;
default:
- sprite->callback = sub_8101B84;
+ sprite->callback = AnimBowMonStep4;
break;
}
}
-static void sub_8101998(struct Sprite* sprite)
+static void AnimBowMonStep1(struct Sprite* sprite)
{
sprite->data[0] = 6;
sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? 2 : -2;
sprite->data[2] = 0;
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
- StoreSpriteCallbackInData6(sprite, sub_81019E8);
+ StoreSpriteCallbackInData6(sprite, AnimBowMonStep1_Callback);
sprite->callback = TranslateMonSpriteLinear;
}
-static void sub_81019E8(struct Sprite* sprite)
+static void AnimBowMonStep1_Callback(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
@@ -4447,30 +4453,30 @@ static void sub_81019E8(struct Sprite* sprite)
if (++sprite->data[0] > 3)
{
sprite->data[0] = 0;
- sprite->callback = sub_8101B84;
+ sprite->callback = AnimBowMonStep4;
}
}
-static void sub_8101A74(struct Sprite* sprite)
+static void AnimBowMonStep2(struct Sprite* sprite)
{
sprite->data[0] = 4;
sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? -3 : 3;
sprite->data[2] = 0;
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
- StoreSpriteCallbackInData6(sprite, sub_8101B84);
+ StoreSpriteCallbackInData6(sprite, AnimBowMonStep4);
sprite->callback = TranslateMonSpriteLinear;
}
-static void sub_8101AC4(struct Sprite* sprite)
+static void AnimBowMonStep3(struct Sprite* sprite)
{
if (++sprite->data[0] > 8)
{
sprite->data[0] = 0;
- sprite->callback = sub_8101AE8;
+ sprite->callback = AnimBowMonStep3_Callback;
}
}
-static void sub_8101AE8(struct Sprite* sprite)
+static void AnimBowMonStep3_Callback(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
@@ -4494,11 +4500,11 @@ static void sub_8101AE8(struct Sprite* sprite)
if (++sprite->data[0] > 2)
{
ResetSpriteRotScale(sprite->data[3]);
- sprite->callback = sub_8101B84;
+ sprite->callback = AnimBowMonStep4;
}
}
-static void sub_8101B84(struct Sprite* sprite)
+static void AnimBowMonStep4(struct Sprite* sprite)
{
DestroyAnimSprite(sprite);
}
@@ -4546,7 +4552,7 @@ static void sub_8101BA0(struct Sprite *sprite)
}
}
-void sub_8101C94(u8 taskId)
+void AnimTask_SkullBashPosition(u8 taskId)
{
u8 a;
@@ -4567,7 +4573,7 @@ void sub_8101C94(u8 taskId)
if (a == 0)
gTasks[taskId].data[5] *= -1;
- gTasks[taskId].func = sub_8101D2C;
+ gTasks[taskId].func = AnimTask_SkullBashPositionSet;
break;
case 1:
gTasks[taskId].data[3] = 8;
@@ -4579,12 +4585,12 @@ void sub_8101C94(u8 taskId)
gTasks[taskId].data[5] = -gTasks[taskId].data[5];
}
- gTasks[taskId].func = sub_8101EEC;
+ gTasks[taskId].func = AnimTask_SkullBashPositionReset;
break;
}
}
-static void sub_8101D2C(u8 taskId)
+static void AnimTask_SkullBashPositionSet(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[2])
@@ -4675,7 +4681,7 @@ static void sub_8101D2C(u8 taskId)
}
}
-static void sub_8101EEC(u8 taskId)
+static void AnimTask_SkullBashPositionReset(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (task->data[3])
@@ -4692,7 +4698,7 @@ static void sub_8101EEC(u8 taskId)
}
}
-void sub_8101F40(struct Sprite* sprite)
+void AnimSlashSlice(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -4707,48 +4713,48 @@ void sub_8101F40(struct Sprite* sprite)
sprite->data[0] = 0;
sprite->data[1] = 0;
- StoreSpriteCallbackInData6(sprite, sub_810208C);
+ StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep3);
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
-void sub_8101FA8(struct Sprite* sprite)
+void AnimFalseSwipeSlice(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0;
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
- StoreSpriteCallbackInData6(sprite, sub_8102044);
+ StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep1);
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
-void sub_8101FF0(struct Sprite* sprite)
+void AnimFalseSwipePositionedSlice(struct Sprite* sprite)
{
sprite->pos1.x = sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0 + gBattleAnimArgs[0];
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
StartSpriteAnim(sprite, 1);
sprite->data[0] = 0;
sprite->data[1] = 0;
- sprite->callback = sub_810208C;
+ sprite->callback = AnimFalseSwipeSliceStep3;
}
-static void sub_8102044(struct Sprite* sprite)
+static void AnimFalseSwipeSliceStep1(struct Sprite* sprite)
{
if (++sprite->data[0] > 8)
{
sprite->data[0] = 12;
sprite->data[1] = 8;
sprite->data[2] = 0;
- StoreSpriteCallbackInData6(sprite, sub_810207C);
+ StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep2);
sprite->callback = TranslateSpriteLinear;
}
}
-static void sub_810207C(struct Sprite* sprite)
+static void AnimFalseSwipeSliceStep2(struct Sprite* sprite)
{
sprite->data[0] = 0;
sprite->data[1] = 0;
- sprite->callback = sub_810208C;
+ sprite->callback = AnimFalseSwipeSliceStep3;
}
-static void sub_810208C(struct Sprite* sprite)
+static void AnimFalseSwipeSliceStep3(struct Sprite* sprite)
{
if (++sprite->data[0] > 1)
{
@@ -4759,7 +4765,7 @@ static void sub_810208C(struct Sprite* sprite)
}
}
-void sub_81020D8(struct Sprite* sprite)
+void AnimEndureEnergy(struct Sprite* sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -4774,10 +4780,10 @@ void sub_81020D8(struct Sprite* sprite)
sprite->data[0] = 0;
sprite->data[1] = gBattleAnimArgs[3];
- sprite->callback = sub_810213C;
+ sprite->callback = AnimEndureEnergyStep;
}
-static void sub_810213C(struct Sprite* sprite)
+static void AnimEndureEnergyStep(struct Sprite* sprite)
{
if (++sprite->data[0] > sprite->data[1])
{
@@ -4790,7 +4796,7 @@ static void sub_810213C(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_810217C(struct Sprite* sprite)
+void AnimSharpenSphere(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - 12;
@@ -4800,10 +4806,10 @@ void sub_810217C(struct Sprite* sprite)
sprite->data[3] = 0;
sprite->data[4] = 0;
sprite->data[5] = BattleAnimAdjustPanning(-64);
- sprite->callback = sub_81021CC;
+ sprite->callback = AnimSharpenSphereStep;
}
-static void sub_81021CC(struct Sprite* sprite)
+static void AnimSharpenSphereStep(struct Sprite* sprite)
{
if (++sprite->data[0] >= sprite->data[1])
{
@@ -4827,7 +4833,7 @@ static void sub_81021CC(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_8102268(struct Sprite* sprite)
+void AnimConversion(struct Sprite* sprite)
{
if (sprite->data[0] == 0)
{
@@ -4843,7 +4849,7 @@ void sub_8102268(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_81022D4(u8 taskId)
+void AnimTask_ConversionAlphaBlend(u8 taskId)
{
if (gTasks[taskId].data[2] == 1)
{
@@ -4867,15 +4873,15 @@ void sub_81022D4(u8 taskId)
}
}
-void sub_810234C(struct Sprite* sprite)
+void AnimConversion2(struct Sprite* sprite)
{
InitSpritePosToAnimTarget(sprite, FALSE);
sprite->animPaused = 1;
sprite->data[0] = gBattleAnimArgs[2];
- sprite->callback = sub_810237C;
+ sprite->callback = AnimConversion2Step;
}
-static void sub_810237C(struct Sprite* sprite)
+static void AnimConversion2Step(struct Sprite* sprite)
{
if (sprite->data[0])
{
@@ -4892,7 +4898,7 @@ static void sub_810237C(struct Sprite* sprite)
}
}
-void sub_81023E0(u8 taskId)
+void AnimTask_Conversion2AlphaBlend(u8 taskId)
{
if (++gTasks[taskId].data[0] == 4)
{
@@ -4928,7 +4934,7 @@ void unref_sub_81024A8(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_81024E0(struct Sprite* sprite)
+void AnimMoon(struct Sprite* sprite)
{
if (IsContest())
{
@@ -4944,16 +4950,16 @@ void sub_81024E0(struct Sprite* sprite)
sprite->oam.shape = 0;
sprite->oam.size = 3;
sprite->data[0] = 0;
- sprite->callback = sub_8102528;
+ sprite->callback = AnimMoonStep;
}
-static void sub_8102528(struct Sprite* sprite)
+static void AnimMoonStep(struct Sprite* sprite)
{
if (sprite->data[0])
DestroyAnimSprite(sprite);
}
-void sub_8102540(struct Sprite* sprite)
+void AnimMoonlightSparkle(struct Sprite* sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
sprite->pos1.y = gBattleAnimArgs[1];
@@ -4962,10 +4968,10 @@ void sub_8102540(struct Sprite* sprite)
sprite->data[2] = 0;
sprite->data[3] = 0;
sprite->data[4] = 1;
- sprite->callback = sub_8102584;
+ sprite->callback = AnimMoonlightSparkleStep;
}
-static void sub_8102584(struct Sprite* sprite)
+static void AnimMoonlightSparkleStep(struct Sprite* sprite)
{
if (++sprite->data[1] > 1)
{
@@ -4981,10 +4987,10 @@ static void sub_8102584(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_81026A8(u8);
+void AnimTask_FadeScreenBlueStep(u8);
-void sub_81025C0(u8 taskId)
+void AnimTask_FadeScreenBlue(u8 taskId)
{
int a = sub_80A75AC(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
int b;
@@ -5007,11 +5013,11 @@ void sub_81025C0(u8 taskId)
b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON));
d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE);
BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31));
- gTasks[taskId].func = sub_81026A8;
+ gTasks[taskId].func = AnimTask_FadeScreenBlueStep;
gTasks[taskId].func(taskId);
}
-void sub_81026A8(u8 taskId)
+void AnimTask_FadeScreenBlueStep(u8 taskId)
{
struct Task* task = &gTasks[taskId];
switch (task->data[0])
@@ -5067,7 +5073,7 @@ void sub_81026A8(u8 taskId)
u8 spriteId;
for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++)
{
- if (gSprites[spriteId].template == &gUnknown_08592EBC || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_8592EEC)
+ if (gSprites[spriteId].template == &gMoonSpriteTemplate || gSprites[spriteId].template == &gMoonlightSparkleSpriteTemplate)
gSprites[spriteId].data[0] = 1;
}
@@ -5089,7 +5095,7 @@ void sub_81026A8(u8 taskId)
}
}
-void sub_8102844(struct Sprite* sprite)
+void AnimHornHit(struct Sprite* sprite)
{
if (gBattleAnimArgs[2] < 2)
gBattleAnimArgs[2] = 2;
@@ -5133,10 +5139,10 @@ void sub_8102844(struct Sprite* sprite)
sprite->oam.matrixNum = (ST_OAM_HFLIP | ST_OAM_VFLIP);
}
- sprite->callback = sub_810296C;
+ sprite->callback = AnimHornHitStep;
}
-static void sub_810296C(struct Sprite* sprite)
+static void AnimHornHitStep(struct Sprite* sprite)
{
sprite->data[2] += sprite->data[3];
sprite->data[4] += sprite->data[5];
@@ -5152,7 +5158,7 @@ static void sub_810296C(struct Sprite* sprite)
DestroyAnimSprite(sprite);
}
-void sub_81029B4(u8 taskId)
+void AnimTask_DoubleTeam(u8 taskId)
{
u16 i;
int obj;
@@ -5175,19 +5181,19 @@ void sub_81029B4(u8 taskId)
gSprites[obj].data[0] = 0;
gSprites[obj].data[1] = i << 7;
gSprites[obj].data[2] = taskId;
- gSprites[obj].callback = sub_8102B3C;
+ gSprites[obj].callback = AnimTask_DoubleTeamCallback;
task->data[3]++;
i++;
}
- task->func = sub_8102AE0;
+ task->func = AnimTask_DoubleTeamStep;
if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
else
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
}
-static void sub_8102AE0(u8 taskId)
+static void AnimTask_DoubleTeamStep(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (!task->data[3])
@@ -5202,7 +5208,7 @@ static void sub_8102AE0(u8 taskId)
}
}
-static void sub_8102B3C(struct Sprite* sprite)
+static void AnimTask_DoubleTeamCallback(struct Sprite* sprite)
{
if (++sprite->data[3] > 1)
{
@@ -5224,57 +5230,57 @@ static void sub_8102B3C(struct Sprite* sprite)
}
}
-void sub_8102BCC(struct Sprite* sprite)
+void AnimSuperFang(struct Sprite* sprite)
{
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
-void sub_8102BE8(u8 taskId)
+void AnimTask_MusicNotesRainbowBlend(u8 taskId)
{
u16 i;
u16 j;
u16 index;
- index = IndexOfSpritePaletteTag(gUnknown_08593020[0][0]);
+ index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[0][0]);
if (index != 0xFF)
{
index = (index << 4) + 0x100;
- for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++)
- gPlttBufferFaded[index + i] = gUnknown_08593020[0][i];
+ for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++)
+ gPlttBufferFaded[index + i] = gParticlesColorBlendTable[0][i];
}
- for (j = 1; j < ARRAY_COUNT(gUnknown_08593020); j++)
+ for (j = 1; j < ARRAY_COUNT(gParticlesColorBlendTable); j++)
{
- index = AllocSpritePalette(gUnknown_08593020[j][0]);
+ index = AllocSpritePalette(gParticlesColorBlendTable[j][0]);
if (index != 0xFF)
{
index = (index << 4) + 0x100;
- for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++)
- gPlttBufferFaded[index + i] = gUnknown_08593020[j][i];
+ for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++)
+ gPlttBufferFaded[index + i] = gParticlesColorBlendTable[j][i];
}
}
DestroyAnimVisualTask(taskId);
}
// clears the rainbow effect for musical notes.
-void sub_8102CA0(u8 taskId)
+void AnimTask_MusicNotesClearRainbowBlend(u8 taskId)
{
u16 i;
- for (i = 1; i < ARRAY_COUNT(gUnknown_08593020); i++)
- FreeSpritePaletteByTag(gUnknown_08593020[i][0]);
+ for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable); i++)
+ FreeSpritePaletteByTag(gParticlesColorBlendTable[i][0]);
DestroyAnimVisualTask(taskId);
}
-void sub_8102CD4(struct Sprite* sprite)
+void AnimWavyMusicNotes(struct Sprite* sprite)
{
u8 index;
u8 a;
u8 b;
SetSpriteCoordsToAnimAttackerCoords(sprite);
StartSpriteAnim(sprite, gBattleAnimArgs[0]);
- if ((index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[1]][0])) != 0xFF)
+ if ((index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[1]][0])) != 0xFF)
sprite->oam.paletteNum = index;
sprite->data[1] = gBattleAnimArgs[1];
@@ -5293,11 +5299,11 @@ void sub_8102CD4(struct Sprite* sprite)
sprite->data[4] = sprite->pos1.x << 4;
sprite->data[5] = sprite->pos1.y << 4;
- sub_8102D8C(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 40);
- sprite->callback = sub_8102DE4;
+ AnimWavyMusicNotesGetNextPos(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 40);
+ sprite->callback = AnimWavyMusicNotesStep;
}
-static void sub_8102D8C(s16 a, s16 b, s16* c, s16* d, s8 e)
+static void AnimWavyMusicNotesGetNextPos(s16 a, s16 b, s16* c, s16* d, s8 e)
{
int f;
int g;
@@ -5313,7 +5319,7 @@ static void sub_8102D8C(s16 a, s16 b, s16* c, s16* d, s8 e)
*d = (b << 8) / g;
}
-static void sub_8102DE4(struct Sprite* sprite)
+static void AnimWavyMusicNotesStep(struct Sprite* sprite)
{
s16 y, yDelta;
u8 index;
@@ -5339,14 +5345,14 @@ static void sub_8102DE4(struct Sprite* sprite)
if (++sprite->data[1] > 3)
sprite->data[1] = 0;
- index = IndexOfSpritePaletteTag(gUnknown_08593020[sprite->data[1]][0]);
+ index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->data[1]][0]);
if (index != 0xFF)
sprite->oam.paletteNum = index;
}
}
}
-void sub_8102EB0(struct Sprite* sprite)
+void AnimFlyingMusicNotes(struct Sprite* sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
gBattleAnimArgs[1] *= -1;
@@ -5360,10 +5366,10 @@ void sub_8102EB0(struct Sprite* sprite)
sprite->data[5] = sprite->pos1.y << 4;
sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5;
sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5;
- sprite->callback = sub_8102F40;
+ sprite->callback = AnimFlyingMusicNotesStep;
}
-static void sub_8102F40(struct Sprite* sprite)
+static void AnimFlyingMusicNotesStep(struct Sprite* sprite)
{
sprite->data[4] += sprite->data[6];
sprite->data[5] += sprite->data[7];
@@ -5382,7 +5388,7 @@ static void sub_8102F40(struct Sprite* sprite)
DestroySpriteAndMatrix(sprite);
}
-void sub_8102FB8(struct Sprite* sprite)
+void AnimBellyDrumHand(struct Sprite* sprite)
{
s16 a;
if (gBattleAnimArgs[0] == 1)
@@ -5402,14 +5408,14 @@ void sub_8102FB8(struct Sprite* sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_8103028(struct Sprite* sprite)
+void AnimSlowFlyingMusicNotes(struct Sprite* sprite)
{
s16 xDiff;
u8 index;
SetSpriteCoordsToAnimAttackerCoords(sprite);
sprite->pos1.y += 8;
StartSpriteAnim(sprite, gBattleAnimArgs[1]);
- index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[2]][0]);
+ index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[2]][0]);
if (index != 0xFF)
sprite->oam.paletteNum = index;
@@ -5421,10 +5427,10 @@ void sub_8103028(struct Sprite* sprite)
sprite->data[4] = sprite->data[3] - 40;
InitAnimLinearTranslation(sprite);
sprite->data[5] = gBattleAnimArgs[3];
- sprite->callback = sub_81030B0;
+ sprite->callback = AnimSlowFlyingMusicNotesStep;
}
-static void sub_81030B0(struct Sprite* sprite)
+static void AnimSlowFlyingMusicNotesStep(struct Sprite* sprite)
{
if (AnimTranslateLinear(sprite) == 0)
{
@@ -5443,7 +5449,7 @@ static void sub_81030B0(struct Sprite* sprite)
}
}
-void sub_810310C(u8 battler, struct Sprite* sprite)
+void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite)
{
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8;
@@ -5453,7 +5459,7 @@ void sub_810310C(u8 battler, struct Sprite* sprite)
sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4;
}
-void sub_8103164(struct Sprite* sprite)
+void AnimThoughtBubble(struct Sprite* sprite)
{
u8 a;
u8 battler;
@@ -5462,16 +5468,16 @@ void sub_8103164(struct Sprite* sprite)
else
battler = gBattleAnimTarget;
- sub_810310C(battler, sprite);
+ SetSpriteNextToMonHead(battler, sprite);
a = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1;
sprite->data[0] = gBattleAnimArgs[1];
sprite->data[1] = a + 2;
StartSpriteAnim(sprite, a);
- StoreSpriteCallbackInData6(sprite, sub_81031D0);
+ StoreSpriteCallbackInData6(sprite, AnimThoughtBubbleStep);
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
-static void sub_81031D0(struct Sprite* sprite)
+static void AnimThoughtBubbleStep(struct Sprite* sprite)
{
if (--sprite->data[0] == 0)
{
@@ -5481,7 +5487,7 @@ static void sub_81031D0(struct Sprite* sprite)
}
}
-void sub_8103208(struct Sprite* sprite)
+void AnimMetronomeFinger(struct Sprite* sprite)
{
u8 battler;
if (gBattleAnimArgs[0] == 0)
@@ -5489,13 +5495,13 @@ void sub_8103208(struct Sprite* sprite)
else
battler = gBattleAnimTarget;
- sub_810310C(battler, sprite);
+ SetSpriteNextToMonHead(battler, sprite);
sprite->data[0] = 0;
- StoreSpriteCallbackInData6(sprite, sub_8103250);
+ StoreSpriteCallbackInData6(sprite, AnimMetronomeFingerStep);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
-static void sub_8103250(struct Sprite* sprite)
+static void AnimMetronomeFingerStep(struct Sprite* sprite)
{
if (++sprite->data[0] > 16)
{
@@ -5505,7 +5511,7 @@ static void sub_8103250(struct Sprite* sprite)
}
}
-void sub_8103284(struct Sprite* sprite)
+void AnimFollowMeFinger(struct Sprite* sprite)
{
u8 battler;
if (gBattleAnimArgs[0] == 0)
@@ -5523,17 +5529,17 @@ void sub_8103284(struct Sprite* sprite)
sprite->data[2] = sprite->subpriority;
sprite->data[3] = sprite->subpriority + 4;
sprite->data[4] = 0;
- StoreSpriteCallbackInData6(sprite, sub_8103300);
+ StoreSpriteCallbackInData6(sprite, AnimFollowMeFingerStep1);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
-static void sub_8103300(struct Sprite* sprite)
+static void AnimFollowMeFingerStep1(struct Sprite* sprite)
{
if (++sprite->data[4] > 12)
- sprite->callback = sub_8103320;
+ sprite->callback = AnimFollowMeFingerStep2;
}
-static void sub_8103320(struct Sprite* sprite)
+static void AnimFollowMeFingerStep2(struct Sprite* sprite)
{
s16 x1, x2;
@@ -5543,7 +5549,7 @@ static void sub_8103320(struct Sprite* sprite)
if (--sprite->data[0] == 0)
{
sprite->pos2.x = 0;
- sprite->callback = sub_8103250;
+ sprite->callback = AnimMetronomeFingerStep;
return;
}
else
@@ -5563,7 +5569,7 @@ static void sub_8103320(struct Sprite* sprite)
sprite->pos2.x = (x1 >> 3) + (x2 >> 1);
}
-void sub_8103390(struct Sprite* sprite)
+void AnimTauntFinger(struct Sprite* sprite)
{
u8 battler;
if (gBattleAnimArgs[0] == 0)
@@ -5571,7 +5577,7 @@ void sub_8103390(struct Sprite* sprite)
else
battler = gBattleAnimTarget;
- sub_810310C(battler, sprite);
+ SetSpriteNextToMonHead(battler, sprite);
if (GetBattlerSide(battler) == B_SIDE_PLAYER)
{
StartSpriteAnim(sprite, 0);
@@ -5583,21 +5589,21 @@ void sub_8103390(struct Sprite* sprite)
sprite->data[0] = 3;
}
- sprite->callback = sub_81033F0;
+ sprite->callback = AnimTauntFingerStep1;
}
-static void sub_81033F0(struct Sprite* sprite)
+static void AnimTauntFingerStep1(struct Sprite* sprite)
{
if (++sprite->data[1] > 10)
{
sprite->data[1] = 0;
StartSpriteAnim(sprite, sprite->data[0]);
- StoreSpriteCallbackInData6(sprite, sub_810342C);
+ StoreSpriteCallbackInData6(sprite, AnimTauntFingerStep2);
sprite->callback = RunStoredCallbackWhenAnimEnds;
}
}
-static void sub_810342C(struct Sprite* sprite)
+static void AnimTauntFingerStep2(struct Sprite* sprite)
{
if (++sprite->data[1] > 5)
DestroyAnimSprite(sprite);
diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c
index 1add76bf3..273dedc38 100755
--- a/src/battle_anim_effects_2.c
+++ b/src/battle_anim_effects_2.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle_anim.h"
#include "battle_interface.h"
#include "decompress.h"
@@ -23,93 +23,94 @@ void sub_8103620(struct Sprite *);
void Anim_KinesisZapEnergy(struct Sprite *);
void Anim_SwordsDanceBlade(struct Sprite *);
void AnimSonicBoomProjectile(struct Sprite *);
-void sub_8103AA4(struct Sprite *);
+void AnimAirWaveProjectile(struct Sprite *);
void sub_8103FE8(struct Sprite *);
-void sub_8104088(struct Sprite *);
-void sub_810413C(struct Sprite *);
-void sub_81041C4(struct Sprite *);
-void Anim_RazorWindTornado(struct Sprite *);
-void Anim_ViceGripPincer(struct Sprite *);
-void Anim_GuillotinePincer(struct Sprite *);
-void Anim_BreathPuff(struct Sprite *);
-void Anim_AngerMark(struct Sprite *);
-void sub_810501C(struct Sprite *);
-void sub_81051C4(struct Sprite *);
-void sub_81052A4(struct Sprite *);
-void sub_81054E8(struct Sprite *);
-void sub_8105538(struct Sprite *);
-void sub_8105C48(struct Sprite *);
-void sub_8105DE8(struct Sprite *);
-void sub_8105E60(struct Sprite *);
-void sub_8106140(struct Sprite *);
-void sub_81061C4(struct Sprite *);
-void sub_810624C(struct Sprite *);
+void AnimCoinThrow(struct Sprite *);
+void AnimFallingCoin(struct Sprite *);
+void AnimBulletSeed(struct Sprite *);
+void AnimRazorWindTornado(struct Sprite *);
+void AnimViceGripPincer(struct Sprite *);
+void AnimGuillotinePincer(struct Sprite *);
+void AnimBreathPuff(struct Sprite *);
+void AnimAngerMark(struct Sprite *);
+void AnimPencil(struct Sprite *);
+void AnimBlendThinRing(struct Sprite *);
+void AnimHyperVoiceRing(struct Sprite *);
+void AnimUproarRing(struct Sprite *);
+void AnimSoftBoiledEgg(struct Sprite *);
+void AnimSpeedDust(struct Sprite *);
+void AnimHealBellMusicNote(struct Sprite *);
+void AnimMagentaHeart(struct Sprite *);
+void AnimRedHeartProjectile(struct Sprite *);
+void AnimParticuleBurst(struct Sprite *);
+void AnimRedHeartRising(struct Sprite *);
void AnimOrbitFast(struct Sprite *);
void AnimOrbitScatter(struct Sprite *);
-void sub_8106944(struct Sprite *);
-void sub_81069B8(struct Sprite *);
-void sub_81069D0(struct Sprite *);
-void sub_8106AD0(struct Sprite *);
-void sub_8106B54(struct Sprite *);
-void sub_8106C80(struct Sprite *);
-void sub_8106CD0(struct Sprite *);
-void sub_8106E00(struct Sprite *);
-void sub_8106F00(struct Sprite *);
-void sub_8106F60(struct Sprite *);
-void sub_81070AC(struct Sprite *);
+void AnimSpitUpOrb(struct Sprite *);
+void AnimEyeSparkle(struct Sprite *);
+void AnimAngel(struct Sprite *);
+void AnimPinkHeart(struct Sprite *);
+void AnimDevil(struct Sprite *);
+void AnimFurySwipes(struct Sprite *);
+void AnimMovmentWaves(struct Sprite *);
+void AnimJaggedMusicNote(struct Sprite *);
+void AnimPerishSongMusicNote2(struct Sprite *);
+void AnimPerishSongMusicNote(struct Sprite *);
+void AnimGuardRing(struct Sprite *);
static void sub_81034D8(struct Sprite *);
static void sub_8103658(struct Sprite *);
static void sub_8103680(struct Sprite *);
static void AnimTask_WithdrawStep(u8);
-static void Anim_SwordsDanceBladeStep(struct Sprite *);
+static void AnimSwordsDanceBladeStep(struct Sprite *);
static void sub_8104018(struct Sprite *);
-static void sub_8104154(struct Sprite *);
-static void sub_810421C(struct Sprite *);
-static void sub_81042A0(struct Sprite *);
-static void Anim_ViceGripPincerStep(struct Sprite *);
-static void Anim_GuillotinePincerStep1(struct Sprite *);
-static void Anim_GuillotinePincerStep2(struct Sprite *);
-static void Anim_GuillotinePincerStep3(struct Sprite *);
+static void AnimFallingCoin_Step(struct Sprite *);
+static void AnimBulletSeed_Step1(struct Sprite *);
+static void AnimBulletSeed_Step2(struct Sprite *);
+static void AnimViceGripPincerStep(struct Sprite *);
+static void AnimGuillotinePincerStep1(struct Sprite *);
+static void AnimGuillotinePincerStep2(struct Sprite *);
+static void AnimGuillotinePincerStep3(struct Sprite *);
static void AnimTask_GrowAndGreyscaleStep(u8);
static void AnimTask_MinimizeStep1(u8);
static void CreateMinimizeSprite(struct Task *, u8);
static void ClonedMinizeSprite_Step(struct Sprite *);
static void AnimTask_SplashStep(u8);
static void AnimTask_GrowAndShrinkStep(u8);
-static void sub_8104C78(u8);
-static void sub_8104D28(u8);
-static void sub_8104F54(u8);
-static void sub_8105078(struct Sprite *);
-static void sub_810557C(struct Sprite *);
-static void sub_81055F4(struct Sprite *);
-static void sub_810561C(struct Sprite *);
-static void sub_8105694(struct Sprite *);
-static void sub_81056D4(struct Sprite *);
-static void sub_810571C(struct Sprite *);
-static void sub_810575C(struct Sprite *);
-static void sub_81057B8(u8);
-static void sub_8105878(u8);
-static void sub_81059E0(u8);
-static void sub_8105B08(u8);
-static void sub_8105F30(u8);
-static void sub_8105F84(u8);
-static void sub_810618C(struct Sprite *);
-static void sub_810627C(struct Sprite *);
-static void sub_81063A8(u8);
-static void sub_81065EC(u8);
+static void ThrashMoveMonStep(u8);
+static void ThrashMoveMon(u8);
+static void AnimTask_SketchDrawMon(u8);
+static void AnimPencil_Step(struct Sprite *);
+static void AnimSoftBoiledEgg_Step1(struct Sprite *);
+static void AnimSoftBoiledEgg_Step2(struct Sprite *);
+static void AnimSoftBoiledEgg_Step3(struct Sprite *);
+static void AnimSoftBoiledEgg_Step3_Callback1(struct Sprite *);
+static void AnimSoftBoiledEgg_Step3_Callback2(struct Sprite *);
+static void AnimSoftBoiledEgg_Step4(struct Sprite *);
+static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *);
+static void StretchAttacker_Step(u8);
+static void ExtremeSpeedImpact_Step(u8);
+static void ExtremeSpeedMonReappear_Step(u8);
+static void SpeedDust_Step1(u8);
+static void FakeOutStep1(u8);
+static void FakeOutStep2(u8);
+static void AnimRedHeartProjectile_Step(struct Sprite *);
+static void AnimRedHeartRising_Step(struct Sprite *);
+static void HeartsBackground_Step(u8);
+static void ScaryFace_Step(u8);
static void AnimOrbitFastStep(struct Sprite *);
static void AnimOrbitScatterStep(struct Sprite *);
-static void sub_8106D5C(struct Sprite *);
-static void sub_8106DD4(u8);
-static void sub_8106EC8(struct Sprite *);
-static void sub_8107018(struct Sprite *);
-static void sub_810703C(struct Sprite *);
+static void AnimMovmentWaves_Step(struct Sprite *);
+static void UproarDistortion_Step(u8);
+static void AnimJaggedMusicNote_Step(struct Sprite *);
+static void AnimPerishSongMusicNote_Step1(struct Sprite *);
+static void AnimPerishSongMusicNote_Step2(struct Sprite *);
+// Unused
const struct SpriteTemplate gUnknown_08593264 =
{
.tileTag = ANIM_TAG_FINGER,
.paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -127,17 +128,19 @@ const union AnimCmd *const gUnknown_08593284[] =
gUnknown_0859327C,
};
+// Unused
const struct SpriteTemplate gUnknown_08593288 =
{
.tileTag = ANIM_TAG_MUSIC_NOTES,
.paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_8103498,
};
+// Unused
const struct SpriteTemplate gUnknown_085932A0 =
{
.tileTag = 0,
@@ -150,11 +153,12 @@ const struct SpriteTemplate gUnknown_085932A0 =
};
extern const union AffineAnimCmd *const gUnknown_08597060[];
+// Unused
const struct SpriteTemplate gUnknown_085932B8 =
{
.tileTag = ANIM_TAG_CLAMP,
.paletteTag = ANIM_TAG_CLAMP,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597060,
@@ -187,18 +191,19 @@ const union AffineAnimCmd *const gUnknown_08593300[] =
gUnknown_085932E8,
};
+// Unused
const struct SpriteTemplate gUnknown_08593304 =
{
.tileTag = ANIM_TAG_EXPLOSION_6,
.paletteTag = ANIM_TAG_EXPLOSION_6,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gUnknown_085932E4,
.images = NULL,
.affineAnims = gUnknown_08593300,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
-const union AnimCmd gUnknown_0859331C[] =
+const union AnimCmd gKinesisZapEnergyAnimCmds[] =
{
ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
ANIMCMD_FRAME(8, 3, .hFlip = TRUE),
@@ -211,23 +216,23 @@ const union AnimCmd gUnknown_0859331C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593340[] =
+const union AnimCmd *const gKinesisZapEnergyAnimTable[] =
{
- gUnknown_0859331C,
+ gKinesisZapEnergyAnimCmds,
};
const struct SpriteTemplate gKinesisZapEnergySpriteTemplate =
{
.tileTag = ANIM_TAG_ALERT,
.paletteTag = ANIM_TAG_ALERT,
- .oam = &gUnknown_08524934,
- .anims = gUnknown_08593340,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gKinesisZapEnergyAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = Anim_KinesisZapEnergy,
};
-const union AffineAnimCmd gUnknown_0859335C[] =
+const union AffineAnimCmd gSwordsDanceBladeAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12),
@@ -235,19 +240,19 @@ const union AffineAnimCmd gUnknown_0859335C[] =
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_0859337C[] =
+const union AffineAnimCmd *const gSwordsDanceBladeAffineAnimTable[] =
{
- gUnknown_0859335C,
+ gSwordsDanceBladeAffineAnimCmds,
};
const struct SpriteTemplate gSwordsDanceBladeSpriteTemplate =
{
.tileTag = ANIM_TAG_SWORD,
.paletteTag = ANIM_TAG_SWORD,
- .oam = &gUnknown_08524ADC,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_0859337C,
+ .affineAnims = gSwordsDanceBladeAffineAnimTable,
.callback = Anim_SwordsDanceBlade,
};
@@ -255,32 +260,32 @@ const struct SpriteTemplate gSonicBoomSpriteTemplate =
{
.tileTag = ANIM_TAG_AIR_WAVE,
.paletteTag = ANIM_TAG_AIR_WAVE,
- .oam = &gUnknown_08524B14,
+ .oam = &gOamData_AffineDouble_ObjBlend_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimSonicBoomProjectile,
};
-const struct SpriteTemplate gUnknown_085933B0 =
+const struct SpriteTemplate gAirWaveProjectileSpriteTemplate =
{
.tileTag = ANIM_TAG_AIR_WAVE,
.paletteTag = ANIM_TAG_AIR_WAVE,
- .oam = &gUnknown_08524A54,
+ .oam = &gOamData_AffineOff_ObjBlend_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103AA4,
+ .callback = AnimAirWaveProjectile,
};
-const union AffineAnimCmd gUnknown_085933C8[] =
+const union AffineAnimCmd gGrowingRingAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_085933E0[] =
+const union AffineAnimCmd gWaterPulseRingAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
@@ -292,24 +297,24 @@ const union AffineAnimCmd gUnknown_085933E0[] =
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_08593420[] =
+const union AffineAnimCmd *const gGrowingRingAffineAnimTable[] =
{
- gUnknown_085933C8,
+ gGrowingRingAffineAnimCmds,
};
-const union AffineAnimCmd *const gUnknown_08593424[] =
+const union AffineAnimCmd *const gWaterPulseRingAffineAnimTable[] =
{
- gUnknown_085933E0,
+ gWaterPulseRingAffineAnimCmds,
};
const struct SpriteTemplate gSupersonicWaveSpriteTemplate =
{
.tileTag = ANIM_TAG_GOLD_RING,
.paletteTag = ANIM_TAG_GOLD_RING,
- .oam = &gUnknown_08524A14,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593420,
+ .affineAnims = gGrowingRingAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation,
};
@@ -317,147 +322,148 @@ const struct SpriteTemplate gScreechWaveSpriteTemplate =
{
.tileTag = ANIM_TAG_PURPLE_RING,
.paletteTag = ANIM_TAG_PURPLE_RING,
- .oam = &gUnknown_08524A14,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593420,
+ .affineAnims = gGrowingRingAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation,
};
-const struct SpriteTemplate gUnknown_08593458 =
+const struct SpriteTemplate gMetalSoundSpriteTemplate =
{
.tileTag = ANIM_TAG_METAL_SOUND_WAVES,
.paletteTag = ANIM_TAG_METAL_SOUND_WAVES,
- .oam = &gUnknown_08524A1C,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593420,
+ .affineAnims = gGrowingRingAffineAnimTable,
.callback = TranslateAnimSpriteToTargetMonLocation,
};
-const struct SpriteTemplate gUnknown_08593470 =
+const struct SpriteTemplate gWaterPulseRingSpriteTemplate =
{
.tileTag = ANIM_TAG_BLUE_RING_2,
.paletteTag = ANIM_TAG_BLUE_RING_2,
- .oam = &gUnknown_08524A14,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593424,
- .callback = sub_8108C94,
+ .affineAnims = gWaterPulseRingAffineAnimTable,
+ .callback = AnimWaterPulseRing,
};
-const struct SpriteTemplate gUnknown_08593488 =
+const struct SpriteTemplate gEggThrowSpriteTemplate =
{
.tileTag = ANIM_TAG_LARGE_FRESH_EGG,
.paletteTag = ANIM_TAG_LARGE_FRESH_EGG,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A78AC,
+ .callback = AnimThrowProjectile,
};
+// Unused
const struct SpriteTemplate gUnknown_085934A0 =
{
.tileTag = ANIM_TAG_VOID_LINES,
.paletteTag = ANIM_TAG_VOID_LINES,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_8103FE8,
};
-const union AnimCmd gUnknown_085934B8[] =
+const union AnimCmd gCoinAnimCmds[] =
{
ANIMCMD_FRAME(8, 1),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085934C0[] =
+const union AnimCmd *const gCoinAnimTable[] =
{
- gUnknown_085934B8,
+ gCoinAnimCmds,
};
-const union AffineAnimCmd gUnknown_085934C4[] =
+const union AffineAnimCmd gFallingCoinAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_085934D4[] =
+const union AffineAnimCmd *const gFallingCoinAffineAnimTable[] =
{
- gUnknown_085934C4,
+ gFallingCoinAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_085934D8 =
+const struct SpriteTemplate gCoinThrowSpriteTemplate =
{
.tileTag = ANIM_TAG_COIN,
.paletteTag = ANIM_TAG_COIN,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_085934C0,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gCoinAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104088,
+ .callback = AnimCoinThrow,
};
-const struct SpriteTemplate gUnknown_085934F0 =
+const struct SpriteTemplate gFallingCoinSpriteTemplate =
{
.tileTag = ANIM_TAG_COIN,
.paletteTag = ANIM_TAG_COIN,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_085934C0,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gCoinAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085934D4,
- .callback = sub_810413C,
+ .affineAnims = gFallingCoinAffineAnimTable,
+ .callback = AnimFallingCoin,
};
-const union AffineAnimCmd gUnknown_08593508[] =
+const union AffineAnimCmd gBulletSeedAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_08593518[] =
+const union AffineAnimCmd *const gBulletSeedAffineAnimTable[] =
{
- gUnknown_08593508,
+ gBulletSeedAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_0859351C =
+const struct SpriteTemplate gBulletSeedSpriteTemplate =
{
.tileTag = ANIM_TAG_SEED,
.paletteTag = ANIM_TAG_SEED,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593518,
- .callback = sub_81041C4,
+ .affineAnims = gBulletSeedAffineAnimTable,
+ .callback = AnimBulletSeed,
};
-const union AffineAnimCmd gUnknown_08593534[] =
+const union AffineAnimCmd gRazorWindTornadoAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_0859354C[] =
+const union AffineAnimCmd *const gRazorWindTornadoAffineAnimTable[] =
{
- gUnknown_08593534,
+ gRazorWindTornadoAffineAnimCmds,
};
const struct SpriteTemplate gRazorWindTornadoSpriteTemplate =
{
.tileTag = ANIM_TAG_GUST,
.paletteTag = ANIM_TAG_GUST,
- .oam = &gUnknown_085249BC,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_0859354C,
- .callback = Anim_RazorWindTornado,
+ .affineAnims = gRazorWindTornadoAffineAnimTable,
+ .callback = AnimRazorWindTornado,
};
-const union AnimCmd gUnknown_08593568[] =
+const union AnimCmd gViceGripAnimCmds1[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
@@ -465,7 +471,7 @@ const union AnimCmd gUnknown_08593568[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08593578[] =
+const union AnimCmd gViceGripAnimCmds2[] =
{
ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
@@ -473,24 +479,24 @@ const union AnimCmd gUnknown_08593578[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593588[] =
+const union AnimCmd *const gViceGripAnimTable[] =
{
- gUnknown_08593568,
- gUnknown_08593578,
+ gViceGripAnimCmds1,
+ gViceGripAnimCmds2,
};
const struct SpriteTemplate gViceGripSpriteTemplate =
{
.tileTag = ANIM_TAG_CUT,
.paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08593588,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gViceGripAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = Anim_ViceGripPincer,
+ .callback = AnimViceGripPincer,
};
-const union AnimCmd gUnknown_085935A8[] =
+const union AnimCmd gGuillotineAnimCmds1[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(16, 2),
@@ -498,7 +504,7 @@ const union AnimCmd gUnknown_085935A8[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085935B8[] =
+const union AnimCmd gGuillotineAnimCmds2[] =
{
ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE),
ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE),
@@ -506,21 +512,21 @@ const union AnimCmd gUnknown_085935B8[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085935C8[] =
+const union AnimCmd *const gGuillotineAnimTable[] =
{
- gUnknown_085935A8,
- gUnknown_085935B8,
+ gGuillotineAnimCmds1,
+ gGuillotineAnimCmds2,
};
const struct SpriteTemplate gGuillotineSpriteTemplate =
{
.tileTag = ANIM_TAG_CUT,
.paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_085935C8,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gGuillotineAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = Anim_GuillotinePincer,
+ .callback = AnimGuillotinePincer,
};
const union AffineAnimCmd gSplashEffectAffineAnimCmds[] =
@@ -539,7 +545,7 @@ const union AffineAnimCmd gGrowAndShrinkAffineAnimCmds[] =
AFFINEANIMCMD_END,
};
-const union AnimCmd gUnknown_08593628[] =
+const union AnimCmd gBreathPuffAnimCmds1[] =
{
ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
ANIMCMD_FRAME(4, 40, .hFlip = TRUE),
@@ -548,7 +554,7 @@ const union AnimCmd gUnknown_08593628[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_0859363C[] =
+const union AnimCmd gBreathPuffAnimCmds2[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(4, 40),
@@ -557,47 +563,47 @@ const union AnimCmd gUnknown_0859363C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593650[] =
+const union AnimCmd *const gBreathPuffAnimTable[] =
{
- gUnknown_08593628,
- gUnknown_0859363C,
+ gBreathPuffAnimCmds1,
+ gBreathPuffAnimCmds2,
};
const struct SpriteTemplate gBreathPuffSpriteTemplate =
{
.tileTag = ANIM_TAG_BREATH,
.paletteTag = ANIM_TAG_BREATH,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08593650,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gBreathPuffAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = Anim_BreathPuff,
+ .callback = AnimBreathPuff,
};
-const union AffineAnimCmd gUnknown_08593670[] =
+const union AffineAnimCmd gAngerMarkAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8),
AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_08593688[] =
+const union AffineAnimCmd *const gAngerMarkAffineAnimTable[] =
{
- gUnknown_08593670,
+ gAngerMarkAffineAnimCmds,
};
const struct SpriteTemplate gAngerMarkSpriteTemplate =
{
.tileTag = ANIM_TAG_ANGER,
.paletteTag = ANIM_TAG_ANGER,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593688,
- .callback = Anim_AngerMark,
+ .affineAnims = gAngerMarkAffineAnimTable,
+ .callback = AnimAngerMark,
};
-const union AffineAnimCmd gUnknown_085936A4[] =
+const union AffineAnimCmd gThrashMoveMonAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(-10, 9, 0, 7),
AFFINEANIMCMD_FRAME(20, -20, 0, 7),
@@ -607,29 +613,29 @@ const union AffineAnimCmd gUnknown_085936A4[] =
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gUnknown_085936D4 =
+const struct SpriteTemplate gPencilSpriteTemplate =
{
.tileTag = ANIM_TAG_PENCIL,
.paletteTag = ANIM_TAG_PENCIL,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810501C,
+ .callback = AnimPencil,
};
-const struct SpriteTemplate gUnknown_085936EC =
+const struct SpriteTemplate gSnoreZSpriteTemplate =
{
.tileTag = ANIM_TAG_SNORE_Z,
.paletteTag = ANIM_TAG_SNORE_Z,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A7938,
+ .callback = AnimSnoreZ,
};
-const union AnimCmd gUnknown_08593704[] =
+const union AnimCmd gExplosionAnimCmds[] =
{
ANIMCMD_FRAME(0, 5),
ANIMCMD_FRAME(16, 5),
@@ -638,23 +644,23 @@ const union AnimCmd gUnknown_08593704[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593718[] =
+const union AnimCmd *const gExplosionAnimTable[] =
{
- gUnknown_08593704,
+ gExplosionAnimCmds,
};
-//*
-const struct SpriteTemplate gBattleAnimSpriteTemplate_859371C =
+
+const struct SpriteTemplate gExplosionSpriteTemplate =
{
.tileTag = ANIM_TAG_EXPLOSION,
.paletteTag = ANIM_TAG_EXPLOSION,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593718,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gExplosionAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
-const union AffineAnimCmd gUnknown_08593734[] =
+const union AffineAnimCmd gSoftBoiledEggAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4),
@@ -662,13 +668,13 @@ const union AffineAnimCmd gUnknown_08593734[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd gUnknown_08593754[] =
+const union AffineAnimCmd gSoftBoiledEggAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08593764[] =
+const union AffineAnimCmd gSoftBoiledEggAffineAnimCmds3[] =
{
AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8),
AFFINEANIMCMD_LOOP(0),
@@ -680,130 +686,130 @@ const union AffineAnimCmd gUnknown_08593764[] =
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_085937A4[] =
+const union AffineAnimCmd *const gSoftBoiledEggAffineAnimTable[] =
{
- gUnknown_08593734,
- gUnknown_08593754,
- gUnknown_08593764,
+ gSoftBoiledEggAffineAnimCmds1,
+ gSoftBoiledEggAffineAnimCmds2,
+ gSoftBoiledEggAffineAnimCmds3,
};
-//*
-const struct SpriteTemplate gUnknown_085937B0 =
+
+const struct SpriteTemplate gSoftBoiledEggSpriteTemplate =
{
.tileTag = ANIM_TAG_BREAKING_EGG,
.paletteTag = ANIM_TAG_BREAKING_EGG,
- .oam = &gUnknown_08524AF4,
+ .oam = &gOamData_AffineDouble_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085937A4,
- .callback = sub_8105538,
+ .affineAnims = gSoftBoiledEggAffineAnimTable,
+ .callback = AnimSoftBoiledEgg,
};
-const union AffineAnimCmd gUnknown_085937C8[] =
+const union AffineAnimCmd gThinRingExpandingAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30),
AFFINEANIMCMD_END_ALT(1),
};
-const union AffineAnimCmd gUnknown_085937E0[] =
+const union AffineAnimCmd gThinRingExpandingAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15),
AFFINEANIMCMD_END_ALT(1),
};
-const union AffineAnimCmd gUnknown_085937F8[] =
+const union AffineAnimCmd gHyperVoiceRingAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45),
AFFINEANIMCMD_END_ALT(1),
};
-const union AffineAnimCmd *const gUnknown_08593810[] =
+const union AffineAnimCmd *const gThinRingExpandingAffineAnimTable[] =
{
- gUnknown_085937C8,
- gUnknown_085937E0,
+ gThinRingExpandingAffineAnimCmds1,
+ gThinRingExpandingAffineAnimCmds2,
};
-const union AffineAnimCmd *const gUnknown_08593818[] =
+const union AffineAnimCmd *const gHyperVoiceRingAffineAnimTable[] =
{
- gUnknown_085937F8,
+ gHyperVoiceRingAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_0859381C =
+const struct SpriteTemplate gThinRingExpandingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_80A77C8,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos,
};
-//*
-const union AffineAnimCmd gUnknown_08593834[] =
+
+const union AffineAnimCmd gThinRingShrinkingAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30),
AFFINEANIMCMD_END_ALT(1),
};
-const union AffineAnimCmd *const gUnknown_0859384C[] =
+const union AffineAnimCmd *const gThinRingShrinkingAffineAnimTable[] =
{
- gUnknown_08593834,
+ gThinRingShrinkingAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_08593850 =
+const struct SpriteTemplate gThinRingShrinkingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_0859384C,
- .callback = sub_80A77C8,
+ .affineAnims = gThinRingShrinkingAffineAnimTable,
+ .callback = AnimSpriteOnMonPos,
};
-const struct SpriteTemplate gUnknown_08593868 =
+const struct SpriteTemplate gBlendThinRingExpandingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_81051C4,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimBlendThinRing,
};
-const struct SpriteTemplate gUnknown_08593880 =
+const struct SpriteTemplate gHyperVoiceRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593818,
- .callback = sub_81052A4,
+ .affineAnims = gHyperVoiceRingAffineAnimTable,
+ .callback = AnimHyperVoiceRing,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8593898 =
+const struct SpriteTemplate gUproarRingSpriteTemplate =
{
.tileTag = ANIM_TAG_THIN_RING,
.paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_81054E8,
+ .affineAnims = gThinRingExpandingAffineAnimTable,
+ .callback = AnimUproarRing,
};
-const union AffineAnimCmd gUnknown_085938B0[] =
+const union AffineAnimCmd gStretchAttackerAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(96, -13, 0, 8),
AFFINEANIMCMD_END,
};
-const union AnimCmd gUnknown_085938C0[] =
+const union AnimCmd gSpeedDustAnimCmds[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(4, 3),
@@ -813,23 +819,23 @@ const union AnimCmd gUnknown_085938C0[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085938D8[] =
+const union AnimCmd *const gSpeedDustAnimTable[] =
{
- gUnknown_085938C0,
+ gSpeedDustAnimCmds,
};
-const struct SpriteTemplate gUnknown_085938DC =
+const struct SpriteTemplate gSpeedDustSpriteTemplate =
{
.tileTag = ANIM_TAG_SPEED_DUST,
.paletteTag = ANIM_TAG_SPEED_DUST,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085938D8,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gSpeedDustAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105C48,
+ .callback = AnimSpeedDust,
};
-const s8 gUnknown_085938F4[][2] =
+const s8 gSpeedDustPosTable[][2] =
{
{30, 28},
{-20, 24},
@@ -837,7 +843,7 @@ const s8 gUnknown_085938F4[][2] =
{-10, 28},
};
-const union AnimCmd gUnknown_085938FC[] =
+const union AnimCmd gBellAnimCmds[] =
{
ANIMCMD_FRAME(0, 6),
ANIMCMD_FRAME(16, 6),
@@ -855,49 +861,49 @@ const union AnimCmd gUnknown_085938FC[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593934[] =
+const union AnimCmd *const gBellAnimTable[] =
{
- gUnknown_085938FC,
+ gBellAnimCmds,
};
-const struct SpriteTemplate gUnknown_08593938 =
+const struct SpriteTemplate gBellSpriteTemplate =
{
.tileTag = ANIM_TAG_BELL,
.paletteTag = ANIM_TAG_BELL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gBellAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
-const u16 gUnknown_08593950[] =
+const u16 gMusicNotePaletteTagsTable[] =
{
ANIM_TAG_MUSIC_NOTES_2,
ANIM_SPRITES_START - 1,
ANIM_SPRITES_START - 2,
};
-const struct SpriteTemplate gUnknown_08593958 =
+const struct SpriteTemplate gHealBellMusicNoteSpriteTemplate =
{
.tileTag = ANIM_TAG_MUSIC_NOTES_2,
.paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105DE8,
+ .callback = AnimHealBellMusicNote,
};
const struct SpriteTemplate gMagentaHeartSpriteTemplate =
{
.tileTag = ANIM_TAG_MAGENTA_HEART,
.paletteTag = ANIM_TAG_MAGENTA_HEART,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105E60,
+ .callback = AnimMagentaHeart,
};
const union AffineAnimCmd gUnknown_08593988[] =
@@ -907,59 +913,59 @@ const union AffineAnimCmd gUnknown_08593988[] =
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gUnknown_085939A0 =
+const struct SpriteTemplate gRedHeartProjectileSpriteTemplate =
{
.tileTag = ANIM_TAG_RED_HEART,
.paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106140,
+ .callback = AnimRedHeartProjectile,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_85939B8 =
+const struct SpriteTemplate gRedHeartBurstSpriteTemplate =
{
.tileTag = ANIM_TAG_RED_HEART,
.paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81061C4,
+ .callback = AnimParticuleBurst,
};
-const struct SpriteTemplate gUnknown_085939D0 =
+const struct SpriteTemplate gRedHeartRisingSpriteTemplate =
{
.tileTag = ANIM_TAG_RED_HEART,
.paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810624C,
+ .callback = AnimRedHeartRising,
};
-const union AffineAnimCmd gUnknown_085939E8[] =
+const union AffineAnimCmd gHiddenPowerOrbAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd *const gUnknown_08593A00[] =
+const union AffineAnimCmd *const gHiddenPowerOrbAffineAnimTable[] =
{
- gUnknown_085939E8,
+ gHiddenPowerOrbAffineAnimCmds,
};
const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_RED_ORB,
.paletteTag = ANIM_TAG_RED_ORB,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593A00,
+ .affineAnims = gHiddenPowerOrbAffineAnimTable,
.callback = AnimOrbitFast,
};
@@ -967,37 +973,37 @@ const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate =
{
.tileTag = ANIM_TAG_RED_ORB,
.paletteTag = ANIM_TAG_RED_ORB,
- .oam = &gUnknown_085249CC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593A00,
+ .affineAnims = gHiddenPowerOrbAffineAnimTable,
.callback = AnimOrbitScatter,
};
-const union AffineAnimCmd gUnknown_08593A34[] =
+const union AffineAnimCmd gSpitUpOrbAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd *const gUnknown_08593A4C[] =
+const union AffineAnimCmd *const gSpitUpOrbAffineAnimTable[] =
{
- gUnknown_08593A34,
+ gSpitUpOrbAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_08593A50 =
+const struct SpriteTemplate gSpitUpOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_RED_ORB_2,
.paletteTag = ANIM_TAG_RED_ORB_2,
- .oam = &gUnknown_085249C4,
+ .oam = &gOamData_AffineDouble_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593A4C,
- .callback = sub_8106944,
+ .affineAnims = gSpitUpOrbAffineAnimTable,
+ .callback = AnimSpitUpOrb,
};
-const union AnimCmd gUnknown_08593A68[] =
+const union AnimCmd gEyeSparkleAnimCmds[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(4, 4),
@@ -1007,82 +1013,82 @@ const union AnimCmd gUnknown_08593A68[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593A80[] =
+const union AnimCmd *const gEyeSparkleAnimTable[] =
{
- gUnknown_08593A68,
+ gEyeSparkleAnimCmds,
};
-const struct SpriteTemplate gUnknown_08593A84 =
+const struct SpriteTemplate gEyeSparkleSpriteTemplate =
{
.tileTag = ANIM_TAG_EYE_SPARKLE,
.paletteTag = ANIM_TAG_EYE_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08593A80,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gEyeSparkleAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81069B8,
+ .callback = AnimEyeSparkle,
};
-const union AnimCmd gUnknown_08593A9C[] =
+const union AnimCmd gAngelSpriteAnimCmds[] =
{
ANIMCMD_FRAME(0, 24),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593AA4[] =
+const union AnimCmd *const gAngelSpriteAnimTable[] =
{
- gUnknown_08593A9C,
+ gAngelSpriteAnimCmds,
};
-const struct SpriteTemplate gUnknown_08593AA8 =
+const struct SpriteTemplate gAngelSpriteTemplate =
{
.tileTag = ANIM_TAG_ANGEL,
.paletteTag = ANIM_TAG_ANGEL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593AA4,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAngelSpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81069D0,
+ .callback = AnimAngel,
};
-const struct SpriteTemplate gUnknown_08593AC0 =
+const struct SpriteTemplate gPinkHeartSpriteTemplate =
{
.tileTag = ANIM_TAG_PINK_HEART,
.paletteTag = ANIM_TAG_PINK_HEART,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106AD0,
+ .callback = AnimPinkHeart,
};
-const union AnimCmd gUnknown_08593AD8[] =
+const union AnimCmd gDevilAnimCmds1[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gUnknown_08593AE0[] =
+const union AnimCmd gDevilAnimCmds2[] =
{
ANIMCMD_FRAME(16, 3),
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_08593AE8[] =
+const union AnimCmd *const gDevilAnimTable[] =
{
- gUnknown_08593AD8,
- gUnknown_08593AE0,
+ gDevilAnimCmds1,
+ gDevilAnimCmds2,
};
-const struct SpriteTemplate gUnknown_08593AF0 =
+const struct SpriteTemplate gDevilSpriteTemplate =
{
.tileTag = ANIM_TAG_DEVIL,
.paletteTag = ANIM_TAG_DEVIL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593AE8,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gDevilAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106B54,
+ .callback = AnimDevil,
};
const union AnimCmd gUnknown_08593B08[] =
@@ -1103,24 +1109,24 @@ const union AnimCmd gUnknown_08593B1C[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593B30[] =
+const union AnimCmd *const gFurySwipesAnimTable[] =
{
gUnknown_08593B08,
gUnknown_08593B1C,
};
-const struct SpriteTemplate gUnknown_08593B38 =
+const struct SpriteTemplate gFurySwipesSpriteTemplate =
{
.tileTag = ANIM_TAG_SWIPE,
.paletteTag = ANIM_TAG_SWIPE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593B30,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gFurySwipesAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106C80,
+ .callback = AnimFurySwipes,
};
-const union AnimCmd gUnknown_08593B50[] =
+const union AnimCmd gMovementWavesAnimCmds1[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(16, 8),
@@ -1129,7 +1135,7 @@ const union AnimCmd gUnknown_08593B50[] =
ANIMCMD_END,
};
-const union AnimCmd gUnknown_08593B64[] =
+const union AnimCmd gMovementWavesAnimCmds2[] =
{
ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
ANIMCMD_FRAME(32, 8, .hFlip = TRUE),
@@ -1138,21 +1144,21 @@ const union AnimCmd gUnknown_08593B64[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_08593B78[] =
+const union AnimCmd *const gMovementWavesAnimTable[] =
{
- gUnknown_08593B50,
- gUnknown_08593B64,
+ gMovementWavesAnimCmds1,
+ gMovementWavesAnimCmds2,
};
-const struct SpriteTemplate gUnknown_08593B80 =
+const struct SpriteTemplate gMovementWavesSpriteTemplate =
{
.tileTag = ANIM_TAG_MOVEMENT_WAVES,
.paletteTag = ANIM_TAG_MOVEMENT_WAVES,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593B78,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gMovementWavesAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106CD0,
+ .callback = AnimMovmentWaves,
};
const union AffineAnimCmd gUnknown_08593B98[] =
@@ -1163,92 +1169,92 @@ const union AffineAnimCmd gUnknown_08593B98[] =
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8593BB8 =
+const struct SpriteTemplate gJaggedMusicNoteSpriteTemplate =
{
.tileTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
.paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106E00,
+ .callback = AnimJaggedMusicNote,
};
-const union AffineAnimCmd gUnknown_08593BD0[] =
+const union AffineAnimCmd gPerishSongMusicNoteAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08593BE0[] =
+const union AffineAnimCmd gPerishSongMusicNoteAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16),
AFFINEANIMCMD_END_ALT(1),
};
-const union AffineAnimCmd gUnknown_08593BF0[] =
+const union AffineAnimCmd gPerishSongMusicNoteAffineAnimCmds3[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16),
AFFINEANIMCMD_END_ALT(1),
};
-const union AffineAnimCmd *const gUnknown_08593C00[] =
+const union AffineAnimCmd *const gPerishSongMusicNoteAffineAnimTable[] =
{
- gUnknown_08593BD0,
- gUnknown_08593BE0,
- gUnknown_08593BF0,
+ gPerishSongMusicNoteAffineAnimCmds1,
+ gPerishSongMusicNoteAffineAnimCmds2,
+ gPerishSongMusicNoteAffineAnimCmds3,
};
-extern const union AnimCmd *const gUnknown_08592FCC[];
-const struct SpriteTemplate gUnknown_08593C0C =
+extern const union AnimCmd *const gMusicNotesAnimTable[];
+const struct SpriteTemplate gPerishSongMusicNoteSpriteTemplate =
{
.tileTag = ANIM_TAG_MUSIC_NOTES_2,
.paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592FCC,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gMusicNotesAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593C00,
- .callback = sub_8106F60,
+ .affineAnims = gPerishSongMusicNoteAffineAnimTable,
+ .callback = AnimPerishSongMusicNote,
};
-const struct SpriteTemplate gUnknown_08593C24 =
+const struct SpriteTemplate gPerishSongMusicNote2SpriteTemplate =
{
.tileTag = ANIM_TAG_MUSIC_NOTES_2,
.paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592FCC,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gMusicNotesAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593C00,
- .callback = sub_8106F00,
+ .affineAnims = gPerishSongMusicNoteAffineAnimTable,
+ .callback = AnimPerishSongMusicNote2,
};
-const union AffineAnimCmd gUnknown_08593C3C[] =
+const union AffineAnimCmd gGuardRingAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_08593C4C[] =
+const union AffineAnimCmd gGuardRingAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_08593C5C[] =
+const union AffineAnimCmd *const gGuardRingAffineAnimTable[] =
{
- gUnknown_08593C3C,
- gUnknown_08593C4C,
+ gGuardRingAffineAnimCmds1,
+ gGuardRingAffineAnimCmds2,
};
-const struct SpriteTemplate gUnknown_08593C64 =
+const struct SpriteTemplate gGuardRingSpriteTemplate =
{
.tileTag = ANIM_TAG_GUARD_RING,
.paletteTag = ANIM_TAG_GUARD_RING,
- .oam = &gUnknown_08524B1C,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593C5C,
- .callback = sub_81070AC,
+ .affineAnims = gGuardRingAffineAnimTable,
+ .callback = AnimGuardRing,
};
void sub_8103448(struct Sprite *sprite)
@@ -1273,7 +1279,7 @@ void sub_8103498(struct Sprite *sprite)
else
battler = gBattleAnimTarget;
- sub_810310C(battler, sprite);
+ SetSpriteNextToMonHead(battler, sprite);
sprite->data[0] = 0;
sprite->data[1] = 0;
sprite->callback = sub_81034D8;
@@ -1450,10 +1456,10 @@ void Anim_SwordsDanceBlade(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, FALSE);
sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
- StoreSpriteCallbackInData6(sprite, Anim_SwordsDanceBladeStep);
+ StoreSpriteCallbackInData6(sprite, AnimSwordsDanceBladeStep);
}
-static void Anim_SwordsDanceBladeStep(struct Sprite *sprite)
+static void AnimSwordsDanceBladeStep(struct Sprite *sprite)
{
sprite->data[0] = 6;
sprite->data[2] = sprite->pos1.x;
@@ -1502,7 +1508,7 @@ void AnimSonicBoomProjectile(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-static void sub_81039CC(struct Sprite *sprite)
+static void AnimAirWaveProjectile_Step2(struct Sprite *sprite)
{
if (sprite->data[0]-- <= 0)
{
@@ -1511,7 +1517,7 @@ static void sub_81039CC(struct Sprite *sprite)
}
}
-static void sub_8103A00(struct Sprite *sprite)
+static void AnimAirWaveProjectile_Step1(struct Sprite *sprite)
{
struct Task* task = &gTasks[sprite->data[7]];
if (sprite->data[0] > task->data[5])
@@ -1540,11 +1546,11 @@ static void sub_8103A00(struct Sprite *sprite)
if (sprite->data[0]-- <= 0)
{
sprite->data[0] = 30;
- sprite->callback = sub_81039CC;
+ sprite->callback = AnimAirWaveProjectile_Step2;
}
}
-void sub_8103AA4(struct Sprite *sprite)
+void AnimAirWaveProjectile(struct Sprite *sprite)
{
s16 a;
s16 b;
@@ -1588,23 +1594,23 @@ void sub_8103AA4(struct Sprite *sprite)
sprite->data[5] = 0;
sprite->data[3] = sub_8151534(sub_8151534(b, a), sub_8151624(0x1C0));
sprite->data[4] = sub_8151534(sub_8151534(c, a), sub_8151624(0x1C0));
- sprite->callback = sub_8103A00;
+ sprite->callback = AnimAirWaveProjectile_Step1;
}
}
-static void sub_8103BE4(u8 taskId)
+static void AirCutterProjectileStep2(u8 taskId)
{
if (gTasks[taskId].data[1] == 0)
DestroyAnimVisualTask(taskId);
}
-static void sub_8103C0C(u8 taskId)
+static void AirCutterProjectileStep1(u8 taskId)
{
if (gTasks[taskId].data[0]-- <= 0)
{
u8 spriteId;
struct Sprite *sprite;
- spriteId = CreateSprite(&gUnknown_085933B0, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]);
+ spriteId = CreateSprite(&gAirWaveProjectileSpriteTemplate, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]);
sprite = &gSprites[spriteId];
switch (gTasks[taskId].data[4])
{
@@ -1623,11 +1629,11 @@ static void sub_8103C0C(u8 taskId)
gTasks[taskId].data[1]++;
PlaySE12WithPanning(SE_W059B, BattleAnimAdjustPanning(-63));
if (gTasks[taskId].data[1] > 2)
- gTasks[taskId].func = sub_8103BE4;
+ gTasks[taskId].func = AirCutterProjectileStep2;
}
}
-void sub_8103CF0(u8 taskId)
+void AnimTask_AirCutterProjectile(u8 taskId)
{
s16 attackerY = 0;
s16 attackerX = 0;
@@ -1724,7 +1730,7 @@ void sub_8103CF0(u8 taskId)
if (gTasks[taskId].data[2] < 3)
gTasks[taskId].data[2] = 3;
- gTasks[taskId].func = sub_8103C0C;
+ gTasks[taskId].func = AirCutterProjectileStep1;
}
void sub_8103FE8(struct Sprite *sprite)
@@ -1754,7 +1760,7 @@ static void sub_8104018(struct Sprite *sprite)
}
}
-void sub_8104088(struct Sprite *sprite)
+void AnimCoinThrow(struct Sprite *sprite)
{
s16 r6;
s16 r7;
@@ -1777,14 +1783,14 @@ void sub_8104088(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_810413C(struct Sprite *sprite)
+void AnimFallingCoin(struct Sprite *sprite)
{
sprite->data[2] = -16;
sprite->pos1.y += 8;
- sprite->callback = sub_8104154;
+ sprite->callback = AnimFallingCoin_Step;
}
-static void sub_8104154(struct Sprite *sprite)
+static void AnimFallingCoin_Step(struct Sprite *sprite)
{
sprite->data[0] += 0x80;
sprite->pos2.x = sprite->data[0] >> 8;
@@ -1802,7 +1808,7 @@ static void sub_8104154(struct Sprite *sprite)
}
}
-void sub_81041C4(struct Sprite *sprite)
+void AnimBulletSeed(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = 20;
@@ -1810,10 +1816,10 @@ void sub_81041C4(struct Sprite *sprite)
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
sprite->callback = StartAnimLinearTranslation;
sprite->affineAnimPaused = 1;
- StoreSpriteCallbackInData6(sprite, sub_810421C);
+ StoreSpriteCallbackInData6(sprite, AnimBulletSeed_Step1);
}
-static void sub_810421C(struct Sprite *sprite)
+static void AnimBulletSeed_Step1(struct Sprite *sprite)
{
int i;
u16 rand;
@@ -1831,11 +1837,11 @@ static void sub_810421C(struct Sprite *sprite)
sprite->data[6] = 0xFFF4 - (rand & 7);
rand = Random2();
sprite->data[7] = (rand % 0xA0) + 0xA0;
- sprite->callback = sub_81042A0;
+ sprite->callback = AnimBulletSeed_Step2;
sprite->affineAnimPaused = 0;
}
-static void sub_81042A0(struct Sprite *sprite)
+static void AnimBulletSeed_Step2(struct Sprite *sprite)
{
sprite->data[0] += sprite->data[7];
sprite->pos2.x = sprite->data[0] >> 8;
@@ -1861,7 +1867,7 @@ static void sub_81042A0(struct Sprite *sprite)
// arg 4: initial wave offset
// arg 5: wave period (higher means faster wave)
// arg 6: duration
-void Anim_RazorWindTornado(struct Sprite *sprite)
+void AnimRazorWindTornado(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, FALSE);
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
@@ -1879,7 +1885,7 @@ void Anim_RazorWindTornado(struct Sprite *sprite)
// Animates a single pincer line that extends towards the center of the target mon.
// arg 0: invert
-void Anim_ViceGripPincer(struct Sprite *sprite)
+void AnimViceGripPincer(struct Sprite *sprite)
{
s16 startXOffset = 32;
s16 startYOffset = -32;
@@ -1900,10 +1906,10 @@ void Anim_ViceGripPincer(struct Sprite *sprite)
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + endXOffset;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + endYOffset;
sprite->callback = StartAnimLinearTranslation;
- StoreSpriteCallbackInData6(sprite, Anim_ViceGripPincerStep);
+ StoreSpriteCallbackInData6(sprite, AnimViceGripPincerStep);
}
-static void Anim_ViceGripPincerStep(struct Sprite *sprite)
+static void AnimViceGripPincerStep(struct Sprite *sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
@@ -1911,7 +1917,7 @@ static void Anim_ViceGripPincerStep(struct Sprite *sprite)
// Animates a single pincer line that extends towards the center of the target mon, and then back out.
// arg 0: animation id
-void Anim_GuillotinePincer(struct Sprite *sprite)
+void AnimGuillotinePincer(struct Sprite *sprite)
{
s16 startXOffset = 32;
s16 startYOffset = -32;
@@ -1936,10 +1942,10 @@ void Anim_GuillotinePincer(struct Sprite *sprite)
InitAnimLinearTranslation(sprite);
sprite->data[5] = gBattleAnimArgs[0];
sprite->data[6] = sprite->data[0];
- sprite->callback = Anim_GuillotinePincerStep1;
+ sprite->callback = AnimGuillotinePincerStep1;
}
-static void Anim_GuillotinePincerStep1(struct Sprite *sprite)
+static void AnimGuillotinePincerStep1(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite) && sprite->animEnded)
{
@@ -1954,11 +1960,11 @@ static void Anim_GuillotinePincerStep1(struct Sprite *sprite)
sprite->data[2] ^= 1;
sprite->data[4] = 0;
sprite->data[3] = 0;
- sprite->callback = Anim_GuillotinePincerStep2;
+ sprite->callback = AnimGuillotinePincerStep2;
}
}
-static void Anim_GuillotinePincerStep2(struct Sprite *sprite)
+static void AnimGuillotinePincerStep2(struct Sprite *sprite)
{
if (sprite->data[3])
{
@@ -1975,11 +1981,11 @@ static void Anim_GuillotinePincerStep2(struct Sprite *sprite)
sprite->data[3] = 0;
sprite->animPaused = 0;
StartSpriteAnim(sprite, sprite->data[5] ^ 1);
- sprite->callback = Anim_GuillotinePincerStep3;
+ sprite->callback = AnimGuillotinePincerStep3;
}
}
-static void Anim_GuillotinePincerStep3(struct Sprite *sprite)
+static void AnimGuillotinePincerStep3(struct Sprite *sprite)
{
if (AnimTranslateLinear(sprite))
DestroyAnimSprite(sprite);
@@ -2229,7 +2235,7 @@ static void AnimTask_GrowAndShrinkStep(u8 taskId)
// Animates a little puff of the mon's breath.
// Used by MOVE_SWAGGER and MOVE_BULK_UP
// No args.
-void Anim_BreathPuff(struct Sprite *sprite)
+void AnimBreathPuff(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
{
@@ -2257,7 +2263,7 @@ void Anim_BreathPuff(struct Sprite *sprite)
// arg 0: target mon (0 = attacker, 1 = target)
// arg 1: x pixel offset
// arg 2: y pixel offset
-void Anim_AngerMark(struct Sprite *sprite)
+void AnimAngerMark(struct Sprite *sprite)
{
u8 battler;
if (!gBattleAnimArgs[0])
@@ -2278,17 +2284,17 @@ void Anim_AngerMark(struct Sprite *sprite)
}
// left/right movements
-void sub_8104C38(u8 taskId)
+void AnimTask_ThrashMoveMonHorizontal(u8 taskId)
{
struct Task* task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[0] = spriteId;
task->data[1] = 0;
- PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085936A4);
- task->func = sub_8104C78;
+ PrepareAffineAnimInTaskData(task, spriteId, gThrashMoveMonAffineAnimCmds);
+ task->func = ThrashMoveMonStep;
}
-static void sub_8104C78(u8 taskId)
+static void ThrashMoveMonStep(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (!RunAffineAnimFromTaskData(task))
@@ -2296,7 +2302,7 @@ static void sub_8104C78(u8 taskId)
}
// up/down movements
-void sub_8104CA4(u8 taskId)
+void AnimTask_ThrashMoveMonVertical(u8 taskId)
{
struct Task* task = &gTasks[taskId];
task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
@@ -2312,10 +2318,10 @@ void sub_8104CA4(u8 taskId)
if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
task->data[2] *= -1;
- task->func = sub_8104D28;
+ task->func = ThrashMoveMon;
}
-static void sub_8104D28(u8 taskId)
+static void ThrashMoveMon(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (++task->data[7] > 2)
@@ -2404,10 +2410,10 @@ void sub_8104E74(u8 taskId)
params.initState = 1;
params.unused9 = 0;
ScanlineEffect_SetParams(params);
- task->func = sub_8104F54;
+ task->func = AnimTask_SketchDrawMon;
}
-static void sub_8104F54(u8 taskId)
+static void AnimTask_SketchDrawMon(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -2454,7 +2460,7 @@ static void sub_8104F54(u8 taskId)
}
}
-void sub_810501C(struct Sprite *sprite)
+void AnimPencil(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) - 16;
sprite->pos1.y = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 16;
@@ -2465,10 +2471,10 @@ void sub_810501C(struct Sprite *sprite)
sprite->data[4] = 0;
sprite->data[5] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) + 2;
sprite->data[6] = BattleAnimAdjustPanning(63);
- sprite->callback = sub_8105078;
+ sprite->callback = AnimPencil_Step;
}
-static void sub_8105078(struct Sprite *sprite)
+static void AnimPencil_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -2527,7 +2533,7 @@ static void sub_8105078(struct Sprite *sprite)
}
}
-void sub_81051C4(struct Sprite *sprite)
+void AnimBlendThinRing(struct Sprite *sprite)
{
u8 battler = 0;
u16 sp0 = 0;
@@ -2554,7 +2560,7 @@ void sub_81051C4(struct Sprite *sprite)
gBattleAnimArgs[0] = sp0 - r4;
}
- sprite->callback = sub_80A77C8;
+ sprite->callback = AnimSpriteOnMonPos;
sprite->callback(sprite);
}
@@ -2567,7 +2573,7 @@ void sub_8105284(struct Sprite *sprite)
}
}
-void sub_81052A4(struct Sprite *sprite)
+void AnimHyperVoiceRing(struct Sprite *sprite)
{
u16 r9 = 0;
u16 r6 = 0;
@@ -2652,7 +2658,7 @@ void sub_81052A4(struct Sprite *sprite)
sprite->callback(sprite);
}
-void sub_81054E8(struct Sprite *sprite)
+void AnimUproarRing(struct Sprite *sprite)
{
u8 index = IndexOfSpritePaletteTag(ANIM_TAG_THIN_RING);
if (index != 0xFF)
@@ -2661,11 +2667,11 @@ void sub_81054E8(struct Sprite *sprite)
}
StartSpriteAffineAnim(sprite, 1);
- sprite->callback = sub_80A77C8;
+ sprite->callback = AnimSpriteOnMonPos;
sprite->callback(sprite);
}
-void sub_8105538(struct Sprite *sprite)
+void AnimSoftBoiledEgg(struct Sprite *sprite)
{
s16 r1;
InitSpritePosToAnimAttacker(sprite, FALSE);
@@ -2673,10 +2679,10 @@ void sub_8105538(struct Sprite *sprite)
sprite->data[0] = 0x380;
sprite->data[1] = r1;
sprite->data[7] = gBattleAnimArgs[2];
- sprite->callback = sub_810557C;
+ sprite->callback = AnimSoftBoiledEgg_Step1;
}
-static void sub_810557C(struct Sprite *sprite)
+static void AnimSoftBoiledEgg_Step1(struct Sprite *sprite)
{
s16 add;
sprite->pos2.y -= (sprite->data[0] >> 8);
@@ -2692,20 +2698,20 @@ static void sub_810557C(struct Sprite *sprite)
sprite->pos2.x = 0;
sprite->data[0] = 0;
StartSpriteAffineAnim(sprite, 1);
- sprite->callback = sub_81055F4;
+ sprite->callback = AnimSoftBoiledEgg_Step2;
}
}
-static void sub_81055F4(struct Sprite *sprite)
+static void AnimSoftBoiledEgg_Step2(struct Sprite *sprite)
{
if (sprite->data[0]++ > 19)
{
StartSpriteAffineAnim(sprite, 2);
- sprite->callback = sub_810561C;
+ sprite->callback = AnimSoftBoiledEgg_Step3;
}
}
-static void sub_810561C(struct Sprite *sprite)
+static void AnimSoftBoiledEgg_Step3(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
{
@@ -2714,17 +2720,17 @@ static void sub_810561C(struct Sprite *sprite)
if (sprite->data[7] == 0)
{
sprite->oam.tileNum += 16;
- sprite->callback = sub_8105694;
+ sprite->callback = AnimSoftBoiledEgg_Step3_Callback1;
}
else
{
sprite->oam.tileNum += 32;
- sprite->callback = sub_810571C;
+ sprite->callback = AnimSoftBoiledEgg_Step4;
}
}
}
-static void sub_8105694(struct Sprite *sprite)
+static void AnimSoftBoiledEgg_Step3_Callback1(struct Sprite *sprite)
{
sprite->pos2.y -= 2;
if (++sprite->data[0] == 9)
@@ -2733,50 +2739,50 @@ static void sub_8105694(struct Sprite *sprite)
sprite->data[1] = 0;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND((u16)sprite->data[0], 0));
- sprite->callback = sub_81056D4;
+ sprite->callback = AnimSoftBoiledEgg_Step3_Callback2;
}
}
-static void sub_81056D4(struct Sprite *sprite)
+static void AnimSoftBoiledEgg_Step3_Callback2(struct Sprite *sprite)
{
if (sprite->data[1]++ % 3 == 0)
{
sprite->data[0]--;
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
if (sprite->data[0] == 0)
- sprite->callback = sub_810571C;
+ sprite->callback = AnimSoftBoiledEgg_Step4;
}
}
-static void sub_810571C(struct Sprite *sprite)
+static void AnimSoftBoiledEgg_Step4(struct Sprite *sprite)
{
if ((u16)gBattleAnimArgs[7] == 0xFFFF)
{
sprite->invisible = 1;
if (sprite->data[7] == 0)
- sprite->callback = sub_810575C;
+ sprite->callback = AnimSoftBoiledEgg_Step4_Callback;
else
sprite->callback = DestroyAnimSprite;
}
}
-static void sub_810575C(struct Sprite *sprite)
+static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyAnimSprite(sprite);
}
-void sub_810577C(u8 taskId)
+void AnimTask_StretchAttacker(u8 taskId)
{
struct Task* task = &gTasks[taskId];
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
task->data[0] = spriteId;
- PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085938B0);
- task->func = sub_81057B8;
+ PrepareAffineAnimInTaskData(task, spriteId, gStretchAttackerAffineAnimCmds);
+ task->func = StretchAttacker_Step;
}
-static void sub_81057B8(u8 taskId)
+static void StretchAttacker_Step(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (!RunAffineAnimFromTaskData(task))
@@ -2787,7 +2793,7 @@ static void sub_81057B8(u8 taskId)
}
}
-void sub_8105810(u8 taskId)
+void AnimTask_ExtremeSpeedImpact(u8 taskId)
{
struct Task* task = &gTasks[taskId];
task->data[0] = 0;
@@ -2807,10 +2813,10 @@ void sub_8105810(u8 taskId)
}
task->data[15] = GetAnimBattlerSpriteId(ANIM_TARGET);
- task->func = sub_8105878;
+ task->func = ExtremeSpeedImpact_Step;
}
-static void sub_8105878(u8 taskId)
+static void ExtremeSpeedImpact_Step(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -2856,7 +2862,7 @@ static void sub_8105878(u8 taskId)
}
}
-void sub_810599C(u8 taskId)
+void AnimTask_ExtremeSpeedMonReappear(u8 taskId)
{
struct Task* task = &gTasks[taskId];
task->data[0] = 0;
@@ -2867,10 +2873,10 @@ void sub_810599C(u8 taskId)
task->data[13] = 14;
task->data[14] = 2;
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
- task->func = sub_81059E0;
+ task->func = ExtremeSpeedMonReappear_Step;
}
-static void sub_81059E0(u8 taskId)
+static void ExtremeSpeedMonReappear_Step(u8 taskId)
{
struct Task* task = &gTasks[taskId];
if (task->data[0] == 0 && ++task->data[1] > task->data[4])
@@ -2898,7 +2904,7 @@ static void sub_81059E0(u8 taskId)
}
}
-void sub_8105AAC(u8 taskId)
+void AnimTask_SpeedDust(u8 taskId)
{
struct Task* task = &gTasks[taskId];
task->data[0] = 0;
@@ -2913,10 +2919,10 @@ void sub_8105AAC(u8 taskId)
task->data[13] = 0;
task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_ATTACKER);
task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_TARGET);
- task->func = sub_8105B08;
+ task->func = SpeedDust_Step1;
}
-static void sub_8105B08(u8 taskId)
+static void SpeedDust_Step1(u8 taskId)
{
struct Task* task = &gTasks[taskId];
switch (task->data[8])
@@ -2958,13 +2964,13 @@ static void sub_8105B08(u8 taskId)
{
u8 spriteId;
task->data[1] = 0;
- spriteId = CreateSprite(&gUnknown_085938DC, task->data[14], task->data[15], 0);
+ spriteId = CreateSprite(&gSpeedDustSpriteTemplate, task->data[14], task->data[15], 0);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[0] = taskId;
gSprites[spriteId].data[1] = 13;
- gSprites[spriteId].pos2.x = gUnknown_085938F4[task->data[2]][0];
- gSprites[spriteId].pos2.y = gUnknown_085938F4[task->data[2]][1];
+ gSprites[spriteId].pos2.x = gSpeedDustPosTable[task->data[2]][0];
+ gSprites[spriteId].pos2.y = gSpeedDustPosTable[task->data[2]][1];
task->data[13]++;
if (++task->data[2] > 3)
{
@@ -2982,7 +2988,7 @@ static void sub_8105B08(u8 taskId)
}
}
-void sub_8105C48(struct Sprite *sprite)
+void AnimSpeedDust(struct Sprite *sprite)
{
sprite->invisible = gTasks[sprite->data[0]].data[5];
if (sprite->animEnded)
@@ -3014,21 +3020,21 @@ void sub_8105D60(u8 taskId)
{
int i;
for (i = 0; i < 3; i++)
- FreeSpritePaletteByTag(gUnknown_08593950[i]);
+ FreeSpritePaletteByTag(gMusicNotePaletteTagsTable[i]);
DestroyAnimVisualTask(taskId);
}
-static void sub_8105D88(struct Sprite *sprite, u8 a, u8 b)
+static void SetMusicNotePalette(struct Sprite *sprite, u8 a, u8 b)
{
u8 tile;
tile = (b & 1);
tile = ((-tile | tile) >> 31) & 32;
sprite->oam.tileNum += tile + (a << 2);
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_08593950[b >> 1]);
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(gMusicNotePaletteTagsTable[b >> 1]);
}
-void sub_8105DE8(struct Sprite *sprite)
+void AnimHealBellMusicNote(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, FALSE);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -3039,10 +3045,10 @@ void sub_8105DE8(struct Sprite *sprite)
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sub_8105D88(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
+ SetMusicNotePalette(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
}
-void sub_8105E60(struct Sprite *sprite)
+void AnimMagentaHeart(struct Sprite *sprite)
{
if (++sprite->data[0] == 1)
InitSpritePosToAnimAttacker(sprite, FALSE);
@@ -3055,7 +3061,7 @@ void sub_8105E60(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_8105EB0(u8 taskId)
+void AnimTask_FakeOut(u8 taskId)
{
u16 win0h = IsContest() ? 0x98 : 0xF0;
u16 win0v = 0;
@@ -3070,17 +3076,17 @@ void sub_8105EB0(u8 taskId)
SetGpuReg(REG_OFFSET_BLDY, 0x10);
gTasks[taskId].data[0] = win0v;
gTasks[taskId].data[1] = win0h;
- gTasks[taskId].func = sub_8105F30;
+ gTasks[taskId].func = FakeOutStep1;
}
-static void sub_8105F30(u8 taskId)
+static void FakeOutStep1(u8 taskId)
{
gTasks[taskId].data[0] += 13;
gTasks[taskId].data[1] -= 13;
if (gTasks[taskId].data[0] >= gTasks[taskId].data[1])
{
gBattle_WIN0H = 0;
- gTasks[taskId].func = sub_8105F84;
+ gTasks[taskId].func = FakeOutStep2;
}
else
{
@@ -3088,7 +3094,7 @@ static void sub_8105F30(u8 taskId)
}
}
-static void sub_8105F84(u8 taskId)
+static void FakeOutStep2(u8 taskId)
{
if (++gTasks[taskId].data[10] == 5)
{
@@ -3148,7 +3154,7 @@ void sub_81060B0(u8 taskId)
}
}
-void sub_8106140(struct Sprite *sprite)
+void AnimRedHeartProjectile(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[0] = 95;
@@ -3157,10 +3163,10 @@ void sub_8106140(struct Sprite *sprite)
sprite->data[3] = sprite->pos1.y;
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
InitAnimLinearTranslation(sprite);
- sprite->callback = sub_810618C;
+ sprite->callback = AnimRedHeartProjectile_Step;
}
-static void sub_810618C(struct Sprite *sprite)
+static void AnimRedHeartProjectile_Step(struct Sprite *sprite)
{
if (!AnimTranslateLinear(sprite))
{
@@ -3173,7 +3179,7 @@ static void sub_810618C(struct Sprite *sprite)
}
}
-void sub_81061C4(struct Sprite *sprite)
+void AnimParticuleBurst(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -3195,17 +3201,17 @@ void sub_81061C4(struct Sprite *sprite)
}
}
-void sub_810624C(struct Sprite *sprite)
+void AnimRedHeartRising(struct Sprite *sprite)
{
sprite->pos1.x = gBattleAnimArgs[0];
sprite->pos1.y = 160;
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[1];
sprite->callback = WaitAnimForDuration;
- StoreSpriteCallbackInData6(sprite, sub_810627C);
+ StoreSpriteCallbackInData6(sprite, AnimRedHeartRising_Step);
}
-static void sub_810627C(struct Sprite *sprite)
+static void AnimRedHeartRising_Step(struct Sprite *sprite)
{
s16 y;
sprite->data[2] += sprite->data[1];
@@ -3240,10 +3246,10 @@ void AnimTask_HeartsBackground(u8 taskId)
AnimLoadCompressedBgGfx(animBg.bgId, &gUnknown_08C232E0, animBg.tilesOffset);
sub_80A6D60(&animBg, &gUnknown_08C23D78, 0);
LoadCompressedPalette(&gUnknown_08C23D50, animBg.paletteId * 16, 32);
- gTasks[taskId].func = sub_81063A8;
+ gTasks[taskId].func = HeartsBackground_Step;
}
-static void sub_81063A8(u8 taskId)
+static void HeartsBackground_Step(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -3299,7 +3305,7 @@ static void sub_81063A8(u8 taskId)
}
}
-void sub_81064F8(u8 taskId)
+void AnimTask_ScaryFace(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -3324,10 +3330,10 @@ void sub_81064F8(u8 taskId)
AnimLoadCompressedBgGfx(animBg.bgId, gUnknown_08C249F8, animBg.tilesOffset);
LoadCompressedPalette(gUnknown_08C249D0, animBg.paletteId * 16, 32);
- gTasks[taskId].func = sub_81065EC;
+ gTasks[taskId].func = ScaryFace_Step;
}
-static void sub_81065EC(u8 taskId)
+static void ScaryFace_Step(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -3456,7 +3462,7 @@ static void AnimOrbitScatterStep(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-static void sub_8106914(struct Sprite *sprite)
+static void AnimSpitUpOrb_Step(struct Sprite *sprite)
{
sprite->pos2.x += sprite->data[0];
sprite->pos2.y += sprite->data[1];
@@ -3464,14 +3470,14 @@ static void sub_8106914(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_8106944(struct Sprite *sprite)
+void AnimSpitUpOrb(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
sprite->data[2] = gBattleAnimArgs[1];
- sprite->callback = sub_8106914;
+ sprite->callback = AnimSpitUpOrb_Step;
}
static void sub_810699C(struct Sprite *sprite)
@@ -3480,13 +3486,13 @@ static void sub_810699C(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_81069B8(struct Sprite *sprite)
+void AnimEyeSparkle(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->callback = sub_810699C;
}
-void sub_81069D0(struct Sprite *sprite)
+void AnimAngel(struct Sprite *sprite)
{
s16 var0;
if (!sprite->data[0])
@@ -3524,7 +3530,7 @@ static void sub_8106A64(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_8106AD0(struct Sprite *sprite)
+void AnimPinkHeart(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -3550,7 +3556,7 @@ void sub_8106AD0(struct Sprite *sprite)
}
}
-void sub_8106B54(struct Sprite *sprite)
+void AnimDevil(struct Sprite *sprite)
{
if (sprite->data[3] == 0)
{
@@ -3579,7 +3585,7 @@ void sub_8106B54(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_8106C80(struct Sprite *sprite)
+void AnimFurySwipes(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
@@ -3594,7 +3600,7 @@ void sub_8106C80(struct Sprite *sprite)
}
}
-void sub_8106CD0(struct Sprite *sprite)
+void AnimMovmentWaves(struct Sprite *sprite)
{
if (!gBattleAnimArgs[2])
{
@@ -3621,11 +3627,11 @@ void sub_8106CD0(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[1];
StartSpriteAnim(sprite, sprite->data[1]);
- sprite->callback = sub_8106D5C;
+ sprite->callback = AnimMovmentWaves_Step;
}
}
-static void sub_8106D5C(struct Sprite *sprite)
+static void AnimMovmentWaves_Step(struct Sprite *sprite)
{
if (sprite->animEnded)
{
@@ -3636,21 +3642,21 @@ static void sub_8106D5C(struct Sprite *sprite)
}
}
-void sub_8106D90(u8 taskId)
+void AnimTask_UproarDistortion(u8 taskId)
{
u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
PrepareAffineAnimInTaskData(&gTasks[taskId], spriteId, gUnknown_08593B98);
- gTasks[taskId].func = sub_8106DD4;
+ gTasks[taskId].func = UproarDistortion_Step;
}
-static void sub_8106DD4(u8 taskId)
+static void UproarDistortion_Step(u8 taskId)
{
if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
DestroyAnimVisualTask(taskId);
}
-void sub_8106E00(struct Sprite *sprite)
+void AnimJaggedMusicNote(struct Sprite *sprite)
{
int var1;
u8 battler = !gBattleAnimArgs[0] ? gBattleAnimAttacker : gBattleAnimTarget;
@@ -3675,10 +3681,10 @@ void sub_8106E00(struct Sprite *sprite)
sprite->data[4] = var1 >> 3;
sprite->oam.tileNum += gBattleAnimArgs[3] * 16;
- sprite->callback = sub_8106EC8;
+ sprite->callback = AnimJaggedMusicNote_Step;
}
-static void sub_8106EC8(struct Sprite *sprite)
+static void AnimJaggedMusicNote_Step(struct Sprite *sprite)
{
sprite->data[1] += sprite->data[3];
sprite->data[2] += sprite->data[4];
@@ -3688,7 +3694,7 @@ static void sub_8106EC8(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_8106F00(struct Sprite *sprite)
+void AnimPerishSongMusicNote2(struct Sprite *sprite)
{
if (!sprite->data[0])
{
@@ -3703,7 +3709,7 @@ void sub_8106F00(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_8106F60(struct Sprite *sprite)
+void AnimPerishSongMusicNote(struct Sprite *sprite)
{
int index;
int var2;
@@ -3733,7 +3739,7 @@ void sub_8106F60(struct Sprite *sprite)
if (sprite->data[0] > sprite->data[5])
{
- sprite->callback = sub_8107018;
+ sprite->callback = AnimPerishSongMusicNote_Step1;
sprite->data[0] = 0;
SetSpritePrimaryCoordsFromSecondaryCoords(sprite);
@@ -3745,16 +3751,16 @@ void sub_8106F60(struct Sprite *sprite)
}
}
-static void sub_8107018(struct Sprite *sprite)
+static void AnimPerishSongMusicNote_Step1(struct Sprite *sprite)
{
if (++sprite->data[0] > 10)
{
sprite->data[0] = 0;
- sprite->callback = sub_810703C;
+ sprite->callback = AnimPerishSongMusicNote_Step2;
}
}
-static void sub_810703C(struct Sprite *sprite)
+static void AnimPerishSongMusicNote_Step2(struct Sprite *sprite)
{
sprite->data[3] += sprite->data[2];
sprite->pos2.y = sprite->data[3];
@@ -3780,7 +3786,7 @@ static void sub_810703C(struct Sprite *sprite)
}
}
-void sub_81070AC(struct Sprite *sprite)
+void AnimGuardRing(struct Sprite *sprite)
{
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
{
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index 79b728e61..772ef6182 100755
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_anim.h"
#include "bg.h"
@@ -24,7 +24,7 @@
#include "constants/species.h"
#include "constants/weather.h"
-extern const struct SpriteTemplate gUnknown_08593114;
+extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate;
void sub_815A0D4(struct Sprite *);
void sub_815A1B0(struct Sprite *);
@@ -63,7 +63,7 @@ void AnimForesightMagnifyingGlass(struct Sprite *);
void AnimMeteorMashStar(struct Sprite *);
void AnimBlockX(struct Sprite *);
void sub_815FE80(struct Sprite *);
-void sub_81061C4(struct Sprite *);
+void AnimParticuleBurst(struct Sprite *);
void AnimKnockOffStrike(struct Sprite *);
void AnimRecycle(struct Sprite *);
static void sub_815A114(struct Sprite *);
@@ -140,18 +140,18 @@ const struct SpriteTemplate gUnknown_085CE020 =
{
.tileTag = ANIM_TAG_SCRATCH,
.paletteTag = ANIM_TAG_SCRATCH,
- .oam = &gUnknown_08524A34,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gUnknown_085CE01C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
const struct SpriteTemplate gUnknown_085CE038 =
{
.tileTag = ANIM_TAG_BLACK_SMOKE,
.paletteTag = ANIM_TAG_BLACK_SMOKE,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -162,11 +162,11 @@ const struct SpriteTemplate gUnknown_085CE050 =
{
.tileTag = ANIM_TAG_BLACK_BALL,
.paletteTag = ANIM_TAG_BLACK_BALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A78AC,
+ .callback = AnimThrowProjectile,
};
const union AnimCmd gUnknown_085CE068[] =
@@ -186,18 +186,18 @@ const struct SpriteTemplate gUnknown_085CE07C =
{
.tileTag = ANIM_TAG_OPENING_EYE,
.paletteTag = ANIM_TAG_OPENING_EYE,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085CE078,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
const struct SpriteTemplate gUnknown_085CE094 =
{
.tileTag = ANIM_TAG_ROUND_WHITE_HALO,
.paletteTag = ANIM_TAG_ROUND_WHITE_HALO,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -208,7 +208,7 @@ const struct SpriteTemplate gUnknown_085CE0AC =
{
.tileTag = ANIM_TAG_TEAL_ALERT,
.paletteTag = ANIM_TAG_TEAL_ALERT,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -240,7 +240,7 @@ const struct SpriteTemplate gUnknown_085CE104 =
{
.tileTag = ANIM_TAG_EYE,
.paletteTag = ANIM_TAG_EYE,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085CE0FC,
@@ -251,7 +251,7 @@ const struct SpriteTemplate gUnknown_085CE11C =
{
.tileTag = ANIM_TAG_SPIKES,
.paletteTag = ANIM_TAG_SPIKES,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -277,7 +277,7 @@ const struct SpriteTemplate gUnknown_085CE150 =
{
.tileTag = ANIM_TAG_LEER,
.paletteTag = ANIM_TAG_LEER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085CE14C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -311,7 +311,7 @@ const struct SpriteTemplate gUnknown_085CE190 =
{
.tileTag = ANIM_TAG_LETTER_Z,
.paletteTag = ANIM_TAG_LETTER_Z,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gUnknown_085CE170,
.images = NULL,
.affineAnims = gUnknown_085CE18C,
@@ -348,7 +348,7 @@ const struct SpriteTemplate gUnknown_085CE1DC =
{
.tileTag = ANIM_TAG_FANG_ATTACK,
.paletteTag = ANIM_TAG_FANG_ATTACK,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gUnknown_085CE1BC,
.images = NULL,
.affineAnims = gUnknown_085CE1D8,
@@ -379,7 +379,7 @@ const struct SpriteTemplate gUnknown_085CE22C =
{
.tileTag = ANIM_TAG_SPOTLIGHT,
.paletteTag = ANIM_TAG_SPOTLIGHT,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085CE224,
@@ -390,7 +390,7 @@ const struct SpriteTemplate gUnknown_085CE244 =
{
.tileTag = ANIM_TAG_TAG_HAND,
.paletteTag = ANIM_TAG_TAG_HAND,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -401,7 +401,7 @@ const struct SpriteTemplate gUnknown_085CE25C =
{
.tileTag = ANIM_TAG_TAG_HAND,
.paletteTag = ANIM_TAG_TAG_HAND,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -425,7 +425,7 @@ const struct SpriteTemplate gUnknown_085CE288 =
{
.tileTag = ANIM_TAG_RAPID_SPIN,
.paletteTag = ANIM_TAG_RAPID_SPIN,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gUnknown_085CE284,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -469,7 +469,7 @@ const struct SpriteTemplate gUnknown_085CE2F8 =
{
.tileTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
.paletteTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gUnknown_085CE2C8,
.images = NULL,
.affineAnims = gUnknown_085CE2F4,
@@ -498,11 +498,11 @@ const struct SpriteTemplate gUnknown_085CE338 =
{
.tileTag = ANIM_TAG_ECLIPSING_ORB,
.paletteTag = ANIM_TAG_ECLIPSING_ORB,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085CE334,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
const union AffineAnimCmd gUnknown_085CE350[] =
@@ -517,7 +517,7 @@ const struct SpriteTemplate gUnknown_085CE370 =
{
.tileTag = ANIM_TAG_POKEBALL,
.paletteTag = ANIM_TAG_POKEBALL,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -528,7 +528,7 @@ const struct SpriteTemplate gUnknown_085CE388 =
{
.tileTag = ANIM_TAG_GOLD_STARS,
.paletteTag = ANIM_TAG_GOLD_STARS,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -539,7 +539,7 @@ const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate =
{
.tileTag = ANIM_TAG_GOLD_STARS,
.paletteTag = ANIM_TAG_GOLD_STARS,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -570,7 +570,7 @@ const struct SpriteTemplate gUnknown_085CE418 =
{
.tileTag = ANIM_TAG_BLUE_ORB,
.paletteTag = ANIM_TAG_BLUE_ORB,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -625,7 +625,7 @@ const struct SpriteTemplate gUnknown_085CE48C =
{
.tileTag = ANIM_TAG_GREEN_STAR,
.paletteTag = ANIM_TAG_GREEN_STAR,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gUnknown_085CE480,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -661,7 +661,7 @@ const struct SpriteTemplate gWeakFrustrationAngerMarkSpriteTemplate =
{
.tileTag = ANIM_TAG_ANGER,
.paletteTag = ANIM_TAG_ANGER,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -711,7 +711,7 @@ const struct SpriteTemplate gSweetScentPetalSpriteTemplate =
{
.tileTag = ANIM_TAG_PINK_PETAL,
.paletteTag = ANIM_TAG_PINK_PETAL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gSweetScentPetalAnimCmdTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -737,7 +737,7 @@ const struct SpriteTemplate gPainSplitProjectileSpriteTemplate =
{
.tileTag = ANIM_TAG_PAIN_SPLIT,
.paletteTag = ANIM_TAG_PAIN_SPLIT,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gPainSplitAnimCmdTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -748,7 +748,7 @@ const struct SpriteTemplate gFlatterConfettiSpriteTemplate =
{
.tileTag = ANIM_TAG_CONFETTI,
.paletteTag = ANIM_TAG_CONFETTI,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -759,7 +759,7 @@ const struct SpriteTemplate gFlatterSpotlightSpriteTemplate =
{
.tileTag = ANIM_TAG_SPOTLIGHT,
.paletteTag = ANIM_TAG_SPOTLIGHT,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085CE224,
@@ -770,7 +770,7 @@ const struct SpriteTemplate gReversalOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_BLUE_ORB,
.paletteTag = ANIM_TAG_BLUE_ORB,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -822,7 +822,7 @@ const struct SpriteTemplate gYawnCloudSpriteTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_PINK_CLOUD,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gYawnCloudAffineAnimTable,
@@ -873,7 +873,7 @@ const struct SpriteTemplate gSmokeBallEscapeCloudSpriteTemplate =
{
.tileTag = ANIM_TAG_PINK_CLOUD,
.paletteTag = ANIM_TAG_PINK_CLOUD,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gSmokeBallEscapeCloudAffineAnimTable,
@@ -892,7 +892,7 @@ const struct SpriteTemplate gFacadeSweatDrop =
{
.tileTag = ANIM_TAG_SWEAT_DROP,
.paletteTag = ANIM_TAG_SWEAT_DROP,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -950,7 +950,7 @@ const struct SpriteTemplate gRoarNoiseLineSpriteTemplate =
{
.tileTag = ANIM_TAG_NOISE_LINE,
.paletteTag = ANIM_TAG_NOISE_LINE,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gRoarNoiseLineAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -961,7 +961,7 @@ const struct SpriteTemplate gGlareEyeDotSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_RED_EYE,
.paletteTag = ANIM_TAG_SMALL_RED_EYE,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -972,7 +972,7 @@ const struct SpriteTemplate gAssistPawprintSpriteTemplate =
{
.tileTag = ANIM_TAG_PAW_PRINT,
.paletteTag = ANIM_TAG_PAW_PRINT,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1002,7 +1002,7 @@ const struct SpriteTemplate gBarrageBallSpriteTemplate =
{
.tileTag = ANIM_TAG_RED_BALL,
.paletteTag = ANIM_TAG_RED_BALL,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gBarrageBallAffineAnimTable,
@@ -1013,7 +1013,7 @@ const struct SpriteTemplate gSmellingSaltsHandSpriteTemplate =
{
.tileTag = ANIM_TAG_TAG_HAND,
.paletteTag = ANIM_TAG_TAG_HAND,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1031,7 +1031,7 @@ const struct SpriteTemplate gSmellingSaltExclamationSpriteTemplate =
{
.tileTag = ANIM_TAG_SMELLINGSALT_EFFECT,
.paletteTag = ANIM_TAG_SMELLINGSALT_EFFECT,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1042,7 +1042,7 @@ const struct SpriteTemplate gHelpingHandClapSpriteTemplate =
{
.tileTag = ANIM_TAG_TAG_HAND,
.paletteTag = ANIM_TAG_TAG_HAND,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1053,7 +1053,7 @@ const struct SpriteTemplate gForesightMagnifyingGlassSpriteTemplate =
{
.tileTag = ANIM_TAG_MAGNIFYING_GLASS,
.paletteTag = ANIM_TAG_MAGNIFYING_GLASS,
- .oam = &gUnknown_08524A34,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1064,7 +1064,7 @@ const struct SpriteTemplate gMeteorMashStarSpriteTemplate =
{
.tileTag = ANIM_TAG_GOLD_STARS,
.paletteTag = ANIM_TAG_GOLD_STARS,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1075,18 +1075,18 @@ const struct SpriteTemplate gUnknown_085CE8F4 =
{
.tileTag = ANIM_TAG_GOLD_STARS,
.paletteTag = ANIM_TAG_GOLD_STARS,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81061C4,
+ .callback = AnimParticuleBurst,
};
const struct SpriteTemplate gBlockXSpriteTemplate =
{
.tileTag = ANIM_TAG_X_SIGN,
.paletteTag = ANIM_TAG_X_SIGN,
- .oam = &gUnknown_0852491C,
+ .oam = &gOamData_AffineOff_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1097,7 +1097,7 @@ const struct SpriteTemplate gUnknown_085CE924 =
{
.tileTag = ANIM_TAG_ITEM_BAG,
.paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1140,7 +1140,7 @@ const struct SpriteTemplate gKnockOffStrikeSpriteTemplate =
{
.tileTag = ANIM_TAG_SLAM_HIT_2,
.paletteTag = ANIM_TAG_SLAM_HIT_2,
- .oam = &gUnknown_0852497C,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gKnockOffStrikeAnimTable,
.images = NULL,
.affineAnims = gKnockOffStrikeAffineAnimTable,
@@ -1162,7 +1162,7 @@ const struct SpriteTemplate gRecycleSpriteTemplate =
{
.tileTag = ANIM_TAG_RECYCLE,
.paletteTag = ANIM_TAG_RECYCLE,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gRecycleSpriteAffineAnimTable,
@@ -1929,7 +1929,7 @@ static void sub_815B054(u8 taskId)
}
y = task->data[3] + task->data[5];
- spriteId = CreateSprite(&gUnknown_08593114, x, y, 6 - task->data[1]);
+ spriteId = CreateSprite(&gThoughtBubbleSpriteTemplate, x, y, 6 - task->data[1]);
PlaySE12WithPanning(SE_W118, BattleAnimAdjustPanning(-64));
if (spriteId != MAX_SPRITES)
@@ -1982,7 +1982,7 @@ static void sub_815B054(u8 taskId)
case 4:
for (i = 0, j = 0; i < MAX_SPRITES; i++)
{
- if (gSprites[i].template == &gUnknown_08593114)
+ if (gSprites[i].template == &gThoughtBubbleSpriteTemplate)
{
gSprites[i].data[0] = taskId;
gSprites[i].data[1] = 6;
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index a667daecf..ea5184c53 100644
--- a/src/battle_anim_mons.c
+++ b/src/battle_anim_mons.c
@@ -7,7 +7,7 @@
#include "decompress.h"
#include "dma3.h"
#include "gpu_regs.h"
-#include "alloc.h"
+#include "malloc.h"
#include "palette.h"
#include "pokemon_icon.h"
#include "sprite.h"
@@ -26,11 +26,11 @@
#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
-extern const struct OamData gUnknown_0852497C;
+extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64;
static void sub_80A6FB4(struct Sprite *sprite);
static void sub_80A7144(struct Sprite *sprite);
-static void sub_80A791C(struct Sprite *sprite);
+static void AnimThrowProjectile_Step(struct Sprite *sprite);
static void sub_80A8DFC(struct Sprite *sprite);
static void sub_80A8E88(struct Sprite *sprite);
static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId);
@@ -92,7 +92,7 @@ static const struct SpriteTemplate sUnknown_08525F90[] =
{
.tileTag = 55125,
.paletteTag = 55125,
- .oam = &gUnknown_0852497C,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -101,7 +101,7 @@ static const struct SpriteTemplate sUnknown_08525F90[] =
{
.tileTag = 55126,
.paletteTag = 55126,
- .oam = &gUnknown_0852497C,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -988,7 +988,7 @@ void sub_80A6DAC(bool8 arg0)
}
}
-void sub_80A6DEC(struct Sprite *sprite)
+void TradeMenuBouncePartySprites(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
@@ -1456,7 +1456,7 @@ static u8 GetBattlerAtPosition_(u8 position)
return GetBattlerAtPosition(position);
}
-void sub_80A77C8(struct Sprite *sprite)
+void AnimSpriteOnMonPos(struct Sprite *sprite)
{
bool8 var;
@@ -1513,7 +1513,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_80A78AC(struct Sprite *sprite)
+void AnimThrowProjectile(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, 1);
if (GetBattlerSide(gBattleAnimAttacker))
@@ -1523,16 +1523,16 @@ void sub_80A78AC(struct Sprite *sprite)
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
sprite->data[5] = gBattleAnimArgs[5];
InitAnimArcTranslation(sprite);
- sprite->callback = sub_80A791C;
+ sprite->callback = AnimThrowProjectile_Step;
}
-static void sub_80A791C(struct Sprite *sprite)
+static void AnimThrowProjectile_Step(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
DestroyAnimSprite(sprite);
}
-void sub_80A7938(struct Sprite *sprite)
+void AnimSnoreZ(struct Sprite *sprite)
{
bool8 r4;
u8 battlerId, coordType;
diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c
index 6780f0a32..18d6700a8 100755
--- a/src/battle_anim_special.c
+++ b/src/battle_anim_special.c
@@ -238,7 +238,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_POKEBALL,
.paletteTag = TAG_PARTICLES_POKEBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -247,7 +247,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_GREATBALL,
.paletteTag = TAG_PARTICLES_GREATBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -256,7 +256,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_SAFARIBALL,
.paletteTag = TAG_PARTICLES_SAFARIBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -265,7 +265,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_ULTRABALL,
.paletteTag = TAG_PARTICLES_ULTRABALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -274,7 +274,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_MASTERBALL,
.paletteTag = TAG_PARTICLES_MASTERBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -283,7 +283,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_NETBALL,
.paletteTag = TAG_PARTICLES_NETBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -292,7 +292,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_DIVEBALL,
.paletteTag = TAG_PARTICLES_DIVEBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -301,7 +301,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_NESTBALL,
.paletteTag = TAG_PARTICLES_NESTBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -310,7 +310,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_REPEATBALL,
.paletteTag = TAG_PARTICLES_REPEATBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -319,7 +319,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_TIMERBALL,
.paletteTag = TAG_PARTICLES_TIMERBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -328,7 +328,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_LUXURYBALL,
.paletteTag = TAG_PARTICLES_LUXURYBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -337,7 +337,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] =
{
.tileTag = TAG_PARTICLES_PREMIERBALL,
.paletteTag = TAG_PARTICLES_PREMIERBALL,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gAnims_BallParticles,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -375,7 +375,7 @@ const struct SpriteTemplate gPokeblockSpriteTemplate =
{
.tileTag = ANIM_TAG_POKEBLOCK,
.paletteTag = ANIM_TAG_POKEBLOCK,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -396,7 +396,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085E5358,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c
index 7ed78ea9a..e608cf041 100644
--- a/src/battle_anim_status_effects.c
+++ b/src/battle_anim_status_effects.c
@@ -14,8 +14,8 @@
extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
extern const u8 *const gBattleAnims_StatusConditions[];
-extern const struct OamData gUnknown_08524904;
-extern const struct OamData gUnknown_08524A3C;
+extern const struct OamData gOamData_AffineOff_ObjNormal_8x8;
+extern const struct OamData gOamData_AffineOff_ObjBlend_64x64;
// This file's functions.
static void sub_80A9DB4(u8 taskId);
@@ -46,7 +46,7 @@ const struct SpriteTemplate gUnknown_0853EDFC =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sSpriteAnimTable_853EDF8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -57,7 +57,7 @@ const struct SpriteTemplate gUnknown_0853EE14 =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sSpriteAnimTable_853EDF8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -79,7 +79,7 @@ const struct SpriteTemplate gUnknown_0853EE38 =
{
.tileTag = ANIM_TAG_WEATHER_BALL,
.paletteTag = ANIM_TAG_WEATHER_BALL,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_853EE34,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -90,7 +90,7 @@ const struct SpriteTemplate gUnknown_0853EE50 =
{
.tileTag = ANIM_TAG_WEATHER_BALL,
.paletteTag = ANIM_TAG_WEATHER_BALL,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_853EE34,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -116,7 +116,7 @@ const struct SpriteTemplate gUnknown_0853EE84 =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_853EE80,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -127,7 +127,7 @@ const struct SpriteTemplate gUnknown_0853EE9C =
{
.tileTag = ANIM_TAG_MONSTER_FOOT,
.paletteTag = ANIM_TAG_MONSTER_FOOT,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -163,7 +163,7 @@ const struct SpriteTemplate gUnknown_0853EED8 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_853EECC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -197,7 +197,7 @@ const struct SpriteTemplate gUnknown_0853EF18 =
{
.tileTag = ANIM_TAG_ORB,
.paletteTag = ANIM_TAG_ORB,
- .oam = &gUnknown_085249CC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = sSpriteAnimTable_853EEF8,
.images = NULL,
.affineAnims = sSpriteAffineAnimTable_853EEF8,
@@ -221,7 +221,7 @@ static const struct SpriteTemplate gUnknown_0853EF48 =
{
.tileTag = ANIM_TAG_ICE_CUBE,
.paletteTag = ANIM_TAG_ICE_CUBE,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -232,7 +232,7 @@ static const struct SpriteTemplate gUnknown_0853EF60 =
{
.tileTag = ANIM_TAG_CIRCLE_IMPACT,
.paletteTag = ANIM_TAG_CIRCLE_IMPACT,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index efe35e1b4..eff2bc3c7 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -3,7 +3,7 @@
#include "contest.h"
#include "gpu_regs.h"
#include "graphics.h"
-#include "alloc.h"
+#include "malloc.h"
#include "palette.h"
#include "sound.h"
#include "sprite.h"
@@ -36,7 +36,7 @@ static void sub_8117500(u8);
static void sub_81175C4(u32, u16);
static void sub_81176D8(u8);
static void sub_8117A60(u8);
-static void sub_8117FD0(u8);
+static void ExtremSpeedMoveTarget_Step(u8);
const u16 gUnknown_08597418 = RGB(31, 31, 31);
@@ -1036,7 +1036,7 @@ void sub_8117F30(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_8117F60(u8 taskId)
+void AnimTask_ExtremeSpeedMoveTarget(u8 taskId)
{
if (IsContest())
{
@@ -1046,12 +1046,12 @@ void sub_8117F60(u8 taskId)
{
gTasks[taskId].data[0] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible;
gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = 1;
- gTasks[taskId].func = sub_8117FD0;
+ gTasks[taskId].func = ExtremSpeedMoveTarget_Step;
gAnimVisualTaskCount--;
}
}
-static void sub_8117FD0(u8 taskId)
+static void ExtremSpeedMoveTarget_Step(u8 taskId)
{
if (gBattleAnimArgs[7] == 0x1000)
{
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 1be5def47..57239bca6 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -31,6 +31,7 @@
#include "constants/battle_anim.h"
#include "constants/items.h"
#include "constants/moves.h"
+#include "constants/party_menu.h"
#include "constants/songs.h"
#include "constants/trainers.h"
#include "constants/rgb.h"
@@ -1341,10 +1342,10 @@ static void WaitForMonSelection(void)
{
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active)
{
- if (gUnknown_0203CEE8 == 1)
- BtlController_EmitChosenMonReturnValue(1, gUnknown_0203CEE9, gUnknown_0203CF00);
+ if (gPartyMenuUseExitCallback == TRUE)
+ BtlController_EmitChosenMonReturnValue(1, gSelectedMonPartyId, gBattlePartyCurrentOrder);
else
- BtlController_EmitChosenMonReturnValue(1, 6, NULL);
+ BtlController_EmitChosenMonReturnValue(1, PARTY_SIZE, NULL);
if ((gBattleBufferA[gActiveBattler][1] & 0xF) == 1)
PrintLinkStandbyMsg();
@@ -1531,12 +1532,12 @@ void ActionSelectionDestroyCursorAt(u8 cursorPosition)
CopyBgTilemapBufferToVram(0);
}
-void SetCB2ToReshowScreenAfterMenu(void)
+void CB2_SetUpReshowBattleScreenAfterMenu(void)
{
SetMainCallback2(ReshowBattleScreenAfterMenu);
}
-void SetCB2ToReshowScreenAfterMenu2(void)
+void CB2_SetUpReshowBattleScreenAfterMenu2(void)
{
SetMainCallback2(ReshowBattleScreenAfterMenu);
}
@@ -2632,20 +2633,20 @@ static void PlayerHandleChooseItem(void)
gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem;
gBattlerInMenuId = gActiveBattler;
- for (i = 0; i < 3; i++)
- gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][1 + i];
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][1 + i];
}
static void PlayerHandleChoosePokemon(void)
{
s32 i;
- for (i = 0; i < 3; i++)
- gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][4 + i];
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i];
- if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != PARTY_CANT_SWITCH)
+ if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH)
{
- BtlController_EmitChosenMonReturnValue(1, gBattlerPartyIndexes[gActiveBattler] + 1, gUnknown_0203CF00);
+ BtlController_EmitChosenMonReturnValue(1, gBattlerPartyIndexes[gActiveBattler] + 1, gBattlePartyCurrentOrder);
PlayerBufferExecCompleted();
}
else
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 17db0b868..d0e76ab1b 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -95,7 +95,7 @@ void sub_8032768(void)
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
for (i = 0; i < gBattlersCount; i++)
- sub_81B8D64(i, 0);
+ BufferBattlePartyCurrentOrderBySide(i, 0);
}
for (i = 0; i < sizeof(gBattleStruct->tvMovePoints); i++)
@@ -144,10 +144,10 @@ static void InitSinglePlayerBtlControllers(void)
gBattlersCount = MAX_BATTLERS_COUNT;
- sub_81B8D64(0, 0);
- sub_81B8D64(1, 0);
- sub_81B8D64(2, 1);
- sub_81B8D64(3, 1);
+ BufferBattlePartyCurrentOrderBySide(0, 0);
+ BufferBattlePartyCurrentOrderBySide(1, 0);
+ BufferBattlePartyCurrentOrderBySide(2, 1);
+ BufferBattlePartyCurrentOrderBySide(3, 1);
gBattlerPartyIndexes[0] = 0;
gBattlerPartyIndexes[1] = 0;
@@ -247,10 +247,10 @@ static void InitSinglePlayerBtlControllers(void)
gBattlersCount = MAX_BATTLERS_COUNT;
- sub_81B8D64(0, 0);
- sub_81B8D64(1, 0);
- sub_81B8D64(2, 1);
- sub_81B8D64(3, 1);
+ BufferBattlePartyCurrentOrderBySide(0, 0);
+ BufferBattlePartyCurrentOrderBySide(1, 0);
+ BufferBattlePartyCurrentOrderBySide(2, 1);
+ BufferBattlePartyCurrentOrderBySide(3, 1);
gBattlerPartyIndexes[0] = 0;
gBattlerPartyIndexes[1] = 0;
@@ -267,11 +267,11 @@ static void InitSinglePlayerBtlControllers(void)
{
case 0:
case 3:
- sub_81B8D64(gLinkPlayers[i].id, 0);
+ BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0);
break;
case 1:
case 2:
- sub_81B8D64(gLinkPlayers[i].id, 1);
+ BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1);
break;
}
@@ -487,10 +487,10 @@ static void InitLinkBtlControllers(void)
gBattlersCount = MAX_BATTLERS_COUNT;
}
- sub_81B8D64(0, 0);
- sub_81B8D64(1, 0);
- sub_81B8D64(2, 1);
- sub_81B8D64(3, 1);
+ BufferBattlePartyCurrentOrderBySide(0, 0);
+ BufferBattlePartyCurrentOrderBySide(1, 0);
+ BufferBattlePartyCurrentOrderBySide(2, 1);
+ BufferBattlePartyCurrentOrderBySide(3, 1);
gBattlerPartyIndexes[0] = 0;
gBattlerPartyIndexes[1] = 0;
gBattlerPartyIndexes[2] = 3;
@@ -509,11 +509,11 @@ static void InitLinkBtlControllers(void)
{
case 0:
case 3:
- sub_81B8D64(gLinkPlayers[i].id, 0);
+ BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0);
break;
case 1:
case 2:
- sub_81B8D64(gLinkPlayers[i].id, 1);
+ BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1);
break;
}
@@ -1175,13 +1175,13 @@ void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
-void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4)
+void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8 *arg4)
{
s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON;
sBattleBuffersTransferData[1] = caseId;
- sBattleBuffersTransferData[2] = arg2;
+ sBattleBuffersTransferData[2] = slotId;
sBattleBuffersTransferData[3] = abilityId;
for (i = 0; i < 3; i++)
sBattleBuffersTransferData[4 + i] = arg4[i];
@@ -1311,14 +1311,14 @@ void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2)
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4);
}
-void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c)
+void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder)
{
s32 i;
sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE;
- sBattleBuffersTransferData[1] = b;
- for (i = 0; i < 3; i++)
- sBattleBuffersTransferData[2 + i] = c[i];
+ sBattleBuffersTransferData[1] = partyId;
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ sBattleBuffersTransferData[2 + i] = battlePartyOrder[i];
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5);
}
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 1c116467d..a7d7a92f1 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -8,7 +8,7 @@
#include "event_data.h"
#include "overworld.h"
#include "util.h"
-#include "alloc.h"
+#include "malloc.h"
#include "string_util.h"
#include "random.h"
#include "task.h"
@@ -2330,7 +2330,7 @@ static void GetDomeData(void)
}
break;
case 8:
- sub_81B8558();
+ ClearSelectedPartyOrder();
gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.field_CB0;
gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8;
break;
diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c
index f56442432..36839cde5 100644
--- a/src/battle_factory_screen.c
+++ b/src/battle_factory_screen.c
@@ -11,7 +11,7 @@
#include "palette.h"
#include "task.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "gpu_regs.h"
#include "string_util.h"
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index de403aec7..341cd4a6a 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -6,7 +6,7 @@
#include "constants/battle_anim.h"
#include "battle_interface.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "graphics.h"
#include "random.h"
#include "util.h"
@@ -811,7 +811,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId)
break;
case 6:
LoadAndCreateEnemyShadowSprites();
- sub_81B8C68();
+ BufferBattlePartyCurrentOrder();
retVal = TRUE;
break;
}
@@ -1061,8 +1061,8 @@ void HandleBattleLowHpMusicChange(void)
{
u8 playerBattler1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
u8 playerBattler2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
- u8 battler1PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler1]);
- u8 battler2PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler2]);
+ u8 battler1PartyId = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[playerBattler1]);
+ u8 battler2PartyId = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[playerBattler2]);
if (GetMonData(&gPlayerParty[battler1PartyId], MON_DATA_HP) != 0)
HandleLowHpMusicChange(&gPlayerParty[battler1PartyId], playerBattler1);
diff --git a/src/battle_main.c b/src/battle_main.c
index e623865f7..ab8c73ed4 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -26,7 +26,7 @@
#include "link_rfu.h"
#include "load_save.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "m4a.h"
#include "palette.h"
#include "party_menu.h"
@@ -54,6 +54,7 @@
#include "constants/hold_effects.h"
#include "constants/items.h"
#include "constants/moves.h"
+#include "constants/party_menu.h"
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
@@ -166,8 +167,8 @@ EWRAM_DATA static u32 sUnusedUnknownArray[25] = {0};
EWRAM_DATA u32 gBattleTypeFlags = 0;
EWRAM_DATA u8 gBattleTerrain = 0;
EWRAM_DATA u32 gUnknown_02022FF4 = 0;
-EWRAM_DATA struct UnknownPokemonStruct4 gUnknown_02022FF8[3] = {0}; // what is it used for?
-EWRAM_DATA struct UnknownPokemonStruct4* gUnknown_02023058 = NULL; // what is it used for?
+EWRAM_DATA struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE] = {0};
+EWRAM_DATA static struct UnknownPokemonStruct4* sMultiPartnerPartyBuffer = NULL;
EWRAM_DATA u8 *gUnknown_0202305C = NULL;
EWRAM_DATA u8 *gUnknown_02023060 = NULL;
EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0};
@@ -453,7 +454,7 @@ const u8 gTypeEffectiveness[336] =
TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT
};
-const u8 gTypeNames[][TYPE_NAME_LENGTH + 1] =
+const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1] =
{
_("NORMAL"),
_("FIGHT"),
@@ -1248,12 +1249,12 @@ static void CB2_HandleStartMultiPartnerBattle(void)
if (gLinkPlayers[playerMultiplayerId].id != 0)
{
memcpy(gPlayerParty, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2);
- memcpy(gPlayerParty + 3, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2);
+ memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2);
}
else
{
memcpy(gPlayerParty, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2);
- memcpy(gPlayerParty + 3, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2);
+ memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2);
}
gBattleCommunication[MULTIUSE_STATE]++;
}
@@ -1396,22 +1397,22 @@ static void sub_80379F8(u8 arrayIdPlus)
{
s32 i;
- for (i = 0; i < 3; i++)
- {
- gUnknown_02022FF8[i].species = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_SPECIES);
- gUnknown_02022FF8[i].heldItem = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HELD_ITEM);
- GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_NICKNAME, gUnknown_02022FF8[i].nickname);
- gUnknown_02022FF8[i].level = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LEVEL);
- gUnknown_02022FF8[i].hp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HP);
- gUnknown_02022FF8[i].maxhp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_MAX_HP);
- gUnknown_02022FF8[i].status = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_STATUS);
- gUnknown_02022FF8[i].personality = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_PERSONALITY);
- gUnknown_02022FF8[i].gender = GetMonGender(&gPlayerParty[arrayIdPlus + i]);
- StripExtCtrlCodes(gUnknown_02022FF8[i].nickname);
+ for (i = 0; i < (int)ARRAY_COUNT(gMultiPartnerParty); i++)
+ {
+ gMultiPartnerParty[i].species = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_SPECIES);
+ gMultiPartnerParty[i].heldItem = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HELD_ITEM);
+ GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_NICKNAME, gMultiPartnerParty[i].nickname);
+ gMultiPartnerParty[i].level = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LEVEL);
+ gMultiPartnerParty[i].hp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HP);
+ gMultiPartnerParty[i].maxhp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_MAX_HP);
+ gMultiPartnerParty[i].status = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_STATUS);
+ gMultiPartnerParty[i].personality = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_PERSONALITY);
+ gMultiPartnerParty[i].gender = GetMonGender(&gPlayerParty[arrayIdPlus + i]);
+ StripExtCtrlCodes(gMultiPartnerParty[i].nickname);
if (GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE)
- PadNameString(gUnknown_02022FF8[i].nickname, CHAR_SPACE);
+ PadNameString(gMultiPartnerParty[i].nickname, CHAR_SPACE);
}
- memcpy(gUnknown_02023058, gUnknown_02022FF8, sizeof(gUnknown_02022FF8));
+ memcpy(sMultiPartnerPartyBuffer, gMultiPartnerParty, sizeof(gMultiPartnerParty));
}
static void CB2_PreInitMultiBattle(void)
@@ -1443,9 +1444,9 @@ static void CB2_PreInitMultiBattle(void)
case 0:
if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished())
{
- gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3);
+ sMultiPartnerPartyBuffer = Alloc(sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty));
sub_80379F8(0);
- SendBlock(bitmask_all_link_players_but_self(), gUnknown_02023058, sizeof(struct UnknownPokemonStruct4) * 3);
+ SendBlock(bitmask_all_link_players_but_self(), sMultiPartnerPartyBuffer, sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty));
gBattleCommunication[MULTIUSE_STATE]++;
}
break;
@@ -1458,24 +1459,24 @@ static void CB2_PreInitMultiBattle(void)
if (i == playerMultiplierId)
continue;
- if (numPlayers == 4)
+ if (numPlayers == MAX_LINK_PLAYERS)
{
if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerMultiplierId].id & 1))
|| (gLinkPlayers[i].id & 1 && gLinkPlayers[playerMultiplierId].id & 1))
{
- memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3);
+ memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty));
}
}
else
{
- memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3);
+ memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty));
}
}
gBattleCommunication[MULTIUSE_STATE]++;
*savedCallback = gMain.savedCallback;
*savedBattleTypeFlags = gBattleTypeFlags;
gMain.savedCallback = CB2_PreInitMultiBattle;
- sub_81B9150();
+ ShowPartyMenuToShowcaseMultiBattleParty();
}
break;
case 2:
@@ -1491,13 +1492,13 @@ static void CB2_PreInitMultiBattle(void)
case 3:
if (gWirelessCommType)
{
- if (sub_8010500())
+ if (IsLinkRfuTaskFinished())
{
gBattleTypeFlags = *savedBattleTypeFlags;
gMain.savedCallback = *savedCallback;
SetMainCallback2(CB2_InitBattleInternal);
- Free(gUnknown_02023058);
- gUnknown_02023058 = NULL;
+ Free(sMultiPartnerPartyBuffer);
+ sMultiPartnerPartyBuffer = NULL;
}
}
else if (gReceivedRemoteLinkPlayers == 0)
@@ -1505,8 +1506,8 @@ static void CB2_PreInitMultiBattle(void)
gBattleTypeFlags = *savedBattleTypeFlags;
gMain.savedCallback = *savedCallback;
SetMainCallback2(CB2_InitBattleInternal);
- Free(gUnknown_02023058);
- gUnknown_02023058 = NULL;
+ Free(sMultiPartnerPartyBuffer);
+ sMultiPartnerPartyBuffer = NULL;
}
break;
}
@@ -1527,13 +1528,13 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void)
switch (gBattleCommunication[MULTIUSE_STATE])
{
case 0:
- gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3);
+ sMultiPartnerPartyBuffer = Alloc(sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty));
sub_80379F8(3);
gBattleCommunication[MULTIUSE_STATE]++;
*savedCallback = gMain.savedCallback;
*savedBattleTypeFlags = gBattleTypeFlags;
gMain.savedCallback = CB2_PreInitIngamePlayerPartnerBattle;
- sub_81B9150();
+ ShowPartyMenuToShowcaseMultiBattleParty();
break;
case 1:
if (!gPaletteFade.active)
@@ -1542,8 +1543,8 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void)
gBattleTypeFlags = *savedBattleTypeFlags;
gMain.savedCallback = *savedCallback;
SetMainCallback2(CB2_InitBattleInternal);
- Free(gUnknown_02023058);
- gUnknown_02023058 = NULL;
+ Free(sMultiPartnerPartyBuffer);
+ sMultiPartnerPartyBuffer = NULL;
}
break;
}
@@ -1666,7 +1667,7 @@ static void CB2_HandleStartMultiBattle(void)
break;
case 1:
case 2:
- memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
break;
}
}
@@ -1683,7 +1684,7 @@ static void CB2_HandleStartMultiBattle(void)
break;
case 1:
case 2:
- memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
break;
}
}
@@ -1697,7 +1698,7 @@ static void CB2_HandleStartMultiBattle(void)
break;
case 1:
case 2:
- memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
+ memcpy(gEnemyParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2);
break;
}
}
@@ -4121,34 +4122,34 @@ u8 IsRunningFromBattleImpossible(void)
return 0;
}
-void sub_803BDA0(u8 battler)
+void SwitchPartyOrder(u8 battler)
{
s32 i;
- u8 r4;
- u8 r1;
+ u8 partyId1;
+ u8 partyId2;
// gBattleStruct->field_60[battler][i]
- for (i = 0; i < 3; i++)
- gUnknown_0203CF00[i] = *(battler * 3 + i + (u8*)(gBattleStruct->field_60));
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8*)(gBattleStruct->field_60));
- r4 = pokemon_order_func(gBattlerPartyIndexes[battler]);
- r1 = pokemon_order_func(*(gBattleStruct->monToSwitchIntoId + battler));
- sub_81B8FB0(r4, r1);
+ partyId1 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]);
+ partyId2 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler));
+ SwitchPartyMonSlots(partyId1, partyId2);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- for (i = 0; i < 3; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
{
- *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i];
- *(BATTLE_PARTNER(battler) * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i];
+ *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i];
+ *(BATTLE_PARTNER(battler) * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i];
}
}
else
{
- for (i = 0; i < 3; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
{
- *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i];
+ *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i];
}
}
}
@@ -4283,7 +4284,7 @@ static void HandleTurnActionSelectionState(void)
|| gBattleTypeFlags & BATTLE_TYPE_ARENA
|| gStatuses3[gActiveBattler] & STATUS3_ROOTED)
{
- BtlController_EmitChoosePokemon(0, PARTY_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
}
else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG))
|| ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP))
@@ -4292,16 +4293,16 @@ static void HandleTurnActionSelectionState(void)
|| ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
&& IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)))
{
- BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]);
}
else
{
if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH)
- BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH)
- BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
else
- BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
}
MarkBattlerForControllerExec(gActiveBattler);
break;
@@ -4589,7 +4590,7 @@ static void HandleTurnActionSelectionState(void)
for (i = 0; i < gBattlersCount; i++)
{
if (gChosenActionByBattler[i] == B_ACTION_SWITCH)
- sub_80571DC(i, *(gBattleStruct->monToSwitchIntoId + i));
+ SwitchPartyOrderInGameMulti(i, *(gBattleStruct->monToSwitchIntoId + i));
}
}
}
diff --git a/src/battle_message.c b/src/battle_message.c
index 3fec571f4..80c6f583b 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -874,8 +874,8 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_FORFEITEDMATCH - 12] = sText_ForfeitedMatch,
[STRINGID_PKMNTRANSFERREDSOMEONESPC - 12] = gText_PkmnTransferredSomeonesPC,
[STRINGID_PKMNTRANSFERREDLANETTESPC - 12] = gText_PkmnTransferredLanettesPC,
- [STRINGID_PKMNBOXSOMEONESPCFULL - 12] = gText_PkmnBoxSomeonesPCFull,
- [STRINGID_PKMNBOXLANETTESPCFULL - 12] = gText_PkmnBoxLanettesPCFull,
+ [STRINGID_PKMNBOXSOMEONESPCFULL - 12] = gText_PkmnTransferredSomeonesPCBoxFull,
+ [STRINGID_PKMNBOXLANETTESPCFULL - 12] = gText_PkmnTransferredLanettesPCBoxFull,
[STRINGID_TRAINER1WINTEXT - 12] = sText_Trainer1WinText,
[STRINGID_TRAINER2WINTEXT - 12] = sText_Trainer2WinText,
};
@@ -2759,7 +2759,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
value = T1_READ_32(&src[srcID + 3]);
break;
}
- ConvertIntToDecimalStringN(dst, value, 0, src[srcID + 2]);
+ ConvertIntToDecimalStringN(dst, value, STR_CONV_MODE_LEFT_ALIGN, src[srcID + 2]);
srcID += src[srcID + 1] + 3;
break;
case B_BUFF_MOVE: // move name
diff --git a/src/battle_pike.c b/src/battle_pike.c
index 4e2be23e4..36bf8dcbf 100644
--- a/src/battle_pike.c
+++ b/src/battle_pike.c
@@ -9,7 +9,7 @@
#include "task.h"
#include "battle_tower.h"
#include "party_menu.h"
-#include "alloc.h"
+#include "malloc.h"
#include "palette.h"
#include "script.h"
#include "battle_setup.h"
@@ -22,20 +22,8 @@
#include "constants/trainers.h"
#include "constants/species.h"
#include "constants/moves.h"
-
-#define PIKE_ROOM_SINGLE_BATTLE 0
-#define PIKE_ROOM_HEAL_FULL 1
-#define PIKE_ROOM_NPC 2
-#define PIKE_ROOM_STATUS 3
-#define PIKE_ROOM_HEAL_PART 4
-#define PIKE_ROOM_WILD_MONS 5
-#define PIKE_ROOM_HARD_BATTLE 6
-#define PIKE_ROOM_DOUBLE_BATTLE 7
-#define PIKE_ROOM_BRAIN 8
-
-// For the room with a status effect.
-#define PIKE_STATUS_KIRLIA 0
-#define PIKE_STATUS_DUSCLOPS 1
+#include "constants/party_menu.h"
+#include "constants/battle_pike.h"
struct PikeRoomNPC
{
@@ -935,7 +923,7 @@ static bool8 TryInflictRandomStatus(void)
for (i = 0; i < 3; i++)
{
mon = &gPlayerParty[indices[i]];
- if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0
+ if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE
&& GetMonData(mon, MON_DATA_HP) != 0)
{
j++;
@@ -977,7 +965,7 @@ static bool8 TryInflictRandomStatus(void)
for (i = 0; i < 3; i++)
{
mon = &gPlayerParty[indices[i]];
- if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0
+ if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE
&& GetMonData(mon, MON_DATA_HP) != 0)
{
j++;
@@ -1009,7 +997,7 @@ static bool8 AtLeastOneHealthyMon(void)
for (i = 0; i < 3; i++)
{
struct Pokemon *mon = &gPlayerParty[i];
- if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0
+ if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE
&& GetMonData(mon, MON_DATA_HP) != 0)
{
healthyMonsCount++;
@@ -1298,7 +1286,7 @@ static void TryHealMons(u8 healCount)
{
canBeHealed = TRUE;
}
- else if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) != 0)
+ else if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) != AILMENT_NONE)
{
canBeHealed = TRUE;
}
@@ -1569,7 +1557,7 @@ static void CanAnyPartyMonsBeHealed(void)
struct Pokemon *mon = &gPlayerParty[i];
u16 curr = GetMonData(mon, MON_DATA_HP);
u16 max = GetMonData(mon, MON_DATA_MAX_HP);
- if (curr >= max && pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0)
+ if (curr >= max && GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE)
{
u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
for (j = 0; j < MAX_MON_MOVES; j++)
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index 4d35f4244..6dcd4063b 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -23,10 +23,11 @@
#include "main.h"
#include "load_save.h"
#include "script.h"
-#include "alloc.h"
+#include "malloc.h"
#include "overworld.h"
#include "event_scripts.h"
#include "constants/battle_frontier.h"
+#include "constants/battle_pyramid.h"
#include "constants/event_objects.h"
#include "constants/event_object_movement_constants.h"
#include "constants/items.h"
@@ -39,38 +40,7 @@
extern const struct MapLayout *const gMapLayouts[];
extern const u16 gUnknown_08D856C8[][16];
-#define TOTAL_ROUNDS 20
-#define PICKUP_ITEMS_PER_ROUND 10
-#define FLOOR_WALKABLE_METATILE 0x28D
-#define FLOOR_EXIT_METATILE 0x28E
-enum
-{
- HINT_EXIT_DIRECTION,
- HINT_REMAINING_ITEMS,
- HINT_REMAINING_TRAINERS,
- HINT_EXIT_SHORT_REMAINING_TRAINERS,
- HINT_EXIT_SHORT_REMAINING_ITEMS,
- HINT_EXIT_MEDIUM_REMAINING_TRAINERS,
- HINT_EXIT_MEDIUM_REMAINING_ITEMS,
- HINT_EXIT_FAR_REMAINING_TRAINERS,
- HINT_EXIT_FAR_REMAINING_ITEMS,
-};
-
-enum
-{
- OBJ_TRAINERS,
- OBJ_ITEMS,
-};
-
-enum
-{
- OBJ_POSITIONS_UNIFORM,
- OBJ_POSITIONS_IN_AND_NEAR_ENTRANCE,
- OBJ_POSITIONS_IN_AND_NEAR_EXIT,
- OBJ_POSITIONS_NEAR_ENTRANCE,
- OBJ_POSITIONS_NEAR_EXIT,
-};
struct PyramidWildMon
{
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index b4ec6cd62..c904d4e98 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -17,7 +17,7 @@
#include "list_menu.h"
#include "mail.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "menu_helpers.h"
#include "overworld.h"
@@ -346,12 +346,12 @@ void InitBattlePyramidBagCursorPosition(void)
void CB2_PyramidBagMenuFromStartMenu(void)
{
- sub_81C4F98(0, CB2_ReturnToFieldWithOpenMenu);
+ GoToBattlePyramidBagMenu(0, CB2_ReturnToFieldWithOpenMenu);
}
static void sub_81C4F10(void)
{
- sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2);
+ GoToBattlePyramidBagMenu(1, CB2_SetUpReshowBattleScreenAfterMenu2);
}
void sub_81C4F24(void)
@@ -366,18 +366,18 @@ static void sub_81C4F44(u8 taskId)
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- gFieldCallback2 = hm_add_c3_without_phase_2;
- sub_81C4F98(3, CB2_ReturnToField);
+ gFieldCallback2 = CB2_FadeFromPartyMenu;
+ GoToBattlePyramidBagMenu(3, CB2_ReturnToField);
DestroyTask(taskId);
}
}
-void sub_81C4F84(void)
+void CB2_ReturnToPyramidBagMenu(void)
{
- sub_81C4F98(4, gPyramidBagCursorData.callback);
+ GoToBattlePyramidBagMenu(4, gPyramidBagCursorData.callback);
}
-void sub_81C4F98(u8 a0, void (*callback)(void))
+void GoToBattlePyramidBagMenu(u8 a0, void (*callback)(void))
{
gPyramidBagResources = AllocZeroed(sizeof(*gPyramidBagResources));
@@ -981,7 +981,7 @@ static void HandleMenuActionInput(u8 taskId)
sub_8199134(0, 1);
}
}
- else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
+ else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{
if (id & 1 && IsValidMenuAction(id - 1))
{
@@ -989,7 +989,7 @@ static void HandleMenuActionInput(u8 taskId)
sub_8199134(-1, 0);
}
}
- else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
+ else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{
if (!(id & 1) && IsValidMenuAction(id + 1))
{
@@ -1202,7 +1202,7 @@ static void BagAction_Give(u8 taskId)
}
else if (!ItemId_GetImportance(gSpecialVar_ItemId))
{
- gPyramidBagResources->callback2 = sub_81B7F60;
+ gPyramidBagResources->callback2 = CB2_ChooseMonToGiveItem;
sub_81C5B14(taskId);
}
else
@@ -1350,7 +1350,7 @@ static void sub_81C6A14(u8 taskId)
SetTaskToMainPyramidBagInputHandler(taskId);
}
-void sub_81C6A94(void)
+void TryStoreHeldItemsInPyramidBag(void)
{
u8 i;
struct Pokemon *party = gPlayerParty;
@@ -1363,8 +1363,9 @@ void sub_81C6A94(void)
for (i = 0; i < 3; i++)
{
heldItem = GetMonData(&party[i], MON_DATA_HELD_ITEM);
- if (heldItem != 0 && !AddBagItem(heldItem, 1))
+ if (heldItem != ITEM_NONE && !AddBagItem(heldItem, 1))
{
+ // Cant store party held items in pyramid bag because bag is full
memcpy(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode], newItems, PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
memcpy(gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode], newQuantities, PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
Free(newItems);
@@ -1374,7 +1375,7 @@ void sub_81C6A94(void)
}
}
- heldItem = 0;
+ heldItem = ITEM_NONE;
for (i = 0; i < 3; i++)
{
SetMonData(&party[i], MON_DATA_HELD_ITEM, &heldItem);
diff --git a/src/battle_records.c b/src/battle_records.c
index 3d4cabcb0..ccd16e219 100644
--- a/src/battle_records.c
+++ b/src/battle_records.c
@@ -18,7 +18,7 @@
#include "international_string_util.h"
#include "sound.h"
#include "constants/songs.h"
-#include "alloc.h"
+#include "malloc.h"
#include "gpu_regs.h"
#include "constants/game_stat.h"
#include "trainer_hill.h"
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 1ef046464..a6c0f1ee7 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -52,6 +52,7 @@
#include "menu_specialized.h"
#include "constants/rgb.h"
#include "data.h"
+#include "constants/party_menu.h"
extern struct MusicPlayerInfo gMPlayInfo_BGM;
@@ -5107,13 +5108,13 @@ static void Cmd_jumpifcantswitch(void)
}
}
-static void sub_804CF10(u8 arg0)
+static void sub_804CF10(u8 slotId)
{
*(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler];
- *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6;
+ *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE;
gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]);
- BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
MarkBattlerForControllerExec(gActiveBattler);
}
@@ -5145,7 +5146,7 @@ static void Cmd_openpartyscreen(void)
}
else if (!gSpecialStatuses[gActiveBattler].flag40)
{
- sub_804CF10(6);
+ sub_804CF10(PARTY_SIZE);
gSpecialStatuses[gActiveBattler].flag40 = 1;
}
}
@@ -5352,9 +5353,9 @@ static void Cmd_openpartyscreen(void)
else
{
if (gBattlescriptCurrInstr[1] & 0x80)
- hitmarkerFaintBits = PARTY_CHOOSE_MON; // Used here as the caseId for the EmitChoose function.
+ hitmarkerFaintBits = PARTY_ACTION_CHOOSE_MON; // Used here as the caseId for the EmitChoose function.
else
- hitmarkerFaintBits = PARTY_MUST_CHOOSE_MON;
+ hitmarkerFaintBits = PARTY_ACTION_SEND_OUT;
battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(0x80));
if (gSpecialStatuses[battlerId].flag40)
@@ -5375,7 +5376,7 @@ static void Cmd_openpartyscreen(void)
*(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6;
gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]);
- BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), 0, gBattleStruct->field_60[gActiveBattler]);
+ BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 6;
@@ -5433,7 +5434,7 @@ static void Cmd_switchhandleorder(void)
break;
case 1:
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- sub_803BDA0(gActiveBattler);
+ SwitchPartyOrder(gActiveBattler);
break;
case 2:
if (!(gBattleStruct->field_93 & gBitTable[gActiveBattler]))
@@ -5458,11 +5459,11 @@ static void Cmd_switchhandleorder(void)
}
else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
- sub_80571DC(gActiveBattler, *(gBattleStruct->monToSwitchIntoId + gActiveBattler));
+ SwitchPartyOrderInGameMulti(gActiveBattler, *(gBattleStruct->monToSwitchIntoId + gActiveBattler));
}
else
{
- sub_803BDA0(gActiveBattler);
+ SwitchPartyOrder(gActiveBattler);
}
PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species)
@@ -5615,15 +5616,15 @@ static void Cmd_handlelearnnewmove(void)
const u8 *jumpPtr1 = T1_READ_PTR(gBattlescriptCurrInstr + 1);
const u8 *jumpPtr2 = T1_READ_PTR(gBattlescriptCurrInstr + 5);
- u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]);
- while (ret == 0xFFFE)
- ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], 0);
+ u16 learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]);
+ while (learnMove == MON_ALREADY_KNOWS_MOVE)
+ learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], FALSE);
- if (ret == 0)
+ if (learnMove == 0)
{
gBattlescriptCurrInstr = jumpPtr2;
}
- else if (ret == 0xFFFF)
+ else if (learnMove == MON_HAS_MAX_MOVES)
{
gBattlescriptCurrInstr += 10;
}
@@ -5634,7 +5635,7 @@ static void Cmd_handlelearnnewmove(void)
if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
{
- GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret);
+ GiveMoveToBattleMon(&gBattleMons[gActiveBattler], learnMove);
}
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
@@ -5642,7 +5643,7 @@ static void Cmd_handlelearnnewmove(void)
if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
{
- GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret);
+ GiveMoveToBattleMon(&gBattleMons[gActiveBattler], learnMove);
}
}
@@ -5715,8 +5716,8 @@ static void Cmd_yesnoboxlearnmove(void)
case 4:
if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2)
{
- u8 movePosition = sub_81C1B94();
- if (movePosition == 4)
+ u8 movePosition = GetMoveSlotToReplace();
+ if (movePosition == MAX_MON_MOVES)
{
gBattleScripting.learnMoveState = 5;
}
@@ -7566,19 +7567,19 @@ static void Cmd_forcerandomswitch(void)
*(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i;
if (!IsMultiBattle())
- sub_803BDA0(gBattlerTarget);
+ SwitchPartyOrder(gBattlerTarget);
if ((gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
|| (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI)
|| (gBattleTypeFlags & BATTLE_TYPE_x2000000 && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
|| (gBattleTypeFlags & BATTLE_TYPE_x2000000 && gBattleTypeFlags & BATTLE_TYPE_MULTI))
{
- sub_81B8E80(gBattlerTarget, i, 0);
- sub_81B8E80(gBattlerTarget ^ BIT_FLANK, i, 1);
+ SwitchPartyOrderLinkMulti(gBattlerTarget, i, 0);
+ SwitchPartyOrderLinkMulti(gBattlerTarget ^ BIT_FLANK, i, 1);
}
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
- sub_80571DC(gBattlerTarget, i);
+ SwitchPartyOrderInGameMulti(gBattlerTarget, i);
}
}
else
@@ -8524,7 +8525,7 @@ static void Cmd_tryspiteppreduce(void)
PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget])
- ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, 0, 1);
+ ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1);
PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct)
diff --git a/src/battle_setup.c b/src/battle_setup.c
index c2d7cb6c6..a978cc24d 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -72,8 +72,8 @@ static void CB2_EndWildBattle(void);
static void CB2_EndScriptedWildBattle(void);
static u8 GetWildBattleTransition(void);
static u8 GetTrainerBattleTransition(void);
-static void sub_80B1218(void);
-static void sub_80B1234(void);
+static void TryUpdateGymLeaderRematchFromWild(void);
+static void TryUpdateGymLeaderRematchFromTrainer(void);
static void CB2_GiveStarter(void);
static void CB2_StartFirstBattle(void);
static void CB2_EndFirstBattle(void);
@@ -395,8 +395,8 @@ static void DoStandardWildBattle(void)
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
void BattleSetup_StartRoamerBattle(void)
@@ -409,8 +409,8 @@ void BattleSetup_StartRoamerBattle(void)
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
static void DoSafariBattle(void)
@@ -433,8 +433,8 @@ static void DoBattlePikeWildBattle(void)
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
static void DoTrainerBattle(void)
@@ -442,7 +442,7 @@ static void DoTrainerBattle(void)
CreateBattleStartTask(GetTrainerBattleTransition(), 0);
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_TRAINER_BATTLES);
- sub_80B1234();
+ TryUpdateGymLeaderRematchFromTrainer();
}
static void sub_80B0828(void)
@@ -454,7 +454,7 @@ static void sub_80B0828(void)
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_TRAINER_BATTLES);
- sub_80B1234();
+ TryUpdateGymLeaderRematchFromTrainer();
}
// Initiates battle where Wally catches Ralts
@@ -475,8 +475,8 @@ void BattleSetup_StartScriptedWildBattle(void)
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
void BattleSetup_StartLatiBattle(void)
@@ -487,8 +487,8 @@ void BattleSetup_StartLatiBattle(void)
CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
void BattleSetup_StartLegendaryBattle(void)
@@ -526,8 +526,8 @@ void BattleSetup_StartLegendaryBattle(void)
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
void StartGroudonKyogreBattle(void)
@@ -543,8 +543,8 @@ void StartGroudonKyogreBattle(void)
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
void StartRegiBattle(void)
@@ -576,8 +576,8 @@ void StartRegiBattle(void)
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
static void CB2_EndWildBattle(void)
@@ -919,8 +919,8 @@ static void CB2_StartFirstBattle(void)
ClearPoisonStepCounter();
IncrementGameStat(GAME_STAT_TOTAL_BATTLES);
IncrementGameStat(GAME_STAT_WILD_BATTLES);
- sub_80EECC8();
- sub_80B1218();
+ IncrementDailyWildBattles();
+ TryUpdateGymLeaderRematchFromWild();
}
}
@@ -930,13 +930,13 @@ static void CB2_EndFirstBattle(void)
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
-static void sub_80B1218(void)
+static void TryUpdateGymLeaderRematchFromWild(void)
{
if (GetGameStat(GAME_STAT_WILD_BATTLES) % 60 == 0)
UpdateGymLeaderRematch();
}
-static void sub_80B1234(void)
+static void TryUpdateGymLeaderRematchFromTrainer(void)
{
if (GetGameStat(GAME_STAT_TRAINER_BATTLES) % 20 == 0)
UpdateGymLeaderRematch();
@@ -1273,7 +1273,7 @@ void BattleSetup_StartTrainerBattle(void)
MarkApproachingPyramidTrainersAsBattled();
}
- else if (sub_81D5C18())
+ else if (InTrainerHillChallenge())
{
gBattleTypeFlags |= BATTLE_TYPE_TRAINER_HILL;
@@ -1288,10 +1288,10 @@ void BattleSetup_StartTrainerBattle(void)
sNoOfPossibleTrainerRetScripts = gNoOfApproachingTrainers;
gNoOfApproachingTrainers = 0;
sShouldCheckTrainerBScript = FALSE;
- gUnknown_03006080 = 0;
+ gWhichTrainerToFaceAfterBattle = 0;
gMain.savedCallback = CB2_EndTrainerBattle;
- if (InBattlePyramid() || sub_81D5C18())
+ if (InBattlePyramid() || InTrainerHillChallenge())
sub_80B0828();
else
DoTrainerBattle();
@@ -1307,7 +1307,7 @@ static void CB2_EndTrainerBattle(void)
}
else if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
- if (InBattlePyramid() || sub_81D5C18())
+ if (InBattlePyramid() || InTrainerHillChallenge())
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
else
SetMainCallback2(CB2_WhiteOut);
@@ -1315,7 +1315,7 @@ static void CB2_EndTrainerBattle(void)
else
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
- if (!InBattlePyramid() && !sub_81D5C18())
+ if (!InBattlePyramid() && !InTrainerHillChallenge())
{
RegisterTrainerInMatchCall();
SetBattledTrainersFlags();
@@ -1361,7 +1361,7 @@ void ShowTrainerIntroSpeech(void)
sub_80982B8();
}
- else if (sub_81D5C18())
+ else if (InTrainerHillChallenge())
{
if (gNoOfApproachingTrainers == 0 || gNoOfApproachingTrainers == 1)
CopyTrainerHillTrainerText(2, LocalIdToHillTrainerId(gSpecialVar_LastTalked));
@@ -1391,7 +1391,7 @@ const u8 *BattleSetup_GetTrainerPostBattleScript(void)
sShouldCheckTrainerBScript = FALSE;
if (sTrainerBBattleScriptRetAddr != NULL)
{
- gUnknown_03006080 = 1;
+ gWhichTrainerToFaceAfterBattle = 1;
return sTrainerBBattleScriptRetAddr;
}
}
@@ -1399,7 +1399,7 @@ const u8 *BattleSetup_GetTrainerPostBattleScript(void)
{
if (sTrainerABattleScriptRetAddr != NULL)
{
- gUnknown_03006080 = 0;
+ gWhichTrainerToFaceAfterBattle = 0;
return sTrainerABattleScriptRetAddr;
}
}
diff --git a/src/battle_tower.c b/src/battle_tower.c
index c55180965..7b9842c48 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -31,8 +31,8 @@
#include "constants/species.h"
#include "constants/easy_chat.h"
-extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_224157[];
-extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_224166[];
+extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_MaxieTrainer[];
+extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_TabithaTrainer[];
// EWRAM vars.
EWRAM_DATA const struct BattleFrontierTrainer *gFacilityTrainers = NULL;
@@ -2349,9 +2349,9 @@ void DoSpecialTrainerBattle(void)
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER;
FillPartnerParty(TRAINER_STEVEN_PARTNER);
gApproachingTrainerId = 0;
- BattleSetup_ConfigureTrainerBattle(MossdeepCity_SpaceCenter_2F_EventScript_224157 + 1);
+ BattleSetup_ConfigureTrainerBattle(MossdeepCity_SpaceCenter_2F_EventScript_MaxieTrainer + 1);
gApproachingTrainerId = 1;
- BattleSetup_ConfigureTrainerBattle(MossdeepCity_SpaceCenter_2F_EventScript_224166 + 1);
+ BattleSetup_ConfigureTrainerBattle(MossdeepCity_SpaceCenter_2F_EventScript_TabithaTrainer + 1);
gPartnerTrainerId = TRAINER_STEVEN_PARTNER;
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
@@ -3191,7 +3191,7 @@ static void FillPartnerParty(u16 trainerId)
sStevenMons[i].fixedIV,
TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures.
OT_ID_PRESET, STEVEN_OTID);
- for (j = 0; j < 6; j++)
+ for (j = 0; j < PARTY_SIZE; j++)
SetMonData(&gPlayerParty[3 + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]);
for (j = 0; j < MAX_MON_MOVES; j++)
SetMonMoveSlot(&gPlayerParty[3 + i], sStevenMons[i].moves[j], j);
diff --git a/src/battle_transition.c b/src/battle_transition.c
index fb7fd0c2f..c34419048 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -9,7 +9,7 @@
#include "field_weather.h"
#include "gpu_regs.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "overworld.h"
#include "palette.h"
#include "random.h"
diff --git a/src/battle_util2.c b/src/battle_util2.c
index f840cd58b..fd0dda76b 100644
--- a/src/battle_util2.c
+++ b/src/battle_util2.c
@@ -2,7 +2,7 @@
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
-#include "alloc.h"
+#include "malloc.h"
#include "pokemon.h"
#include "trainer_hill.h"
#include "party_menu.h"
@@ -102,7 +102,7 @@ void AdjustFriendshipOnBattleFaint(u8 battlerId)
}
}
-void sub_80571DC(u8 battlerId, u8 arg1)
+void SwitchPartyOrderInGameMulti(u8 battlerId, u8 arg1)
{
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT)
{
@@ -110,13 +110,13 @@ void sub_80571DC(u8 battlerId, u8 arg1)
// gBattleStruct->field_60[0][i]
- for (i = 0; i < 3; i++)
- gUnknown_0203CF00[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60));
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ gBattlePartyCurrentOrder[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60));
- sub_81B8FB0(pokemon_order_func(gBattlerPartyIndexes[battlerId]), pokemon_order_func(arg1));
+ SwitchPartyMonSlots(GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId]), GetPartyIdFromBattlePartyId(arg1));
- for (i = 0; i < 3; i++)
- *(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i];
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ *(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i];
}
}
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 911c3e545..b4874c3b1 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -12,7 +12,7 @@
#include "bg.h"
#include "palette.h"
#include "decompress.h"
-#include "alloc.h"
+#include "malloc.h"
#include "gpu_regs.h"
#include "text.h"
#include "text_window.h"
@@ -1174,7 +1174,7 @@ static void sub_8080018(void)
{
case 0:
sub_8080588();
- gLinkType = 0x4422;
+ gLinkType = LINKTYPE_BERRY_BLENDER;
sBerryBlenderData->field_72 = 0;
for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
{
@@ -1517,7 +1517,7 @@ static void sub_80808D4(void)
sBerryBlenderData->playAgainState = 0;
sBerryBlenderData->loadGfxState = 0;
- gLinkType = 0x4422;
+ gLinkType = LINKTYPE_BERRY_BLENDER;
sBerryBlenderData->mainState++;
break;
case 1:
@@ -3339,7 +3339,7 @@ static bool8 Blender_PrintBlendingResults(void)
TryAddContestLinkTvShow(&pokeblock, &sBerryBlenderData->tvBlender);
CreateTask(sub_8083F3C, 6);
- sub_80EECEC();
+ IncrementDailyBerryBlender();
RemoveBagItem(gSpecialVar_ItemId, 1);
AddPokeblock(&pokeblock);
diff --git a/src/berry_crush.c b/src/berry_crush.c
index 6259e0a41..8b4c7a545 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "berry_powder.h"
#include "bg.h"
#include "event_data.h"
diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c
index 37be569f8..e3c4e2675 100644
--- a/src/berry_fix_program.c
+++ b/src/berry_fix_program.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "gpu_regs.h"
#include "multiboot.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "graphics.h"
#include "main.h"
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index 10a45dc65..e7f6291c4 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -19,7 +19,7 @@
#include "string_util.h"
#include "strings.h"
#include "bg.h"
-#include "alloc.h"
+#include "malloc.h"
#include "scanline_effect.h"
#include "gpu_regs.h"
#include "graphics.h"
@@ -401,7 +401,7 @@ static void PrintAllBerryData(void)
static void PrintBerryNumberAndName(void)
{
const struct Berry *berry = GetBerryInfo(sBerryTag->berryId);
- ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, 2, 2);
+ ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, STR_CONV_MODE_LEADING_ZEROS, 2);
StringCopy(gStringVar2, berry->name);
StringExpandPlaceholders(gStringVar4, gText_UnkF908Var1Var2);
PrintTextInBerryTagScreen(WIN_BERRY_NAME, gStringVar4, 0, 1, 0, 0);
@@ -421,8 +421,8 @@ static void PrintBerrySize(void)
fraction = (inches % 100) / 10;
inches /= 100;
- ConvertIntToDecimalStringN(gStringVar1, inches, 0, 2);
- ConvertIntToDecimalStringN(gStringVar2, fraction, 0, 2);
+ ConvertIntToDecimalStringN(gStringVar1, inches, STR_CONV_MODE_LEFT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar2, fraction, STR_CONV_MODE_LEFT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, gText_Var1DotVar2);
AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gStringVar4, 0x28, 1, 0, NULL);
}
diff --git a/src/bg.c b/src/bg.c
deleted file mode 100644
index ab4e8b60d..000000000
--- a/src/bg.c
+++ /dev/null
@@ -1,1256 +0,0 @@
-#include "global.h"
-#include "bg.h"
-#include "dma3.h"
-#include "gpu_regs.h"
-
-#define DISPCNT_ALL_BG_AND_MODE_BITS (DISPCNT_BG_ALL_ON | 0x7)
-
-struct BgControl
-{
- struct BgConfig {
- u16 visible:1;
- u16 unknown_1:1;
- u16 screenSize:2;
- u16 priority:2;
- u16 mosaic:1;
- u16 wraparound:1;
-
- u16 charBaseIndex:2;
- u16 mapBaseIndex:5;
- u16 paletteMode:1;
-
- u8 unknown_2;
- u8 unknown_3;
- } configs[4];
-
- u16 bgVisibilityAndMode;
-};
-
-struct BgConfig2
-{
- u32 baseTile:10;
- u32 basePalette:4;
- u32 unk_3:18;
-
- void* tilemap;
- s32 bg_x;
- s32 bg_y;
-};
-
-static struct BgControl sGpuBgConfigs;
-static struct BgConfig2 sGpuBgConfigs2[4];
-static u32 sDmaBusyBitfield[4];
-
-u32 gUnneededFireRedVariable;
-
-static const struct BgConfig sZeroedBgControlStruct = { 0 };
-
-void ResetBgs(void)
-{
- ResetBgControlStructs();
- sGpuBgConfigs.bgVisibilityAndMode = 0;
- SetTextModeAndHideBgs();
-}
-
-static void SetBgModeInternal(u8 bgMode)
-{
- sGpuBgConfigs.bgVisibilityAndMode &= 0xFFF8;
- sGpuBgConfigs.bgVisibilityAndMode |= bgMode;
-}
-
-u8 GetBgMode(void)
-{
- return sGpuBgConfigs.bgVisibilityAndMode & 0x7;
-}
-
-void ResetBgControlStructs(void)
-{
- struct BgConfig* bgConfigs = &sGpuBgConfigs.configs[0];
- struct BgConfig zeroedConfig = sZeroedBgControlStruct;
- int i;
-
- for (i = 0; i < 4; i++)
- {
- bgConfigs[i] = zeroedConfig;
- }
-}
-
-void Unused_ResetBgControlStruct(u8 bg)
-{
- if (!IsInvalidBg(bg))
- {
- sGpuBgConfigs.configs[bg] = sZeroedBgControlStruct;
- }
-}
-
-enum
-{
- BG_CTRL_ATTR_VISIBLE = 1,
- BG_CTRL_ATTR_CHARBASEINDEX = 2,
- BG_CTRL_ATTR_MAPBASEINDEX = 3,
- BG_CTRL_ATTR_SCREENSIZE = 4,
- BG_CTRL_ATTR_PALETTEMODE = 5,
- BG_CTRL_ATTR_PRIORITY = 6,
- BG_CTRL_ATTR_MOSAIC = 7,
- BG_CTRL_ATTR_WRAPAROUND = 8,
-};
-
-static void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound)
-{
- if (!IsInvalidBg(bg))
- {
- if (charBaseIndex != 0xFF)
- {
- sGpuBgConfigs.configs[bg].charBaseIndex = charBaseIndex & 0x3;
- }
-
- if (mapBaseIndex != 0xFF)
- {
- sGpuBgConfigs.configs[bg].mapBaseIndex = mapBaseIndex & 0x1F;
- }
-
- if (screenSize != 0xFF)
- {
- sGpuBgConfigs.configs[bg].screenSize = screenSize & 0x3;
- }
-
- if (paletteMode != 0xFF)
- {
- sGpuBgConfigs.configs[bg].paletteMode = paletteMode;
- }
-
- if (priority != 0xFF)
- {
- sGpuBgConfigs.configs[bg].priority = priority & 0x3;
- }
-
- if (mosaic != 0xFF)
- {
- sGpuBgConfigs.configs[bg].mosaic = mosaic & 0x1;
- }
-
- if (wraparound != 0xFF)
- {
- sGpuBgConfigs.configs[bg].wraparound = wraparound;
- }
-
- sGpuBgConfigs.configs[bg].unknown_2 = 0;
- sGpuBgConfigs.configs[bg].unknown_3 = 0;
-
- sGpuBgConfigs.configs[bg].visible = 1;
- }
-}
-
-static u16 GetBgControlAttribute(u8 bg, u8 attributeId)
-{
- if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible)
- {
- switch (attributeId)
- {
- case BG_CTRL_ATTR_VISIBLE:
- return sGpuBgConfigs.configs[bg].visible;
- case BG_CTRL_ATTR_CHARBASEINDEX:
- return sGpuBgConfigs.configs[bg].charBaseIndex;
- case BG_CTRL_ATTR_MAPBASEINDEX:
- return sGpuBgConfigs.configs[bg].mapBaseIndex;
- case BG_CTRL_ATTR_SCREENSIZE:
- return sGpuBgConfigs.configs[bg].screenSize;
- case BG_CTRL_ATTR_PALETTEMODE:
- return sGpuBgConfigs.configs[bg].paletteMode;
- case BG_CTRL_ATTR_PRIORITY:
- return sGpuBgConfigs.configs[bg].priority;
- case BG_CTRL_ATTR_MOSAIC:
- return sGpuBgConfigs.configs[bg].mosaic;
- case BG_CTRL_ATTR_WRAPAROUND:
- return sGpuBgConfigs.configs[bg].wraparound;
- }
- }
-
- return 0xFF;
-}
-
-u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode)
-{
- u16 offset;
- s8 cursor;
-
- if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible)
- {
- switch (mode)
- {
- case 0x1:
- offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE;
- break;
- case 0x2:
- offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE;
- break;
- default:
- cursor = -1;
- goto end;
- }
-
- offset = destOffset + offset;
-
- cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0);
-
- if (cursor == -1)
- {
- return -1;
- }
- }
- else
- {
- return -1;
- }
-
-end:
- return cursor;
-}
-
-static void ShowBgInternal(u8 bg)
-{
- u16 value;
- if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible)
- {
- value = sGpuBgConfigs.configs[bg].priority |
- (sGpuBgConfigs.configs[bg].charBaseIndex << 2) |
- (sGpuBgConfigs.configs[bg].mosaic << 6) |
- (sGpuBgConfigs.configs[bg].paletteMode << 7) |
- (sGpuBgConfigs.configs[bg].mapBaseIndex << 8) |
- (sGpuBgConfigs.configs[bg].wraparound << 13) |
- (sGpuBgConfigs.configs[bg].screenSize << 14);
-
- SetGpuReg((bg << 1) + REG_OFFSET_BG0CNT, value);
-
- sGpuBgConfigs.bgVisibilityAndMode |= 1 << (bg + 8);
- sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS;
- }
-}
-
-static void HideBgInternal(u8 bg)
-{
- if (!IsInvalidBg(bg))
- {
- sGpuBgConfigs.bgVisibilityAndMode &= ~(1 << (bg + 8));
- sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS;
- }
-}
-
-static void SyncBgVisibilityAndMode(void)
-{
- SetGpuReg(REG_OFFSET_DISPCNT, (GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_ALL_BG_AND_MODE_BITS) | sGpuBgConfigs.bgVisibilityAndMode);
-}
-
-void SetTextModeAndHideBgs(void)
-{
- SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_ALL_BG_AND_MODE_BITS);
-}
-
-static void SetBgAffineInternal(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle)
-{
- struct BgAffineSrcData src;
- struct BgAffineDstData dest;
-
- switch (sGpuBgConfigs.bgVisibilityAndMode & 0x7)
- {
- case 1:
- if (bg != 2)
- return;
- break;
- case 2:
- if (bg < 2 || bg > 3)
- return;
- break;
- case 0:
- default:
- return;
- }
-
- src.texX = srcCenterX;
- src.texY = srcCenterY;
- src.scrX = dispCenterX;
- src.scrY = dispCenterY;
- src.sx = scaleX;
- src.sy = scaleY;
- src.alpha = rotationAngle;
-
- BgAffineSet(&src, &dest, 1);
-
- SetGpuReg(REG_OFFSET_BG2PA, dest.pa);
- SetGpuReg(REG_OFFSET_BG2PB, dest.pb);
- SetGpuReg(REG_OFFSET_BG2PC, dest.pc);
- SetGpuReg(REG_OFFSET_BG2PD, dest.pd);
- SetGpuReg(REG_OFFSET_BG2PA, dest.pa);
- SetGpuReg(REG_OFFSET_BG2X_L, (s16)(dest.dx));
- SetGpuReg(REG_OFFSET_BG2X_H, (s16)(dest.dx >> 16));
- SetGpuReg(REG_OFFSET_BG2Y_L, (s16)(dest.dy));
- SetGpuReg(REG_OFFSET_BG2Y_H, (s16)(dest.dy >> 16));
-}
-
-bool8 IsInvalidBg(u8 bg)
-{
- if (bg > 3)
- return TRUE;
- else
- return FALSE;
-}
-
-int DummiedOutFireRedLeafGreenTileAllocFunc(int a1, int a2, int a3, int a4)
-{
- return 0;
-}
-
-void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable)
-{
- int i;
- ResetBgs();
-
- for (i = 0; i < 4; i++)
- {
- sDmaBusyBitfield[i] = 0;
- }
-
- gUnneededFireRedVariable = leftoverFireRedLeafGreenVariable;
-}
-
-void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates)
-{
- int i;
- u8 bg;
-
- SetBgModeInternal(bgMode);
- ResetBgControlStructs();
-
- for (i = 0; i < numTemplates; i++)
- {
- bg = templates[i].bg;
- if (bg < 4)
- {
- SetBgControlAttributes(bg,
- templates[i].charBaseIndex,
- templates[i].mapBaseIndex,
- templates[i].screenSize,
- templates[i].paletteMode,
- templates[i].priority,
- 0,
- 0);
-
- sGpuBgConfigs2[bg].baseTile = templates[i].baseTile;
- sGpuBgConfigs2[bg].basePalette = 0;
- sGpuBgConfigs2[bg].unk_3 = 0;
-
- sGpuBgConfigs2[bg].tilemap = NULL;
- sGpuBgConfigs2[bg].bg_x = 0;
- sGpuBgConfigs2[bg].bg_y = 0;
- }
- }
-}
-
-void InitBgFromTemplate(const struct BgTemplate *template)
-{
- u8 bg = template->bg;
-
- if (bg < 4)
- {
- SetBgControlAttributes(bg,
- template->charBaseIndex,
- template->mapBaseIndex,
- template->screenSize,
- template->paletteMode,
- template->priority,
- 0,
- 0);
-
- sGpuBgConfigs2[bg].baseTile = template->baseTile;
- sGpuBgConfigs2[bg].basePalette = 0;
- sGpuBgConfigs2[bg].unk_3 = 0;
-
- sGpuBgConfigs2[bg].tilemap = NULL;
- sGpuBgConfigs2[bg].bg_x = 0;
- sGpuBgConfigs2[bg].bg_y = 0;
- }
-}
-
-void SetBgMode(u8 bgMode)
-{
- SetBgModeInternal(bgMode);
-}
-
-u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset)
-{
- u16 tileOffset;
- u8 cursor;
-
- if (GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE) == 0)
- {
- tileOffset = (sGpuBgConfigs2[bg].baseTile + destOffset) * 0x20;
- }
- else
- {
- tileOffset = (sGpuBgConfigs2[bg].baseTile + destOffset) * 0x40;
- }
-
- cursor = LoadBgVram(bg, src, size, tileOffset, DISPCNT_MODE_1);
-
- if (cursor == 0xFF)
- {
- return -1;
- }
-
- sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20));
-
- if (gUnneededFireRedVariable == 1)
- {
- DummiedOutFireRedLeafGreenTileAllocFunc(bg, tileOffset / 0x20, size / 0x20, 1);
- }
-
- return cursor;
-}
-
-u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset)
-{
- u8 cursor = LoadBgVram(bg, src, size, destOffset * 2, DISPCNT_MODE_2);
-
- if (cursor == 0xFF)
- {
- return -1;
- }
-
- sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20));
-
- return cursor;
-}
-
-u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset)
-{
- s8 cursor;
-
- if (!IsInvalidBg32(bg))
- {
- u16 paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2);
- cursor = RequestDma3Copy(src, (void*)(paletteOffset + BG_PLTT), size, 0);
-
- if (cursor == -1)
- {
- return -1;
- }
- }
- else
- {
- return -1;
- }
-
- sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20));
-
- return (u8)cursor;
-}
-
-bool8 IsDma3ManagerBusyWithBgCopy(void)
-{
- int i;
-
- for (i = 0; i < 0x80; i++)
- {
- u8 div = i / 0x20;
- u8 mod = i % 0x20;
-
- if ((sDmaBusyBitfield[div] & (1 << mod)))
- {
- s8 reqSpace = CheckForSpaceForDma3Request(i);
- if (reqSpace == -1)
- {
- return TRUE;
- }
-
- sDmaBusyBitfield[div] &= ~(1 << mod);
- }
- }
-
- return FALSE;
-}
-
-void ShowBg(u8 bg)
-{
- ShowBgInternal(bg);
- SyncBgVisibilityAndMode();
-}
-
-void HideBg(u8 bg)
-{
- HideBgInternal(bg);
- SyncBgVisibilityAndMode();
-}
-
-void SetBgAttribute(u8 bg, u8 attributeId, u8 value)
-{
- switch (attributeId)
- {
- case BG_ATTR_CHARBASEINDEX:
- SetBgControlAttributes(bg, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
- break;
- case BG_ATTR_MAPBASEINDEX:
- SetBgControlAttributes(bg, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF);
- break;
- case BG_ATTR_SCREENSIZE:
- SetBgControlAttributes(bg, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF);
- break;
- case BG_ATTR_PALETTEMODE:
- SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF);
- break;
- case BG_ATTR_PRIORITY:
- SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF);
- break;
- case BG_ATTR_MOSAIC:
- SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF);
- break;
- case BG_ATTR_WRAPAROUND:
- SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value);
- break;
- }
-}
-
-u16 GetBgAttribute(u8 bg, u8 attributeId)
-{
- switch (attributeId)
- {
- case BG_ATTR_CHARBASEINDEX:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX);
- case BG_ATTR_MAPBASEINDEX:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_MAPBASEINDEX);
- case BG_ATTR_SCREENSIZE:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
- case BG_ATTR_PALETTEMODE:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE);
- case BG_ATTR_PRIORITY:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_PRIORITY);
- case BG_ATTR_MOSAIC:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_MOSAIC);
- case BG_ATTR_WRAPAROUND:
- return GetBgControlAttribute(bg, BG_CTRL_ATTR_WRAPAROUND);
- case BG_ATTR_METRIC:
- switch (GetBgType(bg))
- {
- case 0:
- return GetBgMetricTextMode(bg, 0) * 0x800;
- case 1:
- return GetBgMetricAffineMode(bg, 0) * 0x100;
- default:
- return 0;
- }
- case BG_ATTR_TYPE:
- return GetBgType(bg);
- case BG_ATTR_BASETILE:
- return sGpuBgConfigs2[bg].baseTile;
- default:
- return -1;
- }
-}
-
-s32 ChangeBgX(u8 bg, s32 value, u8 op)
-{
- u8 mode;
- u16 temp1;
- u16 temp2;
-
- if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
- {
- return -1;
- }
-
- switch (op)
- {
- case 0:
- default:
- sGpuBgConfigs2[bg].bg_x = value;
- break;
- case 1:
- sGpuBgConfigs2[bg].bg_x += value;
- break;
- case 2:
- sGpuBgConfigs2[bg].bg_x -= value;
- break;
- }
-
- mode = GetBgMode();
-
- switch (bg)
- {
- case 0:
- temp1 = sGpuBgConfigs2[0].bg_x >> 0x8;
- SetGpuReg(REG_OFFSET_BG0HOFS, temp1);
- break;
- case 1:
- temp1 = sGpuBgConfigs2[1].bg_x >> 0x8;
- SetGpuReg(REG_OFFSET_BG1HOFS, temp1);
- break;
- case 2:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[2].bg_x >> 0x8;
- SetGpuReg(REG_OFFSET_BG2HOFS, temp1);
- }
- else
- {
- temp1 = sGpuBgConfigs2[2].bg_x >> 0x10;
- temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF;
- SetGpuReg(REG_OFFSET_BG2X_H, temp1);
- SetGpuReg(REG_OFFSET_BG2X_L, temp2);
- }
- break;
- case 3:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[3].bg_x >> 0x8;
- SetGpuReg(REG_OFFSET_BG3HOFS, temp1);
- }
- else if (mode == 2)
- {
- temp1 = sGpuBgConfigs2[3].bg_x >> 0x10;
- temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF;
- SetGpuReg(REG_OFFSET_BG3X_H, temp1);
- SetGpuReg(REG_OFFSET_BG3X_L, temp2);
- }
- break;
- }
-
- return sGpuBgConfigs2[bg].bg_x;
-}
-
-s32 GetBgX(u8 bg)
-{
- if (IsInvalidBg32(bg))
- return -1;
- else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
- return -1;
- else
- return sGpuBgConfigs2[bg].bg_x;
-}
-
-s32 ChangeBgY(u8 bg, s32 value, u8 op)
-{
- u8 mode;
- u16 temp1;
- u16 temp2;
-
- if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
- {
- return -1;
- }
-
- switch (op)
- {
- case 0:
- default:
- sGpuBgConfigs2[bg].bg_y = value;
- break;
- case 1:
- sGpuBgConfigs2[bg].bg_y += value;
- break;
- case 2:
- sGpuBgConfigs2[bg].bg_y -= value;
- break;
- }
-
- mode = GetBgMode();
-
- switch (bg)
- {
- case 0:
- temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
- SetGpuReg(REG_OFFSET_BG0VOFS, temp1);
- break;
- case 1:
- temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
- SetGpuReg(REG_OFFSET_BG1VOFS, temp1);
- break;
- case 2:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
- SetGpuReg(REG_OFFSET_BG2VOFS, temp1);
- }
- else
- {
- temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
- temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
- SetGpuReg(REG_OFFSET_BG2Y_H, temp1);
- SetGpuReg(REG_OFFSET_BG2Y_L, temp2);
- }
- break;
- case 3:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
- SetGpuReg(REG_OFFSET_BG3VOFS, temp1);
- }
- else if (mode == 2)
- {
- temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
- temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
- SetGpuReg(REG_OFFSET_BG3Y_H, temp1);
- SetGpuReg(REG_OFFSET_BG3Y_L, temp2);
- }
- break;
- }
-
- return sGpuBgConfigs2[bg].bg_y;
-}
-
-s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op)
-{
- u8 mode;
- u16 temp1;
- u16 temp2;
-
- if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
- {
- return -1;
- }
-
- switch (op)
- {
- case 0:
- default:
- sGpuBgConfigs2[bg].bg_y = value;
- break;
- case 1:
- sGpuBgConfigs2[bg].bg_y += value;
- break;
- case 2:
- sGpuBgConfigs2[bg].bg_y -= value;
- break;
- }
-
- mode = GetBgMode();
-
- switch (bg)
- {
- case 0:
- temp1 = sGpuBgConfigs2[0].bg_y >> 0x8;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, temp1);
- break;
- case 1:
- temp1 = sGpuBgConfigs2[1].bg_y >> 0x8;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG1VOFS, temp1);
- break;
- case 2:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[2].bg_y >> 0x8;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG2VOFS, temp1);
-
- }
- else
- {
- temp1 = sGpuBgConfigs2[2].bg_y >> 0x10;
- temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG2Y_H, temp1);
- SetGpuReg_ForcedBlank(REG_OFFSET_BG2Y_L, temp2);
- }
- break;
- case 3:
- if (mode == 0)
- {
- temp1 = sGpuBgConfigs2[3].bg_y >> 0x8;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG3VOFS, temp1);
- }
- else if (mode == 2)
- {
- temp1 = sGpuBgConfigs2[3].bg_y >> 0x10;
- temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF;
- SetGpuReg_ForcedBlank(REG_OFFSET_BG3Y_H, temp1);
- SetGpuReg_ForcedBlank(REG_OFFSET_BG3Y_L, temp2);
- }
- break;
- }
-
- return sGpuBgConfigs2[bg].bg_y;
-}
-
-s32 GetBgY(u8 bg)
-{
- if (IsInvalidBg32(bg))
- return -1;
- else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
- return -1;
- else
- return sGpuBgConfigs2[bg].bg_y;
-}
-
-void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle)
-{
- SetBgAffineInternal(bg, srcCenterX, srcCenterY, dispCenterX, dispCenterY, scaleX, scaleY, rotationAngle);
-}
-
-u8 Unused_AdjustBgMosaic(u8 a1, u8 a2)
-{
- u16 result = GetGpuReg(REG_OFFSET_MOSAIC);
- s16 test1 = result & 0xF;
- s16 test2 = (result >> 4) & 0xF;
-
- result &= 0xFF00;
-
- switch (a2)
- {
- case 0:
- default:
- test1 = a1 & 0xF;
- test2 = a1 >> 0x4;
- break;
- case 1:
- test1 = a1 & 0xF;
- break;
- case 2:
- if ((test1 + a1) > 0xF)
- {
- test1 = 0xF;
- }
- else
- {
- test1 += a1;
- }
- break;
- case 3:
- if ((test1 - a1) < 0)
- {
- test1 = 0x0;
- }
- else
- {
- test1 -= a1;
- }
- break;
- case 4:
- test2 = a1 & 0xF;
- break;
- case 5:
- if ((test2 + a1) > 0xF)
- {
- test2 = 0xF;
- }
- else
- {
- test2 += a1;
- }
- break;
- case 6:
- if ((test2 - a1) < 0)
- {
- test2 = 0x0;
- }
- else
- {
- test2 -= a1;
- }
- break;
- }
-
- result |= ((test2 << 0x4) & 0xF0);
- result |= (test1 & 0xF);
-
- SetGpuReg(REG_OFFSET_MOSAIC, result);
-
- return result;
-}
-
-void SetBgTilemapBuffer(u8 bg, void *tilemap)
-{
- if (!IsInvalidBg32(bg) && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
- {
- sGpuBgConfigs2[bg].tilemap = tilemap;
- }
-}
-
-void UnsetBgTilemapBuffer(u8 bg)
-{
- if (!IsInvalidBg32(bg) && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
- {
- sGpuBgConfigs2[bg].tilemap = NULL;
- }
-}
-
-void* GetBgTilemapBuffer(u8 bg)
-{
- if (IsInvalidBg32(bg))
- return NULL;
- else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE))
- return NULL;
- else
- return sGpuBgConfigs2[bg].tilemap;
-}
-
-void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset)
-{
- if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
- {
- if (mode != 0)
- CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode);
- else
- LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)));
- }
-}
-
-void CopyBgTilemapBufferToVram(u8 bg)
-{
- u16 sizeToLoad;
-
- if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
- {
- switch (GetBgType(bg))
- {
- case 0:
- sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800;
- break;
- case 1:
- sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100;
- break;
- default:
- sizeToLoad = 0;
- break;
- }
- LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2);
- }
-}
-
-void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height)
-{
- u16 destX16;
- u16 destY16;
- u16 mode;
-
- if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
- {
- switch (GetBgType(bg))
- {
- case 0:
- {
- const u16 * srcCopy = src;
- for (destY16 = destY; destY16 < (destY + height); destY16++)
- {
- for (destX16 = destX; destX16 < (destX + width); destX16++)
- {
- ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++;
- }
- }
- break;
- }
- case 1:
- {
- const u8 * srcCopy = src;
- mode = GetBgMetricAffineMode(bg, 0x1);
- for (destY16 = destY; destY16 < (destY + height); destY16++)
- {
- for (destX16 = destX; destX16 < (destX + width); destX16++)
- {
- ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++;
- }
- }
- break;
- }
- }
- }
-}
-
-void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette)
-{
- CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0);
-}
-
-void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 unused, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, s16 palette1, s16 tileOffset)
-{
- u16 screenWidth, screenHeight, screenSize;
- u16 var;
- const void *srcPtr;
- u16 i, j;
-
- if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
- {
- screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
- screenWidth = GetBgMetricTextMode(bg, 0x1) * 0x20;
- screenHeight = GetBgMetricTextMode(bg, 0x2) * 0x20;
- switch (GetBgType(bg))
- {
- case 0:
- srcPtr = src + ((srcY * srcWidth) + srcX) * 2;
- for (i = destX; i < (destX + rectWidth); i++)
- {
- for (j = srcHeight; j < (srcHeight + destY); j++)
- {
- u16 index = GetTileMapIndexFromCoords(j, i, screenSize, screenWidth, screenHeight);
- CopyTileMapEntry(srcPtr, sGpuBgConfigs2[bg].tilemap + (index * 2), rectHeight, palette1, tileOffset);
- srcPtr += 2;
- }
- srcPtr += (srcWidth - destY) * 2;
- }
- break;
- case 1:
- srcPtr = src + ((srcY * srcWidth) + srcX);
- var = GetBgMetricAffineMode(bg, 0x1);
- for (i = destX; i < (destX + rectWidth); i++)
- {
- for (j = srcHeight; j < (srcHeight + destY); j++)
- {
- *(u8*)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8*)(srcPtr) + palette1;
- srcPtr++;
- }
- srcPtr += (srcWidth - destY);
- }
- break;
- }
- }
-}
-
-void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height)
-{
- u16 x16;
- u16 y16;
- u16 mode;
-
- if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
- {
- switch (GetBgType(bg))
- {
- case 0:
- for (y16 = y; y16 < (y + height); y16++)
- {
- for (x16 = x; x16 < (x + width); x16++)
- {
- ((u16*)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum;
- }
- }
- break;
- case 1:
- mode = GetBgMetricAffineMode(bg, 0x1);
- for (y16 = y; y16 < (y + height); y16++)
- {
- for (x16 = x; x16 < (x + width); x16++)
- {
- ((u8*)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum;
- }
- }
- break;
- }
- }
-}
-
-void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette)
-{
- WriteSequenceToBgTilemapBuffer(bg, tileNum, x, y, width, height, palette, 0);
-}
-
-void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta)
-{
- u16 mode;
- u16 mode2;
- u16 attribute;
- u16 mode3;
- u16 x16, y16;
-
- if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg))
- {
- attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
- mode = GetBgMetricTextMode(bg, 0x1) * 0x20;
- mode2 = GetBgMetricTextMode(bg, 0x2) * 0x20;
- switch (GetBgType(bg))
- {
- case 0:
- for (y16 = y; y16 < (y + height); y16++)
- {
- for (x16 = x; x16 < (x + width); x16++)
- {
- CopyTileMapEntry(&firstTileNum, &((u16*)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0);
- firstTileNum = (firstTileNum & (METATILE_COLLISION_MASK | METATILE_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & METATILE_ID_MASK);
- }
- }
- break;
- case 1:
- mode3 = GetBgMetricAffineMode(bg, 0x1);
- for (y16 = y; y16 < (y + height); y16++)
- {
- for (x16 = x; x16 < (x + width); x16++)
- {
- ((u8*)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum;
- firstTileNum = (firstTileNum & (METATILE_COLLISION_MASK | METATILE_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & METATILE_ID_MASK);
- }
- }
- break;
- }
- }
-}
-
-u16 GetBgMetricTextMode(u8 bg, u8 whichMetric)
-{
- u8 screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
-
- switch (whichMetric)
- {
- case 0:
- switch (screenSize)
- {
- case 0:
- return 1;
- case 1:
- case 2:
- return 2;
- case 3:
- return 4;
- }
- break;
- case 1:
- switch (screenSize)
- {
- case 0:
- return 1;
- case 1:
- return 2;
- case 2:
- return 1;
- case 3:
- return 2;
- }
- break;
- case 2:
- switch (screenSize)
- {
- case 0:
- case 1:
- return 1;
- case 2:
- case 3:
- return 2;
- }
- break;
- }
- return 0;
-}
-
-u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric)
-{
- u8 screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE);
-
- switch (whichMetric)
- {
- case 0:
- switch (screenSize)
- {
- case 0:
- return 0x1;
- case 1:
- return 0x4;
- case 2:
- return 0x10;
- case 3:
- return 0x40;
- }
- break;
- case 1:
- case 2:
- return 0x10 << screenSize;
- }
- return 0;
-}
-
-u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 screenHeight)
-{
- x = x & (screenWidth - 1);
- y = y & (screenHeight - 1);
-
- switch (screenSize)
- {
- case 0:
- case 2:
- break;
- case 3:
- if (y >= 0x20)
- y += 0x20;
- case 1:
- if (x >= 0x20)
- {
- x -= 0x20;
- y += 0x20;
- }
- break;
- }
- return (y * 0x20) + x;
-}
-
-void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2)
-{
- u16 var;
-
- if (palette1 == 16)
- goto CASE_16;
- switch (palette1)
- {
- case 0 ... 16:
- var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12);
- break;
- CASE_16:
- var = *dest;
- var &= 0xFC00;
- var += palette2 << 12;
- var |= (*src + tileOffset) & 0x3FF;
- break;
- default:
- var = *src + tileOffset + (palette2 << 12);
- break;
- }
- *dest = var;
-}
-
-u32 GetBgType(u8 bg)
-{
- u8 mode = GetBgMode();
-
- switch (bg)
- {
- case 0:
- case 1:
- switch (mode)
- {
- case 0:
- case 1:
- return 0;
- }
- break;
- case 2:
- switch (mode)
- {
- case 0:
- return 0;
- case 1:
- case 2:
- return 1;
- }
- break;
- case 3:
- switch (mode)
- {
- case 0:
- return 0;
- case 2:
- return 1;
- }
- break;
- }
-
- return 0xFFFF;
-}
-
-bool32 IsInvalidBg32(u8 bg)
-{
- if (bg > 3)
- return TRUE;
- else
- return FALSE;
-}
-
-bool32 IsTileMapOutsideWram(u8 bg)
-{
- if (sGpuBgConfigs2[bg].tilemap > (void*)IWRAM_END)
- return TRUE;
- else if (sGpuBgConfigs2[bg].tilemap == NULL)
- return TRUE;
- else
- return FALSE;
-}
diff --git a/src/bike.c b/src/bike.c
index 7f84f350b..fad61ffab 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -45,8 +45,8 @@ static u8 AcroBike_GetJumpDirection(void);
static void Bike_UpdateDirTimerHistory(u8);
static void Bike_UpdateABStartSelectHistory(u8);
static u8 Bike_DPadToDirection(u16);
-static u8 get_some_collision(u8);
-static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct EventObject *, s16, s16, u8, u8);
+static u8 GetBikeCollision(u8);
+static u8 GetBikeCollisionAt(struct EventObject *, s16, s16, u8, u8);
static bool8 IsRunningDisallowedByMetatile(u8);
static void Bike_TryAdvanceCyclingRoadCollisions();
static u8 CanBikeFaceDirOnMetatile(u8, u8);
@@ -214,8 +214,8 @@ static void MachBikeTransition_TrySpeedUp(u8 direction)
}
else
{
- collision = get_some_collision(direction);
- if (collision > 0 && collision < 12)
+ collision = GetBikeCollision(direction);
+ if (collision > 0 && collision < COLLISION_VERTICAL_RAIL)
{
// we hit a solid object, but check to see if its a ledge and then jump.
if (collision == COLLISION_LEDGE_JUMP)
@@ -226,9 +226,9 @@ static void MachBikeTransition_TrySpeedUp(u8 direction)
{
// we hit a solid object that is not a ledge, so perform the collision.
Bike_SetBikeStill();
- if (collision == 4 && IsPlayerCollidingWithFarawayIslandMew(direction))
+ if (collision == COLLISION_EVENT_OBJECT && IsPlayerCollidingWithFarawayIslandMew(direction))
PlayerOnBikeCollideWithFarawayIslandMew(direction);
- else if (collision < 5 || collision > 8)
+ else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE)
PlayerOnBikeCollide(direction);
}
}
@@ -250,9 +250,9 @@ static void MachBikeTransition_TrySlowDown(u8 direction)
if (gPlayerAvatar.bikeSpeed != SPEED_STANDING)
gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.bikeSpeed;
- collision = get_some_collision(direction);
+ collision = GetBikeCollision(direction);
- if (collision > 0 && collision < 12)
+ if (collision > 0 && collision < COLLISION_VERTICAL_RAIL)
{
if (collision == COLLISION_LEDGE_JUMP)
{
@@ -261,9 +261,9 @@ static void MachBikeTransition_TrySlowDown(u8 direction)
else
{
Bike_SetBikeStill();
- if (collision == 4 && IsPlayerCollidingWithFarawayIslandMew(direction))
+ if (collision == COLLISION_EVENT_OBJECT && IsPlayerCollidingWithFarawayIslandMew(direction))
PlayerOnBikeCollideWithFarawayIslandMew(direction);
- else if (collision < 5 || collision > 8)
+ else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE)
PlayerOnBikeCollide(direction);
}
}
@@ -552,14 +552,14 @@ static void AcroBikeTransition_Moving(u8 direction)
AcroBikeTransition_FaceDirection(playerEventObj->movementDirection);
return;
}
- collision = get_some_collision(direction);
- if (collision > 0 && collision < 12)
+ collision = GetBikeCollision(direction);
+ if (collision > 0 && collision < COLLISION_VERTICAL_RAIL)
{
if (collision == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(direction);
- else if (collision == 4 && IsPlayerCollidingWithFarawayIslandMew(direction))
+ else if (collision == COLLISION_EVENT_OBJECT && IsPlayerCollidingWithFarawayIslandMew(direction))
PlayerOnBikeCollideWithFarawayIslandMew(direction);
- else if (collision < 5 || collision > 8)
+ else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE)
PlayerOnBikeCollide(direction);
}
else
@@ -614,19 +614,19 @@ static void AcroBikeTransition_WheelieHoppingMoving(u8 direction)
AcroBikeTransition_WheelieHoppingStanding(playerEventObj->movementDirection);
return;
}
- collision = get_some_collision(direction);
+ collision = GetBikeCollision(direction);
// TODO: Try to get rid of this goto
- if (collision == 0 || collision == 9)
+ if (collision == 0 || collision == COLLISION_WHEELIE_HOP)
{
goto derp;
}
- else if (collision == 6)
+ else if (collision == COLLISION_LEDGE_JUMP)
{
PlayerLedgeHoppingWheelie(direction);
}
- else if (collision < 5 || collision > 8)
+ else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE)
{
- if (collision <= 11)
+ if (collision < COLLISION_VERTICAL_RAIL)
{
AcroBikeTransition_WheelieHoppingStanding(direction);
}
@@ -643,12 +643,12 @@ static void AcroBikeTransition_SideJump(u8 direction)
u8 collision;
struct EventObject *playerEventObj;
- collision = get_some_collision(direction);
- if (collision != 0)
+ collision = GetBikeCollision(direction);
+ if (collision)
{
- if (collision == 7)
+ if (collision == COLLISION_PUSHED_BOULDER)
return;
- if (collision < 10)
+ if (collision < COLLISION_ISOLATED_VERTICAL_RAIL)
{
AcroBikeTransition_TurnDirection(direction);
return;
@@ -680,18 +680,18 @@ static void AcroBikeTransition_WheelieMoving(u8 direction)
PlayerIdleWheelie(playerEventObj->movementDirection);
return;
}
- collision = get_some_collision(direction);
- if (collision > 0 && collision < 12)
+ collision = GetBikeCollision(direction);
+ if (collision > 0 && collision < COLLISION_VERTICAL_RAIL)
{
- if (collision == 6)
+ if (collision == COLLISION_LEDGE_JUMP)
{
PlayerLedgeHoppingWheelie(direction);
}
- else if (collision == 9)
+ else if (collision == COLLISION_WHEELIE_HOP)
{
PlayerIdleWheelie(direction);
}
- else if (collision <= 4)
+ else if (collision < COLLISION_STOP_SURFING)
{
if (MetatileBehavior_IsBumpySlope(playerEventObj->currentMetatileBehavior))
PlayerIdleWheelie(direction);
@@ -714,18 +714,18 @@ static void AcroBikeTransition_WheelieRisingMoving(u8 direction)
PlayerStartWheelie(playerEventObj->movementDirection);
return;
}
- collision = get_some_collision(direction);
- if (collision > 0 && collision < 12)
+ collision = GetBikeCollision(direction);
+ if (collision > 0 && collision < COLLISION_VERTICAL_RAIL)
{
- if (collision == 6)
+ if (collision == COLLISION_LEDGE_JUMP)
{
PlayerLedgeHoppingWheelie(direction);
}
- else if (collision == 9)
+ else if (collision == COLLISION_WHEELIE_HOP)
{
PlayerIdleWheelie(direction);
}
- else if (collision <= 4)
+ else if (collision < COLLISION_STOP_SURFING)
{
if (MetatileBehavior_IsBumpySlope(playerEventObj->currentMetatileBehavior))
PlayerIdleWheelie(direction);
@@ -748,12 +748,12 @@ static void AcroBikeTransition_WheelieLoweringMoving(u8 direction)
PlayerEndWheelie(playerEventObj->movementDirection);
return;
}
- collision = get_some_collision(direction);
- if (collision > 0 && collision < 12)
+ collision = GetBikeCollision(direction);
+ if (collision > 0 && collision < COLLISION_VERTICAL_RAIL)
{
- if (collision == 6)
+ if (collision == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(direction);
- else if (collision < 5 || collision > 8)
+ else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE)
PlayerEndWheelie(direction);
return;
}
@@ -865,29 +865,26 @@ static u8 Bike_DPadToDirection(u16 heldKeys)
return DIR_NONE;
}
-static u8 get_some_collision(u8 direction)
+static u8 GetBikeCollision(u8 direction)
{
- s16 x;
- s16 y;
u8 metatitleBehavior;
struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId];
-
- x = playerEventObj->currentCoords.x;
- y = playerEventObj->currentCoords.y;
+ s16 x = playerEventObj->currentCoords.x;
+ s16 y = playerEventObj->currentCoords.y;
MoveCoords(direction, &x, &y);
metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y);
- return Bike_CheckCollisionTryAdvanceCollisionCount(playerEventObj, x, y, direction, metatitleBehavior);
+ return GetBikeCollisionAt(playerEventObj, x, y, direction, metatitleBehavior);
}
-static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct EventObject *eventObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior)
+static u8 GetBikeCollisionAt(struct EventObject *eventObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior)
{
u8 collision = CheckForEventObjectCollision(eventObject, x, y, direction, metatitleBehavior);
- if (collision > 4)
+ if (collision > COLLISION_EVENT_OBJECT)
return collision;
- if (collision == 0 && IsRunningDisallowedByMetatile(metatitleBehavior))
- collision = 2;
+ if (collision == COLLISION_NONE && IsRunningDisallowedByMetatile(metatitleBehavior))
+ collision = COLLISION_IMPASSABLE;
if (collision)
Bike_TryAdvanceCyclingRoadCollisions();
@@ -941,10 +938,10 @@ static bool8 WillPlayerCollideWithCollision(u8 newTileCollision, u8 direction)
{
if (direction == DIR_NORTH || direction == DIR_SOUTH)
{
- if (newTileCollision == 10 || newTileCollision == 12)
+ if (newTileCollision == COLLISION_ISOLATED_VERTICAL_RAIL || newTileCollision == COLLISION_VERTICAL_RAIL)
return FALSE;
}
- else if (newTileCollision == 11 || newTileCollision == 13)
+ else if (newTileCollision == COLLISION_ISOLATED_HORIZONTAL_RAIL || newTileCollision == COLLISION_HORIZONTAL_RAIL)
{
return FALSE;
}
diff --git a/src/birch_pc.c b/src/birch_pc.c
index 5179b1920..5b574b05d 100644
--- a/src/birch_pc.c
+++ b/src/birch_pc.c
@@ -9,13 +9,13 @@ bool16 ScriptGetPokedexInfo(void)
{
if (gSpecialVar_0x8004 == 0) // is national dex not present?
{
- gSpecialVar_0x8005 = GetHoennPokedexCount(0);
- gSpecialVar_0x8006 = GetHoennPokedexCount(1);
+ gSpecialVar_0x8005 = GetHoennPokedexCount(FLAG_GET_SEEN);
+ gSpecialVar_0x8006 = GetHoennPokedexCount(FLAG_GET_CAUGHT);
}
else
{
- gSpecialVar_0x8005 = GetNationalPokedexCount(0);
- gSpecialVar_0x8006 = GetNationalPokedexCount(1);
+ gSpecialVar_0x8005 = GetNationalPokedexCount(FLAG_GET_SEEN);
+ gSpecialVar_0x8006 = GetNationalPokedexCount(FLAG_GET_CAUGHT);
}
return IsNationalPokedexEnabled();
diff --git a/src/blit.c b/src/blit.c
deleted file mode 100644
index 26a63fe9b..000000000
--- a/src/blit.c
+++ /dev/null
@@ -1,209 +0,0 @@
-#include "global.h"
-#include "blit.h"
-
-void BlitBitmapRect4BitWithoutColorKey(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height)
-{
- BlitBitmapRect4Bit(src, dst, srcX, srcY, dstX, dstY, width, height, 0xFF);
-}
-
-void BlitBitmapRect4Bit(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey)
-{
- s32 xEnd;
- s32 yEnd;
- s32 multiplierSrcY;
- s32 multiplierDstY;
- s32 loopSrcY, loopDstY;
- s32 loopSrcX, loopDstX;
- const u8 *pixelsSrc;
- u8 *pixelsDst;
- s32 toOrr;
- s32 toAnd;
- s32 toShift;
-
- if (dst->width - dstX < width)
- xEnd = (dst->width - dstX) + srcX;
- else
- xEnd = srcX + width;
-
- if (dst->height - dstY < height)
- yEnd = (dst->height - dstY) + srcY;
- else
- yEnd = height + srcY;
-
- multiplierSrcY = (src->width + (src->width & 7)) >> 3;
- multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
-
- if (colorKey == 0xFF)
- {
- for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
- {
- for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
- {
- pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
- pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B);
- toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF);
- toShift = ((loopDstX & 1) << 2);
- toOrr <<= toShift;
- toAnd = 0xF0 >> (toShift);
- *pixelsDst = toOrr | (*pixelsDst & toAnd);
- }
- }
- }
- else
- {
- for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
- {
- for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
- {
- pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
- pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B);
- toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF);
- if (toOrr != colorKey)
- {
- toShift = ((loopDstX & 1) << 2);
- toOrr <<= toShift;
- toAnd = 0xF0 >> (toShift);
- *pixelsDst = toOrr | (*pixelsDst & toAnd);
- }
- }
- }
- }
-}
-
-void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
-{
- s32 xEnd;
- s32 yEnd;
- s32 multiplierY;
- s32 loopX, loopY;
- s32 toOrr1, toOrr2;
-
- xEnd = x + width;
- if (xEnd > surface->width)
- xEnd = surface->width;
-
- yEnd = y + height;
- if (yEnd > surface->height)
- yEnd = surface->height;
-
- multiplierY = (surface->width + (surface->width & 7)) >> 3;
- toOrr1 = (u32)(fillValue << 0x1C) >> 0x18;
- toOrr2 = (fillValue & 0xF);
-
- for (loopY = y; loopY < yEnd; loopY++)
- {
- for (loopX = x; loopX < xEnd; loopX++)
- {
- u8 *pixels = surface->pixels + ((loopX >> 1) & 3) + ((loopX >> 3) << 5) + (((loopY >> 3) * multiplierY) << 5) + ((u32)(loopY << 0x1d) >> 0x1B);
- if ((loopX << 0x1F) != 0)
- *pixels = toOrr1 | (*pixels & 0xF);
- else
- *pixels = toOrr2 | (*pixels & 0xF0);
- }
- }
-}
-
-void BlitBitmapRect4BitTo8Bit(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
-{
- s32 palOffsetBits;
- s32 xEnd;
- s32 yEnd;
- s32 multiplierSrcY;
- s32 multiplierDstY;
- s32 loopSrcY, loopDstY;
- s32 loopSrcX, loopDstX;
- const u8 *pixelsSrc;
- u8 *pixelsDst;
- s32 colorKeyBits;
-
- palOffsetBits = (u32)(paletteOffset << 0x1C) >> 0x18;
- colorKeyBits = (u32)(colorKey << 0x1C) >> 0x18;
-
- if (dst->width - dstX < width)
- xEnd = (dst->width - dstX) + srcX;
- else
- xEnd = width + srcX;
-
- if (dst->height - dstY < height)
- yEnd = (srcY + dst->height) - dstY;
- else
- yEnd = srcY + height;
-
- multiplierSrcY = (src->width + (src->width & 7)) >> 3;
- multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
-
- if (colorKey == 0xFF)
- {
- for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
- {
- pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
- for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
- {
- pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
- if (loopSrcX & 1)
- {
- *pixelsDst = palOffsetBits + (*pixelsSrc >> 4);
- }
- else
- {
- pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
- *pixelsDst = palOffsetBits + (*pixelsSrc & 0xF);
- }
- }
- }
- }
- else
- {
- for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
- {
- pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
- for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
- {
- if (loopSrcX & 1)
- {
- if ((*pixelsSrc & 0xF0) != colorKeyBits)
- {
- pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
- *pixelsDst = palOffsetBits + (*pixelsSrc >> 4);
- }
- }
- else
- {
- pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
- if ((*pixelsSrc & 0xF) != colorKey)
- {
- pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
- *pixelsDst = palOffsetBits + (*pixelsSrc & 0xF);
- }
- }
- }
- }
- }
-}
-
-void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
-{
- s32 xEnd;
- s32 yEnd;
- s32 multiplierY;
- s32 loopX, loopY;
-
- xEnd = x + width;
- if (xEnd > surface->width)
- xEnd = surface->width;
-
- yEnd = y + height;
- if (yEnd > surface->height)
- yEnd = surface->height;
-
- multiplierY = (surface->width + (surface->width & 7)) >> 3;
-
- for (loopY = y; loopY < yEnd; loopY++)
- {
- for (loopX = x; loopX < xEnd; loopX++)
- {
- u8 *pixels = surface->pixels + (loopX & 7) + ((loopX >> 3) << 6) + (((loopY >> 3) * multiplierY) << 6) + ((u32)(loopY << 0x1d) >> 0x1a);
- *pixels = fillValue;
- }
- }
-}
diff --git a/src/bug.c b/src/bug.c
index 4fa6a5bb6..207000fb8 100644
--- a/src/bug.c
+++ b/src/bug.c
@@ -47,7 +47,7 @@ const struct SpriteTemplate gUnknown_08596974 =
{
.tileTag = ANIM_TAG_HORN_HIT_2,
.paletteTag = ANIM_TAG_HORN_HIT_2,
- .oam = &gUnknown_085249F4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596968,
@@ -83,7 +83,7 @@ const struct SpriteTemplate gUnknown_085969C8 =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_NEEDLE,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085969BC,
@@ -94,7 +94,7 @@ const struct SpriteTemplate gWebThreadSpriteTemplate =
{
.tileTag = ANIM_TAG_WEB_THREAD,
.paletteTag = ANIM_TAG_WEB_THREAD,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -105,7 +105,7 @@ const struct SpriteTemplate gUnknown_085969F8 =
{
.tileTag = ANIM_TAG_STRING,
.paletteTag = ANIM_TAG_STRING,
- .oam = &gUnknown_0852493C,
+ .oam = &gOamData_AffineOff_ObjNormal_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -128,7 +128,7 @@ const struct SpriteTemplate gSpiderWebSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIDER_WEB,
.paletteTag = ANIM_TAG_SPIDER_WEB,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596A28,
@@ -139,7 +139,7 @@ const struct SpriteTemplate gLinearStingerSpriteTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_NEEDLE,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -150,7 +150,7 @@ const struct SpriteTemplate gPinMissileSpriteTemplate =
{
.tileTag = ANIM_TAG_NEEDLE,
.paletteTag = ANIM_TAG_NEEDLE,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -161,7 +161,7 @@ const struct SpriteTemplate gIcicleSpearSpriteTemplate =
{
.tileTag = ANIM_TAG_ICICLE_SPEAR,
.paletteTag = ANIM_TAG_ICICLE_SPEAR,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -188,7 +188,7 @@ const struct SpriteTemplate gUnknown_08596AC8 =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596AC4,
diff --git a/src/cable_car.c b/src/cable_car.c
index adeee2647..c6e7e724e 100644
--- a/src/cable_car.c
+++ b/src/cable_car.c
@@ -6,7 +6,7 @@
#include "field_weather.h"
#include "gpu_regs.h"
#include "graphics.h"
-#include "alloc.h"
+#include "malloc.h"
#include "main.h"
#include "menu.h"
#include "overworld.h"
diff --git a/src/cable_club.c b/src/cable_club.c
index 303cc76d1..1375789c3 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -30,6 +30,8 @@
#include "trainer_card.h"
#include "party_menu.h"
#include "window.h"
+#include "constants/battle_frontier.h"
+#include "constants/cable_club.h"
#include "constants/songs.h"
static const struct WindowTemplate gUnknown_08550594 = {
@@ -123,9 +125,9 @@ static u32 sub_80B2478(u8 lower, u8 upper)
return 1;
case EXCHANGE_IN_PROGRESS:
return 3;
- case EXCHANGE_STAT_4:
+ case EXCHANGE_PLAYER_NOT_READY:
return 7;
- case EXCHANGE_STAT_5:
+ case EXCHANGE_PARTNER_NOT_READY:
return 9;
case EXCHANGE_STAT_6:
ConvertIntToDecimalStringN(gStringVar1, GetLinkPlayerCount_2(), STR_CONV_MODE_LEFT_ALIGN, 1);
@@ -457,7 +459,7 @@ static void task_map_chg_seq_0807EC34(u16 *a0, u32 taskId)
if (*a0 == 1)
{
- if (gLinkType == 0x2266 || gLinkType == 0x2277)
+ if (gLinkType == LINKTYPE_BATTLE_TOWER_50 || gLinkType == LINKTYPE_BATTLE_TOWER_OPEN)
{
if (sub_80B2AF4(trainerCards[0].monSpecies, trainerCards[1].monSpecies))
{
@@ -550,45 +552,42 @@ static bool8 sub_80B2D6C(u8 taskId)
return FALSE;
}
-void sub_80B2DA4(u8 arg0)
+void TryBattleLinkup(u8 arg0)
{
u8 r3 = 2;
u8 r2 = 2;
switch (gSpecialVar_0x8004)
{
- case 1:
+ case USING_SINGLE_BATTLE:
r3 = 2;
- gLinkType = 0x2233;
+ gLinkType = LINKTYPE_SINGLE_BATTLE;
break;
- case 2:
+ case USING_DOUBLE_BATTLE:
r3 = 2;
- gLinkType = 0x2244;
+ gLinkType = LINKTYPE_DOUBLE_BATTLE;
break;
- case 5:
+ case USING_MULTI_BATTLE:
r3 = 4;
r2 = 4;
- gLinkType = 0x2255;
+ gLinkType = LINKTYPE_MULTI_BATTLE;
break;
- case 9:
+ case USING_BATTLE_TOWER:
r3 = 2;
- if (gSaveBlock2Ptr->frontier.lvlMode == 0)
- {
- gLinkType = 0x2266;
- }
+ if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_50)
+ gLinkType = LINKTYPE_BATTLE_TOWER_50;
else
- {
- gLinkType = 0x2277;
- }
+ gLinkType = LINKTYPE_BATTLE_TOWER_OPEN;
+
break;
}
sub_80B236C(r3, r2);
}
-void sub_80B2E4C(void)
+void TryTradeLinkup(void)
{
- gLinkType = 0x1133;
+ gLinkType = LINKTYPE_0x1133;
gBattleTypeFlags = 0;
sub_80B236C(2, 2);
}
@@ -596,7 +595,7 @@ void sub_80B2E4C(void)
void sub_80B2E74(void)
{
gSpecialVar_Result = 0;
- gLinkType = 0x3311;
+ gLinkType = LINKTYPE_0x3311;
gBattleTypeFlags = 0;
sub_80B236C(2, 4);
}
@@ -681,21 +680,21 @@ static void sub_80B2EE4(u8 taskId)
void sub_80B2FD8(void)
{
- gLinkType = 0x4411;
+ gLinkType = LINKTYPE_0x4411;
gBattleTypeFlags = 0;
sub_80B236C(2, 4);
}
void sub_80B3000(void)
{
- gLinkType = 0x6601;
+ gLinkType = LINKTYPE_0x6601;
gBattleTypeFlags = 0;
sub_80B236C(4, 4);
}
void sub_80B3028(void)
{
- gLinkType = 0x6602;
+ gLinkType = LINKTYPE_0x6602;
gBattleTypeFlags = 0;
sub_80B236C(2, 4);
}
@@ -707,30 +706,30 @@ u8 sub_80B3050(void)
switch (gSpecialVar_0x8004)
{
- case 1:
- gLinkType = 0x2233;
+ case USING_SINGLE_BATTLE:
+ gLinkType = LINKTYPE_SINGLE_BATTLE;
break;
- case 2:
- gLinkType = 0x2244;
+ case USING_DOUBLE_BATTLE:
+ gLinkType = LINKTYPE_DOUBLE_BATTLE;
break;
- case 5:
- gLinkType = 0x2255;
+ case USING_MULTI_BATTLE:
+ gLinkType = LINKTYPE_MULTI_BATTLE;
break;
- case 9:
- if (gSaveBlock2Ptr->frontier.lvlMode == 0)
+ case USING_BATTLE_TOWER:
+ if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_50)
{
- gLinkType = 0x2266;
+ gLinkType = LINKTYPE_BATTLE_TOWER_50;
}
else
{
- gLinkType = 0x2277;
+ gLinkType = LINKTYPE_BATTLE_TOWER_OPEN;
}
break;
- case 3:
- gLinkType = 0x1111;
+ case USING_TRADE_CENTER:
+ gLinkType = LINKTYPE_0x1111;
break;
- case 4:
- gLinkType = 0x3322;
+ case USING_RECORD_CORNER:
+ gLinkType = LINKTYPE_0x3322;
break;
}
@@ -790,21 +789,21 @@ void sub_80B3254(void)
SaveGame();
}
-static void sub_80B3260(int a0)
+static void SetLinkBattleTypeFlags(int linkService)
{
- switch (a0)
+ switch (linkService)
{
- case 1:
+ case USING_SINGLE_BATTLE:
gBattleTypeFlags = BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER;
break;
- case 2:
+ case USING_DOUBLE_BATTLE:
gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER;
break;
- case 5:
+ case USING_MULTI_BATTLE:
ReducePlayerPartyToSelectedMons();
gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI;
break;
- case 9:
+ case USING_BATTLE_TOWER:
gBattleTypeFlags = BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI;
break;
}
@@ -818,7 +817,7 @@ static void sub_80B32B4(u8 taskId)
{
case 0:
FadeScreen(1, 0);
- gLinkType = 0x2211;
+ gLinkType = LINKTYPE_BATTLE;
ClearLinkCallback_2();
task->data[0]++;
break;
@@ -845,7 +844,7 @@ static void sub_80B32B4(u8 taskId)
else
PlayMapChosenOrBattleBGM(MUS_BATTLE20);
- sub_80B3260(gSpecialVar_0x8004);
+ SetLinkBattleTypeFlags(gSpecialVar_0x8004);
CleanupOverworldWindowsAndTilemaps();
gTrainerBattleOpponent_A = 0x800;
SetMainCallback2(CB2_InitBattle);
@@ -864,7 +863,7 @@ static void sub_80B33BC(u8 taskId)
{
case 0:
FadeScreen(1, 0);
- gLinkType = 0x2211;
+ gLinkType = LINKTYPE_BATTLE;
ClearLinkCallback_2();
data[0] = 1;
break;
@@ -910,8 +909,8 @@ static void sub_80B33BC(u8 taskId)
else
PlayMapChosenOrBattleBGM(MUS_BATTLE20);
- gLinkPlayers[0].linkType = 0x2211;
- sub_80B3260(gSpecialVar_0x8004);
+ gLinkPlayers[0].linkType = LINKTYPE_BATTLE;
+ SetLinkBattleTypeFlags(gSpecialVar_0x8004);
CleanupOverworldWindowsAndTilemaps();
gTrainerBattleOpponent_A = 0x800;
SetMainCallback2(CB2_InitBattle);
@@ -973,7 +972,7 @@ void sub_80B360C(void)
SavePlayerBag();
sub_813BF10();
- if (gSpecialVar_0x8004 == 1 || gSpecialVar_0x8004 == 2)
+ if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE)
{
UpdatePlayerLinkBattleRecords(gLocalLinkPlayerId ^ 1);
if (gWirelessCommType)
@@ -1004,7 +1003,10 @@ void sub_80B360C(void)
void CleanupLinkRoomState(void)
{
- if (gSpecialVar_0x8004 == 1 || gSpecialVar_0x8004 == 2 || gSpecialVar_0x8004 == 5 || gSpecialVar_0x8004 == 9)
+ if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE
+ || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE
+ || gSpecialVar_0x8004 == USING_MULTI_BATTLE
+ || gSpecialVar_0x8004 == USING_BATTLE_TOWER)
{
LoadPlayerParty();
SavePlayerBag();
@@ -1084,8 +1086,8 @@ static void sub_80B37FC(u8 taskId)
task->data[0]++;
break;
case 2:
- gUnknown_02032298[0] = 0;
- gUnknown_02032298[1] = 0;
+ gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
+ gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
sub_800AC34();
task->data[0]++;
@@ -1093,7 +1095,7 @@ static void sub_80B37FC(u8 taskId)
case 3:
if (!gReceivedRemoteLinkPlayers)
{
- SetMainCallback2(sub_80773AC);
+ SetMainCallback2(CB2_StartCreateTradeMenu);
DestroyTask(taskId);
}
break;
@@ -1109,7 +1111,7 @@ static void sub_80B3894(u8 taskId)
case 0:
ScriptContext2_Enable();
FadeScreen(1, 0);
- Rfu_set_zero();
+ ClearLinkRfuCallback();
data[0]++;
break;
case 1:
@@ -1117,8 +1119,8 @@ static void sub_80B3894(u8 taskId)
data[0]++;
break;
case 2:
- gUnknown_02032298[0] = 0;
- gUnknown_02032298[1] = 0;
+ gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
+ gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
m4aMPlayAllStop();
sub_800ADF8();
data[0]++;
@@ -1159,7 +1161,7 @@ void nullsub_37(void)
// Note: VAR_0x8005 is set to the ID of the player spot.
void ColosseumPlayerSpotTriggered(void)
{
- gLinkType = 0x2211;
+ gLinkType = LINKTYPE_BATTLE;
if (gWirelessCommType != 0)
{
@@ -1178,7 +1180,7 @@ static void sub_80B39A4(void)
ScriptContext1_Stop();
}
-void sp02A_crash_sound(void)
+void Script_ShowLinkTrainerCard(void)
{
ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
@@ -1300,6 +1302,6 @@ void sub_80B3BC4(void)
{
if (gWirelessCommType == 0)
{
- gLinkType = 0x2288;
+ gLinkType = LINKTYPE_0x2288;
}
}
diff --git a/src/contest.c b/src/contest.c
index 79c1616c2..2ad189058 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "gpu_regs.h"
#include "bg.h"
-#include "alloc.h"
+#include "malloc.h"
#include "constants/items.h"
#include "constants/event_objects.h"
#include "constants/moves.h"
@@ -577,7 +577,7 @@ const struct SpriteTemplate gSpriteTemplate_8587C18 =
{
.tileTag = 0xABE0,
.paletteTag = 0xABE0,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -2799,16 +2799,15 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
}
}
-// GetContestAvailability?
-u8 sub_80DAE0C(struct Pokemon *pkmn)
+u8 GetContestEntryEligibility(struct Pokemon *pkmn)
{
u8 ribbon;
- u8 retVal;
+ u8 eligibility;
if (GetMonData(pkmn, MON_DATA_IS_EGG))
- return 3;
+ return CANT_ENTER_CONTEST_EGG;
if (GetMonData(pkmn, MON_DATA_HP) == 0)
- return 4;
+ return CANT_ENTER_CONTEST_FAINTED;
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
@@ -2827,19 +2826,19 @@ u8 sub_80DAE0C(struct Pokemon *pkmn)
ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON);
break;
default:
- return 0;
+ return CANT_ENTER_CONTEST;
}
// 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;
+ eligibility = CAN_ENTER_CONTEST_HIGH_RANK;
else if (ribbon >= gSpecialVar_ContestRank)
- retVal = 1;
+ eligibility = CAN_ENTER_CONTEST_EQUAL_RANK;
else
- retVal = 0;
- return retVal;
+ eligibility = CANT_ENTER_CONTEST;
+ return eligibility;
}
static void DrawContestantWindowText(void)
diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c
index a0a29f0ad..69332b27f 100644
--- a/src/contest_link_80F57C4.c
+++ b/src/contest_link_80F57C4.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_gfx_sfx_util.h"
#include "bg.h"
@@ -1935,14 +1935,16 @@ static void sub_80F7ED0(int windowId, u8 *str, int arg2)
void sub_80F7F30(void)
{
- u8 result = sub_80DAE0C(&gPlayerParty[gContestMonPartyIndex]);
- if (result)
+ u8 eligibility = GetContestEntryEligibility(&gPlayerParty[gContestMonPartyIndex]);
+
+ // Nonzero eligibility can still be non-eligibile, if mon is fainted or egg
+ if (eligibility)
{
sub_80DAB8C(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
sub_80DB09C(gSpecialVar_ContestCategory);
}
- gSpecialVar_Result = result;
+ gSpecialVar_Result = eligibility;
}
u16 sub_80F7F7C(void)
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 1b95e1ed9..2b36d5e38 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_gfx_sfx_util.h"
#include "bg.h"
diff --git a/src/credits.c b/src/credits.c
index 44fa2002c..323146f1e 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -3,7 +3,7 @@
#include "main.h"
#include "task.h"
#include "bg.h"
-#include "alloc.h"
+#include "malloc.h"
#include "window.h"
#include "text.h"
#include "menu.h"
@@ -128,16 +128,17 @@ enum
TDE_TASK_A_ID = 2,
};
-struct Unk201C000
-{
- u16 unk0[71];
- u16 unk8E;
- u16 unk90;
- u16 unk92;
- u16 unk94;
- u16 unk96[NATIONAL_DEX_COUNT];
- u16 unk39A;
- u16 unk39C[7];
+#define NUM_MON_SLIDES 71
+struct CreditsData
+{
+ u16 monToShow[NUM_MON_SLIDES]; // List of Pokemon species ids that will show during the credits
+ u16 imgCounter; //how many mon images have been shown
+ u16 nextImgPos; //if the next image spawns left/center/right
+ u16 currShownMon; //index into monToShow
+ u16 numMonToShow; //number of pokemon to show, always NUM_MON_SLIDES after determine function
+ u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught pokemon
+ u16 numCaughtMon; //count of filled spaces in caughtMonIds
+ u16 unk39C[7]; // unused padding?
};
struct CreditsEntry
@@ -151,7 +152,7 @@ static EWRAM_DATA s16 gUnknown_0203BCE0 = 0;
static EWRAM_DATA u16 gUnknown_0203BCE2 = 0; // TASK A
EWRAM_DATA bool8 gHasHallOfFameRecords = 0;
static EWRAM_DATA u8 gUnknown_0203BCE5 = 0;
-static EWRAM_DATA struct Unk201C000 *gUnknown_0203BCE8 = {0};
+static EWRAM_DATA struct CreditsData *sCreditsData = {0};
static const u16 gUnknown_085E56F0[][16] =
{
@@ -959,7 +960,7 @@ static const struct WindowTemplate sWindowTemplates[] =
},
DUMMY_WIN_TEMPLATE,
};
-static const u8 gUnknown_085E6F7C[][2] =
+static const u8 sMonSpritePos[][2] =
{
{104, 36},
{120, 36},
@@ -1127,8 +1128,8 @@ static void LoadTheEndScreen(u16, u16, u16);
static void sub_8176E40(u16 arg0, u16 palette);
static void sub_8176EE8(struct Sprite *sprite);
static void sub_8176F90(struct Sprite *sprite);
-static u8 sub_8177224(u16 species, s16 x, s16 y, u16 position);
-static void sub_8177388(void);
+static u8 MakeMonSprite(u16 species, s16 x, s16 y, u16 position);
+static void DeterminePokemonToShow(void);
static void CreditsVBlankCallback(void)
{
@@ -1241,13 +1242,13 @@ void CB2_StartCreditsSequence(void)
m4aSongNumStart(MUS_THANKFOR);
SetMainCallback2(CB2_RunCreditsSequence);
gUnknown_0203BCE5 = 0;
- gUnknown_0203BCE8 = AllocZeroed(sizeof(struct Unk201C000));
+ sCreditsData = AllocZeroed(sizeof(struct CreditsData));
- sub_8177388();
+ DeterminePokemonToShow();
- gUnknown_0203BCE8->unk8E = 0;
- gUnknown_0203BCE8->unk90 = 0;
- gUnknown_0203BCE8->unk92 = 0;
+ sCreditsData->imgCounter = 0;
+ sCreditsData->nextImgPos = 0;
+ sCreditsData->currShownMon = 0;
gUnknown_0203BCE2 = taskIdA;
}
@@ -1604,7 +1605,7 @@ static void sub_8175DA0(u8 taskIdB)
gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_4] = 1;
DestroyTask(taskIdB);
sub_81755A4();
- FREE_AND_SET_NULL(gUnknown_0203BCE8);
+ FREE_AND_SET_NULL(sCreditsData);
return;
}
}
@@ -1683,29 +1684,29 @@ static void sub_81760FC(u8 taskIdD)
case 0:
break;
case 1:
- if (gUnknown_0203BCE8->unk90 == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0)
+ if (sCreditsData->nextImgPos == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0)
break;
gTasks[taskIdD].data[TDD_STATE]++;
break;
case 2:
- if (gUnknown_0203BCE8->unk8E == 71 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != Task_ProgressCreditTasks)
+ if (sCreditsData->imgCounter == NUM_MON_SLIDES || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != Task_ProgressCreditTasks)
break;
- r2 = sub_8177224(gUnknown_0203BCE8->unk0[gUnknown_0203BCE8->unk92], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][0], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][1], gUnknown_0203BCE8->unk90);
- if (gUnknown_0203BCE8->unk92 < gUnknown_0203BCE8->unk94 - 1)
+ r2 = MakeMonSprite(sCreditsData->monToShow[sCreditsData->currShownMon], sMonSpritePos[sCreditsData->nextImgPos][0], sMonSpritePos[sCreditsData->nextImgPos][1], sCreditsData->nextImgPos);
+ if (sCreditsData->currShownMon < sCreditsData->numMonToShow - 1)
{
- gUnknown_0203BCE8->unk92++;
+ sCreditsData->currShownMon++;
gSprites[r2].data[3] = 50;
}
else
{
- gUnknown_0203BCE8->unk92 = 0;
+ sCreditsData->currShownMon = 0;
gSprites[r2].data[3] = 512;
}
- gUnknown_0203BCE8->unk8E++;
- if (gUnknown_0203BCE8->unk90 == 2)
- gUnknown_0203BCE8->unk90 = 0;
+ sCreditsData->imgCounter++;
+ if (sCreditsData->nextImgPos == 2)
+ sCreditsData->nextImgPos = 0;
else
- gUnknown_0203BCE8->unk90++;
+ sCreditsData->nextImgPos++;
gTasks[taskIdD].data[TDD_3] = 50;
gTasks[taskIdD].data[TDD_STATE]++;
break;
@@ -2256,7 +2257,7 @@ static void sub_8177050(struct Sprite *sprite)
}
}
-static u8 sub_8177224(u16 nationalDexNum, s16 x, s16 y, u16 position)
+static u8 MakeMonSprite(u16 nationalDexNum, s16 x, s16 y, u16 position)
{
u8 spriteId;
u8 spriteId2;
@@ -2292,73 +2293,86 @@ static void sub_81772B8(struct Sprite *sprite)
sprite->pos1.y = gSprites[sprite->data[0]].pos1.y;
}
-static void sub_8177388(void)
+static void DeterminePokemonToShow(void)
{
u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_STARTER_MON)));
u16 page;
u16 dexNum;
u16 j;
-
+
+ // Go through the Pokedex, and anything that has gotten caught we put into our massive array.
+ // This basically packs all of the caught pokemon into the front of the array
for (dexNum = 1, j = 0; dexNum < NATIONAL_DEX_COUNT; dexNum++)
{
if (GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT))
{
- gUnknown_0203BCE8->unk96[j] = dexNum;
+ sCreditsData->caughtMonIds[j] = dexNum;
j++;
}
}
+ // Fill the rest of the array with zeroes
for (dexNum = j; dexNum < NATIONAL_DEX_COUNT; dexNum++)
- gUnknown_0203BCE8->unk96[dexNum] = 0;
+ sCreditsData->caughtMonIds[dexNum] = 0;
- gUnknown_0203BCE8->unk39A = j;
- if (gUnknown_0203BCE8->unk39A < 71)
- gUnknown_0203BCE8->unk94 = j;
+ // Cap the number of pokemon we care about to NUM_MON_SLIDES, the max we show in the credits scene (-1 for the starter)
+ sCreditsData->numCaughtMon = j;
+ if (sCreditsData->numCaughtMon < NUM_MON_SLIDES)
+ sCreditsData->numMonToShow = j;
else
- gUnknown_0203BCE8->unk94 = 71;
+ sCreditsData->numMonToShow = NUM_MON_SLIDES;
+ // Loop through our list of caught pokemon and select randomly from it to fill the images to show
j = 0;
do
{
- page = Random() % gUnknown_0203BCE8->unk39A;
- gUnknown_0203BCE8->unk0[j] = gUnknown_0203BCE8->unk96[page];
-
+ // Select a random mon, insert into array
+ page = Random() % sCreditsData->numCaughtMon;
+ sCreditsData->monToShow[j] = sCreditsData->caughtMonIds[page];
+
+ // Remove the select mon from the array, and condense array entries
j++;
- gUnknown_0203BCE8->unk96[page] = 0;
- gUnknown_0203BCE8->unk39A--;
- if (page != gUnknown_0203BCE8->unk39A)
+ sCreditsData->caughtMonIds[page] = 0;
+ sCreditsData->numCaughtMon--;
+ if (page != sCreditsData->numCaughtMon)
{
- gUnknown_0203BCE8->unk96[page] = gUnknown_0203BCE8->unk96[gUnknown_0203BCE8->unk39A];
- gUnknown_0203BCE8->unk96[gUnknown_0203BCE8->unk39A] = 0;
+ // Instead of looping through and moving everything down, just take from the end. Order doesn't matter after all.
+ sCreditsData->caughtMonIds[page] = sCreditsData->caughtMonIds[sCreditsData->numCaughtMon];
+ sCreditsData->caughtMonIds[sCreditsData->numCaughtMon] = 0;
}
}
- while (gUnknown_0203BCE8->unk39A != 0 && j < 71);
+ while (sCreditsData->numCaughtMon != 0 && j < NUM_MON_SLIDES);
- if (gUnknown_0203BCE8->unk94 < 71)
+ // If we don't have enough pokemon in the dex to fill everything, copy the selected mon into the end of the array, so it loops
+ if (sCreditsData->numMonToShow < NUM_MON_SLIDES)
{
- for (j = gUnknown_0203BCE8->unk94, page = 0; j < 71; j++)
+ for (j = sCreditsData->numMonToShow, page = 0; j < NUM_MON_SLIDES; j++)
{
- gUnknown_0203BCE8->unk0[j] = gUnknown_0203BCE8->unk0[page];
+ sCreditsData->monToShow[j] = sCreditsData->monToShow[page];
page++;
- if (page == gUnknown_0203BCE8->unk94)
+ if (page == sCreditsData->numMonToShow)
page = 0;
}
- gUnknown_0203BCE8->unk0[70] = starter;
+ // Ensure the last pokemon is our starter
+ sCreditsData->monToShow[NUM_MON_SLIDES-1] = starter;
}
else
{
- for (dexNum = 0; gUnknown_0203BCE8->unk0[dexNum] != starter && dexNum < 71; dexNum++);
+ // Check to see if our starter has already appeared in this list, break if it has
+ for (dexNum = 0; sCreditsData->monToShow[dexNum] != starter && dexNum < NUM_MON_SLIDES; dexNum++);
- if (dexNum < gUnknown_0203BCE8->unk94 - 1)
+ // If it has, swap it with the last pokemon, to ensure our starter is the last image
+ if (dexNum < sCreditsData->numMonToShow - 1)
{
- gUnknown_0203BCE8->unk0[dexNum] = gUnknown_0203BCE8->unk0[70];
- gUnknown_0203BCE8->unk0[70] = starter;
+ sCreditsData->monToShow[dexNum] = sCreditsData->monToShow[NUM_MON_SLIDES-1];
+ sCreditsData->monToShow[NUM_MON_SLIDES-1] = starter;
}
else
{
- gUnknown_0203BCE8->unk0[70] = starter;
+ // Ensure the last pokemon is our starter
+ sCreditsData->monToShow[NUM_MON_SLIDES-1] = starter;
}
}
- gUnknown_0203BCE8->unk94 = 71;
+ sCreditsData->numMonToShow = NUM_MON_SLIDES;
}
diff --git a/src/dark.c b/src/dark.c
index 482c09c04..63a893b67 100644
--- a/src/dark.c
+++ b/src/dark.c
@@ -29,7 +29,7 @@ const struct SpriteTemplate gUnknown_08596FC8 =
{
.tileTag = ANIM_TAG_TIED_BAG,
.paletteTag = ANIM_TAG_TIED_BAG,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -100,7 +100,7 @@ const struct SpriteTemplate gUnknown_08597080 =
{
.tileTag = ANIM_TAG_SHARP_TEETH,
.paletteTag = ANIM_TAG_SHARP_TEETH,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597060,
@@ -111,7 +111,7 @@ const struct SpriteTemplate gUnknown_08597098 =
{
.tileTag = ANIM_TAG_CLAMP,
.paletteTag = ANIM_TAG_CLAMP,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597060,
@@ -142,7 +142,7 @@ const struct SpriteTemplate gUnknown_085970E8 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085970E0,
@@ -179,7 +179,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8597138 =
{
.tileTag = ANIM_TAG_CLAW_SLASH,
.paletteTag = ANIM_TAG_CLAW_SLASH,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08597130,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/data.c b/src/data.c
index 7aebd63ed..8d6640223 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "data.h"
#include "graphics.h"
diff --git a/src/data/field_event_obj/event_object_graphics_info_pointers.h b/src/data/field_event_obj/event_object_graphics_info_pointers.h
index 0b8aa79b2..661539d57 100755
--- a/src/data/field_event_obj/event_object_graphics_info_pointers.h
+++ b/src/data/field_event_obj/event_object_graphics_info_pointers.h
@@ -489,11 +489,11 @@ const struct EventObjectGraphicsInfo *const gEventObjectGraphicsInfoPointers[] =
};
const struct EventObjectGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[] = {
- &gEventObjectGraphicsInfo_Bard,
- &gEventObjectGraphicsInfo_Hipster,
- &gEventObjectGraphicsInfo_Trader,
- &gEventObjectGraphicsInfo_Storyteller,
- &gEventObjectGraphicsInfo_Giddy,
- &gEventObjectGraphicsInfo_UnusedMauvilleOldMan1,
- &gEventObjectGraphicsInfo_UnusedMauvilleOldMan2,
+ [MAUVILLE_MAN_BARD] = &gEventObjectGraphicsInfo_Bard,
+ [MAUVILLE_MAN_HIPSTER] = &gEventObjectGraphicsInfo_Hipster,
+ [MAUVILLE_MAN_TRADER] = &gEventObjectGraphicsInfo_Trader,
+ [MAUVILLE_MAN_STORYTELLER] = &gEventObjectGraphicsInfo_Storyteller,
+ [MAUVILLE_MAN_GIDDY] = &gEventObjectGraphicsInfo_Giddy,
+ [MAUVILLE_MAN_UNUSED1] = &gEventObjectGraphicsInfo_UnusedMauvilleOldMan1,
+ [MAUVILLE_MAN_UNUSED2] = &gEventObjectGraphicsInfo_UnusedMauvilleOldMan2,
};
diff --git a/src/data/field_event_obj/movement_action_func_tables.h b/src/data/field_event_obj/movement_action_func_tables.h
index 712988f5e..8e136b58b 100755
--- a/src/data/field_event_obj/movement_action_func_tables.h
+++ b/src/data/field_event_obj/movement_action_func_tables.h
@@ -170,8 +170,8 @@ u8 MovementAction_SetFixedPriority_Step0(struct EventObject *, struct Sprite *);
u8 MovementAction_ClearFixedPriority_Step0(struct EventObject *, struct Sprite *);
u8 MovementAction_InitAffineAnim_Step0(struct EventObject *, struct Sprite *);
u8 MovementAction_ClearAffineAnim_Step0(struct EventObject *, struct Sprite *);
-u8 MovementAction_Unknown1_Step0(struct EventObject *, struct Sprite *);
-u8 MovementAction_Unknown2_Step0(struct EventObject *, struct Sprite *);
+u8 MovementAction_HideReflection_Step0(struct EventObject *, struct Sprite *);
+u8 MovementAction_ShowReflection_Step0(struct EventObject *, struct Sprite *);
u8 MovementAction_WalkDownStartAffine_Step0(struct EventObject *, struct Sprite *);
u8 MovementAction_WalkDownStartAffine_Step1(struct EventObject *, struct Sprite *);
u8 MovementAction_WalkDownAffine_Step0(struct EventObject *, struct Sprite *);
@@ -358,8 +358,8 @@ u8 (*const gMovementActionFuncs_SetFixedPriority[])(struct EventObject *, struct
u8 (*const gMovementActionFuncs_ClearFixedPriority[])(struct EventObject *, struct Sprite *);
u8 (*const gMovementActionFuncs_InitAffineAnim[])(struct EventObject *, struct Sprite *);
u8 (*const gMovementActionFuncs_ClearAffineAnim[])(struct EventObject *, struct Sprite *);
-u8 (*const gMovementActionFuncs_Unknown1[])(struct EventObject *, struct Sprite *);
-u8 (*const gMovementActionFuncs_Unknown2[])(struct EventObject *, struct Sprite *);
+u8 (*const gMovementActionFuncs_HideReflection[])(struct EventObject *, struct Sprite *);
+u8 (*const gMovementActionFuncs_ShowReflection[])(struct EventObject *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkDownStartAffine[])(struct EventObject *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkDownAffine[])(struct EventObject *, struct Sprite *);
u8 (*const gMovementActionFuncs_AcroWheelieFaceDown[])(struct EventObject *, struct Sprite *);
@@ -518,8 +518,8 @@ u8 (*const *const gMovementActionFuncs[])(struct EventObject *, struct Sprite *)
[MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY] = gMovementActionFuncs_ClearFixedPriority,
[MOVEMENT_ACTION_INIT_AFFINE_ANIM] = gMovementActionFuncs_InitAffineAnim,
[MOVEMENT_ACTION_CLEAR_AFFINE_ANIM] = gMovementActionFuncs_ClearAffineAnim,
- [MOVEMENT_ACTION_UNKNOWN1] = gMovementActionFuncs_Unknown1,
- [MOVEMENT_ACTION_UNKNOWN2] = gMovementActionFuncs_Unknown2,
+ [MOVEMENT_ACTION_HIDE_REFLECTION] = gMovementActionFuncs_HideReflection,
+ [MOVEMENT_ACTION_SHOW_REFLECTION] = gMovementActionFuncs_ShowReflection,
[MOVEMENT_ACTION_WALK_DOWN_START_AFFINE] = gMovementActionFuncs_WalkDownStartAffine,
[MOVEMENT_ACTION_WALK_DOWN_AFFINE] = gMovementActionFuncs_WalkDownAffine,
[MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN] = gMovementActionFuncs_AcroWheelieFaceDown,
@@ -1197,13 +1197,13 @@ u8 (*const gMovementActionFuncs_ClearAffineAnim[])(struct EventObject *, struct
MovementAction_Finish,
};
-u8 (*const gMovementActionFuncs_Unknown1[])(struct EventObject *, struct Sprite *) = {
- MovementAction_Unknown1_Step0,
+u8 (*const gMovementActionFuncs_HideReflection[])(struct EventObject *, struct Sprite *) = {
+ MovementAction_HideReflection_Step0,
MovementAction_Finish,
};
-u8 (*const gMovementActionFuncs_Unknown2[])(struct EventObject *, struct Sprite *) = {
- MovementAction_Unknown2_Step0,
+u8 (*const gMovementActionFuncs_ShowReflection[])(struct EventObject *, struct Sprite *) = {
+ MovementAction_ShowReflection_Step0,
MovementAction_Finish,
};
diff --git a/src/data/party_menu.h b/src/data/party_menu.h
new file mode 100644
index 000000000..6af8ee2a6
--- /dev/null
+++ b/src/data/party_menu.h
@@ -0,0 +1,1255 @@
+static const struct BgTemplate sPartyMenuBgTemplates[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+};
+
+enum
+{
+ PARTY_BOX_LEFT_COLUMN,
+ PARTY_BOX_RIGHT_COLUMN
+};
+
+static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] =
+{
+ [PARTY_BOX_LEFT_COLUMN] =
+ {
+ BlitBitmapToPartyWindow_LeftColumn,
+ {
+ //The below are the x, y, width, and height for each of the following info
+ 24, 11, 40, 13, // Nickname
+ 32, 20, 32, 8, // Level
+ 64, 20, 8, 8, // Gender
+ 38, 37, 24, 8, // HP
+ 53, 37, 24, 8, // Max HP
+ 24, 35, 48, 3 // HP bar
+ },
+ 12, 34, 64, 16 // Description text (e.g. NO USE)
+ },
+ [PARTY_BOX_RIGHT_COLUMN] =
+ {
+ BlitBitmapToPartyWindow_RightColumn,
+ {
+ // See above comment
+ 22, 3, 40, 13, // Nickname
+ 30, 12, 32, 8, // Level
+ 62, 12, 8, 8, // Gender
+ 102, 12, 24, 8, // HP
+ 117, 12, 24, 8, // Max HP
+ 88, 10, 48, 3 // HP bar
+ },
+ 77, 4, 64, 16 // Description text
+ },
+};
+
+
+// Each layout array has an array for each of the 6 party slots
+// The array for each slot has the sprite coords of its various sprites in the following order
+// Pokemon icon (x, y), held item (x, y), status condition (x, y), menu pokeball (x, y)
+static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] =
+{
+ [PARTY_LAYOUT_SINGLE] =
+ {
+ { 16, 40, 20, 50, 50, 52, 16, 34},
+ {104, 18, 108, 28, 136, 27, 102, 25},
+ {104, 42, 108, 52, 136, 51, 102, 49},
+ {104, 66, 108, 76, 136, 75, 102, 73},
+ {104, 90, 108, 100, 136, 99, 102, 97},
+ {104, 114, 108, 124, 136, 123, 102, 121},
+ },
+ [PARTY_LAYOUT_DOUBLE] =
+ {
+ {16, 24, 20, 34, 50, 36, 16, 18},
+ {16, 80, 20, 90, 50, 92, 16, 74},
+ {104, 18, 108, 28, 136, 27, 102, 25},
+ {104, 50, 108, 60, 136, 59, 102, 57},
+ {104, 82, 108, 92, 136, 91, 102, 89},
+ {104, 114, 108, 124, 136, 123, 102, 121},
+ },
+ [PARTY_LAYOUT_MULTI] =
+ {
+ {16, 24, 20, 34, 50, 36, 16, 18},
+ {16, 80, 20, 90, 50, 92, 16, 74},
+ {104, 26, 106, 36, 136, 35, 102, 33},
+ {104, 50, 106, 60, 136, 59, 102, 57},
+ {104, 82, 106, 92, 136, 91, 102, 89},
+ {104, 106, 106, 116, 136, 115, 102, 113},
+ },
+ [PARTY_LAYOUT_MULTI_SHOWCASE] =
+ {
+ {16, 32, 20, 42, 50, 44, 16, 26},
+ {104, 34, 106, 44, 136, 43, 102, 41},
+ {104, 58, 106, 68, 136, 67, 102, 65},
+ {16, 104, 20, 114, 50, 116, 16, 98},
+ {104, 106, 106, 116, 136, 115, 102, 113},
+ {104, 130, 106, 140, 136, 139, 102, 137},
+ },
+};
+
+// Used only when both Cancel and Confirm are present
+static const u32 sConfirmButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_confirm_button.bin");
+static const u32 sCancelButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_cancel_button.bin");
+
+// Text colors for BG, FG, and Shadow in that order
+static const u8 sFontColorTable[][3] =
+{
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_DARK_GREY}, // Default
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_GREEN}, // Unused
+ {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_2, TEXT_DYNAMIC_COLOR_3}, // Gender symbol
+ {TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}, // Selection actions
+ {TEXT_COLOR_WHITE, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_BLUE}, // Field moves
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}, // Unused
+};
+
+static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 3,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x63,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 1,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 4,
+ .baseBlock = 0xA9,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 4,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 5,
+ .baseBlock = 0xDF,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 7,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 6,
+ .baseBlock = 0x115,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 10,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 7,
+ .baseBlock = 0x14B,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 13,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 8,
+ .baseBlock = 0x181,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 28,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x1DF,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x63,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 8,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 4,
+ .baseBlock = 0xA9,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 1,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 5,
+ .baseBlock = 0xEF,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 5,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 6,
+ .baseBlock = 0x125,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 9,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 7,
+ .baseBlock = 0x15B,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 13,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 8,
+ .baseBlock = 0x191,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 28,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x1DF,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x63,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 8,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 4,
+ .baseBlock = 0xA9,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 2,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 5,
+ .baseBlock = 0xEF,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 5,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 6,
+ .baseBlock = 0x125,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 9,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 7,
+ .baseBlock = 0x15B,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 12,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 8,
+ .baseBlock = 0x191,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 28,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x1DF,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 2,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 3,
+ .baseBlock = 0x63,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 3,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 5,
+ .baseBlock = 0xA9,
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 12,
+ .tilemapTop = 6,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 6,
+ .baseBlock = 0xDF,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 11,
+ .width = 10,
+ .height = 7,
+ .paletteNum = 4,
+ .baseBlock = 0x115,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 12,
+ .tilemapTop = 12,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 7,
+ .baseBlock = 0x16B,
+ },
+ {
+ .bg = 2,
+ .tilemapLeft = 12,
+ .tilemapTop = 15,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 8,
+ .baseBlock = 0x1A1,
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sCancelButtonWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 17,
+ .width = 6,
+ .height = 2,
+ .paletteNum = 3,
+ .baseBlock = 0x1C7,
+};
+
+static const struct WindowTemplate sMultiCancelButtonWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 18,
+ .width = 6,
+ .height = 2,
+ .paletteNum = 3,
+ .baseBlock = 0x1C7,
+};
+
+static const struct WindowTemplate sConfirmButtonWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 24,
+ .tilemapTop = 16,
+ .width = 6,
+ .height = 2,
+ .paletteNum = 3,
+ .baseBlock = 0x1D3,
+};
+
+static const struct WindowTemplate sDefaultPartyMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 21,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x24F,
+};
+
+static const struct WindowTemplate sDoWhatWithMonMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 16,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x279,
+};
+
+static const struct WindowTemplate sDoWhatWithItemMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 20,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x299,
+};
+
+static const struct WindowTemplate sDoWhatWithMailMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 18,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x299,
+};
+
+static const struct WindowTemplate sWhichMoveMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 17,
+ .width = 16,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 0x299,
+};
+
+static const struct WindowTemplate sAlreadyHoldingOneMsgWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 1,
+ .tilemapTop = 15,
+ .width = 20,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 0x299,
+};
+
+static const struct WindowTemplate sItemGiveTakeWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 23,
+ .tilemapTop = 13,
+ .width = 6,
+ .height = 6,
+ .paletteNum = 14,
+ .baseBlock = 0x39D,
+};
+
+static const struct WindowTemplate sMailReadTakeWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 21,
+ .tilemapTop = 13,
+ .width = 8,
+ .height = 6,
+ .paletteNum = 14,
+ .baseBlock = 0x39D,
+};
+
+static const struct WindowTemplate sMoveSelectWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 19,
+ .tilemapTop = 11,
+ .width = 10,
+ .height = 8,
+ .paletteNum = 14,
+ .baseBlock = 0x2E9,
+};
+
+static const struct WindowTemplate sPartyMenuYesNoWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 21,
+ .tilemapTop = 9,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x2E9,
+};
+
+static const struct WindowTemplate sLevelUpStatsWindowTemplate =
+{
+ .bg = 2,
+ .tilemapLeft = 19,
+ .tilemapTop = 1,
+ .width = 10,
+ .height = 11,
+ .paletteNum = 14,
+ .baseBlock = 0x2E9,
+};
+
+static const struct WindowTemplate sUnusedWindowTemplate_08615978 =
+{
+ .bg = 2,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 27,
+ .height = 4,
+ .paletteNum = 14,
+ .baseBlock = 0x1DF,
+};
+
+static const struct WindowTemplate sUnusedWindowTemplate_08615980 =
+{
+ .bg = 2,
+ .tilemapLeft = 0,
+ .tilemapTop = 13,
+ .width = 18,
+ .height = 3,
+ .paletteNum = 12,
+ .baseBlock = 0x39D,
+};
+
+// Tile nums
+static const u8 sMainSlotTileNums[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 40, 59, 60, 58, 58, 58, 58, 58, 58, 61,
+ 15, 16, 16, 16, 16, 16, 16, 16, 16, 17,
+ 46, 47, 47, 47, 47, 47, 47, 47, 47, 48};
+
+static const u8 sMainSlotTileNums_Egg[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
+ 40, 41, 41, 41, 41, 41, 41, 41, 41, 42,
+ 15, 16, 16, 16, 16, 16, 16, 16, 16, 17,
+ 46, 47, 47, 47, 47, 47, 47, 47, 47, 48};
+
+static const u8 sOtherSlotsTileNums[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45,
+ 49, 33, 33, 33, 33, 33, 33, 33, 33, 52, 53, 51, 51, 51, 51, 51, 51, 54,
+ 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57};
+
+static const u8 sOtherSlotsTileNums_Egg[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45,
+ 49, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 50,
+ 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57};
+
+static const u8 sEmptySlotTileNums[] = {21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,
+ 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
+ 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39};
+
+// Palette offsets
+static const u8 sGenderPalOffsets[] = {11, 12};
+static const u8 sHPBarPalOffsets[] = {9, 10};
+static const u8 sPartyBoxPalOffsets1[] = {4, 5, 6};
+static const u8 sPartyBoxPalOffsets2[] = {1, 7, 8};
+static const u8 sPartyBoxNoMonPalOffsets[] = {1, 11, 12};
+
+// Palette ids
+static const u8 sGenderMalePalIds[] = {59, 60};
+static const u8 sGenderFemalePalIds[] = {75, 76};
+static const u8 sHPBarGreenPalIds[] = {57, 58};
+static const u8 sHPBarYellowPalIds[] = {73, 74};
+static const u8 sHPBarRedPalIds[] = {89, 90};
+static const u8 sPartyBoxEmptySlotPalIds1[] = {52, 53, 54};
+static const u8 sPartyBoxMultiPalIds1[] = {68, 69, 70};
+static const u8 sPartyBoxFaintedPalIds1[] = {84, 85, 86};
+static const u8 sPartyBoxCurrSelectionPalIds1[] = {116, 117, 118};
+static const u8 sPartyBoxCurrSelectionMultiPalIds[] = {132, 133, 134};
+static const u8 sPartyBoxCurrSelectionFaintedPalIds[] = {148, 149, 150};
+static const u8 sPartyBoxSelectedForActionPalIds1[] = {100, 101, 102};
+static const u8 sPartyBoxEmptySlotPalIds2[] = {49, 55, 56};
+static const u8 sPartyBoxMultiPalIds2[] = {65, 71, 72};
+static const u8 sPartyBoxFaintedPalIds2[] = {81, 87, 88};
+static const u8 sPartyBoxCurrSelectionPalIds2[] = {97, 103, 104};
+static const u8 sPartyBoxSelectedForActionPalIds2[] = {161, 167, 168};
+static const u8 sPartyBoxNoMonPalIds[] = {17, 27, 28};
+
+static const u8 *const sActionStringTable[] =
+{
+ [PARTY_MSG_CHOOSE_MON] = gText_ChoosePokemon,
+ [PARTY_MSG_CHOOSE_MON_OR_CANCEL] = gText_ChoosePokemonCancel,
+ [PARTY_MSG_CHOOSE_MON_AND_CONFIRM] = gText_ChoosePokemonConfirm,
+ [PARTY_MSG_MOVE_TO_WHERE] = gText_MoveToWhere,
+ [PARTY_MSG_TEACH_WHICH_MON] = gText_TeachWhichPokemon,
+ [PARTY_MSG_USE_ON_WHICH_MON] = gText_UseOnWhichPokemon,
+ [PARTY_MSG_GIVE_TO_WHICH_MON] = gText_GiveToWhichPokemon,
+ [PARTY_MSG_NOTHING_TO_CUT] = gText_NothingToCut,
+ [PARTY_MSG_CANT_SURF_HERE] = gText_CantSurfHere,
+ [PARTY_MSG_ALREADY_SURFING] = gText_AlreadySurfing,
+ [PARTY_MSG_CURRENT_TOO_FAST] = gText_CurrentIsTooFast,
+ [PARTY_MSG_ENJOY_CYCLING] = gText_EnjoyCycling,
+ [PARTY_MSG_ALREADY_IN_USE] = gText_InUseAlready_PM,
+ [PARTY_MSG_CANT_USE_HERE] = gText_CantUseHere,
+ [PARTY_MSG_NO_MON_FOR_BATTLE] = gText_NoPokemonForBattle,
+ [PARTY_MSG_CHOOSE_MON_2] = gText_ChoosePokemon2,
+ [PARTY_MSG_NOT_ENOUGH_HP] = gText_NotEnoughHp,
+ [PARTY_MSG_X_MONS_ARE_NEEDED] = gText_PokemonAreNeeded,
+ [PARTY_MSG_MONS_CANT_BE_SAME] = gText_PokemonCantBeSame,
+ [PARTY_MSG_NO_SAME_HOLD_ITEMS] = gText_NoIdenticalHoldItems,
+ [PARTY_MSG_UNUSED] = gText_EmptyString2,
+ [PARTY_MSG_DO_WHAT_WITH_MON] = gText_DoWhatWithPokemon,
+ [PARTY_MSG_RESTORE_WHICH_MOVE] = gText_RestoreWhichMove,
+ [PARTY_MSG_BOOST_PP_WHICH_MOVE] = gText_BoostPp,
+ [PARTY_MSG_DO_WHAT_WITH_ITEM] = gText_DoWhatWithItem,
+ [PARTY_MSG_DO_WHAT_WITH_MAIL] = gText_DoWhatWithMail,
+ [PARTY_MSG_ALREADY_HOLDING_ONE] = gText_AlreadyHoldingOne,
+};
+
+static const u8 *const sDescriptionStringTable[] =
+{
+ [PARTYBOX_DESC_NO_USE] = gText_NoUse,
+ [PARTYBOX_DESC_ABLE_3] = gText_Able,
+ [PARTYBOX_DESC_FIRST] = gText_First_PM,
+ [PARTYBOX_DESC_SECOND] = gText_Second_PM,
+ [PARTYBOX_DESC_THIRD] = gText_Third_PM,
+ [PARTYBOX_DESC_FOURTH] = gText_Fourth,
+ [PARTYBOX_DESC_ABLE] = gText_Able2,
+ [PARTYBOX_DESC_NOT_ABLE] = gText_NotAble,
+ [PARTYBOX_DESC_ABLE_2] = gText_Able3,
+ [PARTYBOX_DESC_NOT_ABLE_2] = gText_NotAble2,
+ [PARTYBOX_DESC_LEARNED] = gText_Learned,
+ [PARTYBOX_DESC_HAVE] = gText_Have,
+ [PARTYBOX_DESC_DONT_HAVE] = gText_DontHave,
+};
+
+static const u16 sUnused_08615B94[] =
+{
+ 0x0108, 0x0151, 0x0160, 0x015b, 0x002e, 0x005c, 0x0102, 0x0153, 0x014b, 0x00ed, 0x00f1, 0x010d, 0x003a, 0x003b, 0x003f, 0x0071,
+ 0x00b6, 0x00f0, 0x00ca, 0x00db, 0x00da, 0x004c, 0x00e7, 0x0055, 0x0057, 0x0059, 0x00d8, 0x005b, 0x005e, 0x00f7, 0x0118, 0x0068,
+ 0x0073, 0x015f, 0x0035, 0x00bc, 0x00c9, 0x007e, 0x013d, 0x014c, 0x0103, 0x0107, 0x0122, 0x009c, 0x00d5, 0x00a8, 0x00d3, 0x011d,
+ 0x0121, 0x013b, 0x000f, 0x0013, 0x0039, 0x0046, 0x0094, 0x00f9, 0x007f, 0x0123,
+};
+
+enum
+{
+ MENU_SUMMARY,
+ MENU_SWITCH,
+ MENU_CANCEL1,
+ MENU_ITEM,
+ MENU_GIVE,
+ MENU_TAKE_ITEM,
+ MENU_MAIL,
+ MENU_TAKE_MAIL,
+ MENU_READ,
+ MENU_CANCEL2,
+ MENU_SHIFT,
+ MENU_SEND_OUT,
+ MENU_ENTER,
+ MENU_NO_ENTRY,
+ MENU_STORE,
+ MENU_REGISTER,
+ MENU_TRADE1,
+ MENU_TRADE2,
+ MENU_TOSS,
+ MENU_FIELD_MOVES,
+};
+
+enum
+{
+ FIELD_MOVE_CUT,
+ FIELD_MOVE_FLASH,
+ FIELD_MOVE_ROCK_SMASH,
+ FIELD_MOVE_STRENGTH,
+ FIELD_MOVE_SURF,
+ FIELD_MOVE_FLY,
+ FIELD_MOVE_DIVE,
+ FIELD_MOVE_WATERFALL,
+ FIELD_MOVE_TELEPORT,
+ FIELD_MOVE_DIG,
+ FIELD_MOVE_SECRET_POWER,
+ FIELD_MOVE_MILK_DRINK,
+ FIELD_MOVE_SOFT_BOILED,
+ FIELD_MOVE_SWEET_SCENT,
+};
+
+// What a weird choice of table termination;
+#define FIELD_MOVE_TERMINATOR MOVE_SWORDS_DANCE
+
+struct
+{
+ const u8 *text;
+ TaskFunc func;
+} static const sCursorOptions[] =
+{
+ [MENU_SUMMARY] = {gText_Summary5, CursorCb_Summary},
+ [MENU_SWITCH] = {gText_Switch2, CursorCb_Switch},
+ [MENU_CANCEL1] = {gText_Cancel2, CursorCb_Cancel1},
+ [MENU_ITEM] = {gText_Item, CursorCb_Item},
+ [MENU_GIVE] = {gMenuText_Give, CursorCb_Give},
+ [MENU_TAKE_ITEM] = {gText_Take, CursorCb_TakeItem},
+ [MENU_MAIL] = {gText_Mail, CursorCb_Mail},
+ [MENU_TAKE_MAIL] = {gText_Take2, CursorCb_TakeMail},
+ [MENU_READ] = {gText_Read2, CursorCb_Read},
+ [MENU_CANCEL2] = {gText_Cancel2, CursorCb_Cancel2},
+ [MENU_SHIFT] = {gText_Shift, CursorCb_SendMon},
+ [MENU_SEND_OUT] = {gText_SendOut, CursorCb_SendMon},
+ [MENU_ENTER] = {gText_Enter, CursorCb_Enter},
+ [MENU_NO_ENTRY] = {gText_NoEntry, CursorCb_NoEntry},
+ [MENU_STORE] = {gText_Store, CursorCb_Store},
+ [MENU_REGISTER] = {gText_Register, CursorCb_Register},
+ [MENU_TRADE1] = {gText_Trade4, CursorCb_Trade1},
+ [MENU_TRADE2] = {gText_Trade4, CursorCb_Trade2},
+ [MENU_TOSS] = {gMenuText_Toss, CursorCb_Toss},
+ [MENU_FIELD_MOVES + FIELD_MOVE_CUT] = {gMoveNames[MOVE_CUT], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_FLASH] = {gMoveNames[MOVE_FLASH], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_SMASH] = {gMoveNames[MOVE_ROCK_SMASH], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_STRENGTH] = {gMoveNames[MOVE_STRENGTH], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_SURF] = {gMoveNames[MOVE_SURF], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_FLY] = {gMoveNames[MOVE_FLY], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_DIVE] = {gMoveNames[MOVE_DIVE], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_WATERFALL] = {gMoveNames[MOVE_WATERFALL], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_TELEPORT] = {gMoveNames[MOVE_TELEPORT], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_DIG] = {gMoveNames[MOVE_DIG], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_SECRET_POWER] = {gMoveNames[MOVE_SECRET_POWER], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCb_FieldMove},
+ [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCb_FieldMove},
+};
+
+static const u8 sPartyMenuAction_SummarySwitchCancel[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1};
+static const u8 sPartyMenuAction_ShiftSummaryCancel[] = {MENU_SHIFT, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_SendOutSummaryCancel[] = {MENU_SEND_OUT, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_SummaryCancel[] = {MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_EnterSummaryCancel[] = {MENU_ENTER, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_NoEntrySummaryCancel[] = {MENU_NO_ENTRY, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_StoreSummaryCancel[] = {MENU_STORE, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_GiveTakeItemCancel[] = {MENU_GIVE, MENU_TAKE_ITEM, MENU_CANCEL2};
+static const u8 sPartyMenuAction_ReadTakeMailCancel[] = {MENU_READ, MENU_TAKE_MAIL, MENU_CANCEL2};
+static const u8 sPartyMenuAction_RegisterSummaryCancel[] = {MENU_REGISTER, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_TradeSummaryCancel1[] = {MENU_TRADE1, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_TradeSummaryCancel2[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1};
+static const u8 sPartyMenuAction_TakeItemTossCancel[] = {MENU_TAKE_ITEM, MENU_TOSS, MENU_CANCEL1};
+
+// IDs for the action lists that appear when a party mon is selected
+enum
+{
+ ACTIONS_NONE,
+ ACTIONS_SWITCH,
+ ACTIONS_SHIFT,
+ ACTIONS_SEND_OUT,
+ ACTIONS_ENTER,
+ ACTIONS_NO_ENTRY,
+ ACTIONS_STORE,
+ ACTIONS_SUMMARY_ONLY,
+ ACTIONS_ITEM,
+ ACTIONS_MAIL,
+ ACTIONS_REGISTER,
+ ACTIONS_TRADE,
+ ACTIONS_SPIN_TRADE,
+ ACTIONS_TAKEITEM_TOSS
+};
+
+static const u8 *const sPartyMenuActions[] =
+{
+ [ACTIONS_NONE] = NULL,
+ [ACTIONS_SWITCH] = sPartyMenuAction_SummarySwitchCancel,
+ [ACTIONS_SHIFT] = sPartyMenuAction_ShiftSummaryCancel,
+ [ACTIONS_SEND_OUT] = sPartyMenuAction_SendOutSummaryCancel,
+ [ACTIONS_ENTER] = sPartyMenuAction_EnterSummaryCancel,
+ [ACTIONS_NO_ENTRY] = sPartyMenuAction_NoEntrySummaryCancel,
+ [ACTIONS_STORE] = sPartyMenuAction_StoreSummaryCancel,
+ [ACTIONS_SUMMARY_ONLY] = sPartyMenuAction_SummaryCancel,
+ [ACTIONS_ITEM] = sPartyMenuAction_GiveTakeItemCancel,
+ [ACTIONS_MAIL] = sPartyMenuAction_ReadTakeMailCancel,
+ [ACTIONS_REGISTER] = sPartyMenuAction_RegisterSummaryCancel,
+ [ACTIONS_TRADE] = sPartyMenuAction_TradeSummaryCancel1,
+ [ACTIONS_SPIN_TRADE] = sPartyMenuAction_TradeSummaryCancel2,
+ [ACTIONS_TAKEITEM_TOSS] = sPartyMenuAction_TakeItemTossCancel,
+};
+
+static const u8 sPartyMenuActionCounts[] =
+{
+ [ACTIONS_NONE] = 0,
+ [ACTIONS_SWITCH] = ARRAY_COUNT(sPartyMenuAction_SummarySwitchCancel),
+ [ACTIONS_SHIFT] = ARRAY_COUNT(sPartyMenuAction_ShiftSummaryCancel),
+ [ACTIONS_SEND_OUT] = ARRAY_COUNT(sPartyMenuAction_SendOutSummaryCancel),
+ [ACTIONS_ENTER] = ARRAY_COUNT(sPartyMenuAction_EnterSummaryCancel),
+ [ACTIONS_NO_ENTRY] = ARRAY_COUNT(sPartyMenuAction_NoEntrySummaryCancel),
+ [ACTIONS_STORE] = ARRAY_COUNT(sPartyMenuAction_StoreSummaryCancel),
+ [ACTIONS_SUMMARY_ONLY] = ARRAY_COUNT(sPartyMenuAction_SummaryCancel),
+ [ACTIONS_ITEM] = ARRAY_COUNT(sPartyMenuAction_GiveTakeItemCancel),
+ [ACTIONS_MAIL] = ARRAY_COUNT(sPartyMenuAction_ReadTakeMailCancel),
+ [ACTIONS_REGISTER] = ARRAY_COUNT(sPartyMenuAction_RegisterSummaryCancel),
+ [ACTIONS_TRADE] = ARRAY_COUNT(sPartyMenuAction_TradeSummaryCancel1),
+ [ACTIONS_SPIN_TRADE] = ARRAY_COUNT(sPartyMenuAction_TradeSummaryCancel2),
+ [ACTIONS_TAKEITEM_TOSS] = ARRAY_COUNT(sPartyMenuAction_TakeItemTossCancel)
+};
+
+static const u16 sFieldMoves[] =
+{
+ MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, MOVE_TELEPORT,
+ MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, FIELD_MOVE_TERMINATOR
+};
+
+struct
+{
+ bool8 (*fieldMoveFunc)(void);
+ u8 msgId;
+} static const sFieldMoveCursorCallbacks[] =
+{
+ [FIELD_MOVE_CUT] = {SetUpFieldMove_Cut, PARTY_MSG_NOTHING_TO_CUT},
+ [FIELD_MOVE_FLASH] = {SetUpFieldMove_Flash, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_ROCK_SMASH] = {SetUpFieldMove_RockSmash, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_STRENGTH] = {SetUpFieldMove_Strength, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_SURF] = {SetUpFieldMove_Surf, PARTY_MSG_CANT_SURF_HERE},
+ [FIELD_MOVE_FLY] = {SetUpFieldMove_Fly, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_DIVE] = {SetUpFieldMove_Dive, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_WATERFALL] = {SetUpFieldMove_Waterfall, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_TELEPORT] = {SetUpFieldMove_Teleport, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_DIG] = {SetUpFieldMove_Dig, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_SECRET_POWER] = {SetUpFieldMove_SecretPower, PARTY_MSG_CANT_USE_HERE},
+ [FIELD_MOVE_MILK_DRINK] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP},
+ [FIELD_MOVE_SOFT_BOILED] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP},
+ [FIELD_MOVE_SWEET_SCENT] = {SetUpFieldMove_SweetScent, PARTY_MSG_CANT_USE_HERE},
+};
+
+static const u8 *const sUnionRoomTradeMessages[] =
+{
+ [UR_TRADE_MSG_NOT_MON_PARTNER_WANTS - 1] = gText_NotPkmnOtherTrainerWants,
+ [UR_TRADE_MSG_NOT_EGG - 1] = gText_ThatIsntAnEgg,
+ [UR_TRADE_MSG_MON_CANT_BE_TRADED_1 - 1] = gText_PkmnCantBeTradedNow,
+ [UR_TRADE_MSG_MON_CANT_BE_TRADED_2 - 1] = gText_PkmnCantBeTradedNow,
+ [UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED - 1] = gText_OtherTrainersPkmnCantBeTraded,
+ [UR_TRADE_MSG_EGG_CANT_BE_TRADED -1] = gText_EggCantBeTradedNow,
+ [UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON - 1] = gText_OtherTrainerCantAcceptPkmn,
+ [UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1 - 1] = gText_CantTradeWithTrainer,
+ [UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2 - 1] = gText_CantTradeWithTrainer,
+};
+
+static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp");
+static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal");
+
+static const struct OamData sOamData_HeldItem =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(8x8),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_HeldItem[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_HeldMail[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_HeldItem[] =
+{
+ sSpriteAnim_HeldItem,
+ sSpriteAnim_HeldMail,
+};
+
+static const struct SpriteSheet sSpriteSheet_HeldItem =
+{
+ sHeldItemGfx, sizeof(sHeldItemGfx), 0xd750
+};
+
+static const struct SpritePalette sSpritePalette_HeldItem =
+{
+ sHeldItemPalette, 0xd750
+};
+
+static const struct SpriteTemplate sSpriteTemplate_HeldItem =
+{
+ 0xd750,
+ 0xd750,
+ &sOamData_HeldItem,
+ sSpriteAnimTable_HeldItem,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ SpriteCallbackDummy
+};
+
+static const struct OamData sOamData_MenuPokeball =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x32),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sPokeballAnim_Closed[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sPokeballAnim_Open[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_MenuPokeball[] =
+{
+ sPokeballAnim_Closed,
+ sPokeballAnim_Open
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeball =
+{
+ gPartyMenuPokeball_Gfx, 0x400, 0x04b0
+};
+
+static const struct CompressedSpritePalette sSpritePalette_MenuPokeball =
+{
+ gPartyMenuPokeball_Pal, 0x04b0
+};
+
+// Used for the pokeball sprite on each party slot / Cancel button
+static const struct SpriteTemplate sSpriteTemplate_MenuPokeball =
+{
+ .tileTag = 0x04b0,
+ .paletteTag = 0x04b0,
+ .oam = &sOamData_MenuPokeball,
+ .anims = sSpriteAnimTable_MenuPokeball,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct OamData sOamData_MenuPokeballSmall =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(16x16),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(16x16),
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSmallPokeballAnim_Closed[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Open[] =
+{
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Blank1[] =
+{
+ ANIMCMD_FRAME(8, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Blank2[] =
+{
+ ANIMCMD_FRAME(12, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Blank3[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSmallPokeballAnim_Blank4[] =
+{
+ ANIMCMD_FRAME(20, 0),
+ ANIMCMD_END
+};
+
+// The blanks below are never used. See SpriteCB_BounceConfirmCancelButton, where they were intended to be used
+static const union AnimCmd *const sSpriteAnimTable_MenuPokeballSmall[] =
+{
+ sSmallPokeballAnim_Closed,
+ sSmallPokeballAnim_Open,
+ sSmallPokeballAnim_Blank1,
+ sSmallPokeballAnim_Blank2,
+ sSmallPokeballAnim_Blank3,
+ sSmallPokeballAnim_Blank4
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall =
+{
+ gPartyMenuPokeballSmall_Gfx, 0x0300, 0x04b1
+};
+
+// Used for the pokeball sprite next to Cancel and Confirm when both are present, otherwise sSpriteTemplate_MenuPokeball is used
+static const struct SpriteTemplate sSpriteTemplate_MenuPokeballSmall =
+{
+ .tileTag = 1201,
+ .paletteTag = 1200,
+ .oam = &sOamData_MenuPokeballSmall,
+ .anims = sSpriteAnimTable_MenuPokeballSmall,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct OamData sOamData_StatusCondition =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .x = 0,
+ .matrixNum = 0,
+ .size = SPRITE_SIZE(32x8),
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_StatusPoison[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusParalyzed[] =
+{
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusSleep[] =
+{
+ ANIMCMD_FRAME(8, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusFrozen[] =
+{
+ ANIMCMD_FRAME(12, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusBurn[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusPokerus[] =
+{
+ ANIMCMD_FRAME(20, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_StatusFaint[] =
+{
+ ANIMCMD_FRAME(24, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Blank[] =
+{
+ ANIMCMD_FRAME(28, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteTemplate_StatusCondition[] =
+{
+ sSpriteAnim_StatusPoison,
+ sSpriteAnim_StatusParalyzed,
+ sSpriteAnim_StatusSleep,
+ sSpriteAnim_StatusFrozen,
+ sSpriteAnim_StatusBurn,
+ sSpriteAnim_StatusPokerus,
+ sSpriteAnim_StatusFaint,
+ sSpriteAnim_Blank
+};
+
+static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons =
+{
+ gStatusGfx_Icons, 0x400, 1202
+};
+
+static const struct CompressedSpritePalette sSpritePalette_StatusIcons =
+{
+ gStatusPal_Icons, 1202
+};
+
+static const struct SpriteTemplate sSpriteTemplate_StatusIcons =
+{
+ .tileTag = 1202,
+ .paletteTag = 1202,
+ .oam = &sOamData_StatusCondition,
+ .anims = sSpriteTemplate_StatusCondition,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+// Mask for the partners party in a multi battle. TRUE if in the partners party, FALSE otherwise
+// The 7th slot is Cancel, and the 8th slot is unreachable
+// Used only to determine whether or not to show the Deoxys form icon sprite
+static const bool8 sMultiBattlePartnersPartyMask[PARTY_SIZE + 2] =
+{
+ FALSE,
+ TRUE,
+ FALSE,
+ FALSE,
+ TRUE,
+ TRUE,
+ FALSE
+};
+
+static const u8 *const sUnused_StatStrings[] =
+{
+ gText_HP4,
+ gText_Attack3,
+ gText_Defense3,
+ gText_SpAtk4,
+ gText_SpDef4,
+ gText_Speed2
+};
+
+static const u16 sTMHMMoves[] =
+{
+ MOVE_FOCUS_PUNCH,
+ MOVE_DRAGON_CLAW,
+ MOVE_WATER_PULSE,
+ MOVE_CALM_MIND,
+ MOVE_ROAR,
+ MOVE_TOXIC,
+ MOVE_HAIL,
+ MOVE_BULK_UP,
+ MOVE_BULLET_SEED,
+ MOVE_HIDDEN_POWER,
+ MOVE_SUNNY_DAY,
+ MOVE_TAUNT,
+ MOVE_ICE_BEAM,
+ MOVE_BLIZZARD,
+ MOVE_HYPER_BEAM,
+ MOVE_LIGHT_SCREEN,
+ MOVE_PROTECT,
+ MOVE_RAIN_DANCE,
+ MOVE_GIGA_DRAIN,
+ MOVE_SAFEGUARD,
+ MOVE_FRUSTRATION,
+ MOVE_SOLAR_BEAM,
+ MOVE_IRON_TAIL,
+ MOVE_THUNDERBOLT,
+ MOVE_THUNDER,
+ MOVE_EARTHQUAKE,
+ MOVE_RETURN,
+ MOVE_DIG,
+ MOVE_PSYCHIC,
+ MOVE_SHADOW_BALL,
+ MOVE_BRICK_BREAK,
+ MOVE_DOUBLE_TEAM,
+ MOVE_REFLECT,
+ MOVE_SHOCK_WAVE,
+ MOVE_FLAMETHROWER,
+ MOVE_SLUDGE_BOMB,
+ MOVE_SANDSTORM,
+ MOVE_FIRE_BLAST,
+ MOVE_ROCK_TOMB,
+ MOVE_AERIAL_ACE,
+ MOVE_TORMENT,
+ MOVE_FACADE,
+ MOVE_SECRET_POWER,
+ MOVE_REST,
+ MOVE_ATTRACT,
+ MOVE_THIEF,
+ MOVE_STEEL_WING,
+ MOVE_SKILL_SWAP,
+ MOVE_SNATCH,
+ MOVE_OVERHEAT,
+ MOVE_CUT,
+ MOVE_FLY,
+ MOVE_SURF,
+ MOVE_STRENGTH,
+ MOVE_FLASH,
+ MOVE_ROCK_SMASH,
+ MOVE_WATERFALL,
+ MOVE_DIVE,
+};
diff --git a/src/data/script_menu.h b/src/data/script_menu.h
index b64146a5d..3880c3c0c 100644
--- a/src/data/script_menu.h
+++ b/src/data/script_menu.h
@@ -31,7 +31,7 @@ static const struct MenuAction MultichoiceList_ContestType[] =
{gText_Exit},
};
-static const struct MenuAction MultichoiceList_DecorRegistry[] =
+static const struct MenuAction MultichoiceList_BasePCWithRegistry[] =
{
{gText_Decoration2},
{gText_PackUp},
@@ -39,7 +39,7 @@ static const struct MenuAction MultichoiceList_DecorRegistry[] =
{gText_Exit},
};
-static const struct MenuAction MultichoiceList_DecorNoRegistry[] =
+static const struct MenuAction MultichoiceList_BasePCNoRegistry[] =
{
{gText_Decoration2},
{gText_PackUp},
@@ -789,8 +789,8 @@ static const struct MultichoiceListStruct sMultichoiceLists[] =
[MULTI_ENTERINFO] = MULTICHOICE(MultichoiceList_EnterInfo),
[MULTI_CONTEST_INFO] = MULTICHOICE(MultichoiceList_ContestInfo),
[MULTI_CONTEST_TYPE] = MULTICHOICE(MultichoiceList_ContestType),
- [MULTI_DECOR_NOREGISTRY] = MULTICHOICE(MultichoiceList_DecorNoRegistry),
- [MULTI_DECOR_REGISTRY] = MULTICHOICE(MultichoiceList_DecorRegistry),
+ [MULTI_BASE_PC_NO_REGISTRY] = MULTICHOICE(MultichoiceList_BasePCNoRegistry),
+ [MULTI_BASE_PC_WITH_REGISTRY] = MULTICHOICE(MultichoiceList_BasePCWithRegistry),
[MULTI_REGISTER_MENU] = MULTICHOICE(MultichoiceList_RegisterMenu),
[MULTI_SSTIDAL_LILYCOVE] = MULTICHOICE(MultichoiceList_Exit),
[MULTI_UNUSED_9] = MULTICHOICE(MultichoiceList_Exit),
diff --git a/src/data/trade.h b/src/data/trade.h
new file mode 100644
index 000000000..9e96a54dd
--- /dev/null
+++ b/src/data/trade.h
@@ -0,0 +1,1197 @@
+// Exists unused in RS as well
+static const u32 sUnusedStructSizes[] =
+{
+ sizeof(struct SaveBlock2),
+ sizeof(struct SaveBlock1),
+ sizeof(struct MapHeader),
+ // 0x00000530, in RS
+ sizeof(struct MailStruct), //or EventObject / EventObjectGraphicsInfo
+ sizeof(struct Pokemon), //or TrainerCard
+ 0x00000528 // 0x000004D8, in RS
+};
+
+static const u16 sTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin");
+static const u16 sTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin");
+static const u8 sTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin");
+static const u8 sTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin");
+static const u8 sText_EmptyString[] = _("");
+static const u8 sText_UnusedTextFormat[] = _("{COLOR WHITE}{HIGHLIGHT TRANSPARENT}{SHADOW DARK_GREY}");
+const u8 gText_MaleSymbol4[] = _("♂");
+const u8 gText_FemaleSymbol4[] = _("♀");
+const u8 gText_GenderlessSymbol[] = _("");
+static const u8 sText_SpaceMove[] = _(" MOVE"); // unused
+static const u8 sText_NewLine[] = _("\n");
+static const u8 sText_Slash[] = _("/");
+static const u8 sText_Lv[] = _("Lv. ");
+static const u8 sText_ThreeDashes[] = _("---");
+static const u8 sText_FourQuestionMarks[] = _("????");
+static const u8 sText_832DAE4[] = _("");
+static const u8 sText_IsThisTradeOkay[] = _("Is this trade okay?");
+static const u8 sText_Cancel[] = _("CANCEL");
+static const u8 sText_ChooseAPkmn[] = _("Choose a POKéMON.");
+static const u8 sText_Summary[] = _("SUMMARY");
+static const u8 sText_Trade[] = _("TRADE");
+static const u8 sText_CancelTrade[] = _("Cancel trade?");
+static const u8 sJPText_PressBButtonToQuit[] = _("Bボタン で もどります");
+static const u8 sText_Summary2[] = _("SUMMARY");
+static const u8 sText_Trade2[] = _("TRADE");
+static const u8 sText_CommunicationStandby[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Communication standby…\nPlease wait.");
+static const u8 sText_TheTradeHasBeenCanceled[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}The trade has\nbeen canceled.");
+static const u8 sText_OnlyPkmnForBattle[] = _("That's your only\nPOKéMON for battle.");
+static const u8 sText_WaitingForYourFriend[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Waiting for your friend\nto finish…");
+static const u8 sText_YourFriendWantsToTrade[] = _("Your friend wants\nto trade POKéMON.");
+
+static const struct OamData sTradeOamData_32x16 =
+{
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .priority = 1
+};
+
+static const struct OamData sTradeOamData_64x32 =
+{
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_832DC24[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC2C[] =
+{
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_832DC34[] =
+{
+ gSpriteAnim_832DC24,
+ gSpriteAnim_832DC2C
+};
+
+static const struct SpriteSheet sTradeButtonsSpriteSheet =
+{
+ .data = gTradeButtons_Gfx,
+ .size = 0x800,
+ .tag = 300
+};
+
+static const struct SpritePalette gUnknown_0832DC44 =
+{
+ .data = gUnknown_08DDB444,
+ .tag = 2345
+};
+
+static const union AnimCmd gSpriteAnim_832DC4C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC54[] =
+{
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC5C[] =
+{
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC64[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC6C[] =
+{
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_832DC74[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_832DC7C[] =
+{
+ gSpriteAnim_832DC4C,
+ gSpriteAnim_832DC54,
+ gSpriteAnim_832DC5C,
+ gSpriteAnim_832DC64,
+ gSpriteAnim_832DC6C,
+ gSpriteAnim_832DC74
+};
+
+static const struct SpriteTemplate gSpriteTemplate_832DC94 =
+{
+ .tileTag = 300,
+ .paletteTag = 2345,
+ .oam = &sTradeOamData_64x32,
+ .anims = gSpriteAnimTable_832DC34,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct SpriteTemplate gSpriteTemplate_832DCAC =
+{
+ .tileTag = 200,
+ .paletteTag = 4925,
+ .oam = &sTradeOamData_32x16,
+ .anims = gSpriteAnimTable_832DC7C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal");
+static const struct SpritePalette gSpritePalette_TradeScreenText =
+{
+ .data = TradeScreenTextPalette,
+ .tag = 4925
+};
+
+// This is used to determine the next mon to select when the D-Pad is
+// pressed in a given direction.
+// Note that the mons are laid out like this.
+// 0-5 are the player's party and 6-11 are the trading partner's party.
+// 12 is the cancel button.
+// 0 1 6 7
+// 2 3 8 9
+// 4 5 10 11
+// 12
+// 1st array is the current positions
+// 2nd array is directions of input
+// 3rd array is the next positions to go to (unoccupied spaces are skipped over)
+static const u8 sTradeNextSelectedMonTable[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] =
+{
+ {
+ {4, 2, 12, 12, 0, 0}, // UP
+ {2, 4, 12, 12, 0, 0}, // DOWN
+ {7, 6, 1, 0, 0, 0}, // LEFT
+ {1, 6, 7, 0, 0, 0} // RIGHT
+ },
+ {
+ {5, 3, 12, 12, 0, 0},
+ {3, 5, 12, 12, 0, 0},
+ {0, 7, 6, 1, 0, 0},
+ {6, 7, 0, 1, 0, 0}
+ },
+ {
+ {0, 0, 0, 0, 0, 0},
+ {4, 0, 0, 0, 0, 0},
+ {9, 8, 7, 6, 0, 0},
+ {3, 1, 0, 0, 0, 0}
+ },
+ {
+ {1, 1, 1, 1, 0, 0},
+ {5, 1, 1, 1, 0, 0},
+ {2, 9, 8, 7, 0, 0},
+ {8, 9, 6, 6, 0, 0}
+ },
+ {
+ {2, 2, 2, 2, 0, 0},
+ {0, 0, 0, 0, 0, 0},
+ {11, 10, 9, 8, 7, 6},
+ {5, 3, 1, 0, 0, 0}
+ },
+ {
+ {3, 3, 3, 3, 0, 0},
+ {1, 1, 1, 1, 0, 0},
+ {4, 4, 4, 4, 0, 0},
+ {10, 8, 6, 0, 0, 0}
+ },
+ {
+ {10, 8, 12, 0, 0, 0},
+ {8, 10, 12, 0, 0, 0},
+ {1, 0, 0, 0, 0, 0},
+ {7, 0, 1, 0, 0, 0}
+ },
+ {
+ {12, 0, 0, 0, 0, 0},
+ {9, 12, 0, 0, 0, 0},
+ {6, 0, 0, 0, 0, 0},
+ {0, 0, 0, 0, 0, 0}
+ },
+ {
+ {6, 0, 0, 0, 0, 0},
+ {10, 6, 0, 0, 0, 0},
+ {3, 2, 1, 0, 0, 0},
+ {9, 7, 0, 0, 0, 0}
+ },
+ {
+ {7, 0, 0, 0, 0, 0},
+ {11, 12, 0, 0, 0, 0},
+ {8, 0, 0, 0, 0, 0},
+ {2, 1, 0, 0, 0, 0}
+ },
+ {
+ {8, 0, 0, 0, 0, 0},
+ {6, 0, 0, 0, 0, 0},
+ {5, 4, 3, 2, 1, 0},
+ {11, 9, 7, 0, 0, 0}
+ },
+ {
+ {9, 0, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0},
+ {10, 0, 0, 0, 0, 0},
+ {4, 2, 0, 0, 0, 0}
+ },
+ {
+ {11, 9, 7, 6, 0, 0},
+ {7, 6, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0},
+ {12, 0, 0, 0, 0, 0}
+ }
+};
+
+static const u8 sTradeMonSpriteCoords[(PARTY_SIZE * 2) + 1][2] =
+{
+ // Your party
+ {1, 5 },
+ {8, 5 },
+ {1, 10},
+ {8, 10},
+ {1, 15},
+ {8, 15},
+
+ // Friend's party
+ {16, 5 },
+ {23, 5 },
+ {16, 10},
+ {23, 10},
+ {16, 15},
+ {23, 15},
+
+ {23, 18} // CANCEL
+};
+
+static const u8 sTradeMonLevelCoords[][PARTY_SIZE][2] =
+{
+ {
+ // Your party
+ {5, 4},
+ {12, 4},
+ {5, 9},
+ {12, 9},
+ {5, 14},
+ {12, 14},
+ },
+ {
+ // Friend's party
+ {20, 4},
+ {27, 4},
+ {20, 9},
+ {27, 9},
+ {20, 14},
+ {27, 14}
+ }
+};
+
+static const u8 sTradeMonBoxCoords[][PARTY_SIZE][2] =
+{
+ {
+ // Your party
+ {1, 3},
+ {8, 3},
+ {1, 8},
+ {8, 8},
+ {1, 13},
+ {8, 13},
+ },
+ {
+ // Friend's party
+ {16, 3},
+ {23, 3},
+ {16, 8},
+ {23, 8},
+ {16, 13},
+ {23, 13}
+ }
+};
+
+static const u8 sUnref_0832DE6E[] =
+{
+ 0x00, 0x0e,
+ 0x0f, 0x1d,
+ 0x03, 0x05,
+ 0x03, 0x07,
+ 0x12, 0x05,
+ 0x12, 0x07,
+ 0x08, 0x07,
+ 0x16, 0x0c,
+ 0x08, 0x07,
+ 0x16, 0x0c,
+ 0x06, 0x07,
+ 0x18, 0x0c,
+ 0x06, 0x07,
+ 0x18, 0x0c,
+ 0x08, 0x07,
+ 0x16, 0x0c,
+ 0x07, 0x07,
+ 0x17, 0x0c
+};
+
+static const u8 *const sTradeActionTexts[] =
+{
+ [TRADE_TEXT_CANCEL] = sText_Cancel,
+ [TRADE_TEXT_CHOOSE_MON] = sText_ChooseAPkmn,
+ [TRADE_TEXT_SUMMARY] = sText_Summary,
+ [TRADE_TEXT_TRADE] = sText_Trade,
+ [TRADE_TEXT_CANCEL_TRADE] = sText_CancelTrade,
+ [TRADE_TEXT_JP_QUIT] = sJPText_PressBButtonToQuit
+};
+
+static const struct MenuAction sSelectTradeMonActions[] =
+{
+ {sText_Summary2, Task_DrawSelectionSummary},
+ {sText_Trade2, Task_DrawSelectionTrade}
+};
+
+static const u8 *const sTradeMessages[] =
+{
+ [TRADE_MSG_STANDBY] = sText_CommunicationStandby,
+ [TRADE_MSG_CANCELED] = sText_TheTradeHasBeenCanceled,
+ [TRADE_MSG_ONLY_MON1] = sText_OnlyPkmnForBattle,
+ [TRADE_MSG_ONLY_MON2] = gText_OnlyPkmnForBattle, //identical text to above
+ [TRADE_MSG_WAITING_FOR_FRIEND] = sText_WaitingForYourFriend,
+ [TRADE_MSG_FRIEND_WANTS_TO_TRADE] = sText_YourFriendWantsToTrade,
+ [TRADE_MSG_MON_CANT_BE_TRADED] = gText_PkmnCantBeTradedNow,
+ [TRADE_MSG_EGG_CANT_BE_TRADED] = gText_EggCantBeTradedNow,
+ [TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED] = gText_OtherTrainersPkmnCantBeTraded
+};
+
+static const u8 sTradeTextColors[] =
+{
+ TEXT_COLOR_TRANSPARENT, //bg color
+ TEXT_COLOR_WHITE, //fg color
+ TEXT_COLOR_DARK_GREY //shadow color
+};
+
+static const struct BgTemplate sTradeMenuBgTemplates[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 5,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 6,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 7,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ },
+};
+
+static const struct WindowTemplate sTradeMenuWindowTemplates[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 4,
+ .tilemapTop = 7,
+ .width = 22,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 30
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 19,
+ .tilemapTop = 15,
+ .width = 10,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 118
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 5,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 158
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 7,
+ .tilemapTop = 5,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 174
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 10,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 190
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 7,
+ .tilemapTop = 10,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 206
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 0,
+ .tilemapTop = 15,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 222
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 7,
+ .tilemapTop = 15,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 238
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 15,
+ .tilemapTop = 5,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 254
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 5,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 270
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 15,
+ .tilemapTop = 10,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 286
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 10,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 302
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 15,
+ .tilemapTop = 15,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 318
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 22,
+ .tilemapTop = 15,
+ .width = 8,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 334
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 5,
+ .width = 14,
+ .height = 2,
+ .paletteNum = 13,
+ .baseBlock = 350
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 3,
+ .tilemapTop = 8,
+ .width = 11,
+ .height = 8,
+ .paletteNum = 15,
+ .baseBlock = 378
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 17,
+ .tilemapTop = 5,
+ .width = 14,
+ .height = 2,
+ .paletteNum = 15,
+ .baseBlock = 466
+ },
+ {
+ .bg = 0,
+ .tilemapLeft = 18,
+ .tilemapTop = 8,
+ .width = 11,
+ .height = 8,
+ .paletteNum = 15,
+ .baseBlock = 494
+ },
+ DUMMY_WIN_TEMPLATE,
+};
+
+static const struct WindowTemplate sTradeYesNoWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 23,
+ .tilemapTop = 13,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 582
+};
+
+static const u8 sJPText_Shedinja[] = _("ヌケニン");
+static const u8 sTradeMenuPartyMonBoxDimensions[3][2] =
+{
+ [TRADE_PLAYER] = {4, 3},
+ [TRADE_PARTNER] = {19, 3}
+};
+
+static const u16 sTradePal_PokeBall[] = INCBIN_U16("graphics/trade/pokeball.gbapal");
+static const u8 sTradeGfx_PokeBall[] = INCBIN_U8("graphics/trade/pokeball.4bpp");
+static const u8 sTradeGfx_PokeBallSymbol[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); // unused?
+static const u16 sTradeTilemap_Cable[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin");
+static const u16 sTradeTilemap_PokeBallSymbol[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); // unused?
+static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal");
+static const u16 sTradePal_Gba[] = INCBIN_U16("graphics/trade/gba.gbapal");
+static const u16 sTradePal_ShadowUnused[] = INCBIN_U16("graphics/trade/shadow.gbapal");
+static const u16 sTradePal_BlackUnused[] = INCBIN_U16("graphics/trade/black.gbapal");
+static const u16 sTradePal_Misc[] = INCBIN_U16("graphics/trade/misc.gbapal");
+static const u8 sTradeGfx_Glow1[] = INCBIN_U8("graphics/trade/glow1.4bpp");
+static const u8 sTradeGfx_Glow2[] = INCBIN_U8("graphics/trade/glow2.4bpp");
+static const u8 sTradeGfx_CableEnd[] = INCBIN_U8("graphics/trade/cable_end.4bpp");
+static const u8 sTradeGfx_GbaScreen[] = INCBIN_U8("graphics/trade/gba_screen.4bpp");
+const u16 gUnknown_08331F60[] = INCBIN_U16("graphics/trade/shadow_map.bin");
+static const u8 sTradeAffine_Gba[] = INCBIN_U8("graphics/trade/gba_affine.8bpp");
+static const u8 sFiller_08335760[64] = {};
+static const u8 sTradeAffineMap_GbaCable[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin");
+static const u8 sTradeAffineMap_GbaWireless[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin");
+static const u16 sTradeTilemap_GbaWireless[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin");
+static const u16 sTradeTilemap_GbaCable[] = INCBIN_U16("graphics/trade/gba_map_cable.bin");
+static const u32 gUnknown_083379A0[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); //some wireless tilemap
+static const u16 sTradePal_WirelessSignalSend[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal");
+static const u16 sTradePal_WirelessSignalReceive[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal");
+static const u16 sTradePal_Black[] = INCBIN_U16("graphics/trade/black.gbapal");
+static const u32 sTradeGfx_WirelessSignal[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz");
+static const u32 sTradeTilemap_WirelessSignal[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz");
+
+static const struct OamData sTradeOamData_16x16 =
+{
+ .affineMode = 1,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16)
+};
+
+static const union AnimCmd gSpriteAnim_8338C4C[] =
+{
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_FRAME( 4, 3),
+ ANIMCMD_FRAME( 8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(20, 3),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(28, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(36, 3),
+ ANIMCMD_FRAME(40, 3),
+ ANIMCMD_FRAME(44, 3),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_8338C88[] =
+{
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_FRAME( 4, 3),
+ ANIMCMD_FRAME( 8, 3),
+ ANIMCMD_FRAME(12, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(20, 3),
+ ANIMCMD_FRAME(24, 3),
+ ANIMCMD_FRAME(28, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(36, 3),
+ ANIMCMD_FRAME(40, 3),
+ ANIMCMD_FRAME(44, 3),
+ ANIMCMD_LOOP(2),
+ ANIMCMD_FRAME( 0, 3),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338C88[] =
+{
+ gSpriteAnim_8338C4C,
+ gSpriteAnim_8338C88
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338CCC[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338CDC[] =
+{
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 20),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338CEC[] =
+{
+ AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME( 0, 0, 0, 5),
+ AFFINEANIMCMD_FRAME( 8, 0, 0, 20),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D0C[] =
+{
+ gSpriteAffineAnim_8338CCC,
+ gSpriteAffineAnim_8338CDC,
+ gSpriteAffineAnim_8338CEC
+};
+
+static const struct SpriteSheet sPokeBallSpriteSheet =
+{
+ .data = sTradeGfx_PokeBall,
+ .size = 0x600,
+ .tag = 5557
+};
+
+static const struct SpritePalette sPokeBallSpritePalette =
+{
+ .data = sTradePal_PokeBall,
+ .tag = 5558
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338D28 =
+{
+ .tileTag = 5557,
+ .paletteTag = 5558,
+ .oam = &sTradeOamData_16x16,
+ .anims = gSpriteAnimTable_8338C88,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8338D0C,
+ .callback = sub_807E55C
+};
+
+static const struct OamData sTradeOamData_32x32 =
+{
+ .affineMode = 1,
+ .objMode = 1,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338D48[] =
+{
+ ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338D50[] =
+{
+ gSpriteAnim_8338D48
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338D54[] =
+{
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 5),
+ AFFINEANIMCMD_FRAME(10, 10, 0, 5),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D6C[] =
+{
+ gSpriteAffineAnim_8338D54
+};
+
+static const struct SpriteSheet sGlow1SpriteSheet =
+{
+ .data = sTradeGfx_Glow1,
+ .size = 0x200,
+ .tag = 5550
+};
+
+static const struct SpritePalette sMiscTradeSpritePalette =
+{
+ .data = sTradePal_Misc,
+ .tag = 5551
+};
+
+static const struct SpritePalette sGbaSpritePalette =
+{
+ .data = sTradePal_Gba,
+ .tag = 5555
+};
+
+static const struct SpriteTemplate gUnknown_08338D88 =
+{
+ .tileTag = 5550,
+ .paletteTag = 5551,
+ .oam = &sTradeOamData_32x32,
+ .anims = gSpriteAnimTable_8338D50,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_8338D6C,
+ .callback = sub_807AA28
+};
+
+static const struct OamData sTradeOamData_16x32 =
+{
+ .shape = SPRITE_SHAPE(16x32),
+ .size = SPRITE_SIZE(16x32),
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338DA8[] =
+{
+ ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_8338DB0[] =
+{
+ ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338DB8[] =
+{
+ gSpriteAnim_8338DA8,
+ gSpriteAnim_8338DB0
+};
+
+static const struct SpriteSheet sGlow2SpriteSheet =
+{
+ .data = sTradeGfx_Glow2,
+ .size = 0x300,
+ .tag = 5552
+};
+
+static const struct SpriteTemplate sGlowBallSpriteTemplate =
+{
+ .tileTag = 5552,
+ .paletteTag = 5551,
+ .oam = &sTradeOamData_16x32,
+ .anims = gSpriteAnimTable_8338DB8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807AA7C
+};
+
+static const struct OamData sTradeOamData_16x32_2 =
+{
+ .shape = SPRITE_SHAPE(16x32),
+ .size = SPRITE_SIZE(16x32),
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338DE8[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338DF0[] =
+{
+ gSpriteAnim_8338DE8
+};
+
+static const struct SpriteSheet sCableEndSpriteSheet =
+{
+ .data = sTradeGfx_CableEnd,
+ .size = 0x100,
+ .tag = 5554
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338DFC =
+{
+ .tileTag = 5554,
+ .paletteTag = 5555,
+ .oam = &sTradeOamData_16x32_2,
+ .anims = gSpriteAnimTable_8338DF0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807AABC
+};
+
+static const struct OamData sTradeOamData_64x32_2 =
+{
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .priority = 1
+};
+
+static const union AnimCmd gSpriteAnim_8338E1C[] =
+{
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_LOOP(8),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gSpriteAnim_8338E40[] =
+{
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_LOOP(2),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338E64[] =
+{
+ gSpriteAnim_8338E1C
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8338E68[] =
+{
+ gSpriteAnim_8338E40
+};
+
+static const struct SpriteSheet sGbaScreenSpriteSheet =
+{
+ .data = sTradeGfx_GbaScreen,
+ .size = 0x1000,
+ .tag = 5556
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338E74 =
+{
+ .tileTag = 5556,
+ .paletteTag = 5555,
+ .oam = &sTradeOamData_64x32_2,
+ .anims = gSpriteAnimTable_8338E64,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807AB04
+};
+
+static const struct SpriteTemplate gSpriteTemplate_8338E8C =
+{
+ .tileTag = 5556,
+ .paletteTag = 5555,
+ .oam = &sTradeOamData_64x32_2,
+ .anims = gSpriteAnimTable_8338E68,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807AB04
+};
+
+static const u16 gUnknown_08338EA4[] = INCBIN_U16("graphics/trade/unknown_338EA4.gbapal");
+
+static const union AffineAnimCmd gSpriteAffineAnim_8338EBC[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338ECC[] =
+{
+ gSpriteAffineAnim_8338EBC
+};
+
+static const struct InGameTrade sIngameTrades[] =
+{
+ [INGAME_TRADE_SEEDOT] =
+ {
+ .nickname = _("DOTS"),
+ .species = SPECIES_SEEDOT,
+ .ivs = {5, 4, 5, 4, 4, 4},
+ .abilityNum = 1,
+ .otId = 38726,
+ .conditions = {30, 5, 5, 5, 5},
+ .personality = 0x84,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .mailNum = -1,
+ .otName = _("KOBE"),
+ .otGender = MALE,
+ .sheen = 10,
+ .requestedSpecies = SPECIES_RALTS
+ },
+ [INGAME_TRADE_PLUSLE] =
+ {
+ .nickname = _("PLUSES"),
+ .species = SPECIES_PLUSLE,
+ .ivs = {4, 4, 4, 5, 5, 4},
+ .abilityNum = 0,
+ .otId = 73996,
+ .conditions = {5, 5, 30, 5, 5},
+ .personality = 0x6F,
+ .heldItem = ITEM_WOOD_MAIL,
+ .mailNum = 0,
+ .otName = _("ROMAN"),
+ .otGender = MALE,
+ .sheen = 10,
+ .requestedSpecies = SPECIES_VOLBEAT
+ },
+ [INGAME_TRADE_HORSEA] =
+ {
+ .nickname = _("SEASOR"),
+ .species = SPECIES_HORSEA,
+ .ivs = {5, 4, 4, 4, 5, 4},
+ .abilityNum = 0,
+ .otId = 46285,
+ .conditions = {5, 5, 5, 5, 30},
+ .personality = 0x7F,
+ .heldItem = ITEM_WAVE_MAIL,
+ .mailNum = 1,
+ .otName = _("SKYLAR"),
+ .otGender = MALE,
+ .sheen = 10,
+ .requestedSpecies = SPECIES_BAGON
+ },
+ [INGAME_TRADE_MEOWTH] =
+ {
+ .nickname = _("MEOWOW"),
+ .species = SPECIES_MEOWTH,
+ .ivs = {4, 5, 4, 5, 4, 4},
+ .abilityNum = 0,
+ .otId = 91481,
+ .conditions = {5, 5, 5, 30, 5},
+ .personality = 0x8B,
+ .heldItem = ITEM_RETRO_MAIL,
+ .mailNum = 2,
+ .otName = _("ISIS"),
+ .otGender = FEMALE,
+ .sheen = 10,
+ .requestedSpecies = SPECIES_SKITTY
+ }
+};
+
+static const u16 sIngameTradeMail[][MAIL_WORDS_COUNT + 1] =
+{
+ {
+ EC_WORD_BE,
+ EC_WORD_NICE,
+ EC_WORD_TO,
+ EC_POKEMON(PLUSLE),
+ EC_WORD_EXCL,
+ EC_POKEMON(VOLBEAT),
+ EC_WORD_WILL,
+ EC_WORD_BE,
+ EC_WORD_FANTASTIC
+ }, {
+ EC_WORD_I,
+ EC_WORD_WILL,
+ EC_WORD_MAKE,
+ EC_POKEMON(BAGON),
+ EC_WORD_TOUGH,
+ EC_WORD_PLEASE,
+ EC_WORD_TRAIN,
+ EC_POKEMON(HORSEA),
+ EC_WORD_WELL
+ }, {
+ EC_WORD_THANK_YOU,
+ EC_WORD_FOR,
+ EC_POKEMON(SKITTY),
+ EC_POKEMON2(MEOWTH),
+ EC_WORD_CRIES,
+ EC_WORD_IN,
+ EC_WORD_A,
+ EC_WORD_CUTE,
+ EC_WORD_WAY
+ }
+};
+
+static const struct WindowTemplate sTradeSequenceWindowTemplates[] =
+{
+ {
+ .bg = 0,
+ .tilemapLeft = 2,
+ .tilemapTop = 15,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 0,
+ .baseBlock = 64
+ },
+ DUMMY_WIN_TEMPLATE
+};
+
+const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate =
+{
+ .bg = 0,
+ .tilemapLeft = 21,
+ .tilemapTop = 9,
+ .width = 5,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 188
+};
+
+static const struct BgTemplate sTradeSequenceBgTemplates[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 5,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 18,
+ .screenSize = 1,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 6,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ },
+};
+
+static const s8 sTradeBallVerticalVelocityTable[] =
+{
+ 0, 0, 1, 0,
+ 1, 0, 1, 1,
+ 1, 1, 2, 2,
+ 2, 2, 3, 3,
+ 3, 3, 4, 4,
+ 4, 4, -4, -4,
+ -4, -3, -3, -3,
+ -3, -2, -2, -2,
+ -2, -1, -1, -1,
+ -1, 0, -1, 0,
+ -1, 0, 0, 0,
+ 0, 0, 1, 0,
+ 1, 0, 1, 1,
+ 1, 1, 2, 2,
+ 2, 2, 3, 3,
+ 3, 3, 4, 4,
+ 4, 4, -4, -3,
+ -3, -2, -2, -1,
+ -1, -1, 0, -1,
+ 0, 0, 0, 0,
+ 0, 0, 1, 0,
+ 1, 1, 1, 2,
+ 2, 3, 3, 4,
+ -4, -3, -2, -1,
+ -1, -1, 0, 0,
+ 0, 0, 1, 0,
+ 1, 1, 2, 3
+};
+
+static const u8 sWirelessSignalTiming[][2] =
+{
+ {0, 1},
+ {1, 1},
+ {2, 1},
+ {3, 1},
+ {4, 1},
+ {5, 2},
+ {6, 2},
+ {7, 2},
+ {8, 2},
+ {9, 2},
+ {10, 3},
+ {11, 3},
+ {12, 3},
+ {13, 4},
+ {14, 5},
+ {15, 2},
+ {0, 1},
+ {1, 1},
+ {2, 1},
+ {3, 1},
+ {4, 1},
+ {5, 2},
+ {6, 2},
+ {7, 2},
+ {8, 2},
+ {9, 2},
+ {10, 3},
+ {11, 3},
+ {12, 3},
+ {13, 4},
+ {14, 5},
+ {16, 1},
+ {16, 255},
+ {0, 0}
+};
diff --git a/src/data/union_room.h b/src/data/union_room.h
new file mode 100644
index 000000000..abe91b010
--- /dev/null
+++ b/src/data/union_room.h
@@ -0,0 +1,1044 @@
+// const rom data
+
+ALIGNED(4) const u8 gText_EmptyString[] = _("");
+ALIGNED(4) const u8 gText_Colon[] = _(":");
+ALIGNED(4) const u8 gText_UnkCtrlCodeF907[] = _("{ID}");
+ALIGNED(4) const u8 gText_PleaseStartOver[] = _("Please start over from the beginning.");
+ALIGNED(4) const u8 gText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled.");
+ALIGNED(4) const u8 unref_text_union_room_0[] = _("Awaiting communication\nfrom another player.");
+ALIGNED(4) const u8 gText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player.");
+ALIGNED(4) const u8 gText_AwaitingLink[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready.");
+ALIGNED(4) const u8 gJPText_SingleBattle[] = _("シングルバトルを かいさいする");
+ALIGNED(4) const u8 gJPText_DoubleBattle[] = _("ダブルバトルを かいさいする");
+ALIGNED(4) const u8 gJPText_MultiBattle[] = _("マルチバトルを かいさいする");
+ALIGNED(4) const u8 gJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする");
+ALIGNED(4) const u8 gJPText_Chat[] = _("チャットを かいさいする");
+ALIGNED(4) const u8 gJPText_DistWonderCard[] = _("ふしぎなカードをくばる");
+ALIGNED(4) const u8 gJPText_DistWonderNews[] = _("ふしぎなニュースをくばる");
+ALIGNED(4) const u8 unref_text_union_room_1[] = _("ふしぎなできごとを かいさいする");
+ALIGNED(4) const u8 gJPText_HoldPokemonJump[] = _("なわとびを かいさいする");
+ALIGNED(4) const u8 gJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする");
+ALIGNED(4) const u8 gJPText_HoldBerryPicking[] = _("きのみどりを かいさいする");
+ALIGNED(4) const u8 gJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする");
+ALIGNED(4) const u8 gJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする");
+
+const u8 *const unref_text_ptrs_union_room_0[] = {
+ gJPText_SingleBattle,
+ gJPText_DoubleBattle,
+ gJPText_MultiBattle,
+ gJPText_TradePokemon,
+ gJPText_Chat,
+ gJPText_DistWonderCard,
+ gJPText_DistWonderNews,
+ gJPText_DistWonderCard,
+ gJPText_HoldPokemonJump,
+ gJPText_HoldBerryCrush,
+ gJPText_HoldBerryPicking,
+ gJPText_HoldBerryPicking,
+ gJPText_HoldSpinTrade,
+ gJPText_HoldSpinShop
+};
+
+const u8 gText_1PlayerNeeded[] = _("1 player\nneeded.");
+const u8 gText_2PlayersNeeded[] = _("2 players\nneeded.");
+const u8 gText_3PlayersNeeded[] = _("3 players\nneeded.");
+const u8 gText_4PlayersNeeded[] = _("4 players\nneeded.");
+const u8 gText_2PlayerMode[] = _("2-PLAYER\nMODE");
+const u8 gText_3PlayerMode[] = _("3-PLAYER\nMODE");
+const u8 gText_4PlayerMode[] = _("4-PLAYER\nMODE");
+const u8 gText_5PlayerMode[] = _("5-PLAYER\nMODE");
+
+const u8 *const gUnknown_082EDB60[][5] = {
+ {
+ gText_1PlayerNeeded,
+ gText_2PlayerMode
+ }, {
+ gText_3PlayersNeeded,
+ gText_2PlayersNeeded,
+ gText_1PlayerNeeded,
+ gText_4PlayerMode
+ }, {
+ gText_1PlayerNeeded,
+ gText_2PlayerMode,
+ gText_3PlayerMode,
+ gText_4PlayerMode,
+ gText_5PlayerMode
+ }, {
+ gText_2PlayersNeeded,
+ gText_1PlayerNeeded,
+ gText_3PlayerMode,
+ gText_4PlayerMode,
+ gText_5PlayerMode
+ }, {
+ gText_1PlayerNeeded,
+ gText_2PlayerMode,
+ gText_3PlayerMode,
+ gText_4PlayerMode
+ }
+};
+
+ALIGNED(4) const u8 gUnknown_082EDBC4[] = _("{B_BUTTON}CANCEL");
+ALIGNED(4) const u8 unref_text_union_room_2[] = _("ため\nさんかしゃ ぼしゅうちゅう です!");
+ALIGNED(4) const u8 gUnknown_082EDBE8[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?");
+ALIGNED(4) const u8 gUnknown_082EDC0C[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?");
+ALIGNED(4) const u8 gUnknown_082EDC34[] = _("{STR_VAR_2} contacted you.\nAdd to the members?");
+ALIGNED(4) const u8 gUnknown_082EDC5C[] = _("{STR_VAR_1}!\nAre these members OK?");
+ALIGNED(4) const u8 gUnknown_082EDC78[] = _("Cancel {STR_VAR_1} MODE\nwith these members?");
+ALIGNED(4) const u8 gUnknown_082EDC9C[] = _("An “OK” was sent\nto {STR_VAR_1}.");
+ALIGNED(4) const u8 gUnknown_082EDCB4[] = _("The other TRAINER doesn't appear\nto be available now…\p");
+ALIGNED(4) const u8 gUnknown_082EDCEC[] = _("You can't transmit with a TRAINER\nwho is too far away.\p");
+ALIGNED(4) const u8 gUnknown_082EDD24[] = _("The other TRAINER(S) is/are not\nready yet.\p");
+
+const u8 *const gUnknown_082EDD50[] = {
+ gUnknown_082EDCEC,
+ gUnknown_082EDD24
+};
+
+ALIGNED(4) const u8 gUnknown_082EDD58[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}");
+ALIGNED(4) const u8 gUnknown_082EDD8C[] = _("There is a member who can no\nlonger remain available.\p");
+
+const u8 *const gUnknown_082EDDC4[] = {
+ gUnknown_082EDCB4,
+ gUnknown_082EDD8C
+};
+
+ALIGNED(4) const u8 gUnknown_082EDDCC[] = _("The other TRAINER appears\nunavailable…\p");
+ALIGNED(4) const u8 gUnknown_082EDDF4[] = _("{STR_VAR_1} sent back an “OK”!");
+ALIGNED(4) const u8 gUnknown_082EDE0C[] = _("{STR_VAR_1} OK'd your registration as\na member.");
+ALIGNED(4) const u8 gUnknown_082EDE34[] = _("{STR_VAR_1} replied, “No…”\p");
+ALIGNED(4) const u8 gUnknown_082EDE48[] = _("{STR_VAR_1}!\nAwaiting other members!");
+ALIGNED(4) const u8 gUnknown_082EDE64[] = _("Quit being a member?");
+ALIGNED(4) const u8 gUnknown_082EDE7C[] = _("You stopped being a member.\p");
+
+const u8 *const gUnknown_082EDE9C[] = {
+ NULL,
+ gUnknown_082EDD8C,
+ gUnknown_082EDDCC,
+ NULL,
+ NULL,
+ NULL,
+ gUnknown_082EDE34,
+ NULL,
+ NULL,
+ gUnknown_082EDE7C
+};
+
+ALIGNED(4) const u8 gUnknown_082EDEC4[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established.");
+ALIGNED(4) const u8 gUnknown_082EDF04[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…");
+ALIGNED(4) const u8 gUnknown_082EDF40[] = _("The link with your friend has been\ndropped…");
+ALIGNED(4) const u8 gUnknown_082EDF6C[] = _("{STR_VAR_1} replied, “No…”");
+
+const u8 *const gUnknown_082EDF80[] = {
+ NULL,
+ gUnknown_082EDF40,
+ gUnknown_082EDF40,
+ NULL,
+ NULL,
+ NULL,
+ gUnknown_082EDF6C,
+ NULL,
+ NULL,
+ NULL
+};
+
+ALIGNED(4) const u8 gUnknown_082EDFA8[] = _("Do you want the {STR_VAR_2}\nMODE?");
+ALIGNED(4) const u8 gUnknown_082EDFC4[] = _("Do you want the {STR_VAR_2}\nMODE?");
+
+const u8 *const unref_text_ptrs_union_room_1[] = {
+ gUnknown_082EDFA8,
+ gUnknown_082EDFC4
+};
+
+ALIGNED(4) const u8 unref_text_union_room_3[] = _("Communicating…\nPlease wait.");
+ALIGNED(4) const u8 gUnknown_082EE004[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…");
+ALIGNED(4) const u8 gUnknown_082EE02C[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
+ALIGNED(4) const u8 gUnknown_082EE098[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
+ALIGNED(4) const u8 gUnknown_082EE104[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
+
+const u8 *const gUnknown_082EE17C[] = {
+ gUnknown_082EE02C,
+ gUnknown_082EE098,
+ gUnknown_082EE104
+};
+
+ALIGNED(4) const u8 gUnknown_082EE188[] = _("Hiya! Is there something that you\nwanted to do?");
+ALIGNED(4) const u8 gUnknown_082EE1B8[] = _("Hello!\nWould you like to do something?");
+ALIGNED(4) const u8 gUnknown_082EE1E0[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?");
+ALIGNED(4) const u8 gUnknown_082EE218[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?");
+
+const u8 *const gUnknown_082EE24C[][2] = {
+ {
+ gUnknown_082EE188,
+ gUnknown_082EE1B8
+ }, {
+ gUnknown_082EE1E0,
+ gUnknown_082EE218
+ }
+};
+
+ALIGNED(4) const u8 gUnknown_082EE25C[] = _("Want to do something?");
+ALIGNED(4) const u8 gUnknown_082EE274[] = _("Would you like to do something?");
+ALIGNED(4) const u8 gUnknown_082EE294[] = _("{STR_VAR_1}: What would you like to\ndo now?");
+ALIGNED(4) const u8 unref_text_union_room_4[] = _("{STR_VAR_1}: Want to do anything else?");
+
+const u8 *const unref_text_ptrs_union_room_2[][2] = {
+ {
+ gUnknown_082EE25C,
+ gUnknown_082EE274
+ }, {
+ gUnknown_082EE294,
+ gUnknown_082EE294
+ }
+};
+
+ALIGNED(4) const u8 sText_SomebodyHasContactedYou[] = _("Somebody has contacted you.{PAUSE 60}");
+ALIGNED(4) const u8 sText_XHasContactedYou[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}");
+
+static const u8 *const gUnknown_082EE324[] = {
+ sText_SomebodyHasContactedYou,
+ sText_XHasContactedYou
+};
+
+ALIGNED(4) const u8 sUnionRoom_AwaitingResponseFromTrainer[] = _("Awaiting a response from\nthe other TRAINER…");
+ALIGNED(4) const u8 sUnionRoom_AwaitingResponseFromX[] = _("Awaiting a response from\n{STR_VAR_1}…");
+
+static const u8 *const sUnionRoomTexts_AwaitingResponse[] = {
+ sUnionRoom_AwaitingResponseFromTrainer,
+ sUnionRoom_AwaitingResponseFromX
+};
+
+ALIGNED(4) const u8 sText_ShowTrainerCard[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?");
+ALIGNED(4) const u8 sText_BattleChallenge[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?");
+ALIGNED(4) const u8 sText_ChatInvitation[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?");
+ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}\pin exchange for a\nLv. {SPECIAL_F7 0x02} {SPECIAL_F7 0x03}.\pWill you accept this trade\noffer?");
+ALIGNED(4) const u8 sText_OfferToTradeEgg[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?");
+ALIGNED(4) const u8 sText_ChatDropped[] = _("The chat has been dropped.\p");
+ALIGNED(4) const u8 sText_OfferDeclined1[] = _("You declined the offer.\p");
+ALIGNED(4) const u8 sText_OfferDeclined2[] = _("You declined the offer.\p");
+ALIGNED(4) const u8 sText_ChatEnded[] = _("The chat was ended.\p");
+
+// Unused
+static const u8 *const sUnionRoomTexts_Invitation[] = {
+ sText_ShowTrainerCard,
+ sText_BattleChallenge,
+ sText_ChatInvitation,
+ sText_OfferToTradeMon
+};
+
+ALIGNED(4) const u8 sText_JoinChatMale[] = _("Oh, hey! We're in a chat right now.\nWant to join us?");
+ALIGNED(4) const u8 sText_PlayerJoinChatMale[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?");
+ALIGNED(4) const u8 sText_JoinChatFemale[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?");
+ALIGNED(4) const u8 sText_PlayerJoinChatFemale[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?");
+
+const u8 *const sUnionRoomTexts_JoinChat[][GENDER_COUNT] = {
+ {
+ sText_JoinChatMale,
+ sText_JoinChatFemale
+ }, {
+ sText_PlayerJoinChatMale,
+ sText_PlayerJoinChatFemale
+ }
+};
+
+ALIGNED(4) const u8 sText_TrainerAppearsBusy[] = _("……\nThe TRAINER appears to be busy…\p");
+ALIGNED(4) const u8 gUnknown_082EE6EC[] = _("A battle, huh?\nAll right, just give me some time.");
+ALIGNED(4) const u8 gUnknown_082EE720[] = _("You want to chat, huh?\nSure, just wait a little.");
+ALIGNED(4) const u8 gUnknown_082EE754[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD.");
+ALIGNED(4) const u8 gUnknown_082EE78C[] = _("A battle? Of course, but I need\ntime to get ready.");
+ALIGNED(4) const u8 gUnknown_082EE7C0[] = _("Did you want to chat?\nOkay, but please wait a moment.");
+ALIGNED(4) const u8 gUnknown_082EE7F8[] = _("As my introduction, I'll show you\nmy TRAINER CARD.");
+
+const u8 *const gUnknown_082EE82C[][4] = {
+ {
+ gUnknown_082EE6EC,
+ gUnknown_082EE720,
+ NULL,
+ gUnknown_082EE754
+ }, {
+ gUnknown_082EE78C,
+ gUnknown_082EE7C0,
+ NULL,
+ gUnknown_082EE7F8
+ }
+};
+
+ALIGNED(4) const u8 unref_text_union_room_5[] = _("You want to chat, huh?\nSure, just wait a little.");
+ALIGNED(4) const u8 gUnknown_082EE880[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}");
+ALIGNED(4) const u8 gUnknown_082EE8B8[] = _("All right!\nLet's chat!{PAUSE 60}");
+ALIGNED(4) const u8 gUnknown_082EE8D4[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}");
+ALIGNED(4) const u8 gUnknown_082EE904[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}");
+ALIGNED(4) const u8 gUnknown_082EE92C[] = _("The trade will be started.{PAUSE 60}");
+ALIGNED(4) const u8 gUnknown_082EE94C[] = _("The battle will be started.{PAUSE 60}");
+ALIGNED(4) const u8 gUnknown_082EE96C[] = _("Entering the chat…{PAUSE 60}");
+
+const u8 *const gUnknown_082EE984[][2][3] = {
+ {
+ {
+ gUnknown_082EE94C,
+ gUnknown_082EE96C,
+ gUnknown_082EE92C
+ }, {
+ gUnknown_082EE94C,
+ gUnknown_082EE96C,
+ gUnknown_082EE92C
+ }
+ }, {
+ {
+ gUnknown_082EE880,
+ gUnknown_082EE8B8,
+ gUnknown_082EE92C
+ }, {
+ gUnknown_082EE8D4,
+ gUnknown_082EE904,
+ gUnknown_082EE92C
+ }
+ }
+};
+
+ALIGNED(4) const u8 gUnknown_082EE9B4[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p");
+ALIGNED(4) const u8 gUnknown_082EEA14[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p");
+
+const u8 *const gUnknown_082EEA68[] = {
+ gUnknown_082EE9B4,
+ gUnknown_082EEA14
+};
+
+ALIGNED(4) const u8 gUnknown_082EEA70[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p");
+ALIGNED(4) const u8 gUnknown_082EEAC0[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p");
+
+const u8 *const gUnknown_082EEB08[] = {
+ gUnknown_082EEA70,
+ gUnknown_082EEAC0
+};
+
+ALIGNED(4) const u8 gUnknown_082EEB10[] = _("If you want to do something with\nme, just give me a shout!\p");
+ALIGNED(4) const u8 gUnknown_082EEB4C[] = _("If you want to do something with\nme, don't be shy.\p");
+
+const u8 *const gUnknown_082EEB80[] = {
+ gUnknown_082EEB10,
+ gUnknown_082EEB4C
+};
+
+ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p");
+ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p");
+ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p");
+ALIGNED(4) const u8 sText_DeclineBattleMale[] = _("Oh, all right.\nCome see me anytime, okay?\p");
+ALIGNED(4) const u8 sText_DeclineBattleFemale[] = _("Oh…\nPlease come by anytime.\p");
+
+const u8 *const sUnionRoomTexts_DeclineBattle[GENDER_COUNT] = {
+ [MALE] = sText_DeclineBattleMale,
+ [FEMALE] = sText_DeclineBattleFemale
+};
+
+ALIGNED(4) const u8 gUnknown_082EECA4[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p");
+ALIGNED(4) const u8 gUnknown_082EECEC[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p");
+
+const u8 *const gUnknown_082EED3C[] = {
+ gUnknown_082EECA4,
+ gUnknown_082EECEC
+};
+
+ALIGNED(4) const u8 gUnknown_082EED44[] = _("Whoa!\nI can tell you're pretty tough!\p");
+ALIGNED(4) const u8 gUnknown_082EED6C[] = _("You used that move?\nThat's good strategy!\p");
+ALIGNED(4) const u8 gUnknown_082EED98[] = _("Way to go!\nThat was an eye-opener!\p");
+ALIGNED(4) const u8 gUnknown_082EEDBC[] = _("Oh! How could you use that\nPOKéMON in that situation?\p");
+ALIGNED(4) const u8 gUnknown_082EEDF4[] = _("That POKéMON…\nIt's been raised really well!\p");
+ALIGNED(4) const u8 gUnknown_082EEE24[] = _("That's it!\nThis is the right move now!\p");
+ALIGNED(4) const u8 gUnknown_082EEE4C[] = _("That's awesome!\nYou can battle that way?\p");
+ALIGNED(4) const u8 gUnknown_082EEE78[] = _("You have exquisite timing for\nswitching POKéMON!\p");
+
+const u8 *const gUnknown_082EEEAC[GENDER_COUNT][4] = {
+ [MALE] =
+ {
+ gUnknown_082EED44,
+ gUnknown_082EED6C,
+ gUnknown_082EED98,
+ gUnknown_082EEDBC
+ },
+ [FEMALE] =
+ {
+ gUnknown_082EEDF4,
+ gUnknown_082EEE24,
+ gUnknown_082EEE4C,
+ gUnknown_082EEE78
+ }
+};
+
+ALIGNED(4) const u8 gUnknown_082EEECC[] = _("Oh, I see!\nThis is educational!\p");
+ALIGNED(4) const u8 gUnknown_082EEEF0[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p");
+ALIGNED(4) const u8 gUnknown_082EEF2C[] = _("Oh?\nSomething like that happened.\p");
+ALIGNED(4) const u8 gUnknown_082EEF50[] = _("Hmhm… What?\nSo is this what you're saying?\p");
+ALIGNED(4) const u8 gUnknown_082EEF7C[] = _("Is that right?\nI didn't know that.\p");
+ALIGNED(4) const u8 gUnknown_082EEFA0[] = _("Ahaha!\nWhat is that about?\p");
+ALIGNED(4) const u8 gUnknown_082EEFBC[] = _("Yes, that's exactly it!\nThat's what I meant.\p");
+ALIGNED(4) const u8 gUnknown_082EEFEC[] = _("In other words…\nYes! That's right!\p");
+
+const u8 *const gUnknown_082EF010[GENDER_COUNT][4] = {
+ [MALE] =
+ {
+ gUnknown_082EEECC,
+ gUnknown_082EEEF0,
+ gUnknown_082EEF2C,
+ gUnknown_082EEF50
+ },
+ [FEMALE] =
+ {
+ gUnknown_082EEF7C,
+ gUnknown_082EEFA0,
+ gUnknown_082EEFBC,
+ gUnknown_082EEFEC
+ }
+};
+
+ALIGNED(4) const u8 gUnknown_082EF030[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p");
+ALIGNED(4) const u8 gUnknown_082EF06C[] = _("I hope I get to know you better!\p");
+ALIGNED(4) const u8 gUnknown_082EF090[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p");
+ALIGNED(4) const u8 gUnknown_082EF0D0[] = _("Glad to meet you.\nPlease don't be a stranger!\p");
+
+const u8 *const gUnknown_082EF100[GENDER_COUNT][2] = {
+ [MALE] =
+ {
+ gUnknown_082EF030,
+ gUnknown_082EF06C
+ },
+ [FEMALE] =
+ {
+ gUnknown_082EF090,
+ gUnknown_082EF0D0
+ }
+};
+
+ALIGNED(4) const u8 sText_MaleTraded1[] = _("Yeahah!\nI really wanted this POKéMON!\p");
+ALIGNED(4) const u8 sText_MaleTraded2[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p");
+ALIGNED(4) const u8 sText_FemaleTraded1[] = _("I'm trading POKéMON right now.\p");
+ALIGNED(4) const u8 sText_FemaleTraded2[] = _("I finally got that POKéMON I\nwanted in a trade!\p");
+
+const u8 *const sUnionRoomTexts_Traded[GENDER_COUNT][4] = {
+ [MALE] =
+ {
+ sText_MaleTraded1,
+ sText_MaleTraded2
+ },
+ [FEMALE] =
+ {
+ sText_FemaleTraded1,
+ sText_FemaleTraded2
+ }
+};
+
+ALIGNED(4) const u8 sText_XCheckedTradingBoard[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p");
+ALIGNED(4) const u8 sText_RegisterMonAtTradingBoard[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?");
+ALIGNED(4) const u8 sText_TradingBoardInfo[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?");
+ALIGNED(4) const u8 sText_ThankYouForRegistering[] = _("We have registered your POKéMON for\ntrade on the TRADING BOARD.\pThank you for using this service!\p"); // unused
+ALIGNED(4) const u8 sText_NobodyHasRegistered[] = _("Nobody has registered any POKéMON\nfor trade on the TRADING BOARD.\p\n"); // unused
+ALIGNED(4) const u8 sText_ChooseRequestedMonType[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n");
+ALIGNED(4) const u8 sText_WhichMonWillYouOffer[] = _("Which of your party POKéMON will\nyou offer in trade?\p");
+ALIGNED(4) const u8 sText_RegistrationCanceled[] = _("Registration has been canceled.\p");
+ALIGNED(4) const u8 sText_RegistraionCompleted[] = _("Registration has been completed.\p");
+ALIGNED(4) const u8 sText_TradeCanceled[] = _("The trade has been canceled.\p");
+ALIGNED(4) const u8 sText_CancelRegistrationOfMon[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?");
+ALIGNED(4) const u8 sText_CancelRegistrationOfEgg[] = _("Cancel the registration of your\nEGG?");
+ALIGNED(4) const u8 sText_RegistrationCanceled2[] = _("The registration has been canceled.\p");
+ALIGNED(4) const u8 sText_TradeTrainersWillBeListed[] = _("TRAINERS wishing to make a trade\nwill be listed."); // unused
+ALIGNED(4) const u8 sText_ChooseTrainerToTradeWith[] = _("Please choose the TRAINER with whom\nyou would like to trade POKéMON."); // unused
+ALIGNED(4) const u8 sText_AskTrainerToMakeTrade[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?");
+ALIGNED(4) const u8 sText_AwaitingResponseFromTrainer[] = _("Awaiting a response from\nthe other TRAINER…"); // unused
+ALIGNED(4) const u8 sText_NotRegisteredAMonForTrade[] = _("You have not registered a POKéMON\nfor trading.\p"); // unused
+ALIGNED(4) const u8 sText_DontHaveTypeTrainerWants[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p");
+ALIGNED(4) const u8 sText_DontHaveEggTrainerWants[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p");
+ALIGNED(4) const u8 sText_CantTradeMonRightNow[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p");
+ALIGNED(4) const u8 sText_CantTradePartnersMonRightNow[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p");
+
+// unused
+const u8 *const sUnionRoomTexts_CantTradeRightNow[] = {
+ sText_CantTradeMonRightNow,
+ sText_CantTradePartnersMonRightNow
+};
+
+ALIGNED(4) const u8 sText_TradeOfferRejected[] = _("Your trade offer was rejected.\p");
+ALIGNED(4) const u8 sText_EggTrade[] = _("EGG TRADE");
+ALIGNED(4) const u8 gUnknown_082EF7DC[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL");
+ALIGNED(4) const u8 gUnknown_082EF7F8[] = _("Please choose a TRAINER.");
+ALIGNED(4) const u8 gUnknown_082EF814[] = _("Please choose a TRAINER for\na SINGLE BATTLE.");
+ALIGNED(4) const u8 gUnknown_082EF844[] = _("Please choose a TRAINER for\na DOUBLE BATTLE.");
+ALIGNED(4) const u8 gUnknown_082EF874[] = _("Please choose the LEADER\nfor a MULTI BATTLE.");
+ALIGNED(4) const u8 gUnknown_082EF8A4[] = _("Please choose the TRAINER to\ntrade with.");
+ALIGNED(4) const u8 gUnknown_082EF8D0[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS.");
+ALIGNED(4) const u8 gUnknown_082EF908[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS.");
+ALIGNED(4) const u8 gUnknown_082EF940[] = _("Jump with mini POKéMON!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EF974[] = _("BERRY CRUSH!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EF99C[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EF9CC[] = _("BERRY BLENDER!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EF9F8[] = _("RECORD CORNER!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EFA24[] = _("COOLNESS CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EFA50[] = _("BEAUTY CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EFA7C[] = _("CUTENESS CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EFAA8[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EFAD8[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EFB08[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 gUnknown_082EFB3C[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER.");
+
+const u8 *const gUnknown_082EFB70[] = {
+ gUnknown_082EF814,
+ gUnknown_082EF844,
+ gUnknown_082EF874,
+ gUnknown_082EF8A4,
+ gUnknown_082EF940,
+ gUnknown_082EF974,
+ gUnknown_082EF99C,
+ gUnknown_082EF8D0,
+ gUnknown_082EF908,
+ NULL,
+ NULL,
+ NULL,
+ gUnknown_082EF9F8,
+ gUnknown_082EF9CC,
+ NULL,
+ gUnknown_082EFA24,
+ gUnknown_082EFA50,
+ gUnknown_082EFA7C,
+ gUnknown_082EFAA8,
+ gUnknown_082EFAD8,
+ gUnknown_082EFB08,
+ gUnknown_082EFB3C
+};
+
+ALIGNED(4) const u8 gUnknown_082EFBC8[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait...");
+ALIGNED(4) const u8 unref_text_union_room_12[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p");
+ALIGNED(4) const u8 gUnknown_082EFC3C[] = _("Awaiting {STR_VAR_1}'s response…");
+ALIGNED(4) const u8 gUnknown_082EFC54[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait.");
+ALIGNED(4) const u8 gUnknown_082EFC90[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM.");
+ALIGNED(4) const u8 unref_text_union_room_13[] = _("Please wait for other TRAINERS to\ngather and get ready.");
+ALIGNED(4) const u8 gUnknown_082EFD04[] = _("No CARDS appear to be shared \nright now.");
+ALIGNED(4) const u8 gUnknown_082EFD30[] = _("No NEWS appears to be shared\nright now.");
+
+const u8 *const gUnknown_082EFD58[] = {
+ gUnknown_082EFD04,
+ gUnknown_082EFD30
+};
+
+ALIGNED(4) const u8 gUnknown_082EFD60[] = _("BATTLE");
+ALIGNED(4) const u8 gUnknown_082EFD68[] = _("CHAT");
+ALIGNED(4) const u8 gUnknown_082EFD70[] = _("GREETINGS");
+ALIGNED(4) const u8 gUnknown_082EFD7C[] = _("EXIT");
+ALIGNED(4) const u8 gUnknown_082EFD84[] = _("EXIT");
+ALIGNED(4) const u8 gUnknown_082EFD8C[] = _("INFO");
+ALIGNED(4) const u8 gUnknown_082EFD94[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV.");
+ALIGNED(4) const u8 gUnknown_082EFDB0[] = _("SINGLE BATTLE");
+ALIGNED(4) const u8 gUnknown_082EFDC0[] = _("DOUBLE BATTLE");
+ALIGNED(4) const u8 gUnknown_082EFDD0[] = _("MULTI BATTLE");
+ALIGNED(4) const u8 gUnknown_082EFDE0[] = _("POKéMON TRADES");
+ALIGNED(4) const u8 gUnknown_082EFDF0[] = _("CHAT");
+ALIGNED(4) const u8 gUnknown_082EFDF8[] = _("CARDS");
+ALIGNED(4) const u8 gUnknown_082EFE00[] = _("WONDER CARDS");
+ALIGNED(4) const u8 gUnknown_082EFE10[] = _("WONDER NEWS");
+ALIGNED(4) const u8 gUnknown_082EFE1C[] = _("POKéMON JUMP");
+ALIGNED(4) const u8 gUnknown_082EFE2C[] = _("BERRY CRUSH");
+ALIGNED(4) const u8 gUnknown_082EFE38[] = _("BERRY-PICKING");
+ALIGNED(4) const u8 gUnknown_082EFE48[] = _("SEARCH");
+ALIGNED(4) const u8 gUnknown_082EFE50[] = _("BERRY BLENDER");
+ALIGNED(4) const u8 gUnknown_082EFE60[] = _("RECORD CORNER");
+ALIGNED(4) const u8 gUnknown_082EFE70[] = _("COOL CONTEST");
+ALIGNED(4) const u8 gUnknown_082EFE80[] = _("BEAUTY CONTEST");
+ALIGNED(4) const u8 gUnknown_082EFE90[] = _("CUTE CONTEST");
+ALIGNED(4) const u8 gUnknown_082EFEA0[] = _("SMART CONTEST");
+ALIGNED(4) const u8 gUnknown_082EFEB0[] = _("TOUGH CONTEST");
+ALIGNED(4) const u8 gUnknown_082EFEC0[] = _("BATTLE TOWER LV. 50");
+ALIGNED(4) const u8 gUnknown_082EFED4[] = _("BATTLE TOWER OPEN LEVEL");
+ALIGNED(4) const u8 gUnknown_082EFEEC[] = _("It's a NORMAL CARD.");
+ALIGNED(4) const u8 gUnknown_082EFF00[] = _("It's a BRONZE CARD!");
+ALIGNED(4) const u8 gUnknown_082EFF14[] = _("It's a COPPER CARD!");
+ALIGNED(4) const u8 gUnknown_082EFF28[] = _("It's a SILVER CARD!");
+ALIGNED(4) const u8 gUnknown_082EFF3C[] = _("It's a GOLD CARD!");
+
+const u8 *const gUnknown_082EFF50[] = {
+ gUnknown_082EFEEC,
+ gUnknown_082EFF00,
+ gUnknown_082EFF14,
+ gUnknown_082EFF28,
+ gUnknown_082EFF3C
+};
+
+ALIGNED(4) const u8 gUnknown_082EFF64[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p");
+ALIGNED(4) const u8 gUnknown_082EFFA4[] = _("BATTLES: WINS: {SPECIAL_F7 0x00} LOSSES: {SPECIAL_F7 0x02}\nTRADES: {SPECIAL_F7 0x03}\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p");
+ALIGNED(4) const u8 gUnknown_082EFFDC[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}");
+ALIGNED(4) const u8 gUnknown_082EFFFC[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}");
+
+const u8 *const gUnknown_082F0018[] = {
+ gUnknown_082EFFDC,
+ gUnknown_082EFFFC
+};
+
+ALIGNED(4) const u8 gUnknown_082F0020[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}");
+
+const u8 *const gUnknown_082F0048[] = {
+ gText_EmptyString,
+ gUnknown_082EFDB0,
+ gUnknown_082EFDC0,
+ gUnknown_082EFDD0,
+ gUnknown_082EFDE0,
+ gUnknown_082EFDF0,
+ gUnknown_082EFE00,
+ gUnknown_082EFE10,
+ gUnknown_082EFDF8,
+ gUnknown_082EFE1C,
+ gUnknown_082EFE2C,
+ gUnknown_082EFE38,
+ gUnknown_082EFE48,
+ gText_EmptyString,
+ gUnknown_082EFED4,
+ gUnknown_082EFE60,
+ gUnknown_082EFE50,
+ gText_EmptyString,
+ gText_EmptyString,
+ gText_EmptyString,
+ gText_EmptyString,
+ gUnknown_082EFE00,
+ gUnknown_082EFE10,
+ gUnknown_082EFE70,
+ gUnknown_082EFE80,
+ gUnknown_082EFE90,
+ gUnknown_082EFEA0,
+ gUnknown_082EFEB0,
+ gUnknown_082EFEC0
+};
+
+const struct WindowTemplate gUnknown_082F00BC = {
+ .bg = 0x00,
+ .tilemapLeft = 0x00,
+ .tilemapTop = 0x00,
+ .width = 0x1E,
+ .height = 0x02,
+ .paletteNum = 0x0F,
+ .baseBlock = 0x0008
+};
+
+const u32 gUnknown_082F00C4[] = {
+ 0x0201,
+ 0x0202,
+ 0x0403,
+ 0x0204,
+ 0x2509,
+ 0x250a,
+ 0x350b,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x0000,
+ 0x240f,
+ 0x2410,
+ 0x0000,
+ 0x2417,
+ 0x2418,
+ 0x2419,
+ 0x241a,
+ 0x241b,
+ 0x021c,
+ 0x020e
+};
+
+const struct WindowTemplate gUnknown_082F011C = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x03,
+ .width = 0x0d,
+ .height = 0x08,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x0044
+};
+
+const struct WindowTemplate gUnknown_082F0124 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x03,
+ .width = 0x0d,
+ .height = 0x0a,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x0044
+};
+
+const struct WindowTemplate gUnknown_082F012C = {
+ .bg = 0x00,
+ .tilemapLeft = 0x10,
+ .tilemapTop = 0x03,
+ .width = 0x07,
+ .height = 0x04,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x00c6
+};
+
+const struct ListMenuItem gUnknown_082F0134[] = {
+ { gText_EmptyString, 0 },
+ { gText_EmptyString, 1 },
+ { gText_EmptyString, 2 },
+ { gText_EmptyString, 3 },
+ { gText_EmptyString, 4 }
+};
+
+const struct ListMenuTemplate gUnknown_082F015C = {
+ .items = gUnknown_082F0134,
+ .moveCursorFunc = NULL,
+ .itemPrintFunc = sub_8013278,
+ .totalItems = 5,
+ .maxShowed = 5,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 0,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 1
+};
+
+const struct WindowTemplate gUnknown_082F0174 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x03,
+ .width = 0x11,
+ .height = 0x0a,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x0044
+};
+
+const struct WindowTemplate gUnknown_082F017C = {
+ .bg = 0x00,
+ .tilemapLeft = 0x14,
+ .tilemapTop = 0x03,
+ .width = 0x07,
+ .height = 0x04,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x00ee
+};
+
+const struct ListMenuItem gUnknown_082F0184[] = {
+ { gText_EmptyString, 0 },
+ { gText_EmptyString, 1 },
+ { gText_EmptyString, 2 },
+ { gText_EmptyString, 3 },
+ { gText_EmptyString, 4 },
+ { gText_EmptyString, 5 },
+ { gText_EmptyString, 6 },
+ { gText_EmptyString, 7 },
+ { gText_EmptyString, 8 },
+ { gText_EmptyString, 9 },
+ { gText_EmptyString, 10 },
+ { gText_EmptyString, 11 },
+ { gText_EmptyString, 12 },
+ { gText_EmptyString, 13 },
+ { gText_EmptyString, 14 },
+ { gText_EmptyString, 15 }
+};
+
+const struct ListMenuTemplate gUnknown_082F0204 = {
+ .items = gUnknown_082F0184,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = sub_8013DF4,
+ .totalItems = 16,
+ .maxShowed = 5,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 1,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct WindowTemplate gUnknown_082F021C = {
+ .bg = 0x00,
+ .tilemapLeft = 0x14,
+ .tilemapTop = 0x05,
+ .width = 0x10,
+ .height = 0x08,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x0001
+};
+
+const struct ListMenuItem gUnknown_082F0224[] = {
+ { gUnknown_082EFD70, 0x208 },
+ { gUnknown_082EFD60, 0x241 },
+ { gUnknown_082EFD68, 0x245 },
+ { gUnknown_082EFD7C, 0x040 }
+};
+
+const struct ListMenuTemplate gUnknown_082F0244 = {
+ .items = gUnknown_082F0224,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = NULL,
+ .totalItems = 4,
+ .maxShowed = 4,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct WindowTemplate gUnknown_082F025C = {
+ .bg = 0x00,
+ .tilemapLeft = 0x12,
+ .tilemapTop = 0x07,
+ .width = 0x10,
+ .height = 0x06,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x0001
+};
+
+const struct ListMenuItem gUnknown_082F0264[] = {
+ { gText_Register, 1 },
+ { gUnknown_082EFD8C, 2 },
+ { gUnknown_082EFD7C, 3 }
+};
+
+const struct ListMenuTemplate gUnknown_082F027C = {
+ .items = gUnknown_082F0264,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = NULL,
+ .totalItems = 3,
+ .maxShowed = 3,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct WindowTemplate gUnknown_082F0294 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x14,
+ .tilemapTop = 0x01,
+ .width = 0x10,
+ .height = 0x0c,
+ .paletteNum = 0x0f,
+ .baseBlock = 0x0001
+};
+
+static const struct ListMenuItem sTradingBoardTypes[] = {
+ { gTypeNames[TYPE_NORMAL], TYPE_NORMAL },
+ { gTypeNames[TYPE_FIRE], TYPE_FIRE },
+ { gTypeNames[TYPE_WATER], TYPE_WATER },
+ { gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC },
+ { gTypeNames[TYPE_GRASS], TYPE_GRASS },
+ { gTypeNames[TYPE_ICE], TYPE_ICE },
+ { gTypeNames[TYPE_GROUND], TYPE_GROUND },
+ { gTypeNames[TYPE_ROCK], TYPE_ROCK },
+ { gTypeNames[TYPE_FLYING], TYPE_FLYING },
+ { gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC },
+ { gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING },
+ { gTypeNames[TYPE_POISON], TYPE_POISON },
+ { gTypeNames[TYPE_BUG], TYPE_BUG },
+ { gTypeNames[TYPE_GHOST], TYPE_GHOST },
+ { gTypeNames[TYPE_DRAGON], TYPE_DRAGON },
+ { gTypeNames[TYPE_STEEL], TYPE_STEEL },
+ { gTypeNames[TYPE_DARK], TYPE_DARK },
+ { gUnknown_082EFD7C, NUMBER_OF_MON_TYPES }
+};
+
+const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
+ .items = sTradingBoardTypes,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = NULL,
+ .totalItems = NUMBER_OF_MON_TYPES,
+ .maxShowed = 6,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct WindowTemplate gUnknown_082F0344 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x01,
+ .width = 0x1c,
+ .height = 0x02,
+ .paletteNum = 0x0d,
+ .baseBlock = 0x0001
+};
+
+const struct WindowTemplate gUnknown_082F034C = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x05,
+ .width = 0x1c,
+ .height = 0x0c,
+ .paletteNum = 0x0d,
+ .baseBlock = 0x0039
+};
+
+const struct ListMenuItem gUnknown_082F0354[] = {
+ { gText_EmptyString, -3 },
+ { gText_EmptyString, 0 },
+ { gText_EmptyString, 1 },
+ { gText_EmptyString, 2 },
+ { gText_EmptyString, 3 },
+ { gText_EmptyString, 4 },
+ { gText_EmptyString, 5 },
+ { gText_EmptyString, 6 },
+ { gText_EmptyString, 7 },
+ { gUnknown_082EFD84, 8 }
+};
+
+const struct ListMenuTemplate gUnknown_082F03A4 = {
+ .items = gUnknown_082F0354,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = sub_8017BE8,
+ .totalItems = 10,
+ .maxShowed = 6,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 14,
+ .fillValue = 15,
+ .cursorShadowPal = 13,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 0,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct WindowTemplate UnrefWindowTemplate_082F03B4 = {
+ .bg = 0x00,
+ .tilemapLeft = 0x01,
+ .tilemapTop = 0x05,
+ .width = 0x1c,
+ .height = 0x0c,
+ .paletteNum = 0x0d,
+ .baseBlock = 0x0039
+};
+
+const struct ListMenuItem gUnknown_082F03C4[] = {
+ { gText_EmptyString, 0 },
+ { gText_EmptyString, 1 },
+ { gText_EmptyString, 2 },
+ { gText_EmptyString, 3 },
+ { gText_EmptyString, 4 },
+ { gText_EmptyString, 5 },
+ { gText_EmptyString, 6 },
+ { gText_EmptyString, 7 },
+ { gText_EmptyString, 8 },
+ { gText_EmptyString, 9 },
+ { gText_EmptyString, 10 },
+ { gText_EmptyString, 11 },
+ { gText_EmptyString, 12 },
+ { gText_EmptyString, 13 },
+ { gText_EmptyString, 14 },
+ { gText_EmptyString, 15 }
+};
+
+const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = {
+ .items = gUnknown_082F03C4,
+ .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
+ .itemPrintFunc = nullsub_14,
+ .totalItems = 16,
+ .maxShowed = 4,
+ .windowId = 0,
+ .header_X = 0,
+ .item_X = 8,
+ .cursor_X = 0,
+ .upText_Y = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .itemVerticalPadding = 0,
+ .scrollMultiple = 1,
+ .fontId = 1,
+ .cursorKind = 0
+};
+
+const struct UnkStruct_Shared gUnknown_082F045C = {0};
+
+ALIGNED(4) const u8 gUnknown_082F0474[] = {0x01, 0xff};
+ALIGNED(4) const u8 gUnknown_082F0478[] = {0x02, 0xff};
+ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff};
+ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff};
+ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff};
+ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff};
+ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff};
+ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff};
+ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff};
+ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff};
+ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff};
+
+const u8 *const gUnknown_082F04D8[] = {
+ gUnknown_082F0474,
+ gUnknown_082F0478,
+ gUnknown_082F047C,
+ gUnknown_082F0480,
+ gUnknown_082F0484,
+ gUnknown_082F0488,
+ gUnknown_082F048C,
+ gUnknown_082F0490,
+ gUnknown_082F0494,
+ gUnknown_082F0498,
+ gUnknown_082F04A4,
+ gUnknown_082F04A8,
+ gUnknown_082F04B4,
+ gUnknown_082F04B8,
+ NULL,
+ gUnknown_082F04BC,
+ gUnknown_082F04C0,
+ gUnknown_082F04C4,
+ gUnknown_082F04C8,
+ gUnknown_082F04CC,
+ gUnknown_082F04D0,
+ gUnknown_082F04D4
+};
+
+const u8 gUnknown_082F0530[] = {
+ 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15,
+ 0x16, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x0e, 0x00, 0x00
+};
diff --git a/src/data/wild_encounters.json b/src/data/wild_encounters.json
index ea555bd32..19aa40b00 100755
--- a/src/data/wild_encounters.json
+++ b/src/data/wild_encounters.json
@@ -26,7 +26,12 @@
"type": "fishing_mons",
"encounter_rates": [
70, 30, 60, 20, 20, 40, 40, 15, 4, 1
- ]
+ ],
+ "groups": {
+ "old_rod": [0, 1],
+ "good_rod": [2, 3, 4],
+ "super_rod": [5, 6, 7, 8, 9]
+ }
}
],
"encounters": [
diff --git a/src/data/wild_encounters.json.txt b/src/data/wild_encounters.json.txt
index 85755ddec..bf848249f 100755
--- a/src/data/wild_encounters.json.txt
+++ b/src/data/wild_encounters.json.txt
@@ -3,14 +3,26 @@
## for wild_encounter_group in wild_encounter_groups
{% if wild_encounter_group.for_maps %}
## for wild_encounter_field in wild_encounter_group.fields
+{% if not existsIn(wild_encounter_field, "groups") %}
## for encounter_rate in wild_encounter_field.encounter_rates
-{% if trackVar(encounter_rate, 100) %}
+{% if loop.index == 0 %}
#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} {{ encounter_rate }} {% else %}#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ subtract(loop.index, 1) }} + {{ encounter_rate }}{% endif %} {{ setVarInt(wild_encounter_field.type, loop.index) }}
## endfor
#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_TOTAL (ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ getVar(wild_encounter_field.type) }})
+{% else %}
+## for field_subgroup_key, field_subgroup_subarray in wild_encounter_field.groups
+## for field_subgroup_index in field_subgroup_subarray
+{% if loop.index == 0 %}
+#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ field_subgroup_index }} {{ at(wild_encounter_field.encounter_rates, field_subgroup_index) }} {% else %}#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ field_subgroup_index }} ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ getVar("previous_slot") }} + {{ at(wild_encounter_field.encounter_rates, field_subgroup_index) }}{% endif %}{{ setVarInt(concat(wild_encounter_field.type, field_subgroup_key), field_subgroup_index) }}{{ setVarInt("previous_slot", field_subgroup_index) }}
+## endfor
+#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_TOTAL (ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ getVar(concat(wild_encounter_field.type, field_subgroup_key)) }})
+## endfor
+{% endif %}
## endfor
{% endif %}
+
+
## for encounter in wild_encounter_group.encounters
{% if existsIn(encounter, "land_mons") %}
const struct WildPokemon {{ encounter.base_label }}_LandMons[] =
diff --git a/src/daycare.c b/src/daycare.c
index e5445ee21..42c69465b 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -231,11 +231,8 @@ static void ApplyDaycareExperience(struct Pokemon *mon)
while ((learnedMove = MonTryLearningNewMove(mon, firstMove)) != 0)
{
firstMove = FALSE;
- if (learnedMove == 0xFFFF)
- {
- // Mon already knows 4 moves.
+ if (learnedMove == MON_HAS_MAX_MOVES)
DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn);
- }
}
}
else
@@ -666,7 +663,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru
{
if (sHatchedEggFatherMoves[i] == sHatchedEggEggMoves[j])
{
- if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == 0xFFFF)
+ if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES)
DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]);
break;
}
@@ -685,7 +682,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru
{
if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01_FOCUS_PUNCH + j) && CanMonLearnTMHM(egg, j))
{
- if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == 0xFFFF)
+ if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES)
DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]);
}
}
@@ -710,7 +707,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru
{
if (sHatchedEggLevelUpMoves[j] != MOVE_NONE && sHatchedEggFinalMoves[i] == sHatchedEggLevelUpMoves[j])
{
- if (GiveMoveToMon(egg, sHatchedEggFinalMoves[i]) == 0xFFFF)
+ if (GiveMoveToMon(egg, sHatchedEggFinalMoves[i]) == MON_HAS_MAX_MOVES)
DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFinalMoves[i]);
break;
}
@@ -755,7 +752,7 @@ static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *dayca
if (motherItem == ITEM_LIGHT_BALL || fatherItem == ITEM_LIGHT_BALL)
{
- if (GiveMoveToMon(mon, MOVE_VOLT_TACKLE) == 0xFFFF)
+ if (GiveMoveToMon(mon, MOVE_VOLT_TACKLE) == MON_HAS_MAX_MOVES)
DeleteFirstMoveAndGiveMoveToMon(mon, MOVE_VOLT_TACKLE);
}
}
@@ -1295,6 +1292,6 @@ void ShowDaycareLevelMenu(void)
void ChooseSendDaycareMon(void)
{
- sub_81B9328();
+ ChooseMonForDaycare();
gMain.savedCallback = CB2_ReturnToField;
}
diff --git a/src/decompress.c b/src/decompress.c
index 46e4ef614..5e85e065f 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "data.h"
#include "decompress.h"
#include "pokemon.h"
diff --git a/src/decoration.c b/src/decoration.c
index 4efeb19b1..2a47dd553 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "decoration.h"
#include "decoration_inventory.h"
@@ -40,6 +40,7 @@
#define PLACE_DECORATION_SELECTOR_TAG 0xbe5
#define PLACE_DECORATION_PLAYER_TAG 0x008
+#define NUM_DECORATION_FLAGS (FLAG_DECORATION_14 - FLAG_DECORATION_0)
struct DecorationItemsMenu
{
@@ -69,8 +70,8 @@ struct DecorRearrangementDataBuffer
EWRAM_DATA u8 *gCurDecorationItems = NULL;
EWRAM_DATA static u8 sDecorationActionsCursorPos = 0;
EWRAM_DATA static u8 sNumOwnedDecorationsInCurCategory = 0;
-EWRAM_DATA static u8 sSecretBaseItemsIndicesBuffer[16] = {};
-EWRAM_DATA static u8 sPlayerRoomItemsIndicesBuffer[12] = {};
+EWRAM_DATA static u8 sSecretBaseItemsIndicesBuffer[DECOR_MAX_SECRET_BASE] = {};
+EWRAM_DATA static u8 sPlayerRoomItemsIndicesBuffer[DECOR_MAX_PLAYERS_HOUSE] = {};
EWRAM_DATA static u16 sDecorationsCursorPos = 0;
EWRAM_DATA static u16 sDecorationsScrollOffset = 0;
EWRAM_DATA u8 gCurDecorationIndex = 0;
@@ -86,7 +87,7 @@ EWRAM_DATA static u8 sDecor_CameraSpriteObjectIdx1 = 0;
EWRAM_DATA static u8 sDecor_CameraSpriteObjectIdx2 = 0;
EWRAM_DATA static u8 sDecorationLastDirectionMoved = 0;
EWRAM_DATA static struct OamData sDecorSelectorOam = {};
-EWRAM_DATA static struct DecorRearrangementDataBuffer sDecorRearrangementDataBuffer[16] = {};
+EWRAM_DATA static struct DecorRearrangementDataBuffer sDecorRearrangementDataBuffer[DECOR_MAX_SECRET_BASE] = {};
EWRAM_DATA static u8 sCurDecorSelectedInRearrangement = 0;
static void HandleDecorationActionsMenuInput(u8 taskId);
@@ -128,34 +129,34 @@ void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphic
void sub_812826C(u8 taskId);
void sub_81283BC(u8 taskId);
void sub_8128414(u8 taskId);
-void sub_8128950(u8 taskId);
-void sub_81289D0(u8 taskId);
-void sub_81289F0(u8 taskId);
+void AttemptPlaceDecoration(u8 taskId);
+void PlaceDecorationPrompt(u8 taskId);
+void PlaceDecoration(u8 taskId);
void sub_8128AAC(u8 taskId);
-void sub_8128B80(u8 taskId);
-void sub_8128BA0(u8 taskId);
+void CancelDecoratingPrompt(u8 taskId);
+void CancelDecorating(u8 taskId);
void sub_8128BBC(u8 taskId);
void c1_overworld_prev_quest(u8 taskId);
void sub_8128CD4(void);
void sub_8128DE0(void);
-void sub_8128FD8(u8 taskId);
-void sub_8129020(u8 taskId);
+void ContinueDecorating(u8 taskId);
+void CantPlaceDecorationPrompt(u8 taskId);
void sub_81292D0(struct Sprite *sprite);
void sub_81292E8(struct Sprite *sprite);
u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor);
const u32 *GetDecorationIconPicOrPalette(u16 decor, u8 mode);
bool8 sub_81299AC(u8 taskId);
void sub_8129ABC(u8 taskId);
-void sub_8129B34(u8 taskId);
+void ContinuePuttingAwayDecorations(u8 taskId);
void sub_8129BCC(u8 taskId);
void sub_8129BF8(u8 taskId);
void sub_8129C74(u8 taskId);
-void sub_8129D64(u8 taskId);
+void ContinuePuttingAwayDecorationsPrompt(u8 taskId);
void sub_812A0E8(u8 taskId);
-void sub_812A1A0(u8 taskId);
-void sub_812A1C0(u8 taskId);
-void sub_812A1F0(u8 taskId);
-void sub_812A210(u8 taskId);
+void ReturnDecorationPrompt(u8 taskId);
+void PutAwayDecoration(u8 taskId);
+void StopPuttingAwayDecorationsPrompt(u8 taskId);
+void StopPuttingAwayDecorations(u8 taskId);
void sub_812A22C(u8 taskId);
void sub_812A25C(u8 taskId);
void sub_812A334(void);
@@ -163,8 +164,8 @@ void sub_812A36C(struct Sprite *sprite);
void sub_812A39C(void);
void sub_812A3C8(void);
void sub_812A3D4(u8 taskId);
-void sub_812A458(u8 taskId);
-void sub_812A478(u8 taskId);
+void TossDecorationPrompt(u8 taskId);
+void TossDecoration(u8 taskId);
#include "data/decoration/tiles.h"
#include "data/decoration/description.h"
@@ -344,16 +345,16 @@ const struct SpritePalette gUnknown_085A72BC =
.tag = PLACE_DECORATION_SELECTOR_TAG,
};
-const struct YesNoFuncTable gUnknown_085A72C4 =
+const struct YesNoFuncTable sPlaceDecorationYesNoFunctions =
{
- .yesFunc = sub_81289F0,
- .noFunc = sub_8128FD8,
+ .yesFunc = PlaceDecoration,
+ .noFunc = ContinueDecorating,
};
-const struct YesNoFuncTable gUnknown_085A72CC =
+const struct YesNoFuncTable sCancelDecoratingYesNoFunctions =
{
- .yesFunc = sub_8128BA0,
- .noFunc = sub_8128FD8,
+ .yesFunc = CancelDecorating,
+ .noFunc = ContinueDecorating,
};
const struct YesNoFuncTable gUnknown_085A72D4[] =
@@ -390,16 +391,16 @@ const u16 gUnknown_085A7308[] = INCBIN_U16("graphics/decorations/unk_85a7308.gba
const u16 gUnknown_085A7328[] = INCBIN_U16("graphics/decorations/unk_85a7328.gbapal");
-const struct YesNoFuncTable gUnknown_085A7348 =
+const struct YesNoFuncTable sReturnDecorationYesNoFunctions =
{
- .yesFunc = sub_812A1C0,
- .noFunc = sub_8129B34,
+ .yesFunc = PutAwayDecoration,
+ .noFunc = ContinuePuttingAwayDecorations,
};
-const struct YesNoFuncTable gUnknown_085A7350 =
+const struct YesNoFuncTable sStopPuttingAwayDecorationsYesNoFunctions =
{
- .yesFunc = sub_812A210,
- .noFunc = sub_8129B34,
+ .yesFunc = StopPuttingAwayDecorations,
+ .noFunc = ContinuePuttingAwayDecorations,
};
const u8 gUnknown_085A7358[] = INCBIN_U8("graphics/misc/decoration_unk_85a7358.4bpp");
@@ -458,9 +459,9 @@ const struct SpriteTemplate gUnknown_085A7404 =
sub_812A36C
};
-const struct YesNoFuncTable gUnknown_085A741C =
+const struct YesNoFuncTable sTossDecorationYesNoFunctions =
{
- .yesFunc = sub_812A478,
+ .yesFunc = TossDecoration,
.noFunc = sub_8127A30,
};
@@ -633,7 +634,7 @@ static void DecorationMenuAction_Cancel(u8 taskId)
RemoveDecorationWindow(0);
if (!gDecorationContext.isPlayerRoom)
{
- ScriptContext1_SetupScript(gUnknown_0823B4E8);
+ ScriptContext1_SetupScript(SecretBase_EventScript_PCCancel);
DestroyTask(taskId);
}
else
@@ -1235,12 +1236,12 @@ void ShowDecorationOnMap(u16 mapX, u16 mapY, u16 decoration)
}
}
-void sub_8127E18(void)
+void SetDecoration(void)
{
u8 i;
u8 j;
- for (i = 0; i < 14; i++)
+ for (i = 0; i < NUM_DECORATION_FLAGS; i++)
{
if (FlagGet(FLAG_DECORATION_1 + i) == TRUE)
{
@@ -1339,7 +1340,7 @@ void sub_8128060(u8 taskId)
if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].data[12] = 0;
- sub_8128FD8(taskId);
+ ContinueDecorating(taskId);
}
break;
}
@@ -1427,7 +1428,7 @@ void sub_81283BC(u8 taskId)
gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 1;
gSprites[sDecor_CameraSpriteObjectIdx2].data[7] = 1;
sub_8128DE0();
- sub_8128950(taskId);
+ AttemptPlaceDecoration(taskId);
}
void sub_8128414(u8 taskId)
@@ -1437,7 +1438,7 @@ void sub_8128414(u8 taskId)
gSprites[sDecor_CameraSpriteObjectIdx2].data[7] = 1;
sub_8128DE0();
StringExpandPlaceholders(gStringVar4, gText_CancelDecorating);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_8128B80);
+ DisplayItemMessageOnField(taskId, gStringVar4, CancelDecoratingPrompt);
}
bool8 sub_8128484(u8 behaviorAt, u16 behaviorBy)
@@ -1472,7 +1473,7 @@ bool8 sub_81284F4(u16 behaviorAt, const struct Decoration *decoration)
return FALSE;
}
-bool8 sub_812853C(u8 taskId, const struct Decoration *decoration)
+bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration)
{
u8 i;
u8 j;
@@ -1586,28 +1587,28 @@ bool8 sub_812853C(u8 taskId, const struct Decoration *decoration)
return TRUE;
}
-void sub_8128950(u8 taskId)
+void AttemptPlaceDecoration(u8 taskId)
{
- if (sub_812853C(taskId, &gDecorations[gCurDecorationItems[gCurDecorationIndex]]) == TRUE)
+ if (CanPlaceDecoration(taskId, &gDecorations[gCurDecorationItems[gCurDecorationIndex]]) == TRUE)
{
StringExpandPlaceholders(gStringVar4, gText_PlaceItHere);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_81289D0);
+ DisplayItemMessageOnField(taskId, gStringVar4, PlaceDecorationPrompt);
}
else
{
PlaySE(SE_HAZURE);
StringExpandPlaceholders(gStringVar4, gText_CantBePlacedHere);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_8129020);
+ DisplayItemMessageOnField(taskId, gStringVar4, CantPlaceDecorationPrompt);
}
}
-void sub_81289D0(u8 taskId)
+void PlaceDecorationPrompt(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- DoYesNoFuncWithChoice(taskId, &gUnknown_085A72C4);
+ DoYesNoFuncWithChoice(taskId, &sPlaceDecorationYesNoFunctions);
}
-void sub_81289F0(u8 taskId)
+void PlaceDecoration(u8 taskId)
{
ClearDialogWindowAndFrame(0, 0);
sub_8128AAC(taskId);
@@ -1619,7 +1620,7 @@ void sub_81289F0(u8 taskId)
{
sCurDecorMapX = gTasks[taskId].data[0] - 7;
sCurDecorMapY = gTasks[taskId].data[1] - 7;
- ScriptContext1_SetupScript(EventScript_275D1F);
+ ScriptContext1_SetupScript(SecretBase_EventScript_SetDecoration);
}
gSprites[sDecor_CameraSpriteObjectIdx1].pos1.y += 2;
@@ -1645,7 +1646,7 @@ void sub_8128AAC(u8 taskId)
if (!gDecorationContext.isPlayerRoom)
{
- for (i = 0; i < 16; i++)
+ for (i = 0; i < DECOR_MAX_SECRET_BASE; i++)
{
if (sSecretBaseItemsIndicesBuffer[i] == 0)
{
@@ -1656,7 +1657,7 @@ void sub_8128AAC(u8 taskId)
}
else
{
- for (i = 0; i < 12; i++)
+ for (i = 0; i < DECOR_MAX_PLAYERS_HOUSE; i++)
{
if (sPlayerRoomItemsIndicesBuffer[i] == 0)
{
@@ -1667,13 +1668,13 @@ void sub_8128AAC(u8 taskId)
}
}
-void sub_8128B80(u8 taskId)
+void CancelDecoratingPrompt(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- DoYesNoFuncWithChoice(taskId, &gUnknown_085A72CC);
+ DoYesNoFuncWithChoice(taskId, &sCancelDecoratingYesNoFunctions);
}
-void sub_8128BA0(u8 taskId)
+void CancelDecorating(u8 taskId)
{
ClearDialogWindowAndFrame(0, 0);
sub_8128BBC(taskId);
@@ -1718,7 +1719,7 @@ void sub_8128C64(u8 taskId)
data[2]++;
break;
case 1:
- ScriptContext1_SetupScript(EventScript_275D0C);
+ ScriptContext1_SetupScript(SecretBase_EventScript_InitDecorations);
data[2]++;
break;
case 2:
@@ -1857,7 +1858,7 @@ void sub_8128E18(u8 taskId)
}
}
-void sub_8128FD8(u8 taskId)
+void ContinueDecorating(u8 taskId)
{
ClearDialogWindowAndFrame(0, 1);
gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 0;
@@ -1865,10 +1866,10 @@ void sub_8128FD8(u8 taskId)
gTasks[taskId].func = sub_8128E18;
}
-void sub_8129020(u8 taskId)
+void CantPlaceDecorationPrompt(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
- sub_8128FD8(taskId);
+ ContinueDecorating(taskId);
}
void sub_8129048(struct PlaceDecorationGraphicsDataBuffer *data)
@@ -2206,7 +2207,7 @@ void sub_81298EC(u8 taskId)
case 1:
if (!gPaletteFade.active) {
DrawWholeMapView();
- ScriptContext1_SetupScript(EventScript_275D2E);
+ ScriptContext1_SetupScript(SecretBase_EventScript_PutAwayDecoration);
ClearDialogWindowAndFrame(0, 1);
gTasks[taskId].data[2] = 2;
}
@@ -2221,7 +2222,7 @@ void sub_81298EC(u8 taskId)
if (IsWeatherNotFadingIn() == TRUE)
{
StringExpandPlaceholders(gStringVar4, gText_DecorationReturnedToPC);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_8129D64);
+ DisplayItemMessageOnField(taskId, gStringVar4, ContinuePuttingAwayDecorationsPrompt);
if (gMapHeader.regionMapSectionId == MAPSEC_SECRET_BASE)
TV_PutSecretBaseVisitOnTheAir();
}
@@ -2284,13 +2285,13 @@ void sub_8129ABC(u8 taskId)
if (IsWeatherNotFadingIn() == TRUE)
{
data[12] = 1;
- sub_8129B34(taskId);
+ ContinuePuttingAwayDecorations(taskId);
}
break;
}
}
-void sub_8129B34(u8 taskId)
+void ContinuePuttingAwayDecorations(u8 taskId)
{
ClearDialogWindowAndFrame(0, 1);
gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 0;
@@ -2316,7 +2317,7 @@ void sub_8129BF8(u8 taskId)
gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE;
gSprites[sDecor_CameraSpriteObjectIdx1].callback = SpriteCallbackDummy;
StringExpandPlaceholders(gStringVar4, gText_StopPuttingAwayDecorations);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1F0);
+ DisplayItemMessageOnField(taskId, gStringVar4, StopPuttingAwayDecorationsPrompt);
}
void sub_8129C74(u8 taskId)
@@ -2328,7 +2329,7 @@ void sub_8129C74(u8 taskId)
if (sCurDecorSelectedInRearrangement != 0)
{
StringExpandPlaceholders(gStringVar4, gText_ReturnDecorationToPC);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1A0);
+ DisplayItemMessageOnField(taskId, gStringVar4, ReturnDecorationPrompt);
}
else
{
@@ -2339,20 +2340,20 @@ void sub_8129C74(u8 taskId)
gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE;
gSprites[sDecor_CameraSpriteObjectIdx1].callback = SpriteCallbackDummy;
StringExpandPlaceholders(gStringVar4, gText_StopPuttingAwayDecorations);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1F0);
+ DisplayItemMessageOnField(taskId, gStringVar4, StopPuttingAwayDecorationsPrompt);
}
else
{
StringExpandPlaceholders(gStringVar4, gText_NoDecorationHere);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_8129D64);
+ DisplayItemMessageOnField(taskId, gStringVar4, ContinuePuttingAwayDecorationsPrompt);
}
}
}
-void sub_8129D64(u8 taskId)
+void ContinuePuttingAwayDecorationsPrompt(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
- sub_8129B34(taskId);
+ ContinuePuttingAwayDecorations(taskId);
}
void sub_8129D8C(u8 decor, struct DecorRearrangementDataBuffer *data)
@@ -2542,26 +2543,26 @@ void sub_812A0E8(u8 taskId)
}
}
-void sub_812A1A0(u8 taskId)
+void ReturnDecorationPrompt(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- DoYesNoFuncWithChoice(taskId, &gUnknown_085A7348);
+ DoYesNoFuncWithChoice(taskId, &sReturnDecorationYesNoFunctions);
}
-void sub_812A1C0(u8 taskId)
+void PutAwayDecoration(u8 taskId)
{
FadeScreen(1, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_81298EC;
}
-void sub_812A1F0(u8 taskId)
+void StopPuttingAwayDecorationsPrompt(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- DoYesNoFuncWithChoice(taskId, &gUnknown_085A7350);
+ DoYesNoFuncWithChoice(taskId, &sStopPuttingAwayDecorationsYesNoFunctions);
}
-void sub_812A210(u8 taskId)
+void StopPuttingAwayDecorations(u8 taskId)
{
ClearDialogWindowAndFrame(0, 0);
sub_812A22C(taskId);
@@ -2604,7 +2605,7 @@ void sub_812A2C4(u8 taskId)
data[2]++;
break;
case 1:
- ScriptContext1_SetupScript(EventScript_275D0C);
+ ScriptContext1_SetupScript(SecretBase_EventScript_InitDecorations);
data[2]++;
break;
case 2:
@@ -2658,7 +2659,7 @@ void sub_812A3D4(u8 taskId)
{
StringCopy(gStringVar1, gDecorations[gCurDecorationItems[gCurDecorationIndex]].name);
StringExpandPlaceholders(gStringVar4, gText_DecorationWillBeDiscarded);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_812A458);
+ DisplayItemMessageOnField(taskId, gStringVar4, TossDecorationPrompt);
}
else
{
@@ -2667,13 +2668,13 @@ void sub_812A3D4(u8 taskId)
}
}
-void sub_812A458(u8 taskId)
+void TossDecorationPrompt(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
- DoYesNoFuncWithChoice(taskId, &gUnknown_085A741C);
+ DoYesNoFuncWithChoice(taskId, &sTossDecorationYesNoFunctions);
}
-void sub_812A478(u8 taskId)
+void TossDecoration(u8 taskId)
{
gCurDecorationItems[gCurDecorationIndex] = DECOR_NONE;
sNumOwnedDecorationsInCurCategory = GetNumOwnedDecorationsInCategory(sCurDecorationCategory);
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
index ee310af04..57a97d8f3 100644
--- a/src/dewford_trend.c
+++ b/src/dewford_trend.c
@@ -3,7 +3,7 @@
#include "easy_chat.h"
#include "event_data.h"
#include "link.h"
-#include "alloc.h"
+#include "malloc.h"
#include "random.h"
#include "text.h"
#include "tv.h"
diff --git a/src/diploma.c b/src/diploma.c
index 8e0901fa8..3c03c057f 100644
--- a/src/diploma.c
+++ b/src/diploma.c
@@ -5,7 +5,7 @@
#include "gpu_regs.h"
#include "scanline_effect.h"
#include "task.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "bg.h"
#include "window.h"
diff --git a/src/dma3_manager.c b/src/dma3_manager.c
deleted file mode 100644
index 43744883f..000000000
--- a/src/dma3_manager.c
+++ /dev/null
@@ -1,181 +0,0 @@
-#include "global.h"
-#include "dma3.h"
-
-#define MAX_DMA_REQUESTS 128
-
-#define DMA_REQUEST_COPY32 1
-#define DMA_REQUEST_FILL32 2
-#define DMA_REQUEST_COPY16 3
-#define DMA_REQUEST_FILL16 4
-
-BSS_DATA struct
-{
- const u8 *src;
- u8 *dest;
- u16 size;
- u16 mode;
- u32 value;
-} gDma3Requests[MAX_DMA_REQUESTS];
-
-static volatile bool8 gDma3ManagerLocked;
-static u8 gDma3RequestCursor;
-
-void ClearDma3Requests(void)
-{
- int i;
-
- gDma3ManagerLocked = TRUE;
- gDma3RequestCursor = 0;
-
- for (i = 0; i < MAX_DMA_REQUESTS; i++)
- {
- gDma3Requests[i].size = 0;
- gDma3Requests[i].src = NULL;
- gDma3Requests[i].dest = NULL;
- }
-
- gDma3ManagerLocked = FALSE;
-}
-
-void ProcessDma3Requests(void)
-{
- u16 bytesTransferred;
-
- if (gDma3ManagerLocked)
- return;
-
- bytesTransferred = 0;
-
- // as long as there are DMA requests to process (unless size or vblank is an issue), do not exit
- while (gDma3Requests[gDma3RequestCursor].size != 0)
- {
- bytesTransferred += gDma3Requests[gDma3RequestCursor].size;
-
- if (bytesTransferred > 40 * 1024)
- return; // don't transfer more than 40 KiB
- if (*(u8 *)REG_ADDR_VCOUNT > 224)
- return; // we're about to leave vblank, stop
-
- switch (gDma3Requests[gDma3RequestCursor].mode)
- {
- case DMA_REQUEST_COPY32: // regular 32-bit copy
- Dma3CopyLarge32_(gDma3Requests[gDma3RequestCursor].src,
- gDma3Requests[gDma3RequestCursor].dest,
- gDma3Requests[gDma3RequestCursor].size);
- break;
- case DMA_REQUEST_FILL32: // repeat a single 32-bit value across RAM
- Dma3FillLarge32_(gDma3Requests[gDma3RequestCursor].value,
- gDma3Requests[gDma3RequestCursor].dest,
- gDma3Requests[gDma3RequestCursor].size);
- break;
- case DMA_REQUEST_COPY16: // regular 16-bit copy
- Dma3CopyLarge16_(gDma3Requests[gDma3RequestCursor].src,
- gDma3Requests[gDma3RequestCursor].dest,
- gDma3Requests[gDma3RequestCursor].size);
- break;
- case DMA_REQUEST_FILL16: // repeat a single 16-bit value across RAM
- Dma3FillLarge16_(gDma3Requests[gDma3RequestCursor].value,
- gDma3Requests[gDma3RequestCursor].dest,
- gDma3Requests[gDma3RequestCursor].size);
- break;
- }
-
- // Free the request
- gDma3Requests[gDma3RequestCursor].src = NULL;
- gDma3Requests[gDma3RequestCursor].dest = NULL;
- gDma3Requests[gDma3RequestCursor].size = 0;
- gDma3Requests[gDma3RequestCursor].mode = 0;
- gDma3Requests[gDma3RequestCursor].value = 0;
- gDma3RequestCursor++;
-
- if (gDma3RequestCursor >= MAX_DMA_REQUESTS) // loop back to the first DMA request
- gDma3RequestCursor = 0;
- }
-}
-
-s16 RequestDma3Copy(const void *src, void *dest, u16 size, u8 mode)
-{
- int cursor;
- int i = 0;
-
- gDma3ManagerLocked = TRUE;
- cursor = gDma3RequestCursor;
-
- while (i < MAX_DMA_REQUESTS)
- {
- if (gDma3Requests[cursor].size == 0) // an empty request was found.
- {
- gDma3Requests[cursor].src = src;
- gDma3Requests[cursor].dest = dest;
- gDma3Requests[cursor].size = size;
-
- if (mode == 1)
- gDma3Requests[cursor].mode = DMA_REQUEST_COPY32;
- else
- gDma3Requests[cursor].mode = DMA_REQUEST_COPY16;
-
- gDma3ManagerLocked = FALSE;
- return cursor;
- }
- if (++cursor >= MAX_DMA_REQUESTS) // loop back to start.
- cursor = 0;
- i++;
- }
- gDma3ManagerLocked = FALSE;
- return -1; // no free DMA request was found
-}
-
-s16 RequestDma3Fill(s32 value, void *dest, u16 size, u8 mode)
-{
- int cursor;
- int i = 0;
-
- cursor = gDma3RequestCursor;
- gDma3ManagerLocked = TRUE;
-
- while (i < MAX_DMA_REQUESTS)
- {
- if (gDma3Requests[cursor].size == 0) // an empty request was found.
- {
- gDma3Requests[cursor].dest = dest;
- gDma3Requests[cursor].size = size;
- gDma3Requests[cursor].mode = mode;
- gDma3Requests[cursor].value = value;
-
- if(mode == 1)
- gDma3Requests[cursor].mode = DMA_REQUEST_FILL32;
- else
- gDma3Requests[cursor].mode = DMA_REQUEST_FILL16;
-
- gDma3ManagerLocked = FALSE;
- return cursor;
- }
- if (++cursor >= MAX_DMA_REQUESTS) // loop back to start.
- cursor = 0;
- i++;
- }
- gDma3ManagerLocked = FALSE;
- return -1; // no free DMA request was found
-}
-
-s16 CheckForSpaceForDma3Request(s16 index)
-{
- int i = 0;
-
- if (index == -1) // check if all requests are free
- {
- while (i < MAX_DMA_REQUESTS)
- {
- if (gDma3Requests[i].size != 0)
- return -1;
- i++;
- }
- return 0;
- }
- else // check the specified request
- {
- if (gDma3Requests[index].size != 0)
- return -1;
- return 0;
- }
-}
diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c
index 714b10ef6..2e0cfbc7e 100644
--- a/src/dodrio_berry_picking.c
+++ b/src/dodrio_berry_picking.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "dodrio_berry_picking.h"
#include "dynamic_placeholder_text_util.h"
@@ -245,7 +245,7 @@ static u32 sub_8027DFC(u32 arg0);
static u32 IncrementWithLimit(u32 arg0, u32 arg1);
static u32 Min(u32 arg0, u32 arg1);
static u32 sub_80276C0(u8 arg0);
-static void sub_8027ACC(u8 taskId);
+static void Task_ShowDodrioBerryPickingRecords(u8 taskId);
static void sub_8029314(u8 taskId);
static void sub_8027BEC(u8 windowId, s32 width);
static void nullsub_15(struct Sprite *sprite);
@@ -2580,7 +2580,7 @@ static u8 sub_8027A48(u8 id)
return gUnknown_02022C98->unk34[id];
}
-void sub_8027A5C(void)
+void IsDodrioInParty(void)
{
int i;
for (i = 0; i < PARTY_SIZE; i++)
@@ -2588,18 +2588,18 @@ void sub_8027A5C(void)
if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES)
&& GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO)
{
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
return;
}
}
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
}
-void sub_8027AAC(void)
+void ShowDodrioBerryPickingRecords(void)
{
- u8 taskId = CreateTask(sub_8027ACC, 0);
- sub_8027ACC(taskId);
+ u8 taskId = CreateTask(Task_ShowDodrioBerryPickingRecords, 0);
+ Task_ShowDodrioBerryPickingRecords(taskId);
}
// Data related to printing saved results.
@@ -2621,7 +2621,7 @@ ALIGNED(4)
static const u8 gUnknown_082F7B44[][2] = {{25}, {41}, {57}};
static const u8 gUnknown_082F7B4A[][2] = {{25}, {41}, {73}};
-static void sub_8027ACC(u8 taskId)
+static void Task_ShowDodrioBerryPickingRecords(u8 taskId)
{
struct WindowTemplate window;
s32 i, width, widthCurr;
diff --git a/src/dragon.c b/src/dragon.c
index befaf52e7..fa91156d4 100644
--- a/src/dragon.c
+++ b/src/dragon.c
@@ -36,7 +36,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596E7C =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596E78,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -89,7 +89,7 @@ const struct SpriteTemplate gUnknown_08596EF4 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gUnknown_08596EB4,
.images = NULL,
.affineAnims = gUnknown_08596EEC,
@@ -115,7 +115,7 @@ const struct SpriteTemplate gUnknown_08596F28 =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_FIRE_PLUME,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596F24,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -158,7 +158,7 @@ const struct SpriteTemplate gUnknown_08596F80 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gUnknown_08596F50,
.images = NULL,
.affineAnims = gUnknown_08596F78,
@@ -169,7 +169,7 @@ const struct SpriteTemplate gUnknown_08596F98 =
{
.tileTag = ANIM_TAG_HOLLOW_ORB,
.paletteTag = ANIM_TAG_HOLLOW_ORB,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -180,7 +180,7 @@ const struct SpriteTemplate gUnknown_08596FB0 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596E78,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/easy_chat.c b/src/easy_chat.c
index ba54de783..05f51ed4e 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bard_music.h"
#include "bg.h"
#include "data.h"
@@ -31,6 +31,7 @@
#include "constants/event_objects.h"
#include "constants/flags.h"
#include "constants/lilycove_lady.h"
+#include "constants/mauville_old_man.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/rgb.h"
@@ -121,8 +122,8 @@ static void sub_811B768(void);
static u8 sub_811B960(u8);
static void sub_811B9A0(void);
static u8 sub_811BA1C(void);
-static int sub_811BF20(void);
-static u16 sub_811BF40(void);
+static int DidPlayerInputMysteryGiftPhrase(void);
+static u16 DidPlayerInputABerryMasterWifePhrase(void);
static bool8 sub_811CE94(void);
static void sub_811CF64(void);
static void sub_811CF04(void);
@@ -209,7 +210,7 @@ static void sub_811D830(void);
static void sub_811D058(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8);
static void sub_811DD84(void);
static void sub_811D6F4(void);
-static void sub_811D758(void);
+static void PrintEasyChatKeyboardText(void);
static void sub_811D794(void);
static const u8 *GetEasyChatWordGroupName(u8);
static void sub_811D864(u8, u8);
@@ -220,7 +221,7 @@ static void sub_811E0EC(s8, s8);
static void sub_811E1A4(s8, s8);
static void sub_811E2DC(struct Sprite *);
static void sub_811E34C(u8, u8);
-static bool8 sub_811F0F8(void);
+static bool8 EasyChatIsNationalPokedexEnabled(void);
static u16 sub_811F108(void);
static void sub_811F2D4(void);
static void sub_811F46C(void);
@@ -698,11 +699,12 @@ static const struct WindowTemplate sEasyChatYesNoWindowTemplate = {
static const u8 sText_Clear17[] = _("{CLEAR 17}");
-static const u8 *const sUnknown_08597C90[] = {
- gUnknown_862B810,
- gUnknown_862B832,
- gUnknown_862B84B,
- gUnknown_862B86C,
+static const u8 *const sEasyChatKeyboardText[] =
+{
+ gText_EasyChatKeyboard_ABCDEFothers,
+ gText_EasyChatKeyboard_GHIJKL,
+ gText_EasyChatKeyboard_MNOPQRS,
+ gText_EasyChatKeyboard_TUVWXYZ,
};
static const struct SpriteSheet sEasyChatSpriteSheets[] = {
@@ -1262,7 +1264,7 @@ void ShowEasyChatScreen(void)
break;
case EASY_CHAT_TYPE_BARD_SONG:
bard = &gSaveBlock1Ptr->oldMan.bard;
- for (i = 0; i < 6; i ++)
+ for (i = 0; i < BARD_SONG_LENGTH; i ++)
bard->temporaryLyrics[i] = bard->songLyrics[i];
words = bard->temporaryLyrics;
@@ -2596,17 +2598,17 @@ static int FooterHasFourOptions_(void)
return FooterHasFourOptions();
}
-u8 sub_811BC7C(const u16 *arg0, u8 arg1)
+static bool8 IsPhraseDifferentThanPlayerInput(const u16 *phrase, u8 phraseLength)
{
u8 i;
- for (i = 0; i < arg1; i++)
+ for (i = 0; i < phraseLength; i++)
{
- if (arg0[i] != sEasyChatScreen->ecWordBuffer[i])
- return 1;
+ if (phrase[i] != sEasyChatScreen->ecWordBuffer[i])
+ return TRUE;
}
- return 0;
+ return FALSE;
}
static u8 GetDisplayedPersonType(void)
@@ -2729,7 +2731,7 @@ static void sub_811BE9C(void)
FlagSet(FLAG_SYS_CHAT_USED);
break;
case EASY_CHAT_TYPE_QUESTIONNAIRE:
- if (sub_811BF20())
+ if (DidPlayerInputMysteryGiftPhrase())
gSpecialVar_0x8004 = 2;
else
gSpecialVar_0x8004 = 0;
@@ -2739,22 +2741,22 @@ static void sub_811BE9C(void)
gSpecialVar_0x8004 = sub_81226D8(sEasyChatScreen->ecWordBuffer);
break;
case EASY_CHAT_TYPE_GOOD_SAYING:
- gSpecialVar_0x8004 = sub_811BF40();
+ gSpecialVar_0x8004 = DidPlayerInputABerryMasterWifePhrase();
break;
}
}
-static int sub_811BF20(void)
+static int DidPlayerInputMysteryGiftPhrase(void)
{
- return sub_811BC7C(sMysteryGiftPhrase, ARRAY_COUNT(sMysteryGiftPhrase)) == 0;
+ return !IsPhraseDifferentThanPlayerInput(sMysteryGiftPhrase, ARRAY_COUNT(sMysteryGiftPhrase));
}
-static u16 sub_811BF40(void)
+static u16 DidPlayerInputABerryMasterWifePhrase(void)
{
int i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sBerryMasterWifePhrases); i++)
{
- if (!sub_811BC7C(sBerryMasterWifePhrases[i], ARRAY_COUNT(*sBerryMasterWifePhrases)))
+ if (!IsPhraseDifferentThanPlayerInput(sBerryMasterWifePhrases[i], ARRAY_COUNT(*sBerryMasterWifePhrases)))
return i + 1;
}
@@ -3967,7 +3969,7 @@ static void sub_811D698(u32 arg0)
sub_811D6F4();
break;
case 1:
- sub_811D758();
+ PrintEasyChatKeyboardText();
break;
case 2:
sub_811D794();
@@ -4010,12 +4012,12 @@ static void sub_811D6F4(void)
}
}
-static void sub_811D758(void)
+static void PrintEasyChatKeyboardText(void)
{
u32 i;
- for (i = 0; i < ARRAY_COUNT(sUnknown_08597C90); i++)
- sub_811D028(2, 1, sUnknown_08597C90[i], 10, 97 + i * 16, 0xFF, NULL);
+ for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardText); i++)
+ sub_811D028(2, 1, sEasyChatKeyboardText[i], 10, 97 + i * 16, 0xFF, NULL);
}
static void sub_811D794(void)
@@ -4808,7 +4810,7 @@ static void sub_811E948(void)
PutWindowTilemap(windowId);
}
-static bool8 sub_811EA28(u8 groupId)
+static bool8 IsEasyChatGroupUnlocked(u8 groupId)
{
switch (groupId)
{
@@ -4819,7 +4821,7 @@ static bool8 sub_811EA28(u8 groupId)
case EC_GROUP_MOVE_2:
return FlagGet(FLAG_SYS_GAME_CLEAR);
case EC_GROUP_POKEMON_2:
- return sub_811F0F8();
+ return EasyChatIsNationalPokedexEnabled();
default:
return TRUE;
}
@@ -4830,7 +4832,7 @@ u16 EasyChat_GetNumWordsInGroup(u8 groupId)
if (groupId == EC_GROUP_POKEMON)
return GetNationalPokedexCount(FLAG_GET_SEEN);
- if (sub_811EA28(groupId))
+ if (IsEasyChatGroupUnlocked(groupId))
return gEasyChatGroups[groupId].numEnabledWords;
return 0;
@@ -5070,7 +5072,7 @@ u16 sub_811EE38(u16 groupId)
u16 sub_811EE90(u16 groupId)
{
- if (!sub_811EA28(groupId))
+ if (!IsEasyChatGroupUnlocked(groupId))
return 0xFFFF;
if (groupId == EC_GROUP_POKEMON)
@@ -5128,16 +5130,16 @@ void sub_811EF6C(void)
CopyEasyChatWord(gStringVar2, easyChatWord);
}
-static bool8 sub_811EF98(u8 additionalPhraseId)
+static bool8 IsAdditionalPhraseUnlocked(u8 additionalPhraseId)
{
int byteOffset = additionalPhraseId / 8;
int shift = additionalPhraseId % 8;
return (gSaveBlock1Ptr->additionalPhrases[byteOffset] >> shift) & 1;
}
-void sub_811EFC0(u8 additionalPhraseId)
+void UnlockAdditionalPhrase(u8 additionalPhraseId)
{
- if (additionalPhraseId < 33)
+ if (additionalPhraseId < NUM_ADDITIONAL_PHRASES)
{
int byteOffset = additionalPhraseId / 8;
int shift = additionalPhraseId % 8;
@@ -5145,32 +5147,32 @@ void sub_811EFC0(u8 additionalPhraseId)
}
}
-u8 sub_811EFF0(void)
+static u8 GetNumAdditionalPhrasesUnlocked(void)
{
u8 i;
u8 numAdditionalPhrasesUnlocked;
- for (i = 0, numAdditionalPhrasesUnlocked = 0; i < 33; i++)
+ for (i = 0, numAdditionalPhrasesUnlocked = 0; i < NUM_ADDITIONAL_PHRASES; i++)
{
- if (sub_811EF98(i))
+ if (IsAdditionalPhraseUnlocked(i))
numAdditionalPhrasesUnlocked++;
}
return numAdditionalPhrasesUnlocked;
}
-u16 sub_811F01C(void)
+u16 GetNewHipsterPhraseToTeach(void)
{
u16 i;
u16 additionalPhraseId;
- u8 numAdditionalPhrasesUnlocked = sub_811EFF0();
- if (numAdditionalPhrasesUnlocked == 33)
+ u8 numAdditionalPhrasesUnlocked = GetNumAdditionalPhrasesUnlocked();
+ if (numAdditionalPhrasesUnlocked == NUM_ADDITIONAL_PHRASES)
return 0xFFFF;
- additionalPhraseId = Random() % (33 - numAdditionalPhrasesUnlocked);
- for (i = 0; i < 33; i++)
+ additionalPhraseId = Random() % (NUM_ADDITIONAL_PHRASES - numAdditionalPhrasesUnlocked);
+ for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++)
{
- if (!sub_811EF98(i))
+ if (!IsAdditionalPhraseUnlocked(i))
{
if (additionalPhraseId)
{
@@ -5178,7 +5180,7 @@ u16 sub_811F01C(void)
}
else
{
- sub_811EFC0(i);
+ UnlockAdditionalPhrase(i);
return EC_WORD(EC_GROUP_TRENDY_SAYING, i);
}
}
@@ -5187,17 +5189,18 @@ u16 sub_811F01C(void)
return 0xFFFF;
}
-u16 sub_811F090(void)
+// Unused
+u16 GetRandomTaughtHipsterPhrase(void)
{
u16 i;
- u16 additionalPhraseId = sub_811EFF0();
+ u16 additionalPhraseId = GetNumAdditionalPhrasesUnlocked();
if (additionalPhraseId == 0)
return 0xFFFF;
additionalPhraseId = Random() % additionalPhraseId;
- for (i = 0; i < 33; i++)
+ for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++)
{
- if (sub_811EF98(i))
+ if (IsAdditionalPhraseUnlocked(i))
{
if (additionalPhraseId)
additionalPhraseId--;
@@ -5209,7 +5212,7 @@ u16 sub_811F090(void)
return 0xFFFF;
}
-static bool8 sub_811F0F8(void)
+static bool8 EasyChatIsNationalPokedexEnabled(void)
{
return IsNationalPokedexEnabled();
}
@@ -5496,7 +5499,7 @@ static bool8 sub_811F764(u16 wordIndex, u8 groupId)
case EC_GROUP_MOVE_2:
return TRUE;
case EC_GROUP_TRENDY_SAYING:
- return sub_811EF98(wordIndex);
+ return IsAdditionalPhraseUnlocked(wordIndex);
default:
return gEasyChatGroups[groupId].wordData.words[wordIndex].enabled;
}
@@ -5544,7 +5547,7 @@ bool32 sub_811F8D8(int easyChatWord)
int groupId = EC_GROUP(easyChatWord);
int mask = 0x7F;
int index = EC_INDEX(easyChatWord);
- if (!sub_811EA28(groupId & mask))
+ if (!IsEasyChatGroupUnlocked(groupId & mask))
return FALSE;
else
return sub_811F764(index, groupId & mask);
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 1eaf4e4a1..9e9d1c2c5 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -17,7 +17,7 @@
#include "menu.h"
#include "trig.h"
#include "random.h"
-#include "alloc.h"
+#include "malloc.h"
#include "dma3.h"
#include "gpu_regs.h"
#include "bg.h"
diff --git a/src/electric.c b/src/electric.c
index 4b93119dc..7a0cd542c 100644
--- a/src/electric.c
+++ b/src/electric.c
@@ -56,7 +56,7 @@ const struct SpriteTemplate gUnknown_085956C0 =
{
.tileTag = ANIM_TAG_LIGHTNING,
.paletteTag = ANIM_TAG_LIGHTNING,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085956BC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -80,7 +80,7 @@ const struct SpriteTemplate gUnknown_085956FC =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085956F8,
@@ -107,7 +107,7 @@ const struct SpriteTemplate gUnknown_08595734 =
{
.tileTag = ANIM_TAG_SHOCK,
.paletteTag = ANIM_TAG_SHOCK,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595730,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -118,7 +118,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_859574C =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SPARK_2,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -129,7 +129,7 @@ const struct SpriteTemplate gUnknown_08595764 =
{
.tileTag = ANIM_TAG_BLACK_BALL_2,
.paletteTag = ANIM_TAG_BLACK_BALL_2,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -151,7 +151,7 @@ const struct SpriteTemplate gUnknown_08595790 =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SPARK_2,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_0859578C,
@@ -188,7 +188,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85957E0 =
{
.tileTag = ANIM_TAG_SHOCK_3,
.paletteTag = ANIM_TAG_SHOCK_3,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gUnknown_085957B8,
.images = NULL,
.affineAnims = gUnknown_085957DC,
@@ -199,7 +199,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85957F8 =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SPARK_2,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_0859578C,
@@ -210,7 +210,7 @@ const struct SpriteTemplate gElectricitySpriteTemplate =
{
.tileTag = ANIM_TAG_SPARK_2,
.paletteTag = ANIM_TAG_SPARK_2,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -221,7 +221,7 @@ const struct SpriteTemplate gUnknown_08595828 =
{
.tileTag = ANIM_TAG_SPARK,
.paletteTag = ANIM_TAG_SPARK,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -232,7 +232,7 @@ const struct SpriteTemplate gUnknown_08595840 =
{
.tileTag = ANIM_TAG_SPARK_H,
.paletteTag = ANIM_TAG_SPARK_H,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -287,7 +287,7 @@ const struct SpriteTemplate gUnknown_085958A8 =
{
.tileTag = ANIM_TAG_ELECTRIC_ORBS,
.paletteTag = ANIM_TAG_ELECTRIC_ORBS,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gUnknown_085958A0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -335,7 +335,7 @@ const struct SpriteTemplate gUnknown_0859595C =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08595950,
@@ -360,7 +360,7 @@ const struct SpriteTemplate gUnknown_0859598C =
{
.tileTag = ANIM_TAG_ELECTRICITY,
.paletteTag = ANIM_TAG_ELECTRICITY,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595988,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -371,7 +371,7 @@ const struct SpriteTemplate gUnknown_085959A4 =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08595950,
@@ -425,7 +425,7 @@ const struct SpriteTemplate gUnknown_08595A00 =
{
.tileTag = ANIM_TAG_SPARK,
.paletteTag = ANIM_TAG_SPARK,
- .oam = &gUnknown_08524A04,
+ .oam = &gOamData_AffineDouble_ObjNormal_8x16,
.anims = gUnknown_085959DC,
.images = NULL,
.affineAnims = gUnknown_085959FC,
@@ -436,7 +436,7 @@ const struct SpriteTemplate gUnknown_08595A18 =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08595950,
@@ -447,7 +447,7 @@ const struct SpriteTemplate gUnknown_08595A30 =
{
.tileTag = ANIM_TAG_SPARK,
.paletteTag = ANIM_TAG_SPARK,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index f184dea82..7f0887790 100755
--- a/src/ereader_helpers.c
+++ b/src/ereader_helpers.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "ereader_helpers.h"
#include "link.h"
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index 13e964224..4497556ea 100755
--- a/src/ereader_screen.c
+++ b/src/ereader_screen.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "ereader_helpers.h"
#include "link.h"
@@ -88,7 +88,7 @@ static u8 sub_81D4DE8(struct Unk03006370 *arg0)
static void sub_81D4E30(void)
{
memset(gDecompressionBuffer, 0, 0x2000);
- gLinkType = 0x5503;
+ gLinkType = LINKTYPE_0x5503;
OpenLink();
SetSuppressLinkErrorMessage(TRUE);
}
diff --git a/src/event_obj_lock.c b/src/event_obj_lock.c
index 22a29fd5d..c64a2ab22 100644
--- a/src/event_obj_lock.c
+++ b/src/event_obj_lock.c
@@ -108,12 +108,12 @@ void sub_8098524(void)
UnfreezeEventObjects();
}
-void sub_8098574(void)
+void Script_FacePlayer(void)
{
EventObjectFaceOppositeDirection(&gEventObjects[gSelectedEventObject], gSpecialVar_Facing);
}
-void sub_809859C(void)
+void Script_ClearHeldMovement(void)
{
EventObjectClearHeldMovementIfActive(&gEventObjects[gSelectedEventObject]);
}
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 75f758a12..c746f08b1 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle_pyramid.h"
#include "berry.h"
#include "decoration.h"
@@ -26,6 +26,7 @@
#include "constants/event_objects.h"
#include "constants/field_effects.h"
#include "constants/items.h"
+#include "constants/mauville_old_man.h"
// this file was known as evobjmv.c in Game Freak's original source
@@ -2723,9 +2724,8 @@ bool8 MovementType_WanderAround_Step4(struct EventObject *eventObject, struct Sp
SetEventObjectDirection(eventObject, chosenDirection);
sprite->data[1] = 5;
if (GetCollisionInDirection(eventObject, chosenDirection))
- {
sprite->data[1] = 1;
- }
+
return TRUE;
}
@@ -3093,9 +3093,8 @@ bool8 MovementType_WanderUpAndDown_Step4(struct EventObject *eventObject, struct
SetEventObjectDirection(eventObject, direction);
sprite->data[1] = 5;
if (GetCollisionInDirection(eventObject, direction))
- {
sprite->data[1] = 1;
- }
+
return TRUE;
}
@@ -3163,9 +3162,8 @@ bool8 MovementType_WanderLeftAndRight_Step4(struct EventObject *eventObject, str
SetEventObjectDirection(eventObject, direction);
sprite->data[1] = 5;
if (GetCollisionInDirection(eventObject, direction))
- {
sprite->data[1] = 1;
- }
+
return TRUE;
}
@@ -3952,7 +3950,7 @@ bool8 MovementType_WalkBackAndForth_Step1(struct EventObject *eventObject, struc
bool8 MovementType_WalkBackAndForth_Step2(struct EventObject *eventObject, struct Sprite *sprite)
{
- bool8 collisionState;
+ bool8 collision;
u8 movementActionId;
if (eventObject->directionSequenceIndex && eventObject->initialCoords.x == eventObject->currentCoords.x && eventObject->initialCoords.y == eventObject->currentCoords.y)
@@ -3960,19 +3958,19 @@ bool8 MovementType_WalkBackAndForth_Step2(struct EventObject *eventObject, struc
eventObject->directionSequenceIndex = 0;
SetEventObjectDirection(eventObject, GetOppositeDirection(eventObject->movementDirection));
}
- collisionState = GetCollisionInDirection(eventObject, eventObject->movementDirection);
+ collision = GetCollisionInDirection(eventObject, eventObject->movementDirection);
movementActionId = GetWalkNormalMovementAction(eventObject->movementDirection);
- if (collisionState == TRUE)
+ if (collision == COLLISION_OUTSIDE_RANGE)
{
eventObject->directionSequenceIndex++;
SetEventObjectDirection(eventObject, GetOppositeDirection(eventObject->movementDirection));
movementActionId = GetWalkNormalMovementAction(eventObject->movementDirection);
- collisionState = GetCollisionInDirection(eventObject, eventObject->movementDirection);
+ collision = GetCollisionInDirection(eventObject, eventObject->movementDirection);
}
- if (collisionState)
- {
+
+ if (collision)
movementActionId = GetWalkInPlaceNormalMovementAction(eventObject->facingDirection);
- }
+
EventObjectSetSingleMovement(eventObject, sprite, movementActionId);
eventObject->singleMovementActive = 1;
sprite->data[1] = 3;
@@ -3998,27 +3996,26 @@ bool8 MovementType_WalkSequence_Step0(struct EventObject *eventObject, struct Sp
bool8 MoveNextDirectionInSequence(struct EventObject *eventObject, struct Sprite *sprite, u8 *route)
{
- u8 collisionState;
+ u8 collision;
u8 movementActionId;
if (eventObject->directionSequenceIndex == 3 && eventObject->initialCoords.x == eventObject->currentCoords.x && eventObject->initialCoords.y == eventObject->currentCoords.y)
- {
eventObject->directionSequenceIndex = 0;
- }
+
SetEventObjectDirection(eventObject, route[eventObject->directionSequenceIndex]);
movementActionId = GetWalkNormalMovementAction(eventObject->movementDirection);
- collisionState = GetCollisionInDirection(eventObject, eventObject->movementDirection);
- if (collisionState == TRUE)
+ collision = GetCollisionInDirection(eventObject, eventObject->movementDirection);
+ if (collision == COLLISION_OUTSIDE_RANGE)
{
eventObject->directionSequenceIndex++;
SetEventObjectDirection(eventObject, route[eventObject->directionSequenceIndex]);
movementActionId = GetWalkNormalMovementAction(eventObject->movementDirection);
- collisionState = GetCollisionInDirection(eventObject, eventObject->movementDirection);
+ collision = GetCollisionInDirection(eventObject, eventObject->movementDirection);
}
- if (collisionState)
- {
+
+ if (collision)
movementActionId = GetWalkInPlaceNormalMovementAction(eventObject->facingDirection);
- }
+
EventObjectSetSingleMovement(eventObject, sprite, movementActionId);
eventObject->singleMovementActive = 1;
sprite->data[1] = 2;
@@ -4868,22 +4865,20 @@ static u8 GetCollisionInDirection(struct EventObject *eventObject, u8 direction)
return GetCollisionAtCoords(eventObject, x, y, direction);
}
-u8 GetCollisionAtCoords(struct EventObject *eventObject, s16 x, s16 y, u32 dirn)
+u8 GetCollisionAtCoords(struct EventObject *eventObject, s16 x, s16 y, u32 dir)
{
- u8 direction;
-
- direction = dirn;
+ u8 direction = dir;
if (IsCoordOutsideEventObjectMovementRange(eventObject, x, y))
- return 1;
+ return COLLISION_OUTSIDE_RANGE;
else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(eventObject, x, y, direction))
- return 2;
+ return COLLISION_IMPASSABLE;
else if (eventObject->trackedByCamera && !CanCameraMoveInDirection(direction))
- return 2;
+ return COLLISION_IMPASSABLE;
else if (IsZCoordMismatchAt(eventObject->currentElevation, x, y))
- return 3;
+ return COLLISION_ELEVATION_MISMATCH;
else if (DoesObjectCollideWithObjectAt(eventObject, x, y))
- return 4;
- return 0;
+ return COLLISION_EVENT_OBJECT;
+ return COLLISION_NONE;
}
u8 GetCollisionFlagsAtCoords(struct EventObject *eventObject, s16 x, s16 y, u8 direction)
@@ -6831,15 +6826,15 @@ bool8 MovementAction_ClearAffineAnim_Step0(struct EventObject *eventObject, stru
return TRUE;
}
-bool8 MovementAction_Unknown1_Step0(struct EventObject *eventObject, struct Sprite *sprite)
+bool8 MovementAction_HideReflection_Step0(struct EventObject *eventObject, struct Sprite *sprite)
{
- eventObject->unk3_3 = TRUE;
+ eventObject->hideReflection = TRUE;
return TRUE;
}
-bool8 MovementAction_Unknown2_Step0(struct EventObject *eventObject, struct Sprite *sprite)
+bool8 MovementAction_ShowReflection_Step0(struct EventObject *eventObject, struct Sprite *sprite)
{
- eventObject->unk3_3 = FALSE;
+ eventObject->hideReflection = FALSE;
return TRUE;
}
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 96ca2ed1c..929539d30 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_message.h"
#include "bg.h"
@@ -406,7 +406,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
gMain.state++;
break;
case 2:
- sub_807F19C();
+ InitTradeBg();
gMain.state++;
break;
case 3:
@@ -438,7 +438,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
gSprites[ID].callback = SpriteCallbackDummy_2;
gSprites[ID].oam.paletteNum = 2;
gMain.state++;
- sub_807B154();
+ LinkTradeDrawWindow();
}
break;
case 6:
@@ -452,7 +452,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void)
break;
case 7:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- sub_807B140();
+ InitTradeSequenceBgGpuRegs();
ShowBg(0);
ShowBg(1);
SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
@@ -743,12 +743,12 @@ static void Task_EvolutionScene(u8 taskID)
GetMonData(mon, MON_DATA_NICKNAME, text);
StringCopy10(gBattleTextBuff1, text);
- if (var == 0xFFFF) // no place to learn it
+ if (var == MON_HAS_MAX_MOVES)
gTasks[taskID].tState = 22;
- else if (var == 0xFFFE) // it already knows that move
+ else if (var == MON_ALREADY_KNOWS_MOVE)
break;
else
- gTasks[taskID].tState = 20; // has less than 4 moves, so it's been learned
+ gTasks[taskID].tState = 20; // move has been learned
}
else // no move to learn
{
@@ -909,8 +909,8 @@ static void Task_EvolutionScene(u8 taskID)
case 6:
if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate)
{
- var = sub_81C1B94(); // moveID
- if (var == 4)
+ var = GetMoveSlotToReplace();
+ if (var == MAX_MON_MOVES)
{
gTasks[taskID].tLearnMoveState = 10;
}
@@ -985,7 +985,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
{
case 0:
StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving);
- sub_807F1A8(0, gStringVar4, 1);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
gTasks[taskID].tState++;
break;
case 1:
@@ -1075,7 +1075,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (IsCryFinished())
{
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
- sub_807F1A8(0, gStringVar4, 1);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
PlayFanfare(MUS_FANFA5);
gTasks[taskID].tState++;
SetMonData(mon, MON_DATA_SPECIES, (&gTasks[taskID].tPostEvoSpecies));
@@ -1100,9 +1100,9 @@ static void Task_TradeEvolutionScene(u8 taskID)
GetMonData(mon, MON_DATA_NICKNAME, text);
StringCopy10(gBattleTextBuff1, text);
- if (var == 0xFFFF)
+ if (var == MON_HAS_MAX_MOVES)
gTasks[taskID].tState = 20;
- else if (var == 0xFFFE)
+ else if (var == MON_ALREADY_KNOWS_MOVE)
break;
else
gTasks[taskID].tState = 18;
@@ -1110,7 +1110,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
else
{
PlayBGM(MUS_SHINKA);
- sub_807F1A8(0, gText_CommunicationStandby5, 1);
+ DrawTextOnTradeWindow(0, gText_CommunicationStandby5, 1);
gTasks[taskID].tState++;
}
}
@@ -1144,7 +1144,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (EvoScene_IsMonAnimFinished(sEvoStructPtr->preEvoSpriteID))
{
StringExpandPlaceholders(gStringVar4, gText_EllipsisQuestionMark);
- sub_807F1A8(0, gStringVar4, 1);
+ DrawTextOnTradeWindow(0, gStringVar4, 1);
gTasks[taskID].tEvoWasStopped = 1;
gTasks[taskID].tState = 13;
}
@@ -1155,7 +1155,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
BufferMoveToLearnIntoBattleTextBuff2();
PlayFanfare(MUS_FANFA1);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
gTasks[taskID].tState++;
}
@@ -1172,7 +1172,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
{
BufferMoveToLearnIntoBattleTextBuff2();
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnMoveState++;
}
break;
@@ -1180,7 +1180,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnMoveState++;
}
break;
@@ -1188,7 +1188,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tData7 = 5;
gTasks[taskID].tData8 = 9;
gTasks[taskID].tLearnMoveState++;
@@ -1197,7 +1197,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
LoadUserWindowBorderGfx(0, 0xA8, 0xE0);
- CreateYesNoMenu(&gUnknown_0833900C, 0xA8, 0xE, 0);
+ CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, 0xA8, 0xE, 0);
sEvoCursorPos = 0;
gTasks[taskID].tLearnMoveState++;
sEvoCursorPos = 0;
@@ -1209,7 +1209,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
case 0:
sEvoCursorPos = 0;
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnMoveState = gTasks[taskID].tData7;
if (gTasks[taskID].tLearnMoveState == 5)
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
@@ -1218,7 +1218,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
case -1:
sEvoCursorPos = 1;
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnMoveState = gTasks[taskID].tData8;
break;
}
@@ -1243,8 +1243,8 @@ static void Task_TradeEvolutionScene(u8 taskID)
case 6:
if (!gPaletteFade.active && gMain.callback2 == CB2_TradeEvolutionSceneUpdate)
{
- var = sub_81C1B94(); // moveID
- if (var == 4)
+ var = GetMoveSlotToReplace();
+ if (var == MAX_MON_MOVES)
{
gTasks[taskID].tLearnMoveState = 9;
}
@@ -1254,7 +1254,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (IsHMMove2(move))
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnMoveState = 11;
}
else
@@ -1264,7 +1264,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
RemoveMonPPBonus(mon, var);
SetMonMoveSlot(mon, gMoveToLearn, var);
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnMoveState++;
}
}
@@ -1274,7 +1274,7 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tLearnMoveState++;
}
break;
@@ -1282,20 +1282,20 @@ static void Task_TradeEvolutionScene(u8 taskID)
if (!IsTextPrinterActive(0) && !IsSEPlaying())
{
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tState = 18;
}
break;
case 9:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tData7 = 10;
gTasks[taskID].tData8 = 0;
gTasks[taskID].tLearnMoveState = 3;
break;
case 10:
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]);
- sub_807F1A8(0, gDisplayedStringBattle, 1);
+ DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1);
gTasks[taskID].tState = 13;
break;
case 11:
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index 8a41087f5..bbd2ebda9 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -223,10 +223,10 @@ static bool8 TryStartInteractionScript(struct MapPosition *position, u16 metatil
return FALSE;
// Don't play interaction sound for certain scripts.
- if (script != EventScript_PlayerPCMale
- && script != EventScript_PlayerPCFemale
- && script != EventScript_SecretBasePC
- && script != EventScript_RecordMixingSecretBasePC
+ if (script != LittlerootTown_BrendansHouse_2F_EventScript_PC
+ && script != LittlerootTown_MaysHouse_2F_EventScript_PC
+ && script != SecretBase_EventScript_PC
+ && script != SecretBase_EventScript_RecordMixingPC
&& script != SecretBase_EventScript_DollInteract
&& script != SecretBase_EventScript_CushionInteract
&& script != EventScript_PC)
@@ -355,7 +355,7 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position
{
gSpecialVar_0x8004 = bgEvent->bgUnion.secretBaseId;
if (TrySetCurSecretBase())
- return EventScript_2759F1;
+ return SecretBase_EventScript_CheckEntrance;
}
return NULL;
}
@@ -412,13 +412,13 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me
if (height == MapGridGetZCoordAt(position->x, position->y))
{
if (MetatileBehavior_IsSecretBasePC(metatileBehavior) == TRUE)
- return EventScript_SecretBasePC;
+ return SecretBase_EventScript_PC;
if (MetatileBehavior_IsRecordMixingSecretBasePC(metatileBehavior) == TRUE)
- return EventScript_RecordMixingSecretBasePC;
+ return SecretBase_EventScript_RecordMixingPC;
if (MetatileBehavior_IsSecretBaseSandOrnament(metatileBehavior) == TRUE)
- return EventScript_SecretBaseSandOrnament;
+ return SecretBase_EventScript_SandOrnament;
if (MetatileBehavior_IsSecretBaseShieldOrToyTV(metatileBehavior) == TRUE)
- return EventScript_SecretBaseShieldOrToyTV;
+ return SecretBase_EventScript_ShieldOrToyTV;
if (MetatileBehavior_IsMB_C6(metatileBehavior) == TRUE)
{
SetSecretBaseSecretsTvFlags_MiscFurnature();
@@ -547,7 +547,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
{
if (UpdatePoisonStepCounter() == TRUE)
{
- ScriptContext1_SetupScript(EventScript_Poison);
+ ScriptContext1_SetupScript(EventScript_FieldPoison);
return TRUE;
}
if (ShouldEggHatch())
@@ -563,7 +563,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
}
if (ShouldDoBrailleRegicePuzzle() == TRUE)
{
- ScriptContext1_SetupScript(IslandCave_EventScript_238EAF);
+ ScriptContext1_SetupScript(IslandCave_EventScript_OpenRegiEntrance);
return TRUE;
}
if (ShouldDoWallyCall() == TRUE)
@@ -583,12 +583,12 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
}
if (ShouldDoRoxanneCall() == TRUE)
{
- ScriptContext1_SetupScript(RustboroCity_Gym_EventScript_21307B);
+ ScriptContext1_SetupScript(RustboroCity_Gym_EventScript_RegisterRoxanne);
return TRUE;
}
if (ShouldDoRivalRayquazaCall() == TRUE)
{
- ScriptContext1_SetupScript(MossdeepCity_SpaceCenter_2F_EventScript_224175);
+ ScriptContext1_SetupScript(MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall);
return TRUE;
}
}
@@ -733,12 +733,12 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
}
if (MetatileBehavior_IsMtPyreHole(metatileBehavior) == TRUE)
{
- ScriptContext1_SetupScript(gUnknown_082A8350);
+ ScriptContext1_SetupScript(EventScript_FallDownHoleMtPyre);
return TRUE;
}
if (MetatileBehavior_IsMossdeepGymWarp(metatileBehavior) == TRUE)
{
- sub_80AF87C();
+ DoMossdeepGymWarp();
return TRUE;
}
DoWarp();
diff --git a/src/field_effect.c b/src/field_effect.c
index 7569bdc75..99abcdcb0 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -63,7 +63,7 @@ static void PokeballGlowEffect_7(struct Sprite *);
static u8 PokecenterHealEffectHelper(s16, s16);
static void HallOfFameRecordEffectHelper(s16, s16, s16, u8);
-static void mapldr_080842E8(void);
+static void FieldCallback_Fly(void);
static void task00_8084310(u8);
static void mapldr_08084390(void);
static void c3_080843F8(u8);
@@ -1364,13 +1364,13 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
}
-void sub_80B69DC(void)
+void ReturnToFieldFromFlyMapSelect(void)
{
SetMainCallback2(CB2_ReturnToField);
- gFieldCallback = mapldr_080842E8;
+ gFieldCallback = FieldCallback_Fly;
}
-static void mapldr_080842E8(void)
+static void FieldCallback_Fly(void)
{
pal_fill_black();
CreateTask(task00_8084310, 0);
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index fb883b105..8db58ad7a 100755
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -143,7 +143,7 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
reflectionSprite->pos2.y = -mainSprite->pos2.y;
reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled;
- if (eventObject->unk3_3 == TRUE)
+ if (eventObject->hideReflection == TRUE)
reflectionSprite->invisible = TRUE;
// Check if the reflection is not still.
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 6d62cdc4a..229e5aedb 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -71,10 +71,10 @@ static void PlayerNotOnBikeMoving(u8, u16);
static u8 CheckForPlayerAvatarCollision(u8);
static u8 sub_808B028(u8);
static u8 sub_808B164(struct EventObject *, s16, s16, u8, u8);
-static bool8 sub_808B1BC(s16, s16, u8);
+static bool8 CanStopSurfing(s16, s16, u8);
static bool8 ShouldJumpLedge(s16, s16, u8);
-static u8 sub_808B238(s16, s16, u8);
-static void check_acro_bike_metatile(s16, s16, u8, u8 *);
+static bool8 TryPushBoulder(s16, s16, u8);
+static void CheckAcroBikeCollision(s16, s16, u8, u8 *);
static void DoPlayerAvatarTransition(void);
static void PlayerAvatarTransition_Dummy(struct EventObject *a);
@@ -115,9 +115,9 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct Event
static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct EventObject *eventObject);
static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct EventObject *eventObject);
-static void sub_808C750(u8);
-static void taskFF_0805D1D4(u8 taskId);
-static void sub_808C814(u8 taskId);
+static void CreateStopSurfingTask(u8);
+static void Task_StopSurfingInit(u8 taskId);
+static void Task_WaitStopSurfing(u8 taskId);
static void Task_Fishing(u8 taskId);
static u8 Fishing1(struct Task *task);
@@ -194,7 +194,7 @@ static void (*const gUnknown_08497490[])(u8, u16) =
PlayerNotOnBikeMoving,
};
-static bool8 (*const gUnknown_0849749C[])(u8) =
+static bool8 (*const sAcroBikeTrickMetatiles[])(u8) =
{
MetatileBehavior_IsBumpySlope,
MetatileBehavior_IsIsolatedVerticalRail,
@@ -203,7 +203,13 @@ static bool8 (*const gUnknown_0849749C[])(u8) =
MetatileBehavior_IsHorizontalRail,
};
-static const u8 gUnknown_084974B0[] = {9, 10, 11, 12, 13, 0, 0, 0};
+static const u8 sAcroBikeTrickCollisionTypes[] = {
+ COLLISION_WHEELIE_HOP,
+ COLLISION_ISOLATED_VERTICAL_RAIL,
+ COLLISION_ISOLATED_HORIZONTAL_RAIL,
+ COLLISION_VERTICAL_RAIL,
+ COLLISION_HORIZONTAL_RAIL,
+};
static void (*const gUnknown_084974B8[])(struct EventObject *) =
{
@@ -432,19 +438,19 @@ static bool8 ForcedMovement_None(void)
static u8 DoForcedMovement(u8 direction, void (*b)(u8))
{
struct PlayerAvatar *playerAvatar = &gPlayerAvatar;
- u8 collisionType = CheckForPlayerAvatarCollision(direction);
+ u8 collision = CheckForPlayerAvatarCollision(direction);
playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
- if (collisionType != 0)
+ if (collision)
{
ForcedMovement_None();
- if (collisionType <= 4)
+ if (collision < COLLISION_STOP_SURFING)
{
return 0;
}
else
{
- if (collisionType == COLLISION_LEDGE_JUMP)
+ if (collision == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(direction);
playerAvatar->flags |= PLAYER_AVATAR_FLAG_6;
playerAvatar->runningState = MOVING;
@@ -605,33 +611,26 @@ static void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys)
static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys)
{
- u8 r0 = CheckForPlayerAvatarCollision(direction);
+ u8 collision = CheckForPlayerAvatarCollision(direction);
- if (r0 != 0)
+ if (collision)
{
- if (r0 == 6)
+ if (collision == COLLISION_LEDGE_JUMP)
{
PlayerJumpLedge(direction);
return;
}
- else if (r0 == 4 && IsPlayerCollidingWithFarawayIslandMew(direction) != 0)
+ else if (collision == COLLISION_EVENT_OBJECT && IsPlayerCollidingWithFarawayIslandMew(direction))
{
PlayerNotOnBikeCollideWithFarawayIslandMew(direction);
return;
}
else
{
- u8 r4 = r0 - 5;
-
- if (r4 > 3)
- {
+ u8 adjustedCollision = collision - COLLISION_STOP_SURFING;
+ if (adjustedCollision > 3)
PlayerNotOnBikeCollide(direction);
- return;
- }
- else
- {
- return;
- }
+ return;
}
}
@@ -677,50 +676,49 @@ static u8 sub_808B028(u8 direction)
return sub_808B164(playerEventObj, x, y, direction, MapGridGetMetatileBehaviorAt(x, y));
}
-u8 CheckForEventObjectCollision(struct EventObject *a, s16 x, s16 y, u8 direction, u8 e)
+u8 CheckForEventObjectCollision(struct EventObject *eventObject, s16 x, s16 y, u8 direction, u8 metatileBehavior)
{
- u8 collision;
+ u8 collision = GetCollisionAtCoords(eventObject, x, y, direction);
+ if (collision == COLLISION_ELEVATION_MISMATCH && CanStopSurfing(x, y, direction))
+ return COLLISION_STOP_SURFING;
- collision = GetCollisionAtCoords(a, x, y, direction);
- if (collision == 3 && sub_808B1BC(x, y, direction))
- return 5;
if (ShouldJumpLedge(x, y, direction))
{
IncrementGameStat(GAME_STAT_JUMPED_DOWN_LEDGES);
return COLLISION_LEDGE_JUMP;
}
- if (collision == 4 && sub_808B238(x, y, direction))
- return 7;
+ if (collision == COLLISION_EVENT_OBJECT && TryPushBoulder(x, y, direction))
+ return COLLISION_PUSHED_BOULDER;
- if (collision == 0)
+ if (collision == COLLISION_NONE)
{
if (CheckForRotatingGatePuzzleCollision(direction, x, y))
- return 8;
- check_acro_bike_metatile(x, y, e, &collision);
+ return COLLISION_ROTATING_GATE;
+ CheckAcroBikeCollision(x, y, metatileBehavior, &collision);
}
return collision;
}
-static u8 sub_808B164(struct EventObject *a, s16 x, s16 y, u8 direction, u8 e)
+static u8 sub_808B164(struct EventObject *eventObject, s16 x, s16 y, u8 direction, u8 metatileBehavior)
{
- u8 collision = GetCollisionAtCoords(a, x, y, direction);
+ u8 collision = GetCollisionAtCoords(eventObject, x, y, direction);
- if (collision == 0)
+ if (collision == COLLISION_NONE)
{
- if (CheckForRotatingGatePuzzleCollisionWithoutAnimation(direction, x, y) != 0)
- return 8;
- check_acro_bike_metatile(x, y, e, &collision);
+ if (CheckForRotatingGatePuzzleCollisionWithoutAnimation(direction, x, y))
+ return COLLISION_ROTATING_GATE;
+ CheckAcroBikeCollision(x, y, metatileBehavior, &collision);
}
return collision;
}
-static bool8 sub_808B1BC(s16 x, s16 y, u8 direction)
+static bool8 CanStopSurfing(s16 x, s16 y, u8 direction)
{
if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
&& MapGridGetZCoordAt(x, y) == 3
&& GetEventObjectIdByXYZ(x, y, 3) == EVENT_OBJECTS_COUNT)
{
- sub_808C750(direction);
+ CreateStopSurfingTask(direction);
return TRUE;
}
else
@@ -737,7 +735,7 @@ static bool8 ShouldJumpLedge(s16 x, s16 y, u8 z)
return FALSE;
}
-static u8 sub_808B238(s16 x, s16 y, u8 direction)
+static bool8 TryPushBoulder(s16 x, s16 y, u8 direction)
{
if (FlagGet(FLAG_SYS_USE_STRENGTH))
{
@@ -748,26 +746,26 @@ static u8 sub_808B238(s16 x, s16 y, u8 direction)
x = gEventObjects[eventObjectId].currentCoords.x;
y = gEventObjects[eventObjectId].currentCoords.y;
MoveCoords(direction, &x, &y);
- if (GetCollisionAtCoords(&gEventObjects[eventObjectId], x, y, direction) == 0
+ if (GetCollisionAtCoords(&gEventObjects[eventObjectId], x, y, direction) == COLLISION_NONE
&& MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)) == 0)
{
StartStrengthAnim(eventObjectId, direction);
- return 1;
+ return TRUE;
}
}
}
- return 0;
+ return FALSE;
}
-static void check_acro_bike_metatile(s16 unused1, s16 unused2, u8 c, u8 *d)
+static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision)
{
u8 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < ARRAY_COUNT(sAcroBikeTrickMetatiles); i++)
{
- if (gUnknown_0849749C[i](c))
+ if (sAcroBikeTrickMetatiles[i](metatileBehavior))
{
- *d = gUnknown_084974B0[i];
+ *collision = sAcroBikeTrickCollisionTypes[i];
return;
}
}
@@ -1314,7 +1312,8 @@ bool8 IsPlayerFacingSurfableFishableWater(void)
s16 y = playerEventObj->currentCoords.y;
MoveCoords(playerEventObj->facingDirection, &x, &y);
- if (GetCollisionAtCoords(playerEventObj, x, y, playerEventObj->facingDirection) == 3 && PlayerGetZCoord() == 3
+ if (GetCollisionAtCoords(playerEventObj, x, y, playerEventObj->facingDirection) == COLLISION_ELEVATION_MISMATCH
+ && PlayerGetZCoord() == 3
&& MetatileBehavior_IsSurfableFishableWater(MapGridGetMetatileBehaviorAt(x, y)))
return TRUE;
else
@@ -1626,9 +1625,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Event
return FALSE;
}
-/* Some Field effect */
-
-static void sub_808C750(u8 a)
+static void CreateStopSurfingTask(u8 direction)
{
u8 taskId;
@@ -1638,12 +1635,12 @@ static void sub_808C750(u8 a)
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING;
gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT;
gPlayerAvatar.preventStep = TRUE;
- taskId = CreateTask(taskFF_0805D1D4, 0xFF);
- gTasks[taskId].data[0] = a;
- taskFF_0805D1D4(taskId);
+ taskId = CreateTask(Task_StopSurfingInit, 0xFF);
+ gTasks[taskId].data[0] = direction;
+ Task_StopSurfingInit(taskId);
}
-static void taskFF_0805D1D4(u8 taskId)
+static void Task_StopSurfingInit(u8 taskId)
{
struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId];
@@ -1654,10 +1651,10 @@ static void taskFF_0805D1D4(u8 taskId)
}
sub_81555AC(playerEventObj->fieldEffectSpriteId, 2);
EventObjectSetHeldMovement(playerEventObj, GetJumpSpecialMovementAction((u8)gTasks[taskId].data[0]));
- gTasks[taskId].func = sub_808C814;
+ gTasks[taskId].func = Task_WaitStopSurfing;
}
-static void sub_808C814(u8 taskId)
+static void Task_WaitStopSurfing(u8 taskId)
{
struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId];
diff --git a/src/field_poison.c b/src/field_poison.c
index 532c7f027..8385966d4 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -14,6 +14,8 @@
#include "strings.h"
#include "task.h"
#include "trainer_hill.h"
+#include "constants/field_poison.h"
+#include "constants/party_menu.h"
#include "constants/species.h"
static bool32 IsMonValidSpecies(struct Pokemon *pokemon)
@@ -55,14 +57,14 @@ static void FaintFromFieldPoison(u8 partyIdx)
static bool32 MonFaintedFromPoison(u8 partyIdx)
{
struct Pokemon *pokemon = gPlayerParty + partyIdx;
- if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
+ if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
{
return TRUE;
}
return FALSE;
}
-static void Task_WhiteOut(u8 taskId)
+static void Task_TryFieldPoisonWhiteOut(u8 taskId)
{
s16 *data = gTasks[taskId].data;
switch (data[0])
@@ -89,18 +91,18 @@ static void Task_WhiteOut(u8 taskId)
case 2:
if (AllMonsFainted())
{
- if (InBattlePyramid() | InBattlePike() || sub_81D5C18())
+ if (InBattlePyramid() | InBattlePike() || InTrainerHillChallenge())
{
- gSpecialVar_Result = 2;
+ gSpecialVar_Result = FLDPSN_FRONTIER_WHITEOUT;
}
else
{
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = FLDPSN_WHITEOUT;
}
}
else
{
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FLDPSN_NO_WHITEOUT;
}
EnableBothScriptContexts();
DestroyTask(taskId);
@@ -108,9 +110,9 @@ static void Task_WhiteOut(u8 taskId)
}
}
-void ExecuteWhiteOut(void)
+void TryFieldPoisonWhiteOut(void)
{
- CreateTask(Task_WhiteOut, 80);
+ CreateTask(Task_TryFieldPoisonWhiteOut, 80);
ScriptContext1_Stop();
}
@@ -123,7 +125,7 @@ s32 DoPoisonFieldEffect(void)
u32 numFainted = 0;
for (i = 0; i < PARTY_SIZE; i++)
{
- if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
+ if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN)
{
hp = GetMonData(pokemon, MON_DATA_HP);
if (hp == 0 || --hp == 0)
diff --git a/src/field_region_map.c b/src/field_region_map.c
index ac1b26154..184c49b40 100644
--- a/src/field_region_map.c
+++ b/src/field_region_map.c
@@ -3,7 +3,7 @@
#include "gpu_regs.h"
#include "international_string_util.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "palette.h"
#include "region_map.h"
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 9a5d47156..1edb775ba 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -34,7 +34,7 @@
#include "event_obj_lock.h"
#include "fldeff.h"
-extern const u16 gUnknown_82EC7CC[];
+extern const u16 gOrbEffectBackgroundLayerFlags[];
// This file's functions.
static void sub_8080B9C(u8);
@@ -48,7 +48,7 @@ static bool32 WaitForWeatherFadeIn(void);
static void task0A_mpl_807E31C(u8 taskId);
static void sub_80AFA0C(u8 taskId);
static void sub_80AFA88(u8 taskId);
-static void task50_0807F0C8(u8);
+static void Task_EnableScriptAfterMusicFade(u8 taskId);
// const
const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 };
@@ -556,7 +556,7 @@ void sub_80AF848(void)
gFieldCallback = sub_80AF3E8;
}
-void sub_80AF87C(void)
+void DoMossdeepGymWarp(void)
{
sub_8085540(1);
ScriptContext2_Enable();
@@ -638,7 +638,7 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
}
}
-void sub_80AF9F8(void)
+void ReturnFromLinkRoom(void)
{
CreateTask(Task_ReturnToWorldFromLinkRoom, 10);
}
@@ -800,7 +800,7 @@ static void SetFlashScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 c
}
}
-static void SetFlash2ScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right)
+static void SetOrbFlashScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right)
{
if (y <= 160)
{
@@ -816,17 +816,17 @@ static void SetFlash2ScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s3
}
}
-static void SetFlash2ScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 centerY, s32 radius)
+static void SetOrbFlashScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 centerY, s32 radius)
{
s32 r = radius;
s32 v2 = radius;
s32 v3 = 0;
while (r >= v3)
{
- SetFlash2ScanlineEffectWindowBoundary(dest, centerY - v3, centerX - r, centerX + r);
- SetFlash2ScanlineEffectWindowBoundary(dest, centerY + v3, centerX - r, centerX + r);
- SetFlash2ScanlineEffectWindowBoundary(dest, centerY - r, centerX - v3, centerX + v3);
- SetFlash2ScanlineEffectWindowBoundary(dest, centerY + r, centerX - v3, centerX + v3);
+ SetOrbFlashScanlineEffectWindowBoundary(dest, centerY - v3, centerX - r, centerX + r);
+ SetOrbFlashScanlineEffectWindowBoundary(dest, centerY + v3, centerX - r, centerX + r);
+ SetOrbFlashScanlineEffectWindowBoundary(dest, centerY - r, centerX - v3, centerX + v3);
+ SetOrbFlashScanlineEffectWindowBoundary(dest, centerY + r, centerX - v3, centerX + v3);
v2 -= (v3 * 2) - 1;
v3++;
if (v2 < 0)
@@ -878,18 +878,18 @@ static void UpdateFlashLevelEffect(u8 taskId)
}
}
-static void UpdateFlash2LevelEffect(u8 taskId)
+static void UpdateOrbFlashEffect(u8 taskId)
{
s16 *data = gTasks[taskId].data;
switch (data[0])
{
case 0:
- SetFlash2ScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
+ SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
data[0] = 1;
break;
case 1:
- SetFlash2ScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
+ SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
data[0] = 0;
tCurFlashRadius += tFlashRadiusDelta;
if (tCurFlashRadius > tDestFlashRadius)
@@ -948,7 +948,7 @@ static u8 sub_80AFFDC(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 dest
static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta)
{
- u8 taskId = CreateTask(UpdateFlash2LevelEffect, 80);
+ u8 taskId = CreateTask(UpdateOrbFlashEffect, 80);
s16 *data = gTasks[taskId].data;
tCurFlashRadius = initialFlashRadius;
@@ -970,7 +970,7 @@ static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 dest
#undef tFlashRadiusDelta
#undef tClearScanlineEffect
-void sub_80B009C(u8 flashLevel)
+void AnimateFlash(u8 flashLevel)
{
u8 curFlashLevel = Overworld_GetFlashLevel();
u8 value = 0;
@@ -1063,12 +1063,12 @@ void sub_80B0268(void)
CreateTask(sub_80B01BC, 10);
}
-static void sub_80B028C(u8 a1)
+static void LoadOrbEffectPalette(bool8 blueOrb)
{
int i;
u16 color[1];
- if (!a1)
+ if (!blueOrb)
color[0] = RGB_RED;
else
color[0] = RGB_BLUE;
@@ -1079,12 +1079,12 @@ static void sub_80B028C(u8 a1)
}
}
-static bool8 sub_80B02C8(u16 a1)
+static bool8 sub_80B02C8(u16 shakeDir)
{
u8 lo = REG_BLDALPHA & 0xFF;
u8 hi = REG_BLDALPHA >> 8;
- if (a1)
+ if (shakeDir != 0)
{
if (lo)
{
@@ -1107,58 +1107,69 @@ static bool8 sub_80B02C8(u16 a1)
return FALSE;
}
-static void sub_80B0318(u8 taskId)
+#define tState data[0]
+#define tBlueOrb data[1]
+#define tCenterX data[2]
+#define tCenterY data[3]
+#define tShakeDelay data[4]
+#define tShakeDir data[5]
+#define tDispCnt data[6]
+#define tBldCnt data[7]
+#define tBldAlpha data[8]
+#define tWinIn data[9]
+#define tWinOut data[10]
+
+static void Task_OrbEffect(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
- data[6] = REG_DISPCNT;
- data[7] = REG_BLDCNT;
- data[8] = REG_BLDALPHA;
- data[9] = REG_WININ;
- data[10] = REG_WINOUT;
+ tDispCnt = REG_DISPCNT;
+ tBldCnt = REG_BLDCNT;
+ tBldAlpha = REG_BLDALPHA;
+ tWinIn = REG_WININ;
+ tWinOut = REG_WINOUT;
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
- SetGpuRegBits(REG_OFFSET_BLDCNT, gUnknown_82EC7CC[0]);
+ SetGpuRegBits(REG_OFFSET_BLDCNT, gOrbEffectBackgroundLayerFlags[0]);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 7));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ);
- sub_8199C30(0, 0, 0, 0x1E, 0x14, 0xF);
+ SetBgTilemapPalette(0, 0, 0, 0x1E, 0x14, 0xF);
schedule_bg_copy_tilemap_to_vram(0);
- SetFlash2ScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], data[2], data[3], 1);
+ SetOrbFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], tCenterX, tCenterY, 1);
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
ScanlineEffect_SetParams(sFlashEffectParams);
- data[0] = 1;
+ tState = 1;
break;
case 1:
sub_8199DF0(0, PIXEL_FILL(1), 0, 1);
- sub_80B028C(data[1]);
- sub_80B003C(data[2], data[3], 1, 160, 1, 2);
- data[0] = 2;
+ LoadOrbEffectPalette(tBlueOrb);
+ sub_80B003C(tCenterX, tCenterY, 1, 160, 1, 2);
+ tState = 2;
break;
case 2:
- if (!FuncIsActiveTask(UpdateFlash2LevelEffect))
+ if (!FuncIsActiveTask(UpdateOrbFlashEffect))
{
EnableBothScriptContexts();
- data[0] = 3;
+ tState = 3;
}
break;
case 3:
InstallCameraPanAheadCallback();
SetCameraPanningCallback(NULL);
- data[5] = 0;
- data[4] = 4;
- data[0] = 4;
+ tShakeDir = 0;
+ tShakeDelay = 4;
+ tState = 4;
break;
case 4:
- data[4]--;
- if (!data[4])
+ if (--tShakeDelay == 0)
{
s32 panning;
- data[4] = 4;
- data[5] ^= 1;
- if (data[5])
+ tShakeDelay = 4;
+ tShakeDir ^= 1;
+ if (tShakeDir)
panning = 4;
else
panning = -4;
@@ -1167,77 +1178,88 @@ static void sub_80B0318(u8 taskId)
break;
case 6:
InstallCameraPanAheadCallback();
- data[4] = 8;
- data[0] = 7;
+ tShakeDelay = 8;
+ tState = 7;
break;
case 7:
- data[4]--;
- if (!data[4])
+ if (--tShakeDelay == 0)
{
- data[4] = 8;
- data[5] ^= 1;
- if (sub_80B02C8(data[5]) == TRUE)
+ tShakeDelay = 8;
+ tShakeDir ^= 1;
+ if (sub_80B02C8(tShakeDir) == TRUE)
{
- data[0] = 5;
+ tState = 5;
sub_8199DF0(0, PIXEL_FILL(0), 0, 1);
}
}
break;
case 5:
SetGpuReg(REG_OFFSET_WIN0H, 255);
- SetGpuReg(REG_OFFSET_DISPCNT, data[6]);
- SetGpuReg(REG_OFFSET_BLDCNT, data[7]);
- SetGpuReg(REG_OFFSET_BLDALPHA, data[8]);
- SetGpuReg(REG_OFFSET_WININ, data[9]);
- SetGpuReg(REG_OFFSET_WINOUT, data[10]);
+ SetGpuReg(REG_OFFSET_DISPCNT, tDispCnt);
+ SetGpuReg(REG_OFFSET_BLDCNT, tBldCnt);
+ SetGpuReg(REG_OFFSET_BLDALPHA, tBldAlpha);
+ SetGpuReg(REG_OFFSET_WININ, tWinIn);
+ SetGpuReg(REG_OFFSET_WINOUT, tWinOut);
EnableBothScriptContexts();
DestroyTask(taskId);
break;
}
}
-void sub_80B0534(void)
+void DoOrbEffect(void)
{
- u8 taskId = CreateTask(sub_80B0318, 80);
+ u8 taskId = CreateTask(Task_OrbEffect, 80);
s16 *data = gTasks[taskId].data;
if (gSpecialVar_Result == 0)
{
- data[1] = 0;
- data[2] = 104;
+ tBlueOrb = FALSE;
+ tCenterX = 104;
}
else if (gSpecialVar_Result == 1)
{
- data[1] = 1;
- data[2] = 136;
+ tBlueOrb = TRUE;
+ tCenterX = 136;
}
else if (gSpecialVar_Result == 2)
{
- data[1] = 0;
- data[2] = 120;
+ tBlueOrb = FALSE;
+ tCenterX = 120;
}
else
{
- data[1] = 1;
- data[2] = 120;
+ tBlueOrb = TRUE;
+ tCenterX = 120;
}
- data[3] = 80;
+ tCenterY = 80;
}
-void sub_80B058C(void)
+void FadeOutOrbEffect(void)
{
- u8 taskId = FindTaskIdByFunc(sub_80B0318);
- gTasks[taskId].data[0] = 6;
+ u8 taskId = FindTaskIdByFunc(Task_OrbEffect);
+ gTasks[taskId].tState = 6;
}
-void sub_80B05B4(void)
+#undef tState
+#undef tBlueOrb
+#undef tCenterX
+#undef tCenterY
+#undef tShakeDelay
+#undef tShakeDir
+#undef tDispCnt
+#undef tBldCnt
+#undef tBldAlpha
+#undef tWinIn
+#undef tWinOut
+
+void Script_FadeOutMapMusic(void)
{
Overworld_FadeOutMapMusic();
- CreateTask(task50_0807F0C8, 80);
+ CreateTask(Task_EnableScriptAfterMusicFade, 80);
}
-static void task50_0807F0C8(u8 taskId)
+static void Task_EnableScriptAfterMusicFade(u8 taskId)
{
if (BGMusicStopped() == TRUE)
{
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index dbf68e1a2..231f4dd42 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -302,7 +302,7 @@ void Task_HandlePorthole(u8 taskId)
}
break;
case EXIT_PORTHOLE: // exit porthole.
- FlagClear(FLAG_SPECIAL_FLAG_0x4001);
+ FlagClear(FLAG_DONT_TRANSITION_MUSIC);
FlagClear(FLAG_HIDE_MAP_NAME_POPUP);
SetWarpDestinationToDynamicWarp(0);
DoDiveWarp();
@@ -339,7 +339,7 @@ void sub_80FB768(void)
void sub_80FB7A4(void)
{
FlagSet(FLAG_SYS_CRUISE_MODE);
- FlagSet(FLAG_SPECIAL_FLAG_0x4001);
+ FlagSet(FLAG_DONT_TRANSITION_MUSIC);
FlagSet(FLAG_HIDE_MAP_NAME_POPUP);
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
sub_80FB59C();
diff --git a/src/field_specials.c b/src/field_specials.c
index f20e38c8b..7c323792a 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_tower.h"
#include "cable_club.h"
@@ -55,10 +55,12 @@
#include "constants/heal_locations.h"
#include "constants/map_types.h"
#include "constants/maps.h"
+#include "constants/tv.h"
#include "constants/script_menu.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/moves.h"
+#include "constants/party_menu.h"
#include "constants/vars.h"
#include "constants/battle_frontier.h"
#include "constants/weather.h"
@@ -68,8 +70,8 @@
EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE;
EWRAM_DATA u8 gBikeCollisions = 0;
static EWRAM_DATA u32 sBikeCyclingTimer = 0;
-static EWRAM_DATA u8 sUnknown_0203AB5C = 0;
-static EWRAM_DATA u8 sPetalburgGymSlidingDoorFrameCounter = 0;
+static EWRAM_DATA u8 sSlidingDoorNextFrameCounter = 0;
+static EWRAM_DATA u8 sSlidingDoorFrame = 0;
static EWRAM_DATA u8 sTutorMoveAndElevatorWindowId = 0;
static EWRAM_DATA u16 sLilycoveDeptStore_NeverRead = 0;
static EWRAM_DATA u16 sLilycoveDeptStore_DefaultFloorChoice = 0;
@@ -95,16 +97,16 @@ u16 GetNumMovedLilycoveFanClubMembers(void);
static void RecordCyclingRoadResults(u32, u8);
static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEventId, u8 paletteNum);
-static void Task_PetalburgGym(u8);
-static void PetalburgGymFunc(u8, u16);
+static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId);
+static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId);
static void Task_PCTurnOnEffect(u8);
static void PCTurnOnEffect_0(struct Task *);
static void PCTurnOnEffect_1(s16, s8, s8);
static void PCTurnOffEffect(void);
static void Task_LotteryCornerComputerEffect(u8);
static void LotteryCornerComputerEffect(struct Task *);
-static void sub_81395BC(u8 taskId);
-static void sub_8139620(u8 taskId);
+static void Task_ShakeCamera(u8 taskId);
+static void StopCameraShake(u8 taskId);
static void Task_MoveElevator(u8 taskId);
static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending);
static void Task_MoveElevatorWindowLights(u8 taskId);
@@ -126,8 +128,8 @@ static void Task_DeoxysRockInteraction(u8 taskId);
static void ChangeDeoxysRockLevel(u8 a0);
static void WaitForDeoxysRockMovement(u8 taskId);
static void sub_813B57C(u8 taskId);
-static void sub_813B824(u8 taskId);
-static void _fwalk(u8 taskId);
+static void Task_LoopWingFlapSE(u8 taskId);
+static void Task_CloseBattlePikeCurtain(u8 taskId);
static u8 sub_813BF44(void);
static void sub_813BD84(void);
static u16 sub_813BB74(void);
@@ -635,6 +637,7 @@ static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEvent
}
}
+// NOTE: Coordinates are +7, +7 from actual in-map coordinates
static const struct UCoords8 sMauvilleGymSwitchCoords[] =
{
{ 7, 22},
@@ -643,26 +646,24 @@ static const struct UCoords8 sMauvilleGymSwitchCoords[] =
{15, 16}
};
-// Flips the switches on the ground when the player steps on them.
-void MauvilleGymSpecial1(void)
+// Presses the stepped-on switch and raises the rest
+void MauvilleGymPressSwitch(void)
{
u8 i;
for (i = 0; i < ARRAY_COUNT(sMauvilleGymSwitchCoords); i++)
{
if (i == gSpecialVar_0x8004)
- {
MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, PressedSwitch));
- }
else
- {
MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, RaisedSwitch));
- }
}
}
-void MauvilleGymSpecial2(void)
+// Sets the gym barriers back to the default state; their alt state is handled by MauvilleCity_Gym_EventScript_SetAltBarriers
+void MauvilleGymSetDefaultBarriers(void)
{
int x, y;
+ // All switches/barriers are within these coord ranges -7
for (y = 12; y < 24; y++)
{
for (x = 7; x < 16; x++)
@@ -734,13 +735,9 @@ void MauvilleGymSpecial2(void)
break;
case METATILE_ID(MauvilleGym, FloorTile):
if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_ID(MauvilleGym, GreenBeamV1_On))
- {
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV2_On) | METATILE_COLLISION_MASK);
- }
else
- {
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV2_On) | METATILE_COLLISION_MASK);
- }
break;
case METATILE_ID(MauvilleGym, PoleBottom_Off):
MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV1_On) | METATILE_COLLISION_MASK);
@@ -757,7 +754,7 @@ void MauvilleGymSpecial2(void)
}
// Presses all switches and deactivates all beams.
-void MauvilleGymSpecial3(void)
+void MauvilleGymDeactivatePuzzle(void)
{
int i, x, y;
const struct UCoords8 *switchCoords = sMauvilleGymSwitchCoords;
@@ -814,7 +811,7 @@ void MauvilleGymSpecial3(void)
}
}
-static const u8 gUnknown_085B2B78[] = {0, 1, 1, 1, 1};
+static const bool8 sSlidingDoorNextFrameDelay[] = {0, 1, 1, 1, 1};
static const u16 sPetalburgGymSlidingDoorMetatiles[] = {
METATILE_ID(PetalburgGym, SlidingDoor_Frame0),
@@ -824,21 +821,21 @@ static const u16 sPetalburgGymSlidingDoorMetatiles[] = {
METATILE_ID(PetalburgGym, SlidingDoor_Frame4),
};
-void PetalburgGymSpecial1(void)
+void PetalburgGymSlideOpenRoomDoors(void)
{
- sUnknown_0203AB5C = 0;
- sPetalburgGymSlidingDoorFrameCounter = 0;
+ sSlidingDoorNextFrameCounter = 0;
+ sSlidingDoorFrame = 0;
PlaySE(SE_KI_GASYAN);
- CreateTask(Task_PetalburgGym, 8);
+ CreateTask(Task_PetalburgGymSlideOpenRoomDoors, 8);
}
-static void Task_PetalburgGym(u8 taskId)
+static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId)
{
- if (gUnknown_085B2B78[sPetalburgGymSlidingDoorFrameCounter] == sUnknown_0203AB5C)
+ if (sSlidingDoorNextFrameDelay[sSlidingDoorFrame] == sSlidingDoorNextFrameCounter)
{
- PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sPetalburgGymSlidingDoorFrameCounter]);
- sUnknown_0203AB5C = 0;
- if ((++sPetalburgGymSlidingDoorFrameCounter) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles))
+ PetalburgGymSetDoorMetatiles(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sSlidingDoorFrame]);
+ sSlidingDoorNextFrameCounter = 0;
+ if ((++sSlidingDoorFrame) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles))
{
DestroyTask(taskId);
EnableBothScriptContexts();
@@ -846,11 +843,11 @@ static void Task_PetalburgGym(u8 taskId)
}
else
{
- sUnknown_0203AB5C++;
+ sSlidingDoorNextFrameCounter++;
}
}
-static void PetalburgGymFunc(u8 roomNumber, u16 metatileId)
+static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId)
{
u16 doorCoordsX[4];
u16 doorCoordsY[4];
@@ -915,9 +912,9 @@ static void PetalburgGymFunc(u8 roomNumber, u16 metatileId)
DrawWholeMapView();
}
-void PetalburgGymSpecial2(void)
+void PetalburgGymUnlockRoomDoors(void)
{
- PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[4]);
+ PetalburgGymSetDoorMetatiles(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[4]);
}
void ShowFieldMessageStringVar4(void)
@@ -977,7 +974,7 @@ void CableCarWarp(void)
}
}
-void SetFlagInVar(void)
+void SetHiddenItemFlag(void)
{
FlagSet(gSpecialVar_0x8004);
}
@@ -1493,44 +1490,56 @@ bool8 IsPokerusInParty(void)
return TRUE;
}
-void sub_8139560(void)
+#define horizontalPan data[0]
+#define delayCounter data[1]
+#define numShakes data[2]
+#define delay data[3]
+#define verticalPan data[4]
+
+void ShakeCamera(void)
{
- u8 taskId = CreateTask(sub_81395BC, 9);
- gTasks[taskId].data[0] = gSpecialVar_0x8005;
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = gSpecialVar_0x8006;
- gTasks[taskId].data[3] = gSpecialVar_0x8007;
- gTasks[taskId].data[4] = gSpecialVar_0x8004;
+ u8 taskId = CreateTask(Task_ShakeCamera, 9);
+ gTasks[taskId].horizontalPan = gSpecialVar_0x8005;
+ gTasks[taskId].delayCounter = 0;
+ gTasks[taskId].numShakes = gSpecialVar_0x8006;
+ gTasks[taskId].delay = gSpecialVar_0x8007;
+ gTasks[taskId].verticalPan = gSpecialVar_0x8004;
SetCameraPanningCallback(NULL);
PlaySE(SE_W070);
}
-static void sub_81395BC(u8 taskId)
+static void Task_ShakeCamera(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[1]++;
- if (data[1] % data[3] == 0)
+ delayCounter++;
+ if (delayCounter % delay == 0)
{
- data[1] = 0;
- data[2]--;
- data[0] = -data[0];
- data[4] = -data[4];
- SetCameraPanning(data[0], data[4]);
- if (data[2] == 0)
+ delayCounter = 0;
+ numShakes--;
+ horizontalPan = -horizontalPan;
+ verticalPan = -verticalPan;
+ SetCameraPanning(horizontalPan, verticalPan);
+ if (numShakes == 0)
{
- sub_8139620(taskId);
+ StopCameraShake(taskId);
InstallCameraPanAheadCallback();
}
}
}
-static void sub_8139620(u8 taskId)
+static void StopCameraShake(u8 taskId)
{
DestroyTask(taskId);
EnableBothScriptContexts();
}
+#undef horizontalPan
+#undef delayCounter
+#undef numShakes
+#undef delay
+#undef verticalPan
+
bool8 FoundBlackGlasses(void)
{
return FlagGet(FLAG_HIDDEN_ITEM_ROUTE_116_BLACK_GLASSES);
@@ -1621,20 +1630,20 @@ void BufferLottoTicketNumber(void)
else if (gSpecialVar_Result >= 1000)
{
gStringVar1[0] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 1, gSpecialVar_Result, 0, CountDigits(gSpecialVar_Result));
+ ConvertIntToDecimalStringN(gStringVar1 + 1, gSpecialVar_Result, STR_CONV_MODE_LEFT_ALIGN, CountDigits(gSpecialVar_Result));
}
else if (gSpecialVar_Result >= 100)
{
gStringVar1[0] = CHAR_0;
gStringVar1[1] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 2, gSpecialVar_Result, 0, CountDigits(gSpecialVar_Result));
+ ConvertIntToDecimalStringN(gStringVar1 + 2, gSpecialVar_Result, STR_CONV_MODE_LEFT_ALIGN, CountDigits(gSpecialVar_Result));
}
else if (gSpecialVar_Result >= 10)
{
gStringVar1[0] = CHAR_0;
gStringVar1[1] = CHAR_0;
gStringVar1[2] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 3, gSpecialVar_Result, 0, CountDigits(gSpecialVar_Result));
+ ConvertIntToDecimalStringN(gStringVar1 + 3, gSpecialVar_Result, STR_CONV_MODE_LEFT_ALIGN, CountDigits(gSpecialVar_Result));
}
else
{
@@ -1642,7 +1651,7 @@ void BufferLottoTicketNumber(void)
gStringVar1[1] = CHAR_0;
gStringVar1[2] = CHAR_0;
gStringVar1[3] = CHAR_0;
- ConvertIntToDecimalStringN(gStringVar1 + 4, gSpecialVar_Result, 0, CountDigits(gSpecialVar_Result));
+ ConvertIntToDecimalStringN(gStringVar1 + 4, gSpecialVar_Result, STR_CONV_MODE_LEFT_ALIGN, CountDigits(gSpecialVar_Result));
}
}
@@ -1699,7 +1708,7 @@ bool8 InMultiBattleRoom(void)
return FALSE;
}
-void sub_8139980(void)
+void OffsetCameraForBattle(void)
{
SetCameraPanningCallback(NULL);
SetCameraPanning(8, 0);
@@ -2050,7 +2059,7 @@ bool8 UsedPokemonCenterWarp(void)
return FALSE;
}
-bool32 sub_8139ED0(void)
+bool32 PlayerNotAtTrainerHillEntrance(void)
{
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_HILL_ENTRANCE) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_HILL_ENTRANCE))
{
@@ -3473,7 +3482,7 @@ void IncrementBirthIslandRockStepCount(void)
}
}
-void sub_813B1D0(void)
+void SetDeoxysRockPalette(void)
{
LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], 0x1A0, 8);
BlendPalettes(0x04000000, 16, 0);
@@ -3713,7 +3722,7 @@ u32 GetMartEmployeeObjectEventId(void)
return 1;
}
-bool32 sub_813B4E0(void)
+bool32 IsTrainerRegistered(void)
{
int index = GetRematchIdxByTrainerIdx(gSpecialVar_0x8004);
if (index >= 0)
@@ -3725,12 +3734,11 @@ bool32 sub_813B4E0(void)
}
// Always returns FALSE
-bool32 sub_813B514(void)
+bool32 ShouldDistributeEonTicket(void)
{
- if (!VarGet(VAR_ALWAYS_ZERO_0x403F))
- {
+ if (!VarGet(VAR_DISTRIBUTE_EON_TICKET))
return FALSE;
- }
+
return TRUE;
}
@@ -3889,40 +3897,46 @@ void Script_DoRayquazaScene(void)
}
}
-void sub_813B80C(void)
+#define playCount data[0]
+#define delay data[1]
+
+void LoopWingFlapSE(void)
{
- CreateTask(sub_813B824, 8);
+ CreateTask(Task_LoopWingFlapSE, 8);
PlaySE(SE_W017);
}
-static void sub_813B824(u8 taskId)
+static void Task_LoopWingFlapSE(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[1]++;
- if (data[1] == gSpecialVar_0x8005)
+ delay++;
+ if (delay == gSpecialVar_0x8005)
{
- data[0]++;
- data[1] = 0;
+ playCount++;
+ delay = 0;
PlaySE(SE_W017);
}
- if (data[0] == gSpecialVar_0x8004 - 1)
+ if (playCount == gSpecialVar_0x8004 - 1)
{
DestroyTask(taskId);
}
}
-void sub_813B880(void)
+#undef playCount
+#undef delay
+
+void CloseBattlePikeCurtain(void)
{
- u8 taskId = CreateTask(_fwalk, 8);
+ u8 taskId = CreateTask(Task_CloseBattlePikeCurtain, 8);
gTasks[taskId].data[0] = 4;
gTasks[taskId].data[1] = 4;
gTasks[taskId].data[2] = 4;
gTasks[taskId].data[3] = 0;
}
-static void _fwalk(u8 taskId)
+static void Task_CloseBattlePikeCurtain(u8 taskId)
{
u8 x, y;
s16 *data = gTasks[taskId].data;
@@ -3934,7 +3948,7 @@ static void _fwalk(u8 taskId)
{
for (x = 0; x < 3; x++)
{
- MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + x + 6, gSaveBlock1Ptr->pos.y + y + 4, x + 0x201 + y * 8 + data[3] * 32);
+ MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + x + 6, gSaveBlock1Ptr->pos.y + y + 4, x + 513 + y * 8 + data[3] * 32);
}
}
DrawWholeMapView();
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 63539e475..21b2732c3 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -16,6 +16,7 @@
#include "secret_base.h"
#include "sound.h"
#include "task.h"
+#include "constants/field_tasks.h"
#include "constants/items.h"
#include "constants/songs.h"
#include "constants/vars.h"
@@ -38,14 +39,14 @@ static void Task_MuddySlope(u8 taskId);
static const TaskFunc sPerStepCallbacks[] =
{
- DummyPerStepCallback,
- AshGrassPerStepCallback,
- FortreeBridgePerStepCallback,
- PacifidlogBridgePerStepCallback,
- SootopolisGymIcePerStepCallback,
- EndTruckSequence,
- SecretBasePerStepCallback,
- CrackedFloorPerStepCallback
+ [STEP_CB_DUMMY] = DummyPerStepCallback,
+ [STEP_CB_ASH] = AshGrassPerStepCallback,
+ [STEP_CB_FORTREE_BRIDGE] = FortreeBridgePerStepCallback,
+ [STEP_CB_PACIFIDLOG_BRIDGE] = PacifidlogBridgePerStepCallback,
+ [STEP_CB_SOOTOPOLIS_ICE] = SootopolisGymIcePerStepCallback,
+ [STEP_CB_TRUCK] = EndTruckSequence,
+ [STEP_CB_SECRET_BASE] = SecretBasePerStepCallback,
+ [STEP_CB_CRACKED_FLOOR] = CrackedFloorPerStepCallback
};
// they are in pairs but declared as 1D array
diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c
index 8fca02707..7f955c10a 100644
--- a/src/field_weather_effect.c
+++ b/src/field_weather_effect.c
@@ -2325,7 +2325,7 @@ static const struct SpriteTemplate sBubbleSpriteTemplate =
{
.tileTag = 0x1205,
.paletteTag = 0x1200,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = sBubbleSpriteAnimCmds,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/fight.c b/src/fight.c
index 5230c2f39..0c4b5a3fa 100644
--- a/src/fight.c
+++ b/src/fight.c
@@ -42,7 +42,7 @@ const struct SpriteTemplate gUnknown_08595E14 =
{
.tileTag = ANIM_TAG_HUMANOID_FOOT,
.paletteTag = ANIM_TAG_HUMANOID_FOOT,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -100,7 +100,7 @@ const struct SpriteTemplate gUnknown_08595E68 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -111,7 +111,7 @@ const struct SpriteTemplate gUnknown_08595E80 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -122,7 +122,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -133,7 +133,7 @@ const struct SpriteTemplate gUnknown_08595EB0 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -144,7 +144,7 @@ const struct SpriteTemplate gUnknown_08595EC8 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595E60,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -155,7 +155,7 @@ const struct SpriteTemplate gUnknown_08595EE0 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595E58,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -178,7 +178,7 @@ const struct SpriteTemplate gUnknown_08595F14 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gUnknown_08595F10,
@@ -201,7 +201,7 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gUnknown_08595F44,
@@ -212,7 +212,7 @@ const struct SpriteTemplate gUnknown_08595F60 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595E58,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -223,7 +223,7 @@ const struct SpriteTemplate gUnknown_08595F78 =
{
.tileTag = ANIM_TAG_DUCK,
.paletteTag = ANIM_TAG_DUCK,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -234,7 +234,7 @@ const struct SpriteTemplate gUnknown_08595F90 =
{
.tileTag = ANIM_TAG_BLUE_LIGHT_WALL,
.paletteTag = ANIM_TAG_BLUE_LIGHT_WALL,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -245,7 +245,7 @@ const struct SpriteTemplate gUnknown_08595FA8 =
{
.tileTag = ANIM_TAG_TORN_METAL,
.paletteTag = ANIM_TAG_TORN_METAL,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -270,7 +270,7 @@ const struct SpriteTemplate gUnknown_08595FEC =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08595FE8,
@@ -281,7 +281,7 @@ const struct SpriteTemplate gUnknown_08596004 =
{
.tileTag = ANIM_TAG_FLAT_ROCK,
.paletteTag = ANIM_TAG_FLAT_ROCK,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -292,7 +292,7 @@ const struct SpriteTemplate gUnknown_0859601C =
{
.tileTag = ANIM_TAG_METEOR,
.paletteTag = ANIM_TAG_METEOR,
- .oam = &gUnknown_0852491C,
+ .oam = &gOamData_AffineOff_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -303,7 +303,7 @@ const struct SpriteTemplate gUnknown_08596034 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -345,7 +345,7 @@ const struct SpriteTemplate gUnknown_08596088 =
{
.tileTag = ANIM_TAG_PURPLE_SCRATCH,
.paletteTag = ANIM_TAG_PURPLE_SCRATCH,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_0859607C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -384,7 +384,7 @@ const struct SpriteTemplate gUnknown_085960D0 =
{
.tileTag = ANIM_TAG_PURPLE_SWIPE,
.paletteTag = ANIM_TAG_PURPLE_SWIPE,
- .oam = &gUnknown_0852491C,
+ .oam = &gOamData_AffineOff_ObjNormal_64x64,
.anims = gUnknown_085960C4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -407,7 +407,7 @@ const struct SpriteTemplate gUnknown_08596104 =
{
.tileTag = ANIM_TAG_HANDS_AND_FEET,
.paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gUnknown_08595E54,
.images = NULL,
.affineAnims = gUnknown_08596100,
@@ -433,7 +433,7 @@ void sub_810CE68(struct Sprite *sprite)
StartSpriteAnim(sprite, gBattleAnimArgs[6]);
gBattleAnimArgs[6] = 0;
- sub_80A7938(sprite);
+ AnimSnoreZ(sprite);
}
void sub_810CEB4(struct Sprite *sprite)
diff --git a/src/fire.c b/src/fire.c
index fdbfb234e..2a12c26cc 100644
--- a/src/fire.c
+++ b/src/fire.c
@@ -65,7 +65,7 @@ const struct SpriteTemplate gUnknown_08595368 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595360,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -76,7 +76,7 @@ const struct SpriteTemplate gUnknown_08595380 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595360,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -132,7 +132,7 @@ const struct SpriteTemplate gUnknown_085953F8 =
{
.tileTag = ANIM_TAG_FIRE,
.paletteTag = ANIM_TAG_FIRE,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gUnknown_085953BC,
.images = NULL,
.affineAnims = gUnknown_085953F4,
@@ -143,7 +143,7 @@ const struct SpriteTemplate gUnknown_08595410 =
{
.tileTag = ANIM_TAG_FIRE,
.paletteTag = ANIM_TAG_FIRE,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085953BC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -154,7 +154,7 @@ const struct SpriteTemplate gUnknown_08595428 =
{
.tileTag = ANIM_TAG_FIRE_PLUME,
.paletteTag = ANIM_TAG_FIRE_PLUME,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085953D8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -165,7 +165,7 @@ const struct SpriteTemplate gUnknown_08595440 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085953D8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -189,7 +189,7 @@ const struct SpriteTemplate gUnknown_0859546C =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595468,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -212,7 +212,7 @@ const struct SpriteTemplate gUnknown_085954A0 =
{
.tileTag = ANIM_TAG_SUNLIGHT,
.paletteTag = ANIM_TAG_SUNLIGHT,
- .oam = &gUnknown_08524A94,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_0859549C,
@@ -238,7 +238,7 @@ const struct SpriteTemplate gEmberSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -249,7 +249,7 @@ const struct SpriteTemplate gEmberFlareSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085954D0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -260,7 +260,7 @@ const struct SpriteTemplate gUnknown_08595504 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085954D0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -271,7 +271,7 @@ const struct SpriteTemplate gUnknown_0859551C =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085954D0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -312,7 +312,7 @@ const struct SpriteTemplate gUnknown_0859556C =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595540,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -323,7 +323,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8595584 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085954D0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -334,7 +334,7 @@ const struct SpriteTemplate gUnknown_0859559C =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085954D0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -345,7 +345,7 @@ const struct SpriteTemplate gUnknown_085955B4 =
{
.tileTag = ANIM_TAG_WARM_ROCK,
.paletteTag = ANIM_TAG_WARM_ROCK,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -368,7 +368,7 @@ const struct SpriteTemplate gUnknown_085955E8 =
{
.tileTag = ANIM_TAG_WARM_ROCK,
.paletteTag = ANIM_TAG_WARM_ROCK,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -414,7 +414,7 @@ const struct SpriteTemplate gUnknown_0859563C =
{
.tileTag = ANIM_TAG_WISP_ORB,
.paletteTag = ANIM_TAG_WISP_ORB,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gUnknown_0859562C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -439,7 +439,7 @@ const struct SpriteTemplate gUnknown_0859566C =
{
.tileTag = ANIM_TAG_WISP_FIRE,
.paletteTag = ANIM_TAG_WISP_FIRE,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595668,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -622,7 +622,7 @@ static void AnimEmberFlare(struct Sprite *sprite)
|| gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
- sprite->callback = sub_80A7938;
+ sprite->callback = AnimSnoreZ;
sprite->callback(sprite);
}
@@ -631,7 +631,7 @@ static void sub_8109200(struct Sprite *sprite)
gBattleAnimArgs[0] = -gBattleAnimArgs[0];
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
- sprite->callback = sub_80A7938;
+ sprite->callback = AnimSnoreZ;
}
// Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
index 3115ff231..fe21ff060 100644
--- a/src/fldeff_cut.c
+++ b/src/fldeff_cut.c
@@ -7,7 +7,7 @@
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "fldeff.h"
-#include "alloc.h"
+#include "malloc.h"
#include "metatile_behavior.h"
#include "overworld.h"
#include "party_menu.h"
@@ -25,7 +25,7 @@
extern struct MapPosition gPlayerFacingPosition;
extern const u8 EventScript_FldEffCut[];
-extern const u8 FarawayIsland_Interior_EventScript_267EDB[];
+extern const u8 FarawayIsland_Interior_EventScript_HideMewWhenGrassCut[];
extern const u8 gFieldEffectPic_CutGrass[];
extern const u16 gFieldEffectObjectPalette6[];
@@ -584,7 +584,7 @@ static void CutGrassSpriteCallbackEnd(struct Sprite *sprite)
ScriptContext2_Disable();
if (IsMewPlayingHideAndSeek() == TRUE)
- ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_267EDB);
+ ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_HideMewWhenGrassCut);
}
void FixLongGrassMetatilesWindowTop(s16 x, s16 y)
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index a2457307b..fedf38cf5 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -26,8 +26,8 @@ struct FlashStruct
};
// static functions
-static void hm2_flash(void);
-static void sub_81371B4(void);
+static void FieldCallback_Flash(void);
+static void FldEff_UseFlash(void);
static bool8 sub_8137304(void);
static void sub_81373F0(void);
static void sub_8137404(u8 taskId);
@@ -86,26 +86,26 @@ bool8 SetUpFieldMove_Flash(void)
else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
- gPostMenuFieldCallback = hm2_flash;
+ gPostMenuFieldCallback = FieldCallback_Flash;
return TRUE;
}
return FALSE;
}
-static void hm2_flash(void)
+static void FieldCallback_Flash(void)
{
u8 taskId = oei_task_add();
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- gTasks[taskId].data[8] = (uintptr_t)sub_81371B4 >> 16;
- gTasks[taskId].data[9] = (uintptr_t)sub_81371B4;
+ gTasks[taskId].data[8] = (uintptr_t)FldEff_UseFlash >> 16;
+ gTasks[taskId].data[9] = (uintptr_t)FldEff_UseFlash;
}
-static void sub_81371B4(void)
+static void FldEff_UseFlash(void)
{
PlaySE(SE_W115);
FlagSet(FLAG_SYS_USE_FLASH);
- ScriptContext1_SetupScript(EventScript_2926F8);
+ ScriptContext1_SetupScript(EventScript_FldEffFlash);
}
static void sub_81371D4(void)
diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c
index c68a95d41..591f61eb7 100644
--- a/src/fldeff_misc.c
+++ b/src/fldeff_misc.c
@@ -583,7 +583,7 @@ bool8 SetUpFieldMove_SecretPower(void)
static void FieldCallback_SecretBaseCave(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_275A86);
+ ScriptContext1_SetupScript(SecretBase_EventScript_CaveUseSecretPower);
}
bool8 FldEff_UseSecretPowerCave(void)
@@ -643,7 +643,7 @@ static void CaveEntranceSpriteCallbackEnd(struct Sprite *sprite)
static void FieldCallback_SecretBaseTree(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_275ADF);
+ ScriptContext1_SetupScript(SecretBase_EventScript_TreeUseSecretPower);
}
bool8 FldEff_UseSecretPowerTree(void)
@@ -717,7 +717,7 @@ static void TreeEntranceSpriteCallbackEnd(struct Sprite *sprite)
static void FieldCallback_SecretBaseShrub(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
- ScriptContext1_SetupScript(EventScript_275B38);
+ ScriptContext1_SetupScript(SecretBase_EventScript_ShrubUseSecretPower);
}
bool8 FldEff_UseSecretPowerShrub(void)
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index c18602c68..1a42b297d 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -7,12 +7,13 @@
#include "string_util.h"
#include "strings.h"
#include "task.h"
+#include "constants/party_menu.h"
#include "constants/songs.h"
-static void sub_816166C(u8 taskId);
-static void sub_81616C0(u8 taskId);
-static void sub_8161724(u8 taskId);
-static void sub_81617B8(u8 taskId);
+static void Task_SoftboiledRestoreHealth(u8 taskId);
+static void Task_DisplayHPRestoredMessage(u8 taskId);
+static void Task_FinishSoftboiled(u8 taskId);
+static void CantUseSoftboiledOnMon(u8 taskId);
bool8 SetUpFieldMove_SoftBoiled(void)
{
@@ -29,81 +30,82 @@ bool8 SetUpFieldMove_SoftBoiled(void)
return FALSE;
}
-void sub_8161560(u8 taskId)
+void ChooseMonForSoftboiled(u8 taskId)
{
- gUnknown_0203CEC8.unkB = 0xA;
- gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.slotId;
- sub_81B0FCC(GetCursorSelectionMonId(), 0x1);
- display_pokemon_menu_message(0x5);
- gTasks[taskId].func = sub_81B1370;
+ gPartyMenu.action = PARTY_ACTION_SOFTBOILED;
+ gPartyMenu.slotId2 = gPartyMenu.slotId;
+ AnimatePartySlot(GetCursorSelectionMonId(), 1);
+ DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
-void sub_81615A8(u8 taskId)
+void Task_TryUseSoftboiledOnPartyMon(u8 taskId)
{
u16 hp;
- u8 slotId = gUnknown_0203CEC8.slotId;
- u8 pokemonIndex = gUnknown_0203CEC8.unkA;
- if(pokemonIndex > 6)
+ u8 userPartyId = gPartyMenu.slotId;
+ u8 recipientPartyId = gPartyMenu.slotId2;
+ if(recipientPartyId > PARTY_SIZE)
{
- gUnknown_0203CEC8.unkB = 0;
- display_pokemon_menu_message(0x0);
- gTasks[taskId].func = sub_81B1370;
+ gPartyMenu.action = 0;
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
return;
}
- hp = GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_HP);
- if(hp == 0 || slotId == pokemonIndex || GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_MAX_HP) == hp)
+ hp = GetMonData(&gPlayerParty[recipientPartyId], MON_DATA_HP);
+ if(hp == 0 || userPartyId == recipientPartyId || GetMonData(&gPlayerParty[recipientPartyId], MON_DATA_MAX_HP) == hp)
{
- sub_81617B8(taskId);
+ CantUseSoftboiledOnMon(taskId);
return;
}
+ // Take away Softboiled user's health first (-1)
PlaySE(SE_KAIFUKU);
- sub_81B1F18(taskId, slotId, -1, GetMonData(&gPlayerParty[slotId], MON_DATA_MAX_HP)/5, sub_816166C);
+ PartyMenuModifyHP(taskId, userPartyId, -1, GetMonData(&gPlayerParty[userPartyId], MON_DATA_MAX_HP)/5, Task_SoftboiledRestoreHealth);
}
-static void sub_816166C(u8 taskId)
+static void Task_SoftboiledRestoreHealth(u8 taskId)
{
PlaySE(SE_KAIFUKU);
- sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAX_HP)/5, sub_81616C0);
+ PartyMenuModifyHP(taskId, gPartyMenu.slotId2, 1, GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAX_HP)/5, Task_DisplayHPRestoredMessage);
}
-static void sub_81616C0(u8 taskId)
+static void Task_DisplayHPRestoredMessage(u8 taskId)
{
- GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unkA], gStringVar1);
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId2], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
- sub_81B1B5C(gStringVar4, 0);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_8161724;
+ gTasks[taskId].func = Task_FinishSoftboiled;
}
-static void sub_8161724(u8 taskId)
+static void Task_FinishSoftboiled(u8 taskId)
{
- if(sub_81B1BD4() == 1)
+ if(IsPartyMenuTextPrinterActive() == TRUE)
return;
- gUnknown_0203CEC8.unkB = 0x0;
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 0);
- gUnknown_0203CEC8.slotId = gUnknown_0203CEC8.unkA;
- sub_81B0FCC(gUnknown_0203CEC8.unkA, 1);
- ClearStdWindowAndFrameToTransparent(0x6, FALSE);
- ClearWindowTilemap(0x6);
- display_pokemon_menu_message(0);
- gTasks[taskId].func = sub_81B1370;
+ gPartyMenu.action = 0;
+ AnimatePartySlot(gPartyMenu.slotId, 0);
+ gPartyMenu.slotId = gPartyMenu.slotId2;
+ AnimatePartySlot(gPartyMenu.slotId2, 1);
+ ClearStdWindowAndFrameToTransparent(6, FALSE);
+ ClearWindowTilemap(6);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
-static void sub_8161784(u8 taskId)
+static void Task_ChooseNewMonForSoftboiled(u8 taskId)
{
- if(sub_81B1BD4() == 1)
+ if(IsPartyMenuTextPrinterActive() == TRUE)
return;
- display_pokemon_menu_message(0x5);
- gTasks[taskId].func = sub_81B1370;
+ DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
-static void sub_81617B8(u8 taskId)
+static void CantUseSoftboiledOnMon(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81B1B5C(gText_CantBeUsedOnPkmn, 0);
+ DisplayPartyMenuMessage(gText_CantBeUsedOnPkmn, FALSE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_8161784;
+ gTasks[taskId].func = Task_ChooseNewMonForSoftboiled;
}
diff --git a/src/flying.c b/src/flying.c
index 3d04a543c..43682ee42 100644
--- a/src/flying.c
+++ b/src/flying.c
@@ -42,7 +42,7 @@ const struct SpriteTemplate gUnknown_08596270 =
{
.tileTag = ANIM_TAG_GUST,
.paletteTag = ANIM_TAG_GUST,
- .oam = &gUnknown_0852495C,
+ .oam = &gOamData_AffineOff_ObjNormal_32x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -65,7 +65,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85962A4 =
{
.tileTag = ANIM_TAG_GUST,
.paletteTag = ANIM_TAG_GUST,
- .oam = &gUnknown_085249BC,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_085962A0,
@@ -90,7 +90,7 @@ const struct SpriteTemplate gUnknown_085962D4 =
{
.tileTag = ANIM_TAG_AIR_WAVE_2,
.paletteTag = ANIM_TAG_AIR_WAVE_2,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gUnknown_085962D0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -133,7 +133,7 @@ const struct SpriteTemplate gUnknown_08596340 =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_ROUND_SHADOW,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596314,
@@ -144,7 +144,7 @@ const struct SpriteTemplate gUnknown_08596358 =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_ROUND_SHADOW,
- .oam = &gUnknown_0852497C,
+ .oam = &gOamData_AffineNormal_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596338,
@@ -173,7 +173,7 @@ const struct SpriteTemplate gUnknown_08596388 =
{
.tileTag = ANIM_TAG_WHITE_FEATHER,
.paletteTag = ANIM_TAG_WHITE_FEATHER,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gUnknown_08596380,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -184,7 +184,7 @@ const struct SpriteTemplate gUnknown_085963A0 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -210,7 +210,7 @@ const struct SpriteTemplate gUnknown_085963D4 =
{
.tileTag = ANIM_TAG_WHIRLWIND_LINES,
.paletteTag = ANIM_TAG_WHIRLWIND_LINES,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gUnknown_085963D0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -236,7 +236,7 @@ const struct SpriteTemplate gUnknown_08596420 =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_ROUND_SHADOW,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_0859641C,
@@ -258,7 +258,7 @@ const struct SpriteTemplate gUnknown_0859644C =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_ROUND_SHADOW,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596448,
@@ -283,7 +283,7 @@ const struct SpriteTemplate gUnknown_08596490 =
{
.tileTag = ANIM_TAG_ROUND_SHADOW,
.paletteTag = ANIM_TAG_ROUND_SHADOW,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_0859648C,
@@ -307,7 +307,7 @@ const struct SpriteTemplate gUnknown_085964CC =
{
.tileTag = ANIM_TAG_SPLASH,
.paletteTag = ANIM_TAG_SPLASH,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -318,7 +318,7 @@ const struct SpriteTemplate gUnknown_085964E4 =
{
.tileTag = ANIM_TAG_SWEAT_BEAD,
.paletteTag = ANIM_TAG_SWEAT_BEAD,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -329,7 +329,7 @@ const struct SpriteTemplate gUnknown_085964FC =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -340,7 +340,7 @@ const struct SpriteTemplate gUnknown_08596514 =
{
.tileTag = ANIM_TAG_BIRD,
.paletteTag = ANIM_TAG_BIRD,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -550,12 +550,12 @@ void sub_810E2C8(struct Sprite *sprite)
struct FeatherDanceData
{
- u8 unk0_0a:1;
- u8 unk0_0b:1;
- u8 unk0_0c:1;
- u8 unk0_0d:1;
- u8 unk0_1:4;
- u8 unk1;
+ u16 unk0_0a:1;
+ u16 unk0_0b:1;
+ u16 unk0_0c:1;
+ u16 unk0_0d:1;
+ u16 unk0_1:4;
+ u16 unk1:8;
u16 unk2;
s16 unk4;
u16 unk6;
@@ -652,20 +652,11 @@ void sub_810E314(struct Sprite *sprite)
sprite->callback = sub_810E520;
}
-#ifdef NONMATCHING
-/*
-Things I can't get to match:
-1. data->unk0_1 bitfield behaviour. The way bits are read is different.
-2. sprite->oam.priority--; sprite->oam.priority++; Nonmatching version tail-merges these, original does not.
-3. sprite->pos2.x = (gSineTable[data->unk2] * var) >> 8; data->unk2 is very weirdly read at seemingly random moments inside the switch.
-4. sinVal r6/r7 mismatch.
-*/
void sub_810E520(struct Sprite *sprite)
{
- u8 matrixNum, sinIndex, var;
+ u8 matrixNum, sinIndex;
s16 sinVal = 0;
struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data;
-
if (data->unk0_0a)
{
if (data->unk1-- % 256 == 0)
@@ -676,56 +667,69 @@ void sub_810E520(struct Sprite *sprite)
}
else
{
- switch (data->unk2 >> 6)
+ switch (data->unk2 / 64)
{
- case 0:
- if (data->unk0_1 == 1)
+ case 0:
+ if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
- else if (data->unk0_1 == 3)
+ else if (data->unk0_1 << 24 >> 24 == 3)
{
data->unk0_0b ^= 1;
+ data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
+ sprite->animBeginning = TRUE;
+ sprite->animEnded = FALSE;
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
+ {
sprite->oam.priority--;
+ data->unkE_0 ^= 1;
+ }
else
+ {
sprite->oam.priority++;
+ data->unkE_0 ^= 1;
+ }
}
else
{
if (!data->unkE_0)
+ {
sprite->subpriority -= 12;
+ data->unkE_0 ^= 1;
+ }
else
+ {
sprite->subpriority += 12;
+ data->unkE_0 ^= 1;
+ }
}
- data->unkE_0 ^= 1;
}
data->unk0_0d = 0;
+ data->unk2;
}
data->unk0_1 = 0;
break;
case 1:
- if (data->unk0_1 == 0)
+ if (data->unk0_1 << 24 >> 24 == 0)
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
- else if (data->unk0_1 == 2)
+ else if (data->unk0_1 << 24 >> 24 == 2)
{
data->unk0_0a = 1;
data->unk1 = 0;
@@ -734,38 +738,49 @@ void sub_810E520(struct Sprite *sprite)
{
sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
+ sprite->animBeginning = TRUE;
+ sprite->animEnded = FALSE;
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
+ {
sprite->oam.priority--;
+ data->unkE_0 ^= 1;
+ }
else
+ {
sprite->oam.priority++;
+ data->unkE_0 ^= 1;
+ }
}
else
{
if (!data->unkE_0)
+ {
sprite->subpriority -= 12;
+ data->unkE_0 ^= 1;
+ }
else
+ {
sprite->subpriority += 12;
+ data->unkE_0 ^= 1;
+ }
}
- data->unkE_0 ^= 1;
}
data->unk0_0d = 0;
}
data->unk0_1 = 1;
break;
case 2:
- if (data->unk0_1 == 0)
+ if (data->unk0_1 << 24 >> 24 == 3)
{
data->unk0_0d = 1;
data->unk0_0a = 1;
data->unk1 = 0;
}
- else if (data->unk0_1 == 2)
+ else if (data->unk0_1 << 24 >> 24 == 1)
{
data->unk0_0a = 1;
data->unk1 = 0;
@@ -774,72 +789,96 @@ void sub_810E520(struct Sprite *sprite)
{
sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
+ sprite->animBeginning = TRUE;
+ sprite->animEnded = FALSE;
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
+ {
sprite->oam.priority--;
+ data->unkE_0 ^= 1;
+ }
else
+ {
sprite->oam.priority++;
+ data->unkE_0 ^= 1;
+ }
}
else
{
if (!data->unkE_0)
+ {
sprite->subpriority -= 12;
+ data->unkE_0 ^= 1;
+ }
else
+ {
sprite->subpriority += 12;
+ data->unkE_0 ^= 1;
+ }
}
- data->unkE_0 ^= 1;
}
data->unk0_0d = 0;
}
data->unk0_1 = 2;
break;
case 3:
- if (data->unk0_1 == 2)
+ if (data->unk0_1 << 24 >> 24 == 2)
{
data->unk0_0d = 1;
}
- else if (data->unk0_1 == 0)
+ else if (data->unk0_1 << 24 >> 24 == 0)
{
data->unk0_0b ^= 1;
+ data->unk0_0a = 1;
data->unk1 = 0;
}
else if (data->unk0_0d)
{
sprite->hFlip ^= 1;
sprite->animNum = sprite->hFlip;
- sprite->animBeginning = 1;
- sprite->animEnded = 0;
+ sprite->animBeginning = TRUE;
+ sprite->animEnded = FALSE;
if (data->unk0_0c)
{
if (!IsContest())
{
if (!data->unkE_0)
+ {
sprite->oam.priority--;
+ data->unkE_0 ^= 1;
+ }
else
+ {
sprite->oam.priority++;
+ data->unkE_0 ^= 1;
+ }
}
else
{
if (!data->unkE_0)
+ {
sprite->subpriority -= 12;
+ data->unkE_0 ^= 1;
+ }
else
+ {
sprite->subpriority += 12;
+ data->unkE_0 ^= 1;
+ }
}
- data->unkE_0 ^= 1;
}
data->unk0_0d = 0;
}
data->unk0_1 = 3;
break;
}
-
- var = data->unkC[data->unk0_0b];
- sprite->pos2.x = (gSineTable[data->unk2] * var) >> 8;
+ #ifndef NONMATCHING
+ asm("":::"r8");
+ #endif
+ sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8;
matrixNum = sprite->oam.matrixNum;
sinIndex = (-sprite->pos2.x >> 1) + data->unkA;
@@ -856,723 +895,13 @@ void sub_810E520(struct Sprite *sprite)
else
data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF;
- if (sprite->pos1.y + sprite->pos2.y > data->unkE_1)
+ if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1)
{
sprite->data[0] = 0;
sprite->callback = sub_810E2C8;
}
}
}
-#else
-NAKED
-void sub_810E520(struct Sprite *sprite)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- adds r5, r0, 0\n\
- movs r6, 0\n\
- adds r4, r5, 0\n\
- adds r4, 0x2E\n\
- ldrb r2, [r4]\n\
- movs r7, 0x1\n\
- movs r0, 0x1\n\
- mov r9, r0\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0810E55A\n\
- ldrb r0, [r4, 0x1]\n\
- adds r1, r0, 0\n\
- adds r1, 0xFF\n\
- strb r1, [r4, 0x1]\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0810E54E\n\
- b _0810EA36\n\
-_0810E54E:\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- ands r0, r2\n\
- strb r0, [r4]\n\
- strb r6, [r4, 0x1]\n\
- b _0810EA36\n\
-_0810E55A:\n\
- ldrh r0, [r4, 0x2]\n\
- lsrs r1, r0, 6\n\
- mov r12, r0\n\
- cmp r1, 0x1\n\
- bne _0810E566\n\
- b _0810E68A\n\
-_0810E566:\n\
- cmp r1, 0x1\n\
- bgt _0810E570\n\
- cmp r1, 0\n\
- beq _0810E57E\n\
- b _0810E97C\n\
-_0810E570:\n\
- cmp r1, 0x2\n\
- bne _0810E576\n\
- b _0810E77E\n\
-_0810E576:\n\
- cmp r1, 0x3\n\
- bne _0810E57C\n\
- b _0810E872\n\
-_0810E57C:\n\
- b _0810E97C\n\
-_0810E57E:\n\
- lsls r1, r2, 24\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x1\n\
- bne _0810E592\n\
- movs r0, 0x8\n\
- orrs r0, r2\n\
- orrs r0, r7\n\
- strb r0, [r4]\n\
- strb r6, [r4, 0x1]\n\
- b _0810E680\n\
-_0810E592:\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x3\n\
- bne _0810E5B4\n\
- lsls r0, r2, 30\n\
- lsrs r0, 31\n\
- movs r1, 0x1\n\
- eors r0, r1\n\
- ands r0, r7\n\
- lsls r0, 1\n\
- movs r1, 0x3\n\
- negs r1, r1\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- orrs r1, r7\n\
- strb r1, [r4]\n\
- strb r6, [r4, 0x1]\n\
- b _0810E680\n\
-_0810E5B4:\n\
- movs r0, 0x8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0810E680\n\
- adds r3, r5, 0\n\
- adds r3, 0x3F\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 31\n\
- lsrs r1, 31\n\
- movs r6, 0x1\n\
- eors r1, r6\n\
- ands r1, r7\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- mov r8, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- lsls r0, 31\n\
- lsrs r0, 31\n\
- adds r1, r5, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- movs r1, 0x11\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- ldrb r1, [r4]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0810E672\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0810E642\n\
- ldrb r1, [r4, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0810E628\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- subs r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _0810E660\n\
-_0810E628:\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- adds r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _0810E660\n\
-_0810E642:\n\
- ldrb r1, [r4, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0810E656\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- subs r0, 0xC\n\
- b _0810E65E\n\
-_0810E656:\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0xC\n\
-_0810E65E:\n\
- strb r0, [r1]\n\
-_0810E660:\n\
- ldrb r2, [r4, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r6\n\
- ands r0, r7\n\
- mov r1, r8\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r4, 0xE]\n\
-_0810E672:\n\
- ldrb r1, [r4]\n\
- movs r0, 0x9\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r4]\n\
- ldrh r1, [r4, 0x2]\n\
- mov r12, r1\n\
-_0810E680:\n\
- ldrb r1, [r4]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- strb r0, [r4]\n\
- b _0810E97C\n\
-_0810E68A:\n\
- lsls r1, r2, 24\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0\n\
- bne _0810E698\n\
- movs r0, 0x8\n\
- orrs r0, r2\n\
- b _0810E6A0\n\
-_0810E698:\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x2\n\
- bne _0810E6A8\n\
- adds r0, r2, 0\n\
-_0810E6A0:\n\
- orrs r0, r7\n\
- strb r0, [r4]\n\
- strb r6, [r4, 0x1]\n\
- b _0810E774\n\
-_0810E6A8:\n\
- movs r0, 0x8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0810E774\n\
- adds r3, r5, 0\n\
- adds r3, 0x3F\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 31\n\
- lsrs r1, 31\n\
- movs r6, 0x1\n\
- eors r1, r6\n\
- ands r1, r7\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- mov r8, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- lsls r0, 31\n\
- lsrs r0, 31\n\
- adds r1, r5, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- movs r1, 0x11\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- ldrb r1, [r4]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0810E766\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0810E736\n\
- ldrb r1, [r4, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0810E71C\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- subs r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _0810E754\n\
-_0810E71C:\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- adds r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _0810E754\n\
-_0810E736:\n\
- ldrb r1, [r4, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0810E74A\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- subs r0, 0xC\n\
- b _0810E752\n\
-_0810E74A:\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0xC\n\
-_0810E752:\n\
- strb r0, [r1]\n\
-_0810E754:\n\
- ldrb r2, [r4, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r6\n\
- ands r0, r7\n\
- mov r1, r8\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r4, 0xE]\n\
-_0810E766:\n\
- ldrb r1, [r4]\n\
- movs r0, 0x9\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r4]\n\
- ldrh r1, [r4, 0x2]\n\
- mov r12, r1\n\
-_0810E774:\n\
- ldrb r0, [r4]\n\
- movs r1, 0xF\n\
- ands r1, r0\n\
- movs r0, 0x10\n\
- b _0810E978\n\
-_0810E77E:\n\
- lsls r1, r2, 24\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x3\n\
- bne _0810E78C\n\
- movs r0, 0x8\n\
- orrs r0, r2\n\
- b _0810E794\n\
-_0810E78C:\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x1\n\
- bne _0810E79C\n\
- adds r0, r2, 0\n\
-_0810E794:\n\
- orrs r0, r7\n\
- strb r0, [r4]\n\
- strb r6, [r4, 0x1]\n\
- b _0810E868\n\
-_0810E79C:\n\
- movs r0, 0x8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0810E868\n\
- adds r3, r5, 0\n\
- adds r3, 0x3F\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 31\n\
- lsrs r1, 31\n\
- movs r6, 0x1\n\
- eors r1, r6\n\
- ands r1, r7\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- mov r8, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- lsls r0, 31\n\
- lsrs r0, 31\n\
- adds r1, r5, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- movs r1, 0x11\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- ldrb r1, [r4]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0810E85A\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0810E82A\n\
- ldrb r1, [r4, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0810E810\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- subs r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _0810E848\n\
-_0810E810:\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- adds r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _0810E848\n\
-_0810E82A:\n\
- ldrb r1, [r4, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0810E83E\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- subs r0, 0xC\n\
- b _0810E846\n\
-_0810E83E:\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0xC\n\
-_0810E846:\n\
- strb r0, [r1]\n\
-_0810E848:\n\
- ldrb r2, [r4, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r6\n\
- ands r0, r7\n\
- mov r1, r8\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r4, 0xE]\n\
-_0810E85A:\n\
- ldrb r1, [r4]\n\
- movs r0, 0x9\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r4]\n\
- ldrh r1, [r4, 0x2]\n\
- mov r12, r1\n\
-_0810E868:\n\
- ldrb r0, [r4]\n\
- movs r1, 0xF\n\
- ands r1, r0\n\
- movs r0, 0x20\n\
- b _0810E978\n\
-_0810E872:\n\
- lsls r1, r2, 24\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0x2\n\
- bne _0810E882\n\
- movs r0, 0x8\n\
- orrs r0, r2\n\
- strb r0, [r4]\n\
- b _0810E970\n\
-_0810E882:\n\
- lsrs r0, r1, 28\n\
- cmp r0, 0\n\
- bne _0810E8A4\n\
- lsls r0, r2, 30\n\
- lsrs r0, 31\n\
- movs r1, 0x1\n\
- eors r0, r1\n\
- ands r0, r7\n\
- lsls r0, 1\n\
- movs r1, 0x3\n\
- negs r1, r1\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- orrs r1, r7\n\
- strb r1, [r4]\n\
- strb r6, [r4, 0x1]\n\
- b _0810E970\n\
-_0810E8A4:\n\
- movs r0, 0x8\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0810E970\n\
- adds r3, r5, 0\n\
- adds r3, 0x3F\n\
- ldrb r2, [r3]\n\
- lsls r1, r2, 31\n\
- lsrs r1, 31\n\
- movs r6, 0x1\n\
- eors r1, r6\n\
- ands r1, r7\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- mov r8, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- lsls r0, 31\n\
- lsrs r0, 31\n\
- adds r1, r5, 0\n\
- adds r1, 0x2A\n\
- strb r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- movs r1, 0x11\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r3]\n\
- ldrb r1, [r4]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0810E962\n\
- bl IsContest\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0810E932\n\
- ldrb r1, [r4, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0810E918\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- subs r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _0810E950\n\
-_0810E918:\n\
- ldrb r2, [r5, 0x5]\n\
- lsls r1, r2, 28\n\
- lsrs r1, 30\n\
- adds r1, 0x1\n\
- movs r0, 0x3\n\
- ands r1, r0\n\
- lsls r1, 2\n\
- movs r0, 0xD\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r5, 0x5]\n\
- b _0810E950\n\
-_0810E932:\n\
- ldrb r1, [r4, 0xE]\n\
- mov r0, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0810E946\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- subs r0, 0xC\n\
- b _0810E94E\n\
-_0810E946:\n\
- adds r1, r5, 0\n\
- adds r1, 0x43\n\
- ldrb r0, [r1]\n\
- adds r0, 0xC\n\
-_0810E94E:\n\
- strb r0, [r1]\n\
-_0810E950:\n\
- ldrb r2, [r4, 0xE]\n\
- lsls r0, r2, 31\n\
- lsrs r0, 31\n\
- eors r0, r6\n\
- ands r0, r7\n\
- mov r1, r8\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r4, 0xE]\n\
-_0810E962:\n\
- ldrb r1, [r4]\n\
- movs r0, 0x9\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r4]\n\
- ldrh r1, [r4, 0x2]\n\
- mov r12, r1\n\
-_0810E970:\n\
- ldrb r0, [r4]\n\
- movs r1, 0xF\n\
- ands r1, r0\n\
- movs r0, 0x30\n\
-_0810E978:\n\
- orrs r1, r0\n\
- strb r1, [r4]\n\
-_0810E97C:\n\
- ldrb r1, [r4]\n\
- lsls r1, 30\n\
- lsrs r1, 31\n\
- adds r0, r4, 0\n\
- adds r0, 0xC\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- ldr r3, =gSineTable\n\
- mov r2, r12\n\
- lsls r0, r2, 1\n\
- adds r0, r3\n\
- movs r2, 0\n\
- ldrsh r0, [r0, r2]\n\
- muls r0, r1\n\
- asrs r0, 8\n\
- strh r0, [r5, 0x24]\n\
- ldrb r2, [r5, 0x3]\n\
- lsls r2, 26\n\
- lsrs r2, 27\n\
- movs r1, 0x24\n\
- ldrsh r0, [r5, r1]\n\
- negs r0, r0\n\
- asrs r0, 1\n\
- ldrb r1, [r4, 0xA]\n\
- adds r0, r1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r1, r0, 1\n\
- adds r1, r3\n\
- ldrh r6, [r1]\n\
- ldr r1, =gOamMatrices\n\
- lsls r2, 3\n\
- adds r2, r1\n\
- adds r0, 0x40\n\
- lsls r0, 1\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- strh r0, [r2, 0x6]\n\
- strh r0, [r2]\n\
- strh r6, [r2, 0x2]\n\
- lsls r0, r6, 16\n\
- asrs r0, 16\n\
- negs r0, r0\n\
- strh r0, [r2, 0x4]\n\
- ldrh r0, [r4, 0x6]\n\
- ldrh r2, [r4, 0x8]\n\
- adds r0, r2\n\
- strh r0, [r4, 0x8]\n\
- lsls r0, 16\n\
- lsrs r0, 24\n\
- strh r0, [r5, 0x22]\n\
- movs r1, 0x4\n\
- ldrsh r0, [r4, r1]\n\
- movs r1, 0x80\n\
- lsls r1, 8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0810EA0C\n\
- ldrh r0, [r4, 0x4]\n\
- subs r1, 0x1\n\
- ands r1, r0\n\
- ldrh r0, [r4, 0x2]\n\
- subs r0, r1\n\
- movs r1, 0xFF\n\
- ands r0, r1\n\
- strh r0, [r4, 0x2]\n\
- b _0810EA1C\n\
- .pool\n\
-_0810EA0C:\n\
- ldrh r0, [r4, 0x4]\n\
- ldr r1, =0x00007fff\n\
- ands r1, r0\n\
- ldrh r2, [r4, 0x2]\n\
- adds r1, r2\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r4, 0x2]\n\
-_0810EA1C:\n\
- movs r0, 0x22\n\
- ldrsh r1, [r5, r0]\n\
- movs r2, 0x26\n\
- ldrsh r0, [r5, r2]\n\
- adds r1, r0\n\
- ldrh r0, [r4, 0xE]\n\
- lsrs r0, 1\n\
- cmp r1, r0\n\
- blt _0810EA36\n\
- movs r0, 0\n\
- strh r0, [r5, 0x2E]\n\
- ldr r0, =sub_810E2C8\n\
- str r0, [r5, 0x1C]\n\
-_0810EA36:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- ");
-}
-#endif
void sub_810EA4C(struct Sprite *sprite)
{
diff --git a/src/frontier_pass.c b/src/frontier_pass.c
index fff93c3c7..d8b36ffbd 100644
--- a/src/frontier_pass.c
+++ b/src/frontier_pass.c
@@ -5,7 +5,7 @@
#include "battle_anim.h"
#include "event_data.h"
#include "recorded_battle.h"
-#include "alloc.h"
+#include "malloc.h"
#include "sprite.h"
#include "scanline_effect.h"
#include "text_window.h"
@@ -442,7 +442,7 @@ static const struct SpriteTemplate sSpriteTemplates_Cursors[] =
{
.tileTag = 0,
.paletteTag = 0,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sSpriteAnimTable_8571574,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -451,7 +451,7 @@ static const struct SpriteTemplate sSpriteTemplates_Cursors[] =
{
.tileTag = 1,
.paletteTag = 1,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = sSpriteAnimTable_8571598,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -463,7 +463,7 @@ static const struct SpriteTemplate sSpriteTemplate_Medal =
{
.tileTag = 2,
.paletteTag = 2,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sSpriteAnimTable_857157C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -474,7 +474,7 @@ static const struct SpriteTemplate sSpriteTemplate_Head =
{
.tileTag = 4,
.paletteTag = 4,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = sSpriteAnimTable_8571574,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 88e466e8c..37840f834 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -24,7 +24,7 @@
#include "data.h"
#include "record_mixing.h"
#include "strings.h"
-#include "alloc.h"
+#include "malloc.h"
#include "save.h"
#include "load_save.h"
#include "battle_dome.h"
@@ -884,7 +884,7 @@ static void sub_81A1AD4(void)
{
s32 i;
- sub_81B8558();
+ ClearSelectedPartyOrder();
for (i = 0; i < gSpecialVar_0x8005; i++)
gSelectedOrderFromParty[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i];
ReducePlayerPartyToSelectedMons();
@@ -1889,11 +1889,11 @@ static void sub_81A3B64(void)
points = gSaveBlock2Ptr->frontier.field_EBA;
points += gUnknown_086118B4[challengeNum][facility][battleMode];
- sub_80EED60(gUnknown_086118B4[challengeNum][facility][battleMode]);
+ IncrementDailyBattlePoints(gUnknown_086118B4[challengeNum][facility][battleMode]);
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
{
points += 10;
- sub_80EED60(10);
+ IncrementDailyBattlePoints(10);
}
if (points > 0xFFFF)
points = 0xFFFF;
diff --git a/src/ghost.c b/src/ghost.c
index 41621ff54..93c442b92 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -58,7 +58,7 @@ const struct SpriteTemplate gUnknown_08596D14 =
{
.tileTag = ANIM_TAG_YELLOW_BALL,
.paletteTag = ANIM_TAG_YELLOW_BALL,
- .oam = &gUnknown_085249CC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596D10,
@@ -69,7 +69,7 @@ const struct SpriteTemplate gUnknown_08596D2C =
{
.tileTag = ANIM_TAG_YELLOW_BALL,
.paletteTag = ANIM_TAG_YELLOW_BALL,
- .oam = &gUnknown_08524A2C,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -91,7 +91,7 @@ const struct SpriteTemplate gShadowBallSpriteTemplate =
{
.tileTag = ANIM_TAG_SHADOW_BALL,
.paletteTag = ANIM_TAG_SHADOW_BALL,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596D54,
@@ -117,7 +117,7 @@ const struct SpriteTemplate gUnknown_08596D8C =
{
.tileTag = ANIM_TAG_LICK,
.paletteTag = ANIM_TAG_LICK,
- .oam = &gUnknown_08524954,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gUnknown_08596D88,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -139,7 +139,7 @@ const struct SpriteTemplate gUnknown_08596DB8 =
{
.tileTag = ANIM_TAG_WHITE_SHADOW,
.paletteTag = ANIM_TAG_WHITE_SHADOW,
- .oam = &gUnknown_08524A5C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -150,7 +150,7 @@ const struct SpriteTemplate gUnknown_08596DD0 =
{
.tileTag = ANIM_TAG_NAIL,
.paletteTag = ANIM_TAG_NAIL,
- .oam = &gUnknown_08524A54,
+ .oam = &gOamData_AffineOff_ObjBlend_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -161,7 +161,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596DE8 =
{
.tileTag = ANIM_TAG_GHOSTLY_SPIRIT,
.paletteTag = ANIM_TAG_GHOSTLY_SPIRIT,
- .oam = &gUnknown_08524A34,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -172,7 +172,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596E00 =
{
.tileTag = ANIM_TAG_DEVIL,
.paletteTag = ANIM_TAG_DEVIL,
- .oam = &gUnknown_08524A34,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -197,7 +197,7 @@ const struct SpriteTemplate gUnknown_08596E30 =
{
.tileTag = ANIM_TAG_PURPLE_FLAME,
.paletteTag = ANIM_TAG_PURPLE_FLAME,
- .oam = &gUnknown_08524A74,
+ .oam = &gOamData_AffineOff_ObjBlend_16x32,
.anims = gUnknown_08596E2C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/gpu_regs.c b/src/gpu_regs.c
deleted file mode 100644
index 3bcc4fd93..000000000
--- a/src/gpu_regs.c
+++ /dev/null
@@ -1,195 +0,0 @@
-#include "global.h"
-#include "gpu_regs.h"
-
-#define GPU_REG_BUF_SIZE 0x60
-
-#define GPU_REG_BUF(offset) (*(u16 *)(&sGpuRegBuffer[offset]))
-#define GPU_REG(offset) (*(vu16 *)(REG_BASE + offset))
-
-#define EMPTY_SLOT 0xFF
-
-static u8 sGpuRegBuffer[GPU_REG_BUF_SIZE];
-static u8 sGpuRegWaitingList[GPU_REG_BUF_SIZE];
-static volatile bool8 sGpuRegBufferLocked;
-static volatile bool8 sShouldSyncRegIE;
-static vu16 sRegIE;
-
-static void CopyBufferedValueToGpuReg(u8 regOffset);
-static void SyncRegIE(void);
-static void UpdateRegDispstatIntrBits(u16 regIE);
-
-void InitGpuRegManager(void)
-{
- s32 i;
-
- for (i = 0; i < GPU_REG_BUF_SIZE; i++)
- {
- sGpuRegBuffer[i] = 0;
- sGpuRegWaitingList[i] = EMPTY_SLOT;
- }
-
- sGpuRegBufferLocked = FALSE;
- sShouldSyncRegIE = FALSE;
- sRegIE = 0;
-}
-
-static void CopyBufferedValueToGpuReg(u8 regOffset)
-{
- if (regOffset == REG_OFFSET_DISPSTAT)
- {
- REG_DISPSTAT &= ~(DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR);
- REG_DISPSTAT |= GPU_REG_BUF(REG_OFFSET_DISPSTAT);
- }
- else
- {
- GPU_REG(regOffset) = GPU_REG_BUF(regOffset);
- }
-}
-
-void CopyBufferedValuesToGpuRegs(void)
-{
- if (!sGpuRegBufferLocked)
- {
- s32 i;
-
- for (i = 0; i < GPU_REG_BUF_SIZE; i++)
- {
- u8 regOffset = sGpuRegWaitingList[i];
- if (regOffset == EMPTY_SLOT)
- return;
- CopyBufferedValueToGpuReg(regOffset);
- sGpuRegWaitingList[i] = EMPTY_SLOT;
- }
- }
-}
-
-void SetGpuReg(u8 regOffset, u16 value)
-{
- if (regOffset < GPU_REG_BUF_SIZE)
- {
- u16 vcount;
-
- GPU_REG_BUF(regOffset) = value;
- vcount = REG_VCOUNT & 0xFF;
-
- if ((vcount >= 161 && vcount <= 225) || (REG_DISPCNT & DISPCNT_FORCED_BLANK))
- {
- CopyBufferedValueToGpuReg(regOffset);
- }
- else
- {
- s32 i;
-
- sGpuRegBufferLocked = TRUE;
-
- for (i = 0; i < GPU_REG_BUF_SIZE && sGpuRegWaitingList[i] != EMPTY_SLOT; i++)
- {
- if (sGpuRegWaitingList[i] == regOffset)
- {
- sGpuRegBufferLocked = FALSE;
- return;
- }
- }
-
- sGpuRegWaitingList[i] = regOffset;
- sGpuRegBufferLocked = FALSE;
- }
- }
-}
-
-void SetGpuReg_ForcedBlank(u8 regOffset, u16 value)
-{
- if (regOffset < GPU_REG_BUF_SIZE)
- {
- GPU_REG_BUF(regOffset) = value;
-
- if (REG_DISPCNT & DISPCNT_FORCED_BLANK)
- {
- CopyBufferedValueToGpuReg(regOffset);
- }
- else
- {
- s32 i;
-
- sGpuRegBufferLocked = TRUE;
-
- for (i = 0; i < GPU_REG_BUF_SIZE && sGpuRegWaitingList[i] != EMPTY_SLOT; i++)
- {
- if (sGpuRegWaitingList[i] == regOffset)
- {
- sGpuRegBufferLocked = FALSE;
- return;
- }
- }
-
- sGpuRegWaitingList[i] = regOffset;
- sGpuRegBufferLocked = FALSE;
- }
- }
-}
-
-u16 GetGpuReg(u8 regOffset)
-{
- if (regOffset == REG_OFFSET_DISPSTAT)
- return REG_DISPSTAT;
-
- if (regOffset == REG_OFFSET_VCOUNT)
- return REG_VCOUNT;
-
- return GPU_REG_BUF(regOffset);
-}
-
-void SetGpuRegBits(u8 regOffset, u16 mask)
-{
- u16 regValue = GPU_REG_BUF(regOffset);
- SetGpuReg(regOffset, regValue | mask);
-}
-
-void ClearGpuRegBits(u8 regOffset, u16 mask)
-{
- u16 regValue = GPU_REG_BUF(regOffset);
- SetGpuReg(regOffset, regValue & ~mask);
-}
-
-static void SyncRegIE(void)
-{
- if (sShouldSyncRegIE)
- {
- u16 temp = REG_IME;
- REG_IME = 0;
- REG_IE = sRegIE;
- REG_IME = temp;
- sShouldSyncRegIE = FALSE;
- }
-}
-
-void EnableInterrupts(u16 mask)
-{
- sRegIE |= mask;
- sShouldSyncRegIE = TRUE;
- SyncRegIE();
- UpdateRegDispstatIntrBits(sRegIE);
-}
-
-void DisableInterrupts(u16 mask)
-{
- sRegIE &= ~mask;
- sShouldSyncRegIE = TRUE;
- SyncRegIE();
- UpdateRegDispstatIntrBits(sRegIE);
-}
-
-static void UpdateRegDispstatIntrBits(u16 regIE)
-{
- u16 oldValue = GetGpuReg(REG_OFFSET_DISPSTAT) & (DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR);
- u16 newValue = 0;
-
- if (regIE & INTR_FLAG_VBLANK)
- newValue |= DISPSTAT_VBLANK_INTR;
-
- if (regIE & INTR_FLAG_HBLANK)
- newValue |= DISPSTAT_HBLANK_INTR;
-
- if (oldValue != newValue)
- SetGpuReg(REG_OFFSET_DISPSTAT, newValue);
-}
diff --git a/src/graphics.c b/src/graphics.c
index 679f16af1..06bfeed17 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -1138,9 +1138,9 @@ const u32 gBattleAnimSpritePal_Slash2[] = INCBIN_U32("graphics/battle_anims/spri
const u32 gBattleAnimSpriteGfx_WhiteShadow[] = INCBIN_U32("graphics/battle_anims/sprites/white_shadow.4bpp.lz");
const u32 gBattleAnimSpritePal_WhiteShadow[] = INCBIN_U32("graphics/battle_anims/sprites/white_shadow.gbapal.lz");
-const u32 gPartyMenuMisc_Gfx[] = INCBIN_U32("graphics/interface/party_menu_misc.4bpp.lz");
-const u32 gPartyMenuMisc_Pal[] = INCBIN_U32("graphics/interface/party_menu_misc.gbapal.lz");
-const u32 gPartyMenuMisc_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_misc.bin.lz");
+const u32 gPartyMenuBg_Gfx[] = INCBIN_U32("graphics/interface/party_menu_bg.4bpp.lz");
+const u32 gPartyMenuBg_Pal[] = INCBIN_U32("graphics/interface/party_menu_bg.gbapal.lz");
+const u32 gPartyMenuBg_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_bg.bin.lz");
const u32 gPartyMenuPokeball_Gfx[] = INCBIN_U32("graphics/interface/party_menu_pokeball.4bpp.lz");
const u32 gPartyMenuPokeballSmall_Gfx[] = INCBIN_U32("graphics/interface/party_menu_pokeball_small.4bpp.lz"); //unused
@@ -1516,21 +1516,14 @@ asm(".space 0x20"); //blank palette??
#include "data/graphics/berry_fix.h"
-// more trade stuff?
-
-const u16 gUnknown_08DDB3E4[] = INCBIN_U16("graphics/trade/menu.gbapal");
-
-const u16 gUnknown_08DDB444[] = INCBIN_U16("graphics/unknown/unknown_DDB444.gbapal");
-
-const u8 gUnknown_08DDB464[] = INCBIN_U8("graphics/trade/menu.4bpp");
-
-const u8 gUnknown_08DDC6E4[] = INCBIN_U8("graphics/trade/buttons.4bpp");
-
+// Trade
+const u16 gTradeMenu_Pal[] = INCBIN_U16("graphics/trade/menu.gbapal");
+const u16 gUnknown_08DDB444[] = INCBIN_U16("graphics/trade/unknown_DDB444.gbapal");
+const u8 gTradeMenu_Gfx[] = INCBIN_U8("graphics/trade/menu.4bpp");
+const u8 gTradeButtons_Gfx[] = INCBIN_U8("graphics/trade/buttons.4bpp");
const u16 gUnused_DDCEE4[] = INCBIN_U16("graphics/unused/unused_DDCEE4.bin");
-
-const u16 gUnknown_08DDCF04[] = INCBIN_U16("graphics/unknown/unknown_DDCF04.bin");
-
-const u16 gUnknown_08DDD704[] = INCBIN_U16("graphics/unknown/unknown_DDD704.bin"); // textbox tilemap??
+const u16 gUnknown_08DDCF04[] = INCBIN_U16("graphics/trade/unknown_DDCF04.bin");
+const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.bin");
const u16 gMessageBox_Pal[] = INCBIN_U16("graphics/text_window/message_box.gbapal");
const u8 gMessageBox_Gfx[] = INCBIN_U8("graphics/text_window/message_box.4bpp");
diff --git a/src/ground.c b/src/ground.c
index ae3cf6c3e..36dbd31f3 100644
--- a/src/ground.c
+++ b/src/ground.c
@@ -53,7 +53,7 @@ const struct SpriteTemplate gUnknown_08597178 =
{
.tileTag = ANIM_TAG_BONE,
.paletteTag = ANIM_TAG_BONE,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597170,
@@ -64,7 +64,7 @@ const struct SpriteTemplate gUnknown_08597190 =
{
.tileTag = ANIM_TAG_BONE,
.paletteTag = ANIM_TAG_BONE,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597174,
@@ -75,7 +75,7 @@ const struct SpriteTemplate gUnknown_085971A8 =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -97,7 +97,7 @@ const struct SpriteTemplate gUnknown_085971CC =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gUnknown_085971C8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -108,7 +108,7 @@ const struct SpriteTemplate gUnknown_085971E4 =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -119,7 +119,7 @@ const struct SpriteTemplate gUnknown_085971FC =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -130,7 +130,7 @@ const struct SpriteTemplate gUnknown_08597214 =
{
.tileTag = ANIM_TAG_DIRT_MOUND,
.paletteTag = ANIM_TAG_DIRT_MOUND,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index ac37b2ece..d138abbb1 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -6,7 +6,7 @@
#include "pokemon.h"
#include "text.h"
#include "text_window.h"
-#include "alloc.h"
+#include "malloc.h"
#include "gpu_regs.h"
#include "graphics.h"
#include "main.h"
diff --git a/src/ice.c b/src/ice.c
index 522fb1bbf..1697cab2a 100644
--- a/src/ice.c
+++ b/src/ice.c
@@ -66,7 +66,7 @@ const struct SpriteTemplate gUnknown_08595A58 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -155,7 +155,7 @@ const struct SpriteTemplate gUnknown_08595AD0 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524B24,
+ .oam = &gOamData_AffineDouble_ObjBlend_8x16,
.anims = gUnknown_08595AA8,
.images = NULL,
.affineAnims = gUnknown_08595ACC,
@@ -166,7 +166,7 @@ const struct SpriteTemplate gUnknown_08595AE8 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524A24,
+ .oam = &gOamData_AffineOff_ObjBlend_8x8,
.anims = gUnknown_08595AAC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -188,7 +188,7 @@ const struct SpriteTemplate gUnknown_08595B14 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524AC4,
+ .oam = &gOamData_AffineNormal_ObjBlend_8x16,
.anims = gUnknown_08595AA8,
.images = NULL,
.affineAnims = gUnknown_08595B10,
@@ -199,7 +199,7 @@ const struct SpriteTemplate gUnknown_08595B2C =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524A24,
+ .oam = &gOamData_AffineOff_ObjBlend_8x8,
.anims = gUnknown_08595AAC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -223,7 +223,7 @@ const struct SpriteTemplate gUnknown_08595B68 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524AC4,
+ .oam = &gOamData_AffineNormal_ObjBlend_8x16,
.anims = gUnknown_08595AA8,
.images = NULL,
.affineAnims = gUnknown_08595B64,
@@ -234,7 +234,7 @@ const struct SpriteTemplate gUnknown_08595B80 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524A84,
+ .oam = &gOamData_AffineNormal_ObjBlend_8x8,
.anims = gUnknown_08595AAC,
.images = NULL,
.affineAnims = gUnknown_08595B64,
@@ -245,7 +245,7 @@ const struct SpriteTemplate gUnknown_08595B98 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gUnknown_08595AB0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -256,7 +256,7 @@ const struct SpriteTemplate gUnknown_08595BB0 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gUnknown_08595AB4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -267,7 +267,7 @@ const struct SpriteTemplate gUnknown_08595BC8 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gUnknown_08595AB0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -295,7 +295,7 @@ const struct SpriteTemplate gUnknown_08595C04 =
{
.tileTag = ANIM_TAG_ICE_SPIKES,
.paletteTag = ANIM_TAG_ICE_SPIKES,
- .oam = &gUnknown_08524A64,
+ .oam = &gOamData_AffineOff_ObjBlend_8x16,
.anims = gUnknown_08595C00,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -318,7 +318,7 @@ const struct SpriteTemplate gUnknown_08595C2C =
{
.tileTag = ANIM_TAG_MIST_CLOUD,
.paletteTag = ANIM_TAG_MIST_CLOUD,
- .oam = &gUnknown_08524A54,
+ .oam = &gOamData_AffineOff_ObjBlend_32x16,
.anims = gUnknown_08595C28,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -329,7 +329,7 @@ const struct SpriteTemplate gUnknown_08595C44 =
{
.tileTag = ANIM_TAG_PURPLE_GAS_CLOUD,
.paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD,
- .oam = &gUnknown_08524A54,
+ .oam = &gOamData_AffineOff_ObjBlend_32x16,
.anims = gUnknown_08595C28,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -345,7 +345,7 @@ const struct SpriteTemplate gUnknown_08595C70 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -361,7 +361,7 @@ const struct SpriteTemplate gUnknown_08595C9C =
{
.tileTag = ANIM_TAG_PURPLE_GAS_CLOUD,
.paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD,
- .oam = &gUnknown_08524A54,
+ .oam = &gOamData_AffineOff_ObjBlend_32x16,
.anims = gUnknown_08595C28,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -422,7 +422,7 @@ const struct SpriteTemplate gUnknown_08595D2C =
{
.tileTag = ANIM_TAG_HAIL,
.paletteTag = ANIM_TAG_HAIL,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08595D1C,
@@ -433,7 +433,7 @@ const struct SpriteTemplate gUnknown_08595D44 =
{
.tileTag = ANIM_TAG_HAIL,
.paletteTag = ANIM_TAG_HAIL,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08595D28,
@@ -504,7 +504,7 @@ const struct SpriteTemplate gUnknown_08595DE4 =
{
.tileTag = ANIM_TAG_ICE_CHUNK,
.paletteTag = ANIM_TAG_ICE_CHUNK,
- .oam = &gUnknown_085249D4,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
.anims = gUnknown_08595D78,
.images = NULL,
.affineAnims = gUnknown_08595DD0,
@@ -515,7 +515,7 @@ const struct SpriteTemplate gUnknown_08595DFC =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gUnknown_08595AAC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/intro.c b/src/intro.c
index e97fbedb0..58f2509cc 100644
--- a/src/intro.c
+++ b/src/intro.c
@@ -5,7 +5,7 @@
#include "task.h"
#include "title_screen.h"
#include "libgcnmultiboot.h"
-#include "alloc.h"
+#include "malloc.h"
#include "gpu_regs.h"
#include "link.h"
#include "multiboot_pokemon_colosseum.h"
diff --git a/src/item.c b/src/item.c
index 5e505724c..7b8b37c06 100644
--- a/src/item.c
+++ b/src/item.c
@@ -4,7 +4,7 @@
#include "string_util.h"
#include "text.h"
#include "event_data.h"
-#include "alloc.h"
+#include "malloc.h"
#include "secret_base.h"
#include "item_menu.h"
#include "strings.h"
@@ -142,7 +142,7 @@ bool8 CheckBagHasItem(u16 itemId, u16 count)
if (ItemId_GetPocket(itemId) == 0)
return FALSE;
- if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE)
+ if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)
return CheckPyramidBagHasItem(itemId, count);
pocket = ItemId_GetPocket(itemId) - 1;
// Check for item slots that contain the item
@@ -189,7 +189,7 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count)
if (ItemId_GetPocket(itemId) == POCKET_NONE)
return FALSE;
- if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE)
+ if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)
{
return CheckPyramidBagHasSpace(itemId, count);
}
@@ -404,7 +404,7 @@ bool8 AddBagItem(u16 itemId, u16 count)
return FALSE;
// check Battle Pyramid Bag
- if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE)
+ if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)
{
return AddPyramidBagItem(itemId, count);
}
@@ -517,7 +517,7 @@ bool8 RemoveBagItem(u16 itemId, u16 count)
return FALSE;
// check Battle Pyramid Bag
- if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE)
+ if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE)
{
return RemovePyramidBagItem(itemId, count);
}
diff --git a/src/item_icon.c b/src/item_icon.c
index 91c32951a..6ae7eac58 100644
--- a/src/item_icon.c
+++ b/src/item_icon.c
@@ -2,7 +2,7 @@
#include "decompress.h"
#include "graphics.h"
#include "item_icon.h"
-#include "alloc.h"
+#include "malloc.h"
#include "sprite.h"
#include "constants/items.h"
diff --git a/src/item_menu.c b/src/item_menu.c
index 12f03b328..2814aa5b9 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -4,6 +4,7 @@
#include "battle_controllers.h"
#include "battle_pyramid.h"
#include "frontier_util.h"
+#include "battle_pyramid_bag.h"
#include "berry_tag_screen.h"
#include "bg.h"
#include "constants/items.h"
@@ -25,7 +26,7 @@
#include "link.h"
#include "mail.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "map_name_popup.h"
#include "menu.h"
#include "money.h"
@@ -466,9 +467,9 @@ void CB2_BagMenuFromStartMenu(void)
void sub_81AABB0(void)
{
if (!InBattlePyramid())
- GoToBagMenu(RETURN_LOCATION_BATTLE, POCKETS_COUNT, SetCB2ToReshowScreenAfterMenu2);
+ GoToBagMenu(RETURN_LOCATION_BATTLE, POCKETS_COUNT, CB2_SetUpReshowBattleScreenAfterMenu2);
else
- sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2);
+ GoToBattlePyramidBagMenu(1, CB2_SetUpReshowBattleScreenAfterMenu2);
}
void CB2_ChooseBerry(void)
@@ -790,17 +791,17 @@ void GetItemName(s8 *dest, u16 itemId)
StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]);
if (itemId >= ITEM_HM01)
{
- ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, 2, 1);
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 1);
StringExpandPlaceholders(dest, gText_ClearTo11Var1Clear5Var2);
}
else
{
- ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, 2, 2);
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2);
}
break;
case BERRIES_POCKET:
- ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_CHERI_BERRY + 1, 2, 2);
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_CHERI_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
CopyItemName(itemId, gStringVar2);
StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2);
break;
@@ -851,14 +852,14 @@ void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a)
BlitBitmapToWindow(rboxId, gBagMenuHMIcon_Gfx, 8, a - 1, 16, 16);
if (gBagPositionStruct.pocket == BERRIES_POCKET)
{
- ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77);
BagMenu_Print(rboxId, 7, gStringVar4, offset, a, 0, 0, -1, 0);
}
else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && (unique = ItemId_GetImportance(itemId)) == FALSE)
{
- ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 2);
+ ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77);
BagMenu_Print(rboxId, 7, gStringVar4, offset, a, unique, unique, -1, unique);
@@ -1053,21 +1054,21 @@ void sub_81ABC3C(u8 a)
PrintItemDepositAmount(BagMenu_AddWindow(a), 1);
}
-void PrintItemDepositAmount(u8 a, s16 b)
+void PrintItemDepositAmount(u8 windowId, s16 numDeposited)
{
- u8 r3 = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2;
- ConvertIntToDecimalStringN(gStringVar1, b, 2, r3);
+ u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2;
+ ConvertIntToDecimalStringN(gStringVar1, numDeposited, STR_CONV_MODE_LEADING_ZEROS, numDigits);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
- AddTextPrinterParameterized(a, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0);
+ AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0);
}
-void sub_81ABCC0(int a, int b, int c)
+void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned)
{
- u8 r3 = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2;
- ConvertIntToDecimalStringN(gStringVar1, b, 2, r3);
+ u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2;
+ ConvertIntToDecimalStringN(gStringVar1, numSold, STR_CONV_MODE_LEADING_ZEROS, numDigits);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
- AddTextPrinterParameterized(a, 1, gStringVar4, 0, 1, -1, 0);
- PrintMoneyAmount(a, 0x26, 1, c, 0);
+ AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, -1, 0);
+ PrintMoneyAmount(windowId, 38, 1, moneyEarned, 0);
}
void Task_BagMenu(u8 taskId)
@@ -1148,13 +1149,13 @@ u8 GetSwitchBagPocketDirection(void)
u8 LRKeys;
if (gBagMenu->unk81B != 0)
return 0;
- LRKeys = GetLRKeysState();
- if ((gMain.newKeys & DPAD_LEFT) || LRKeys == 1)
+ LRKeys = GetLRKeysPressed();
+ if ((gMain.newKeys & DPAD_LEFT) || LRKeys == MENU_L_PRESSED)
{
PlaySE(SE_SELECT);
return 1;
}
- if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == 2)
+ if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == MENU_R_PRESSED)
{
PlaySE(SE_SELECT);
return 2;
@@ -1581,7 +1582,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
sub_8199134(0, 1);
}
}
- else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysState() == 1)
+ else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED)
{
if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1))
{
@@ -1589,7 +1590,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId)
sub_8199134(-1, 0);
}
}
- else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysState() == 2)
+ else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED)
{
if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1))
{
@@ -1651,7 +1652,7 @@ void ItemMenu_UseOutOfBattle(u8 taskId)
if (gBagPositionStruct.pocket != BERRIES_POCKET)
ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
else
- sub_80FDD10(taskId);
+ ItemUseOutOfBattle_Berry(taskId);
}
}
}
@@ -1682,7 +1683,7 @@ void BagMenu_TossItems(u8 taskId)
s16* data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems);
FillWindowPixelBuffer(1, PIXEL_FILL(0));
BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
@@ -1725,7 +1726,7 @@ void BagMenu_ConfirmToss(u8 taskId)
s16* data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s);
FillWindowPixelBuffer(1, PIXEL_FILL(0));
BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
@@ -1782,7 +1783,7 @@ void ItemMenu_Give(u8 taskId)
BagMenu_PrintThereIsNoPokemon(taskId);
else
{
- gBagMenu->mainCallback2 = sub_81B7F60;
+ gBagMenu->mainCallback2 = CB2_ChooseMonToGiveItem;
unknown_ItemMenu_Confirm(taskId);
}
}
@@ -1936,7 +1937,7 @@ void sub_81AD680(u8 taskId)
{
s16* data = gTasks[taskId].data;
- ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8], 0, 6);
+ ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1);
DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD6E4);
}
@@ -1961,7 +1962,7 @@ void sub_81AD730(u8 taskId)
s16* data = gTasks[taskId].data;
u8 windowId = BagMenu_AddWindow(8);
- sub_81ABCC0(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]);
+ PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]);
bag_menu_AddMoney_window();
gTasks[taskId].func = sub_81AD794;
}
@@ -1972,7 +1973,7 @@ void sub_81AD794(u8 taskId)
if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE)
{
- sub_81ABCC0(gBagMenu->unk818, data[8], (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]);
+ PrintItemSoldAmount(gBagMenu->unk818, data[8], (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]);
}
else if (gMain.newKeys & A_BUTTON)
{
@@ -1996,7 +1997,7 @@ void BagMenu_ConfirmSell(u8 taskId)
s16* data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar2);
- ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8], 0, 6);
+ ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8], STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2);
DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD8C8);
}
@@ -2087,7 +2088,7 @@ void sub_81ADB14(u8 taskId)
else if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE)
{
CopyItemName(gSpecialVar_ItemId, gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3);
+ ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s);
BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0);
gTasks[taskId].func = Task_ActuallyToss;
@@ -2157,7 +2158,7 @@ void DoWallyTutorialBagMenu(void)
PrepareBagForWallyTutorial();
AddBagItem(ITEM_POTION, 1);
AddBagItem(ITEM_POKE_BALL, 1);
- GoToBagMenu(RETURN_LOCATION_BATTLE_2, ITEMS_POCKET, SetCB2ToReshowScreenAfterMenu2);
+ GoToBagMenu(RETURN_LOCATION_BATTLE_2, ITEMS_POCKET, CB2_SetUpReshowBattleScreenAfterMenu2);
}
void Task_WallyTutorialBagMenu(u8 taskId)
@@ -2398,7 +2399,7 @@ void PrintTMHMMoveData(u16 itemId)
}
else
{
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, STR_CONV_MODE_RIGHT_ALIGN, 3);
text = gStringVar1;
}
BagMenu_Print(4, 1, text, 7, 12, 0, 0, -1, 4);
@@ -2408,11 +2409,11 @@ void PrintTMHMMoveData(u16 itemId)
}
else
{
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3);
text = gStringVar1;
}
BagMenu_Print(4, 1, text, 7, 24, 0, 0, -1, 4);
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, STR_CONV_MODE_RIGHT_ALIGN, 3);
BagMenu_Print(4, 1, gStringVar1, 7, 36, 0, 0, -1, 4);
CopyWindowToVram(4, 2);
}
diff --git a/src/item_use.c b/src/item_use.c
index 2f4374423..a777bb2ec 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -43,9 +43,9 @@
#include "constants/vars.h"
#include "event_obj_lock.h"
-extern u8 BerryTree_EventScript_274482[];
-extern u8 BerryTree_EventScript_2744C0[];
-extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[];
+extern u8 BerryTree_EventScript_ItemUsePlantBerry[];
+extern u8 BerryTree_EventScript_ItemUseWailmerPail[];
+extern u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[];
void SetUpItemUseCallback(u8 taskId);
void MapPostLoadHook_UseItem(void);
@@ -61,13 +61,13 @@ void sub_80FDA94(u8 taskId);
void sub_80FDADC(u8 taskId);
void sub_80FD7C8(u8 taskId);
void sub_80FDC00(u8 taskId);
-void sub_80FDD74(u8 taskId);
-void sub_80FDE08(u8 taskId);
-void sub_80FDE7C(u8 taskId);
-void sub_80FDF90(u8 taskId);
-void task08_0809AD8C(u8 taskId);
-void sub_80FE024(u8 taskId);
-void sub_80FE03C(u8 taskId);
+void ItemUseOnFieldCB_Berry(u8 taskId);
+void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId);
+void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId);
+static void BootUpSoundTMHM(u8 taskId);
+static void Task_ShowTMHMContainedMessage(u8 taskId);
+static void UseTMHMYesNo(u8 taskId);
+static void UseTMHM(u8 taskId);
void sub_80FE124(u8 taskId);
void sub_80FE164(u8 taskId);
@@ -81,7 +81,7 @@ u8 sub_80FD9B0(s16 a, s16 b);
void sub_80FDA24(u8 a);
void sub_80FD8E0(u8 taskId, s16 x, s16 y);
void sub_80FDBEC(void);
-bool8 sub_80FDE2C(void);
+bool8 TryToWaterSudowoodo(void);
void ItemUseOutOfBattle_CannotUse(u8 taskId);
// EWRAM variables
@@ -91,16 +91,16 @@ EWRAM_DATA static void(*gUnknown_0203A0F4)(u8 taskId) = NULL;
static const MainCallback gUnknown_085920D8[] =
{
- sub_81B617C,
+ CB2_ShowPartyMenuForItemUse,
CB2_ReturnToField,
NULL,
};
static const u8 gUnknown_085920E4[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST};
-static const struct YesNoFuncTable gUnknown_085920E8 =
+static const struct YesNoFuncTable sUseTMHMYesNoFuncTable =
{
- .yesFunc = sub_80FE03C,
+ .yesFunc = UseTMHM,
.noFunc = BagMenu_InitListsMenu,
};
@@ -350,7 +350,7 @@ bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 taskId)
gTasks[taskId].data[2] = FALSE;
for (i = 0; i < events->bgEventCount; i++)
{
- if (events->bgEvents[i].kind == BG_EVENT_HIDDEN_ITEM && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4))
+ if (events->bgEvents[i].kind == BG_EVENT_HIDDEN_ITEM && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + FLAG_HIDDEN_ITEMS_START))
{
distanceX = (u16)events->bgEvents[i].x + 7;
newDistanceX = distanceX - x;
@@ -379,7 +379,7 @@ bool8 sub_80FD6D4(const struct MapEvents *events, s16 x, s16 y)
{
if (bgEvent[i].kind == BG_EVENT_HIDDEN_ITEM && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed?
{
- if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4))
+ if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + FLAG_HIDDEN_ITEMS_START))
return TRUE;
else
return FALSE;
@@ -623,7 +623,7 @@ void sub_80FDC00(u8 taskId)
void ItemUseOutOfBattle_CoinCase(u8 taskId)
{
- ConvertIntToDecimalStringN(gStringVar1, GetCoins(), 0, 4);
+ ConvertIntToDecimalStringN(gStringVar1, GetCoins(), STR_CONV_MODE_LEFT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gText_CoinCase);
if (!gTasks[taskId].data[3])
@@ -638,7 +638,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId)
void ItemUseOutOfBattle_PowderJar(u8 taskId)
{
- ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), 0, 5);
+ ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 5);
StringExpandPlaceholders(gStringVar4, gText_PowderQty);
if (!gTasks[taskId].data[3])
@@ -651,11 +651,11 @@ void ItemUseOutOfBattle_PowderJar(u8 taskId)
}
}
-void sub_80FDD10(u8 taskId)
+void ItemUseOutOfBattle_Berry(u8 taskId)
{
if (IsPlayerFacingEmptyBerryTreePatch() == TRUE)
{
- gUnknown_0203A0F4 = sub_80FDD74;
+ gUnknown_0203A0F4 = ItemUseOnFieldCB_Berry;
gFieldCallback = MapPostLoadHook_UseItem;
gBagMenu->mainCallback2 = CB2_ReturnToField;
unknown_ItemMenu_Confirm(taskId);
@@ -666,24 +666,24 @@ void sub_80FDD10(u8 taskId)
}
}
-void sub_80FDD74(u8 taskId)
+void ItemUseOnFieldCB_Berry(u8 taskId)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
ScriptContext2_Enable();
- ScriptContext1_SetupScript(BerryTree_EventScript_274482);
+ ScriptContext1_SetupScript(BerryTree_EventScript_ItemUsePlantBerry);
DestroyTask(taskId);
}
void ItemUseOutOfBattle_WailmerPail(u8 taskId)
{
- if (sub_80FDE2C() == TRUE)
+ if (TryToWaterSudowoodo() == TRUE)
{
- gUnknown_0203A0F4 = sub_80FDE7C;
+ gUnknown_0203A0F4 = ItemUseOnFieldCB_WailmerPailSudowoodo;
SetUpItemUseOnFieldCallback(taskId);
}
else if (TryToWaterBerryTree() == TRUE)
{
- gUnknown_0203A0F4 = sub_80FDE08;
+ gUnknown_0203A0F4 = ItemUseOnFieldCB_WailmerPailBerry;
SetUpItemUseOnFieldCallback(taskId);
}
else
@@ -692,14 +692,14 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId)
}
}
-void sub_80FDE08(u8 taskId)
+void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId)
{
ScriptContext2_Enable();
- ScriptContext1_SetupScript(BerryTree_EventScript_2744C0);
+ ScriptContext1_SetupScript(BerryTree_EventScript_ItemUseWailmerPail);
DestroyTask(taskId);
}
-bool8 sub_80FDE2C(void)
+bool8 TryToWaterSudowoodo(void)
{
u16 x, y;
u8 z;
@@ -707,87 +707,87 @@ bool8 sub_80FDE2C(void)
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
z = PlayerGetZCoord();
objId = GetEventObjectIdByXYZ(x, y, z);
- if (objId == 16 || gEventObjects[objId].graphicsId != 0xE4)
+ if (objId == EVENT_OBJECTS_COUNT || gEventObjects[objId].graphicsId != EVENT_OBJ_GFX_SUDOWOODO)
return FALSE;
else
return TRUE;
}
-void sub_80FDE7C(u8 taskId)
+void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId)
{
ScriptContext2_Enable();
- ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_242CFC);
+ ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_WaterSudowoodo);
DestroyTask(taskId);
}
void ItemUseOutOfBattle_Medicine(u8 taskId)
{
- gUnknown_03006328 = ItemUseCB_Medicine;
+ gItemUseCB = ItemUseCB_Medicine;
SetUpItemUseCallback(taskId);
}
void ItemUseOutOfBattle_ReduceEV(u8 taskId)
{
- gUnknown_03006328 = sub_81B67C8;
+ gItemUseCB = ItemUseCB_ReduceEV;
SetUpItemUseCallback(taskId);
}
void ItemUseOutOfBattle_SacredAsh(u8 taskId)
{
- gUnknown_03006328 = sub_81B79E8;
+ gItemUseCB = ItemUseCB_SacredAsh;
SetUpItemUseCallback(taskId);
}
void ItemUseOutOfBattle_PPRecovery(u8 taskId)
{
- gUnknown_03006328 = dp05_ether;
+ gItemUseCB = ItemUseCB_PPRecovery;
SetUpItemUseCallback(taskId);
}
void ItemUseOutOfBattle_PPUp(u8 taskId)
{
- gUnknown_03006328 = dp05_pp_up;
+ gItemUseCB = ItemUseCB_PPUp;
SetUpItemUseCallback(taskId);
}
void ItemUseOutOfBattle_RareCandy(u8 taskId)
{
- gUnknown_03006328 = dp05_rare_candy;
+ gItemUseCB = ItemUseCB_RareCandy;
SetUpItemUseCallback(taskId);
}
void ItemUseOutOfBattle_TMHM(u8 taskId)
{
if (gSpecialVar_ItemId >= ITEM_HM01_CUT)
- DisplayItemMessage(taskId, 1, gText_BootedUpHM, sub_80FDF90); // HM
+ DisplayItemMessage(taskId, 1, gText_BootedUpHM, BootUpSoundTMHM); // HM
else
- DisplayItemMessage(taskId, 1, gText_BootedUpTM, sub_80FDF90); // TM
+ DisplayItemMessage(taskId, 1, gText_BootedUpTM, BootUpSoundTMHM); // TM
}
-void sub_80FDF90(u8 taskId)
+static void BootUpSoundTMHM(u8 taskId)
{
PlaySE(SE_PC_LOGIN);
- gTasks[taskId].func = task08_0809AD8C;
+ gTasks[taskId].func = Task_ShowTMHMContainedMessage;
}
-void task08_0809AD8C(u8 taskId)
+static void Task_ShowTMHMContainedMessage(u8 taskId)
{
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]);
StringExpandPlaceholders(gStringVar4, gText_TMHMContainedVar1);
- DisplayItemMessage(taskId, 1, gStringVar4, sub_80FE024);
+ DisplayItemMessage(taskId, 1, gStringVar4, UseTMHMYesNo);
}
}
-void sub_80FE024(u8 taskId)
+static void UseTMHMYesNo(u8 taskId)
{
- BagMenu_YesNo(taskId, 6, &gUnknown_085920E8);
+ BagMenu_YesNo(taskId, 6, &sUseTMHMYesNoFuncTable);
}
-void sub_80FE03C(u8 taskId)
+static void UseTMHM(u8 taskId)
{
- gUnknown_03006328 = sub_81B6DC4;
+ gItemUseCB = ItemUseCB_TMHM;
SetUpItemUseCallback(taskId);
}
@@ -912,7 +912,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
void ItemUseOutOfBattle_EvolutionStone(u8 taskId)
{
- gUnknown_03006328 = sub_81B7C74;
+ gItemUseCB = ItemUseCB_EvolutionStone;
SetUpItemUseCallback(taskId);
}
@@ -976,36 +976,37 @@ void ItemUseInBattle_StatIncrease(u8 taskId)
}
}
-void sub_80FE54C(u8 taskId)
+static void ItemUseInBattle_ShowPartyMenu(u8 taskId)
{
if (!InBattlePyramid())
{
- gBagMenu->mainCallback2 = sub_81B89F0;
+ gBagMenu->mainCallback2 = ChooseMonForInBattleItem;
unknown_ItemMenu_Confirm(taskId);
}
else
{
- gPyramidBagResources->callback2 = sub_81B89F0;
+ gPyramidBagResources->callback2 = ChooseMonForInBattleItem;
sub_81C5B14(taskId);
}
}
void ItemUseInBattle_Medicine(u8 taskId)
{
- gUnknown_03006328 = ItemUseCB_Medicine;
- sub_80FE54C(taskId);
+ gItemUseCB = ItemUseCB_Medicine;
+ ItemUseInBattle_ShowPartyMenu(taskId);
}
-void sub_80FE5AC(u8 taskId)
+// Unused. Sacred Ash cannot be used in battle
+void ItemUseInBattle_SacredAsh(u8 taskId)
{
- gUnknown_03006328 = sub_81B79E8;
- sub_80FE54C(taskId);
+ gItemUseCB = ItemUseCB_SacredAsh;
+ ItemUseInBattle_ShowPartyMenu(taskId);
}
void ItemUseInBattle_PPRecovery(u8 taskId)
{
- gUnknown_03006328 = dp05_ether;
- sub_80FE54C(taskId);
+ gItemUseCB = ItemUseCB_PPRecovery;
+ ItemUseInBattle_ShowPartyMenu(taskId);
}
void ItemUseInBattle_Escape(u8 taskId)
diff --git a/src/libagbsyscall.s b/src/libagbsyscall.s
deleted file mode 100644
index d5639f689..000000000
--- a/src/libagbsyscall.s
+++ /dev/null
@@ -1,116 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ArcTan2
-ArcTan2: @ 82E7078
- swi 0xA
- bx lr
- thumb_func_end ArcTan2
-
- thumb_func_start BgAffineSet
-@ void BgAffineSet(BgAffineSet_src_data *src, BgAffineSet_dest_data *dest, int entry_count)
-BgAffineSet: @ 82E707C
- swi 0xE
- bx lr
- thumb_func_end BgAffineSet
-
- thumb_func_start CpuFastSet
-@ void CpuFastSet(void *src, void *dest, unsigned int mode)
-CpuFastSet: @ 82E7080
- swi 0xC
- bx lr
- thumb_func_end CpuFastSet
-
- thumb_func_start CpuSet
-@ void CpuSet(void *src, void *dest, unsigned int mode)
-CpuSet: @ 82E7084
- swi 0xB
- bx lr
- thumb_func_end CpuSet
-
- thumb_func_start Div
-Div: @ 82E7088
- swi 0x6
- bx lr
- thumb_func_end Div
-
- thumb_func_start LZ77UnCompVram
-@ void LZ77UnCompVram(void *src, void *dest)
-LZ77UnCompVram: @ 82E708C
- swi 0x12
- bx lr
- thumb_func_end LZ77UnCompVram
-
- thumb_func_start LZ77UnCompWram
-@ void LZ77UnCompWram(void *src, void *dest)
-LZ77UnCompWram: @ 82E7090
- swi 0x11
- bx lr
- thumb_func_end LZ77UnCompWram
-
- thumb_func_start MultiBoot
-@ s32 MultiBoot(struct MultiBootParam *mp)
-MultiBoot: @ 82E7094
- movs r1, 0x1
- swi 0x25
- bx lr
- thumb_func_end MultiBoot
-
- thumb_func_start ObjAffineSet
-ObjAffineSet: @ 82E709C
- swi 0xF
- bx lr
- thumb_func_end ObjAffineSet
-
- thumb_func_start RLUnCompVram
-RLUnCompVram: @ 82E70A0
- swi 0x15
- bx lr
- thumb_func_end RLUnCompVram
-
- thumb_func_start RLUnCompWram
-RLUnCompWram: @ 82E70A4
- swi 0x14
- bx lr
- thumb_func_end RLUnCompWram
-
- thumb_func_start RegisterRamReset
-@ void RegisterRamReset(int ResetFlags)
-RegisterRamReset: @ 82E70A8
- swi 0x1
- bx lr
- thumb_func_end RegisterRamReset
-
- thumb_func_start SoftReset
-@ void SoftReset()
-SoftReset: @ 82E70AC
- ldr r3, =REG_IME
- movs r2, 0
- strb r2, [r3]
- ldr r1, =0x3007F00
- mov sp, r1
- swi 0x1
- swi 0
- .pool
- thumb_func_end SoftReset
-
- thumb_func_start Sqrt
-@ s16 Sqrt(int)
-Sqrt: @ 82E70C4
- swi 0x8
- bx lr
- thumb_func_end Sqrt
-
- thumb_func_start VBlankIntrWait
-@ void VBlankIntrWait()
-VBlankIntrWait: @ 82E70C8
- movs r2, 0
- swi 0x5
- bx lr
- thumb_func_end VBlankIntrWait
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/src/link.c b/src/link.c
index 9928b48da..3ca8236ed 100644
--- a/src/link.c
+++ b/src/link.c
@@ -2,7 +2,7 @@
// Includes
#include "global.h"
#include "m4a.h"
-#include "alloc.h"
+#include "malloc.h"
#include "reset_save_heap.h"
#include "save.h"
#include "bg.h"
@@ -28,6 +28,7 @@
#include "link.h"
#include "link_rfu.h"
#include "constants/rgb.h"
+#include "constants/trade.h"
extern u16 gHeldKeyCodeToSend;
@@ -282,7 +283,7 @@ void LinkTestScreen(void)
ResetTasks();
SetVBlankCallback(sub_80096BC);
ResetBlockSend();
- gLinkType = 0x1111;
+ gLinkType = LINKTYPE_0x1111;
OpenLink();
SeedRng(gMain.vblankCounter2);
for (i = 0; i < MAX_LINK_PLAYERS; i++)
@@ -316,10 +317,10 @@ static void InitLocalLinkPlayer(void)
gLocalLinkPlayer.language = gGameLanguage;
gLocalLinkPlayer.version = gGameVersion + 0x4000;
gLocalLinkPlayer.lp_field_2 = 0x8000;
- gLocalLinkPlayer.name[8] = IsNationalPokedexEnabled();
+ gLocalLinkPlayer.progressFlags = IsNationalPokedexEnabled();
if (FlagGet(FLAG_IS_CHAMPION))
{
- gLocalLinkPlayer.name[8] |= 0x10;
+ gLocalLinkPlayer.progressFlags |= 0x10;
}
}
@@ -597,9 +598,9 @@ static void ProcessRecvCmds(u8 unused)
*linkPlayer = block->linkPlayer;
if ((linkPlayer->version & 0xFF) == VERSION_RUBY || (linkPlayer->version & 0xFF) == VERSION_SAPPHIRE)
{
- linkPlayer->name[10] = 0;
- linkPlayer->name[9] = 0;
- linkPlayer->name[8] = 0;
+ linkPlayer->progressFlagsCopy = 0;
+ linkPlayer->neverRead = 0;
+ linkPlayer->progressFlags = 0;
}
sub_800B524(linkPlayer);
if (strcmp(block->magic1, gASCIIGameFreakInc) != 0
@@ -739,7 +740,7 @@ void ClearLinkCallback(void)
{
if (gWirelessCommType)
{
- Rfu_set_zero();
+ ClearLinkRfuCallback();
}
else
{
@@ -751,7 +752,7 @@ void ClearLinkCallback_2(void)
{
if (gWirelessCommType)
{
- Rfu_set_zero();
+ ClearLinkRfuCallback();
}
else
{
@@ -862,15 +863,15 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
{
if (gLinkPlayers[0].linkType == 0x1133)
{
- switch (sub_807A728())
+ switch (GetGameProgressForLinkTrade())
{
- case 1:
- sPlayerDataExchangeStatus = EXCHANGE_STAT_4;
+ case TRADE_PLAYER_NOT_READY:
+ sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY;
break;
- case 2:
- sPlayerDataExchangeStatus = EXCHANGE_STAT_5;
+ case TRADE_PARTNER_NOT_READY:
+ sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY;
break;
- case 0:
+ case TRADE_BOTH_PLAYERS_READY:
sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
break;
}
@@ -1084,7 +1085,7 @@ bool8 IsLinkTaskFinished(void)
{
if (gWirelessCommType == TRUE)
{
- return sub_8010500();
+ return IsLinkRfuTaskFinished();
}
return gLinkCallback == NULL;
}
@@ -1349,7 +1350,7 @@ bool8 sub_800AA60(void)
{
if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
{
- if (gLinkType == 0x2288)
+ if (gLinkType == LINKTYPE_0x2288)
{
if (gLinkType == gLinkPlayers[i].linkType)
{
@@ -1909,7 +1910,7 @@ u8 sub_800B518(void)
void sub_800B524(struct LinkPlayer *player)
{
- player->name[10] = player->name[8];
+ player->progressFlagsCopy = player->progressFlags;
ConvertInternationalString(player->name, player->language);
}
diff --git a/src/link_rfu.c b/src/link_rfu.c
index 4b0b0a2a5..cedc6b2fb 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "berry_blender.h"
#include "decompress.h"
@@ -2165,9 +2165,9 @@ void sub_800DD94(struct UnkLinkRfuStruct_02022B14 *data, u8 r9, bool32 r2, s32 r
data->unk_00.unk_00_4 = 0;
data->unk_00.unk_00_5 = 0;
data->unk_00.unk_00_6 = 0;
- data->unk_00.unk_00_7 = FlagGet(FLAG_IS_CHAMPION);
- data->unk_00.unk_01_0 = IsNationalPokedexEnabled();
- data->unk_00.unk_01_1 = FlagGet(FLAG_SYS_GAME_CLEAR);
+ data->unk_00.isChampion = FlagGet(FLAG_IS_CHAMPION);
+ data->unk_00.hasNationalDex = IsNationalPokedexEnabled();
+ data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR);
}
bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx)
@@ -3169,7 +3169,7 @@ bool32 sub_800F4F0(void)
sub_8011A64(2, 0x9000);
rfu_clearAllSlot();
gReceivedRemoteLinkPlayers = FALSE;
- gUnknown_03005000.unk_00 = 0;
+ gUnknown_03005000.linkRfuCallback = NULL;
if (gUnknown_03005000.unk_ce4 == 1)
{
sub_8011A64(2, 0x9000);
@@ -3264,17 +3264,17 @@ struct UnkLinkRfuStruct_02022B14 *sub_800F7DC(void)
bool32 IsSendingKeysToRfu(void)
{
- return gUnknown_03005000.unk_00 == rfu_func_080F97B8;
+ return gUnknown_03005000.linkRfuCallback == rfu_func_080F97B8;
}
void sub_800F804(void)
{
- gUnknown_03005000.unk_00 = rfu_func_080F97B8;
+ gUnknown_03005000.linkRfuCallback = rfu_func_080F97B8;
}
-void Rfu_set_zero(void)
+void ClearLinkRfuCallback(void)
{
- gUnknown_03005000.unk_00 = NULL;
+ gUnknown_03005000.linkRfuCallback = NULL;
}
void sub_800F820(void)
@@ -3287,8 +3287,8 @@ void sub_800F820(void)
void sub_800F850(void)
{
- if (gUnknown_03005000.unk_00 == NULL)
- gUnknown_03005000.unk_00 = sub_800F820;
+ if (gUnknown_03005000.linkRfuCallback == NULL)
+ gUnknown_03005000.linkRfuCallback = sub_800F820;
}
static void sub_800F86C(u8 unused)
@@ -3507,7 +3507,7 @@ void sub_800FE50(void *a0)
bool32 sub_800FE84(const u8 *src, size_t size)
{
bool8 r4;
- if (gUnknown_03005000.unk_00 != NULL)
+ if (gUnknown_03005000.linkRfuCallback != NULL)
return FALSE;
if (gSendCmd[0] != 0)
return FALSE;
@@ -3530,7 +3530,7 @@ bool32 sub_800FE84(const u8 *src, size_t size)
gUnknown_03005000.unk_6c.unk_04 = gBlockSendBuffer;
}
sub_800FD14(0x8800);
- gUnknown_03005000.unk_00 = rfufunc_80F9F44;
+ gUnknown_03005000.linkRfuCallback = rfufunc_80F9F44;
gUnknown_03005000.unk_5b = 0;
return TRUE;
}
@@ -3543,12 +3543,12 @@ static void rfufunc_80F9F44(void)
if (gUnknown_03005000.unk_0c == 1)
{
if (++gUnknown_03005000.unk_5b > 2)
- gUnknown_03005000.unk_00 = sub_800FFB0;
+ gUnknown_03005000.linkRfuCallback = sub_800FFB0;
}
else
{
if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == 0x8800)
- gUnknown_03005000.unk_00 = sub_800FFB0;
+ gUnknown_03005000.linkRfuCallback = sub_800FFB0;
}
}
}
@@ -3564,7 +3564,7 @@ static void sub_800FFB0(void)
if (gUnknown_03005000.unk_6c.unk_02 <= gUnknown_03005000.unk_6c.unk_00)
{
gUnknown_03005000.unk_6c.unk_10 = 0;
- gUnknown_03005000.unk_00 = rfufunc_80FA020;
+ gUnknown_03005000.linkRfuCallback = rfufunc_80FA020;
}
}
@@ -3586,11 +3586,11 @@ static void rfufunc_80FA020(void)
gUnknown_02022B44.unk_64++;
}
else
- gUnknown_03005000.unk_00 = NULL;
+ gUnknown_03005000.linkRfuCallback = NULL;
}
}
else
- gUnknown_03005000.unk_00 = NULL;
+ gUnknown_03005000.linkRfuCallback = NULL;
}
bool8 sub_8010100(u8 a0)
@@ -3606,7 +3606,7 @@ void sub_801011C(void)
sub_800C048();
gReceivedRemoteLinkPlayers = 0;
gUnknown_03005000.unk_ef = 1;
- gUnknown_03005000.unk_00 = NULL;
+ gUnknown_03005000.linkRfuCallback = NULL;
}
void sub_8010148(void)
@@ -3624,7 +3624,7 @@ void sub_8010168(void)
gUnknown_03005000.unk_ce4 = 2;
}
else
- gUnknown_03005000.unk_00 = sub_8010148;
+ gUnknown_03005000.linkRfuCallback = sub_8010148;
}
void LinkRfu_FatalError(void)
@@ -3654,7 +3654,7 @@ void sub_80101CC(void)
sub_8010168();
}
else
- gUnknown_03005000.unk_00 = sub_8010168;
+ gUnknown_03005000.linkRfuCallback = sub_8010168;
}
}
@@ -3663,16 +3663,16 @@ void sub_801022C(void)
if (gSendCmd[0] == 0 && gUnknown_03005000.unk_ce8 == 0)
{
sub_800FD14(0x5f00);
- gUnknown_03005000.unk_00 = sub_80101CC;
+ gUnknown_03005000.linkRfuCallback = sub_80101CC;
}
}
void sub_8010264(u8 taskId)
{
- if (gUnknown_03005000.unk_00 == NULL)
+ if (gUnknown_03005000.linkRfuCallback == NULL)
{
gUnknown_03005000.unk_cd9 = 1;
- gUnknown_03005000.unk_00 = sub_801022C;
+ gUnknown_03005000.linkRfuCallback = sub_801022C;
DestroyTask(taskId);
}
}
@@ -3708,7 +3708,7 @@ void sub_80102B8(void)
for (i = 0; i < MAX_RFU_PLAYERS; i++)
gUnknown_03005000.unk_e9[i] = 0;
gUnknown_03005000.unk_100++;
- gUnknown_03005000.unk_00 = NULL;
+ gUnknown_03005000.linkRfuCallback = NULL;
}
gUnknown_03005000.unk_fe++;
}
@@ -3718,7 +3718,7 @@ void sub_8010358(void)
if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
{
sub_800FD14(0x6600);
- gUnknown_03005000.unk_00 = sub_80102B8;
+ gUnknown_03005000.linkRfuCallback = sub_80102B8;
}
}
@@ -3732,7 +3732,7 @@ void sub_8010390(void)
if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
{
sub_800FD14(0x6600);
- gUnknown_03005000.unk_00 = sub_80102B8;
+ gUnknown_03005000.linkRfuCallback = sub_80102B8;
}
}
else
@@ -3748,7 +3748,7 @@ void sub_8010390(void)
if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0)
{
sub_800FD14(0x6600);
- gUnknown_03005000.unk_00 = sub_8010358;
+ gUnknown_03005000.linkRfuCallback = sub_8010358;
}
}
}
@@ -3756,9 +3756,9 @@ void sub_8010390(void)
void sub_8010434(void)
{
- if (gUnknown_03005000.unk_00 == NULL)
+ if (gUnknown_03005000.linkRfuCallback == NULL)
{
- gUnknown_03005000.unk_00 = sub_8010390;
+ gUnknown_03005000.linkRfuCallback = sub_8010390;
gUnknown_03005000.unk_fe = 0;
}
}
@@ -3800,17 +3800,17 @@ u8 sub_80104F4(void)
return gUnknown_03005000.playerCount;
}
-bool8 sub_8010500(void)
+bool8 IsLinkRfuTaskFinished(void)
{
if (gUnknown_03005000.unk_f1 == 2)
return FALSE;
- return gUnknown_03005000.unk_00 ? FALSE : TRUE;
+ return gUnknown_03005000.linkRfuCallback ? FALSE : TRUE;
}
static void sub_8010528(void)
{
- if (gUnknown_03005000.unk_00)
- gUnknown_03005000.unk_00();
+ if (gUnknown_03005000.linkRfuCallback)
+ gUnknown_03005000.linkRfuCallback();
}
bool8 sub_8010540(void)
@@ -4255,11 +4255,11 @@ void sub_8010FA0(bool32 a0, bool32 a1)
gUnknown_02022B14.unk_00.unk_00_5 = a1;
}
-void sub_8010FCC(u32 a0, u32 a1, u32 a2)
+void sub_8010FCC(u32 type, u32 species, u32 level)
{
- gUnknown_02022B14.type = a0;
- gUnknown_02022B14.species = a1;
- gUnknown_02022B14.unk_0b_1 = a2;
+ gUnknown_02022B14.type = type;
+ gUnknown_02022B14.species = species;
+ gUnknown_02022B14.level = level;
}
u8 sub_801100C(s32 a0)
@@ -4345,12 +4345,12 @@ void sub_80111B0(bool32 a0)
void sub_80111DC(void)
{
sub_8011E94(gUnknown_03004140.unk_00, 1);
- gUnknown_03005000.unk_00 = NULL;
+ gUnknown_03005000.linkRfuCallback = NULL;
}
void sub_80111FC(void)
{
- gUnknown_03005000.unk_00 = sub_80111DC;
+ gUnknown_03005000.linkRfuCallback = sub_80111DC;
}
void sub_801120C(u8 a0, u8 unused1)
@@ -4741,7 +4741,7 @@ void sub_8011AFC(void)
SetVBlankCallback(sub_8011AE8);
if (IsWirelessAdapterConnected())
{
- gLinkType = 0x1111;
+ gLinkType = LINKTYPE_0x1111;
sub_800B488();
OpenLink();
SeedRng(gMain.vblankCounter2);
@@ -4979,7 +4979,7 @@ bool32 sub_801200C(s16 a1, struct UnkLinkRfuStruct_02022B14 *structPtr)
return TRUE;
}
else if (structPtr->species != structPtr2->species
- || structPtr->unk_0b_1 != structPtr2->unk_0b_1
+ || structPtr->level != structPtr2->level
|| structPtr->type != structPtr2->type)
{
return TRUE;
diff --git a/src/list_menu.c b/src/list_menu.c
index 6d51559f7..797aff5f8 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -8,7 +8,7 @@
#include "trig.h"
#include "decompress.h"
#include "palette.h"
-#include "alloc.h"
+#include "malloc.h"
#include "strings.h"
#include "sound.h"
#include "constants/songs.h"
diff --git a/src/load_save.c b/src/load_save.c
index 5857f2b46..24dfda20c 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "berry_powder.h"
#include "item.h"
#include "load_save.h"
diff --git a/src/mail.c b/src/mail.c
index 0078bc4fc..cdf965545 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -17,7 +17,7 @@
#include "bg.h"
#include "pokemon_icon.h"
#include "constants/species.h"
-#include "alloc.h"
+#include "malloc.h"
#include "easy_chat.h"
#include "constants/rgb.h"
diff --git a/src/mail_data.c b/src/mail_data.c
index 809dcc2a8..b0b05e8fe 100644
--- a/src/mail_data.c
+++ b/src/mail_data.c
@@ -63,7 +63,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId)
gSaveBlock1Ptr->mail[id].playerName[i] = EOS;
PadNameString(gSaveBlock1Ptr->mail[id].playerName, CHAR_SPACE);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
gSaveBlock1Ptr->mail[id].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
species = GetBoxMonData(&mon->box, MON_DATA_SPECIES);
diff --git a/src/main.c b/src/main.c
index 06425e661..f488e7f6d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "crt0.h"
-#include "alloc.h"
+#include "malloc.h"
#include "link.h"
#include "link_rfu.h"
#include "librfu.h"
diff --git a/src/main_menu.c b/src/main_menu.c
index 6a0bd9e2d..95c64b3bd 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -2158,9 +2158,9 @@ static void MainMenu_FormatSavegameTime(void)
StringExpandPlaceholders(gStringVar4, gText_ContinueMenuTime);
AddTextPrinterParameterized3(2, 1, 0x6C, 17, sTextColor_PlayerGenderColor, -1, gStringVar4);
- ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, 0, 3);
+ ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
*ptr = 0xF0;
- ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, 2, 2);
+ ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 17, sTextColor_PlayerGenderColor, -1, str);
}
@@ -2172,12 +2172,12 @@ static void MainMenu_FormatSavegamePokedex(void)
if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
{
if (IsNationalPokedexEnabled())
- dexCount = GetNationalPokedexCount(1);
+ dexCount = GetNationalPokedexCount(FLAG_GET_CAUGHT);
else
- dexCount = GetHoennPokedexCount(1);
+ dexCount = GetHoennPokedexCount(FLAG_GET_CAUGHT);
StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPokedex);
AddTextPrinterParameterized3(2, 1, 0, 33, sTextColor_PlayerGenderColor, -1, gStringVar4);
- ConvertIntToDecimalStringN(str, dexCount, 0, 3);
+ ConvertIntToDecimalStringN(str, dexCount, STR_CONV_MODE_LEFT_ALIGN, 3);
AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 100), 33, sTextColor_PlayerGenderColor, -1, str);
}
}
@@ -2195,7 +2195,7 @@ static void MainMenu_FormatSavegameBadges(void)
}
StringExpandPlaceholders(gStringVar4, gText_ContinueMenuBadges);
AddTextPrinterParameterized3(2, 1, 0x6C, 33, sTextColor_PlayerGenderColor, -1, gStringVar4);
- ConvertIntToDecimalStringN(str, badgeCount, 2, 1);
+ ConvertIntToDecimalStringN(str, badgeCount, STR_CONV_MODE_LEADING_ZEROS, 1);
AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 33, sTextColor_PlayerGenderColor, -1, str);
}
diff --git a/src/match_call.c b/src/match_call.c
index 4b0134d2c..646b14cea 100644
--- a/src/match_call.c
+++ b/src/match_call.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_setup.h"
#include "bg.h"
@@ -965,9 +965,9 @@ static const struct MatchCallText *const sMatchCallGeneralTopics[] =
sMatchCallBattlePyramidTexts,
};
-extern const u8 gUnknown_082A5C9C[];
-extern const u8 gUnknown_082A5D2C[];
-extern const u8 gUnknown_082A633D[];
+extern const u8 gBirchDexRatingText_AreYouCurious[];
+extern const u8 gBirchDexRatingText_SoYouveSeenAndCaught[];
+extern const u8 gBirchDexRatingText_OnANationwideBasis[];
void InitMatchCallCounters(void)
{
@@ -1743,7 +1743,7 @@ static void PopulateBattleFrontierStreak(int matchCallId, u8 *destStr)
i++;
}
- ConvertIntToDecimalStringN(destStr, gBattleFrontierStreakInfo.streak, 0, i);
+ ConvertIntToDecimalStringN(destStr, gBattleFrontierStreakInfo.streak, STR_CONV_MODE_LEFT_ALIGN, i);
}
static const u16 sBadgeFlags[] =
@@ -1976,13 +1976,13 @@ void sub_8197080(u8 *destStr)
numSeen = GetHoennPokedexCount(FLAG_GET_SEEN);
numCaught = GetHoennPokedexCount(FLAG_GET_CAUGHT);
- ConvertIntToDecimalStringN(gStringVar1, numSeen, 0, 3);
- ConvertIntToDecimalStringN(gStringVar2, numCaught, 0, 3);
+ ConvertIntToDecimalStringN(gStringVar1, numSeen, STR_CONV_MODE_LEFT_ALIGN, 3);
+ ConvertIntToDecimalStringN(gStringVar2, numCaught, STR_CONV_MODE_LEFT_ALIGN, 3);
dexRatingLevel = GetPokedexRatingLevel(numCaught);
- str = StringCopy(buffer, gUnknown_082A5C9C);
+ str = StringCopy(buffer, gBirchDexRatingText_AreYouCurious);
str[0] = CHAR_PROMPT_CLEAR;
str++;
- str = StringCopy(str, gUnknown_082A5D2C);
+ str = StringCopy(str, gBirchDexRatingText_SoYouveSeenAndCaught);
str[0] = CHAR_PROMPT_CLEAR;
str++;
StringCopy(str, sBirchDexRatingTexts[dexRatingLevel]);
@@ -1994,9 +1994,9 @@ void sub_8197080(u8 *destStr)
str++;
numSeen = GetNationalPokedexCount(FLAG_GET_SEEN);
numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT);
- ConvertIntToDecimalStringN(gStringVar1, numSeen, 0, 3);
- ConvertIntToDecimalStringN(gStringVar2, numCaught, 0, 3);
- StringExpandPlaceholders(str, gUnknown_082A633D);
+ ConvertIntToDecimalStringN(gStringVar1, numSeen, STR_CONV_MODE_LEFT_ALIGN, 3);
+ ConvertIntToDecimalStringN(gStringVar2, numCaught, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringExpandPlaceholders(str, gBirchDexRatingText_OnANationwideBasis);
}
Free(buffer);
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index a4d70c062..add48efd8 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -22,6 +22,7 @@
#include "field_message_box.h"
#include "script_menu.h"
#include "trader.h"
+#include "constants/mauville_old_man.h"
#define CHAR_SONG_WORD_SEPARATOR 0x37
@@ -41,7 +42,7 @@ static EWRAM_DATA u16 sUnknownBardRelated = 0;
static EWRAM_DATA struct MauvilleManStoryteller * sStorytellerPtr = NULL;
static EWRAM_DATA u8 sStorytellerWindowId = 0;
-static const u16 sDefaultBardSongLyrics[6] = {
+static const u16 sDefaultBardSongLyrics[BARD_SONG_LENGTH] = {
EC_WORD_SHAKE,
EC_WORD_IT,
EC_WORD_DO,
@@ -80,7 +81,7 @@ static void SetupBard(void)
bard->id = MAUVILLE_MAN_BARD;
bard->hasChangedSong = FALSE;
bard->language = gGameLanguage;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < BARD_SONG_LENGTH; i++)
bard->songLyrics[i] = sDefaultBardSongLyrics[i];
}
@@ -166,10 +167,10 @@ void ScrSpecial_SaveBardSongLyrics(void)
StringCopy(bard->playerName, gSaveBlock2Ptr->playerName);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
bard->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
- for (i = 0; i < 6; i++)
+ for (i = 0; i < BARD_SONG_LENGTH; i++)
bard->songLyrics[i] = bard->temporaryLyrics[i];
bard->hasChangedSong = TRUE;
@@ -248,15 +249,15 @@ void ScrSpecial_SetHipsterSpokenFlag(void)
void ScrSpecial_HipsterTeachWord(void)
{
- u16 var = sub_811F01C();
+ u16 phrase = GetNewHipsterPhraseToTeach();
- if (var == 0xFFFF)
+ if (phrase == 0xFFFF)
{
gSpecialVar_Result = FALSE;
}
else
{
- CopyEasyChatWord(gStringVar1, var);
+ CopyEasyChatWord(gStringVar1, phrase);
gSpecialVar_Result = TRUE;
}
}
@@ -458,7 +459,7 @@ static void BardSing(struct Task *task, struct BardSong *song)
lyrics = bard->songLyrics;
else
lyrics = bard->temporaryLyrics;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < BARD_SONG_LENGTH; i++)
song->lyrics[i] = lyrics[i];
song->currWord = 0;
}
@@ -683,14 +684,14 @@ void ScrSpecial_SetMauvilleOldManEventObjGfx(void)
void sub_8120B70(union OldMan * oldMan)
{
s32 i;
- u8 sp00[8];
+ u8 playerName[PLAYER_NAME_LENGTH + 1];
switch (oldMan->common.id)
{
case MAUVILLE_MAN_TRADER:
{
struct MauvilleOldManTrader * trader = &oldMan->trader;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TRADER_ITEMS; i++)
{
if (trader->language[i] == LANGUAGE_JAPANESE)
{
@@ -702,17 +703,17 @@ void sub_8120B70(union OldMan * oldMan)
case MAUVILLE_MAN_STORYTELLER:
{
struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
if (storyteller->gameStatIDs[i] != 0)
{
- memcpy(sp00, storyteller->trainerNames[i], 7);
- sp00[7] = EOS;
- if (IsStringJapanese(sp00))
+ memcpy(playerName, storyteller->trainerNames[i], PLAYER_NAME_LENGTH);
+ playerName[PLAYER_NAME_LENGTH] = EOS;
+ if (IsStringJapanese(playerName))
{
- memset(sp00, CHAR_SPACE, 8);
- StringCopy(sp00, gText_Friend);
- memcpy(storyteller->trainerNames[i], sp00, 7);
+ memset(playerName, CHAR_SPACE, PLAYER_NAME_LENGTH + 1);
+ StringCopy(playerName, gText_Friend);
+ memcpy(storyteller->trainerNames[i], playerName, PLAYER_NAME_LENGTH);
storyteller->language[i] = GAME_LANGUAGE;
}
}
@@ -732,7 +733,7 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3)
{
struct MauvilleOldManTrader * trader = &oldMan->trader;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TRADER_ITEMS; i++)
{
if (IsStringJapanese(trader->playerNames[i]))
{
@@ -749,7 +750,7 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3)
{
struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
if (IsStringJapanese(storyteller->trainerNames[i]))
{
@@ -797,19 +798,19 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3)
void SanitizeReceivedEmeraldOldMan(union OldMan * oldMan, u32 version, u32 language)
{
- u8 sp00[8];
+ u8 playerName[PLAYER_NAME_LENGTH + 1];
s32 i;
if (oldMan->common.id == MAUVILLE_MAN_STORYTELLER && language == LANGUAGE_JAPANESE)
{
struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
if (storyteller->gameStatIDs[i] != 0)
{
- memcpy(sp00, storyteller->trainerNames[i], 7);
- sp00[7] = EOS;
- if (IsStringJapanese(sp00))
+ memcpy(playerName, storyteller->trainerNames[i], PLAYER_NAME_LENGTH);
+ playerName[PLAYER_NAME_LENGTH] = EOS;
+ if (IsStringJapanese(playerName))
storyteller->language[i] = LANGUAGE_JAPANESE;
else
storyteller->language[i] = GAME_LANGUAGE;
@@ -831,7 +832,7 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language
if (isRuby)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TRADER_ITEMS; i++)
{
u8 * str = trader->playerNames[i];
if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN)
@@ -845,7 +846,7 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language
}
else
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TRADER_ITEMS; i++)
{
if (trader->language[i] == LANGUAGE_JAPANESE)
{
@@ -863,7 +864,7 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language
if (isRuby)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
if (storyteller->gameStatIDs[i] != 0)
storyteller->language[i] = language;
@@ -914,42 +915,223 @@ struct Story
};
static const struct Story sStorytellerStories[] = {
- {GAME_STAT_NUM_UNION_ROOM_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956},
- {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE},
- {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8},
- {GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E},
- {GAME_STAT_GOT_INTERVIEWED, 1, MauvilleCity_PokemonCenter_1F_Text_28EBB5, MauvilleCity_PokemonCenter_1F_Text_28EBCD, MauvilleCity_PokemonCenter_1F_Text_28EBDD},
- {GAME_STAT_TRAINER_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28EC60, MauvilleCity_PokemonCenter_1F_Text_28EC79, MauvilleCity_PokemonCenter_1F_Text_28EC81},
- {GAME_STAT_POKEMON_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28ED04, MauvilleCity_PokemonCenter_1F_Text_28ED21, MauvilleCity_PokemonCenter_1F_Text_28ED30},
- {GAME_STAT_FISHING_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28EDA1, MauvilleCity_PokemonCenter_1F_Text_28EDB5, MauvilleCity_PokemonCenter_1F_Text_28EDCF},
- {GAME_STAT_HATCHED_EGGS, 1, MauvilleCity_PokemonCenter_1F_Text_28EE45, MauvilleCity_PokemonCenter_1F_Text_28EE5D, MauvilleCity_PokemonCenter_1F_Text_28EE6A},
- {GAME_STAT_EVOLVED_POKEMON, 1, MauvilleCity_PokemonCenter_1F_Text_28EEDD, MauvilleCity_PokemonCenter_1F_Text_28EEF1, MauvilleCity_PokemonCenter_1F_Text_28EF01},
- {GAME_STAT_USED_POKECENTER, 1, MauvilleCity_PokemonCenter_1F_Text_28EF73, MauvilleCity_PokemonCenter_1F_Text_28EF95, MauvilleCity_PokemonCenter_1F_Text_28EFAA},
- {GAME_STAT_RESTED_AT_HOME, 1, MauvilleCity_PokemonCenter_1F_Text_28F045, MauvilleCity_PokemonCenter_1F_Text_28F05A, MauvilleCity_PokemonCenter_1F_Text_28F071},
- {GAME_STAT_ENTERED_SAFARI_ZONE, 1, MauvilleCity_PokemonCenter_1F_Text_28F0F3, MauvilleCity_PokemonCenter_1F_Text_28F10D, MauvilleCity_PokemonCenter_1F_Text_28F125},
- {GAME_STAT_USED_CUT, 1, MauvilleCity_PokemonCenter_1F_Text_28F1BE, MauvilleCity_PokemonCenter_1F_Text_28F1D5, MauvilleCity_PokemonCenter_1F_Text_28F1DE},
- {GAME_STAT_USED_ROCK_SMASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F24F, MauvilleCity_PokemonCenter_1F_Text_28F269, MauvilleCity_PokemonCenter_1F_Text_28F277},
- {GAME_STAT_MOVED_SECRET_BASE, 1, MauvilleCity_PokemonCenter_1F_Text_28F2FC, MauvilleCity_PokemonCenter_1F_Text_28F314, MauvilleCity_PokemonCenter_1F_Text_28F32A},
- {GAME_STAT_USED_SPLASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F3AD, MauvilleCity_PokemonCenter_1F_Text_28F3C6, MauvilleCity_PokemonCenter_1F_Text_28F3D2},
- {GAME_STAT_USED_STRUGGLE, 1, MauvilleCity_PokemonCenter_1F_Text_28F44B, MauvilleCity_PokemonCenter_1F_Text_28F461, MauvilleCity_PokemonCenter_1F_Text_28F47C},
- {GAME_STAT_SLOT_JACKPOTS, 1, MauvilleCity_PokemonCenter_1F_Text_28F50C, MauvilleCity_PokemonCenter_1F_Text_28F51B, MauvilleCity_PokemonCenter_1F_Text_28F538},
- {GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, MauvilleCity_PokemonCenter_1F_Text_28F5BE, MauvilleCity_PokemonCenter_1F_Text_28F5D1, MauvilleCity_PokemonCenter_1F_Text_28F5F2},
- {GAME_STAT_ENTERED_BATTLE_TOWER, 1, MauvilleCity_PokemonCenter_1F_Text_28F678, MauvilleCity_PokemonCenter_1F_Text_28F694, MauvilleCity_PokemonCenter_1F_Text_28F6B4},
- {GAME_STAT_POKEBLOCKS, 1, MauvilleCity_PokemonCenter_1F_Text_28F751, MauvilleCity_PokemonCenter_1F_Text_28F76A, MauvilleCity_PokemonCenter_1F_Text_28F776},
- {GAME_STAT_ENTERED_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F7F6, MauvilleCity_PokemonCenter_1F_Text_28F811, MauvilleCity_PokemonCenter_1F_Text_28F822},
- {GAME_STAT_WON_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F89C, MauvilleCity_PokemonCenter_1F_Text_28F8AF, MauvilleCity_PokemonCenter_1F_Text_28F8BC},
- {GAME_STAT_SHOPPED, 1, MauvilleCity_PokemonCenter_1F_Text_28F92F, MauvilleCity_PokemonCenter_1F_Text_28F941, MauvilleCity_PokemonCenter_1F_Text_28F949},
- {GAME_STAT_USED_ITEMFINDER, 1, MauvilleCity_PokemonCenter_1F_Text_28F9D1, MauvilleCity_PokemonCenter_1F_Text_28F9EA, MauvilleCity_PokemonCenter_1F_Text_28F9FD},
- {GAME_STAT_GOT_RAINED_ON, 1, MauvilleCity_PokemonCenter_1F_Text_28FA81, MauvilleCity_PokemonCenter_1F_Text_28FA99, MauvilleCity_PokemonCenter_1F_Text_28FAA7},
- {GAME_STAT_CHECKED_POKEDEX, 1, MauvilleCity_PokemonCenter_1F_Text_28FB1D, MauvilleCity_PokemonCenter_1F_Text_28FB35, MauvilleCity_PokemonCenter_1F_Text_28FB47},
- {GAME_STAT_RECEIVED_RIBBONS, 1, MauvilleCity_PokemonCenter_1F_Text_28FBC4, MauvilleCity_PokemonCenter_1F_Text_28FBD9, MauvilleCity_PokemonCenter_1F_Text_28FBEA},
- {GAME_STAT_JUMPED_DOWN_LEDGES, 1, MauvilleCity_PokemonCenter_1F_Text_28FC6B, MauvilleCity_PokemonCenter_1F_Text_28FC85, MauvilleCity_PokemonCenter_1F_Text_28FC98},
- {GAME_STAT_WATCHED_TV, 1, MauvilleCity_PokemonCenter_1F_Text_28FD1D, MauvilleCity_PokemonCenter_1F_Text_28FD35, MauvilleCity_PokemonCenter_1F_Text_28FD40},
- {GAME_STAT_CHECKED_CLOCK, 1, MauvilleCity_PokemonCenter_1F_Text_28FDA2, MauvilleCity_PokemonCenter_1F_Text_28FDBD, MauvilleCity_PokemonCenter_1F_Text_28FDCE},
- {GAME_STAT_WON_POKEMON_LOTTERY, 1, MauvilleCity_PokemonCenter_1F_Text_28FE57, MauvilleCity_PokemonCenter_1F_Text_28FE72, MauvilleCity_PokemonCenter_1F_Text_28FE88},
- {GAME_STAT_USED_DAYCARE, 1, MauvilleCity_PokemonCenter_1F_Text_28FF0C, MauvilleCity_PokemonCenter_1F_Text_28FF27, MauvilleCity_PokemonCenter_1F_Text_28FF44},
- {GAME_STAT_RODE_CABLE_CAR, 1, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D},
- {GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB}
+ // The 50 below is replaced with GAME_STAT_SAVED_GAME
+ {
+ 50, 1,
+ MauvilleCity_PokemonCenter_1F_Text_SavedGameTitle,
+ MauvilleCity_PokemonCenter_1F_Text_SavedGameAction,
+ MauvilleCity_PokemonCenter_1F_Text_SavedGameStory
+ },
+ {
+ GAME_STAT_STARTED_TRENDS, 1,
+ MauvilleCity_PokemonCenter_1F_Text_TrendsStartedTitle,
+ MauvilleCity_PokemonCenter_1F_Text_TrendsStartedAction,
+ MauvilleCity_PokemonCenter_1F_Text_TrendsStartedStory
+ },
+ {
+ GAME_STAT_PLANTED_BERRIES, 1,
+ MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedTitle,
+ MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedAction,
+ MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedStory
+ },
+ {
+ GAME_STAT_TRADED_BIKES, 1,
+ MauvilleCity_PokemonCenter_1F_Text_BikeTradesTitle,
+ MauvilleCity_PokemonCenter_1F_Text_BikeTradesAction,
+ MauvilleCity_PokemonCenter_1F_Text_BikeTradesStory
+ },
+ {
+ GAME_STAT_GOT_INTERVIEWED, 1,
+ MauvilleCity_PokemonCenter_1F_Text_InterviewsTitle,
+ MauvilleCity_PokemonCenter_1F_Text_InterviewsAction,
+ MauvilleCity_PokemonCenter_1F_Text_InterviewsStory
+ },
+ {
+ GAME_STAT_TRAINER_BATTLES, 1,
+ MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesTitle,
+ MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesAction,
+ MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesStory
+ },
+ {
+ GAME_STAT_POKEMON_CAPTURES, 1,
+ MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtTitle,
+ MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtAction,
+ MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtStory
+ },
+ {
+ GAME_STAT_FISHING_CAPTURES, 1,
+ MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtTitle,
+ MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtAction,
+ MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtStory
+ },
+ {
+ GAME_STAT_HATCHED_EGGS, 1,
+ MauvilleCity_PokemonCenter_1F_Text_EggsHatchedTitle,
+ MauvilleCity_PokemonCenter_1F_Text_EggsHatchedAction,
+ MauvilleCity_PokemonCenter_1F_Text_EggsHatchedStory
+ },
+ {
+ GAME_STAT_EVOLVED_POKEMON, 1,
+ MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedTitle,
+ MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedAction,
+ MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedStory
+ },
+ {
+ GAME_STAT_USED_POKECENTER, 1,
+ MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterTitle,
+ MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterAction,
+ MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterStory
+ },
+ {
+ GAME_STAT_RESTED_AT_HOME, 1,
+ MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeTitle,
+ MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeAction,
+ MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeStory
+ },
+ {
+ GAME_STAT_ENTERED_SAFARI_ZONE, 1,
+ MauvilleCity_PokemonCenter_1F_Text_SafariGamesTitle,
+ MauvilleCity_PokemonCenter_1F_Text_SafariGamesAction,
+ MauvilleCity_PokemonCenter_1F_Text_SafariGamesStory
+ },
+ {
+ GAME_STAT_USED_CUT, 1,
+ MauvilleCity_PokemonCenter_1F_Text_UsedCutTitle,
+ MauvilleCity_PokemonCenter_1F_Text_UsedCutAction,
+ MauvilleCity_PokemonCenter_1F_Text_UsedCutStory
+ },
+ {
+ GAME_STAT_USED_ROCK_SMASH, 1,
+ MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashTitle,
+ MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashAction,
+ MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashStory
+ },
+ {
+ GAME_STAT_MOVED_SECRET_BASE, 1,
+ MauvilleCity_PokemonCenter_1F_Text_MovedBasesTitle,
+ MauvilleCity_PokemonCenter_1F_Text_MovedBasesAction,
+ MauvilleCity_PokemonCenter_1F_Text_MovedBasesStory
+ },
+ {
+ GAME_STAT_USED_SPLASH, 1,
+ MauvilleCity_PokemonCenter_1F_Text_UsedSplashTitle,
+ MauvilleCity_PokemonCenter_1F_Text_UsedSplashAction,
+ MauvilleCity_PokemonCenter_1F_Text_UsedSplashStory
+ },
+ {
+ GAME_STAT_USED_STRUGGLE, 1,
+ MauvilleCity_PokemonCenter_1F_Text_UsedStruggleTitle,
+ MauvilleCity_PokemonCenter_1F_Text_UsedStruggleAction,
+ MauvilleCity_PokemonCenter_1F_Text_UsedStruggleStory
+ },
+ {
+ GAME_STAT_SLOT_JACKPOTS, 1,
+ MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsTitle,
+ MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsAction,
+ MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsStory
+ },
+ {
+ GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2,
+ MauvilleCity_PokemonCenter_1F_Text_RouletteWinsTitle,
+ MauvilleCity_PokemonCenter_1F_Text_RouletteWinsAction,
+ MauvilleCity_PokemonCenter_1F_Text_RouletteWinsStory
+ },
+ {
+ GAME_STAT_ENTERED_BATTLE_TOWER, 1,
+ MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesTitle,
+ MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesAction,
+ MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesStory
+ },
+ {
+ GAME_STAT_POKEBLOCKS, 1,
+ MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksTitle,
+ MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksAction,
+ MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksStory
+ },
+ {
+ GAME_STAT_ENTERED_CONTEST, 1,
+ MauvilleCity_PokemonCenter_1F_Text_EnteredContestsTitle,
+ MauvilleCity_PokemonCenter_1F_Text_EnteredContestsAction,
+ MauvilleCity_PokemonCenter_1F_Text_EnteredContestsStory
+ },
+ {
+ GAME_STAT_WON_CONTEST, 1,
+ MauvilleCity_PokemonCenter_1F_Text_WonContestsTitle,
+ MauvilleCity_PokemonCenter_1F_Text_WonContestsAction,
+ MauvilleCity_PokemonCenter_1F_Text_WonContestsStory
+ },
+ {
+ GAME_STAT_SHOPPED, 1,
+ MauvilleCity_PokemonCenter_1F_Text_TimesShoppedTitle,
+ MauvilleCity_PokemonCenter_1F_Text_TimesShoppedAction,
+ MauvilleCity_PokemonCenter_1F_Text_TimesShoppedStory
+ },
+ {
+ GAME_STAT_USED_ITEMFINDER, 1,
+ MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderTitle,
+ MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderAction,
+ MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderStory
+ },
+ {
+ GAME_STAT_GOT_RAINED_ON, 1,
+ MauvilleCity_PokemonCenter_1F_Text_TimesRainedTitle,
+ MauvilleCity_PokemonCenter_1F_Text_TimesRainedAction,
+ MauvilleCity_PokemonCenter_1F_Text_TimesRainedStory
+ },
+ {
+ GAME_STAT_CHECKED_POKEDEX, 1,
+ MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexTitle,
+ MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexAction,
+ MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexStory
+ },
+ {
+ GAME_STAT_RECEIVED_RIBBONS, 1,
+ MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsTitle,
+ MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsAction,
+ MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsStory
+ },
+ {
+ GAME_STAT_JUMPED_DOWN_LEDGES, 1,
+ MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedTitle,
+ MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedAction,
+ MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedStory
+ },
+ {
+ GAME_STAT_WATCHED_TV, 1,
+ MauvilleCity_PokemonCenter_1F_Text_TVWatchedTitle,
+ MauvilleCity_PokemonCenter_1F_Text_TVWatchedAction,
+ MauvilleCity_PokemonCenter_1F_Text_TVWatchedStory
+ },
+ {
+ GAME_STAT_CHECKED_CLOCK, 1,
+ MauvilleCity_PokemonCenter_1F_Text_CheckedClockTitle,
+ MauvilleCity_PokemonCenter_1F_Text_CheckedClockAction,
+ MauvilleCity_PokemonCenter_1F_Text_CheckedClockStory
+ },
+ {
+ GAME_STAT_WON_POKEMON_LOTTERY, 1,
+ MauvilleCity_PokemonCenter_1F_Text_WonLotteryTitle,
+ MauvilleCity_PokemonCenter_1F_Text_WonLotteryAction,
+ MauvilleCity_PokemonCenter_1F_Text_WonLotteryStory
+ },
+ {
+ GAME_STAT_USED_DAYCARE, 1,
+ MauvilleCity_PokemonCenter_1F_Text_UsedDaycareTitle,
+ MauvilleCity_PokemonCenter_1F_Text_UsedDaycareAction,
+ MauvilleCity_PokemonCenter_1F_Text_UsedDaycareStory
+ },
+ {
+ GAME_STAT_RODE_CABLE_CAR, 1,
+ MauvilleCity_PokemonCenter_1F_Text_RodeCableCarTitle,
+ MauvilleCity_PokemonCenter_1F_Text_RodeCableCarAction,
+ MauvilleCity_PokemonCenter_1F_Text_RodeCableCarStory
+ },
+ {
+ GAME_STAT_ENTERED_HOT_SPRINGS, 1,
+ MauvilleCity_PokemonCenter_1F_Text_HotSpringsTitle,
+ MauvilleCity_PokemonCenter_1F_Text_HotSpringsAction,
+ MauvilleCity_PokemonCenter_1F_Text_HotSpringsStory
+ }
};
static void StorytellerSetup(void)
@@ -959,7 +1141,7 @@ static void StorytellerSetup(void)
sStorytellerPtr->id = MAUVILLE_MAN_STORYTELLER;
sStorytellerPtr->alreadyRecorded = FALSE;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
sStorytellerPtr->gameStatIDs[i] = 0;
sStorytellerPtr->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead?
@@ -977,7 +1159,7 @@ static void Storyteller_ResetFlag(void)
static u32 StorytellerGetGameStat(u8 stat)
{
if (stat == 50)
- stat = 0;
+ stat = GAME_STAT_SAVED_GAME;
return GetGameStat(stat);
}
@@ -985,12 +1167,12 @@ static const struct Story *GetStoryByStat(u32 stat)
{
s32 i;
- for (i = 0; i < 36; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sStorytellerStories); i++)
{
if (sStorytellerStories[i].stat == stat)
return &sStorytellerStories[i];
}
- return &sStorytellerStories[35];
+ return &sStorytellerStories[ARRAY_COUNT(sStorytellerStories) - 1];
}
static const u8 *GetStoryTitleByStat(u32 stat)
@@ -1012,7 +1194,7 @@ static u8 GetFreeStorySlot(void)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
if (sStorytellerPtr->gameStatIDs[i] == 0)
break;
@@ -1049,15 +1231,15 @@ static void GetStoryByStattellerPlayerName(u32 player, void *dst)
{
u8 *name = sStorytellerPtr->trainerNames[player];
- memset(dst, EOS, 8);
- memcpy(dst, name, 7);
+ memset(dst, EOS, PLAYER_NAME_LENGTH + 1);
+ memcpy(dst, name, PLAYER_NAME_LENGTH);
}
static void StorytellerSetPlayerName(u32 player, const u8 * src)
{
u8 * name = sStorytellerPtr->trainerNames[player];
- memset(name, EOS, 7);
- memcpy(name, src, 7);
+ memset(name, EOS, PLAYER_NAME_LENGTH);
+ memcpy(name, src, PLAYER_NAME_LENGTH);
}
@@ -1110,15 +1292,15 @@ static bool8 StorytellerInitializeRandomStat(void)
u8 stat = sStorytellerStories[arr[i]].stat;
u8 minVal = sStorytellerStories[arr[i]].minVal;
- for (j = 0; j < 4; j++)
+ for (j = 0; j < NUM_STORYTELLER_TALES; j++)
{
if (sStorytellerPtr->gameStatIDs[j] == stat)
break;
}
- if (j == 4 && StorytellerGetGameStat(stat) >= minVal)
+ if (j == NUM_STORYTELLER_TALES && StorytellerGetGameStat(stat) >= minVal)
{
sStorytellerPtr->alreadyRecorded = TRUE;
- if (GetFreeStorySlot() == 4)
+ if (GetFreeStorySlot() == NUM_STORYTELLER_TALES)
StorytellerRecordNewStat(sSelectedStory, stat);
else
StorytellerRecordNewStat(GetFreeStorySlot(), stat);
@@ -1132,7 +1314,7 @@ static void StorytellerDisplayStory(u32 player)
{
u8 stat = sStorytellerPtr->gameStatIDs[player];
- ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10);
+ ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), STR_CONV_MODE_LEFT_ALIGN, 10);
StringCopy(gStringVar2, GetStoryActionByStat(stat));
GetStoryByStattellerPlayerName(player, gStringVar3);
ConvertInternationalString(gStringVar3, sStorytellerPtr->language[player]);
@@ -1144,7 +1326,7 @@ static void PrintStoryList(void)
s32 i;
s32 width = GetStringWidth(1, gText_Exit, 0);
u8 tileWidth;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
s32 curWidth;
u16 gameStatID = sStorytellerPtr->gameStatIDs[i];
@@ -1157,7 +1339,7 @@ static void PrintStoryList(void)
}
sStorytellerWindowId = CreateWindowFromRect(0, 0, ConvertPixelWidthToTileWidth(width), GetFreeStorySlot() * 2 + 2);
SetStandardWindowBorderStyle(sStorytellerWindowId, 0);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_STORYTELLER_TALES; i++)
{
u16 gameStatID = sStorytellerPtr->gameStatIDs[i];
if (gameStatID == 0)
@@ -1169,7 +1351,7 @@ static void PrintStoryList(void)
CopyWindowToVram(sStorytellerWindowId, 3);
}
-static void Task_StoryListMenu(u8 taskId) // Task_StoryListMenu
+static void Task_StoryListMenu(u8 taskId)
{
struct Task *task = &gTasks[taskId];
s32 selection;
diff --git a/src/menu.c b/src/menu.c
index 8d50d4dcc..056fc6a9d 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "blit.h"
#include "dma3.h"
@@ -1433,13 +1433,13 @@ s8 sub_8199284(void)
sub_8199134(0, 1);
return MENU_NOTHING_CHOSEN;
}
- else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
+ else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{
PlaySE(SE_SELECT);
sub_8199134(-1, 0);
return MENU_NOTHING_CHOSEN;
}
- else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
+ else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{
PlaySE(SE_SELECT);
sub_8199134(1, 0);
@@ -1474,13 +1474,13 @@ s8 Menu_ProcessInputGridLayout(void)
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
+ else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{
if (oldPos != sub_81991F8(-1, 0))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
+ else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{
if (oldPos != sub_81991F8(1, 0))
PlaySE(SE_SELECT);
@@ -1513,13 +1513,13 @@ s8 sub_81993D8(void)
sub_8199134(0, 1);
return MENU_NOTHING_CHOSEN;
}
- else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || sub_812210C() == 1)
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
{
PlaySE(SE_SELECT);
sub_8199134(-1, 0);
return MENU_NOTHING_CHOSEN;
}
- else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || sub_812210C() == 2)
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
{
PlaySE(SE_SELECT);
sub_8199134(1, 0);
@@ -1554,13 +1554,13 @@ s8 sub_8199484(void)
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || sub_812210C() == 1)
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED)
{
if (oldPos != sub_81991F8(-1, 0))
PlaySE(SE_SELECT);
return MENU_NOTHING_CHOSEN;
}
- else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || sub_812210C() == 2)
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED)
{
if (oldPos != sub_81991F8(1, 0))
PlaySE(SE_SELECT);
@@ -1868,7 +1868,7 @@ u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16
}
}
-void sub_8199C30(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette)
+void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette)
{
u8 i;
u8 j;
@@ -1883,7 +1883,7 @@ void sub_8199C30(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette)
}
}
-void sub_8199CBC(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height)
+void CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height)
{
u8 i;
u8 j;
@@ -2148,18 +2148,18 @@ void sub_819A344(u8 a0, u8 *dest, u8 color)
break;
case 1:
if (IsNationalPokedexEnabled())
- string = ConvertIntToDecimalStringN(string, GetNationalPokedexCount(1), 0, 3);
+ string = ConvertIntToDecimalStringN(string, GetNationalPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 3);
else
- string = ConvertIntToDecimalStringN(string, GetHoennPokedexCount(1), 0, 3);
+ string = ConvertIntToDecimalStringN(string, GetHoennPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 3);
*string = EOS;
break;
case 2:
- string = ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeHours, 0, 3);
+ string = ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
*(string++) = CHAR_COLON;
- ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeMinutes, 2, 2);
+ ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
break;
case 3:
- sub_81245DC(string, gMapHeader.regionMapSectionId);
+ GetMapNameGeneric(string, gMapHeader.regionMapSectionId);
break;
case 4:
for (curFlag = FLAG_BADGE01_GET, flagCount = 0, endOfString = string + 1; curFlag <= FLAG_BADGE08_GET; curFlag++)
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index cb0d621c6..2b7a7f419 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -251,27 +251,27 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
return FALSE;
}
-u8 GetLRKeysState(void)
+u8 GetLRKeysPressed(void)
{
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
{
if (gMain.newKeys & L_BUTTON)
- return 1;
+ return MENU_L_PRESSED;
if (gMain.newKeys & R_BUTTON)
- return 2;
+ return MENU_R_PRESSED;
}
return 0;
}
-u8 sub_812210C(void)
+u8 GetLRKeysPressedAndHeld(void)
{
if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
{
if (gMain.newAndRepeatedKeys & L_BUTTON)
- return 1;
+ return MENU_L_PRESSED;
if (gMain.newAndRepeatedKeys & R_BUTTON)
- return 2;
+ return MENU_R_PRESSED;
}
return 0;
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index 1536cf413..75317e3ff 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle_main.h"
#include "contest_effect.h"
#include "data.h"
@@ -761,7 +761,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove)
AddTextPrinterParameterized(0, 1, str, 4, 0x19, TEXT_SPEED_FF, NULL);
x = 4 + GetStringWidth(1, gText_MoveRelearnerPP, 0);
- ConvertIntToDecimalStringN(buffer, move->pp, 0, 2);
+ ConvertIntToDecimalStringN(buffer, move->pp, STR_CONV_MODE_LEFT_ALIGN, 2);
AddTextPrinterParameterized(0, 1, buffer, x, 0x29, TEXT_SPEED_FF, NULL);
if (move->power < 2)
@@ -770,7 +770,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove)
}
else
{
- ConvertIntToDecimalStringN(buffer, move->power, 0, 3);
+ ConvertIntToDecimalStringN(buffer, move->power, STR_CONV_MODE_LEFT_ALIGN, 3);
str = buffer;
}
AddTextPrinterParameterized(0, 1, str, 0x6A, 0x19, TEXT_SPEED_FF, NULL);
@@ -781,7 +781,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove)
}
else
{
- ConvertIntToDecimalStringN(buffer, move->accuracy, 0, 3);
+ ConvertIntToDecimalStringN(buffer, move->accuracy, STR_CONV_MODE_LEFT_ALIGN, 3);
str = buffer;
}
AddTextPrinterParameterized(0, 1, str, 0x6A, 0x29, TEXT_SPEED_FF, NULL);
diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c
index 8f5b2d636..0d7fb7699 100644
--- a/src/mevent_801BAAC.c
+++ b/src/mevent_801BAAC.c
@@ -4,7 +4,7 @@
#include "gpu_regs.h"
#include "palette.h"
#include "decompress.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "pokemon_icon.h"
#include "union_room.h"
@@ -61,7 +61,7 @@ void sub_801C178(u8 whichWindow);
void sub_801C4C0(void);
void sub_801C61C(void);
-extern const struct OamData gUnknown_08524934;
+extern const struct OamData gOamData_AffineOff_ObjNormal_32x16;
const u8 gUnknown_082F0E10[][3] = {
{0, 2, 3},
@@ -138,7 +138,7 @@ const struct SpritePalette gUnknown_082F1D08[] = {
{gWonderCardShadowPal8, 0x8000}
};
const struct SpriteTemplate gUnknown_082F1D48 = {
- 0x8000, 0x8000, &gUnknown_08524934, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+ 0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
};
const struct UnkStruct_8467FB8 gUnknown_082F1D60[8] = {
{1, 0, 0, 0, gWonderCardBgGfx1, gWonderCardBgTilemap1, gWonderCardBgPal1},
diff --git a/src/mevent_client.c b/src/mevent_client.c
index ec8908af2..659b772df 100644
--- a/src/mevent_client.c
+++ b/src/mevent_client.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "overworld.h"
#include "script.h"
diff --git a/src/mevent_server.c b/src/mevent_server.c
index 06b10dd95..0d3afea30 100644
--- a/src/mevent_server.c
+++ b/src/mevent_server.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "script.h"
#include "mevent.h"
#include "mevent_server.h"
diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c
index 9d47ba745..616f394f7 100644
--- a/src/mevent_server_helpers.c
+++ b/src/mevent_server_helpers.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "util.h"
#include "link.h"
diff --git a/src/mirage_tower.c b/src/mirage_tower.c
index bb9c6e958..0c2b8ce74 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "event_data.h"
#include "event_object_movement.h"
diff --git a/src/mossdeep_gym.c b/src/mossdeep_gym.c
deleted file mode 100644
index 880780638..000000000
--- a/src/mossdeep_gym.c
+++ /dev/null
@@ -1,314 +0,0 @@
-#include "global.h"
-#include "event_object_movement.h"
-#include "fieldmap.h"
-#include "alloc.h"
-#include "mossdeep_gym.h"
-#include "script_movement.h"
-#include "constants/event_object_movement_constants.h"
-#include "constants/event_objects.h"
-
-// Movement scripts.
-extern const u8 gUnknown_08612698[];
-extern const u8 gUnknown_0861269C[];
-extern const u8 gUnknown_086126A0[];
-extern const u8 gUnknown_086126A4[];
-extern const u8 gUnknown_086126A8[];
-extern const u8 gUnknown_086126AA[];
-extern const u8 gUnknown_086126AC[];
-extern const u8 gUnknown_086126AE[];
-
-struct MossdeepSubStruct
-{
- u8 unk0;
- u8 eventTemplateId;
-};
-
-struct MossdeepStruct
-{
- struct MossdeepSubStruct objects[EVENT_OBJECTS_COUNT];
- u8 count;
- bool8 unk41;
-};
-
-// This file's functions.
-static void AddEventObject(u8 eventTemplateId, u8 arg1);
-static void sub_81A8D94(u8 eventTemplateId, u8 arg1);
-
-// EWRAM vars
-EWRAM_DATA static struct MossdeepStruct *gUnknown_0203CE50 = NULL;
-
-// code
-void InitMossdeepGymTiles(bool8 arg0)
-{
- if (gUnknown_0203CE50 == NULL)
- gUnknown_0203CE50 = AllocZeroed(sizeof(*gUnknown_0203CE50));
-
- gUnknown_0203CE50->unk41 = arg0;
-}
-
-void FinishMossdeepGymTiles(void)
-{
- u8 id;
-
- if (gUnknown_0203CE50 != NULL)
- FREE_AND_SET_NULL(gUnknown_0203CE50);
-
- id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
- EventObjectClearHeldMovementIfFinished(&gEventObjects[id]);
- ScriptMovement_UnfreezeEventObjects();
-}
-
-u16 MossdeepGym_MoveEvents(u8 arg0)
-{
- u8 i;
- struct EventObjectTemplate *events = gSaveBlock1Ptr->eventObjectTemplates;
- u16 localId = 0;
-
- for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++)
- {
- s32 var;
- u8 r5;
- s16 x = events[i].x + 7;
- s16 y = events[i].y + 7;
- u16 metatile = MapGridGetMetatileIdAt(x, y);
-
- if (!gUnknown_0203CE50->unk41)
- var = 0x250;
- else
- var = 0x298;
-
- if (metatile < 0x250)
- continue;
-
- if ((u8)((metatile - var) / 8) >= 5)
- continue;
- if ((u8)((metatile - var) / 8) != arg0)
- continue;
-
- r5 = (u8)((metatile - var) % 8);
- if (r5 < 4)
- {
- s8 x = 0;
- s8 y = 0;
- const u8 *movementScript;
-
- switch (r5)
- {
- case 0:
- movementScript = gUnknown_08612698;
- x = 1;
- break;
- case 1:
- movementScript = gUnknown_0861269C;
- y = 1;
- break;
- case 2:
- movementScript = gUnknown_086126A0;
- x = -1;
- break;
- case 3:
- movementScript = gUnknown_086126A4;
- y = -1;
- break;
- default:
- continue;
- }
-
- events[i].x += x;
- events[i].y += y;
- if (GetEventObjectIdByLocalIdAndMap(events[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup) != EVENT_OBJECTS_COUNT)
- {
- AddEventObject(i, r5);
- localId = events[i].localId;
- ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript);
- }
- else
- {
- sub_81A8D94(i, r5);
- }
- }
- }
-
- return localId;
-}
-
-void MossdeepGym_TurnEvents(void)
-{
- u8 i;
- s32 var;
- struct EventObjectTemplate *events;
-
- if (gUnknown_0203CE50 == NULL)
- return;
-
- if (!gUnknown_0203CE50->unk41)
- var = 0x250;
- else
- var = 0x298;
-
- events = gSaveBlock1Ptr->eventObjectTemplates;
- for (i = 0; i < gUnknown_0203CE50->count; i++)
- {
- s32 r6;
- s8 r0;
- u8 eventObjectId;
- s16 x = events[gUnknown_0203CE50->objects[i].eventTemplateId].x + 7;
- s16 y = events[gUnknown_0203CE50->objects[i].eventTemplateId].y + 7;
- u16 metatile = MapGridGetMetatileIdAt(x, y);
-
- r0 = (u8)((metatile - var) % 8);
- r0 -= (gUnknown_0203CE50->objects[i].unk0);
- if (r0 < 0 || r0 == 3)
- {
- if (r0 == -3)
- r6 = 1;
- else
- r6 = 0;
- }
- else
- {
- if (r0 > 0)
- r6 = 1;
- else
- r6 = 2;
- }
-
- eventObjectId = GetEventObjectIdByLocalIdAndMap(events[gUnknown_0203CE50->objects[i].eventTemplateId].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
- if (eventObjectId != EVENT_OBJECTS_COUNT)
- {
- const u8 *movementScript;
- u8 direction = gEventObjects[eventObjectId].facingDirection;
- if (r6 == 0)
- {
- switch (direction)
- {
- case DIR_EAST:
- movementScript = gUnknown_086126AE;
- events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
- break;
- case DIR_SOUTH:
- movementScript = gUnknown_086126A8;
- events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
- break;
- case DIR_WEST:
- movementScript = gUnknown_086126AA;
- events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
- break;
- case DIR_NORTH:
- movementScript = gUnknown_086126AC;
- events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
- break;
- default:
- continue;
- }
- ScriptMovement_StartObjectMovementScript(events[gUnknown_0203CE50->objects[i].eventTemplateId].localId,
- gSaveBlock1Ptr->location.mapNum,
- gSaveBlock1Ptr->location.mapGroup,
- movementScript);
- }
- else if (r6 == 1)
- {
- switch (direction)
- {
- case DIR_EAST:
- movementScript = gUnknown_086126AA;
- events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
- break;
- case DIR_SOUTH:
- movementScript = gUnknown_086126AC;
- events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
- break;
- case DIR_WEST:
- movementScript = gUnknown_086126AE;
- events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
- break;
- case DIR_NORTH:
- movementScript = gUnknown_086126A8;
- events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
- break;
- default:
- continue;
- }
- ScriptMovement_StartObjectMovementScript(events[gUnknown_0203CE50->objects[i].eventTemplateId].localId,
- gSaveBlock1Ptr->location.mapNum,
- gSaveBlock1Ptr->location.mapGroup,
- movementScript);
- }
- }
- }
-}
-
-static void AddEventObject(u8 eventTemplateId, u8 arg1)
-{
- gUnknown_0203CE50->objects[gUnknown_0203CE50->count].eventTemplateId = eventTemplateId;
- gUnknown_0203CE50->objects[gUnknown_0203CE50->count].unk0 = arg1;
- gUnknown_0203CE50->count++;
-}
-
-static void sub_81A8D94(u8 eventTemplateId, u8 arg1)
-{
- s8 r0;
- s32 r6;
- s32 var;
- u16 movementType;
- struct EventObjectTemplate *events = gSaveBlock1Ptr->eventObjectTemplates;
- s16 x = events[eventTemplateId].x + 7;
- s16 y = events[eventTemplateId].y + 7;
- u16 metatile = MapGridGetMetatileIdAt(x, y);
-
- if (!gUnknown_0203CE50->unk41)
- var = 0x250;
- else
- var = 0x298;
-
- r0 = (u8)((metatile - var) % 8);
- r0 -= arg1;
- if (r0 < 0 || r0 == 3)
- r6 = 0;
- else if (r0 > 0 || r0 == -3)
- r6 = 1;
- else
- r6 = 2;
-
- movementType = events[eventTemplateId].movementType;
- if (r6 == 0)
- {
- switch (movementType)
- {
- case MOVEMENT_TYPE_FACE_RIGHT:
- events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
- break;
- case MOVEMENT_TYPE_FACE_DOWN:
- events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
- break;
- case MOVEMENT_TYPE_FACE_LEFT:
- events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
- break;
- case MOVEMENT_TYPE_FACE_UP:
- events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
- break;
- default:
- break;
- }
- }
- else if (r6 == 1)
- {
- switch (movementType)
- {
- case MOVEMENT_TYPE_FACE_RIGHT:
- events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
- break;
- case MOVEMENT_TYPE_FACE_DOWN:
- events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
- break;
- case MOVEMENT_TYPE_FACE_LEFT:
- events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
- break;
- case MOVEMENT_TYPE_FACE_UP:
- events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
- break;
- default:
- break;
- }
- }
-}
diff --git a/src/move_relearner.c b/src/move_relearner.c
index 867c6c995..b5202e006 100644
--- a/src/move_relearner.c
+++ b/src/move_relearner.c
@@ -9,7 +9,7 @@
#include "gpu_regs.h"
#include "move_relearner.h"
#include "list_menu.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "menu_helpers.h"
#include "menu_specialized.h"
@@ -513,7 +513,7 @@ static void DoMoveRelearnerMain(void)
if (selection == 0)
{
- if (GiveMoveToMon(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove()) != 0xFFFF)
+ if (GiveMoveToMon(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove()) != MON_HAS_MAX_MOVES)
{
FormatAndPrintText(gText_MoveRelearnerPkmnLearnedMove);
gSpecialVar_0x8004 = TRUE;
@@ -778,7 +778,7 @@ static void HandleInput(bool8 showContest)
switch (itemId)
{
case LIST_NOTHING_CHOSEN:
- if (!(gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysState())
+ if (!(gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysPressed())
{
break;
}
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index c77a48615..14c00fd96 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -152,7 +152,7 @@ static void CB2_MysteryEventMenu(void)
if (!IsTextPrinterActive(0))
{
gMain.state++;
- gLinkType = 0x5501;
+ gLinkType = LINKTYPE_0x5501;
OpenLink();
}
break;
diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c
index dba914b51..76f340c60 100644
--- a/src/mystery_event_script.c
+++ b/src/mystery_event_script.c
@@ -286,7 +286,7 @@ bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx)
bool8 MEScrCmd_addrareword(struct ScriptContext *ctx)
{
- sub_811EFC0(ScriptReadByte(ctx));
+ UnlockAdditionalPhrase(ScriptReadByte(ctx));
StringExpandPlaceholders(gStringVar4, gText_MysteryGiftRareWord);
ctx->data[2] = 2;
return FALSE;
diff --git a/src/mystery_gift.c b/src/mystery_gift.c
index ab3df9020..aae7d127e 100644
--- a/src/mystery_gift.c
+++ b/src/mystery_gift.c
@@ -2,7 +2,7 @@
#include "main.h"
#include "text.h"
#include "task.h"
-#include "alloc.h"
+#include "malloc.h"
#include "gpu_regs.h"
#include "scanline_effect.h"
#include "text_window.h"
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 472489a26..73eda32c8 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "naming_screen.h"
-#include "alloc.h"
+#include "malloc.h"
#include "palette.h"
#include "task.h"
#include "sprite.h"
@@ -34,27 +34,11 @@ extern u16 gKeyRepeatStartDelay;
// extern text
extern const u8 gExpandedPlaceholder_Empty[];
-extern const u8 gText_PkmnTransferredSomeonesPC[];
-extern const u8 gText_PkmnTransferredLanettesPC[];
-extern const u8 gText_PkmnBoxSomeonesPCFull[];
-extern const u8 gText_PkmnBoxLanettesPCFull[];
extern const u8 gText_MoveOkBack[];
extern const u8 gText_YourName[];
extern const u8 gText_BoxName[];
extern const u8 gText_PkmnsNickname[];
extern const u8 gText_TellHimTheWords[];
-extern const u8 gUnknown_0862B88D[];
-extern const u8 gUnknown_0862B8AE[];
-extern const u8 gUnknown_0862B8CF[];
-extern const u8 gUnknown_0862B8F0[];
-extern const u8 gUnknown_0862B911[];
-extern const u8 gUnknown_0862B932[];
-extern const u8 gUnknown_0862B953[];
-extern const u8 gUnknown_0862B974[];
-extern const u8 gUnknown_0862B995[];
-extern const u8 gUnknown_0862B9AE[];
-extern const u8 gUnknown_0862B9C7[];
-extern const u8 gUnknown_0862B9E0[];
// start of .rodata
@@ -63,12 +47,12 @@ static const u8 gSpriteImage_858BCB8[] = INCBIN_U8("graphics/naming_screen/pc_ic
static const u16 gUnknown_0858BD78[] = INCBIN_U16("graphics/naming_screen/0.gbapal");
static const u16 gUnknown_0858BD98[] = INCBIN_U16("graphics/naming_screen/1.gbapal");
-static const u8 *const gUnknown_0858BDB8[] =
+static const u8 *const sTransferredToPCMessages[] =
{
gText_PkmnTransferredSomeonesPC,
gText_PkmnTransferredLanettesPC,
- gText_PkmnBoxSomeonesPCFull,
- gText_PkmnBoxLanettesPCFull
+ gText_PkmnTransferredSomeonesPCBoxFull,
+ gText_PkmnTransferredLanettesPCBoxFull
};
static const u8 gUnknown_0858BDC8[] = _("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!");
@@ -171,7 +155,7 @@ static const struct SpriteTemplate gUnknown_0858C138;
static const struct SpriteTemplate sSpriteTemplate_InputArrow;
static const struct SpriteTemplate sSpriteTemplate_Underscore;
static const struct SpriteTemplate gUnknown_0858C180;
-static const u8* const gUnknown_0858C198[][4];
+static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT];
static const struct SpriteSheet gUnknown_0858C1C8[];
static const struct SpritePalette gUnknown_0858C230[];
@@ -428,35 +412,52 @@ static void sub_80E31B0(u8 taskId)
}
}
-static const u8 gUnknown_0858BEBB[] = { 0, 2, 1 };
-static const u8 gUnknown_0858BEBE[] = { 1, 0, 2 };
-static const u8 gUnknown_0858BEC1[] = { 2, 1, 0 };
+static const u8 sPageOrderLowerFirst[] =
+{
+ KBPAGE_LETTERS_LOWER,
+ KBPAGE_SYMBOLS,
+ KBPAGE_LETTERS_UPPER
+};
+
+static const u8 sPageOrderUpperFirst[] =
+{
+ KBPAGE_LETTERS_UPPER,
+ KBPAGE_LETTERS_LOWER,
+ KBPAGE_SYMBOLS
+};
+
+static const u8 sPageOrderSymbolsFirst[] =
+{
+ KBPAGE_SYMBOLS,
+ KBPAGE_LETTERS_UPPER,
+ KBPAGE_LETTERS_LOWER
+};
static u8 sub_80E3244(u8 a1)
{
- return gUnknown_0858BEBB[a1];
+ return sPageOrderLowerFirst[a1];
}
static u8 sub_80E3254(void)
{
- return gUnknown_0858BEBE[gNamingScreenData->currentPage];
+ return sPageOrderUpperFirst[gNamingScreenData->currentPage];
}
static u8 sub_80E3274(void)
{
- return gUnknown_0858BEC1[gNamingScreenData->currentPage];
+ return sPageOrderSymbolsFirst[gNamingScreenData->currentPage];
}
static bool8 MainState_BeginFadeIn(void)
{
sub_80E4CF8(3, gUnknown_08DD4544);
- gNamingScreenData->currentPage = PAGE_UPPER;
+ gNamingScreenData->currentPage = KBPAGE_LETTERS_UPPER;
sub_80E4CF8(2, gUnknown_08DD46E0);
sub_80E4CF8(1, gUnknown_08DD4620);
- sub_80E4DE4(gNamingScreenData->windows[1], 0);
- sub_80E4DE4(gNamingScreenData->windows[0], 1);
- nullsub_10(2, 0);
- nullsub_10(1, 1);
+ sub_80E4DE4(gNamingScreenData->windows[1], KBPAGE_LETTERS_LOWER);
+ sub_80E4DE4(gNamingScreenData->windows[0], KBPAGE_LETTERS_UPPER);
+ nullsub_10(2, KBPAGE_LETTERS_LOWER);
+ nullsub_10(1, KBPAGE_LETTERS_UPPER);
sub_80E4D10();
sub_80E4964();
sub_80E4EF0();
@@ -557,7 +558,7 @@ static void DisplaySentToPCMessage(void)
if (FlagGet(FLAG_SYS_PC_LANETTE))
stringToDisplay++;
- StringExpandPlaceholders(gStringVar4, gUnknown_0858BDB8[stringToDisplay]);
+ StringExpandPlaceholders(gStringVar4, sTransferredToPCMessages[stringToDisplay]);
DrawDialogueFrame(0, 0);
gTextFlags.canABSpeedUpPrint = TRUE;
AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeedDelay(), 0, 2, 1, 3);
@@ -1660,7 +1661,7 @@ static void sub_80E4CF8(u8 bg, const void *src)
CopyToBgTilemapBuffer(bg, src, 0, 0);
}
-static void nullsub_10(u8 a1, u8 a2)
+static void nullsub_10(u8 a1, u8 page)
{
}
@@ -1703,29 +1704,29 @@ static const struct TextColorThing sUnkColorStruct =
}
};
-static const u8 sFillValues[3] =
+static const u8 sFillValues[KBPAGE_COUNT] =
{
- PIXEL_FILL(0xE),
- PIXEL_FILL(0xD),
- PIXEL_FILL(0xF)
+ [KBPAGE_LETTERS_LOWER] = PIXEL_FILL(0xE),
+ [KBPAGE_LETTERS_UPPER] = PIXEL_FILL(0xD),
+ [KBPAGE_SYMBOLS] = PIXEL_FILL(0xF)
};
-static const u8 *const sUnkColors[3] =
+static const u8 *const sUnkColors[KBPAGE_COUNT] =
{
- sUnkColorStruct.colors[1],
- sUnkColorStruct.colors[0],
- sUnkColorStruct.colors[2]
+ [KBPAGE_LETTERS_LOWER] = sUnkColorStruct.colors[1],
+ [KBPAGE_LETTERS_UPPER] = sUnkColorStruct.colors[0],
+ [KBPAGE_SYMBOLS] = sUnkColorStruct.colors[2]
};
-static void sub_80E4DE4(u8 window, u8 a1)
+static void sub_80E4DE4(u8 window, u8 page)
{
u8 i;
- FillWindowPixelBuffer(window, sFillValues[a1]);
+ FillWindowPixelBuffer(window, sFillValues[page]);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < KBROW_COUNT; i++)
{
- AddTextPrinterParameterized3(window, 1, 0, i * 16 + 1, sUnkColors[a1], 0, gUnknown_0858C198[a1][i]);
+ AddTextPrinterParameterized3(window, 1, 0, i * 16 + 1, sUnkColors[page], 0, sNamingScreenKeyboardText[page][i]);
}
PutWindowTilemap(window);
@@ -1857,7 +1858,7 @@ static const struct NamingScreenTemplate playerNamingScreenTemplate =
.maxChars = 7,
.iconFunction = 1,
.addGenderIcon = 0,
- .initialPage = PAGE_UPPER,
+ .initialPage = KBPAGE_LETTERS_UPPER,
.unused = 35,
.title = gText_YourName,
};
@@ -1868,7 +1869,7 @@ static const struct NamingScreenTemplate pcBoxNamingTemplate =
.maxChars = 8,
.iconFunction = 2,
.addGenderIcon = 0,
- .initialPage = PAGE_UPPER,
+ .initialPage = KBPAGE_LETTERS_UPPER,
.unused = 19,
.title = gText_BoxName,
};
@@ -1879,7 +1880,7 @@ static const struct NamingScreenTemplate monNamingScreenTemplate =
.maxChars = 10,
.iconFunction = 3,
.addGenderIcon = 1,
- .initialPage = PAGE_UPPER,
+ .initialPage = KBPAGE_LETTERS_UPPER,
.unused = 35,
.title = gText_PkmnsNickname,
};
@@ -1890,7 +1891,7 @@ static const struct NamingScreenTemplate wandaWordsScreenTemplate =
.maxChars = 15,
.iconFunction = 4,
.addGenderIcon = 0,
- .initialPage = PAGE_UPPER,
+ .initialPage = KBPAGE_LETTERS_UPPER,
.unused = 11,
.title = gText_TellHimTheWords,
};
@@ -2144,25 +2145,28 @@ static const struct SpriteTemplate gUnknown_0858C180 =
.callback = SpriteCallbackDummy
};
-static const u8* const gUnknown_0858C198[][4] =
+static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] =
{
+ [KBPAGE_LETTERS_LOWER] =
{
- gUnknown_0862B88D,
- gUnknown_0862B8AE,
- gUnknown_0862B8CF,
- gUnknown_0862B8F0
+ gText_NamingScreenKeyboard_abcdef,
+ gText_NamingScreenKeyboard_ghijkl,
+ gText_NamingScreenKeyboard_mnopqrs,
+ gText_NamingScreenKeyboard_tuvwxyz
},
+ [KBPAGE_LETTERS_UPPER] =
{
- gUnknown_0862B911,
- gUnknown_0862B932,
- gUnknown_0862B953,
- gUnknown_0862B974
+ gText_NamingScreenKeyboard_ABCDEF,
+ gText_NamingScreenKeyboard_GHIJKL,
+ gText_NamingScreenKeyboard_MNOPQRS,
+ gText_NamingScreenKeyboard_TUVWXYZ
},
+ [KBPAGE_SYMBOLS] =
{
- gUnknown_0862B995,
- gUnknown_0862B9AE,
- gUnknown_0862B9C7,
- gUnknown_0862B9E0
+ gText_NamingScreenKeyboard_01234,
+ gText_NamingScreenKeyboard_56789,
+ gText_NamingScreenKeyboard_Symbols1,
+ gText_NamingScreenKeyboard_Symbols2
},
};
diff --git a/src/normal.c b/src/normal.c
index 2b592e199..7864dd9a3 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -64,7 +64,7 @@ const struct SpriteTemplate gConfusionDuckSpriteTemplate =
{
.tileTag = ANIM_TAG_DUCK,
.paletteTag = ANIM_TAG_DUCK,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gUnknown_08597254,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -112,7 +112,7 @@ const struct SpriteTemplate gUnknown_085972C0 =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085972BC,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -169,7 +169,7 @@ const struct SpriteTemplate gBasicHitSplatSpriteTemplate =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
- .oam = &gUnknown_08524A94,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597348,
@@ -180,7 +180,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8597370 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
- .oam = &gUnknown_08524A94,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597348,
@@ -191,7 +191,7 @@ const struct SpriteTemplate gUnknown_08597388 =
{
.tileTag = ANIM_TAG_WATER_IMPACT,
.paletteTag = ANIM_TAG_WATER_IMPACT,
- .oam = &gUnknown_08524A94,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597348,
@@ -202,7 +202,7 @@ const struct SpriteTemplate gUnknown_085973A0 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
- .oam = &gUnknown_08524A94,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597348,
@@ -213,7 +213,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85973B8 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
- .oam = &gUnknown_08524A94,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597348,
@@ -224,7 +224,7 @@ const struct SpriteTemplate gUnknown_085973D0 =
{
.tileTag = ANIM_TAG_CROSS_IMPACT,
.paletteTag = ANIM_TAG_CROSS_IMPACT,
- .oam = &gUnknown_08524A34,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -235,7 +235,7 @@ const struct SpriteTemplate gUnknown_085973E8 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597348,
@@ -246,7 +246,7 @@ const struct SpriteTemplate gUnknown_08597400 =
{
.tileTag = ANIM_TAG_IMPACT,
.paletteTag = ANIM_TAG_IMPACT,
- .oam = &gUnknown_08524A94,
+ .oam = &gOamData_AffineNormal_ObjBlend_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08597348,
diff --git a/src/overworld.c b/src/overworld.c
index 0cac8390a..55afe2fcf 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -26,7 +26,7 @@
#include "link_rfu.h"
#include "load_save.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "m4a.h"
#include "map_name_popup.h"
#include "match_call.h"
@@ -85,9 +85,9 @@
extern const u8 EventScript_WhiteOut[];
extern const u8 EventScript_ResetMrBriney[];
extern const u8 EventScript_DoLinkRoomExit[];
-extern const u8 gEventScript_TradeRoom_TooBusyToNotice[];
-extern const u8 gEventScript_TradeRoom_ReadTrainerCard_NoColor[];
-extern const u8 gEventScript_TradeRoom_ReadTrainerCard_Normal[];
+extern const u8 CableClub_EventScript_TooBusyToNotice[];
+extern const u8 CableClub_EventScript_ReadTrainerCard[];
+extern const u8 CableClub_EventScript_ReadTrainerCardColored[];
extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot0[];
extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot1[];
extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot2[];
@@ -1183,7 +1183,7 @@ void Overworld_ClearSavedMusic(void)
static void sub_8085810(void)
{
- if (FlagGet(FLAG_SPECIAL_FLAG_0x4001) != TRUE)
+ if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE)
{
u16 newMusic = GetWarpDestinationMusic();
u16 currentMusic = GetCurrentMapMusic();
@@ -1231,7 +1231,7 @@ void TryFadeOutOldMapMusic(void)
{
u16 currentMusic = GetCurrentMapMusic();
u16 warpMusic = GetWarpDestinationMusic();
- if (FlagGet(FLAG_SPECIAL_FLAG_0x4001) != TRUE && warpMusic != GetCurrentMapMusic())
+ if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE && warpMusic != GetCurrentMapMusic())
{
if (currentMusic == MUS_NAMINORI
&& VarGet(VAR_SKY_PILLAR_STATE) == 2
@@ -2742,7 +2742,7 @@ static bool32 PlayerIsAtSouthExit(struct TradeRoomPlayer *player)
return FALSE;
else if (!MetatileBehavior_IsSouthArrowWarp(player->field_C))
return FALSE;
- else if (player->facing != 1)
+ else if (player->facing != DIR_SOUTH)
return FALSE;
else
return TRUE;
@@ -2765,13 +2765,13 @@ static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *player)
if (linkPlayerId != 4)
{
if (!player->isLocalPlayer)
- return gEventScript_TradeRoom_TooBusyToNotice;
+ return CableClub_EventScript_TooBusyToNotice;
else if (sPlayerTradingStates[linkPlayerId] != PLAYER_TRADING_STATE_IDLE)
- return gEventScript_TradeRoom_TooBusyToNotice;
+ return CableClub_EventScript_TooBusyToNotice;
else if (!GetLinkTrainerCardColor(linkPlayerId))
- return gEventScript_TradeRoom_ReadTrainerCard_NoColor;
+ return CableClub_EventScript_ReadTrainerCard;
else
- return gEventScript_TradeRoom_ReadTrainerCard_Normal;
+ return CableClub_EventScript_ReadTrainerCardColored;
}
return GetInteractedLinkPlayerScript(&otherPlayerPos, player->field_C, player->facing);
diff --git a/src/party_menu.c b/src/party_menu.c
index f4b749bde..c711881b0 100755
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_anim.h"
#include "battle_controllers.h"
@@ -72,11 +72,26 @@
#include "constants/items.h"
#include "constants/maps.h"
#include "constants/moves.h"
+#include "constants/party_menu.h"
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/vars.h"
+#define PARTY_PAL_SELECTED (1 << 0)
+#define PARTY_PAL_FAINTED (1 << 1)
+#define PARTY_PAL_TO_SWITCH (1 << 2)
+#define PARTY_PAL_MULTI_ALT (1 << 3)
+#define PARTY_PAL_SWITCHING (1 << 4)
+#define PARTY_PAL_TO_SOFTBOIL (1 << 5)
+#define PARTY_PAL_NO_MON (1 << 6)
+#define PARTY_PAL_UNUSED (1 << 7)
+
+#define MENU_DIR_DOWN 1
+#define MENU_DIR_UP -1
+#define MENU_DIR_RIGHT 2
+#define MENU_DIR_LEFT -2
+
enum
{
CAN_LEARN_MOVE,
@@ -85,28 +100,28 @@ enum
CANNOT_LEARN_MOVE_IS_EGG
};
-struct Unk_Rodata1
+struct PartyMenuBoxInfoRects
{
- void (*unk0)(u8, u8, u8, u8, u8, u8);
- u8 unk4[24];
- u8 unk1C;
- u8 unk1D;
- u8 unk1E;
- u8 unk1F;
+ void (*blitFunc)(u8, u8, u8, u8, u8, u8);
+ u8 dimensions[24];
+ u8 descTextLeft;
+ u8 descTextTop;
+ u8 descTextWidth;
+ u8 descTextHeight;
};
-struct Struct203CEC4
+struct PartyMenuInternal
{
TaskFunc task;
MainCallback exitCallback;
- u32 unk8_0:1;
- u32 unk8_1:3;
- u32 unk8_2:7;
- u32 unk9_0:7;
+ u32 chooseHalf:1;
+ u32 lastSelectedSlot:3; // Used to return to same slot when going left/right bewtween columns
+ u32 spriteIdConfirmPokeball:7;
+ u32 spriteIdCancelPokeball:7;
u32 messageId:14;
u8 windowId[3];
u8 actions[8];
- u8 listSize;
+ u8 numActions;
// In vanilla Emerald, only the first 0xB0 hwords (0x160 bytes) are actually used.
// However, a full 0x100 hwords (0x200 bytes) are allocated.
// It is likely that the 0x160 value used below is a constant defined by
@@ -115,10 +130,10 @@ struct Struct203CEC4
s16 data[16];
};
-struct Struct203CEDC
+struct PartyMenuBox
{
- const struct Unk_Rodata1 *unk0;
- const u8 *unk4;
+ const struct PartyMenuBoxInfoRects *infoRects;
+ const u8 *spriteCoords;
u8 windowId;
u8 monSpriteId;
u8 itemSpriteId;
@@ -127,268 +142,267 @@ struct Struct203CEDC
};
// EWRAM vars
-static EWRAM_DATA struct Struct203CEC4 *gUnknown_0203CEC4 = NULL;
-EWRAM_DATA struct Struct203CEC8 gUnknown_0203CEC8 = {0};
-static EWRAM_DATA struct Struct203CEDC *gUnknown_0203CEDC = NULL;
-static EWRAM_DATA u8 *gUnknown_0203CEE0 = NULL;
-static EWRAM_DATA u8 *gUnknown_0203CEE4 = NULL;
-EWRAM_DATA u8 gUnknown_0203CEE8 = 0;
-EWRAM_DATA u8 gUnknown_0203CEE9 = 0;
+static EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL;
+EWRAM_DATA struct PartyMenu gPartyMenu = {0};
+static EWRAM_DATA struct PartyMenuBox *sPartyMenuBoxes = NULL;
+static EWRAM_DATA u8 *sPartyBgGfxTilemap = NULL;
+static EWRAM_DATA u8 *sPartyBgTilemapBuffer = NULL;
+EWRAM_DATA bool8 gPartyMenuUseExitCallback = 0;
+EWRAM_DATA u8 gSelectedMonPartyId = 0;
EWRAM_DATA MainCallback gPostMenuFieldCallback = NULL;
-static EWRAM_DATA u16 *gUnknown_0203CEF0 = 0;
-static EWRAM_DATA u16 *gUnknown_0203CEF4 = 0;
+static EWRAM_DATA u16 *sSlot1TilemapBuffer = 0; // for switching party slots
+static EWRAM_DATA u16 *sSlot2TilemapBuffer = 0; //
EWRAM_DATA u8 gSelectedOrderFromParty[4] = {0};
-static EWRAM_DATA u16 gUnknown_0203CEFC = 0;
-static EWRAM_DATA u16 gUnknown_0203CEFE = 0; // unused
-EWRAM_DATA u8 gUnknown_0203CF00[3] = {0};
+static EWRAM_DATA u16 sPartyMenuItemId = 0;
+static EWRAM_DATA u16 sUnused_0203CEFE = 0;
+EWRAM_DATA u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2] = {0}; // bits 0-3 are the current pos of Slot 1, 4-7 are Slot 2, and so on
// IWRAM common
-void (*gUnknown_03006328)(u8, TaskFunc);
+void (*gItemUseCB)(u8, TaskFunc);
-static void reset_brm(void);
-static void PartyMenuInitCallback(void);
-static bool8 PartyMenuSetup(void);
-static void sub_81B209C(void);
-static void PartyMenuExit(void);
+static void ResetPartyMenu(void);
+static void CB2_InitPartyMenu(void);
+static bool8 ShowPartyMenu(void);
+static void SetPartyMonsAllowedInMinigame(void);
+static void ExitPartyMenu(void);
static bool8 AllocPartyMenuBg(void);
-static bool8 AllocPartyMiscGfx(void);
-static void sub_81B239C(u8);
-static void PartyMenuInitHelperStructs(u8);
+static bool8 AllocPartyMenuBgGfx(void);
+static void InitPartyMenuWindows(u8);
+static void InitPartyMenuBoxes(u8);
static void LoadPartyMenuPokeballGfx(void);
static void LoadPartyMenuAilmentGfx(void);
-static bool8 party_menu_add_per_mon_objects(void);
+static bool8 CreatePartyMonSpritesLoop(void);
static bool8 RenderPartyMenuBoxes(void);
-static void sub_81B0F28(void);
-static void sub_81B2428(u8);
-static void PartyMenuExitTask(u8);
+static void CreateCancelConfirmPokeballSprites(void);
+static void CreateCancelConfirmWindows(u8);
+static void Task_ExitPartyMenu(u8);
static void FreePartyPointers(void);
static void PartyPaletteBufferCopy(u8);
-static void sub_81B0CEC(u8);
-static void UpdateSelectedPartyBox(struct Struct203CEDC *, u8);
+static void DisplayPartyPokemonDataForMultiBattle(u8);
+static void LoadPartyBoxPalette(struct PartyMenuBox *, u8);
static void DrawEmptySlot(u8 windowId);
-static void DisplayPartyPokemonSelectForRelearner(u8);
-static void DisplayPartyPokemonSelectForContest(u8);
-static void DisplayPartyPokemonSelectForBattle(u8);
-static void sub_81B0B98(u8);
-static void DisplayPartyPokemonSelectHeldItemRelated(u8);
-static bool8 sub_81B0BFC(u8);
+static void DisplayPartyPokemonDataForRelearner(u8);
+static void DisplayPartyPokemonDataForContest(u8);
+static void DisplayPartyPokemonDataForChooseHalf(u8);
+static void DisplayPartyPokemonDataForWirelessMinigame(u8);
+static void DisplayPartyPokemonDataForBattlePyramidHeldItem(u8);
+static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8);
static void DisplayPartyPokemonData(u8);
-static void DisplayPartyPokemonNickname(struct Pokemon *, struct Struct203CEDC *, u8);
-static void DisplayPartyPokemonLevelCheck(struct Pokemon *, struct Struct203CEDC *, u8);
-static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *, struct Struct203CEDC *, u8);
-static void DisplayPartyPokemonHPCheck(struct Pokemon *, struct Struct203CEDC *, u8);
-static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *, struct Struct203CEDC *, u8);
-static void DisplayPartyPokemonHPBarCheck(struct Pokemon *, struct Struct203CEDC *);
-static void DisplayPartyPokemonOtherText(u8, struct Struct203CEDC *, u8);
-static u8 sub_81B8830(void);
-static bool8 GetBattleEntryEligibility(struct Pokemon *);
-static bool8 sub_81B218C(u8);
-static void DisplayPartyPokemonSelectToTeachMove(u8, u16, u8);
+static void DisplayPartyPokemonNickname(struct Pokemon *, struct PartyMenuBox *, u8);
+static void DisplayPartyPokemonLevelCheck(struct Pokemon *, struct PartyMenuBox *, u8);
+static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *, struct PartyMenuBox *, u8);
+static void DisplayPartyPokemonHPCheck(struct Pokemon *, struct PartyMenuBox *, u8);
+static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *, struct PartyMenuBox *, u8);
+static void DisplayPartyPokemonHPBarCheck(struct Pokemon *, struct PartyMenuBox *);
+static void DisplayPartyPokemonDescriptionText(u8, struct PartyMenuBox *, u8);
+static bool8 IsMonAllowedInMinigame(u8);
+static void DisplayPartyPokemonDataToTeachMove(u8, u16, u8);
static u8 CanMonLearnTMTutor(struct Pokemon *, u16, u8);
static void DisplayPartyPokemonBarDetail(u8, const u8*, u8, const u8*);
-static void DisplayPartyPokemonLevel(u8, struct Struct203CEDC *);
-static void DisplayPartyPokemonGender(u8, u16, u8*, struct Struct203CEDC *);
-static void DisplayPartyPokemonHP(u16, struct Struct203CEDC *);
-static void DisplayPartyPokemonMaxHP(u16, struct Struct203CEDC *);
-static void DisplayPartyPokemonHPBar(u16, u16, struct Struct203CEDC *);
-static void party_menu_link_mon_icon_anim(u16, u32, struct Struct203CEDC *, u8, u32);
-static void party_menu_link_mon_held_item_object(u16, u16, struct Struct203CEDC *);
-static void party_menu_link_mon_pokeball_object(u16, struct Struct203CEDC *);
-static void party_menu_link_mon_status_condition_object(u16, u8, struct Struct203CEDC *);
-static void party_menu_held_item_object(struct Pokemon *, struct Struct203CEDC *);
-static void party_menu_pokeball_object(struct Pokemon *, struct Struct203CEDC *);
-static void party_menu_icon_anim(struct Pokemon *, struct Struct203CEDC *, u32);
-static void party_menu_status_condition_object(struct Pokemon *, struct Struct203CEDC *);
-static u8 sub_81B5F74(u8, u8);
-static void sub_81B120C(void);
-static u8 sub_81B5F34(u8, u8);
+static void DisplayPartyPokemonLevel(u8, struct PartyMenuBox *);
+static void DisplayPartyPokemonGender(u8, u16, u8*, struct PartyMenuBox *);
+static void DisplayPartyPokemonHP(u16, struct PartyMenuBox *);
+static void DisplayPartyPokemonMaxHP(u16, struct PartyMenuBox *);
+static void DisplayPartyPokemonHPBar(u16, u16, struct PartyMenuBox *);
+static void CreatePartyMonIconSpriteParameterized(u16, u32, struct PartyMenuBox *, u8, u32);
+static void CreatePartyMonHeldItemSpriteParameterized(u16, u16, struct PartyMenuBox *);
+static void CreatePartyMonPokeballSpriteParameterized(u16, struct PartyMenuBox *);
+static void CreatePartyMonStatusSpriteParameterized(u16, u8, struct PartyMenuBox *);
+// These next 4 functions are essentially redundant with the above 4
+// The only difference is that rather than receive the data directly they retrieve it from the mon struct
+static void CreatePartyMonHeldItemSprite(struct Pokemon *, struct PartyMenuBox *);
+static void CreatePartyMonPokeballSprite(struct Pokemon *, struct PartyMenuBox *);
+static void CreatePartyMonIconSprite(struct Pokemon *, struct PartyMenuBox *, u32);
+static void CreatePartyMonStatusSprite(struct Pokemon *, struct PartyMenuBox *);
+static u8 CreateSmallPokeballButtonSprite(u8, u8);
+static void DrawCancelConfirmButtons(void);
+static u8 CreatePokeballButtonSprite(u8, u8);
static void AnimateSelectedPartyIcon(u8, u8);
-static void sub_81B5F98(u8, u8);
-static u8 GetPartyBoxPalBitfield(u8, u8);
+static void PartyMenuStartSpriteAnim(u8, u8);
+static u8 GetPartyBoxPaletteFlags(u8, u8);
static bool8 PartyBoxPal_ParnterOrDisqualifiedInArena(u8);
-static u8 sub_81B8F38(u8);
-static void c3_0811FAB4(u8);
-static void sub_81B9080(void);
-static void sub_81B4F88(void);
-static void sub_81B15D0(u8, s8*);
-static void sub_81B140C(u8, s8*);
+static u8 GetPartyIdFromBattleSlot(u8);
+static void Task_ClosePartyMenuAndSetCB2(u8);
+static void UpdatePartyToFieldOrder(void);
+static void MoveCursorToConfirm(void);
+static void HandleChooseMonCancel(u8, s8*);
+static void HandleChooseMonSelection(u8, s8*);
static u16 PartyMenuButtonHandler(s8*);
-static s8* sub_81B13EC(void);
-static bool8 sub_81B15A4(u8*);
-static void sub_81B302C(u8*);
-static void sub_81B9140(void);
-static void sub_81B6794(u8);
-static void sub_81B7E4C(u8);
-static void sub_81B8474(u8);
-static void sub_81B7FAC(u8);
-static void sub_81B3938(u8);
-static void sub_81B21AC(u8, u8);
-static void sub_81B36FC(u8);
-static void sub_81B407C(u8);
-static void sub_81B2210(u8);
-static bool8 sub_81B1660(u8);
-static const u8* sub_81B88BC(void);
-static void sub_81B16D4(u8);
-static void sub_81B334C(void);
-static void sub_81B1708(u8);
-static void sub_81B1C1C(u8);
+static s8* GetCurrentPartySlotPtr(void);
+static bool8 IsSelectedMonNotEgg(u8*);
+static void PartyMenuRemoveWindow(u8*);
+static void CB2_SetUpExitToBattleScreen(void);
+static void Task_ClosePartyMenuAfterText(u8);
+static void TryTutorSelectedMon(u8);
+static void TryGiveMailToSelectedMon(u8);
+static void TryGiveItemOrMailToSelectedMon(u8);
+static void SwitchSelectedMons(u8);
+static void TryEnterMonForMinigame(u8, u8);
+static void Task_TryCreateSelectionWindow(u8);
+static void FinishTwoMonAction(u8);
+static void CancelParticipationPrompt(u8);
+static bool8 DisplayCancelChooseMonYesNo(u8);
+static const u8* GetFacilityCancelString(void);
+static void Task_CancelChooseMonYesNo(u8);
+static void PartyMenuDisplayYesNoMenu(void);
+static void Task_HandleCancelChooseMonYesNoInput(u8);
+static void Task_ReturnToChooseMonAfterText(u8);
static void UpdateCurrentPartySelection(s8*, s8);
-static void SetNewPartySelectTarget1(s8*, s8);
-static void SetNewPartySelectTarget2(s8*, s8);
-static s8 sub_81B1B00(s8, s8);
-static void sub_81B3300(const u8*);
-static void sub_81B1B8C(u8);
-static void DisplayPartyPokemonHPCheck(struct Pokemon*, struct Struct203CEDC*, u8);
-static void DisplayPartyPokemonHPBarCheck(struct Pokemon*, struct Struct203CEDC*);
-static bool16 sub_81B2134(struct Pokemon*);
-static bool16 sub_81B2164(struct Pokemon*);
-static void sub_81B2248(u8);
-static void sub_81B227C(u8);
+static void UpdatePartySelectionSingleLayout(s8*, s8);
+static void UpdatePartySelectionDoubleLayout(s8*, s8);
+static s8 GetNewSlotDoubleLayout(s8, s8);
+static void PartyMenuPrintText(const u8*);
+static void Task_PrintAndWaitForText(u8);
+static bool16 IsMonAllowedInPokemonJump(struct Pokemon*);
+static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon*);
+static void Task_CancelParticipationYesNo(u8);
+static void Task_HandleCancelParticipationYesNoInput(u8);
static bool8 CanLearnTutorMove(u16, u8);
static u16 GetTutorMove(u8);
-static bool8 sub_81B314C(void);
-static void CreateActionList(struct Pokemon*, u8);
-static u8 sub_81B8A2C(struct Pokemon*);
-static u8 sub_81B856C(s8);
-static void sub_81B469C(u8);
-static void HandleMenuInput(u8);
-static void sub_81B3828(void);
-static void pokemon_change_order(void);
-static void sub_81B3894(void);
-static void sub_81B3CC0(u8);
-static void sub_81B3D48(u8);
-static void swap_pokemon_and_oams(void);
-static void sub_81B3E60(u8);
-static void sub_81B41C4(void);
-static void c2_8123744(void);
-static void sub_81B452C(void);
-static void sub_81B4350(u8);
-static void sub_81B42D0(u8);
-static void sub_81B43A8(u8);
-static void sub_81B43DC(u8);
-static void sub_81B44FC(u8);
-static void sub_81B4578(void);
-static void sub_81B4624(u8);
-static void sub_81B5C94(struct Pokemon*, struct Struct203CEDC*);
-static void sub_81B48A8(u8);
-static void sub_81B48DC(u8);
-static void sub_81B4988(u8);
-static void sub_81B4A98(void);
-static void sub_81B4AE0(void);
-static void sub_81B4B6C(u8);
-static void sub_81B4BA0(u8);
-static void sub_81B4C60(u8);
-static void sub_81B4C94(u8);
-static bool8 sub_81B8A7C(void);
-static void sub_81B53FC(u8);
-static void sub_81B5430(u8);
-static void task_brm_cancel_1_on_keypad_a_or_b(u8);
-static void sub_81B5674(u8);
-static void sub_81B57DC(void);
-static void sub_81B5864(void);
-static void sub_81B56A4(u8);
-static void sub_81B56D8(u8);
-static void task_launch_hm_phase_2(u8);
-static u16 brm_get_selected_species(void);
-static void sub_81B5B38(u8, struct Pokemon*);
-static void UpdatePartyMonIconFrame(struct Sprite*);
-static void UpdatePartyMonIconFrameAndBounce(struct Sprite*);
-static void sub_81B5CB0(u16, struct Struct203CEDC*);
-static void sub_81B5DF0(u8, u8);
+static bool8 ShouldUseChooseMonText(void);
+static void SetPartyMonFieldSelectionActions(struct Pokemon*, u8);
+static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon*);
+static u8 GetPartySlotEntryStatus(s8);
+static void Task_UpdateHeldItemSprite(u8);
+static void Task_HandleSelectionMenuInput(u8);
+static void CB2_ShowPokemonSummaryScreen(void);
+static void UpdatePartyToBattleOrder(void);
+static void CB2_ReturnToPartyMenuFromSummaryScreen(void);
+static void SlidePartyMenuBoxOneStep(u8);
+static void Task_SlideSelectedSlotsOffscreen(u8);
+static void SwitchPartyMon(void);
+static void Task_SlideSelectedSlotsOnscreen(u8);
+static void CB2_SelectBagItemToGive(void);
+static void CB2_GiveHoldItem(void);
+static void CB2_WriteMailToGiveMon(void);
+static void Task_SwitchHoldItemsPrompt(u8);
+static void Task_GiveHoldItem(u8);
+static void Task_SwitchItemsYesNo(u8);
+static void Task_HandleSwitchItemsYesNoInput(u8);
+static void Task_WriteMailToGiveMonAfterText(u8);
+static void CB2_ReturnToPartyMenuFromWritingMail(void);
+static void Task_DisplayGaveMailFromPartyMessage(u8);
+static void UpdatePartyMonHeldItemSprite(struct Pokemon*, struct PartyMenuBox*);
+static void Task_TossHeldItemYesNo(u8 taskId);
+static void Task_HandleTossHeldItemYesNoInput(u8);
+static void Task_TossHeldItem(u8);
+static void CB2_ReadHeldMail(void);
+static void CB2_ReturnToPartyMenuFromReadingMail(void);
+static void Task_SendMailToPCYesNo(u8);
+static void Task_HandleSendMailToPCYesNoInput(u8);
+static void Task_LoseMailMessageYesNo(u8);
+static void Task_HandleLoseMailMessageYesNoInput(u8);
+static bool8 TrySwitchInPokemon(void);
+static void Task_SpinTradeYesNo(u8);
+static void Task_HandleSpinTradeYesNoInput(u8);
+static void Task_CancelAfterAorBPress(u8);
+static void DisplayFieldMoveExitAreaMessage(u8);
+static void DisplayCantUseFlashMessage(void);
+static void DisplayCantUseSurfMessage(void);
+static void Task_FieldMoveExitAreaYesNo(u8);
+static void Task_HandleFieldMoveExitAreaYesNoInput(u8);
+static void Task_FieldMoveWaitForFade(u8);
+static u16 GetFieldMoveMonSpecies(void);
+static void UpdatePartyMonHPBar(u8, struct Pokemon*);
+static void SpriteCB_UpdatePartyMonIcon(struct Sprite*);
+static void SpriteCB_BouncePartyMonIcon(struct Sprite*);
+static void ShowOrHideHeldItemSprite(u16, struct PartyMenuBox*);
+static void CreateHeldItemSpriteForTrade(u8, bool8);
static void SpriteCB_HeldItem(struct Sprite*);
-static void party_menu_get_status_condition_and_update_object(struct Pokemon*, struct Struct203CEDC*);
-static void party_menu_update_status_condition_object(u8, struct Struct203CEDC*);
-static u8 sub_81B8984(void);
-static void sub_81B6280(u8);
-static void c2_815ABFC(void);
-static void sub_81B672C(u8);
+static void SetPartyMonAilmentGfx(struct Pokemon*, struct PartyMenuBox*);
+static void UpdatePartyMonAilmentGfx(u8, struct PartyMenuBox*);
+static u8 GetPartyLayoutFromBattleType(void);
+static void Task_SetSacredAshCB(u8);
+static void CB2_ReturnToBagMenu(void);
+static void Task_DisplayHPRestoredMessage(u8);
static u16 ItemEffectToMonEv(struct Pokemon*, u8);
static void ItemEffectToStatString(u8, u8*);
-static void sub_81B6BB4(u8);
-static void ether_effect_related_2(u8);
-static void ether_effect_related(u8);
-static void sub_81B6EB4(u8);
-static void sub_81B6FF4(u8);
-static void sub_81B6F60(u8);
-static void sub_81B6F98(u8);
-static void sub_81B77AC(u8);
-static void sub_81B7028(u8);
-static void sub_81B7088(u8);
-static void sub_81B7230(u8);
-static void sub_81B70B8(void);
-static void sub_81B70F0(void);
-static void sub_81B711C(u8);
-static void sub_81B7154(u8);
-static void sub_81B71D4(u8);
-static void sub_81B7294(u8);
-static void sub_81B72C8(u8);
-static void sub_81B73E4(u8);
-static void sub_81B79A0(struct Pokemon*, s16*);
-static void sub_81B754C(u8, struct Pokemon*);
-static void sub_81B75D4(u8);
-static void sub_81B767C(u8);
-static void sub_81B7634(u8);
-static void sub_81B76C8(u8);
-static void sub_81B7704(u8);
-static void sub_81B7810(u8);
-static void sub_81B787C(u8);
-static void sub_81B7910(u8, u16);
-static void sub_81B7A28(u8);
-static void task_sacred_ash_party_loop(u8);
-static void sub_81B7C10(u8);
-static void sub_81B8044(u8);
-static void sub_81B83B8(u8);
-static void sub_81B82A0(u8);
-static void sub_81B83F0(u16);
-static void sub_81B814C(void);
-static void sub_81B8088(u8);
-static void sub_81B8104(u8);
-static void sub_81B81A8(void);
-static bool8 sub_81B841C(u16);
-static void sub_81B8230(u8);
-static void sub_81B82D4(u8);
-static void sub_81B879C(u8);
+static void ReturnToUseOnWhichMon(u8);
+static void SetSelectedMoveForPPItem(u8);
+static void TryUsePPItem(u8);
+static void Task_LearnedMove(u8);
+static void Task_ReplaceMoveYesNo(u8);
+static void Task_DoLearnedMoveFanfareAfterText(u8);
+static void Task_LearnNextMoveOrClosePartyMenu(u8);
+static void Task_TryLearningNextMove(u8);
+static void Task_HandleReplaceMoveYesNoInput(u8);
+static void Task_ShowSummaryScreenToForgetMove(u8);
+static void StopLearningMovePrompt(u8);
+static void CB2_ShowSummaryScreenToForgetMove(void);
+static void CB2_ReturnToPartyMenuWhileLearningMove(void);
+static void Task_ReturnToPartyMenuWhileLearningMove(u8);
+static void DisplayPartyMenuForgotMoveMessage(u8);
+static void Task_PartyMenuReplaceMove(u8);
+static void Task_StopLearningMoveYesNo(u8);
+static void Task_HandleStopLearningMoveYesNoInput(u8);
+static void Task_TryLearningNextMoveAfterText(u8);
+static void BufferMonStatsToTaskData(struct Pokemon*, s16*);
+static void UpdateMonDisplayInfoAfterRareCandy(u8, struct Pokemon*);
+static void Task_DisplayLevelUpStatsPg1(u8);
+static void DisplayLevelUpStatsPg1(u8);
+static void Task_DisplayLevelUpStatsPg2(u8);
+static void DisplayLevelUpStatsPg2(u8);
+static void Task_TryLearnNewMoves(u8);
+static void PartyMenuTryEvolution(u8);
+static void DisplayMonNeedsToReplaceMove(u8);
+static void DisplayMonLearnedMove(u8, u16);
+static void UseSacredAsh(u8);
+static void Task_SacredAshLoop(u8);
+static void Task_SacredAshDisplayHPRestored(u8);
+static void GiveItemOrMailToSelectedMon(u8);
+static void DisplayItemMustBeRemovedFirstMessage(u8);
+static void Task_SwitchItemsFromBagYesNo(u8);
+static void RemoveItemToGiveFromBag(u16);
+static void CB2_WriteMailToGiveMonFromBag(void);
+static void GiveItemToSelectedMon(u8);
+static void Task_UpdateHeldItemSpriteAndClosePartyMenu(u8);
+static void CB2_ReturnToPartyOrBagMenuFromWritingMail(void);
+static bool8 ReturnGiveItemToBagOrPC(u16);
+static void Task_DisplayGaveMailFromBagMessage(u8);
+static void Task_HandleSwitchItemsFromBagYesNoInput(u8);
+static void Task_ValidateChosenHalfParty(u8);
static bool8 GetBattleEntryEligibility(struct Pokemon*);
-static bool8 sub_81B8770(u8);
-static u8 sub_81B8888(void);
-static u8 sub_81B885C(void);
-static void sub_81B87E8(u8);
-static void sub_81B8C88(u8*, bool8);
-static void sub_81B8D88(u8*, u8, u8);
-static void sub_81B917C(u8);
-static void sub_81B91B4(u8);
-static void sub_81B9294(u8);
-static void sub_81B9240(u8);
-static void sub_81B9390(void);
-static void task_hm_without_phase_2(u8);
-static void sub_81B9424(u8);
-static void sub_81B9470(void);
-static void sub_81B94D0(u8);
-static void sub_81B953C(u8);
-static void sub_81B9588(void);
-static void sub_81B9640(u8);
-static void sub_81B97DC(struct Pokemon*, u8, u8);
-static void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f);
-static void BlitBitmapToPartyWindow_Default2(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f);
-static void CursorCb_Summary(u8 taskId);
-static void CursorCb_Switch(u8 taskId);
-static void CursorCb_Cancel1(u8 taskId);
-static void CursorCb_Item(u8 taskId);
-static void CursorCb_Give(u8 taskId);
-static void CursorCb_TakeItem(u8 taskId);
-static void CursorCb_Mail(u8 taskId);
-static void CursorCb_Read(u8 taskId);
-static void CursorCb_TakeMail(u8 taskId);
-static void CursorCb_Cancel2(u8 taskId);
-static void CursorCb_SendMon(u8 taskId);
-static void CursorCb_Enter(u8 taskId);
-static void CursorCb_NoEntry(u8 taskId);
-static void CursorCb_Store(u8 taskId);
-static void CursorCb_Register(u8 taskId);
-static void CursorCb_Trade1(u8 taskId);
-static void CursorCb_Trade2(u8 taskId);
-static void CursorCb_Toss(u8 taskId);
-static void CursorCb_FieldMove(u8 taskId);
+static bool8 HasPartySlotAlreadyBeenSelected(u8);
+static u8 GetBattleEntryLevelCap(void);
+static u8 GetMaxBattleEntries(void);
+static u8 GetMinBattleEntries(void);
+static void Task_ContinueChoosingHalfParty(u8);
+static void BufferBattlePartyOrder(u8*, bool8);
+static void BufferBattlePartyOrderBySide(u8*, u8, u8);
+static void Task_InitMultiPartnerPartySlideIn(u8);
+static void Task_MultiPartnerPartySlideIn(u8);
+static void SlideMultiPartyMenuBoxSpritesOneStep(u8);
+static void Task_WaitAfterMultiPartnerPartySlideIn(u8);
+static void BufferMonSelection(void);
+static void Task_PartyMenuWaitForFade(u8 taskId);
+static void Task_ChooseContestMon(u8 taskId);
+static void CB2_ChooseContestMon(void);
+static void Task_ChoosePartyMon(u8 taskId);
+static void Task_ChooseMonForMoveRelearner(u8);
+static void CB2_ChooseMonForMoveRelearner(void);
+static void Task_BattlePyramidChooseMonHeldItems(u8);
+static void ShiftMoveSlot(struct Pokemon*, u8, u8);
+static void BlitBitmapToPartyWindow_LeftColumn(u8, u8, u8, u8, u8, u8);
+static void BlitBitmapToPartyWindow_RightColumn(u8, u8, u8, u8, u8, u8);
+static void CursorCb_Summary(u8);
+static void CursorCb_Switch(u8);
+static void CursorCb_Cancel1(u8);
+static void CursorCb_Item(u8);
+static void CursorCb_Give(u8);
+static void CursorCb_TakeItem(u8);
+static void CursorCb_Mail(u8);
+static void CursorCb_Read(u8);
+static void CursorCb_TakeMail(u8);
+static void CursorCb_Cancel2(u8);
+static void CursorCb_SendMon(u8);
+static void CursorCb_Enter(u8);
+static void CursorCb_NoEntry(u8);
+static void CursorCb_Store(u8);
+static void CursorCb_Register(u8);
+static void CursorCb_Trade1(u8);
+static void CursorCb_Trade2(u8);
+static void CursorCb_Toss(u8);
+static void CursorCb_FieldMove(u8);
static bool8 SetUpFieldMove_Surf(void);
static bool8 SetUpFieldMove_Fly(void);
static bool8 SetUpFieldMove_Waterfall(void);
@@ -396,1234 +410,56 @@ static bool8 SetUpFieldMove_Dive(void);
// static const data
#include "data/pokemon/tutor_learnsets.h"
-
-static const struct BgTemplate gUnknown_086156B8[] =
-{
- {
- .bg = 0,
- .charBaseIndex = 0,
- .mapBaseIndex = 31,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 1,
- .baseTile = 0
- },
- {
- .bg = 1,
- .charBaseIndex = 0,
- .mapBaseIndex = 30,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 2,
- .baseTile = 0
- },
- {
- .bg = 2,
- .charBaseIndex = 0,
- .mapBaseIndex = 28,
- .screenSize = 1,
- .paletteMode = 0,
- .priority = 0,
- .baseTile = 0
- },
-};
-
-static const struct Unk_Rodata1 gUnknown_086156C4[] =
-{
- {BlitBitmapToPartyWindow_Default1, {0x18, 0xB, 0x28, 0xD, 0x20, 0x14, 0x20, 8, 0x40, 0x14, 8, 8, 0x26, 0x25, 0x18, 8, 0x35, 0x25, 0x18, 8, 0x18, 0x23, 0x30, 3}, 0xC, 0x22, 0x40, 0x10},
- {BlitBitmapToPartyWindow_Default2, {0x16, 3, 0x28, 0xD, 0x1E, 0xC, 0x20, 8, 0x3E, 0xC, 8, 8, 0x66, 0xC, 0x18, 8, 0x75, 0xC, 0x18, 8, 0x58, 0xA, 0x30, 3}, 0x4D, 4, 0x40, 0x10},
-};
-
-static const u8 gUnknown_08615704[][6][8] =
-{
- {
- {16, 40, 20, 50, 50, 52, 16, 34},
- {104, 18, 108, 28, 136, 27, 102, 25},
- {104, 42, 108, 52, 136, 51, 102, 49},
- {104, 66, 108, 76, 136, 75, 102, 73},
- {104, 90, 108, 100, 136, 99, 102, 97},
- {104, 114, 108, 124, 136, 123, 102, 121},
- },
- {
- {16, 24, 20, 34, 50, 36, 16, 18},
- {16, 80, 20, 90, 50, 92, 16, 74},
- {104, 18, 108, 28, 136, 27, 102, 25},
- {104, 50, 108, 60, 136, 59, 102, 57},
- {104, 82, 108, 92, 136, 91, 102, 89},
- {104, 114, 108, 124, 136, 123, 102, 121},
- },
- {
- {16, 24, 20, 34, 50, 36, 16, 18},
- {16, 80, 20, 90, 50, 92, 16, 74},
- {104, 26, 106, 36, 136, 35, 102, 33},
- {104, 50, 106, 60, 136, 59, 102, 57},
- {104, 82, 106, 92, 136, 91, 102, 89},
- {104, 106, 106, 116, 136, 115, 102, 113},
- },
- {
- {16, 32, 20, 42, 50, 44, 16, 26},
- {104, 34, 106, 44, 136, 43, 102, 41},
- {104, 58, 106, 68, 136, 67, 102, 65},
- {16, 104, 20, 114, 50, 116, 16, 98},
- {104, 106, 106, 116, 136, 115, 102, 113},
- {104, 130, 106, 140, 136, 139, 102, 137},
- },
-};
-
-static const u32 gUnknown_086157C4[] = INCBIN_U32("graphics/interface/unknown_6157C4.bin");
-static const u32 gUnknown_086157E0[] = INCBIN_U32("graphics/interface/unknown_6157E0.bin");
-
-static const u8 sFontColorTable[][3] =
-{
- {0, 3, 2},
- {0, 1, 6},
- {0, 11, 12},
- {1, 2, 3},
- {1, 8, 9},
- {0, 1, 2},
-};
-
-static const struct WindowTemplate gUnknown_08615810[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 3,
- .width = 10,
- .height = 7,
- .paletteNum = 3,
- .baseBlock = 0x63,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 1,
- .width = 18,
- .height = 3,
- .paletteNum = 4,
- .baseBlock = 0xA9,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 4,
- .width = 18,
- .height = 3,
- .paletteNum = 5,
- .baseBlock = 0xDF,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 7,
- .width = 18,
- .height = 3,
- .paletteNum = 6,
- .baseBlock = 0x115,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 10,
- .width = 18,
- .height = 3,
- .paletteNum = 7,
- .baseBlock = 0x14B,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 13,
- .width = 18,
- .height = 3,
- .paletteNum = 8,
- .baseBlock = 0x181,
- },
- {
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 15,
- .width = 28,
- .height = 4,
- .paletteNum = 14,
- .baseBlock = 0x1DF,
- },
- DUMMY_WIN_TEMPLATE
-};
-
-static const struct WindowTemplate gUnknown_08615850[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 1,
- .width = 10,
- .height = 7,
- .paletteNum = 3,
- .baseBlock = 0x63,
- },
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 8,
- .width = 10,
- .height = 7,
- .paletteNum = 4,
- .baseBlock = 0xA9,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 1,
- .width = 18,
- .height = 3,
- .paletteNum = 5,
- .baseBlock = 0xEF,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 5,
- .width = 18,
- .height = 3,
- .paletteNum = 6,
- .baseBlock = 0x125,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 9,
- .width = 18,
- .height = 3,
- .paletteNum = 7,
- .baseBlock = 0x15B,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 13,
- .width = 18,
- .height = 3,
- .paletteNum = 8,
- .baseBlock = 0x191,
- },
- {
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 15,
- .width = 28,
- .height = 4,
- .paletteNum = 14,
- .baseBlock = 0x1DF,
- },
- DUMMY_WIN_TEMPLATE
-};
-
-static const struct WindowTemplate gUnknown_08615890[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 1,
- .width = 10,
- .height = 7,
- .paletteNum = 3,
- .baseBlock = 0x63,
- },
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 8,
- .width = 10,
- .height = 7,
- .paletteNum = 4,
- .baseBlock = 0xA9,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 2,
- .width = 18,
- .height = 3,
- .paletteNum = 5,
- .baseBlock = 0xEF,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 5,
- .width = 18,
- .height = 3,
- .paletteNum = 6,
- .baseBlock = 0x125,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 9,
- .width = 18,
- .height = 3,
- .paletteNum = 7,
- .baseBlock = 0x15B,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 12,
- .width = 18,
- .height = 3,
- .paletteNum = 8,
- .baseBlock = 0x191,
- },
- {
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 15,
- .width = 28,
- .height = 4,
- .paletteNum = 14,
- .baseBlock = 0x1DF,
- },
- DUMMY_WIN_TEMPLATE
-};
-
-static const struct WindowTemplate gUnknown_086158D0[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 1,
- .tilemapTop = 2,
- .width = 10,
- .height = 7,
- .paletteNum = 3,
- .baseBlock = 0x63,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 3,
- .width = 18,
- .height = 3,
- .paletteNum = 5,
- .baseBlock = 0xA9,
- },
- {
- .bg = 0,
- .tilemapLeft = 12,
- .tilemapTop = 6,
- .width = 18,
- .height = 3,
- .paletteNum = 6,
- .baseBlock = 0xDF,
- },
- {
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 11,
- .width = 10,
- .height = 7,
- .paletteNum = 4,
- .baseBlock = 0x115,
- },
- {
- .bg = 2,
- .tilemapLeft = 12,
- .tilemapTop = 12,
- .width = 18,
- .height = 3,
- .paletteNum = 7,
- .baseBlock = 0x16B,
- },
- {
- .bg = 2,
- .tilemapLeft = 12,
- .tilemapTop = 15,
- .width = 18,
- .height = 3,
- .paletteNum = 8,
- .baseBlock = 0x1A1,
- },
- DUMMY_WIN_TEMPLATE
-};
-
-static const struct WindowTemplate gUnknown_08615908 =
-{
- .bg = 0,
- .tilemapLeft = 24,
- .tilemapTop = 17,
- .width = 6,
- .height = 2,
- .paletteNum = 3,
- .baseBlock = 0x1C7,
-};
-
-static const struct WindowTemplate gUnknown_08615910 =
-{
- .bg = 0,
- .tilemapLeft = 24,
- .tilemapTop = 18,
- .width = 6,
- .height = 2,
- .paletteNum = 3,
- .baseBlock = 0x1C7,
-};
-
-static const struct WindowTemplate gUnknown_08615918 =
-{
- .bg = 0,
- .tilemapLeft = 24,
- .tilemapTop = 16,
- .width = 6,
- .height = 2,
- .paletteNum = 3,
- .baseBlock = 0x1D3,
-};
-
-static const struct WindowTemplate gUnknown_08615920 =
-{
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 17,
- .width = 21,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 0x24F,
-};
-
-static const struct WindowTemplate gUnknown_08615928 =
-{
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 17,
- .width = 16,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 0x279,
-};
-
-static const struct WindowTemplate gUnknown_08615930 =
-{
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 17,
- .width = 20,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 0x299,
-};
-
-static const struct WindowTemplate gUnknown_08615938 =
-{
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 17,
- .width = 18,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 0x299,
-};
-
-static const struct WindowTemplate gUnknown_08615940 =
-{
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 17,
- .width = 16,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 0x299,
-};
-
-static const struct WindowTemplate gUnknown_08615948 =
-{
- .bg = 2,
- .tilemapLeft = 1,
- .tilemapTop = 15,
- .width = 20,
- .height = 4,
- .paletteNum = 15,
- .baseBlock = 0x299,
-};
-
-static const struct WindowTemplate gUnknown_08615950 =
-{
- .bg = 2,
- .tilemapLeft = 23,
- .tilemapTop = 13,
- .width = 6,
- .height = 6,
- .paletteNum = 14,
- .baseBlock = 0x39D,
-};
-
-static const struct WindowTemplate gUnknown_08615958 =
-{
- .bg = 2,
- .tilemapLeft = 21,
- .tilemapTop = 13,
- .width = 8,
- .height = 6,
- .paletteNum = 14,
- .baseBlock = 0x39D,
-};
-
-static const struct WindowTemplate gUnknown_08615960 =
-{
- .bg = 2,
- .tilemapLeft = 19,
- .tilemapTop = 11,
- .width = 10,
- .height = 8,
- .paletteNum = 14,
- .baseBlock = 0x2E9,
-};
-
-static const struct WindowTemplate gUnknown_08615968 =
-{
- .bg = 2,
- .tilemapLeft = 21,
- .tilemapTop = 9,
- .width = 5,
- .height = 4,
- .paletteNum = 14,
- .baseBlock = 0x2E9,
-};
-
-static const struct WindowTemplate gUnknown_08615970 =
-{
- .bg = 2,
- .tilemapLeft = 19,
- .tilemapTop = 1,
- .width = 10,
- .height = 11,
- .paletteNum = 14,
- .baseBlock = 0x2E9,
-};
-
-// Unused.
-static const struct WindowTemplate gUnknown_08615978 =
-{
- .bg = 2,
- .tilemapLeft = 2,
- .tilemapTop = 15,
- .width = 27,
- .height = 4,
- .paletteNum = 14,
- .baseBlock = 0x1DF,
-};
-
-// Unused.
-static const struct WindowTemplate gUnknown_08615980 =
-{
- .bg = 2,
- .tilemapLeft = 0,
- .tilemapTop = 13,
- .width = 18,
- .height = 3,
- .paletteNum = 12,
- .baseBlock = 0x39D,
-};
-
-static const u8 sMainSlotTileNums[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26,
- 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
- 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
- 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
- 40, 59, 60, 58, 58, 58, 58, 58, 58, 61,
- 15, 16, 16, 16, 16, 16, 16, 16, 16, 17,
- 46, 47, 47, 47, 47, 47, 47, 47, 47, 48};
-
-static const u8 sMainSlotTileNums_Egg[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26,
- 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
- 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
- 32, 33, 33, 33, 33, 33, 33, 33, 33, 34,
- 40, 41, 41, 41, 41, 41, 41, 41, 41, 42,
- 15, 16, 16, 16, 16, 16, 16, 16, 16, 17,
- 46, 47, 47, 47, 47, 47, 47, 47, 47, 48};
-
-static const u8 sOtherSlotsTileNums[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45,
- 49, 33, 33, 33, 33, 33, 33, 33, 33, 52, 53, 51, 51, 51, 51, 51, 51, 54,
- 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57};
-
-static const u8 sOtherSlotsTileNums_Egg[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45,
- 49, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 50,
- 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57};
-
-static const u8 sEmptySlotTileNums[] = {21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,
- 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31,
- 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39};
-static const u8 gUnknown_08615AB6[] = {11, 12};
-static const u8 gUnknown_08615AB8[] = {9, 10};
-static const u8 gUnknown_08615ABA[] = {4, 5, 6};
-static const u8 gUnknown_08615ABD[] = {1, 7, 8};
-static const u8 gUnknown_08615AC0[] = {1, 11, 12};
-static const u8 gUnknown_08615AC3[] = {59, 60};
-static const u8 gUnknown_08615AC5[] = {75, 76};
-static const u8 gUnknown_08615AC7[] = {57, 58};
-static const u8 gUnknown_08615AC9[] = {73, 74};
-static const u8 gUnknown_08615ACB[] = {89, 90};
-static const u8 gUnknown_08615ACD[] = {52, 53, 54};
-static const u8 gUnknown_08615AD0[] = {68, 69, 70};
-static const u8 gUnknown_08615AD3[] = {84, 85, 86};
-static const u8 gUnknown_08615AD6[] = {116, 117, 118};
-static const u8 gUnknown_08615AD9[] = {132, 133, 134};
-static const u8 gUnknown_08615ADC[] = {148, 149, 150};
-static const u8 gUnknown_08615ADF[] = {100, 101, 102};
-static const u8 gUnknown_08615AE2[] = {49, 55, 56};
-static const u8 gUnknown_08615AE5[] = {65, 71, 72};
-static const u8 gUnknown_08615AE8[] = {81, 87, 88};
-static const u8 gUnknown_08615AEB[] = {97, 103, 104};
-static const u8 gUnknown_08615AEE[] = {161, 167, 168};
-static const u8 gUnknown_08615AF1[] = {17, 27, 28};
-
-static const u8 *const sActionStringTable[] =
-{
- gText_ChoosePokemon,
- gText_ChoosePokemonCancel,
- gText_ChoosePokemonConfirm,
- gText_MoveToWhere,
- gText_TeachWhichPokemon,
- gText_UseOnWhichPokemon,
- gText_GiveToWhichPokemon,
- gText_NothingToCut,
- gText_CantSurfHere,
- gText_AlreadySurfing,
- gText_CurrentIsTooFast,
- gText_EnjoyCycling,
- gText_InUseAlready_PM,
- gText_CantUseHere,
- gText_NoPokemonForBattle,
- gText_ChoosePokemon2,
- gText_NotEnoughHp,
- gText_PokemonAreNeeded,
- gText_PokemonCantBeSame,
- gText_NoIdenticalHoldItems,
- gText_EmptyString2,
- gText_DoWhatWithPokemon,
- gText_RestoreWhichMove,
- gText_BoostPp,
- gText_DoWhatWithItem,
- gText_DoWhatWithMail,
- gText_AlreadyHoldingOne,
-};
-
-static const u8 *const sSelectionStringTable[] =
-{
- gText_NoUse,
- gText_Able,
- gText_First_PM,
- gText_Second_PM,
- gText_Third_PM,
- gText_Fourth,
- gText_Able2,
- gText_NotAble,
- gText_Able3,
- gText_NotAble2,
- gText_Learned,
- gText_Have,
- gText_DontHave,
-};
-
-// Unknown unused data. Feel free to remove.
-static const u16 gUnknown_08615B94[] =
-{
- 0x0108, 0x0151, 0x0160, 0x015b, 0x002e, 0x005c, 0x0102, 0x0153, 0x014b, 0x00ed, 0x00f1, 0x010d, 0x003a, 0x003b, 0x003f, 0x0071,
- 0x00b6, 0x00f0, 0x00ca, 0x00db, 0x00da, 0x004c, 0x00e7, 0x0055, 0x0057, 0x0059, 0x00d8, 0x005b, 0x005e, 0x00f7, 0x0118, 0x0068,
- 0x0073, 0x015f, 0x0035, 0x00bc, 0x00c9, 0x007e, 0x013d, 0x014c, 0x0103, 0x0107, 0x0122, 0x009c, 0x00d5, 0x00a8, 0x00d3, 0x011d,
- 0x0121, 0x013b, 0x000f, 0x0013, 0x0039, 0x0046, 0x0094, 0x00f9, 0x007f, 0x0123,
-};
-
-enum
-{
- MENU_SUMMARY,
- MENU_SWITCH,
- MENU_CANCEL1,
- MENU_ITEM,
- MENU_GIVE,
- MENU_TAKE_ITEM,
- MENU_MAIL,
- MENU_TAKE_MAIL,
- MENU_READ,
- MENU_CANCEL2,
- MENU_SHIFT,
- MENU_SEND_OUT,
- MENU_ENTER,
- MENU_NO_ENTRY,
- MENU_STORE,
- MENU_REGISTER,
- MENU_TRADE1,
- MENU_TRADE2,
- MENU_TOSS,
- MENU_FIELD_MOVES,
-};
-
-enum
-{
- FIELD_MOVE_CUT,
- FIELD_MOVE_FLASH,
- FIELD_MOVE_ROCK_SMASH,
- FIELD_MOVE_STRENGTH,
- FIELD_MOVE_SURF,
- FIELD_MOVE_FLY,
- FIELD_MOVE_DIVE,
- FIELD_MOVE_WATERFALL,
- FIELD_MOVE_TELEPORT,
- FIELD_MOVE_DIG,
- FIELD_MOVE_SECRET_POWER,
- FIELD_MOVE_MILK_DRINK,
- FIELD_MOVE_SOFT_BOILED,
- FIELD_MOVE_SWEET_SCENT,
-};
-
-// What a weird choice of table termination;
-#define FIELD_MOVE_TERMINATOR MOVE_SWORDS_DANCE
-
-struct
-{
- const u8 *text;
- TaskFunc func;
-} static const sCursorOptions[] =
-{
- [MENU_SUMMARY] = {gText_Summary5, CursorCb_Summary},
- [MENU_SWITCH] = {gText_Switch2, CursorCb_Switch},
- [MENU_CANCEL1] = {gText_Cancel2, CursorCb_Cancel1},
- [MENU_ITEM] = {gText_Item, CursorCb_Item},
- [MENU_GIVE] = {gMenuText_Give, CursorCb_Give},
- [MENU_TAKE_ITEM] = {gText_Take, CursorCb_TakeItem},
- [MENU_MAIL] = {gText_Mail, CursorCb_Mail},
- [MENU_TAKE_MAIL] = {gText_Take2, CursorCb_TakeMail},
- [MENU_READ] = {gText_Read2, CursorCb_Read},
- [MENU_CANCEL2] = {gText_Cancel2, CursorCb_Cancel2},
- [MENU_SHIFT] = {gText_Shift, CursorCb_SendMon},
- [MENU_SEND_OUT] = {gText_SendOut, CursorCb_SendMon},
- [MENU_ENTER] = {gText_Enter, CursorCb_Enter},
- [MENU_NO_ENTRY] = {gText_NoEntry, CursorCb_NoEntry},
- [MENU_STORE] = {gText_Store, CursorCb_Store},
- [MENU_REGISTER] = {gText_Register, CursorCb_Register},
- [MENU_TRADE1] = {gText_Trade4, CursorCb_Trade1},
- [MENU_TRADE2] = {gText_Trade4, CursorCb_Trade2},
- [MENU_TOSS] = {gMenuText_Toss, CursorCb_Toss},
- [MENU_FIELD_MOVES + FIELD_MOVE_CUT] = {gMoveNames[MOVE_CUT], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_FLASH] = {gMoveNames[MOVE_FLASH], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_SMASH] = {gMoveNames[MOVE_ROCK_SMASH], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_STRENGTH] = {gMoveNames[MOVE_STRENGTH], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_SURF] = {gMoveNames[MOVE_SURF], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_FLY] = {gMoveNames[MOVE_FLY], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_DIVE] = {gMoveNames[MOVE_DIVE], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_WATERFALL] = {gMoveNames[MOVE_WATERFALL], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_TELEPORT] = {gMoveNames[MOVE_TELEPORT], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_DIG] = {gMoveNames[MOVE_DIG], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_SECRET_POWER] = {gMoveNames[MOVE_SECRET_POWER], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCb_FieldMove},
- [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCb_FieldMove},
-};
-
-static const u8 gUnknown_08615D10[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1};
-static const u8 gUnknown_08615D13[] = {MENU_SHIFT, MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D16[] = {MENU_SEND_OUT, MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D19[] = {MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D1B[] = {MENU_ENTER, MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D1E[] = {MENU_NO_ENTRY, MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D21[] = {MENU_STORE, MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D24[] = {MENU_GIVE, MENU_TAKE_ITEM, MENU_CANCEL2};
-static const u8 gUnknown_08615D27[] = {MENU_READ, MENU_TAKE_MAIL, MENU_CANCEL2};
-static const u8 gUnknown_08615D2A[] = {MENU_REGISTER, MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D2D[] = {MENU_TRADE1, MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D30[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1};
-static const u8 gUnknown_08615D33[] = {MENU_TAKE_ITEM, MENU_TOSS, MENU_CANCEL1};
-
-static const u8 *const sActionTable[] =
-{
- NULL,
- gUnknown_08615D10,
- gUnknown_08615D13,
- gUnknown_08615D16,
- gUnknown_08615D1B,
- gUnknown_08615D1E,
- gUnknown_08615D21,
- gUnknown_08615D19,
- gUnknown_08615D24,
- gUnknown_08615D27,
- gUnknown_08615D2A,
- gUnknown_08615D2D,
- gUnknown_08615D30,
- gUnknown_08615D33,
-};
-
-static const u8 sListSizeTable[] =
-{
- 0x00,
- ARRAY_COUNT(gUnknown_08615D10),
- ARRAY_COUNT(gUnknown_08615D13),
- ARRAY_COUNT(gUnknown_08615D16),
- ARRAY_COUNT(gUnknown_08615D1B),
- ARRAY_COUNT(gUnknown_08615D1E),
- ARRAY_COUNT(gUnknown_08615D21),
- ARRAY_COUNT(gUnknown_08615D19),
- ARRAY_COUNT(gUnknown_08615D24),
- ARRAY_COUNT(gUnknown_08615D27),
- ARRAY_COUNT(gUnknown_08615D2A),
- ARRAY_COUNT(gUnknown_08615D2D),
- ARRAY_COUNT(gUnknown_08615D30),
- ARRAY_COUNT(gUnknown_08615D33)
-};
-
-static const u16 sFieldMoves[] =
-{
- MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, MOVE_TELEPORT,
- MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, FIELD_MOVE_TERMINATOR
-};
-
-struct
-{
- bool8 (*fieldMoveFunc)(void);
- u8 msgId;
-} static const sFieldMoveCursorCallbacks[] =
-{
- [FIELD_MOVE_CUT] = {SetUpFieldMove_Cut, 0x07},
- [FIELD_MOVE_FLASH] = {SetUpFieldMove_Flash, 0x0d},
- [FIELD_MOVE_ROCK_SMASH] = {SetUpFieldMove_RockSmash, 0x0d},
- [FIELD_MOVE_STRENGTH] = {SetUpFieldMove_Strength, 0x0d},
- [FIELD_MOVE_SURF] = {SetUpFieldMove_Surf, 0x08},
- [FIELD_MOVE_FLY] = {SetUpFieldMove_Fly, 0x0d},
- [FIELD_MOVE_DIVE] = {SetUpFieldMove_Dive, 0x0d},
- [FIELD_MOVE_WATERFALL] = {SetUpFieldMove_Waterfall, 0x0d},
- [FIELD_MOVE_TELEPORT] = {SetUpFieldMove_Teleport, 0x0d},
- [FIELD_MOVE_DIG] = {SetUpFieldMove_Dig, 0x0d},
- [FIELD_MOVE_SECRET_POWER] = {SetUpFieldMove_SecretPower, 0x0d},
- [FIELD_MOVE_MILK_DRINK] = {SetUpFieldMove_SoftBoiled, 0x10},
- [FIELD_MOVE_SOFT_BOILED] = {SetUpFieldMove_SoftBoiled, 0x10},
- [FIELD_MOVE_SWEET_SCENT] = {SetUpFieldMove_SweetScent, 0x0d},
-};
-
-static const u8 *const gUnknown_08615E0C[] =
-{
- gText_NotPkmnOtherTrainerWants,
- gText_ThatIsntAnEgg,
- gText_PkmnCantBeTradedNow,
- gText_PkmnCantBeTradedNow,
- gText_OtherTrainersPkmnCantBeTraded,
- gText_EggCantBeTradedNow,
- gText_OtherTrainerCantAcceptPkmn,
- gText_CantTradeWithTrainer,
- gText_CantTradeWithTrainer,
-};
-
-static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp");
-static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal");
-
-static const struct OamData sOamData_HeldItem =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = SPRITE_SHAPE(8x8),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(8x8),
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_HeldItem[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_HeldMail[] =
-{
- ANIMCMD_FRAME(1, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_HeldItem[] =
-{
- sSpriteAnim_HeldItem,
- sSpriteAnim_HeldMail,
-};
-
-static const struct SpriteSheet sSpriteSheet_HeldItem =
-{
- sHeldItemGfx, sizeof(sHeldItemGfx), 0xd750
-};
-
-static const struct SpritePalette sSpritePalette_HeldItem =
-{
- sHeldItemPalette, 0xd750
-};
-
-static const struct SpriteTemplate sSpriteTemplate_HeldItem =
-{
- 0xd750,
- 0xd750,
- &sOamData_HeldItem,
- sSpriteAnimTable_HeldItem,
- NULL,
- gDummySpriteAffineAnimTable,
- SpriteCallbackDummy
-};
-
-static const struct OamData sOamData_MenuPokeball =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = SPRITE_SHAPE(32x32),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(32x32),
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0
-};
-
-static const union AnimCmd sPokeballAnim_Closed[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sPokeballAnim_Open[] =
-{
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_Pokeball[] =
-{
- sPokeballAnim_Closed,
- sPokeballAnim_Open
-};
-
-static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeball =
-{
- gPartyMenuPokeball_Gfx, 0x400, 0x04b0
-};
-
-static const struct CompressedSpritePalette sSpritePalette_MenuPokeball =
-{
- gPartyMenuPokeball_Pal, 0x04b0
-};
-
-static const struct SpriteTemplate sSpriteTemplate_MenuPokeball =
-{
- .tileTag = 0x04b0,
- .paletteTag = 0x04b0,
- .oam = &sOamData_MenuPokeball,
- .anims = sSpriteAnimTable_Pokeball,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const struct OamData sOamData_8615F20 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = SPRITE_SHAPE(16x16),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(16x16),
- .tileNum = 0,
- .priority = 2,
- .paletteNum = 0,
- .affineParam = 0
-};
-
-static const union AnimCmd sSpriteAnim_8615F28[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8615F30[] =
-{
- ANIMCMD_FRAME(4, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8615F38[] =
-{
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8615F40[] =
-{
- ANIMCMD_FRAME(12, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8615F48[] =
-{
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8615F50[] =
-{
- ANIMCMD_FRAME(20, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_8615F58[] =
-{
- sSpriteAnim_8615F28,
- sSpriteAnim_8615F30,
- sSpriteAnim_8615F38,
- sSpriteAnim_8615F40,
- sSpriteAnim_8615F48,
- sSpriteAnim_8615F50
-};
-
-static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall =
-{
- gPartyMenuPokeballSmall_Gfx, 0x0300, 0x04b1
-};
-
-static const struct SpriteTemplate gSpriteTemplate_8615F78 =
-{
- .tileTag = 1201,
- .paletteTag = 1200,
- .oam = &sOamData_8615F20,
- .anims = sSpriteAnimTable_8615F58,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const struct OamData sOamData_StatusCondition =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = SPRITE_SHAPE(32x8),
- .x = 0,
- .matrixNum = 0,
- .size = SPRITE_SIZE(32x8),
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0
-};
-
-static const union AnimCmd sSpriteAnim_StatusPoison[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_StatusParalyzed[] =
-{
- ANIMCMD_FRAME(4, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_StatusSleep[] =
-{
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_StatusFrozen[] =
-{
- ANIMCMD_FRAME(12, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_StatusBurn[] =
-{
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_StatusPokerus[] =
-{
- ANIMCMD_FRAME(20, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_StatusFaint[] =
-{
- ANIMCMD_FRAME(24, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_Blank[] =
-{
- ANIMCMD_FRAME(28, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteTemplate_StatusCondition[] =
-{
- sSpriteAnim_StatusPoison,
- sSpriteAnim_StatusParalyzed,
- sSpriteAnim_StatusSleep,
- sSpriteAnim_StatusFrozen,
- sSpriteAnim_StatusBurn,
- sSpriteAnim_StatusPokerus,
- sSpriteAnim_StatusFaint,
- sSpriteAnim_Blank
-};
-
-static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons =
-{
- gStatusGfx_Icons, 0x400, 1202
-};
-
-static const struct CompressedSpritePalette sSpritePalette_StatusIcons =
-{
- gStatusPal_Icons, 1202
-};
-
-static const struct SpriteTemplate sSpriteTemplate_StatusIcons =
-{
- .tileTag = 1202,
- .paletteTag = 1202,
- .oam = &sOamData_StatusCondition,
- .anims = sSpriteTemplate_StatusCondition,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const u8 gUnknown_08616020[] = {0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00};
-
-// Unused table of pointers to strings of statistics.
-static const u8 *const gUnknown_08616028[] =
-{
- gText_HP4,
- gText_Attack3,
- gText_Defense3,
- gText_SpAtk4,
- gText_SpDef4,
- gText_Speed2
-};
-
-static const u16 gTMHMMoves[] =
-{
- MOVE_FOCUS_PUNCH,
- MOVE_DRAGON_CLAW,
- MOVE_WATER_PULSE,
- MOVE_CALM_MIND,
- MOVE_ROAR,
- MOVE_TOXIC,
- MOVE_HAIL,
- MOVE_BULK_UP,
- MOVE_BULLET_SEED,
- MOVE_HIDDEN_POWER,
- MOVE_SUNNY_DAY,
- MOVE_TAUNT,
- MOVE_ICE_BEAM,
- MOVE_BLIZZARD,
- MOVE_HYPER_BEAM,
- MOVE_LIGHT_SCREEN,
- MOVE_PROTECT,
- MOVE_RAIN_DANCE,
- MOVE_GIGA_DRAIN,
- MOVE_SAFEGUARD,
- MOVE_FRUSTRATION,
- MOVE_SOLAR_BEAM,
- MOVE_IRON_TAIL,
- MOVE_THUNDERBOLT,
- MOVE_THUNDER,
- MOVE_EARTHQUAKE,
- MOVE_RETURN,
- MOVE_DIG,
- MOVE_PSYCHIC,
- MOVE_SHADOW_BALL,
- MOVE_BRICK_BREAK,
- MOVE_DOUBLE_TEAM,
- MOVE_REFLECT,
- MOVE_SHOCK_WAVE,
- MOVE_FLAMETHROWER,
- MOVE_SLUDGE_BOMB,
- MOVE_SANDSTORM,
- MOVE_FIRE_BLAST,
- MOVE_ROCK_TOMB,
- MOVE_AERIAL_ACE,
- MOVE_TORMENT,
- MOVE_FACADE,
- MOVE_SECRET_POWER,
- MOVE_REST,
- MOVE_ATTRACT,
- MOVE_THIEF,
- MOVE_STEEL_WING,
- MOVE_SKILL_SWAP,
- MOVE_SNATCH,
- MOVE_OVERHEAT,
- MOVE_CUT,
- MOVE_FLY,
- MOVE_SURF,
- MOVE_STRENGTH,
- MOVE_FLASH,
- MOVE_ROCK_SMASH,
- MOVE_WATERFALL,
- MOVE_DIVE,
-};
+#include "data/party_menu.h"
// code
-static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback)
+static void InitPartyMenu(u8 menuType, u8 layout, u8 partyAction, bool8 keepCursorPos, u8 messageId, TaskFunc task, MainCallback callback)
{
u16 i;
- reset_brm();
- gUnknown_0203CEC4 = Alloc(sizeof(struct Struct203CEC4));
- if (gUnknown_0203CEC4 == NULL)
+ ResetPartyMenu();
+ sPartyMenuInternal = Alloc(sizeof(struct PartyMenuInternal));
+ if (sPartyMenuInternal == NULL)
{
SetMainCallback2(callback);
}
else
{
- gUnknown_0203CEC8.unk8_0 = a;
- gUnknown_0203CEC8.exitCallback = callback;
- gUnknown_0203CEC8.unkB = c;
- gUnknown_0203CEC4->messageId = messageId;
- gUnknown_0203CEC4->task = task;
- gUnknown_0203CEC4->exitCallback = NULL;
- gUnknown_0203CEC4->unk8_1 = 0;
- gUnknown_0203CEC4->unk8_2 = 0x7F;
- gUnknown_0203CEC4->unk9_0 = 0x7F;
-
- if (a == 4)
- gUnknown_0203CEC4->unk8_0 = TRUE;
+ gPartyMenu.menuType = menuType;
+ gPartyMenu.exitCallback = callback;
+ gPartyMenu.action = partyAction;
+ sPartyMenuInternal->messageId = messageId;
+ sPartyMenuInternal->task = task;
+ sPartyMenuInternal->exitCallback = NULL;
+ sPartyMenuInternal->lastSelectedSlot = 0;
+ sPartyMenuInternal->spriteIdConfirmPokeball = 0x7F;
+ sPartyMenuInternal->spriteIdCancelPokeball = 0x7F;
+
+ if (menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ sPartyMenuInternal->chooseHalf = TRUE;
else
- gUnknown_0203CEC4->unk8_0 = FALSE;
+ sPartyMenuInternal->chooseHalf = FALSE;
- if (b != 0xFF)
- gUnknown_0203CEC8.mode = b;
+ if (layout != KEEP_PARTY_LAYOUT)
+ gPartyMenu.layout = layout;
- for (i = 0; i <= 15; i++)
- gUnknown_0203CEC4->data[i] = 0;
- for (i = 0; i < ARRAY_COUNT(gUnknown_0203CEC4->windowId); i++)
- gUnknown_0203CEC4->windowId[i] = 0xFF;
+ for (i = 0; i < ARRAY_COUNT(sPartyMenuInternal->data); i++)
+ sPartyMenuInternal->data[i] = 0;
+ for (i = 0; i < ARRAY_COUNT(sPartyMenuInternal->windowId); i++)
+ sPartyMenuInternal->windowId[i] = 0xFF;
- if (d == 0)
- gUnknown_0203CEC8.slotId = 0;
- else if (gUnknown_0203CEC8.slotId > 5 || GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES) == SPECIES_NONE)
- gUnknown_0203CEC8.slotId = 0; // wut why is this else if?
+ if (!keepCursorPos)
+ gPartyMenu.slotId = 0;
+ else if (gPartyMenu.slotId > PARTY_SIZE - 1 || GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES) == SPECIES_NONE)
+ gPartyMenu.slotId = 0;
gTextFlags.autoScroll = 0;
CalculatePlayerPartyCount();
- SetMainCallback2(PartyMenuInitCallback);
+ SetMainCallback2(CB2_InitPartyMenu);
}
}
-static void PartyMenuCallback(void)
+static void CB2_UpdatePartyMenu(void)
{
RunTasks();
AnimateSprites();
@@ -1632,23 +468,23 @@ static void PartyMenuCallback(void)
UpdatePaletteFade();
}
-static void PartyMenuVBlankCallback(void)
+static void VBlankCB_PartyMenu(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-static void PartyMenuInitCallback(void)
+static void CB2_InitPartyMenu(void)
{
while (TRUE)
{
- if (sub_81221EC() == TRUE || PartyMenuSetup() == TRUE || sub_81221AC() == TRUE)
+ if (sub_81221EC() == TRUE || ShowPartyMenu() == TRUE || sub_81221AC() == TRUE)
break;
}
}
-static bool8 PartyMenuSetup(void)
+static bool8 ShowPartyMenu(void)
{
switch (gMain.state)
{
@@ -1681,32 +517,32 @@ static bool8 PartyMenuSetup(void)
gMain.state++;
break;
case 6:
- sub_81B209C();
+ SetPartyMonsAllowedInMinigame();
gMain.state++;
break;
case 7:
if (!AllocPartyMenuBg())
{
- PartyMenuExit();
+ ExitPartyMenu();
return TRUE;
}
else
{
- gUnknown_0203CEC4->data[0] = 0;
+ sPartyMenuInternal->data[0] = 0;
gMain.state++;
}
break;
case 8:
- if (AllocPartyMiscGfx())
+ if (AllocPartyMenuBgGfx())
gMain.state++;
break;
case 9:
- sub_81B239C(gUnknown_0203CEC8.mode);
+ InitPartyMenuWindows(gPartyMenu.layout);
gMain.state++;
break;
case 10:
- PartyMenuInitHelperStructs(gUnknown_0203CEC8.mode);
- gUnknown_0203CEC4->data[0] = 0;
+ InitPartyMenuBoxes(gPartyMenu.layout);
+ sPartyMenuInternal->data[0] = 0;
gMain.state++;
break;
case 11:
@@ -1726,33 +562,33 @@ static bool8 PartyMenuSetup(void)
gMain.state++;
break;
case 15:
- if (party_menu_add_per_mon_objects())
+ if (CreatePartyMonSpritesLoop())
{
- gUnknown_0203CEC4->data[0] = 0;
+ sPartyMenuInternal->data[0] = 0;
gMain.state++;
}
break;
case 16:
if (RenderPartyMenuBoxes())
{
- gUnknown_0203CEC4->data[0] = 0;
+ sPartyMenuInternal->data[0] = 0;
gMain.state++;
}
break;
case 17:
- sub_81B0F28();
+ CreateCancelConfirmPokeballSprites();
gMain.state++;
break;
case 18:
- sub_81B2428(gUnknown_0203CEC4->unk8_0);
+ CreateCancelConfirmWindows(sPartyMenuInternal->chooseHalf);
gMain.state++;
break;
case 19:
gMain.state++;
break;
case 20:
- CreateTask(gUnknown_0203CEC4->task, 0);
- display_pokemon_menu_message(gUnknown_0203CEC4->messageId);
+ CreateTask(sPartyMenuInternal->task, 0);
+ DisplayPartyMenuStdMessage(sPartyMenuInternal->messageId);
gMain.state++;
break;
case 21:
@@ -1765,49 +601,49 @@ static bool8 PartyMenuSetup(void)
gMain.state++;
break;
default:
- SetVBlankCallback(PartyMenuVBlankCallback);
- SetMainCallback2(PartyMenuCallback);
+ SetVBlankCallback(VBlankCB_PartyMenu);
+ SetMainCallback2(CB2_UpdatePartyMenu);
return TRUE;
}
return FALSE;
}
-static void PartyMenuExit(void)
+static void ExitPartyMenu(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- CreateTask(PartyMenuExitTask, 0);
- SetVBlankCallback(PartyMenuVBlankCallback);
- SetMainCallback2(PartyMenuCallback);
+ CreateTask(Task_ExitPartyMenu, 0);
+ SetVBlankCallback(VBlankCB_PartyMenu);
+ SetMainCallback2(CB2_UpdatePartyMenu);
}
-static void PartyMenuExitTask(u8 taskId)
+static void Task_ExitPartyMenu(u8 taskId)
{
if (!gPaletteFade.active)
{
- SetMainCallback2(gUnknown_0203CEC8.exitCallback);
+ SetMainCallback2(gPartyMenu.exitCallback);
FreePartyPointers();
DestroyTask(taskId);
}
}
-static void reset_brm(void)
+static void ResetPartyMenu(void)
{
- gUnknown_0203CEC4 = NULL;
- gUnknown_0203CEE4 = NULL;
- gUnknown_0203CEDC = NULL;
- gUnknown_0203CEE0 = NULL;
+ sPartyMenuInternal = NULL;
+ sPartyBgTilemapBuffer = NULL;
+ sPartyMenuBoxes = NULL;
+ sPartyBgGfxTilemap = NULL;
}
static bool8 AllocPartyMenuBg(void)
{
- gUnknown_0203CEE4 = Alloc(0x800);
- if (gUnknown_0203CEE4 == NULL)
+ sPartyBgTilemapBuffer = Alloc(0x800);
+ if (sPartyBgTilemapBuffer == NULL)
return FALSE;
- memset(gUnknown_0203CEE4, 0, 0x800);
+ memset(sPartyBgTilemapBuffer, 0, 0x800);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_086156B8, ARRAY_COUNT(gUnknown_086156B8));
- SetBgTilemapBuffer(1, gUnknown_0203CEE4);
+ InitBgsFromTemplates(0, sPartyMenuBgTemplates, ARRAY_COUNT(sPartyMenuBgTemplates));
+ SetBgTilemapBuffer(1, sPartyBgTilemapBuffer);
ResetAllBgsCoordinates();
schedule_bg_copy_tilemap_to_vram(1);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
@@ -1818,48 +654,48 @@ static bool8 AllocPartyMenuBg(void)
return TRUE;
}
-static bool8 AllocPartyMiscGfx(void)
+static bool8 AllocPartyMenuBgGfx(void)
{
u32 sizeout;
- switch (gUnknown_0203CEC4->data[0])
+ switch (sPartyMenuInternal->data[0])
{
case 0:
- gUnknown_0203CEE0 = malloc_and_decompress(gPartyMenuMisc_Gfx, &sizeout);
- LoadBgTiles(1, gUnknown_0203CEE0, sizeout, 0);
- gUnknown_0203CEC4->data[0]++;
+ sPartyBgGfxTilemap = malloc_and_decompress(gPartyMenuBg_Gfx, &sizeout);
+ LoadBgTiles(1, sPartyBgGfxTilemap, sizeout, 0);
+ sPartyMenuInternal->data[0]++;
break;
case 1:
if (!IsDma3ManagerBusyWithBgCopy())
{
- LZDecompressWram(gPartyMenuMisc_Tilemap, gUnknown_0203CEE4);
- gUnknown_0203CEC4->data[0]++;
+ LZDecompressWram(gPartyMenuBg_Tilemap, sPartyBgTilemapBuffer);
+ sPartyMenuInternal->data[0]++;
}
break;
case 2:
- LoadCompressedPalette(gPartyMenuMisc_Pal, 0, 0x160);
- CpuCopy16(gPlttBufferUnfaded, gUnknown_0203CEC4->palBuffer, 0x160);
- gUnknown_0203CEC4->data[0]++;
+ LoadCompressedPalette(gPartyMenuBg_Pal, 0, 0x160);
+ CpuCopy16(gPlttBufferUnfaded, sPartyMenuInternal->palBuffer, 0x160);
+ sPartyMenuInternal->data[0]++;
break;
case 3:
PartyPaletteBufferCopy(4);
- gUnknown_0203CEC4->data[0]++;
+ sPartyMenuInternal->data[0]++;
break;
case 4:
PartyPaletteBufferCopy(5);
- gUnknown_0203CEC4->data[0]++;
+ sPartyMenuInternal->data[0]++;
break;
case 5:
PartyPaletteBufferCopy(6);
- gUnknown_0203CEC4->data[0]++;
+ sPartyMenuInternal->data[0]++;
break;
case 6:
PartyPaletteBufferCopy(7);
- gUnknown_0203CEC4->data[0]++;
+ sPartyMenuInternal->data[0]++;
break;
case 7:
PartyPaletteBufferCopy(8);
- gUnknown_0203CEC4->data[0]++;
+ sPartyMenuInternal->data[0]++;
break;
default:
return TRUE;
@@ -1876,84 +712,86 @@ static void PartyPaletteBufferCopy(u8 offset)
static void FreePartyPointers(void)
{
- if (gUnknown_0203CEC4)
- Free(gUnknown_0203CEC4);
- if (gUnknown_0203CEE4)
- Free(gUnknown_0203CEE4);
- if (gUnknown_0203CEE0)
- Free(gUnknown_0203CEE0);
- if (gUnknown_0203CEDC)
- Free(gUnknown_0203CEDC);
+ if (sPartyMenuInternal)
+ Free(sPartyMenuInternal);
+ if (sPartyBgTilemapBuffer)
+ Free(sPartyBgTilemapBuffer);
+ if (sPartyBgGfxTilemap)
+ Free(sPartyBgGfxTilemap);
+ if (sPartyMenuBoxes)
+ Free(sPartyMenuBoxes);
FreeAllWindowBuffers();
}
-static void PartyMenuInitHelperStructs(u8 a)
+static void InitPartyMenuBoxes(u8 layout)
{
u8 i;
- gUnknown_0203CEDC = Alloc(sizeof(struct Struct203CEDC[PARTY_SIZE]));
+ sPartyMenuBoxes = Alloc(sizeof(struct PartyMenuBox[PARTY_SIZE]));
for (i = 0; i < PARTY_SIZE; i++)
{
- gUnknown_0203CEDC[i].unk0 = &gUnknown_086156C4[1];
- gUnknown_0203CEDC[i].unk4 = gUnknown_08615704[a][i];
- gUnknown_0203CEDC[i].windowId = i;
- gUnknown_0203CEDC[i].monSpriteId = 0xFF;
- gUnknown_0203CEDC[i].itemSpriteId = 0xFF;
- gUnknown_0203CEDC[i].pokeballSpriteId = 0xFF;
- gUnknown_0203CEDC[i].statusSpriteId = 0xFF;
+ sPartyMenuBoxes[i].infoRects = &sPartyBoxInfoRects[PARTY_BOX_RIGHT_COLUMN];
+ sPartyMenuBoxes[i].spriteCoords = sPartyMenuSpriteCoords[layout][i];
+ sPartyMenuBoxes[i].windowId = i;
+ sPartyMenuBoxes[i].monSpriteId = 0xFF;
+ sPartyMenuBoxes[i].itemSpriteId = 0xFF;
+ sPartyMenuBoxes[i].pokeballSpriteId = 0xFF;
+ sPartyMenuBoxes[i].statusSpriteId = 0xFF;
}
- gUnknown_0203CEDC[0].unk0 = &gUnknown_086156C4[0];
- if (a == 3)
- gUnknown_0203CEDC[3].unk0 = &gUnknown_086156C4[0];
- else if (a != 0)
- gUnknown_0203CEDC[1].unk0 = &gUnknown_086156C4[0];
+ // The first party mon goes in the left column
+ sPartyMenuBoxes[0].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
+
+ if (layout == PARTY_LAYOUT_MULTI_SHOWCASE)
+ sPartyMenuBoxes[3].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
+ else if (layout != PARTY_LAYOUT_SINGLE)
+ sPartyMenuBoxes[1].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN];
}
static void RenderPartyMenuBox(u8 slot)
{
- if (gUnknown_0203CEC8.unk8_0 == 5 && slot > 2)
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE)
{
- sub_81B0CEC(slot);
- if (gUnknown_02022FF8[slot - 3].species == SPECIES_NONE)
- UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 0x40);
+ DisplayPartyPokemonDataForMultiBattle(slot);
+ if (gMultiPartnerParty[slot - MULTI_PARTY_SIZE].species == SPECIES_NONE)
+ LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_NO_MON);
else
- UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 8);
- CopyWindowToVram(gUnknown_0203CEDC[slot].windowId, 2);
- PutWindowTilemap(gUnknown_0203CEDC[slot].windowId);
+ LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_MULTI_ALT);
+ CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2);
+ PutWindowTilemap(sPartyMenuBoxes[slot].windowId);
schedule_bg_copy_tilemap_to_vram(2);
}
else
{
if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) == SPECIES_NONE)
{
- DrawEmptySlot(gUnknown_0203CEDC[slot].windowId);
- UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 0x40);
- CopyWindowToVram(gUnknown_0203CEDC[slot].windowId, 2);
+ DrawEmptySlot(sPartyMenuBoxes[slot].windowId);
+ LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_NO_MON);
+ CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2);
}
else
{
- if (gUnknown_0203CEC8.unk8_0 == 7)
- DisplayPartyPokemonSelectForRelearner(slot);
- else if (gUnknown_0203CEC8.unk8_0 == 2)
- DisplayPartyPokemonSelectForContest(slot);
- else if (gUnknown_0203CEC8.unk8_0 == 4)
- DisplayPartyPokemonSelectForBattle(slot);
- else if (gUnknown_0203CEC8.unk8_0 == 11)
- sub_81B0B98(slot);
- else if (gUnknown_0203CEC8.unk8_0 == 12)
- DisplayPartyPokemonSelectHeldItemRelated(slot);
- else if (!sub_81B0BFC(slot))
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MOVE_RELEARNER)
+ DisplayPartyPokemonDataForRelearner(slot);
+ else if (gPartyMenu.menuType == PARTY_MENU_TYPE_CONTEST)
+ DisplayPartyPokemonDataForContest(slot);
+ else if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ DisplayPartyPokemonDataForChooseHalf(slot);
+ else if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
+ DisplayPartyPokemonDataForWirelessMinigame(slot);
+ else if (gPartyMenu.menuType == PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS)
+ DisplayPartyPokemonDataForBattlePyramidHeldItem(slot);
+ else if (!DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(slot))
DisplayPartyPokemonData(slot);
- if (gUnknown_0203CEC8.unk8_0 == 5)
- sub_81B0FCC(slot, 0);
- else if (gUnknown_0203CEC8.slotId == slot)
- sub_81B0FCC(slot, 1);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE)
+ AnimatePartySlot(slot, 0);
+ else if (gPartyMenu.slotId == slot)
+ AnimatePartySlot(slot, 1);
else
- sub_81B0FCC(slot, 0);
+ AnimatePartySlot(slot, 0);
}
- PutWindowTilemap(gUnknown_0203CEDC[slot].windowId);
+ PutWindowTilemap(sPartyMenuBoxes[slot].windowId);
schedule_bg_copy_tilemap_to_vram(0);
}
}
@@ -1962,249 +800,251 @@ static void DisplayPartyPokemonData(u8 slot)
{
if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG))
{
- gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 1);
- DisplayPartyPokemonNickname(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE);
+ DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
}
else
{
- gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 0);
- DisplayPartyPokemonNickname(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
- DisplayPartyPokemonLevelCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
- DisplayPartyPokemonGenderNidoranCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
- DisplayPartyPokemonHPCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
- DisplayPartyPokemonMaxHPCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
- DisplayPartyPokemonHPBarCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, FALSE);
+ DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonLevelCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonGenderNidoranCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonMaxHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonHPBarCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
}
}
-static void DisplayPartyPokemonSelectData(u8 slot, u8 stringID)
+static void DisplayPartyPokemonDescriptionData(u8 slot, u8 stringID)
{
struct Pokemon *mon = &gPlayerParty[slot];
- gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 1);
- DisplayPartyPokemonNickname(mon, &gUnknown_0203CEDC[slot], 0);
+ sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE);
+ DisplayPartyPokemonNickname(mon, &sPartyMenuBoxes[slot], 0);
if (!GetMonData(mon, MON_DATA_IS_EGG))
{
- DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[slot], 0);
- DisplayPartyPokemonGenderNidoranCheck(mon, &gUnknown_0203CEDC[slot], 0);
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[slot], 0);
+ DisplayPartyPokemonGenderNidoranCheck(mon, &sPartyMenuBoxes[slot], 0);
}
- DisplayPartyPokemonOtherText(stringID, &gUnknown_0203CEDC[slot], 0);
+ DisplayPartyPokemonDescriptionText(stringID, &sPartyMenuBoxes[slot], 0);
}
-static void DisplayPartyPokemonSelectForBattle(u8 slot)
+static void DisplayPartyPokemonDataForChooseHalf(u8 slot)
{
u8 i;
struct Pokemon *mon = &gPlayerParty[slot];
- u8 *ptr = gSelectedOrderFromParty;
+ u8 *order = gSelectedOrderFromParty;
if (!GetBattleEntryEligibility(mon))
{
- DisplayPartyPokemonSelectData(slot, 7);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE);
return;
}
else
{
- for (i = 0; i < sub_81B8830(); i++)
+ for (i = 0; i < GetMaxBattleEntries(); i++)
{
- if (ptr[i] != 0 && (ptr[i] - 1) == slot)
+ if (order[i] != 0 && (order[i] - 1) == slot)
{
- DisplayPartyPokemonSelectData(slot, i + 2);
+ DisplayPartyPokemonDescriptionData(slot, i + PARTYBOX_DESC_FIRST);
return;
}
}
- DisplayPartyPokemonSelectData(slot, 1);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_3);
}
}
-static void DisplayPartyPokemonSelectForContest(u8 slot)
+static void DisplayPartyPokemonDataForContest(u8 slot)
{
- switch (sub_80DAE0C(&gPlayerParty[slot]))
+ switch (GetContestEntryEligibility(&gPlayerParty[slot]))
{
- case 0:
- case 3:
- case 4:
- DisplayPartyPokemonSelectData(slot, 7);
+ case CANT_ENTER_CONTEST:
+ case CANT_ENTER_CONTEST_EGG:
+ case CANT_ENTER_CONTEST_FAINTED:
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE);
break;
- case 1:
- case 2:
- DisplayPartyPokemonSelectData(slot, 6);
+ case CAN_ENTER_CONTEST_EQUAL_RANK:
+ case CAN_ENTER_CONTEST_HIGH_RANK:
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE);
break;
}
}
-static void DisplayPartyPokemonSelectForRelearner(u8 slot)
+static void DisplayPartyPokemonDataForRelearner(u8 slot)
{
if (GetNumberOfRelearnableMoves(&gPlayerParty[slot]) == 0)
- DisplayPartyPokemonSelectData(slot, 9);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE_2);
else
- DisplayPartyPokemonSelectData(slot, 8);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_2);
}
-static void sub_81B0B98(u8 slot)
+static void DisplayPartyPokemonDataForWirelessMinigame(u8 slot)
{
- if (sub_81B218C(slot) == TRUE)
- DisplayPartyPokemonSelectData(slot, 6);
+ if (IsMonAllowedInMinigame(slot) == TRUE)
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE);
else
- DisplayPartyPokemonSelectData(slot, 7);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE);
}
-static void DisplayPartyPokemonSelectHeldItemRelated(u8 slot)
+static void DisplayPartyPokemonDataForBattlePyramidHeldItem(u8 slot)
{
if (GetMonData(&gPlayerParty[slot], MON_DATA_HELD_ITEM))
- DisplayPartyPokemonSelectData(slot, 11);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_HAVE);
else
- DisplayPartyPokemonSelectData(slot, 12);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_DONT_HAVE);
}
-static bool8 sub_81B0BFC(u8 slot)
+// Returns TRUE if teaching move or cant evolve with item (i.e. description data is shown), FALSE otherwise
+static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot)
{
struct Pokemon *currentPokemon = &gPlayerParty[slot];
u16 item = gSpecialVar_ItemId;
- if (gUnknown_0203CEC8.unkB == 12)
+ if (gPartyMenu.action == PARTY_ACTION_MOVE_TUTOR)
{
gSpecialVar_Result = FALSE;
- DisplayPartyPokemonSelectToTeachMove(slot, 0, gSpecialVar_0x8005);
+ DisplayPartyPokemonDataToTeachMove(slot, 0, gSpecialVar_0x8005);
}
else
{
- if (gUnknown_0203CEC8.unkB != 3)
+ if (gPartyMenu.action != PARTY_ACTION_USE_ITEM)
return FALSE;
switch (CheckIfItemIsTMHMOrEvolutionStone(item))
{
default:
return FALSE;
- case 1:
- DisplayPartyPokemonSelectToTeachMove(slot, item, 0);
+ case 1: // TM/HM
+ DisplayPartyPokemonDataToTeachMove(slot, item, 0);
break;
- case 2:
+ case 2: // Evolution stone
if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, 3, item) != SPECIES_NONE)
return FALSE;
- DisplayPartyPokemonSelectData(slot, 0);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NO_USE);
break;
}
}
return TRUE;
}
-static void DisplayPartyPokemonSelectToTeachMove(u8 slot, u16 item, u8 tutor)
+static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor)
{
switch (CanMonLearnTMTutor(&gPlayerParty[slot], item, tutor))
{
case CANNOT_LEARN_MOVE:
case CANNOT_LEARN_MOVE_IS_EGG:
- DisplayPartyPokemonSelectData(slot, 9);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE_2);
break;
case ALREADY_KNOWS_MOVE:
- DisplayPartyPokemonSelectData(slot, 10);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_LEARNED);
break;
default:
- DisplayPartyPokemonSelectData(slot, 8);
+ DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_2);
break;
}
}
-static void sub_81B0CEC(u8 slot)
+static void DisplayPartyPokemonDataForMultiBattle(u8 slot)
{
- struct Struct203CEDC *structPtr = &gUnknown_0203CEDC[slot];
- u8 actualSlot = slot - 3;
+ struct PartyMenuBox *menuBox = &sPartyMenuBoxes[slot];
+ u8 actualSlot = slot - (3);
- if (gUnknown_02022FF8[actualSlot].species == SPECIES_NONE)
+ if (gMultiPartnerParty[actualSlot].species == SPECIES_NONE)
{
- DrawEmptySlot(structPtr->windowId);
+ DrawEmptySlot(menuBox->windowId);
}
else
{
- structPtr->unk0->unk0(structPtr->windowId, 0, 0, 0, 0, 0);
- StringCopy(gStringVar1, gUnknown_02022FF8[actualSlot].nickname);
+ menuBox->infoRects->blitFunc(menuBox->windowId, 0, 0, 0, 0, FALSE);
+ StringCopy(gStringVar1, gMultiPartnerParty[actualSlot].nickname);
StringGetEnd10(gStringVar1);
sub_81DB52C(gStringVar1);
- DisplayPartyPokemonBarDetail(structPtr->windowId, gStringVar1, 0, structPtr->unk0->unk4);
- DisplayPartyPokemonLevel(gUnknown_02022FF8[actualSlot].level, structPtr);
- DisplayPartyPokemonGender(gUnknown_02022FF8[actualSlot].gender, gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].nickname, structPtr);
- DisplayPartyPokemonHP(gUnknown_02022FF8[actualSlot].hp, structPtr);
- DisplayPartyPokemonMaxHP(gUnknown_02022FF8[actualSlot].maxhp, structPtr);
- DisplayPartyPokemonHPBar(gUnknown_02022FF8[actualSlot].hp, gUnknown_02022FF8[actualSlot].maxhp, structPtr);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, menuBox->infoRects->dimensions);
+ DisplayPartyPokemonLevel(gMultiPartnerParty[actualSlot].level, menuBox);
+ DisplayPartyPokemonGender(gMultiPartnerParty[actualSlot].gender, gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].nickname, menuBox);
+ DisplayPartyPokemonHP(gMultiPartnerParty[actualSlot].hp, menuBox);
+ DisplayPartyPokemonMaxHP(gMultiPartnerParty[actualSlot].maxhp, menuBox);
+ DisplayPartyPokemonHPBar(gMultiPartnerParty[actualSlot].hp, gMultiPartnerParty[actualSlot].maxhp, menuBox);
}
}
static bool8 RenderPartyMenuBoxes(void)
{
- RenderPartyMenuBox(gUnknown_0203CEC4->data[0]);
- if (++gUnknown_0203CEC4->data[0] == 6)
+ RenderPartyMenuBox(sPartyMenuInternal->data[0]);
+ if (++sPartyMenuInternal->data[0] == PARTY_SIZE)
return TRUE;
else
return FALSE;
}
-static u8* GetPartyMiscGraphicsTile(u16 tileId)
+static u8* GetPartyMenuBgTile(u16 tileId)
{
- return &gUnknown_0203CEE0[tileId << 5];
+ return &sPartyBgGfxTilemap[tileId << 5];
}
-static void party_menu_add_per_mon_objects_internal(u8 slot)
+static void CreatePartyMonSprites(u8 slot)
{
u8 actualSlot;
- if (gUnknown_0203CEC8.unk8_0 == 5 && slot > 2)
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE)
{
u8 status;
- actualSlot = slot - 3;
+ actualSlot = slot - MULTI_PARTY_SIZE;
- if (gUnknown_02022FF8[actualSlot].species != SPECIES_NONE)
+ if (gMultiPartnerParty[actualSlot].species != SPECIES_NONE)
{
- party_menu_link_mon_icon_anim(gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].personality, &gUnknown_0203CEDC[slot], 0, 0);
- party_menu_link_mon_held_item_object(gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].heldItem, &gUnknown_0203CEDC[slot]);
- party_menu_link_mon_pokeball_object(gUnknown_02022FF8[actualSlot].species, &gUnknown_0203CEDC[slot]);
- if (gUnknown_02022FF8[actualSlot].hp == 0)
+ CreatePartyMonIconSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].personality, &sPartyMenuBoxes[slot], 0, FALSE);
+ CreatePartyMonHeldItemSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].heldItem, &sPartyMenuBoxes[slot]);
+ CreatePartyMonPokeballSpriteParameterized(gMultiPartnerParty[actualSlot].species, &sPartyMenuBoxes[slot]);
+ if (gMultiPartnerParty[actualSlot].hp == 0)
status = AILMENT_FNT;
else
- status = pokemon_ailments_get_primary(gUnknown_02022FF8[actualSlot].status);
- party_menu_link_mon_status_condition_object(gUnknown_02022FF8[actualSlot].species, status, &gUnknown_0203CEDC[slot]);
+ status = GetAilmentFromStatus(gMultiPartnerParty[actualSlot].status);
+ CreatePartyMonStatusSpriteParameterized(gMultiPartnerParty[actualSlot].species, status, &sPartyMenuBoxes[slot]);
}
}
else if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE)
{
- party_menu_icon_anim(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], slot);
- party_menu_held_item_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
- party_menu_pokeball_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
- party_menu_status_condition_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
+ CreatePartyMonIconSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot], slot);
+ CreatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ CreatePartyMonPokeballSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ CreatePartyMonStatusSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
}
}
-static bool8 party_menu_add_per_mon_objects(void)
+static bool8 CreatePartyMonSpritesLoop(void)
{
- party_menu_add_per_mon_objects_internal(gUnknown_0203CEC4->data[0]);
- if (++gUnknown_0203CEC4->data[0] == 6)
+ CreatePartyMonSprites(sPartyMenuInternal->data[0]);
+ if (++sPartyMenuInternal->data[0] == PARTY_SIZE)
return TRUE;
else
return FALSE;
}
-static void sub_81B0F28(void)
+static void CreateCancelConfirmPokeballSprites(void)
{
- if (gUnknown_0203CEC8.unk8_0 == 5)
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE)
{
+ // The showcase has no Cancel/Confirm buttons
FillBgTilemapBufferRect(1, 14, 23, 17, 7, 2, 1);
}
else
{
- if (gUnknown_0203CEC4->unk8_0)
+ if (sPartyMenuInternal->chooseHalf)
{
- gUnknown_0203CEC4->unk8_2 = sub_81B5F74(0xBF, 0x88);
- sub_81B120C();
- gUnknown_0203CEC4->unk9_0 = sub_81B5F74(0xBF, 0x98);
+ sPartyMenuInternal->spriteIdConfirmPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x88);
+ DrawCancelConfirmButtons();
+ sPartyMenuInternal->spriteIdCancelPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x98);
}
else
{
- gUnknown_0203CEC4->unk9_0 = sub_81B5F34(0xC6, 0x94);
+ sPartyMenuInternal->spriteIdCancelPokeball = CreatePokeballButtonSprite(198, 148);
}
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 1);
+ AnimatePartySlot(gPartyMenu.slotId, 1);
}
}
-void sub_81B0FCC(u8 slot, u8 b)
+void AnimatePartySlot(u8 slot, u8 animNum)
{
u8 spriteId;
@@ -2213,79 +1053,80 @@ void sub_81B0FCC(u8 slot, u8 b)
default:
if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE)
{
- UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], GetPartyBoxPalBitfield(slot, b));
- AnimateSelectedPartyIcon(gUnknown_0203CEDC[slot].monSpriteId, b);
- sub_81B5F98(gUnknown_0203CEDC[slot].pokeballSpriteId, b);
+ LoadPartyBoxPalette(&sPartyMenuBoxes[slot], GetPartyBoxPaletteFlags(slot, animNum));
+ AnimateSelectedPartyIcon(sPartyMenuBoxes[slot].monSpriteId, animNum);
+ PartyMenuStartSpriteAnim(sPartyMenuBoxes[slot].pokeballSpriteId, animNum);
}
return;
- case 6:
- if (b == 0)
- sub_8199C30(1, 23, 16, 7, 2, 1);
+ case PARTY_SIZE: // Confirm
+ if (animNum == 0)
+ SetBgTilemapPalette(1, 23, 16, 7, 2, 1);
else
- sub_8199C30(1, 23, 16, 7, 2, 2);
- spriteId = gUnknown_0203CEC4->unk8_2;
+ SetBgTilemapPalette(1, 23, 16, 7, 2, 2);
+ spriteId = sPartyMenuInternal->spriteIdConfirmPokeball;
break;
- case 7:
- if (!gUnknown_0203CEC4->unk8_0)
+ case PARTY_SIZE + 1: // Cancel
+ // The position of the Cancel button changes if Confirm is present
+ if (!sPartyMenuInternal->chooseHalf)
{
- if (b == 0)
- sub_8199C30(1, 23, 17, 7, 2, 1);
+ if (animNum == 0)
+ SetBgTilemapPalette(1, 23, 17, 7, 2, 1);
else
- sub_8199C30(1, 23, 17, 7, 2, 2);
+ SetBgTilemapPalette(1, 23, 17, 7, 2, 2);
}
- else if (b == 0)
+ else if (animNum == 0)
{
- sub_8199C30(1, 23, 18, 7, 2, 1);
+ SetBgTilemapPalette(1, 23, 18, 7, 2, 1);
}
else
{
- sub_8199C30(1, 23, 18, 7, 2, 2);
+ SetBgTilemapPalette(1, 23, 18, 7, 2, 2);
}
- spriteId = gUnknown_0203CEC4->unk9_0;
+ spriteId = sPartyMenuInternal->spriteIdCancelPokeball;
break;
}
- sub_81B5F98(spriteId, b);
+ PartyMenuStartSpriteAnim(spriteId, animNum);
schedule_bg_copy_tilemap_to_vram(1);
}
-static u8 GetPartyBoxPalBitfield(u8 slot, u8 b)
+static u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum)
{
- u8 returnVar = 0;
+ u8 palFlags = 0;
- if (b == 1)
- returnVar |= 1;
+ if (animNum == 1)
+ palFlags |= PARTY_PAL_SELECTED;
if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0)
- returnVar |= 2;
+ palFlags |= PARTY_PAL_FAINTED;
if (PartyBoxPal_ParnterOrDisqualifiedInArena(slot) == TRUE)
- returnVar |= 8;
- if (gUnknown_0203CEC8.unkB == 9)
- returnVar |= 16;
- if (gUnknown_0203CEC8.unkB == 8)
+ palFlags |= PARTY_PAL_MULTI_ALT;
+ if (gPartyMenu.action == PARTY_ACTION_SWITCHING)
+ palFlags |= PARTY_PAL_SWITCHING;
+ if (gPartyMenu.action == PARTY_ACTION_SWITCH)
{
- if (slot == gUnknown_0203CEC8.slotId || slot == gUnknown_0203CEC8.unkA)
- returnVar |= 4;
+ if (slot == gPartyMenu.slotId || slot == gPartyMenu.slotId2)
+ palFlags |= PARTY_PAL_TO_SWITCH;
}
- if (gUnknown_0203CEC8.unkB == 10 && slot == gUnknown_0203CEC8.slotId )
- returnVar |= 32;
+ if (gPartyMenu.action == PARTY_ACTION_SOFTBOILED && slot == gPartyMenu.slotId )
+ palFlags |= PARTY_PAL_TO_SOFTBOIL;
- return returnVar;
+ return palFlags;
}
static bool8 PartyBoxPal_ParnterOrDisqualifiedInArena(u8 slot)
{
- if (gUnknown_0203CEC8.mode == 2 && (slot == 1 || slot == 4 || slot == 5))
+ if (gPartyMenu.layout == PARTY_LAYOUT_MULTI && (slot == 1 || slot == 4 || slot == 5))
return TRUE;
- if (slot < 3 && (gBattleTypeFlags & BATTLE_TYPE_ARENA) && gMain.inBattle && (gBattleStruct->arenaLostPlayerMons >> sub_81B8F38(slot) & 1))
+ if (slot < MULTI_PARTY_SIZE && (gBattleTypeFlags & BATTLE_TYPE_ARENA) && gMain.inBattle && (gBattleStruct->arenaLostPlayerMons >> GetPartyIdFromBattleSlot(slot) & 1))
return TRUE;
return FALSE;
}
-static void sub_81B120C(void)
+static void DrawCancelConfirmButtons(void)
{
- CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_086157C4, 23, 16, 7, 2, 17);
- CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_086157E0, 23, 18, 7, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sConfirmButton_Tilemap, 23, 16, 7, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sCancelButton_Tilemap, 23, 18, 7, 2, 17);
schedule_bg_copy_tilemap_to_vram(1);
}
@@ -2297,34 +1138,34 @@ bool8 IsMultiBattle(void)
return FALSE;
}
-static void sub_81B1288(struct Pokemon *partySlot, struct Pokemon *pokemon)
+static void SwapPartyPokemon(struct Pokemon *mon1, struct Pokemon *mon2)
{
struct Pokemon *temp = Alloc(sizeof(struct Pokemon));
- *temp = *partySlot;
- *partySlot = *pokemon;
- *pokemon = *temp;
+ *temp = *mon1;
+ *mon1 = *mon2;
+ *mon2 = *temp;
Free(temp);
}
-static void sub_81B12C0(u8 taskId)
+static void Task_ClosePartyMenu(u8 taskId)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].func = c3_0811FAB4;
+ gTasks[taskId].func = Task_ClosePartyMenuAndSetCB2;
}
-static void c3_0811FAB4(u8 taskId)
+static void Task_ClosePartyMenuAndSetCB2(u8 taskId)
{
if (!gPaletteFade.active)
{
- if (gUnknown_0203CEC8.unk8_0 == 1)
- sub_81B9080();
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ UpdatePartyToFieldOrder();
- if (gUnknown_0203CEC4->exitCallback != NULL)
- SetMainCallback2(gUnknown_0203CEC4->exitCallback);
+ if (sPartyMenuInternal->exitCallback != NULL)
+ SetMainCallback2(sPartyMenuInternal->exitCallback);
else
- SetMainCallback2(gUnknown_0203CEC8.exitCallback);
+ SetMainCallback2(gPartyMenu.exitCallback);
ResetSpriteData();
FreePartyPointers();
@@ -2334,124 +1175,124 @@ static void c3_0811FAB4(u8 taskId)
u8 GetCursorSelectionMonId(void)
{
- return gUnknown_0203CEC8.slotId;
+ return gPartyMenu.slotId;
}
-u8 sub_81B1360(void)
+u8 GetPartyMenuType(void)
{
- return gUnknown_0203CEC8.unk8_0;
+ return gPartyMenu.menuType;
}
-void sub_81B1370(u8 taskId)
+void Task_HandleChooseMonInput(u8 taskId)
{
if (!gPaletteFade.active && sub_81221EC() != TRUE)
{
- s8 *ptr = sub_81B13EC();
+ s8 *slotPtr = GetCurrentPartySlotPtr();
- switch (PartyMenuButtonHandler(ptr))
+ switch (PartyMenuButtonHandler(slotPtr))
{
- case 1:
- sub_81B140C(taskId, ptr);
+ case 1: // Selected mon
+ HandleChooseMonSelection(taskId, slotPtr);
break;
- case 2:
- sub_81B15D0(taskId, ptr);
+ case 2: // Selected Cancel
+ HandleChooseMonCancel(taskId, slotPtr);
break;
- case 8:
- if (gUnknown_0203CEC4->unk8_0)
+ case 8: // Start button
+ if (sPartyMenuInternal->chooseHalf)
{
PlaySE(SE_SELECT);
- sub_81B4F88();
+ MoveCursorToConfirm();
}
break;
}
}
}
-static s8* sub_81B13EC(void)
+static s8* GetCurrentPartySlotPtr(void)
{
- if (gUnknown_0203CEC8.unkB == 8 || gUnknown_0203CEC8.unkB == 10)
- return &gUnknown_0203CEC8.unkA;
+ if (gPartyMenu.action == PARTY_ACTION_SWITCH || gPartyMenu.action == PARTY_ACTION_SOFTBOILED)
+ return &gPartyMenu.slotId2;
else
- return &gUnknown_0203CEC8.slotId;
+ return &gPartyMenu.slotId;
}
-static void sub_81B140C(u8 taskId, s8 *ptr)
+static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr)
{
- if (*ptr == 6)
+ if (*slotPtr == PARTY_SIZE)
{
- gUnknown_0203CEC8.unk4(taskId);
+ gPartyMenu.task(taskId);
}
else
{
- switch (gUnknown_0203CEC8.unkB - 3)
+ switch (gPartyMenu.action - 3)
{
- case 7:
- if (sub_81B15A4((u8*)ptr))
+ case PARTY_ACTION_SOFTBOILED - 3:
+ if (IsSelectedMonNotEgg((u8*)slotPtr))
{
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81615A8(taskId);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ Task_TryUseSoftboiledOnPartyMon(taskId);
}
break;
- case 0:
- if (sub_81B15A4((u8*)ptr))
+ case PARTY_ACTION_USE_ITEM - 3:
+ if (IsSelectedMonNotEgg((u8*)slotPtr))
{
- if (gUnknown_0203CEC8.unk8_0 == 1)
- gUnknown_0203CEC4->exitCallback = sub_81B9140;
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen;
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- gUnknown_03006328(taskId, sub_81B6794);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ gItemUseCB(taskId, Task_ClosePartyMenuAfterText);
}
break;
- case 9:
- if (sub_81B15A4((u8*)ptr))
+ case PARTY_ACTION_MOVE_TUTOR - 3:
+ if (IsSelectedMonNotEgg((u8*)slotPtr))
{
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B7E4C(taskId);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ TryTutorSelectedMon(taskId);
}
break;
- case 4:
- if (sub_81B15A4((u8*)ptr))
+ case PARTY_ACTION_GIVE_MAILBOX_MAIL - 3:
+ if (IsSelectedMonNotEgg((u8*)slotPtr))
{
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B8474(taskId);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ TryGiveMailToSelectedMon(taskId);
}
break;
- case 2:
- case 3:
- if (sub_81B15A4((u8*)ptr))
+ case PARTY_ACTION_GIVE_ITEM - 3:
+ case PARTY_ACTION_GIVE_PC_ITEM - 3:
+ if (IsSelectedMonNotEgg((u8*)slotPtr))
{
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B7FAC(taskId);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ TryGiveItemOrMailToSelectedMon(taskId);
}
break;
- case 5:
+ case PARTY_ACTION_SWITCH - 3:
PlaySE(SE_SELECT);
- sub_81B3938(taskId);
+ SwitchSelectedMons(taskId);
break;
- case 8:
+ case PARTY_ACTION_CHOOSE_AND_CLOSE - 3:
PlaySE(SE_SELECT);
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
break;
- case 10:
- if (sub_81B15A4((u8*)ptr))
+ case PARTY_ACTION_MINIGAME - 3:
+ if (IsSelectedMonNotEgg((u8*)slotPtr))
{
- sub_81B21AC(taskId, (u8)*ptr);
+ TryEnterMonForMinigame(taskId, (u8)*slotPtr);
}
break;
default:
- case 1:
- case 6:
+ case PARTY_ACTION_ABILITY_PREVENTS - 3:
+ case PARTY_ACTION_SWITCHING - 3:
PlaySE(SE_SELECT);
- sub_81B36FC(taskId);
+ Task_TryCreateSelectionWindow(taskId);
break;
}
}
}
-static bool8 sub_81B15A4(u8 *slotPtr)
+static bool8 IsSelectedMonNotEgg(u8 *slotPtr)
{
if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_IS_EGG) == TRUE)
{
@@ -2461,108 +1302,109 @@ static bool8 sub_81B15A4(u8 *slotPtr)
return TRUE;
}
-static void sub_81B15D0(u8 taskId, s8 *ptr)
+static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr)
{
- switch (gUnknown_0203CEC8.unkB)
+ switch (gPartyMenu.action)
{
- case 1:
+ case PARTY_ACTION_SEND_OUT:
PlaySE(SE_HAZURE);
break;
- case 8:
- case 10:
+ case PARTY_ACTION_SWITCH:
+ case PARTY_ACTION_SOFTBOILED:
PlaySE(SE_SELECT);
- sub_81B407C(taskId);
+ FinishTwoMonAction(taskId);
break;
- case 13:
+ case PARTY_ACTION_MINIGAME:
PlaySE(SE_SELECT);
- sub_81B2210(taskId);
+ CancelParticipationPrompt(taskId);
break;
default:
PlaySE(SE_SELECT);
- if (sub_81B1660(taskId) != TRUE)
+ if (DisplayCancelChooseMonYesNo(taskId) != TRUE)
{
if (!sub_81221AC())
- gSpecialVar_0x8004 = 7;
- gUnknown_0203CEE8 = 0;
- *ptr = 7;
- sub_81B12C0(taskId);
+ gSpecialVar_0x8004 = PARTY_SIZE + 1;
+ gPartyMenuUseExitCallback = FALSE;
+ *slotPtr = PARTY_SIZE + 1;
+ Task_ClosePartyMenu(taskId);
}
break;
}
}
-static bool8 sub_81B1660(u8 taskId)
+static bool8 DisplayCancelChooseMonYesNo(u8 taskId)
{
const u8* stringPtr = NULL;
- if (gUnknown_0203CEC8.unk8_0 == 2)
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_CONTEST)
stringPtr = gText_CancelParticipation;
- else if (gUnknown_0203CEC8.unk8_0 == 4)
- stringPtr = sub_81B88BC();
+ else if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF)
+ stringPtr = GetFacilityCancelString();
if (stringPtr == NULL)
return FALSE;
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
StringExpandPlaceholders(gStringVar4, stringPtr);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B16D4;
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_CancelChooseMonYesNo;
return TRUE;
}
-static void sub_81B16D4(u8 taskId)
+static void Task_CancelChooseMonYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B1708;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleCancelChooseMonYesNoInput;
}
}
-static void sub_81B1708(u8 taskId)
+static void Task_HandleCancelChooseMonYesNoInput(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
- gUnknown_0203CEE8 = 0;
- gUnknown_0203CEC8.slotId = 7;
- sub_81B8558();
- sub_81B12C0(taskId);
+ gPartyMenuUseExitCallback = FALSE;
+ gPartyMenu.slotId = PARTY_SIZE + 1;
+ ClearSelectedPartyOrder();
+ Task_ClosePartyMenu(taskId);
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
- sub_81B1C1C(taskId);
+ Task_ReturnToChooseMonAfterText(taskId);
break;
}
}
-static u16 PartyMenuButtonHandler(s8 *ptr)
+static u16 PartyMenuButtonHandler(s8 *slotPtr)
{
s8 movementDir;
switch (gMain.newAndRepeatedKeys)
{
case DPAD_UP:
- movementDir = -1;
+ movementDir = MENU_DIR_UP;
break;
case DPAD_DOWN:
- movementDir = 1;
+ movementDir = MENU_DIR_DOWN;
break;
case DPAD_LEFT:
- movementDir = -2;
+ movementDir = MENU_DIR_LEFT;
break;
case DPAD_RIGHT:
- movementDir = 2;
+ movementDir = MENU_DIR_RIGHT;
break;
default:
- switch (sub_812210C())
+ switch (GetLRKeysPressedAndHeld())
{
- case 1:
- movementDir = -1;
+ case MENU_L_PRESSED:
+ movementDir = MENU_DIR_UP;
break;
- case 2:
- movementDir = 1;
+ case MENU_R_PRESSED:
+ movementDir = MENU_DIR_DOWN;
break;
default:
movementDir = 0;
@@ -2576,203 +1418,207 @@ static u16 PartyMenuButtonHandler(s8 *ptr)
if (movementDir)
{
- UpdateCurrentPartySelection(ptr, movementDir);
+ UpdateCurrentPartySelection(slotPtr, movementDir);
return 0;
}
- if ((gMain.newKeys & A_BUTTON) && *ptr == 7)
+ // Pressed Cancel
+ if ((gMain.newKeys & A_BUTTON) && *slotPtr == PARTY_SIZE + 1)
return 2;
return gMain.newKeys & (A_BUTTON | B_BUTTON);
}
-static void UpdateCurrentPartySelection(s8 *ptr, s8 movementDir)
+static void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir)
{
- s8 slot = *ptr;
- u8 mode = gUnknown_0203CEC8.mode;
+ s8 newSlotId = *slotPtr;
+ u8 layout = gPartyMenu.layout;
- if (mode == 0)
- SetNewPartySelectTarget1(ptr, movementDir);
+ if (layout == PARTY_LAYOUT_SINGLE)
+ UpdatePartySelectionSingleLayout(slotPtr, movementDir);
else
- SetNewPartySelectTarget2(ptr, movementDir);
+ UpdatePartySelectionDoubleLayout(slotPtr, movementDir);
- if (*ptr != slot)
+ if (*slotPtr != newSlotId)
{
PlaySE(SE_SELECT);
- sub_81B0FCC(slot, 0);
- sub_81B0FCC(*ptr, 1);
+ AnimatePartySlot(newSlotId, 0);
+ AnimatePartySlot(*slotPtr, 1);
}
}
-static void SetNewPartySelectTarget1(s8 *ptr, s8 b)
+static void UpdatePartySelectionSingleLayout(s8 *slotPtr, s8 movementDir)
{
- switch (b)
+ // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm
+ switch (movementDir)
{
- case -1:
- if (*ptr == 0)
+ case MENU_DIR_UP:
+ if (*slotPtr == 0)
{
- *ptr = 7;
+ *slotPtr = PARTY_SIZE + 1;
}
- else if (*ptr == 6)
+ else if (*slotPtr == PARTY_SIZE)
{
- *ptr = gPlayerPartyCount - 1;
+ *slotPtr = gPlayerPartyCount - 1;
}
- else if (*ptr == 7)
+ else if (*slotPtr == PARTY_SIZE + 1)
{
- if (gUnknown_0203CEC4->unk8_0)
- *ptr = 6;
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
else
- *ptr = gPlayerPartyCount - 1;
+ *slotPtr = gPlayerPartyCount - 1;
}
else
{
- (*ptr)--;
+ (*slotPtr)--;
}
break;
- case 1:
- if (*ptr == 7)
+ case MENU_DIR_DOWN:
+ if (*slotPtr == PARTY_SIZE + 1)
{
- *ptr = 0;
+ *slotPtr = 0;
}
else
{
- if (*ptr == gPlayerPartyCount - 1)
+ if (*slotPtr == gPlayerPartyCount - 1)
{
- if (gUnknown_0203CEC4->unk8_0)
- *ptr = 6;
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
else
- *ptr = 7;
+ *slotPtr = PARTY_SIZE + 1;
}
else
{
- (*ptr)++;
+ (*slotPtr)++;
}
}
break;
- case 2:
- if (gPlayerPartyCount != 1 && *ptr == 0)
+ case MENU_DIR_RIGHT:
+ if (gPlayerPartyCount != 1 && *slotPtr == 0)
{
- if (gUnknown_0203CEC4->unk8_1 == 0)
- *ptr = 1;
+ if (sPartyMenuInternal->lastSelectedSlot == 0)
+ *slotPtr = 1;
else
- *ptr = gUnknown_0203CEC4->unk8_1;
+ *slotPtr = sPartyMenuInternal->lastSelectedSlot;
}
break;
- case -2:
- if (*ptr != 0 && *ptr != 6 && *ptr != 7)
+ case MENU_DIR_LEFT:
+ if (*slotPtr != 0 && *slotPtr != PARTY_SIZE && *slotPtr != PARTY_SIZE + 1)
{
- gUnknown_0203CEC4->unk8_1 = *ptr;
- *ptr = 0;
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 0;
}
break;
}
}
-static void SetNewPartySelectTarget2(s8 *ptr, s8 b)
+static void UpdatePartySelectionDoubleLayout(s8 *slotPtr, s8 movementDir)
{
- s8 unk2 = b;
+ // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm
+ // newSlot is used temporarily as a movement direction during its later assignment
+ s8 newSlot = movementDir;
- switch (b)
+ switch (movementDir)
{
- case -1:
- if (*ptr == 0)
+ case MENU_DIR_UP:
+ if (*slotPtr == 0)
{
- *ptr = 7;
+ *slotPtr = PARTY_SIZE + 1;
break;
}
- else if (*ptr == 6)
+ else if (*slotPtr == PARTY_SIZE)
{
- *ptr = gPlayerPartyCount - 1;
+ *slotPtr = gPlayerPartyCount - 1;
break;
}
- else if (*ptr == 7)
+ else if (*slotPtr == PARTY_SIZE + 1)
{
- if (gUnknown_0203CEC4->unk8_0)
+ if (sPartyMenuInternal->chooseHalf)
{
- *ptr = 6;
+ *slotPtr = PARTY_SIZE;
break;
}
- (*ptr)--;
+ (*slotPtr)--;
}
- unk2 = sub_81B1B00(*ptr, unk2);
- if (unk2 != -1)
- *ptr = unk2;
+ newSlot = GetNewSlotDoubleLayout(*slotPtr, newSlot);
+ if (newSlot != -1)
+ *slotPtr = newSlot;
break;
- case 1:
- if (*ptr == 6)
+ case MENU_DIR_DOWN:
+ if (*slotPtr == PARTY_SIZE)
{
- *ptr = 7;
+ *slotPtr = PARTY_SIZE + 1;
}
- else if (*ptr == 7)
+ else if (*slotPtr == PARTY_SIZE + 1)
{
- *ptr = 0;
+ *slotPtr = 0;
}
else
{
- unk2 = sub_81B1B00(*ptr, 1);
- if (unk2 == -1)
+ newSlot = GetNewSlotDoubleLayout(*slotPtr, MENU_DIR_DOWN);
+ if (newSlot == -1)
{
- if (gUnknown_0203CEC4->unk8_0)
- *ptr = 6;
+ if (sPartyMenuInternal->chooseHalf)
+ *slotPtr = PARTY_SIZE;
else
- *ptr = 7;
+ *slotPtr = PARTY_SIZE + 1;
}
else
{
- *ptr = unk2;
+ *slotPtr = newSlot;
}
}
break;
- case 2:
- if (*ptr == 0)
+ case MENU_DIR_RIGHT:
+ if (*slotPtr == 0)
{
- if (gUnknown_0203CEC4->unk8_1 == 3)
+ if (sPartyMenuInternal->lastSelectedSlot == 3)
{
if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES) != SPECIES_NONE)
- *ptr = 3;
+ *slotPtr = 3;
}
else if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES) != SPECIES_NONE)
{
- *ptr = 2;
+ *slotPtr = 2;
}
}
- else if (*ptr == 1)
+ else if (*slotPtr == 1)
{
- if (gUnknown_0203CEC4->unk8_1 == 5)
+ if (sPartyMenuInternal->lastSelectedSlot == 5)
{
if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES) != SPECIES_NONE)
- *ptr = 5;
+ *slotPtr = 5;
}
else if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES) != SPECIES_NONE)
{
- *ptr = 4;
+ *slotPtr = 4;
}
}
break;
- case -2:
- if (*ptr == 2 || *ptr == 3)
+ case MENU_DIR_LEFT:
+ if (*slotPtr == 2 || *slotPtr == 3)
{
- gUnknown_0203CEC4->unk8_1 = *ptr;
- *ptr = 0;
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 0;
}
- else if (*ptr == 4 || *ptr == 5)
+ else if (*slotPtr == 4 || *slotPtr == 5)
{
- gUnknown_0203CEC4->unk8_1 = *ptr;
- *ptr = 1;
+ sPartyMenuInternal->lastSelectedSlot = *slotPtr;
+ *slotPtr = 1;
}
break;
}
}
-static s8 sub_81B1B00(s8 a, s8 b)
+static s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir)
{
while (TRUE)
{
- a += b;
- if ((u8)a >= 6)
+ slotId += movementDir;
+ if ((u8)slotId >= PARTY_SIZE)
return -1;
- if (GetMonData(&gPlayerParty[a], MON_DATA_SPECIES) != SPECIES_NONE)
- return a;
+ if (GetMonData(&gPlayerParty[slotId], MON_DATA_SPECIES) != SPECIES_NONE)
+ return slotId;
}
}
@@ -2782,21 +1628,23 @@ u8* GetMonNickname(struct Pokemon *mon, u8 *dest)
return StringGetEnd10(dest);
}
-u8 sub_81B1B5C(const u8* str, u8 b)
+#define tKeepOpen data[0]
+
+u8 DisplayPartyMenuMessage(const u8* str, bool8 keepOpen)
{
u8 taskId;
- sub_81B3300(str);
- taskId = CreateTask(sub_81B1B8C, 1);
- gTasks[taskId].data[0] = b;
+ PartyMenuPrintText(str);
+ taskId = CreateTask(Task_PrintAndWaitForText, 1);
+ gTasks[taskId].tKeepOpen = keepOpen;
return taskId;
}
-static void sub_81B1B8C(u8 taskId)
+static void Task_PrintAndWaitForText(u8 taskId)
{
if (RunTextPrintersRetIsActive(6) != TRUE)
{
- if (gTasks[taskId].data[0] == 0)
+ if (gTasks[taskId].tKeepOpen == FALSE)
{
ClearStdWindowAndFrameToTransparent(6, 0);
ClearWindowTilemap(6);
@@ -2805,75 +1653,77 @@ static void sub_81B1B8C(u8 taskId)
}
}
-bool8 sub_81B1BD4(void)
+#undef tKeepOpen
+
+bool8 IsPartyMenuTextPrinterActive(void)
{
- return FuncIsActiveTask(sub_81B1B8C);
+ return FuncIsActiveTask(Task_PrintAndWaitForText);
}
-static void sub_81B1BE8(u8 taskId)
+static void Task_WaitForLinkAndReturnToChooseMon(u8 taskId)
{
if (sub_81221EC() != TRUE)
{
- display_pokemon_menu_message(0);
- gTasks[taskId].func = sub_81B1370;
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
}
-static void sub_81B1C1C(u8 taskId)
+static void Task_ReturnToChooseMonAfterText(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
ClearStdWindowAndFrameToTransparent(6, 0);
ClearWindowTilemap(6);
if (sub_81221AC() == TRUE)
{
- gTasks[taskId].func = sub_81B1BE8;
+ gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon;
}
else
{
- display_pokemon_menu_message(0);
- gTasks[taskId].func = sub_81B1370;
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
}
}
-static void sub_81B1C84(struct Pokemon *mon, u16 item, u8 c, u8 unused)
+static void DisplayGaveHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen, u8 unused)
{
GetMonNickname(mon, gStringVar1);
CopyItemName(item, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_PkmnWasGivenItem);
- sub_81B1B5C(gStringVar4, c);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
schedule_bg_copy_tilemap_to_vram(2);
}
-static void sub_81B1CD0(struct Pokemon *mon, u16 item, u8 c)
+static void DisplayTookHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen)
{
GetMonNickname(mon, gStringVar1);
CopyItemName(item, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_ReceivedItemFromPkmn);
- sub_81B1B5C(gStringVar4, c);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
schedule_bg_copy_tilemap_to_vram(2);
}
-static void sub_81B1D1C(struct Pokemon *mon, u16 item, u8 c)
+static void DisplayAlreadyHoldingItemSwitchMessage(struct Pokemon *mon, u16 item, bool8 keepOpen)
{
GetMonNickname(mon, gStringVar1);
CopyItemName(item, gStringVar2);
- StringExpandPlaceholders(gStringVar4, gText_SwitchPkmnItem);
- sub_81B1B5C(gStringVar4, c);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyHoldingItemSwitch);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
schedule_bg_copy_tilemap_to_vram(2);
}
-static void sub_81B1D68(u16 item, u16 item2, u8 c)
+static void DisplaySwitchedHeldItemMessage(u16 item, u16 item2, bool8 keepOpen)
{
CopyItemName(item, gStringVar1);
CopyItemName(item2, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_SwitchedPkmnItem);
- sub_81B1B5C(gStringVar4, c);
+ DisplayPartyMenuMessage(gStringVar4, keepOpen);
schedule_bg_copy_tilemap_to_vram(2);
}
-static void sub_81B1DB8(struct Pokemon *mon, u16 item)
+static void GiveItemToMon(struct Pokemon *mon, u16 item)
{
u8 itemBytes[2];
@@ -2901,71 +1751,89 @@ static u8 TryTakeMonItem(struct Pokemon* mon)
return 2;
}
-static void pokemon_item_not_removed(u16 itemUnused)
+static void BufferBagFullCantTakeItemMessage(u16 itemUnused)
{
StringExpandPlaceholders(gStringVar4, gText_BagFullCouldNotRemoveItem);
}
-static void sub_81B1E60(u8 taskId)
+#define tHP data[0]
+#define tMaxHP data[1]
+#define tHPIncrement data[2]
+#define tHPToAdd data[3]
+#define tPartyId data[4]
+#define tStartHP data[5]
+
+static void Task_PartyMenuModifyHP(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- data[0] += data[2];
- data[3]--;
- SetMonData(&gPlayerParty[data[4]], MON_DATA_HP, &data[0]);
- DisplayPartyPokemonHPCheck(&gPlayerParty[data[4]], &gUnknown_0203CEDC[data[4]], 1);
- DisplayPartyPokemonHPBarCheck(&gPlayerParty[data[4]], &gUnknown_0203CEDC[data[4]]);
- if (data[3] == 0 || data[0] == 0 || data[0] == data[1])
+ tHP += tHPIncrement;
+ tHPToAdd--;
+ SetMonData(&gPlayerParty[tPartyId], MON_DATA_HP, &tHP);
+ DisplayPartyPokemonHPCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId], 1);
+ DisplayPartyPokemonHPBarCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId]);
+ if (tHPToAdd == 0 || tHP == 0 || tHP == tMaxHP)
{
- if (data[0] > data[5])
- ConvertIntToDecimalStringN(gStringVar2, data[0] - data[5], 0, 3);
+ // If HP was recovered, buffer the amount recovered
+ if (tHP > tStartHP)
+ ConvertIntToDecimalStringN(gStringVar2, tHP - tStartHP, STR_CONV_MODE_LEFT_ALIGN, 3);
+
SwitchTaskToFollowupFunc(taskId);
}
}
-void sub_81B1F18(u8 taskId, u8 slot, s8 c, s16 HPDifference, TaskFunc func)
+void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 hpDifference, TaskFunc task)
{
struct Pokemon *mon = &gPlayerParty[slot];
s16 *data = gTasks[taskId].data;
- data[0] = GetMonData(mon, MON_DATA_HP);
- data[1] = GetMonData(mon, MON_DATA_MAX_HP);
- data[2] = c;
- data[3] = HPDifference;
- data[4] = slot;
- data[5] = data[0];
- SetTaskFuncWithFollowupFunc(taskId, sub_81B1E60, func);
+ tHP = GetMonData(mon, MON_DATA_HP);
+ tMaxHP = GetMonData(mon, MON_DATA_MAX_HP);
+ tHPIncrement = hpIncrement;
+ tHPToAdd = hpDifference;
+ tPartyId = slot;
+ tStartHP = tHP;
+ SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, task);
}
-static void sub_81B1FA8(u8 taskId, u8 b, u32 hp)
+// The usage of hp in this function is mostly nonsense
+// Because caseId is always passed 0, none of the other cases ever occur
+static void ResetHPTaskData(u8 taskId, u8 caseId, u32 hp)
{
s16 *data = gTasks[taskId].data;
- switch (b) // only case 0 is used
+ switch (caseId) // always zero
{
case 0:
- data[0] = hp;
- data[5] = hp;
+ tHP = hp;
+ tStartHP = hp;
break;
case 1:
- data[1] = hp;
+ tMaxHP = hp;
break;
case 2:
- data[2] = hp;
+ tHPIncrement = hp;
break;
case 3:
- data[3] = hp;
+ tHPToAdd = hp;
break;
case 4:
- data[4] = hp;
+ tPartyId = hp;
break;
case 5:
- SetTaskFuncWithFollowupFunc(taskId, sub_81B1E60, (TaskFunc)hp); // >casting hp as a taskfunc
+ SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, (TaskFunc)hp); // >casting hp as a taskfunc
break;
}
}
-u8 pokemon_ailments_get_primary(u32 status)
+#undef tHP
+#undef tMaxHP
+#undef tHPIncrement
+#undef tHPToAdd
+#undef tPartyId
+#undef tStartHP
+
+u8 GetAilmentFromStatus(u32 status)
{
if (status & STATUS1_PSN_ANY)
return AILMENT_PSN;
@@ -2986,7 +1854,7 @@ u8 GetMonAilment(struct Pokemon *mon)
if (GetMonData(mon, MON_DATA_HP) == 0)
return AILMENT_FNT;
- ailment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS));
+ ailment = GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS));
if (ailment != AILMENT_NONE)
return ailment;
if (CheckPartyPokerus(mon, 0))
@@ -2994,97 +1862,97 @@ u8 GetMonAilment(struct Pokemon *mon)
return AILMENT_NONE;
}
-static void sub_81B209C(void)
+static void SetPartyMonsAllowedInMinigame(void)
{
u16 *ptr;
- if (gUnknown_0203CEC8.unk8_0 == 11)
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME)
{
u8 i;
- ptr = &gUnknown_0203CEC8.unkE;
- gUnknown_0203CEC8.unkE = 0;
+ ptr = &gPartyMenu.data1;
+ gPartyMenu.data1 = 0;
if (gSpecialVar_0x8005 == 0)
{
for (i = 0; i < gPlayerPartyCount; i++)
- *ptr += sub_81B2134(&gPlayerParty[i]) << i;
+ *ptr += IsMonAllowedInPokemonJump(&gPlayerParty[i]) << i;
}
else
{
for (i = 0; i < gPlayerPartyCount; i++)
- *ptr += sub_81B2164(&gPlayerParty[i]) << i;
+ *ptr += IsMonAllowedInDodrioBerryPicking(&gPlayerParty[i]) << i;
}
}
}
-static bool16 sub_81B2134(struct Pokemon *mon)
+static bool16 IsMonAllowedInPokemonJump(struct Pokemon *mon)
{
- if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && sub_802C908(GetMonData(mon, MON_DATA_SPECIES)))
+ if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && IsSpeciesAllowedInPokemonJump(GetMonData(mon, MON_DATA_SPECIES)))
return TRUE;
return FALSE;
}
-// Dodrio Berry Picking select?
-static bool16 sub_81B2164(struct Pokemon *mon)
+static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *mon)
{
if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_DODRIO)
return TRUE;
return FALSE;
}
-static bool8 sub_81B218C(u8 slot)
+static bool8 IsMonAllowedInMinigame(u8 slot)
{
- if (!((gUnknown_0203CEC8.unkE >> slot) & 1))
+ if (!((gPartyMenu.data1 >> slot) & 1))
return FALSE;
return TRUE;
}
-static void sub_81B21AC(u8 taskId, u8 slot)
+static void TryEnterMonForMinigame(u8 taskId, u8 slot)
{
- if (sub_81B218C(slot) == TRUE)
+ if (IsMonAllowedInMinigame(slot) == TRUE)
{
PlaySE(SE_SELECT);
gSpecialVar_0x8004 = slot;
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
}
else
{
PlaySE(SE_HAZURE);
- sub_81B1B5C(gText_PkmnCantParticipate, 0);
+ DisplayPartyMenuMessage(gText_PkmnCantParticipate, FALSE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B1C1C;
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
}
-static void sub_81B2210(u8 taskId)
+static void CancelParticipationPrompt(u8 taskId)
{
- sub_81B1B5C(gText_CancelParticipation, 1);
+ DisplayPartyMenuMessage(gText_CancelParticipation, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B2248;
+ gTasks[taskId].func = Task_CancelParticipationYesNo;
}
-static void sub_81B2248(u8 taskId)
+static void Task_CancelParticipationYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B227C;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleCancelParticipationYesNoInput;
}
}
-static void sub_81B227C(u8 taskId)
+static void Task_HandleCancelParticipationYesNoInput(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
- gSpecialVar_0x8004 = 7;
- sub_81B12C0(taskId);
+ gSpecialVar_0x8004 = PARTY_SIZE + 1;
+ Task_ClosePartyMenu(taskId);
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
- gTasks[taskId].func = sub_81B1C1C;
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
break;
}
}
@@ -3132,23 +2000,23 @@ static bool8 CanLearnTutorMove(u16 species, u8 tutor)
return FALSE;
}
-static void sub_81B239C(u8 a)
+static void InitPartyMenuWindows(u8 layout)
{
u8 i;
- switch (a)
+ switch (layout)
{
- case 0:
- InitWindows(gUnknown_08615810);
+ case PARTY_LAYOUT_SINGLE:
+ InitWindows(sSinglePartyMenuWindowTemplate);
break;
- case 1:
- InitWindows(gUnknown_08615850);
+ case PARTY_LAYOUT_DOUBLE:
+ InitWindows(sDoublePartyMenuWindowTemplate);
break;
- case 2:
- InitWindows(gUnknown_08615890);
+ case PARTY_LAYOUT_MULTI:
+ InitWindows(sMultiPartyMenuWindowTemplate);
break;
- default:
- InitWindows(gUnknown_086158D0);
+ default: // PARTY_LAYOUT_MULTI_SHOWCASE
+ InitWindows(sShowcaseMultiPartyMenuWindowTemplate);
break;
}
DeactivateAllTextPrinters();
@@ -3159,51 +2027,53 @@ static void sub_81B239C(u8 a)
LoadPalette(gUnknown_0860F074, 0xF0, 0x20);
}
-static void sub_81B2428(bool8 a)
+static void CreateCancelConfirmWindows(bool8 chooseHalf)
{
- u8 firstWindowId;
- u8 windowId;
+ u8 confirmWindowId;
+ u8 cancelWindowId;
u8 offset;
u8 mainOffset;
- if (gUnknown_0203CEC8.unk8_0 != 5)
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_MULTI_SHOWCASE)
{
- if (a == TRUE)
+ if (chooseHalf == TRUE)
{
- firstWindowId = AddWindow(&gUnknown_08615918);
- FillWindowPixelBuffer(firstWindowId, PIXEL_FILL(0));
+ confirmWindowId = AddWindow(&sConfirmButtonWindowTemplate);
+ FillWindowPixelBuffer(confirmWindowId, PIXEL_FILL(0));
mainOffset = GetStringCenterAlignXOffset(0, gMenuText_Confirm, 48);
- AddTextPrinterParameterized4(firstWindowId, 0, mainOffset, 1, 0, 0, sFontColorTable[0], -1, gMenuText_Confirm);
- PutWindowTilemap(firstWindowId);
- CopyWindowToVram(firstWindowId, 2);
- windowId = AddWindow(&gUnknown_08615910);
+ AddTextPrinterParameterized4(confirmWindowId, 0, mainOffset, 1, 0, 0, sFontColorTable[0], -1, gMenuText_Confirm);
+ PutWindowTilemap(confirmWindowId);
+ CopyWindowToVram(confirmWindowId, 2);
+ cancelWindowId = AddWindow(&sMultiCancelButtonWindowTemplate);
offset = 0;
}
else
{
- windowId = AddWindow(&gUnknown_08615908);
+ cancelWindowId = AddWindow(&sCancelButtonWindowTemplate);
offset = 3;
}
- FillWindowPixelBuffer(windowId, PIXEL_FILL(0));
- if (gUnknown_0203CEC8.unk8_0 != 10)
+ FillWindowPixelBuffer(cancelWindowId, PIXEL_FILL(0));
+
+ // Branches are functionally identical. Second branch is never reached, Spin Trade wasnt fully implemented
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_SPIN_TRADE)
{
mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel, 48);
- AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel);
+ AddTextPrinterParameterized3(cancelWindowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel);
}
else
{
mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel2, 48);
- AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel2);
+ AddTextPrinterParameterized3(cancelWindowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel2);
}
- PutWindowTilemap(windowId);
- CopyWindowToVram(windowId, 2);
+ PutWindowTilemap(cancelWindowId);
+ CopyWindowToVram(cancelWindowId, 2);
schedule_bg_copy_tilemap_to_vram(0);
}
}
-static u16* GetPartyMenuPaletteFromBuffer(u8 paletteId)
+static u16* GetPartyMenuPalBufferPtr(u8 paletteId)
{
- return &gUnknown_0203CEC4->palBuffer[paletteId];
+ return &sPartyMenuInternal->palBuffer[paletteId];
}
static void BlitBitmapToPartyWindow(u8 windowId, const u8 *b, u8 c, u8 x, u8 y, u8 width, u8 height)
@@ -3216,14 +2086,14 @@ static void BlitBitmapToPartyWindow(u8 windowId, const u8 *b, u8 c, u8 x, u8 y,
for (i = 0; i < height; i++)
{
for (j = 0; j < width; j++)
- CpuCopy16(GetPartyMiscGraphicsTile(b[x + j + ((y + i) * c)]), &pixels[(i * width + j) * 32], 32);
+ CpuCopy16(GetPartyMenuBgTile(b[x + j + ((y + i) * c)]), &pixels[(i * width + j) * 32], 32);
}
BlitBitmapToWindow(windowId, pixels, x * 8, y * 8, width * 8, height * 8);
Free(pixels);
}
}
-static void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg)
+static void BlitBitmapToPartyWindow_LeftColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg)
{
if (width == 0 && height == 0)
{
@@ -3236,7 +2106,7 @@ static void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width,
BlitBitmapToPartyWindow(windowId, sMainSlotTileNums_Egg, 10, x, y, width, height);
}
-static void BlitBitmapToPartyWindow_Default2(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg)
+static void BlitBitmapToPartyWindow_RightColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg)
{
if (width == 0 && height == 0)
{
@@ -3254,126 +2124,87 @@ static void DrawEmptySlot(u8 windowId)
BlitBitmapToPartyWindow(windowId, sEmptySlotTileNums, 18, 0, 0, 18, 3);
}
-static void UpdateSelectedPartyBox(struct Struct203CEDC *ptr, u8 bitfield)
+#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \
+{ \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, 2); \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, 2); \
+ LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, 2); \
+}
+
+static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags)
{
- u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16;
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
- if (bitfield & 0x40)
+ if (palFlags & PARTY_PAL_NO_MON)
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[0]), gUnknown_08615AC0[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[1]), gUnknown_08615AC0[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[2]), gUnknown_08615AC0[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxNoMonPalIds, sPartyBoxNoMonPalOffsets);
}
- else if (bitfield & 0x20)
+ else if (palFlags & PARTY_PAL_TO_SOFTBOIL)
{
- if (bitfield & 1)
+ if (palFlags & PARTY_PAL_SELECTED)
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
}
else
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
}
}
- else if (bitfield & 0x10)
+ else if (palFlags & PARTY_PAL_SWITCHING)
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
}
- else if (bitfield & 4)
+ else if (palFlags & PARTY_PAL_TO_SWITCH)
{
- if (bitfield & 1)
+ if (palFlags & PARTY_PAL_SELECTED)
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
}
else
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2);
}
}
- else if (bitfield & 2)
+ else if (palFlags & PARTY_PAL_FAINTED)
{
- if (bitfield & 1)
+ if (palFlags & PARTY_PAL_SELECTED)
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionFaintedPalIds, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
}
else
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxFaintedPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxFaintedPalIds2, sPartyBoxPalOffsets2);
}
}
- else if (bitfield & 8)
+ else if (palFlags & PARTY_PAL_MULTI_ALT)
{
- if (bitfield & 1)
+ if (palFlags & PARTY_PAL_SELECTED)
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionMultiPalIds, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
}
else
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxMultiPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxMultiPalIds2, sPartyBoxPalOffsets2);
}
}
- else if (bitfield & 1)
+ else if (palFlags & PARTY_PAL_SELECTED)
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2);
}
else
{
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[0]), gUnknown_08615ABA[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[1]), gUnknown_08615ABA[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[2]), gUnknown_08615ABA[2] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[0]), gUnknown_08615ABD[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[1]), gUnknown_08615ABD[1] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[2]), gUnknown_08615ABD[2] + palNum, 2);
+ LOAD_PARTY_BOX_PAL(sPartyBoxEmptySlotPalIds1, sPartyBoxPalOffsets1);
+ LOAD_PARTY_BOX_PAL(sPartyBoxEmptySlotPalIds2, sPartyBoxPalOffsets2);
}
}
@@ -3382,20 +2213,20 @@ static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, c
AddTextPrinterParameterized3(windowId, 0, align[0], align[1], sFontColorTable[color], 0, str);
}
-static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
{
u8 nickname[POKEMON_NAME_LENGTH + 1];
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
{
if (c == 1)
- ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[0] >> 3, ptr->unk0->unk4[1] >> 3, ptr->unk0->unk4[2] >> 3, ptr->unk0->unk4[3] >> 3, 0);
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[0] >> 3, menuBox->infoRects->dimensions[1] >> 3, menuBox->infoRects->dimensions[2] >> 3, menuBox->infoRects->dimensions[3] >> 3, FALSE);
GetMonNickname(mon, nickname);
- DisplayPartyPokemonBarDetail(ptr->windowId, nickname, 0, ptr->unk0->unk4);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, nickname, 0, menuBox->infoRects->dimensions);
}
}
-static void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+static void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
{
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
{
@@ -3403,34 +2234,34 @@ static void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct Struct203C
if (ailment == AILMENT_NONE || ailment == AILMENT_PKRS)
{
if (c != 0)
- ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[4] >> 3, (ptr->unk0->unk4[5] >> 3) + 1, ptr->unk0->unk4[6] >> 3, ptr->unk0->unk4[7] >> 3, 0);
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[4] >> 3, (menuBox->infoRects->dimensions[5] >> 3) + 1, menuBox->infoRects->dimensions[6] >> 3, menuBox->infoRects->dimensions[7] >> 3, FALSE);
if (c != 2)
- DisplayPartyPokemonLevel(GetMonData(mon, MON_DATA_LEVEL), ptr);
+ DisplayPartyPokemonLevel(GetMonData(mon, MON_DATA_LEVEL), menuBox);
}
}
}
-static void DisplayPartyPokemonLevel(u8 level, struct Struct203CEDC *ptr)
+static void DisplayPartyPokemonLevel(u8 level, struct PartyMenuBox *menuBox)
{
- ConvertIntToDecimalStringN(gStringVar2, level, 0, 3);
+ ConvertIntToDecimalStringN(gStringVar2, level, STR_CONV_MODE_LEFT_ALIGN, 3);
StringCopy(gStringVar1, gText_LevelSymbol);
StringAppend(gStringVar1, gStringVar2);
- DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[4]);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[4]);
}
-static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
{
u8 nickname[POKEMON_NAME_LENGTH + 1];
if (c == 1)
- ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[8] >> 3, (ptr->unk0->unk4[9] >> 3) + 1, ptr->unk0->unk4[10] >> 3, ptr->unk0->unk4[11] >> 3, 0);
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[8] >> 3, (menuBox->infoRects->dimensions[9] >> 3) + 1, menuBox->infoRects->dimensions[10] >> 3, menuBox->infoRects->dimensions[11] >> 3, FALSE);
GetMonNickname(mon, nickname);
- DisplayPartyPokemonGender(GetMonGender(mon), GetMonData(mon, MON_DATA_SPECIES), nickname, ptr);
+ DisplayPartyPokemonGender(GetMonGender(mon), GetMonData(mon, MON_DATA_SPECIES), nickname, menuBox);
}
-static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct Struct203CEDC *ptr)
+static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox)
{
- u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16;
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
if (species == SPECIES_NONE)
return;
@@ -3439,111 +2270,111 @@ static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, stru
switch (gender)
{
case MON_MALE:
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC3[0]), gUnknown_08615AB6[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC3[1]), gUnknown_08615AB6[1] + palNum, 2);
- DisplayPartyPokemonBarDetail(ptr->windowId, gText_MaleSymbol, 2, &ptr->unk0->unk4[8]);
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, 2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gText_MaleSymbol, 2, &menuBox->infoRects->dimensions[8]);
break;
case MON_FEMALE:
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC5[0]), gUnknown_08615AB6[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC5[1]), gUnknown_08615AB6[1] + palNum, 2);
- DisplayPartyPokemonBarDetail(ptr->windowId, gText_FemaleSymbol, 2, &ptr->unk0->unk4[8]);
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, 2);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gText_FemaleSymbol, 2, &menuBox->infoRects->dimensions[8]);
break;
}
}
-static void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+static void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
{
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
{
if (c != 0)
- ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[12] >> 3, (ptr->unk0->unk4[13] >> 3) + 1, ptr->unk0->unk4[14] >> 3, ptr->unk0->unk4[15] >> 3, 0);
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[12] >> 3, (menuBox->infoRects->dimensions[13] >> 3) + 1, menuBox->infoRects->dimensions[14] >> 3, menuBox->infoRects->dimensions[15] >> 3, FALSE);
if (c != 2)
- DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), ptr);
+ DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), menuBox);
}
}
-static void DisplayPartyPokemonHP(u16 hp, struct Struct203CEDC *ptr)
+static void DisplayPartyPokemonHP(u16 hp, struct PartyMenuBox *menuBox)
{
- u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, 1, 3);
+ u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, STR_CONV_MODE_RIGHT_ALIGN, 3);
strOut[0] = CHAR_SLASH;
strOut[1] = EOS;
- DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[12]);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[12]);
}
-static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
{
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
{
if (c != 0)
- ptr->unk0->unk0(ptr->windowId, (ptr->unk0->unk4[16] >> 3) + 1, (ptr->unk0->unk4[17] >> 3) + 1, ptr->unk0->unk4[18] >> 3, ptr->unk0->unk4[19] >> 3, 0);
+ menuBox->infoRects->blitFunc(menuBox->windowId, (menuBox->infoRects->dimensions[16] >> 3) + 1, (menuBox->infoRects->dimensions[17] >> 3) + 1, menuBox->infoRects->dimensions[18] >> 3, menuBox->infoRects->dimensions[19] >> 3, FALSE);
if (c != 2)
- DisplayPartyPokemonMaxHP(GetMonData(mon, MON_DATA_MAX_HP), ptr);
+ DisplayPartyPokemonMaxHP(GetMonData(mon, MON_DATA_MAX_HP), menuBox);
}
}
-static void DisplayPartyPokemonMaxHP(u16 maxhp, struct Struct203CEDC *ptr)
+static void DisplayPartyPokemonMaxHP(u16 maxhp, struct PartyMenuBox *menuBox)
{
- ConvertIntToDecimalStringN(gStringVar2, maxhp, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar2, maxhp, STR_CONV_MODE_RIGHT_ALIGN, 3);
StringCopy(gStringVar1, gText_Slash);
StringAppend(gStringVar1, gStringVar2);
- DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[16]);
+ DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[16]);
}
-static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct Struct203CEDC *ptr)
+static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox)
{
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
- DisplayPartyPokemonHPBar(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), ptr);
+ DisplayPartyPokemonHPBar(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), menuBox);
}
-static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct Struct203CEDC *ptr)
+static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox)
{
- u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16;
+ u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16;
u8 hpFraction;
switch (GetHPBarLevel(hp, maxhp))
{
case HP_BAR_GREEN:
case HP_BAR_FULL:
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC7[0]), gUnknown_08615AB8[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC7[1]), gUnknown_08615AB8[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
break;
case HP_BAR_YELLOW:
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC9[0]), gUnknown_08615AB8[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC9[1]), gUnknown_08615AB8[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
break;
default:
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACB[0]), gUnknown_08615AB8[0] + palNum, 2);
- LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACB[1]), gUnknown_08615AB8[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, 2);
break;
}
- hpFraction = GetScaledHPFraction(hp, maxhp, ptr->unk0->unk4[22]);
- FillWindowPixelRect(ptr->windowId, gUnknown_08615AB8[1], ptr->unk0->unk4[20], ptr->unk0->unk4[21], hpFraction, 1);
- FillWindowPixelRect(ptr->windowId, gUnknown_08615AB8[0], ptr->unk0->unk4[20], ptr->unk0->unk4[21] + 1, hpFraction, 2);
- if (hpFraction != ptr->unk0->unk4[22])
+ hpFraction = GetScaledHPFraction(hp, maxhp, menuBox->infoRects->dimensions[22]);
+ FillWindowPixelRect(menuBox->windowId, sHPBarPalOffsets[1], menuBox->infoRects->dimensions[20], menuBox->infoRects->dimensions[21], hpFraction, 1);
+ FillWindowPixelRect(menuBox->windowId, sHPBarPalOffsets[0], menuBox->infoRects->dimensions[20], menuBox->infoRects->dimensions[21] + 1, hpFraction, 2);
+ if (hpFraction != menuBox->infoRects->dimensions[22])
{
// This appears to be an alternating fill
- FillWindowPixelRect(ptr->windowId, 0x0D, ptr->unk0->unk4[20] + hpFraction, ptr->unk0->unk4[21], ptr->unk0->unk4[22] - hpFraction, 1);
- FillWindowPixelRect(ptr->windowId, 0x02, ptr->unk0->unk4[20] + hpFraction, ptr->unk0->unk4[21] + 1, ptr->unk0->unk4[22] - hpFraction, 2);
+ FillWindowPixelRect(menuBox->windowId, 0x0D, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21], menuBox->infoRects->dimensions[22] - hpFraction, 1);
+ FillWindowPixelRect(menuBox->windowId, 0x02, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21] + 1, menuBox->infoRects->dimensions[22] - hpFraction, 2);
}
- CopyWindowToVram(ptr->windowId, 2);
+ CopyWindowToVram(menuBox->windowId, 2);
}
-static void DisplayPartyPokemonOtherText(u8 stringID, struct Struct203CEDC *ptr, u8 c)
+static void DisplayPartyPokemonDescriptionText(u8 stringID, struct PartyMenuBox *menuBox, u8 c)
{
- if (c != 0)
+ if (c)
{
- int unk = ((ptr->unk0->unk1C % 8) + ptr->unk0->unk1E + 7) / 8;
- int unk2 = ((ptr->unk0->unk1D % 8) + ptr->unk0->unk1F + 7) / 8;
- ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk1C >> 3, ptr->unk0->unk1D >> 3, unk, unk2, 1);
+ int width = ((menuBox->infoRects->descTextLeft % 8) + menuBox->infoRects->descTextWidth + 7) / 8;
+ int height = ((menuBox->infoRects->descTextTop % 8) + menuBox->infoRects->descTextHeight + 7) / 8;
+ menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->descTextLeft >> 3, menuBox->infoRects->descTextTop >> 3, width, height, TRUE);
}
if (c != 2)
- AddTextPrinterParameterized3(ptr->windowId, 1, ptr->unk0->unk1C, ptr->unk0->unk1D, sFontColorTable[0], 0, sSelectionStringTable[stringID]);
+ AddTextPrinterParameterized3(menuBox->windowId, 1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringID]);
}
-static void sub_81B302C(u8 *ptr)
+static void PartyMenuRemoveWindow(u8 *ptr)
{
if (*ptr != 0xFF)
{
@@ -3554,166 +2385,169 @@ static void sub_81B302C(u8 *ptr)
}
}
-void display_pokemon_menu_message(u32 stringID)
+void DisplayPartyMenuStdMessage(u32 stringId)
{
- u8 *windowPtr = &gUnknown_0203CEC4->windowId[1];
+ u8 *windowPtr = &sPartyMenuInternal->windowId[1];
if (*windowPtr != 0xFF)
- sub_81B302C(windowPtr);
+ PartyMenuRemoveWindow(windowPtr);
- if (stringID != 0x7F)
+ if (stringId != PARTY_MSG_NONE)
{
- switch (stringID)
+ switch (stringId)
{
- case 21:
- *windowPtr = AddWindow(&gUnknown_08615928);
+ case PARTY_MSG_DO_WHAT_WITH_MON:
+ *windowPtr = AddWindow(&sDoWhatWithMonMsgWindowTemplate);
break;
- case 24:
- *windowPtr = AddWindow(&gUnknown_08615930);
+ case PARTY_MSG_DO_WHAT_WITH_ITEM:
+ *windowPtr = AddWindow(&sDoWhatWithItemMsgWindowTemplate);
break;
- case 25:
- *windowPtr = AddWindow(&gUnknown_08615938);
+ case PARTY_MSG_DO_WHAT_WITH_MAIL:
+ *windowPtr = AddWindow(&sDoWhatWithMailMsgWindowTemplate);
break;
- case 22:
- case 23:
- *windowPtr = AddWindow(&gUnknown_08615940);
+ case PARTY_MSG_RESTORE_WHICH_MOVE:
+ case PARTY_MSG_BOOST_PP_WHICH_MOVE:
+ *windowPtr = AddWindow(&sWhichMoveMsgWindowTemplate);
break;
- case 26:
- *windowPtr = AddWindow(&gUnknown_08615948);
+ case PARTY_MSG_ALREADY_HOLDING_ONE:
+ *windowPtr = AddWindow(&sAlreadyHoldingOneMsgWindowTemplate);
break;
default:
- *windowPtr = AddWindow(&gUnknown_08615920);
+ *windowPtr = AddWindow(&sDefaultPartyMsgWindowTemplate);
break;
}
- if (stringID == 0)
+
+ if (stringId == PARTY_MSG_CHOOSE_MON)
{
- if (gUnknown_0203CEC4->unk8_0)
- stringID = 2;
- else if (sub_81B314C() == FALSE)
- stringID = 1;
+ if (sPartyMenuInternal->chooseHalf)
+ stringId = PARTY_MSG_CHOOSE_MON_AND_CONFIRM;
+ else if (!ShouldUseChooseMonText())
+ stringId = PARTY_MSG_CHOOSE_MON_OR_CANCEL;
}
DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x4F, 0xD);
- StringExpandPlaceholders(gStringVar4, sActionStringTable[stringID]);
+ StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]);
AddTextPrinterParameterized(*windowPtr, 1, gStringVar4, 0, 1, 0, 0);
schedule_bg_copy_tilemap_to_vram(2);
}
}
-static bool8 sub_81B314C(void)
+static bool8 ShouldUseChooseMonText(void)
{
struct Pokemon *party = gPlayerParty;
u8 i;
- u8 j = 0;
+ u8 numAliveMons = 0;
- if (gUnknown_0203CEC8.unkB == 1)
+ if (gPartyMenu.action == PARTY_ACTION_SEND_OUT)
return TRUE;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && (GetMonData(&party[i], MON_DATA_HP) != 0 || GetMonData(&party[i], MON_DATA_IS_EGG)))
- j++;
- if (j > 1)
+ numAliveMons++;
+ if (numAliveMons > 1)
return TRUE;
}
return FALSE;
}
-static u8 sub_81B31B0(u8 a)
+static u8 DisplaySelectionWindow(u8 windowType)
{
struct WindowTemplate window;
u8 cursorDimension;
u8 fontAttribute;
u8 i;
- switch (a)
+ switch (windowType)
{
- case 0:
- SetWindowTemplateFields(&window, 2, 19, 19 - (gUnknown_0203CEC4->listSize * 2), 10, gUnknown_0203CEC4->listSize * 2, 14, 0x2E9);
+ case SELECTWINDOW_ACTIONS:
+ SetWindowTemplateFields(&window, 2, 19, 19 - (sPartyMenuInternal->numActions * 2), 10, sPartyMenuInternal->numActions * 2, 14, 0x2E9);
break;
- case 1:
- window = gUnknown_08615950;
+ case SELECTWINDOW_ITEM:
+ window = sItemGiveTakeWindowTemplate;
break;
- case 2:
- window = gUnknown_08615958;
+ case SELECTWINDOW_MAIL:
+ window = sMailReadTakeWindowTemplate;
break;
- default:
- window = gUnknown_08615960;
+ default: // SELECTWINDOW_MOVES
+ window = sMoveSelectWindowTemplate;
break;
}
- gUnknown_0203CEC4->windowId[0] = AddWindow(&window);
- DrawStdFrameWithCustomTileAndPalette(gUnknown_0203CEC4->windowId[0], FALSE, 0x4F, 13);
- if (a == 3)
- return gUnknown_0203CEC4->windowId[0];
+ sPartyMenuInternal->windowId[0] = AddWindow(&window);
+ DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13);
+ if (windowType == SELECTWINDOW_MOVES)
+ return sPartyMenuInternal->windowId[0];
cursorDimension = GetMenuCursorDimensionByFont(1, 0);
fontAttribute = GetFontAttribute(1, 2);
- for (i = 0; i < gUnknown_0203CEC4->listSize; i++)
+ for (i = 0; i < sPartyMenuInternal->numActions; i++)
{
- u8 unk = (gUnknown_0203CEC4->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3;
- AddTextPrinterParameterized4(gUnknown_0203CEC4->windowId[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, sFontColorTable[unk], 0, sCursorOptions[gUnknown_0203CEC4->actions[i]].text);
+ u8 fontColorsId = (sPartyMenuInternal->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3;
+ AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text);
}
- InitMenuInUpperLeftCorner(gUnknown_0203CEC4->windowId[0], gUnknown_0203CEC4->listSize, 0, 1);
+ InitMenuInUpperLeftCorner(sPartyMenuInternal->windowId[0], sPartyMenuInternal->numActions, 0, 1);
schedule_bg_copy_tilemap_to_vram(2);
- return gUnknown_0203CEC4->windowId[0];
+ return sPartyMenuInternal->windowId[0];
}
-static void sub_81B3300(const u8 *text)
+static void PartyMenuPrintText(const u8 *text)
{
DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13);
gTextFlags.canABSpeedUpPrint = TRUE;
AddTextPrinterParameterized2(6, 1, text, GetPlayerTextSpeedDelay(), 0, 2, 1, 3);
}
-static void sub_81B334C(void)
+static void PartyMenuDisplayYesNoMenu(void)
{
- CreateYesNoMenu(&gUnknown_08615968, 0x4F, 13, 0);
+ CreateYesNoMenu(&sPartyMenuYesNoWindowTemplate, 0x4F, 13, 0);
}
-static u8 sub_81B3364(void)
+static u8 CreateLevelUpStatsWindow(void)
{
- gUnknown_0203CEC4->windowId[0] = AddWindow(&gUnknown_08615970);
- DrawStdFrameWithCustomTileAndPalette(gUnknown_0203CEC4->windowId[0], FALSE, 0x4F, 13);
- return gUnknown_0203CEC4->windowId[0];
+ sPartyMenuInternal->windowId[0] = AddWindow(&sLevelUpStatsWindowTemplate);
+ DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13);
+ return sPartyMenuInternal->windowId[0];
}
-static void sub_81B3394(void)
+static void RemoveLevelUpStatsWindow(void)
{
- ClearWindowTilemap(gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
+ ClearWindowTilemap(sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
}
-static void sub_81B33B4(struct Pokemon *mons, u8 slotId, u8 b)
+static void SetPartyMonSelectionActions(struct Pokemon *mons, u8 slotId, u8 action)
{
u8 i;
- if (b == 0)
+ if (action == ACTIONS_NONE)
{
- CreateActionList(mons, slotId);
+ SetPartyMonFieldSelectionActions(mons, slotId);
}
else
{
- gUnknown_0203CEC4->listSize = sListSizeTable[b];
- for (i = 0; i < gUnknown_0203CEC4->listSize; i++)
- gUnknown_0203CEC4->actions[i] = sActionTable[b][i];
+ sPartyMenuInternal->numActions = sPartyMenuActionCounts[action];
+ for (i = 0; i < sPartyMenuInternal->numActions; i++)
+ sPartyMenuInternal->actions[i] = sPartyMenuActions[action][i];
}
}
-static void CreateActionList(struct Pokemon *mons, u8 slotId)
+static void SetPartyMonFieldSelectionActions(struct Pokemon *mons, u8 slotId)
{
u8 i, j;
- gUnknown_0203CEC4->listSize = 0;
- AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_SUMMARY);
+ sPartyMenuInternal->numActions = 0;
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_SUMMARY);
+
+ // Add field moves to action list
for (i = 0; i < MAX_MON_MOVES; i++)
{
for (j = 0; sFieldMoves[j] != FIELD_MOVE_TERMINATOR; j++)
{
if (GetMonData(&mons[slotId], i + MON_DATA_MOVE1) == sFieldMoves[j])
{
- AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, j + MENU_FIELD_MOVES);
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, j + MENU_FIELD_MOVES);
break;
}
}
@@ -3722,118 +2556,124 @@ static void CreateActionList(struct Pokemon *mons, u8 slotId)
if (!InBattlePike())
{
if (GetMonData(&mons[1], MON_DATA_SPECIES) != SPECIES_NONE)
- AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_SWITCH);
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_SWITCH);
if (ItemIsMail(GetMonData(&mons[slotId], MON_DATA_HELD_ITEM)))
- AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_MAIL);
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_MAIL);
else
- AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_ITEM);
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_ITEM);
}
- AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_CANCEL1);
+ AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_CANCEL1);
}
-static u8 sub_81B353C(struct Pokemon *mon)
+static u8 GetPartyMenuActionsType(struct Pokemon *mon)
{
- u32 returnVar;
+ u32 actionType;
- switch (gUnknown_0203CEC8.unk8_0)
+ switch (gPartyMenu.menuType)
{
- case 0:
+ case PARTY_MENU_TYPE_FIELD:
if (InMultiBattleRoom() == TRUE || GetMonData(mon, MON_DATA_IS_EGG))
- returnVar = 1;
+ actionType = ACTIONS_SWITCH;
else
- returnVar = 0;
+ actionType = ACTIONS_NONE; // actions populated by SetPartyMonFieldSelectionActions
break;
- case 1:
- returnVar = sub_81B8A2C(mon);
+ case PARTY_MENU_TYPE_IN_BATTLE:
+ actionType = GetPartyMenuActionsTypeInBattle(mon);
break;
- case 4:
- switch (sub_81B856C(gUnknown_0203CEC8.slotId))
+ case PARTY_MENU_TYPE_CHOOSE_HALF:
+ switch (GetPartySlotEntryStatus(gPartyMenu.slotId))
{
- default:
- returnVar = 7;
+ default: // Not eligible
+ actionType = ACTIONS_SUMMARY_ONLY;
break;
- case 0:
- returnVar = 4;
+ case 0: // Eligible
+ actionType = ACTIONS_ENTER;
break;
- case 1:
- returnVar = 5;
+ case 1: // Already selected
+ actionType = ACTIONS_NO_ENTRY;
break;
}
break;
- case 6:
- returnVar = (GetMonData(mon, MON_DATA_IS_EGG)) ? 7 : 6;
+ case PARTY_MENU_TYPE_DAYCARE:
+ actionType = (GetMonData(mon, MON_DATA_IS_EGG)) ? ACTIONS_SUMMARY_ONLY : ACTIONS_STORE;
break;
- case 8:
- returnVar = 10;
+ case PARTY_MENU_TYPE_UNION_ROOM_REGISTER:
+ actionType = ACTIONS_REGISTER;
break;
- case 9:
- returnVar = 11;
+ case PARTY_MENU_TYPE_UNION_ROOM_TRADE:
+ actionType = ACTIONS_TRADE;
break;
- case 10:
- returnVar = 12;
+ case PARTY_MENU_TYPE_SPIN_TRADE:
+ actionType = ACTIONS_SPIN_TRADE;
break;
- case 12:
- returnVar = 13;
+ case PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS:
+ actionType = ACTIONS_TAKEITEM_TOSS;
break;
+ // The following have no selection actions (i.e. they exit immediately upon selection)
+ // PARTY_MENU_TYPE_CONTEST
+ // PARTY_MENU_TYPE_CHOOSE_MON
+ // PARTY_MENU_TYPE_MULTI_SHOWCASE
+ // PARTY_MENU_TYPE_MOVE_RELEARNER
+ // PARTY_MENU_TYPE_MINIGAME
default:
- returnVar = 0;
+ actionType = ACTIONS_NONE;
break;
}
- return returnVar;
+ return actionType;
}
-static bool8 sub_81B3608(u8 taskId)
+static bool8 CreateSelectionWindow(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 item;
GetMonNickname(mon, gStringVar1);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- if (gUnknown_0203CEC8.unk8_0 != 12)
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS)
{
- sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon));
- sub_81B31B0(0);
- display_pokemon_menu_message(21);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon));
+ DisplaySelectionWindow(SELECTWINDOW_ACTIONS);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MON);
}
else
{
item = GetMonData(mon, MON_DATA_HELD_ITEM);
if (item != ITEM_NONE)
{
- sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon));
- sub_81B31B0(1);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon));
+ DisplaySelectionWindow(SELECTWINDOW_ITEM);
CopyItemName(item, gStringVar2);
- display_pokemon_menu_message(26);
+ DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_HOLDING_ONE);
}
else
{
StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B469C;
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
return FALSE;
}
}
return TRUE;
}
-static void sub_81B36FC(u8 taskId)
+static void Task_TryCreateSelectionWindow(u8 taskId)
{
- if (sub_81B3608(taskId))
+ if (CreateSelectionWindow(taskId))
{
gTasks[taskId].data[0] = 0xFF;
- gTasks[taskId].func = HandleMenuInput;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
}
}
-static void HandleMenuInput(u8 taskId)
+static void Task_HandleSelectionMenuInput(u8 taskId)
{
if (!gPaletteFade.active && sub_81221EC() != TRUE)
{
s8 input;
s16 *data = gTasks[taskId].data;
- if (gUnknown_0203CEC4->listSize <= 3)
+ if (sPartyMenuInternal->numActions <= 3)
input = Menu_ProcessInputNoWrapAround_other();
else
input = ProcessMenuInput_other();
@@ -3845,12 +2685,12 @@ static void HandleMenuInput(u8 taskId)
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[2]);
- sCursorOptions[gUnknown_0203CEC4->actions[gUnknown_0203CEC4->listSize - 1]].func(taskId);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]);
+ sCursorOptions[sPartyMenuInternal->actions[sPartyMenuInternal->numActions - 1]].func(taskId);
break;
default:
- sub_81B302C(&gUnknown_0203CEC4->windowId[2]);
- sCursorOptions[gUnknown_0203CEC4->actions[input]].func(taskId);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]);
+ sCursorOptions[sPartyMenuInternal->actions[input]].func(taskId);
break;
}
}
@@ -3859,209 +2699,230 @@ static void HandleMenuInput(u8 taskId)
static void CursorCb_Summary(u8 taskId)
{
PlaySE(SE_SELECT);
- gUnknown_0203CEC4->exitCallback = sub_81B3828;
- sub_81B12C0(taskId);
+ sPartyMenuInternal->exitCallback = CB2_ShowPokemonSummaryScreen;
+ Task_ClosePartyMenu(taskId);
}
-static void sub_81B3828(void)
+static void CB2_ShowPokemonSummaryScreen(void)
{
- if (gUnknown_0203CEC8.unk8_0 == 1)
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
{
- pokemon_change_order();
- ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B3894);
+ UpdatePartyToBattleOrder();
+ ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen);
}
else
{
- ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B3894);
+ ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen);
}
}
-static void sub_81B3894(void)
+static void CB2_ReturnToPartyMenuFromSummaryScreen(void)
{
gPaletteFade.bufferTransferDisabled = TRUE;
- gUnknown_0203CEC8.slotId = gLastViewedMonIndex;
- InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 21, sub_81B36FC, gUnknown_0203CEC8.exitCallback);
+ gPartyMenu.slotId = gLastViewedMonIndex;
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_DO_WHAT_WITH_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
}
static void CursorCb_Switch(u8 taskId)
{
PlaySE(SE_SELECT);
- gUnknown_0203CEC8.unkB = 8;
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- display_pokemon_menu_message(3);
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 1);
- gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.slotId;
- gTasks[taskId].func = sub_81B1370;
-}
-
-static void sub_81B3938(u8 taskId)
+ gPartyMenu.action = PARTY_ACTION_SWITCH;
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ DisplayPartyMenuStdMessage(PARTY_MSG_MOVE_TO_WHERE);
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ gPartyMenu.slotId2 = gPartyMenu.slotId;
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+#define tSlot1Left data[0]
+#define tSlot1Top data[1]
+#define tSlot1Width data[2]
+#define tSlot1Height data[3]
+#define tSlot2Left data[4]
+#define tSlot2Top data[5]
+#define tSlot2Width data[6]
+#define tSlot2Height data[7]
+#define tSlot1Offset data[8]
+#define tSlot2Offset data[9]
+#define tSlot1SlideDir data[10]
+#define tSlot2SlideDir data[11]
+
+static void SwitchSelectedMons(u8 taskId)
{
s16 *data = gTasks[taskId].data;
u8 windowIds[2];
- if (gUnknown_0203CEC8.unkA == gUnknown_0203CEC8.slotId)
+ if (gPartyMenu.slotId2 == gPartyMenu.slotId)
{
- sub_81B407C(taskId);
+ FinishTwoMonAction(taskId);
}
else
{
- windowIds[0] = gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId;
- data[0] = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_LEFT);
- data[1] = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_TOP);
- data[2] = GetWindowAttribute(windowIds[0], WINDOW_WIDTH);
- data[3] = GetWindowAttribute(windowIds[0], WINDOW_HEIGHT);
- data[8] = 0;
- if (data[2] == 10)
- data[10] = -1;
+ // Initialize switching party mons slide animation
+ windowIds[0] = sPartyMenuBoxes[gPartyMenu.slotId].windowId;
+ tSlot1Left = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_LEFT);
+ tSlot1Top = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_TOP);
+ tSlot1Width = GetWindowAttribute(windowIds[0], WINDOW_WIDTH);
+ tSlot1Height = GetWindowAttribute(windowIds[0], WINDOW_HEIGHT);
+ tSlot1Offset = 0;
+ if (tSlot1Width == 10)
+ tSlot1SlideDir = -1;
else
- data[10] = 1;
- windowIds[1] = gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId;
- data[4] = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_LEFT);
- data[5] = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_TOP);
- data[6] = GetWindowAttribute(windowIds[1], WINDOW_WIDTH);
- data[7] = GetWindowAttribute(windowIds[1], WINDOW_HEIGHT);
- data[9] = 0;
- if (data[6] == 10)
- data[11] = -1;
+ tSlot1SlideDir = 1;
+ windowIds[1] = sPartyMenuBoxes[gPartyMenu.slotId2].windowId;
+ tSlot2Left = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_LEFT);
+ tSlot2Top = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_TOP);
+ tSlot2Width = GetWindowAttribute(windowIds[1], WINDOW_WIDTH);
+ tSlot2Height = GetWindowAttribute(windowIds[1], WINDOW_HEIGHT);
+ tSlot2Offset = 0;
+ if (tSlot2Width == 10)
+ tSlot2SlideDir = -1;
else
- data[11] = 1;
- gUnknown_0203CEF0 = Alloc(data[2] * (data[3] << 1));
- gUnknown_0203CEF4 = Alloc(data[6] * (data[7] << 1));
- sub_8199CBC(0, gUnknown_0203CEF0, data[0], data[1], data[2], data[3]);
- sub_8199CBC(0, gUnknown_0203CEF4, data[4], data[5], data[6], data[7]);
+ tSlot2SlideDir = 1;
+ sSlot1TilemapBuffer = Alloc(tSlot1Width * (tSlot1Height << 1));
+ sSlot2TilemapBuffer = Alloc(tSlot2Width * (tSlot2Height << 1));
+ CopyToBufferFromBgTilemap(0, sSlot1TilemapBuffer, tSlot1Left, tSlot1Top, tSlot1Width, tSlot1Height);
+ CopyToBufferFromBgTilemap(0, sSlot2TilemapBuffer, tSlot2Left, tSlot2Top, tSlot2Width, tSlot2Height);
ClearWindowTilemap(windowIds[0]);
ClearWindowTilemap(windowIds[1]);
- gUnknown_0203CEC8.unkB = 9;
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 1);
- sub_81B0FCC(gUnknown_0203CEC8.unkA, 1);
- sub_81B3CC0(taskId);
- gTasks[taskId].func = sub_81B3D48;
+ gPartyMenu.action = PARTY_ACTION_SWITCHING;
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ AnimatePartySlot(gPartyMenu.slotId2, 1);
+ SlidePartyMenuBoxOneStep(taskId);
+ gTasks[taskId].func = Task_SlideSelectedSlotsOffscreen;
}
}
-static bool8 sub_81B3AD8(s16 a, s16 b, u8 *c, u8 *d, u8 *e)
+// returns FALSE if the slot has slid fully offscreen / back onscreen
+static bool8 TryMovePartySlot(s16 x, s16 width, u8 *leftMove, u8 *newX, u8 *newWidth)
{
- if ((a + b) < 0)
+ if ((x + width) < 0)
return FALSE;
- if (a > 31)
+ if (x > 31)
return FALSE;
- if (a < 0)
+ if (x < 0)
{
- *c = a * -1;
- *d = 0;
- *e = b + a;
+ *leftMove = x * -1;
+ *newX = 0;
+ *newWidth = width + x;
}
else
{
- *c = 0;
- *d = a;
- if ((a + b) > 31)
- *e = 32 - a;
+ *leftMove = 0;
+ *newX = x;
+ if ((x + width) > 31)
+ *newWidth = 32 - x;
else
- *e = b;
+ *newWidth = width;
}
return TRUE;
}
-static void sub_81B3B40(const void *rectSrc, s16 a, s16 b, s16 c, s16 d, s16 e)
+static void MoveAndBufferPartySlot(const void *rectSrc, s16 x, s16 y, s16 width, s16 height, s16 dir)
{
- u8 f, g, h;
+ // The use of the dimension parameters here is a mess
+ u8 leftMove, newX, newWidth; // leftMove is used as a srcX, newX is used as both x and srcHeight, newWidth is used as both width and destY
- if (sub_81B3AD8(a, c, &f, &g, &h))
+ if (TryMovePartySlot(x, width, &leftMove, &newX, &newWidth))
{
- FillBgTilemapBufferRect_Palette0(0, 0, g, b, h, d);
- if (sub_81B3AD8(a + e, c, &f, &g, &h))
- CopyRectToBgTilemapBufferRect(0, rectSrc, f, 0, c, d, g, b, h, d, 17, 0, 0);
+ FillBgTilemapBufferRect_Palette0(0, 0, newX, y, newWidth, height);
+ if (TryMovePartySlot(x + dir, width, &leftMove, &newX, &newWidth))
+ CopyRectToBgTilemapBufferRect(0, rectSrc, leftMove, 0, width, height, newX, y, newWidth, height, 17, 0, 0);
}
}
-static void sub_81B3C0C(struct Struct203CEDC *ptr, s16 a)
+static void MovePartyMenuBoxSprites(struct PartyMenuBox *menuBox, s16 offset)
{
- gSprites[ptr->pokeballSpriteId].pos2.x += a * 8;
- gSprites[ptr->itemSpriteId].pos2.x += a * 8;
- gSprites[ptr->monSpriteId].pos2.x += a * 8;
- gSprites[ptr->statusSpriteId].pos2.x += a * 8;
+ gSprites[menuBox->pokeballSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->itemSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->monSpriteId].pos2.x += offset * 8;
+ gSprites[menuBox->statusSpriteId].pos2.x += offset * 8;
}
-static void sub_81B3C60(u8 taskId)
+static void SlidePartyMenuBoxSpritesOneStep(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (data[10] != 0)
- sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], data[10]);
- if (data[11] != 0)
- sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.unkA], data[11]);
+ if (tSlot1SlideDir != 0)
+ MovePartyMenuBoxSprites(&sPartyMenuBoxes[gPartyMenu.slotId], tSlot1SlideDir);
+ if (tSlot2SlideDir != 0)
+ MovePartyMenuBoxSprites(&sPartyMenuBoxes[gPartyMenu.slotId2], tSlot2SlideDir);
}
-static void sub_81B3CC0(u8 taskId)
+static void SlidePartyMenuBoxOneStep(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (data[10] != 0)
- sub_81B3B40(gUnknown_0203CEF0, data[0] + data[8], data[1], data[2], data[3], data[10]);
- if (data[11] != 0)
- sub_81B3B40(gUnknown_0203CEF4, data[4] + data[9], data[5], data[6], data[7], data[11]);
+ if (tSlot1SlideDir != 0)
+ MoveAndBufferPartySlot(sSlot1TilemapBuffer, tSlot1Left + tSlot1Offset, tSlot1Top, tSlot1Width, tSlot1Height, tSlot1SlideDir);
+ if (tSlot2SlideDir != 0)
+ MoveAndBufferPartySlot(sSlot2TilemapBuffer, tSlot2Left + tSlot2Offset, tSlot2Top, tSlot2Width, tSlot2Height, tSlot2SlideDir);
schedule_bg_copy_tilemap_to_vram(0);
}
-static void sub_81B3D48(u8 taskId)
+static void Task_SlideSelectedSlotsOffscreen(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 tilemapRelatedMaybe[2];
+ u16 slidingSlotPositions[2];
- sub_81B3CC0(taskId);
- sub_81B3C60(taskId);
- data[8] += data[10];
- data[9] += data[11];
- tilemapRelatedMaybe[0] = data[0] + data[8];
- tilemapRelatedMaybe[1] = data[4] + data[9];
- if (tilemapRelatedMaybe[0] > 33 && tilemapRelatedMaybe[1] > 33)
+ SlidePartyMenuBoxOneStep(taskId);
+ SlidePartyMenuBoxSpritesOneStep(taskId);
+ tSlot1Offset += tSlot1SlideDir;
+ tSlot2Offset += tSlot2SlideDir;
+ slidingSlotPositions[0] = tSlot1Left + tSlot1Offset;
+ slidingSlotPositions[1] = tSlot2Left + tSlot2Offset;
+
+ // Both slots have slid offscreen
+ if (slidingSlotPositions[0] > 33 && slidingSlotPositions[1] > 33)
{
- data[10] *= -1;
- data[11] *= -1;
- swap_pokemon_and_oams();
- DisplayPartyPokemonData(gUnknown_0203CEC8.slotId);
- DisplayPartyPokemonData(gUnknown_0203CEC8.unkA);
- PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId);
- PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId);
- sub_8199CBC(0, gUnknown_0203CEF0, data[0], data[1], data[2], data[3]);
- sub_8199CBC(0, gUnknown_0203CEF4, data[4], data[5], data[6], data[7]);
- ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId);
- ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId);
- gTasks[taskId].func = sub_81B3E60;
+ tSlot1SlideDir *= -1;
+ tSlot2SlideDir *= -1;
+ SwitchPartyMon();
+ DisplayPartyPokemonData(gPartyMenu.slotId);
+ DisplayPartyPokemonData(gPartyMenu.slotId2);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
+ CopyToBufferFromBgTilemap(0, sSlot1TilemapBuffer, tSlot1Left, tSlot1Top, tSlot1Width, tSlot1Height);
+ CopyToBufferFromBgTilemap(0, sSlot2TilemapBuffer, tSlot2Left, tSlot2Top, tSlot2Width, tSlot2Height);
+ ClearWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ ClearWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
+ gTasks[taskId].func = Task_SlideSelectedSlotsOnscreen;
}
}
-static void sub_81B3E60(u8 taskId)
+static void Task_SlideSelectedSlotsOnscreen(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81B3CC0(taskId);
- sub_81B3C60(taskId);
- if (data[10] == 0 && data[11] == 0)
+ SlidePartyMenuBoxOneStep(taskId);
+ SlidePartyMenuBoxSpritesOneStep(taskId);
+
+ // Both slots have slid back onscreen
+ if (tSlot1SlideDir == 0 && tSlot2SlideDir == 0)
{
- PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId);
- PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId);
+ PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId);
schedule_bg_copy_tilemap_to_vram(0);
- Free(gUnknown_0203CEF0);
- Free(gUnknown_0203CEF4);
- sub_81B407C(taskId);
+ Free(sSlot1TilemapBuffer);
+ Free(sSlot2TilemapBuffer);
+ FinishTwoMonAction(taskId);
}
+ // Continue sliding
else
{
- data[8] += data[10];
- data[9] += data[11];
- if (data[8] == 0)
- data[10] = 0;
- if (data[9] == 0)
- data[11] = 0;
+ tSlot1Offset += tSlot1SlideDir;
+ tSlot2Offset += tSlot2SlideDir;
+ if (tSlot1Offset == 0)
+ tSlot1SlideDir = 0;
+ if (tSlot2Offset == 0)
+ tSlot2SlideDir = 0;
}
}
-static void oamt_swap_pos(u8 *spriteIdPtr1, u8 *spriteIdPtr2)
+static void SwitchMenuBoxSprites(u8 *spriteIdPtr1, u8 *spriteIdPtr2)
{
u8 spriteIdBuffer = *spriteIdPtr1;
u16 xBuffer1, yBuffer1, xBuffer2, yBuffer2;
@@ -4082,684 +2943,719 @@ static void oamt_swap_pos(u8 *spriteIdPtr1, u8 *spriteIdPtr2)
gSprites[*spriteIdPtr2].pos2.y = yBuffer2;
}
-static void swap_pokemon_and_oams(void)
+static void SwitchPartyMon(void)
{
- struct Struct203CEDC *structPtrs[2];
+ struct PartyMenuBox *menuBoxes[2];
struct Pokemon *mon1, *mon2;
struct Pokemon *monBuffer;
- structPtrs[0] = &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId];
- structPtrs[1] = &gUnknown_0203CEDC[gUnknown_0203CEC8.unkA];
- mon1 = &gPlayerParty[gUnknown_0203CEC8.slotId];
- mon2 = &gPlayerParty[gUnknown_0203CEC8.unkA];
+ menuBoxes[0] = &sPartyMenuBoxes[gPartyMenu.slotId];
+ menuBoxes[1] = &sPartyMenuBoxes[gPartyMenu.slotId2];
+ mon1 = &gPlayerParty[gPartyMenu.slotId];
+ mon2 = &gPlayerParty[gPartyMenu.slotId2];
monBuffer = Alloc(sizeof(struct Pokemon));
*monBuffer = *mon1;
*mon1 = *mon2;
*mon2 = *monBuffer;
Free(monBuffer);
- oamt_swap_pos(&structPtrs[0]->pokeballSpriteId, &structPtrs[1]->pokeballSpriteId);
- oamt_swap_pos(&structPtrs[0]->itemSpriteId, &structPtrs[1]->itemSpriteId);
- oamt_swap_pos(&structPtrs[0]->monSpriteId, &structPtrs[1]->monSpriteId);
- oamt_swap_pos(&structPtrs[0]->statusSpriteId, &structPtrs[1]->statusSpriteId);
-}
-
-static void sub_81B407C(u8 taskId)
-{
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- gUnknown_0203CEC8.unkB = 0;
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 0);
- gUnknown_0203CEC8.slotId = gUnknown_0203CEC8.unkA;
- sub_81B0FCC(gUnknown_0203CEC8.unkA, 1);
- display_pokemon_menu_message(0);
- gTasks[taskId].func = sub_81B1370;
-}
+ SwitchMenuBoxSprites(&menuBoxes[0]->pokeballSpriteId, &menuBoxes[1]->pokeballSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->itemSpriteId, &menuBoxes[1]->itemSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->monSpriteId, &menuBoxes[1]->monSpriteId);
+ SwitchMenuBoxSprites(&menuBoxes[0]->statusSpriteId, &menuBoxes[1]->statusSpriteId);
+}
+
+// Finish switching mons or using Softboiled
+static void FinishTwoMonAction(u8 taskId)
+{
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ gPartyMenu.action = PARTY_ACTION_CHOOSE_MON;
+ AnimatePartySlot(gPartyMenu.slotId, 0);
+ gPartyMenu.slotId = gPartyMenu.slotId2;
+ AnimatePartySlot(gPartyMenu.slotId2, 1);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+}
+
+#undef tSlot1Left
+#undef tSlot1Top
+#undef tSlot1Width
+#undef tSlot1Height
+#undef tSlot2Left
+#undef tSlot2Top
+#undef tSlot2Width
+#undef tSlot2Height
+#undef tSlot1Offset
+#undef tSlot2Offset
+#undef tSlot1SlideDir
+#undef tSlot2SlideDir
static void CursorCb_Cancel1(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- if (gUnknown_0203CEC8.unk8_0 == 6)
- display_pokemon_menu_message(15);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_DAYCARE)
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON_2);
else
- display_pokemon_menu_message(0);
- gTasks[taskId].func = sub_81B1370;
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
static void CursorCb_Item(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, 8);
- sub_81B31B0(1);
- display_pokemon_menu_message(24);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_ITEM);
+ DisplaySelectionWindow(SELECTWINDOW_ITEM);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_ITEM);
gTasks[taskId].data[0] = 0xFF;
- gTasks[taskId].func = HandleMenuInput;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
}
static void CursorCb_Give(u8 taskId)
{
PlaySE(SE_SELECT);
- gUnknown_0203CEC4->exitCallback = sub_81B41C4;
- sub_81B12C0(taskId);
+ sPartyMenuInternal->exitCallback = CB2_SelectBagItemToGive;
+ Task_ClosePartyMenu(taskId);
}
-static void sub_81B41C4(void)
+static void CB2_SelectBagItemToGive(void)
{
if (InBattlePyramid() == FALSE)
- GoToBagMenu(RETURN_LOCATION_POKEMON_LIST, POCKETS_COUNT, c2_8123744);
+ GoToBagMenu(RETURN_LOCATION_POKEMON_LIST, POCKETS_COUNT, CB2_GiveHoldItem);
else
- sub_81C4F98(2, c2_8123744);
+ GoToBattlePyramidBagMenu(2, CB2_GiveHoldItem);
}
-static void c2_8123744(void)
+static void CB2_GiveHoldItem(void)
{
if (gSpecialVar_ItemId == ITEM_NONE)
{
- InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B36FC, gUnknown_0203CEC8.exitCallback);
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
}
else
{
- gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM);
- if (gUnknown_0203CEFC != ITEM_NONE)
+ sPartyMenuItemId = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM);
+
+ // Already holding item
+ if (sPartyMenuItemId != ITEM_NONE)
{
- InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B4350, gUnknown_0203CEC8.exitCallback);
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_SwitchHoldItemsPrompt, gPartyMenu.exitCallback);
}
+ // Give mail
else if (ItemIsMail(gSpecialVar_ItemId))
{
RemoveBagItem(gSpecialVar_ItemId, 1);
- sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId);
- sub_81B452C();
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId);
+ CB2_WriteMailToGiveMon();
}
+ // Give item
else
{
- InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B42D0, gUnknown_0203CEC8.exitCallback);
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_GiveHoldItem, gPartyMenu.exitCallback);
}
}
}
-static void sub_81B42D0(u8 taskId)
+static void Task_GiveHoldItem(u8 taskId)
{
u16 item;
if (!gPaletteFade.active)
{
item = gSpecialVar_ItemId;
- sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], item, 0, 0);
- sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item);
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], item, FALSE, 0);
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item);
RemoveBagItem(item, 1);
- gTasks[taskId].func = sub_81B469C;
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
}
-static void sub_81B4350(u8 taskId)
+static void Task_SwitchHoldItemsPrompt(u8 taskId)
{
if (!gPaletteFade.active)
{
- sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEFC, 1);
- gTasks[taskId].func = sub_81B43A8;
+ DisplayAlreadyHoldingItemSwitchMessage(&gPlayerParty[gPartyMenu.slotId], sPartyMenuItemId, TRUE);
+ gTasks[taskId].func = Task_SwitchItemsYesNo;
}
}
-static void sub_81B43A8(u8 taskId)
+static void Task_SwitchItemsYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B43DC;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleSwitchItemsYesNoInput;
}
}
-static void sub_81B43DC(u8 taskId)
+static void Task_HandleSwitchItemsYesNoInput(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case 0:
+ case 0: // Yes, switch items
RemoveBagItem(gSpecialVar_ItemId, 1);
- if (AddBagItem(gUnknown_0203CEFC, 1) == FALSE)
+
+ // No room to return held item to bag
+ if (AddBagItem(sPartyMenuItemId, 1) == FALSE)
{
AddBagItem(gSpecialVar_ItemId, 1);
- pokemon_item_not_removed(gUnknown_0203CEFC);
- sub_81B1B5C(gStringVar4, 0);
- gTasks[taskId].func = sub_81B1C1C;
+ BufferBagFullCantTakeItemMessage(sPartyMenuItemId);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
+ // Giving mail
else if (ItemIsMail(gSpecialVar_ItemId))
{
- sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId);
- gTasks[taskId].func = sub_81B44FC;
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId);
+ gTasks[taskId].func = Task_WriteMailToGiveMonAfterText;
}
+ // Giving item
else
{
- sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId);
- sub_81B1D68(gSpecialVar_ItemId, gUnknown_0203CEFC, 1);
- gTasks[taskId].func = sub_81B469C;
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId);
+ DisplaySwitchedHeldItemMessage(gSpecialVar_ItemId, sPartyMenuItemId, TRUE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
- case 1:
- gTasks[taskId].func = sub_81B1C1C;
+ // fallthrough
+ case 1: // No
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
break;
}
}
-static void sub_81B44FC(u8 taskId)
+static void Task_WriteMailToGiveMonAfterText(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- gUnknown_0203CEC4->exitCallback = sub_81B452C;
- sub_81B12C0(taskId);
+ sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMon;
+ Task_ClosePartyMenu(taskId);
}
}
-static void sub_81B452C(void)
+static void CB2_WriteMailToGiveMon(void)
{
- u8 mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL);
+ u8 mail = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL);
DoEasyChatScreen(
- EASY_CHAT_TYPE_MAIL,
- gSaveBlock1Ptr->mail[mail].words,
- sub_81B4578,
- EASY_CHAT_PERSON_DISPLAY_NONE);
+ EASY_CHAT_TYPE_MAIL,
+ gSaveBlock1Ptr->mail[mail].words,
+ CB2_ReturnToPartyMenuFromWritingMail,
+ EASY_CHAT_PERSON_DISPLAY_NONE);
}
-static void sub_81B4578(void)
+static void CB2_ReturnToPartyMenuFromWritingMail(void)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+ // Canceled writing mail
if (gSpecialVar_Result == FALSE)
{
TakeMailFromMon(mon);
- SetMonData(mon, MON_DATA_HELD_ITEM, &gUnknown_0203CEFC);
- RemoveBagItem(gUnknown_0203CEFC, 1);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &sPartyMenuItemId);
+ RemoveBagItem(sPartyMenuItemId, 1);
AddBagItem(item, 1);
- InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0, sub_81B36FC, gUnknown_0203CEC8.exitCallback);
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_CHOOSE_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
}
+ // Wrote mail
else
{
- InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B4624, gUnknown_0203CEC8.exitCallback);
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_DisplayGaveMailFromPartyMessage, gPartyMenu.exitCallback);
}
}
-static void sub_81B4624(u8 taskId)
+// Nearly redundant with Task_DisplayGaveMailFromBagMessgae
+static void Task_DisplayGaveMailFromPartyMessage(u8 taskId)
{
if (!gPaletteFade.active)
{
- if (gUnknown_0203CEFC == ITEM_NONE)
- sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId, 0, 0);
+ if (sPartyMenuItemId == ITEM_NONE)
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId, FALSE, 0);
else
- sub_81B1D68(gSpecialVar_ItemId, gUnknown_0203CEFC, 0);
- gTasks[taskId].func = sub_81B469C;
+ DisplaySwitchedHeldItemMessage(gSpecialVar_ItemId, sPartyMenuItemId, FALSE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
}
-static void sub_81B469C(u8 taskId)
+static void Task_UpdateHeldItemSprite(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]);
- if (gUnknown_0203CEC8.unk8_0 == 12)
+ UpdatePartyMonHeldItemSprite(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS)
{
if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE)
- DisplayPartyPokemonOtherText(11, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1);
+ DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_HAVE, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
else
- DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1);
+ DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_DONT_HAVE, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
}
- sub_81B1C1C(taskId);
+ Task_ReturnToChooseMonAfterText(taskId);
}
}
static void CursorCb_TakeItem(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
switch (TryTakeMonItem(mon))
{
- case 0:
+ case 0: // Not holding item
GetMonNickname(mon, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
break;
- case 1:
- pokemon_item_not_removed(item);
- sub_81B1B5C(gStringVar4, 1);
+ case 1: // No room to take item
+ BufferBagFullCantTakeItemMessage(item);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
break;
- default:
- sub_81B1CD0(mon, item, 1);
+ default: // Took item
+ DisplayTookHeldItemMessage(mon, item, TRUE);
break;
}
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B469C;
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
static void CursorCb_Toss(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
if (item == ITEM_NONE)
{
GetMonNickname(mon, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B469C;
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
else
{
CopyItemName(item, gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_ThrowAwayItem);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B48A8;
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_TossHeldItemYesNo;
}
}
-static void sub_81B48A8(u8 taskId)
+static void Task_TossHeldItemYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B48DC;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleTossHeldItemYesNoInput;
}
}
-static void sub_81B48DC(u8 taskId)
+static void Task_HandleTossHeldItemYesNoInput(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
CopyItemName(GetMonData(mon, MON_DATA_HELD_ITEM), gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_ItemThrownAway);
- sub_81B1B5C(gStringVar4, 0);
- gTasks[taskId].func = sub_81B4988;
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ gTasks[taskId].func = Task_TossHeldItem;
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
- gTasks[taskId].func = sub_81B1C1C;
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
break;
}
}
-static void sub_81B4988(u8 taskId)
+static void Task_TossHeldItem(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
u16 item = ITEM_NONE;
SetMonData(mon, MON_DATA_HELD_ITEM, &item);
- sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]);
- DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1);
- gTasks[taskId].func = sub_81B1C1C;
+ UpdatePartyMonHeldItemSprite(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
+ DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_DONT_HAVE, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
}
static void CursorCb_Mail(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, 9);
- sub_81B31B0(2);
- display_pokemon_menu_message(25);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_MAIL);
+ DisplaySelectionWindow(SELECTWINDOW_MAIL);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MAIL);
gTasks[taskId].data[0] = 0xFF;
- gTasks[taskId].func = HandleMenuInput;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
}
static void CursorCb_Read(u8 taskId)
{
PlaySE(SE_SELECT);
- gUnknown_0203CEC4->exitCallback = sub_81B4A98;
- sub_81B12C0(taskId);
+ sPartyMenuInternal->exitCallback = CB2_ReadHeldMail;
+ Task_ClosePartyMenu(taskId);
}
-static void sub_81B4A98(void)
+static void CB2_ReadHeldMail(void)
{
- ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL)], sub_81B4AE0, 1);
+ ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL)], CB2_ReturnToPartyMenuFromReadingMail, 1);
}
-static void sub_81B4AE0(void)
+static void CB2_ReturnToPartyMenuFromReadingMail(void)
{
gPaletteFade.bufferTransferDisabled = TRUE;
- InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 21, sub_81B36FC, gUnknown_0203CEC8.exitCallback);
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_DO_WHAT_WITH_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback);
}
static void CursorCb_TakeMail(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B1B5C(gText_SendMailToPC, 1);
- gTasks[taskId].func = sub_81B4B6C;
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ DisplayPartyMenuMessage(gText_SendMailToPC, TRUE);
+ gTasks[taskId].func = Task_SendMailToPCYesNo;
}
-static void sub_81B4B6C(u8 taskId)
+static void Task_SendMailToPCYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B4BA0;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleSendMailToPCYesNoInput;
}
}
-static void sub_81B4BA0(u8 taskId)
+static void Task_HandleSendMailToPCYesNoInput(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case 0:
- if (TakeMailFromMon2(&gPlayerParty[gUnknown_0203CEC8.slotId]) != 0xFF)
+ case 0: // Yes, send to PC
+ if (TakeMailFromMon2(&gPlayerParty[gPartyMenu.slotId]) != 0xFF)
{
- sub_81B1B5C(gText_MailSentToPC, 0);
- gTasks[taskId].func = sub_81B469C;
+ DisplayPartyMenuMessage(gText_MailSentToPC, FALSE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
else
{
- sub_81B1B5C(gText_PCMailboxFull, 0);
- gTasks[taskId].func = sub_81B1C1C;
+ DisplayPartyMenuMessage(gText_PCMailboxFull, FALSE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
- sub_81B1B5C(gText_MailMessageWillBeLost, 1);
- gTasks[taskId].func = sub_81B4C60;
+ DisplayPartyMenuMessage(gText_MailMessageWillBeLost, TRUE);
+ gTasks[taskId].func = Task_LoseMailMessageYesNo;
break;
}
}
-static void sub_81B4C60(u8 taskId)
+static void Task_LoseMailMessageYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B4C94;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleLoseMailMessageYesNoInput;
}
}
-static void sub_81B4C94(u8 taskId)
+static void Task_HandleLoseMailMessageYesNoInput(u8 taskId)
{
u16 item;
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case 0:
- item = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM);
+ case 0: // Yes, lose mail message
+ item = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM);
if (AddBagItem(item, 1) == TRUE)
{
- TakeMailFromMon(&gPlayerParty[gUnknown_0203CEC8.slotId]);
- sub_81B1B5C(gText_MailTakenFromPkmn, 0);
- gTasks[taskId].func = sub_81B469C;
+ TakeMailFromMon(&gPlayerParty[gPartyMenu.slotId]);
+ DisplayPartyMenuMessage(gText_MailTakenFromPkmn, FALSE);
+ gTasks[taskId].func = Task_UpdateHeldItemSprite;
}
else
{
- pokemon_item_not_removed(item);
- sub_81B1B5C(gStringVar4, 0);
- gTasks[taskId].func = sub_81B1C1C;
+ BufferBagFullCantTakeItemMessage(item);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
- gTasks[taskId].func = sub_81B1C1C;
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
break;
}
}
static void CursorCb_Cancel2(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon));
- if (gUnknown_0203CEC8.unk8_0 != 12)
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon));
+ if (gPartyMenu.menuType != PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS)
{
- sub_81B31B0(0);
- display_pokemon_menu_message(21);
+ DisplaySelectionWindow(SELECTWINDOW_ACTIONS);
+ DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MON);
}
else
{
- sub_81B31B0(1);
+ DisplaySelectionWindow(SELECTWINDOW_ITEM);
CopyItemName(GetMonData(mon, MON_DATA_HELD_ITEM), gStringVar2);
- display_pokemon_menu_message(26);
+ DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_HOLDING_ONE);
}
gTasks[taskId].data[0] = 0xFF;
- gTasks[taskId].func = HandleMenuInput;
+ gTasks[taskId].func = Task_HandleSelectionMenuInput;
}
static void CursorCb_SendMon(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- if (sub_81B8A7C() == TRUE)
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ if (TrySwitchInPokemon() == TRUE)
{
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
}
else
{
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B1C1C;
+ // gStringVar4 below is the error message buffered by TrySwitchInPokemon
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
}
static void CursorCb_Enter(u8 taskId)
{
- u8 unk;
+ u8 maxBattlers;
u8 i;
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- unk = sub_81B8830();
- for (i = 0; i < unk; i++)
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ maxBattlers = GetMaxBattleEntries();
+ for (i = 0; i < maxBattlers; i++)
{
if (gSelectedOrderFromParty[i] == 0)
{
PlaySE(SE_SELECT);
- gSelectedOrderFromParty[i] = gUnknown_0203CEC8.slotId + 1;
- DisplayPartyPokemonOtherText(i + 2, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1);
- if (i == (unk - 1))
- sub_81B4F88();
- display_pokemon_menu_message(0);
- gTasks[taskId].func = sub_81B1370;
+ gSelectedOrderFromParty[i] = gPartyMenu.slotId + 1;
+ DisplayPartyPokemonDescriptionText(i + PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
+ if (i == (maxBattlers - 1))
+ MoveCursorToConfirm();
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
return;
}
}
- ConvertIntToDecimalStringN(gStringVar1, unk, 0, 1);
+ ConvertIntToDecimalStringN(gStringVar1, maxBattlers, STR_CONV_MODE_LEFT_ALIGN, 1);
StringExpandPlaceholders(gStringVar4, gText_NoMoreThanVar1Pkmn);
PlaySE(SE_HAZURE);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B1C1C;
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
-static void sub_81B4F88(void)
+static void MoveCursorToConfirm(void)
{
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 0);
- gUnknown_0203CEC8.slotId = 6;
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 1);
+ AnimatePartySlot(gPartyMenu.slotId, 0);
+ gPartyMenu.slotId = PARTY_SIZE;
+ AnimatePartySlot(gPartyMenu.slotId, 1);
}
static void CursorCb_NoEntry(u8 taskId)
{
- u8 unk;
+ u8 maxBattlers;
u8 i, j;
PlaySE(SE_SELECT);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- unk = sub_81B8830();
- for (i = 0; i < unk; i++)
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ maxBattlers = GetMaxBattleEntries();
+ for (i = 0; i < maxBattlers; i++)
{
- if (gSelectedOrderFromParty[i] == (gUnknown_0203CEC8.slotId + 1))
+ if (gSelectedOrderFromParty[i] == (gPartyMenu.slotId + 1))
{
- for (j = i; j < (unk - 1); j++)
+ for (j = i; j < (maxBattlers - 1); j++)
gSelectedOrderFromParty[j] = gSelectedOrderFromParty[j + 1];
gSelectedOrderFromParty[j] = 0;
break;
}
}
- DisplayPartyPokemonOtherText(1, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1);
- for (i = 0; i < (unk - 1); i++)
+ DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_ABLE_3, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
+ for (i = 0; i < (maxBattlers - 1); i++)
{
if (gSelectedOrderFromParty[i] != 0)
- DisplayPartyPokemonOtherText(i + 2, &gUnknown_0203CEDC[gSelectedOrderFromParty[i] - 1], 1);
+ DisplayPartyPokemonDescriptionText(i + PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gSelectedOrderFromParty[i] - 1], 1);
}
- display_pokemon_menu_message(0);
- gTasks[taskId].func = sub_81B1370;
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
static void CursorCb_Store(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
}
+// Register mon for the Trading Board in Union Room
static void CursorCb_Register(u8 taskId)
{
- u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES2);
- u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES);
- u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_OBEDIENCE);
+ u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
+ u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
+ u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
- switch (sub_807A8D0(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), species2, species, obedience))
+ switch (CanRegisterMonForTradingBoard(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), species2, species, obedience))
{
- case 1:
+ case CANT_REGISTER_MON:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
break;
- case 2:
+ case CANT_REGISTER_EGG:
StringExpandPlaceholders(gStringVar4, gText_EggCantBeTradedNow);
break;
default:
PlaySE(SE_SELECT);
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
return;
}
PlaySE(SE_HAZURE);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
StringAppend(gStringVar4, gText_PauseUntilPress);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B1C1C;
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
static void CursorCb_Trade1(u8 taskId)
{
- u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES2);
- u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES);
- u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_OBEDIENCE);
- u32 stringId = sub_807A7E0(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), gUnknown_02022C38, species2, gUnknown_02022C3C, gUnknown_02022C3E, species, obedience);
+ u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
+ u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
+ u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
+ u32 stringId = GetUnionRoomTradeMessageId(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), gUnknown_02022C38, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
- if (stringId != 0)
+ if (stringId != UR_TRADE_MSG_NONE)
{
- StringExpandPlaceholders(gStringVar4, gUnknown_08615E0C[stringId - 1]);
+ StringExpandPlaceholders(gStringVar4, sUnionRoomTradeMessages[stringId - 1]);
PlaySE(SE_HAZURE);
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
StringAppend(gStringVar4, gText_PauseUntilPress);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B1C1C;
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
else
{
PlaySE(SE_SELECT);
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
}
}
+// Spin Trade (based on the translation of the Japanese trade prompt)
+// Not fully implemented, and normally unreachable because PARTY_MENU_TYPE_SPIN_TRADE is never used
static void CursorCb_Trade2(u8 taskId)
{
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- switch (sub_807A918(gPlayerParty, gUnknown_0203CEC8.slotId))
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ switch (CanSpinTradeMon(gPlayerParty, gPartyMenu.slotId))
{
- case 1:
+ case CANT_TRADE_LAST_MON:
StringExpandPlaceholders(gStringVar4, gText_OnlyPkmnForBattle);
break;
- case 2:
+ case CANT_TRADE_NATIONAL:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
break;
- case 3:
+ case CANT_TRADE_EGG_YET:
StringExpandPlaceholders(gStringVar4, gText_EggCantBeTradedNow);
break;
- default:
+ default: // CAN_TRADE_MON
PlaySE(SE_SELECT);
- GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1);
- StringExpandPlaceholders(gStringVar4, gJPText_PutVar1IntoSpinner);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B53FC;
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gJPText_AreYouSureYouWantToSpinTradeMon);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_SpinTradeYesNo;
return;
}
PlaySE(SE_HAZURE);
StringAppend(gStringVar4, gText_PauseUntilPress);
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B1C1C;
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
-static void sub_81B53FC(u8 taskId)
+static void Task_SpinTradeYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B5430;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleSpinTradeYesNoInput;
}
}
-static void sub_81B5430(u8 taskId)
+// See comment on CursorCb_Trade2. Because no callback is set, selecting YES (0) to spin trade just closes the party menu
+static void Task_HandleSpinTradeYesNoInput(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
- sub_81B1C1C(taskId);
+ Task_ReturnToChooseMonAfterText(taskId);
break;
}
}
static void CursorCb_FieldMove(u8 taskId)
{
- u8 fieldMove = gUnknown_0203CEC4->actions[Menu_GetCursorPos()] - MENU_FIELD_MOVES;
+ u8 fieldMove = sPartyMenuInternal->actions[Menu_GetCursorPos()] - MENU_FIELD_MOVES;
const struct MapHeader *mapHeader;
PlaySE(SE_SELECT);
if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc == NULL)
return;
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
if (sub_81221AC() == TRUE || InUnionRoom() == TRUE)
{
if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED)
- display_pokemon_menu_message(13);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE);
else
- display_pokemon_menu_message(sFieldMoveCursorCallbacks[fieldMove].msgId);
+ DisplayPartyMenuStdMessage(sFieldMoveCursorCallbacks[fieldMove].msgId);
- gTasks[taskId].func = task_brm_cancel_1_on_keypad_a_or_b;
+ gTasks[taskId].func = Task_CancelAfterAorBPress;
}
else
{
// All field moves before WATERFALL are HMs.
if (fieldMove <= FIELD_MOVE_WATERFALL && FlagGet(FLAG_BADGE01_GET + fieldMove) != TRUE)
{
- sub_81B1B5C(gText_CantUseUntilNewBadge, 1);
- gTasks[taskId].func = sub_81B1C1C;
+ DisplayPartyMenuMessage(gText_CantUseUntilNewBadge, TRUE);
+ gTasks[taskId].func = Task_ReturnToChooseMonAfterText;
}
else if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc() == TRUE)
{
@@ -4767,80 +3663,82 @@ static void CursorCb_FieldMove(u8 taskId)
{
case FIELD_MOVE_MILK_DRINK:
case FIELD_MOVE_SOFT_BOILED:
- sub_8161560(taskId);
+ ChooseMonForSoftboiled(taskId);
break;
case FIELD_MOVE_TELEPORT:
mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum);
- sub_81245DC(gStringVar1, mapHeader->regionMapSectionId);
+ GetMapNameGeneric(gStringVar1, mapHeader->regionMapSectionId);
StringExpandPlaceholders(gStringVar4, gText_ReturnToHealingSpot);
- sub_81B5674(taskId);
- gUnknown_0203CEC4->data[0] = fieldMove;
+ DisplayFieldMoveExitAreaMessage(taskId);
+ sPartyMenuInternal->data[0] = fieldMove;
break;
case FIELD_MOVE_DIG:
mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum);
- sub_81245DC(gStringVar1, mapHeader->regionMapSectionId);
+ GetMapNameGeneric(gStringVar1, mapHeader->regionMapSectionId);
StringExpandPlaceholders(gStringVar4, gText_EscapeFromHere);
- sub_81B5674(taskId);
- gUnknown_0203CEC4->data[0] = fieldMove;
+ DisplayFieldMoveExitAreaMessage(taskId);
+ sPartyMenuInternal->data[0] = fieldMove;
break;
case FIELD_MOVE_FLY:
- gUnknown_0203CEC8.exitCallback = MCB2_FlyMap;
- sub_81B12C0(taskId);
+ gPartyMenu.exitCallback = MCB2_FlyMap;
+ Task_ClosePartyMenu(taskId);
break;
default:
- gUnknown_0203CEC8.exitCallback = CB2_ReturnToField;
- sub_81B12C0(taskId);
+ gPartyMenu.exitCallback = CB2_ReturnToField;
+ Task_ClosePartyMenu(taskId);
break;
}
}
+ // Cant use Field Move
else
{
switch (fieldMove)
{
case FIELD_MOVE_SURF:
- sub_81B5864();
+ DisplayCantUseSurfMessage();
break;
case FIELD_MOVE_FLASH:
- sub_81B57DC();
+ DisplayCantUseFlashMessage();
break;
default:
- display_pokemon_menu_message(sFieldMoveCursorCallbacks[fieldMove].msgId);
+ DisplayPartyMenuStdMessage(sFieldMoveCursorCallbacks[fieldMove].msgId);
break;
}
- gTasks[taskId].func = task_brm_cancel_1_on_keypad_a_or_b;
+ gTasks[taskId].func = Task_CancelAfterAorBPress;
}
}
}
-static void sub_81B5674(u8 taskId)
+static void DisplayFieldMoveExitAreaMessage(u8 taskId)
{
- sub_81B1B5C(gStringVar4, 1);
- gTasks[taskId].func = sub_81B56A4;
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ gTasks[taskId].func = Task_FieldMoveExitAreaYesNo;
}
-static void sub_81B56A4(u8 taskId)
+static void Task_FieldMoveExitAreaYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B56D8;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleFieldMoveExitAreaYesNoInput;
}
}
-static void sub_81B56D8(u8 taskId)
+static void Task_HandleFieldMoveExitAreaYesNoInput(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
- gUnknown_0203CEC8.exitCallback = CB2_ReturnToField;
- sub_81B12C0(taskId);
+ gPartyMenu.exitCallback = CB2_ReturnToField;
+ Task_ClosePartyMenu(taskId);
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
gFieldCallback2 = NULL;
gPostMenuFieldCallback = NULL;
- sub_81B1C1C(taskId);
+ Task_ReturnToChooseMonAfterText(taskId);
break;
}
}
@@ -4848,40 +3746,40 @@ static void sub_81B56D8(u8 taskId)
bool8 FieldCallback_PrepareFadeInFromMenu(void)
{
pal_fill_black();
- CreateTask(task_launch_hm_phase_2, 8);
+ CreateTask(Task_FieldMoveWaitForFade, 8);
return TRUE;
}
-static void task_launch_hm_phase_2(u8 taskId)
+static void Task_FieldMoveWaitForFade(u8 taskId)
{
if (IsWeatherNotFadingIn() == TRUE)
{
- gFieldEffectArguments[0] = brm_get_selected_species();
+ gFieldEffectArguments[0] = GetFieldMoveMonSpecies();
gPostMenuFieldCallback();
DestroyTask(taskId);
}
}
-static u16 brm_get_selected_species(void)
+static u16 GetFieldMoveMonSpecies(void)
{
- return GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES);
+ return GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
}
-static void task_brm_cancel_1_on_keypad_a_or_b(u8 taskId)
+static void Task_CancelAfterAorBPress(u8 taskId)
{
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
CursorCb_Cancel1(taskId);
}
-static void sub_81B57DC(void)
+static void DisplayCantUseFlashMessage(void)
{
if (FlagGet(FLAG_SYS_USE_FLASH) == TRUE)
- display_pokemon_menu_message(12);
+ DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_IN_USE);
else
- display_pokemon_menu_message(13);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE);
}
-static void hm_surf_run_dp02scr(void)
+static void FieldCallback_Surf(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
FieldEffectStart(FLDEFF_USE_SURF);
@@ -4892,18 +3790,18 @@ static bool8 SetUpFieldMove_Surf(void)
if (PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
- gPostMenuFieldCallback = hm_surf_run_dp02scr;
+ gPostMenuFieldCallback = FieldCallback_Surf;
return TRUE;
}
return FALSE;
}
-static void sub_81B5864(void)
+static void DisplayCantUseSurfMessage(void)
{
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- display_pokemon_menu_message(9);
+ DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_SURFING);
else
- display_pokemon_menu_message(8);
+ DisplayPartyMenuStdMessage(PARTY_MSG_CANT_SURF_HERE);
}
static bool8 SetUpFieldMove_Fly(void)
@@ -4914,12 +3812,12 @@ static bool8 SetUpFieldMove_Fly(void)
return FALSE;
}
-void sub_81B58A8(void)
+void CB2_ReturnToPartyMenuFromFlyMap(void)
{
- InitPartyMenu(0, 0, 0, 1, 0, sub_81B1370, CB2_ReturnToFieldWithOpenMenu);
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldWithOpenMenu);
}
-static void hm2_waterfall(void)
+static void FieldCallback_Waterfall(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
FieldEffectStart(FLDEFF_USE_WATERFALL);
@@ -4933,13 +3831,13 @@ static bool8 SetUpFieldMove_Waterfall(void)
if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE && IsPlayerSurfingNorth() == TRUE)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
- gPostMenuFieldCallback = hm2_waterfall;
+ gPostMenuFieldCallback = FieldCallback_Waterfall;
return TRUE;
}
return FALSE;
}
-static void sub_81B5958(void)
+static void FieldCallback_Dive(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
FieldEffectStart(FLDEFF_USE_DIVE);
@@ -4951,64 +3849,66 @@ static bool8 SetUpFieldMove_Dive(void)
if (gFieldEffectArguments[1] != 0)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
- gPostMenuFieldCallback = sub_81B5958;
+ gPostMenuFieldCallback = FieldCallback_Dive;
return TRUE;
}
return FALSE;
}
-static void party_menu_icon_anim(struct Pokemon *mon, struct Struct203CEDC *ptr, u32 a)
+static void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox, u32 slot)
{
- u32 bit = 1;
+ bool32 handleDeoxys = TRUE;
u16 species2;
+ // If in a multi battle, show partners Deoxys icon as Normal forme
if (IsMultiBattle() == TRUE && gMain.inBattle)
- bit = (gUnknown_08616020[a] ^ bit) ? 1 : 0;
+ handleDeoxys = (sMultiBattlePartnersPartyMask[slot] ^ handleDeoxys) ? TRUE : FALSE;
+
species2 = GetMonData(mon, MON_DATA_SPECIES2);
- party_menu_link_mon_icon_anim(species2, GetMonData(mon, MON_DATA_PERSONALITY), ptr, 1, bit);
- sub_81B5B38(ptr->monSpriteId, mon);
+ CreatePartyMonIconSpriteParameterized(species2, GetMonData(mon, MON_DATA_PERSONALITY), menuBox, 1, handleDeoxys);
+ UpdatePartyMonHPBar(menuBox->monSpriteId, mon);
}
-static void party_menu_link_mon_icon_anim(u16 species, u32 pid, struct Struct203CEDC *ptr, u8 priority, u32 bit)
+static void CreatePartyMonIconSpriteParameterized(u16 species, u32 pid, struct PartyMenuBox *menuBox, u8 priority, bool32 handleDeoxys)
{
if (species != SPECIES_NONE)
{
- ptr->monSpriteId = CreateMonIcon(species, sub_80D3014, ptr->unk4[0], ptr->unk4[1], 4, pid, bit);
- gSprites[ptr->monSpriteId].oam.priority = priority;
+ menuBox->monSpriteId = CreateMonIcon(species, SpriteCB_MonIcon, menuBox->spriteCoords[0], menuBox->spriteCoords[1], 4, pid, handleDeoxys);
+ gSprites[menuBox->monSpriteId].oam.priority = priority;
}
}
-static void sub_81B5A8C(u8 spriteId, u16 hp, u16 maxhp)
+static void UpdateHPBar(u8 spriteId, u16 hp, u16 maxhp)
{
switch (GetHPBarLevel(hp, maxhp))
{
case HP_BAR_FULL:
- sub_80D32C8(&gSprites[spriteId], 0);
+ SetPartyHPBarSprite(&gSprites[spriteId], 0);
break;
case HP_BAR_GREEN:
- sub_80D32C8(&gSprites[spriteId], 1);
+ SetPartyHPBarSprite(&gSprites[spriteId], 1);
break;
case HP_BAR_YELLOW:
- sub_80D32C8(&gSprites[spriteId], 2);
+ SetPartyHPBarSprite(&gSprites[spriteId], 2);
break;
case HP_BAR_RED:
- sub_80D32C8(&gSprites[spriteId], 3);
+ SetPartyHPBarSprite(&gSprites[spriteId], 3);
break;
default:
- sub_80D32C8(&gSprites[spriteId], 4);
+ SetPartyHPBarSprite(&gSprites[spriteId], 4);
break;
}
}
-static void sub_81B5B38(u8 spriteId, struct Pokemon *mon)
+static void UpdatePartyMonHPBar(u8 spriteId, struct Pokemon *mon)
{
- sub_81B5A8C(spriteId, GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP));
+ UpdateHPBar(spriteId, GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP));
}
-static void AnimateSelectedPartyIcon(u8 spriteId, u8 a)
+static void AnimateSelectedPartyIcon(u8 spriteId, u8 animNum)
{
gSprites[spriteId].data[0] = 0;
- if (a == 0)
+ if (animNum == 0)
{
if (gSprites[spriteId].pos1.x == 16)
{
@@ -5020,71 +3920,71 @@ static void AnimateSelectedPartyIcon(u8 spriteId, u8 a)
gSprites[spriteId].pos2.x = -4;
gSprites[spriteId].pos2.y = 0;
}
- gSprites[spriteId].callback = UpdatePartyMonIconFrame;
+ gSprites[spriteId].callback = SpriteCB_UpdatePartyMonIcon;
}
else
{
gSprites[spriteId].pos2.x = 0;
gSprites[spriteId].pos2.y = 0;
- gSprites[spriteId].callback = UpdatePartyMonIconFrameAndBounce;
+ gSprites[spriteId].callback = SpriteCB_BouncePartyMonIcon;
}
}
-static void UpdatePartyMonIconFrameAndBounce(struct Sprite *sprite)
+static void SpriteCB_BouncePartyMonIcon(struct Sprite *sprite)
{
- u8 unk = UpdateMonIconFrame(sprite);
+ u8 animCmd = UpdateMonIconFrame(sprite);
- if (unk != 0)
+ if (animCmd != 0)
{
- if (unk & 1)
+ if (animCmd & 1) // % 2 also matches
sprite->pos2.y = -3;
else
sprite->pos2.y = 1;
}
}
-static void UpdatePartyMonIconFrame(struct Sprite *sprite)
+static void SpriteCB_UpdatePartyMonIcon(struct Sprite *sprite)
{
UpdateMonIconFrame(sprite);
}
-static void party_menu_held_item_object(struct Pokemon *mon, struct Struct203CEDC *ptr)
+static void CreatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
{
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
{
- ptr->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, ptr->unk4[2], ptr->unk4[3], 0);
- sub_81B5C94(mon, ptr);
+ menuBox->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, menuBox->spriteCoords[2], menuBox->spriteCoords[3], 0);
+ UpdatePartyMonHeldItemSprite(mon, menuBox);
}
}
-static void party_menu_link_mon_held_item_object(u16 species, u16 item, struct Struct203CEDC *ptr)
+static void CreatePartyMonHeldItemSpriteParameterized(u16 species, u16 item, struct PartyMenuBox *menuBox)
{
if (species != SPECIES_NONE)
{
- ptr->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, ptr->unk4[2], ptr->unk4[3], 0);
- gSprites[ptr->itemSpriteId].oam.priority = 0;
- sub_81B5CB0(item, ptr);
+ menuBox->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, menuBox->spriteCoords[2], menuBox->spriteCoords[3], 0);
+ gSprites[menuBox->itemSpriteId].oam.priority = 0;
+ ShowOrHideHeldItemSprite(item, menuBox);
}
}
-static void sub_81B5C94(struct Pokemon *mon, struct Struct203CEDC *ptr)
+static void UpdatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
{
- sub_81B5CB0(GetMonData(mon, MON_DATA_HELD_ITEM), ptr);
+ ShowOrHideHeldItemSprite(GetMonData(mon, MON_DATA_HELD_ITEM), menuBox);
}
-static void sub_81B5CB0(u16 item, struct Struct203CEDC *ptr)
+static void ShowOrHideHeldItemSprite(u16 item, struct PartyMenuBox *menuBox)
{
if (item == ITEM_NONE)
{
- gSprites[ptr->itemSpriteId].invisible = TRUE;
+ gSprites[menuBox->itemSpriteId].invisible = TRUE;
}
else
{
if (ItemIsMail(item))
- StartSpriteAnim(&gSprites[ptr->itemSpriteId], 1);
+ StartSpriteAnim(&gSprites[menuBox->itemSpriteId], 1);
else
- StartSpriteAnim(&gSprites[ptr->itemSpriteId], 0);
- gSprites[ptr->itemSpriteId].invisible = FALSE;
+ StartSpriteAnim(&gSprites[menuBox->itemSpriteId], 0);
+ gSprites[menuBox->itemSpriteId].invisible = FALSE;
}
}
@@ -5094,33 +3994,33 @@ void LoadHeldItemIcons(void)
LoadSpritePalette(&sSpritePalette_HeldItem);
}
-void sub_81B5D4C(u8 *a, u8 *b, u8 c)
+void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty)
{
u16 i;
u16 item;
- switch (c)
+ switch (whichParty)
{
- case 0:
- for (i = 0; i < a[0]; i++)
+ case TRADE_PLAYER:
+ for (i = 0; i < partyCounts[TRADE_PLAYER]; i++)
{
item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
if (item != ITEM_NONE)
- sub_81B5DF0(b[i], ItemIsMail(item));
+ CreateHeldItemSpriteForTrade(partySpriteIds[i], ItemIsMail(item));
}
break;
- case 1:
- for (i = 0; i < a[1]; i++)
+ case TRADE_PARTNER:
+ for (i = 0; i < partyCounts[TRADE_PARTNER]; i++)
{
item = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM);
if (item != ITEM_NONE)
- sub_81B5DF0(b[i + 6], ItemIsMail(item));
+ CreateHeldItemSpriteForTrade(partySpriteIds[i + PARTY_SIZE], ItemIsMail(item));
}
break;
}
}
-static void sub_81B5DF0(u8 spriteId, u8 isMail)
+static void CreateHeldItemSpriteForTrade(u8 spriteId, bool8 isMail)
{
u8 subpriority = gSprites[spriteId].subpriority;
u8 newSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, 250, 170, subpriority - 1);
@@ -5149,22 +4049,23 @@ static void SpriteCB_HeldItem(struct Sprite *sprite)
}
}
-static void party_menu_pokeball_object(struct Pokemon *mon, struct Struct203CEDC *ptr)
+static void CreatePartyMonPokeballSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
{
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
- ptr->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, ptr->unk4[6], ptr->unk4[7], 8);
+ menuBox->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, menuBox->spriteCoords[6], menuBox->spriteCoords[7], 8);
}
-static void party_menu_link_mon_pokeball_object(u16 species, struct Struct203CEDC *ptr)
+static void CreatePartyMonPokeballSpriteParameterized(u16 species, struct PartyMenuBox *menuBox)
{
if (species != SPECIES_NONE)
{
- ptr->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, ptr->unk4[6], ptr->unk4[7], 8);
- gSprites[ptr->pokeballSpriteId].oam.priority = 0;
+ menuBox->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, menuBox->spriteCoords[6], menuBox->spriteCoords[7], 8);
+ gSprites[menuBox->pokeballSpriteId].oam.priority = 0;
}
}
-static u8 sub_81B5F34(u8 x, u8 y)
+// For Cancel when Confirm isnt present
+static u8 CreatePokeballButtonSprite(u8 x, u8 y)
{
u8 spriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, x, y, 8);
@@ -5172,19 +4073,22 @@ static u8 sub_81B5F34(u8 x, u8 y)
return spriteId;
}
-static u8 sub_81B5F74(u8 x, u8 y)
+// For Confirm and Cancel when both are present
+static u8 CreateSmallPokeballButtonSprite(u8 x, u8 y)
{
- return CreateSprite(&gSpriteTemplate_8615F78, x, y, 8);
+ return CreateSprite(&sSpriteTemplate_MenuPokeballSmall, x, y, 8);
}
-static void sub_81B5F98(u8 spriteId, u8 a)
+static void PartyMenuStartSpriteAnim(u8 spriteId, u8 animNum)
{
- StartSpriteAnim(&gSprites[spriteId], a);
+ StartSpriteAnim(&gSprites[spriteId], animNum);
}
-static void sub_81B5FBC(u8 spriteId, u8 spriteId2, u8 a)
+// Unused. Might explain the large blank section in gPartyMenuPokeballSmall_Gfx
+// At the very least this is how the unused anim cmds for sSpriteAnimTable_MenuPokeballSmall were meant to be accessed
+static void SpriteCB_BounceConfirmCancelButton(u8 spriteId, u8 spriteId2, u8 animNum)
{
- if (a == 0)
+ if (animNum == 0)
{
StartSpriteAnim(&gSprites[spriteId], 2);
StartSpriteAnim(&gSprites[spriteId2], 4);
@@ -5207,41 +4111,41 @@ static void LoadPartyMenuPokeballGfx(void)
LoadCompressedSpritePalette(&sSpritePalette_MenuPokeball);
}
-static void party_menu_status_condition_object(struct Pokemon *mon, struct Struct203CEDC *ptr)
+static void CreatePartyMonStatusSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox)
{
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
{
- ptr->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, ptr->unk4[4], ptr->unk4[5], 0);
- party_menu_get_status_condition_and_update_object(mon, ptr);
+ menuBox->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, menuBox->spriteCoords[4], menuBox->spriteCoords[5], 0);
+ SetPartyMonAilmentGfx(mon, menuBox);
}
}
-static void party_menu_link_mon_status_condition_object(u16 species, u8 status, struct Struct203CEDC *ptr)
+static void CreatePartyMonStatusSpriteParameterized(u16 species, u8 status, struct PartyMenuBox *menuBox)
{
if (species != SPECIES_NONE)
{
- ptr->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, ptr->unk4[4], ptr->unk4[5], 0);
- party_menu_update_status_condition_object(status, ptr);
- gSprites[ptr->statusSpriteId].oam.priority = 0;
+ menuBox->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, menuBox->spriteCoords[4], menuBox->spriteCoords[5], 0);
+ UpdatePartyMonAilmentGfx(status, menuBox);
+ gSprites[menuBox->statusSpriteId].oam.priority = 0;
}
}
-static void party_menu_get_status_condition_and_update_object(struct Pokemon *mon, struct Struct203CEDC *ptr)
+static void SetPartyMonAilmentGfx(struct Pokemon *mon, struct PartyMenuBox *menuBox)
{
- party_menu_update_status_condition_object(GetMonAilment(mon), ptr);
+ UpdatePartyMonAilmentGfx(GetMonAilment(mon), menuBox);
}
-static void party_menu_update_status_condition_object(u8 status, struct Struct203CEDC *ptr)
+static void UpdatePartyMonAilmentGfx(u8 status, struct PartyMenuBox *menuBox)
{
switch (status)
{
case AILMENT_NONE:
case AILMENT_PKRS:
- gSprites[ptr->statusSpriteId].invisible = TRUE;
+ gSprites[menuBox->statusSpriteId].invisible = TRUE;
break;
default:
- StartSpriteAnim(&gSprites[ptr->statusSpriteId], status - 1);
- gSprites[ptr->statusSpriteId].invisible = FALSE;
+ StartSpriteAnim(&gSprites[menuBox->statusSpriteId], status - 1);
+ gSprites[menuBox->statusSpriteId].invisible = FALSE;
break;
}
}
@@ -5252,68 +4156,68 @@ static void LoadPartyMenuAilmentGfx(void)
LoadCompressedSpritePalette(&sSpritePalette_StatusIcons);
}
-void sub_81B617C(void)
+void CB2_ShowPartyMenuForItemUse(void)
{
- MainCallback callback = c2_815ABFC;
- u8 doubleBattleStatus;
- bool8 inBattle;
+ MainCallback callback = CB2_ReturnToBagMenu;
+ u8 partyLayout;
+ u8 menuType;
u8 i;
- u8 msgIdMaybe;
+ u8 msgId;
TaskFunc task;
if (gMain.inBattle)
{
- inBattle = TRUE;
- doubleBattleStatus = sub_81B8984();
+ menuType = PARTY_MENU_TYPE_IN_BATTLE;
+ partyLayout = GetPartyLayoutFromBattleType();
}
else
{
- inBattle = FALSE;
- doubleBattleStatus = 0;
+ menuType = PARTY_MENU_TYPE_FIELD;
+ partyLayout = PARTY_LAYOUT_SINGLE;
}
if (GetItemEffectType(gSpecialVar_ItemId) == ITEM_EFFECT_SACRED_ASH)
{
- gUnknown_0203CEC8.slotId = 0;
+ gPartyMenu.slotId = 0;
for (i = 0; i < PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
{
- gUnknown_0203CEC8.slotId = i;
+ gPartyMenu.slotId = i;
break;
}
}
- task = sub_81B6280;
- msgIdMaybe = 0x7F;
+ task = Task_SetSacredAshCB;
+ msgId = PARTY_MSG_NONE;
}
else
{
if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_TM_HM)
- msgIdMaybe = 4;
+ msgId = PARTY_MSG_TEACH_WHICH_MON;
else
- msgIdMaybe = 5;
+ msgId = PARTY_MSG_USE_ON_WHICH_MON;
- task = sub_81B1370;
+ task = Task_HandleChooseMonInput;
}
- InitPartyMenu(inBattle, doubleBattleStatus, 3, 1, msgIdMaybe, task, callback);
+ InitPartyMenu(menuType, partyLayout, PARTY_ACTION_USE_ITEM, TRUE, msgId, task, callback);
}
-static void c2_815ABFC(void)
+static void CB2_ReturnToBagMenu(void)
{
if (InBattlePyramid() == FALSE)
GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL);
else
- sub_81C4F98(4, gPyramidBagCursorData.callback);
+ GoToBattlePyramidBagMenu(4, gPyramidBagCursorData.callback);
}
-static void sub_81B6280(u8 taskId)
+static void Task_SetSacredAshCB(u8 taskId)
{
if (!gPaletteFade.active)
{
- if (gUnknown_0203CEC8.unk8_0 == 1)
- gUnknown_0203CEC4->exitCallback = sub_81B9140;
- gUnknown_03006328(taskId, sub_81B6794);
+ if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE)
+ sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen;
+ gItemUseCB(taskId, Task_ClosePartyMenuAfterText); // ItemUseCB_SacredAsh in this case
}
}
@@ -5397,7 +4301,7 @@ static void GetMedicineItemEffectMessage(u16 item)
}
}
-static bool8 UsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item)
+static bool8 NotUsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item)
{
if (GetItemEffectType(item) == ITEM_EFFECT_HP_EV && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_SHEDINJA)
return FALSE;
@@ -5411,10 +4315,10 @@ static bool8 IsItemFlute(u16 item)
return FALSE;
}
-static bool8 ExecuteTableBasedItemEffect__(u8 partyMonIndex, u16 item, u8 monMoveIndex)
+static bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex)
{
if (gMain.inBattle)
- return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, sub_81B8F38(partyMonIndex), monMoveIndex);
+ return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex);
else
return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex);
}
@@ -5422,11 +4326,11 @@ static bool8 ExecuteTableBasedItemEffect__(u8 partyMonIndex, u16 item, u8 monMov
void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
{
u16 hp = 0;
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 item = gSpecialVar_ItemId;
bool8 canHeal;
- if (UsingHPEVItemOnShedinja(mon, item))
+ if (NotUsingHPEVItemOnShedinja(mon, item))
{
canHeal = IsHPRecoveryItem(item);
if (canHeal == TRUE)
@@ -5435,12 +4339,12 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
if (hp == GetMonData(mon, MON_DATA_MAX_HP))
canHeal = FALSE;
}
- if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, item, 0))
+ if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0))
{
iTriedHonestlyIDid:
- gUnknown_0203CEE8 = 0;
+ gPartyMenuUseExitCallback = FALSE;
PlaySE(SE_SELECT);
- sub_81B1B5C(gText_WontHaveEffect, 1);
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = task;
return;
@@ -5448,89 +4352,89 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
}
else
{
- goto iTriedHonestlyIDid;
+ goto iTriedHonestlyIDid; //TODO: resolve this goto
}
- gUnknown_0203CEE8 = 1;
- if (IsItemFlute(item) == FALSE)
+ gPartyMenuUseExitCallback = TRUE;
+ if (!IsItemFlute(item))
{
PlaySE(SE_KAIFUKU);
- if (gUnknown_0203CEC8.unkB != 14)
+ if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM)
RemoveBagItem(item, 1);
}
else
{
PlaySE(SE_BIDORO);
}
- party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]);
- if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].statusSpriteId].invisible)
- DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1);
+ SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
+ if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
if (canHeal == TRUE)
{
if (hp == 0)
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 1);
- sub_81B1F18(taskId, gUnknown_0203CEC8.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B672C);
- sub_81B1FA8(taskId, 0, hp);
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage);
+ ResetHPTaskData(taskId, 0, hp);
return;
}
else
{
GetMonNickname(mon, gStringVar1);
GetMedicineItemEffectMessage(item);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = task;
}
}
-static void sub_81B672C(u8 taskId)
+static void Task_DisplayHPRestoredMessage(u8 taskId)
{
- GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1);
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
- sub_81B1B5C(gStringVar4, 0);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
schedule_bg_copy_tilemap_to_vram(2);
HandleBattleLowHpMusicChange();
- gTasks[taskId].func = sub_81B6794;
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
-static void sub_81B6794(u8 taskId)
+static void Task_ClosePartyMenuAfterText(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- if (gUnknown_0203CEE8 == 0)
- gUnknown_0203CEC4->exitCallback = NULL;
- sub_81B12C0(taskId);
+ if (gPartyMenuUseExitCallback == FALSE)
+ sPartyMenuInternal->exitCallback = NULL;
+ Task_ClosePartyMenu(taskId);
}
}
-void sub_81B67C8(u8 taskId, TaskFunc task)
+void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 item = gSpecialVar_ItemId;
u8 effectType = GetItemEffectType(item);
u16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP);
- u16 relevantEV = ItemEffectToMonEv(mon, effectType);
- bool8 cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, item, 0);
+ u16 ev = ItemEffectToMonEv(mon, effectType);
+ bool8 cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0);
u16 newFriendship = GetMonData(mon, MON_DATA_FRIENDSHIP);
- u16 newRelevantEV = ItemEffectToMonEv(mon, effectType);
+ u16 newEv = ItemEffectToMonEv(mon, effectType);
- if (cannotUseEffect || (friendship == newFriendship && relevantEV == newRelevantEV))
+ if (cannotUseEffect || (friendship == newFriendship && ev == newEv))
{
- gUnknown_0203CEE8 = 0;
+ gPartyMenuUseExitCallback = FALSE;
PlaySE(SE_SELECT);
- sub_81B1B5C(gText_WontHaveEffect, 1);
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = task;
}
else
{
- gUnknown_0203CEE8 = 1;
+ gPartyMenuUseExitCallback = TRUE;
PlaySE(SE_KAIFUKU);
RemoveBagItem(item, 1);
GetMonNickname(mon, gStringVar1);
ItemEffectToStatString(effectType, gStringVar2);
if (friendship != newFriendship)
{
- if (relevantEV != newRelevantEV)
+ if (ev != newEv)
StringExpandPlaceholders(gStringVar4, gText_PkmnFriendlyBaseVar2Fell);
else
StringExpandPlaceholders(gStringVar4, gText_PkmnFriendlyBaseVar2CantFall);
@@ -5539,7 +4443,7 @@ void sub_81B67C8(u8 taskId, TaskFunc task)
{
StringExpandPlaceholders(gStringVar4, gText_PkmnAdoresBaseVar2Fell);
}
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = task;
}
@@ -5592,18 +4496,18 @@ static void ItemEffectToStatString(u8 effectType, u8 *dest)
}
}
-static void sub_81B6A10(u8 slot)
+static void ShowMoveSelectWindow(u8 slot)
{
u8 i;
u8 moveCount = 0;
u8 fontId = 1;
- u8 windowId = sub_81B31B0(3);
+ u8 windowId = DisplaySelectionWindow(SELECTWINDOW_MOVES);
u16 move;
for (i = 0; i < MAX_MON_MOVES; i++)
{
move = GetMonData(&gPlayerParty[slot], MON_DATA_MOVE1 + i);
- AddTextPrinterParameterized(windowId, fontId, gMoveNames[move], 8, (i * 16) + 1, 0xFF, NULL);
+ AddTextPrinterParameterized(windowId, fontId, gMoveNames[move], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL);
if (move != MOVE_NONE)
moveCount++;
}
@@ -5611,7 +4515,7 @@ static void sub_81B6A10(u8 slot)
schedule_bg_copy_tilemap_to_vram(2);
}
-static void ether_effect_related_3(u8 taskId)
+static void Task_HandleWhichMoveInput(u8 taskId)
{
s8 input = Menu_ProcessInput();
@@ -5620,17 +4524,17 @@ static void ether_effect_related_3(u8 taskId)
if (input == MENU_B_PRESSED)
{
PlaySE(SE_SELECT);
- sub_81B6BB4(taskId);
+ ReturnToUseOnWhichMon(taskId);
}
else
{
- sub_81B302C(&gUnknown_0203CEC4->windowId[1]);
- ether_effect_related_2(taskId);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
+ SetSelectedMoveForPPItem(taskId);
}
}
}
-void dp05_ether(u8 taskId, TaskFunc task)
+void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task)
{
const u8 *effect;
u16 item = gSpecialVar_ItemId;
@@ -5642,76 +4546,76 @@ void dp05_ether(u8 taskId, TaskFunc task)
if (!(effect[4] & ITEM4_HEAL_PP_ONE))
{
- gUnknown_0203CEC8.unkE = 0;
- ether_effect_related(taskId);
+ gPartyMenu.data1 = 0;
+ TryUsePPItem(taskId);
}
else
{
PlaySE(SE_SELECT);
- display_pokemon_menu_message(22);
- sub_81B6A10(gUnknown_0203CEC8.slotId);
- gTasks[taskId].func = ether_effect_related_3;
+ DisplayPartyMenuStdMessage(PARTY_MSG_RESTORE_WHICH_MOVE);
+ ShowMoveSelectWindow(gPartyMenu.slotId);
+ gTasks[taskId].func = Task_HandleWhichMoveInput;
}
}
-static void ether_effect_related_2(u8 taskId)
+static void SetSelectedMoveForPPItem(u8 taskId)
{
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- gUnknown_0203CEC8.unkE = Menu_GetCursorPos();
- ether_effect_related(taskId);
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ gPartyMenu.data1 = Menu_GetCursorPos();
+ TryUsePPItem(taskId);
}
-static void sub_81B6BB4(u8 taskId)
+static void ReturnToUseOnWhichMon(u8 taskId)
{
- gTasks[taskId].func = sub_81B1370;
- gUnknown_0203CEC4->exitCallback = NULL;
- sub_81B302C(&gUnknown_0203CEC4->windowId[0]);
- display_pokemon_menu_message(5);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
+ sPartyMenuInternal->exitCallback = NULL;
+ PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]);
+ DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON);
}
-static void ether_effect_related(u8 taskId)
+static void TryUsePPItem(u8 taskId)
{
u16 move = MOVE_NONE;
- s16 *moveslot = &gUnknown_0203CEC8.unkE;
+ s16 *moveSlot = &gPartyMenu.data1;
u16 item = gSpecialVar_ItemId;
- struct Struct203CEC8 *ptr = &gUnknown_0203CEC8;
+ struct PartyMenu *ptr = &gPartyMenu;
struct Pokemon *mon;
- if (ExecuteTableBasedItemEffect__(ptr->slotId, item, *moveslot))
+ if (ExecuteTableBasedItemEffect_(ptr->slotId, item, *moveSlot))
{
- gUnknown_0203CEE8 = 0;
+ gPartyMenuUseExitCallback = FALSE;
PlaySE(SE_SELECT);
- sub_81B1B5C(gText_WontHaveEffect, 1);
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B6794;
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
else
{
- gUnknown_0203CEE8 = 1;
+ gPartyMenuUseExitCallback = TRUE;
mon = &gPlayerParty[ptr->slotId];
PlaySE(SE_KAIFUKU);
RemoveBagItem(item, 1);
- move = GetMonData(mon, MON_DATA_MOVE1 + *moveslot);
+ move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot);
StringCopy(gStringVar1, gMoveNames[move]);
GetMedicineItemEffectMessage(item);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B6794;
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
}
-void dp05_pp_up(u8 taskId, TaskFunc task)
+void ItemUseCB_PPUp(u8 taskId, TaskFunc task)
{
PlaySE(SE_SELECT);
- display_pokemon_menu_message(23);
- sub_81B6A10(gUnknown_0203CEC8.slotId);
- gTasks[taskId].func = ether_effect_related_3;
+ DisplayPartyMenuStdMessage(PARTY_MSG_BOOST_PP_WHICH_MOVE);
+ ShowMoveSelectWindow(gPartyMenu.slotId);
+ gTasks[taskId].func = Task_HandleWhichMoveInput;
}
u16 ItemIdToBattleMoveId(u16 item)
{
u16 tmNumber = item - ITEM_TM01_FOCUS_PUNCH;
- return gTMHMMoves[tmNumber];
+ return sTMHMMoves[tmNumber];
}
bool8 IsMoveHm(u16 move)
@@ -5720,7 +4624,7 @@ bool8 IsMoveHm(u16 move)
for (i = 0; i < NUM_HIDDEN_MACHINES; i++)
{
- if (gTMHMMoves[i + NUM_TECHNICAL_MACHINES] == move)
+ if (sTMHMMoves[i + NUM_TECHNICAL_MACHINES] == move)
return TRUE;
}
return FALSE;
@@ -5738,30 +4642,30 @@ bool8 MonKnowsMove(struct Pokemon *mon, u16 move)
return FALSE;
}
-static void sub_81B6D74(const u8 *str)
+static void DisplayLearnMoveMessage(const u8 *str)
{
StringExpandPlaceholders(gStringVar4, str);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
}
-static void sub_81B6D98(u8 taskId, const u8 *str)
+static void DisplayLearnMoveMessageAndClose(u8 taskId, const u8 *str)
{
- sub_81B6D74(str);
- gTasks[taskId].func = sub_81B6794;
+ DisplayLearnMoveMessage(str);
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
// move[1] doesn't use constants cause I don't know if it's actually a move ID storage
-void sub_81B6DC4(u8 taskId, TaskFunc task)
+void ItemUseCB_TMHM(u8 taskId, TaskFunc task)
{
struct Pokemon *mon;
s16 *move;
u16 item;
PlaySE(SE_SELECT);
- mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
- move = &gUnknown_0203CEC8.unkE;
+ mon = &gPlayerParty[gPartyMenu.slotId];
+ move = &gPartyMenu.data1;
item = gSpecialVar_ItemId;
GetMonNickname(mon, gStringVar1);
move[0] = ItemIdToBattleMoveId(item);
@@ -5771,28 +4675,28 @@ void sub_81B6DC4(u8 taskId, TaskFunc task)
switch (CanMonLearnTMTutor(mon, item, 0))
{
case CANNOT_LEARN_MOVE:
- sub_81B6D98(taskId, gText_PkmnCantLearnMove);
+ DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove);
return;
case ALREADY_KNOWS_MOVE:
- sub_81B6D98(taskId, gText_PkmnAlreadyKnows);
+ DisplayLearnMoveMessageAndClose(taskId, gText_PkmnAlreadyKnows);
return;
}
- if (GiveMoveToMon(mon, move[0]) != 0xFFFF)
+ if (GiveMoveToMon(mon, move[0]) != MON_HAS_MAX_MOVES)
{
- gTasks[taskId].func = sub_81B6EB4;
+ gTasks[taskId].func = Task_LearnedMove;
}
else
{
- sub_81B6D74(gText_PkmnNeedsToReplaceMove);
- gTasks[taskId].func = sub_81B6FF4;
+ DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
}
}
-static void sub_81B6EB4(u8 taskId)
+static void Task_LearnedMove(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
- s16 *move = &gUnknown_0203CEC8.unkE;
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ s16 *move = &gPartyMenu.data1;
u16 item = gSpecialVar_ItemId;
if (move[1] == 0)
@@ -5804,186 +4708,188 @@ static void sub_81B6EB4(u8 taskId)
GetMonNickname(mon, gStringVar1);
StringCopy(gStringVar2, gMoveNames[move[0]]);
StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B6F60;
+ gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText;
}
-static void sub_81B6F60(u8 taskId)
+static void Task_DoLearnedMoveFanfareAfterText(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
PlayFanfare(MUS_FANFA1);
- gTasks[taskId].func = sub_81B6F98;
+ gTasks[taskId].func = Task_LearnNextMoveOrClosePartyMenu;
}
}
-static void sub_81B6F98(u8 taskId)
+static void Task_LearnNextMoveOrClosePartyMenu(u8 taskId)
{
if (IsFanfareTaskInactive() && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)))
{
- if (gUnknown_0203CEC8.unk10 == 1)
- sub_81B77AC(taskId);
+ if (gPartyMenu.learnMoveState == 1)
+ Task_TryLearningNextMove(taskId);
else
{
- if (gUnknown_0203CEC8.unk10 == 2)
+ if (gPartyMenu.learnMoveState == 2) // never occurs
gSpecialVar_Result = TRUE;
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
}
}
}
-static void sub_81B6FF4(u8 taskId)
+static void Task_ReplaceMoveYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B7028;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleReplaceMoveYesNoInput;
}
}
-static void sub_81B7028(u8 taskId)
+static void Task_HandleReplaceMoveYesNoInput(u8 taskId)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
- sub_81B1B5C(gText_WhichMoveToForget, 1);
- gTasks[taskId].func = sub_81B7088;
+ DisplayPartyMenuMessage(gText_WhichMoveToForget, TRUE);
+ gTasks[taskId].func = Task_ShowSummaryScreenToForgetMove;
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
- sub_81B7230(taskId);
+ StopLearningMovePrompt(taskId);
break;
}
}
-static void sub_81B7088(u8 taskId)
+static void Task_ShowSummaryScreenToForgetMove(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- gUnknown_0203CEC4->exitCallback = sub_81B70B8;
- sub_81B12C0(taskId);
+ sPartyMenuInternal->exitCallback = CB2_ShowSummaryScreenToForgetMove;
+ Task_ClosePartyMenu(taskId);
}
}
-static void sub_81B70B8(void)
+static void CB2_ShowSummaryScreenToForgetMove(void)
{
- ShowSelectMovePokemonSummaryScreen(gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B70F0, gUnknown_0203CEC8.unkE);
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuWhileLearningMove, gPartyMenu.data1);
}
-static void sub_81B70F0(void)
+static void CB2_ReturnToPartyMenuWhileLearningMove(void)
{
- InitPartyMenu(0, 0, 0, 1, 0x7F, sub_81B711C, gUnknown_0203CEC8.exitCallback);
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback);
}
-static void sub_81B711C(u8 taskId)
+static void Task_ReturnToPartyMenuWhileLearningMove(u8 taskId)
{
if (!gPaletteFade.active)
{
- if (sub_81C1B94() != 4)
- sub_81B7154(taskId);
+ if (GetMoveSlotToReplace() != MAX_MON_MOVES)
+ DisplayPartyMenuForgotMoveMessage(taskId);
else
- sub_81B7230(taskId);
+ StopLearningMovePrompt(taskId);
}
}
-static void sub_81B7154(u8 taskId)
+static void DisplayPartyMenuForgotMoveMessage(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
- u16 move = GetMonData(mon, MON_DATA_MOVE1 + sub_81C1B94());
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ u16 move = GetMonData(mon, MON_DATA_MOVE1 + GetMoveSlotToReplace());
GetMonNickname(mon, gStringVar1);
StringCopy(gStringVar2, gMoveNames[move]);
- sub_81B6D74(gText_12PoofForgotMove);
- gTasks[taskId].func = sub_81B71D4;
+ DisplayLearnMoveMessage(gText_12PoofForgotMove);
+ gTasks[taskId].func = Task_PartyMenuReplaceMove;
}
-static void sub_81B71D4(u8 taskId)
+static void Task_PartyMenuReplaceMove(u8 taskId)
{
struct Pokemon *mon;
u16 move;
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
- RemoveMonPPBonus(mon, sub_81C1B94());
- move = gUnknown_0203CEC8.unkE;
- SetMonMoveSlot(mon, move, sub_81C1B94());
- sub_81B6EB4(taskId);
+ mon = &gPlayerParty[gPartyMenu.slotId];
+ RemoveMonPPBonus(mon, GetMoveSlotToReplace());
+ move = gPartyMenu.data1;
+ SetMonMoveSlot(mon, move, GetMoveSlotToReplace());
+ Task_LearnedMove(taskId);
}
}
-static void sub_81B7230(u8 taskId)
+static void StopLearningMovePrompt(u8 taskId)
{
- StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]);
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
StringExpandPlaceholders(gStringVar4, gText_StopLearningMove2);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B7294;
+ gTasks[taskId].func = Task_StopLearningMoveYesNo;
}
-static void sub_81B7294(u8 taskId)
+static void Task_StopLearningMoveYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B72C8;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleStopLearningMoveYesNoInput;
}
}
-static void sub_81B72C8(u8 taskId)
+static void Task_HandleStopLearningMoveYesNoInput(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
GetMonNickname(mon, gStringVar1);
- StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]);
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
StringExpandPlaceholders(gStringVar4, gText_MoveNotLearned);
- sub_81B1B5C(gStringVar4, 1);
- if (gUnknown_0203CEC8.unk10 == 1)
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
+ if (gPartyMenu.learnMoveState == 1)
{
- gTasks[taskId].func = sub_81B73E4;
+ gTasks[taskId].func = Task_TryLearningNextMoveAfterText;
}
else
{
- if (gUnknown_0203CEC8.unk10 == 2)
+ if (gPartyMenu.learnMoveState == 2) // never occurs
gSpecialVar_Result = FALSE;
- gTasks[taskId].func = sub_81B6794;
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
+ // fallthrough
case 1:
GetMonNickname(mon, gStringVar1);
- StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]);
- sub_81B6D74(gText_PkmnNeedsToReplaceMove);
- gTasks[taskId].func = sub_81B6FF4;
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
+ DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
break;
}
}
-static void sub_81B73E4(u8 taskId)
+static void Task_TryLearningNextMoveAfterText(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
- sub_81B77AC(taskId);
+ if (IsPartyMenuTextPrinterActive() != TRUE)
+ Task_TryLearningNextMove(taskId);
}
-void dp05_rare_candy(u8 taskId, TaskFunc task)
+void ItemUseCB_RareCandy(u8 taskId, TaskFunc task)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
- struct Struct203CEC4 *ptr = gUnknown_0203CEC4;
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
+ struct PartyMenuInternal *ptr = sPartyMenuInternal;
s16 *arrayPtr = ptr->data;
u16 *itemPtr = &gSpecialVar_ItemId;
bool8 cannotUseEffect;
if (GetMonData(mon, MON_DATA_LEVEL) != MAX_LEVEL)
{
- sub_81B79A0(mon, arrayPtr);
- cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, *itemPtr, 0);
- sub_81B79A0(mon, &ptr->data[6]);
+ BufferMonStatsToTaskData(mon, arrayPtr);
+ cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, *itemPtr, 0);
+ BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]);
}
else
{
@@ -5992,166 +4898,166 @@ void dp05_rare_candy(u8 taskId, TaskFunc task)
PlaySE(SE_SELECT);
if (cannotUseEffect)
{
- gUnknown_0203CEE8 = 0;
- sub_81B1B5C(gText_WontHaveEffect, 1);
+ gPartyMenuUseExitCallback = FALSE;
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = task;
}
else
{
- gUnknown_0203CEE8 = 1;
+ gPartyMenuUseExitCallback = TRUE;
PlayFanfareByFanfareNum(0);
- sub_81B754C(gUnknown_0203CEC8.slotId, mon);
+ UpdateMonDisplayInfoAfterRareCandy(gPartyMenu.slotId, mon);
RemoveBagItem(gSpecialVar_ItemId, 1);
GetMonNickname(mon, gStringVar1);
- ConvertIntToDecimalStringN(gStringVar2, GetMonData(mon, MON_DATA_LEVEL), 0, 3);
+ ConvertIntToDecimalStringN(gStringVar2, GetMonData(mon, MON_DATA_LEVEL), STR_CONV_MODE_LEFT_ALIGN, 3);
StringExpandPlaceholders(gStringVar4, gText_PkmnElevatedToLvVar2);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B75D4;
+ gTasks[taskId].func = Task_DisplayLevelUpStatsPg1;
}
}
-static void sub_81B754C(u8 slot, struct Pokemon *mon)
+static void UpdateMonDisplayInfoAfterRareCandy(u8 slot, struct Pokemon *mon)
{
- party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[slot]);
- if (gSprites[gUnknown_0203CEDC[slot].statusSpriteId].invisible)
- DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[slot], 1);
- DisplayPartyPokemonHPCheck(mon, &gUnknown_0203CEDC[slot], 1);
- DisplayPartyPokemonMaxHPCheck(mon, &gUnknown_0203CEDC[slot], 1);
- DisplayPartyPokemonHPBarCheck(mon, &gUnknown_0203CEDC[slot]);
- sub_81B5B38(gUnknown_0203CEDC[slot].monSpriteId, mon);
- sub_81B0FCC(slot, 1);
+ SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[slot]);
+ if (gSprites[sPartyMenuBoxes[slot].statusSpriteId].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[slot], 1);
+ DisplayPartyPokemonHPCheck(mon, &sPartyMenuBoxes[slot], 1);
+ DisplayPartyPokemonMaxHPCheck(mon, &sPartyMenuBoxes[slot], 1);
+ DisplayPartyPokemonHPBarCheck(mon, &sPartyMenuBoxes[slot]);
+ UpdatePartyMonHPBar(sPartyMenuBoxes[slot].monSpriteId, mon);
+ AnimatePartySlot(slot, 1);
schedule_bg_copy_tilemap_to_vram(0);
}
-static void sub_81B75D4(u8 taskId)
+static void Task_DisplayLevelUpStatsPg1(u8 taskId)
{
- if (WaitFanfare(FALSE) && sub_81B1BD4() != TRUE && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)))
+ if (WaitFanfare(FALSE) && IsPartyMenuTextPrinterActive() != TRUE && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)))
{
PlaySE(SE_SELECT);
- sub_81B767C(taskId);
- gTasks[taskId].func = sub_81B7634;
+ DisplayLevelUpStatsPg1(taskId);
+ gTasks[taskId].func = Task_DisplayLevelUpStatsPg2;
}
}
-static void sub_81B7634(u8 taskId)
+static void Task_DisplayLevelUpStatsPg2(u8 taskId)
{
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
{
PlaySE(SE_SELECT);
- sub_81B76C8(taskId);
- gTasks[taskId].func = sub_81B7704;
+ DisplayLevelUpStatsPg2(taskId);
+ gTasks[taskId].func = Task_TryLearnNewMoves;
}
}
-static void sub_81B767C(u8 taskId)
+static void DisplayLevelUpStatsPg1(u8 taskId)
{
- s16 *arrayPtr = gUnknown_0203CEC4->data;
+ s16 *arrayPtr = sPartyMenuInternal->data;
- arrayPtr[12] = sub_81B3364();
+ arrayPtr[12] = CreateLevelUpStatsWindow();
DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], 1, 2, 3);
CopyWindowToVram(arrayPtr[12], 2);
schedule_bg_copy_tilemap_to_vram(2);
}
-static void sub_81B76C8(u8 taskId)
+static void DisplayLevelUpStatsPg2(u8 taskId)
{
- s16 *arrayPtr = gUnknown_0203CEC4->data;
+ s16 *arrayPtr = sPartyMenuInternal->data;
DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], 1, 2, 3);
CopyWindowToVram(arrayPtr[12], 2);
schedule_bg_copy_tilemap_to_vram(2);
}
-static void sub_81B7704(u8 taskId)
+static void Task_TryLearnNewMoves(u8 taskId)
{
- u16 result;
+ u16 learnMove;
if (WaitFanfare(0) && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)))
{
- sub_81B3394();
- result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.slotId], 1);
- gUnknown_0203CEC8.unk10 = 1;
- switch (result)
+ RemoveLevelUpStatsWindow();
+ learnMove = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], TRUE);
+ gPartyMenu.learnMoveState = 1;
+ switch (learnMove)
{
- case 0:
- sub_81B7810(taskId);
+ case 0: // No moves to learn
+ PartyMenuTryEvolution(taskId);
break;
- case 0xFFFF:
- sub_81B787C(taskId);
+ case MON_HAS_MAX_MOVES:
+ DisplayMonNeedsToReplaceMove(taskId);
break;
- case 0xFFFE:
- gTasks[taskId].func = sub_81B77AC;
+ case MON_ALREADY_KNOWS_MOVE:
+ gTasks[taskId].func = Task_TryLearningNextMove;
break;
default:
- sub_81B7910(taskId, result);
+ DisplayMonLearnedMove(taskId, learnMove);
break;
}
}
}
-static void sub_81B77AC(u8 taskId)
+static void Task_TryLearningNextMove(u8 taskId)
{
- u16 result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.slotId], 0);
+ u16 result = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], FALSE);
switch (result)
{
- case 0:
- sub_81B7810(taskId);
+ case 0: // No moves to learn
+ PartyMenuTryEvolution(taskId);
break;
- case 0xFFFF:
- sub_81B787C(taskId);
+ case MON_HAS_MAX_MOVES:
+ DisplayMonNeedsToReplaceMove(taskId);
break;
- case 0xFFFE:
+ case MON_ALREADY_KNOWS_MOVE:
return;
default:
- sub_81B7910(taskId, result);
+ DisplayMonLearnedMove(taskId, result);
break;
}
}
-static void sub_81B7810(u8 taskId)
+static void PartyMenuTryEvolution(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 targetSpecies = GetEvolutionTargetSpecies(mon, 0, 0);
if (targetSpecies != SPECIES_NONE)
{
FreePartyPointers();
- gCB2_AfterEvolution = gUnknown_0203CEC8.exitCallback;
- BeginEvolutionScene(mon, targetSpecies, 1, gUnknown_0203CEC8.slotId);
+ gCB2_AfterEvolution = gPartyMenu.exitCallback;
+ BeginEvolutionScene(mon, targetSpecies, 1, gPartyMenu.slotId);
DestroyTask(taskId);
}
else
{
- gTasks[taskId].func = sub_81B6794;
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
}
}
-static void sub_81B787C(u8 taskId)
+static void DisplayMonNeedsToReplaceMove(u8 taskId)
{
- GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1);
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
StringCopy(gStringVar2, gMoveNames[gMoveToLearn]);
StringExpandPlaceholders(gStringVar4, gText_PkmnNeedsToReplaceMove);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gUnknown_0203CEC8.unkE = gMoveToLearn;
- gTasks[taskId].func = sub_81B6FF4;
+ gPartyMenu.data1 = gMoveToLearn;
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
}
-static void sub_81B7910(u8 taskId, u16 move)
+static void DisplayMonLearnedMove(u8 taskId, u16 move)
{
- GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1);
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
StringCopy(gStringVar2, gMoveNames[move]);
StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3);
- sub_81B1B5C(gStringVar4, 1);
+ DisplayPartyMenuMessage(gStringVar4, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gUnknown_0203CEC8.unkE = move;
- gTasks[taskId].func = sub_81B6F60;
+ gPartyMenu.data1 = move;
+ gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText;
}
-static void sub_81B79A0(struct Pokemon *mon, s16 *data)
+static void BufferMonStatsToTaskData(struct Pokemon *mon, s16 *data)
{
data[0] = GetMonData(mon, MON_DATA_MAX_HP);
data[1] = GetMonData(mon, MON_DATA_ATK);
@@ -6161,93 +5067,101 @@ static void sub_81B79A0(struct Pokemon *mon, s16 *data)
data[3] = GetMonData(mon, MON_DATA_SPEED);
}
-void sub_81B79E8(u8 taskId, TaskFunc task)
+#define tUsedOnSlot data[0]
+#define tHadEffect data[1]
+#define tLastSlotUsed data[2]
+
+void ItemUseCB_SacredAsh(u8 taskId, TaskFunc task)
{
- gUnknown_0203CEC4->data[0] = 0;
- gUnknown_0203CEC4->data[1] = 0;
- gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.slotId;
- sub_81B7A28(taskId);
+ sPartyMenuInternal->tUsedOnSlot = FALSE;
+ sPartyMenuInternal->tHadEffect = FALSE;
+ sPartyMenuInternal->tLastSlotUsed = gPartyMenu.slotId;
+ UseSacredAsh(taskId);
}
-static void sub_81B7A28(u8 taskId)
+static void UseSacredAsh(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 hp;
if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE)
{
- gTasks[taskId].func = task_sacred_ash_party_loop;
+ gTasks[taskId].func = Task_SacredAshLoop;
return;
}
hp = GetMonData(mon, MON_DATA_HP);
- if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, gSpecialVar_ItemId, 0))
+ if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0))
{
- gTasks[taskId].func = task_sacred_ash_party_loop;
+ gTasks[taskId].func = Task_SacredAshLoop;
return;
}
PlaySE(SE_KAIFUKU);
- party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]);
- if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].statusSpriteId].invisible)
- DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1);
- sub_81B0FCC(gUnknown_0203CEC4->data[2], 0);
- sub_81B0FCC(gUnknown_0203CEC8.slotId, 1);
- sub_81B1F18(taskId, gUnknown_0203CEC8.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B7C10);
- sub_81B1FA8(taskId, 0, hp);
- gUnknown_0203CEC4->data[0] = 1;
- gUnknown_0203CEC4->data[1] = 1;
+ SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]);
+ if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1);
+ AnimatePartySlot(sPartyMenuInternal->tLastSlotUsed, 0);
+ AnimatePartySlot(gPartyMenu.slotId, 1);
+ PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_SacredAshDisplayHPRestored);
+ ResetHPTaskData(taskId, 0, hp);
+ sPartyMenuInternal->tUsedOnSlot = TRUE;
+ sPartyMenuInternal->tHadEffect = TRUE;
}
-static void task_sacred_ash_party_loop(u8 taskId)
+static void Task_SacredAshLoop(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- if (gUnknown_0203CEC4->data[0] == 1)
+ if (sPartyMenuInternal->tUsedOnSlot == TRUE)
{
- gUnknown_0203CEC4->data[0] = 0;
- gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.slotId;
+ sPartyMenuInternal->tUsedOnSlot = FALSE;
+ sPartyMenuInternal->tLastSlotUsed = gPartyMenu.slotId;
}
- if (++(gUnknown_0203CEC8.slotId) == PARTY_SIZE)
+ if (++(gPartyMenu.slotId) == PARTY_SIZE)
{
- if (gUnknown_0203CEC4->data[1] == 0)
+ if (sPartyMenuInternal->tHadEffect == FALSE)
{
- gUnknown_0203CEE8 = 0;
- sub_81B1B5C(gText_WontHaveEffect, 1);
+ gPartyMenuUseExitCallback = FALSE;
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
}
else
{
- gUnknown_0203CEE8 = 1;
+ gPartyMenuUseExitCallback = TRUE;
RemoveBagItem(gSpecialVar_ItemId, 1);
}
- gTasks[taskId].func = sub_81B6794;
- gUnknown_0203CEC8.slotId = 0;
+ gTasks[taskId].func = Task_ClosePartyMenuAfterText;
+ gPartyMenu.slotId = 0;
}
else
{
- sub_81B7A28(taskId);
+ UseSacredAsh(taskId);
}
}
}
-static void sub_81B7C10(u8 taskId)
+static void Task_SacredAshDisplayHPRestored(u8 taskId)
{
- GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1);
+ GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
- sub_81B1B5C(gStringVar4, 0);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = task_sacred_ash_party_loop;
+ gTasks[taskId].func = Task_SacredAshLoop;
}
-void sub_81B7C74(u8 taskId, TaskFunc task)
+#undef tUsedOnSlot
+#undef tHadEffect
+#undef tLastSlotUsed
+
+void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task)
{
PlaySE(SE_SELECT);
- gCB2_AfterEvolution = gUnknown_0203CEC8.exitCallback;
- if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, gSpecialVar_ItemId, 0))
+ gCB2_AfterEvolution = gPartyMenu.exitCallback;
+ if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0))
{
- gUnknown_0203CEE8 = 0;
- sub_81B1B5C(gText_WontHaveEffect, 1);
+ gPartyMenuUseExitCallback = FALSE;
+ DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = task;
}
@@ -6326,264 +5240,271 @@ u8 GetItemEffectType(u16 item)
return ITEM_EFFECT_NONE;
}
-static void sub_81B7E4C(u8 taskId)
+static void TryTutorSelectedMon(u8 taskId)
{
struct Pokemon *mon;
s16 *move;
if (!gPaletteFade.active)
{
- mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
- move = &gUnknown_0203CEC8.unkE;
+ mon = &gPlayerParty[gPartyMenu.slotId];
+ move = &gPartyMenu.data1;
GetMonNickname(mon, gStringVar1);
- gUnknown_0203CEC8.unkE = GetTutorMove(gSpecialVar_0x8005);
- StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]);
+ gPartyMenu.data1 = GetTutorMove(gSpecialVar_0x8005);
+ StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
move[1] = 2;
switch (CanMonLearnTMTutor(mon, 0, gSpecialVar_0x8005))
{
case CANNOT_LEARN_MOVE:
- sub_81B6D98(taskId, gText_PkmnCantLearnMove);
+ DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove);
return;
case ALREADY_KNOWS_MOVE:
- sub_81B6D98(taskId, gText_PkmnAlreadyKnows);
+ DisplayLearnMoveMessageAndClose(taskId, gText_PkmnAlreadyKnows);
return;
default:
- if (GiveMoveToMon(mon, gUnknown_0203CEC8.unkE) != 0xFFFF)
+ if (GiveMoveToMon(mon, gPartyMenu.data1) != MON_HAS_MAX_MOVES)
{
- sub_81B6EB4(taskId);
+ Task_LearnedMove(taskId);
return;
}
break;
}
- sub_81B6D74(gText_PkmnNeedsToReplaceMove);
- gTasks[taskId].func = sub_81B6FF4;
+ DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = Task_ReplaceMoveYesNo;
}
}
void CB2_PartyMenuFromStartMenu(void)
{
- InitPartyMenu(0, 0, 0, 0, 0, sub_81B1370, CB2_ReturnToFieldWithOpenMenu);
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldWithOpenMenu);
}
-void sub_81B7F60(void)
+// Giving an item by selecting Give from the bag menu
+// As opposted to by selecting Give in the party menu, which is handled by CursorCb_Give
+void CB2_ChooseMonToGiveItem(void)
{
- MainCallback callback = (InBattlePyramid() == FALSE) ? c2_815ABFC : sub_81C4F84;
- InitPartyMenu(0, 0, 5, 0, 6, sub_81B1370, callback);
- gUnknown_0203CEC8.unkC = gSpecialVar_ItemId;
+ MainCallback callback = (InBattlePyramid() == FALSE) ? CB2_ReturnToBagMenu : CB2_ReturnToPyramidBagMenu;
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_GIVE_ITEM, FALSE, PARTY_MSG_GIVE_TO_WHICH_MON, Task_HandleChooseMonInput, callback);
+ gPartyMenu.bagItem = gSpecialVar_ItemId;
}
-static void sub_81B7FAC(u8 taskId)
+static void TryGiveItemOrMailToSelectedMon(u8 taskId)
{
- gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM);
- if (gUnknown_0203CEFC == ITEM_NONE)
+ sPartyMenuItemId = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM);
+ if (sPartyMenuItemId == ITEM_NONE)
{
- sub_81B8044(taskId);
+ GiveItemOrMailToSelectedMon(taskId);
}
- else if (ItemIsMail(gUnknown_0203CEFC))
+ else if (ItemIsMail(sPartyMenuItemId))
{
- sub_81B83B8(taskId);
+ DisplayItemMustBeRemovedFirstMessage(taskId);
}
else
{
- sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEFC, 1);
- gTasks[taskId].func = sub_81B82A0;
+ DisplayAlreadyHoldingItemSwitchMessage(&gPlayerParty[gPartyMenu.slotId], sPartyMenuItemId, TRUE);
+ gTasks[taskId].func = Task_SwitchItemsFromBagYesNo;
}
}
-static void sub_81B8044(u8 taskId)
+static void GiveItemOrMailToSelectedMon(u8 taskId)
{
- if (ItemIsMail(gUnknown_0203CEC8.unkC))
+ if (ItemIsMail(gPartyMenu.bagItem))
{
- sub_81B83F0(gUnknown_0203CEC8.unkC);
- gUnknown_0203CEC4->exitCallback = sub_81B814C;
- sub_81B12C0(taskId);
+ RemoveItemToGiveFromBag(gPartyMenu.bagItem);
+ sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMonFromBag;
+ Task_ClosePartyMenu(taskId);
}
else
{
- sub_81B8088(taskId);
+ GiveItemToSelectedMon(taskId);
}
}
-static void sub_81B8088(u8 taskId)
+static void GiveItemToSelectedMon(u8 taskId)
{
u16 item;
if (!gPaletteFade.active)
{
- item = gUnknown_0203CEC8.unkC;
- sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], item, 0, 1);
- sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item);
- sub_81B83F0(item);
- gTasks[taskId].func = sub_81B8104;
+ item = gPartyMenu.bagItem;
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], item, FALSE, 1);
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item);
+ RemoveItemToGiveFromBag(item);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
}
}
-static void sub_81B8104(u8 taskId)
+static void Task_UpdateHeldItemSpriteAndClosePartyMenu(u8 taskId)
{
- s8 slot = gUnknown_0203CEC8.slotId;
+ s8 slot = gPartyMenu.slotId;
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B5C94(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
- sub_81B12C0(taskId);
+ UpdatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]);
+ Task_ClosePartyMenu(taskId);
}
}
-static void sub_81B814C(void)
+static void CB2_WriteMailToGiveMonFromBag(void)
{
u8 mail;
- sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEC8.unkC);
- mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL);
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gPartyMenu.bagItem);
+ mail = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL);
DoEasyChatScreen(
- EASY_CHAT_TYPE_MAIL,
- gSaveBlock1Ptr->mail[mail].words,
- sub_81B81A8,
- EASY_CHAT_PERSON_DISPLAY_NONE);
+ EASY_CHAT_TYPE_MAIL,
+ gSaveBlock1Ptr->mail[mail].words,
+ CB2_ReturnToPartyOrBagMenuFromWritingMail,
+ EASY_CHAT_PERSON_DISPLAY_NONE);
}
-static void sub_81B81A8(void)
+static void CB2_ReturnToPartyOrBagMenuFromWritingMail(void)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+ // Canceled writing mail
if (gSpecialVar_Result == FALSE)
{
TakeMailFromMon(mon);
- SetMonData(mon, MON_DATA_HELD_ITEM, &gUnknown_0203CEFC);
- RemoveBagItem(gUnknown_0203CEFC, 1);
- sub_81B841C(item);
- SetMainCallback2(gUnknown_0203CEC8.exitCallback);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &sPartyMenuItemId);
+ RemoveBagItem(sPartyMenuItemId, 1);
+ ReturnGiveItemToBagOrPC(item);
+ SetMainCallback2(gPartyMenu.exitCallback);
}
+ // Wrote mail
else
{
- InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B8230, gUnknown_0203CEC8.exitCallback);
+ InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_DisplayGaveMailFromBagMessage, gPartyMenu.exitCallback);
}
}
-static void sub_81B8230(u8 taskId)
+static void Task_DisplayGaveMailFromBagMessage(u8 taskId)
{
if (!gPaletteFade.active)
{
- if (gUnknown_0203CEFC != ITEM_NONE)
- sub_81B1D68(gUnknown_0203CEC8.unkC, gUnknown_0203CEFC, 0);
+ if (sPartyMenuItemId != ITEM_NONE)
+ DisplaySwitchedHeldItemMessage(gPartyMenu.bagItem, sPartyMenuItemId, FALSE);
else
- sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEC8.unkC, 0, 1);
- gTasks[taskId].func = sub_81B8104;
+ DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], gPartyMenu.bagItem, FALSE, 1);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
}
}
-static void sub_81B82A0(u8 taskId)
+static void Task_SwitchItemsFromBagYesNo(u8 taskId)
{
- if (sub_81B1BD4() != TRUE)
+ if (IsPartyMenuTextPrinterActive() != TRUE)
{
- sub_81B334C();
- gTasks[taskId].func = sub_81B82D4;
+ PartyMenuDisplayYesNoMenu();
+ gTasks[taskId].func = Task_HandleSwitchItemsFromBagYesNoInput;
}
}
-static void sub_81B82D4(u8 taskId)
+static void Task_HandleSwitchItemsFromBagYesNoInput(u8 taskId)
{
u16 item;
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case 0:
- item = gUnknown_0203CEC8.unkC;
- sub_81B83F0(item);
- if (AddBagItem(gUnknown_0203CEFC, 1) == FALSE)
+ case 0: // Yes, switch items
+ item = gPartyMenu.bagItem;
+ RemoveItemToGiveFromBag(item);
+ if (AddBagItem(sPartyMenuItemId, 1) == FALSE)
{
- sub_81B841C(item);
- pokemon_item_not_removed(gUnknown_0203CEFC);
- sub_81B1B5C(gStringVar4, 0);
- gTasks[taskId].func = sub_81B8104;
+ ReturnGiveItemToBagOrPC(item);
+ BufferBagFullCantTakeItemMessage(sPartyMenuItemId);
+ DisplayPartyMenuMessage(gStringVar4, FALSE);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
}
else if (ItemIsMail(item))
{
- gUnknown_0203CEC4->exitCallback = sub_81B814C;
- sub_81B12C0(taskId);
+ sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMonFromBag;
+ Task_ClosePartyMenu(taskId);
}
else
{
- sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item);
- sub_81B1D68(item, gUnknown_0203CEFC, 1);
- gTasks[taskId].func = sub_81B8104;
+ GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item);
+ DisplaySwitchedHeldItemMessage(item, sPartyMenuItemId, TRUE);
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
}
break;
case MENU_B_PRESSED:
PlaySE(SE_SELECT);
- case 1:
- gTasks[taskId].func = sub_81B8104;
+ // fallthrough
+ case 1: // No, dont switch items
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
break;
}
}
-static void sub_81B83B8(u8 taskId)
+static void DisplayItemMustBeRemovedFirstMessage(u8 taskId)
{
- sub_81B1B5C(gText_RemoveMailBeforeItem, 1);
+ DisplayPartyMenuMessage(gText_RemoveMailBeforeItem, TRUE);
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B8104;
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
}
-static void sub_81B83F0(u16 item)
+static void RemoveItemToGiveFromBag(u16 item)
{
- if (gUnknown_0203CEC8.unkB == 6)
+ if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM) // Unused, never occurs
RemovePCItem(item, 1);
else
RemoveBagItem(item, 1);
}
-static bool8 sub_81B841C(u16 item)
+// Returns FALSE if there was no space to return the item
+// but there always should be, and the return is ignored in all uses
+static bool8 ReturnGiveItemToBagOrPC(u16 item)
{
- if (gUnknown_0203CEC8.unkB == 5)
+ if (gPartyMenu.action == PARTY_ACTION_GIVE_ITEM)
return AddBagItem(item, 1);
else
return AddPCItem(item, 1);
}
-void sub_81B8448(void)
+void ChooseMonToGiveMailFromMailbox(void)
{
- InitPartyMenu(0, 0, 7, 0, 6, sub_81B1370, Mailbox_ReturnToMailListAfterDeposit);
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_GIVE_MAILBOX_MAIL, FALSE, PARTY_MSG_GIVE_TO_WHICH_MON, Task_HandleChooseMonInput, Mailbox_ReturnToMailListAfterDeposit);
}
-static void sub_81B8474(u8 taskId)
+static void TryGiveMailToSelectedMon(u8 taskId)
{
- struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId];
+ struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
struct MailStruct *mail;
- gUnknown_0203CEE8 = 0;
+ gPartyMenuUseExitCallback = FALSE;
mail = &gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos];
if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE)
{
- sub_81B1B5C(gText_PkmnHoldingItemCantHoldMail, 1);
+ DisplayPartyMenuMessage(gText_PkmnHoldingItemCantHoldMail, TRUE);
}
else
{
GiveMailToMon2(mon, mail);
ClearMailStruct(mail);
- sub_81B1B5C(gText_MailTransferredFromMailbox, 1);
+ DisplayPartyMenuMessage(gText_MailTransferredFromMailbox, TRUE);
}
schedule_bg_copy_tilemap_to_vram(2);
- gTasks[taskId].func = sub_81B8104;
+ gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu;
}
void InitChooseHalfPartyForBattle(u8 unused)
{
- sub_81B8558();
- InitPartyMenu(4, 0, 0, 0, 0, sub_81B1370, gMain.savedCallback);
- gUnknown_0203CEC8.unk4 = sub_81B879C;
+ ClearSelectedPartyOrder();
+ InitPartyMenu(PARTY_MENU_TYPE_CHOOSE_HALF, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, gMain.savedCallback);
+ gPartyMenu.task = Task_ValidateChosenHalfParty;
}
-void sub_81B8558(void)
+void ClearSelectedPartyOrder(void)
{
memset(gSelectedOrderFromParty, 0, sizeof(gSelectedOrderFromParty));
}
-static u8 sub_81B856C(s8 slot)
+static u8 GetPartySlotEntryStatus(s8 slot)
{
if (GetBattleEntryEligibility(&gPlayerParty[slot]) == FALSE)
return 2;
- if (sub_81B8770(slot + 1) == TRUE)
+ if (HasPartySlotAlreadyBeenSelected(slot + 1) == TRUE)
return 1;
return 0;
}
@@ -6594,7 +5515,7 @@ static bool8 GetBattleEntryEligibility(struct Pokemon *mon)
u16 species;
if (GetMonData(mon, MON_DATA_IS_EGG)
- || GetMonData(mon, MON_DATA_LEVEL) > sub_81B8888()
+ || GetMonData(mon, MON_DATA_LEVEL) > GetBattleEntryLevelCap()
|| (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY)
&& gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY)
&& GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE))
@@ -6602,15 +5523,15 @@ static bool8 GetBattleEntryEligibility(struct Pokemon *mon)
return FALSE;
}
- switch (VarGet(VAR_FRONTIER_FACILITY)) // oddly the specific cases are beyond 6, turns out case 9 is apparently related to link battles
+ switch (VarGet(VAR_FRONTIER_FACILITY))
{
- case 9:
+ case FACILITY_MULTI_OR_EREADER:
if (GetMonData(mon, MON_DATA_HP) != 0)
return TRUE;
return FALSE;
- case 8:
+ case FACILITY_UNION_ROOM:
return TRUE;
- default:
+ default: // Battle Frontier
species = GetMonData(mon, MON_DATA_SPECIES);
for (; gFrontierBannedSpecies[i] != 0xFFFF; i++)
{
@@ -6621,49 +5542,49 @@ static bool8 GetBattleEntryEligibility(struct Pokemon *mon)
}
}
-static u8 sub_81B865C(void)
+static u8 CheckBattleEntriesAndGetMessage(void)
{
- u8 unk2;
+ u8 maxBattlers;
u8 i, j;
u8 facility;
struct Pokemon *party = gPlayerParty;
- u8 unk = sub_81B885C();
+ u8 minBattlers = GetMinBattleEntries();
u8 *order = gSelectedOrderFromParty;
- if (order[unk - 1] == 0)
+ if (order[minBattlers - 1] == 0)
{
- if (unk == 1)
- return 14;
- ConvertIntToDecimalStringN(gStringVar1, unk, 0, 1);
- return 17;
+ if (minBattlers == 1)
+ return PARTY_MSG_NO_MON_FOR_BATTLE;
+ ConvertIntToDecimalStringN(gStringVar1, minBattlers, STR_CONV_MODE_LEFT_ALIGN, 1);
+ return PARTY_MSG_X_MONS_ARE_NEEDED;
}
facility = VarGet(VAR_FRONTIER_FACILITY);
- if (facility == 8 || facility == 9)
+ if (facility == FACILITY_UNION_ROOM || facility == FACILITY_MULTI_OR_EREADER)
return 0xFF;
- unk2 = sub_81B8830();
- for (i = 0; i < unk2 - 1; i++)
+ maxBattlers = GetMaxBattleEntries();
+ for (i = 0; i < maxBattlers - 1; i++)
{
u16 species = GetMonData(&party[order[i] - 1], MON_DATA_SPECIES);
u16 item = GetMonData(&party[order[i] - 1], MON_DATA_HELD_ITEM);
- for (j = i + 1; j < unk2; j++)
+ for (j = i + 1; j < maxBattlers; j++)
{
if (species == GetMonData(&party[order[j] - 1], MON_DATA_SPECIES))
- return 18;
+ return PARTY_MSG_MONS_CANT_BE_SAME;
if (item != ITEM_NONE && item == GetMonData(&party[order[j] - 1], MON_DATA_HELD_ITEM))
- return 19;
+ return PARTY_MSG_NO_SAME_HOLD_ITEMS;
}
}
return 0xFF;
}
-static bool8 sub_81B8770(u8 slot)
+static bool8 HasPartySlotAlreadyBeenSelected(u8 slot)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < ARRAY_COUNT(gSelectedOrderFromParty); i++)
{
if (gSelectedOrderFromParty[i] == slot)
return TRUE;
@@ -6671,79 +5592,79 @@ static bool8 sub_81B8770(u8 slot)
return FALSE;
}
-static void sub_81B879C(u8 taskId)
+static void Task_ValidateChosenHalfParty(u8 taskId)
{
- u8 msgId = sub_81B865C();
+ u8 msgId = CheckBattleEntriesAndGetMessage();
if (msgId != 0xFF)
{
PlaySE(SE_HAZURE);
- display_pokemon_menu_message(msgId);
- gTasks[taskId].func = sub_81B87E8;
+ DisplayPartyMenuStdMessage(msgId);
+ gTasks[taskId].func = Task_ContinueChoosingHalfParty;
}
else
{
PlaySE(SE_SELECT);
- sub_81B12C0(taskId);
+ Task_ClosePartyMenu(taskId);
}
}
-static void sub_81B87E8(u8 taskId)
+static void Task_ContinueChoosingHalfParty(u8 taskId)
{
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
{
PlaySE(SE_SELECT);
- display_pokemon_menu_message(0);
- gTasks[taskId].func = sub_81B1370;
+ DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON);
+ gTasks[taskId].func = Task_HandleChooseMonInput;
}
}
-static u8 sub_81B8830(void)
+static u8 GetMaxBattleEntries(void)
{
switch (VarGet(VAR_FRONTIER_FACILITY))
{
- case 9:
+ case FACILITY_MULTI_OR_EREADER:
return 3;
- case 8:
+ case FACILITY_UNION_ROOM:
return 2;
- default:
+ default: // Battle Frontier
return gSpecialVar_0x8005;
}
}
-static u8 sub_81B885C(void)
+static u8 GetMinBattleEntries(void)
{
switch (VarGet(VAR_FRONTIER_FACILITY))
{
- case 9:
+ case FACILITY_MULTI_OR_EREADER:
return 1;
- case 8:
+ case FACILITY_UNION_ROOM:
return 2;
- default:
+ default: // Battle Frontier
return gSpecialVar_0x8005;
}
}
-static u8 sub_81B8888(void)
+static u8 GetBattleEntryLevelCap(void)
{
switch (VarGet(VAR_FRONTIER_FACILITY))
{
- case 9:
- return 100;
- case 8:
+ case FACILITY_MULTI_OR_EREADER:
+ return MAX_LEVEL;
+ case FACILITY_UNION_ROOM:
return 30;
- default:
- if (gSpecialVar_0x8004 == 0)
+ default: // Battle Frontier
+ if (gSpecialVar_0x8004 == FRONTIER_LVL_50)
return 50;
- return 100;
+ return MAX_LEVEL;
}
}
-static const u8* sub_81B88BC(void)
+static const u8* GetFacilityCancelString(void)
{
u8 facilityNum = VarGet(VAR_FRONTIER_FACILITY);
- if (!(facilityNum != 8 && facilityNum != 9))
+ if (!(facilityNum != FACILITY_UNION_ROOM && facilityNum != FACILITY_MULTI_OR_EREADER))
return gText_CancelBattle;
else if (facilityNum == FRONTIER_FACILITY_DOME && gSpecialVar_0x8005 == 2)
return gText_ReturnToWaitingRoom;
@@ -6751,62 +5672,63 @@ static const u8* sub_81B88BC(void)
return gText_CancelChallenge;
}
-void sub_81B8904(u8 initArg, MainCallback callback)
+void ChooseMonForTradingBoard(u8 menuType, MainCallback callback)
{
- InitPartyMenu(initArg, 0, 0, 0, 0, sub_81B1370, callback);
+ InitPartyMenu(menuType, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, callback);
}
-void sub_81B892C(void)
+void ChooseMonForMoveTutor(void)
{
- InitPartyMenu(0, 0, 12, 0, 4, sub_81B1370, CB2_ReturnToFieldContinueScriptPlayMapMusic);
+ InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_MOVE_TUTOR, FALSE, PARTY_MSG_TEACH_WHICH_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
-void sub_81B8958(void)
+void ChooseMonForWirelessMinigame(void)
{
- InitPartyMenu(11, 0, 13, 0, 1, sub_81B1370, CB2_ReturnToFieldContinueScriptPlayMapMusic);
+ InitPartyMenu(PARTY_MENU_TYPE_MINIGAME, PARTY_LAYOUT_SINGLE, PARTY_ACTION_MINIGAME, FALSE, PARTY_MSG_CHOOSE_MON_OR_CANCEL, Task_HandleChooseMonInput, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
-static u8 sub_81B8984(void)
+static u8 GetPartyLayoutFromBattleType(void)
{
if (IsDoubleBattle() == FALSE)
- return 0;
+ return PARTY_LAYOUT_SINGLE;
if (IsMultiBattle() == TRUE)
- return 2;
- return 1;
+ return PARTY_LAYOUT_MULTI;
+ return PARTY_LAYOUT_DOUBLE;
}
-void OpenPartyMenuInBattle(u8 arg)
+void OpenPartyMenuInBattle(u8 partyAction)
{
- InitPartyMenu(1, sub_81B8984(), arg, 0, 0, sub_81B1370, SetCB2ToReshowScreenAfterMenu);
+ InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_SetUpReshowBattleScreenAfterMenu);
nullsub_35();
- pokemon_change_order();
+ UpdatePartyToBattleOrder();
}
-void sub_81B89F0(void)
+void ChooseMonForInBattleItem(void)
{
- InitPartyMenu(1, sub_81B8984(), 3, 0, 5, sub_81B1370, c2_815ABFC);
+ InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_USE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, Task_HandleChooseMonInput, CB2_ReturnToBagMenu);
nullsub_35();
- pokemon_change_order();
+ UpdatePartyToBattleOrder();
}
-static u8 sub_81B8A2C(struct Pokemon *mon)
+static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon *mon)
{
if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(mon, MON_DATA_IS_EGG) == FALSE)
{
- if (gUnknown_0203CEC8.unkB == 1)
- return 3;
+ if (gPartyMenu.action == PARTY_ACTION_SEND_OUT)
+ return ACTIONS_SEND_OUT;
if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA))
- return 2;
+ return ACTIONS_SHIFT;
}
- return 7;
+ return ACTIONS_SUMMARY_ONLY;
}
-static bool8 sub_81B8A7C(void)
+static bool8 TrySwitchInPokemon(void)
{
u8 slot = GetCursorSelectionMonId();
u8 newSlot;
u8 i;
+ // In a multi battle, slots 1, 4, and 5 are the partner's pokemon
if (IsMultiBattle() == TRUE && (slot == 1 || slot == 4 || slot == 5))
{
StringCopy(gStringVar1, GetTrainerPartnerName());
@@ -6821,7 +5743,7 @@ static bool8 sub_81B8A7C(void)
}
for (i = 0; i < gBattlersCount; i++)
{
- if (GetBattlerSide(i) == B_SIDE_PLAYER && sub_81B8F38(slot) == gBattlerPartyIndexes[i])
+ if (GetBattlerSide(i) == B_SIDE_PLAYER && GetPartyIdFromBattleSlot(slot) == gBattlerPartyIndexes[i])
{
GetMonNickname(&gPlayerParty[slot], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyInBattle);
@@ -6833,67 +5755,69 @@ static bool8 sub_81B8A7C(void)
StringExpandPlaceholders(gStringVar4, gText_EggCantBattle);
return FALSE;
}
- if (sub_81B8F38(slot) == gBattleStruct->field_8B)
+ if (GetPartyIdFromBattleSlot(slot) == gBattleStruct->field_8B)
{
GetMonNickname(&gPlayerParty[slot], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadySelected);
return FALSE;
}
- if (gUnknown_0203CEC8.unkB == 4)
+ if (gPartyMenu.action == PARTY_ACTION_ABILITY_PREVENTS)
{
SetMonPreventsSwitchingString();
return FALSE;
}
- if (gUnknown_0203CEC8.unkB == 2)
+ if (gPartyMenu.action == PARTY_ACTION_CANT_SWITCH)
{
u8 currBattler = gBattlerInMenuId;
- GetMonNickname(&gPlayerParty[pokemon_order_func(gBattlerPartyIndexes[currBattler])], gStringVar1);
+ GetMonNickname(&gPlayerParty[GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[currBattler])], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_PkmnCantSwitchOut);
return FALSE;
}
- gUnknown_0203CEE9 = sub_81B8F38(slot);
- gUnknown_0203CEE8 = 1;
- newSlot = pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]);
- sub_81B8FB0(newSlot, slot);
- sub_81B1288(&gPlayerParty[newSlot], &gPlayerParty[slot]);
+ gSelectedMonPartyId = GetPartyIdFromBattleSlot(slot);
+ gPartyMenuUseExitCallback = TRUE;
+ newSlot = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId]);
+ SwitchPartyMonSlots(newSlot, slot);
+ SwapPartyPokemon(&gPlayerParty[newSlot], &gPlayerParty[slot]);
return TRUE;
}
-void sub_81B8C68(void)
+void BufferBattlePartyCurrentOrder(void)
{
- sub_81B8C88(gUnknown_0203CF00, sub_806D7EC());
+ BufferBattlePartyOrder(gBattlePartyCurrentOrder, GetPlayerFlankId());
}
-static void sub_81B8C88(u8 *ptr, bool8 multiplayerFlag)
+static void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId)
{
- u8 partyIndexes[6];
+ u8 partyIds[PARTY_SIZE];
int i, j;
if (IsMultiBattle() == TRUE)
{
- if (multiplayerFlag)
+ // Party ids are packed in 4 bits at a time
+ // i.e. the party id order below would be 0, 3, 5, 4, 2, 1, and the two parties would be 0,5,4 and 3,2,1
+ if (flankId != 0)
{
- ptr[0] = 0 | (3 << 4);
- ptr[1] = 5 | (4 << 4);
- ptr[2] = 2 | (1 << 4);
+ partyBattleOrder[0] = 0 | (3 << 4);
+ partyBattleOrder[1] = 5 | (4 << 4);
+ partyBattleOrder[2] = 2 | (1 << 4);
}
else
{
- ptr[0] = 3 | (0 << 4);
- ptr[1] = 2 | (1 << 4);
- ptr[2] = 5 | (4 << 4);
+ partyBattleOrder[0] = 3 | (0 << 4);
+ partyBattleOrder[1] = 2 | (1 << 4);
+ partyBattleOrder[2] = 5 | (4 << 4);
}
return;
}
else if (IsDoubleBattle() == FALSE)
{
j = 1;
- partyIndexes[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)];
+ partyIds[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)];
for (i = 0; i < PARTY_SIZE; i++)
{
- if (i != partyIndexes[0])
+ if (i != partyIds[0])
{
- partyIndexes[j] = i;
+ partyIds[j] = i;
j++;
}
}
@@ -6901,29 +5825,30 @@ static void sub_81B8C88(u8 *ptr, bool8 multiplayerFlag)
else
{
j = 2;
- partyIndexes[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)];
- partyIndexes[1] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)];
+ partyIds[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)];
+ partyIds[1] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)];
for (i = 0; i < PARTY_SIZE; i++)
{
- if (i != partyIndexes[0] && i != partyIndexes[1])
+ if (i != partyIds[0] && i != partyIds[1])
{
- partyIndexes[j] = i;
+ partyIds[j] = i;
j++;
}
}
}
- for (i = 0; i < 3; i++)
- ptr[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)];
+ for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++)
+ partyBattleOrder[i] = (partyIds[0 + (i * 2)] << 4) | partyIds[1 + (i * 2)];
}
-void sub_81B8D64(u8 battlerId, u8 multiplayerFlag)
+void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId)
{
- sub_81B8D88(gBattleStruct->field_60[battlerId], multiplayerFlag, battlerId);
+ BufferBattlePartyOrderBySide(gBattleStruct->field_60[battlerId], flankId, battlerId);
}
-static void sub_81B8D88(u8 *ptr, bool8 multiplayerFlag, u8 battlerId)
+// when GetBattlerSide(battlerId) == B_SIDE_PLAYER, this function is identical the one above
+static void BufferBattlePartyOrderBySide(u8 *partyBattleOrder, u8 flankId, u8 battlerId)
{
- u8 partyIndexes[6];
+ u8 partyIndexes[PARTY_SIZE];
int i, j;
u8 leftBattler;
u8 rightBattler;
@@ -6941,17 +5866,17 @@ static void sub_81B8D88(u8 *ptr, bool8 multiplayerFlag, u8 battlerId)
if (IsMultiBattle() == TRUE)
{
- if (multiplayerFlag)
+ if (flankId != 0)
{
- ptr[0] = 0 | (3 << 4);
- ptr[1] = 5 | (4 << 4);
- ptr[2] = 2 | (1 << 4);
+ partyBattleOrder[0] = 0 | (3 << 4);
+ partyBattleOrder[1] = 5 | (4 << 4);
+ partyBattleOrder[2] = 2 | (1 << 4);
}
else
{
- ptr[0] = 3 | (0 << 4);
- ptr[1] = 2 | (1 << 4);
- ptr[2] = 5 | (4 << 4);
+ partyBattleOrder[0] = 3 | (0 << 4);
+ partyBattleOrder[1] = 2 | (1 << 4);
+ partyBattleOrder[2] = 5 | (4 << 4);
}
return;
}
@@ -6984,87 +5909,87 @@ static void sub_81B8D88(u8 *ptr, bool8 multiplayerFlag, u8 battlerId)
}
for (i = 0; i < 3; i++)
- ptr[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)];
+ partyBattleOrder[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)];
}
-void sub_81B8E80(u8 battlerId, u8 unk, u8 arrayIndex)
+void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2)
{
- u8 possiblePartyIndexes[6];
- u8 unk2 = 0;
+ u8 partyIds[PARTY_SIZE];
+ u8 tempSlot = 0;
int i, j;
- u8 *battleStructRelated;
- u8 possiblePartyIndexBuffer;
+ u8 *partyBattleOrder;
+ u8 partyIdBuffer;
if (IsMultiBattle())
{
- battleStructRelated = gBattleStruct->field_60[battlerId];
+ partyBattleOrder = gBattleStruct->field_60[battlerId];
for (i = j = 0; i < 3; j++, i++)
{
- possiblePartyIndexes[j] = battleStructRelated[i] >> 4;
+ partyIds[j] = partyBattleOrder[i] >> 4;
j++;
- possiblePartyIndexes[j] = battleStructRelated[i] & 0xF;
+ partyIds[j] = partyBattleOrder[i] & 0xF;
}
- possiblePartyIndexBuffer = possiblePartyIndexes[arrayIndex];
+ partyIdBuffer = partyIds[slot2];
for (i = 0; i < PARTY_SIZE; i++)
{
- if (possiblePartyIndexes[i] == unk)
+ if (partyIds[i] == slot)
{
- unk2 = possiblePartyIndexes[i];
- possiblePartyIndexes[i] = possiblePartyIndexBuffer;
+ tempSlot = partyIds[i];
+ partyIds[i] = partyIdBuffer;
break;
}
}
if (i != PARTY_SIZE)
{
- possiblePartyIndexes[arrayIndex] = unk2;
- battleStructRelated[0] = (possiblePartyIndexes[0] << 4) | possiblePartyIndexes[1];
- battleStructRelated[1] = (possiblePartyIndexes[2] << 4) | possiblePartyIndexes[3];
- battleStructRelated[2] = (possiblePartyIndexes[4] << 4) | possiblePartyIndexes[5];
+ partyIds[slot2] = tempSlot;
+ partyBattleOrder[0] = (partyIds[0] << 4) | partyIds[1];
+ partyBattleOrder[1] = (partyIds[2] << 4) | partyIds[3];
+ partyBattleOrder[2] = (partyIds[4] << 4) | partyIds[5];
}
}
}
-static u8 sub_81B8F38(u8 slot)
+static u8 GetPartyIdFromBattleSlot(u8 slot)
{
u8 modResult = slot & 1;
u8 retVal;
slot /= 2;
if (modResult != 0)
- retVal = gUnknown_0203CF00[slot] & 0xF;
+ retVal = gBattlePartyCurrentOrder[slot] & 0xF;
else
- retVal = gUnknown_0203CF00[slot] >> 4;
+ retVal = gBattlePartyCurrentOrder[slot] >> 4;
return retVal;
}
-static void sub_81B8F6C(u8 slot, u8 setVal)
+static void SetPartyIdAtBattleSlot(u8 slot, u8 setVal)
{
bool32 modResult = slot & 1;
slot /= 2;
if (modResult != 0)
- gUnknown_0203CF00[slot] = (gUnknown_0203CF00[slot] & 0xF0) | setVal;
+ gBattlePartyCurrentOrder[slot] = (gBattlePartyCurrentOrder[slot] & 0xF0) | setVal;
else
- gUnknown_0203CF00[slot] = (gUnknown_0203CF00[slot] & 0xF) | (setVal << 4);
+ gBattlePartyCurrentOrder[slot] = (gBattlePartyCurrentOrder[slot] & 0xF) | (setVal << 4);
}
-void sub_81B8FB0(u8 slot, u8 slot2)
+void SwitchPartyMonSlots(u8 slot, u8 slot2)
{
- u8 valBuffer = sub_81B8F38(slot);
- sub_81B8F6C(slot, sub_81B8F38(slot2));
- sub_81B8F6C(slot2, valBuffer);
+ u8 partyId = GetPartyIdFromBattleSlot(slot);
+ SetPartyIdAtBattleSlot(slot, GetPartyIdFromBattleSlot(slot2));
+ SetPartyIdAtBattleSlot(slot2, partyId);
}
-u8 pokemon_order_func(u8 slot)
+u8 GetPartyIdFromBattlePartyId(u8 battlePartyId)
{
u8 i, j;
- for (j = i = 0; i < 3; j++, i++)
+ for (j = i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); j++, i++)
{
- if ((gUnknown_0203CF00[i] >> 4) != slot)
+ if ((gBattlePartyCurrentOrder[i] >> 4) != battlePartyId)
{
j++;
- if ((gUnknown_0203CF00[i] & 0xF) == slot)
+ if ((gBattlePartyCurrentOrder[i] & 0xF) == battlePartyId)
return j;
}
else
@@ -7075,147 +6000,155 @@ u8 pokemon_order_func(u8 slot)
return 0;
}
-static void pokemon_change_order(void)
+static void UpdatePartyToBattleOrder(void)
{
struct Pokemon *partyBuffer = Alloc(sizeof(gPlayerParty));
u8 i;
memcpy(partyBuffer, gPlayerParty, sizeof(gPlayerParty));
for (i = 0; i < PARTY_SIZE; i++)
- memcpy(&gPlayerParty[pokemon_order_func(i)], &partyBuffer[i], sizeof(struct Pokemon));
+ memcpy(&gPlayerParty[GetPartyIdFromBattlePartyId(i)], &partyBuffer[i], sizeof(struct Pokemon));
Free(partyBuffer);
}
-static void sub_81B9080(void)
+static void UpdatePartyToFieldOrder(void)
{
struct Pokemon *partyBuffer = Alloc(sizeof(gPlayerParty));
u8 i;
memcpy(partyBuffer, gPlayerParty, sizeof(gPlayerParty));
for (i = 0; i < PARTY_SIZE; i++)
- memcpy(&gPlayerParty[sub_81B8F38(i)], &partyBuffer[i], sizeof(struct Pokemon));
+ memcpy(&gPlayerParty[GetPartyIdFromBattleSlot(i)], &partyBuffer[i], sizeof(struct Pokemon));
Free(partyBuffer);
}
-static void sub_81B90D0(void)
+// Unused
+static void SwitchAliveMonIntoLeadSlot(void)
{
u8 i;
struct Pokemon *mon;
- u8 leadVal;
+ u8 partyId;
for (i = 1; i < PARTY_SIZE; i++)
{
- mon = &gPlayerParty[sub_81B8F38(i)];
+ mon = &gPlayerParty[GetPartyIdFromBattleSlot(i)];
if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(mon, MON_DATA_HP) != 0)
{
- leadVal = sub_81B8F38(0);
- sub_81B8FB0(0, i);
- sub_81B1288(&gPlayerParty[leadVal], mon);
+ partyId = GetPartyIdFromBattleSlot(0);
+ SwitchPartyMonSlots(0, i);
+ SwapPartyPokemon(&gPlayerParty[partyId], mon);
break;
}
}
}
-static void sub_81B9140(void)
+static void CB2_SetUpExitToBattleScreen(void)
{
- SetMainCallback2(SetCB2ToReshowScreenAfterMenu);
+ SetMainCallback2(CB2_SetUpReshowBattleScreenAfterMenu);
}
-void sub_81B9150(void)
+void ShowPartyMenuToShowcaseMultiBattleParty(void)
{
- InitPartyMenu(5, 3, 0, 0, 0x7F, sub_81B917C, gMain.savedCallback);
+ InitPartyMenu(PARTY_MENU_TYPE_MULTI_SHOWCASE, PARTY_LAYOUT_MULTI_SHOWCASE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_NONE, Task_InitMultiPartnerPartySlideIn, gMain.savedCallback);
}
-static void sub_81B917C(u8 taskId)
+#define tXPos data[0]
+
+static void Task_InitMultiPartnerPartySlideIn(u8 taskId)
{
- gTasks[taskId].data[0] = 256;
- sub_81B9294(taskId);
+ // The first slide step also sets the sprites offscreen
+ gTasks[taskId].tXPos = 256;
+ SlideMultiPartyMenuBoxSpritesOneStep(taskId);
ChangeBgX(2, 0x10000, 0);
- gTasks[taskId].func = sub_81B91B4;
+ gTasks[taskId].func = Task_MultiPartnerPartySlideIn;
}
-static void sub_81B91B4(u8 taskId)
+static void Task_MultiPartnerPartySlideIn(u8 taskId)
{
s16 *data = gTasks[taskId].data;
u8 i;
if (!gPaletteFade.active)
{
- data[0] -= 8;
- sub_81B9294(taskId);
- if (data[0] == 0)
+ tXPos -= 8;
+ SlideMultiPartyMenuBoxSpritesOneStep(taskId);
+ if (tXPos == 0)
{
for (i = 3; i < PARTY_SIZE; i++)
{
- if (gUnknown_02022FF8[i - 3].species != SPECIES_NONE)
- AnimateSelectedPartyIcon(gUnknown_0203CEDC[i].monSpriteId, 0);
+ if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE)
+ AnimateSelectedPartyIcon(sPartyMenuBoxes[i].monSpriteId, 0);
}
- PlaySE(SE_W231); // Harden SE?
- gTasks[taskId].func = sub_81B9240;
+ PlaySE(SE_W231); // The Harden SE plays once the partners party mons have slid on screen
+ gTasks[taskId].func = Task_WaitAfterMultiPartnerPartySlideIn;
}
}
}
-static void sub_81B9240(u8 taskId)
+static void Task_WaitAfterMultiPartnerPartySlideIn(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if (++data[0] == 0x100)
- sub_81B12C0(taskId);
+ // data[0] used as a timer afterwards rather than the x pos
+ if (++data[0] == 256)
+ Task_ClosePartyMenu(taskId);
}
-static void sub_81B9270(u8 spriteId, s16 x)
+static void MoveMultiPartyMenuBoxSprite(u8 spriteId, s16 x)
{
if (x >= 0)
gSprites[spriteId].pos2.x = x;
}
-static void sub_81B9294(u8 taskId)
+static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId)
{
s16 *data = gTasks[taskId].data;
u8 i;
for (i = 3; i < PARTY_SIZE; i++)
{
- if (gUnknown_02022FF8[i - 3].species != SPECIES_NONE)
+ if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE)
{
- sub_81B9270(gUnknown_0203CEDC[i].monSpriteId, data[0] - 8);
- sub_81B9270(gUnknown_0203CEDC[i].itemSpriteId, data[0] - 8);
- sub_81B9270(gUnknown_0203CEDC[i].pokeballSpriteId, data[0] - 8);
- sub_81B9270(gUnknown_0203CEDC[i].statusSpriteId, data[0] - 8);
+ MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].monSpriteId, tXPos - 8);
+ MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].itemSpriteId, tXPos - 8);
+ MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].pokeballSpriteId, tXPos - 8);
+ MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].statusSpriteId, tXPos - 8);
}
}
ChangeBgX(2, 0x800, 1);
}
-void sub_81B9328(void)
+#undef tXpos
+
+void ChooseMonForDaycare(void)
{
- InitPartyMenu(6, 0, 0, 0, 15, sub_81B1370, sub_81B9390);
+ InitPartyMenu(PARTY_MENU_TYPE_DAYCARE, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON_2, Task_HandleChooseMonInput, BufferMonSelection);
}
-static void sub_81B9354(u8 arg1)
+// Unused
+static void ChoosePartyMonByMenuType(u8 menuType)
{
- gFieldCallback2 = hm_add_c3_without_phase_2;
- InitPartyMenu(arg1, 0, 11, 0, 0, sub_81B1370, CB2_ReturnToField);
+ gFieldCallback2 = CB2_FadeFromPartyMenu;
+ InitPartyMenu(menuType, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToField);
}
-static void sub_81B9390(void)
+static void BufferMonSelection(void)
{
gSpecialVar_0x8004 = GetCursorSelectionMonId();
if (gSpecialVar_0x8004 >= PARTY_SIZE)
gSpecialVar_0x8004 = 0xFF;
- gFieldCallback2 = hm_add_c3_without_phase_2;
+ gFieldCallback2 = CB2_FadeFromPartyMenu;
SetMainCallback2(CB2_ReturnToField);
}
-bool8 hm_add_c3_without_phase_2(void) // might not be bool
+bool8 CB2_FadeFromPartyMenu(void)
{
pal_fill_black();
- CreateTask(task_hm_without_phase_2, 10);
+ CreateTask(Task_PartyMenuWaitForFade, 10);
return TRUE;
}
-static void task_hm_without_phase_2(u8 taskId)
+static void Task_PartyMenuWaitForFade(u8 taskId)
{
if (IsWeatherNotFadingIn())
{
@@ -7225,84 +6158,85 @@ static void task_hm_without_phase_2(u8 taskId)
}
}
-void sub_81B9404(void)
+void ChooseContestMon(void)
{
ScriptContext2_Enable();
FadeScreen(FADE_TO_BLACK, 0);
- CreateTask(sub_81B9424, 10);
+ CreateTask(Task_ChooseContestMon, 10);
}
-static void sub_81B9424(u8 taskId)
+static void Task_ChooseContestMon(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- InitPartyMenu(2, 0, 11, 0, 0, sub_81B1370, sub_81B9470);
+ InitPartyMenu(PARTY_MENU_TYPE_CONTEST, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ChooseContestMon);
DestroyTask(taskId);
}
}
-static void sub_81B9470(void)
+static void CB2_ChooseContestMon(void)
{
gContestMonPartyIndex = GetCursorSelectionMonId();
if (gContestMonPartyIndex >= PARTY_SIZE)
gContestMonPartyIndex = 0xFF;
gSpecialVar_0x8004 = gContestMonPartyIndex;
- gFieldCallback2 = hm_add_c3_without_phase_2;
+ gFieldCallback2 = CB2_FadeFromPartyMenu;
SetMainCallback2(CB2_ReturnToField);
}
-void sub_81B94B0(void)
+// Used as a script special for showing a party mon to various npcs (e.g. in-game trades, move deleter)
+void ChoosePartyMon(void)
{
ScriptContext2_Enable();
FadeScreen(FADE_TO_BLACK, 0);
- CreateTask(sub_81B94D0, 10);
+ CreateTask(Task_ChoosePartyMon, 10);
}
-static void sub_81B94D0(u8 taskId)
+static void Task_ChoosePartyMon(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- InitPartyMenu(3, 0, 11, 0, 0, sub_81B1370, sub_81B9390);
+ InitPartyMenu(PARTY_MENU_TYPE_CHOOSE_MON, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, BufferMonSelection);
DestroyTask(taskId);
}
}
-void sub_81B951C(void)
+void ChooseMonForMoveRelearner(void)
{
ScriptContext2_Enable();
FadeScreen(FADE_TO_BLACK, 0);
- CreateTask(sub_81B953C, 10);
+ CreateTask(Task_ChooseMonForMoveRelearner, 10);
}
-static void sub_81B953C(u8 taskId)
+static void Task_ChooseMonForMoveRelearner(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- InitPartyMenu(7, 0, 11, 0, 0, sub_81B1370, sub_81B9588);
+ InitPartyMenu(PARTY_MENU_TYPE_MOVE_RELEARNER, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ChooseMonForMoveRelearner);
DestroyTask(taskId);
}
}
-static void sub_81B9588(void)
+static void CB2_ChooseMonForMoveRelearner(void)
{
gSpecialVar_0x8004 = GetCursorSelectionMonId();
if (gSpecialVar_0x8004 >= PARTY_SIZE)
gSpecialVar_0x8004 = 0xFF;
else
gSpecialVar_0x8005 = GetNumberOfRelearnableMoves(&gPlayerParty[gSpecialVar_0x8004]);
- gFieldCallback2 = hm_add_c3_without_phase_2;
+ gFieldCallback2 = CB2_FadeFromPartyMenu;
SetMainCallback2(CB2_ReturnToField);
}
-void sub_81B95E0(void)
+void DoBattlePyramidMonsHaveHeldItem(void)
{
u8 i;
gSpecialVar_Result = FALSE;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) != ITEM_NONE)
{
@@ -7312,42 +6246,44 @@ void sub_81B95E0(void)
}
}
-void sub_81B9620(void)
+// Can be called if the Battle Pyramid Bag is full on exiting and at least one party mon still has held items
+// The player can then select to toss items from the bag or take/toss held items from the party
+void BattlePyramidChooseMonHeldItems(void)
{
ScriptContext2_Enable();
FadeScreen(FADE_TO_BLACK, 0);
- CreateTask(sub_81B9640, 10);
+ CreateTask(Task_BattlePyramidChooseMonHeldItems, 10);
}
-static void sub_81B9640(u8 taskId)
+static void Task_BattlePyramidChooseMonHeldItems(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- InitPartyMenu(12, 0, 0, 0, 0, sub_81B1370, sub_81B9390);
+ InitPartyMenu(PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, BufferMonSelection);
DestroyTask(taskId);
}
}
-void sub_81B968C(void)
+void MoveDeleterChooseMoveToForget(void)
{
ShowPokemonSummaryScreen(PSS_MODE_SELECT_MOVE, gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField);
gFieldCallback = FieldCallback_ReturnToEventScript2;
}
-void sub_81B96D0(void)
+void GetNumMovesSelectedMonHas(void)
{
u8 i;
gSpecialVar_Result = 0;
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i) != ITEM_NONE)
+ if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i) != MOVE_NONE)
gSpecialVar_Result++;
}
}
-void sub_81B9718(void)
+void BufferMoveDeleterNicknameAndMove(void)
{
struct Pokemon *mon = &gPlayerParty[gSpecialVar_0x8004];
u16 move = GetMonData(mon, MON_DATA_MOVE1 + gSpecialVar_0x8005);
@@ -7356,17 +6292,17 @@ void sub_81B9718(void)
StringCopy(gStringVar2, gMoveNames[move]);
}
-void sub_81B9770(void)
+void MoveDeleterForgetMove(void)
{
u16 i;
SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], MOVE_NONE, gSpecialVar_0x8005);
RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005);
for (i = gSpecialVar_0x8005; i < MAX_MON_MOVES - 1; i++)
- sub_81B97DC(&gPlayerParty[gSpecialVar_0x8004], i, i + 1);
+ ShiftMoveSlot(&gPlayerParty[gSpecialVar_0x8004], i, i + 1);
}
-static void sub_81B97DC(struct Pokemon *mon, u8 slotTo, u8 slotFrom)
+static void ShiftMoveSlot(struct Pokemon *mon, u8 slotTo, u8 slotFrom)
{
u16 move1 = GetMonData(mon, MON_DATA_MOVE1 + slotTo);
u16 move0 = GetMonData(mon, MON_DATA_MOVE1 + slotFrom);
@@ -7387,7 +6323,7 @@ static void sub_81B97DC(struct Pokemon *mon, u8 slotTo, u8 slotFrom)
SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
}
-void sub_81B98DC(void)
+void IsSelectedMonEgg(void)
{
if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_IS_EGG))
gSpecialVar_Result = TRUE;
@@ -7395,7 +6331,7 @@ void sub_81B98DC(void)
gSpecialVar_Result = FALSE;
}
-void sub_81B9918(void)
+void IsLastMonThatKnowsSurf(void)
{
u16 move;
u32 i, j;
diff --git a/src/player_pc.c b/src/player_pc.c
index 08f24d379..94484ab72 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -14,7 +14,7 @@
#include "list_menu.h"
#include "mail.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "menu_helpers.h"
#include "overworld.h"
@@ -419,12 +419,12 @@ static void PlayerPC_Decoration(u8 taskId)
static void PlayerPC_TurnOff(u8 taskId)
{
- if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC and not player PC, so do gender specific handling.
+ if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC, so do gender specific handling.
{
if (gSaveBlock2Ptr->playerGender == MALE)
- ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_1F863F);
+ ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC);
else
- ScriptContext1_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_1F958F);
+ ScriptContext1_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_TurnOffPlayerPC);
}
else
{
@@ -824,7 +824,7 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId)
{
sub_81D1EC0();
CleanupOverworldWindowsAndTilemaps();
- sub_81B8448();
+ ChooseMonToGiveMailFromMailbox();
DestroyTask(taskId);
}
}
diff --git a/src/poison.c b/src/poison.c
index 9af981694..42e7d6a58 100644
--- a/src/poison.c
+++ b/src/poison.c
@@ -33,11 +33,11 @@ const struct SpriteTemplate gUnknown_08596134 =
{
.tileTag = ANIM_TAG_TOXIC_BUBBLE,
.paletteTag = ANIM_TAG_TOXIC_BUBBLE,
- .oam = &gUnknown_08524954,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gUnknown_08596130,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
const union AnimCmd gUnknown_0859614C[] =
@@ -101,7 +101,7 @@ const struct SpriteTemplate gUnknown_085961A8 =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
- .oam = &gUnknown_085249CC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gUnknown_08596164,
.images = NULL,
.affineAnims = gUnknown_085961A0,
@@ -112,7 +112,7 @@ const struct SpriteTemplate gUnknown_085961C0 =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
- .oam = &gUnknown_085249CC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gUnknown_08596164,
.images = NULL,
.affineAnims = gUnknown_085961A0,
@@ -123,7 +123,7 @@ const struct SpriteTemplate gUnknown_085961D8 =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gUnknown_0859616C,
.images = NULL,
.affineAnims = gUnknown_085961A4,
@@ -146,7 +146,7 @@ const struct SpriteTemplate gUnknown_0859620C =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
- .oam = &gUnknown_085249CC,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x16,
.anims = gUnknown_08596168,
.images = NULL,
.affineAnims = gUnknown_08596208,
@@ -169,7 +169,7 @@ const struct SpriteTemplate gPoisonBubbleSpriteTemplate =
{
.tileTag = ANIM_TAG_POISON_BUBBLE,
.paletteTag = ANIM_TAG_POISON_BUBBLE,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gUnknown_08596164,
.images = NULL,
.affineAnims = gUnknown_0859623C,
@@ -180,7 +180,7 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_08524A8C,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gUnknown_08595200,
.images = NULL,
.affineAnims = gUnknown_0859623C,
diff --git a/src/pokeball.c b/src/pokeball.c
index 793609ec2..f10bbd49c 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -1097,7 +1097,7 @@ static void sub_80765E0(struct Sprite *sprite)
}
}
-u8 sub_807671C(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h)
+u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h)
{
u8 spriteId;
diff --git a/src/pokeblock.c b/src/pokeblock.c
index 30e630d9a..4c744b537 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_controllers.h"
#include "battle_message.h"
@@ -462,7 +462,7 @@ void OpenPokeblockCase(u8 caseId, void (*callback)(void))
void OpenPokeblockCaseInBattle(void)
{
- OpenPokeblockCase(PBLOCK_CASE_BATTLE, SetCB2ToReshowScreenAfterMenu2);
+ OpenPokeblockCase(PBLOCK_CASE_BATTLE, CB2_SetUpReshowBattleScreenAfterMenu2);
}
void OpenPokeblockCaseOnFeeder(void)
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index 4ad15414d..2c0b68dc6 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokeblock_feed.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "bg.h"
#include "data.h"
diff --git a/src/pokedex.c b/src/pokedex.c
index c1787ef6a..0b04ae3b9 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -8,7 +8,7 @@
#include "graphics.h"
#include "international_string_util.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "m4a.h"
#include "overworld.h"
@@ -1347,13 +1347,13 @@ void CB2_Pokedex(void)
sPokedexView->selectedScreen = 0;
if (!IsNationalPokedexEnabled())
{
- sPokedexView->seenCount = GetHoennPokedexCount(0);
- sPokedexView->ownCount = GetHoennPokedexCount(1);
+ sPokedexView->seenCount = GetHoennPokedexCount(FLAG_GET_SEEN);
+ sPokedexView->ownCount = GetHoennPokedexCount(FLAG_GET_CAUGHT);
}
else
{
- sPokedexView->seenCount = GetNationalPokedexCount(0);
- sPokedexView->ownCount = GetNationalPokedexCount(1);
+ sPokedexView->seenCount = GetNationalPokedexCount(FLAG_GET_SEEN);
+ sPokedexView->ownCount = GetNationalPokedexCount(FLAG_GET_CAUGHT);
}
sPokedexView->initialVOffset = 8;
gMain.state++;
@@ -2583,7 +2583,7 @@ static void CreateInterfaceSprites(u8 a)
spriteId = CreateSprite(&gUnknown_0855D20C, 17, 91, 1);
StartSpriteAnim(&gSprites[spriteId], 1);
- r6 = GetHoennPokedexCount(0);
+ r6 = GetHoennPokedexCount(FLAG_GET_SEEN);
_a = 0;
spriteId = CreateSprite(&gUnknown_0855D23C, 40, 45, 1);
@@ -2626,7 +2626,7 @@ static void CreateInterfaceSprites(u8 a)
r5 = (sPokedexView->seenCount % 100) % 10;
StartSpriteAnim(&gSprites[spriteId], r5);
- r6 = GetHoennPokedexCount(1);
+ r6 = GetHoennPokedexCount(FLAG_GET_CAUGHT);
_a = 0;
spriteId = CreateSprite(&gUnknown_0855D23C, 40, 81, 1);
@@ -3889,7 +3889,7 @@ void sub_80C020C(u32 num, u32 value, u32 c, u32 d)
value = NationalToHoennOrder(num);
else
value = num;
- ConvertIntToDecimalStringN(StringCopy(str, gText_UnkCtrlF908Clear01), value, 2, 3);
+ ConvertIntToDecimalStringN(StringCopy(str, gText_UnkCtrlF908Clear01), value, STR_CONV_MODE_LEADING_ZEROS, 3);
sub_80BE8DC(str, 0x60, 0x19);
natNum = NationalPokedexNumToSpecies(num);
if (natNum)
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index dc69b5d54..697fdb792 100755
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -4,7 +4,7 @@
#include "gpu_regs.h"
#include "graphics.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "overworld.h"
#include "palette.h"
diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c
index 487db6d58..0b35b00ee 100644
--- a/src/pokedex_cry_screen.c
+++ b/src/pokedex_cry_screen.c
@@ -2,7 +2,7 @@
#include "bg.h"
#include "m4a.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "palette.h"
#include "pokedex_cry_screen.h"
#include "sound.h"
diff --git a/src/pokemon.c b/src/pokemon.c
index 8812e5bc4..a30e20ea2 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "apprentice.h"
#include "battle.h"
#include "battle_anim.h"
@@ -60,6 +60,7 @@ static void EncryptBoxMon(struct BoxPokemon *boxMon);
static void DecryptBoxMon(struct BoxPokemon *boxMon);
static void sub_806E6CC(u8 taskId);
static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId);
+static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
// EWRAM vars
EWRAM_DATA static u8 sLearningMoveTableID = 0;
@@ -2879,22 +2880,22 @@ u16 GiveMoveToMon(struct Pokemon *mon, u16 move)
return GiveMoveToBoxMon(&mon->box, move);
}
-u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
+static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
{
s32 i;
for (i = 0; i < MAX_MON_MOVES; i++)
{
u16 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL);
- if (!existingMove)
+ if (existingMove == MOVE_NONE)
{
SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &move);
SetBoxMonData(boxMon, MON_DATA_PP1 + i, &gBattleMoves[move].pp);
return move;
}
if (existingMove == move)
- return -2;
+ return MON_ALREADY_KNOWS_MOVE;
}
- return 0xFFFF;
+ return MON_HAS_MAX_MOVES;
}
u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move)
@@ -2949,7 +2950,7 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon)
move = (gLevelUpLearnsets[species][i] & 0x1FF);
- if (GiveMoveToBoxMon(boxMon, move) == 0xFFFF)
+ if (GiveMoveToBoxMon(boxMon, move) == MON_HAS_MAX_MOVES)
DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move);
}
}
@@ -4860,7 +4861,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
if (battlerId != 4)
{
gAbsentBattlerFlags &= ~gBitTable[battlerId];
- CopyPlayerPartyMonToBattleData(battlerId, pokemon_order_func(gBattlerPartyIndexes[battlerId]));
+ CopyPlayerPartyMonToBattleData(battlerId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId]));
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255)
gBattleResults.numRevivesUsed++;
}
@@ -5657,21 +5658,23 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]);
}
-bool8 sub_806D7EC(void)
+// The below two functions determine which side of a multi battle the trainer battles on
+// 0 is the left (top in party menu), 1 is right (bottom in party menu)
+u8 GetPlayerFlankId(void)
{
- bool8 retVal = FALSE;
+ u8 flankId = 0;
switch (gLinkPlayers[GetMultiplayerId()].id)
{
case 0:
case 3:
- retVal = FALSE;
+ flankId = 0;
break;
case 1:
case 2:
- retVal = TRUE;
+ flankId = 1;
break;
}
- return retVal;
+ return flankId;
}
u16 GetLinkTrainerFlankId(u8 linkPlayerId)
@@ -5704,7 +5707,7 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
{
if (InBattlePyramid())
return GetBattlePyramindTrainerEncounterMusicId(trainerOpponentId);
- else if (sub_81D5C18())
+ else if (InTrainerHillChallenge())
return GetTrainerEncounterMusicIdInTrainerHill(trainerOpponentId);
else
return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId);
@@ -5724,9 +5727,9 @@ u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
switch (gNatureStatTable[nature][statIndex - 1])
{
case 1:
- return (u16)(n * 110) / 100;
+ return (u16)(n * 110) / 100; // NOTE: will overflow for n > 595 because the intermediate value is cast to u16 before the division. Fix by removing (u16) cast
case -1:
- return (u16)(n * 90) / 100;
+ return (u16)(n * 90) / 100; // NOTE: will overflow for n > 728, see above
}
return n;
@@ -6439,11 +6442,11 @@ void SetMonPreventsSwitchingString(void)
gBattleTextBuff1[4] = B_BUFF_EOS;
if (GetBattlerSide(gBattleStruct->battlerPreventingSwitchout) == B_SIDE_PLAYER)
- gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]);
+ gBattleTextBuff1[3] = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]);
else
gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout];
- PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]))
+ PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId]))
BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4);
}
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index ee68de326..70af9f956 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1029,13 +1029,13 @@ const u16 sSpriteImageSizes[3][4] =
},
};
-u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra)
+u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 handleDeoxys)
{
u8 spriteId;
struct MonIconSpriteTemplate iconTemplate =
{
.oam = &sMonIconOamData,
- .image = GetMonIconPtr(species, personality, extra),
+ .image = GetMonIconPtr(species, personality, handleDeoxys),
.anims = sMonIconAnims,
.affineAnims = sMonIconAffineAnims,
.callback = callback,
@@ -1125,9 +1125,9 @@ u16 sub_80D2E84(u16 species)
}
}
-const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 extra)
+const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 handleDeoxys)
{
- return GetMonIconTiles(GetIconSpecies(species, personality), extra);
+ return GetMonIconTiles(GetIconSpecies(species, personality), handleDeoxys);
}
void sub_80D2EF8(struct Sprite *sprite)
@@ -1184,17 +1184,17 @@ void FreeMonIconPalette(u16 species)
FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
}
-void sub_80D3014(struct Sprite *sprite)
+void SpriteCB_MonIcon(struct Sprite *sprite)
{
UpdateMonIconFrame(sprite);
}
-const u8* GetMonIconTiles(u16 species, bool32 extra)
+const u8* GetMonIconTiles(u16 species, bool32 handleDeoxys)
{
const u8* iconSprite = gMonIconTable[species];
- if (species == SPECIES_DEOXYS && extra == TRUE)
+ if (species == SPECIES_DEOXYS && handleDeoxys == TRUE)
{
- iconSprite = (const u8*)(0x400 + (u32)iconSprite); //WTF?
+ iconSprite = (const u8*)(0x400 + (u32)iconSprite); // use the specific Deoxys form icon (Speed in this case)
}
return iconSprite;
}
@@ -1302,7 +1302,7 @@ void sub_80D328C(struct Sprite *sprite)
DestroySprite(sprite);
}
-void sub_80D32C8(struct Sprite *sprite, u8 animNum)
+void SetPartyHPBarSprite(struct Sprite *sprite, u8 animNum)
{
sprite->animNum = animNum;
sprite->animDelayCounter = 0;
diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c
index 8f16e1ce2..ccf64b8a2 100755
--- a/src/pokemon_jump.c
+++ b/src/pokemon_jump.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle_anim.h"
#include "bg.h"
#include "data.h"
@@ -158,7 +158,7 @@ static void sub_802AA60(struct PokemonJump1 *);
static void sub_802AA94(struct PokemonJump1 *);
static void sub_802AB20(void);
static void sub_802AB98(void);
-static s16 sub_802AC00(u16 species);
+static s16 GetPokemonJumpSpeciesIdx(u16 species);
static void sub_802AC2C(struct PokemonJump1_MonInfo *monInfo, struct Pokemon *mon);
static void sub_802AC6C(void);
static void sub_802ACA0(u8 taskId);
@@ -288,7 +288,7 @@ static void sub_802D598(void);
static void sub_802D5E4(void);
static void sub_802D72C(void);
static void sub_802D688(void);
-static void sub_802E3E4(u8 taskId);
+static void Task_ShowPokemonJumpRecords(u8 taskId);
static void sub_802E6D0(u8 taskId);
static void sub_802EB98(u8 taskId);
static void sub_802E500(u16 windowId, int width);
@@ -501,7 +501,7 @@ static void sub_802AB20(void)
for (i = 0; i < MAX_RFU_PLAYERS; i++)
{
- index = sub_802AC00(gUnknown_02022CFC->unk82A8[i].species);
+ index = GetPokemonJumpSpeciesIdx(gUnknown_02022CFC->unk82A8[i].species);
gUnknown_02022CFC->unk82E4[i].unkC = gPkmnJumpSpecies[index].unk2;
}
@@ -524,7 +524,7 @@ static void sub_802AB98(void)
}
}
-static s16 sub_802AC00(u16 species)
+static s16 GetPokemonJumpSpeciesIdx(u16 species)
{
u32 i;
for (i = 0; i < ARRAY_COUNT(gPkmnJumpSpecies); i++)
@@ -533,7 +533,7 @@ static s16 sub_802AC00(u16 species)
return i;
}
- return -1;
+ return -1; // species isnt allowed
}
static void sub_802AC2C(struct PokemonJump1_MonInfo *monInfo, struct Pokemon *mon)
@@ -2204,12 +2204,12 @@ static u8 *sub_802C8E8(u8 multiplayerId)
return gUnknown_02022CFC->unk82E4[multiplayerId].unk1C;
}
-bool32 sub_802C908(u16 species)
+bool32 IsSpeciesAllowedInPokemonJump(u16 species)
{
- return sub_802AC00(species) > -1;
+ return GetPokemonJumpSpeciesIdx(species) > -1;
}
-void sub_802C920(void)
+void IsPokemonJumpSpeciesInParty(void)
{
int i;
@@ -2218,15 +2218,15 @@ void sub_802C920(void)
if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES))
{
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
- if (sub_802C908(species))
+ if (IsSpeciesAllowedInPokemonJump(species))
{
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
return;
}
}
}
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
}
// Large group of data.
@@ -3922,10 +3922,10 @@ static void sub_802E3A8(void)
pokeJump->field6++;
}
-void sub_802E3C4(void)
+void ShowPokemonJumpRecords(void)
{
- u8 taskId = CreateTask(sub_802E3E4, 0);
- sub_802E3E4(taskId);
+ u8 taskId = CreateTask(Task_ShowPokemonJumpRecords, 0);
+ Task_ShowPokemonJumpRecords(taskId);
}
static const struct WindowTemplate gUnknown_082FE270 =
@@ -3941,7 +3941,7 @@ static const struct WindowTemplate gUnknown_082FE270 =
static const u8 *const gUnknown_082FE278[] = {gText_JumpsInARow, gText_BestScore2, gText_ExcellentsInARow};
-static void sub_802E3E4(u8 taskId)
+static void Task_ShowPokemonJumpRecords(u8 taskId)
{
struct WindowTemplate window;
int i, width, widthCurr;
@@ -4093,7 +4093,7 @@ static const struct SpriteTemplate gUnknown_082FE730[] =
{
.tileTag = 0x2000,
.paletteTag = 0x2000,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = sSpriteAnimTable_82FE718,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c
index f63e1ccba..914d68925 100644
--- a/src/pokemon_size_record.c
+++ b/src/pokemon_size_record.c
@@ -100,9 +100,9 @@ static void FormatMonSizeRecord(u8 *string, u32 size)
size = (double)(size * 10) / (CM_PER_INCH * 10);
#endif
- string = ConvertIntToDecimalStringN(string, size / 10, 0, 8);
+ string = ConvertIntToDecimalStringN(string, size / 10, STR_CONV_MODE_LEFT_ALIGN, 8);
string = StringAppend(string, gText_DecimalPoint);
- ConvertIntToDecimalStringN(string, size % 10, 0, 1);
+ ConvertIntToDecimalStringN(string, size % 10, STR_CONV_MODE_LEFT_ALIGN, 1);
}
static u8 CompareMonSize(u16 species, u16 *sizeRecord)
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index fa9e61504..69a0161e1 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "data.h"
#include "decompress.h"
@@ -1540,9 +1540,9 @@ static const u8 gHandCursorTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cu
static const u8 gHandCursorShadowTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp");
// code
-void sub_80C6D80(const u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4)
+void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, s32 bytesToBuffer)
{
- s32 i, val, val2;
+ s32 i, tileBytesToBuffer, remainingBytes;
u16 windowId;
u8 txtColor[3];
u8 *tileData1, *tileData2;
@@ -1551,25 +1551,25 @@ void sub_80C6D80(const u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4)
winTemplate.width = 24;
winTemplate.height = 2;
windowId = AddWindow(&winTemplate);
- FillWindowPixelBuffer(windowId, PIXEL_FILL(arg3));
+ FillWindowPixelBuffer(windowId, PIXEL_FILL(zero2));
tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA);
tileData2 = (winTemplate.width * 32) + tileData1;
- if (!arg2)
- txtColor[0] = 0;
+ if (!zero1)
+ txtColor[0] = TEXT_COLOR_TRANSPARENT;
else
- txtColor[0] = arg3;
- txtColor[1] = 0xF;
- txtColor[2] = 0xE;
+ txtColor[0] = zero2;
+ txtColor[1] = TEXT_DYNAMIC_COLOR_6;
+ txtColor[2] = TEXT_DYNAMIC_COLOR_5;
AddTextPrinterParameterized4(windowId, 1, 0, 1, 0, 0, txtColor, -1, string);
- val = arg4;
- if (val > 6u)
- val = 6;
- val2 = arg4 - 6;
- if (val > 0)
+ tileBytesToBuffer = bytesToBuffer;
+ if (tileBytesToBuffer > 6u)
+ tileBytesToBuffer = 6;
+ remainingBytes = bytesToBuffer - 6;
+ if (tileBytesToBuffer > 0)
{
- for (i = val; i != 0; i--)
+ for (i = tileBytesToBuffer; i != 0; i--)
{
CpuCopy16(tileData1, dst, 0x80);
CpuCopy16(tileData2, dst + 0x80, 0x80);
@@ -1579,8 +1579,9 @@ void sub_80C6D80(const u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4)
}
}
- if (val2 > 0)
- CpuFill16((arg3 << 4) | arg3, dst, (u32)(val2) * 0x100);
+ // Never used. bytesToBuffer is always passed <= 6, so remainingBytes is always <= 0 here
+ if (remainingBytes > 0)
+ CpuFill16((zero2 << 4) | zero2, dst, (u32)(remainingBytes) * 0x100);
RemoveWindow(windowId);
}
@@ -2107,7 +2108,7 @@ static void sub_80C7BE4(void)
center = GetStringCenterAlignXOffset(1, boxName, 64);
AddTextPrinterParameterized3(windowId, 1, center, 1, gUnknown_08571734, TEXT_SPEED_FF, boxName);
- ConvertIntToDecimalStringN(text, nPokemonInBox, 1, 2);
+ ConvertIntToDecimalStringN(text, nPokemonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2);
StringAppend(text, gUnknown_08571737);
center = GetStringCenterAlignXOffset(1, text, 64);
AddTextPrinterParameterized3(windowId, 1, center, 17, gUnknown_08571734, TEXT_SPEED_FF, text);
@@ -5518,7 +5519,7 @@ static void sub_80CCB50(u8 boxId)
sPSSData->field_738 |= 0x10000 << tagIndex;
StringCopyPadded(sPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8);
- sub_80C6D80(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2);
+ DrawTextWindowAndBufferTiles(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2);
LoadSpriteSheet(&spriteSheet);
r6 = sub_80CD00C(GetBoxNamePtr(boxId));
@@ -5554,7 +5555,7 @@ static void sub_80CCCFC(u8 boxId, s8 direction)
}
StringCopyPadded(sPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8);
- sub_80C6D80(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2);
+ DrawTextWindowAndBufferTiles(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2);
LoadSpriteSheet(&spriteSheet);
LoadPalette(gUnknown_08577574[GetBoxWallpaper(boxId)], r8, 4);
x = sub_80CD00C(GetBoxNamePtr(boxId));
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 8697c557f..41c48d008 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -20,7 +20,7 @@
#include "item.h"
#include "link.h"
#include "m4a.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "menu_helpers.h"
#include "mon_markings.h"
@@ -42,6 +42,7 @@
#include "window.h"
#include "constants/items.h"
#include "constants/moves.h"
+#include "constants/party_menu.h"
#include "constants/region_map_sections.h"
#include "constants/rgb.h"
#include "constants/songs.h"
@@ -162,7 +163,7 @@ static EWRAM_DATA struct PokemonSummaryScreenData
u8 unk_filler4[6];
} *sMonSummaryScreen = NULL;
EWRAM_DATA u8 gLastViewedMonIndex = 0;
-static EWRAM_DATA u8 sUnknown_0203CF21 = 0;
+static EWRAM_DATA u8 sMoveSlotToReplace = 0;
ALIGNED(4) static EWRAM_DATA u8 sUnknownTaskId = 0;
struct UnkStruct_61CC04
@@ -1491,11 +1492,11 @@ static void HandleInput(u8 taskId)
{
ChangeSummaryPokemon(taskId, 1);
}
- else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysState() == 1)
+ else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED)
{
ChangePage(taskId, -1);
}
- else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysState() == 2)
+ else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED)
{
ChangePage(taskId, 1);
}
@@ -2159,11 +2160,11 @@ static void HandleReplaceMoveInput(u8 taskId)
data[0] = 4;
sub_81C1070(data, 1, &sMonSummaryScreen->firstMoveIndex);
}
- else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
+ else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{
ChangePage(taskId, -1);
}
- else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
+ else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{
ChangePage(taskId, 1);
}
@@ -2173,8 +2174,8 @@ static void HandleReplaceMoveInput(u8 taskId)
{
StopPokemonAnimations();
PlaySE(SE_SELECT);
- sUnknown_0203CF21 = sMonSummaryScreen->firstMoveIndex;
- gSpecialVar_0x8005 = sUnknown_0203CF21;
+ sMoveSlotToReplace = sMonSummaryScreen->firstMoveIndex;
+ gSpecialVar_0x8005 = sMoveSlotToReplace;
BeginCloseSummaryScreen(taskId);
}
else
@@ -2188,8 +2189,8 @@ static void HandleReplaceMoveInput(u8 taskId)
u32 var1;
StopPokemonAnimations();
PlaySE(SE_SELECT);
- sUnknown_0203CF21 = 4;
- gSpecialVar_0x8005 = 4;
+ sMoveSlotToReplace = MAX_MON_MOVES;
+ gSpecialVar_0x8005 = MAX_MON_MOVES;
BeginCloseSummaryScreen(taskId);
}
}
@@ -2238,7 +2239,7 @@ static void HandleHMMovesCantBeForgottenInput(u8 taskId)
data[1] = 0;
gTasks[taskId].func = HandleReplaceMoveInput;
}
- else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1)
+ else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED)
{
if (sMonSummaryScreen->currPageIndex != 2)
{
@@ -2252,7 +2253,7 @@ static void HandleHMMovesCantBeForgottenInput(u8 taskId)
sub_81C1EFC(9, -2, move);
}
}
- else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2)
+ else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED)
{
if (sMonSummaryScreen->currPageIndex != 3)
{
@@ -2281,9 +2282,9 @@ static void HandleHMMovesCantBeForgottenInput(u8 taskId)
}
}
-u8 sub_81C1B94(void)
+u8 GetMoveSlotToReplace(void)
{
- return sUnknown_0203CF21;
+ return sMoveSlotToReplace;
}
static void DrawPagination(void) // Updates the pagination dots at the top of the summary screen
@@ -2574,9 +2575,9 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo
static void SetDexNumberColor(bool8 isMonShiny)
{
if (!isMonShiny)
- sub_8199C30(3, 1, 4, 8, 8, 0);
+ SetBgTilemapPalette(3, 1, 4, 8, 8, 0);
else
- sub_8199C30(3, 1, 4, 8, 8, 5);
+ SetBgTilemapPalette(3, 1, 4, 8, 8, 5);
schedule_bg_copy_tilemap_to_vram(3);
}
@@ -2716,7 +2717,7 @@ static void PrintNotEggInfo(void)
if (dexNum != 0xFFFF)
{
StringCopy(gStringVar1, &gText_UnkCtrlF908Clear01[0]);
- ConvertIntToDecimalStringN(gStringVar2, dexNum, 2, 3);
+ ConvertIntToDecimalStringN(gStringVar2, dexNum, STR_CONV_MODE_LEADING_ZEROS, 3);
StringAppend(gStringVar1, gStringVar2);
if (!IsMonShiny(mon))
{
@@ -2739,7 +2740,7 @@ static void PrintNotEggInfo(void)
SetDexNumberColor(TRUE);
}
StringCopy(gStringVar1, &gText_LevelSymbol[0]);
- ConvertIntToDecimalStringN(gStringVar2, summary->level, 0, 3);
+ ConvertIntToDecimalStringN(gStringVar2, summary->level, STR_CONV_MODE_LEFT_ALIGN, 3);
StringAppend(gStringVar1, gStringVar2);
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, gStringVar1, 0x18, 17, 0, 1);
GetMonNickname(mon, gStringVar1);
@@ -3054,7 +3055,7 @@ static void PrintMonOTID(void)
int xPos;
if (InBattleFactory() != TRUE && InSlateportBattleTent() != TRUE)
{
- ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)sMonSummaryScreen->summary.OTID, 2, 5);
+ ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)sMonSummaryScreen->summary.OTID, STR_CONV_MODE_LEADING_ZEROS, 5);
xPos = GetStringRightAlignXOffset(1, gStringVar1, 56);
SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ID), gStringVar1, xPos, 1, 0, 1);
}
@@ -3141,7 +3142,7 @@ static void GetMetLevelString(u8 *output)
u8 level = sMonSummaryScreen->summary.metLevel;
if (level == 0)
level = EGG_HATCH_LEVEL;
- ConvertIntToDecimalStringN(output, level, 0, 3);
+ ConvertIntToDecimalStringN(output, level, STR_CONV_MODE_LEFT_ALIGN, 3);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, output);
}
@@ -3336,7 +3337,7 @@ static void PrintRibbonCount(void)
}
else
{
- ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.ribbonCount, 1, 2);
+ ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.ribbonCount, STR_CONV_MODE_RIGHT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, gText_RibbonsVar1);
text = gStringVar4;
}
@@ -3352,10 +3353,10 @@ static void BufferLeftColumnStats(void)
u8 *attackString = Alloc(8);
u8 *defenseString = Alloc(8);
- ConvertIntToDecimalStringN(currentHPString, sMonSummaryScreen->summary.currentHP, 1, 3);
- ConvertIntToDecimalStringN(maxHPString, sMonSummaryScreen->summary.maxHP, 1, 3);
- ConvertIntToDecimalStringN(attackString, sMonSummaryScreen->summary.atk, 1, 7);
- ConvertIntToDecimalStringN(defenseString, sMonSummaryScreen->summary.def, 1, 7);
+ ConvertIntToDecimalStringN(currentHPString, sMonSummaryScreen->summary.currentHP, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(maxHPString, sMonSummaryScreen->summary.maxHP, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(attackString, sMonSummaryScreen->summary.atk, STR_CONV_MODE_RIGHT_ALIGN, 7);
+ ConvertIntToDecimalStringN(defenseString, sMonSummaryScreen->summary.def, STR_CONV_MODE_RIGHT_ALIGN, 7);
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, currentHPString);
@@ -3377,9 +3378,9 @@ static void PrintLeftColumnStats(void)
static void BufferRightColumnStats(void)
{
- ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.spatk, 1, 3);
- ConvertIntToDecimalStringN(gStringVar2, sMonSummaryScreen->summary.spdef, 1, 3);
- ConvertIntToDecimalStringN(gStringVar3, sMonSummaryScreen->summary.speed, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.spatk, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(gStringVar2, sMonSummaryScreen->summary.spdef, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(gStringVar3, sMonSummaryScreen->summary.speed, STR_CONV_MODE_RIGHT_ALIGN, 3);
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
@@ -3400,7 +3401,7 @@ static void PrintExpPointsNextLevel(void)
int offset;
u32 expToNextLevel;
- ConvertIntToDecimalStringN(gStringVar1, sum->exp, 1, 7);
+ ConvertIntToDecimalStringN(gStringVar1, sum->exp, STR_CONV_MODE_RIGHT_ALIGN, 7);
offset = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2;
SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 1, 0, 0);
@@ -3409,7 +3410,7 @@ static void PrintExpPointsNextLevel(void)
else
expToNextLevel = 0;
- ConvertIntToDecimalStringN(gStringVar1, expToNextLevel, 1, 6);
+ ConvertIntToDecimalStringN(gStringVar1, expToNextLevel, STR_CONV_MODE_RIGHT_ALIGN, 6);
offset = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2;
SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 17, 0, 0);
}
@@ -3496,8 +3497,8 @@ static void PrintMoveNameAndPP(u8 moveIndex)
{
pp = CalculatePPWithBonus(move, summaryStruct->summary.ppBonuses, moveIndex);
SummaryScreen_PrintTextOnWindow(moveNameWindowId, gMoveNames[move], 0, moveIndex * 16 + 1, 0, 1);
- ConvertIntToDecimalStringN(gStringVar1, summaryStruct->summary.pp[moveIndex], 1, 2);
- ConvertIntToDecimalStringN(gStringVar2, pp, 1, 2);
+ ConvertIntToDecimalStringN(gStringVar1, summaryStruct->summary.pp[moveIndex], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar2, pp, STR_CONV_MODE_RIGHT_ALIGN, 2);
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar2);
@@ -3530,7 +3531,7 @@ static void PrintMovePowerAndAccuracy(u16 moveIndex)
}
else
{
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].power, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].power, STR_CONV_MODE_RIGHT_ALIGN, 3);
text = gStringVar1;
}
@@ -3542,7 +3543,7 @@ static void PrintMovePowerAndAccuracy(u16 moveIndex)
}
else
{
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].accuracy, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3);
text = gStringVar1;
}
@@ -3660,7 +3661,7 @@ static void PrintNewMoveDetailsOrCancelText(void)
else
SummaryScreen_PrintTextOnWindow(windowId1, gMoveNames[move], 0, 65, 0, 5);
- ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, 1, 2);
+ ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, STR_CONV_MODE_RIGHT_ALIGN, 2);
DynamicPlaceholderTextUtil_Reset();
DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1);
diff --git a/src/pokenav.c b/src/pokenav.c
index a5bb51789..2a1647a6f 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "task.h"
#include "main.h"
#include "overworld.h"
diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c
index 1c40e146f..cb9467a9c 100644
--- a/src/pokenav_unk_2.c
+++ b/src/pokenav_unk_2.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "bg.h"
#include "palette.h"
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 3cbf6ecd2..41ad37fbf 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -86,7 +86,7 @@ int GameClear(void)
return 0;
}
-bool8 sp0C8_whiteout_maybe(void)
+bool8 SetCB2WhiteOut(void)
{
SetMainCallback2(CB2_WhiteOut);
return FALSE;
diff --git a/src/psychic.c b/src/psychic.c
index 6f808b547..7ad8e14cb 100644
--- a/src/psychic.c
+++ b/src/psychic.c
@@ -45,18 +45,18 @@ const struct SpriteTemplate gUnknown_08596548 =
{
.tileTag = ANIM_TAG_SPIRAL,
.paletteTag = ANIM_TAG_SPIRAL,
- .oam = &gUnknown_08524A9C,
+ .oam = &gOamData_AffineNormal_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596544,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
const struct SpriteTemplate gUnknown_08596560 =
{
.tileTag = ANIM_TAG_GREEN_LIGHT_WALL,
.paletteTag = ANIM_TAG_GREEN_LIGHT_WALL,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -67,7 +67,7 @@ const struct SpriteTemplate gUnknown_08596578 =
{
.tileTag = ANIM_TAG_BLUE_LIGHT_WALL,
.paletteTag = ANIM_TAG_BLUE_LIGHT_WALL,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -78,7 +78,7 @@ const struct SpriteTemplate gUnknown_08596590 =
{
.tileTag = ANIM_TAG_RED_LIGHT_WALL,
.paletteTag = ANIM_TAG_RED_LIGHT_WALL,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -89,7 +89,7 @@ const struct SpriteTemplate gUnknown_085965A8 =
{
.tileTag = ANIM_TAG_GRAY_LIGHT_WALL,
.paletteTag = ANIM_TAG_GRAY_LIGHT_WALL,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -100,7 +100,7 @@ const struct SpriteTemplate gUnknown_085965C0 =
{
.tileTag = ANIM_TAG_ORANGE_LIGHT_WALL,
.paletteTag = ANIM_TAG_ORANGE_LIGHT_WALL,
- .oam = &gUnknown_08524A3C,
+ .oam = &gOamData_AffineOff_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -126,7 +126,7 @@ const struct SpriteTemplate gUnknown_085965F4 =
{
.tileTag = ANIM_TAG_SPARKLE_4,
.paletteTag = ANIM_TAG_SPARKLE_4,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085965F0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -151,7 +151,7 @@ const struct SpriteTemplate gUnknown_08596624 =
{
.tileTag = ANIM_TAG_SPARKLE_3,
.paletteTag = ANIM_TAG_SPARKLE_3,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gUnknown_08596620,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -162,7 +162,7 @@ const struct SpriteTemplate gUnknown_0859663C =
{
.tileTag = ANIM_TAG_GOLD_RING,
.paletteTag = ANIM_TAG_GOLD_RING,
- .oam = &gUnknown_08524954,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -219,7 +219,7 @@ const struct SpriteTemplate gUnknown_085966DC =
{
.tileTag = ANIM_TAG_BENT_SPOON,
.paletteTag = ANIM_TAG_BENT_SPOON,
- .oam = &gUnknown_08524954,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gUnknown_085966D4,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -261,7 +261,7 @@ const struct SpriteTemplate gUnknown_08596744 =
{
.tileTag = ANIM_TAG_AMNESIA,
.paletteTag = ANIM_TAG_AMNESIA,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596714,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -287,7 +287,7 @@ const struct SpriteTemplate gUnknown_08596794 =
{
.tileTag = ANIM_TAG_HOLLOW_ORB,
.paletteTag = ANIM_TAG_HOLLOW_ORB,
- .oam = &gUnknown_08524A2C,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -298,7 +298,7 @@ const struct SpriteTemplate gUnknown_085967AC =
{
.tileTag = 10250,
.paletteTag = 10250,
- .oam = &gUnknown_0852491C,
+ .oam = &gOamData_AffineOff_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -351,7 +351,7 @@ const struct SpriteTemplate gUnknown_08596864 =
{
.tileTag = ANIM_TAG_BLUEGREEN_ORB,
.paletteTag = ANIM_TAG_BLUEGREEN_ORB,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596854,
@@ -374,11 +374,11 @@ const struct SpriteTemplate gUnknown_08596898 =
{
.tileTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596894,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
const union AffineAnimCmd gUnknown_085968B0[] =
@@ -412,7 +412,7 @@ const struct SpriteTemplate gUnknown_08596920 =
{
.tileTag = ANIM_TAG_CIRCLE_OF_LIGHT,
.paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596918,
diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c
index fc2860797..4e5e492f2 100644
--- a/src/rayquaza_scene.c
+++ b/src/rayquaza_scene.c
@@ -5,7 +5,7 @@
#include "graphics.h"
#include "bg.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "palette.h"
#include "scanline_effect.h"
#include "menu.h"
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 32e0404b9..8a1e8b1ee 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "random.h"
#include "constants/items.h"
#include "text.h"
@@ -631,7 +631,7 @@ static void ReceiveOldManData(OldMan *oldMan, size_t recordSize, u8 which)
u8 version;
u16 language;
OldMan *dest;
- u32 mixIndices[4];
+ u32 mixIndices[MAX_LINK_PLAYERS];
ShufflePlayerIndices(mixIndices);
dest = (void *)oldMan + recordSize * mixIndices[which];
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index 432c5dbe6..bd1974d48 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -10,7 +10,7 @@
#include "string_util.h"
#include "palette.h"
#include "save.h"
-#include "alloc.h"
+#include "malloc.h"
#include "util.h"
#include "task.h"
#include "text.h"
diff --git a/src/region_map.c b/src/region_map.c
index ea2cbfa6a..b6133ee0d 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -2,7 +2,7 @@
#include "main.h"
#include "text.h"
#include "menu.h"
-#include "alloc.h"
+#include "malloc.h"
#include "gpu_regs.h"
#include "palette.h"
#include "party_menu.h"
@@ -55,7 +55,7 @@ static EWRAM_DATA struct {
/*0x008*/ struct RegionMap regionMap;
/*0x88c*/ u8 unk_88c[0x1c0];
/*0xa4c*/ u8 unk_a4c[0x26];
- /*0xa72*/ bool8 unk_a72;
+ /*0xa72*/ bool8 choseFlyLocation;
} *sFlyMap = NULL; // a74
static bool32 gUnknown_03001180;
@@ -1605,7 +1605,8 @@ u8 *GetMapName(u8 *dest, u16 regionMapId, u16 padLength)
return str;
}
-u8 *sub_81245DC(u8 *dest, u16 mapSecId)
+// TODO: probably needs a better name
+u8 *GetMapNameGeneric(u8 *dest, u16 mapSecId)
{
switch (mapSecId)
{
@@ -1626,7 +1627,7 @@ u8 *sub_8124610(u8 *dest, u16 mapSecId)
}
else
{
- return sub_81245DC(dest, mapSecId);
+ return GetMapNameGeneric(dest, mapSecId);
}
}
@@ -1972,13 +1973,13 @@ static void sub_8124D64(void)
if (sFlyMap->regionMap.iconDrawType == MAPSECTYPE_CITY_CANFLY || sFlyMap->regionMap.iconDrawType == MAPSECTYPE_BATTLE_FRONTIER)
{
m4aSongNumStart(SE_SELECT);
- sFlyMap->unk_a72 = TRUE;
+ sFlyMap->choseFlyLocation = TRUE;
sub_81248F4(sub_8124E0C);
}
break;
case INPUT_EVENT_B_BUTTON:
m4aSongNumStart(SE_SELECT);
- sFlyMap->unk_a72 = FALSE;
+ sFlyMap->choseFlyLocation = FALSE;
sub_81248F4(sub_8124E0C);
break;
}
@@ -1997,7 +1998,7 @@ static void sub_8124E0C(void)
if (!UpdatePaletteFade())
{
FreeRegionMapIconResources();
- if (sFlyMap->unk_a72)
+ if (sFlyMap->choseFlyLocation)
{
switch (sFlyMap->regionMap.mapSecId)
{
@@ -2024,11 +2025,11 @@ static void sub_8124E0C(void)
}
break;
}
- sub_80B69DC();
+ ReturnToFieldFromFlyMapSelect();
}
else
{
- SetMainCallback2(sub_81B58A8);
+ SetMainCallback2(CB2_ReturnToPartyMenuFromFlyMap);
}
if (sFlyMap != NULL)
{
diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c
index 1fe9f2279..eebaab52f 100644
--- a/src/reset_rtc_screen.c
+++ b/src/reset_rtc_screen.c
@@ -300,19 +300,19 @@ static void PrintTime(u8 windowId, u8 x, u8 y, u16 days, u8 hours, u8 minutes, u
{
u8 *dest = gStringVar4;
- ConvertIntToDecimalStringN(gStringVar1, days, 1, 4);
+ ConvertIntToDecimalStringN(gStringVar1, days, STR_CONV_MODE_RIGHT_ALIGN, 4);
dest = StringCopy(dest, gStringVar1);
dest = StringCopy(dest, gText_Day);
- ConvertIntToDecimalStringN(gStringVar1, hours, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar1, hours, STR_CONV_MODE_RIGHT_ALIGN, 3);
dest = StringCopy(dest, gStringVar1);
dest = StringCopy(dest, gText_Colon3);
- ConvertIntToDecimalStringN(gStringVar1, minutes, 2, 2);
+ ConvertIntToDecimalStringN(gStringVar1, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
dest = StringCopy(dest, gStringVar1);
dest = StringCopy(dest, gText_Colon3);
- ConvertIntToDecimalStringN(gStringVar1, seconds, 2, 2);
+ ConvertIntToDecimalStringN(gStringVar1, seconds, STR_CONV_MODE_LEADING_ZEROS, 2);
dest = StringCopy(dest, gStringVar1);
AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, TEXT_SPEED_FF, NULL);
diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c
index beba742f5..5a54a2177 100644
--- a/src/reset_save_heap.c
+++ b/src/reset_save_heap.c
@@ -6,7 +6,7 @@
#include "save.h"
#include "new_game.h"
#include "overworld.h"
-#include "alloc.h"
+#include "malloc.h"
void sub_81700F8(void)
{
diff --git a/src/rock.c b/src/rock.c
index 6f6e20955..7bba6f603 100644
--- a/src/rock.c
+++ b/src/rock.c
@@ -59,7 +59,7 @@ const struct SpriteTemplate gUnknown_08596B04 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596AF8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -70,7 +70,7 @@ const struct SpriteTemplate gUnknown_08596B1C =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596AF8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -81,7 +81,7 @@ const struct SpriteTemplate gUnknown_08596B34 =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -105,7 +105,7 @@ const struct SpriteTemplate gUnknown_08596B70 =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WATER_ORB,
- .oam = &gUnknown_08524A8C,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gUnknown_085950E0,
.images = NULL,
.affineAnims = gUnknown_08596B6C,
@@ -116,7 +116,7 @@ const struct SpriteTemplate gUnknown_08596B88 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_085954D0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -127,7 +127,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596BA0 =
{
.tileTag = ANIM_TAG_FLYING_DIRT,
.paletteTag = ANIM_TAG_FLYING_DIRT,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -203,7 +203,7 @@ const struct SpriteTemplate gUnknown_08596C10 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596BF8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -214,7 +214,7 @@ const struct SpriteTemplate gUnknown_08596C28 =
{
.tileTag = ANIM_TAG_MUD_SAND,
.paletteTag = ANIM_TAG_MUD_SAND,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -225,7 +225,7 @@ const struct SpriteTemplate gUnknown_08596C40 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -236,7 +236,7 @@ const struct SpriteTemplate gUnknown_08596C58 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596BF8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -265,7 +265,7 @@ const struct SpriteTemplate gUnknown_08596C98 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gUnknown_08596BF8,
.images = NULL,
.affineAnims = gUnknown_08596C90,
@@ -276,7 +276,7 @@ const struct SpriteTemplate gUnknown_08596CB0 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gUnknown_08596BF8,
.images = NULL,
.affineAnims = gUnknown_08596C90,
@@ -287,7 +287,7 @@ const struct SpriteTemplate gUnknown_08596CC8 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08596C08,
.images = NULL,
.affineAnims = gUnknown_08596C90,
@@ -298,7 +298,7 @@ const struct SpriteTemplate gUnknown_08596CE0 =
{
.tileTag = ANIM_TAG_ROCKS,
.paletteTag = ANIM_TAG_ROCKS,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gUnknown_08596C00,
.images = NULL,
.affineAnims = gUnknown_08596C90,
diff --git a/src/rom_8034C54.c b/src/rom_8034C54.c
index 42817fc2b..7cc30c775 100644
--- a/src/rom_8034C54.c
+++ b/src/rom_8034C54.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "rom_8034C54.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "main.h"
#include "battle_main.h"
diff --git a/src/rom_81520A8.c b/src/rom_81520A8.c
index f06823594..f6d14d49c 100644
--- a/src/rom_81520A8.c
+++ b/src/rom_81520A8.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "rom_81520A8.h"
-#include "alloc.h"
+#include "malloc.h"
#include "main.h"
#include "rom_8034C54.h"
diff --git a/src/rotating_tile_puzzle.c b/src/rotating_tile_puzzle.c
new file mode 100644
index 000000000..7238ec751
--- /dev/null
+++ b/src/rotating_tile_puzzle.c
@@ -0,0 +1,338 @@
+#include "global.h"
+#include "event_object_movement.h"
+#include "fieldmap.h"
+#include "malloc.h"
+#include "rotating_tile_puzzle.h"
+#include "script_movement.h"
+#include "constants/event_object_movement_constants.h"
+#include "constants/event_objects.h"
+#include "constants/metatile_labels.h"
+
+extern const u8 RotatingTilePuzzle_Movement_ShiftRight[];
+extern const u8 RotatingTilePuzzle_Movement_ShiftDown[];
+extern const u8 RotatingTilePuzzle_Movement_ShiftLeft[];
+extern const u8 RotatingTilePuzzle_Movement_ShiftUp[];
+extern const u8 RotatingTilePuzzle_Movement_FaceRight[];
+extern const u8 RotatingTilePuzzle_Movement_FaceDown[];
+extern const u8 RotatingTilePuzzle_Movement_FaceLeft[];
+extern const u8 RotatingTilePuzzle_Movement_FaceUp[];
+
+#define ROTATE_COUNTERCLOCKWISE 0
+#define ROTATE_CLOCKWISE 1
+#define ROTATE_NONE 2
+
+struct RotatingTileObject
+{
+ u8 prevPuzzleTileNum;
+ u8 eventTemplateId;
+};
+
+struct RotatingTilePuzzle
+{
+ struct RotatingTileObject objects[EVENT_OBJECTS_COUNT];
+ u8 numObjects;
+ bool8 isTrickHouse;
+};
+
+// This file's functions.
+static void SaveRotatingTileObject(u8 eventTemplateId, u8 arg1);
+static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 arg1);
+
+// EWRAM vars
+EWRAM_DATA static struct RotatingTilePuzzle *sRotatingTilePuzzle = NULL;
+
+// code
+void InitRotatingTilePuzzle(bool8 isTrickHouse)
+{
+ if (sRotatingTilePuzzle == NULL)
+ sRotatingTilePuzzle = AllocZeroed(sizeof(*sRotatingTilePuzzle));
+
+ sRotatingTilePuzzle->isTrickHouse = isTrickHouse;
+}
+
+void FreeRotatingTilePuzzle(void)
+{
+ u8 id;
+
+ if (sRotatingTilePuzzle != NULL)
+ FREE_AND_SET_NULL(sRotatingTilePuzzle);
+
+ id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
+ EventObjectClearHeldMovementIfFinished(&gEventObjects[id]);
+ ScriptMovement_UnfreezeEventObjects();
+}
+
+u16 MoveRotatingTileObjects(u8 puzzleNumber)
+{
+ u8 i;
+ struct EventObjectTemplate *eventObjects = gSaveBlock1Ptr->eventObjectTemplates;
+ u16 localId = 0;
+
+ for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++)
+ {
+ s32 puzzleTileStart;
+ u8 puzzleTileNum;
+ s16 x = eventObjects[i].x + 7;
+ s16 y = eventObjects[i].y + 7;
+ u16 metatile = MapGridGetMetatileIdAt(x, y);
+
+ if (!sRotatingTilePuzzle->isTrickHouse)
+ puzzleTileStart = METATILE_MossdeepGym_YellowArrow_Right;
+ else
+ puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right;
+
+ // Object is on a metatile before the puzzle tile section
+ // UB: Because this is not if (metatile < puzzleTileStart), for the trick house (metatile - puzzleTileStart) below can result in casting a negative value to u8
+ if (metatile < METATILE_MossdeepGym_YellowArrow_Right)
+ continue;
+
+ // Object is on a metatile after the puzzle tile section (never occurs, in both cases the puzzle tiles are last)
+ if ((u8)((metatile - puzzleTileStart) / 8) >= 5)
+ continue;
+
+ // Object is on a metatile in puzzle tile section, but not one of the currently rotating color
+ if ((u8)((metatile - puzzleTileStart) / 8) != puzzleNumber)
+ continue;
+
+ puzzleTileNum = (u8)((metatile - puzzleTileStart) % 8);
+
+ // First 4 puzzle tiles are the colored arrows
+ if (puzzleTileNum < 4)
+ {
+ s8 x = 0;
+ s8 y = 0;
+ const u8 *movementScript;
+
+ switch (puzzleTileNum)
+ {
+ case 0: // Right Arrow
+ movementScript = RotatingTilePuzzle_Movement_ShiftRight;
+ x = 1;
+ break;
+ case 1: // Down Arrow
+ movementScript = RotatingTilePuzzle_Movement_ShiftDown;
+ y = 1;
+ break;
+ case 2: // Left Arrow
+ movementScript = RotatingTilePuzzle_Movement_ShiftLeft;
+ x = -1;
+ break;
+ case 3: // Up Arrow
+ movementScript = RotatingTilePuzzle_Movement_ShiftUp;
+ y = -1;
+ break;
+ default:
+ continue;
+ }
+
+ eventObjects[i].x += x;
+ eventObjects[i].y += y;
+ if (GetEventObjectIdByLocalIdAndMap(eventObjects[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup) != EVENT_OBJECTS_COUNT)
+ {
+ SaveRotatingTileObject(i, puzzleTileNum);
+ localId = eventObjects[i].localId;
+ ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript);
+ }
+ // Never reached in normal gameplay
+ else
+ {
+ TurnUnsavedRotatingTileObject(i, puzzleTileNum);
+ }
+ }
+ }
+
+ return localId;
+}
+
+void TurnRotatingTileObjects(void)
+{
+ u8 i;
+ s32 puzzleTileStart;
+ struct EventObjectTemplate *eventObjects;
+
+ if (sRotatingTilePuzzle == NULL)
+ return;
+
+ if (!sRotatingTilePuzzle->isTrickHouse)
+ puzzleTileStart = METATILE_MossdeepGym_YellowArrow_Right;
+ else
+ puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right;
+
+ eventObjects = gSaveBlock1Ptr->eventObjectTemplates;
+ for (i = 0; i < sRotatingTilePuzzle->numObjects; i++)
+ {
+ s32 rotation;
+ s8 tileDifference;
+ u8 eventObjectId;
+ s16 x = eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].x + 7;
+ s16 y = eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].y + 7;
+ u16 metatile = MapGridGetMetatileIdAt(x, y);
+
+ // NOTE: The following 2 assignments and if else could all be replaced with rotation = ROTATE_COUNTERCLOCKWISE
+ // For an object to be saved in sRotatingTilePuzzle->objects, it must have been on a colored arrow tile
+ // After the first assignment, tileDifference will always be a number [0-3] representing which arrow tile the object is on now (0: right, 1: down, 2: left, 3: up)
+ // prevPuzzleTileNum will similarly be a number [0-3] representing the arrow tile the object just moved from
+ // All the puzzles are oriented counter-clockwise and can only move 1 step at a time, so the difference between the current tile and the previous tile will always either be -1 or 3 (0-1, 1-2, 2-3, 3-0)
+ // Which means tileDifference will always either be -1 or 3 after the below subtraction, and rotation will always be ROTATE_COUNTERCLOCKWISE after the following conditionals
+ tileDifference = (u8)((metatile - puzzleTileStart) % 8);
+ tileDifference -= (sRotatingTilePuzzle->objects[i].prevPuzzleTileNum);
+
+ // Always true, see above
+ if (tileDifference < 0 || tileDifference == 3)
+ {
+ // Always false, see above
+ if (tileDifference == -3)
+ rotation = ROTATE_CLOCKWISE;
+ else
+ rotation = ROTATE_COUNTERCLOCKWISE;
+ }
+ else
+ {
+ if (tileDifference > 0)
+ rotation = ROTATE_CLOCKWISE;
+ else
+ rotation = ROTATE_NONE;
+ }
+
+ eventObjectId = GetEventObjectIdByLocalIdAndMap(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ if (eventObjectId != EVENT_OBJECTS_COUNT)
+ {
+ const u8 *movementScript;
+ u8 direction = gEventObjects[eventObjectId].facingDirection;
+ if (rotation == ROTATE_COUNTERCLOCKWISE)
+ {
+ switch (direction)
+ {
+ case DIR_EAST:
+ movementScript = RotatingTilePuzzle_Movement_FaceUp;
+ eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
+ break;
+ case DIR_SOUTH:
+ movementScript = RotatingTilePuzzle_Movement_FaceRight;
+ eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
+ break;
+ case DIR_WEST:
+ movementScript = RotatingTilePuzzle_Movement_FaceDown;
+ eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
+ break;
+ case DIR_NORTH:
+ movementScript = RotatingTilePuzzle_Movement_FaceLeft;
+ eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
+ break;
+ default:
+ continue;
+ }
+ ScriptMovement_StartObjectMovementScript(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId,
+ gSaveBlock1Ptr->location.mapNum,
+ gSaveBlock1Ptr->location.mapGroup,
+ movementScript);
+ }
+ // Never reached
+ else if (rotation == ROTATE_CLOCKWISE)
+ {
+ switch (direction)
+ {
+ case DIR_EAST:
+ movementScript = RotatingTilePuzzle_Movement_FaceDown;
+ eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
+ break;
+ case DIR_SOUTH:
+ movementScript = RotatingTilePuzzle_Movement_FaceLeft;
+ eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
+ break;
+ case DIR_WEST:
+ movementScript = RotatingTilePuzzle_Movement_FaceUp;
+ eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
+ break;
+ case DIR_NORTH:
+ movementScript = RotatingTilePuzzle_Movement_FaceRight;
+ eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
+ break;
+ default:
+ continue;
+ }
+ ScriptMovement_StartObjectMovementScript(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId,
+ gSaveBlock1Ptr->location.mapNum,
+ gSaveBlock1Ptr->location.mapGroup,
+ movementScript);
+ }
+ }
+ }
+}
+
+static void SaveRotatingTileObject(u8 eventTemplateId, u8 puzzleTileNum)
+{
+ sRotatingTilePuzzle->objects[sRotatingTilePuzzle->numObjects].eventTemplateId = eventTemplateId;
+ sRotatingTilePuzzle->objects[sRotatingTilePuzzle->numObjects].prevPuzzleTileNum = puzzleTileNum;
+ sRotatingTilePuzzle->numObjects++;
+}
+
+// Functionally unused
+static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 puzzleTileNum)
+{
+ s8 tileDifference;
+ s32 rotation;
+ s32 puzzleTileStart;
+ u16 movementType;
+ struct EventObjectTemplate *eventObjects = gSaveBlock1Ptr->eventObjectTemplates;
+ s16 x = eventObjects[eventTemplateId].x + 7;
+ s16 y = eventObjects[eventTemplateId].y + 7;
+ u16 metatile = MapGridGetMetatileIdAt(x, y);
+
+ if (!sRotatingTilePuzzle->isTrickHouse)
+ puzzleTileStart = METATILE_MossdeepGym_YellowArrow_Right;
+ else
+ puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right;
+
+ tileDifference = (u8)((metatile - puzzleTileStart) % 8);
+ tileDifference -= puzzleTileNum;
+
+ if (tileDifference < 0 || tileDifference == 3)
+ rotation = ROTATE_COUNTERCLOCKWISE;
+ else if (tileDifference > 0 || tileDifference == -3)
+ rotation = ROTATE_CLOCKWISE;
+ else
+ rotation = ROTATE_NONE;
+
+ movementType = eventObjects[eventTemplateId].movementType;
+ if (rotation == ROTATE_COUNTERCLOCKWISE)
+ {
+ switch (movementType)
+ {
+ case MOVEMENT_TYPE_FACE_RIGHT:
+ eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
+ break;
+ case MOVEMENT_TYPE_FACE_DOWN:
+ eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
+ break;
+ case MOVEMENT_TYPE_FACE_LEFT:
+ eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
+ break;
+ case MOVEMENT_TYPE_FACE_UP:
+ eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
+ break;
+ default:
+ break;
+ }
+ }
+ else if (rotation == ROTATE_CLOCKWISE)
+ {
+ switch (movementType)
+ {
+ case MOVEMENT_TYPE_FACE_RIGHT:
+ eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN;
+ break;
+ case MOVEMENT_TYPE_FACE_DOWN:
+ eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT;
+ break;
+ case MOVEMENT_TYPE_FACE_LEFT:
+ eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP;
+ break;
+ case MOVEMENT_TYPE_FACE_UP:
+ eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT;
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/src/roulette.c b/src/roulette.c
index 662522aae..26002e773 100644
--- a/src/roulette.c
+++ b/src/roulette.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "coins.h"
#include "decompress.h"
@@ -188,18 +188,18 @@ static void sub_8144A24(struct Sprite *);
static void sub_8144E60(struct Sprite *);
static void sub_8145294(struct Sprite *);
-extern const u8 gUnknown_082A5B89[];
-extern const u8 gUnknown_082A5C13[];
-extern const u8 gUnknown_082A5BD7[];
-extern const u8 gUnknown_082A5BCB[];
-extern const u8 gUnknown_082A5BE0[];
-extern const u8 gUnknown_082A5BEF[];
-extern const u8 gUnknown_082A5C21[];
-extern const u8 gUnknown_082A5C61[];
-extern const u8 gUnknown_082A5C04[];
-extern const u8 gUnknown_082A5B12[];
-extern const u8 gUnknown_082A5B6B[];
-extern const u8 gUnknown_082A5B4E[];
+extern const u8 Roulette_Text_ControlsInstruction[];
+extern const u8 Roulette_Text_KeepPlaying[];
+extern const u8 Roulette_Text_Jackpot[];
+extern const u8 Roulette_Text_ItsAHit[];
+extern const u8 Roulette_Text_NothingDoing[];
+extern const u8 Roulette_Text_YouveWonXCoins[];
+extern const u8 Roulette_Text_BoardWillBeCleared[];
+extern const u8 Roulette_Text_CoinCaseIsFull[];
+extern const u8 Roulette_Text_NoCoinsLeft[];
+extern const u8 Roulette_Text_PlayMinimumWagerIsX[];
+extern const u8 Roulette_Text_SpecialRateTable[];
+extern const u8 Roulette_Text_NotEnoughCoins[];
static const u16 gUnknown_085B5BFC[] = INCBIN_U16("graphics/roulette/85B5BFC.gbapal");
static const u32 gUnknown_085B5DFC[] = INCBIN_U32("graphics/roulette/85B5DFC.bin.lz");
@@ -974,7 +974,7 @@ static void sub_81405CC(void)
sub_81436D0(0);
sub_81424FC(0);
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5B89, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_ControlsInstruction, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
gSpriteCoordOffsetX = -60;
gSpriteCoordOffsetY = 0;
@@ -1045,7 +1045,7 @@ static void sub_8140914(u8 taskId)
{
DisplayYesNoMenuDefaultYes();
DrawStdWindowFrame(gUnknown_0203AB8C, 0);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C13, 0, 1, TEXT_SPEED_FF, 0);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_KeepPlaying, 0, 1, TEXT_SPEED_FF, 0);
CopyWindowToVram(gUnknown_0203AB8C, 3);
DoYesNoFuncWithChoice(taskId, &gUnknown_085B6410);
}
@@ -1213,7 +1213,7 @@ static void sub_8140D6C(u8 r0)
static void sub_8140F6C(u8 r0)
{
- sub_80EECA4();
+ IncrementDailyRouletteUses();
gUnknown_0203AB88->var28 = 0xFF;
if (gUnknown_0203AB88->var19 == 1)
gUnknown_0203AB88->var23 = 1;
@@ -1552,14 +1552,14 @@ static void sub_814189C(u8 taskId)
{
PlayFanfare(MUS_ME_B_BIG);
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5BD7, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_Jackpot, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
}
else
{
PlayFanfare(MUS_ME_B_SMALL);
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5BCB, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_ItsAHit, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
}
break;
@@ -1567,7 +1567,7 @@ static void sub_814189C(u8 taskId)
default:
m4aSongNumStart(SE_HAZURE);
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5BE0, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_NothingDoing, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
break;
}
@@ -1609,7 +1609,7 @@ static void sub_8141984(u8 taskId)
static void sub_8141A18(u8 taskId)
{
ConvertIntToDecimalStringN(gStringVar1, (gUnknown_0203AB88->var19 * gTasks[taskId].data[2]), STR_CONV_MODE_LEFT_ALIGN, 2);
- StringExpandPlaceholders(gStringVar4, gUnknown_082A5BEF);
+ StringExpandPlaceholders(gStringVar4, Roulette_Text_YouveWonXCoins);
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
@@ -1644,14 +1644,14 @@ static void sub_8141B58(u8 taskId)
if (gTasks[taskId].data[6] == 6)
{
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C21, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
sub_8141F7C(taskId, dp01t_12_3_battle_menu, 0xFFFF, 3);
}
else if (gTasks[taskId].data[13] == 9999)
{
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C61, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
sub_8141F7C(taskId, sub_8140914, 0xFFFF, 0x3);
}
@@ -1663,7 +1663,7 @@ static void sub_8141B58(u8 taskId)
else
{
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C04, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_NoCoinsLeft, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
sub_8141F7C(taskId, sub_8140994, 0x3C, 0x3);
}
@@ -1688,7 +1688,7 @@ static void dp01t_12_3_battle_menu(u8 taskId)
if (gTasks[taskId].data[13] == 9999)
{
DrawStdWindowFrame(gUnknown_0203AB8C, FALSE);
- AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C61, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(gUnknown_0203AB8C, 3);
sub_8141F7C(taskId, sub_8140914, 0xFFFF, 3);
}
@@ -3121,7 +3121,7 @@ static void sub_81429F0(u8 taskId)
{
u32 temp = gUnknown_085B6344[(gSpecialVar_0x8004 & 1) + (gSpecialVar_0x8004 >> 7 << 1)];
ConvertIntToDecimalStringN(gStringVar1, temp, STR_CONV_MODE_LEADING_ZEROS, 1);
- StringExpandPlaceholders(gStringVar4, gUnknown_082A5B12);
+ StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX);
DrawStdWindowFrame(0, FALSE);
AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(0, 3);
@@ -3134,19 +3134,19 @@ static void Task_Roulette_0(u8 taskId)
s32 temp;
PrintCoinsString(gTasks[taskId].data[13]);
temp = gUnknown_085B6344[(gSpecialVar_0x8004 & 1) + (gSpecialVar_0x8004 >> 7 << 1)];
- ConvertIntToDecimalStringN(gStringVar1, temp, 2, 1);
+ ConvertIntToDecimalStringN(gStringVar1, temp, STR_CONV_MODE_LEADING_ZEROS, 1);
if (gTasks[taskId].data[13] >= temp)
{
if ((gSpecialVar_0x8004 & 0x80) && (gSpecialVar_0x8004 & 1))
{
DrawStdWindowFrame(0, FALSE);
- AddTextPrinterParameterized(0, 1, gUnknown_082A5B6B, 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 1, Roulette_Text_SpecialRateTable, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(0, 3);
gTasks[taskId].func = sub_81429F0;
}
else
{
- StringExpandPlaceholders(gStringVar4, gUnknown_082A5B12);
+ StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX);
DrawStdWindowFrame(0, FALSE);
AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(0, 3);
@@ -3155,7 +3155,7 @@ static void Task_Roulette_0(u8 taskId)
}
else
{
- StringExpandPlaceholders(gStringVar4, gUnknown_082A5B4E);
+ StringExpandPlaceholders(gStringVar4, Roulette_Text_NotEnoughCoins);
DrawStdWindowFrame(0, FALSE);
AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
CopyWindowToVram(0, 3);
diff --git a/src/safari_zone.c b/src/safari_zone.c
index 703c3d0cd..e8827e124 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -23,10 +23,10 @@ struct PokeblockFeeder
#define NUM_POKEBLOCK_FEEDERS 10
-extern const u8 EventScript_2A4B8A[];
-extern const u8 EventScript_2A4B6F[];
-extern const u8 EventScript_2A4B4C[];
-extern const u8 EventScript_2A4B9B[];
+extern const u8 SafariZone_EventScript_TimesUp[];
+extern const u8 SafariZone_EventScript_RetirePrompt[];
+extern const u8 SafariZone_EventScript_OutOfBallsMidBattle[];
+extern const u8 SafariZone_EventScript_OutOfBalls[];
EWRAM_DATA u8 gNumSafariBalls = 0;
EWRAM_DATA static u16 sSafariZoneStepCounter = 0;
@@ -83,7 +83,7 @@ bool8 SafariZoneTakeStep(void)
sSafariZoneStepCounter--;
if (sSafariZoneStepCounter == 0)
{
- ScriptContext1_SetupScript(EventScript_2A4B8A);
+ ScriptContext1_SetupScript(SafariZone_EventScript_TimesUp);
return TRUE;
}
return FALSE;
@@ -91,7 +91,7 @@ bool8 SafariZoneTakeStep(void)
void SafariZoneRetirePrompt(void)
{
- ScriptContext1_SetupScript(EventScript_2A4B6F);
+ ScriptContext1_SetupScript(SafariZone_EventScript_RetirePrompt);
}
void CB2_EndSafariBattle(void)
@@ -105,14 +105,14 @@ void CB2_EndSafariBattle(void)
}
else if (gBattleOutcome == B_OUTCOME_NO_SAFARI_BALLS)
{
- ScriptContext2_RunNewScript(EventScript_2A4B4C);
+ ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle);
WarpIntoMap();
gFieldCallback = sub_80AF6F0;
SetMainCallback2(CB2_LoadMap);
}
else if (gBattleOutcome == B_OUTCOME_CAUGHT)
{
- ScriptContext1_SetupScript(EventScript_2A4B9B);
+ ScriptContext1_SetupScript(SafariZone_EventScript_OutOfBalls);
ScriptContext1_Stop();
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 4c8895ab8..610547dd8 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -27,19 +27,18 @@
#include "event_obj_lock.h"
#include "menu.h"
#include "money.h"
-#include "mossdeep_gym.h"
#include "mystery_event_script.h"
#include "palette.h"
#include "party_menu.h"
#include "pokemon_storage_system.h"
#include "random.h"
#include "overworld.h"
+#include "rotating_tile_puzzle.h"
#include "rtc.h"
#include "script.h"
#include "script_menu.h"
#include "script_movement.h"
#include "script_pokemon_80F8.h"
-#include "script_pokemon_81B9.h"
#include "shop.h"
#include "slot_machine.h"
#include "sound.h"
@@ -68,7 +67,7 @@ extern const SpecialFunc gSpecials[];
extern const u8 *gStdScripts[];
extern const u8 *gStdScripts_End[];
-void sub_809BDB4(void);
+static void CloseBrailleWindow(void);
// This is defined in here so the optimizer can't see its value when compiling
// script.c.
@@ -607,7 +606,7 @@ bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx)
bool8 ScrCmd_animateflash(struct ScriptContext *ctx)
{
- sub_80B009C(ScriptReadByte(ctx));
+ AnimateFlash(ScriptReadByte(ctx));
ScriptContext1_Stop();
return TRUE;
}
@@ -815,7 +814,7 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx)
return TRUE;
}
-bool8 ScrCmd_warpD7(struct ScriptContext *ctx)
+bool8 ScrCmd_warpmossdeepgym(struct ScriptContext *ctx)
{
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
@@ -824,7 +823,7 @@ bool8 ScrCmd_warpD7(struct ScriptContext *ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- sub_80AF87C();
+ DoMossdeepGymWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
@@ -1528,9 +1527,9 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_cmdDA(struct ScriptContext *ctx)
+bool8 ScrCmd_closebraillemessage(struct ScriptContext *ctx)
{
- sub_809BDB4();
+ CloseBrailleWindow();
return FALSE;
}
@@ -1612,10 +1611,10 @@ bool8 ScrCmd_buffermovename(struct ScriptContext *ctx)
bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = CountDigits(v1);
+ u16 num = VarGet(ScriptReadHalfword(ctx));
+ u8 numDigits = CountDigits(num);
- ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2);
+ ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], num, STR_CONV_MODE_LEFT_ALIGN, numDigits);
return FALSE;
}
@@ -1930,15 +1929,15 @@ bool8 ScrCmd_setberrytree(struct ScriptContext *ctx)
bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx)
{
- u16 value = VarGet(ScriptReadHalfword(ctx));
+ u16 newsKind = VarGet(ScriptReadHalfword(ctx));
- gSpecialVar_Result = GetPriceReduction(value);
+ gSpecialVar_Result = GetPriceReduction(newsKind);
return FALSE;
}
bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx)
{
- sub_81B9404();
+ ChooseContestMon();
ScriptContext1_Stop();
return TRUE;
}
@@ -2149,31 +2148,31 @@ bool8 ScrCmd_takecoins(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_mossdeepgym1(struct ScriptContext *ctx)
+bool8 ScrCmd_moverotatingtileobjects(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
+ u16 puzzleNumber = VarGet(ScriptReadHalfword(ctx));
- sMovingNpcId = MossdeepGym_MoveEvents(v1);
+ sMovingNpcId = MoveRotatingTileObjects(puzzleNumber);
return FALSE;
}
-bool8 ScrCmd_mossdeepgym2(struct ScriptContext *ctx)
+bool8 ScrCmd_turnrotatingtileobjects(struct ScriptContext *ctx)
{
- MossdeepGym_TurnEvents();
+ TurnRotatingTileObjects();
return FALSE;
}
-bool8 ScrCmd_mossdeepgym3(struct ScriptContext *ctx)
+bool8 ScrCmd_initrotatingtilepuzzle(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
+ u16 isTrickHouse = VarGet(ScriptReadHalfword(ctx));
- InitMossdeepGymTiles(v1);
+ InitRotatingTilePuzzle(isTrickHouse);
return FALSE;
}
-bool8 ScrCmd_mossdeepgym4(struct ScriptContext *ctx)
+bool8 ScrCmd_freerotatingtilepuzzle(struct ScriptContext *ctx)
{
- FinishMossdeepGymTiles();
+ FreeRotatingTilePuzzle();
return FALSE;
}
@@ -2218,6 +2217,8 @@ bool8 ScrCmd_checkmonobedience(struct ScriptContext *ctx)
return FALSE;
}
+// TODO: Should be renamed. Name implies general usage, but its specifically for Wonder Card
+// See GetSavedRamScriptIfValid, which is NULL if ValidateReceivedWonderCard returns FALSE
bool8 ScrCmd_gotoram(struct ScriptContext *ctx)
{
const u8* v1 = GetSavedRamScriptIfValid();
@@ -2255,7 +2256,7 @@ bool8 ScrCmd_setmonmetlocation(struct ScriptContext *ctx)
return FALSE;
}
-void sub_809BDB4(void)
+static void CloseBrailleWindow(void)
{
ClearStdWindowAndFrame(gBrailleWindowId, 1);
RemoveWindow(gBrailleWindowId);
@@ -2279,7 +2280,7 @@ bool8 ScrCmd_buffertrainername(struct ScriptContext *ctx)
return FALSE;
}
-void sub_809BE48(u16 npcId)
+void SetMovingNpcId(u16 npcId)
{
sMovingNpcId = npcId;
}
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
index a80fe49ff..16c5d477a 100755
--- a/src/script_pokemon_util_80F87D8.c
+++ b/src/script_pokemon_util_80F87D8.c
@@ -610,7 +610,7 @@ static bool8 CheckPartyMonHasHeldItem(u16 item)
return FALSE;
}
-bool8 sub_80F9370(void)
+bool8 DoesPartyHaveEnigmaBerry(void)
{
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
if (hasItem == TRUE)
@@ -646,7 +646,7 @@ void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
void ChooseHalfPartyForBattle(void)
{
gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
- VarSet(VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_DOUBLE_COLOSSEUM);
+ VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
InitChooseHalfPartyForBattle(0);
}
diff --git a/src/secret_base.c b/src/secret_base.c
index 861a987e2..76dbe7668 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_setup.h"
#include "decoration.h"
@@ -82,7 +82,7 @@ static void ShowRegistryMenuDeleteYesNo(u8 taskId);
static void DeleteRegistry_Yes(u8 taskId);
static void DeleteRegistry_No(u8 taskId);
static void ReturnToMainRegistryMenu(u8 taskId);
-static void GoToSecretBasePCMainMenu(u8 taskId);
+static void GoToSecretBasePCRegisterMenu(u8 taskId);
static u8 GetSecretBaseOwnerType(u8 secretBaseId);
static const struct SecretBaseEntranceMetatiles sSecretBaseEntranceMetatiles[] =
@@ -650,7 +650,7 @@ void WarpIntoSecretBase(const struct MapPosition *position, const struct MapEven
{
SetCurSecretBaseIdFromPosition(position, events);
TrySetCurSecretBaseIndex();
- ScriptContext1_SetupScript(EventScript_275BB7);
+ ScriptContext1_SetupScript(SecretBase_EventScript_Enter);
}
bool8 TrySetCurSecretBase(void)
@@ -894,7 +894,7 @@ static void Task_ShowSecretBaseRegistryMenu(u8 taskId)
}
else
{
- DisplayItemMessageOnField(taskId, gText_NoRegistry, GoToSecretBasePCMainMenu);
+ DisplayItemMessageOnField(taskId, gText_NoRegistry, GoToSecretBasePCRegisterMenu);
}
}
@@ -974,7 +974,7 @@ static void HandleRegistryMenuInput(u8 taskId)
RemoveWindow(data[6]);
schedule_bg_copy_tilemap_to_vram(0);
free(sRegistryMenu);
- GoToSecretBasePCMainMenu(taskId);
+ GoToSecretBasePCRegisterMenu(taskId);
break;
default:
PlaySE(SE_SELECT);
@@ -1074,12 +1074,12 @@ static void ReturnToMainRegistryMenu(u8 taskId)
gTasks[taskId].func = HandleRegistryMenuInput;
}
-static void GoToSecretBasePCMainMenu(u8 taskId)
+static void GoToSecretBasePCRegisterMenu(u8 taskId)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) == 0)
- ScriptContext1_SetupScript(gUnknown_0823B4E8);
+ ScriptContext1_SetupScript(SecretBase_EventScript_PCCancel);
else
- ScriptContext1_SetupScript(gUnknown_0823B5E9);
+ ScriptContext1_SetupScript(SecretBase_EventScript_ShowRegisterMenu);
DestroyTask(taskId);
}
@@ -1094,25 +1094,25 @@ const u8 *GetSecretBaseTrainerLoseText(void)
{
u8 ownerType = GetSecretBaseOwnerType(VarGet(VAR_CURRENT_SECRET_BASE));
if (ownerType == 0)
- return SecretBase_RedCave1_Text_274966;
+ return SecretBase_Text_Trainer0Defeated;
else if (ownerType == 1)
- return SecretBase_RedCave1_Text_274D13;
+ return SecretBase_Text_Trainer1Defeated;
else if (ownerType == 2)
- return SecretBase_RedCave1_Text_274FFE;
+ return SecretBase_Text_Trainer2Defeated;
else if (ownerType == 3)
- return SecretBase_RedCave1_Text_275367;
+ return SecretBase_Text_Trainer3Defeated;
else if (ownerType == 4)
- return SecretBase_RedCave1_Text_2756C7;
+ return SecretBase_Text_Trainer4Defeated;
else if (ownerType == 5)
- return SecretBase_RedCave1_Text_274B24;
+ return SecretBase_Text_Trainer5Defeated;
else if (ownerType == 6)
- return SecretBase_RedCave1_Text_274E75;
+ return SecretBase_Text_Trainer6Defeated;
else if (ownerType == 7)
- return SecretBase_RedCave1_Text_2751E1;
+ return SecretBase_Text_Trainer7Defeated;
else if (ownerType == 8)
- return SecretBase_RedCave1_Text_2754F6;
+ return SecretBase_Text_Trainer8Defeated;
else
- return SecretBase_RedCave1_Text_2758CC;
+ return SecretBase_Text_Trainer9Defeated;
}
void PrepSecretBaseBattleFlags(void)
@@ -1122,12 +1122,12 @@ void PrepSecretBaseBattleFlags(void)
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_SECRET_BASE;
}
-void sub_80EA30C(void)
+void SetBattledOwnerFromResult(void)
{
gSaveBlock1Ptr->secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].battledOwnerToday = gSpecialVar_Result;
}
-void GetSecretBaseOwnerInteractionState(void)
+void GetSecretBaseOwnerAndState(void)
{
u16 secretBaseId;
u8 i;
@@ -1719,7 +1719,7 @@ void ClearJapaneseSecretBases(struct SecretBase *bases)
}
}
-void sub_80EB1AC(void)
+void InitSecretBaseVars(void)
{
VarSet(VAR_SECRET_BASE_STEP_COUNTER, 0);
VarSet(VAR_SECRET_BASE_LAST_ITEM_USED, 0);
diff --git a/src/shop.c b/src/shop.c
index bf15568fb..c9cd1919a 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -17,7 +17,7 @@
#include "item_menu.h"
#include "list_menu.h"
#include "main.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "menu_helpers.h"
#include "money.h"
@@ -38,6 +38,7 @@
#include "constants/metatile_behaviors.h"
#include "constants/rgb.h"
#include "constants/songs.h"
+#include "constants/tv.h"
EWRAM_DATA struct MartInfo gMartInfo = {0};
EWRAM_DATA struct ShopData *gShopDataPtr = NULL;
@@ -560,7 +561,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y)
{
ConvertIntToDecimalStringN(
gStringVar1,
- ItemId_GetPrice(item) >> GetPriceReduction(1),
+ ItemId_GetPrice(item) >> GetPriceReduction(POKENEWS_SLATEPORT),
STR_CONV_MODE_LEFT_ALIGN,
5);
}
@@ -932,7 +933,7 @@ static void Task_BuyMenu(u8 taskId)
if (gMartInfo.martType == MART_TYPE_NORMAL)
{
- gShopDataPtr->totalCost = (ItemId_GetPrice(itemId) >> GetPriceReduction(1));
+ gShopDataPtr->totalCost = (ItemId_GetPrice(itemId) >> GetPriceReduction(POKENEWS_SLATEPORT));
}
else
{
@@ -1011,7 +1012,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopDataPtr->maxQuantity) == TRUE)
{
- gShopDataPtr->totalCost = (ItemId_GetPrice(tItemId) >> GetPriceReduction(1)) * tItemCount;
+ gShopDataPtr->totalCost = (ItemId_GetPrice(tItemId) >> GetPriceReduction(POKENEWS_SLATEPORT)) * tItemCount;
BuyMenuPrintItemQuantityAndPrice(taskId);
}
else
@@ -1147,7 +1148,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
FillWindowPixelBuffer(4, PIXEL_FILL(1));
PrintMoneyAmount(4, 38, 1, gShopDataPtr->totalCost, TEXT_SPEED_FF);
- ConvertIntToDecimalStringN(gStringVar1, tItemCount, 2, 2);
+ ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
BuyMenuPrint(4, gStringVar4, 0, 1, 0, 0);
}
diff --git a/src/slot_machine.c b/src/slot_machine.c
index 003ac3327..742ec6120 100644
--- a/src/slot_machine.c
+++ b/src/slot_machine.c
@@ -14,7 +14,7 @@
#include "util.h"
#include "text.h"
#include "menu.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "gpu_regs.h"
#include "coins.h"
@@ -1060,7 +1060,7 @@ static bool8 SlotAction9(struct Task *task)
ReelTasks_SetUnkTaskData(1);
ReelTasks_SetUnkTaskData(2);
- sub_80EEC80(); // something with daily slot variable
+ IncrementDailySlotsUses();
task->data[0] = 0;
if (sSlotMachine->luckyFlags & LUCKY_BIAS_REELTIME)
diff --git a/src/sprite.c b/src/sprite.c
deleted file mode 100644
index e25eac62e..000000000
--- a/src/sprite.c
+++ /dev/null
@@ -1,1758 +0,0 @@
-#include "global.h"
-#include "sprite.h"
-#include "main.h"
-#include "palette.h"
-
-#define MAX_SPRITE_COPY_REQUESTS 64
-
-#define OAM_MATRIX_COUNT 32
-
-#define SET_SPRITE_TILE_RANGE(index, start, count) \
-{ \
- sSpriteTileRanges[index * 2] = start; \
- (sSpriteTileRanges + 1)[index * 2] = count; \
-}
-
-#define ALLOC_SPRITE_TILE(n) \
-{ \
- sSpriteTileAllocBitmap[(n) / 8] |= (1 << ((n) % 8)); \
-}
-
-#define FREE_SPRITE_TILE(n) \
-{ \
- sSpriteTileAllocBitmap[(n) / 8] &= ~(1 << ((n) % 8)); \
-}
-
-#define SPRITE_TILE_IS_ALLOCATED(n) ((sSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1)
-
-
-struct SpriteCopyRequest
-{
- const u8 *src;
- u8 *dest;
- u16 size;
-};
-
-struct OamDimensions
-{
- s8 width;
- s8 height;
-};
-
-static void UpdateOamCoords(void);
-static void BuildSpritePriorities(void);
-static void SortSprites(void);
-static void CopyMatricesToOamBuffer(void);
-static void AddSpritesToOamBuffer(void);
-static u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority);
-static void ResetOamMatrices(void);
-static void ResetSprite(struct Sprite *sprite);
-static s16 AllocSpriteTiles(u16 tileCount);
-static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images);
-static void ResetAllSprites(void);
-static void BeginAnim(struct Sprite *sprite);
-static void ContinueAnim(struct Sprite *sprite);
-static void AnimCmd_frame(struct Sprite *sprite);
-static void AnimCmd_end(struct Sprite *sprite);
-static void AnimCmd_jump(struct Sprite *sprite);
-static void AnimCmd_loop(struct Sprite *sprite);
-static void BeginAnimLoop(struct Sprite *sprite);
-static void ContinueAnimLoop(struct Sprite *sprite);
-static void JumpToTopOfAnimLoop(struct Sprite *sprite);
-static void BeginAffineAnim(struct Sprite *sprite);
-static void ContinueAffineAnim(struct Sprite *sprite);
-static void AffineAnimDelay(u8 matrixNum, struct Sprite *sprite);
-static void AffineAnimCmd_loop(u8 matrixNum, struct Sprite *sprite);
-static void BeginAffineAnimLoop(u8 matrixNum, struct Sprite *sprite);
-static void ContinueAffineAnimLoop(u8 matrixNum, struct Sprite *sprite);
-static void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite);
-static void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite);
-static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite);
-static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite);
-static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix);
-static u8 GetSpriteMatrixNum(struct Sprite *sprite);
-static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip);
-static void AffineAnimStateRestartAnim(u8 matrixNum);
-static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum);
-static void AffineAnimStateReset(u8 matrixNum);
-static void ApplyAffineAnimFrameAbsolute(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd);
-static void DecrementAnimDelayCounter(struct Sprite *sprite);
-static bool8 DecrementAffineAnimDelayCounter(struct Sprite *sprite, u8 matrixNum);
-static void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd);
-static s16 ConvertScaleParam(s16 scale);
-static void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd);
-static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd);
-static u8 IndexOfSpriteTileTag(u16 tag);
-static void AllocSpriteTileRange(u16 tag, u16 start, u16 count);
-static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset);
-static void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2);
-
-typedef void (*AnimFunc)(struct Sprite *);
-typedef void (*AnimCmdFunc)(struct Sprite *);
-typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *);
-
-#define DUMMY_OAM_DATA \
-{ \
- .y = 160, \
- .affineMode = 0, \
- .objMode = 0, \
- .mosaic = 0, \
- .bpp = 0, \
- .shape = SPRITE_SHAPE(8x8), \
- .x = 304, \
- .matrixNum = 0, \
- .size = SPRITE_SIZE(8x8), \
- .tileNum = 0, \
- .priority = 3, /* lowest priority */ \
- .paletteNum = 0, \
- .affineParam = 0 \
-}
-
-#define ANIM_END 0xFFFF
-#define AFFINE_ANIM_END 0x7FFF
-
-// forward declarations
-const union AnimCmd * const gDummySpriteAnimTable[];
-const union AffineAnimCmd * const gDummySpriteAffineAnimTable[];
-const struct SpriteTemplate gDummySpriteTemplate;
-
-// Unreferenced data. Also unreferenced in R/S.
-static const u8 sUnknownData[24] =
-{
- 0x01, 0x04, 0x10, 0x40,
- 0x02, 0x04, 0x08, 0x20,
- 0x02, 0x04, 0x08, 0x20,
- 0x01, 0x04, 0x10, 0x40,
- 0x02, 0x04, 0x08, 0x20,
- 0x02, 0x04, 0x08, 0x20,
-};
-
-static const u8 sCenterToCornerVecTable[3][4][2] =
-{
- { // square
- { -4, -4 },
- { -8, -8 },
- { -16, -16 },
- { -32, -32 },
- },
- { // horizontal rectangle
- { -8, -4 },
- { -16, -4 },
- { -16, -8 },
- { -32, -16 },
- },
- { // vertical rectangle
- { -4, -8 },
- { -4, -16 },
- { -8, -16 },
- { -16, -32 },
- },
-};
-
-static const struct Sprite sDummySprite =
-{
- .oam = DUMMY_OAM_DATA,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .template = &gDummySpriteTemplate,
- .subspriteTables = NULL,
- .callback = SpriteCallbackDummy,
- .pos1 = { 304, 160 },
- .pos2 = { 0, 0 },
- .centerToCornerVecX = 0,
- .centerToCornerVecY = 0,
- .animNum = 0,
- .animCmdIndex = 0,
- .animDelayCounter = 0,
- .animPaused = 0,
- .affineAnimPaused = 0,
- .animLoopCounter = 0,
- .data = {0, 0, 0, 0, 0, 0, 0},
- .inUse = 0,
- .coordOffsetEnabled = 0,
- .invisible = FALSE,
- .flags_3 = 0,
- .flags_4 = 0,
- .flags_5 = 0,
- .flags_6 = 0,
- .flags_7 = 0,
- .hFlip = 0,
- .vFlip = 0,
- .animBeginning = 0,
- .affineAnimBeginning = 0,
- .animEnded = 0,
- .affineAnimEnded = 0,
- .usingSheet = 0,
- .flags_f = 0,
- .sheetTileStart = 0,
- .subspriteTableNum = 0,
- .subspriteMode = 0,
- .subpriority = 0xFF
-};
-
-const struct OamData gDummyOamData = DUMMY_OAM_DATA;
-
-static const union AnimCmd sDummyAnim = { ANIM_END };
-
-const union AnimCmd * const gDummySpriteAnimTable[] = { &sDummyAnim };
-
-static const union AffineAnimCmd sDummyAffineAnim = { AFFINE_ANIM_END };
-
-const union AffineAnimCmd * const gDummySpriteAffineAnimTable[] = { &sDummyAffineAnim };
-
-const struct SpriteTemplate gDummySpriteTemplate =
-{
- .tileTag = 0,
- .paletteTag = 0xFFFF,
- .oam = &gDummyOamData,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy
-};
-
-static const AnimFunc sAnimFuncs[] =
-{
- ContinueAnim,
- BeginAnim,
-};
-
-static const AnimFunc sAffineAnimFuncs[] =
-{
- ContinueAffineAnim,
- BeginAffineAnim,
-};
-
-static const AnimCmdFunc sAnimCmdFuncs[] =
-{
- AnimCmd_loop,
- AnimCmd_jump,
- AnimCmd_end,
- AnimCmd_frame,
-};
-
-static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] =
-{
- AffineAnimCmd_loop,
- AffineAnimCmd_jump,
- AffineAnimCmd_end,
- AffineAnimCmd_frame,
-};
-
-static const s32 sUnknown_082EC6F4[3][4][2] =
-{
- {
- {8, 8},
- {0x10, 0x10},
- {0x20, 0x20},
- {0x40, 0x40},
- },
- {
- {0x10, 8},
- {0x20, 8},
- {0x20, 0x10},
- {0x40, 0x20},
- },
- {
- {8, 0x10},
- {8, 0x20},
- {0x10, 0x20},
- {0x20, 0x40},
- },
-};
-
-static const struct OamDimensions sOamDimensions[3][4] =
-{
- { // square
- { 8, 8 },
- { 16, 16 },
- { 32, 32 },
- { 64, 64 },
- },
- { // horizontal rectangle
- { 16, 8 },
- { 32, 8 },
- { 32, 16 },
- { 64, 32 },
- },
- { // vertical rectangle
- { 8, 16 },
- { 8, 32 },
- { 16, 32 },
- { 32, 64 },
- },
-};
-
-// iwram bss
-static u16 sSpriteTileRangeTags[MAX_SPRITES];
-static u16 sSpriteTileRanges[MAX_SPRITES * 2];
-static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT];
-static u16 sSpritePaletteTags[16];
-
-// iwram common
-u32 gOamMatrixAllocBitmap;
-u8 gReservedSpritePaletteCount;
-
-EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0};
-EWRAM_DATA static u16 sSpritePriorities[MAX_SPRITES] = {0};
-EWRAM_DATA static u8 sSpriteOrder[MAX_SPRITES] = {0};
-EWRAM_DATA static bool8 sShouldProcessSpriteCopyRequests = 0;
-EWRAM_DATA static u8 sSpriteCopyRequestCount = 0;
-EWRAM_DATA static struct SpriteCopyRequest sSpriteCopyRequests[MAX_SPRITES] = {0};
-EWRAM_DATA u8 gOamLimit = 0;
-EWRAM_DATA u16 gReservedSpriteTileCount = 0;
-EWRAM_DATA static u8 sSpriteTileAllocBitmap[128] = {0};
-EWRAM_DATA s16 gSpriteCoordOffsetX = 0;
-EWRAM_DATA s16 gSpriteCoordOffsetY = 0;
-EWRAM_DATA struct OamMatrix gOamMatrices[OAM_MATRIX_COUNT] = {0};
-EWRAM_DATA bool8 gAffineAnimsDisabled = FALSE;
-
-void ResetSpriteData(void)
-{
- ResetOamRange(0, 128);
- ResetAllSprites();
- ClearSpriteCopyRequests();
- ResetAffineAnimData();
- FreeSpriteTileRanges();
- gOamLimit = 64;
- gReservedSpriteTileCount = 0;
- AllocSpriteTiles(0);
- gSpriteCoordOffsetX = 0;
- gSpriteCoordOffsetY = 0;
-}
-
-void AnimateSprites(void)
-{
- u8 i;
- for (i = 0; i < MAX_SPRITES; i++)
- {
- struct Sprite *sprite = &gSprites[i];
-
- if (sprite->inUse)
- {
- sprite->callback(sprite);
-
- if (sprite->inUse)
- AnimateSprite(sprite);
- }
- }
-}
-
-void BuildOamBuffer(void)
-{
- u8 temp;
- UpdateOamCoords();
- BuildSpritePriorities();
- SortSprites();
- temp = gMain.oamLoadDisabled;
- gMain.oamLoadDisabled = TRUE;
- AddSpritesToOamBuffer();
- CopyMatricesToOamBuffer();
- gMain.oamLoadDisabled = temp;
- sShouldProcessSpriteCopyRequests = TRUE;
-}
-
-void UpdateOamCoords(void)
-{
- u8 i;
- for (i = 0; i < MAX_SPRITES; i++)
- {
- struct Sprite *sprite = &gSprites[i];
- if (sprite->inUse && !sprite->invisible)
- {
- if (sprite->coordOffsetEnabled)
- {
- sprite->oam.x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX;
- sprite->oam.y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY;
- }
- else
- {
- sprite->oam.x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX;
- sprite->oam.y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY;
- }
- }
- }
-}
-
-void BuildSpritePriorities(void)
-{
- u16 i;
- for (i = 0; i < MAX_SPRITES; i++)
- {
- struct Sprite *sprite = &gSprites[i];
- u16 priority = sprite->subpriority | (sprite->oam.priority << 8);
- sSpritePriorities[i] = priority;
- }
-}
-
-void SortSprites(void)
-{
- u8 i;
- for (i = 1; i < MAX_SPRITES; i++)
- {
- u8 j = i;
- struct Sprite *sprite1 = &gSprites[sSpriteOrder[i - 1]];
- struct Sprite *sprite2 = &gSprites[sSpriteOrder[i]];
- u16 sprite1Priority = sSpritePriorities[sSpriteOrder[i - 1]];
- u16 sprite2Priority = sSpritePriorities[sSpriteOrder[i]];
- s16 sprite1Y = sprite1->oam.y;
- s16 sprite2Y = sprite2->oam.y;
-
- if (sprite1Y >= DISPLAY_HEIGHT)
- sprite1Y = sprite1Y - 256;
-
- if (sprite2Y >= DISPLAY_HEIGHT)
- sprite2Y = sprite2Y - 256;
-
- if (sprite1->oam.affineMode == ST_OAM_AFFINE_DOUBLE
- && sprite1->oam.size == 3)
- {
- u32 shape = sprite1->oam.shape;
- if (shape == ST_OAM_SQUARE || shape == 2)
- {
- if (sprite1Y > 128)
- sprite1Y = sprite1Y - 256;
- }
- }
-
- if (sprite2->oam.affineMode == ST_OAM_AFFINE_DOUBLE
- && sprite2->oam.size == 3)
- {
- u32 shape = sprite2->oam.shape;
- if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE)
- {
- if (sprite2Y > 128)
- sprite2Y = sprite2Y - 256;
- }
- }
-
- while (j > 0
- && ((sprite1Priority > sprite2Priority)
- || (sprite1Priority == sprite2Priority && sprite1Y < sprite2Y)))
- {
- u8 temp = sSpriteOrder[j];
- sSpriteOrder[j] = sSpriteOrder[j - 1];
- sSpriteOrder[j - 1] = temp;
-
- // UB: If j equals 1, then j-- makes j equal 0.
- // Then, sSpriteOrder[-1] gets accessed below.
- // Although this doesn't result in a bug in the ROM,
- // the behavior is undefined.
- j--;
-
- sprite1 = &gSprites[sSpriteOrder[j - 1]];
- sprite2 = &gSprites[sSpriteOrder[j]];
- sprite1Priority = sSpritePriorities[sSpriteOrder[j - 1]];
- sprite2Priority = sSpritePriorities[sSpriteOrder[j]];
- sprite1Y = sprite1->oam.y;
- sprite2Y = sprite2->oam.y;
-
- if (sprite1Y >= DISPLAY_HEIGHT)
- sprite1Y = sprite1Y - 256;
-
- if (sprite2Y >= DISPLAY_HEIGHT)
- sprite2Y = sprite2Y - 256;
-
- if (sprite1->oam.affineMode == ST_OAM_AFFINE_DOUBLE
- && sprite1->oam.size == 3)
- {
- u32 shape = sprite1->oam.shape;
- if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE)
- {
- if (sprite1Y > 128)
- sprite1Y = sprite1Y - 256;
- }
- }
-
- if (sprite2->oam.affineMode == ST_OAM_AFFINE_DOUBLE
- && sprite2->oam.size == 3)
- {
- u32 shape = sprite2->oam.shape;
- if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE)
- {
- if (sprite2Y > 128)
- sprite2Y = sprite2Y - 256;
- }
- }
- }
- }
-}
-
-void CopyMatricesToOamBuffer(void)
-{
- u8 i;
- for (i = 0; i < OAM_MATRIX_COUNT; i++)
- {
- u32 base = 4 * i;
- gMain.oamBuffer[base + 0].affineParam = gOamMatrices[i].a;
- gMain.oamBuffer[base + 1].affineParam = gOamMatrices[i].b;
- gMain.oamBuffer[base + 2].affineParam = gOamMatrices[i].c;
- gMain.oamBuffer[base + 3].affineParam = gOamMatrices[i].d;
- }
-}
-
-void AddSpritesToOamBuffer(void)
-{
- u8 i = 0;
- u8 oamIndex = 0;
-
- while (i < MAX_SPRITES)
- {
- struct Sprite *sprite = &gSprites[sSpriteOrder[i]];
- if (sprite->inUse && !sprite->invisible && AddSpriteToOamBuffer(sprite, &oamIndex))
- return;
- i++;
- }
-
- while (oamIndex < gOamLimit)
- {
- gMain.oamBuffer[oamIndex] = gDummyOamData;
- oamIndex++;
- }
-}
-
-u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
-{
- u8 i;
-
- for (i = 0; i < MAX_SPRITES; i++)
- if (!gSprites[i].inUse)
- return CreateSpriteAt(i, template, x, y, subpriority);
-
- return MAX_SPRITES;
-}
-
-u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
-{
- s16 i;
-
- for (i = MAX_SPRITES - 1; i > -1; i--)
- if (!gSprites[i].inUse)
- return CreateSpriteAt(i, template, x, y, subpriority);
-
- return MAX_SPRITES;
-}
-
-u8 CreateInvisibleSprite(void (*callback)(struct Sprite *))
-{
- u8 index = CreateSprite(&gDummySpriteTemplate, 0, 0, 31);
-
- if (index == MAX_SPRITES)
- {
- return MAX_SPRITES;
- }
- else
- {
- gSprites[index].invisible = TRUE;
- gSprites[index].callback = callback;
- return index;
- }
-}
-
-u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
-{
- struct Sprite *sprite = &gSprites[index];
-
- ResetSprite(sprite);
-
- sprite->inUse = TRUE;
- sprite->animBeginning = TRUE;
- sprite->affineAnimBeginning = TRUE;
- sprite->usingSheet = TRUE;
-
- sprite->subpriority = subpriority;
- sprite->oam = *template->oam;
- sprite->anims = template->anims;
- sprite->affineAnims = template->affineAnims;
- sprite->template = template;
- sprite->callback = template->callback;
- sprite->pos1.x = x;
- sprite->pos1.y = y;
-
- CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
-
- if (template->tileTag == 0xFFFF)
- {
- s16 tileNum;
- sprite->images = template->images;
- tileNum = AllocSpriteTiles((u8)(sprite->images->size / TILE_SIZE_4BPP));
- if (tileNum == -1)
- {
- ResetSprite(sprite);
- return MAX_SPRITES;
- }
- sprite->oam.tileNum = tileNum;
- sprite->usingSheet = FALSE;
- sprite->sheetTileStart = 0;
- }
- else
- {
- sprite->sheetTileStart = GetSpriteTileStartByTag(template->tileTag);
- SetSpriteSheetFrameTileNum(sprite);
- }
-
- if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
- InitSpriteAffineAnim(sprite);
-
- if (template->paletteTag != 0xFFFF)
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(template->paletteTag);
-
- return index;
-}
-
-u8 CreateSpriteAndAnimate(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority)
-{
- u8 i;
-
- for (i = 0; i < MAX_SPRITES; i++)
- {
- struct Sprite *sprite = &gSprites[i];
-
- if (!gSprites[i].inUse)
- {
- u8 index = CreateSpriteAt(i, template, x, y, subpriority);
-
- if (index == MAX_SPRITES)
- return MAX_SPRITES;
-
- gSprites[i].callback(sprite);
-
- if (gSprites[i].inUse)
- AnimateSprite(sprite);
-
- return index;
- }
- }
-
- return MAX_SPRITES;
-}
-
-void DestroySprite(struct Sprite *sprite)
-{
- if (sprite->inUse)
- {
- if (!sprite->usingSheet)
- {
- u16 i;
- u16 tileEnd = (sprite->images->size / TILE_SIZE_4BPP) + sprite->oam.tileNum;
- for (i = sprite->oam.tileNum; i < tileEnd; i++)
- FREE_SPRITE_TILE(i);
- }
- ResetSprite(sprite);
- }
-}
-
-void ResetOamRange(u8 a, u8 b)
-{
- u8 i;
-
- for (i = a; i < b; i++)
- {
- struct OamData *oamBuffer = gMain.oamBuffer;
- oamBuffer[i] = *(struct OamData *)&gDummyOamData;
- }
-}
-
-void LoadOam(void)
-{
- if (!gMain.oamLoadDisabled)
- CpuCopy32(gMain.oamBuffer, (void *)OAM, sizeof(gMain.oamBuffer));
-}
-
-void ClearSpriteCopyRequests(void)
-{
- u8 i;
-
- sShouldProcessSpriteCopyRequests = FALSE;
- sSpriteCopyRequestCount = 0;
-
- for (i = 0; i < MAX_SPRITE_COPY_REQUESTS; i++)
- {
- sSpriteCopyRequests[i].src = 0;
- sSpriteCopyRequests[i].dest = 0;
- sSpriteCopyRequests[i].size = 0;
- }
-}
-
-void ResetOamMatrices(void)
-{
- u8 i;
- for (i = 0; i < OAM_MATRIX_COUNT; i++)
- {
- // set to identity matrix
- gOamMatrices[i].a = 0x0100;
- gOamMatrices[i].b = 0x0000;
- gOamMatrices[i].c = 0x0000;
- gOamMatrices[i].d = 0x0100;
- }
-}
-
-void SetOamMatrix(u8 matrixNum, u16 a, u16 b, u16 c, u16 d)
-{
- gOamMatrices[matrixNum].a = a;
- gOamMatrices[matrixNum].b = b;
- gOamMatrices[matrixNum].c = c;
- gOamMatrices[matrixNum].d = d;
-}
-
-void ResetSprite(struct Sprite *sprite)
-{
- *sprite = sDummySprite;
-}
-
-void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode)
-{
- u8 x = sCenterToCornerVecTable[shape][size][0];
- u8 y = sCenterToCornerVecTable[shape][size][1];
-
- if (affineMode & ST_OAM_AFFINE_DOUBLE_MASK)
- {
- x *= 2;
- y *= 2;
- }
-
- sprite->centerToCornerVecX = x;
- sprite->centerToCornerVecY = y;
-}
-
-s16 AllocSpriteTiles(u16 tileCount)
-{
- u16 i;
- s16 start;
- u16 numTilesFound;
-
- if (tileCount == 0)
- {
- // Free all unreserved tiles if the tile count is 0.
- for (i = gReservedSpriteTileCount; i < TOTAL_OBJ_TILE_COUNT; i++)
- FREE_SPRITE_TILE(i);
-
- return 0;
- }
-
- i = gReservedSpriteTileCount;
-
- for (;;)
- {
- while (SPRITE_TILE_IS_ALLOCATED(i))
- {
- i++;
-
- if (i == TOTAL_OBJ_TILE_COUNT)
- return -1;
- }
-
- start = i;
- numTilesFound = 1;
-
- while (numTilesFound != tileCount)
- {
- i++;
-
- if (i == TOTAL_OBJ_TILE_COUNT)
- return -1;
-
- if (!SPRITE_TILE_IS_ALLOCATED(i))
- numTilesFound++;
- else
- break;
- }
-
- if (numTilesFound == tileCount)
- break;
- }
-
- for (i = start; i < tileCount + start; i++)
- ALLOC_SPRITE_TILE(i);
-
- return start;
-}
-
-u8 SpriteTileAllocBitmapOp(u16 bit, u8 op)
-{
- u8 index = bit / 8;
- u8 shift = bit % 8;
- u8 val = bit % 8;
- u8 retVal = 0;
-
- if (op == 0)
- {
- val = ~(1 << val);
- sSpriteTileAllocBitmap[index] &= val;
- }
- else if (op == 1)
- {
- val = (1 << val);
- sSpriteTileAllocBitmap[index] |= val;
- }
- else
- {
- retVal = 1 << shift;
- retVal &= sSpriteTileAllocBitmap[index];
- }
-
- return retVal;
-}
-
-void SpriteCallbackDummy(struct Sprite *sprite)
-{
-}
-
-void ProcessSpriteCopyRequests(void)
-{
- if (sShouldProcessSpriteCopyRequests)
- {
- u8 i = 0;
-
- while (sSpriteCopyRequestCount > 0)
- {
- CpuCopy16(sSpriteCopyRequests[i].src, sSpriteCopyRequests[i].dest, sSpriteCopyRequests[i].size);
- sSpriteCopyRequestCount--;
- i++;
- }
-
- sShouldProcessSpriteCopyRequests = FALSE;
- }
-}
-
-void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images)
-{
- if (sSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS)
- {
- sSpriteCopyRequests[sSpriteCopyRequestCount].src = images[index].data;
- sSpriteCopyRequests[sSpriteCopyRequestCount].dest = (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum;
- sSpriteCopyRequests[sSpriteCopyRequestCount].size = images[index].size;
- sSpriteCopyRequestCount++;
- }
-}
-
-void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size)
-{
- if (sSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS)
- {
- sSpriteCopyRequests[sSpriteCopyRequestCount].src = src;
- sSpriteCopyRequests[sSpriteCopyRequestCount].dest = dest;
- sSpriteCopyRequests[sSpriteCopyRequestCount].size = size;
- sSpriteCopyRequestCount++;
- }
-}
-
-void CopyFromSprites(u8 *dest)
-{
- u32 i;
- u8 *src = (u8 *)gSprites;
- for (i = 0; i < sizeof(struct Sprite) * MAX_SPRITES; i++)
- {
- *dest = *src;
- dest++;
- src++;
- }
-}
-
-void CopyToSprites(u8 *src)
-{
- u32 i;
- u8 *dest = (u8 *)gSprites;
- for (i = 0; i < sizeof(struct Sprite) * MAX_SPRITES; i++)
- {
- *dest = *src;
- src++;
- dest++;
- }
-}
-
-void ResetAllSprites(void)
-{
- u8 i;
-
- for (i = 0; i < MAX_SPRITES; i++)
- {
- ResetSprite(&gSprites[i]);
- sSpriteOrder[i] = i;
- }
-
- ResetSprite(&gSprites[i]);
-}
-
-void FreeSpriteTiles(struct Sprite *sprite)
-{
- if (sprite->template->tileTag != 0xFFFF)
- FreeSpriteTilesByTag(sprite->template->tileTag);
-}
-
-void FreeSpritePalette(struct Sprite *sprite)
-{
- FreeSpritePaletteByTag(sprite->template->paletteTag);
-}
-
-void FreeSpriteOamMatrix(struct Sprite *sprite)
-{
- if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
- {
- FreeOamMatrix(sprite->oam.matrixNum);
- sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
- }
-}
-
-void DestroySpriteAndFreeResources(struct Sprite *sprite)
-{
- FreeSpriteTiles(sprite);
- FreeSpritePalette(sprite);
- FreeSpriteOamMatrix(sprite);
- DestroySprite(sprite);
-}
-
-void AnimateSprite(struct Sprite *sprite)
-{
- sAnimFuncs[sprite->animBeginning](sprite);
-
- if (!gAffineAnimsDisabled)
- sAffineAnimFuncs[sprite->affineAnimBeginning](sprite);
-}
-
-void BeginAnim(struct Sprite *sprite)
-{
- s16 imageValue;
- u8 duration;
- u8 hFlip;
- u8 vFlip;
-
- sprite->animCmdIndex = 0;
- sprite->animEnded = FALSE;
- sprite->animLoopCounter = 0;
- imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
-
- if (imageValue != -1)
- {
- sprite->animBeginning = FALSE;
- duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
- hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip;
- vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip;
-
- if (duration)
- duration--;
-
- sprite->animDelayCounter = duration;
-
- if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK))
- SetSpriteOamFlipBits(sprite, hFlip, vFlip);
-
- if (sprite->usingSheet)
- sprite->oam.tileNum = sprite->sheetTileStart + imageValue;
- else
- RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images);
- }
-}
-
-void ContinueAnim(struct Sprite *sprite)
-{
- if (sprite->animDelayCounter)
- {
- u8 hFlip;
- u8 vFlip;
- DecrementAnimDelayCounter(sprite);
- hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip;
- vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip;
- if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK))
- SetSpriteOamFlipBits(sprite, hFlip, vFlip);
- }
- else if (!sprite->animPaused)
- {
- s16 type;
- s16 funcIndex;
- sprite->animCmdIndex++;
- type = sprite->anims[sprite->animNum][sprite->animCmdIndex].type;
- funcIndex = 3;
- if (type < 0)
- funcIndex = type + 3;
- sAnimCmdFuncs[funcIndex](sprite);
- }
-}
-
-void AnimCmd_frame(struct Sprite *sprite)
-{
- s16 imageValue;
- u8 duration;
- u8 hFlip;
- u8 vFlip;
-
- imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
- duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
- hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip;
- vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip;
-
- if (duration)
- duration--;
-
- sprite->animDelayCounter = duration;
-
- if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK))
- SetSpriteOamFlipBits(sprite, hFlip, vFlip);
-
- if (sprite->usingSheet)
- sprite->oam.tileNum = sprite->sheetTileStart + imageValue;
- else
- RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images);
-}
-
-void AnimCmd_end(struct Sprite *sprite)
-{
- sprite->animCmdIndex--;
- sprite->animEnded = TRUE;
-}
-
-void AnimCmd_jump(struct Sprite *sprite)
-{
- s16 imageValue;
- u8 duration;
- u8 hFlip;
- u8 vFlip;
-
- sprite->animCmdIndex = sprite->anims[sprite->animNum][sprite->animCmdIndex].jump.target;
-
- imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
- duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
- hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip;
- vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip;
-
- if (duration)
- duration--;
-
- sprite->animDelayCounter = duration;
-
- if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK))
- SetSpriteOamFlipBits(sprite, hFlip, vFlip);
-
- if (sprite->usingSheet)
- sprite->oam.tileNum = sprite->sheetTileStart + imageValue;
- else
- RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images);
-}
-
-void AnimCmd_loop(struct Sprite *sprite)
-{
- if (sprite->animLoopCounter)
- ContinueAnimLoop(sprite);
- else
- BeginAnimLoop(sprite);
-}
-
-void BeginAnimLoop(struct Sprite *sprite)
-{
- sprite->animLoopCounter = sprite->anims[sprite->animNum][sprite->animCmdIndex].loop.count;
- JumpToTopOfAnimLoop(sprite);
- ContinueAnim(sprite);
-}
-
-void ContinueAnimLoop(struct Sprite *sprite)
-{
- sprite->animLoopCounter--;
- JumpToTopOfAnimLoop(sprite);
- ContinueAnim(sprite);
-}
-
-void JumpToTopOfAnimLoop(struct Sprite *sprite)
-{
- if (sprite->animLoopCounter)
- {
- sprite->animCmdIndex--;
-
- while (sprite->anims[sprite->animNum][sprite->animCmdIndex - 1].type != -3)
- {
- if (sprite->animCmdIndex == 0)
- break;
- sprite->animCmdIndex--;
- }
-
- sprite->animCmdIndex--;
- }
-}
-
-void BeginAffineAnim(struct Sprite *sprite)
-{
- if ((sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) && sprite->affineAnims[0][0].type != 32767)
- {
- struct AffineAnimFrameCmd frameCmd;
- u8 matrixNum = GetSpriteMatrixNum(sprite);
- AffineAnimStateRestartAnim(matrixNum);
- GetAffineAnimFrame(matrixNum, sprite, &frameCmd);
- sprite->affineAnimBeginning = FALSE;
- sprite->affineAnimEnded = FALSE;
- ApplyAffineAnimFrame(matrixNum, &frameCmd);
- sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration;
- if (sprite->flags_f)
- obj_update_pos2(sprite, sprite->data[6], sprite->data[7]);
- }
-}
-
-void ContinueAffineAnim(struct Sprite *sprite)
-{
- if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
- {
- u8 matrixNum = GetSpriteMatrixNum(sprite);
-
- if (sAffineAnimStates[matrixNum].delayCounter)
- AffineAnimDelay(matrixNum, sprite);
- else if (sprite->affineAnimPaused)
- return;
- else
- {
- s16 type;
- s16 funcIndex;
- sAffineAnimStates[matrixNum].animCmdIndex++;
- type = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].type;
- funcIndex = 3;
- if (type >= 32765)
- funcIndex = type - 32765;
- sAffineAnimCmdFuncs[funcIndex](matrixNum, sprite);
- }
- if (sprite->flags_f)
- obj_update_pos2(sprite, sprite->data[6], sprite->data[7]);
- }
-}
-
-void AffineAnimDelay(u8 matrixNum, struct Sprite *sprite)
-{
- if (!DecrementAffineAnimDelayCounter(sprite, matrixNum))
- {
- struct AffineAnimFrameCmd frameCmd;
- GetAffineAnimFrame(matrixNum, sprite, &frameCmd);
- ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &frameCmd);
- }
-}
-
-void AffineAnimCmd_loop(u8 matrixNum, struct Sprite *sprite)
-{
- if (sAffineAnimStates[matrixNum].loopCounter)
- ContinueAffineAnimLoop(matrixNum, sprite);
- else
- BeginAffineAnimLoop(matrixNum, sprite);
-}
-
-void BeginAffineAnimLoop(u8 matrixNum, struct Sprite *sprite)
-{
- sAffineAnimStates[matrixNum].loopCounter = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].loop.count;
- JumpToTopOfAffineAnimLoop(matrixNum, sprite);
- ContinueAffineAnim(sprite);
-}
-
-void ContinueAffineAnimLoop(u8 matrixNum, struct Sprite *sprite)
-{
- sAffineAnimStates[matrixNum].loopCounter--;
- JumpToTopOfAffineAnimLoop(matrixNum, sprite);
- ContinueAffineAnim(sprite);
-}
-
-void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite)
-{
- if (sAffineAnimStates[matrixNum].loopCounter)
- {
- sAffineAnimStates[matrixNum].animCmdIndex--;
-
- while (sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex - 1].type != 32765)
- {
- if (sAffineAnimStates[matrixNum].animCmdIndex == 0)
- break;
- sAffineAnimStates[matrixNum].animCmdIndex--;
- }
-
- sAffineAnimStates[matrixNum].animCmdIndex--;
- }
-}
-
-void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite)
-{
- struct AffineAnimFrameCmd frameCmd;
- sAffineAnimStates[matrixNum].animCmdIndex = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].jump.target;
- GetAffineAnimFrame(matrixNum, sprite, &frameCmd);
- ApplyAffineAnimFrame(matrixNum, &frameCmd);
- sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration;
-}
-
-void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite)
-{
- struct AffineAnimFrameCmd dummyFrameCmd = {0};
- sprite->affineAnimEnded = TRUE;
- sAffineAnimStates[matrixNum].animCmdIndex--;
- ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &dummyFrameCmd);
-}
-
-void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite)
-{
- struct AffineAnimFrameCmd frameCmd;
- GetAffineAnimFrame(matrixNum, sprite, &frameCmd);
- ApplyAffineAnimFrame(matrixNum, &frameCmd);
- sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration;
-}
-
-void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix)
-{
- gOamMatrices[destMatrixIndex].a = srcMatrix->a;
- gOamMatrices[destMatrixIndex].b = srcMatrix->b;
- gOamMatrices[destMatrixIndex].c = srcMatrix->c;
- gOamMatrices[destMatrixIndex].d = srcMatrix->d;
-}
-
-u8 GetSpriteMatrixNum(struct Sprite *sprite)
-{
- u8 matrixNum = 0;
- if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
- matrixNum = sprite->oam.matrixNum;
- return matrixNum;
-}
-
-void sub_8007E18(struct Sprite* sprite, s16 a2, s16 a3)
-{
- sprite->data[6] = a2;
- sprite->data[7] = a3;
- sprite->flags_f = 1;
-}
-
-s32 sub_8007E28(s32 a0, s32 a1, s32 a2)
-{
- s32 subResult, var1;
-
- subResult = a1 - a0;
- if (subResult < 0)
- var1 = -(subResult) >> 9;
- else
- var1 = -(subResult >> 9);
- return a2 - ((u32)(a2 * a1) / (u32)(a0) + var1);
-}
-
-void obj_update_pos2(struct Sprite *sprite, s32 a1, s32 a2)
-{
- s32 var0, var1, var2;
-
- u32 matrixNum = sprite->oam.matrixNum;
- if (a1 != 0x800)
- {
- var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][0];
- var1 = var0 << 8;
- var2 = (var0 << 16) / gOamMatrices[matrixNum].a;
- sprite->pos2.x = sub_8007E28(var1, var2, a1);
- }
- if (a2 != 0x800)
- {
- var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][1];
- var1 = var0 << 8;
- var2 = (var0 << 16) / gOamMatrices[matrixNum].d;
- sprite->pos2.y = sub_8007E28(var1, var2, a2);
- }
-}
-
-void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip)
-{
- sprite->oam.matrixNum &= 0x7;
- sprite->oam.matrixNum |= (((hFlip ^ sprite->hFlip) & 1) << 3);
- sprite->oam.matrixNum |= (((vFlip ^ sprite->vFlip) & 1) << 4);
-}
-
-void AffineAnimStateRestartAnim(u8 matrixNum)
-{
- sAffineAnimStates[matrixNum].animCmdIndex = 0;
- sAffineAnimStates[matrixNum].delayCounter = 0;
- sAffineAnimStates[matrixNum].loopCounter = 0;
-}
-
-void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum)
-{
- sAffineAnimStates[matrixNum].animNum = animNum;
- sAffineAnimStates[matrixNum].animCmdIndex = 0;
- sAffineAnimStates[matrixNum].delayCounter = 0;
- sAffineAnimStates[matrixNum].loopCounter = 0;
- sAffineAnimStates[matrixNum].xScale = 0x0100;
- sAffineAnimStates[matrixNum].yScale = 0x0100;
- sAffineAnimStates[matrixNum].rotation = 0;
-}
-
-void AffineAnimStateReset(u8 matrixNum)
-{
- sAffineAnimStates[matrixNum].animNum = 0;
- sAffineAnimStates[matrixNum].animCmdIndex = 0;
- sAffineAnimStates[matrixNum].delayCounter = 0;
- sAffineAnimStates[matrixNum].loopCounter = 0;
- sAffineAnimStates[matrixNum].xScale = 0x0100;
- sAffineAnimStates[matrixNum].yScale = 0x0100;
- sAffineAnimStates[matrixNum].rotation = 0;
-}
-
-void ApplyAffineAnimFrameAbsolute(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd)
-{
- sAffineAnimStates[matrixNum].xScale = frameCmd->xScale;
- sAffineAnimStates[matrixNum].yScale = frameCmd->yScale;
- sAffineAnimStates[matrixNum].rotation = frameCmd->rotation << 8;
-}
-
-void DecrementAnimDelayCounter(struct Sprite *sprite)
-{
- if (!sprite->animPaused)
- sprite->animDelayCounter--;
-}
-
-bool8 DecrementAffineAnimDelayCounter(struct Sprite *sprite, u8 matrixNum)
-{
- if (!sprite->affineAnimPaused)
- --sAffineAnimStates[matrixNum].delayCounter;
- return sprite->affineAnimPaused;
-}
-
-void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd)
-{
- struct ObjAffineSrcData srcData;
- struct OamMatrix matrix;
- sAffineAnimStates[matrixNum].xScale += frameCmd->xScale;
- sAffineAnimStates[matrixNum].yScale += frameCmd->yScale;
- sAffineAnimStates[matrixNum].rotation = (sAffineAnimStates[matrixNum].rotation + (frameCmd->rotation << 8)) & ~0xFF;
- srcData.xScale = ConvertScaleParam(sAffineAnimStates[matrixNum].xScale);
- srcData.yScale = ConvertScaleParam(sAffineAnimStates[matrixNum].yScale);
- srcData.rotation = sAffineAnimStates[matrixNum].rotation;
- ObjAffineSet(&srcData, &matrix, 1, 2);
- CopyOamMatrix(matrixNum, &matrix);
-}
-
-s16 ConvertScaleParam(s16 scale)
-{
- s32 val = 0x10000;
- return val / scale;
-}
-
-void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd)
-{
- frameCmd->xScale = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.xScale;
- frameCmd->yScale = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.yScale;
- frameCmd->rotation = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.rotation;
- frameCmd->duration = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.duration;
-}
-
-void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd)
-{
- struct AffineAnimFrameCmd dummyFrameCmd = {0};
-
- if (frameCmd->duration)
- {
- frameCmd->duration--;
- ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, frameCmd);
- }
- else
- {
- ApplyAffineAnimFrameAbsolute(matrixNum, frameCmd);
- ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &dummyFrameCmd);
- }
-}
-
-void StartSpriteAnim(struct Sprite *sprite, u8 animNum)
-{
- sprite->animNum = animNum;
- sprite->animBeginning = TRUE;
- sprite->animEnded = FALSE;
-}
-
-void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum)
-{
- if (sprite->animNum != animNum)
- StartSpriteAnim(sprite, animNum);
-}
-
-void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex)
-{
- u8 temp = sprite->animPaused;
- sprite->animCmdIndex = animCmdIndex - 1;
- sprite->animDelayCounter = 0;
- sprite->animBeginning = FALSE;
- sprite->animEnded = FALSE;
- sprite->animPaused = FALSE;
- ContinueAnim(sprite);
- if (sprite->animDelayCounter)
- sprite->animDelayCounter++;
- sprite->animPaused = temp;
-}
-
-void StartSpriteAffineAnim(struct Sprite *sprite, u8 animNum)
-{
- u8 matrixNum = GetSpriteMatrixNum(sprite);
- AffineAnimStateStartAnim(matrixNum, animNum);
- sprite->affineAnimBeginning = TRUE;
- sprite->affineAnimEnded = FALSE;
-}
-
-void StartSpriteAffineAnimIfDifferent(struct Sprite *sprite, u8 animNum)
-{
- u8 matrixNum = GetSpriteMatrixNum(sprite);
- if (sAffineAnimStates[matrixNum].animNum != animNum)
- StartSpriteAffineAnim(sprite, animNum);
-}
-
-void ChangeSpriteAffineAnim(struct Sprite *sprite, u8 animNum)
-{
- u8 matrixNum = GetSpriteMatrixNum(sprite);
- sAffineAnimStates[matrixNum].animNum = animNum;
- sprite->affineAnimBeginning = TRUE;
- sprite->affineAnimEnded = FALSE;
-}
-
-void ChangeSpriteAffineAnimIfDifferent(struct Sprite *sprite, u8 animNum)
-{
- u8 matrixNum = GetSpriteMatrixNum(sprite);
- if (sAffineAnimStates[matrixNum].animNum != animNum)
- ChangeSpriteAffineAnim(sprite, animNum);
-}
-
-void SetSpriteSheetFrameTileNum(struct Sprite *sprite)
-{
- if (sprite->usingSheet)
- {
- s16 tileOffset = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
- if (tileOffset < 0)
- tileOffset = 0;
- sprite->oam.tileNum = sprite->sheetTileStart + tileOffset;
- }
-}
-
-void ResetAffineAnimData(void)
-{
- u8 i;
-
- gAffineAnimsDisabled = FALSE;
- gOamMatrixAllocBitmap = 0;
-
- ResetOamMatrices();
-
- for (i = 0; i < OAM_MATRIX_COUNT; i++)
- AffineAnimStateReset(i);
-}
-
-u8 AllocOamMatrix(void)
-{
- u8 i = 0;
- u32 bit = 1;
- u32 bitmap = gOamMatrixAllocBitmap;
-
- while (i < OAM_MATRIX_COUNT)
- {
- if (!(bitmap & bit))
- {
- gOamMatrixAllocBitmap |= bit;
- return i;
- }
-
- i++;
- bit <<= 1;
- }
-
- return 0xFF;
-}
-
-void FreeOamMatrix(u8 matrixNum)
-{
- u8 i = 0;
- u32 bit = 1;
-
- while (i < matrixNum)
- {
- i++;
- bit <<= 1;
- }
-
- gOamMatrixAllocBitmap &= ~bit;
- SetOamMatrix(matrixNum, 0x100, 0, 0, 0x100);
-}
-
-void InitSpriteAffineAnim(struct Sprite *sprite)
-{
- u8 matrixNum = AllocOamMatrix();
- if (matrixNum != 0xFF)
- {
- CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
- sprite->oam.matrixNum = matrixNum;
- sprite->affineAnimBeginning = TRUE;
- AffineAnimStateReset(matrixNum);
- }
-}
-
-void SetOamMatrixRotationScaling(u8 matrixNum, s16 xScale, s16 yScale, u16 rotation)
-{
- struct ObjAffineSrcData srcData;
- struct OamMatrix matrix;
- srcData.xScale = ConvertScaleParam(xScale);
- srcData.yScale = ConvertScaleParam(yScale);
- srcData.rotation = rotation;
- ObjAffineSet(&srcData, &matrix, 1, 2);
- CopyOamMatrix(matrixNum, &matrix);
-}
-
-u16 LoadSpriteSheet(const struct SpriteSheet *sheet)
-{
- s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP);
-
- if (tileStart < 0)
- {
- return 0;
- }
- else
- {
- AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP);
- CpuCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size);
- return (u16)tileStart;
- }
-}
-
-void LoadSpriteSheets(const struct SpriteSheet *sheets)
-{
- u8 i;
- for (i = 0; sheets[i].data != NULL; i++)
- LoadSpriteSheet(&sheets[i]);
-}
-
-void FreeSpriteTilesByTag(u16 tag)
-{
- u8 index = IndexOfSpriteTileTag(tag);
- if (index != 0xFF)
- {
- u16 i;
- u16 *rangeStarts;
- u16 *rangeCounts;
- u16 start;
- u16 count;
- rangeStarts = sSpriteTileRanges;
- start = rangeStarts[index * 2];
- rangeCounts = sSpriteTileRanges + 1;
- count = rangeCounts[index * 2];
-
- for (i = start; i < start + count; i++)
- FREE_SPRITE_TILE(i);
-
- sSpriteTileRangeTags[index] = 0xFFFF;
- }
-}
-
-void FreeSpriteTileRanges(void)
-{
- u8 i;
-
- for (i = 0; i < MAX_SPRITES; i++)
- {
- sSpriteTileRangeTags[i] = 0xFFFF;
- SET_SPRITE_TILE_RANGE(i, 0, 0);
- }
-}
-
-u16 GetSpriteTileStartByTag(u16 tag)
-{
- u8 index = IndexOfSpriteTileTag(tag);
- if (index == 0xFF)
- return 0xFFFF;
- return sSpriteTileRanges[index * 2];
-}
-
-u8 IndexOfSpriteTileTag(u16 tag)
-{
- u8 i;
-
- for (i = 0; i < MAX_SPRITES; i++)
- if (sSpriteTileRangeTags[i] == tag)
- return i;
-
- return 0xFF;
-}
-
-u16 GetSpriteTileTagByTileStart(u16 start)
-{
- u8 i;
-
- for (i = 0; i < MAX_SPRITES; i++)
- {
- if (sSpriteTileRangeTags[i] != 0xFFFF && sSpriteTileRanges[i * 2] == start)
- return sSpriteTileRangeTags[i];
- }
-
- return 0xFFFF;
-}
-
-void AllocSpriteTileRange(u16 tag, u16 start, u16 count)
-{
- u8 freeIndex = IndexOfSpriteTileTag(0xFFFF);
- sSpriteTileRangeTags[freeIndex] = tag;
- SET_SPRITE_TILE_RANGE(freeIndex, start, count);
-}
-
-void FreeAllSpritePalettes(void)
-{
- u8 i;
- gReservedSpritePaletteCount = 0;
- for (i = 0; i < 16; i++)
- sSpritePaletteTags[i] = 0xFFFF;
-}
-
-u8 LoadSpritePalette(const struct SpritePalette *palette)
-{
- u8 index = IndexOfSpritePaletteTag(palette->tag);
-
- if (index != 0xFF)
- return index;
-
- index = IndexOfSpritePaletteTag(0xFFFF);
-
- if (index == 0xFF)
- {
- return 0xFF;
- }
- else
- {
- sSpritePaletteTags[index] = palette->tag;
- DoLoadSpritePalette(palette->data, index * 16);
- return index;
- }
-}
-
-void LoadSpritePalettes(const struct SpritePalette *palettes)
-{
- u8 i;
- for (i = 0; palettes[i].data != NULL; i++)
- if (LoadSpritePalette(&palettes[i]) == 0xFF)
- break;
-}
-
-void DoLoadSpritePalette(const u16 *src, u16 paletteOffset)
-{
- LoadPalette(src, paletteOffset + 0x100, 32);
-}
-
-u8 AllocSpritePalette(u16 tag)
-{
- u8 index = IndexOfSpritePaletteTag(0xFFFF);
- if (index == 0xFF)
- {
- return 0xFF;
- }
- else
- {
- sSpritePaletteTags[index] = tag;
- return index;
- }
-}
-
-u8 IndexOfSpritePaletteTag(u16 tag)
-{
- u8 i;
- for (i = gReservedSpritePaletteCount; i < 16; i++)
- if (sSpritePaletteTags[i] == tag)
- return i;
-
- return 0xFF;
-}
-
-u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum)
-{
- return sSpritePaletteTags[paletteNum];
-}
-
-void FreeSpritePaletteByTag(u16 tag)
-{
- u8 index = IndexOfSpritePaletteTag(tag);
- if (index != 0xFF)
- sSpritePaletteTags[index] = 0xFFFF;
-}
-
-void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables)
-{
- sprite->subspriteTables = subspriteTables;
- sprite->subspriteTableNum = 0;
- sprite->subspriteMode = SUBSPRITES_ON;
-}
-
-bool8 AddSpriteToOamBuffer(struct Sprite *sprite, u8 *oamIndex)
-{
- if (*oamIndex >= gOamLimit)
- return 1;
-
- if (!sprite->subspriteTables || sprite->subspriteMode == SUBSPRITES_OFF)
- {
- gMain.oamBuffer[*oamIndex] = sprite->oam;
- (*oamIndex)++;
- return 0;
- }
- else
- {
- return AddSubspritesToOamBuffer(sprite, &gMain.oamBuffer[*oamIndex], oamIndex);
- }
-}
-
-bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u8 *oamIndex)
-{
- const struct SubspriteTable *subspriteTable;
- struct OamData *oam;
-
- if (*oamIndex >= gOamLimit)
- return 1;
-
- subspriteTable = &sprite->subspriteTables[sprite->subspriteTableNum];
- oam = &sprite->oam;
-
- if (!subspriteTable || !subspriteTable->subsprites)
- {
- *destOam = *oam;
- (*oamIndex)++;
- return 0;
- }
- else
- {
- u16 tileNum;
- u16 baseX;
- u16 baseY;
- u8 subspriteCount;
- u8 hFlip;
- u8 vFlip;
- u8 i;
-
- tileNum = oam->tileNum;
- subspriteCount = subspriteTable->subspriteCount;
- hFlip = ((s32)oam->matrixNum >> 3) & 1;
- vFlip = ((s32)oam->matrixNum >> 4) & 1;
- baseX = oam->x - sprite->centerToCornerVecX;
- baseY = oam->y - sprite->centerToCornerVecY;
-
- for (i = 0; i < subspriteCount; i++, (*oamIndex)++)
- {
- u16 x;
- u16 y;
-
- if (*oamIndex >= gOamLimit)
- return 1;
-
- x = subspriteTable->subsprites[i].x;
- y = subspriteTable->subsprites[i].y;
-
- if (hFlip)
- {
- s8 width = sOamDimensions[subspriteTable->subsprites[i].shape][subspriteTable->subsprites[i].size].width;
- s16 right = x;
- right += width;
- x = right;
- x = ~x + 1;
- }
-
- if (vFlip)
- {
- s8 height = sOamDimensions[subspriteTable->subsprites[i].shape][subspriteTable->subsprites[i].size].height;
- s16 bottom = y;
- bottom += height;
- y = bottom;
- y = ~y + 1;
- }
-
- destOam[i] = *oam;
- destOam[i].shape = subspriteTable->subsprites[i].shape;
- destOam[i].size = subspriteTable->subsprites[i].size;
- destOam[i].x = (s16)baseX + (s16)x;
- destOam[i].y = baseY + y;
- destOam[i].tileNum = tileNum + subspriteTable->subsprites[i].tileOffset;
-
- if (sprite->subspriteMode != SUBSPRITES_IGNORE_PRIORITY)
- destOam[i].priority = subspriteTable->subsprites[i].priority;
- }
- }
-
- return 0;
-}
diff --git a/src/start_menu.c b/src/start_menu.c
index fcde176ac..c24497d74 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -570,7 +570,7 @@ static bool8 HandleStartMenuInput(void)
PlaySE(SE_SELECT);
if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback)
{
- if (GetNationalPokedexCount(0) == 0)
+ if (GetNationalPokedexCount(FLAG_GET_SEEN) == 0)
return FALSE;
}
diff --git a/src/string_util.c b/src/string_util.c
deleted file mode 100644
index bce299057..000000000
--- a/src/string_util.c
+++ /dev/null
@@ -1,784 +0,0 @@
-#include "global.h"
-#include "string_util.h"
-#include "text.h"
-
-EWRAM_DATA u8 gStringVar1[0x100] = {0};
-EWRAM_DATA u8 gStringVar2[0x100] = {0};
-EWRAM_DATA u8 gStringVar3[0x100] = {0};
-EWRAM_DATA u8 gStringVar4[0x3E8] = {0};
-EWRAM_DATA static u8 sUnknownStringVar[16] = {0};
-
-static const u8 sDigits[] = __("0123456789ABCDEF");
-
-static const s32 sPowersOfTen[] =
-{
- 1,
- 10,
- 100,
- 1000,
- 10000,
- 100000,
- 1000000,
- 10000000,
- 100000000,
- 1000000000,
-};
-
-extern const u8 gExpandedPlaceholder_Empty[];
-extern const u8 gExpandedPlaceholder_Kun[];
-extern const u8 gExpandedPlaceholder_Chan[];
-extern const u8 gExpandedPlaceholder_Sapphire[];
-extern const u8 gExpandedPlaceholder_Ruby[];
-extern const u8 gExpandedPlaceholder_Emerald[];
-extern const u8 gExpandedPlaceholder_Aqua[];
-extern const u8 gExpandedPlaceholder_Magma[];
-extern const u8 gExpandedPlaceholder_Archie[];
-extern const u8 gExpandedPlaceholder_Maxie[];
-extern const u8 gExpandedPlaceholder_Kyogre[];
-extern const u8 gExpandedPlaceholder_Groudon[];
-extern const u8 gExpandedPlaceholder_Brendan[];
-extern const u8 gExpandedPlaceholder_May[];
-
-u8 *StringCopy10(u8 *dest, const u8 *src)
-{
- u8 i;
- u32 limit = 10;
-
- for (i = 0; i < limit; i++)
- {
- dest[i] = src[i];
-
- if (dest[i] == EOS)
- return &dest[i];
- }
-
- dest[i] = EOS;
- return &dest[i];
-}
-
-u8 *StringGetEnd10(u8 *str)
-{
- u8 i;
- u32 limit = 10;
-
- for (i = 0; i < limit; i++)
- if (str[i] == EOS)
- return &str[i];
-
- str[i] = EOS;
- return &str[i];
-}
-
-u8 *StringCopy7(u8 *dest, const u8 *src)
-{
- s32 i;
- s32 limit = 7;
-
- for (i = 0; i < limit; i++)
- {
- dest[i] = src[i];
-
- if (dest[i] == EOS)
- return &dest[i];
- }
-
- dest[i] = EOS;
- return &dest[i];
-}
-
-u8 *StringCopy(u8 *dest, const u8 *src)
-{
- while (*src != EOS)
- {
- *dest = *src;
- dest++;
- src++;
- }
-
- *dest = EOS;
- return dest;
-}
-
-u8 *StringAppend(u8 *dest, const u8 *src)
-{
- while (*dest != EOS)
- dest++;
-
- return StringCopy(dest, src);
-}
-
-u8 *StringCopyN(u8 *dest, const u8 *src, u8 n)
-{
- u16 i;
-
- for (i = 0; i < n; i++)
- dest[i] = src[i];
-
- return &dest[n];
-}
-
-u8 *StringAppendN(u8 *dest, const u8 *src, u8 n)
-{
- while (*dest != EOS)
- dest++;
-
- return StringCopyN(dest, src, n);
-}
-
-u16 StringLength(const u8 *str)
-{
- u16 length = 0;
-
- while (str[length] != EOS)
- length++;
-
- return length;
-}
-
-s32 StringCompare(const u8 *str1, const u8 *str2)
-{
- while (*str1 == *str2)
- {
- if (*str1 == EOS)
- return 0;
- str1++;
- str2++;
- }
-
- return *str1 - *str2;
-}
-
-s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n)
-{
- while (*str1 == *str2)
- {
- if (*str1 == EOS)
- return 0;
- str1++;
- str2++;
- if (--n == 0)
- return 0;
- }
-
- return *str1 - *str2;
-}
-
-bool8 IsStringLengthAtLeast(const u8 *str, s32 n)
-{
- u8 i;
-
- for (i = 0; i < n; i++)
- if (str[i] && str[i] != EOS)
- return TRUE;
-
- return FALSE;
-}
-
-u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n)
-{
- enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state;
- s32 powerOfTen;
- s32 largestPowerOfTen = sPowersOfTen[n - 1];
-
- state = WAITING_FOR_NONZERO_DIGIT;
-
- if (mode == STR_CONV_MODE_RIGHT_ALIGN)
- state = WRITING_SPACES;
-
- if (mode == STR_CONV_MODE_LEADING_ZEROS)
- state = WRITING_DIGITS;
-
- for (powerOfTen = largestPowerOfTen; powerOfTen > 0; powerOfTen /= 10)
- {
- u8 c;
- u16 digit = value / powerOfTen;
- s32 temp = value - (powerOfTen * digit);
-
- if (state == WRITING_DIGITS)
- {
- u8 *out = dest++;
-
- if (digit <= 9)
- c = sDigits[digit];
- else
- c = CHAR_QUESTION_MARK;
-
- *out = c;
- }
- else if (digit != 0 || powerOfTen == 1)
- {
- u8 *out;
- state = WRITING_DIGITS;
- out = dest++;
-
- if (digit <= 9)
- c = sDigits[digit];
- else
- c = CHAR_QUESTION_MARK;
-
- *out = c;
- }
- else if (state == WRITING_SPACES)
- {
- *dest++ = 0x77;
- }
-
- value = temp;
- }
-
- *dest = EOS;
- return dest;
-}
-
-u8 *ConvertUIntToDecimalStringN(u8 *dest, u32 value, enum StringConvertMode mode, u8 n)
-{
- enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state;
- s32 powerOfTen;
- s32 largestPowerOfTen = sPowersOfTen[n - 1];
-
- state = WAITING_FOR_NONZERO_DIGIT;
-
- if (mode == STR_CONV_MODE_RIGHT_ALIGN)
- state = WRITING_SPACES;
-
- if (mode == STR_CONV_MODE_LEADING_ZEROS)
- state = WRITING_DIGITS;
-
- for (powerOfTen = largestPowerOfTen; powerOfTen > 0; powerOfTen /= 10)
- {
- u8 c;
- u16 digit = value / powerOfTen;
- u32 temp = value - (powerOfTen * digit);
-
- if (state == WRITING_DIGITS)
- {
- u8 *out = dest++;
-
- if (digit <= 9)
- c = sDigits[digit];
- else
- c = CHAR_QUESTION_MARK;
-
- *out = c;
- }
- else if (digit != 0 || powerOfTen == 1)
- {
- u8 *out;
- state = WRITING_DIGITS;
- out = dest++;
-
- if (digit <= 9)
- c = sDigits[digit];
- else
- c = CHAR_QUESTION_MARK;
-
- *out = c;
- }
- else if (state == WRITING_SPACES)
- {
- *dest++ = 0x77;
- }
-
- value = temp;
- }
-
- *dest = EOS;
- return dest;
-}
-
-u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n)
-{
- enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state;
- u8 i;
- s32 powerOfSixteen;
- s32 largestPowerOfSixteen = 1;
-
- for (i = 1; i < n; i++)
- largestPowerOfSixteen *= 16;
-
- state = WAITING_FOR_NONZERO_DIGIT;
-
- if (mode == STR_CONV_MODE_RIGHT_ALIGN)
- state = WRITING_SPACES;
-
- if (mode == STR_CONV_MODE_LEADING_ZEROS)
- state = WRITING_DIGITS;
-
- for (powerOfSixteen = largestPowerOfSixteen; powerOfSixteen > 0; powerOfSixteen /= 16)
- {
- u8 c;
- u32 digit = value / powerOfSixteen;
- s32 temp = value % powerOfSixteen;
-
- if (state == WRITING_DIGITS)
- {
- char *out = dest++;
-
- if (digit <= 0xF)
- c = sDigits[digit];
- else
- c = CHAR_QUESTION_MARK;
-
- *out = c;
- }
- else if (digit != 0 || powerOfSixteen == 1)
- {
- char *out;
- state = WRITING_DIGITS;
- out = dest++;
-
- if (digit <= 0xF)
- c = sDigits[digit];
- else
- c = CHAR_QUESTION_MARK;
-
- *out = c;
- }
- else if (state == WRITING_SPACES)
- {
- *dest++ = 0x77;
- }
-
- value = temp;
- }
-
- *dest = EOS;
- return dest;
-}
-
-u8 *StringExpandPlaceholders(u8 *dest, const u8 *src)
-{
- for (;;)
- {
- u8 c = *src++;
- u8 placeholderId;
- const u8 *expandedString;
-
- switch (c)
- {
- case PLACEHOLDER_BEGIN:
- placeholderId = *src++;
- expandedString = GetExpandedPlaceholder(placeholderId);
- dest = StringExpandPlaceholders(dest, expandedString);
- break;
- case EXT_CTRL_CODE_BEGIN:
- *dest++ = c;
- c = *src++;
- *dest++ = c;
-
- switch (c)
- {
- case 0x07:
- case 0x09:
- case 0x0F:
- case 0x15:
- case 0x16:
- case 0x17:
- case 0x18:
- break;
- case 0x04:
- *dest++ = *src++;
- case 0x0B:
- *dest++ = *src++;
- default:
- *dest++ = *src++;
- }
- break;
- case EOS:
- *dest = EOS;
- return dest;
- case CHAR_PROMPT_SCROLL:
- case CHAR_PROMPT_CLEAR:
- case CHAR_NEWLINE:
- default:
- *dest++ = c;
- }
- }
-}
-
-u8 *StringBraille(u8 *dest, const u8 *src)
-{
- u8 setBrailleFont[] = { EXT_CTRL_CODE_BEGIN, 0x06, 0x06, EOS };
- u8 gotoLine2[] = { CHAR_NEWLINE, EXT_CTRL_CODE_BEGIN, 0x0E, 0x02, EOS };
-
- dest = StringCopy(dest, setBrailleFont);
-
- for (;;)
- {
- u8 c = *src++;
-
- switch (c)
- {
- case EOS:
- *dest = c;
- return dest;
- case CHAR_NEWLINE:
- dest = StringCopy(dest, gotoLine2);
- break;
- default:
- *dest++ = c;
- *dest++ = c + 0x40;
- break;
- }
- }
-}
-
-static const u8 *ExpandPlaceholder_UnknownStringVar(void)
-{
- return sUnknownStringVar;
-}
-
-static const u8 *ExpandPlaceholder_PlayerName(void)
-{
- return gSaveBlock2Ptr->playerName;
-}
-
-static const u8 *ExpandPlaceholder_StringVar1(void)
-{
- return gStringVar1;
-}
-
-static const u8 *ExpandPlaceholder_StringVar2(void)
-{
- return gStringVar2;
-}
-
-static const u8 *ExpandPlaceholder_StringVar3(void)
-{
- return gStringVar3;
-}
-
-static const u8 *ExpandPlaceholder_KunChan(void)
-{
- if (gSaveBlock2Ptr->playerGender == MALE)
- return gExpandedPlaceholder_Kun;
- else
- return gExpandedPlaceholder_Chan;
-}
-
-static const u8 *ExpandPlaceholder_RivalName(void)
-{
- if (gSaveBlock2Ptr->playerGender == MALE)
- return gExpandedPlaceholder_May;
- else
- return gExpandedPlaceholder_Brendan;
-}
-
-static const u8 *ExpandPlaceholder_Version(void)
-{
- return gExpandedPlaceholder_Emerald;
-}
-
-static const u8 *ExpandPlaceholder_Aqua(void)
-{
- return gExpandedPlaceholder_Aqua;
-}
-
-static const u8 *ExpandPlaceholder_Magma(void)
-{
- return gExpandedPlaceholder_Magma;
-}
-
-static const u8 *ExpandPlaceholder_Archie(void)
-{
- return gExpandedPlaceholder_Archie;
-}
-
-static const u8 *ExpandPlaceholder_Maxie(void)
-{
- return gExpandedPlaceholder_Maxie;
-}
-
-static const u8 *ExpandPlaceholder_Kyogre(void)
-{
- return gExpandedPlaceholder_Kyogre;
-}
-
-static const u8 *ExpandPlaceholder_Groudon(void)
-{
- return gExpandedPlaceholder_Groudon;
-}
-
-const u8 *GetExpandedPlaceholder(u32 id)
-{
- typedef const u8 *(*ExpandPlaceholderFunc)(void);
-
- static const ExpandPlaceholderFunc funcs[] =
- {
- [PLACEHOLDER_ID_UNKNOWN] = ExpandPlaceholder_UnknownStringVar,
- [PLACEHOLDER_ID_PLAYER] = ExpandPlaceholder_PlayerName,
- [PLACEHOLDER_ID_STRING_VAR_1] = ExpandPlaceholder_StringVar1,
- [PLACEHOLDER_ID_STRING_VAR_2] = ExpandPlaceholder_StringVar2,
- [PLACEHOLDER_ID_STRING_VAR_3] = ExpandPlaceholder_StringVar3,
- [PLACEHOLDER_ID_KUN] = ExpandPlaceholder_KunChan,
- [PLACEHOLDER_ID_RIVAL] = ExpandPlaceholder_RivalName,
- [PLACEHOLDER_ID_VERSION] = ExpandPlaceholder_Version,
- [PLACEHOLDER_ID_AQUA] = ExpandPlaceholder_Aqua,
- [PLACEHOLDER_ID_MAGMA] = ExpandPlaceholder_Magma,
- [PLACEHOLDER_ID_ARCHIE] = ExpandPlaceholder_Archie,
- [PLACEHOLDER_ID_MAXIE] = ExpandPlaceholder_Maxie,
- [PLACEHOLDER_ID_KYOGRE] = ExpandPlaceholder_Kyogre,
- [PLACEHOLDER_ID_GROUDON] = ExpandPlaceholder_Groudon,
- };
-
- if (id >= ARRAY_COUNT(funcs))
- return gExpandedPlaceholder_Empty;
- else
- return funcs[id]();
-}
-
-u8 *StringFill(u8 *dest, u8 c, u16 n)
-{
- u16 i;
-
- for (i = 0; i < n; i++)
- *dest++ = c;
-
- *dest = EOS;
- return dest;
-}
-
-u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n)
-{
- while (*src != EOS)
- {
- *dest++ = *src++;
-
- if (n)
- n--;
- }
-
- n--;
-
- while (n != (u16)-1)
- {
- *dest++ = c;
- n--;
- }
-
- *dest = EOS;
- return dest;
-}
-
-u8 *StringFillWithTerminator(u8 *dest, u16 n)
-{
- return StringFill(dest, EOS, n);
-}
-
-u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n)
-{
- u32 i;
-
- for (i = n - 1; i != (u32)-1; i--)
- {
- if (*src == EOS)
- {
- break;
- }
- else
- {
- *dest++ = *src++;
- if (*(src - 1) == CHAR_SPECIAL_F9)
- *dest++ = *src++;
- }
- }
-
- *dest = EOS;
- return dest;
-}
-
-u32 StringLength_Multibyte(const u8 *str)
-{
- u32 length = 0;
-
- while (*str != EOS)
- {
- if (*str == CHAR_SPECIAL_F9)
- str++;
- str++;
- length++;
- }
-
- return length;
-}
-
-u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color)
-{
- *dest = EXT_CTRL_CODE_BEGIN;
- dest++;
-
- switch (colorType)
- {
- case 0:
- *dest = 1;
- dest++;
- break;
- case 1:
- *dest = 3;
- dest++;
- break;
- case 2:
- *dest = 2;
- dest++;
- break;
- }
-
- *dest = color;
- dest++;
- *dest = EOS;
- return dest;
-}
-
-bool32 IsStringJapanese(u8 *str)
-{
- while (*str != EOS)
- {
- if (*str <= 0xA0)
- if (*str != CHAR_SPACE)
- return TRUE;
- str++;
- }
-
- return FALSE;
-}
-
-bool32 sub_800924C(u8 *str, s32 n)
-{
- s32 i;
-
- for (i = 0; *str != EOS && i < n; i++)
- {
- if (*str <= 0xA0)
- if (*str != CHAR_SPACE)
- return TRUE;
- str++;
- }
-
- return FALSE;
-}
-
-u8 GetExtCtrlCodeLength(u8 code)
-{
- static const u8 lengths[] =
- {
- 1,
- 2,
- 2,
- 2,
- 4,
- 2,
- 2,
- 1,
- 2,
- 1,
- 1,
- 3,
- 2,
- 2,
- 2,
- 1,
- 3,
- 2,
- 2,
- 2,
- 2,
- 1,
- 1,
- 1,
- 1,
- };
-
- u8 length = 0;
- if (code < ARRAY_COUNT(lengths))
- length = lengths[code];
- return length;
-}
-
-static const u8 *SkipExtCtrlCode(const u8 *s)
-{
- while (*s == EXT_CTRL_CODE_BEGIN)
- {
- s++;
- s += GetExtCtrlCodeLength(*s);
- }
-
- return s;
-}
-
-s32 StringCompareWithoutExtCtrlCodes(const u8 *str1, const u8 *str2)
-{
- s32 retVal = 0;
-
- while (1)
- {
- str1 = SkipExtCtrlCode(str1);
- str2 = SkipExtCtrlCode(str2);
-
- if (*str1 > *str2)
- break;
-
- if (*str1 < *str2)
- {
- retVal = -1;
- if (*str2 == EOS)
- retVal = 1;
- }
-
- if (*str1 == EOS)
- return retVal;
-
- str1++;
- str2++;
- }
-
- retVal = 1;
-
- if (*str1 == EOS)
- retVal = -1;
-
- return retVal;
-}
-
-void ConvertInternationalString(u8 *s, u8 language)
-{
- if (language == LANGUAGE_JAPANESE)
- {
- u8 i;
-
- StripExtCtrlCodes(s);
- i = StringLength(s);
- s[i++] = EXT_CTRL_CODE_BEGIN;
- s[i++] = 22;
- s[i++] = EOS;
-
- i--;
-
- while (i != (u8)-1)
- {
- s[i + 2] = s[i];
- i--;
- }
-
- s[0] = EXT_CTRL_CODE_BEGIN;
- s[1] = 21;
- }
-}
-
-void StripExtCtrlCodes(u8 *str)
-{
- u16 srcIndex = 0;
- u16 destIndex = 0;
- while (str[srcIndex] != EOS)
- {
- if (str[srcIndex] == EXT_CTRL_CODE_BEGIN)
- {
- srcIndex++;
- srcIndex += GetExtCtrlCodeLength(str[srcIndex]);
- }
- else
- {
- str[destIndex++] = str[srcIndex++];
- }
- }
- str[destIndex] = EOS;
-}
diff --git a/src/strings.c b/src/strings.c
index ed702958e..ef63b52c4 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -388,7 +388,7 @@ const u8 gText_PCMailboxFull[] = _("Your PC's MAILBOX is full.{PAUSE_UNTIL_PRESS
const u8 gText_MailMessageWillBeLost[] = _("If the MAIL is removed, the\nmessage will be lost. Okay?");
const u8 gText_RemoveMailBeforeItem[] = _("MAIL must be removed before\nholding an item.{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnWasGivenItem[] = _("{STR_VAR_1} was given the\n{STR_VAR_2} to hold.{PAUSE_UNTIL_PRESS}");
-const u8 gText_SwitchPkmnItem[] = _("{STR_VAR_1} is already holding\none {STR_VAR_2}.\pWould you like to switch the\ntwo items?");
+const u8 gText_PkmnAlreadyHoldingItemSwitch[] = _("{STR_VAR_1} is already holding\none {STR_VAR_2}.\pWould you like to switch the\ntwo items?");
const u8 gText_PkmnNotHolding[] = _("{STR_VAR_1} isn't holding\nanything.{PAUSE_UNTIL_PRESS}");
const u8 gText_ReceivedItemFromPkmn[] = _("Received the {STR_VAR_2}\nfrom {STR_VAR_1}.{PAUSE_UNTIL_PRESS}");
const u8 gText_MailTakenFromPkmn[] = _("MAIL was taken from the\nPOKéMON.{PAUSE_UNTIL_PRESS}");
@@ -471,7 +471,7 @@ const u8 gText_CancelChallenge[] = _("Cancel the challenge?");
const u8 gText_EscapeFromHere[] = _("Want to escape from here and return\nto {STR_VAR_1}?");
const u8 gText_ReturnToHealingSpot[] = _("Want to return to the healing spot\nused last in {STR_VAR_1}?");
const u8 gText_PauseUntilPress[] = _("{PAUSE_UNTIL_PRESS}");
-const u8 gJPText_PutVar1IntoSpinner[] = _("{STR_VAR_1}を ぐるぐるこうかんに\nだして よろしいですか?");
+const u8 gJPText_AreYouSureYouWantToSpinTradeMon[] = _("{STR_VAR_1}を ぐるぐるこうかんに\nだして よろしいですか?");
ALIGNED(4) const u8 gText_OnlyPkmnForBattle[] = _("That's your only\nPOKéMON for battle.");
ALIGNED(4) const u8 gText_PkmnCantBeTradedNow[] = _("That POKéMON can't be traded\nnow.");
ALIGNED(4) const u8 gText_EggCantBeTradedNow[] = _("An EGG can't be traded now.");
diff --git a/src/text.c b/src/text.c
deleted file mode 100644
index 7e4fa7104..000000000
--- a/src/text.c
+++ /dev/null
@@ -1,2540 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "main.h"
-#include "m4a.h"
-#include "palette.h"
-#include "sound.h"
-#include "constants/songs.h"
-#include "string_util.h"
-#include "window.h"
-#include "text.h"
-#include "blit.h"
-#include "menu.h"
-#include "dynamic_placeholder_text_util.h"
-
-EWRAM_DATA struct TextPrinter gTempTextPrinter = {0};
-EWRAM_DATA struct TextPrinter gTextPrinters[NUM_TEXT_PRINTERS] = {0};
-
-static u16 gFontHalfRowLookupTable[0x51];
-static u16 gLastTextBgColor;
-static u16 gLastTextFgColor;
-static u16 gLastTextShadowColor;
-
-const struct FontInfo *gFonts;
-u8 gUnknown_03002F84;
-struct Struct_03002F90 gUnknown_03002F90;
-TextFlags gTextFlags;
-
-const u8 gFontHalfRowOffsets[] =
-{
- 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00,
- 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09,
- 0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12,
- 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00,
- 0x1B, 0x1C, 0x1D, 0x1B, 0x1E, 0x1F, 0x20, 0x1E, 0x21, 0x22, 0x23, 0x21, 0x1B, 0x1C, 0x1D, 0x1B,
- 0x24, 0x25, 0x26, 0x24, 0x27, 0x28, 0x29, 0x27, 0x2A, 0x2B, 0x2C, 0x2A, 0x24, 0x25, 0x26, 0x24,
- 0x2D, 0x2E, 0x2F, 0x2D, 0x30, 0x31, 0x32, 0x30, 0x33, 0x34, 0x35, 0x33, 0x2D, 0x2E, 0x2F, 0x2D,
- 0x1B, 0x1C, 0x1D, 0x1B, 0x1E, 0x1F, 0x20, 0x1E, 0x21, 0x22, 0x23, 0x21, 0x1B, 0x1C, 0x1D, 0x1B,
- 0x36, 0x37, 0x38, 0x36, 0x39, 0x3A, 0x3B, 0x39, 0x3C, 0x3D, 0x3E, 0x3C, 0x36, 0x37, 0x38, 0x36,
- 0x3F, 0x40, 0x41, 0x3F, 0x42, 0x43, 0x44, 0x42, 0x45, 0x46, 0x47, 0x45, 0x3F, 0x40, 0x41, 0x3F,
- 0x48, 0x49, 0x4A, 0x48, 0x4B, 0x4C, 0x4D, 0x4B, 0x4E, 0x4F, 0x50, 0x4E, 0x48, 0x49, 0x4A, 0x48,
- 0x36, 0x37, 0x38, 0x36, 0x39, 0x3A, 0x3B, 0x39, 0x3C, 0x3D, 0x3E, 0x3C, 0x36, 0x37, 0x38, 0x36,
- 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00,
- 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09,
- 0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12,
- 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00
-};
-
-const u8 gDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow.4bpp");
-const u8 gDarkDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_RS.4bpp");
-const u8 gUnusedFRLGBlankedDownArrow[] = INCBIN_U8("data/graphics/fonts/unused_frlg_blanked_down_arrow.4bpp");
-const u8 gUnusedFRLGDownArrow[] = INCBIN_U8("data/graphics/fonts/unused_frlg_down_arrow.4bpp");
-const u8 gDownArrowYCoords[] = { 0x0, 0x1, 0x2, 0x1 };
-const u8 gWindowVerticalScrollSpeeds[] = { 0x1, 0x2, 0x4, 0x0 };
-
-const struct GlyphWidthFunc gGlyphWidthFuncs[] =
-{
- { 0x0, GetGlyphWidthFont0 },
- { 0x1, GetGlyphWidthFont1 },
- { 0x2, GetGlyphWidthFont2 },
- { 0x3, GetGlyphWidthFont2 },
- { 0x4, GetGlyphWidthFont2 },
- { 0x5, GetGlyphWidthFont2 },
- { 0x6, GetGlyphWidthFont6 },
- { 0x7, GetGlyphWidthFont7 },
- { 0x8, GetGlyphWidthFont8 }
-};
-
-const struct KeypadIcon gKeypadIcons[] =
-{
- { 0x0, 0x8, 0xC },
- { 0x1, 0x8, 0xC },
- { 0x2, 0x10, 0xC },
- { 0x4, 0x10, 0xC },
- { 0x6, 0x18, 0xC },
- { 0x9, 0x18, 0xC },
- { 0xC, 0x8, 0xC },
- { 0xD, 0x8, 0xC },
- { 0xE, 0x8, 0xC },
- { 0xF, 0x8, 0xC },
- { 0x20, 0x8, 0xC },
- { 0x21, 0x8, 0xC },
- { 0x22, 0x8, 0xC }
-};
-
-const u8 gKeypadIconTiles[] = INCBIN_U8("data/graphics/fonts/keypad_icons.4bpp");
-
-const struct FontInfo gFontInfos[] =
-{
- { Font0Func, 0x5, 0xC, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
- { Font1Func, 0x6, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
- { Font2Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
- { Font3Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
- { Font4Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
- { Font5Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
- { Font6Func, 0x8, 0x10, 0x0, 0x8, 0x0, 0x2, 0x1, 0x3 },
- { Font7Func, 0x5, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
- { Font8Func, 0x5, 0x8, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 },
- { NULL, 0x8, 0x8, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF }
-};
-
-const u8 gMenuCursorDimensions[][2] =
-{
- { 0x8, 0xC },
- { 0x8, 0xF },
- { 0x8, 0xE },
- { 0x8, 0xE },
- { 0x8, 0xE },
- { 0x8, 0xE },
- { 0x8, 0x10 },
- { 0x8, 0xF },
- { 0x8, 0x8 },
- { 0x0, 0x0 }
-};
-
-const u16 gFont9JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font9.hwjpnfont");
-
-extern const u16 gFont8LatinGlyphs[];
-extern const u8 gFont8LatinGlyphWidths[];
-extern const u16 gFont0LatinGlyphs[];
-extern const u8 gFont0LatinGlyphWidths[];
-extern const u16 gFont7LatinGlyphs[];
-extern const u8 gFont7LatinGlyphWidths[];
-extern const u16 gFont2LatinGlyphs[];
-extern const u8 gFont2LatinGlyphWidths[];
-extern const u16 gFont1LatinGlyphs[];
-extern const u8 gFont1LatinGlyphWidths[];
-extern const u16 gFont0JapaneseGlyphs[];
-extern const u16 gFont1JapaneseGlyphs[];
-extern const u16 gFont2JapaneseGlyphs[];
-extern const u8 gFont2JapaneseGlyphWidths[];
-
-void SetFontsPointer(const struct FontInfo *fonts)
-{
- gFonts = fonts;
-}
-
-void DeactivateAllTextPrinters(void)
-{
- int printer;
- for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer)
- gTextPrinters[printer].active = 0;
-}
-
-u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
-{
- struct TextPrinterTemplate printerTemplate;
-
- printerTemplate.currentChar = str;
- printerTemplate.windowId = windowId;
- printerTemplate.fontId = fontId;
- printerTemplate.x = x;
- printerTemplate.y = y;
- printerTemplate.currentX = x;
- printerTemplate.currentY = y;
- printerTemplate.letterSpacing = gFonts[fontId].letterSpacing;
- printerTemplate.lineSpacing = gFonts[fontId].lineSpacing;
- printerTemplate.unk = gFonts[fontId].unk;
- printerTemplate.fgColor = gFonts[fontId].fgColor;
- printerTemplate.bgColor = gFonts[fontId].bgColor;
- printerTemplate.shadowColor = gFonts[fontId].shadowColor;
- return AddTextPrinter(&printerTemplate, speed, callback);
-}
-
-bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16))
-{
- int i;
- u16 j;
- u8 *ptr;
-
- if (!gFonts)
- return FALSE;
-
- gTempTextPrinter.active = 1;
- gTempTextPrinter.state = 0;
- gTempTextPrinter.textSpeed = speed;
- gTempTextPrinter.delayCounter = 0;
- gTempTextPrinter.scrollDistance = 0;
-
- for (i = 0; i < 7; i++)
- {
- gTempTextPrinter.subUnion.fields[i] = 0;
- }
-
- gTempTextPrinter.printerTemplate = *printerTemplate;
- gTempTextPrinter.callback = callback;
- gTempTextPrinter.minLetterSpacing = 0;
- gTempTextPrinter.japanese = 0;
-
- GenerateFontHalfRowLookupTable(printerTemplate->fgColor, printerTemplate->bgColor, printerTemplate->shadowColor);
- if (speed != TEXT_SPEED_FF && speed != 0x0)
- {
- --gTempTextPrinter.textSpeed;
- gTextPrinters[printerTemplate->windowId] = gTempTextPrinter;
- }
- else
- {
- gTempTextPrinter.textSpeed = 0;
- for (j = 0; j < 0x400; ++j)
- {
- if (RenderFont(&gTempTextPrinter) == 1)
- break;
- }
-
- if (speed != TEXT_SPEED_FF)
- CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2);
- gTextPrinters[printerTemplate->windowId].active = 0;
- }
- gUnknown_03002F84 = 0;
- return TRUE;
-}
-
-void RunTextPrinters(void)
-{
- int i;
-
- if (gUnknown_03002F84 == 0)
- {
- for (i = 0; i < 0x20; ++i)
- {
- if (gTextPrinters[i].active)
- {
- u16 temp = RenderFont(&gTextPrinters[i]);
- switch (temp)
- {
- case 0:
- CopyWindowToVram(gTextPrinters[i].printerTemplate.windowId, 2);
- case 3:
- if (gTextPrinters[i].callback != 0)
- gTextPrinters[i].callback(&gTextPrinters[i].printerTemplate, temp);
- break;
- case 1:
- gTextPrinters[i].active = 0;
- break;
- }
- }
- }
- }
-}
-
-bool16 IsTextPrinterActive(u8 id)
-{
- return gTextPrinters[id].active;
-}
-
-u32 RenderFont(struct TextPrinter *textPrinter)
-{
- u32 ret;
- while (TRUE)
- {
- ret = gFonts[textPrinter->printerTemplate.fontId].fontFunction(textPrinter);
- if (ret != 2)
- return ret;
- }
-}
-
-void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
-{
- u32 fg12, bg12, shadow12;
- u32 temp;
-
- u16 *current = gFontHalfRowLookupTable;
-
- gLastTextBgColor = bgColor;
- gLastTextFgColor = fgColor;
- gLastTextShadowColor = shadowColor;
-
- bg12 = bgColor << 12;
- fg12 = fgColor << 12;
- shadow12 = shadowColor << 12;
-
- temp = (bgColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (bgColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (bgColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (fgColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (bgColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (shadowColor << 4) | bgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (bgColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (bgColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (bgColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (fgColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (bgColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (shadowColor << 4) | fgColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (bgColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (bgColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (bgColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (fgColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (bgColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (fgColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-
- temp = (shadowColor << 8) | (shadowColor << 4) | shadowColor;
- *(current++) = (bg12) | temp;
- *(current++) = (fg12) | temp;
- *(current++) = (shadow12) | temp;
-}
-
-void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
-{
- *bgColor = gLastTextBgColor;
- *fgColor = gLastTextFgColor;
- *shadowColor = gLastTextShadowColor;
-}
-
-void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor)
-{
- GenerateFontHalfRowLookupTable(*fgColor, *bgColor, *shadowColor);
-}
-
-void DecompressGlyphTile(const void *src_, void *dest_)
-{
- u32 temp;
- const u16 *src = src_;
- u32 *dest = dest_;
-
- temp = *(src++);
- *(dest)++ = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
-
- temp = *(src++);
- *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
-
- temp = *(src++);
- *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
-
- temp = *(src++);
- *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
-
- temp = *(src++);
- *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
-
- temp = *(src++);
- *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
-
- temp = *(src++);
- *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
-
- temp = *(src++);
- *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]);
-}
-
-u8 GetLastTextColor(u8 colorType)
-{
- switch (colorType)
- {
- case 0:
- return gLastTextFgColor;
- case 2:
- return gLastTextBgColor;
- case 1:
- return gLastTextShadowColor;
- default:
- return 0;
- }
-}
-
-#ifdef NONMATCHING
-
-#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \
-{ \
- u32 i, j, *ptr, toY, fromX, toX, r5, toOrr, bits; \
- u8 *dst; \
- \
- j = fromX_; \
- i = fromY_; \
- ptr = unk; \
- toX = toX_; \
- toY = toY_; \
- fromX = fromX_; \
- \
- for (; i < toY; i++) \
- { \
- r5 = *(ptr++); \
- for (j = fromX; j < toX; j++) \
- { \
- toOrr = r5 & 0xF; \
- if (toOrr) \
- { \
- dst = windowTiles + ((j / 8) * 32) + ((j & 7) / 2) + ((i / 8) * widthOffset) + ((i & 7) * 4); \
- bits = ((j & 1) << 2); \
- *dst = ((toOrr << bits) | (*dst & (0xF0 >> bits))); \
- } \
- r5 >>= 4; \
- } \
- } \
-}
-
-void CopyGlyphToWindow(struct TextPrinter *textPrinter)
-{
- struct Window *win;
- struct WindowTemplate *winTempl;
- struct Struct_03002F90 *unkStruct;
- u32 currX, widthOffset, currY;
- s32 r4, r0;
- u8 *windowTiles;
-
- win = &gWindows[textPrinter->printerTemplate.windowId];
- winTempl = &win->window;
-
- r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX;
- if (r4 > gUnknown_03002F90.unk80)
- r4 = gUnknown_03002F90.unk80;
-
- r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY;
- if (r0 > gUnknown_03002F90.unk81)
- r0 = gUnknown_03002F90.unk81;
-
- currX = textPrinter->printerTemplate.currentX;
- currY = textPrinter->printerTemplate.currentY;
- unkStruct = &gUnknown_03002F90;
- windowTiles = win->tileData;
- widthOffset = winTempl->width * 32;
-
- if (r4 <= 8)
- {
- if (r0 <= 8)
- {
- GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0);
- }
- else
- {
- u32 temp;
- GLYPH_COPY(currY, currY + 8, currX, currX + r4, unkStruct->unk0);
-
- temp = currY + 8;
- GLYPH_COPY(temp, (temp - 8) + r0, currX, currX + r4, unkStruct->unk40);
- }
- }
- else
- {
- if (r0 <= 8)
- {
- u32 temp;
- GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0);
-
- temp = currX + 8;
- GLYPH_COPY(currY, currY + r0, temp, (temp - 8) + r4, unkStruct->unk20);
- }
- else
- {
- u32 temp;
- GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0);
-
- temp = currX + 8;
- GLYPH_COPY(currY, currY + 8, temp, temp - 8 + r4, unkStruct->unk20);
-
- temp = currY + 8;
- GLYPH_COPY(temp, temp - 8 + r0, currX, currX + 8, unkStruct->unk40);
- {
- u32 tempX, tempY;
- tempX = currX + 8;
- tempY = currY + 8;
- GLYPH_COPY(tempY, tempY - 8 + r0, tempX, tempX - 8 + r4, unkStruct->unk60);
- }
- }
- }
-}
-#else
-NAKED
-void CopyGlyphToWindow(struct TextPrinter *x)
-{
- asm("push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, #0x8C\n\
- add r3, r0, #0\n\
- ldrb r1, [r3, #0x4]\n\
- lsl r0, r1, #1\n\
- add r0, r1\n\
- lsl r0, #2\n\
- ldr r1, =gWindows\n\
- add r1, r0, r1\n\
- add r2, r1, #0\n\
- ldrb r7, [r1, #0x3]\n\
- lsl r0, r7, #3\n\
- ldrb r6, [r3, #0x8]\n\
- sub r4, r0, r6\n\
- ldr r5, =gUnknown_03002F90\n\
- add r0, r5, #0\n\
- add r0, #0x80\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- ble _08004DD2\n\
- add r4, r0, #0\n\
-_08004DD2:\n\
- ldrb r0, [r1, #0x4]\n\
- lsl r0, #3\n\
- ldrb r3, [r3, #0x9]\n\
- sub r0, r3\n\
- add r1, r5, #0\n\
- add r1, #0x81\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- ble _08004DE6\n\
- add r0, r1, #0\n\
-_08004DE6:\n\
- str r6, [sp]\n\
- mov r8, r3\n\
- add r3, r5, #0\n\
- ldr r2, [r2, #0x8]\n\
- mov r9, r2\n\
- lsl r1, r7, #5\n\
- str r1, [sp, #0x4]\n\
- cmp r4, #0x8\n\
- ble _08004DFA\n\
- b _08004F94\n\
-_08004DFA:\n\
- cmp r0, #0x8\n\
- bgt _08004E84\n\
- mov r1, r8\n\
- str r3, [sp, #0x8]\n\
- add r2, r6, #0\n\
- add r2, r4\n\
- mov r8, r2\n\
- add r0, r1, r0\n\
- str r0, [sp, #0xC]\n\
- str r6, [sp, #0x10]\n\
- cmp r1, r0\n\
- bcc _08004E14\n\
- b _080052AA\n\
-_08004E14:\n\
- ldr r3, [sp, #0x8]\n\
- ldm r3!, {r5}\n\
- str r3, [sp, #0x8]\n\
- ldr r4, [sp, #0x10]\n\
- add r0, r1, #0x1\n\
- mov r10, r0\n\
- cmp r4, r8\n\
- bcs _08004E72\n\
- mov r2, #0x7\n\
- mov r12, r2\n\
- lsr r0, r1, #3\n\
- ldr r2, [sp, #0x4]\n\
- add r3, r0, #0\n\
- mul r3, r2\n\
- add r7, r3, #0\n\
- mov r3, r12\n\
- and r1, r3\n\
- lsl r6, r1, #2\n\
-_08004E38:\n\
- add r3, r5, #0\n\
- mov r0, #0xF\n\
- and r3, r0\n\
- cmp r3, #0\n\
- beq _08004E6A\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, r12\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_08004E6A:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r8\n\
- bcc _08004E38\n\
-_08004E72:\n\
- mov r1, r10\n\
- ldr r2, [sp, #0xC]\n\
- cmp r1, r2\n\
- bcc _08004E14\n\
- b _080052AA\n\
- .pool\n\
-_08004E84:\n\
- mov r1, r8\n\
- str r3, [sp, #0x14]\n\
- ldr r3, [sp]\n\
- add r3, r4\n\
- mov r12, r3\n\
- add r2, r1, #0\n\
- add r2, #0x8\n\
- str r2, [sp, #0x18]\n\
- ldr r3, [sp]\n\
- str r3, [sp, #0x1C]\n\
- mov r2, r12\n\
- str r2, [sp, #0x74]\n\
- ldr r3, [sp, #0x18]\n\
- str r3, [sp, #0x88]\n\
- sub r0, #0x8\n\
- str r0, [sp, #0x80]\n\
- cmp r1, r3\n\
- bcs _08004F0E\n\
-_08004EA8:\n\
- ldr r0, [sp, #0x14]\n\
- ldm r0!, {r5}\n\
- str r0, [sp, #0x14]\n\
- ldr r4, [sp, #0x1C]\n\
- add r2, r1, #0x1\n\
- mov r8, r2\n\
- cmp r4, r12\n\
- bcs _08004F06\n\
- mov r3, #0x7\n\
- mov r10, r3\n\
- lsr r0, r1, #3\n\
- ldr r3, [sp, #0x4]\n\
- add r2, r0, #0\n\
- mul r2, r3\n\
- add r7, r2, #0\n\
- mov r0, r10\n\
- and r1, r0\n\
- lsl r6, r1, #2\n\
-_08004ECC:\n\
- add r3, r5, #0\n\
- mov r1, #0xF\n\
- and r3, r1\n\
- cmp r3, #0\n\
- beq _08004EFE\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, r10\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_08004EFE:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r12\n\
- bcc _08004ECC\n\
-_08004F06:\n\
- mov r1, r8\n\
- ldr r2, [sp, #0x18]\n\
- cmp r1, r2\n\
- bcc _08004EA8\n\
-_08004F0E:\n\
- ldr r1, [sp, #0x88]\n\
- ldr r3, =gUnknown_03002F90 + 0x40\n\
- str r3, [sp, #0x20]\n\
- ldr r0, [sp, #0x74]\n\
- mov r8, r0\n\
- ldr r2, [sp, #0x80]\n\
- add r2, r1, r2\n\
- str r2, [sp, #0x24]\n\
- ldr r3, [sp]\n\
- str r3, [sp, #0x28]\n\
- cmp r1, r2\n\
- bcc _08004F28\n\
- b _080052AA\n\
-_08004F28:\n\
- ldr r0, [sp, #0x20]\n\
- ldm r0!, {r5}\n\
- str r0, [sp, #0x20]\n\
- ldr r4, [sp, #0x28]\n\
- add r2, r1, #0x1\n\
- mov r10, r2\n\
- cmp r4, r8\n\
- bcs _08004F86\n\
- mov r3, #0x7\n\
- mov r12, r3\n\
- lsr r0, r1, #3\n\
- ldr r3, [sp, #0x4]\n\
- add r2, r0, #0\n\
- mul r2, r3\n\
- add r7, r2, #0\n\
- mov r0, r12\n\
- and r1, r0\n\
- lsl r6, r1, #2\n\
-_08004F4C:\n\
- add r3, r5, #0\n\
- mov r1, #0xF\n\
- and r3, r1\n\
- cmp r3, #0\n\
- beq _08004F7E\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, r12\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_08004F7E:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r8\n\
- bcc _08004F4C\n\
-_08004F86:\n\
- mov r1, r10\n\
- ldr r2, [sp, #0x24]\n\
- cmp r1, r2\n\
- bcc _08004F28\n\
- b _080052AA\n\
- .pool\n\
-_08004F94:\n\
- cmp r0, #0x8\n\
- ble _08004F9A\n\
- b _080050A4\n\
-_08004F9A:\n\
- mov r1, r8\n\
- str r3, [sp, #0x2C]\n\
- ldr r3, [sp]\n\
- add r3, #0x8\n\
- mov r12, r3\n\
- add r0, r8\n\
- str r0, [sp, #0x30]\n\
- ldr r0, [sp]\n\
- str r0, [sp, #0x34]\n\
- ldr r2, [sp, #0x30]\n\
- str r2, [sp, #0x78]\n\
- str r3, [sp, #0x84]\n\
- sub r4, #0x8\n\
- str r4, [sp, #0x7C]\n\
- cmp r8, r2\n\
- bcs _0800501C\n\
-_08004FBA:\n\
- ldr r0, [sp, #0x2C]\n\
- ldm r0!, {r5}\n\
- str r0, [sp, #0x2C]\n\
- ldr r4, [sp, #0x34]\n\
- add r2, r1, #0x1\n\
- mov r10, r2\n\
- cmp r4, r12\n\
- bcs _08005014\n\
- lsr r0, r1, #3\n\
- ldr r2, [sp, #0x4]\n\
- add r3, r0, #0\n\
- mul r3, r2\n\
- add r7, r3, #0\n\
- mov r3, #0x7\n\
- and r1, r3\n\
- lsl r6, r1, #2\n\
-_08004FDA:\n\
- add r3, r5, #0\n\
- mov r0, #0xF\n\
- and r3, r0\n\
- cmp r3, #0\n\
- beq _0800500C\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, #0x7\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_0800500C:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r12\n\
- bcc _08004FDA\n\
-_08005014:\n\
- mov r1, r10\n\
- ldr r2, [sp, #0x30]\n\
- cmp r1, r2\n\
- bcc _08004FBA\n\
-_0800501C:\n\
- mov r1, r8\n\
- ldr r3, =gUnknown_03002F90 + 0x20\n\
- str r3, [sp, #0x38]\n\
- ldr r0, [sp, #0x84]\n\
- ldr r2, [sp, #0x7C]\n\
- add r0, r2\n\
- mov r8, r0\n\
- ldr r3, [sp, #0x78]\n\
- str r3, [sp, #0x3C]\n\
- ldr r0, [sp, #0x84]\n\
- str r0, [sp, #0x40]\n\
- cmp r1, r3\n\
- bcc _08005038\n\
- b _080052AA\n\
-_08005038:\n\
- ldr r2, [sp, #0x38]\n\
- ldm r2!, {r5}\n\
- str r2, [sp, #0x38]\n\
- ldr r4, [sp, #0x40]\n\
- add r3, r1, #0x1\n\
- mov r10, r3\n\
- cmp r4, r8\n\
- bcs _08005096\n\
- mov r0, #0x7\n\
- mov r12, r0\n\
- lsr r0, r1, #3\n\
- ldr r3, [sp, #0x4]\n\
- add r2, r0, #0\n\
- mul r2, r3\n\
- add r7, r2, #0\n\
- mov r0, r12\n\
- and r1, r0\n\
- lsl r6, r1, #2\n\
-_0800505C:\n\
- add r3, r5, #0\n\
- mov r1, #0xF\n\
- and r3, r1\n\
- cmp r3, #0\n\
- beq _0800508E\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, r12\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_0800508E:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r8\n\
- bcc _0800505C\n\
-_08005096:\n\
- mov r1, r10\n\
- ldr r2, [sp, #0x3C]\n\
- cmp r1, r2\n\
- bcc _08005038\n\
- b _080052AA\n\
- .pool\n\
-_080050A4:\n\
- mov r1, r8\n\
- str r5, [sp, #0x44]\n\
- ldr r3, [sp]\n\
- add r3, #0x8\n\
- mov r12, r3\n\
- mov r2, r8\n\
- add r2, #0x8\n\
- str r2, [sp, #0x48]\n\
- ldr r3, [sp]\n\
- str r3, [sp, #0x4C]\n\
- str r2, [sp, #0x88]\n\
- sub r0, #0x8\n\
- str r0, [sp, #0x80]\n\
- mov r0, r12\n\
- str r0, [sp, #0x84]\n\
- sub r4, #0x8\n\
- str r4, [sp, #0x7C]\n\
- cmp r8, r2\n\
- bcs _0800512C\n\
-_080050CA:\n\
- ldr r2, [sp, #0x44]\n\
- ldm r2!, {r5}\n\
- str r2, [sp, #0x44]\n\
- ldr r4, [sp, #0x4C]\n\
- add r3, r1, #0x1\n\
- mov r10, r3\n\
- cmp r4, r12\n\
- bcs _08005124\n\
- lsr r0, r1, #3\n\
- ldr r3, [sp, #0x4]\n\
- add r2, r0, #0\n\
- mul r2, r3\n\
- add r7, r2, #0\n\
- mov r0, #0x7\n\
- and r1, r0\n\
- lsl r6, r1, #2\n\
-_080050EA:\n\
- add r3, r5, #0\n\
- mov r1, #0xF\n\
- and r3, r1\n\
- cmp r3, #0\n\
- beq _0800511C\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, #0x7\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_0800511C:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r12\n\
- bcc _080050EA\n\
-_08005124:\n\
- mov r1, r10\n\
- ldr r2, [sp, #0x48]\n\
- cmp r1, r2\n\
- bcc _080050CA\n\
-_0800512C:\n\
- mov r1, r8\n\
- ldr r3, =gUnknown_03002F90 + 0x20\n\
- str r3, [sp, #0x50]\n\
- ldr r0, [sp, #0x84]\n\
- ldr r2, [sp, #0x7C]\n\
- add r0, r2\n\
- mov r8, r0\n\
- ldr r3, [sp, #0x88]\n\
- str r3, [sp, #0x54]\n\
- ldr r0, [sp, #0x84]\n\
- str r0, [sp, #0x58]\n\
- cmp r1, r3\n\
- bcs _080051AC\n\
-_08005146:\n\
- ldr r2, [sp, #0x50]\n\
- ldm r2!, {r5}\n\
- str r2, [sp, #0x50]\n\
- ldr r4, [sp, #0x58]\n\
- add r3, r1, #0x1\n\
- mov r10, r3\n\
- cmp r4, r8\n\
- bcs _080051A4\n\
- mov r0, #0x7\n\
- mov r12, r0\n\
- lsr r0, r1, #3\n\
- ldr r3, [sp, #0x4]\n\
- add r2, r0, #0\n\
- mul r2, r3\n\
- add r7, r2, #0\n\
- mov r0, r12\n\
- and r1, r0\n\
- lsl r6, r1, #2\n\
-_0800516A:\n\
- add r3, r5, #0\n\
- mov r1, #0xF\n\
- and r3, r1\n\
- cmp r3, #0\n\
- beq _0800519C\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, r12\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_0800519C:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r8\n\
- bcc _0800516A\n\
-_080051A4:\n\
- mov r1, r10\n\
- ldr r2, [sp, #0x54]\n\
- cmp r1, r2\n\
- bcc _08005146\n\
-_080051AC:\n\
- ldr r1, [sp, #0x88]\n\
- ldr r3, =gUnknown_03002F90 + 0x40\n\
- str r3, [sp, #0x5C]\n\
- ldr r0, [sp, #0x84]\n\
- mov r8, r0\n\
- ldr r2, [sp, #0x80]\n\
- add r2, r1, r2\n\
- str r2, [sp, #0x60]\n\
- ldr r3, [sp]\n\
- str r3, [sp, #0x64]\n\
- cmp r1, r2\n\
- bcs _0800522A\n\
-_080051C4:\n\
- ldr r0, [sp, #0x5C]\n\
- ldm r0!, {r5}\n\
- str r0, [sp, #0x5C]\n\
- ldr r4, [sp, #0x64]\n\
- add r2, r1, #0x1\n\
- mov r10, r2\n\
- cmp r4, r8\n\
- bcs _08005222\n\
- mov r3, #0x7\n\
- mov r12, r3\n\
- lsr r0, r1, #3\n\
- ldr r3, [sp, #0x4]\n\
- add r2, r0, #0\n\
- mul r2, r3\n\
- add r7, r2, #0\n\
- mov r0, r12\n\
- and r1, r0\n\
- lsl r6, r1, #2\n\
-_080051E8:\n\
- add r3, r5, #0\n\
- mov r1, #0xF\n\
- and r3, r1\n\
- cmp r3, #0\n\
- beq _0800521A\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, r12\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_0800521A:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r8\n\
- bcc _080051E8\n\
-_08005222:\n\
- mov r1, r10\n\
- ldr r2, [sp, #0x60]\n\
- cmp r1, r2\n\
- bcc _080051C4\n\
-_0800522A:\n\
- ldr r4, [sp, #0x84]\n\
- ldr r1, [sp, #0x88]\n\
- ldr r3, =gUnknown_03002F90 + 0x60\n\
- str r3, [sp, #0x68]\n\
- ldr r0, [sp, #0x7C]\n\
- add r0, r4\n\
- mov r8, r0\n\
- ldr r2, [sp, #0x80]\n\
- add r2, r1, r2\n\
- str r2, [sp, #0x6C]\n\
- str r4, [sp, #0x70]\n\
- cmp r1, r2\n\
- bcs _080052AA\n\
-_08005244:\n\
- ldr r3, [sp, #0x68]\n\
- ldm r3!, {r5}\n\
- str r3, [sp, #0x68]\n\
- ldr r4, [sp, #0x70]\n\
- add r0, r1, #0x1\n\
- mov r10, r0\n\
- cmp r4, r8\n\
- bcs _080052A2\n\
- mov r2, #0x7\n\
- mov r12, r2\n\
- lsr r0, r1, #3\n\
- ldr r2, [sp, #0x4]\n\
- add r3, r0, #0\n\
- mul r3, r2\n\
- add r7, r3, #0\n\
- mov r3, r12\n\
- and r1, r3\n\
- lsl r6, r1, #2\n\
-_08005268:\n\
- add r3, r5, #0\n\
- mov r0, #0xF\n\
- and r3, r0\n\
- cmp r3, #0\n\
- beq _0800529A\n\
- lsr r2, r4, #3\n\
- lsl r2, #5\n\
- add r2, r9\n\
- add r0, r4, #0\n\
- mov r1, r12\n\
- and r0, r1\n\
- lsr r0, #1\n\
- add r2, r0\n\
- add r2, r7\n\
- add r2, r6\n\
- mov r1, #0x1\n\
- and r1, r4\n\
- lsl r1, #2\n\
- lsl r3, r1\n\
- mov r0, #0xF0\n\
- asr r0, r1\n\
- ldrb r1, [r2]\n\
- and r0, r1\n\
- orr r3, r0\n\
- strb r3, [r2]\n\
-_0800529A:\n\
- lsr r5, #4\n\
- add r4, #0x1\n\
- cmp r4, r8\n\
- bcc _08005268\n\
-_080052A2:\n\
- mov r1, r10\n\
- ldr r2, [sp, #0x6C]\n\
- cmp r1, r2\n\
- bcc _08005244\n\
-_080052AA:\n\
- add sp, #0x8C\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\
- .pool");
-}
-#endif // NONMATCHING
-
-void ClearTextSpan(struct TextPrinter *textPrinter, u32 width)
-{
- struct Window *window;
- struct Bitmap pixels_data;
- struct Struct_03002F90 *gUnk;
- u8* glyphHeight;
-
- if (gLastTextBgColor != 0)
- {
- window = &gWindows[textPrinter->printerTemplate.windowId];
- pixels_data.pixels = window->tileData;
- pixels_data.width = window->window.width << 3;
- pixels_data.height = window->window.height << 3;
-
- gUnk = &gUnknown_03002F90;
- glyphHeight = &gUnk->unk81;
-
- FillBitmapRect4Bit(
- &pixels_data,
- textPrinter->printerTemplate.currentX,
- textPrinter->printerTemplate.currentY,
- width,
- *glyphHeight,
- gLastTextBgColor);
- }
-}
-
-u16 Font0Func(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->hasGlyphIdBeenSet == FALSE)
- {
- textPrinter->subUnion.sub.glyphId = 0;
- subStruct->hasGlyphIdBeenSet = TRUE;
- }
- return RenderText(textPrinter);
-}
-
-u16 Font1Func(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->hasGlyphIdBeenSet == FALSE)
- {
- textPrinter->subUnion.sub.glyphId = 1;
- subStruct->hasGlyphIdBeenSet = TRUE;
- }
- return RenderText(textPrinter);
-}
-
-u16 Font2Func(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->hasGlyphIdBeenSet == FALSE)
- {
- textPrinter->subUnion.sub.glyphId = 2;
- subStruct->hasGlyphIdBeenSet = TRUE;
- }
- return RenderText(textPrinter);
-}
-
-u16 Font3Func(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->hasGlyphIdBeenSet == FALSE)
- {
- textPrinter->subUnion.sub.glyphId = 3;
- subStruct->hasGlyphIdBeenSet = TRUE;
- }
- return RenderText(textPrinter);
-}
-
-u16 Font4Func(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->hasGlyphIdBeenSet == FALSE)
- {
- textPrinter->subUnion.sub.glyphId = 4;
- subStruct->hasGlyphIdBeenSet = TRUE;
- }
- return RenderText(textPrinter);
-}
-
-u16 Font5Func(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->hasGlyphIdBeenSet == FALSE)
- {
- textPrinter->subUnion.sub.glyphId = 5;
- subStruct->hasGlyphIdBeenSet = TRUE;
- }
- return RenderText(textPrinter);
-}
-
-u16 Font7Func(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->hasGlyphIdBeenSet == FALSE)
- {
- textPrinter->subUnion.sub.glyphId = 7;
- subStruct->hasGlyphIdBeenSet = TRUE;
- }
- return RenderText(textPrinter);
-}
-
-u16 Font8Func(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->hasGlyphIdBeenSet == FALSE)
- {
- textPrinter->subUnion.sub.glyphId = 8;
- subStruct->hasGlyphIdBeenSet = TRUE;
- }
- return RenderText(textPrinter);
-}
-
-void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (gTextFlags.autoScroll == 1)
- subStruct->autoScrollDelay = 0;
- else
- {
- subStruct->downArrowYPosIdx = 0;
- subStruct->downArrowDelay = 0;
- }
-}
-
-void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
- const u8 *arrowTiles;
-
- if (gTextFlags.autoScroll == 0)
- {
- if (subStruct->downArrowDelay != 0)
- {
- subStruct->downArrowDelay = ((*(u32*)&textPrinter->subUnion.sub) << 19 >> 27) - 1; // convoluted way of getting downArrowDelay, necessary to match
- }
- else
- {
- FillWindowPixelRect(
- textPrinter->printerTemplate.windowId,
- textPrinter->printerTemplate.bgColor << 4 | textPrinter->printerTemplate.bgColor,
- textPrinter->printerTemplate.currentX,
- textPrinter->printerTemplate.currentY,
- 0x8,
- 0x10);
-
- switch (gTextFlags.useAlternateDownArrow)
- {
- case 0:
- default:
- arrowTiles = gDownArrowTiles;
- break;
- case 1:
- arrowTiles = gDarkDownArrowTiles;
- break;
- }
-
- BlitBitmapRectToWindow(
- textPrinter->printerTemplate.windowId,
- arrowTiles,
- 0,
- gDownArrowYCoords[*(u32*)subStruct << 17 >> 30], // subStruct->downArrowYPosIdx but again, stupidly retrieved
- 0x8,
- 0x10,
- textPrinter->printerTemplate.currentX,
- textPrinter->printerTemplate.currentY,
- 0x8,
- 0x10);
- CopyWindowToVram(textPrinter->printerTemplate.windowId, 0x2);
-
- subStruct->downArrowDelay = 0x8;
- subStruct->downArrowYPosIdx = (*(u32*)subStruct << 17 >> 30) + 1;
- }
- }
-}
-
-void TextPrinterClearDownArrow(struct TextPrinter *textPrinter)
-{
- FillWindowPixelRect(
- textPrinter->printerTemplate.windowId,
- textPrinter->printerTemplate.bgColor << 4 | textPrinter->printerTemplate.bgColor,
- textPrinter->printerTemplate.currentX,
- textPrinter->printerTemplate.currentY,
- 0x8,
- 0x10);
- CopyWindowToVram(textPrinter->printerTemplate.windowId, 0x2);
-}
-
-bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
-
- if (subStruct->autoScrollDelay == 49)
- {
- return TRUE;
- }
- else
- {
- ++subStruct->autoScrollDelay;
- return FALSE;
- }
-}
-
-bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
-{
- bool8 result = FALSE;
- if (gTextFlags.autoScroll != 0)
- {
- result = TextPrinterWaitAutoMode(textPrinter);
- }
- else
- {
- TextPrinterDrawDownArrow(textPrinter);
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
- {
- result = TRUE;
- PlaySE(SE_SELECT);
- }
- }
- return result;
-}
-
-bool16 TextPrinterWait(struct TextPrinter *textPrinter)
-{
- bool16 result = FALSE;
- if (gTextFlags.autoScroll != 0)
- {
- result = TextPrinterWaitAutoMode(textPrinter);
- }
- else
- {
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
- {
- result = TRUE;
- PlaySE(SE_SELECT);
- }
- }
- return result;
-}
-
-void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex)
-{
- const u8 *arrowTiles;
-
- if (*counter != 0)
- {
- --*counter;
- }
- else
- {
- FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 0x8, 0x10);
- if (drawArrow == 0)
- {
- switch (gTextFlags.useAlternateDownArrow)
- {
- case 0:
- default:
- arrowTiles = gDownArrowTiles;
- break;
- case 1:
- arrowTiles = gDarkDownArrowTiles;
- break;
- }
-
- BlitBitmapRectToWindow(
- windowId,
- arrowTiles,
- 0,
- gDownArrowYCoords[*yCoordIndex & 3],
- 0x8,
- 0x10,
- x,
- y - 2,
- 0x8,
- 0x10);
- CopyWindowToVram(windowId, 0x2);
- *counter = 8;
- ++*yCoordIndex;
- }
- }
-}
-
-u16 RenderText(struct TextPrinter *textPrinter)
-{
- struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub;
- u16 currChar;
- s32 width;
- s32 widthHelper;
-
- switch (textPrinter->state)
- {
- case 0:
- if ((gMain.heldKeys & (A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp)
- textPrinter->delayCounter = 0;
-
- if (textPrinter->delayCounter && textPrinter->textSpeed)
- {
- textPrinter->delayCounter--;
- if (gTextFlags.canABSpeedUpPrint && (gMain.newKeys & (A_BUTTON | B_BUTTON)))
- {
- subStruct->hasPrintBeenSpedUp = TRUE;
- textPrinter->delayCounter = 0;
- }
- return 3;
- }
-
- if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED) && gTextFlags.autoScroll)
- textPrinter->delayCounter = 3;
- else
- textPrinter->delayCounter = textPrinter->textSpeed;
-
- currChar = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
-
- switch (currChar)
- {
- case CHAR_NEWLINE:
- textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
- textPrinter->printerTemplate.currentY += (gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing);
- return 2;
- case PLACEHOLDER_BEGIN:
- textPrinter->printerTemplate.currentChar++;
- return 2;
- case EXT_CTRL_CODE_BEGIN:
- currChar = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- switch (currChar)
- {
- case 1:
- textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
- return 2;
- case 2:
- textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
- return 2;
- case 3:
- textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
- return 2;
- case 4:
- textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor);
- return 2;
- case 5:
- textPrinter->printerTemplate.currentChar++;
- return 2;
- case 6:
- subStruct->glyphId = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- return 2;
- case EXT_CTRL_CODE_UNKNOWN_7:
- return 2;
- case 8:
- textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- textPrinter->state = 6;
- return 2;
- case 9:
- textPrinter->state = 1;
- if (gTextFlags.autoScroll)
- subStruct->autoScrollDelay = 0;
- return 3;
- case 10:
- textPrinter->state = 5;
- return 3;
- case 11:
- currChar = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- currChar |= *textPrinter->printerTemplate.currentChar << 8;
- textPrinter->printerTemplate.currentChar++;
- PlayBGM(currChar);
- return 2;
- case 12:
- currChar = *textPrinter->printerTemplate.currentChar | 0x100;
- textPrinter->printerTemplate.currentChar++;
- break;
- case 16:
- currChar = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- currChar |= (*textPrinter->printerTemplate.currentChar << 8);
- textPrinter->printerTemplate.currentChar++;
- PlaySE(currChar);
- return 2;
- case 13:
- textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- return 2;
- case 14:
- textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- return 2;
- case 15:
- FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
- textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
- textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y;
- return 2;
- case 23:
- m4aMPlayStop(&gMPlayInfo_BGM);
- return 2;
- case 24:
- m4aMPlayContinue(&gMPlayInfo_BGM);
- return 2;
- case EXT_CTRL_CODE_CLEAR:
- width = *textPrinter->printerTemplate.currentChar;
- textPrinter->printerTemplate.currentChar++;
- if (width > 0)
- {
- ClearTextSpan(textPrinter, width);
- textPrinter->printerTemplate.currentX += width;
- return 0;
- }
- return 2;
- case 18:
- textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x;
- textPrinter->printerTemplate.currentChar++;
- return 2;
- case EXT_CTRL_CODE_CLEAR_TO:
- {
- widthHelper = *textPrinter->printerTemplate.currentChar;
- widthHelper += textPrinter->printerTemplate.x;
- textPrinter->printerTemplate.currentChar++;
- width = widthHelper - textPrinter->printerTemplate.currentX;
- if (width > 0)
- {
- ClearTextSpan(textPrinter, width);
- textPrinter->printerTemplate.currentX += width;
- return 0;
- }
- }
- return 2;
- case EXT_CTRL_CODE_MIN_LETTER_SPACING:
- textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++;
- return 2;
- case EXT_CTRL_CODE_JPN:
- textPrinter->japanese = 1;
- return 2;
- case EXT_CTRL_CODE_ENG:
- textPrinter->japanese = 0;
- return 2;
- }
- break;
- case CHAR_PROMPT_CLEAR:
- textPrinter->state = 2;
- TextPrinterInitDownArrowCounters(textPrinter);
- return 3;
- case CHAR_PROMPT_SCROLL:
- textPrinter->state = 3;
- TextPrinterInitDownArrowCounters(textPrinter);
- return 3;
- case CHAR_SPECIAL_F9:
- currChar = *textPrinter->printerTemplate.currentChar | 0x100;
- textPrinter->printerTemplate.currentChar++;
- break;
- case CHAR_SPECIAL_F8:
- currChar = *textPrinter->printerTemplate.currentChar++;
- gUnknown_03002F90.unk80 = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY);
- textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing;
- return 0;
- case EOS:
- return 1;
- }
-
- switch (subStruct->glyphId)
- {
- case 0:
- DecompressGlyphFont0(currChar, textPrinter->japanese);
- break;
- case 1:
- DecompressGlyphFont1(currChar, textPrinter->japanese);
- break;
- case 2:
- case 3:
- case 4:
- case 5:
- DecompressGlyphFont2(currChar, textPrinter->japanese);
- break;
- case 7:
- DecompressGlyphFont7(currChar, textPrinter->japanese);
- break;
- case 8:
- DecompressGlyphFont8(currChar, textPrinter->japanese);
- break;
- case 6:
- break;
- }
-
- CopyGlyphToWindow(textPrinter);
-
- if (textPrinter->minLetterSpacing)
- {
- textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80;
- width = textPrinter->minLetterSpacing - gUnknown_03002F90.unk80;
- if (width > 0)
- {
- ClearTextSpan(textPrinter, width);
- textPrinter->printerTemplate.currentX += width;
- }
- }
- else
- {
- if (textPrinter->japanese)
- textPrinter->printerTemplate.currentX += (gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing);
- else
- textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80;
- }
- return 0;
- case 1:
- if (TextPrinterWait(textPrinter))
- textPrinter->state = 0;
- return 3;
- case 2:
- if (TextPrinterWaitWithDownArrow(textPrinter))
- {
- FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
- textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
- textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y;
- textPrinter->state = 0;
- }
- return 3;
- case 3:
- if (TextPrinterWaitWithDownArrow(textPrinter))
- {
- TextPrinterClearDownArrow(textPrinter);
- textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing;
- textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x;
- textPrinter->state = 4;
- }
- return 3;
- case 4:
- if (textPrinter->scrollDistance)
- {
- int scrollSpeed = GetPlayerTextSpeed();
- int speed = gWindowVerticalScrollSpeeds[scrollSpeed];
- if (textPrinter->scrollDistance < speed)
- {
- ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
- textPrinter->scrollDistance = 0;
- }
- else
- {
- ScrollWindow(textPrinter->printerTemplate.windowId, 0, speed, PIXEL_FILL(textPrinter->printerTemplate.bgColor));
- textPrinter->scrollDistance -= speed;
- }
- CopyWindowToVram(textPrinter->printerTemplate.windowId, 2);
- }
- else
- {
- textPrinter->state = 0;
- }
- return 3;
- case 5:
- if (!IsSEPlaying())
- textPrinter->state = 0;
- return 3;
- case 6:
- if (textPrinter->delayCounter != 0)
- textPrinter->delayCounter--;
- else
- textPrinter->state = 0;
- return 3;
- }
-
- return 1;
-}
-
-u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing)
-{
- int i;
- u8 width;
- int temp;
- int temp2;
- u8 line;
- int strPos;
- u8 lineWidths[8];
- const u8 *strLocal;
-
- for (i = 0; i < 8; i++)
- {
- lineWidths[i] = 0;
- }
-
- width = 0;
- line = 0;
- strLocal = str;
- strPos = 0;
-
- do
- {
- temp = strLocal[strPos++];
- switch (temp)
- {
- case CHAR_NEWLINE:
- case EOS:
- lineWidths[line] = width;
- width = 0;
- line++;
- break;
- case EXT_CTRL_CODE_BEGIN:
- temp2 = strLocal[strPos++];
- switch (temp2)
- {
- case 0x4:
- ++strPos;
- case 0xB:
- case 0x10:
- ++strPos;
- case 0x1:
- case 0x2:
- case 0x3:
- case 0x5:
- case 0x6:
- case 0x8:
- case 0xC:
- case 0xD:
- case 0xE:
- case 0x11:
- case 0x12:
- case 0x13:
- case 0x14:
- ++strPos;
- break;
- case EXT_CTRL_CODE_UNKNOWN_7:
- case 0x9:
- case 0xA:
- case 0xF:
- case EXT_CTRL_CODE_JPN:
- case EXT_CTRL_CODE_ENG:
- default:
- break;
- }
- break;
- case CHAR_SPECIAL_F7:
- case PLACEHOLDER_BEGIN:
- ++strPos;
- break;
- case CHAR_PROMPT_SCROLL:
- case CHAR_PROMPT_CLEAR:
- break;
- case CHAR_SPECIAL_F8:
- case CHAR_SPECIAL_F9:
- ++strPos;
- default:
- ++width;
- break;
- }
- } while (temp != EOS);
-
- for (width = 0, strPos = 0; strPos < 8; ++strPos)
- {
- if (width < lineWidths[strPos])
- width = lineWidths[strPos];
- }
-
- return (u8)(GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH) + letterSpacing) * width;
-}
-
-u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32)
-{
- u32 i;
-
- for (i = 0; i < 9; ++i)
- {
- if (glyphId == gGlyphWidthFuncs[i].fontId)
- return gGlyphWidthFuncs[i].func;
- }
-
- return NULL;
-}
-
-s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
-{
- bool8 isJapanese;
- int minGlyphWidth;
- u32 (*func)(u16 glyphId, bool32 isJapanese);
- s32 result;
- int localLetterSpacing;
- u32 lineWidth;
- const u8 *bufferPointer;
- int glyphWidth;
- s32 width;
-
- isJapanese = 0;
- minGlyphWidth = 0;
-
- func = GetFontWidthFunc(fontId);
- if (func == NULL)
- return 0;
-
- if (letterSpacing == -1)
- localLetterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING);
- else
- localLetterSpacing = letterSpacing;
-
- width = 0;
- lineWidth = 0;
- bufferPointer = 0;
-
- while (*str != EOS)
- {
- switch (*str)
- {
- case CHAR_NEWLINE:
- if (lineWidth > width)
- width = lineWidth;
- lineWidth = 0;
- break;
- case PLACEHOLDER_BEGIN:
- switch (*++str)
- {
- case 0x2:
- bufferPointer = gStringVar1;
- break;
- case 0x3:
- bufferPointer = gStringVar2;
- break;
- case 0x4:
- bufferPointer = gStringVar3;
- break;
- default:
- return 0;
- }
- case CHAR_SPECIAL_F7:
- if (bufferPointer == NULL)
- bufferPointer = DynamicPlaceholderTextUtil_GetPlaceholderPtr(*++str);
- while (*bufferPointer != EOS)
- {
- glyphWidth = func(*bufferPointer++, isJapanese);
- if (minGlyphWidth > 0)
- {
- if (glyphWidth < minGlyphWidth)
- glyphWidth = minGlyphWidth;
- lineWidth += glyphWidth;
- }
- else
- {
- lineWidth += glyphWidth;
- if (isJapanese && str[1] != EOS)
- lineWidth += localLetterSpacing;
- }
- }
- bufferPointer = 0;
- break;
- case EXT_CTRL_CODE_BEGIN:
- switch (*++str)
- {
- case 0x4:
- ++str;
- case 0xB:
- case 0x10:
- ++str;
- case 0x1:
- case 0x2:
- case 0x3:
- case 0x5:
- case 0x8:
- case 0xC:
- case 0xD:
- case 0xE:
- ++str;
- break;
- case 0x6:
- func = GetFontWidthFunc(*++str);
- if (func == NULL)
- return 0;
- if (letterSpacing == -1)
- localLetterSpacing = GetFontAttribute(*str, FONTATTR_LETTER_SPACING);
- break;
- case 0x11:
- glyphWidth = *++str;
- lineWidth += glyphWidth;
- break;
- case 0x12:
- lineWidth = *++str;
- break;
- case 0x13:
- if (*++str > lineWidth)
- lineWidth = *str;
- break;
- case 0x14:
- minGlyphWidth = *++str;
- break;
- case EXT_CTRL_CODE_JPN:
- isJapanese = 1;
- break;
- case EXT_CTRL_CODE_ENG:
- isJapanese = 0;
- break;
- case EXT_CTRL_CODE_UNKNOWN_7:
- case 0x9:
- case 0xA:
- case 0xF:
- default:
- break;
- }
- break;
- case CHAR_SPECIAL_F8:
- case CHAR_SPECIAL_F9:
- if (*str == CHAR_SPECIAL_F9)
- glyphWidth = func(*++str | 0x100, isJapanese);
- else
- glyphWidth = GetKeypadIconWidth(*++str);
-
- if (minGlyphWidth > 0)
- {
- if (glyphWidth < minGlyphWidth)
- glyphWidth = minGlyphWidth;
- lineWidth += glyphWidth;
- }
- else
- {
- lineWidth += glyphWidth;
- if (isJapanese && str[1] != EOS)
- lineWidth += localLetterSpacing;
- }
- break;
- case CHAR_PROMPT_SCROLL:
- case CHAR_PROMPT_CLEAR:
- break;
- default:
- glyphWidth = func(*str, isJapanese);
- if (minGlyphWidth > 0)
- {
- if (glyphWidth < minGlyphWidth)
- glyphWidth = minGlyphWidth;
- lineWidth += glyphWidth;
- }
- else
- {
- lineWidth += glyphWidth;
- if (isJapanese && str[1] != EOS)
- lineWidth += localLetterSpacing;
- }
- break;
- }
- ++str;
- }
-
- if (lineWidth > width)
- return lineWidth;
- else
- return width;
-}
-
-u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str)
-{
- u8 shadowColor;
- u8 *strLocal;
- int strPos;
- int temp;
- int temp2;
- u8 colorBackup[3];
- u8 fgColor;
- u8 bgColor;
-
- SaveTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]);
-
- fgColor = 1;
- bgColor = 0;
- shadowColor = 3;
-
- GenerateFontHalfRowLookupTable(1, 0, 3);
- strLocal = str;
- strPos = 0;
-
- do
- {
- temp = strLocal[strPos++];
- switch (temp)
- {
- case EXT_CTRL_CODE_BEGIN:
- temp2 = strLocal[strPos++];
- switch (temp2)
- {
- case 0x4:
- fgColor = strLocal[strPos++];
- bgColor = strLocal[strPos++];
- shadowColor = strLocal[strPos++];
- GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
- continue;
- case 0x1:
- fgColor = strLocal[strPos++];
- GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
- continue;
- case 0x2:
- bgColor = strLocal[strPos++];
- GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
- continue;
- case 0x3:
- shadowColor = strLocal[strPos++];
- GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor);
- continue;
- case 0x6:
- fontId = strLocal[strPos++];
- break;
- case 0xB:
- case 0x10:
- ++strPos;
- case 0x5:
- case 0x8:
- case 0xC:
- case 0xD:
- case 0xE:
- case 0x11:
- case 0x12:
- case 0x13:
- case 0x14:
- ++strPos;
- break;
- case EXT_CTRL_CODE_UNKNOWN_7:
- case 0x9:
- case 0xA:
- case 0xF:
- case EXT_CTRL_CODE_JPN:
- case EXT_CTRL_CODE_ENG:
- default:
- continue;
- }
- break;
- case CHAR_SPECIAL_F7:
- case CHAR_SPECIAL_F8:
- case CHAR_SPECIAL_F9:
- case PLACEHOLDER_BEGIN:
- ++strPos;
- break;
- case CHAR_PROMPT_SCROLL:
- case CHAR_PROMPT_CLEAR:
- case CHAR_NEWLINE:
- case EOS:
- break;
- default:
- switch (fontId)
- {
- case 9:
- DecompressGlyphFont9(temp);
- break;
- case 1:
- default:
- DecompressGlyphFont1(temp, 1);
- break;
- }
- CpuCopy32(gUnknown_03002F90.unk0, pixels, 0x20);
- CpuCopy32(gUnknown_03002F90.unk40, pixels + 0x20, 0x20);
- pixels += 0x40;
- break;
- }
- }
- while (temp != EOS);
-
- RestoreTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]);
- return 1;
-}
-
-u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y)
-{
- BlitBitmapRectToWindow(
- windowId,
- gKeypadIconTiles + (gKeypadIcons[keypadIconId].tileOffset * 0x20),
- 0,
- 0,
- 0x80,
- 0x80,
- x,
- y,
- gKeypadIcons[keypadIconId].width,
- gKeypadIcons[keypadIconId].height);
- return gKeypadIcons[keypadIconId].width;
-}
-
-u8 GetKeypadIconTileOffset(u8 keypadIconId)
-{
- return gKeypadIcons[keypadIconId].tileOffset;
-}
-
-u8 GetKeypadIconWidth(u8 keypadIconId)
-{
- return gKeypadIcons[keypadIconId].width;
-}
-
-u8 GetKeypadIconHeight(u8 keypadIconId)
-{
- return gKeypadIcons[keypadIconId].height;
-}
-
-void SetDefaultFontsPointer(void)
-{
- SetFontsPointer(&gFontInfos[0]);
-}
-
-u8 GetFontAttribute(u8 fontId, u8 attributeId)
-{
- int result = 0;
- switch (attributeId)
- {
- case FONTATTR_MAX_LETTER_WIDTH:
- result = gFontInfos[fontId].maxLetterWidth;
- break;
- case FONTATTR_MAX_LETTER_HEIGHT:
- result = gFontInfos[fontId].maxLetterHeight;
- break;
- case FONTATTR_LETTER_SPACING:
- result = gFontInfos[fontId].letterSpacing;
- break;
- case FONTATTR_LINE_SPACING:
- result = gFontInfos[fontId].lineSpacing;
- break;
- case FONTATTR_UNKNOWN:
- result = gFontInfos[fontId].unk;
- break;
- case FONTATTR_COLOR_FOREGROUND:
- result = gFontInfos[fontId].fgColor;
- break;
- case FONTATTR_COLOR_BACKGROUND:
- result = gFontInfos[fontId].bgColor;
- break;
- case FONTATTR_COLOR_SHADOW:
- result = gFontInfos[fontId].shadowColor;
- break;
- }
- return result;
-}
-
-u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension)
-{
- return gMenuCursorDimensions[fontId][whichDimension];
-}
-
-void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese)
-{
- const u16* glyphs;
-
- if (isJapanese == 1)
- {
- glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF));
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
- gUnknown_03002F90.unk80 = 8; // gGlyphWidth
- gUnknown_03002F90.unk81 = 12; // gGlyphHeight
- }
- else
- {
- glyphs = gFont0LatinGlyphs + (0x20 * glyphId);
- gUnknown_03002F90.unk80 = gFont0LatinGlyphWidths[glyphId];
-
- if (gUnknown_03002F90.unk80 <= 8)
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- }
- else
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
- }
-
- gUnknown_03002F90.unk81 = 13;
- }
-}
-
-u32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese)
-{
- if (isJapanese == TRUE)
- return 8;
- else
- return gFont0LatinGlyphWidths[glyphId];
-}
-
-void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese)
-{
- const u16* glyphs;
-
- if (isJapanese == TRUE)
- {
- int eff;
- glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
- gUnknown_03002F90.unk80 = 8; // gGlyphWidth
- gUnknown_03002F90.unk81 = 15; // gGlyphHeight
- }
- else
- {
- glyphs = gFont7LatinGlyphs + (0x20 * glyphId);
- gUnknown_03002F90.unk80 = gFont7LatinGlyphWidths[glyphId];
-
- if (gUnknown_03002F90.unk80 <= 8)
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- }
- else
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
- }
-
- gUnknown_03002F90.unk81 = 15;
- }
-}
-
-u32 GetGlyphWidthFont7(u16 glyphId, bool32 isJapanese)
-{
- if (isJapanese == TRUE)
- return 8;
- else
- return gFont7LatinGlyphWidths[glyphId];
-}
-
-void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese)
-{
- const u16* glyphs;
-
- if (isJapanese == TRUE)
- {
- glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF));
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
- gUnknown_03002F90.unk80 = 8; // gGlyphWidth
- gUnknown_03002F90.unk81 = 12; // gGlyphHeight
- }
- else
- {
- glyphs = gFont8LatinGlyphs + (0x20 * glyphId);
- gUnknown_03002F90.unk80 = gFont8LatinGlyphWidths[glyphId];
-
- if (gUnknown_03002F90.unk80 <= 8)
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- }
- else
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
- }
-
- gUnknown_03002F90.unk81 = 12;
- }
-}
-
-u32 GetGlyphWidthFont8(u16 glyphId, bool32 isJapanese)
-{
- if (isJapanese == TRUE)
- return 8;
- else
- return gFont8LatinGlyphWidths[glyphId];
-}
-
-void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese)
-{
- const u16* glyphs;
-
- if (isJapanese == TRUE)
- {
- glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); // gUnknown_03002F90 + 0x40
- DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x20
- DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); // gUnknown_03002F90 + 0x60
- gUnknown_03002F90.unk80 = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth
- gUnknown_03002F90.unk81 = 14; // gGlyphHeight
- }
- else
- {
- glyphs = gFont2LatinGlyphs + (0x20 * glyphId);
- gUnknown_03002F90.unk80 = gFont2LatinGlyphWidths[glyphId];
-
- if (gUnknown_03002F90.unk80 <= 8)
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- }
- else
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
- }
-
- gUnknown_03002F90.unk81 = 14;
- }
-}
-
-u32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese)
-{
- if (isJapanese == TRUE)
- return gFont2JapaneseGlyphWidths[glyphId];
- else
- return gFont2LatinGlyphWidths[glyphId];
-}
-
-void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese)
-{
- const u16* glyphs;
-
- if (isJapanese == TRUE)
- {
- int eff;
- glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40
- gUnknown_03002F90.unk80 = 8; // gGlyphWidth
- gUnknown_03002F90.unk81 = 15; // gGlyphHeight
- }
- else
- {
- glyphs = gFont1LatinGlyphs + (0x20 * glyphId);
- gUnknown_03002F90.unk80 = gFont1LatinGlyphWidths[glyphId];
-
- if (gUnknown_03002F90.unk80 <= 8)
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- }
- else
- {
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20);
- DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40);
- DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60);
- }
-
- gUnknown_03002F90.unk81 = 15;
- }
-}
-
-u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese)
-{
- if (isJapanese == TRUE)
- return 8;
- else
- return gFont1LatinGlyphWidths[glyphId];
-}
-
-void DecompressGlyphFont9(u16 glyphId)
-{
- const u16* glyphs;
-
- glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF));
- DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0);
- DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40);
- gUnknown_03002F90.unk80 = 8;
- gUnknown_03002F90.unk81 = 12;
-}
diff --git a/src/trade.c b/src/trade.c
index c29fe54c3..909abe540 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle_anim.h"
#include "battle_interface.h"
#include "bg.h"
@@ -44,1359 +44,204 @@
#include "union_room.h"
#include "util.h"
#include "window.h"
+#include "constants/contest.h"
#include "constants/easy_chat.h"
#include "constants/items.h"
#include "constants/moves.h"
+#include "constants/region_map_sections.h"
+#include "constants/rgb.h"
#include "constants/species.h"
#include "constants/songs.h"
-#include "constants/rgb.h"
#define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20))
struct InGameTrade {
- /*0x00*/ u8 name[11];
+ /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
/*0x0C*/ u16 species;
- /*0x0E*/ u8 ivs[6];
- /*0x14*/ bool8 secondAbility;
+ /*0x0E*/ u8 ivs[NUM_STATS];
+ /*0x14*/ u8 abilityNum;
/*0x18*/ u32 otId;
- /*0x1C*/ u8 stats[5];
+ /*0x1C*/ u8 conditions[CONTEST_CATEGORIES_COUNT];
/*0x24*/ u32 personality;
/*0x28*/ u16 heldItem;
/*0x2A*/ u8 mailNum;
/*0x2B*/ u8 otName[11];
/*0x36*/ u8 otGender;
/*0x37*/ u8 sheen;
- /*0x38*/ u16 playerSpecies;
+ /*0x38*/ u16 requestedSpecies;
};
-static EWRAM_DATA u8 *gUnknown_02032184 = NULL;
-static EWRAM_DATA u8 *gUnknown_02032188[14] = {NULL};
-EWRAM_DATA struct MailStruct gUnknown_020321C0[PARTY_SIZE] = {0};
-EWRAM_DATA u8 gUnknown_02032298[2] = {0};
+static EWRAM_DATA u8 *sMessageBoxAllocBuffer = NULL;
+
+// Bytes 0-2 are used for the player's name box
+// Bytes 3-5 are used for the partner's name box
+// Bytes 6-7 are used for the Cancel box
+// Bytes 8-13 are used for the Choose a Pokemon box
+static EWRAM_DATA u8 *sMessageBoxTileBuffers[14] = {NULL};
+
+EWRAM_DATA struct MailStruct gTradeMail[PARTY_SIZE] = {0};
+EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0};
static EWRAM_DATA struct {
- /*0x0000*/ u8 unk_0;
- /*0x0001*/ u8 unk_1;
+ /*0x0000*/ u8 bg2hofs;
+ /*0x0001*/ u8 bg3hofs;
/*0x0002*/ u8 filler_2[0x28 - 2];
- /*0x0028*/ u8 partyIcons[2][PARTY_SIZE];
- /*0x0034*/ u8 tradeMenuCursorSpriteIdx;
- /*0x0035*/ u8 tradeMenuCursorPosition;
+ /*0x0028*/ u8 partySpriteIds[2][PARTY_SIZE];
+ /*0x0034*/ u8 cursorSpriteIdx;
+ /*0x0035*/ u8 cursorPosition;
/*0x0036*/ u8 partyCounts[2];
- /*0x0038*/ bool8 tradeMenuOptionsActive[12];
- /*0x0044*/ u8 unk_44;
- /*0x0045*/ u8 unk_45[2][PARTY_SIZE];
- /*0x0051*/ u8 unk_51[2][PARTY_SIZE];
- /*0x005D*/ u8 unk_5D[2][PARTY_SIZE];
- /*0x0069*/ u8 unk_69;
+ /*0x0038*/ bool8 monPresent[PARTY_SIZE * 2];
+ /*0x0044*/ bool8 neverRead_44;
+ /*0x0045*/ bool8 isLiveMon[2][PARTY_SIZE];
+ /*0x0051*/ bool8 isEgg[2][PARTY_SIZE];
+ /*0x005D*/ u8 hpBarLevels[2][PARTY_SIZE];
+ /*0x0069*/ u8 bufferPartyState;
/*0x006A*/ u8 filler_6A[0x6F - 0x6A];
- /*0x006F*/ u8 unk_6F;
- /*0x0070*/ u8 unk_70;
+ /*0x006F*/ u8 tradeMenuFunc;
+ /*0x0070*/ u8 neverRead_70;
/*0x0071*/ u8 filler_71;
- /*0x0072*/ u16 unk_72;
- /*0x0074*/ u8 unk_74[2];
- /*0x0076*/ u8 unk_76[2];
- /*0x0078*/ u8 unk_78;
- /*0x0079*/ u8 unk_79;
- /*0x007A*/ u8 unk_7A;
- /*0x007B*/ u8 unk_7B;
+ /*0x0072*/ u16 bottomTextTileStart;
+ /*0x0074*/ u8 drawPartyState[2];
+ /*0x0076*/ u8 selectedMonIdx[2];
+ /*0x0078*/ u8 playerLinkFlagChoseAction;
+ /*0x0079*/ u8 partnerLinkFlagChoseAction;
+ /*0x007A*/ u8 playerLinkFlagStatus;
+ /*0x007B*/ u8 partnerLinkFlagStatus;
/*0x007C*/ u8 filler_7C[0x7E - 0x7C];
- /*0x007E*/ u8 unk_7E;
- /*0x007F*/ u8 filler_7F;
+ /*0x007E*/ u8 partnerCursorPosition;
+ /*0x007F*/ u8 unused_7F;
/*0x0080*/ u16 linkData[20];
- /*0x00A8*/ u8 unk_A8;
- /*0x00A9*/ u8 unk_A9[11];
+ /*0x00A8*/ u8 timer;
+ /*0x00A9*/ u8 giftRibbons[11];
/*0x00B4*/ u8 filler_B4[0x8D0-0xB4];
/*0x08D0*/ struct {
- bool8 unk_0;
- u16 unk_2;
- u8 unk_4;
- } unk_8D0[4];
+ bool8 queued;
+ u16 queueDelay;
+ u8 actionId;
+ } queuedActions[4];
/*0x08F0*/ u16 tilemapBuffer[0x400];
-} *gUnknown_0203229C = {NULL};
+} *sTradeMenuData = {NULL};
static EWRAM_DATA struct {
/*0x00*/ struct Pokemon mon;
/*0x64*/ u32 timer;
- /*0x68*/ u32 unk_68[2];
+ /*0x68*/ u32 monPersonalities[2];
/*0x70*/ u8 filler_70[2];
- /*0x72*/ u8 unk_72;
- /*0x73*/ u8 unk_73;
+ /*0x72*/ u8 playerLinkFlagFinishTrade;
+ /*0x73*/ u8 partnerLinkFlagFinishTrade;
/*0x74*/ u16 linkData[10];
- /*0x88*/ u8 unk_88;
- /*0x89*/ u8 unk_89;
- /*0x8A*/ u16 unk_8A;
- /*0x8C*/ u16 unk_8C;
+ /*0x88*/ u8 alwaysZero_88;
+ /*0x89*/ u8 alwaysZero_89;
+ /*0x8A*/ u16 linkTimeoutCounter;
+ /*0x8C*/ u16 neverRead_8C;
/*0x8E*/ u8 pokePicSpriteIdxs[2];
- /*0x90*/ u8 unk_90;
- /*0x91*/ u8 unk_91;
- /*0x92*/ u8 unk_92;
- /*0x93*/ u8 unk_93;
+ /*0x90*/ u8 unk_90; //sprite id
+ /*0x91*/ u8 unk_91; //sprite id
+ /*0x92*/ u8 unk_92; //sprite id
+ /*0x93*/ u8 sendTradeFinishState;
/*0x94*/ u16 state;
/*0x96*/ u8 filler_96[0xD2 - 0x96];
- /*0xD2*/ u8 unk_D2;
- /*0xD3*/ u8 unk_D3;
- /*0xD4*/ u16 unk_D4;
- /*0xD6*/ u16 unk_D6;
- /*0xD8*/ u16 unk_D8;
- /*0xDA*/ u16 unk_DA;
- /*0xDC*/ u16 unk_DC;
- /*0xDE*/ u16 unk_DE;
+ /*0xD2*/ u8 pokeballSpriteId;
+ /*0xD3*/ u8 unk_D3; //sprite id
+ /*0xD4*/ u16 texX;
+ /*0xD6*/ u16 texY;
+ /*0xD8*/ u16 neverRead_D8;
+ /*0xDA*/ u16 neverRead_DA;
+ /*0xDC*/ u16 scrX;
+ /*0xDE*/ u16 scrY;
/*0xE0*/ s16 bg1vofs;
/*0xE2*/ s16 bg1hofs;
/*0xE4*/ s16 bg2vofs;
/*0xE6*/ s16 bg2hofs;
- /*0xE8*/ u16 unk_E8;
- /*0xEA*/ u16 unk_EA;
- /*0xEC*/ u16 unk_EC;
+ /*0xE8*/ u16 sXY;
+ /*0xEA*/ u16 unk_EA; //sXY divisor
+ /*0xEC*/ u16 alpha;
/*0xEE*/ bool8 isLinkTrade;
- /*0xF0*/ u16 tradeSpecies[2];
+ /*0xF0*/ u16 monSpecies[2];
/*0xF4*/ u16 cachedMapMusic;
- /*0xF6*/ u8 unk_F6[3];
+ /*0xF6*/ u8 textColors[3];
/*0xF9*/ u8 filler_F9;
- /*0xFA*/ u8 unk_FA;
- /*0xFB*/ u8 unk_FB;
- /*0xFC*/ u8 unk_FC;
- /*0xFD*/ u8 unk_FD;
- /*0xFE*/ u8 unk_FE;
-} *gUnknown_020322A0 = {NULL};
+ /*0xFA*/ bool8 isCableTrade;
+ /*0xFB*/ u8 wirelessWinLeft;
+ /*0xFC*/ u8 wirelessWinTop;
+ /*0xFD*/ u8 wirelessWinRight;
+ /*0xFE*/ u8 wirelessWinBottom;
+} *sTradeData = {NULL};
#if !defined(NONMATCHING) && MODERN
#define static
#endif
-static bool32 sub_8077260(void);
-static void sub_80773D0(void);
-static void sub_807811C(void);
-static void sub_807825C(void);
-static void sub_80782B8(u8);
-static void sub_8078388(void);
-static bool8 shedinja_maker_maybe(void);
-static void sub_8078C34(void);
-static void sub_80795AC(void);
-static void sub_807967C(u8);
-static void sub_80796B4(u8);
-static u8 sub_8079A3C(u8 *, u8, u8);
-static void sub_8079AA4(u8 *, u8, u8);
-static void sub_8079BE0(u8);
-static void sub_8079C4C(u8, u8, u8, u8, u8, u8);
-static void sub_8079E44(u8);
-static void sub_8079F74(void);
-static void sub_8079F88(u8);
-static void sub_807A000(u8 taskId);
-static void sub_807A024(u8 taskId);
-static void sub_807A048(u16, u8);
-static u32 sub_807A09C(void);
-static void sub_807A0C4(void);
-static void sub_807A19C(u8);
-static bool8 sub_807A1F0(void);
-static void sub_807A308(const u8 *, u8 *, u8);
-static void sub_807A320(u8);
-static void sub_807A468(u8);
-static void sub_807A53C(void);
-static void sub_807A5B0(void);
-static u32 sub_807A5F4(struct Pokemon *, int, int);
+static bool32 IsWirelessTrade(void);
+static void CB2_CreateTradeMenu(void);
+static void VBlankCB_TradeMenu(void);
+static void CB2_TradeMenu(void);
+static void LoadTradeBgGfx(u8);
+static void SetTradePartyMonsVisible(void);
+static bool8 BufferTradeParties(void);
+static void CB1_SendOrReactToLinkTradeData(void);
+static void CallTradeMenuFunc(void);
+static void SetSelectedMon(u8);
+static void DrawTradeMenuParty(u8);
+static u8 GetMonNicknameWidth(u8 *, u8, u8);
+static void BufferTradeMonMoves(u8 *, u8, u8);
+static void PrintPartyNicknamesForTradeMenu(u8);
+static void DrawTradeMenuPartyMonInfo(u8, u8, u8, u8, u8, u8);
+static void DrawTradeMenuPartyInfo(u8);
+static void PrintNicknamesForTradeMenu(void);
+static void RedrawTradeMenuParty(u8);
+static void Task_DrawSelectionSummary(u8 taskId);
+static void Task_DrawSelectionTrade(u8 taskId);
+static void QueueAction(u16, u8);
+static u32 GetNumQueuedActions(void);
+static void DoQueuedActions(void);
+static void PrintTradeMessage(u8);
+static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void);
+static void DrawTextWindowAndBuffer6Bytes(const u8 *, u8 *, u8);
+static void SetTradePartyLiveStatuses(u8);
+static void GetTradePartyHPBarLevels(u8);
+static void SetTradePartyHPBarSprites(void);
+static void SaveTradeGiftRibbons(void);
+static u32 CanTradeSelectedMon(struct Pokemon *, int, int);
static void sub_807AA28(struct Sprite *sprite);
static void sub_807AA7C(struct Sprite *sprite);
static void sub_807AABC(struct Sprite *sprite);
static void sub_807AAE0(struct Sprite *sprite);
static void sub_807AB04(struct Sprite *sprite);
-static void sub_807B170(void);
-static void sub_807B60C(void);
-static void sub_807B62C(u8);
-static void sub_807BA94(void);
-static void SetTradeSceneStrings(void);
-static u8 sub_807BBC8(void);
-static u8 sub_807BBEC(void);
-static u8 sub_807CFC8(void);
+static void InitTradeBgInternal(void);
+static void CB2_UpdateInGameTrade(void);
+static void SetTradeSequenceBgGpuRegs(u8);
+static void LoadTradeSequenceSpriteSheetsAndPalettes(void);
+static void BufferTradeSceneStrings(void);
+static bool8 AnimateTradeSequence(void);
+static bool8 AnimateTradeSequenceCable(void);
+static bool8 AnimateTradeSequenceWireless(void);
static void sub_807E55C(struct Sprite *sprite);
static void sub_807E5D8(struct Sprite *sprite);
static void sub_807E64C(struct Sprite *sprite);
static void sub_807E6AC(struct Sprite *sprite);
-static void sub_807E784(void);
-static void sub_807E974(struct MailStruct *mail, const struct InGameTrade *trade);
-static void sub_807EA2C(void);
-static void sub_807EACC(void);
-static void sub_807EB50(void);
-static void c2_080543C4(void);
-static void sub_807F110(u8);
-static void sub_807F14C(void);
-static void c3_08054588(u8);
+static void BuffeInGameTradeMonName(void);
+static void SetInGameTradeMail(struct MailStruct *mail, const struct InGameTrade *trade);
+static void CB2_UpdateLinkTrade(void);
+static void CB2_TryFinishTrade(void);
+static void CB2_SaveAndEndTrade(void);
+static void CB2_FreeTradeData(void);
+static void Task_InGameTrade(u8);
+static void CheckPartnersMonForRibbons(void);
+static void Task_AnimateWirelessSignal(u8);
static void c3_0805465C(u8);
static void sub_807F39C(u8);
-static void sub_807F464(void);
-
-static const u32 sUnref_0832C6A8[] =
-{
- 0x00000F2C,
- 0x00003D88,
- 0x0000001C,
- 0x00000024,
- 0x00000064,
- 0x00000528
-};
-static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin");
-static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin");
-static const u8 gTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin");
-static const u8 gTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin");
-static const u8 gText_EmptyString7[] = _("");
-static const u8 gText_ClrWhtHltTrspntShdwDrkGry[] = _("{COLOR WHITE}{HIGHLIGHT TRANSPARENT}{SHADOW DARK_GREY}");
-const u8 gText_MaleSymbol4[] = _("♂");
-const u8 gText_FemaleSymbol4[] = _("♀");
-const u8 gText_GenderlessSymbol[] = _("");
-static const u8 gText_SpaceMove[] = _(" MOVE");
-static const u8 gText_NewLine3[] = _("\n");
-static const u8 gText_Slash2[] = _("/");
-static const u8 gText_Lv2[] = _("Lv. ");
-static const u8 gText_ThreeDashes2[] = _("---");
-static const u8 gText_FourQuestionMarks[] = _("????");
-static const u8 gText_832DAE4[] = _("");
-static const u8 gText_IsThisTradeOkay[] = _("Is this trade okay?");
-static const u8 gText_Cancel6[] = _("CANCEL");
-static const u8 gText_ChooseAPkmn[] = _("Choose a POKéMON.");
-static const u8 gText_Summary3[] = _("SUMMARY");
-static const u8 gText_Trade2[] = _("TRADE");
-static const u8 gText_CancelTrade[] = _("Cancel trade?");
-static const u8 gJPText_832DB2E[] = _("Bボタン で もどります");
-static const u8 gText_Summary4[] = _("SUMMARY");
-static const u8 gText_Trade3[] = _("TRADE");
-static const u8 gText_CommunicationStandby6[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Communication standby…\nPlease wait.");
-static const u8 gText_TheTradeHasBeenCanceled[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}The trade has\nbeen canceled.");
-static const u8 gText_YourOnlyPkmnForBattle[] = _("That's your only\nPOKéMON for battle.");
-static const u8 gText_WaitingForYourFriend[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Waiting for your friend\nto finish…");
-static const u8 gText_YourFriendWantsToTrade[] = _("Your friend wants\nto trade POKéMON.");
-
-static const struct OamData gOamData_832DC14 =
-{
- .shape = SPRITE_SHAPE(32x16),
- .size = SPRITE_SIZE(32x16),
- .priority = 1
-};
-
-static const struct OamData gOamData_832DC1C =
-{
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
- .priority = 1
-};
-
-static const union AnimCmd gSpriteAnim_832DC24[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_832DC2C[] =
-{
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const gSpriteAnimTable_832DC34[] =
-{
- gSpriteAnim_832DC24,
- gSpriteAnim_832DC2C
-};
-
-static const struct SpriteSheet gUnknown_0832DC3C =
-{
- .data = gUnknown_08DDC6E4,
- .size = 0x800,
- .tag = 300
-};
-
-static const struct SpritePalette gUnknown_0832DC44 =
-{
- .data = gUnknown_08DDB444,
- .tag = 2345
-};
-
-static const union AnimCmd gSpriteAnim_832DC4C[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_832DC54[] =
-{
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_832DC5C[] =
-{
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_832DC64[] =
-{
- ANIMCMD_FRAME(24, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_832DC6C[] =
-{
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_832DC74[] =
-{
- ANIMCMD_FRAME(40, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const gSpriteAnimTable_832DC7C[] =
-{
- gSpriteAnim_832DC4C,
- gSpriteAnim_832DC54,
- gSpriteAnim_832DC5C,
- gSpriteAnim_832DC64,
- gSpriteAnim_832DC6C,
- gSpriteAnim_832DC74
-};
-
-static const struct SpriteTemplate gSpriteTemplate_832DC94 =
-{
- .tileTag = 300,
- .paletteTag = 2345,
- .oam = &gOamData_832DC1C,
- .anims = gSpriteAnimTable_832DC34,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const struct SpriteTemplate gSpriteTemplate_832DCAC =
-{
- .tileTag = 200,
- .paletteTag = 4925,
- .oam = &gOamData_832DC14,
- .anims = gSpriteAnimTable_832DC7C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal");
-static const struct SpritePalette gSpritePalette_TradeScreenText =
-{
- .data = TradeScreenTextPalette,
- .tag = 4925
-};
-
-// This is used to determine the next mon to select when the D-Pad is
-// pressed in a given direction.
-// Note that the mons are laid out like this.
-// 0-5 are the player's party and 6-11 are the trading partner's party.
-// 12 is the cancel button.
-// 0 1 6 7
-// 2 3 8 9
-// 4 5 10 11
-// 12
-static const u8 gTradeNextSelectedMonTable[][4][6] =
-{
- {
- {4, 2, 12, 12, 0, 0},
- {2, 4, 12, 12, 0, 0},
- {7, 6, 1, 0, 0, 0},
- {1, 6, 7, 0, 0, 0}
- },
- {
- {5, 3, 12, 12, 0, 0},
- {3, 5, 12, 12, 0, 0},
- {0, 7, 6, 1, 0, 0},
- {6, 7, 0, 1, 0, 0}
- },
- {
- {0, 0, 0, 0, 0, 0},
- {4, 0, 0, 0, 0, 0},
- {9, 8, 7, 6, 0, 0},
- {3, 1, 0, 0, 0, 0}
- },
- {
- {1, 1, 1, 1, 0, 0},
- {5, 1, 1, 1, 0, 0},
- {2, 9, 8, 7, 0, 0},
- {8, 9, 6, 6, 0, 0}
- },
- {
- {2, 2, 2, 2, 0, 0},
- {0, 0, 0, 0, 0, 0},
- {11, 10, 9, 8, 7, 6},
- {5, 3, 1, 0, 0, 0}
- },
- {
- {3, 3, 3, 3, 0, 0},
- {1, 1, 1, 1, 0, 0},
- {4, 4, 4, 4, 0, 0},
- {10, 8, 6, 0, 0, 0}
- },
- {
- {10, 8, 12, 0, 0, 0},
- {8, 10, 12, 0, 0, 0},
- {1, 0, 0, 0, 0, 0},
- {7, 0, 1, 0, 0, 0}
- },
- {
- {12, 0, 0, 0, 0, 0},
- {9, 12, 0, 0, 0, 0},
- {6, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0}
- },
- {
- {6, 0, 0, 0, 0, 0},
- {10, 6, 0, 0, 0, 0},
- {3, 2, 1, 0, 0, 0},
- {9, 7, 0, 0, 0, 0}
- },
- {
- {7, 0, 0, 0, 0, 0},
- {11, 12, 0, 0, 0, 0},
- {8, 0, 0, 0, 0, 0},
- {2, 1, 0, 0, 0, 0}
- },
- {
- {8, 0, 0, 0, 0, 0},
- {6, 0, 0, 0, 0, 0},
- {5, 4, 3, 2, 1, 0},
- {11, 9, 7, 0, 0, 0}
- },
- {
- {9, 0, 0, 0, 0, 0},
- {12, 0, 0, 0, 0, 0},
- {10, 0, 0, 0, 0, 0},
- {4, 2, 0, 0, 0, 0}
- },
- {
- {11, 9, 7, 6, 0, 0},
- {7, 6, 0, 0, 0, 0},
- {12, 0, 0, 0, 0, 0},
- {12, 0, 0, 0, 0, 0}
- }
-};
-
-static const u8 gTradeMonSpriteCoords[][2] =
-{
- // Your party
- {1, 5 },
- {8, 5 },
- {1, 10},
- {8, 10},
- {1, 15},
- {8, 15},
-
- // Friend's party
- {16, 5 },
- {23, 5 },
- {16, 10},
- {23, 10},
- {16, 15},
- {23, 15},
-
- {23, 18} // CANCEL
-};
-
-static const u8 gTradeLevelDisplayCoords[][6][2] =
-{
- {
- // Your party
- {5, 4},
- {12, 4},
- {5, 9},
- {12, 9},
- {5, 14},
- {12, 14},
- },
- {
- // Friend's party
- {20, 4},
- {27, 4},
- {20, 9},
- {27, 9},
- {20, 14},
- {27, 14}
- }
-};
-
-static const u8 gTradeMonBoxCoords[][6][2] =
-{
- {
- // Your party
- {1, 3},
- {8, 3},
- {1, 8},
- {8, 8},
- {1, 13},
- {8, 13},
- },
- {
- // Friend's party
- {16, 3},
- {23, 3},
- {16, 8},
- {23, 8},
- {16, 13},
- {23, 13}
- }
-};
-
-static const u8 sUnref_0832DE6E[] =
-{
- 0x00, 0x0e,
- 0x0f, 0x1d,
- 0x03, 0x05,
- 0x03, 0x07,
- 0x12, 0x05,
- 0x12, 0x07,
- 0x08, 0x07,
- 0x16, 0x0c,
- 0x08, 0x07,
- 0x16, 0x0c,
- 0x06, 0x07,
- 0x18, 0x0c,
- 0x06, 0x07,
- 0x18, 0x0c,
- 0x08, 0x07,
- 0x16, 0x0c,
- 0x07, 0x07,
- 0x17, 0x0c
-};
-
-static const u8 *const gUnknown_0832DE94[] =
-{
- gText_Cancel6,
- gText_ChooseAPkmn,
- gText_Summary3,
- gText_Trade2,
- gText_CancelTrade,
- gJPText_832DB2E
-};
-
-static const struct MenuAction gUnknown_0832DEAC[] =
-{
- {gText_Summary4, sub_807A000},
- {gText_Trade3, sub_807A024}
-};
-
-static const u8 *const gUnknown_0832DEBC[] = {
- gText_CommunicationStandby6,
- gText_TheTradeHasBeenCanceled,
- gText_YourOnlyPkmnForBattle,
- gText_OnlyPkmnForBattle,
- gText_WaitingForYourFriend,
- gText_YourFriendWantsToTrade,
- gText_PkmnCantBeTradedNow,
- gText_EggCantBeTradedNow,
- gText_OtherTrainersPkmnCantBeTraded
-};
-
-static const u8 gUnknown_0832DEE0[] = { 0, 1, 2 };
-
-static const struct BgTemplate gUnknown_0832DEE4[] =
-{
- {
- .bg = 0,
- .charBaseIndex = 2,
- .mapBaseIndex = 31,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 0,
- .baseTile = 0
- },
- {
- .bg = 1,
- .charBaseIndex = 0,
- .mapBaseIndex = 5,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 1,
- .baseTile = 0
- },
- {
- .bg = 2,
- .charBaseIndex = 0,
- .mapBaseIndex = 6,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 2,
- .baseTile = 0
- },
- {
- .bg = 3,
- .charBaseIndex = 0,
- .mapBaseIndex = 7,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 3,
- .baseTile = 0
- },
-};
-
-static const struct WindowTemplate gUnknown_0832DEF4[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 4,
- .tilemapTop = 7,
- .width = 22,
- .height = 4,
- .paletteNum = 15,
- .baseBlock = 30
- },
- {
- .bg = 0,
- .tilemapLeft = 19,
- .tilemapTop = 15,
- .width = 10,
- .height = 4,
- .paletteNum = 15,
- .baseBlock = 118
- },
- {
- .bg = 0,
- .tilemapLeft = 0,
- .tilemapTop = 5,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 158
- },
- {
- .bg = 0,
- .tilemapLeft = 7,
- .tilemapTop = 5,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 174
- },
- {
- .bg = 0,
- .tilemapLeft = 0,
- .tilemapTop = 10,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 190
- },
- {
- .bg = 0,
- .tilemapLeft = 7,
- .tilemapTop = 10,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 206
- },
- {
- .bg = 0,
- .tilemapLeft = 0,
- .tilemapTop = 15,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 222
- },
- {
- .bg = 0,
- .tilemapLeft = 7,
- .tilemapTop = 15,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 238
- },
- {
- .bg = 0,
- .tilemapLeft = 15,
- .tilemapTop = 5,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 254
- },
- {
- .bg = 0,
- .tilemapLeft = 22,
- .tilemapTop = 5,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 270
- },
- {
- .bg = 0,
- .tilemapLeft = 15,
- .tilemapTop = 10,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 286
- },
- {
- .bg = 0,
- .tilemapLeft = 22,
- .tilemapTop = 10,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 302
- },
- {
- .bg = 0,
- .tilemapLeft = 15,
- .tilemapTop = 15,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 318
- },
- {
- .bg = 0,
- .tilemapLeft = 22,
- .tilemapTop = 15,
- .width = 8,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 334
- },
- {
- .bg = 0,
- .tilemapLeft = 2,
- .tilemapTop = 5,
- .width = 14,
- .height = 2,
- .paletteNum = 13,
- .baseBlock = 350
- },
- {
- .bg = 0,
- .tilemapLeft = 3,
- .tilemapTop = 8,
- .width = 11,
- .height = 8,
- .paletteNum = 15,
- .baseBlock = 378
- },
- {
- .bg = 0,
- .tilemapLeft = 17,
- .tilemapTop = 5,
- .width = 14,
- .height = 2,
- .paletteNum = 15,
- .baseBlock = 466
- },
- {
- .bg = 0,
- .tilemapLeft = 18,
- .tilemapTop = 8,
- .width = 11,
- .height = 8,
- .paletteNum = 15,
- .baseBlock = 494
- },
- DUMMY_WIN_TEMPLATE,
-};
-
-static const struct WindowTemplate gUnknown_0832DF8C =
-{
- .bg = 0,
- .tilemapLeft = 23,
- .tilemapTop = 13,
- .width = 5,
- .height = 4,
- .paletteNum = 15,
- .baseBlock = 582
-};
-
-static const u8 gJPText_Shedinja[] = _("ヌケニン");
-static const u8 gUnknown_0832DF99[][2] =
-{
- {4, 3},
- {19, 3},
- {0, 0}
-};
-
-static const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal");
-static const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp");
-static const u8 gUnknown_832E5C0[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp");
-static const u16 gUnknown_0832FFC0[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin");
-static const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin");
-static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal");
-static const u16 gUnknown_083308E0[] = INCBIN_U16("graphics/trade/gba.gbapal");
-static const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal");
-static const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal");
-static const u16 gUnknown_08330940[] = INCBIN_U16("graphics/trade/misc.gbapal");
-static const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp");
-static const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp");
-static const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp");
-static const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp");
-const u16 gUnknown_08331F60[] = INCBIN_U16("graphics/trade/shadow_map.bin");
-static const u8 gUnknown_08332F60[] = INCBIN_U8("graphics/trade/gba_affine.8bpp");
-static const u8 sFiller_08335760[64] = {};
-static const u8 gUnknown_083357A0[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin");
-static const u8 gUnknown_083358A0[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin");
-static const u16 gUnknown_083359A0[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin");
-static const u16 gUnknown_083369A0[] = INCBIN_U16("graphics/trade/gba_map_cable.bin");
-static const u32 gUnknown_083379A0[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz");
-static const u16 gUnknown_08337AA0[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal");
-static const u16 gUnknown_08337CA0[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal");
-static const u16 gUnknown_08337EA0[] = INCBIN_U16("graphics/trade/black.gbapal");
-static const u32 gUnknown_08337EC0[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz");
-static const u32 gUnknown_08338550[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz");
-
-static const struct OamData gOamData_8338C44 =
-{
- .affineMode = 1,
- .shape = SPRITE_SHAPE(16x16),
- .size = SPRITE_SIZE(16x16)
-};
-
-static const union AnimCmd gSpriteAnim_8338C4C[] =
-{
- ANIMCMD_FRAME( 0, 3),
- ANIMCMD_FRAME( 4, 3),
- ANIMCMD_FRAME( 8, 3),
- ANIMCMD_FRAME(12, 3),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(20, 3),
- ANIMCMD_FRAME(24, 3),
- ANIMCMD_FRAME(28, 3),
- ANIMCMD_FRAME(32, 3),
- ANIMCMD_FRAME(36, 3),
- ANIMCMD_FRAME(40, 3),
- ANIMCMD_FRAME(44, 3),
- ANIMCMD_LOOP(1),
- ANIMCMD_FRAME( 0, 3),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_8338C88[] =
-{
- ANIMCMD_FRAME( 0, 3),
- ANIMCMD_FRAME( 4, 3),
- ANIMCMD_FRAME( 8, 3),
- ANIMCMD_FRAME(12, 3),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(20, 3),
- ANIMCMD_FRAME(24, 3),
- ANIMCMD_FRAME(28, 3),
- ANIMCMD_FRAME(32, 3),
- ANIMCMD_FRAME(36, 3),
- ANIMCMD_FRAME(40, 3),
- ANIMCMD_FRAME(44, 3),
- ANIMCMD_LOOP(2),
- ANIMCMD_FRAME( 0, 3),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const gSpriteAnimTable_8338C88[] =
-{
- gSpriteAnim_8338C4C,
- gSpriteAnim_8338C88
-};
-
-static const union AffineAnimCmd gSpriteAffineAnim_8338CCC[] =
-{
- AFFINEANIMCMD_FRAME(0, 0, 0, 1),
- AFFINEANIMCMD_END
-};
+static void CB2_SaveAndEndWirelessTrade(void);
-static const union AffineAnimCmd gSpriteAffineAnim_8338CDC[] =
-{
- AFFINEANIMCMD_FRAME(-8, 0, 0, 20),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd gSpriteAffineAnim_8338CEC[] =
-{
- AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME( 0, 0, 0, 5),
- AFFINEANIMCMD_FRAME( 8, 0, 0, 20),
- AFFINEANIMCMD_END
-};
-
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D0C[] =
-{
- gSpriteAffineAnim_8338CCC,
- gSpriteAffineAnim_8338CDC,
- gSpriteAffineAnim_8338CEC
-};
-
-static const struct SpriteSheet gUnknown_08338D18 =
-{
- .data = gTradeBallTiles,
- .size = 0x600,
- .tag = 5557
-};
-
-static const struct SpritePalette gUnknown_08338D20 =
-{
- .data = gTradeBallPalette,
- .tag = 5558
-};
-
-static const struct SpriteTemplate gSpriteTemplate_8338D28 =
-{
- .tileTag = 5557,
- .paletteTag = 5558,
- .oam = &gOamData_8338C44,
- .anims = gSpriteAnimTable_8338C88,
- .images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8338D0C,
- .callback = sub_807E55C
-};
-
-static const struct OamData gOamData_8338D40 =
-{
- .affineMode = 1,
- .objMode = 1,
- .shape = SPRITE_SHAPE(32x32),
- .size = SPRITE_SIZE(32x32),
- .priority = 1
-};
-
-static const union AnimCmd gSpriteAnim_8338D48[] =
-{
- ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const gSpriteAnimTable_8338D50[] =
-{
- gSpriteAnim_8338D48
-};
-
-static const union AffineAnimCmd gSpriteAffineAnim_8338D54[] =
-{
- AFFINEANIMCMD_FRAME(-10, -10, 0, 5),
- AFFINEANIMCMD_FRAME(10, 10, 0, 5),
- AFFINEANIMCMD_JUMP(0)
-};
-
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D6C[] =
-{
- gSpriteAffineAnim_8338D54
-};
-
-static const struct SpriteSheet gUnknown_08338D70 =
-{
- .data = gTradeGlow1Tiles,
- .size = 0x200,
- .tag = 5550
-};
-
-static const struct SpritePalette gUnknown_08338D78 =
-{
- .data = gUnknown_08330940,
- .tag = 5551
-};
-
-static const struct SpritePalette gUnknown_08338D80 =
-{
- .data = gUnknown_083308E0,
- .tag = 5555
-};
-
-static const struct SpriteTemplate gUnknown_08338D88 =
-{
- .tileTag = 5550,
- .paletteTag = 5551,
- .oam = &gOamData_8338D40,
- .anims = gSpriteAnimTable_8338D50,
- .images = NULL,
- .affineAnims = gSpriteAffineAnimTable_8338D6C,
- .callback = sub_807AA28
-};
-
-static const struct OamData gOamData_8338DA0 =
-{
- .shape = SPRITE_SHAPE(16x32),
- .size = SPRITE_SIZE(16x32),
- .priority = 1
-};
-
-static const union AnimCmd gSpriteAnim_8338DA8[] =
-{
- ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_8338DB0[] =
-{
- ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_END
-};
+#include "data/trade.h"
-static const union AnimCmd *const gSpriteAnimTable_8338DB8[] =
-{
- gSpriteAnim_8338DA8,
- gSpriteAnim_8338DB0
-};
-
-static const struct SpriteSheet gUnknown_08338DC0 =
-{
- .data = gTradeGlow2Tiles,
- .size = 0x300,
- .tag = 5552
-};
-
-static const struct SpriteTemplate gSpriteTemplate_8338DC8 =
-{
- .tileTag = 5552,
- .paletteTag = 5551,
- .oam = &gOamData_8338DA0,
- .anims = gSpriteAnimTable_8338DB8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807AA7C
-};
-
-static const struct OamData gOamData_8338DE0 =
-{
- .shape = SPRITE_SHAPE(16x32),
- .size = SPRITE_SIZE(16x32),
- .priority = 1
-};
-
-static const union AnimCmd gSpriteAnim_8338DE8[] =
-{
- ANIMCMD_FRAME(0, 10),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const gSpriteAnimTable_8338DF0[] =
-{
- gSpriteAnim_8338DE8
-};
-
-static const struct SpriteSheet gUnknown_08338DF4 =
-{
- .data = gTradeCableEndTiles,
- .size = 0x100,
- .tag = 5554
-};
-
-static const struct SpriteTemplate gSpriteTemplate_8338DFC =
-{
- .tileTag = 5554,
- .paletteTag = 5555,
- .oam = &gOamData_8338DE0,
- .anims = gSpriteAnimTable_8338DF0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807AABC
-};
-
-static const struct OamData gOamData_8338E14 =
-{
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
- .priority = 1
-};
-
-static const union AnimCmd gSpriteAnim_8338E1C[] =
-{
- ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_LOOP(8),
- ANIMCMD_END
-};
-
-static const union AnimCmd gSpriteAnim_8338E40[] =
-{
- ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_LOOP(2),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const gSpriteAnimTable_8338E64[] =
-{
- gSpriteAnim_8338E1C
-};
-
-static const union AnimCmd *const gSpriteAnimTable_8338E68[] =
-{
- gSpriteAnim_8338E40
-};
-
-static const struct SpriteSheet gUnknown_08338E6C =
-{
- .data = gTradeGBAScreenTiles,
- .size = 0x1000,
- .tag = 5556
-};
-
-static const struct SpriteTemplate gSpriteTemplate_8338E74 =
-{
- .tileTag = 5556,
- .paletteTag = 5555,
- .oam = &gOamData_8338E14,
- .anims = gSpriteAnimTable_8338E64,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807AB04
-};
-
-static const struct SpriteTemplate gSpriteTemplate_8338E8C =
-{
- .tileTag = 5556,
- .paletteTag = 5555,
- .oam = &gOamData_8338E14,
- .anims = gSpriteAnimTable_8338E68,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807AB04
-};
-
-static const u16 gUnknown_08338EA4[] = INCBIN_U16("graphics/trade/unknown_338EA4.gbapal");
-
-static const union AffineAnimCmd gSpriteAffineAnim_8338EBC[] =
-{
- AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
- AFFINEANIMCMD_JUMP(0)
-};
-
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338ECC[] =
-{
- gSpriteAffineAnim_8338EBC
-};
-
-static const struct InGameTrade gIngameTrades[] =
-{
- {
- _("DOTS"), SPECIES_SEEDOT,
- 5, 4, 5, 4, 4, 4,
- TRUE, 38726,
- 30, 5, 5, 5, 5,
- 0x84,
- ITEM_CHESTO_BERRY, -1,
- _("KOBE"), MALE, 10,
- SPECIES_RALTS
- }, {
- _("PLUSES"), SPECIES_PLUSLE,
- 4, 4, 4, 5, 5, 4,
- FALSE, 73996,
- 5, 5, 30, 5, 5,
- 0x6F,
- ITEM_WOOD_MAIL, 0,
- _("ROMAN"), MALE, 10,
- SPECIES_VOLBEAT
- }, {
- _("SEASOR"),
- SPECIES_HORSEA,
- 5, 4, 4, 4, 5, 4,
- FALSE, 46285,
- 5, 5, 5, 5, 30,
- 0x7F,
- ITEM_WAVE_MAIL, 1,
- _("SKYLAR"), MALE, 10,
- SPECIES_BAGON
- }, {
- _("MEOWOW"),
- SPECIES_MEOWTH,
- 4, 5, 4, 5, 4, 4,
- FALSE, 91481,
- 5, 5, 5, 30, 5,
- 0x8B,
- ITEM_RETRO_MAIL, 2,
- _("ISIS"), FEMALE, 10,
- SPECIES_SKITTY
- }
-};
-
-static const u16 gIngameTradeMail[][10] =
-{
- {
- EC_WORD_BE,
- EC_WORD_NICE,
- EC_WORD_TO,
- EC_POKEMON(PLUSLE),
- EC_WORD_EXCL,
- EC_POKEMON(VOLBEAT),
- EC_WORD_WILL,
- EC_WORD_BE,
- EC_WORD_FANTASTIC,
- 0
- }, {
- EC_WORD_I,
- EC_WORD_WILL,
- EC_WORD_MAKE,
- EC_POKEMON(BAGON),
- EC_WORD_TOUGH,
- EC_WORD_PLEASE,
- EC_WORD_TRAIN,
- EC_POKEMON(HORSEA),
- EC_WORD_WELL,
- 0
- }, {
- EC_WORD_THANK_YOU,
- EC_WORD_FOR,
- EC_POKEMON(SKITTY),
- EC_POKEMON2(MEOWTH),
- EC_WORD_CRIES,
- EC_WORD_IN,
- EC_WORD_A,
- EC_WORD_CUTE,
- EC_WORD_WAY,
- 0
- }
-};
-
-static const struct WindowTemplate gUnknown_08338FFC[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 2,
- .tilemapTop = 15,
- .width = 26,
- .height = 4,
- .paletteNum = 0,
- .baseBlock = 64
- },
- DUMMY_WIN_TEMPLATE
-};
-
-const struct WindowTemplate gUnknown_0833900C =
-{
- .bg = 0,
- .tilemapLeft = 21,
- .tilemapTop = 9,
- .width = 5,
- .height = 4,
- .paletteNum = 15,
- .baseBlock = 188
-};
-
-static const struct BgTemplate gUnknown_08339014[] =
-{
- {
- .bg = 0,
- .charBaseIndex = 3,
- .mapBaseIndex = 31,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 0,
- .baseTile = 0
- },
- {
- .bg = 1,
- .charBaseIndex = 0,
- .mapBaseIndex = 5,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 2,
- .baseTile = 0
- },
- {
- .bg = 2,
- .charBaseIndex = 1,
- .mapBaseIndex = 18,
- .screenSize = 1,
- .paletteMode = 0,
- .priority = 2,
- .baseTile = 0
- },
- {
- .bg = 3,
- .charBaseIndex = 0,
- .mapBaseIndex = 6,
- .screenSize = 0,
- .paletteMode = 0,
- .priority = 3,
- .baseTile = 0
- },
-};
-
-static const s8 gTradeBallVerticalVelocityTable[] =
-{
- 0, 0, 1, 0,
- 1, 0, 1, 1,
- 1, 1, 2, 2,
- 2, 2, 3, 3,
- 3, 3, 4, 4,
- 4, 4, -4, -4,
- -4, -3, -3, -3,
- -3, -2, -2, -2,
- -2, -1, -1, -1,
- -1, 0, -1, 0,
- -1, 0, 0, 0,
- 0, 0, 1, 0,
- 1, 0, 1, 1,
- 1, 1, 2, 2,
- 2, 2, 3, 3,
- 3, 3, 4, 4,
- 4, 4, -4, -3,
- -3, -2, -2, -1,
- -1, -1, 0, -1,
- 0, 0, 0, 0,
- 0, 0, 1, 0,
- 1, 1, 1, 2,
- 2, 3, 3, 4,
- -4, -3, -2, -1,
- -1, -1, 0, 0,
- 0, 0, 1, 0,
- 1, 1, 2, 3
-};
-
-static const u8 gUnknown_08339090[][2] =
-{
- {0, 1},
- {1, 1},
- {2, 1},
- {3, 1},
- {4, 1},
- {5, 2},
- {6, 2},
- {7, 2},
- {8, 2},
- {9, 2},
- {10, 3},
- {11, 3},
- {12, 3},
- {13, 4},
- {14, 5},
- {15, 2},
- {0, 1},
- {1, 1},
- {2, 1},
- {3, 1},
- {4, 1},
- {5, 2},
- {6, 2},
- {7, 2},
- {8, 2},
- {9, 2},
- {10, 3},
- {11, 3},
- {12, 3},
- {13, 4},
- {14, 5},
- {16, 1},
- {16, -1},
- {0, 0}
-};
-
-static bool8 sub_8077170(const void *a0, u32 a1)
+static bool8 SendLinkData(const void *linkData, u32 size)
{
if (gUnknown_02022C2C == 29)
{
- rfu_NI_setSendData(gUnknown_03004140.unk_00, 84, a0, a1);
+ rfu_NI_setSendData(gUnknown_03004140.unk_00, 84, linkData, size);
return TRUE;
}
else
{
- return SendBlock(0, a0, a1);
+ return SendBlock(0, linkData, size);
}
}
@@ -1410,13 +255,9 @@ static bool32 sub_80771BC(void)
if (gUnknown_02022C2C == 29)
{
if (gUnknown_03007880[sub_800E87C(gUnknown_03004140.unk_00)]->unk_0 == 0)
- {
return TRUE;
- }
else
- {
return FALSE;
- }
}
else
{
@@ -1429,40 +270,28 @@ static u32 _GetBlockReceivedStatus(void)
return GetBlockReceivedStatus();
}
-static void sub_8077210(void)
+static void TradeResetReceivedFlags(void)
{
- if (sub_8077260())
- {
+ if (IsWirelessTrade())
rfu_clearSlot(12, gUnknown_03004140.unk_00);
- }
else
- {
ResetBlockReceivedFlags();
- }
}
-static void sub_8077234(u32 a0)
+static void TradeResetReceivedFlag(u32 who)
{
- if (sub_8077260())
- {
+ if (IsWirelessTrade())
rfu_clearSlot(12, gUnknown_03004140.unk_00);
- }
else
- {
- ResetBlockReceivedFlag(a0);
- }
+ ResetBlockReceivedFlag(who);
}
-static bool32 sub_8077260(void)
+static bool32 IsWirelessTrade(void)
{
if (gWirelessCommType && gUnknown_02022C2C == 29)
- {
return TRUE;
- }
else
- {
return FALSE;
- }
}
static void sub_8077288(u8 unused)
@@ -1475,7 +304,7 @@ static bool32 _IsLinkTaskFinished(void)
return IsLinkTaskFinished();
}
-static void sub_80772A4(void)
+static void InitTradeMenu(void)
{
ResetSpriteData();
FreeAllSpritePalettes();
@@ -1484,14 +313,14 @@ static void sub_80772A4(void)
gPaletteFade.bufferTransferDisabled = TRUE;
- SetVBlankCallback(sub_807811C);
+ SetVBlankCallback(VBlankCB_TradeMenu);
LoadPalette(gUnknown_0860F074, 0xF0, 20);
LoadPalette(gUnknown_0860F074, 0xD0, 20);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0832DEE4, ARRAY_COUNT(gUnknown_0832DEE4));
- SetBgTilemapBuffer(1, gUnknown_0203229C->tilemapBuffer);
+ InitBgsFromTemplates(0, sTradeMenuBgTemplates, ARRAY_COUNT(sTradeMenuBgTemplates));
+ SetBgTilemapBuffer(1, sTradeMenuData->tilemapBuffer);
- if (InitWindows(gUnknown_0832DEF4))
+ if (InitWindows(sTradeMenuWindowTemplates))
{
u32 i;
@@ -1507,25 +336,25 @@ static void sub_80772A4(void)
LoadUserWindowBorderGfx_(0, 20, 0xC0);
LoadUserWindowBorderGfx(2, 1, 0xE0);
LoadMonIconPalettes();
- gUnknown_0203229C->unk_69 = 0;
- gUnknown_0203229C->unk_6F = 0;
- gUnknown_0203229C->unk_70 = 0;
- gUnknown_0203229C->unk_74[0] = 0;
- gUnknown_0203229C->unk_74[1] = 0;
- gUnknown_0203229C->unk_7A = 0;
- gUnknown_0203229C->unk_7B = 0;
- gUnknown_0203229C->unk_A8 = 0;
+ sTradeMenuData->bufferPartyState = 0;
+ sTradeMenuData->tradeMenuFunc = 0;
+ sTradeMenuData->neverRead_70 = 0;
+ sTradeMenuData->drawPartyState[TRADE_PLAYER] = 0;
+ sTradeMenuData->drawPartyState[TRADE_PARTNER] = 0;
+ sTradeMenuData->playerLinkFlagStatus = 0;
+ sTradeMenuData->partnerLinkFlagStatus = 0;
+ sTradeMenuData->timer = 0;
}
}
-void sub_80773AC(void)
+void CB2_StartCreateTradeMenu(void)
{
- SetMainCallback2(sub_80773D0);
+ SetMainCallback2(CB2_CreateTradeMenu);
gMain.callback1 = NULL;
gEnemyPartyCount = 0;
}
-static void sub_80773D0(void)
+static void CB2_CreateTradeMenu(void)
{
int i;
struct SpriteTemplate temp;
@@ -1535,13 +364,13 @@ static void sub_80773D0(void)
switch (gMain.state)
{
case 0:
- gUnknown_0203229C = AllocZeroed(sizeof(*gUnknown_0203229C));
- sub_80772A4();
- gUnknown_02032184 = AllocZeroed(0xE00);
+ sTradeMenuData = AllocZeroed(sizeof(*sTradeMenuData));
+ InitTradeMenu();
+ sMessageBoxAllocBuffer = AllocZeroed(ARRAY_COUNT(sMessageBoxTileBuffers) * 256);
- for (i = 0; i < 14; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sMessageBoxTileBuffers); i++)
{
- gUnknown_02032188[i] = &gUnknown_02032184[i * 256];
+ sMessageBoxTileBuffers[i] = &sMessageBoxAllocBuffer[i * 256];
}
gMain.state++;
@@ -1551,16 +380,16 @@ static void sub_80773D0(void)
for (i = 0; i < PARTY_SIZE; i++)
{
- CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0);
+ CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 32, FALSE, 0, OT_ID_PLAYER_ID, 0);
}
- sub_807A19C(0);
+ PrintTradeMessage(TRADE_MSG_STANDBY);
ShowBg(0);
if (!gReceivedRemoteLinkPlayers)
{
- gLinkType = 0x1122;
- gUnknown_0203229C->unk_A8 = 0;
+ gLinkType = LINKTYPE_0x1122;
+ sTradeMenuData->timer = 0;
if (gWirelessCommType)
{
@@ -1581,10 +410,10 @@ static void sub_80773D0(void)
}
break;
case 2:
- gUnknown_0203229C->unk_A8++;
- if (gUnknown_0203229C->unk_A8 > 11)
+ sTradeMenuData->timer++;
+ if (sTradeMenuData->timer > 11)
{
- gUnknown_0203229C->unk_A8 = 0;
+ sTradeMenuData->timer = 0;
gMain.state++;
}
break;
@@ -1593,7 +422,7 @@ static void sub_80773D0(void)
{
if (IsLinkMaster())
{
- if (++gUnknown_0203229C->unk_A8 > 30)
+ if (++sTradeMenuData->timer > 30)
{
CheckShouldAdvanceLinkState();
gMain.state++;
@@ -1611,7 +440,7 @@ static void sub_80773D0(void)
sub_8011BD0();
CalculatePlayerPartyCount();
gMain.state++;
- gUnknown_0203229C->unk_A8 = 0;
+ sTradeMenuData->timer = 0;
if (gWirelessCommType)
{
sub_801048C(TRUE);
@@ -1622,7 +451,7 @@ static void sub_80773D0(void)
case 5:
if (gWirelessCommType)
{
- if (sub_8010500())
+ if (IsLinkRfuTaskFinished())
{
gMain.state++;
LoadWirelessStatusIndicatorSpriteGfx();
@@ -1635,9 +464,9 @@ static void sub_80773D0(void)
}
break;
case 6:
- if (shedinja_maker_maybe())
+ if (BufferTradeParties())
{
- sub_807A5B0();
+ SaveTradeGiftRibbons();
gMain.state++;
}
break;
@@ -1645,28 +474,28 @@ static void sub_80773D0(void)
CalculateEnemyPartyCount();
SetGpuReg(REG_OFFSET_DISPCNT, 0);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
- gUnknown_0203229C->partyCounts[0] = gPlayerPartyCount;
- gUnknown_0203229C->partyCounts[1] = gEnemyPartyCount;
+ sTradeMenuData->partyCounts[TRADE_PLAYER] = gPlayerPartyCount;
+ sTradeMenuData->partyCounts[TRADE_PARTNER] = gEnemyPartyCount;
- for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++)
{
struct Pokemon *mon = &gPlayerParty[i];
- gUnknown_0203229C->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2),
- sub_80D3014,
- (gTradeMonSpriteCoords[i][0] * 8) + 14,
- (gTradeMonSpriteCoords[i][1] * 8) - 12,
+ sTradeMenuData->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2),
+ SpriteCB_MonIcon,
+ (sTradeMonSpriteCoords[i][0] * 8) + 14,
+ (sTradeMonSpriteCoords[i][1] * 8) - 12,
1,
GetMonData(mon, MON_DATA_PERSONALITY),
TRUE);
}
- for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++)
{
struct Pokemon *mon = &gEnemyParty[i];
- gUnknown_0203229C->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
- sub_80D3014,
- (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14,
- (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12,
+ sTradeMenuData->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
+ SpriteCB_MonIcon,
+ (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14,
+ (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12,
1,
GetMonData(mon, MON_DATA_PERSONALITY),
FALSE);
@@ -1675,24 +504,24 @@ static void sub_80773D0(void)
break;
case 8:
LoadHeldItemIcons();
- sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 0);
+ DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PLAYER);
gMain.state++;
break;
case 9:
- sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 1);
+ DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PARTNER);
gMain.state++;
break;
case 10:
- sub_80C6D80(gSaveBlock2Ptr->playerName, gUnknown_02032188[0], 0, 0, 3);
+ DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMessageBoxTileBuffers[0], 0, 0, 3);
id = GetMultiplayerId();
- sub_80C6D80(gLinkPlayers[id ^ 1].name, gUnknown_02032188[3], 0, 0, 3);
- sub_80C6D80(gUnknown_0832DE94[0], gUnknown_02032188[6], 0, 0, 2);
- sub_807A308(gUnknown_0832DE94[1], gUnknown_02032188[8], 24);
+ DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMessageBoxTileBuffers[3], 0, 0, 3);
+ DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMessageBoxTileBuffers[6], 0, 0, 2);
+ DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMessageBoxTileBuffers[8], 24);
gMain.state++;
- gUnknown_0203229C->unk_A8 = 0;
+ sTradeMenuData->timer = 0;
break;
case 11:
- if (sub_807A1F0())
+ if (LoadTradeMenuSpriteSheetsAndPalettes())
gMain.state++;
break;
case 12:
@@ -1728,31 +557,31 @@ static void sub_80773D0(void)
CreateSprite(&temp, (i * 32) + 24, 150, 1);
}
- gUnknown_0203229C->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2);
- gUnknown_0203229C->tradeMenuCursorPosition = 0;
+ sTradeMenuData->cursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2);
+ sTradeMenuData->cursorPosition = 0;
gMain.state++;
rbox_fill_rectangle(0);
break;
case 14:
- sub_807A320(0);
- sub_8079BE0(0);
- gUnknown_0203229C->unk_0 = 0;
- gUnknown_0203229C->unk_1 = 0;
- sub_8078388();
+ SetTradePartyLiveStatuses(TRADE_PLAYER);
+ PrintPartyNicknamesForTradeMenu(TRADE_PLAYER);
+ sTradeMenuData->bg2hofs = 0;
+ sTradeMenuData->bg3hofs = 0;
+ SetTradePartyMonsVisible();
gMain.state++;
PlayBGM(MUS_P_SCHOOL);
break;
case 15:
- sub_807A320(1);
- sub_8079BE0(1);
+ SetTradePartyLiveStatuses(TRADE_PARTNER);
+ PrintPartyNicknamesForTradeMenu(TRADE_PARTNER);
gMain.state++;
// fallthrough
case 16:
- sub_80782B8(0);
+ LoadTradeBgGfx(0);
gMain.state++;
break;
case 17:
- sub_80782B8(1);
+ LoadTradeBgGfx(1);
gMain.state++;
break;
case 18:
@@ -1761,23 +590,23 @@ static void sub_80773D0(void)
break;
case 19:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
- sub_80782B8(2);
+ LoadTradeBgGfx(2);
gMain.state++;
break;
case 20:
- sub_807A468(0);
+ GetTradePartyHPBarLevels(TRADE_PLAYER);
gMain.state++;
break;
case 21:
- sub_807A468(1);
- sub_807A53C();
+ GetTradePartyHPBarLevels(TRADE_PARTNER);
+ SetTradePartyHPBarSprites();
gMain.state++;
break;
case 22:
if (!gPaletteFade.active)
{
- gMain.callback1 = sub_8078C34;
- SetMainCallback2(sub_807825C);
+ gMain.callback1 = CB1_SendOrReactToLinkTradeData;
+ SetMainCallback2(CB2_TradeMenu);
}
break;
}
@@ -1789,7 +618,7 @@ static void sub_80773D0(void)
UpdatePaletteFade();
}
-static void sub_8077B74(void)
+static void CB2_ReturnToTradeMenu(void)
{
int i;
struct SpriteTemplate temp;
@@ -1799,12 +628,12 @@ static void sub_8077B74(void)
switch (gMain.state)
{
case 0:
- sub_80772A4();
+ InitTradeMenu();
gMain.state++;
break;
case 1:
gMain.state++;
- gUnknown_0203229C->unk_A8 = 0;
+ sTradeMenuData->timer = 0;
break;
case 2:
gMain.state++;
@@ -1829,31 +658,31 @@ static void sub_8077B74(void)
break;
case 7:
CalculateEnemyPartyCount();
- gUnknown_0203229C->partyCounts[0] = gPlayerPartyCount;
- gUnknown_0203229C->partyCounts[1] = gEnemyPartyCount;
+ sTradeMenuData->partyCounts[TRADE_PLAYER] = gPlayerPartyCount;
+ sTradeMenuData->partyCounts[TRADE_PARTNER] = gEnemyPartyCount;
ClearWindowTilemap(0);
- sub_8079BE0(0);
- sub_8079BE0(1);
+ PrintPartyNicknamesForTradeMenu(TRADE_PLAYER);
+ PrintPartyNicknamesForTradeMenu(TRADE_PARTNER);
- for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++)
{
struct Pokemon *mon = &gPlayerParty[i];
- gUnknown_0203229C->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
- sub_80D3014,
- (gTradeMonSpriteCoords[i][0] * 8) + 14,
- (gTradeMonSpriteCoords[i][1] * 8) - 12,
+ sTradeMenuData->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
+ SpriteCB_MonIcon,
+ (sTradeMonSpriteCoords[i][0] * 8) + 14,
+ (sTradeMonSpriteCoords[i][1] * 8) - 12,
1,
GetMonData(mon, MON_DATA_PERSONALITY),
TRUE);
}
- for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++)
{
struct Pokemon *mon = &gEnemyParty[i];
- gUnknown_0203229C->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
- sub_80D3014,
- (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14,
- (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12,
+ sTradeMenuData->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL),
+ SpriteCB_MonIcon,
+ (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14,
+ (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12,
1,
GetMonData(mon, MON_DATA_PERSONALITY),
FALSE);
@@ -1862,24 +691,24 @@ static void sub_8077B74(void)
break;
case 8:
LoadHeldItemIcons();
- sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 0);
+ DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PLAYER);
gMain.state++;
break;
case 9:
- sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 1);
+ DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PARTNER);
gMain.state++;
break;
case 10:
- sub_80C6D80(gSaveBlock2Ptr->playerName, gUnknown_02032188[0], 0, 0, 3);
+ DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMessageBoxTileBuffers[0], 0, 0, 3);
id = GetMultiplayerId();
- sub_80C6D80(gLinkPlayers[id ^ 1].name, gUnknown_02032188[3], 0, 0, 3);
- sub_80C6D80(gUnknown_0832DE94[0], gUnknown_02032188[6], 0, 0, 2);
- sub_807A308(gUnknown_0832DE94[1], gUnknown_02032188[8], 24);
+ DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMessageBoxTileBuffers[3], 0, 0, 3);
+ DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMessageBoxTileBuffers[6], 0, 0, 2);
+ DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMessageBoxTileBuffers[8], 24);
gMain.state++;
- gUnknown_0203229C->unk_A8 = 0;
+ sTradeMenuData->timer = 0;
break;
case 11:
- if (sub_807A1F0())
+ if (LoadTradeMenuSpriteSheetsAndPalettes())
gMain.state++;
break;
case 12:
@@ -1915,23 +744,23 @@ static void sub_8077B74(void)
CreateSprite(&temp, (i * 32) + 24, 150, 1);
}
- if (gUnknown_0203229C->tradeMenuCursorPosition < PARTY_SIZE)
- gUnknown_0203229C->tradeMenuCursorPosition = gLastViewedMonIndex;
+ if (sTradeMenuData->cursorPosition < PARTY_SIZE)
+ sTradeMenuData->cursorPosition = gLastViewedMonIndex;
else
- gUnknown_0203229C->tradeMenuCursorPosition = gLastViewedMonIndex + PARTY_SIZE;
+ sTradeMenuData->cursorPosition = gLastViewedMonIndex + PARTY_SIZE;
- gUnknown_0203229C->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, gTradeMonSpriteCoords[gUnknown_0203229C->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_0203229C->tradeMenuCursorPosition][1] * 8, 2);
+ sTradeMenuData->cursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][1] * 8, 2);
gMain.state = 16;
break;
case 16:
- sub_80782B8(0);
+ LoadTradeBgGfx(0);
gMain.state++;
break;
case 17:
- sub_80782B8(1);
- gUnknown_0203229C->unk_0 = 0;
- gUnknown_0203229C->unk_1 = 0;
- sub_8078388();
+ LoadTradeBgGfx(1);
+ sTradeMenuData->bg2hofs = 0;
+ sTradeMenuData->bg3hofs = 0;
+ SetTradePartyMonsVisible();
gMain.state++;
break;
case 18:
@@ -1942,20 +771,20 @@ static void sub_8077B74(void)
break;
case 19:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
- sub_80782B8(2);
+ LoadTradeBgGfx(2);
gMain.state++;
break;
case 20:
gMain.state++;
break;
case 21:
- sub_807A53C();
+ SetTradePartyHPBarSprites();
gMain.state++;
break;
case 22:
if (!gPaletteFade.active)
{
- SetMainCallback2(sub_807825C);
+ SetMainCallback2(CB2_TradeMenu);
}
break;
}
@@ -1966,81 +795,81 @@ static void sub_8077B74(void)
UpdatePaletteFade();
}
-static void sub_807811C(void)
+static void VBlankCB_TradeMenu(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-static void sub_8078130(void)
+static void LinkTradeFadeOut(void)
{
- if (++gUnknown_0203229C->unk_A8 > 15)
+ if (++sTradeMenuData->timer > 15)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_0203229C->unk_6F = 10;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_FADE;
}
}
-static void sub_807816C(void)
+static void LinkTradeWaitForFade(void)
{
if (!gPaletteFade.active)
{
- gUnknown_02032298[0] = gUnknown_0203229C->tradeMenuCursorPosition;
- gUnknown_02032298[1] = gUnknown_0203229C->unk_7E;
+ gSelectedTradeMonPositions[TRADE_PLAYER] = sTradeMenuData->cursorPosition;
+ gSelectedTradeMonPositions[TRADE_PARTNER] = sTradeMenuData->partnerCursorPosition;
if (gWirelessCommType)
{
- gUnknown_0203229C->unk_6F = 16;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE;
}
else
{
sub_800ABF4(32);
- gUnknown_0203229C->unk_6F = 13;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
}
-static void sub_80781C8(void)
+static void SetLinkTradeCallbacks(void)
{
- gMain.savedCallback = sub_80773AC;
+ gMain.savedCallback = CB2_StartCreateTradeMenu;
+ // Wireless Link Trade
if (gWirelessCommType)
{
- if (sub_8010500())
+ if (IsLinkRfuTaskFinished())
{
- Free(gUnknown_02032184);
+ Free(sMessageBoxAllocBuffer);
FreeAllWindowBuffers();
- Free(gUnknown_0203229C);
+ Free(sTradeMenuData);
gMain.callback1 = NULL;
DestroyWirelessStatusIndicatorSprite();
- SetMainCallback2(sub_807AE50);
+ SetMainCallback2(CB2_LinkTrade);
}
}
+ // Cable Link Trade
else
{
if (!gReceivedRemoteLinkPlayers)
{
- Free(gUnknown_02032184);
+ Free(sMessageBoxAllocBuffer);
FreeAllWindowBuffers();
- Free(gUnknown_0203229C);
+ Free(sTradeMenuData);
gMain.callback1 = NULL;
- SetMainCallback2(sub_807AE50);
+ SetMainCallback2(CB2_LinkTrade);
}
}
}
-static void sub_807825C(void)
+static void CB2_TradeMenu(void)
{
- u8 temp;
-
- sub_80795AC();
- sub_807A0C4();
- sub_80796B4(0);
- sub_80796B4(1);
+ CallTradeMenuFunc();
+ DoQueuedActions();
+ DrawTradeMenuParty(TRADE_PLAYER);
+ DrawTradeMenuParty(TRADE_PARTNER);
- SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_0203229C->unk_0++);
- SetGpuReg(REG_OFFSET_BG3HOFS, gUnknown_0203229C->unk_1--);
+ SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuData->bg2hofs++);
+ SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenuData->bg3hofs--);
RunTextPrintersAndIsPrinter0Active();
RunTasks();
@@ -2049,22 +878,22 @@ static void sub_807825C(void)
UpdatePaletteFade();
}
-static void sub_80782B8(u8 a0)
+static void LoadTradeBgGfx(u8 state)
{
int i;
- switch (a0)
+ switch (state)
{
case 0:
- LoadPalette(gUnknown_08DDB3E4, 0, 0x60);
- LoadBgTiles(1, gUnknown_08DDB464, 0x1280, 0);
+ LoadPalette(gTradeMenu_Pal, 0, 0x60);
+ LoadBgTiles(1, gTradeMenu_Gfx, 0x1280, 0);
CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DDCF04, 0, 0, 32, 20, 0);
- LoadBgTilemap(2, gTradeStripesBG2Tilemap, 0x800, 0);
+ LoadBgTilemap(2, sTradeStripesBG2Tilemap, 0x800, 0);
break;
case 1:
- LoadBgTilemap(3, gTradeStripesBG3Tilemap, 0x800, 0);
- sub_8079E44(0);
- sub_8079E44(1);
+ LoadBgTilemap(3, sTradeStripesBG3Tilemap, 0x800, 0);
+ DrawTradeMenuPartyInfo(TRADE_PLAYER);
+ DrawTradeMenuPartyInfo(TRADE_PARTNER);
CopyBgTilemapBufferToVram(1);
break;
case 2:
@@ -2080,34 +909,34 @@ static void sub_80782B8(u8 a0)
}
}
-static void sub_8078388(void)
+static void SetTradePartyMonsVisible(void)
{
int i;
for (i = 0; i < PARTY_SIZE; i++)
{
- if (i < gUnknown_0203229C->partyCounts[0])
+ if (i < sTradeMenuData->partyCounts[TRADE_PLAYER])
{
- gSprites[gUnknown_0203229C->partyIcons[0][i]].invisible = FALSE;
- gUnknown_0203229C->tradeMenuOptionsActive[i] = TRUE;
+ gSprites[sTradeMenuData->partySpriteIds[TRADE_PLAYER][i]].invisible = FALSE;
+ sTradeMenuData->monPresent[i] = TRUE;
}
else
{
- gUnknown_0203229C->tradeMenuOptionsActive[i] = FALSE;
+ sTradeMenuData->monPresent[i] = FALSE;
}
- if (i < gUnknown_0203229C->partyCounts[1])
+ if (i < sTradeMenuData->partyCounts[TRADE_PARTNER])
{
- gSprites[gUnknown_0203229C->partyIcons[1][i]].invisible = FALSE;
- gUnknown_0203229C->tradeMenuOptionsActive[i + PARTY_SIZE] = TRUE;
+ gSprites[sTradeMenuData->partySpriteIds[TRADE_PARTNER][i]].invisible = FALSE;
+ sTradeMenuData->monPresent[i + PARTY_SIZE] = TRUE;
}
else
{
- gUnknown_0203229C->tradeMenuOptionsActive[i + PARTY_SIZE] = FALSE;
+ sTradeMenuData->monPresent[i + PARTY_SIZE] = FALSE;
}
}
- gUnknown_0203229C->unk_44 = 1;
+ sTradeMenuData->neverRead_44 = TRUE;
}
// why not just use memcpy?
@@ -2123,30 +952,30 @@ static void Trade_Memcpy(void *dataDest, const void *dataSrc, u32 count)
}
}
-static bool8 shedinja_maker_maybe(void)
+static bool8 BufferTradeParties(void)
{
u8 id = GetMultiplayerId();
int i;
struct Pokemon *mon;
- switch (gUnknown_0203229C->unk_69)
+ switch (sTradeMenuData->bufferPartyState)
{
case 0:
Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon));
- gUnknown_0203229C->unk_69++;
- gUnknown_0203229C->unk_A8 = 0;
+ sTradeMenuData->bufferPartyState++;
+ sTradeMenuData->timer = 0;
break;
case 1:
if (sub_80771BC())
{
if (_GetBlockReceivedStatus() == 0)
{
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
}
else
{
- sub_8077210();
- gUnknown_0203229C->unk_69++;
+ TradeResetReceivedFlags();
+ sTradeMenuData->bufferPartyState++;
}
}
break;
@@ -2155,90 +984,90 @@ static bool8 shedinja_maker_maybe(void)
{
sub_80771AC(1);
}
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
break;
case 4:
if (_GetBlockReceivedStatus() == 3)
{
Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon));
- sub_8077210();
- gUnknown_0203229C->unk_69++;
+ TradeResetReceivedFlags();
+ sTradeMenuData->bufferPartyState++;
}
break;
case 5:
Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon));
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
break;
case 7:
if (id == 0)
{
sub_80771AC(1);
}
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
break;
case 8:
if (_GetBlockReceivedStatus() == 3)
{
Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 200);
- sub_8077210();
- gUnknown_0203229C->unk_69++;
+ TradeResetReceivedFlags();
+ sTradeMenuData->bufferPartyState++;
}
break;
case 9:
Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 200);
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
break;
case 11:
if (id == 0)
{
sub_80771AC(1);
}
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
break;
case 12:
if (_GetBlockReceivedStatus() == 3)
{
Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 200);
- sub_8077210();
- gUnknown_0203229C->unk_69++;
+ TradeResetReceivedFlags();
+ sTradeMenuData->bufferPartyState++;
}
break;
case 13:
Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, 220);
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
break;
case 15:
if (id == 0)
{
sub_80771AC(3);
}
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
break;
case 16:
if (_GetBlockReceivedStatus() == 3)
{
- Trade_Memcpy(gUnknown_020321C0, gBlockRecvBuffer[id ^ 1], 216);
- sub_8077210();
- gUnknown_0203229C->unk_69++;
+ Trade_Memcpy(gTradeMail, gBlockRecvBuffer[id ^ 1], 216);
+ TradeResetReceivedFlags();
+ sTradeMenuData->bufferPartyState++;
}
break;
case 17:
- Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, 11);
- gUnknown_0203229C->unk_69++;
+ Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, ARRAY_COUNT(sTradeMenuData->giftRibbons));
+ sTradeMenuData->bufferPartyState++;
break;
case 19:
if (id == 0)
{
sub_80771AC(4);
}
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->bufferPartyState++;
break;
case 20:
if (_GetBlockReceivedStatus() == 3)
{
- Trade_Memcpy(gUnknown_0203229C->unk_A9, gBlockRecvBuffer[id ^ 1], 11);
- sub_8077210();
- gUnknown_0203229C->unk_69++;
+ Trade_Memcpy(sTradeMenuData->giftRibbons, gBlockRecvBuffer[id ^ 1], ARRAY_COUNT(sTradeMenuData->giftRibbons));
+ TradeResetReceivedFlags();
+ sTradeMenuData->bufferPartyState++;
}
break;
case 21:
@@ -2253,7 +1082,7 @@ static bool8 shedinja_maker_maybe(void)
{
GetMonData(mon, MON_DATA_NICKNAME, name);
- if (!StringCompareWithoutExtCtrlCodes(name, gJPText_Shedinja))
+ if (!StringCompareWithoutExtCtrlCodes(name, sJPText_Shedinja))
{
SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]);
}
@@ -2261,189 +1090,198 @@ static bool8 shedinja_maker_maybe(void)
}
}
return TRUE;
+ // Delay until next state
case 2:
case 6:
case 10:
case 14:
case 18:
- gUnknown_0203229C->unk_A8++;
- if (gUnknown_0203229C->unk_A8 > 10)
+ sTradeMenuData->timer++;
+ if (sTradeMenuData->timer > 10)
{
- gUnknown_0203229C->unk_A8 = 0;
- gUnknown_0203229C->unk_69++;
+ sTradeMenuData->timer = 0;
+ sTradeMenuData->bufferPartyState++;
}
break;
}
return FALSE;
}
-static void sub_80787B8(void)
+static void PrintAndBufferIsThisTradeOkay(void)
{
- sub_807A308(gText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (gUnknown_0203229C->unk_72 * 32)), 24);
+ DrawTextWindowAndBuffer6Bytes(sText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24);
}
-static void sub_80787E0(u8 a0, u8 a1)
+// mpId is unused
+static void UpdateLinkTradeFlags(u8 mpId, u8 status)
{
- if (a1 & 1)
+ if (status & 1)
{
switch (gBlockRecvBuffer[0][0])
{
- case 0xEEAA:
- gUnknown_0203229C->unk_78 = 2;
+ case LINKCMD_REQUEST_CANCEL:
+ sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_CANCEL;
break;
- case 0xAABB:
- gUnknown_0203229C->unk_78 = 1;
+ case LINKCMD_READY_TO_TRADE:
+ sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_TRADE;
break;
- case 0xBBBB:
- gUnknown_0203229C->unk_7A = 1;
+ case LINKCMD_INIT_BLOCK:
+ sTradeMenuData->playerLinkFlagStatus = INITIATE_TRADE;
break;
- case 0xBBCC:
- gUnknown_0203229C->unk_7A = 2;
+ case LINKCMD_READY_CANCEL_TRADE:
+ sTradeMenuData->playerLinkFlagStatus = CANCEL_TRADE;
break;
}
- sub_8077234(0);
+ TradeResetReceivedFlag(0);
}
- if (a1 & 2)
+ if (status & 2)
{
switch (gBlockRecvBuffer[1][0])
{
- case 0xEEAA:
- gUnknown_0203229C->unk_79 = 2;
+ case LINKCMD_REQUEST_CANCEL:
+ sTradeMenuData->partnerLinkFlagChoseAction = WANTS_TO_CANCEL;
break;
- case 0xAABB:
- gUnknown_0203229C->unk_7E = gBlockRecvBuffer[1][1] + 6;
- gUnknown_0203229C->unk_79 = 1;
+ case LINKCMD_READY_TO_TRADE:
+ sTradeMenuData->partnerCursorPosition = gBlockRecvBuffer[1][1] + 6;
+ sTradeMenuData->partnerLinkFlagChoseAction = WANTS_TO_TRADE;
break;
- case 0xBBBB:
- gUnknown_0203229C->unk_7B = 1;
+ case LINKCMD_INIT_BLOCK:
+ sTradeMenuData->partnerLinkFlagStatus = INITIATE_TRADE;
break;
- case 0xBBCC:
- gUnknown_0203229C->unk_7B = 2;
+ case LINKCMD_READY_CANCEL_TRADE:
+ sTradeMenuData->partnerLinkFlagStatus = CANCEL_TRADE;
break;
}
- sub_8077234(1);
+ TradeResetReceivedFlag(1);
}
}
-static void sub_8078900(u8 a0, u8 a1)
+// mpId is unused
+static void ReactToLinkTradeData(u8 mpId, u8 status)
{
- if (a1 & 1)
+ if (status & 1)
{
switch (gBlockRecvBuffer[0][0])
{
- case 0xEEBB:
+ case LINKCMD_CANCEL_TRADE:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- sub_807A19C(4);
- gUnknown_0203229C->unk_6F = 11;
+ PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_1;
break;
- case 0xEECC:
- sub_807A19C(5);
- gUnknown_0203229C->unk_6F = 8;
+ case LINKCMD_0xEECC:
+ PrintTradeMessage(TRADE_MSG_FRIEND_WANTS_TO_TRADE);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU;
break;
- case 0xDDDD:
- gUnknown_0203229C->unk_7E = gBlockRecvBuffer[0][1] + 6;
+ case LINKCMD_SET_MONS_TO_TRADE:
+ sTradeMenuData->partnerCursorPosition = gBlockRecvBuffer[0][1] + 6;
rbox_fill_rectangle(0);
- sub_807967C(gUnknown_0203229C->tradeMenuCursorPosition);
- sub_807967C(gUnknown_0203229C->unk_7E);
- gUnknown_0203229C->unk_6F = 7;
+ SetSelectedMon(sTradeMenuData->cursorPosition);
+ SetSelectedMon(sTradeMenuData->partnerCursorPosition);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_TRADE_PROMPT;
break;
- case 0xCCDD:
+ case LINKCMD_START_TRADE:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_0203229C->unk_6F = 10;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_FADE;
break;
- case 0xDDEE:
- sub_807A19C(1);
- gUnknown_0203229C->unk_6F = 8;
+ case LINKCMD_0xDDEE:
+ PrintTradeMessage(TRADE_MSG_CANCELED);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU;
}
- sub_8077234(0);
+ TradeResetReceivedFlag(0);
}
- if (a1 & 2)
- sub_8077234(1);
+ if (status & 2)
+ TradeResetReceivedFlag(1);
}
-static void sub_80789FC(void)
+static void QueueLinkTradeData(void)
{
- if (gUnknown_0203229C->unk_78 && gUnknown_0203229C->unk_79)
+ if (sTradeMenuData->playerLinkFlagChoseAction && sTradeMenuData->partnerLinkFlagChoseAction)
{
- if (gUnknown_0203229C->unk_78 == 1 && gUnknown_0203229C->unk_79 == 1)
+ if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_TRADE
+ && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_TRADE)
{
- gUnknown_0203229C->unk_6F = 6;
- gUnknown_0203229C->linkData[0] = 0xDDDD;
- gUnknown_0203229C->linkData[1] = gUnknown_0203229C->tradeMenuCursorPosition;
- sub_807A048(5, 0);
- gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_BOTH_MONS_SELECTED;
+ sTradeMenuData->linkData[0] = LINKCMD_SET_MONS_TO_TRADE;
+ sTradeMenuData->linkData[1] = sTradeMenuData->cursorPosition;
+ QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA);
+ sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0;
}
- else if (gUnknown_0203229C->unk_78 == 1 && gUnknown_0203229C->unk_79 == 2)
+ else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_TRADE
+ && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_CANCEL)
{
- sub_807A19C(1);
- gUnknown_0203229C->linkData[0] = 0xEECC;
- gUnknown_0203229C->linkData[1] = 0;
- sub_807A048(5, 0);
- gUnknown_0203229C->unk_7A = gUnknown_0203229C->unk_7B = 0;
- gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0;
- gUnknown_0203229C->unk_6F = 8;
+ PrintTradeMessage(TRADE_MSG_CANCELED);
+ sTradeMenuData->linkData[0] = LINKCMD_0xEECC;
+ sTradeMenuData->linkData[1] = 0;
+ QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA);
+ sTradeMenuData->playerLinkFlagStatus = sTradeMenuData->partnerLinkFlagStatus = 0;
+ sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU;
}
- else if (gUnknown_0203229C->unk_78 == 2 && gUnknown_0203229C->unk_79 == 1)
+ else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_CANCEL
+ && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_TRADE)
{
- sub_807A19C(5);
- gUnknown_0203229C->linkData[0] = 0xDDEE;
- gUnknown_0203229C->linkData[1] = 0;
- sub_807A048(5, 0);
- gUnknown_0203229C->unk_7A = gUnknown_0203229C->unk_7B = 0;
- gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0;
- gUnknown_0203229C->unk_6F = 8;
+ PrintTradeMessage(TRADE_MSG_FRIEND_WANTS_TO_TRADE);
+ sTradeMenuData->linkData[0] = LINKCMD_0xDDEE;
+ sTradeMenuData->linkData[1] = 0;
+ QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA);
+ sTradeMenuData->playerLinkFlagStatus = sTradeMenuData->partnerLinkFlagStatus = 0;
+ sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU;
}
- else if (gUnknown_0203229C->unk_78 == 2 && gUnknown_0203229C->unk_79 == 2)
+ else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_CANCEL
+ && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_CANCEL)
{
- gUnknown_0203229C->linkData[0] = 0xEEBB;
- gUnknown_0203229C->linkData[1] = 0;
- sub_807A048(5, 0);
+ sTradeMenuData->linkData[0] = LINKCMD_CANCEL_TRADE;
+ sTradeMenuData->linkData[1] = 0;
+ QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0;
- gUnknown_0203229C->unk_6F = 11;
+ sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_1;
}
}
- if (gUnknown_0203229C->unk_7A && gUnknown_0203229C->unk_7B)
+ if (sTradeMenuData->playerLinkFlagStatus && sTradeMenuData->partnerLinkFlagStatus)
{
- if (gUnknown_0203229C->unk_7A == 1 && gUnknown_0203229C->unk_7B == 1)
+ if (sTradeMenuData->playerLinkFlagStatus == INITIATE_TRADE
+ && sTradeMenuData->partnerLinkFlagStatus == INITIATE_TRADE)
{
- gUnknown_0203229C->linkData[0] = 0xCCDD;
- gUnknown_0203229C->linkData[1] = 0;
- sub_807A048(5, 0);
- gUnknown_0203229C->unk_7A = 0;
- gUnknown_0203229C->unk_7B = 0;
- gUnknown_0203229C->unk_6F = 9;
+ sTradeMenuData->linkData[0] = LINKCMD_START_TRADE;
+ sTradeMenuData->linkData[1] = 0;
+ QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA);
+ sTradeMenuData->playerLinkFlagStatus = 0;
+ sTradeMenuData->partnerLinkFlagStatus = 0;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_FADE_OUT;
}
- if (gUnknown_0203229C->unk_7A == 2 || gUnknown_0203229C->unk_7B == 2)
+ if (sTradeMenuData->playerLinkFlagStatus == CANCEL_TRADE
+ || sTradeMenuData->partnerLinkFlagStatus == CANCEL_TRADE)
{
- sub_807A19C(1);
- gUnknown_0203229C->linkData[0] = 0xDDEE;
- gUnknown_0203229C->linkData[1] = 0;
- sub_807A048(5, 0);
- gUnknown_0203229C->unk_7A = 0;
- gUnknown_0203229C->unk_7B = 0;
- gUnknown_0203229C->unk_6F = 8;
+ PrintTradeMessage(TRADE_MSG_CANCELED);
+ sTradeMenuData->linkData[0] = LINKCMD_0xDDEE;
+ sTradeMenuData->linkData[1] = 0;
+ QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA);
+ sTradeMenuData->playerLinkFlagStatus = 0;
+ sTradeMenuData->partnerLinkFlagStatus = 0;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU;
}
}
}
-static void sub_8078BFC(u16 *a0, u16 a1, u16 a2)
+static void _SetLinkData(u16 *linkData, u16 linkCmd, u16 cursorPosition)
{
- a0[0] = a1;
- a0[1] = a2;
- sub_807A048(5, 0);
+ linkData[0] = linkCmd;
+ linkData[1] = cursorPosition;
+ QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA);
}
-static void sub_8078C10(u16 a0, u16 a1)
+static void SetLinkData(u16 linkCmd, u16 cursorPosition)
{
- sub_8078BFC(gUnknown_0203229C->linkData, a0, a1);
+ _SetLinkData(sTradeMenuData->linkData, linkCmd, cursorPosition);
}
-static void sub_8078C34(void)
+static void CB1_SendOrReactToLinkTradeData(void)
{
u8 mpId = GetMultiplayerId();
u8 status;
@@ -2451,25 +1289,25 @@ static void sub_8078C34(void)
if ((status = _GetBlockReceivedStatus()))
{
if (mpId == 0)
- sub_80787E0(mpId, status);
+ UpdateLinkTradeFlags(mpId, status);
else
- sub_8078900(mpId, status);
+ ReactToLinkTradeData(mpId, status);
}
if (mpId == 0)
- sub_80789FC();
+ QueueLinkTradeData();
}
-static u8 sub_8078C6C(u8 oldPosition, u8 direction)
+static u8 GetNewTradeMenuPosition(u8 oldPosition, u8 direction)
{
int i;
u8 newPosition = 0;
for (i = 0; i < PARTY_SIZE; i++)
{
- if (gUnknown_0203229C->tradeMenuOptionsActive[gTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE)
+ if (sTradeMenuData->monPresent[sTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE)
{
- newPosition = gTradeNextSelectedMonTable[oldPosition][direction][i];
+ newPosition = sTradeNextSelectedMonTable[oldPosition][direction][i];
break;
}
}
@@ -2477,258 +1315,247 @@ static u8 sub_8078C6C(u8 oldPosition, u8 direction)
return newPosition;
}
-static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction)
+static void TradeMenuMoveCursor(u8 *cursorPosition, u8 direction)
{
- u8 newPosition = sub_8078C6C(*tradeMenuCursorPosition, direction);
+ u8 newPosition = GetNewTradeMenuPosition(*cursorPosition, direction);
- if (newPosition == 12) // CANCEL
+ if (newPosition == (PARTY_SIZE * 2)) // CANCEL
{
- StartSpriteAnim(&gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx], 1);
- gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.x = 224;
- gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.y = 160;
+ StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteIdx], 1);
+ gSprites[sTradeMenuData->cursorSpriteIdx].pos1.x = 224;
+ gSprites[sTradeMenuData->cursorSpriteIdx].pos1.y = 160;
}
else
{
- StartSpriteAnim(&gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx], 0);
- gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32;
- gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8;
+ StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteIdx], 0);
+ gSprites[sTradeMenuData->cursorSpriteIdx].pos1.x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32;
+ gSprites[sTradeMenuData->cursorSpriteIdx].pos1.y = sTradeMonSpriteCoords[newPosition][1] * 8;
}
- if (*tradeMenuCursorPosition != newPosition)
+ if (*cursorPosition != newPosition)
{
PlaySE(SE_SELECT);
}
- *tradeMenuCursorPosition = newPosition;
+ *cursorPosition = newPosition;
}
-static void sub_8078D78(void)
+static void SetReadyToTrade(void)
{
- sub_807A19C(0);
- gUnknown_0203229C->unk_6F = 100;
+ PrintTradeMessage(TRADE_MSG_STANDBY);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY;
if (GetMultiplayerId() == 1)
- {
- sub_8078C10(0xAABB, gUnknown_0203229C->tradeMenuCursorPosition);
- }
+ SetLinkData(LINKCMD_READY_TO_TRADE, sTradeMenuData->cursorPosition);
else
- {
- gUnknown_0203229C->unk_78 = 1;
- }
+ sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_TRADE;
}
-static void sub_8078DBC(void)
+static void TradeMenuProcessInput(void)
{
if (gMain.newAndRepeatedKeys & DPAD_UP)
{
- TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 0);
+ TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 0);
}
else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
{
- TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 1);
+ TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 1);
}
else if (gMain.newAndRepeatedKeys & DPAD_LEFT)
{
- TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 2);
+ TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 2);
}
else if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
{
- TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 3);
+ TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 3);
}
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- if (gUnknown_0203229C->tradeMenuCursorPosition < 6)
+ // Cursor is in player's party
+ if (sTradeMenuData->cursorPosition < PARTY_SIZE)
{
DrawTextBorderOuter(1, 1, 14);
FillWindowPixelBuffer(1, PIXEL_FILL(1));
- PrintMenuTable(1, 2, gUnknown_0832DEAC);
+ PrintMenuTable(1, ARRAY_COUNT(sSelectTradeMonActions), sSelectTradeMonActions);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0);
PutWindowTilemap(1);
CopyWindowToVram(1, 3);
- gUnknown_0203229C->unk_6F = 1;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SELECTED_MON;
}
- else if (gUnknown_0203229C->tradeMenuCursorPosition < 12)
+ // Cursor is in partner's party
+ else if (sTradeMenuData->cursorPosition < PARTY_SIZE * 2)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_0203229C->unk_6F = 2;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SHOW_MON_SUMMARY;
}
- else if (gUnknown_0203229C->tradeMenuCursorPosition == 12)
+ // Cursor is on Cancel
+ else if (sTradeMenuData->cursorPosition == PARTY_SIZE * 2)
{
- CreateYesNoMenu(&gUnknown_0832DF8C, 1, 14, 0);
- gUnknown_0203229C->unk_6F = 4;
- sub_807A308(gUnknown_0832DE94[4], (void *)(OBJ_VRAM0 + gUnknown_0203229C->unk_72 * 32), 24);
+ CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_PROMPT;
+ DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CANCEL_TRADE], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24);
}
}
}
-static void sub_8078EF8(void)
+static void TradeMenuChooseMon(void)
{
- sub_8079F74();
- gUnknown_0203229C->unk_6F = 0;
- gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = FALSE;
- sub_807A308(gUnknown_0832DE94[1], (void *)(OBJ_VRAM0 + gUnknown_0203229C->unk_72 * 32), 24);
+ PrintNicknamesForTradeMenu();
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU;
+ gSprites[sTradeMenuData->cursorSpriteIdx].invisible = FALSE;
+ DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24);
}
-static void sub_8078F50(void)
+static void TradeMenuProcessInput_SelectedMon(void)
{
switch (Menu_ProcessInputNoWrap())
{
- case MENU_B_PRESSED:
- PlaySE(SE_SELECT);
- sub_8078EF8();
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ TradeMenuChooseMon();
+ break;
+ case MENU_NOTHING_CHOSEN:
+ break;
+ case 0: // Summary
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SHOW_MON_SUMMARY;
+ break;
+ case 1: // Trade
+ switch (CanTradeSelectedMon(gPlayerParty, gPlayerPartyCount, sTradeMenuData->cursorPosition))
+ {
+ case CAN_TRADE_MON:
+ SetReadyToTrade();
+ gSprites[sTradeMenuData->cursorSpriteIdx].invisible = TRUE;
break;
- case MENU_NOTHING_CHOSEN:
+ case CANT_TRADE_LAST_MON:
+ QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU;
break;
- case 0:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_0203229C->unk_6F = 2;
+ case CANT_TRADE_NATIONAL:
+ case CANT_TRADE_INVALID_MON:
+ QueueAction(QUEUE_DELAY_MSG, QUEUE_MON_CANT_BE_TRADED);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU;
break;
- case 1:
- switch (sub_807A5F4(gPlayerParty, gPlayerPartyCount, gUnknown_0203229C->tradeMenuCursorPosition))
- {
- case 0:
- sub_8078D78();
- gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = TRUE;
- break;
- case 1:
- sub_807A048(3, 3);
- gUnknown_0203229C->unk_6F = 8;
- break;
- case 2:
- case 4:
- sub_807A048(3, 6);
- gUnknown_0203229C->unk_6F = 8;
- break;
- case 3:
- case 5:
- sub_807A048(3, 7);
- gUnknown_0203229C->unk_6F = 8;
- break;
- }
+ case CANT_TRADE_EGG_YET:
+ case CANT_TRADE_EGG_YET2:
+ QueueAction(QUEUE_DELAY_MSG, QUEUE_EGG_CANT_BE_TRADED);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU;
break;
+ }
+ break;
}
}
-static void sub_8079034(void)
+static void ChooseMonAfterButtonPress(void)
{
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
{
PlaySE(SE_SELECT);
- sub_8078EF8();
+ TradeMenuChooseMon();
}
}
-static void sub_807905C(void)
+static void TradeMenuShowMonSummaryScreen(void)
{
if (!gPaletteFade.active)
{
- if (gUnknown_0203229C->tradeMenuCursorPosition < PARTY_SIZE)
- {
- ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gUnknown_0203229C->tradeMenuCursorPosition, gUnknown_0203229C->partyCounts[0] - 1, sub_8077B74);
- }
+ // Player's party
+ if (sTradeMenuData->cursorPosition < PARTY_SIZE)
+ ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, sTradeMenuData->cursorPosition, sTradeMenuData->partyCounts[TRADE_PLAYER] - 1, CB2_ReturnToTradeMenu);
+ // Partner's party
else
- {
- ShowPokemonSummaryScreen(PSS_MODE_UNK1, gEnemyParty, gUnknown_0203229C->tradeMenuCursorPosition - PARTY_SIZE, gUnknown_0203229C->partyCounts[1] - 1, sub_8077B74);
- }
+ ShowPokemonSummaryScreen(PSS_MODE_UNK1, gEnemyParty, sTradeMenuData->cursorPosition - PARTY_SIZE, sTradeMenuData->partyCounts[TRADE_PARTNER] - 1, CB2_ReturnToTradeMenu);
FreeAllWindowBuffers();
}
}
-static u8 sub_80790D4(u8 *a0, u8 a1, u8 a2, u8 a3)
+static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 playerMonIdx, u8 partnerMonIdx)
{
int i;
- u16 species;
- u8 res = 0;
+ u16 partnerSpecies;
+ u8 hasLiveMon = 0;
- for (i = 0; i < a1; i++)
+ // Make sure mon to be traded isn't player's last alive mon
+ for (i = 0; i < playerPartyCount; i++)
{
- if (a2 != i)
- {
- res += a0[i];
- }
+ if (playerMonIdx != i)
+ hasLiveMon += aliveMons[i];
}
+ partnerMonIdx %= PARTY_SIZE;
+ partnerSpecies = GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_SPECIES);
- a3 %= PARTY_SIZE;
- species = GetMonData(&gEnemyParty[a3], MON_DATA_SPECIES);
-
- if (species == SPECIES_DEOXYS || species == SPECIES_MEW)
+ // Partner cant trade illegitimate Deoxys or Mew
+ if (partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW)
{
- if (!GetMonData(&gEnemyParty[a3], MON_DATA_OBEDIENCE))
- {
- return 2;
- }
+ if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_OBEDIENCE))
+ return PARTNER_MON_INVALID;
}
+ // Partner cant trade Egg or non-Hoenn mon if player doesn't have National Dex
if (!IsNationalPokedexEnabled())
{
- if (gUnknown_0203229C->unk_51[1][a3] || !IsSpeciesInHoennDex(species))
- {
- return 2;
- }
+ if (sTradeMenuData->isEgg[TRADE_PARTNER][partnerMonIdx] || !IsSpeciesInHoennDex(partnerSpecies))
+ return PARTNER_MON_INVALID;
}
- if (res)
- {
- res = 1;
- }
+ if (hasLiveMon)
+ hasLiveMon = BOTH_MONS_VALID;
- return res;
+ return hasLiveMon; //PLAYER_MON_INVALID or BOTH_MONS_VALID
}
-static bool32 sub_8079174(void)
+// Returns TRUE if the partner's selected mon is invalid, FALSE otherwise
+static bool32 CheckMonsBeforeTrade(void)
{
int i;
- u8 arr[12];
+ u8 aliveMons[PARTY_SIZE * 2];
- for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++)
{
- arr[i] = gUnknown_0203229C->unk_45[0][i];
+ aliveMons[i] = sTradeMenuData->isLiveMon[TRADE_PLAYER][i];
}
- switch (sub_80790D4(arr, gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->tradeMenuCursorPosition, gUnknown_0203229C->unk_7E))
+ switch (CheckValidityOfTradeMons(aliveMons, sTradeMenuData->partyCounts[TRADE_PLAYER], sTradeMenuData->cursorPosition, sTradeMenuData->partnerCursorPosition))
{
- case 0:
- sub_807A048(3, 3);
- sub_8078C10(0xBBCC, 0);
- break;
- case 1:
- sub_807A048(3, 1);
- sub_8078C10(0xBBBB, 0);
- break;
- case 2:
- sub_807A048(3, 8);
- return TRUE;
+ case PLAYER_MON_INVALID:
+ QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2);
+ SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0);
+ break;
+ case BOTH_MONS_VALID:
+ QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY);
+ SetLinkData(LINKCMD_INIT_BLOCK, 0);
+ break;
+ case PARTNER_MON_INVALID:
+ QueueAction(QUEUE_DELAY_MSG, QUEUE_FRIENDS_MON_CANT_BE_TRADED);
+ return TRUE;
}
return FALSE;
}
-static void sub_8079218(void)
+static void ConfirmOrCancelTrade(void)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case 0:
- if (!sub_8079174())
- {
- gUnknown_0203229C->unk_6F = 100;
- }
- else
- {
- gUnknown_0203229C->unk_6F = 17;
- }
- PutWindowTilemap(17);
- break;
- case 1:
- case MENU_B_PRESSED:
- sub_807A048(3, 1);
- if (sub_80771BC())
- sub_8078C10(0xBBCC, 0);
- gUnknown_0203229C->unk_6F = 100;
- PutWindowTilemap(17);
- break;
+ case 0: // Confirm Trade
+ if (!CheckMonsBeforeTrade())
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY;
+ else
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_PARTNER_MON_INVALID;
+
+ PutWindowTilemap(17);
+ break;
+ case 1: // Cancel Trade
+ case MENU_B_PRESSED:
+ QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY);
+ if (sub_80771BC())
+ SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY;
+ PutWindowTilemap(17);
+ break;
}
}
@@ -2736,65 +1563,66 @@ static void sub_807929C(void)
{
int i;
- for (i = 0; i < gUnknown_0203229C->partyCounts[1] - 4; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[1] - 4; i++)
{
PutWindowTilemap(i + 12);
CopyWindowToVram(i + 12, 1);
}
}
-static void sub_80792E4(void)
+static void CancelTradeYesNo(void)
{
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
- case 0:
- sub_807A19C(4);
- sub_8078C10(0xEEAA, 0);
- gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = TRUE;
- gUnknown_0203229C->unk_6F = 100;
- sub_807929C();
- break;
- case 1:
- case MENU_B_PRESSED:
- PlaySE(SE_SELECT);
- sub_8078EF8();
- break;
+ case 0: // YES, Cancel
+ PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND);
+ SetLinkData(LINKCMD_REQUEST_CANCEL, 0);
+ gSprites[sTradeMenuData->cursorSpriteIdx].invisible = TRUE;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY;
+ sub_807929C();
+ break;
+ case 1: // NO, Continue
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ TradeMenuChooseMon();
+ break;
}
}
-static void sub_807935C(void)
+static void SetBothSelectedMons(void)
{
if (GetMultiplayerId() == 0)
{
rbox_fill_rectangle(0);
- sub_807967C(gUnknown_0203229C->tradeMenuCursorPosition);
- sub_807967C(gUnknown_0203229C->unk_7E);
+ SetSelectedMon(sTradeMenuData->cursorPosition);
+ SetSelectedMon(sTradeMenuData->partnerCursorPosition);
}
- gUnknown_0203229C->unk_6F = 7;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_TRADE_PROMPT;
}
-static void sub_8079398(void)
+static void ConfirmTradePrompt(void)
{
- if (gUnknown_0203229C->unk_74[0] == 5 && gUnknown_0203229C->unk_74[1] == 5)
+ if (sTradeMenuData->drawPartyState[TRADE_PLAYER] == DRAW_PARTY_FINISH
+ && sTradeMenuData->drawPartyState[TRADE_PARTNER] == DRAW_PARTY_FINISH)
{
- sub_80787B8();
- gUnknown_0203229C->unk_6F = 14;
+ PrintAndBufferIsThisTradeOkay();
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_DELAY_TRADE_CONFIRM;
}
}
-static void Wait2SecondsAndCreateYesNoMenu(void)
+static void DelayTradeConfirmation(void)
{
- gUnknown_0203229C->unk_A8++;
+ sTradeMenuData->timer++;
- if (gUnknown_0203229C->unk_A8 > 120)
+ if (sTradeMenuData->timer > 120)
{
- CreateYesNoMenu(&gUnknown_0832DF8C, 1, 14, 0);
- gUnknown_0203229C->unk_A8 = 0;
- gUnknown_0203229C->unk_6F = 3;
+ CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0);
+ sTradeMenuData->timer = 0;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE;
}
}
-static void sub_8079408(void)
+static void RedrawTradeMenuAfterPressA(void)
{
int i;
@@ -2810,14 +1638,14 @@ static void sub_8079408(void)
rbox_fill_rectangle(i + 14);
}
- sub_8079F88(0);
- sub_8079F88(1);
- gUnknown_0203229C->unk_6F = 0;
- gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = FALSE;
+ RedrawTradeMenuParty(TRADE_PLAYER);
+ RedrawTradeMenuParty(TRADE_PARTNER);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU;
+ gSprites[sTradeMenuData->cursorSpriteIdx].invisible = FALSE;
}
}
-static void sub_8079490(void)
+static void CancelTrade_1(void)
{
if (!gPaletteFade.active)
{
@@ -2830,18 +1658,18 @@ static void sub_8079490(void)
sub_800ABF4(12);
}
- gUnknown_0203229C->unk_6F = 12;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2;
}
}
-static void sub_80794CC(void)
+static void CancelTrade_2(void)
{
if (gWirelessCommType)
{
- if (sub_80771BC() && sub_807A09C() == 0)
+ if (sub_80771BC() && GetNumQueuedActions() == 0)
{
- Free(gUnknown_02032184);
- Free(gUnknown_0203229C);
+ Free(sMessageBoxAllocBuffer);
+ Free(sTradeMenuData);
FreeAllWindowBuffers();
DestroyWirelessStatusIndicatorSprite();
SetMainCallback2(CB2_ReturnToFieldFromMultiplayer);
@@ -2851,177 +1679,183 @@ static void sub_80794CC(void)
{
if (!gReceivedRemoteLinkPlayers)
{
- Free(gUnknown_02032184);
- Free(gUnknown_0203229C);
+ Free(sMessageBoxAllocBuffer);
+ Free(sTradeMenuData);
FreeAllWindowBuffers();
SetMainCallback2(CB2_ReturnToFieldFromMultiplayer);
}
}
}
-static void sub_8079550(void)
+static void LinkTradeWaitForQueue(void)
{
- if (!sub_801048C(FALSE) && sub_807A09C() == 0)
+ if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0)
{
sub_800ADF8();
- gUnknown_0203229C->unk_6F = 13;
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
}
}
-static void sub_807957C(void)
+static void PartnersMonWasInvalid(void)
{
if (gMain.newKeys & A_BUTTON)
{
- sub_8078C10(0xBBCC, 0);
- gUnknown_0203229C->unk_6F = 100;
+ SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0);
+ sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY;
}
}
-static void sub_80795AC(void)
+static void CallTradeMenuFunc(void)
{
- switch (gUnknown_0203229C->unk_6F)
+ switch (sTradeMenuData->tradeMenuFunc)
{
- case 0:
- sub_8078DBC();
- break;
- case 1:
- sub_8078F50();
- break;
- case 2:
- sub_807905C();
- break;
- case 3:
- sub_8079218();
- break;
- case 4:
- sub_80792E4();
- break;
- case 6:
- sub_807935C();
- break;
- case 7:
- sub_8079398();
- break;
- case 8:
- sub_8079408();
- break;
- case 9:
- sub_8078130();
- break;
- case 10:
- sub_807816C();
- break;
- case 11:
- sub_8079490();
- break;
- case 12:
- sub_80794CC();
- break;
- case 13:
- sub_80781C8();
- break;
- case 14:
- Wait2SecondsAndCreateYesNoMenu();
- break;
- case 15:
- sub_8079034();
- break;
- case 16:
- sub_8079550();
- break;
- case 17:
- sub_807957C();
- break;
+ case TRADEMENUFUNC_MAIN_MENU:
+ TradeMenuProcessInput();
+ break;
+ case TRADEMENUFUNC_SELECTED_MON:
+ TradeMenuProcessInput_SelectedMon();
+ break;
+ case TRADEMENUFUNC_SHOW_MON_SUMMARY:
+ TradeMenuShowMonSummaryScreen();
+ break;
+ case TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE:
+ ConfirmOrCancelTrade();
+ break;
+ case TRADEMENUFUNC_CANCEL_TRADE_PROMPT:
+ CancelTradeYesNo();
+ break;
+ case TRADEMENUFUNC_BOTH_MONS_SELECTED:
+ SetBothSelectedMons();
+ break;
+ case TRADEMENUFUNC_CONFIRM_TRADE_PROMPT:
+ ConfirmTradePrompt();
+ break;
+ case TRADEMENUFUNC_REDRAW_MAIN_MENU:
+ RedrawTradeMenuAfterPressA();
+ break;
+ case TRADEMENUFUNC_LINK_TRADE_FADE_OUT:
+ LinkTradeFadeOut();
+ break;
+ case TRADEMENUFUNC_LINK_TRADE_WAIT_FADE:
+ LinkTradeWaitForFade();
+ break;
+ case TRADEMENUFUNC_CANCEL_TRADE_1:
+ CancelTrade_1();
+ break;
+ case TRADEMENUFUNC_CANCEL_TRADE_2:
+ CancelTrade_2();
+ break;
+ case TRADEMENUFUNC_START_LINK_TRADE:
+ SetLinkTradeCallbacks();
+ break;
+ case TRADEMENUFUNC_DELAY_TRADE_CONFIRM:
+ DelayTradeConfirmation();
+ break;
+ case TRADEMENUFUNC_UNUSED_15:
+ ChooseMonAfterButtonPress();
+ break;
+ case TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE:
+ LinkTradeWaitForQueue();
+ break;
+ case TRADEMENUFUNC_PARTNER_MON_INVALID:
+ PartnersMonWasInvalid();
+ break;
+ //case TRADEMENUFUNC_STANDBY: is nop
}
}
-static void sub_807967C(u8 a0)
+static void SetSelectedMon(u8 cursorPosition)
{
- u8 whichParty = a0 / PARTY_SIZE;
+ //cursorPosition 0-5 are the player's mons, 6-11 are the partner's
+ u8 whichParty = cursorPosition / PARTY_SIZE;
- if (gUnknown_0203229C->unk_74[whichParty] == 0)
+ if (sTradeMenuData->drawPartyState[whichParty] == 0)
{
- gUnknown_0203229C->unk_74[whichParty] = 1;
- gUnknown_0203229C->unk_76[whichParty] = a0;
+ sTradeMenuData->drawPartyState[whichParty] = 1;
+ sTradeMenuData->selectedMonIdx[whichParty] = cursorPosition;
}
}
-static void sub_80796B4(u8 a0)
+static void DrawTradeMenuParty(u8 whichParty)
{
s8 nameStringWidth;
u8 nickname[20];
u8 movesString[56];
u8 i;
u8 partyIdx;
- u8 whichParty;
- u8 monIdx = gUnknown_0203229C->unk_76[a0];
+ u8 selectedMonParty;
+ u8 selectedMonIdx = sTradeMenuData->selectedMonIdx[whichParty];
- whichParty = 1;
- if (gUnknown_0203229C->unk_76[a0] < PARTY_SIZE)
- whichParty = 0;
- partyIdx = monIdx % PARTY_SIZE;
+ selectedMonParty = TRADE_PARTNER;
+ if (sTradeMenuData->selectedMonIdx[whichParty] < PARTY_SIZE)
+ selectedMonParty = TRADE_PLAYER;
+ partyIdx = selectedMonIdx % PARTY_SIZE;
nameStringWidth = 0;
- switch (gUnknown_0203229C->unk_74[a0])
+ switch (sTradeMenuData->drawPartyState[whichParty])
{
case 1:
- for (i = 0; i < gUnknown_0203229C->partyCounts[a0]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++)
{
- gSprites[gUnknown_0203229C->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE;
+ gSprites[sTradeMenuData->partySpriteIds[0][i + (selectedMonParty * PARTY_SIZE)]].invisible = TRUE;
}
for (i = 0; i < 6; i++)
{
- ClearWindowTilemap(i + (a0 * 6 + 2));
+ ClearWindowTilemap(i + (whichParty * PARTY_SIZE + 2));
}
- gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE;
- gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20;
- gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
- gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12;
- StoreSpriteCallbackInData6(&gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], sub_80D3014);
- gUnknown_0203229C->unk_74[a0]++;
- sub_80A6DEC(&gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]);
- CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0);
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].invisible = FALSE;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[0] = 20;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[4] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12;
+ StoreSpriteCallbackInData6(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]], SpriteCB_MonIcon);
+ sTradeMenuData->drawPartyState[whichParty]++;
+ TradeMenuBouncePartySprites(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]]);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(0);
- if (whichParty == 0)
- sub_8079F74();
+ if (selectedMonParty == TRADE_PLAYER)
+ PrintNicknamesForTradeMenu();
break;
case 2:
- if (gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == sub_80D3014)
- gUnknown_0203229C->unk_74[a0] = 3;
+ if (gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon)
+ sTradeMenuData->drawPartyState[whichParty] = 3;
break;
case 3:
- CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, selectedMonParty * 15, 0, 15, 17, 0);
CopyBgTilemapBufferToVram(1);
- gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
- gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12;
- gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0;
- gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0;
- nameStringWidth = sub_8079A3C(nickname, whichParty, partyIdx);
- AddTextPrinterParameterized3((a0 * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, gUnknown_0832DEE0, 0, nickname);
- sub_8079AA4(movesString, whichParty, partyIdx);
- AddTextPrinterParameterized4((a0 * 2) + 15, 1, 0, 0, 0, 0, gUnknown_0832DEE0, 0, movesString);
- PutWindowTilemap((a0 * 2) + 14);
- CopyWindowToVram((a0 * 2) + 14, 3);
- PutWindowTilemap((a0 * 2) + 15);
- CopyWindowToVram((a0 * 2) + 15, 3);
- gUnknown_0203229C->unk_74[a0]++;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos1.x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos1.y = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos2.x = 0;
+ gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos2.y = 0;
+ nameStringWidth = GetMonNicknameWidth(nickname, selectedMonParty, partyIdx);
+ AddTextPrinterParameterized3((whichParty * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, sTradeTextColors, 0, nickname);
+ BufferTradeMonMoves(movesString, selectedMonParty, partyIdx);
+ AddTextPrinterParameterized4((whichParty * 2) + 15, 1, 0, 0, 0, 0, sTradeTextColors, 0, movesString);
+ PutWindowTilemap((whichParty * 2) + 14);
+ CopyWindowToVram((whichParty * 2) + 14, 3);
+ PutWindowTilemap((whichParty * 2) + 15);
+ CopyWindowToVram((whichParty * 2) + 15, 3);
+ sTradeMenuData->drawPartyState[whichParty]++;
break;
case 4:
- sub_8079C4C(a0, partyIdx, gUnknown_0832DF99[a0][0] + 4, gUnknown_0832DF99[a0][1] + 1, gUnknown_0832DF99[a0][0], gUnknown_0832DF99[a0][1]);
- gUnknown_0203229C->unk_74[a0]++;
+ DrawTradeMenuPartyMonInfo(whichParty, partyIdx,
+ sTradeMenuPartyMonBoxDimensions[whichParty][0] + 4,
+ sTradeMenuPartyMonBoxDimensions[whichParty][1] + 1,
+ sTradeMenuPartyMonBoxDimensions[whichParty][0],
+ sTradeMenuPartyMonBoxDimensions[whichParty][1]);
+ sTradeMenuData->drawPartyState[whichParty]++;
break;
}
}
-static u8 sub_8079A3C(u8 *str, u8 whichParty, u8 monIdx)
+static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 monIdx)
{
u8 nickname[12];
- if (whichParty == 0)
+ if (whichParty == TRADE_PLAYER)
GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname);
else
GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname);
@@ -3030,104 +1864,104 @@ static u8 sub_8079A3C(u8 *str, u8 whichParty, u8 monIdx)
return GetStringWidth(0, str, GetFontAttribute(0, FONTATTR_LETTER_SPACING));
}
-static void sub_8079AA4(u8 *a0, u8 a1, u8 a2)
+static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx)
{
u16 moves[MAX_MON_MOVES];
u16 i;
- if (!gUnknown_0203229C->unk_51[a1][a2])
+ if (!sTradeMenuData->isEgg[whichParty][partyIdx])
{
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (!a1)
+ if (whichParty == TRADE_PLAYER)
{
- moves[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL);
+ moves[i] = GetMonData(&gPlayerParty[partyIdx], i + MON_DATA_MOVE1, NULL);
}
else
{
- moves[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL);
+ moves[i] = GetMonData(&gEnemyParty[partyIdx], i + MON_DATA_MOVE1, NULL);
}
}
- StringCopy(a0, gText_EmptyString7);
+ StringCopy(str, sText_EmptyString);
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (moves[i] != MOVE_NONE)
{
- StringAppend(a0, gMoveNames[moves[i]]);
+ StringAppend(str, gMoveNames[moves[i]]);
}
- StringAppend(a0, gText_NewLine3);
+ StringAppend(str, sText_NewLine);
}
}
else
{
- StringCopy(a0, gText_EmptyString7);
- StringAppend(a0, gText_FourQuestionMarks);
+ StringCopy(str, sText_EmptyString);
+ StringAppend(str, sText_FourQuestionMarks);
}
}
-static void sub_8079B84(u8 whichParty, u8 windowId, u8 *str)
+static void PrintMonNicknameForTradeMenu(u8 whichParty, u8 windowId, u8 *nickname)
{
u8 xPos;
windowId += (whichParty * PARTY_SIZE) + 2;
- xPos = GetStringCenterAlignXOffset(0, str, 64);
- AddTextPrinterParameterized3(windowId, 0, xPos, 4, gUnknown_0832DEE0, 0, str);
+ xPos = GetStringCenterAlignXOffset(0, nickname, 64);
+ AddTextPrinterParameterized3(windowId, 0, xPos, 4, sTradeTextColors, 0, nickname);
PutWindowTilemap(windowId);
CopyWindowToVram(windowId, 3);
}
-static void sub_8079BE0(u8 whichParty)
+static void PrintPartyNicknamesForTradeMenu(u8 whichParty)
{
u8 i;
- u8 sp[20];
- u8 sp14[32];
- struct Pokemon *mons = whichParty == 0 ? gPlayerParty : gEnemyParty;
+ u8 nickname[20];
+ u8 str[32];
+ struct Pokemon *party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty;
- for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++)
{
- GetMonData(&mons[i], MON_DATA_NICKNAME, sp);
- StringCopy10(sp14, sp);
- sub_8079B84(whichParty, i, sp14);
+ GetMonData(&party[i], MON_DATA_NICKNAME, nickname);
+ StringCopy10(str, nickname);
+ PrintMonNicknameForTradeMenu(whichParty, i, str);
}
}
-static void sub_8079C4C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5)
+static void DrawTradeMenuPartyMonInfo(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width, u8 height)
{
u8 level;
- u32 r2;
+ u32 symbolTile;
u8 gender;
u8 nickname[12];
- CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DDD704, a4, a5, 6, 3, 0);
+ CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, width, height, 6, 3, 0);
CopyBgTilemapBufferToVram(1);
- if (whichParty == 0)
+ if (whichParty == TRADE_PLAYER)
level = GetMonData(&gPlayerParty[monIdx], MON_DATA_LEVEL, NULL);
else
level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL);
- if (gUnknown_0203229C->unk_51[whichParty][monIdx] == 0)
+ if (!sTradeMenuData->isEgg[whichParty][monIdx])
{
if (level / 10 != 0)
- gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60;
+ sTradeMenuData->tilemapBuffer[x + (y * 32)] = (level / 10) + 0x60;
- gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70;
+ sTradeMenuData->tilemapBuffer[x + (y * 32) + 1] = (level % 10) + 0x70;
}
else
{
- gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 32] = gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 33];
- gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 31] = gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400;
+ sTradeMenuData->tilemapBuffer[x + (y * 32) - 32] = sTradeMenuData->tilemapBuffer[x + (y * 32) - 33];
+ sTradeMenuData->tilemapBuffer[x + (y * 32) - 31] = sTradeMenuData->tilemapBuffer[x + (y * 32) - 36] | 0x400;
}
- if (gUnknown_0203229C->unk_51[whichParty][monIdx] != 0)
+ if (sTradeMenuData->isEgg[whichParty][monIdx])
{
- r2 = 0x480;
+ symbolTile = 0x480;
}
else
{
- if (whichParty == 0)
+ if (whichParty == TRADE_PLAYER)
{
gender = GetMonGender(&gPlayerParty[monIdx]);
GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname);
@@ -3140,41 +1974,45 @@ static void sub_8079C4C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5)
switch (gender)
{
- case MON_MALE:
- r2 = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83;
- break;
- case MON_FEMALE:
- r2 = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83;
- break;
- default:
- r2 = 0x83;
- break;
+ case MON_MALE:
+ symbolTile = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83;
+ break;
+ case MON_FEMALE:
+ symbolTile = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83;
+ break;
+ default:
+ symbolTile = 0x83;
+ break;
}
}
- gUnknown_0203229C->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2;
+ sTradeMenuData->tilemapBuffer[(y - 1) * 32 + x + 1] = symbolTile;
}
// Very close but loop preamble not working.
#ifdef NONMATCHING
-static void sub_8079E44(u8 whichParty)
+static void DrawTradeMenuPartyInfo(u8 whichParty)
{
int i;
- for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++)
{
- sub_8079C4C(whichParty, i, gTradeLevelDisplayCoords[whichParty][i][0], gTradeLevelDisplayCoords[whichParty][i][1], gTradeMonBoxCoords[whichParty][i][0], gTradeMonBoxCoords[whichParty][i][1]);
+ DrawTradeMenuPartyMonInfo(whichParty, i,
+ sTradeMonLevelCoords[whichParty][i][0],
+ sTradeMonLevelCoords[whichParty][i][1],
+ sTradeMonBoxCoords[whichParty][i][0],
+ sTradeMonBoxCoords[whichParty][i][1]);
}
}
#else
NAKED
-static void sub_8079E44(u8 whichParty)
+static void DrawTradeMenuPartyInfo(u8 whichParty)
{
asm_unified("push {r4-r7,lr}\n\
sub sp, 0x8\n\
lsls r0, 24\n\
lsrs r6, r0, 24\n\
movs r7, 0\n\
- ldr r0, =gUnknown_0203229C\n\
+ ldr r0, =sTradeMenuData\n\
ldr r0, [r0]\n\
adds r0, 0x36\n\
adds r0, r6\n\
@@ -3183,10 +2021,10 @@ static void sub_8079E44(u8 whichParty)
bge _08079E94\n\
lsls r0, r6, 1\n\
adds r0, r6\n\
- ldr r1, =gTradeLevelDisplayCoords\n\
+ ldr r1, =sTradeMonLevelCoords\n\
lsls r0, 2\n\
adds r5, r0, r1\n\
- ldr r1, =gTradeMonBoxCoords\n\
+ ldr r1, =sTradeMonBoxCoords\n\
adds r4, r0, r1\n\
_08079E6A:\n\
lsls r1, r7, 24\n\
@@ -3198,11 +2036,11 @@ _08079E6A:\n\
ldrb r0, [r4, 0x1]\n\
str r0, [sp, 0x4]\n\
adds r0, r6, 0\n\
- bl sub_8079C4C\n\
+ bl DrawTradeMenuPartyMonInfo\n\
adds r5, 0x2\n\
adds r4, 0x2\n\
adds r7, 0x1\n\
- ldr r0, =gUnknown_0203229C\n\
+ ldr r0, =sTradeMenuData\n\
ldr r0, [r0]\n\
adds r0, 0x36\n\
adds r0, r6\n\
@@ -3218,405 +2056,388 @@ _08079E94:\n\
}
#endif // NONMATCHING
-static void sub_8079EA8(u8 whichParty)
+static void ResetTradeMenuPartyPositions(u8 whichParty)
{
int i;
- for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++)
+ for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++)
{
- gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].invisible = FALSE;
- gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14;
- gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12;
- gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos2.x = 0;
- gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos2.y = 0;
+ gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].invisible = FALSE;
+ gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].pos1.x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14;
+ gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].pos1.y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12;
+ gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].pos2.x = 0;
+ gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].pos2.y = 0;
}
}
-static void sub_8079F74(void)
+static void PrintNicknamesForTradeMenu(void)
{
rbox_fill_rectangle(1);
- sub_8079BE0(1);
+ //PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); ?
+ PrintPartyNicknamesForTradeMenu(TRADE_PARTNER);
}
-static void sub_8079F88(u8 a0)
+static void RedrawTradeMenuParty(u8 whichParty)
{
- CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0);
+ CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0);
CopyBgTilemapBufferToVram(1);
- sub_8079E44(a0);
- sub_8079BE0(a0);
- sub_8079EA8(a0);
- sub_807A308(gUnknown_0832DE94[1], (void *)(OBJ_VRAM0 + (gUnknown_0203229C->unk_72 * 32)), 24);
- gUnknown_0203229C->unk_74[a0] = 0;
+ DrawTradeMenuPartyInfo(whichParty);
+ PrintPartyNicknamesForTradeMenu(whichParty);
+ ResetTradeMenuPartyPositions(whichParty);
+ DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24);
+ sTradeMenuData->drawPartyState[whichParty] = 0;
}
-static void sub_807A000(u8 taskId)
+static void Task_DrawSelectionSummary(u8 taskId)
{
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
CopyBgTilemapBufferToVram(0);
}
-static void sub_807A024(u8 taskId)
+static void Task_DrawSelectionTrade(u8 taskId)
{
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
CopyBgTilemapBufferToVram(0);
}
-static void sub_807A048(u16 a0, u8 a1)
+static void QueueAction(u16 delay, u8 actionId)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++)
{
- if (!gUnknown_0203229C->unk_8D0[i].unk_0)
+ if (!sTradeMenuData->queuedActions[i].queued)
{
- gUnknown_0203229C->unk_8D0[i].unk_2 = a0;
- gUnknown_0203229C->unk_8D0[i].unk_4 = a1;
- gUnknown_0203229C->unk_8D0[i].unk_0 = TRUE;
+ sTradeMenuData->queuedActions[i].queueDelay = delay;
+ sTradeMenuData->queuedActions[i].actionId = actionId;
+ sTradeMenuData->queuedActions[i].queued = TRUE;
break;
}
}
}
-static u32 sub_807A09C(void)
+static u32 GetNumQueuedActions(void)
{
- u32 acc = 0;
+ u32 numActions = 0;
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++)
{
- acc += gUnknown_0203229C->unk_8D0[i].unk_0;
+ numActions += sTradeMenuData->queuedActions[i].queued;
}
- return acc;
+ return numActions;
}
-static void sub_807A0C4(void)
+static void DoQueuedActions(void)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++)
{
- if (gUnknown_0203229C->unk_8D0[i].unk_0)
+ if (sTradeMenuData->queuedActions[i].queued)
{
- if (gUnknown_0203229C->unk_8D0[i].unk_2)
+ if (sTradeMenuData->queuedActions[i].queueDelay)
{
- gUnknown_0203229C->unk_8D0[i].unk_2--;
+ sTradeMenuData->queuedActions[i].queueDelay--;
}
else
{
- switch (gUnknown_0203229C->unk_8D0[i].unk_4)
+ switch (sTradeMenuData->queuedActions[i].actionId)
{
- case 0:
- sub_8077170(gUnknown_0203229C->linkData, 20);
- break;
- case 1:
- sub_807A19C(0);
- break;
- case 2:
- sub_807A19C(2);
- break;
- case 3:
- case 4:
- case 5:
- sub_807A19C(3);
- break;
- case 6:
- sub_807A19C(6);
- break;
- case 7:
- sub_807A19C(7);
- break;
- case 8:
- sub_807A19C(8);
- break;
+ case QUEUE_SEND_DATA:
+ SendLinkData(sTradeMenuData->linkData, 20);
+ break;
+ case QUEUE_STANDBY:
+ PrintTradeMessage(TRADE_MSG_STANDBY);
+ break;
+ case QUEUE_ONLY_MON1:
+ PrintTradeMessage(TRADE_MSG_ONLY_MON1);
+ break;
+ case QUEUE_ONLY_MON2:
+ case QUEUE_UNUSED1:
+ case QUEUE_UNUSED2:
+ PrintTradeMessage(TRADE_MSG_ONLY_MON2);
+ break;
+ case QUEUE_MON_CANT_BE_TRADED:
+ PrintTradeMessage(TRADE_MSG_MON_CANT_BE_TRADED);
+ break;
+ case QUEUE_EGG_CANT_BE_TRADED:
+ PrintTradeMessage(TRADE_MSG_EGG_CANT_BE_TRADED);
+ break;
+ case QUEUE_FRIENDS_MON_CANT_BE_TRADED:
+ PrintTradeMessage(TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED);
+ break;
}
- gUnknown_0203229C->unk_8D0[i].unk_0 = 0;
+ sTradeMenuData->queuedActions[i].queued = FALSE;
}
}
}
}
-static void sub_807A19C(u8 a0)
+static void PrintTradeMessage(u8 messageId)
{
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized(0, 1, gUnknown_0832DEBC[a0], 0, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(0, 1, sTradeMessages[messageId], 0, 1, TEXT_SPEED_FF, NULL);
DrawTextBorderOuter(0, 20, 12);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
}
-static bool8 sub_807A1F0(void)
+static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void)
{
struct SpriteSheet sheet;
- if (gUnknown_0203229C->unk_A8 < 14)
+ if (sTradeMenuData->timer < (int)ARRAY_COUNT(sMessageBoxTileBuffers))
{
- sheet.data = gUnknown_02032188[gUnknown_0203229C->unk_A8];
+ sheet.data = sMessageBoxTileBuffers[sTradeMenuData->timer];
sheet.size = 0x100;
- sheet.tag = 200 + gUnknown_0203229C->unk_A8;
+ sheet.tag = 200 + sTradeMenuData->timer;
}
- switch (gUnknown_0203229C->unk_A8)
+ switch (sTradeMenuData->timer)
{
- case 0 ... 7:
- LoadSpriteSheet(&sheet);
- gUnknown_0203229C->unk_A8++;
- break;
- case 8:
- gUnknown_0203229C->unk_72 = LoadSpriteSheet(&sheet);
- gUnknown_0203229C->unk_A8++;
- break;
- case 9 ... 13:
- LoadSpriteSheet(&sheet);
- gUnknown_0203229C->unk_A8++;
- break;
- case 14:
- LoadSpritePalette(&gSpritePalette_TradeScreenText);
- gUnknown_0203229C->unk_A8++;
- break;
- case 15:
- LoadSpritePalette(&gUnknown_0832DC44);
- gUnknown_0203229C->unk_A8++;
- break;
- case 16:
- LoadSpriteSheet(&gUnknown_0832DC3C);
- gUnknown_0203229C->unk_A8++;
- break;
- case 17:
- gUnknown_0203229C->unk_A8 = 0;
- return TRUE;
+ case 0 ... 7:
+ LoadSpriteSheet(&sheet);
+ sTradeMenuData->timer++;
+ break;
+ case 8:
+ sTradeMenuData->bottomTextTileStart = LoadSpriteSheet(&sheet);
+ sTradeMenuData->timer++;
+ break;
+ case 9 ... 13:
+ LoadSpriteSheet(&sheet);
+ sTradeMenuData->timer++;
+ break;
+ case 14:
+ LoadSpritePalette(&gSpritePalette_TradeScreenText);
+ sTradeMenuData->timer++;
+ break;
+ case 15:
+ LoadSpritePalette(&gUnknown_0832DC44);
+ sTradeMenuData->timer++;
+ break;
+ case 16:
+ LoadSpriteSheet(&sTradeButtonsSpriteSheet);
+ sTradeMenuData->timer++;
+ break;
+ case 17:
+ sTradeMenuData->timer = 0;
+ return TRUE;
}
return FALSE;
}
-static void sub_807A308(const u8 *a0, u8 *a1, u8 unused)
+static void DrawTextWindowAndBuffer6Bytes(const u8 *str, u8 *dest, u8 unused)
{
- sub_80C6D80(a0, a1, 0, 0, 6);
+ DrawTextWindowAndBufferTiles(str, dest, 0, 0, 6);
}
-static void sub_807A320(u8 who)
+static void SetTradePartyLiveStatuses(u8 whichParty)
{
int i;
- switch (who)
+ switch (whichParty)
{
- case 0:
- for (i = 0; i < gUnknown_0203229C->partyCounts[who]; i++)
+ case TRADE_PLAYER:
+ for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE)
{
- if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE)
- {
- gUnknown_0203229C->unk_45[who][i] = 0;
- gUnknown_0203229C->unk_51[who][i] = 1;
- }
- else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
- {
- gUnknown_0203229C->unk_45[who][i] = 0;
- gUnknown_0203229C->unk_51[who][i] = 0;
- }
- else
- {
- gUnknown_0203229C->unk_45[who][i] = 1;
- gUnknown_0203229C->unk_51[who][i] = 0;
- }
+ sTradeMenuData->isLiveMon[whichParty][i] = FALSE;
+ sTradeMenuData->isEgg[whichParty][i] = TRUE;
}
- break;
- case 1:
- for (i = 0; i < gUnknown_0203229C->partyCounts[who]; i++)
+ else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
{
- if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE)
- {
- gUnknown_0203229C->unk_45[who][i] = 0;
- gUnknown_0203229C->unk_51[who][i] = 1;
- }
- else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
- {
- gUnknown_0203229C->unk_45[who][i] = 0;
- gUnknown_0203229C->unk_51[who][i] = 0;
- }
- else
- {
- gUnknown_0203229C->unk_45[who][i] = 1;
- gUnknown_0203229C->unk_51[who][i] = 0;
- }
+ sTradeMenuData->isLiveMon[whichParty][i] = FALSE;
+ sTradeMenuData->isEgg[whichParty][i] = FALSE;
}
- break;
+ else
+ {
+ sTradeMenuData->isLiveMon[whichParty][i] = TRUE;
+ sTradeMenuData->isEgg[whichParty][i] = FALSE;
+ }
+ }
+ break;
+ case TRADE_PARTNER:
+ for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE)
+ {
+ sTradeMenuData->isLiveMon[whichParty][i] = FALSE;
+ sTradeMenuData->isEgg[whichParty][i] = TRUE;
+ }
+ else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0)
+ {
+ sTradeMenuData->isLiveMon[whichParty][i] = FALSE;
+ sTradeMenuData->isEgg[whichParty][i] = FALSE;
+ }
+ else
+ {
+ sTradeMenuData->isLiveMon[whichParty][i] = TRUE;
+ sTradeMenuData->isEgg[whichParty][i] = FALSE;
+ }
+ }
+ break;
}
}
-static void sub_807A468(u8 who)
+static void GetTradePartyHPBarLevels(u8 who)
{
u16 i, curHp, maxHp;
switch (who)
{
- case 0:
- for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++)
- {
- curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
- maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
- gUnknown_0203229C->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp);
- }
- break;
- case 1:
- for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++)
- {
- curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP);
- maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP);
- gUnknown_0203229C->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp);
- }
- break;
+ case TRADE_PLAYER:
+ for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++)
+ {
+ curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP);
+ maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
+ sTradeMenuData->hpBarLevels[TRADE_PLAYER][i] = GetHPBarLevel(curHp, maxHp);
+ }
+ break;
+ case TRADE_PARTNER:
+ for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++)
+ {
+ curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP);
+ maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP);
+ sTradeMenuData->hpBarLevels[TRADE_PARTNER][i] = GetHPBarLevel(curHp, maxHp);
+ }
+ break;
}
}
-static void sub_807A53C(void)
+static void SetTradePartyHPBarSprites(void)
{
int i, j;
for (i = 0; i < 2; i++)
{
- for (j = 0; j < gUnknown_0203229C->partyCounts[i]; j++)
+ for (j = 0; j < sTradeMenuData->partyCounts[i]; j++)
{
- sub_80D32C8(&gSprites[gUnknown_0203229C->partyIcons[i][j]], 4 - gUnknown_0203229C->unk_5D[i][j]);
+ SetPartyHPBarSprite(&gSprites[sTradeMenuData->partySpriteIds[i][j]], 4 - sTradeMenuData->hpBarLevels[i][j]);
}
}
}
-static void sub_807A5B0(void)
+static void SaveTradeGiftRibbons(void)
{
int i;
- for (i = 0; i < 11; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->giftRibbons); i++)
{
- if (gSaveBlock1Ptr->giftRibbons[i] == 0 && gUnknown_0203229C->unk_A9[i] != 0)
+ if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenuData->giftRibbons[i] != 0)
{
- if (gUnknown_0203229C->unk_A9[i] < 64)
- gSaveBlock1Ptr->giftRibbons[i] = gUnknown_0203229C->unk_A9[i];
+ if (sTradeMenuData->giftRibbons[i] < 64)
+ gSaveBlock1Ptr->giftRibbons[i] = sTradeMenuData->giftRibbons[i];
}
}
}
-static u32 sub_807A5F4(struct Pokemon *monList, int a1, int monIdx)
+static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int monIdx)
{
- int i, sum;
+ int i, numMonsLeft;
struct LinkPlayer *player;
- u32 species[6];
- u32 species2[6];
+ u32 species[PARTY_SIZE];
+ u32 species2[PARTY_SIZE];
- for (i = 0; i < a1; i++)
+ for (i = 0; i < partyCount; i++)
{
- species2[i] = GetMonData(&monList[i], MON_DATA_SPECIES2);
- species[i] = GetMonData(&monList[i], MON_DATA_SPECIES);
+ species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES2);
+ species[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES);
}
+ // Cant trade Eggs or non-Hoenn mons if player doesn't have National Dex
if (!IsNationalPokedexEnabled())
{
if (species2[monIdx] == SPECIES_EGG)
- {
- return 3;
- }
+ return CANT_TRADE_EGG_YET;
if (!IsSpeciesInHoennDex(species2[monIdx]))
- {
- return 2;
- }
+ return CANT_TRADE_NATIONAL;
}
player = &gLinkPlayers[GetMultiplayerId() ^ 1];
if ((player->version & 0xFF) != VERSION_RUBY &&
(player->version & 0xFF) != VERSION_SAPPHIRE)
{
- if ((player->name[10] & 0xF) == 0)
+ // Does partner not have National Dex
+ if (!(player->progressFlagsCopy & 0xF))
{
if (species2[monIdx] == SPECIES_EGG)
- {
- return 5;
- }
+ return CANT_TRADE_EGG_YET2;
if (!IsSpeciesInHoennDex(species2[monIdx]))
- {
- return 4;
- }
+ return CANT_TRADE_INVALID_MON;
}
}
if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW)
{
- if (!GetMonData(&monList[monIdx], MON_DATA_OBEDIENCE))
- {
- return 4;
- }
+ if (!GetMonData(&playerParty[monIdx], MON_DATA_OBEDIENCE))
+ return CANT_TRADE_INVALID_MON;
}
- for (i = 0; i < a1; i++)
+ // Make Eggs not count for numMonsLeft
+ for (i = 0; i < partyCount; i++)
{
if (species2[i] == SPECIES_EGG)
- {
species2[i] = SPECIES_NONE;
- }
}
- for (sum = 0, i = 0; i < a1; i++)
+ // Count alive mons in party, excluding selected trade mon
+ for (numMonsLeft = 0, i = 0; i < partyCount; i++)
{
if (i != monIdx)
- {
- sum += species2[i];
- }
+ numMonsLeft += species2[i];
}
- if (sum != 0)
- {
- return 0;
- }
+ if (numMonsLeft != 0)
+ return CAN_TRADE_MON;
else
- {
- return 1;
- }
+ return CANT_TRADE_LAST_MON;
}
-s32 sub_807A728(void)
+s32 GetGameProgressForLinkTrade(void)
{
- s32 val;
+ // isGameFrLg could have been a bool but they use 2 and > 0 instead
+ // possible other checks (for other game versions?) were planned/removed
+ s32 isGameFrLg;
u16 version;
if (gReceivedRemoteLinkPlayers != 0)
{
- val = 0;
+ isGameFrLg = 0;
version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF);
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE || version == VERSION_EMERALD)
- {
- // this value could actually be anything 0 or less
- val = 0;
- }
+ isGameFrLg = 0;
else if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN)
- {
- val = 2;
- }
+ isGameFrLg = 2;
- if (val > 0)
+ // If trading with FRLG, both players must be champion
+ if (isGameFrLg > 0)
{
- if (gLinkPlayers[GetMultiplayerId()].name[10] & 0xF0)
+ // Is player champion
+ if (gLinkPlayers[GetMultiplayerId()].progressFlagsCopy & 0xF0)
{
- if (val == 2)
+ if (isGameFrLg == 2) //unnecessary check, isGameFrLg always 2 here
{
- if (gLinkPlayers[GetMultiplayerId() ^ 1].name[10] & 0xF0)
- {
- return 0;
- }
+ // Is partner champion
+ if (gLinkPlayers[GetMultiplayerId() ^ 1].progressFlagsCopy & 0xF0)
+ return TRADE_BOTH_PLAYERS_READY;
else
- {
- return 2;
- }
+ return TRADE_PARTNER_NOT_READY;
}
}
else
{
- return 1;
+ return TRADE_PLAYER_NOT_READY;
}
}
}
- return 0;
+ return TRADE_BOTH_PLAYERS_READY;
}
static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet)
@@ -3629,122 +2450,118 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet)
return FALSE;
}
-int sub_807A7E0(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet)
+int GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, struct UnkLinkRfuStruct_02022B14Substruct rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isObedientBitSet)
{
- u8 r9 = a0.unk_01_0;
- u8 r2 = a0.unk_00_7;
- u8 r10 = a1.unk_01_0;
- u8 r0 = a1.unk_00_7;
- u8 r1 = a1.unk_01_2;
+ bool8 playerHasNationalDex = rfuPlayer.hasNationalDex;
+ bool8 playerIsChampion = rfuPlayer.isChampion;
+ bool8 partnerHasNationalDex = rfuPartner.hasNationalDex;
+ bool8 partnerIsChampion = rfuPartner.isChampion;
+ u8 r1 = rfuPartner.unk_01_2;
if (r1 != 3)
{
- if (!r2)
+ if (!playerIsChampion)
{
- return 8;
+ return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1;
}
- else if (!r0)
+ else if (!partnerIsChampion)
{
- return 9;
+ return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2;
}
}
- if (IsDeoxysOrMewUntradable(species3, isObedientBitSet))
+ if (IsDeoxysOrMewUntradable(playerSpecies, isObedientBitSet))
{
- return 4;
+ return UR_TRADE_MSG_MON_CANT_BE_TRADED_2;
}
- if (species2 == SPECIES_EGG)
+ if (partnerSpecies == SPECIES_EGG)
{
- if (species1 != species2)
+ if (playerSpecies2 != partnerSpecies)
{
- return 2;
+ return UR_TRADE_MSG_NOT_EGG;
}
}
else
{
- if (gBaseStats[species1].type1 != type && gBaseStats[species1].type2 != type)
+ if (gBaseStats[playerSpecies2].type1 != requestedType && gBaseStats[playerSpecies2].type2 != requestedType)
{
- return 1;
+ return UR_TRADE_MSG_NOT_MON_PARTNER_WANTS;
}
}
- if (species1 == SPECIES_EGG && species1 != species2)
+ if (playerSpecies2 == SPECIES_EGG && playerSpecies2 != partnerSpecies)
{
- return 3;
+ return UR_TRADE_MSG_MON_CANT_BE_TRADED_1;
}
- if (!r9)
+ if (!playerHasNationalDex)
{
- if (species1 == SPECIES_EGG)
+ if (playerSpecies2 == SPECIES_EGG)
{
- return 6;
+ return UR_TRADE_MSG_EGG_CANT_BE_TRADED;
}
- if (!IsSpeciesInHoennDex(species1))
+ if (!IsSpeciesInHoennDex(playerSpecies2))
{
- return 4;
+ return UR_TRADE_MSG_MON_CANT_BE_TRADED_2;
}
- if (!IsSpeciesInHoennDex(species2))
+ if (!IsSpeciesInHoennDex(partnerSpecies))
{
- return 5;
+ return UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED;
}
}
- if (!r10 && !IsSpeciesInHoennDex(species1))
+ if (!partnerHasNationalDex && !IsSpeciesInHoennDex(playerSpecies2))
{
- return 7;
+ return UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON;
}
- return 0;
+ return UR_TRADE_MSG_NONE;
}
-int sub_807A8D0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3)
+int CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, u16 species2, u16 species, u8 isObedientBitSet)
{
- u8 unk = a0.unk_01_0;
+ bool8 hasNationalDex = rfuPlayer.hasNationalDex;
- if (IsDeoxysOrMewUntradable(a2, a3))
- {
- return 1;
- }
+ if (IsDeoxysOrMewUntradable(species, isObedientBitSet))
+ return CANT_REGISTER_MON;
- if (unk)
- {
- return 0;
- }
+ if (hasNationalDex)
+ return CAN_REGISTER_MON;
- if (species == SPECIES_EGG)
- {
- return 2;
- }
+ // Eggs can only be traded if the player has the National Dex
+ if (species2 == SPECIES_EGG)
+ return CANT_REGISTER_EGG;
- if (IsSpeciesInHoennDex(species))
- {
- return 0;
- }
+ if (IsSpeciesInHoennDex(species2))
+ return CAN_REGISTER_MON;
- return 1;
+ return CANT_REGISTER_MON;
}
// r6/r7 flip. Ugh.
+// Spin Trade wasnt fully implemented, but this checks if a mon would be valid to Spin Trade
+// Unlike later generations, this version of Spin Trade isnt only for Eggs
#ifdef NONMATCHING
-int sub_807A918(struct Pokemon *mon, u16 monIdx)
+int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx)
{
- int i, version, versions, unk, unk2;
+ int i, version, versions, canTradeAnyMon, numMonsLeft;
int speciesArray[PARTY_SIZE];
+ // Make Eggs not count for numMonsLeft
for (i = 0; i < gPlayerPartyCount; i++)
{
speciesArray[i] = GetMonData(&mon[i], MON_DATA_SPECIES2);
if (speciesArray[i] == SPECIES_EGG)
{
- speciesArray[i] = 0;
+ speciesArray[i] = SPECIES_NONE;
}
}
+ canTradeAnyMon = TRUE;
versions = 0;
- unk = 1;
for (i = 0; i < GetLinkPlayerCount(); i++)
{
version = gLinkPlayers[i].version & 0xFF;
@@ -3762,51 +2579,41 @@ int sub_807A918(struct Pokemon *mon, u16 monIdx)
for (i = 0; i < GetLinkPlayerCount(); i++)
{
struct LinkPlayer *player = &gLinkPlayers[i];
- if ((player->name[8] & 0xF) == 0)
- {
- unk = 0;
- }
- if (versions && (player->name[8] / 16))
- {
- unk = 0;
- }
+ // Does player not have National Dex
+ if (!(player->progressFlags & 0xF))
+ canTradeAnyMon = FALSE;
+
+ if (versions && (player->progressFlags / 16))
+ canTradeAnyMon = FALSE;
}
- if (unk == 0)
+ if (canTradeAnyMon == FALSE)
{
if (!IsSpeciesInHoennDex(speciesArray[monIdx]))
- {
- return 2;
- }
+ return CANT_TRADE_NATIONAL;
if (speciesArray[monIdx] == SPECIES_NONE)
- {
- return 3;
- }
+ return CANT_TRADE_EGG_YET;
}
- unk2 = 0;
+ numMonsLeft = 0;
for (i = 0; i < gPlayerPartyCount; i++)
{
if (monIdx != i)
{
- unk2 += speciesArray[i];
+ numMonsLeft += speciesArray[i];
}
}
- if (!unk2)
- {
- return 1;
- }
+ if (!numMonsLeft)
+ return CANT_TRADE_LAST_MON;
else
- {
- return 0;
- }
+ return CAN_TRADE_MON;
}
#else
NAKED
-int sub_807A918(struct Pokemon *mon, u16 a1)
+int CanSpinTradeMon(struct Pokemon *mon, u16 a1)
{
asm_unified("push {r4-r7,lr}\n\
mov r7, r8\n\
@@ -4009,11 +2816,11 @@ static void sub_807AB04(struct Sprite *sprite)
}
}
-static void sub_807AB28(void)
+static void SetTradeBGAffine(void)
{
struct BgAffineDstData affine;
- DoBgAffineSet(&affine, gUnknown_020322A0->unk_D4 * 0x100, gUnknown_020322A0->unk_D6 * 0x100, gUnknown_020322A0->unk_DC, gUnknown_020322A0->unk_DE, gUnknown_020322A0->unk_E8, gUnknown_020322A0->unk_E8, gUnknown_020322A0->unk_EC);
+ DoBgAffineSet(&affine, sTradeData->texX * 0x100, sTradeData->texY * 0x100, sTradeData->scrX, sTradeData->scrY, sTradeData->sXY, sTradeData->sXY, sTradeData->alpha);
SetGpuReg(REG_OFFSET_BG2PA, affine.pa);
SetGpuReg(REG_OFFSET_BG2PB, affine.pb);
SetGpuReg(REG_OFFSET_BG2PC, affine.pc);
@@ -4024,233 +2831,233 @@ static void sub_807AB28(void)
SetGpuReg(REG_OFFSET_BG2Y_H, affine.dy >> 16);
}
-static void sub_807ABCC(void)
+static void SetTradeGpuRegs(void)
{
u16 dispcnt;
- SetGpuReg(REG_OFFSET_BG1VOFS, gUnknown_020322A0->bg1vofs);
- SetGpuReg(REG_OFFSET_BG1HOFS, gUnknown_020322A0->bg1hofs);
+ SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs);
+ SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs);
dispcnt = GetGpuReg(REG_OFFSET_DISPCNT);
if ((dispcnt & 7) == DISPCNT_MODE_0)
{
- SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_020322A0->bg2vofs);
- SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_020322A0->bg2hofs);
+ SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs);
+ SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs);
}
else
{
- sub_807AB28();
+ SetTradeBGAffine();
}
}
-static void sub_807AC24(void)
+static void VBlankCB_Trade(void)
{
- sub_807ABCC();
+ SetTradeGpuRegs();
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
-static void sub_807AC3C(void)
+static void ClearLinkTimeoutCounter(void)
{
- gUnknown_020322A0->unk_8A = 0;
- gUnknown_020322A0->unk_88 = 0;
- gUnknown_020322A0->unk_89 = 0;
+ sTradeData->linkTimeoutCounter = 0;
+ sTradeData->alwaysZero_88 = 0;
+ sTradeData->alwaysZero_89 = 0;
}
-static void sub_807AC64(void)
+static void CheckForLinkTimeout(void)
{
- if (gUnknown_020322A0->unk_88 == gUnknown_020322A0->unk_89)
- gUnknown_020322A0->unk_8A++;
+ if (sTradeData->alwaysZero_88 == sTradeData->alwaysZero_89)
+ sTradeData->linkTimeoutCounter++;
else
- gUnknown_020322A0->unk_8A = 0;
+ sTradeData->linkTimeoutCounter = 0;
- if (gUnknown_020322A0->unk_8A > 300)
+ if (sTradeData->linkTimeoutCounter > LINK_TRADE_TIMEOUT)
{
CloseLink();
SetMainCallback2(CB2_LinkError);
- gUnknown_020322A0->unk_8A = 0;
- gUnknown_020322A0->unk_89 = 0;
- gUnknown_020322A0->unk_88 = 0;
+ sTradeData->linkTimeoutCounter = 0;
+ sTradeData->alwaysZero_89 = 0;
+ sTradeData->alwaysZero_88 = 0;
}
- gUnknown_020322A0->unk_89 = gUnknown_020322A0->unk_88;
+ sTradeData->alwaysZero_89 = sTradeData->alwaysZero_88;
}
-static u32 sub_807ACDC(void)
+static u32 TradeGetMultiplayerId(void)
{
if (gReceivedRemoteLinkPlayers)
return GetMultiplayerId();
return 0;
}
-static void sub_807ACFC(u8 whichParty, u8 a1)
+static void LoadTradeMonPic(u8 whichParty, u8 state)
{
int pos = 0;
struct Pokemon *mon = NULL;
u16 species;
u32 personality;
- if (whichParty == 0)
+ if (whichParty == TRADE_PLAYER)
{
- mon = &gPlayerParty[gUnknown_02032298[0]];
- pos = 1;
+ mon = &gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]];
+ pos = B_POSITION_OPPONENT_LEFT;
}
- if (whichParty == 1)
+ if (whichParty == TRADE_PARTNER)
{
- mon = &gEnemyParty[gUnknown_02032298[1] % PARTY_SIZE];
- pos = 3;
+ mon = &gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE];
+ pos = B_POSITION_OPPONENT_RIGHT;
}
- switch (a1)
+ switch (state)
{
- case 0:
- species = GetMonData(mon, MON_DATA_SPECIES2);
- personality = GetMonData(mon, MON_DATA_PERSONALITY);
+ case 0:
+ species = GetMonData(mon, MON_DATA_SPECIES2);
+ personality = GetMonData(mon, MON_DATA_PERSONALITY);
- if (whichParty == 0)
- HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
- else
- HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality);
+ if (whichParty == TRADE_PLAYER)
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
+ else
+ HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality);
- LoadCompressedSpritePalette(GetMonSpritePalStruct(mon));
- gUnknown_020322A0->tradeSpecies[whichParty] = species;
- gUnknown_020322A0->unk_68[whichParty] = personality;
- break;
- case 1:
- SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos);
- gUnknown_020322A0->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6);
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[whichParty]].invisible = TRUE;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy;
- break;
+ LoadCompressedSpritePalette(GetMonSpritePalStruct(mon));
+ sTradeData->monSpecies[whichParty] = species;
+ sTradeData->monPersonalities[whichParty] = personality;
+ break;
+ case 1:
+ SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos);
+ sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6);
+ gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE;
+ gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy;
+ break;
}
}
-void sub_807AE50(void)
+void CB2_LinkTrade(void)
{
switch (gMain.state)
{
- case 0:
- if (!gReceivedRemoteLinkPlayers)
- {
- gLinkType = 0x1144;
- CloseLink();
- }
- gUnknown_020322A0 = AllocZeroed(sizeof(*gUnknown_020322A0));
- AllocateMonSpritesGfx();
- ResetTasks();
- ResetSpriteData();
- FreeAllSpritePalettes();
- SetVBlankCallback(sub_807AC24);
- sub_807B170();
- sub_807AC3C();
+ case 0:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ gLinkType = LINKTYPE_0x1144;
+ CloseLink();
+ }
+ sTradeData = AllocZeroed(sizeof(*sTradeData));
+ AllocateMonSpritesGfx();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ SetVBlankCallback(VBlankCB_Trade);
+ InitTradeBgInternal();
+ ClearLinkTimeoutCounter();
+ gMain.state++;
+ sTradeData->neverRead_8C = 0;
+ sTradeData->state = 0;
+ sTradeData->isLinkTrade = TRUE;
+ sTradeData->texX = 64;
+ sTradeData->texY = 64;
+ sTradeData->neverRead_D8 = 0;
+ sTradeData->neverRead_DA = 0;
+ sTradeData->scrX = 120;
+ sTradeData->scrY = 80;
+ sTradeData->sXY = 256;
+ sTradeData->alpha = 0;
+ break;
+ case 1:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ sTradeData->isCableTrade = TRUE;
+ OpenLink();
gMain.state++;
- gUnknown_020322A0->unk_8C = 0;
- gUnknown_020322A0->state = 0;
- gUnknown_020322A0->isLinkTrade = TRUE;
- gUnknown_020322A0->unk_D4 = 64;
- gUnknown_020322A0->unk_D6 = 64;
- gUnknown_020322A0->unk_D8 = 0;
- gUnknown_020322A0->unk_DA = 0;
- gUnknown_020322A0->unk_DC = 120;
- gUnknown_020322A0->unk_DE = 80;
- gUnknown_020322A0->unk_E8 = 256;
- gUnknown_020322A0->unk_EC = 0;
- break;
- case 1:
- if (!gReceivedRemoteLinkPlayers)
- {
- gUnknown_020322A0->unk_FA = 1;
- OpenLink();
- gMain.state++;
- gUnknown_020322A0->timer = 0;
- }
- else
- {
- gMain.state = 4;
- }
- break;
- case 2:
- if (++gUnknown_020322A0->timer > 60)
- {
- gUnknown_020322A0->timer = 0;
- gMain.state++;
- }
- break;
- case 3:
- if (IsLinkMaster())
+ sTradeData->timer = 0;
+ }
+ else
+ {
+ gMain.state = 4;
+ }
+ break;
+ case 2:
+ if (++sTradeData->timer > 60)
+ {
+ sTradeData->timer = 0;
+ gMain.state++;
+ }
+ break;
+ case 3:
+ if (IsLinkMaster())
+ {
+ if (GetLinkPlayerCount_2() >= GetSavedPlayerCount())
{
- if (GetLinkPlayerCount_2() >= GetSavedPlayerCount())
- {
- if (++gUnknown_020322A0->timer > 30)
- {
- CheckShouldAdvanceLinkState();
- gMain.state++;
- }
- }
- else
+ if (++sTradeData->timer > 30)
{
- sub_807AC64();
+ CheckShouldAdvanceLinkState();
+ gMain.state++;
}
}
else
{
- gMain.state++;
+ CheckForLinkTimeout();
}
- break;
- case 4:
- sub_807AC64();
- if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
- gMain.state++;
- break;
- case 5:
- gUnknown_020322A0->unk_72 = 0;
- gUnknown_020322A0->unk_73 = 0;
- gUnknown_020322A0->unk_93 = 0;
- sub_807ACFC(0, 0);
- gMain.state++;
- break;
- case 6:
- sub_807ACFC(0, 1);
- gMain.state++;
- break;
- case 7:
- sub_807ACFC(1, 0);
- gMain.state++;
- break;
- case 8:
- sub_807ACFC(1, 1);
- sub_807B154();
- gMain.state++;
- break;
- case 9:
- sub_807BA94();
- LoadSpriteSheet(&gUnknown_08338D18);
- LoadSpritePalette(&gUnknown_08338D20);
- gMain.state++;
- break;
- case 10:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
- ShowBg(0);
+ }
+ else
+ {
gMain.state++;
- break;
- case 11:
- sub_807B140();
- SetTradeSceneStrings();
+ }
+ break;
+ case 4:
+ CheckForLinkTimeout();
+ if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
gMain.state++;
- break;
- case 12:
- if (!gPaletteFade.active)
+ break;
+ case 5:
+ sTradeData->playerLinkFlagFinishTrade = 0;
+ sTradeData->partnerLinkFlagFinishTrade = 0;
+ sTradeData->sendTradeFinishState = 0;
+ LoadTradeMonPic(TRADE_PLAYER, 0);
+ gMain.state++;
+ break;
+ case 6:
+ LoadTradeMonPic(TRADE_PLAYER, 1);
+ gMain.state++;
+ break;
+ case 7:
+ LoadTradeMonPic(TRADE_PARTNER, 0);
+ gMain.state++;
+ break;
+ case 8:
+ LoadTradeMonPic(TRADE_PARTNER, 1);
+ LinkTradeDrawWindow();
+ gMain.state++;
+ break;
+ case 9:
+ LoadTradeSequenceSpriteSheetsAndPalettes();
+ LoadSpriteSheet(&sPokeBallSpriteSheet);
+ LoadSpritePalette(&sPokeBallSpritePalette);
+ gMain.state++;
+ break;
+ case 10:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ ShowBg(0);
+ gMain.state++;
+ break;
+ case 11:
+ InitTradeSequenceBgGpuRegs();
+ BufferTradeSceneStrings();
+ gMain.state++;
+ break;
+ case 12:
+ if (!gPaletteFade.active)
+ {
+ if (gWirelessCommType)
{
- if (gWirelessCommType)
- {
- LoadWirelessStatusIndicatorSpriteGfx();
- CreateWirelessStatusIndicatorSprite(0, 0);
- }
- SetMainCallback2(sub_807EA2C);
+ LoadWirelessStatusIndicatorSpriteGfx();
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
- break;
+ SetMainCallback2(CB2_UpdateLinkTrade);
+ }
+ break;
}
RunTasks();
RunTextPrinters();
@@ -4259,24 +3066,24 @@ void sub_807AE50(void)
UpdatePaletteFade();
}
-void sub_807B140(void)
+void InitTradeSequenceBgGpuRegs(void)
{
- sub_807B62C(5);
- sub_807B62C(0);
+ SetTradeSequenceBgGpuRegs(5);
+ SetTradeSequenceBgGpuRegs(0);
}
-void sub_807B154(void)
+void LinkTradeDrawWindow(void)
{
FillWindowPixelBuffer(0, PIXEL_FILL(15));
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
}
-static void sub_807B170(void)
+static void InitTradeBgInternal(void)
{
SetGpuReg(REG_OFFSET_DISPCNT, 0);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_08339014, ARRAY_COUNT(gUnknown_08339014));
+ InitBgsFromTemplates(0, sTradeSequenceBgTemplates, ARRAY_COUNT(sTradeSequenceBgTemplates));
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
SetBgTilemapBuffer(0, Alloc(0x800));
@@ -4287,88 +3094,87 @@ static void sub_807B170(void)
LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer);
CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0);
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
- InitWindows(gUnknown_08338FFC);
+ InitWindows(sTradeSequenceWindowTemplates);
DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0);
LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer);
CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0);
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20);
}
-// In-game trade init
-static void sub_807B270(void)
+static void CB2_InGameTrade(void)
{
u8 otName[11];
switch (gMain.state)
{
- case 0:
- gUnknown_02032298[0] = gSpecialVar_0x8005;
- gUnknown_02032298[1] = 6;
- StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
- GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName);
- StringCopy(gLinkPlayers[1].name, otName);
- gLinkPlayers[0].language = LANGUAGE_ENGLISH;
- gLinkPlayers[1].language = GetMonData(&gEnemyParty[0], MON_DATA_LANGUAGE);
- gUnknown_020322A0 = AllocZeroed(sizeof(*gUnknown_020322A0));
- AllocateMonSpritesGfx();
- ResetTasks();
- ResetSpriteData();
- FreeAllSpritePalettes();
- SetVBlankCallback(sub_807AC24);
- sub_807B170();
- gUnknown_020322A0->isLinkTrade = FALSE;
- gUnknown_020322A0->unk_8C = 0;
- gUnknown_020322A0->state = 0;
- gUnknown_020322A0->unk_D4 = 64;
- gUnknown_020322A0->unk_D6 = 64;
- gUnknown_020322A0->unk_D8 = 0;
- gUnknown_020322A0->unk_DA = 0;
- gUnknown_020322A0->unk_DC = 120;
- gUnknown_020322A0->unk_DE = 80;
- gUnknown_020322A0->unk_E8 = 256;
- gUnknown_020322A0->unk_EC = 0;
- gUnknown_020322A0->timer = 0;
- gMain.state = 5;
- break;
- case 5:
- sub_807ACFC(0, 0);
- gMain.state++;
- break;
- case 6:
- sub_807ACFC(0, 1);
- gMain.state++;
- break;
- case 7:
- sub_807ACFC(1, 0);
- ShowBg(0);
- gMain.state++;
- break;
- case 8:
- sub_807ACFC(1, 1);
- FillWindowPixelBuffer(0, PIXEL_FILL(15));
- PutWindowTilemap(0);
- CopyWindowToVram(0, 3);
- gMain.state++;
- break;
- case 9:
- sub_807BA94();
- LoadSpriteSheet(&gUnknown_08338D18);
- LoadSpritePalette(&gUnknown_08338D20);
- gMain.state++;
- break;
- case 10:
- ShowBg(0);
- gMain.state++;
- break;
- case 11:
- sub_807B62C(5);
- sub_807B62C(0);
- SetTradeSceneStrings();
- gMain.state++;
- break;
- case 12:
- SetMainCallback2(sub_807B60C);
- break;
+ case 0:
+ gSelectedTradeMonPositions[TRADE_PLAYER] = gSpecialVar_0x8005;
+ gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE;
+ StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
+ GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName);
+ StringCopy(gLinkPlayers[1].name, otName);
+ gLinkPlayers[0].language = LANGUAGE_ENGLISH;
+ gLinkPlayers[1].language = GetMonData(&gEnemyParty[0], MON_DATA_LANGUAGE);
+ sTradeData = AllocZeroed(sizeof(*sTradeData));
+ AllocateMonSpritesGfx();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ SetVBlankCallback(VBlankCB_Trade);
+ InitTradeBgInternal();
+ sTradeData->isLinkTrade = FALSE;
+ sTradeData->neverRead_8C = 0;
+ sTradeData->state = 0;
+ sTradeData->texX = 64;
+ sTradeData->texY = 64;
+ sTradeData->neverRead_D8 = 0;
+ sTradeData->neverRead_DA = 0;
+ sTradeData->scrX = 120;
+ sTradeData->scrY = 80;
+ sTradeData->sXY = 256;
+ sTradeData->alpha = 0;
+ sTradeData->timer = 0;
+ gMain.state = 5;
+ break;
+ case 5:
+ LoadTradeMonPic(TRADE_PLAYER, 0);
+ gMain.state++;
+ break;
+ case 6:
+ LoadTradeMonPic(TRADE_PLAYER, 1);
+ gMain.state++;
+ break;
+ case 7:
+ LoadTradeMonPic(TRADE_PARTNER, 0);
+ ShowBg(0);
+ gMain.state++;
+ break;
+ case 8:
+ LoadTradeMonPic(TRADE_PARTNER, 1);
+ FillWindowPixelBuffer(0, PIXEL_FILL(15));
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+ gMain.state++;
+ break;
+ case 9:
+ LoadTradeSequenceSpriteSheetsAndPalettes();
+ LoadSpriteSheet(&sPokeBallSpriteSheet);
+ LoadSpritePalette(&sPokeBallSpritePalette);
+ gMain.state++;
+ break;
+ case 10:
+ ShowBg(0);
+ gMain.state++;
+ break;
+ case 11:
+ SetTradeSequenceBgGpuRegs(5);
+ SetTradeSequenceBgGpuRegs(0);
+ BufferTradeSceneStrings();
+ gMain.state++;
+ break;
+ case 12:
+ SetMainCallback2(CB2_UpdateInGameTrade);
+ break;
}
RunTasks();
@@ -4378,7 +3184,7 @@ static void sub_807B270(void)
UpdatePaletteFade();
}
-static void sub_807B464(u8 partyIdx)
+static void UpdatePokedexForReceivedMon(u8 partyIdx)
{
struct Pokemon *mon = &gPlayerParty[partyIdx];
@@ -4392,7 +3198,8 @@ static void sub_807B464(u8 partyIdx)
}
}
-static void sub_807B4C4(void)
+// Functionally nop after commented code
+static void TryEnableNationalDexFromLinkPartner(void)
{
u8 mpId = GetMultiplayerId();
// Originally in Ruby but commented out
@@ -4400,56 +3207,55 @@ static void sub_807B4C4(void)
EnableNationalPokedex();*/
}
-static void sub_807B4D0(u8 a0, u8 a1)
+static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx)
{
u8 friendship;
- struct Pokemon *playerMon = &gPlayerParty[a0];
+ struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx];
u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL);
- struct Pokemon *partnerMon = &gEnemyParty[a1];
+ struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx];
u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL);
if (playerMail != 0xFF)
ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]);
- // This is where the actual trade happens!!
- gUnknown_020322A0->mon = *playerMon;
+ sTradeData->mon = *playerMon;
*playerMon = *partnerMon;
- *partnerMon = gUnknown_020322A0->mon;
+ *partnerMon = sTradeData->mon;
friendship = 70;
if (!GetMonData(playerMon, MON_DATA_IS_EGG))
SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship);
if (partnerMail != 0xFF)
- GiveMailToMon2(playerMon, &gUnknown_020321C0[partnerMail]);
+ GiveMailToMon2(playerMon, &gTradeMail[partnerMail]);
- sub_807B464(a0);
+ UpdatePokedexForReceivedMon(playerPartyIdx);
if (gReceivedRemoteLinkPlayers)
- sub_807B4C4();
+ TryEnableNationalDexFromLinkPartner();
}
-static void sub_807B5B8(void)
+static void TrySendTradeFinishData(void)
{
- switch (gUnknown_020322A0->unk_93)
+ switch (sTradeData->sendTradeFinishState)
{
- case 1:
- if (IsLinkTaskFinished())
- {
- Trade_SendData(gUnknown_020322A0);
- gUnknown_020322A0->unk_93++;
- }
- // fallthrough
- case 2:
- gUnknown_020322A0->unk_93 = 0;
- break;
+ case 1:
+ if (IsLinkTaskFinished())
+ {
+ Trade_SendData(sTradeData);
+ sTradeData->sendTradeFinishState++;
+ }
+ // fallthrough
+ case 2:
+ sTradeData->sendTradeFinishState = 0;
+ break;
}
}
-static void sub_807B60C(void)
+static void CB2_UpdateInGameTrade(void)
{
- sub_807BBC8();
+ AnimateTradeSequence();
RunTasks();
RunTextPrinters();
AnimateSprites();
@@ -4457,1244 +3263,1238 @@ static void sub_807B60C(void)
UpdatePaletteFade();
}
-static void sub_807B62C(u8 a0)
+static void SetTradeSequenceBgGpuRegs(u8 state)
{
- switch (a0)
+ switch (state)
{
- case 0:
- gUnknown_020322A0->bg2vofs = 0;
- gUnknown_020322A0->bg2hofs = 180;
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG0_ON |
- DISPCNT_BG2_ON |
- DISPCNT_OBJ_ON);
- SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
- BGCNT_CHARBASE(1) |
- BGCNT_16COLOR |
- BGCNT_SCREENBASE(18) |
- BGCNT_TXT512x256);
- LoadPalette(gTradeGba2_Pal, 16, 0x60);
- DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000);
- DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000);
- break;
- case 1:
- gUnknown_020322A0->bg1hofs = 0;
- gUnknown_020322A0->bg1vofs = 348;
- SetGpuReg(REG_OFFSET_BG1VOFS, 348);
- SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) |
- BGCNT_CHARBASE(0) |
- BGCNT_16COLOR |
- BGCNT_SCREENBASE(5) |
- BGCNT_TXT256x512);
- SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
- BGCNT_CHARBASE(1) |
- BGCNT_16COLOR |
- BGCNT_SCREENBASE(18) |
- BGCNT_TXT256x512);
-
- if (gUnknown_020322A0->unk_FA)
- {
- DmaCopy16Defvars(3, gUnknown_083369A0, (void *) BG_SCREEN_ADDR(5), 0x1000);
- }
- else
- {
- DmaCopy16Defvars(3, gUnknown_083359A0, (void *) BG_SCREEN_ADDR(5), 0x1000);
- }
+ case 0:
+ sTradeData->bg2vofs = 0;
+ sTradeData->bg2hofs = 180;
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG0_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_16COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_TXT512x256);
+ LoadPalette(gTradeGba2_Pal, 16, 0x60);
+ DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000);
+ break;
+ case 1:
+ sTradeData->bg1hofs = 0;
+ sTradeData->bg1vofs = 348;
+ SetGpuReg(REG_OFFSET_BG1VOFS, 348);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) |
+ BGCNT_CHARBASE(0) |
+ BGCNT_16COLOR |
+ BGCNT_SCREENBASE(5) |
+ BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_16COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_TXT256x512);
+
+ if (sTradeData->isCableTrade)
+ {
+ DmaCopy16Defvars(3, sTradeTilemap_GbaCable, (void *) BG_SCREEN_ADDR(5), 0x1000);
+ }
+ else
+ {
+ DmaCopy16Defvars(3, sTradeTilemap_GbaWireless, (void *) BG_SCREEN_ADDR(5), 0x1000);
+ }
- DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(0), 0x1420, 0x1000);
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_OBJ_ON);
- break;
- case 2:
- gUnknown_020322A0->bg1vofs = 0;
- gUnknown_020322A0->bg1hofs = 0;
- if (!gUnknown_020322A0->unk_FA)
- {
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_OBJ_ON);
- LZ77UnCompVram(gUnknown_083379A0, (void *) BG_SCREEN_ADDR(5));
- BlendPalettes(0x8, 16, RGB_BLACK);
- }
- else
- {
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_OBJ_ON);
- DmaCopy16Defvars(3, gUnknown_0832FFC0, (void *) BG_SCREEN_ADDR(5), 0x800);
- BlendPalettes(0x1, 16, RGB_BLACK);
- }
- break;
- case 3:
- LoadPalette(gUnknown_08337EA0, 48, 0x20);
- LZ77UnCompVram(gUnknown_08337EC0, (void *) BG_CHAR_ADDR(1));
- LZ77UnCompVram(gUnknown_08338550, (void *) BG_SCREEN_ADDR(18));
- gUnknown_020322A0->bg2vofs = 80;
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_BG2_ON |
- DISPCNT_OBJ_ON);
- break;
- case 4:
+ DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(0), 0x1420, 0x1000);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ break;
+ case 2:
+ sTradeData->bg1vofs = 0;
+ sTradeData->bg1hofs = 0;
+ if (!sTradeData->isCableTrade)
+ {
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG2_ON |
+ DISPCNT_BG1_ON |
DISPCNT_OBJ_ON);
- SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) |
- BGCNT_CHARBASE(1) |
- BGCNT_256COLOR |
- BGCNT_SCREENBASE(18) |
- BGCNT_AFF128x128);
- gUnknown_020322A0->unk_D4 = 64;
- gUnknown_020322A0->unk_D6 = 92;
- gUnknown_020322A0->unk_E8 = 32;
- gUnknown_020322A0->unk_EA = 1024;
- gUnknown_020322A0->unk_EC = 0;
-
- DmaCopyLarge16(3, gUnknown_08332F60, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
-
- if (gUnknown_020322A0->unk_FA)
- {
- DmaCopy16Defvars(3, gUnknown_083357A0, (void *) BG_SCREEN_ADDR(18), 0x100);
- }
- else
- {
- DmaCopy16Defvars(3, gUnknown_083358A0, (void *) BG_SCREEN_ADDR(18), 0x100);
- }
- break;
- case 5:
- gUnknown_020322A0->bg1vofs = 0;
- gUnknown_020322A0->bg1hofs = 0;
- break;
- case 6:
+ LZ77UnCompVram(gUnknown_083379A0, (void *) BG_SCREEN_ADDR(5));
+ BlendPalettes(0x8, 16, RGB_BLACK);
+ }
+ else
+ {
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG2_ON |
+ DISPCNT_BG1_ON |
DISPCNT_OBJ_ON);
- SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) |
- BGCNT_CHARBASE(1) |
- BGCNT_256COLOR |
- BGCNT_SCREENBASE(18) |
- BGCNT_AFF128x128);
- gUnknown_020322A0->unk_D4 = 64;
- gUnknown_020322A0->unk_D6 = 92;
- gUnknown_020322A0->unk_E8 = 256;
- gUnknown_020322A0->unk_EA = 128;
- gUnknown_020322A0->unk_DC = 120;
- gUnknown_020322A0->unk_DE = 80;
- gUnknown_020322A0->unk_EC = 0;
-
- DmaCopyLarge16(3, gUnknown_08332F60, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
-
- if (gUnknown_020322A0->unk_FA)
- {
- DmaCopy16Defvars(3, gUnknown_083357A0, (void *) BG_SCREEN_ADDR(18), 0x100);
- }
- else
- {
- DmaCopy16Defvars(3, gUnknown_083358A0, (void *) BG_SCREEN_ADDR(18), 0x100);
- }
- break;
- case 7:
- gUnknown_020322A0->bg2vofs = 0;
- gUnknown_020322A0->bg2hofs = 0;
- SetGpuReg(REG_OFFSET_BLDCNT, 0);
- SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
- BGCNT_CHARBASE(1) |
- BGCNT_16COLOR |
- BGCNT_SCREENBASE(18) |
- BGCNT_TXT512x256);
- LoadPalette(gTradeGba2_Pal, 16, 0x60);
- DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000);
- DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000);
- break;
+ DmaCopy16Defvars(3, sTradeTilemap_Cable, (void *) BG_SCREEN_ADDR(5), 0x800);
+ BlendPalettes(0x1, 16, RGB_BLACK);
+ }
+ break;
+ case 3:
+ LoadPalette(sTradePal_Black, 48, 0x20);
+ LZ77UnCompVram(sTradeGfx_WirelessSignal, (void *) BG_CHAR_ADDR(1));
+ LZ77UnCompVram(sTradeTilemap_WirelessSignal, (void *) BG_SCREEN_ADDR(18));
+ sTradeData->bg2vofs = 80;
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_256COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_AFF128x128);
+ sTradeData->texX = 64;
+ sTradeData->texY = 92;
+ sTradeData->sXY = 32;
+ sTradeData->unk_EA = 1024;
+ sTradeData->alpha = 0;
+
+ DmaCopyLarge16(3, sTradeAffine_Gba, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
+
+ if (sTradeData->isCableTrade)
+ {
+ DmaCopy16Defvars(3, sTradeAffineMap_GbaCable, (void *) BG_SCREEN_ADDR(18), 0x100);
+ }
+ else
+ {
+ DmaCopy16Defvars(3, sTradeAffineMap_GbaWireless, (void *) BG_SCREEN_ADDR(18), 0x100);
+ }
+ break;
+ case 5:
+ sTradeData->bg1vofs = 0;
+ sTradeData->bg1hofs = 0;
+ break;
+ case 6:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_256COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_AFF128x128);
+ sTradeData->texX = 64;
+ sTradeData->texY = 92;
+ sTradeData->sXY = 256;
+ sTradeData->unk_EA = 128;
+ sTradeData->scrX = 120;
+ sTradeData->scrY = 80;
+ sTradeData->alpha = 0;
+
+ DmaCopyLarge16(3, sTradeAffine_Gba, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000);
+
+ if (sTradeData->isCableTrade)
+ {
+ DmaCopy16Defvars(3, sTradeAffineMap_GbaCable, (void *) BG_SCREEN_ADDR(18), 0x100);
+ }
+ else
+ {
+ DmaCopy16Defvars(3, sTradeAffineMap_GbaWireless, (void *) BG_SCREEN_ADDR(18), 0x100);
+ }
+ break;
+ case 7:
+ sTradeData->bg2vofs = 0;
+ sTradeData->bg2hofs = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) |
+ BGCNT_CHARBASE(1) |
+ BGCNT_16COLOR |
+ BGCNT_SCREENBASE(18) |
+ BGCNT_TXT512x256);
+ LoadPalette(gTradeGba2_Pal, 16, 0x60);
+ DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000);
+ DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000);
+ break;
}
}
-static void sub_807BA94(void)
+static void LoadTradeSequenceSpriteSheetsAndPalettes(void)
{
- LoadSpriteSheet(&gUnknown_08338D70);
- LoadSpriteSheet(&gUnknown_08338DC0);
- LoadSpriteSheet(&gUnknown_08338DF4);
- LoadSpriteSheet(&gUnknown_08338E6C);
- LoadSpritePalette(&gUnknown_08338D78);
- LoadSpritePalette(&gUnknown_08338D80);
+ LoadSpriteSheet(&sGlow1SpriteSheet);
+ LoadSpriteSheet(&sGlow2SpriteSheet);
+ LoadSpriteSheet(&sCableEndSpriteSheet);
+ LoadSpriteSheet(&sGbaScreenSpriteSheet);
+ LoadSpritePalette(&sMiscTradeSpritePalette);
+ LoadSpritePalette(&sGbaSpritePalette);
}
-static void SetTradeSceneStrings(void)
+// Buffers "[Pokemon] will be sent to [Trainer]" strings
+static void BufferTradeSceneStrings(void)
{
- /*Sets the variable strings printed on the
- *actual trading screen. For use in strings
- *like "[Pokemon] will be sent to [Trainer]."
- */
u8 mpId;
u8 name[20];
const struct InGameTrade *ingameTrade;
- if (gUnknown_020322A0->isLinkTrade)
+ if (sTradeData->isLinkTrade)
{
mpId = GetMultiplayerId();
StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name);
- GetMonData(&gEnemyParty[gUnknown_02032298[1] % PARTY_SIZE], MON_DATA_NICKNAME, name);
+ GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_NICKNAME, name);
StringCopy10(gStringVar3, name);
- GetMonData(&gPlayerParty[gUnknown_02032298[0]], MON_DATA_NICKNAME, name);
+ GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_NICKNAME, name);
StringCopy10(gStringVar2, name);
}
else
{
- ingameTrade = &gIngameTrades[gSpecialVar_0x8004];
+ ingameTrade = &sIngameTrades[gSpecialVar_0x8004];
StringCopy(gStringVar1, ingameTrade->otName);
- StringCopy10(gStringVar3, ingameTrade->name);
+ StringCopy10(gStringVar3, ingameTrade->nickname);
GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, name);
StringCopy10(gStringVar2, name);
}
}
-static u8 sub_807BBC8(void)
+// returns TRUE if it was a link trade, FALSE if it was an in-game trade
+static bool8 AnimateTradeSequence(void)
{
- if (gUnknown_020322A0->unk_FA)
- {
- return sub_807BBEC();
- }
+ if (sTradeData->isCableTrade)
+ return AnimateTradeSequenceCable();
else
- {
- return sub_807CFC8();
- }
+ return AnimateTradeSequenceWireless();
}
-static bool8 sub_807BBEC(void)
+static bool8 AnimateTradeSequenceCable(void)
{
u16 evoTarget;
- switch (gUnknown_020322A0->state)
+ switch (sTradeData->state)
{
- case 0:
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = -180;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[0]].y_offset;
- gUnknown_020322A0->state++;
- gUnknown_020322A0->cachedMapMusic = GetCurrentMapMusic();
- PlayNewMapMusic(MUS_SHINKA);
- break;
- case 1:
- if (gUnknown_020322A0->bg2hofs > 0)
- {
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x += 3;
- gUnknown_020322A0->bg2hofs -= 3;
- }
- else
- {
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = 0;
- gUnknown_020322A0->bg2hofs = 0;
- gUnknown_020322A0->state = 10;
- }
- break;
- case 10:
- StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY);
- sub_807F1A8(0, gStringVar4, 0);
+ case 0:
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = -180;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset;
+ sTradeData->state++;
+ sTradeData->cachedMapMusic = GetCurrentMapMusic();
+ PlayNewMapMusic(MUS_SHINKA);
+ break;
+ case 1:
+ if (sTradeData->bg2hofs > 0)
+ {
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x += 3;
+ sTradeData->bg2hofs -= 3;
+ }
+ else
+ {
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = 0;
+ sTradeData->bg2hofs = 0;
+ sTradeData->state = 10;
+ }
+ break;
+ case 10:
+ StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
- if (gUnknown_020322A0->tradeSpecies[0] != SPECIES_EGG)
- {
- PlayCry1(gUnknown_020322A0->tradeSpecies[0], 0);
- }
+ if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG)
+ {
+ PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0);
+ }
- gUnknown_020322A0->state = 11;
- gUnknown_020322A0->timer = 0;
- break;
- case 11:
- if (++gUnknown_020322A0->timer == 80)
- {
- gUnknown_020322A0->unk_D2 = sub_807671C(gUnknown_020322A0->pokePicSpriteIdxs[0], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
- gUnknown_020322A0->state++;
- StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1);
- sub_807F1A8(0, gStringVar4, 0);
- }
- break;
- case 12:
- if (gSprites[gUnknown_020322A0->unk_D2].callback == SpriteCallbackDummy)
- {
- gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0);
- gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E5D8;
- DestroySprite(&gSprites[gUnknown_020322A0->unk_D2]);
- gUnknown_020322A0->state++;
- }
- break;
- case 13:
- // The game waits here for the sprite to finish its animation sequence.
- break;
- case 14:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state = 20;
- break;
- case 20:
- if (!gPaletteFade.active)
- {
- sub_807B62C(4);
- FillWindowPixelBuffer(0, PIXEL_FILL(15));
- CopyWindowToVram(0, 3);
- gUnknown_020322A0->state++;
- }
- break;
- case 21:
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- gUnknown_020322A0->state++;
- break;
- case 22:
- if (!gPaletteFade.active)
- {
- gUnknown_020322A0->state = 23;
- }
- break;
- case 23:
- if (gUnknown_020322A0->unk_EA > 0x100)
- {
- gUnknown_020322A0->unk_EA -= 0x34;
- }
- else
- {
- sub_807B62C(1);
- gUnknown_020322A0->unk_EA = 0x80;
- gUnknown_020322A0->state++;
- gUnknown_020322A0->timer = 0;
- }
- gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA;
- break;
- case 24:
- if (++gUnknown_020322A0->timer > 20)
- {
- sub_807AB28();
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
- gUnknown_020322A0->state++;
- }
- break;
- case 25:
- if (gSprites[gUnknown_020322A0->unk_91].animEnded)
- {
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND |
- BLDCNT_TGT2_BG1 |
- BLDCNT_TGT2_BG2);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4));
- gUnknown_020322A0->state++;
- }
- break;
- case 26:
- if (--gUnknown_020322A0->bg1vofs == 316)
- {
- gUnknown_020322A0->state++;
- }
- if (gUnknown_020322A0->bg1vofs == 328)
- {
- gUnknown_020322A0->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0);
- }
- break;
- case 27:
- gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 128, 80, 3);
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 128, 80, 0);
- StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1);
- gUnknown_020322A0->state++;
- break;
- case 28:
- if ((gUnknown_020322A0->bg1vofs -= 2) == 166)
- {
- gUnknown_020322A0->state = 200;
- }
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_OBJ_ON);
- break;
- case 200:
- gSprites[gUnknown_020322A0->unk_90].pos1.y -= 2;
- gSprites[gUnknown_020322A0->unk_91].pos1.y -= 2;
- if (gSprites[gUnknown_020322A0->unk_90].pos1.y < -8)
- {
- gUnknown_020322A0->state = 29;
- }
- break;
- case 29:
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state = 30;
- break;
- case 30:
- if (!gPaletteFade.active)
- {
- DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- sub_807B62C(2);
- gUnknown_020322A0->state++;
- }
- break;
- case 31:
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- gUnknown_020322A0->unk_90 = CreateSprite(&gSpriteTemplate_8338DC8, 111, 170, 0);
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 129, -10, 0);
- gUnknown_020322A0->state++;
- break;
- case 32:
- if (!gPaletteFade.active)
- {
- PlaySE(SE_TK_WARPOUT);
- gUnknown_020322A0->state++;
- }
- gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
- gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
- break;
- case 33:
- gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
- gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
- if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -90)
- {
- gSprites[gUnknown_020322A0->unk_90].data[1] = 1;
- gSprites[gUnknown_020322A0->unk_91].data[1] = 1;
- gUnknown_020322A0->state++;
- }
- break;
- case 34:
- BlendPalettes(0x1, 16, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- break;
- case 35:
+ sTradeData->state = 11;
+ sTradeData->timer = 0;
+ break;
+ case 11:
+ if (++sTradeData->timer == 80)
+ {
+ sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
+ sTradeData->state++;
+ StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ }
+ break;
+ case 12:
+ if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy)
+ {
+ sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0);
+ gSprites[sTradeData->unk_D3].callback = sub_807E5D8;
+ DestroySprite(&gSprites[sTradeData->pokeballSpriteId]);
+ sTradeData->state++;
+ }
+ break;
+ case 13:
+ // The game waits here for the sprite to finish its animation sequence.
+ break;
+ case 14:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTradeData->state = 20;
+ break;
+ case 20:
+ if (!gPaletteFade.active)
+ {
+ SetTradeSequenceBgGpuRegs(4);
+ FillWindowPixelBuffer(0, PIXEL_FILL(15));
+ CopyWindowToVram(0, 3);
+ sTradeData->state++;
+ }
+ break;
+ case 21:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ sTradeData->state++;
+ break;
+ case 22:
+ if (!gPaletteFade.active)
+ {
+ sTradeData->state = 23;
+ }
+ break;
+ case 23:
+ if (sTradeData->unk_EA > 0x100)
+ {
+ sTradeData->unk_EA -= 0x34;
+ }
+ else
+ {
+ SetTradeSequenceBgGpuRegs(1);
+ sTradeData->unk_EA = 0x80;
+ sTradeData->state++;
+ sTradeData->timer = 0;
+ }
+ sTradeData->sXY = 0x8000 / sTradeData->unk_EA;
+ break;
+ case 24:
+ if (++sTradeData->timer > 20)
+ {
+ SetTradeBGAffine();
+ sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
+ sTradeData->state++;
+ }
+ break;
+ case 25:
+ if (gSprites[sTradeData->unk_91].animEnded)
+ {
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND |
+ BLDCNT_TGT2_BG1 |
+ BLDCNT_TGT2_BG2);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4));
+ sTradeData->state++;
+ }
+ break;
+ case 26:
+ if (--sTradeData->bg1vofs == 316)
+ {
+ sTradeData->state++;
+ }
+ if (sTradeData->bg1vofs == 328)
+ {
+ sTradeData->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0);
+ }
+ break;
+ case 27:
+ sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 128, 80, 3);
+ sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0);
+ StartSpriteAnim(&gSprites[sTradeData->unk_91], 1);
+ sTradeData->state++;
+ break;
+ case 28:
+ if ((sTradeData->bg1vofs -= 2) == 166)
+ {
+ sTradeData->state = 200;
+ }
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ break;
+ case 200:
+ gSprites[sTradeData->unk_90].pos1.y -= 2;
+ gSprites[sTradeData->unk_91].pos1.y -= 2;
+ if (gSprites[sTradeData->unk_90].pos1.y < -8)
+ {
+ sTradeData->state = 29;
+ }
+ break;
+ case 29:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ sTradeData->state = 30;
+ break;
+ case 30:
+ if (!gPaletteFade.active)
+ {
+ DestroySprite(&gSprites[sTradeData->unk_90]);
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ SetTradeSequenceBgGpuRegs(2);
+ sTradeData->state++;
+ }
+ break;
+ case 31:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0);
+ sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0);
+ sTradeData->state++;
+ break;
+ case 32:
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_TK_WARPOUT);
+ sTradeData->state++;
+ }
+ gSprites[sTradeData->unk_90].pos2.y -= 3;
+ gSprites[sTradeData->unk_91].pos2.y += 3;
+ break;
+ case 33:
+ gSprites[sTradeData->unk_90].pos2.y -= 3;
+ gSprites[sTradeData->unk_91].pos2.y += 3;
+ if (gSprites[sTradeData->unk_90].pos2.y <= -90)
+ {
+ gSprites[sTradeData->unk_90].data[1] = 1;
+ gSprites[sTradeData->unk_91].data[1] = 1;
+ sTradeData->state++;
+ }
+ break;
+ case 34:
+ BlendPalettes(0x1, 16, RGB_WHITEALPHA);
+ sTradeData->state++;
+ break;
+ case 35:
+ BlendPalettes(0x1, 0, RGB_WHITEALPHA);
+ sTradeData->state++;
+ break;
+ case 36:
+ BlendPalettes(0x1, 16, RGB_WHITEALPHA);
+ sTradeData->state++;
+ break;
+ case 37:
+ if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER]))
+ {
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].affineAnims = gSpriteAffineAnimTable_8338ECC;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0, 3, 3);
+ StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0);
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0);
+ }
+ StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0);
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.x = 60;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 180;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.y = 192;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = -32;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = FALSE;
+ sTradeData->state++;
+ break;
+ case 38:
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y -= 3;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y += 3;
+ if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y >= -163)
+ {
+ PlaySE(SE_TK_WARPIN);
+ }
+ if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -222)
+ {
+ gSprites[sTradeData->unk_90].data[1] = 0;
+ gSprites[sTradeData->unk_91].data[1] = 0;
+ sTradeData->state++;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = TRUE;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = TRUE;
BlendPalettes(0x1, 0, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- break;
- case 36:
- BlendPalettes(0x1, 16, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- break;
- case 37:
- if (!IsMonSpriteNotFlipped(gUnknown_020322A0->tradeSpecies[0]))
- {
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].affineAnims = gSpriteAffineAnimTable_8338ECC;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.affineMode = 3;
- CalcCenterToCornerVec(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0, 3, 3);
- StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0);
- }
- else
- {
- StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0);
- }
- StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0);
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.x = 60;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 180;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.y = 192;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = -32;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = FALSE;
- gUnknown_020322A0->state++;
- break;
- case 38:
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y -= 3;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y += 3;
- if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y >= -163)
- {
- PlaySE(SE_TK_WARPIN);
- }
- if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -222)
- {
- gSprites[gUnknown_020322A0->unk_90].data[1] = 0;
- gSprites[gUnknown_020322A0->unk_91].data[1] = 0;
- gUnknown_020322A0->state++;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = TRUE;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = TRUE;
- BlendPalettes(0x1, 0, RGB_WHITEALPHA);
- }
- break;
- case 39:
- gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
- gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
- if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -222)
- {
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state++;
- DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- }
- break;
- case 40:
- if (!gPaletteFade.active)
- {
- gUnknown_020322A0->state++;
- sub_807B62C(1);
- gUnknown_020322A0->bg1vofs = 166;
- gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 128, -20, 3);
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 128, -20, 0);
- StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1);
- }
- break;
- case 41:
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- gUnknown_020322A0->state++;
- break;
- case 42:
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_OBJ_ON);
- if (!gPaletteFade.active)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 43:
- gSprites[gUnknown_020322A0->unk_90].pos2.y += 3;
- gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
- if (gSprites[gUnknown_020322A0->unk_90].pos2.y + gSprites[gUnknown_020322A0->unk_90].pos1.y == 64)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 44:
- if ((gUnknown_020322A0->bg1vofs += 2) > 316)
- {
- gUnknown_020322A0->bg1vofs = 316;
- gUnknown_020322A0->state++;
- }
- break;
- case 45:
- DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- gUnknown_020322A0->state++;
- gUnknown_020322A0->timer = 0;
- break;
- case 46:
- if (++gUnknown_020322A0->timer == 10)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 47:
- if (++gUnknown_020322A0->bg1vofs > 348)
- {
- gUnknown_020322A0->bg1vofs = 348;
- gUnknown_020322A0->state++;
- }
- if (gUnknown_020322A0->bg1vofs == 328 && gUnknown_020322A0->unk_FA)
- {
- gUnknown_020322A0->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0);
- gSprites[gUnknown_020322A0->unk_92].callback = sub_807AAE0;
- }
- break;
- case 48:
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
- gUnknown_020322A0->state = 50;
- break;
- case 50:
- if (gSprites[gUnknown_020322A0->unk_91].animEnded)
- {
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- sub_807B62C(6);
- gUnknown_020322A0->state++;
- PlaySE(SE_W028);
- }
- break;
- case 51:
- if (gUnknown_020322A0->unk_EA < 0x400)
- {
- gUnknown_020322A0->unk_EA += 0x34;
- }
- else
- {
- gUnknown_020322A0->unk_EA = 0x400;
- gUnknown_020322A0->state++;
- }
- gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA;
- break;
- case 52:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state = 60;
- break;
+ }
+ break;
+ case 39:
+ gSprites[sTradeData->unk_90].pos2.y -= 3;
+ gSprites[sTradeData->unk_91].pos2.y += 3;
+ if (gSprites[sTradeData->unk_90].pos2.y <= -222)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ sTradeData->state++;
+ DestroySprite(&gSprites[sTradeData->unk_90]);
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ }
+ break;
+ case 40:
+ if (!gPaletteFade.active)
+ {
+ sTradeData->state++;
+ SetTradeSequenceBgGpuRegs(1);
+ sTradeData->bg1vofs = 166;
+ sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 128, -20, 3);
+ sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0);
+ StartSpriteAnim(&gSprites[sTradeData->unk_91], 1);
+ }
+ break;
+ case 41:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ sTradeData->state++;
+ break;
+ case 42:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ if (!gPaletteFade.active)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 43:
+ gSprites[sTradeData->unk_90].pos2.y += 3;
+ gSprites[sTradeData->unk_91].pos2.y += 3;
+ if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 44:
+ if ((sTradeData->bg1vofs += 2) > 316)
+ {
+ sTradeData->bg1vofs = 316;
+ sTradeData->state++;
+ }
+ break;
+ case 45:
+ DestroySprite(&gSprites[sTradeData->unk_90]);
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ sTradeData->state++;
+ sTradeData->timer = 0;
+ break;
+ case 46:
+ if (++sTradeData->timer == 10)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 47:
+ if (++sTradeData->bg1vofs > 348)
+ {
+ sTradeData->bg1vofs = 348;
+ sTradeData->state++;
+ }
+ if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade)
+ {
+ sTradeData->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0);
+ gSprites[sTradeData->unk_92].callback = sub_807AAE0;
+ }
+ break;
+ case 48:
+ sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
+ sTradeData->state = 50;
+ break;
+ case 50:
+ if (gSprites[sTradeData->unk_91].animEnded)
+ {
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ SetTradeSequenceBgGpuRegs(6);
+ sTradeData->state++;
+ PlaySE(SE_W028);
+ }
+ break;
+ case 51:
+ if (sTradeData->unk_EA < 0x400)
+ {
+ sTradeData->unk_EA += 0x34;
+ }
+ else
+ {
+ sTradeData->unk_EA = 0x400;
+ sTradeData->state++;
+ }
+ sTradeData->sXY = 0x8000 / sTradeData->unk_EA;
+ break;
+ case 52:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTradeData->state = 60;
+ break;
- case 60:
- if (!gPaletteFade.active)
- {
- sub_807B62C(5);
- sub_807B62C(7);
- gPaletteFade.bufferTransferDisabled = TRUE;
- gUnknown_020322A0->state++;
- }
- break;
- case 61:
- gPaletteFade.bufferTransferDisabled = FALSE;
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
- gUnknown_020322A0->state++;
- break;
- case 62:
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG2_ON |
- DISPCNT_OBJ_ON);
- if (!gPaletteFade.active)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 63:
- gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0);
- gSprites[gUnknown_020322A0->unk_D3].data[3] = 74;
- gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E6AC;
- StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_D3], 1);
- StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->unk_D3], 2);
- BlendPalettes(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- gUnknown_020322A0->timer = 0;
- break;
- case 64:
- BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- break;
- case 65:
- if (gSprites[gUnknown_020322A0->unk_D3].callback == SpriteCallbackDummy)
- {
- HandleLoadSpecialPokePic_2(&gMonFrontPicTable[gUnknown_020322A0->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], gUnknown_020322A0->tradeSpecies[1], gUnknown_020322A0->unk_68[1]);
- gUnknown_020322A0->state++;
- }
- break;
- case 66:
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 120;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[1]].y_offset + 60;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.x = 0;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y = 0;
- StartSpriteAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0);
- CreatePokeballSpriteToReleaseMon(gUnknown_020322A0->pokePicSpriteIdxs[1], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, gUnknown_020322A0->tradeSpecies[1]);
- FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->unk_D3]);
- DestroySprite(&gSprites[gUnknown_020322A0->unk_D3]);
- gUnknown_020322A0->state++;
- break;
- case 67:
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG0_ON |
- DISPCNT_BG2_ON |
- DISPCNT_OBJ_ON);
- StringExpandPlaceholders(gStringVar4, gText_XSentOverY);
- sub_807F1A8(0, gStringVar4, 0);
- gUnknown_020322A0->state = 167;
- gUnknown_020322A0->timer = 0;
- break;
- // 167 and 267 are extra cases added in for animations
- case 167:
- if (++gUnknown_020322A0->timer > 60)
- {
- gUnknown_020322A0->state = 267;
- gUnknown_020322A0->timer = 0;
- }
- break;
- case 267:
- if (IsCryFinished())
- {
- gUnknown_020322A0->state = 68;
- }
- break;
- case 68:
- if (++gUnknown_020322A0->timer == 10)
- {
- PlayFanfare(MUS_FANFA5);
- }
- if (gUnknown_020322A0->timer == 250)
- {
- gUnknown_020322A0->state++;
- StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX);
- sub_807F1A8(0, gStringVar4, 0);
- gUnknown_020322A0->timer = 0;
- }
- break;
- case 69:
- if (++gUnknown_020322A0->timer == 60)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 70:
- sub_807F14C();
- gUnknown_020322A0->state++;
- break;
- case 71:
- if (gUnknown_020322A0->isLinkTrade)
- {
- return TRUE;
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 72: // Only if in-game trade
- sub_807B4D0(gSpecialVar_0x8005, 0);
- gCB2_AfterEvolution = sub_807B60C;
- evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE);
- if (evoTarget != SPECIES_NONE)
- {
- TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]);
- }
- gUnknown_020322A0->state++;
- break;
- case 73:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state++;
- break;
- case 74:
- if (!gPaletteFade.active)
- {
- PlayNewMapMusic(gUnknown_020322A0->cachedMapMusic);
- if (gUnknown_020322A0)
- {
- FreeAllWindowBuffers();
- Free(GetBgTilemapBuffer(3));
- Free(GetBgTilemapBuffer(1));
- Free(GetBgTilemapBuffer(0));
- FreeMonSpritesGfx();
- FREE_AND_SET_NULL(gUnknown_020322A0);
- }
- SetMainCallback2(CB2_ReturnToField);
- sub_807E784();
- }
- break;
+ case 60:
+ if (!gPaletteFade.active)
+ {
+ SetTradeSequenceBgGpuRegs(5);
+ SetTradeSequenceBgGpuRegs(7);
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ sTradeData->state++;
+ }
+ break;
+ case 61:
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ sTradeData->state++;
+ break;
+ case 62:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ if (!gPaletteFade.active)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 63:
+ sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0);
+ gSprites[sTradeData->unk_D3].data[3] = 74;
+ gSprites[sTradeData->unk_D3].callback = sub_807E6AC;
+ StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1);
+ StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2);
+ BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA);
+ sTradeData->state++;
+ sTradeData->timer = 0;
+ break;
+ case 64:
+ BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
+ sTradeData->state++;
+ break;
+ case 65:
+ if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy)
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]);
+ sTradeData->state++;
+ }
+ break;
+ case 66:
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 120;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.x = 0;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y = 0;
+ StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0);
+ CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]);
+ FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]);
+ DestroySprite(&gSprites[sTradeData->unk_D3]);
+ sTradeData->state++;
+ break;
+ case 67:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG0_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ StringExpandPlaceholders(gStringVar4, gText_XSentOverY);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ sTradeData->state = 167;
+ sTradeData->timer = 0;
+ break;
+ // 167 and 267 are extra cases added in for animations
+ case 167:
+ if (++sTradeData->timer > 60)
+ {
+ sTradeData->state = 267;
+ sTradeData->timer = 0;
+ }
+ break;
+ case 267:
+ if (IsCryFinished())
+ {
+ sTradeData->state = 68;
+ }
+ break;
+ case 68:
+ if (++sTradeData->timer == 10)
+ {
+ PlayFanfare(MUS_FANFA5);
+ }
+ if (sTradeData->timer == 250)
+ {
+ sTradeData->state++;
+ StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ sTradeData->timer = 0;
+ }
+ break;
+ case 69:
+ if (++sTradeData->timer == 60)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 70:
+ CheckPartnersMonForRibbons();
+ sTradeData->state++;
+ break;
+ case 71:
+ if (sTradeData->isLinkTrade)
+ {
+ return TRUE;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 72: // Only if in-game trade
+ TradeMons(gSpecialVar_0x8005, 0);
+ gCB2_AfterEvolution = CB2_UpdateInGameTrade;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ {
+ TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
+ }
+ sTradeData->state++;
+ break;
+ case 73:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTradeData->state++;
+ break;
+ case 74:
+ if (!gPaletteFade.active)
+ {
+ PlayNewMapMusic(sTradeData->cachedMapMusic);
+ if (sTradeData)
+ {
+ FreeAllWindowBuffers();
+ Free(GetBgTilemapBuffer(3));
+ Free(GetBgTilemapBuffer(1));
+ Free(GetBgTilemapBuffer(0));
+ FreeMonSpritesGfx();
+ FREE_AND_SET_NULL(sTradeData);
+ }
+ SetMainCallback2(CB2_ReturnToField);
+ BuffeInGameTradeMonName();
+ }
+ break;
}
return FALSE;
}
-static bool8 sub_807CFC8(void)
+static bool8 AnimateTradeSequenceWireless(void)
{
u16 evoTarget;
- switch (gUnknown_020322A0->state)
+ switch (sTradeData->state)
{
- case 0:
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = -180;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[0]].y_offset;
- gUnknown_020322A0->state++;
- gUnknown_020322A0->cachedMapMusic = GetCurrentMapMusic();
- PlayNewMapMusic(MUS_SHINKA);
- break;
- case 1:
- if (gUnknown_020322A0->bg2hofs > 0)
- {
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x += 3;
- gUnknown_020322A0->bg2hofs -= 3;
- }
- else
- {
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = 0;
- gUnknown_020322A0->bg2hofs = 0;
- gUnknown_020322A0->state = 10;
- }
- break;
- case 10:
- StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY);
- sub_807F1A8(0, gStringVar4, 0);
+ case 0:
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = -180;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset;
+ sTradeData->state++;
+ sTradeData->cachedMapMusic = GetCurrentMapMusic();
+ PlayNewMapMusic(MUS_SHINKA);
+ break;
+ case 1:
+ if (sTradeData->bg2hofs > 0)
+ {
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x += 3;
+ sTradeData->bg2hofs -= 3;
+ }
+ else
+ {
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = 0;
+ sTradeData->bg2hofs = 0;
+ sTradeData->state = 10;
+ }
+ break;
+ case 10:
+ StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
- if (gUnknown_020322A0->tradeSpecies[0] != SPECIES_EGG)
- {
- PlayCry1(gUnknown_020322A0->tradeSpecies[0], 0);
- }
+ if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG)
+ {
+ PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0);
+ }
- gUnknown_020322A0->state = 11;
- gUnknown_020322A0->timer = 0;
- break;
- case 11:
- if (++gUnknown_020322A0->timer == 80)
- {
- gUnknown_020322A0->unk_D2 = sub_807671C(gUnknown_020322A0->pokePicSpriteIdxs[0], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
- gUnknown_020322A0->state++;
- StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1);
- sub_807F1A8(0, gStringVar4, 0);
- }
- break;
- case 12:
- if (gSprites[gUnknown_020322A0->unk_D2].callback == SpriteCallbackDummy)
- {
- gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0);
- gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E5D8;
- DestroySprite(&gSprites[gUnknown_020322A0->unk_D2]);
- gUnknown_020322A0->state++;
- }
- break;
- case 13:
- // The game waits here for the sprite to finish its animation sequence.
- break;
- case 14:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state = 20;
- break;
- case 20:
- if (!gPaletteFade.active)
- {
- sub_807B62C(4);
- FillWindowPixelBuffer(0, PIXEL_FILL(15));
- CopyWindowToVram(0, 3);
- gUnknown_020322A0->state++;
- }
- break;
- case 21:
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- gUnknown_020322A0->state++;
- break;
- case 22:
- if (!gPaletteFade.active)
- {
- gUnknown_020322A0->state = 23;
- }
- break;
- case 23:
- if (gUnknown_020322A0->unk_EA > 0x100)
- {
- gUnknown_020322A0->unk_EA -= 0x34;
- }
- else
- {
- sub_807B62C(1);
- gUnknown_020322A0->unk_EA = 0x80;
- gUnknown_020322A0->state = 124;
- gUnknown_020322A0->timer = 0;
- }
- gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA;
- break;
- case 124:
- if (++gUnknown_020322A0->timer > 20)
- {
- sub_807B62C(3);
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E8C, 120, 80, 0);
- gUnknown_020322A0->state++;
- }
- break;
- case 125:
- if (gSprites[gUnknown_020322A0->unk_91].animEnded)
- {
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 |
- BLDCNT_TGT1_OBJ |
- BLDCNT_EFFECT_BLEND |
- BLDCNT_TGT2_BG2);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4));
- CreateTask(c3_08054588, 5);
- gUnknown_020322A0->state++;
- }
- break;
- case 126:
- if (!FuncIsActiveTask(c3_08054588))
- {
- gUnknown_020322A0->state = 26;
- }
- break;
- case 26:
- if (--gUnknown_020322A0->bg1vofs == 316)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 27:
- gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 120, 80, 3);
- gSprites[gUnknown_020322A0->unk_90].callback = sub_807AA4C;
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 120, 80, 0);
- StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1);
- gUnknown_020322A0->state++;
- break;
- case 28:
- if ((gUnknown_020322A0->bg1vofs -= 3) == 166)
- {
- gUnknown_020322A0->state = 200;
- }
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_OBJ_ON);
- break;
- case 200:
- gSprites[gUnknown_020322A0->unk_90].pos1.y -= 2;
- gSprites[gUnknown_020322A0->unk_91].pos1.y -= 2;
- if (gSprites[gUnknown_020322A0->unk_90].pos1.y < -8)
- {
- gUnknown_020322A0->state = 29;
- }
- break;
- case 29:
+ sTradeData->state = 11;
+ sTradeData->timer = 0;
+ break;
+ case 11:
+ if (++sTradeData->timer == 80)
+ {
+ sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff);
+ sTradeData->state++;
+ StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ }
+ break;
+ case 12:
+ if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy)
+ {
+ sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0);
+ gSprites[sTradeData->unk_D3].callback = sub_807E5D8;
+ DestroySprite(&gSprites[sTradeData->pokeballSpriteId]);
+ sTradeData->state++;
+ }
+ break;
+ case 13:
+ // The game waits here for the sprite to finish its animation sequence.
+ break;
+ case 14:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTradeData->state = 20;
+ break;
+ case 20:
+ if (!gPaletteFade.active)
+ {
+ SetTradeSequenceBgGpuRegs(4);
+ FillWindowPixelBuffer(0, PIXEL_FILL(15));
+ CopyWindowToVram(0, 3);
+ sTradeData->state++;
+ }
+ break;
+ case 21:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ sTradeData->state++;
+ break;
+ case 22:
+ if (!gPaletteFade.active)
+ {
+ sTradeData->state = 23;
+ }
+ break;
+ case 23:
+ if (sTradeData->unk_EA > 0x100)
+ {
+ sTradeData->unk_EA -= 0x34;
+ }
+ else
+ {
+ SetTradeSequenceBgGpuRegs(1);
+ sTradeData->unk_EA = 0x80;
+ sTradeData->state = 124;
+ sTradeData->timer = 0;
+ }
+ sTradeData->sXY = 0x8000 / sTradeData->unk_EA;
+ break;
+ case 124:
+ if (++sTradeData->timer > 20)
+ {
+ SetTradeSequenceBgGpuRegs(3);
+ sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E8C, 120, 80, 0);
+ sTradeData->state++;
+ }
+ break;
+ case 125:
+ if (gSprites[sTradeData->unk_91].animEnded)
+ {
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 |
+ BLDCNT_TGT1_OBJ |
+ BLDCNT_EFFECT_BLEND |
+ BLDCNT_TGT2_BG2);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4));
+ CreateTask(Task_AnimateWirelessSignal, 5);
+ sTradeData->state++;
+ }
+ break;
+ case 126:
+ if (!FuncIsActiveTask(Task_AnimateWirelessSignal))
+ {
+ sTradeData->state = 26;
+ }
+ break;
+ case 26:
+ if (--sTradeData->bg1vofs == 316)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 27:
+ sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 120, 80, 3);
+ gSprites[sTradeData->unk_90].callback = sub_807AA4C;
+ sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0);
+ StartSpriteAnim(&gSprites[sTradeData->unk_91], 1);
+ sTradeData->state++;
+ break;
+ case 28:
+ if ((sTradeData->bg1vofs -= 3) == 166)
+ {
+ sTradeData->state = 200;
+ }
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ break;
+ case 200:
+ gSprites[sTradeData->unk_90].pos1.y -= 2;
+ gSprites[sTradeData->unk_91].pos1.y -= 2;
+ if (gSprites[sTradeData->unk_90].pos1.y < -8)
+ {
+ sTradeData->state = 29;
+ }
+ break;
+ case 29:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
+ sTradeData->state = 30;
+ break;
+ case 30:
+ if (!gPaletteFade.active)
+ {
+ DestroySprite(&gSprites[sTradeData->unk_90]);
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ SetTradeSequenceBgGpuRegs(2);
+ sTradeData->state++;
+ }
+ break;
+ case 31:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0);
+ sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0);
+ sTradeData->state++;
+ break;
+ case 32:
+ if (!gPaletteFade.active)
+ {
+ PlaySE(SE_TK_WARPOUT);
+ sTradeData->state++;
+ }
+ gSprites[sTradeData->unk_90].pos2.y -= 3;
+ gSprites[sTradeData->unk_91].pos2.y += 3;
+ break;
+ case 33:
+ gSprites[sTradeData->unk_90].pos2.y -= 3;
+ gSprites[sTradeData->unk_91].pos2.y += 3;
+ if (gSprites[sTradeData->unk_90].pos2.y <= -90)
+ {
+ gSprites[sTradeData->unk_90].data[1] = 1;
+ gSprites[sTradeData->unk_91].data[1] = 1;
+ sTradeData->state++;
+ CreateTask(c3_0805465C, 5);
+ }
+ break;
+ case 34:
+ BlendPalettes(0x8, 16, RGB_WHITEALPHA);
+ sTradeData->state++;
+ break;
+ case 35:
+ BlendPalettes(0x8, 16, RGB_WHITEALPHA);
+ sTradeData->state++;
+ break;
+ case 36:
+ BlendPalettes(0x8, 16, RGB_WHITEALPHA);
+ sTradeData->state++;
+ break;
+ case 37:
+ if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER]))
+ {
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].affineAnims = gSpriteAffineAnimTable_8338ECC;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0, 3, 3);
+ StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0);
+ }
+ else
+ {
+ StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0);
+ }
+ StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0);
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.x = 40;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 200;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.y = 192;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = -32;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = FALSE;
+ sTradeData->state++;
+ break;
+ case 38:
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y -= 3;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y += 3;
+ if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y >= -163)
+ {
+ PlaySE(SE_TK_WARPIN);
+ }
+ if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -222)
+ {
+ gSprites[sTradeData->unk_90].data[1] = 0;
+ gSprites[sTradeData->unk_91].data[1] = 0;
+ sTradeData->state++;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = TRUE;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = TRUE;
+ CreateTask(sub_807F39C, 5);
+ }
+ break;
+ case 39:
+ gSprites[sTradeData->unk_90].pos2.y -= 3;
+ gSprites[sTradeData->unk_91].pos2.y += 3;
+ if (gSprites[sTradeData->unk_90].pos2.y <= -222)
+ {
BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state = 30;
- break;
- case 30:
- if (!gPaletteFade.active)
- {
- DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- sub_807B62C(2);
- gUnknown_020322A0->state++;
- }
- break;
- case 31:
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- gUnknown_020322A0->unk_90 = CreateSprite(&gSpriteTemplate_8338DC8, 111, 170, 0);
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 129, -10, 0);
- gUnknown_020322A0->state++;
- break;
- case 32:
- if (!gPaletteFade.active)
- {
- PlaySE(SE_TK_WARPOUT);
- gUnknown_020322A0->state++;
- }
- gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
- gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
- break;
- case 33:
- gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
- gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
- if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -90)
- {
- gSprites[gUnknown_020322A0->unk_90].data[1] = 1;
- gSprites[gUnknown_020322A0->unk_91].data[1] = 1;
- gUnknown_020322A0->state++;
- CreateTask(c3_0805465C, 5);
- }
- break;
- case 34:
- BlendPalettes(0x8, 16, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- break;
- case 35:
- BlendPalettes(0x8, 16, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- break;
- case 36:
- BlendPalettes(0x8, 16, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- break;
- case 37:
- if (!IsMonSpriteNotFlipped(gUnknown_020322A0->tradeSpecies[0]))
- {
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].affineAnims = gSpriteAffineAnimTable_8338ECC;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.affineMode = 3;
- CalcCenterToCornerVec(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0, 3, 3);
- StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0);
- }
- else
- {
- StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0);
- }
- StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0);
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.x = 40;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 200;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.y = 192;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = -32;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = FALSE;
- gUnknown_020322A0->state++;
- break;
- case 38:
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y -= 3;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y += 3;
- if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y >= -163)
- {
- PlaySE(SE_TK_WARPIN);
- }
- if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -222)
- {
- gSprites[gUnknown_020322A0->unk_90].data[1] = 0;
- gSprites[gUnknown_020322A0->unk_91].data[1] = 0;
- gUnknown_020322A0->state++;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = TRUE;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = TRUE;
- CreateTask(sub_807F39C, 5);
- }
- break;
- case 39:
- gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3;
- gSprites[gUnknown_020322A0->unk_91].pos2.y += 3;
- if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -222)
- {
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state++;
- DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- }
- break;
- case 40:
- if (!gPaletteFade.active)
- {
- gUnknown_020322A0->state++;
- sub_807B62C(1);
- gUnknown_020322A0->bg1vofs = 166;
- sub_807B62C(3);
- gUnknown_020322A0->bg2vofs = 412;
- gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 120, -20, 3);
- gSprites[gUnknown_020322A0->unk_90].callback = sub_807AA4C;
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 120, -20, 0);
- StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1);
- }
- break;
- case 41:
- BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
- gUnknown_020322A0->state++;
- break;
- case 42:
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_OBJ_ON);
- if (!gPaletteFade.active)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 43:
- gSprites[gUnknown_020322A0->unk_90].pos2.y += 4;
- gSprites[gUnknown_020322A0->unk_91].pos2.y += 4;
- if (gSprites[gUnknown_020322A0->unk_90].pos2.y + gSprites[gUnknown_020322A0->unk_90].pos1.y == 64)
- {
- gUnknown_020322A0->state = 144;
- gUnknown_020322A0->timer = 0;
- }
- break;
- case 144:
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG1_ON |
- DISPCNT_BG2_ON |
- DISPCNT_OBJ_ON);
- gUnknown_020322A0->bg1vofs += 3;
- gUnknown_020322A0->bg2vofs += 3;
- if (++gUnknown_020322A0->timer == 10)
- {
- u8 taskId = CreateTask(c3_08054588, 5);
- gTasks[taskId].data[2] = 1;
- }
- if (gUnknown_020322A0->bg1vofs > 316)
- {
- gUnknown_020322A0->bg1vofs = 316;
- gUnknown_020322A0->state++;
- }
- break;
- case 145:
- DestroySprite(&gSprites[gUnknown_020322A0->unk_90]);
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- gUnknown_020322A0->state++;
- gUnknown_020322A0->timer = 0;
- break;
- case 146:
- if (!FuncIsActiveTask(c3_08054588))
- {
- gUnknown_020322A0->state = 46;
- gUnknown_020322A0->timer = 0;
- }
- break;
- case 46:
- if (++gUnknown_020322A0->timer == 10)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 47:
- if (++gUnknown_020322A0->bg1vofs > 348)
- {
- gUnknown_020322A0->bg1vofs = 348;
- gUnknown_020322A0->state++;
- }
- break;
- case 48:
- gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
- gUnknown_020322A0->state = 50;
- break;
- case 50:
- if (gSprites[gUnknown_020322A0->unk_91].animEnded)
- {
- DestroySprite(&gSprites[gUnknown_020322A0->unk_91]);
- sub_807B62C(6);
- gUnknown_020322A0->state++;
- PlaySE(SE_W028);
- }
- break;
- case 51:
- if (gUnknown_020322A0->unk_EA < 0x400)
- {
- gUnknown_020322A0->unk_EA += 0x34;
- }
- else
- {
- gUnknown_020322A0->unk_EA = 0x400;
- gUnknown_020322A0->state++;
- }
- gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA;
- break;
- case 52:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state = 60;
- break;
- case 60:
- if (!gPaletteFade.active)
- {
- sub_807B62C(5);
- sub_807B62C(7);
- gPaletteFade.bufferTransferDisabled = TRUE;
- gUnknown_020322A0->state++;
- }
- break;
- case 61:
- gPaletteFade.bufferTransferDisabled = FALSE;
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
- gUnknown_020322A0->state++;
- break;
- case 62:
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG2_ON |
- DISPCNT_OBJ_ON);
- if (!gPaletteFade.active)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 63:
- gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0);
- gSprites[gUnknown_020322A0->unk_D3].data[3] = 74;
- gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E6AC;
- StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_D3], 1);
- StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->unk_D3], 2);
- BlendPalettes(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- gUnknown_020322A0->timer = 0;
- break;
- case 64:
- BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
- gUnknown_020322A0->state++;
- break;
- case 65:
- if (gSprites[gUnknown_020322A0->unk_D3].callback == SpriteCallbackDummy)
- {
- HandleLoadSpecialPokePic_2(&gMonFrontPicTable[gUnknown_020322A0->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], gUnknown_020322A0->tradeSpecies[1], gUnknown_020322A0->unk_68[1]);
- gUnknown_020322A0->state++;
- }
- break;
- case 66:
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 120;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[1]].y_offset + 60;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.x = 0;
- gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y = 0;
- StartSpriteAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0);
- CreatePokeballSpriteToReleaseMon(gUnknown_020322A0->pokePicSpriteIdxs[1], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, gUnknown_020322A0->tradeSpecies[1]);
- FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->unk_D3]);
- DestroySprite(&gSprites[gUnknown_020322A0->unk_D3]);
- gUnknown_020322A0->state++;
- break;
- case 67:
- SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
- DISPCNT_OBJ_1D_MAP |
- DISPCNT_BG0_ON |
- DISPCNT_BG2_ON |
- DISPCNT_OBJ_ON);
- StringExpandPlaceholders(gStringVar4, gText_XSentOverY);
- sub_807F1A8(0, gStringVar4, 0);
- gUnknown_020322A0->state = 167;
- gUnknown_020322A0->timer = 0;
- break;
- // 167 and 267 are extra cases added in for animations
- case 167:
- if (++gUnknown_020322A0->timer > 60)
- {
- gUnknown_020322A0->state = 267;
- gUnknown_020322A0->timer = 0;
- }
- break;
- case 267:
- if (IsCryFinished())
- {
- gUnknown_020322A0->state = 68;
- }
- break;
- case 68:
- if (++gUnknown_020322A0->timer == 10)
- {
- PlayFanfare(MUS_FANFA5);
- }
- if (gUnknown_020322A0->timer == 250)
- {
- gUnknown_020322A0->state++;
- StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX);
- sub_807F1A8(0, gStringVar4, 0);
- gUnknown_020322A0->timer = 0;
- }
- break;
- case 69:
- if (++gUnknown_020322A0->timer == 60)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 70:
- sub_807F14C();
- gUnknown_020322A0->state++;
- break;
- case 71:
- if (gUnknown_020322A0->isLinkTrade)
- {
- return TRUE;
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- gUnknown_020322A0->state++;
- }
- break;
- case 72: // Only if in-game trade
- sub_807B4D0(gSpecialVar_0x8005, 0);
- gCB2_AfterEvolution = sub_807B60C;
- evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE);
- if (evoTarget != SPECIES_NONE)
- {
- TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]);
- }
- gUnknown_020322A0->state++;
- break;
- case 73:
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gUnknown_020322A0->state++;
- break;
- case 74:
- if (!gPaletteFade.active)
- {
- PlayNewMapMusic(gUnknown_020322A0->cachedMapMusic);
- if (gUnknown_020322A0)
- {
- FreeAllWindowBuffers();
- Free(GetBgTilemapBuffer(3));
- Free(GetBgTilemapBuffer(1));
- Free(GetBgTilemapBuffer(0));
- FreeMonSpritesGfx();
- FREE_AND_SET_NULL(gUnknown_020322A0);
- }
- SetMainCallback2(CB2_ReturnToField);
- sub_807E784();
- }
- break;
+ sTradeData->state++;
+ DestroySprite(&gSprites[sTradeData->unk_90]);
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ }
+ break;
+ case 40:
+ if (!gPaletteFade.active)
+ {
+ sTradeData->state++;
+ SetTradeSequenceBgGpuRegs(1);
+ sTradeData->bg1vofs = 166;
+ SetTradeSequenceBgGpuRegs(3);
+ sTradeData->bg2vofs = 412;
+ sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 120, -20, 3);
+ gSprites[sTradeData->unk_90].callback = sub_807AA4C;
+ sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0);
+ StartSpriteAnim(&gSprites[sTradeData->unk_91], 1);
+ }
+ break;
+ case 41:
+ BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK);
+ sTradeData->state++;
+ break;
+ case 42:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_OBJ_ON);
+ if (!gPaletteFade.active)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 43:
+ gSprites[sTradeData->unk_90].pos2.y += 4;
+ gSprites[sTradeData->unk_91].pos2.y += 4;
+ if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64)
+ {
+ sTradeData->state = 144;
+ sTradeData->timer = 0;
+ }
+ break;
+ case 144:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG1_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ sTradeData->bg1vofs += 3;
+ sTradeData->bg2vofs += 3;
+ if (++sTradeData->timer == 10)
+ {
+ u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5);
+ gTasks[taskId].data[2] = TRUE;
+ }
+ if (sTradeData->bg1vofs > 316)
+ {
+ sTradeData->bg1vofs = 316;
+ sTradeData->state++;
+ }
+ break;
+ case 145:
+ DestroySprite(&gSprites[sTradeData->unk_90]);
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ sTradeData->state++;
+ sTradeData->timer = 0;
+ break;
+ case 146:
+ if (!FuncIsActiveTask(Task_AnimateWirelessSignal))
+ {
+ sTradeData->state = 46;
+ sTradeData->timer = 0;
+ }
+ break;
+ case 46:
+ if (++sTradeData->timer == 10)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 47:
+ if (++sTradeData->bg1vofs > 348)
+ {
+ sTradeData->bg1vofs = 348;
+ sTradeData->state++;
+ }
+ break;
+ case 48:
+ sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0);
+ sTradeData->state = 50;
+ break;
+ case 50:
+ if (gSprites[sTradeData->unk_91].animEnded)
+ {
+ DestroySprite(&gSprites[sTradeData->unk_91]);
+ SetTradeSequenceBgGpuRegs(6);
+ sTradeData->state++;
+ PlaySE(SE_W028);
+ }
+ break;
+ case 51:
+ if (sTradeData->unk_EA < 0x400)
+ {
+ sTradeData->unk_EA += 0x34;
+ }
+ else
+ {
+ sTradeData->unk_EA = 0x400;
+ sTradeData->state++;
+ }
+ sTradeData->sXY = 0x8000 / sTradeData->unk_EA;
+ break;
+ case 52:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTradeData->state = 60;
+ break;
+ case 60:
+ if (!gPaletteFade.active)
+ {
+ SetTradeSequenceBgGpuRegs(5);
+ SetTradeSequenceBgGpuRegs(7);
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ sTradeData->state++;
+ }
+ break;
+ case 61:
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ sTradeData->state++;
+ break;
+ case 62:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ if (!gPaletteFade.active)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 63:
+ sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0);
+ gSprites[sTradeData->unk_D3].data[3] = 74;
+ gSprites[sTradeData->unk_D3].callback = sub_807E6AC;
+ StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1);
+ StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2);
+ BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA);
+ sTradeData->state++;
+ sTradeData->timer = 0;
+ break;
+ case 64:
+ BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA);
+ sTradeData->state++;
+ break;
+ case 65:
+ if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy)
+ {
+ HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]);
+ sTradeData->state++;
+ }
+ break;
+ case 66:
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 120;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.x = 0;
+ gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y = 0;
+ StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0);
+ CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]);
+ FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]);
+ DestroySprite(&gSprites[sTradeData->unk_D3]);
+ sTradeData->state++;
+ break;
+ case 67:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 |
+ DISPCNT_OBJ_1D_MAP |
+ DISPCNT_BG0_ON |
+ DISPCNT_BG2_ON |
+ DISPCNT_OBJ_ON);
+ StringExpandPlaceholders(gStringVar4, gText_XSentOverY);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ sTradeData->state = 167;
+ sTradeData->timer = 0;
+ break;
+ // 167 and 267 are extra cases added in for animations
+ case 167:
+ if (++sTradeData->timer > 60)
+ {
+ sTradeData->state = 267;
+ sTradeData->timer = 0;
+ }
+ break;
+ case 267:
+ if (IsCryFinished())
+ {
+ sTradeData->state = 68;
+ }
+ break;
+ case 68:
+ if (++sTradeData->timer == 10)
+ {
+ PlayFanfare(MUS_FANFA5);
+ }
+ if (sTradeData->timer == 250)
+ {
+ sTradeData->state++;
+ StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ sTradeData->timer = 0;
+ }
+ break;
+ case 69:
+ if (++sTradeData->timer == 60)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 70:
+ CheckPartnersMonForRibbons();
+ sTradeData->state++;
+ break;
+ case 71:
+ if (sTradeData->isLinkTrade)
+ {
+ return TRUE;
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ sTradeData->state++;
+ }
+ break;
+ case 72: // Only if in-game trade
+ TradeMons(gSpecialVar_0x8005, 0);
+ gCB2_AfterEvolution = CB2_UpdateInGameTrade;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ {
+ TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
+ }
+ sTradeData->state++;
+ break;
+ case 73:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ sTradeData->state++;
+ break;
+ case 74:
+ if (!gPaletteFade.active)
+ {
+ PlayNewMapMusic(sTradeData->cachedMapMusic);
+ if (sTradeData)
+ {
+ FreeAllWindowBuffers();
+ Free(GetBgTilemapBuffer(3));
+ Free(GetBgTilemapBuffer(1));
+ Free(GetBgTilemapBuffer(0));
+ FreeMonSpritesGfx();
+ FREE_AND_SET_NULL(sTradeData);
+ }
+ SetMainCallback2(CB2_ReturnToField);
+ BuffeInGameTradeMonName();
+ }
+ break;
}
return FALSE;
}
-static void c2_08053788(void)
+static void CB2_TryTradeEvolution(void)
{
u16 evoTarget;
switch (gMain.state)
{
- case 0:
- gMain.state = 4;
- gSoftResetDisabled = TRUE;
- break;
- case 4:
- gCB2_AfterEvolution = sub_807EB50;
- evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE);
- if (evoTarget != SPECIES_NONE)
- TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]);
- else if (sub_8077260())
- SetMainCallback2(sub_807F464);
- else
- SetMainCallback2(sub_807EB50);
- gUnknown_02032298[0] = 255;
- break;
+ case 0:
+ gMain.state = 4;
+ gSoftResetDisabled = TRUE;
+ break;
+ case 4:
+ gCB2_AfterEvolution = CB2_SaveAndEndTrade;
+ evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], TRUE, ITEM_NONE);
+ if (evoTarget != SPECIES_NONE)
+ TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]);
+ else if (IsWirelessTrade())
+ SetMainCallback2(CB2_SaveAndEndWirelessTrade);
+ else
+ SetMainCallback2(CB2_SaveAndEndTrade);
+ gSelectedTradeMonPositions[TRADE_PLAYER] = 255;
+ break;
}
if (!HasLinkErrorOccurred())
RunTasks();
@@ -5703,29 +4503,26 @@ static void c2_08053788(void)
UpdatePaletteFade();
}
-static void sub_807E4DC(void)
+static void UpdateTradeFinishFlags(void)
{
u8 blockReceivedStatus;
- sub_807ACDC();
+ TradeGetMultiplayerId(); // no effect call, ret val ignored
blockReceivedStatus = GetBlockReceivedStatus();
if (blockReceivedStatus & 0x01)
{
- if (gBlockRecvBuffer[0][0] == 0xDCBA)
- {
- SetMainCallback2(c2_08053788);
- }
- if (gBlockRecvBuffer[0][0] == 0xABCD)
- {
- gUnknown_020322A0->unk_72 = 1;
- }
+ if (gBlockRecvBuffer[0][0] == LINKCMD_CONFIRM_FINISH_TRADE)
+ SetMainCallback2(CB2_TryTradeEvolution);
+
+ if (gBlockRecvBuffer[0][0] == LINKCMD_READY_FINISH_TRADE)
+ sTradeData->playerLinkFlagFinishTrade = READY_FINISH_TRADE;
+
ResetBlockReceivedFlag(0);
}
if (blockReceivedStatus & 0x02)
{
- if (gBlockRecvBuffer[1][0] == 0xABCD)
- {
- gUnknown_020322A0->unk_73 = 1;
- }
+ if (gBlockRecvBuffer[1][0] == LINKCMD_READY_FINISH_TRADE)
+ sTradeData->partnerLinkFlagFinishTrade = READY_FINISH_TRADE;
+
ResetBlockReceivedFlag(1);
}
}
@@ -5753,7 +4550,7 @@ static void sub_807E55C(struct Sprite *sprite)
static void sub_807E5D8(struct Sprite *sprite)
{
- sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]];
+ sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]];
if (sprite->data[0] == 22)
PlaySE(SE_KON);
if (++ sprite->data[0] == 44)
@@ -5771,11 +4568,11 @@ static void sub_807E64C(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, 1);
if (++ sprite->data[1] > 20)
{
- sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data[0]];
+ sprite->pos2.y -= sTradeBallVerticalVelocityTable[sprite->data[0]];
if (++ sprite->data[0] == 23)
{
DestroySprite(sprite);
- gUnknown_020322A0->state = 14; // Resume the master trade animation
+ sTradeData->state = 14; // Resume the master trade animation
}
}
}
@@ -5799,7 +4596,7 @@ static void sub_807E6AC(struct Sprite *sprite)
PlaySE(SE_KON3);
if (sprite->data[0] == 0x6b)
PlaySE(SE_KON4);
- sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]];
+ sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]];
if (++sprite->data[0] == 0x6c)
sprite->callback = SpriteCallbackDummy;
}
@@ -5807,16 +4604,16 @@ static void sub_807E6AC(struct Sprite *sprite)
u16 GetInGameTradeSpeciesInfo(void)
{
- const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004];
- StringCopy(gStringVar1, gSpeciesNames[inGameTrade->playerSpecies]);
+ const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004];
+ StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]);
StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]);
- return inGameTrade->playerSpecies;
+ return inGameTrade->requestedSpecies;
}
-static void sub_807E784(void)
+static void BuffeInGameTradeMonName(void)
{
u8 nickname[32];
- const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004];
+ const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004];
GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname);
StringCopy10(gStringVar1, nickname);
StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]);
@@ -5824,11 +4621,11 @@ static void sub_807E784(void)
static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade)
{
- const struct InGameTrade *inGameTrade = &gIngameTrades[whichInGameTrade];
+ const struct InGameTrade *inGameTrade = &sIngameTrades[whichInGameTrade];
u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL);
struct MailStruct mail;
- u8 metLocation = 0xFE;
+ u8 metLocation = METLOC_IN_GAME_TRADE;
u8 isMail;
struct Pokemon *pokemon = &gEnemyParty[0];
@@ -5840,15 +4637,15 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade)
SetMonData(pokemon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]);
SetMonData(pokemon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]);
SetMonData(pokemon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]);
- SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->name);
+ SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->nickname);
SetMonData(pokemon, MON_DATA_OT_NAME, inGameTrade->otName);
SetMonData(pokemon, MON_DATA_OT_GENDER, &inGameTrade->otGender);
- SetMonData(pokemon, MON_DATA_ABILITY_NUM, &inGameTrade->secondAbility);
- SetMonData(pokemon, MON_DATA_BEAUTY, &inGameTrade->stats[1]);
- SetMonData(pokemon, MON_DATA_CUTE, &inGameTrade->stats[2]);
- SetMonData(pokemon, MON_DATA_COOL, &inGameTrade->stats[0]);
- SetMonData(pokemon, MON_DATA_SMART, &inGameTrade->stats[3]);
- SetMonData(pokemon, MON_DATA_TOUGH, &inGameTrade->stats[4]);
+ SetMonData(pokemon, MON_DATA_ABILITY_NUM, &inGameTrade->abilityNum);
+ SetMonData(pokemon, MON_DATA_BEAUTY, &inGameTrade->conditions[1]);
+ SetMonData(pokemon, MON_DATA_CUTE, &inGameTrade->conditions[2]);
+ SetMonData(pokemon, MON_DATA_COOL, &inGameTrade->conditions[0]);
+ SetMonData(pokemon, MON_DATA_SMART, &inGameTrade->conditions[3]);
+ SetMonData(pokemon, MON_DATA_TOUGH, &inGameTrade->conditions[4]);
SetMonData(pokemon, MON_DATA_SHEEN, &inGameTrade->sheen);
SetMonData(pokemon, MON_DATA_MET_LOCATION, &metLocation);
@@ -5857,8 +4654,8 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade)
{
if (ItemIsMail(inGameTrade->heldItem))
{
- sub_807E974(&mail, inGameTrade);
- gUnknown_020321C0[0] = mail;
+ SetInGameTradeMail(&mail, inGameTrade);
+ gTradeMail[0] = mail;
SetMonData(pokemon, MON_DATA_MAIL, &isMail);
SetMonData(pokemon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem);
}
@@ -5870,12 +4667,12 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade)
CalculateMonStats(&gEnemyParty[0]);
}
-static void sub_807E974(struct MailStruct *mail, const struct InGameTrade *trade) {
+static void SetInGameTradeMail(struct MailStruct *mail, const struct InGameTrade *trade) {
s32 i;
- for (i = 0; i < 9; i++)
+ for (i = 0; i < MAIL_WORDS_COUNT; i++)
{
- mail->words[i] = gIngameTradeMail[trade->mailNum][i];
+ mail->words[i] = sIngameTradeMail[trade->mailNum][i];
}
StringCopy(mail->playerName, trade->otName);
@@ -5901,22 +4698,22 @@ void CreateInGameTradePokemon(void)
_CreateInGameTradePokemon(gSpecialVar_0x8005, gSpecialVar_0x8004);
}
-static void sub_807EA2C(void)
+static void CB2_UpdateLinkTrade(void)
{
- if (sub_807BBC8() == TRUE)
+ if (AnimateTradeSequence() == TRUE)
{
- DestroySprite(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]]);
- FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]]);
- sub_807B4D0(gUnknown_02032298[0], gUnknown_02032298[1] % 6);
- if (!sub_8077260())
+ DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]]);
+ FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]]);
+ TradeMons(gSelectedTradeMonPositions[TRADE_PLAYER], gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE);
+ if (!IsWirelessTrade())
{
- gUnknown_020322A0->linkData[0] = 0xABCD;
- gUnknown_020322A0->unk_93 = 1;
+ sTradeData->linkData[0] = LINKCMD_READY_FINISH_TRADE;
+ sTradeData->sendTradeFinishState = 1;
}
- SetMainCallback2(sub_807EACC);
+ SetMainCallback2(CB2_TryFinishTrade);
}
- sub_807B5B8();
- sub_807E4DC();
+ TrySendTradeFinishData();
+ UpdateTradeFinishFlags();
RunTasks();
RunTextPrinters();
AnimateSprites();
@@ -5924,22 +4721,24 @@ static void sub_807EA2C(void)
UpdatePaletteFade();
}
-static void sub_807EACC(void)
+static void CB2_TryFinishTrade(void)
{
- u8 mpId = sub_807ACDC();
- if (sub_8077260())
+ u8 mpId = TradeGetMultiplayerId();
+ if (IsWirelessTrade())
{
- SetMainCallback2(c2_08053788);
+ SetMainCallback2(CB2_TryTradeEvolution);
}
else
{
- sub_807E4DC();
- if (mpId == 0 && gUnknown_020322A0->unk_72 == 1 && gUnknown_020322A0->unk_73 == 1)
+ UpdateTradeFinishFlags();
+ if (mpId == 0
+ && sTradeData->playerLinkFlagFinishTrade == READY_FINISH_TRADE
+ && sTradeData->partnerLinkFlagFinishTrade == READY_FINISH_TRADE)
{
- gUnknown_020322A0->linkData[0] = 0xDCBA;
- Trade_SendData(gUnknown_020322A0);
- gUnknown_020322A0->unk_72 = 2;
- gUnknown_020322A0->unk_73 = 2;
+ sTradeData->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE;
+ Trade_SendData(sTradeData);
+ sTradeData->playerLinkFlagFinishTrade = FINISH_TRADE;
+ sTradeData->partnerLinkFlagFinishTrade = FINISH_TRADE;
}
}
RunTasks();
@@ -5948,159 +4747,159 @@ static void sub_807EACC(void)
UpdatePaletteFade();
}
-static void sub_807EB50(void)
+static void CB2_SaveAndEndTrade(void)
{
switch (gMain.state)
{
- case 0:
- gMain.state++;
- StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5);
- sub_807F1A8(0, gStringVar4, 0);
- break;
- case 1:
- sub_8077288(0);
- gMain.state = 100;
- gUnknown_020322A0->timer = 0;
- break;
- case 100:
- if (++gUnknown_020322A0->timer > 180)
- {
- gMain.state = 101;
- gUnknown_020322A0->timer = 0;
- }
- if (_IsLinkTaskFinished())
- {
- gMain.state = 2;
- }
- break;
- case 101:
- if (_IsLinkTaskFinished())
- {
- gMain.state = 2;
- }
- break;
- case 2:
- gMain.state = 50;
- StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower);
- sub_807F1A8(0, gStringVar4, 0);
- break;
- case 50:
- if (!InUnionRoom())
- IncrementGameStat(GAME_STAT_POKEMON_TRADES);
- if (gWirelessCommType)
- {
- sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
- }
- SetContinueGameWarpStatusToDynamicWarp();
- sub_8153380();
+ case 0:
+ gMain.state++;
+ StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ break;
+ case 1:
+ sub_8077288(0);
+ gMain.state = 100;
+ sTradeData->timer = 0;
+ break;
+ case 100:
+ if (++sTradeData->timer > 180)
+ {
+ gMain.state = 101;
+ sTradeData->timer = 0;
+ }
+ if (_IsLinkTaskFinished())
+ {
+ gMain.state = 2;
+ }
+ break;
+ case 101:
+ if (_IsLinkTaskFinished())
+ {
+ gMain.state = 2;
+ }
+ break;
+ case 2:
+ gMain.state = 50;
+ StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ break;
+ case 50:
+ if (!InUnionRoom())
+ IncrementGameStat(GAME_STAT_POKEMON_TRADES);
+ if (gWirelessCommType)
+ {
+ sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
+ }
+ SetContinueGameWarpStatusToDynamicWarp();
+ sub_8153380();
+ gMain.state++;
+ sTradeData->timer = 0;
+ break;
+ case 51:
+ if (++sTradeData->timer == 5)
+ {
gMain.state++;
- gUnknown_020322A0->timer = 0;
- break;
- case 51:
- if (++gUnknown_020322A0->timer == 5)
- {
- gMain.state++;
- }
- break;
- case 52:
- if (sub_81533AC())
+ }
+ break;
+ case 52:
+ if (sub_81533AC())
+ {
+ ClearContinueGameWarpStatus2();
+ gMain.state = 4;
+ }
+ else
+ {
+ sTradeData->timer = 0;
+ gMain.state = 51;
+ }
+ break;
+ case 4:
+ sub_81533E0();
+ gMain.state = 40;
+ sTradeData->timer = 0;
+ break;
+ case 40:
+ if (++sTradeData->timer > 50)
+ {
+ if (GetMultiplayerId() == 0)
{
- ClearContinueGameWarpStatus2();
- gMain.state = 4;
+ sTradeData->timer = Random() % 30;
}
else
{
- gUnknown_020322A0->timer = 0;
- gMain.state = 51;
+ sTradeData->timer = 0;
}
- break;
- case 4:
- sub_81533E0();
- gMain.state = 40;
- gUnknown_020322A0->timer = 0;
- break;
- case 40:
- if (++gUnknown_020322A0->timer > 50)
- {
- if (GetMultiplayerId() == 0)
- {
- gUnknown_020322A0->timer = Random() % 30;
- }
- else
- {
- gUnknown_020322A0->timer = 0;
- }
- gMain.state = 41;
- }
- break;
- case 41:
- if (gUnknown_020322A0->timer == 0)
+ gMain.state = 41;
+ }
+ break;
+ case 41:
+ if (sTradeData->timer == 0)
+ {
+ sub_8077288(1);
+ gMain.state = 42;
+ }
+ else
+ {
+ sTradeData->timer--;
+ }
+ break;
+ case 42:
+ if (_IsLinkTaskFinished())
+ {
+ sub_8153408();
+ gMain.state = 5;
+ }
+ break;
+ case 5:
+ if (++sTradeData->timer > 60)
+ {
+ gMain.state++;
+ sub_8077288(2);
+ }
+ break;
+ case 6:
+ if (_IsLinkTaskFinished())
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gMain.state ++;
+ }
+ break;
+ case 7:
+ if (!gPaletteFade.active)
+ {
+ FadeOutBGM(3);
+ gMain.state++;
+ }
+ break;
+ case 8:
+ if (IsBGMStopped() == TRUE)
+ {
+ if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
{
- sub_8077288(1);
- gMain.state = 42;
+ sub_8077288(3);
}
else
{
- gUnknown_020322A0->timer--;
- }
- break;
- case 42:
- if (_IsLinkTaskFinished())
- {
- sub_8153408();
- gMain.state = 5;
+ sub_800AC34();
}
- break;
- case 5:
- if (++gUnknown_020322A0->timer > 60)
- {
- gMain.state++;
- sub_8077288(2);
- }
- break;
- case 6:
+ gMain.state++;
+ }
+ break;
+ case 9:
+ if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
+ {
if (_IsLinkTaskFinished())
{
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gMain.state ++;
- }
- break;
- case 7:
- if (!gPaletteFade.active)
- {
- FadeOutBGM(3);
- gMain.state++;
- }
- break;
- case 8:
- if (IsBGMStopped() == TRUE)
- {
- if (gWirelessCommType && gMain.savedCallback == sub_80773AC)
- {
- sub_8077288(3);
- }
- else
- {
- sub_800AC34();
- }
- gMain.state++;
- }
- break;
- case 9:
- if (gWirelessCommType && gMain.savedCallback == sub_80773AC)
- {
- if (_IsLinkTaskFinished())
- {
- gSoftResetDisabled = FALSE;
- SetMainCallback2(c2_080543C4);
- }
- }
- else if (!gReceivedRemoteLinkPlayers)
- {
gSoftResetDisabled = FALSE;
- SetMainCallback2(c2_080543C4);
+ SetMainCallback2(CB2_FreeTradeData);
}
- break;
+ }
+ else if (!gReceivedRemoteLinkPlayers)
+ {
+ gSoftResetDisabled = FALSE;
+ SetMainCallback2(CB2_FreeTradeData);
+ }
+ break;
}
if (!HasLinkErrorOccurred())
{
@@ -6111,7 +4910,7 @@ static void sub_807EB50(void)
UpdatePaletteFade();
}
-static void c2_080543C4(void)
+static void CB2_FreeTradeData(void)
{
if (!gPaletteFade.active)
{
@@ -6120,7 +4919,7 @@ static void c2_080543C4(void)
Free(GetBgTilemapBuffer(1));
Free(GetBgTilemapBuffer(0));
FreeMonSpritesGfx();
- FREE_AND_SET_NULL(gUnknown_020322A0);
+ FREE_AND_SET_NULL(sTradeData);
if (gWirelessCommType)
DestroyWirelessStatusIndicatorSprite();
SetMainCallback2(gMain.savedCallback);
@@ -6134,95 +4933,103 @@ static void c2_080543C4(void)
void DoInGameTradeScene(void)
{
ScriptContext2_Enable();
- CreateTask(sub_807F110, 10);
+ CreateTask(Task_InGameTrade, 10);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
}
-static void sub_807F110(u8 taskId)
+static void Task_InGameTrade(u8 taskId)
{
if (!gPaletteFade.active)
{
- SetMainCallback2(sub_807B270);
+ SetMainCallback2(CB2_InGameTrade);
gFieldCallback = FieldCallback_ReturnToEventScript2;
DestroyTask(taskId);
}
}
-static void sub_807F14C(void)
+static void CheckPartnersMonForRibbons(void)
{
u8 i;
u8 numRibbons = 0;
for (i = 0; i < 12; i ++)
{
- numRibbons += GetMonData(&gEnemyParty[gUnknown_02032298[1] % 6], MON_DATA_CHAMPION_RIBBON + i);
+ numRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_CHAMPION_RIBBON + i);
}
if (numRibbons != 0)
FlagSet(FLAG_SYS_RIBBON_GET);
}
-void sub_807F19C(void)
+void InitTradeBg(void)
{
- sub_807B170();
+ InitTradeBgInternal();
}
-void sub_807F1A8(u8 windowId, const u8 *str, u8 speed)
+void DrawTextOnTradeWindow(u8 windowId, const u8 *str, u8 speed)
{
FillWindowPixelBuffer(windowId, PIXEL_FILL(15));
- gUnknown_020322A0->unk_F6[0] = 15;
- gUnknown_020322A0->unk_F6[1] = 1;
- gUnknown_020322A0->unk_F6[2] = 6;
- AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, gUnknown_020322A0->unk_F6, speed, str);
+ sTradeData->textColors[0] = TEXT_DYNAMIC_COLOR_6;
+ sTradeData->textColors[1] = TEXT_COLOR_WHITE;
+ sTradeData->textColors[2] = TEXT_COLOR_GREEN;
+ AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, sTradeData->textColors, speed, str);
CopyWindowToVram(windowId, 3);
}
-static void c3_08054588(u8 taskId)
+#define idx data[0]
+#define counter data[1]
+#define signalComingBack data[2]
+
+static void Task_AnimateWirelessSignal(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 unk = gUnknown_08339090[data[0]][0] * 16;
+ u16 paletteIdx = sWirelessSignalTiming[idx][0] * 16;
- if (!data[2])
+ if (!signalComingBack)
{
- if (unk == 0x100)
- LoadPalette(gUnknown_08337EA0, 0x30, 32);
+ if (paletteIdx == 256)
+ LoadPalette(sTradePal_Black, 0x30, 32);
else
- LoadPalette(&gUnknown_08337AA0[unk], 0x30, 32);
+ LoadPalette(&sTradePal_WirelessSignalSend[paletteIdx], 0x30, 32);
}
else
{
- if (unk == 0x100)
- LoadPalette(gUnknown_08337EA0, 0x30, 32);
+ if (paletteIdx == 256)
+ LoadPalette(sTradePal_Black, 0x30, 32);
else
- LoadPalette(&gUnknown_08337CA0[unk], 0x30, 32);
+ LoadPalette(&sTradePal_WirelessSignalReceive[paletteIdx], 0x30, 32);
}
- if (gUnknown_08339090[data[0]][0] == 0 && data[1] == 0)
+ if (sWirelessSignalTiming[idx][0] == 0 && counter == 0)
PlaySE(SE_W215);
- if (data[1] == gUnknown_08339090[data[0]][1])
+ if (counter == sWirelessSignalTiming[idx][1])
{
- data[0]++;
- data[1] = 0;
- if (gUnknown_08339090[data[0]][1] == 0xFF)
+ idx++;
+ counter = 0;
+ if (sWirelessSignalTiming[idx][1] == 0xFF)
{
DestroyTask(taskId);
}
}
else
{
- data[1]++;
+ counter++;
}
}
+#undef idx
+#undef counter
+#undef signalComingBack
+
static void c3_0805465C(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (data[0] == 0)
{
- gUnknown_020322A0->unk_FB = gUnknown_020322A0->unk_FD = 120;
- gUnknown_020322A0->unk_FC = 0;
- gUnknown_020322A0->unk_FE = 160;
+ sTradeData->wirelessWinLeft = sTradeData->wirelessWinRight = 120;
+ sTradeData->wirelessWinTop = 0;
+ sTradeData->wirelessWinBottom = 160;
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 |
@@ -6230,14 +5037,14 @@ static void c3_0805465C(u8 taskId)
WININ_WIN0_OBJ);
}
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(gUnknown_020322A0->unk_FB, gUnknown_020322A0->unk_FD));
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(gUnknown_020322A0->unk_FC, gUnknown_020322A0->unk_FE));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom));
data[0]++;
- gUnknown_020322A0->unk_FB -= 5;
- gUnknown_020322A0->unk_FD += 5;
+ sTradeData->wirelessWinLeft -= 5;
+ sTradeData->wirelessWinRight += 5;
- if (gUnknown_020322A0->unk_FB < 80)
+ if (sTradeData->wirelessWinLeft < 80)
{
DestroyTask(taskId);
}
@@ -6249,24 +5056,24 @@ static void sub_807F39C(u8 taskId)
if (data[0] == 0)
{
- gUnknown_020322A0->unk_FB = 80;
- gUnknown_020322A0->unk_FD = 160;
+ sTradeData->wirelessWinLeft = 80;
+ sTradeData->wirelessWinRight = 160;
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 |
WININ_WIN0_BG1 |
WININ_WIN0_OBJ);
}
- SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(gUnknown_020322A0->unk_FB, gUnknown_020322A0->unk_FD));
- SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(gUnknown_020322A0->unk_FC, gUnknown_020322A0->unk_FE));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom));
- if (gUnknown_020322A0->unk_FB != 120)
+ if (sTradeData->wirelessWinLeft != 120)
{
data[0]++;
- gUnknown_020322A0->unk_FB += 5;
- gUnknown_020322A0->unk_FD -= 5;
+ sTradeData->wirelessWinLeft += 5;
+ sTradeData->wirelessWinRight -= 5;
- if (gUnknown_020322A0->unk_FB >= 116)
+ if (sTradeData->wirelessWinLeft >= 116)
BlendPalettes(0x8, 0, RGB_WHITEALPHA);
}
else
@@ -6276,114 +5083,108 @@ static void sub_807F39C(u8 taskId)
}
}
-static void sub_807F464(void)
+static void CB2_SaveAndEndWirelessTrade(void)
{
switch (gMain.state)
{
- case 0:
- gMain.state = 1;
- StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5);
- sub_807F1A8(0, gStringVar4, 0);
- break;
- case 1:
- sub_8077288(0);
- gMain.state = 2;
- gUnknown_020322A0->timer = 0;
- break;
- case 2:
- if (_IsLinkTaskFinished())
- {
- gMain.state = 3;
- StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower);
- sub_807F1A8(0, gStringVar4, 0);
- IncrementGameStat(GAME_STAT_POKEMON_TRADES);
- sub_8153380();
- gUnknown_020322A0->timer = 0;
- }
- break;
- case 3:
- if (++gUnknown_020322A0->timer == 5)
- {
- gMain.state = 4;
- }
- break;
- case 4:
- if (sub_81533AC())
- {
- gMain.state = 5;
- }
- else
- {
- gUnknown_020322A0->timer = 0;
- gMain.state = 3;
- }
- break;
- case 5:
- sub_81533E0();
- gMain.state = 6;
- gUnknown_020322A0->timer = 0;
- break;
- case 6:
- if (++gUnknown_020322A0->timer > 10)
- {
- if (GetMultiplayerId() == 0)
- {
- gUnknown_020322A0->timer = Random() % 30;
- }
- else
- {
- gUnknown_020322A0->timer = 0;
- }
- gMain.state = 7;
- }
- break;
- case 7:
- if (gUnknown_020322A0->timer == 0)
- {
- sub_8077288(1);
- gMain.state = 8;
- }
+ case 0:
+ gMain.state = 1;
+ StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ break;
+ case 1:
+ sub_8077288(0);
+ gMain.state = 2;
+ sTradeData->timer = 0;
+ break;
+ case 2:
+ if (_IsLinkTaskFinished())
+ {
+ gMain.state = 3;
+ StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower);
+ DrawTextOnTradeWindow(0, gStringVar4, 0);
+ IncrementGameStat(GAME_STAT_POKEMON_TRADES);
+ sub_8153380();
+ sTradeData->timer = 0;
+ }
+ break;
+ case 3:
+ if (++sTradeData->timer == 5)
+ gMain.state = 4;
+ break;
+ case 4:
+ if (sub_81533AC())
+ {
+ gMain.state = 5;
+ }
+ else
+ {
+ sTradeData->timer = 0;
+ gMain.state = 3;
+ }
+ break;
+ case 5:
+ sub_81533E0();
+ gMain.state = 6;
+ sTradeData->timer = 0;
+ break;
+ case 6:
+ if (++sTradeData->timer > 10)
+ {
+ if (GetMultiplayerId() == 0)
+ sTradeData->timer = Random() % 30;
else
- {
- gUnknown_020322A0->timer--;
- }
- break;
- case 8:
- if (_IsLinkTaskFinished())
- {
- sub_8153408();
- gMain.state = 9;
- }
- break;
- case 9:
- if (++gUnknown_020322A0->timer > 60)
- {
- gMain.state++;
- sub_8077288(2);
- }
- break;
- case 10:
- if (_IsLinkTaskFinished())
- {
- FadeOutBGM(3);
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gMain.state = 11;
- }
- break;
- case 11:
- if (!gPaletteFade.active && IsBGMStopped() == TRUE)
- {
- sub_8077288(3);
- gMain.state = 12;
- }
- break;
- case 12:
- if (_IsLinkTaskFinished())
- {
- gSoftResetDisabled = FALSE;
- SetMainCallback2(c2_080543C4);
- }
- break;
+ sTradeData->timer = 0;
+ gMain.state = 7;
+ }
+ break;
+ case 7:
+ if (sTradeData->timer == 0)
+ {
+ sub_8077288(1);
+ gMain.state = 8;
+ }
+ else
+ {
+ sTradeData->timer--;
+ }
+ break;
+ case 8:
+ if (_IsLinkTaskFinished())
+ {
+ sub_8153408();
+ gMain.state = 9;
+ }
+ break;
+ case 9:
+ if (++sTradeData->timer > 60)
+ {
+ gMain.state++;
+ sub_8077288(2);
+ }
+ break;
+ case 10:
+ if (_IsLinkTaskFinished())
+ {
+ FadeOutBGM(3);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gMain.state = 11;
+ }
+ break;
+ case 11:
+ if (!gPaletteFade.active && IsBGMStopped() == TRUE)
+ {
+ sub_8077288(3);
+ gMain.state = 12;
+ }
+ break;
+ case 12:
+ if (_IsLinkTaskFinished())
+ {
+ gSoftResetDisabled = FALSE;
+ SetMainCallback2(CB2_FreeTradeData);
+ }
+ break;
}
if (!HasLinkErrorOccurred())
diff --git a/src/trader.c b/src/trader.c
index a3794a539..e0b780d25 100644
--- a/src/trader.c
+++ b/src/trader.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "constants/decorations.h"
-#include "constants/mauville_man.h"
+#include "constants/mauville_old_man.h"
#include "decoration.h"
#include "decoration_inventory.h"
#include "event_data.h"
@@ -86,7 +86,7 @@ void CreateAvailableDecorationsMenu(u8 taskId)
schedule_bg_copy_tilemap_to_vram(0);
}
-void sub_8133BE4(u8 taskId, u8 decorationId)
+void Task_BufferDecorSelectionAndCloseWindow(u8 taskId, u8 decorationId)
{
s16 * data = gTasks[taskId].data;
if (decorationId > NUM_DECORATIONS)
@@ -118,14 +118,14 @@ void Task_HandleGetDecorationMenuInput(u8 taskId)
case MENU_B_PRESSED:
case 4:
PlaySE(SE_SELECT);
- sub_8133BE4(taskId, 0);
+ Task_BufferDecorSelectionAndCloseWindow(taskId, 0);
break;
default:
PlaySE(SE_SELECT);
gSpecialVar_0x8005 = input;
StringCopy(gStringVar1, trader->playerNames[input]);
ConvertInternationalString(gStringVar1, trader->language[input]);
- sub_8133BE4(taskId, trader->decorIds[input]);
+ Task_BufferDecorSelectionAndCloseWindow(taskId, trader->decorIds[input]);
break;
}
}
diff --git a/src/trainer_card.c b/src/trainer_card.c
index 9c4816c42..f3bff3731 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -4,7 +4,7 @@
#include "task.h"
#include "main.h"
#include "window.h"
-#include "alloc.h"
+#include "malloc.h"
#include "link.h"
#include "bg.h"
#include "sound.h"
@@ -1010,7 +1010,7 @@ static void PrintMoneyOnCard(void)
else
AddTextPrinterParameterized3(1, 1, 16, 57, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardMoney);
- ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, 0, 6);
+ ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6);
StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1);
if (!sData->isHoenn)
{
@@ -1043,7 +1043,7 @@ static void PrintPokedexOnCard(void)
AddTextPrinterParameterized3(1, 1, 20, 72, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardPokedex);
else
AddTextPrinterParameterized3(1, 1, 16, 73, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardPokedex);
- StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, 0, 3), gText_EmptyString6);
+ StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3), gText_EmptyString6);
if (!sData->isHoenn)
{
xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144);
@@ -1103,12 +1103,12 @@ static void PrintTimeOnCard(void)
r7 -= r10;
FillWindowPixelRect(1, PIXEL_FILL(0), r7, r4, r10, 15);
- ConvertIntToDecimalStringN(gStringVar4, hours, 1, 3);
+ ConvertIntToDecimalStringN(gStringVar4, hours, STR_CONV_MODE_RIGHT_ALIGN, 3);
AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4);
r7 += 18;
AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB40[sData->var_7], TEXT_SPEED_FF, gText_Colon2);
r7 += width;
- ConvertIntToDecimalStringN(gStringVar4, minutes, 2, 2);
+ ConvertIntToDecimalStringN(gStringVar4, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4);
}
@@ -1151,9 +1151,9 @@ static void PrintHofTimeOnCard(void)
{
if (sData->hasHofResult)
{
- ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.hofDebutHours, 1, 3);
- ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.hofDebutMinutes, 2, 2);
- ConvertIntToDecimalStringN(gStringVar3, sData->trainerCard.hofDebutSeconds, 2, 2);
+ ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ ConvertIntToDecimalStringN(gStringVar3, sData->trainerCard.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(sData->var_93, gUnknown_0856FB4C);
}
}
@@ -1180,8 +1180,8 @@ static void PrintLinkResultsNumsOnCard(void)
if (sData->hasLinkResults)
{
StringCopy(sData->var_D9, gUnknown_0856FB5C[sData->cardType]);
- ConvertIntToDecimalStringN(sData->var_165, sData->trainerCard.linkBattleWins, 0, 4);
- ConvertIntToDecimalStringN(sData->var_1AB, sData->trainerCard.linkBattleLosses, 0, 4);
+ ConvertIntToDecimalStringN(sData->var_165, sData->trainerCard.linkBattleWins, STR_CONV_MODE_LEFT_ALIGN, 4);
+ ConvertIntToDecimalStringN(sData->var_1AB, sData->trainerCard.linkBattleLosses, STR_CONV_MODE_LEFT_ALIGN, 4);
}
}
@@ -1199,7 +1199,7 @@ static void PrintWinsLossesStringOnCard(void)
static void PrintTradesNumOnCard(void)
{
if (sData->hasTrades)
- ConvertIntToDecimalStringN(sData->var_237, sData->trainerCard.pokemonTrades, 1, 5);
+ ConvertIntToDecimalStringN(sData->var_237, sData->trainerCard.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintTradesStringOnCard(void)
@@ -1211,7 +1211,7 @@ static void PrintTradesStringOnCard(void)
static void PrintBerryCrushNumOnCard(void)
{
if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints)
- ConvertIntToDecimalStringN(sData->var_2C3, sData->trainerCard.berryCrushPoints, 1, 5);
+ ConvertIntToDecimalStringN(sData->var_2C3, sData->trainerCard.berryCrushPoints, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintBerryCrushStringOnCard(void)
@@ -1223,7 +1223,7 @@ static void PrintBerryCrushStringOnCard(void)
static void PrintUnionNumOnCard(void)
{
if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.unionRoomNum)
- ConvertIntToDecimalStringN(sData->var_34F, sData->trainerCard.unionRoomNum, 1, 5);
+ ConvertIntToDecimalStringN(sData->var_34F, sData->trainerCard.unionRoomNum, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintUnionStringOnCard(void)
@@ -1236,7 +1236,7 @@ static void PrintPokeblocksNumOnCard(void)
{
if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.pokeblocksWithFriends)
{
- ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.pokeblocksWithFriends, 1, 5);
+ ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
StringExpandPlaceholders(sData->var_395, gText_Var1DarkGreyShadowLightGrey);
}
}
@@ -1250,7 +1250,7 @@ static void PrintPokeblockStringOnCard(void)
static void PrintContestNumOnCard(void)
{
if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.contestsWithFriends)
- ConvertIntToDecimalStringN(sData->var_3DB, sData->trainerCard.contestsWithFriends, 1, 5);
+ ConvertIntToDecimalStringN(sData->var_3DB, sData->trainerCard.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5);
}
static void PrintContestStringOnCard(void)
@@ -1266,15 +1266,15 @@ static void PrintBattleFacilityNumsOnCard(void)
case CARD_TYPE_RS:
if (sData->hasBattleTowerWins)
{
- ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.battleTowerWins, 1, 4);
- ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.battleTowerStraightWins, 1, 4);
+ ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.battleTowerWins, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.battleTowerStraightWins, STR_CONV_MODE_RIGHT_ALIGN, 4);
StringExpandPlaceholders(sData->var_421, gText_WSlashStraightSlash);
}
break;
case CARD_TYPE_EMERALD:
if (sData->trainerCard.frontierBP)
{
- ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.frontierBP, 1, 5);
+ ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.frontierBP, STR_CONV_MODE_RIGHT_ALIGN, 5);
StringExpandPlaceholders(sData->var_421, gText_Var1DarkLightGreyBP);
}
break;
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index 2a7e003d9..af6b0621d 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_tower.h"
#include "battle_setup.h"
@@ -63,7 +63,7 @@ static void TrainerHillGetChallengeStatus(void);
static void sub_81D5B2C(void);
static void sub_81D5BBC(void);
static void sub_81D5C00(void);
-static void sub_81D5C5C(void);
+static void GetInTrainerHill(void);
static void sub_81D62B4(void);
static void sub_81D64AC(void);
static void sub_81D64DC(void);
@@ -231,7 +231,7 @@ static void (* const sHillFunctions[])(void) =
sub_81D5B2C,
sub_81D5BBC,
sub_81D5C00,
- sub_81D5C5C,
+ GetInTrainerHill,
sub_81D62B4,
sub_81D64AC,
sub_81D64DC,
@@ -534,7 +534,7 @@ static void sub_81D5C00(void)
FreeDataStruct();
}
-bool8 sub_81D5C18(void)
+bool8 InTrainerHillChallenge(void)
{
if (VarGet(VAR_TRAINER_HILL_IS_ACTIVE) == 0)
return FALSE;
@@ -546,9 +546,9 @@ bool8 sub_81D5C18(void)
return FALSE;
}
-static void sub_81D5C5C(void)
+static void GetInTrainerHill(void)
{
- if (!sub_81D5C18())
+ if (!InTrainerHillChallenge())
gSpecialVar_Result = 0;
else
gSpecialVar_Result = 1;
@@ -997,7 +997,7 @@ static void sub_81D6518(void)
bool32 sub_81D6534(void)
{
- if (!sub_81D5C18() || GetCurrentTrainerHillMapId() == 6)
+ if (!InTrainerHillChallenge() || GetCurrentTrainerHillMapId() == 6)
return FALSE;
sub_81D5C00();
diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c
index 047783a85..f360ec84c 100644
--- a/src/trainer_pokemon_sprites.c
+++ b/src/trainer_pokemon_sprites.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "sprite.h"
#include "window.h"
-#include "alloc.h"
+#include "malloc.h"
#include "constants/species.h"
#include "palette.h"
#include "decompress.h"
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 22b256a99..72e903728 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -14,6 +14,7 @@
#include "util.h"
#include "battle_pyramid.h"
#include "constants/battle_setup.h"
+#include "constants/event_objects.h"
#include "constants/event_object_movement_constants.h"
#include "constants/field_effects.h"
@@ -47,11 +48,11 @@ static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct EventO
static void SpriteCB_TrainerIcons(struct Sprite *sprite);
// IWRAM common
-u16 gUnknown_03006080;
-u8 gUnknown_03006084[4];
+u16 gWhichTrainerToFaceAfterBattle;
+u8 gPostBattleMovementScript[4];
struct ApproachingTrainer gApproachingTrainers[2];
u8 gNoOfApproachingTrainers;
-u8 gUnknown_030060AC;
+bool8 gTrainerApproachedPlayer;
// EWRAM
EWRAM_DATA u8 gApproachingTrainerId = 0;
@@ -205,7 +206,7 @@ bool8 CheckForTrainersWantingBattle(void)
ResetTrainerOpponentIds();
ConfigureAndSetUpOneTrainerBattle(gApproachingTrainers[gNoOfApproachingTrainers - 1].eventObjectId,
gApproachingTrainers[gNoOfApproachingTrainers - 1].trainerScriptPtr);
- gUnknown_030060AC = 1;
+ gTrainerApproachedPlayer = TRUE;
return TRUE;
}
else if (gNoOfApproachingTrainers == 2)
@@ -218,12 +219,12 @@ bool8 CheckForTrainersWantingBattle(void)
}
SetUpTwoTrainersBattle();
gApproachingTrainerId = 0;
- gUnknown_030060AC = 1;
+ gTrainerApproachedPlayer = TRUE;
return TRUE;
}
else
{
- gUnknown_030060AC = 0;
+ gTrainerApproachedPlayer = FALSE;
return FALSE;
}
}
@@ -764,24 +765,24 @@ u8 GetChosenApproachingTrainerEventObjectId(u8 arrayId)
return gApproachingTrainers[1].eventObjectId;
}
-void sub_80B4808(void)
+void PlayerFaceTrainerAfterBattle(void)
{
- struct EventObject *trainerObj;
+ struct EventObject *eventObj;
- if (gUnknown_030060AC == 1)
+ if (gTrainerApproachedPlayer == TRUE)
{
- trainerObj = &gEventObjects[gApproachingTrainers[gUnknown_03006080].eventObjectId];
- gUnknown_03006084[0] = GetFaceDirectionMovementAction(GetOppositeDirection(trainerObj->facingDirection));
- gUnknown_03006084[1] = 0xFE;
- ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gUnknown_03006084);
+ eventObj = &gEventObjects[gApproachingTrainers[gWhichTrainerToFaceAfterBattle].eventObjectId];
+ gPostBattleMovementScript[0] = GetFaceDirectionMovementAction(GetOppositeDirection(eventObj->facingDirection));
+ gPostBattleMovementScript[1] = MOVEMENT_ACTION_STEP_END;
+ ScriptMovement_StartObjectMovementScript(EVENT_OBJ_ID_PLAYER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gPostBattleMovementScript);
}
else
{
- trainerObj = &gEventObjects[gPlayerAvatar.eventObjectId];
- gUnknown_03006084[0] = GetFaceDirectionMovementAction(trainerObj->facingDirection);
- gUnknown_03006084[1] = 0xFE;
- ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gUnknown_03006084);
+ eventObj = &gEventObjects[gPlayerAvatar.eventObjectId];
+ gPostBattleMovementScript[0] = GetFaceDirectionMovementAction(eventObj->facingDirection);
+ gPostBattleMovementScript[1] = MOVEMENT_ACTION_STEP_END;
+ ScriptMovement_StartObjectMovementScript(EVENT_OBJ_ID_PLAYER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gPostBattleMovementScript);
}
- sub_809BE48(0xFF);
+ SetMovingNpcId(EVENT_OBJ_ID_PLAYER);
}
diff --git a/src/tv.c b/src/tv.c
index 62d261a63..5cc6e6626 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -31,7 +31,7 @@
#include "text.h"
#include "script_menu.h"
#include "naming_screen.h"
-#include "alloc.h"
+#include "malloc.h"
#include "region_map.h"
#include "constants/region_map_sections.h"
#include "decoration.h"
@@ -42,6 +42,7 @@
#include "constants/layouts.h"
#include "constants/metatile_behaviors.h"
#include "constants/script_menu.h"
+#include "constants/tv.h"
// Static type declarations
@@ -1595,7 +1596,7 @@ void SaveRecordedItemPurchasesForTVShow(void)
show->smartshopperShow.itemIds[i] = gMartPurchaseHistory[i].itemId;
show->smartshopperShow.itemAmounts[i] = gMartPurchaseHistory[i].quantity;
}
- show->smartshopperShow.priceReduced = GetPriceReduction(1);
+ show->smartshopperShow.priceReduced = GetPriceReduction(POKENEWS_SLATEPORT);
StringCopy(show->smartshopperShow.playerName, gSaveBlock2Ptr->playerName);
tv_store_id_3x(show);
show->smartshopperShow.language = gGameLanguage;
@@ -1955,11 +1956,11 @@ void sub_80EDB44(void)
show->rivalTrainer.badgeCount = nBadges;
if (IsNationalPokedexEnabled())
{
- show->rivalTrainer.dexCount = GetNationalPokedexCount(0x01);
+ show->rivalTrainer.dexCount = GetNationalPokedexCount(FLAG_GET_CAUGHT);
}
else
{
- show->rivalTrainer.dexCount = GetHoennPokedexCount(0x01);
+ show->rivalTrainer.dexCount = GetHoennPokedexCount(FLAG_GET_CAUGHT);
}
show->rivalTrainer.location = gMapHeader.regionMapSectionId;
show->rivalTrainer.mapLayoutId = gMapHeader.mapLayoutId;
@@ -2002,7 +2003,7 @@ void sub_80EDC60(const u16 *words)
}
}
-void sub_80EDCE8(void)
+void TryPutTreasureInvestigatorsOnAir(void)
{
TVShow *show;
@@ -2625,37 +2626,37 @@ static void sub_80EEBF4(u8 actionIdx)
}
}
-void sub_80EEC80(void)
+void IncrementDailySlotsUses(void)
{
VarSet(VAR_DAILY_SLOTS, VarGet(VAR_DAILY_SLOTS) + 1);
}
-void sub_80EECA4(void)
+void IncrementDailyRouletteUses(void)
{
VarSet(VAR_DAILY_ROULETTE, VarGet(VAR_DAILY_ROULETTE) + 1);
}
-void sub_80EECC8(void)
+void IncrementDailyWildBattles(void)
{
VarSet(VAR_DAILY_WILDS, VarGet(VAR_DAILY_WILDS) + 1);
}
-void sub_80EECEC(void)
+void IncrementDailyBerryBlender(void)
{
VarSet(VAR_DAILY_BLENDER, VarGet(VAR_DAILY_BLENDER) + 1);
}
-void sub_80EED10(void)
+void IncrementDailyPlantedBerries(void)
{
VarSet(VAR_DAILY_PLANTED_BERRIES, VarGet(VAR_DAILY_PLANTED_BERRIES) + 1);
}
-void sub_80EED34(void)
+void IncrementDailyPickedBerries(void)
{
VarSet(VAR_DAILY_PICKED_BERRIES, VarGet(VAR_DAILY_PICKED_BERRIES) + gSpecialVar_0x8006);
}
-void sub_80EED60(u16 delta)
+void IncrementDailyBattlePoints(u16 delta)
{
VarSet(VAR_DAILY_BP, VarGet(VAR_DAILY_BP) + delta);
}
diff --git a/src/union_room.c b/src/union_room.c
index 01288c8cc..5952b03eb 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "berry_crush.h"
#include "bg.h"
@@ -44,21 +44,23 @@
#include "union_room_player_avatar.h"
#include "window.h"
#include "constants/battle_frontier.h"
+#include "constants/cable_club.h"
#include "constants/game_stat.h"
#include "constants/maps.h"
+#include "constants/party_menu.h"
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/species.h"
-EWRAM_DATA u8 gUnknown_02022C20[12] = {};
+EWRAM_DATA u8 sUnionRoomPlayerName[12] = {};
EWRAM_DATA u8 gUnknown_02022C2C = 0;
EWRAM_DATA u8 gUnknown_02022C2D = 0;
EWRAM_DATA union UnkUnion_Main gUnknown_02022C30 = {};
EWRAM_DATA u32 gFiller_02022C34 = 0;
EWRAM_DATA struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38 = {};
-EWRAM_DATA u16 gUnknown_02022C3C = 0;
-EWRAM_DATA u8 gUnknown_02022C3E = 0;
-EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {};
+EWRAM_DATA u16 gUnionRoomOfferedSpecies = 0;
+EWRAM_DATA u8 gUnionRoomRequestedMonType = 0;
+static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {};
// IWRAM vars
static struct UnkStruct_Leader *gUnknown_03000DA0;
@@ -96,8 +98,8 @@ void sub_8013BD8(struct UnkStruct_Group *arg0, s32 id);
void sub_80173D4(void);
void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id);
bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1);
-u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId);
-void sub_801807C(struct TradeUnkStruct *arg0);
+static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *arg0, u8 multiplayerId);
+static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0);
void sub_801AC54(void);
void sub_80149D8(void);
void MG_DrawTextBorder(u8 windowId);
@@ -105,8 +107,8 @@ s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u8 *arg1, u8 arg2, cons
bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1);
u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2);
void sub_8019F2C(void);
-bool32 sub_80180A0(u32 monId, struct TradeUnkStruct *arg1);
-void sub_80180E8(u32 monId, struct TradeUnkStruct *arg1);
+static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade);
+static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *arg1);
void sub_80181CC(void);
bool32 sub_8017940(void);
u8 sub_8016B00(void);
@@ -122,7 +124,7 @@ void sub_801818C(bool32 arg0);
s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate);
s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6);
s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1);
-bool32 sub_8018024(void);
+bool32 HasAtLeastTwoMonsOfLevel30OrLower(void);
u32 sub_8017984(s32 arg0);
void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2);
void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender);
@@ -140,1045 +142,7 @@ void sub_8013DF4(u8 windowId, s32 itemId, u8 y);
void sub_8017BE8(u8 windowId, s32 itemId, u8 y);
void nullsub_14(u8 windowId, s32 itemId, u8 y);
-// const rom data
-
-ALIGNED(4) const u8 gText_EmptyString[] = _("");
-ALIGNED(4) const u8 gText_Colon[] = _(":");
-ALIGNED(4) const u8 gText_UnkCtrlCodeF907[] = _("{ID}");
-ALIGNED(4) const u8 gText_PleaseStartOver[] = _("Please start over from the beginning.");
-ALIGNED(4) const u8 gText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled.");
-ALIGNED(4) const u8 unref_text_union_room_0[] = _("Awaiting communication\nfrom another player.");
-ALIGNED(4) const u8 gText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player.");
-ALIGNED(4) const u8 gText_AwaitingLink[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready.");
-ALIGNED(4) const u8 gJPText_SingleBattle[] = _("シングルバトルを かいさいする");
-ALIGNED(4) const u8 gJPText_DoubleBattle[] = _("ダブルバトルを かいさいする");
-ALIGNED(4) const u8 gJPText_MultiBattle[] = _("マルチバトルを かいさいする");
-ALIGNED(4) const u8 gJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする");
-ALIGNED(4) const u8 gJPText_Chat[] = _("チャットを かいさいする");
-ALIGNED(4) const u8 gJPText_DistWonderCard[] = _("ふしぎなカードをくばる");
-ALIGNED(4) const u8 gJPText_DistWonderNews[] = _("ふしぎなニュースをくばる");
-ALIGNED(4) const u8 unref_text_union_room_1[] = _("ふしぎなできごとを かいさいする");
-ALIGNED(4) const u8 gJPText_HoldPokemonJump[] = _("なわとびを かいさいする");
-ALIGNED(4) const u8 gJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする");
-ALIGNED(4) const u8 gJPText_HoldBerryPicking[] = _("きのみどりを かいさいする");
-ALIGNED(4) const u8 gJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする");
-ALIGNED(4) const u8 gJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする");
-
-const u8 *const unref_text_ptrs_union_room_0[] = {
- gJPText_SingleBattle,
- gJPText_DoubleBattle,
- gJPText_MultiBattle,
- gJPText_TradePokemon,
- gJPText_Chat,
- gJPText_DistWonderCard,
- gJPText_DistWonderNews,
- gJPText_DistWonderCard,
- gJPText_HoldPokemonJump,
- gJPText_HoldBerryCrush,
- gJPText_HoldBerryPicking,
- gJPText_HoldBerryPicking,
- gJPText_HoldSpinTrade,
- gJPText_HoldSpinShop
-};
-
-const u8 gText_1PlayerNeeded[] = _("1 player\nneeded.");
-const u8 gText_2PlayersNeeded[] = _("2 players\nneeded.");
-const u8 gText_3PlayersNeeded[] = _("3 players\nneeded.");
-const u8 gText_4PlayersNeeded[] = _("4 players\nneeded.");
-const u8 gText_2PlayerMode[] = _("2-PLAYER\nMODE");
-const u8 gText_3PlayerMode[] = _("3-PLAYER\nMODE");
-const u8 gText_4PlayerMode[] = _("4-PLAYER\nMODE");
-const u8 gText_5PlayerMode[] = _("5-PLAYER\nMODE");
-
-const u8 *const gUnknown_082EDB60[][5] = {
- {
- gText_1PlayerNeeded,
- gText_2PlayerMode,
- NULL,
- NULL,
- NULL
- }, {
- gText_3PlayersNeeded,
- gText_2PlayersNeeded,
- gText_1PlayerNeeded,
- gText_4PlayerMode,
- NULL
- }, {
- gText_1PlayerNeeded,
- gText_2PlayerMode,
- gText_3PlayerMode,
- gText_4PlayerMode,
- gText_5PlayerMode
- }, {
- gText_2PlayersNeeded,
- gText_1PlayerNeeded,
- gText_3PlayerMode,
- gText_4PlayerMode,
- gText_5PlayerMode
- }, {
- gText_1PlayerNeeded,
- gText_2PlayerMode,
- gText_3PlayerMode,
- gText_4PlayerMode,
- NULL
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EDBC4[] = _("{B_BUTTON}CANCEL");
-ALIGNED(4) const u8 unref_text_union_room_2[] = _("ため\nさんかしゃ ぼしゅうちゅう です!");
-ALIGNED(4) const u8 gUnknown_082EDBE8[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?");
-ALIGNED(4) const u8 gUnknown_082EDC0C[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?");
-ALIGNED(4) const u8 gUnknown_082EDC34[] = _("{STR_VAR_2} contacted you.\nAdd to the members?");
-ALIGNED(4) const u8 gUnknown_082EDC5C[] = _("{STR_VAR_1}!\nAre these members OK?");
-ALIGNED(4) const u8 gUnknown_082EDC78[] = _("Cancel {STR_VAR_1} MODE\nwith these members?");
-ALIGNED(4) const u8 gUnknown_082EDC9C[] = _("An “OK” was sent\nto {STR_VAR_1}.");
-ALIGNED(4) const u8 gUnknown_082EDCB4[] = _("The other TRAINER doesn't appear\nto be available now…\p");
-ALIGNED(4) const u8 gUnknown_082EDCEC[] = _("You can't transmit with a TRAINER\nwho is too far away.\p");
-ALIGNED(4) const u8 gUnknown_082EDD24[] = _("The other TRAINER(S) is/are not\nready yet.\p");
-
-const u8 *const gUnknown_082EDD50[] = {
- gUnknown_082EDCEC,
- gUnknown_082EDD24
-};
-
-ALIGNED(4) const u8 gUnknown_082EDD58[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EDD8C[] = _("There is a member who can no\nlonger remain available.\p");
-
-const u8 *const gUnknown_082EDDC4[] = {
- gUnknown_082EDCB4,
- gUnknown_082EDD8C
-};
-
-ALIGNED(4) const u8 gUnknown_082EDDCC[] = _("The other TRAINER appears\nunavailable…\p");
-ALIGNED(4) const u8 gUnknown_082EDDF4[] = _("{STR_VAR_1} sent back an “OK”!");
-ALIGNED(4) const u8 gUnknown_082EDE0C[] = _("{STR_VAR_1} OK'd your registration as\na member.");
-ALIGNED(4) const u8 gUnknown_082EDE34[] = _("{STR_VAR_1} replied, “No…”\p");
-ALIGNED(4) const u8 gUnknown_082EDE48[] = _("{STR_VAR_1}!\nAwaiting other members!");
-ALIGNED(4) const u8 gUnknown_082EDE64[] = _("Quit being a member?");
-ALIGNED(4) const u8 gUnknown_082EDE7C[] = _("You stopped being a member.\p");
-
-const u8 *const gUnknown_082EDE9C[] = {
- NULL,
- gUnknown_082EDD8C,
- gUnknown_082EDDCC,
- NULL,
- NULL,
- NULL,
- gUnknown_082EDE34,
- NULL,
- NULL,
- gUnknown_082EDE7C
-};
-
-ALIGNED(4) const u8 gUnknown_082EDEC4[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established.");
-ALIGNED(4) const u8 gUnknown_082EDF04[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…");
-ALIGNED(4) const u8 gUnknown_082EDF40[] = _("The link with your friend has been\ndropped…");
-ALIGNED(4) const u8 gUnknown_082EDF6C[] = _("{STR_VAR_1} replied, “No…”");
-
-const u8 *const gUnknown_082EDF80[] = {
- NULL,
- gUnknown_082EDF40,
- gUnknown_082EDF40,
- NULL,
- NULL,
- NULL,
- gUnknown_082EDF6C,
- NULL,
- NULL,
- NULL
-};
-
-ALIGNED(4) const u8 gUnknown_082EDFA8[] = _("Do you want the {STR_VAR_2}\nMODE?");
-ALIGNED(4) const u8 gUnknown_082EDFC4[] = _("Do you want the {STR_VAR_2}\nMODE?");
-
-const u8 *const unref_text_ptrs_union_room_1[] = {
- gUnknown_082EDFA8,
- gUnknown_082EDFC4
-};
-
-ALIGNED(4) const u8 unref_text_union_room_3[] = _("Communicating…\nPlease wait.");
-ALIGNED(4) const u8 gUnknown_082EE004[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…");
-ALIGNED(4) const u8 gUnknown_082EE02C[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
-ALIGNED(4) const u8 gUnknown_082EE098[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
-ALIGNED(4) const u8 gUnknown_082EE104[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.");
-
-const u8 *const gUnknown_082EE17C[] = {
- gUnknown_082EE02C,
- gUnknown_082EE098,
- gUnknown_082EE104
-};
-
-ALIGNED(4) const u8 gUnknown_082EE188[] = _("Hiya! Is there something that you\nwanted to do?");
-ALIGNED(4) const u8 gUnknown_082EE1B8[] = _("Hello!\nWould you like to do something?");
-ALIGNED(4) const u8 gUnknown_082EE1E0[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?");
-ALIGNED(4) const u8 gUnknown_082EE218[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?");
-
-const u8 *const gUnknown_082EE24C[][2] = {
- {
- gUnknown_082EE188,
- gUnknown_082EE1B8
- }, {
- gUnknown_082EE1E0,
- gUnknown_082EE218
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EE25C[] = _("Want to do something?");
-ALIGNED(4) const u8 gUnknown_082EE274[] = _("Would you like to do something?");
-ALIGNED(4) const u8 gUnknown_082EE294[] = _("{STR_VAR_1}: What would you like to\ndo now?");
-ALIGNED(4) const u8 unref_text_union_room_4[] = _("{STR_VAR_1}: Want to do anything else?");
-
-const u8 *const unref_text_ptrs_union_room_2[][2] = {
- {
- gUnknown_082EE25C,
- gUnknown_082EE274
- }, {
- gUnknown_082EE294,
- gUnknown_082EE294
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EE2E8[] = _("Somebody has contacted you.{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EE308[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}");
-
-const u8 *const gUnknown_082EE324[] = {
- gUnknown_082EE2E8,
- gUnknown_082EE308
-};
-
-ALIGNED(4) const u8 gUnknown_082EE32C[] = _("Awaiting a response from\nthe other TRAINER…");
-ALIGNED(4) const u8 gUnknown_082EE358[] = _("Awaiting a response from\n{STR_VAR_1}…");
-
-const u8 *const gUnknown_082EE378[] = {
- gUnknown_082EE32C,
- gUnknown_082EE358
-};
-
-ALIGNED(4) const u8 gUnknown_082EE380[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?");
-ALIGNED(4) const u8 gUnknown_082EE3DC[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?");
-ALIGNED(4) const u8 gUnknown_082EE430[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?");
-ALIGNED(4) const u8 gUnknown_082EE47C[] = _("There is an offer to trade your\nregistered Lv. {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}\pin exchange for a\nLv. {SPECIAL_F7 0x02} {SPECIAL_F7 0x03}.\pWill you accept this trade\noffer?");
-ALIGNED(4) const u8 gUnknown_082EE4F0[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?");
-ALIGNED(4) const u8 gUnknown_082EE544[] = _("The chat has been dropped.\p");
-ALIGNED(4) const u8 gUnknown_082EE560[] = _("You declined the offer.\p");
-ALIGNED(4) const u8 gUnknown_082EE57C[] = _("You declined the offer.\p");
-ALIGNED(4) const u8 gUnknown_082EE598[] = _("The chat was ended.\p");
-
-const u8 *const unref_text_ptrs_union_room_3[] = {
- gUnknown_082EE380,
- gUnknown_082EE3DC,
- gUnknown_082EE430,
- gUnknown_082EE47C
-};
-
-ALIGNED(4) const u8 gUnknown_082EE5C0[] = _("Oh, hey! We're in a chat right now.\nWant to join us?");
-ALIGNED(4) const u8 gUnknown_082EE5F8[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?");
-ALIGNED(4) const u8 gUnknown_082EE638[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?");
-ALIGNED(4) const u8 gUnknown_082EE674[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?");
-
-const u8 *const gUnknown_082EE6B8[][2] = {
- {
- gUnknown_082EE5C0,
- gUnknown_082EE638
- }, {
- gUnknown_082EE5F8,
- gUnknown_082EE674
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EE6C8[] = _("……\nThe TRAINER appears to be busy…\p");
-ALIGNED(4) const u8 gUnknown_082EE6EC[] = _("A battle, huh?\nAll right, just give me some time.");
-ALIGNED(4) const u8 gUnknown_082EE720[] = _("You want to chat, huh?\nSure, just wait a little.");
-ALIGNED(4) const u8 gUnknown_082EE754[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD.");
-ALIGNED(4) const u8 gUnknown_082EE78C[] = _("A battle? Of course, but I need\ntime to get ready.");
-ALIGNED(4) const u8 gUnknown_082EE7C0[] = _("Did you want to chat?\nOkay, but please wait a moment.");
-ALIGNED(4) const u8 gUnknown_082EE7F8[] = _("As my introduction, I'll show you\nmy TRAINER CARD.");
-
-const u8 *const gUnknown_082EE82C[][4] = {
- {
- gUnknown_082EE6EC,
- gUnknown_082EE720,
- NULL,
- gUnknown_082EE754
- }, {
- gUnknown_082EE78C,
- gUnknown_082EE7C0,
- NULL,
- gUnknown_082EE7F8
- }
-};
-
-ALIGNED(4) const u8 unref_text_union_room_5[] = _("You want to chat, huh?\nSure, just wait a little.");
-ALIGNED(4) const u8 gUnknown_082EE880[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EE8B8[] = _("All right!\nLet's chat!{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EE8D4[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EE904[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EE92C[] = _("The trade will be started.{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EE94C[] = _("The battle will be started.{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EE96C[] = _("Entering the chat…{PAUSE 60}");
-
-const u8 *const gUnknown_082EE984[][2][3] = {
- {
- {
- gUnknown_082EE94C,
- gUnknown_082EE96C,
- gUnknown_082EE92C
- }, {
- gUnknown_082EE94C,
- gUnknown_082EE96C,
- gUnknown_082EE92C
- }
- }, {
- {
- gUnknown_082EE880,
- gUnknown_082EE8B8,
- gUnknown_082EE92C
- }, {
- gUnknown_082EE8D4,
- gUnknown_082EE904,
- gUnknown_082EE92C
- }
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EE9B4[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p");
-ALIGNED(4) const u8 gUnknown_082EEA14[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p");
-
-const u8 *const gUnknown_082EEA68[] = {
- gUnknown_082EE9B4,
- gUnknown_082EEA14
-};
-
-ALIGNED(4) const u8 gUnknown_082EEA70[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p");
-ALIGNED(4) const u8 gUnknown_082EEAC0[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p");
-
-const u8 *const gUnknown_082EEB08[] = {
- gUnknown_082EEA70,
- gUnknown_082EEAC0
-};
-
-ALIGNED(4) const u8 gUnknown_082EEB10[] = _("If you want to do something with\nme, just give me a shout!\p");
-ALIGNED(4) const u8 gUnknown_082EEB4C[] = _("If you want to do something with\nme, don't be shy.\p");
-
-const u8 *const gUnknown_082EEB80[] = {
- gUnknown_082EEB10,
- gUnknown_082EEB4C
-};
-
-ALIGNED(4) const u8 gUnknown_082EEB88[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p");
-ALIGNED(4) const u8 gUnknown_082EEBD0[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p");
-ALIGNED(4) const u8 gUnknown_082EEC14[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p");
-ALIGNED(4) const u8 gUnknown_082EEC50[] = _("Oh, all right.\nCome see me anytime, okay?\p");
-ALIGNED(4) const u8 gUnknown_082EEC7C[] = _("Oh…\nPlease come by anytime.\p");
-
-const u8 *const gUnknown_082EEC9C[] = {
- gUnknown_082EEC50,
- gUnknown_082EEC7C
-};
-
-ALIGNED(4) const u8 gUnknown_082EECA4[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p");
-ALIGNED(4) const u8 gUnknown_082EECEC[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p");
-
-const u8 *const gUnknown_082EED3C[] = {
- gUnknown_082EECA4,
- gUnknown_082EECEC
-};
-
-ALIGNED(4) const u8 gUnknown_082EED44[] = _("Whoa!\nI can tell you're pretty tough!\p");
-ALIGNED(4) const u8 gUnknown_082EED6C[] = _("You used that move?\nThat's good strategy!\p");
-ALIGNED(4) const u8 gUnknown_082EED98[] = _("Way to go!\nThat was an eye-opener!\p");
-ALIGNED(4) const u8 gUnknown_082EEDBC[] = _("Oh! How could you use that\nPOKéMON in that situation?\p");
-ALIGNED(4) const u8 gUnknown_082EEDF4[] = _("That POKéMON…\nIt's been raised really well!\p");
-ALIGNED(4) const u8 gUnknown_082EEE24[] = _("That's it!\nThis is the right move now!\p");
-ALIGNED(4) const u8 gUnknown_082EEE4C[] = _("That's awesome!\nYou can battle that way?\p");
-ALIGNED(4) const u8 gUnknown_082EEE78[] = _("You have exquisite timing for\nswitching POKéMON!\p");
-
-const u8 *const gUnknown_082EEEAC[][4] = {
- {
- gUnknown_082EED44,
- gUnknown_082EED6C,
- gUnknown_082EED98,
- gUnknown_082EEDBC
- }, {
- gUnknown_082EEDF4,
- gUnknown_082EEE24,
- gUnknown_082EEE4C,
- gUnknown_082EEE78
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EEECC[] = _("Oh, I see!\nThis is educational!\p");
-ALIGNED(4) const u8 gUnknown_082EEEF0[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p");
-ALIGNED(4) const u8 gUnknown_082EEF2C[] = _("Oh?\nSomething like that happened.\p");
-ALIGNED(4) const u8 gUnknown_082EEF50[] = _("Hmhm… What?\nSo is this what you're saying?\p");
-ALIGNED(4) const u8 gUnknown_082EEF7C[] = _("Is that right?\nI didn't know that.\p");
-ALIGNED(4) const u8 gUnknown_082EEFA0[] = _("Ahaha!\nWhat is that about?\p");
-ALIGNED(4) const u8 gUnknown_082EEFBC[] = _("Yes, that's exactly it!\nThat's what I meant.\p");
-ALIGNED(4) const u8 gUnknown_082EEFEC[] = _("In other words…\nYes! That's right!\p");
-
-const u8 *const gUnknown_082EF010[][4] = {
- {
- gUnknown_082EEECC,
- gUnknown_082EEEF0,
- gUnknown_082EEF2C,
- gUnknown_082EEF50
- }, {
- gUnknown_082EEF7C,
- gUnknown_082EEFA0,
- gUnknown_082EEFBC,
- gUnknown_082EEFEC
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EF030[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p");
-ALIGNED(4) const u8 gUnknown_082EF06C[] = _("I hope I get to know you better!\p");
-ALIGNED(4) const u8 gUnknown_082EF090[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p");
-ALIGNED(4) const u8 gUnknown_082EF0D0[] = _("Glad to meet you.\nPlease don't be a stranger!\p");
-
-const u8 *const gUnknown_082EF100[][2] = {
- {
- gUnknown_082EF030,
- gUnknown_082EF06C
- }, {
- gUnknown_082EF090,
- gUnknown_082EF0D0
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EF110[] = _("Yeahah!\nI really wanted this POKéMON!\p");
-ALIGNED(4) const u8 gUnknown_082EF138[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p");
-ALIGNED(4) const u8 gUnknown_082EF178[] = _("I'm trading POKéMON right now.\p");
-ALIGNED(4) const u8 gUnknown_082EF198[] = _("I finally got that POKéMON I\nwanted in a trade!\p");
-
-const u8 *const gUnknown_082EF1CC[][4] = {
- {
- gUnknown_082EF110,
- gUnknown_082EF138,
- NULL,
- NULL
- }, {
- gUnknown_082EF178,
- gUnknown_082EF198,
- NULL,
- NULL
- }
-};
-
-ALIGNED(4) const u8 gUnknown_082EF1EC[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p");
-ALIGNED(4) const u8 gUnknown_082EF20C[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?");
-ALIGNED(4) const u8 gUnknown_082EF298[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?");
-ALIGNED(4) const u8 unref_text_union_room_6[] = _("We have registered your POKéMON for\ntrade on the TRADING BOARD.\pThank you for using this service!\p");
-ALIGNED(4) const u8 unref_text_union_room_7[] = _("Nobody has registered any POKéMON\nfor trade on the TRADING BOARD.\p\n");
-ALIGNED(4) const u8 gUnknown_082EF47C[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n");
-ALIGNED(4) const u8 gUnknown_082EF4C4[] = _("Which of your party POKéMON will\nyou offer in trade?\p");
-ALIGNED(4) const u8 gUnknown_082EF4FC[] = _("Registration has been canceled.\p");
-ALIGNED(4) const u8 gUnknown_082EF520[] = _("Registration has been completed.\p");
-ALIGNED(4) const u8 gUnknown_082EF544[] = _("The trade has been canceled.\p");
-ALIGNED(4) const u8 gUnknown_082EF564[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?");
-ALIGNED(4) const u8 gUnknown_082EF590[] = _("Cancel the registration of your\nEGG?");
-ALIGNED(4) const u8 gUnknown_082EF5B8[] = _("The registration has been canceled.\p");
-ALIGNED(4) const u8 unref_text_union_room_8[] = _("TRAINERS wishing to make a trade\nwill be listed.");
-ALIGNED(4) const u8 unref_text_union_room_9[] = _("Please choose the TRAINER with whom\nyou would like to trade POKéMON.");
-ALIGNED(4) const u8 gUnknown_082EF65C[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?");
-ALIGNED(4) const u8 unref_text_union_room_10[] = _("Awaiting a response from\nthe other TRAINER…");
-ALIGNED(4) const u8 unref_text_union_room_11[] = _("You have not registered a POKéMON\nfor trading.\p");
-ALIGNED(4) const u8 gUnknown_082EF6E4[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p");
-ALIGNED(4) const u8 gUnknown_082EF718[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p");
-ALIGNED(4) const u8 gUnknown_082EF740[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p");
-ALIGNED(4) const u8 gUnknown_082EF774[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p");
-
-const u8 *const unref_text_ptrs_union_room_4[] = {
- gUnknown_082EF740,
- gUnknown_082EF774
-};
-
-ALIGNED(4) const u8 gUnknown_082EF7B0[] = _("Your trade offer was rejected.\p");
-ALIGNED(4) const u8 gUnknown_082EF7D0[] = _("EGG TRADE");
-ALIGNED(4) const u8 gUnknown_082EF7DC[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL");
-ALIGNED(4) const u8 gUnknown_082EF7F8[] = _("Please choose a TRAINER.");
-ALIGNED(4) const u8 gUnknown_082EF814[] = _("Please choose a TRAINER for\na SINGLE BATTLE.");
-ALIGNED(4) const u8 gUnknown_082EF844[] = _("Please choose a TRAINER for\na DOUBLE BATTLE.");
-ALIGNED(4) const u8 gUnknown_082EF874[] = _("Please choose the LEADER\nfor a MULTI BATTLE.");
-ALIGNED(4) const u8 gUnknown_082EF8A4[] = _("Please choose the TRAINER to\ntrade with.");
-ALIGNED(4) const u8 gUnknown_082EF8D0[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS.");
-ALIGNED(4) const u8 gUnknown_082EF908[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS.");
-ALIGNED(4) const u8 gUnknown_082EF940[] = _("Jump with mini POKéMON!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EF974[] = _("BERRY CRUSH!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EF99C[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EF9CC[] = _("BERRY BLENDER!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EF9F8[] = _("RECORD CORNER!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EFA24[] = _("COOLNESS CONTEST!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EFA50[] = _("BEAUTY CONTEST!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EFA7C[] = _("CUTENESS CONTEST!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EFAA8[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EFAD8[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EFB08[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER.");
-ALIGNED(4) const u8 gUnknown_082EFB3C[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER.");
-
-const u8 *const gUnknown_082EFB70[] = {
- gUnknown_082EF814,
- gUnknown_082EF844,
- gUnknown_082EF874,
- gUnknown_082EF8A4,
- gUnknown_082EF940,
- gUnknown_082EF974,
- gUnknown_082EF99C,
- gUnknown_082EF8D0,
- gUnknown_082EF908,
- NULL,
- NULL,
- NULL,
- gUnknown_082EF9F8,
- gUnknown_082EF9CC,
- NULL,
- gUnknown_082EFA24,
- gUnknown_082EFA50,
- gUnknown_082EFA7C,
- gUnknown_082EFAA8,
- gUnknown_082EFAD8,
- gUnknown_082EFB08,
- gUnknown_082EFB3C
-};
-
-ALIGNED(4) const u8 gUnknown_082EFBC8[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait...");
-ALIGNED(4) const u8 unref_text_union_room_12[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p");
-ALIGNED(4) const u8 gUnknown_082EFC3C[] = _("Awaiting {STR_VAR_1}'s response…");
-ALIGNED(4) const u8 gUnknown_082EFC54[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait.");
-ALIGNED(4) const u8 gUnknown_082EFC90[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM.");
-ALIGNED(4) const u8 unref_text_union_room_13[] = _("Please wait for other TRAINERS to\ngather and get ready.");
-ALIGNED(4) const u8 gUnknown_082EFD04[] = _("No CARDS appear to be shared \nright now.");
-ALIGNED(4) const u8 gUnknown_082EFD30[] = _("No NEWS appears to be shared\nright now.");
-
-const u8 *const gUnknown_082EFD58[] = {
- gUnknown_082EFD04,
- gUnknown_082EFD30
-};
-
-ALIGNED(4) const u8 gUnknown_082EFD60[] = _("BATTLE");
-ALIGNED(4) const u8 gUnknown_082EFD68[] = _("CHAT");
-ALIGNED(4) const u8 gUnknown_082EFD70[] = _("GREETINGS");
-ALIGNED(4) const u8 gUnknown_082EFD7C[] = _("EXIT");
-ALIGNED(4) const u8 gUnknown_082EFD84[] = _("EXIT");
-ALIGNED(4) const u8 gUnknown_082EFD8C[] = _("INFO");
-ALIGNED(4) const u8 gUnknown_082EFD94[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV.");
-ALIGNED(4) const u8 gUnknown_082EFDB0[] = _("SINGLE BATTLE");
-ALIGNED(4) const u8 gUnknown_082EFDC0[] = _("DOUBLE BATTLE");
-ALIGNED(4) const u8 gUnknown_082EFDD0[] = _("MULTI BATTLE");
-ALIGNED(4) const u8 gUnknown_082EFDE0[] = _("POKéMON TRADES");
-ALIGNED(4) const u8 gUnknown_082EFDF0[] = _("CHAT");
-ALIGNED(4) const u8 gUnknown_082EFDF8[] = _("CARDS");
-ALIGNED(4) const u8 gUnknown_082EFE00[] = _("WONDER CARDS");
-ALIGNED(4) const u8 gUnknown_082EFE10[] = _("WONDER NEWS");
-ALIGNED(4) const u8 gUnknown_082EFE1C[] = _("POKéMON JUMP");
-ALIGNED(4) const u8 gUnknown_082EFE2C[] = _("BERRY CRUSH");
-ALIGNED(4) const u8 gUnknown_082EFE38[] = _("BERRY-PICKING");
-ALIGNED(4) const u8 gUnknown_082EFE48[] = _("SEARCH");
-ALIGNED(4) const u8 gUnknown_082EFE50[] = _("BERRY BLENDER");
-ALIGNED(4) const u8 gUnknown_082EFE60[] = _("RECORD CORNER");
-ALIGNED(4) const u8 gUnknown_082EFE70[] = _("COOL CONTEST");
-ALIGNED(4) const u8 gUnknown_082EFE80[] = _("BEAUTY CONTEST");
-ALIGNED(4) const u8 gUnknown_082EFE90[] = _("CUTE CONTEST");
-ALIGNED(4) const u8 gUnknown_082EFEA0[] = _("SMART CONTEST");
-ALIGNED(4) const u8 gUnknown_082EFEB0[] = _("TOUGH CONTEST");
-ALIGNED(4) const u8 gUnknown_082EFEC0[] = _("BATTLE TOWER LV. 50");
-ALIGNED(4) const u8 gUnknown_082EFED4[] = _("BATTLE TOWER OPEN LEVEL");
-ALIGNED(4) const u8 gUnknown_082EFEEC[] = _("It's a NORMAL CARD.");
-ALIGNED(4) const u8 gUnknown_082EFF00[] = _("It's a BRONZE CARD!");
-ALIGNED(4) const u8 gUnknown_082EFF14[] = _("It's a COPPER CARD!");
-ALIGNED(4) const u8 gUnknown_082EFF28[] = _("It's a SILVER CARD!");
-ALIGNED(4) const u8 gUnknown_082EFF3C[] = _("It's a GOLD CARD!");
-
-const u8 *const gUnknown_082EFF50[] = {
- gUnknown_082EFEEC,
- gUnknown_082EFF00,
- gUnknown_082EFF14,
- gUnknown_082EFF28,
- gUnknown_082EFF3C
-};
-
-ALIGNED(4) const u8 gUnknown_082EFF64[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p");
-ALIGNED(4) const u8 gUnknown_082EFFA4[] = _("BATTLES: WINS: {SPECIAL_F7 0x00} LOSSES: {SPECIAL_F7 0x02}\nTRADES: {SPECIAL_F7 0x03}\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p");
-ALIGNED(4) const u8 gUnknown_082EFFDC[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}");
-ALIGNED(4) const u8 gUnknown_082EFFFC[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}");
-
-const u8 *const gUnknown_082F0018[] = {
- gUnknown_082EFFDC,
- gUnknown_082EFFFC
-};
-
-ALIGNED(4) const u8 gUnknown_082F0020[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}");
-
-const u8 *const gUnknown_082F0048[] = {
- gText_EmptyString,
- gUnknown_082EFDB0,
- gUnknown_082EFDC0,
- gUnknown_082EFDD0,
- gUnknown_082EFDE0,
- gUnknown_082EFDF0,
- gUnknown_082EFE00,
- gUnknown_082EFE10,
- gUnknown_082EFDF8,
- gUnknown_082EFE1C,
- gUnknown_082EFE2C,
- gUnknown_082EFE38,
- gUnknown_082EFE48,
- gText_EmptyString,
- gUnknown_082EFED4,
- gUnknown_082EFE60,
- gUnknown_082EFE50,
- gText_EmptyString,
- gText_EmptyString,
- gText_EmptyString,
- gText_EmptyString,
- gUnknown_082EFE00,
- gUnknown_082EFE10,
- gUnknown_082EFE70,
- gUnknown_082EFE80,
- gUnknown_082EFE90,
- gUnknown_082EFEA0,
- gUnknown_082EFEB0,
- gUnknown_082EFEC0
-};
-
-const struct WindowTemplate gUnknown_082F00BC = {
- .bg = 0x00,
- .tilemapLeft = 0x00,
- .tilemapTop = 0x00,
- .width = 0x1E,
- .height = 0x02,
- .paletteNum = 0x0F,
- .baseBlock = 0x0008
-};
-
-const u32 gUnknown_082F00C4[] = {
- 0x0201,
- 0x0202,
- 0x0403,
- 0x0204,
- 0x2509,
- 0x250a,
- 0x350b,
- 0x0000,
- 0x0000,
- 0x0000,
- 0x0000,
- 0x0000,
- 0x240f,
- 0x2410,
- 0x0000,
- 0x2417,
- 0x2418,
- 0x2419,
- 0x241a,
- 0x241b,
- 0x021c,
- 0x020e
-};
-
-const struct WindowTemplate gUnknown_082F011C = {
- .bg = 0x00,
- .tilemapLeft = 0x01,
- .tilemapTop = 0x03,
- .width = 0x0d,
- .height = 0x08,
- .paletteNum = 0x0f,
- .baseBlock = 0x0044
-};
-
-const struct WindowTemplate gUnknown_082F0124 = {
- .bg = 0x00,
- .tilemapLeft = 0x01,
- .tilemapTop = 0x03,
- .width = 0x0d,
- .height = 0x0a,
- .paletteNum = 0x0f,
- .baseBlock = 0x0044
-};
-
-const struct WindowTemplate gUnknown_082F012C = {
- .bg = 0x00,
- .tilemapLeft = 0x10,
- .tilemapTop = 0x03,
- .width = 0x07,
- .height = 0x04,
- .paletteNum = 0x0f,
- .baseBlock = 0x00c6
-};
-
-const struct ListMenuItem gUnknown_082F0134[] = {
- { gText_EmptyString, 0 },
- { gText_EmptyString, 1 },
- { gText_EmptyString, 2 },
- { gText_EmptyString, 3 },
- { gText_EmptyString, 4 }
-};
-
-const struct ListMenuTemplate gUnknown_082F015C = {
- .items = gUnknown_082F0134,
- .moveCursorFunc = NULL,
- .itemPrintFunc = sub_8013278,
- .totalItems = 5,
- .maxShowed = 5,
- .windowId = 0,
- .header_X = 0,
- .item_X = 0,
- .cursor_X = 0,
- .upText_Y = 1,
- .cursorPal = 2,
- .fillValue = 1,
- .cursorShadowPal = 3,
- .lettersSpacing = 0,
- .itemVerticalPadding = 0,
- .scrollMultiple = 0,
- .fontId = 1,
- .cursorKind = 1
-};
-
-const struct WindowTemplate gUnknown_082F0174 = {
- .bg = 0x00,
- .tilemapLeft = 0x01,
- .tilemapTop = 0x03,
- .width = 0x11,
- .height = 0x0a,
- .paletteNum = 0x0f,
- .baseBlock = 0x0044
-};
-
-const struct WindowTemplate gUnknown_082F017C = {
- .bg = 0x00,
- .tilemapLeft = 0x14,
- .tilemapTop = 0x03,
- .width = 0x07,
- .height = 0x04,
- .paletteNum = 0x0f,
- .baseBlock = 0x00ee
-};
-
-const struct ListMenuItem gUnknown_082F0184[] = {
- { gText_EmptyString, 0 },
- { gText_EmptyString, 1 },
- { gText_EmptyString, 2 },
- { gText_EmptyString, 3 },
- { gText_EmptyString, 4 },
- { gText_EmptyString, 5 },
- { gText_EmptyString, 6 },
- { gText_EmptyString, 7 },
- { gText_EmptyString, 8 },
- { gText_EmptyString, 9 },
- { gText_EmptyString, 10 },
- { gText_EmptyString, 11 },
- { gText_EmptyString, 12 },
- { gText_EmptyString, 13 },
- { gText_EmptyString, 14 },
- { gText_EmptyString, 15 }
-};
-
-const struct ListMenuTemplate gUnknown_082F0204 = {
- .items = gUnknown_082F0184,
- .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = sub_8013DF4,
- .totalItems = 16,
- .maxShowed = 5,
- .windowId = 0,
- .header_X = 0,
- .item_X = 8,
- .cursor_X = 0,
- .upText_Y = 1,
- .cursorPal = 2,
- .fillValue = 1,
- .cursorShadowPal = 3,
- .lettersSpacing = 0,
- .itemVerticalPadding = 0,
- .scrollMultiple = 1,
- .fontId = 1,
- .cursorKind = 0
-};
-
-const struct WindowTemplate gUnknown_082F021C = {
- .bg = 0x00,
- .tilemapLeft = 0x14,
- .tilemapTop = 0x05,
- .width = 0x10,
- .height = 0x08,
- .paletteNum = 0x0f,
- .baseBlock = 0x0001
-};
-
-const struct ListMenuItem gUnknown_082F0224[] = {
- { gUnknown_082EFD70, 0x208 },
- { gUnknown_082EFD60, 0x241 },
- { gUnknown_082EFD68, 0x245 },
- { gUnknown_082EFD7C, 0x040 }
-};
-
-const struct ListMenuTemplate gUnknown_082F0244 = {
- .items = gUnknown_082F0224,
- .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = NULL,
- .totalItems = 4,
- .maxShowed = 4,
- .windowId = 0,
- .header_X = 0,
- .item_X = 8,
- .cursor_X = 0,
- .upText_Y = 1,
- .cursorPal = 2,
- .fillValue = 1,
- .cursorShadowPal = 3,
- .lettersSpacing = 0,
- .itemVerticalPadding = 0,
- .scrollMultiple = 0,
- .fontId = 1,
- .cursorKind = 0
-};
-
-const struct WindowTemplate gUnknown_082F025C = {
- .bg = 0x00,
- .tilemapLeft = 0x12,
- .tilemapTop = 0x07,
- .width = 0x10,
- .height = 0x06,
- .paletteNum = 0x0f,
- .baseBlock = 0x0001
-};
-
-const struct ListMenuItem gUnknown_082F0264[] = {
- { gText_Register, 1 },
- { gUnknown_082EFD8C, 2 },
- { gUnknown_082EFD7C, 3 }
-};
-
-const struct ListMenuTemplate gUnknown_082F027C = {
- .items = gUnknown_082F0264,
- .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = NULL,
- .totalItems = 3,
- .maxShowed = 3,
- .windowId = 0,
- .header_X = 0,
- .item_X = 8,
- .cursor_X = 0,
- .upText_Y = 1,
- .cursorPal = 2,
- .fillValue = 1,
- .cursorShadowPal = 3,
- .lettersSpacing = 0,
- .itemVerticalPadding = 0,
- .scrollMultiple = 0,
- .fontId = 1,
- .cursorKind = 0
-};
-
-const struct WindowTemplate gUnknown_082F0294 = {
- .bg = 0x00,
- .tilemapLeft = 0x14,
- .tilemapTop = 0x01,
- .width = 0x10,
- .height = 0x0c,
- .paletteNum = 0x0f,
- .baseBlock = 0x0001
-};
-
-const struct ListMenuItem gUnknown_082F029C[] = {
- { gTypeNames[TYPE_NORMAL], TYPE_NORMAL },
- { gTypeNames[TYPE_FIRE], TYPE_FIRE },
- { gTypeNames[TYPE_WATER], TYPE_WATER },
- { gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC },
- { gTypeNames[TYPE_GRASS], TYPE_GRASS },
- { gTypeNames[TYPE_ICE], TYPE_ICE },
- { gTypeNames[TYPE_GROUND], TYPE_GROUND },
- { gTypeNames[TYPE_ROCK], TYPE_ROCK },
- { gTypeNames[TYPE_FLYING], TYPE_FLYING },
- { gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC },
- { gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING },
- { gTypeNames[TYPE_POISON], TYPE_POISON },
- { gTypeNames[TYPE_BUG], TYPE_BUG },
- { gTypeNames[TYPE_GHOST], TYPE_GHOST },
- { gTypeNames[TYPE_DRAGON], TYPE_DRAGON },
- { gTypeNames[TYPE_STEEL], TYPE_STEEL },
- { gTypeNames[TYPE_DARK], TYPE_DARK },
- { gUnknown_082EFD7C, NUMBER_OF_MON_TYPES }
-};
-
-const struct ListMenuTemplate gUnknown_082F032C = {
- .items = gUnknown_082F029C,
- .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = NULL,
- .totalItems = NUMBER_OF_MON_TYPES,
- .maxShowed = 6,
- .windowId = 0,
- .header_X = 0,
- .item_X = 8,
- .cursor_X = 0,
- .upText_Y = 1,
- .cursorPal = 2,
- .fillValue = 1,
- .cursorShadowPal = 3,
- .lettersSpacing = 0,
- .itemVerticalPadding = 0,
- .scrollMultiple = 0,
- .fontId = 1,
- .cursorKind = 0
-};
-
-const struct WindowTemplate gUnknown_082F0344 = {
- .bg = 0x00,
- .tilemapLeft = 0x01,
- .tilemapTop = 0x01,
- .width = 0x1c,
- .height = 0x02,
- .paletteNum = 0x0d,
- .baseBlock = 0x0001
-};
-
-const struct WindowTemplate gUnknown_082F034C = {
- .bg = 0x00,
- .tilemapLeft = 0x01,
- .tilemapTop = 0x05,
- .width = 0x1c,
- .height = 0x0c,
- .paletteNum = 0x0d,
- .baseBlock = 0x0039
-};
-
-const struct ListMenuItem gUnknown_082F0354[] = {
- { gText_EmptyString, -3 },
- { gText_EmptyString, 0 },
- { gText_EmptyString, 1 },
- { gText_EmptyString, 2 },
- { gText_EmptyString, 3 },
- { gText_EmptyString, 4 },
- { gText_EmptyString, 5 },
- { gText_EmptyString, 6 },
- { gText_EmptyString, 7 },
- { gUnknown_082EFD84, 8 }
-};
-
-const struct ListMenuTemplate gUnknown_082F03A4 = {
- .items = gUnknown_082F0354,
- .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = sub_8017BE8,
- .totalItems = 10,
- .maxShowed = 6,
- .windowId = 0,
- .header_X = 0,
- .item_X = 8,
- .cursor_X = 0,
- .upText_Y = 1,
- .cursorPal = 14,
- .fillValue = 15,
- .cursorShadowPal = 13,
- .lettersSpacing = 0,
- .itemVerticalPadding = 0,
- .scrollMultiple = 0,
- .fontId = 1,
- .cursorKind = 0
-};
-
-const struct WindowTemplate UnrefWindowTemplate_082F03B4 = {
- .bg = 0x00,
- .tilemapLeft = 0x01,
- .tilemapTop = 0x05,
- .width = 0x1c,
- .height = 0x0c,
- .paletteNum = 0x0d,
- .baseBlock = 0x0039
-};
-
-const struct ListMenuItem gUnknown_082F03C4[] = {
- { gText_EmptyString, 0 },
- { gText_EmptyString, 1 },
- { gText_EmptyString, 2 },
- { gText_EmptyString, 3 },
- { gText_EmptyString, 4 },
- { gText_EmptyString, 5 },
- { gText_EmptyString, 6 },
- { gText_EmptyString, 7 },
- { gText_EmptyString, 8 },
- { gText_EmptyString, 9 },
- { gText_EmptyString, 10 },
- { gText_EmptyString, 11 },
- { gText_EmptyString, 12 },
- { gText_EmptyString, 13 },
- { gText_EmptyString, 14 },
- { gText_EmptyString, 15 }
-};
-
-const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = {
- .items = gUnknown_082F03C4,
- .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
- .itemPrintFunc = nullsub_14,
- .totalItems = 16,
- .maxShowed = 4,
- .windowId = 0,
- .header_X = 0,
- .item_X = 8,
- .cursor_X = 0,
- .upText_Y = 1,
- .cursorPal = 2,
- .fillValue = 1,
- .cursorShadowPal = 3,
- .lettersSpacing = 0,
- .itemVerticalPadding = 0,
- .scrollMultiple = 1,
- .fontId = 1,
- .cursorKind = 0
-};
-
-const struct UnkStruct_Shared gUnknown_082F045C = {0};
-
-ALIGNED(4) const u8 gUnknown_082F0474[] = {0x01, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0478[] = {0x02, 0xff};
-ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff};
-ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff};
-ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff};
-ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff};
-
-const u8 *const gUnknown_082F04D8[] = {
- gUnknown_082F0474,
- gUnknown_082F0478,
- gUnknown_082F047C,
- gUnknown_082F0480,
- gUnknown_082F0484,
- gUnknown_082F0488,
- gUnknown_082F048C,
- gUnknown_082F0490,
- gUnknown_082F0494,
- gUnknown_082F0498,
- gUnknown_082F04A4,
- gUnknown_082F04A8,
- gUnknown_082F04B4,
- gUnknown_082F04B8,
- NULL,
- gUnknown_082F04BC,
- gUnknown_082F04C0,
- gUnknown_082F04C4,
- gUnknown_082F04C8,
- gUnknown_082F04CC,
- gUnknown_082F04D0,
- gUnknown_082F04D4
-};
-
-const u8 gUnknown_082F0530[] = {
- 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15,
- 0x16, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x17,
- 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x0e, 0x00, 0x00
-};
+#include "data/union_room.h"
// code
void nullsub_89(u8 taskId)
@@ -1249,7 +213,7 @@ bool32 sub_80126CC(u32 caseId)
}
}
-void BerryBlenderLinkBecomeLeader(void)
+void TryBecomeLinkLeader(void)
{
u8 taskId;
struct UnkStruct_Leader *dataPtr;
@@ -1639,11 +603,11 @@ void sub_8013078(u8 *dst, u8 caseId)
{
case 65:
case 68:
- StringExpandPlaceholders(dst, gUnknown_082EE560);
+ StringExpandPlaceholders(dst, sText_OfferDeclined1);
break;
case 69:
case 72:
- StringExpandPlaceholders(dst, gUnknown_082EE57C);
+ StringExpandPlaceholders(dst, sText_OfferDeclined2);
break;
}
}
@@ -1831,7 +795,7 @@ u8 sub_8013398(struct UnkStruct_Main0 *arg0)
return ret;
}
-void BerryBlenderLinkJoinGroup(void)
+void TryJoinLinkGroup(void)
{
u8 taskId;
struct UnkStruct_Group *dataPtr;
@@ -2116,7 +1080,7 @@ u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id)
{
if (!(gSaveBlock2Ptr->specialSaveWarpFlags & 0x80))
return 1;
- else if (structPtr->unk.field_0.unk_00.unk_00_7)
+ else if (structPtr->unk.field_0.unk_00.isChampion)
return 0;
}
else
@@ -2305,22 +1269,22 @@ u8 sub_8013E44(void)
return ret;
}
-void sub_8013F60(u8 taskId)
+static void Task_CreateTradeMenu(u8 taskId)
{
- sub_80773AC();
+ CB2_StartCreateTradeMenu();
DestroyTask(taskId);
}
u8 sub_8013F78(void)
{
- u8 taskId = CreateTask(sub_8013F60, 0);
+ u8 taskId = CreateTask(Task_CreateTradeMenu, 0);
return taskId;
}
void sub_8013F90(u8 taskId)
{
- u32 monId = sub_8018120(&gUnknown_02022C40, GetMultiplayerId());
+ u32 monId = GetPartyPositionOfRegisteredMon(&sUnionRoomTrade, GetMultiplayerId());
switch (gTasks[taskId].data[0])
{
@@ -2345,13 +1309,13 @@ void sub_8013F90(u8 taskId)
case 3:
if (GetBlockReceivedStatus() == 3)
{
- memcpy(gUnknown_020321C0, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct MailStruct) * PARTY_SIZE);
+ memcpy(gTradeMail, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct MailStruct) * PARTY_SIZE);
ResetBlockReceivedFlags();
- gUnknown_02032298[0] = monId;
- gUnknown_02032298[1] = 6;
+ gSelectedTradeMonPositions[TRADE_PLAYER] = monId;
+ gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE;
gMain.savedCallback = CB2_ReturnToField;
- SetMainCallback2(sub_807AE50);
- sub_801807C(&gUnknown_02022C40);
+ SetMainCallback2(CB2_LinkTrade);
+ ResetUnionRoomTrade(&sUnionRoomTrade);
DestroyTask(taskId);
}
break;
@@ -2421,7 +1385,7 @@ void sub_8014210(u16 battleFlags)
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
- gLinkPlayers[0].linkType = 0x2211;
+ gLinkPlayers[0].linkType = LINKTYPE_BATTLE;
gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId();
gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1;
gMain.savedCallback = sub_80B360C;
@@ -2429,18 +1393,18 @@ void sub_8014210(u16 battleFlags)
PlayBattleBGM();
}
-void sub_8014290(u16 arg0, u16 x, u16 y)
+static void sub_8014290(u16 linkService, u16 x, u16 y)
{
- VarSet(VAR_CABLE_CLUB_STATE, arg0);
+ VarSet(VAR_CABLE_CLUB_STATE, linkService);
SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y);
WarpIntoMap();
}
-void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 arg4)
+void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService)
{
- gSpecialVar_0x8004 = arg4;
- VarSet(VAR_CABLE_CLUB_STATE, arg4);
+ gSpecialVar_0x8004 = linkService;
+ VarSet(VAR_CABLE_CLUB_STATE, linkService);
gFieldLinkPlayerCount = GetLinkPlayerCount();
gLocalLinkPlayerId = GetMultiplayerId();
SetCableClubWarp();
@@ -2506,7 +1470,7 @@ void sub_801440C(u8 taskId)
HealPlayerParty();
SavePlayerParty();
LoadPlayerBag();
- sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, 1);
+ sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, USING_SINGLE_BATTLE);
SetMainCallback2(sub_8014384);
break;
case 2:
@@ -2515,7 +1479,7 @@ void sub_801440C(u8 taskId)
SavePlayerParty();
LoadPlayerBag();
sub_80143E4(gBlockSendBuffer, TRUE);
- sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, 2);
+ sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, USING_DOUBLE_BATTLE);
SetMainCallback2(sub_8014384);
break;
case 3:
@@ -2524,19 +1488,19 @@ void sub_801440C(u8 taskId)
SavePlayerParty();
LoadPlayerBag();
sub_80143E4(gBlockSendBuffer, TRUE);
- sub_8014304(MAP_GROUP(DOUBLE_BATTLE_COLOSSEUM), MAP_NUM(DOUBLE_BATTLE_COLOSSEUM), 5, 8, 5);
+ sub_8014304(MAP_GROUP(DOUBLE_BATTLE_COLOSSEUM), MAP_NUM(DOUBLE_BATTLE_COLOSSEUM), 5, 8, USING_MULTI_BATTLE);
SetMainCallback2(sub_8014384);
break;
case 4:
sub_80143E4(gBlockSendBuffer, TRUE);
CleanupOverworldWindowsAndTilemaps();
- sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, 3);
+ sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER);
SetMainCallback2(sub_8014384);
break;
case 15:
sub_80143E4(gBlockSendBuffer, TRUE);
CleanupOverworldWindowsAndTilemaps();
- sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, 4);
+ sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, USING_RECORD_CORNER);
SetMainCallback2(sub_8014384);
break;
case 68:
@@ -2562,15 +1526,15 @@ void sub_801440C(u8 taskId)
SetMainCallback2(sub_80141A4);
break;
case 9:
- sub_8014290(8, 5, 1);
+ sub_8014290(USING_MINIGAME, 5, 1);
sub_802A9A8(GetCursorSelectionMonId(), CB2_LoadMap);
break;
case 10:
- sub_8014290(7, 9, 1);
+ sub_8014290(USING_BERRY_CRUSH, 9, 1);
sub_8020C70(CB2_LoadMap);
break;
case 11:
- sub_8014290(8, 5, 1);
+ sub_8014290(USING_MINIGAME, 5, 1);
sub_802493C(GetCursorSelectionMonId(), CB2_LoadMap);
break;
}
@@ -2594,7 +1558,7 @@ void sub_8014790(u8 taskId)
{
case 14:
case 28:
- gLinkPlayers[0].linkType = 0x2211;
+ gLinkPlayers[0].linkType = LINKTYPE_BATTLE;
gLinkPlayers[0].id = 0;
gLinkPlayers[1].id = 2;
sendBuff[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES);
@@ -2627,7 +1591,7 @@ void sub_8014790(u8 taskId)
if (gUnknown_02022C2C == 29)
{
DestroyTask(taskId);
- SetMainCallback2(sub_80773AC);
+ SetMainCallback2(CB2_StartCreateTradeMenu);
}
else
{
@@ -3334,7 +2298,7 @@ void sub_80156E0(u8 taskId)
break;
case 2:
sub_8010F84(0x40, 0, 0);
- sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel);
+ sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
sub_800B488();
OpenLink();
sub_8011C84();
@@ -3345,22 +2309,24 @@ void sub_80156E0(u8 taskId)
data->state = 3;
break;
case 3:
- if ((sub_81B1360() == 8 || sub_81B1360() == 9) && gUnknown_02022C40.field_0 != 0)
+ if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER
+ || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE)
+ && sUnionRoomTrade.field_0 != 0)
{
id = GetCursorSelectionMonId();
- switch (gUnknown_02022C40.field_0)
+ switch (sUnionRoomTrade.field_0)
{
case 1:
sub_8011090(0x54, 0, 1);
if (id >= PARTY_SIZE)
{
- sub_801807C(&gUnknown_02022C40);
+ ResetUnionRoomTrade(&sUnionRoomTrade);
sub_8010FCC(0, 0, 0);
- sub_801568C(gUnknown_082EF4FC);
+ sub_801568C(sText_RegistrationCanceled);
}
- else if (!sub_80180A0(GetCursorSelectionMonId(), &gUnknown_02022C40))
+ else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade))
{
- sub_8015664(0x34, gUnknown_082EF47C);
+ sub_8015664(0x34, sText_ChooseRequestedMonType);
}
else
{
@@ -3369,21 +2335,21 @@ void sub_80156E0(u8 taskId)
break;
case 2:
sub_80156C8(data);
- taskData[1] = gUnknown_02022C40.field_8;
+ taskData[1] = sUnionRoomTrade.field_8;
if (id >= PARTY_SIZE)
{
- sub_801568C(gUnknown_082EF544);
+ sub_801568C(sText_TradeCanceled);
}
else
{
sub_8011090(0x54, 0, 1);
gUnknown_02022C2C = 0x44;
- sub_80180E8(GetCursorSelectionMonId(), &gUnknown_02022C40);
+ RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade);
data->state = 51;
}
break;
}
- gUnknown_02022C40.field_0 = 0;
+ sUnionRoomTrade.field_0 = 0;
}
else
{
@@ -3491,9 +2457,9 @@ void sub_80156E0(u8 taskId)
case 1:
case 2:
if (sub_8011B90() == TRUE)
- sub_801568C(gUnknown_082EE6C8);
+ sub_801568C(sText_TrainerAppearsBusy);
else
- sub_8015664(30, gUnknown_082EE6C8);
+ sub_8015664(30, sText_TrainerAppearsBusy);
gUnknown_02022C2C = 0x40;
break;
@@ -3551,9 +2517,9 @@ void sub_80156E0(u8 taskId)
{
gUnknown_02022C2C = var5;
gUnknown_02022C2D = (u32)(var5) >> 8;
- if (gUnknown_02022C2C == 0x41 && !sub_8018024())
+ if (gUnknown_02022C2C == 0x41 && !HasAtLeastTwoMonsOfLevel30OrLower())
{
- sub_8015664(5, gUnknown_082EEBD0);
+ sub_8015664(5, sText_NeedTwoMonsOfLevel30OrLower1);
}
else
{
@@ -3566,7 +2532,7 @@ void sub_80156E0(u8 taskId)
}
break;
case 28:
- StringCopy(gStringVar4, gUnknown_082EEB88);
+ StringCopy(gStringVar4, sText_TrainerBattleBusy);
data->state = 36;
break;
case 27:
@@ -3585,15 +2551,15 @@ void sub_80156E0(u8 taskId)
break;
case 31:
data->field_4C[0] = 0x44;
- data->field_4C[1] = gUnknown_02022C40.species;
- data->field_4C[2] = gUnknown_02022C40.level;
+ data->field_4C[1] = sUnionRoomTrade.species;
+ data->field_4C[2] = sUnionRoomTrade.level;
sub_800FE50(data->field_4C);
data->state = 29;
break;
case 29:
if (gReceivedRemoteLinkPlayers == 0)
{
- StringCopy(gStringVar4, gUnknown_082EEB88);
+ StringCopy(gStringVar4, sText_TrainerBattleBusy);
data->state = 28;
}
else
@@ -3641,7 +2607,7 @@ void sub_80156E0(u8 taskId)
{
StringCopy(gStringVar1, gLinkPlayers[GetMultiplayerId() ^ 1].name);
id = sub_800E540(gLinkPlayers[1].trainerId, gLinkPlayers[1].name);
- StringExpandPlaceholders(gStringVar4, gUnknown_082EE378[id]);
+ StringExpandPlaceholders(gStringVar4, sUnionRoomTexts_AwaitingResponse[id]);
data->state = 33;
}
else
@@ -3665,7 +2631,7 @@ void sub_80156E0(u8 taskId)
case 1:
case -1:
playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_801568C(gUnknown_082EEC9C[playerGender]);
+ sub_801568C(sUnionRoomTexts_DeclineBattle[playerGender]);
break;
}
break;
@@ -3750,7 +2716,7 @@ void sub_80156E0(u8 taskId)
if (sub_80168DC(data) && gMain.newKeys & B_BUTTON)
{
sub_8011DE0(1);
- StringCopy(gStringVar4, gUnknown_082EE598);
+ StringCopy(gStringVar4, sText_ChatEnded);
data->state = 36;
}
break;
@@ -3771,12 +2737,12 @@ void sub_80156E0(u8 taskId)
taskData[3] = 0;
if (gUnknown_02022C2C == 0x41)
{
- if (!sub_8018024())
+ if (!HasAtLeastTwoMonsOfLevel30OrLower())
{
data->field_4C[0] = 0x52;
sub_800FE50(data->field_4C);
data->state = 10;
- StringCopy(gStringVar4, gUnknown_082EEC14);
+ StringCopy(gStringVar4, sText_NeedTwoMonsOfLevel30OrLower2);
}
else
{
@@ -3866,19 +2832,19 @@ void sub_80156E0(u8 taskId)
{
if (sub_800F7DC()->species == SPECIES_EGG)
{
- StringCopy(gStringVar4, gUnknown_082EF590);
+ StringCopy(gStringVar4, sText_CancelRegistrationOfEgg);
}
else
{
StringCopy(gStringVar1, gSpeciesNames[sub_800F7DC()->species]);
- ConvertIntToDecimalStringN(gStringVar2, sub_800F7DC()->unk_0b_1, STR_CONV_MODE_LEFT_ALIGN, 3);
- StringExpandPlaceholders(gStringVar4, gUnknown_082EF564);
+ ConvertIntToDecimalStringN(gStringVar2, sub_800F7DC()->level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, sText_CancelRegistrationOfMon);
}
sub_8015664(44, gStringVar4);
}
break;
case 43:
- if (PrintOnTextbox(&data->textState, gUnknown_082EF20C))
+ if (PrintOnTextbox(&data->textState, sText_RegisterMonAtTradingBoard))
data->state = 47;
break;
case 47:
@@ -3894,11 +2860,11 @@ void sub_80156E0(u8 taskId)
{
switch (var5)
{
- case 1:
- sub_8015664(53, gUnknown_082EF4C4);
+ case 1: // REGISTER
+ sub_8015664(53, sText_WhichMonWillYouOffer);
break;
- case 2:
- sub_8015664(47, gUnknown_082EF298);
+ case 2: // INFO
+ sub_8015664(47, sText_TradingBoardInfo);
break;
}
}
@@ -3911,33 +2877,33 @@ void sub_80156E0(u8 taskId)
case 54:
if (!gPaletteFade.active)
{
- gUnknown_02022C40.field_0 = 1;
+ sUnionRoomTrade.field_0 = 1;
gFieldCallback = sub_80AF128;
- sub_81B8904(8, CB2_ReturnToField);
+ ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_REGISTER, CB2_ReturnToField);
}
break;
case 52:
- var5 = sub_8017178(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_082F0294, &gUnknown_082F032C);
+ var5 = sub_8017178(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_082F0294, &sMenuTemplate_TradingBoardRequestType);
if (var5 != -1)
{
switch (var5)
{
case -2:
case 18:
- sub_801807C(&gUnknown_02022C40);
+ ResetUnionRoomTrade(&sUnionRoomTrade);
sub_8010FCC(0, 0, 0);
- sub_801568C(gUnknown_082EF4FC);
+ sub_801568C(sText_RegistrationCanceled);
break;
default:
- gUnknown_02022C40.type = var5;
+ sUnionRoomTrade.type = var5;
data->state = 55;
break;
}
}
break;
case 55:
- sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel);
- sub_801568C(gUnknown_082EF520);
+ sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
+ sub_801568C(sText_RegistraionCompleted);
break;
case 44:
switch (sub_80170B8(&data->textState, FALSE))
@@ -3953,16 +2919,16 @@ void sub_80156E0(u8 taskId)
}
break;
case 56:
- if (PrintOnTextbox(&data->textState, gUnknown_082EF5B8))
+ if (PrintOnTextbox(&data->textState, sText_RegistrationCanceled2))
{
sub_8010FCC(0, 0, 0);
- sub_801807C(&gUnknown_02022C40);
+ ResetUnionRoomTrade(&sUnionRoomTrade);
sub_801818C(TRUE);
data->state = 4;
}
break;
case 45:
- if (PrintOnTextbox(&data->textState, gUnknown_082EF1EC))
+ if (PrintOnTextbox(&data->textState, sText_XCheckedTradingBoard))
data->state = 46;
break;
case 46:
@@ -3986,18 +2952,18 @@ void sub_80156E0(u8 taskId)
{
case 0:
sub_8018404(gStringVar1, &data->field_0->arr[var5]);
- sub_8015664(49, gUnknown_082EF65C);
+ sub_8015664(49, sText_AskTrainerToMakeTrade);
taskData[1] = var5;
break;
case 1:
sub_8018404(gStringVar1, &data->field_0->arr[var5]);
StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]);
- sub_8015664(46, gUnknown_082EF6E4);
+ sub_8015664(46, sText_DontHaveTypeTrainerWants);
break;
case 2:
sub_8018404(gStringVar1, &data->field_0->arr[var5]);
StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]);
- sub_8015664(46, gUnknown_082EF718);
+ sub_8015664(46, sText_DontHaveEggTrainerWants);
break;
}
break;
@@ -4018,16 +2984,16 @@ void sub_80156E0(u8 taskId)
}
break;
case 50:
- if (PrintOnTextbox(&data->textState, gUnknown_082EF4C4))
+ if (PrintOnTextbox(&data->textState, sText_WhichMonWillYouOffer))
{
- gUnknown_02022C40.field_0 = 2;
+ sUnionRoomTrade.field_0 = 2;
memcpy(&gUnknown_02022C38, &data->field_0->arr[taskData[1]].unk.field_0.unk_00, sizeof(gUnknown_02022C38));
- gUnknown_02022C3E = data->field_0->arr[taskData[1]].unk.field_0.type;
- gUnknown_02022C3C = data->field_0->arr[taskData[1]].unk.field_0.species;
+ gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.field_0.type;
+ gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.field_0.species;
gFieldCallback = sub_80AF128;
- sub_81B8904(9, CB2_ReturnToField);
+ ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField);
sub_80156B0(data);
- gUnknown_02022C40.field_8 = taskData[1];
+ sUnionRoomTrade.field_8 = taskData[1];
}
break;
case 51:
@@ -4097,20 +3063,20 @@ bool32 sub_80168DC(struct UnkStruct_URoom *arg0)
return TRUE;
}
-void sub_8016934(void)
+void InitUnionRoom(void)
{
struct UnkStruct_URoom *ptr;
- gUnknown_02022C20[0] = EOS;
+ sUnionRoomPlayerName[0] = EOS;
CreateTask(sub_801697C, 0);
gUnknown_02022C30.uRoom = gUnknown_02022C30.uRoom; // Needed to match.
- gUnknown_02022C30.uRoom = ptr = AllocZeroed(0x26C);
+ gUnknown_02022C30.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom));
gUnknown_03000DA8 = gUnknown_02022C30.uRoom;
ptr->state = 0;
ptr->textState = 0;
ptr->field_10 = 0;
ptr->field_12 = 0;
- gUnknown_02022C20[0] = EOS;
+ sUnionRoomPlayerName[0] = EOS;
}
void sub_801697C(u8 taskId)
@@ -4149,7 +3115,7 @@ void sub_801697C(u8 taskId)
{
case 1:
case 2:
- if (gUnknown_02022C20[0] == EOS)
+ if (sUnionRoomPlayerName[0] == EOS)
{
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
{
@@ -4158,7 +3124,7 @@ void sub_801697C(u8 taskId)
sub_8018404(text, &structPtr->field_0->arr[i]);
if (sub_800E540(ReadAsU16(structPtr->field_0->arr[i].unk.field_0.unk_00.playerTrainerId), text))
{
- StringCopy(gUnknown_02022C20, text);
+ StringCopy(sUnionRoomPlayerName, text);
break;
}
}
@@ -4182,12 +3148,12 @@ void sub_801697C(u8 taskId)
}
}
-bool16 sp182_move_string(void)
+bool16 BufferUnionRoomPlayerName(void)
{
- if (gUnknown_02022C20[0] != EOS)
+ if (sUnionRoomPlayerName[0] != EOS)
{
- StringCopy(gStringVar1, gUnknown_02022C20);
- gUnknown_02022C20[0] = EOS;
+ StringCopy(gStringVar1, sUnionRoomPlayerName);
+ sUnionRoomPlayerName[0] = EOS;
return TRUE;
}
else
@@ -4897,7 +3863,7 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender
r2 = sub_800E540(ReadAsU16(r5->unk.field_0.unk_00.playerTrainerId), gStringVar1);
if (r5->unk.field_0.unk_0a_0 == 0x45)
{
- StringExpandPlaceholders(gStringVar4, gUnknown_082EE6B8[r2][playerGender]);
+ StringExpandPlaceholders(gStringVar4, sUnionRoomTexts_JoinChat[r2][playerGender]);
return 2;
}
else
@@ -4919,7 +3885,7 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender
StringExpandPlaceholders(gStringVar4, gUnknown_082EEEAC[playerGender][Random() % 4]);
break;
case 4:
- StringExpandPlaceholders(gStringVar4, gUnknown_082EF1CC[playerGender][Random() % 2]);
+ StringExpandPlaceholders(gStringVar4, sUnionRoomTexts_Traded[playerGender][Random() % 2]);
break;
case 5:
StringExpandPlaceholders(gStringVar4, gUnknown_082EF010[playerGender][Random() % 4]);
@@ -4928,7 +3894,7 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender
StringExpandPlaceholders(gStringVar4, gUnknown_082EF100[playerGender][Random() % 2]);
break;
default:
- StringExpandPlaceholders(gStringVar4, gUnknown_082EE6C8);
+ StringExpandPlaceholders(gStringVar4, sText_TrainerAppearsBusy);
break;
}
return 0;
@@ -4945,12 +3911,12 @@ void sub_8017B3C(u8 arg0, u8 arg1, struct UnkLinkRfuStruct_02022B14 * arg2, cons
u8 sp8[4];
u16 r8 = arg2->species;
u8 r7 = arg2->type;
- u8 r9 = arg2->unk_0b_1;
+ u8 r9 = arg2->level;
sub_80173E0(arg0, 1, str, 8, arg1, arg4);
if (r8 == SPECIES_EGG)
{
- sub_80173E0(arg0, 1, gUnknown_082EF7D0, 0x44, arg1, arg4);
+ sub_80173E0(arg0, 1, sText_EggTrade, 0x44, arg1, arg4);
}
else
{
@@ -5061,7 +4027,7 @@ void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender)
StringExpandPlaceholders(dst, gUnknown_082EED3C[playerGender]);
break;
case 0x44:
- StringExpandPlaceholders(dst, gUnknown_082EF7B0);
+ StringExpandPlaceholders(dst, sText_TradeOfferRejected);
break;
case 0x48:
StringExpandPlaceholders(dst, gUnknown_082EEB08[playerGender]);
@@ -5097,16 +4063,16 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3)
switch (arg2[0])
{
case 0x41:
- StringExpandPlaceholders(dst, gUnknown_082EE3DC);
+ StringExpandPlaceholders(dst, sText_BattleChallenge);
result = 1;
break;
case 0x45:
- StringExpandPlaceholders(dst, gUnknown_082EE430);
+ StringExpandPlaceholders(dst, sText_ChatInvitation);
result = 1;
break;
case 0x44:
- ConvertIntToDecimalStringN(arg3->field_58 + 0x00, gUnknown_02022C40.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
- StringCopy(arg3->field_58 + 0x10, gSpeciesNames[gUnknown_02022C40.playerSpecies]);
+ ConvertIntToDecimalStringN(arg3->field_58 + 0x00, sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(arg3->field_58 + 0x10, gSpeciesNames[sUnionRoomTrade.playerSpecies]);
for (i = 0; i < 4; i++)
{
if (gUnknown_03007890->unk_14[i].unk_04 == 2)
@@ -5119,7 +4085,7 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3)
}
if (species == SPECIES_EGG)
{
- StringCopy(dst, gUnknown_082EE4F0);
+ StringCopy(dst, sText_OfferToTradeEgg);
}
else
{
@@ -5127,16 +4093,16 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3)
{
DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->field_58 + 0x10 * i);
}
- DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, gUnknown_082EE47C);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, sText_OfferToTradeMon);
}
result = 1;
break;
case 0x48:
- StringExpandPlaceholders(dst, gUnknown_082EE380);
+ StringExpandPlaceholders(dst, sText_ShowTrainerCard);
result = 1;
break;
case 0x40:
- StringExpandPlaceholders(dst, gUnknown_082EE544);
+ StringExpandPlaceholders(dst, sText_ChatDropped);
result = 2;
break;
}
@@ -5169,14 +4135,14 @@ bool32 InUnionRoom(void)
? TRUE : FALSE;
}
-bool32 sub_8018024(void)
+bool32 HasAtLeastTwoMonsOfLevel30OrLower(void)
{
s32 i;
s32 count = 0;
for (i = 0; i < gPlayerPartyCount; i++)
{
- if ( GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30
+ if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30
&& GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG)
{
count++;
@@ -5184,16 +4150,12 @@ bool32 sub_8018024(void)
}
if (count > 1)
- {
return TRUE;
- }
else
- {
return FALSE;
- }
}
-void sub_801807C(struct TradeUnkStruct *arg0)
+static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0)
{
arg0->field_0 = 0;
arg0->type = 0;
@@ -5205,34 +4167,30 @@ void sub_801807C(struct TradeUnkStruct *arg0)
arg0->personality = 0;
}
-void sub_8018090(void)
+void Script_ResetUnionRoomTrade(void)
{
- sub_801807C(&gUnknown_02022C40);
+ ResetUnionRoomTrade(&sUnionRoomTrade);
}
-bool32 sub_80180A0(u32 monId, struct TradeUnkStruct *arg1)
+static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade)
{
- arg1->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2);
- arg1->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
- arg1->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
- if (arg1->playerSpecies == SPECIES_EGG)
- {
+ trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2);
+ trade->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ trade->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ if (trade->playerSpecies == SPECIES_EGG)
return TRUE;
- }
else
- {
return FALSE;
- }
}
-void sub_80180E8(u32 monId, struct TradeUnkStruct *arg1)
+static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade)
{
- arg1->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2);
- arg1->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
- arg1->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
+ trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2);
+ trade->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ trade->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY);
}
-u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId)
+static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 multiplayerId)
{
u16 response = 0;
u16 species;
@@ -5241,15 +4199,17 @@ u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId)
u16 cur_species;
s32 i;
+ // player
if (multiplayerId == 0)
{
- species = arg0->playerSpecies;
- personality = arg0->playerPersonality;
+ species = trade->playerSpecies;
+ personality = trade->playerPersonality;
}
+ // partner
else
{
- species = arg0->species;
- personality = arg0->personality;
+ species = trade->species;
+ personality = trade->personality;
}
for (i = 0; i < gPlayerPartyCount; i++)
@@ -5279,7 +4239,7 @@ void sub_801818C(bool32 arg0)
gUnknown_02022C2C = 0;
if (arg0)
{
- sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel);
+ sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel);
sub_8011090(0x40, 0, 0);
}
}
diff --git a/src/union_room_battle.c b/src/union_room_battle.c
index 79d12291d..b49406eac 100644
--- a/src/union_room_battle.c
+++ b/src/union_room_battle.c
@@ -6,7 +6,7 @@
#include "bg.h"
#include "palette.h"
#include "gpu_regs.h"
-#include "alloc.h"
+#include "malloc.h"
#include "menu.h"
#include "window.h"
#include "text_window.h"
diff --git a/src/union_room_chat.c b/src/union_room_chat.c
index 4afeb99cf..f8ea1b781 100755
--- a/src/union_room_chat.c
+++ b/src/union_room_chat.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "bg.h"
#include "decompress.h"
#include "dma3.h"
@@ -22,6 +22,7 @@
#include "task.h"
#include "text.h"
#include "text_window.h"
+#include "union_room_chat.h"
#include "window.h"
#include "constants/rgb.h"
#include "constants/songs.h"
@@ -37,9 +38,9 @@ struct UnionRoomChat
u8 unkD;
u8 unkE;
u8 unkF;
- u8 unk10;
+ u8 currentPage;
u8 unk11;
- u8 unk12;
+ u8 currentRow;
u8 unk13;
u8 unk14;
u8 unk15;
@@ -50,7 +51,7 @@ struct UnionRoomChat
u8 unk1A[0x1F];
u8 unk39[0x40];
u8 unk79[0x40];
- u8 unkB9[10][21];
+ u8 unkB9[UNION_ROOM_KB_ROW_COUNT][21];
u8 filler18B[0x5];
u8 unk190[0x28];
u16 unk1B8;
@@ -232,7 +233,13 @@ void (*const gUnknown_082F2A7C[])(void) =
sub_801E978,
};
-static const u8 sUnknown_082F2AA4[] = {9, 9, 9, 9};
+static const u8 sKeyboardPageMaxRow[] =
+{
+ [UNION_ROOM_KB_PAGE_UPPER] = 9,
+ [UNION_ROOM_KB_PAGE_LOWER] = 9,
+ [UNION_ROOM_KB_PAGE_EMOJI] = 9,
+ 9
+};
static const u8 gUnknown_082F2AA8[] = {
CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C,
@@ -269,10 +276,47 @@ static const u8 gUnknown_082F2AA8[] = {
CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE
};
-const u8 *const gUnknown_082F2BA8[][10] = {
- {gUnknown_0862B9F9, gUnknown_0862B9FF, gUnknown_0862BA05, gUnknown_0862BA0B, gUnknown_0862BA11, gUnknown_0862BA17, gUnknown_0862BA1D, gUnknown_0862BA23, gUnknown_0862BA29, gUnknown_0862BA2F},
- {gUnknown_0862BA35, gUnknown_0862BA3B, gUnknown_0862BA41, gUnknown_0862BA47, gUnknown_0862BA4D, gUnknown_0862BA53, gUnknown_0862BA59, gUnknown_0862BA5F, gUnknown_0862BA65, gUnknown_0862BA6B},
- {gUnknown_0862BA79, gUnknown_0862BA84, gUnknown_0862BA8F, gUnknown_0862BA9A, gUnknown_0862BAA3, gUnknown_0862BAAE, gUnknown_0862BAB9, gUnknown_0862BAC4, gUnknown_0862BACF, gUnknown_0862BADA}
+static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] =
+{
+ [UNION_ROOM_KB_PAGE_UPPER] =
+ {
+ gText_UnionRoomChatKeyboard_ABCDE,
+ gText_UnionRoomChatKeyboard_FGHIJ,
+ gText_UnionRoomChatKeyboard_KLMNO,
+ gText_UnionRoomChatKeyboard_PQRST,
+ gText_UnionRoomChatKeyboard_UVWXY,
+ gText_UnionRoomChatKeyboard_Z,
+ gText_UnionRoomChatKeyboard_01234Upper,
+ gText_UnionRoomChatKeyboard_56789Upper,
+ gText_UnionRoomChatKeyboard_PunctuationUpper,
+ gText_UnionRoomChatKeyboard_SymbolsUpper
+ },
+ [UNION_ROOM_KB_PAGE_LOWER] =
+ {
+ gText_UnionRoomChatKeyboard_abcde,
+ gText_UnionRoomChatKeyboard_fghij,
+ gText_UnionRoomChatKeyboard_klmno,
+ gText_UnionRoomChatKeyboard_pqrst,
+ gText_UnionRoomChatKeyboard_uvwxy,
+ gText_UnionRoomChatKeyboard_z,
+ gText_UnionRoomChatKeyboard_01234Lower,
+ gText_UnionRoomChatKeyboard_56789Lower,
+ gText_UnionRoomChatKeyboard_PunctuationLower,
+ gText_UnionRoomChatKeyboard_SymbolsLower
+ },
+ [UNION_ROOM_KB_PAGE_EMOJI] =
+ {
+ gText_UnionRoomChatKeyboard_Emoji1,
+ gText_UnionRoomChatKeyboard_Emoji2,
+ gText_UnionRoomChatKeyboard_Emoji3,
+ gText_UnionRoomChatKeyboard_Emoji4,
+ gText_UnionRoomChatKeyboard_Emoji5,
+ gText_UnionRoomChatKeyboard_Emoji6,
+ gText_UnionRoomChatKeyboard_Emoji7,
+ gText_UnionRoomChatKeyboard_Emoji8,
+ gText_UnionRoomChatKeyboard_Emoji9,
+ gText_UnionRoomChatKeyboard_Emoji10
+ }
};
const u16 gUnknown_082F2C20[] = INCBIN_U16("graphics/interface/unk_palette1.gbapal");
@@ -559,9 +603,9 @@ static void sub_801DDD0(struct UnionRoomChat *unionRoomChat)
unionRoomChat->unk4 = 0;
unionRoomChat->unk6 = 0;
- unionRoomChat->unk10 = 0;
+ unionRoomChat->currentPage = 0;
unionRoomChat->unk11 = 0;
- unionRoomChat->unk12 = 0;
+ unionRoomChat->currentRow = 0;
unionRoomChat->unk14 = 0;
unionRoomChat->unk15 = 0;
unionRoomChat->unk16 = 0;
@@ -571,7 +615,7 @@ static void sub_801DDD0(struct UnionRoomChat *unionRoomChat)
unionRoomChat->unk17 = 0;
unionRoomChat->unk18 = 0;
sub_801EF1C(unionRoomChat->unk190);
- for (i = 0; i < 10; i++)
+ for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3C88[i]);
}
@@ -715,7 +759,7 @@ static void sub_801E030(void)
}
else if (gMain.newKeys & R_BUTTON)
{
- if (gUnknown_02022C84->unk10 != 3)
+ if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
{
sub_801ED94();
sub_801F5EC(8, 0);
@@ -763,7 +807,7 @@ static void sub_801E120(void)
default:
sub_801F5EC(4, 0);
var0 = 1;
- if (gUnknown_02022C84->unk10 == input || input > 3)
+ if (gUnknown_02022C84->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT)
var0 = 0;
break;
case MENU_NOTHING_CHOSEN:
@@ -786,9 +830,9 @@ static void sub_801E120(void)
}
gUnknown_02022C84->unk11 = 0;
- gUnknown_02022C84->unk12 = 0;
+ gUnknown_02022C84->currentRow = 0;
sub_801F5EC(5, 1);
- gUnknown_02022C84->unk10 = input;
+ gUnknown_02022C84->currentPage = input;
gUnknown_02022C84->unk6 = 4;
break;
case 3:
@@ -1260,15 +1304,15 @@ static bool32 sub_801EBE4(void)
{
if (gMain.newAndRepeatedKeys & DPAD_DOWN)
{
- if (gUnknown_02022C84->unk12 < sUnknown_082F2AA4[gUnknown_02022C84->unk10])
- gUnknown_02022C84->unk12++;
+ if (gUnknown_02022C84->currentRow < sKeyboardPageMaxRow[gUnknown_02022C84->currentPage])
+ gUnknown_02022C84->currentRow++;
else
- gUnknown_02022C84->unk12 = 0;
+ gUnknown_02022C84->currentRow = 0;
return TRUE;
}
- if (gUnknown_02022C84->unk10 != 3)
+ if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
{
if (gMain.newAndRepeatedKeys & DPAD_LEFT)
{
@@ -1296,10 +1340,10 @@ static bool32 sub_801EBE4(void)
}
else
{
- if (gUnknown_02022C84->unk12)
- gUnknown_02022C84->unk12--;
+ if (gUnknown_02022C84->currentRow)
+ gUnknown_02022C84->currentRow--;
else
- gUnknown_02022C84->unk12 = sUnknown_082F2AA4[gUnknown_02022C84->unk10];
+ gUnknown_02022C84->currentRow = sKeyboardPageMaxRow[gUnknown_02022C84->currentPage];
return TRUE;
}
@@ -1313,9 +1357,9 @@ static void sub_801EC94(void)
u8 *str;
u8 buffer[21];
- if (gUnknown_02022C84->unk10 != 3)
+ if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT)
{
- charsStr = gUnknown_082F2BA8[gUnknown_02022C84->unk10][gUnknown_02022C84->unk12];
+ charsStr = sUnionRoomKeyboardText[gUnknown_02022C84->currentPage][gUnknown_02022C84->currentRow];
for (i = 0; i < gUnknown_02022C84->unk11; i++)
{
if (*charsStr == CHAR_SPECIAL_F9)
@@ -1327,7 +1371,7 @@ static void sub_801EC94(void)
}
else
{
- u8 *tempStr = StringCopy(buffer, gUnknown_02022C84->unkB9[gUnknown_02022C84->unk12]);
+ u8 *tempStr = StringCopy(buffer, gUnknown_02022C84->unkB9[gUnknown_02022C84->currentRow]);
tempStr[0] = CHAR_SPACE;
tempStr[1] = EOS;
charsStr = buffer;
@@ -1395,7 +1439,7 @@ static bool32 sub_801EDC4(void)
static void sub_801EDE0(void)
{
u8 *src = sub_801F114();
- StringCopy(gUnknown_02022C84->unkB9[gUnknown_02022C84->unk12], src);
+ StringCopy(gUnknown_02022C84->unkB9[gUnknown_02022C84->currentRow], src);
gUnknown_02022C84->unk18 = 1;
}
@@ -1409,7 +1453,7 @@ static void sub_801EE10(void)
static void sub_801EE2C(void)
{
int i;
- for (i = 0; i < 10; i++)
+ for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++)
StringCopy(gSaveBlock1Ptr->unk3C88[i], gUnknown_02022C84->unkB9[i]);
}
@@ -1551,15 +1595,15 @@ static bool32 sub_801EFF8(u8 *arg0, u8 *arg1)
return FALSE;
}
-static u8 sub_801F0B0(void)
+static u8 GetCurrentKeyboardPage(void)
{
- return gUnknown_02022C84->unk10;
+ return gUnknown_02022C84->currentPage;
}
static void sub_801F0BC(u8 *arg0, u8 *arg1)
{
*arg0 = gUnknown_02022C84->unk11;
- *arg1 = gUnknown_02022C84->unk12;
+ *arg1 = gUnknown_02022C84->currentRow;
}
static u8 *sub_801F0D0(void)
@@ -2528,7 +2572,7 @@ static void sub_8020118(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4)
static void sub_80201A4(void)
{
- u8 var0;
+ u8 page;
int i;
int var1;
u16 left;
@@ -2538,11 +2582,11 @@ static void sub_80201A4(void)
u8 *str2;
FillWindowPixelBuffer(2, PIXEL_FILL(15));
- var0 = sub_801F0B0();
+ page = GetCurrentKeyboardPage();
sp[0] = 0;
sp[1] = 14;
sp[2] = 13;
- if (var0 != 3)
+ if (page != UNION_ROOM_KB_PAGE_COUNT)
{
str = &sp[4];
str[0] = EXT_CTRL_CODE_BEGIN;
@@ -2550,15 +2594,15 @@ static void sub_80201A4(void)
var1 = 8;
str[2] = var1;
left = var1;
- if (var0 == 2)
+ if (page == UNION_ROOM_KB_PAGE_EMOJI)
left = 6;
- for (i = 0, top = 0; i < 10; i++, top += 12)
+ for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12)
{
- if (!gUnknown_082F2BA8[var0][i])
+ if (!sUnionRoomKeyboardText[page][i])
return;
- StringCopy(&sp[7], gUnknown_082F2BA8[var0][i]);
+ StringCopy(&sp[7], sUnionRoomKeyboardText[page][i]);
AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]);
}
}
@@ -2631,7 +2675,7 @@ static void sub_80203B0(void)
FillWindowPixelBuffer(3, PIXEL_FILL(1));
DrawTextBorderOuter(3, 1, 13);
PrintTextArray(3, 2, 8, 1, 14, 5, gUnknown_082F2DC8);
- sub_81983AC(3, 2, 0, 1, 14, 5, sub_801F0B0());
+ sub_81983AC(3, 2, 0, 1, 14, 5, GetCurrentKeyboardPage());
PutWindowTilemap(3);
}
@@ -2820,9 +2864,9 @@ static void sub_802091C(bool32 invisible)
static void sub_802093C(void)
{
u8 x, y;
- u8 var2 = sub_801F0B0();
+ u8 page = GetCurrentKeyboardPage();
sub_801F0BC(&x, &y);
- if (var2 != 3)
+ if (page != UNION_ROOM_KB_PAGE_COUNT)
{
StartSpriteAnim(gUnknown_02022C8C->unk0, 0);
gUnknown_02022C8C->unk0->pos1.x = x * 8 + 10;
@@ -2845,7 +2889,7 @@ static void sub_80209AC(int arg0)
static void sub_80209E0(void)
{
- if (sub_801F0B0() != 3)
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
StartSpriteAnim(gUnknown_02022C8C->unk0, 1);
else
StartSpriteAnim(gUnknown_02022C8C->unk0, 3);
@@ -2860,7 +2904,7 @@ static bool32 sub_8020A1C(void)
if (++gUnknown_02022C8C->unk14 > 3)
{
- if (sub_801F0B0() != 3)
+ if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT)
StartSpriteAnim(gUnknown_02022C8C->unk0, 0);
else
StartSpriteAnim(gUnknown_02022C8C->unk0, 2);
@@ -2914,7 +2958,7 @@ static void sub_8020B20(void)
static void sub_8020B80(void)
{
- if (sub_801F0B0() == 3)
+ if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT)
{
if (sub_801F0DC() != 0)
{
diff --git a/src/unk_pokedex_area_screen_helper.c b/src/unk_pokedex_area_screen_helper.c
index 0041d628c..9b2401cb2 100644
--- a/src/unk_pokedex_area_screen_helper.c
+++ b/src/unk_pokedex_area_screen_helper.c
@@ -2,7 +2,7 @@
#include "main.h"
#include "menu.h"
#include "bg.h"
-#include "alloc.h"
+#include "malloc.h"
#include "palette.h"
#include "unk_pokedex_area_screen_helper.h"
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index 655f38def..4d7605c50 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "main.h"
#include "pokeblock.h"
-#include "alloc.h"
+#include "malloc.h"
#include "decompress.h"
#include "graphics.h"
#include "palette.h"
diff --git a/src/water.c b/src/water.c
index 4480c3f43..a2fe4c56f 100644
--- a/src/water.c
+++ b/src/water.c
@@ -39,7 +39,7 @@ void sub_8108B94(struct Sprite *);
void sub_8108BE0(struct Sprite *);
void sub_8108C08(struct Sprite *);
void sub_8108C54(struct Sprite *);
-void sub_8108CDC(struct Sprite *);
+void AnimWaterPulseRing_Step(struct Sprite *);
void sub_810756C(u8);
void sub_81076F4(u8);
void sub_8107B84(u8);
@@ -54,7 +54,7 @@ void sub_810871C(struct Task*, u8);
void sub_8108AC0(struct Task*);
void sub_8108D54(struct Sprite*, int, int);
-extern const union AffineAnimCmd *const gUnknown_08593420[];
+extern const union AffineAnimCmd *const gGrowingRingAffineAnimTable[];
extern const union AffineAnimCmd *const gUnknown_08596208[];
extern const union AnimCmd *const gUnknown_08595AB8[];
@@ -83,7 +83,7 @@ const struct SpriteTemplate gUnknown_08595020 =
{
.tileTag = ANIM_TAG_RAIN_DROPS,
.paletteTag = ANIM_TAG_RAIN_DROPS,
- .oam = &gUnknown_08524954,
+ .oam = &gOamData_AffineOff_ObjNormal_16x32,
.anims = gUnknown_0859501C,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -119,7 +119,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8595068 =
{
.tileTag = ANIM_TAG_BUBBLE,
.paletteTag = ANIM_TAG_BUBBLE,
- .oam = &gUnknown_08524A8C,
+ .oam = &gOamData_AffineNormal_ObjBlend_16x16,
.anims = gUnknown_08595064,
.images = NULL,
.affineAnims = gUnknown_08595050,
@@ -161,7 +161,7 @@ const struct SpriteTemplate gUnknown_085950B4 =
{
.tileTag = ANIM_TAG_RAINBOW_RINGS,
.paletteTag = ANIM_TAG_RAINBOW_RINGS,
- .oam = &gUnknown_08524A04,
+ .oam = &gOamData_AffineDouble_ObjNormal_8x16,
.anims = gUnknown_08595090,
.images = NULL,
.affineAnims = gUnknown_085950B0,
@@ -186,7 +186,7 @@ const struct SpriteTemplate gUnknown_085950E4 =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WATER_ORB,
- .oam = &gUnknown_08524A2C,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gUnknown_085950E0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -197,7 +197,7 @@ const struct SpriteTemplate gUnknown_085950FC =
{
.tileTag = ANIM_TAG_BROWN_ORB,
.paletteTag = ANIM_TAG_BROWN_ORB,
- .oam = &gUnknown_08524A2C,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gUnknown_085950E0,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -208,7 +208,7 @@ const struct SpriteTemplate gUnknown_08595114 =
{
.tileTag = ANIM_TAG_GLOWY_RED_ORB,
.paletteTag = ANIM_TAG_GLOWY_RED_ORB,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -219,7 +219,7 @@ const struct SpriteTemplate gUnknown_0859512C =
{
.tileTag = ANIM_TAG_GLOWY_GREEN_ORB,
.paletteTag = ANIM_TAG_GLOWY_GREEN_ORB,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -243,7 +243,7 @@ const struct SpriteTemplate gUnknown_08595158 =
{
.tileTag = ANIM_TAG_SMALL_EMBER,
.paletteTag = ANIM_TAG_SMALL_EMBER,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gUnknown_08595154,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -254,10 +254,10 @@ const struct SpriteTemplate gUnknown_08595170 =
{
.tileTag = ANIM_TAG_BLUE_RING,
.paletteTag = ANIM_TAG_BLUE_RING,
- .oam = &gUnknown_08524A14,
+ .oam = &gOamData_AffineDouble_ObjNormal_16x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_08593420,
+ .affineAnims = gGrowingRingAffineAnimTable,
.callback = sub_81075EC,
};
@@ -289,7 +289,7 @@ const struct SpriteTemplate gUnknown_085951C0 =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WATER_ORB,
- .oam = &gUnknown_08524AEC,
+ .oam = &gOamData_AffineDouble_ObjBlend_16x16,
.anims = gUnknown_085950E0,
.images = NULL,
.affineAnims = gUnknown_085951B8,
@@ -300,7 +300,7 @@ const struct SpriteTemplate gUnknown_085951D8 =
{
.tileTag = ANIM_TAG_WATER_ORB,
.paletteTag = ANIM_TAG_WATER_ORB,
- .oam = &gUnknown_08524AEC,
+ .oam = &gOamData_AffineDouble_ObjBlend_16x16,
.anims = gUnknown_085950E0,
.images = NULL,
.affineAnims = gUnknown_085951BC,
@@ -333,18 +333,18 @@ const struct SpriteTemplate gUnknown_08595208 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_08524A2C,
+ .oam = &gOamData_AffineOff_ObjBlend_16x16,
.anims = gUnknown_08595200,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A78AC,
+ .callback = AnimThrowProjectile,
};
const struct SpriteTemplate gUnknown_08595220 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_08524AEC,
+ .oam = &gOamData_AffineDouble_ObjBlend_16x16,
.anims = gUnknown_08595204,
.images = NULL,
.affineAnims = gUnknown_08596208,
@@ -355,7 +355,7 @@ const struct SpriteTemplate gUnknown_08595238 =
{
.tileTag = ANIM_TAG_ICE_CRYSTALS,
.paletteTag = ANIM_TAG_ICE_CRYSTALS,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gUnknown_08595AB8,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -366,7 +366,7 @@ const struct SpriteTemplate gUnknown_08595250 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -377,7 +377,7 @@ const struct SpriteTemplate gUnknown_08595268 =
{
.tileTag = ANIM_TAG_GLOWY_BLUE_ORB,
.paletteTag = ANIM_TAG_GLOWY_BLUE_ORB,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -449,7 +449,7 @@ const struct SpriteTemplate gUnknown_085952F8 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gUnknown_08595298,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -460,7 +460,7 @@ const struct SpriteTemplate gUnknown_08595310 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_08524964,
+ .oam = &gOamData_AffineNormal_ObjNormal_8x8,
.anims = gUnknown_08595298,
.images = NULL,
.affineAnims = gUnknown_085952EC,
@@ -471,7 +471,7 @@ const struct SpriteTemplate gUnknown_08595328 =
{
.tileTag = ANIM_TAG_SMALL_BUBBLES,
.paletteTag = ANIM_TAG_SMALL_BUBBLES,
- .oam = &gUnknown_0852496C,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
.anims = gUnknown_085952A0,
.images = NULL,
.affineAnims = gUnknown_085952F4,
@@ -1975,17 +1975,17 @@ void sub_8108C54(struct Sprite *sprite)
}
}
-void sub_8108C94(struct Sprite *sprite)
+void AnimWaterPulseRing(struct Sprite *sprite)
{
InitSpritePosToAnimAttacker(sprite, TRUE);
sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
sprite->data[3] = gBattleAnimArgs[2];
sprite->data[4] = gBattleAnimArgs[3];
- sprite->callback = sub_8108CDC;
+ sprite->callback = AnimWaterPulseRing_Step;
}
-void sub_8108CDC(struct Sprite *sprite)
+void AnimWaterPulseRing_Step(struct Sprite *sprite)
{
int xDiff = sprite->data[1] - sprite->pos1.x;
int yDiff = sprite->data[2] - sprite->pos1.y;
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 332bbfb99..530e5e323 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -197,34 +197,35 @@ enum
static u8 ChooseWildMonIndex_Fishing(u8 rod)
{
u8 wildMonIndex = 0;
- u8 rand = Random() % ENCOUNTER_CHANCE_FISHING_MONS_TOTAL;
+ u8 rand = Random() % max(max(ENCOUNTER_CHANCE_FISHING_MONS_OLD_ROD_TOTAL, ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_TOTAL),
+ ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_TOTAL);
switch (rod)
{
case OLD_ROD:
- if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_0)
+ if (rand < ENCOUNTER_CHANCE_FISHING_MONS_OLD_ROD_SLOT_0)
wildMonIndex = 0;
else
wildMonIndex = 1;
break;
case GOOD_ROD:
- if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_2)
+ if (rand < ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_2)
wildMonIndex = 2;
- if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_2 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_3)
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_2 && rand < ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_3)
wildMonIndex = 3;
- if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_3 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_4)
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_3 && rand < ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_4)
wildMonIndex = 4;
break;
case SUPER_ROD:
- if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_5)
+ if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_5)
wildMonIndex = 5;
- if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_5 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_6)
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_5 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_6)
wildMonIndex = 6;
- if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_6 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_7)
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_6 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_7)
wildMonIndex = 7;
- if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_7 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_8)
+ if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_7 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_8)
wildMonIndex = 8;
- if (rand == ENCOUNTER_CHANCE_FISHING_MONS_SLOT_8)
+ if (rand == ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_8)
wildMonIndex = 9;
break;
}
diff --git a/src/window.c b/src/window.c
deleted file mode 100644
index fbce57743..000000000
--- a/src/window.c
+++ /dev/null
@@ -1,721 +0,0 @@
-#include "global.h"
-#include "window.h"
-#include "alloc.h"
-#include "bg.h"
-#include "blit.h"
-
-u32 filler_03002F58;
-u32 filler_03002F5C;
-// This global is set to 0 and never changed.
-u8 gTransparentTileNumber;
-u32 filler_03002F64;
-void *gUnknown_03002F70[4];
-extern u32 gUnneededFireRedVariable;
-
-#define WINDOWS_MAX 32
-
-EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0};
-EWRAM_DATA static struct Window* sWindowPtr = NULL;
-EWRAM_DATA static u16 sWindowSize = 0;
-
-static u8 GetNumActiveWindowsOnBg(u8 bgId);
-static u8 GetNumActiveWindowsOnBg8Bit(u8 bgId);
-
-static const struct WindowTemplate sDummyWindowTemplate = DUMMY_WIN_TEMPLATE;
-
-static void nullsub_8(void)
-{
-
-}
-
-bool16 InitWindows(const struct WindowTemplate *templates)
-{
- int i;
- void *bgTilemapBuffer;
- int j;
- u8 bgLayer;
- u16 attrib;
- u8* allocatedTilemapBuffer;
- int allocatedBaseBlock;
-
- for (i = 0; i < 0x4; ++i)
- {
- bgTilemapBuffer = GetBgTilemapBuffer(i);
- if (bgTilemapBuffer != NULL)
- gUnknown_03002F70[i] = nullsub_8;
- else
- gUnknown_03002F70[i] = bgTilemapBuffer;
- }
-
- for (i = 0; i < 0x20; ++i)
- {
- gWindows[i].window = sDummyWindowTemplate;
- gWindows[i].tileData = NULL;
- }
-
- for (i = 0, allocatedBaseBlock = 0, bgLayer = templates[i].bg; bgLayer != 0xFF && i < 0x20; ++i, bgLayer = templates[i].bg)
- {
- if (gUnneededFireRedVariable == 1)
- {
- allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, templates[i].width * templates[i].height, 0);
- if (allocatedBaseBlock == -1)
- return FALSE;
- }
-
- if (gUnknown_03002F70[bgLayer] == NULL)
- {
- attrib = GetBgAttribute(bgLayer, BG_ATTR_METRIC);
-
- if (attrib != 0xFFFF)
- {
- allocatedTilemapBuffer = AllocZeroed(attrib);
-
- if (allocatedTilemapBuffer == NULL)
- {
- FreeAllWindowBuffers();
- return FALSE;
- }
-
- for (j = 0; j < attrib; ++j)
- allocatedTilemapBuffer[j] = 0;
-
- gUnknown_03002F70[bgLayer] = allocatedTilemapBuffer;
- SetBgTilemapBuffer(bgLayer, allocatedTilemapBuffer);
- }
- }
-
- allocatedTilemapBuffer = AllocZeroed((u16)(0x20 * (templates[i].width * templates[i].height)));
-
- if (allocatedTilemapBuffer == NULL)
- {
- if ((GetNumActiveWindowsOnBg(bgLayer) == 0) && (gUnknown_03002F70[bgLayer] != nullsub_8))
- {
- Free(gUnknown_03002F70[bgLayer]);
- gUnknown_03002F70[bgLayer] = allocatedTilemapBuffer;
- }
-
- return FALSE;
- }
-
- gWindows[i].tileData = allocatedTilemapBuffer;
- gWindows[i].window = templates[i];
-
- if (gUnneededFireRedVariable == 1)
- {
- gWindows[i].window.baseBlock = allocatedBaseBlock;
- DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, templates[i].width * templates[i].height, 1);
- }
- }
-
- gTransparentTileNumber = 0;
- return TRUE;
-}
-
-u16 AddWindow(const struct WindowTemplate *template)
-{
- u16 win;
- u8 bgLayer;
- int allocatedBaseBlock;
- u16 attrib;
- u8 *allocatedTilemapBuffer;
- int i;
-
- for (win = 0; win < WINDOWS_MAX; ++win)
- {
- if ((bgLayer = gWindows[win].window.bg) == 0xFF)
- break;
- }
-
- if (win == WINDOWS_MAX)
- return 0xFF;
-
- bgLayer = template->bg;
- allocatedBaseBlock = 0;
-
- if (gUnneededFireRedVariable == 1)
- {
- allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, template->width * template->height, 0);
-
- if (allocatedBaseBlock == -1)
- return 0xFF;
- }
-
- if (gUnknown_03002F70[bgLayer] == NULL)
- {
- attrib = GetBgAttribute(bgLayer, BG_ATTR_METRIC);
-
- if (attrib != 0xFFFF)
- {
- allocatedTilemapBuffer = AllocZeroed(attrib);
-
- if (allocatedTilemapBuffer == NULL)
- return 0xFF;
-
- for (i = 0; i < attrib; ++i)
- allocatedTilemapBuffer[i] = 0;
-
- gUnknown_03002F70[bgLayer] = allocatedTilemapBuffer;
- SetBgTilemapBuffer(bgLayer, allocatedTilemapBuffer);
- }
- }
-
- allocatedTilemapBuffer = AllocZeroed((u16)(0x20 * (template->width * template->height)));
-
- if (allocatedTilemapBuffer == NULL)
- {
- if ((GetNumActiveWindowsOnBg(bgLayer) == 0) && (gUnknown_03002F70[bgLayer] != nullsub_8))
- {
- Free(gUnknown_03002F70[bgLayer]);
- gUnknown_03002F70[bgLayer] = allocatedTilemapBuffer;
- }
- return 0xFF;
- }
-
- gWindows[win].tileData = allocatedTilemapBuffer;
- gWindows[win].window = *template;
-
- if (gUnneededFireRedVariable == 1)
- {
- gWindows[win].window.baseBlock = allocatedBaseBlock;
- DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, gWindows[win].window.width * gWindows[win].window.height, 1);
- }
-
- return win;
-}
-
-int AddWindowWithoutTileMap(const struct WindowTemplate *template)
-{
- u16 win;
- u8 bgLayer;
- int allocatedBaseBlock;
-
- for (win = 0; win < WINDOWS_MAX; ++win)
- {
- if (gWindows[win].window.bg == 0xFF)
- break;
- }
-
- if (win == WINDOWS_MAX)
- return 0xFF;
-
- bgLayer = template->bg;
- allocatedBaseBlock = 0;
-
- if (gUnneededFireRedVariable == 1)
- {
- allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, template->width * template->height, 0);
-
- if (allocatedBaseBlock == -1)
- return 0xFF;
- }
-
- gWindows[win].window = *template;
-
- if (gUnneededFireRedVariable == 1)
- {
- gWindows[win].window.baseBlock = allocatedBaseBlock;
- DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, gWindows[win].window.width * gWindows[win].window.height, 1);
- }
-
- return win;
-}
-
-void RemoveWindow(u8 windowId)
-{
- u8 bgLayer = gWindows[windowId].window.bg;
-
- if (gUnneededFireRedVariable == 1)
- {
- DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, gWindows[windowId].window.baseBlock, gWindows[windowId].window.width * gWindows[windowId].window.height, 2);
- }
-
- gWindows[windowId].window = sDummyWindowTemplate;
-
- if (GetNumActiveWindowsOnBg(bgLayer) == 0)
- {
- if (gUnknown_03002F70[bgLayer] != nullsub_8)
- {
- Free(gUnknown_03002F70[bgLayer]);
- gUnknown_03002F70[bgLayer] = 0;
- }
- }
-
- if (gWindows[windowId].tileData != NULL)
- {
- Free(gWindows[windowId].tileData);
- gWindows[windowId].tileData = NULL;
- }
-}
-
-void FreeAllWindowBuffers(void)
-{
- int i;
-
- for (i = 0; i < 4; ++i)
- {
- if (gUnknown_03002F70[i] != NULL && gUnknown_03002F70[i] != nullsub_8)
- {
- Free(gUnknown_03002F70[i]);
- gUnknown_03002F70[i] = NULL;
- }
- }
-
- for (i = 0; i < 0x20; ++i)
- {
- if (gWindows[i].tileData != NULL)
- {
- Free(gWindows[i].tileData);
- gWindows[i].tileData = NULL;
- }
- }
-}
-
-void CopyWindowToVram(u8 windowId, u8 mode)
-{
- struct Window windowLocal = gWindows[windowId];
- u16 windowSize = 32 * (windowLocal.window.width * windowLocal.window.height);
-
- switch (mode)
- {
- case 1:
- CopyBgTilemapBufferToVram(windowLocal.window.bg);
- break;
- case 2:
- LoadBgTiles(windowLocal.window.bg, windowLocal.tileData, windowSize, windowLocal.window.baseBlock);
- break;
- case 3:
- LoadBgTiles(windowLocal.window.bg, windowLocal.tileData, windowSize, windowLocal.window.baseBlock);
- CopyBgTilemapBufferToVram(windowLocal.window.bg);
- break;
- }
-}
-
-void CopyWindowRectToVram(u32 windowId, u32 mode, u32 x, u32 y, u32 w, u32 h)
-{
- struct Window windowLocal;
- int rectSize;
- int rectPos;
-
- if (w != 0 && h != 0)
- {
- windowLocal = gWindows[windowId];
-
- rectSize = ((h - 1) * windowLocal.window.width);
- rectSize += (windowLocal.window.width - x);
- rectSize -= (windowLocal.window.width - (x + w));
- rectSize *= 32;
-
- rectPos = (y * windowLocal.window.width) + x;
-
- switch (mode)
- {
- case 1:
- CopyBgTilemapBufferToVram(windowLocal.window.bg);
- break;
- case 2:
- LoadBgTiles(windowLocal.window.bg, windowLocal.tileData + (rectPos * 32), rectSize, windowLocal.window.baseBlock + rectPos);
- break;
- case 3:
- LoadBgTiles(windowLocal.window.bg, windowLocal.tileData + (rectPos * 32), rectSize, windowLocal.window.baseBlock + rectPos);
- CopyBgTilemapBufferToVram(windowLocal.window.bg);
- break;
- }
- }
-}
-
-void PutWindowTilemap(u8 windowId)
-{
- struct Window windowLocal = gWindows[windowId];
-
- WriteSequenceToBgTilemapBuffer(
- windowLocal.window.bg,
- GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE) + windowLocal.window.baseBlock,
- windowLocal.window.tilemapLeft,
- windowLocal.window.tilemapTop,
- windowLocal.window.width,
- windowLocal.window.height,
- windowLocal.window.paletteNum,
- 1);
-}
-
-void PutWindowRectTilemapOverridePalette(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 palette)
-{
- struct Window windowLocal = gWindows[windowId];
- u16 currentRow = windowLocal.window.baseBlock + (y * windowLocal.window.width) + x + GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE);
- int i;
-
- for (i = 0; i < height; ++i)
- {
- WriteSequenceToBgTilemapBuffer(
- windowLocal.window.bg,
- currentRow,
- windowLocal.window.tilemapLeft + x,
- windowLocal.window.tilemapTop + y + i,
- width,
- 1,
- palette,
- 1);
-
- currentRow += windowLocal.window.width;
- }
-}
-
-// Fills a window with transparent tiles.
-void ClearWindowTilemap(u8 windowId)
-{
- struct Window windowLocal = gWindows[windowId];
-
- FillBgTilemapBufferRect(
- windowLocal.window.bg,
- gTransparentTileNumber,
- windowLocal.window.tilemapLeft,
- windowLocal.window.tilemapTop,
- windowLocal.window.width,
- windowLocal.window.height,
- windowLocal.window.paletteNum);
-}
-
-void PutWindowRectTilemap(u8 windowId, u8 x, u8 y, u8 width, u8 height)
-{
- struct Window windowLocal = gWindows[windowId];
- u16 currentRow = windowLocal.window.baseBlock + (y * windowLocal.window.width) + x + GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE);
- int i;
-
- for (i = 0; i < height; ++i)
- {
- WriteSequenceToBgTilemapBuffer(
- windowLocal.window.bg,
- currentRow,
- windowLocal.window.tilemapLeft + x,
- windowLocal.window.tilemapTop + y + i,
- width,
- 1,
- windowLocal.window.paletteNum,
- 1);
-
- currentRow += windowLocal.window.width;
- }
-}
-
-void BlitBitmapToWindow(u8 windowId, const u8 *pixels, u16 x, u16 y, u16 width, u16 height)
-{
- BlitBitmapRectToWindow(windowId, pixels, 0, 0, width, height, x, y, width, height);
-}
-
-void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight)
-{
- struct Bitmap sourceRect;
- struct Bitmap destRect;
-
- sourceRect.pixels = (u8*)pixels;
- sourceRect.width = srcWidth;
- sourceRect.height = srcHeight;
-
- destRect.pixels = gWindows[windowId].tileData;
- destRect.width = 8 * gWindows[windowId].window.width;
- destRect.height = 8 * gWindows[windowId].window.height;
-
- BlitBitmapRect4Bit(&sourceRect, &destRect, srcX, srcY, destX, destY, rectWidth, rectHeight, 0);
-}
-
-static void BlitBitmapRectToWindowWithColorKey(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 colorKey)
-{
- struct Bitmap sourceRect;
- struct Bitmap destRect;
-
- sourceRect.pixels = (u8*)pixels;
- sourceRect.width = srcWidth;
- sourceRect.height = srcHeight;
-
- destRect.pixels = gWindows[windowId].tileData;
- destRect.width = 8 * gWindows[windowId].window.width;
- destRect.height = 8 * gWindows[windowId].window.height;
-
- BlitBitmapRect4Bit(&sourceRect, &destRect, srcX, srcY, destX, destY, rectWidth, rectHeight, colorKey);
-}
-
-void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height)
-{
- struct Bitmap pixelRect;
-
- pixelRect.pixels = gWindows[windowId].tileData;
- pixelRect.width = 8 * gWindows[windowId].window.width;
- pixelRect.height = 8 * gWindows[windowId].window.height;
-
- FillBitmapRect4Bit(&pixelRect, x, y, width, height, fillValue);
-}
-
-void CopyToWindowPixelBuffer(u8 windowId, const void *src, u16 size, u16 tileOffset)
-{
- if (size != 0)
- CpuCopy16(src, gWindows[windowId].tileData + (0x20 * tileOffset), size);
- else
- LZ77UnCompWram(src, gWindows[windowId].tileData + (0x20 * tileOffset));
-}
-
-// Sets all pixels within the window to the fillValue color.
-void FillWindowPixelBuffer(u8 windowId, u8 fillValue)
-{
- int fillSize = gWindows[windowId].window.width * gWindows[windowId].window.height;
- CpuFastFill8(fillValue, gWindows[windowId].tileData, 0x20 * fillSize);
-}
-
-#define MOVE_TILES_DOWN(a) \
-{ \
- destOffset = i + (a); \
- srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \
- if (srcOffset < size) \
- *(u32*)(tileData + destOffset) = *(u32*)(tileData + srcOffset); \
- else \
- *(u32*)(tileData + destOffset) = fillValue32; \
- distanceLoop++; \
-}
-
-#define MOVE_TILES_UP(a) \
-{ \
- destOffset = i + (a); \
- srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \
- if (srcOffset < size) \
- *(u32*)(tileData - destOffset) = *(u32*)(tileData - srcOffset); \
- else \
- *(u32*)(tileData - destOffset) = fillValue32; \
- distanceLoop++; \
-}
-
-void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue)
-{
- struct WindowTemplate window = gWindows[windowId].window;
- u8 *tileData = gWindows[windowId].tileData;
- u32 fillValue32 = (fillValue << 24) | (fillValue << 16) | (fillValue << 8) | fillValue;
- s32 size = window.height * window.width * 32;
- u32 width = window.width;
- s32 i;
- s32 srcOffset, destOffset;
- u32 distanceLoop;
-
- switch (direction)
- {
- case 0:
- for (i = 0; i < size; i += 32)
- {
- distanceLoop = distance;
- MOVE_TILES_DOWN(0)
- MOVE_TILES_DOWN(4)
- MOVE_TILES_DOWN(8)
- MOVE_TILES_DOWN(12)
- MOVE_TILES_DOWN(16)
- MOVE_TILES_DOWN(20)
- MOVE_TILES_DOWN(24)
- MOVE_TILES_DOWN(28)
- }
- break;
- case 1:
- tileData += size - 4;
- for (i = 0; i < size; i += 32)
- {
- distanceLoop = distance;
- MOVE_TILES_UP(0)
- MOVE_TILES_UP(4)
- MOVE_TILES_UP(8)
- MOVE_TILES_UP(12)
- MOVE_TILES_UP(16)
- MOVE_TILES_UP(20)
- MOVE_TILES_UP(24)
- MOVE_TILES_UP(28)
- }
- break;
- case 2:
- break;
- }
-}
-
-void CallWindowFunction(u8 windowId, void ( *func)(u8, u8, u8, u8, u8, u8))
-{
- struct WindowTemplate window = gWindows[windowId].window;
- func(window.bg, window.tilemapLeft, window.tilemapTop, window.width, window.height, window.paletteNum);
-}
-
-bool8 SetWindowAttribute(u8 windowId, u8 attributeId, u32 value)
-{
- switch (attributeId)
- {
- case WINDOW_TILEMAP_LEFT:
- gWindows[windowId].window.tilemapLeft = value;
- return FALSE;
- case WINDOW_TILEMAP_TOP:
- gWindows[windowId].window.tilemapTop = value;
- return FALSE;
- case WINDOW_PALETTE_NUM:
- gWindows[windowId].window.paletteNum = value;
- return FALSE;
- case WINDOW_BASE_BLOCK:
- gWindows[windowId].window.baseBlock = value;
- return FALSE;
- case WINDOW_TILE_DATA:
- gWindows[windowId].tileData = (u8*)(value);
- return TRUE;
- case WINDOW_BG:
- case WINDOW_WIDTH:
- case WINDOW_HEIGHT:
- default:
- return TRUE;
- }
-}
-
-u32 GetWindowAttribute(u8 windowId, u8 attributeId)
-{
- switch (attributeId)
- {
- case WINDOW_BG:
- return gWindows[windowId].window.bg;
- case WINDOW_TILEMAP_LEFT:
- return gWindows[windowId].window.tilemapLeft;
- case WINDOW_TILEMAP_TOP:
- return gWindows[windowId].window.tilemapTop;
- case WINDOW_WIDTH:
- return gWindows[windowId].window.width;
- case WINDOW_HEIGHT:
- return gWindows[windowId].window.height;
- case WINDOW_PALETTE_NUM:
- return gWindows[windowId].window.paletteNum;
- case WINDOW_BASE_BLOCK:
- return gWindows[windowId].window.baseBlock;
- case WINDOW_TILE_DATA:
- return (u32)(gWindows[windowId].tileData);
- default:
- return 0;
- }
-}
-
-static u8 GetNumActiveWindowsOnBg(u8 bgId)
-{
- u8 windowsNum = 0;
- s32 i;
- for (i = 0; i < WINDOWS_MAX; i++)
- {
- if (gWindows[i].window.bg == bgId)
- windowsNum++;
- }
- return windowsNum;
-}
-
-static void nullsub_9(void)
-{
-
-}
-
-u16 AddWindow8Bit(const struct WindowTemplate *template)
-{
- u16 windowId;
- u8* memAddress;
- u8 bgLayer;
-
- for (windowId = 0; windowId < 32; windowId++)
- {
- if (gWindows[windowId].window.bg == 0xFF)
- break;
- }
- if (windowId == WINDOWS_MAX)
- return 0xFF;
- bgLayer = template->bg;
- if (gUnknown_03002F70[bgLayer] == 0)
- {
- u16 attribute = GetBgAttribute(bgLayer, BG_ATTR_METRIC);
- if (attribute != 0xFFFF)
- {
- s32 i;
- memAddress = Alloc(attribute);
- if (memAddress == NULL)
- return 0xFF;
- for (i = 0; i < attribute; i++) // if we're going to zero out the memory anyway, why not call AllocZeroed?
- memAddress[i] = 0;
- gUnknown_03002F70[bgLayer] = memAddress;
- SetBgTilemapBuffer(bgLayer, memAddress);
- }
- }
- memAddress = Alloc((u16)(0x40 * (template->width * template->height)));
- if (memAddress == NULL)
- {
- if (GetNumActiveWindowsOnBg8Bit(bgLayer) == 0 && gUnknown_03002F70[bgLayer] != nullsub_9)
- {
- Free(gUnknown_03002F70[bgLayer]);
- gUnknown_03002F70[bgLayer] = NULL;
- }
- return 0xFF;
- }
- else
- {
- gWindows[windowId].tileData = memAddress;
- gWindows[windowId].window = *template;
- return windowId;
- }
-}
-
-void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue)
-{
- s32 i;
- s32 size;
-
- size = (u16)(0x40 * (gWindows[windowId].window.width * gWindows[windowId].window.height));
- for (i = 0; i < size; i++)
- gWindows[windowId].tileData[i] = fillValue;
-}
-
-void FillWindowPixelRect8Bit(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height)
-{
- struct Bitmap pixelRect;
-
- pixelRect.pixels = gWindows[windowId].tileData;
- pixelRect.width = 8 * gWindows[windowId].window.width;
- pixelRect.height = 8 * gWindows[windowId].window.height;
-
- FillBitmapRect8Bit(&pixelRect, x, y, width, height, fillValue);
-}
-
-void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum)
-{
- struct Bitmap sourceRect;
- struct Bitmap destRect;
-
- sourceRect.pixels = (u8*) pixels;
- sourceRect.width = srcWidth;
- sourceRect.height = srcHeight;
-
- destRect.pixels = gWindows[windowId].tileData;
- destRect.width = 8 * gWindows[windowId].window.width;
- destRect.height = 8 * gWindows[windowId].window.height;
-
- BlitBitmapRect4BitTo8Bit(&sourceRect, &destRect, srcX, srcY, destX, destY, rectWidth, rectHeight, 0, paletteNum);
-}
-
-void CopyWindowToVram8Bit(u8 windowId, u8 mode)
-{
- sWindowPtr = &gWindows[windowId];
- sWindowSize = 0x40 * (sWindowPtr->window.width * sWindowPtr->window.height);
-
- switch (mode)
- {
- case 1:
- CopyBgTilemapBufferToVram(sWindowPtr->window.bg);
- break;
- case 2:
- LoadBgTiles(sWindowPtr->window.bg, sWindowPtr->tileData, sWindowSize, sWindowPtr->window.baseBlock);
- break;
- case 3:
- LoadBgTiles(sWindowPtr->window.bg, sWindowPtr->tileData, sWindowSize, sWindowPtr->window.baseBlock);
- CopyBgTilemapBufferToVram(sWindowPtr->window.bg);
- break;
- }
-}
-
-static u8 GetNumActiveWindowsOnBg8Bit(u8 bgId)
-{
- u8 windowsNum = 0;
- s32 i;
- for (i = 0; i < WINDOWS_MAX; i++)
- {
- if (gWindows[i].window.bg == bgId)
- windowsNum++;
- }
- return windowsNum;
-}