summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2020-01-13 20:26:20 -0600
committerMarcus Huderle <huderlem@gmail.com>2020-01-13 20:26:20 -0600
commit5a2d676e71b720e752ca8a624a5795b3b1d7eb6c (patch)
tree6ef755064008dfae8ce2942dc2762670cdabe815 /src
parent5007d279fea5326b41b877703c74fcaa56223364 (diff)
parent22931846d680de2bc585093678db3f5721aab891 (diff)
Merge remote-tracking branch 'upstream' into tustin2121-patch-5
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c210
-rw-r--r--src/anim_mon_front_pics.c2
-rw-r--r--src/apprentice.c1873
-rw-r--r--src/battle_ai_script_commands.c614
-rw-r--r--src/battle_ai_switch_items.c8
-rw-r--r--src/battle_anim.c152
-rw-r--r--src/battle_anim_effects_1.c1528
-rwxr-xr-xsrc/battle_anim_effects_2.c950
-rwxr-xr-xsrc/battle_anim_effects_3.c622
-rw-r--r--src/battle_anim_mons.c30
-rwxr-xr-xsrc/battle_anim_special.c32
-rw-r--r--src/battle_anim_status_effects.c60
-rw-r--r--src/battle_anim_utility_funcs.c10
-rw-r--r--src/battle_arena.c110
-rw-r--r--src/battle_bg.c135
-rw-r--r--src/battle_controller_link_opponent.c6
-rw-r--r--src/battle_controller_link_partner.c6
-rw-r--r--src/battle_controller_opponent.c4
-rw-r--r--src/battle_controller_player.c36
-rw-r--r--src/battle_controller_player_partner.c6
-rw-r--r--src/battle_controller_recorded_opponent.c4
-rw-r--r--src/battle_controller_recorded_player.c6
-rw-r--r--src/battle_controller_wally.c4
-rw-r--r--src/battle_controllers.c50
-rw-r--r--src/battle_dome.c5276
-rw-r--r--src/battle_factory.c161
-rw-r--r--src/battle_factory_screen.c106
-rw-r--r--src/battle_gfx_sfx_util.c8
-rw-r--r--src/battle_interface.c607
-rw-r--r--src/battle_main.c153
-rw-r--r--src/battle_message.c18
-rw-r--r--src/battle_palace.c150
-rw-r--r--src/battle_pike.c365
-rw-r--r--src/battle_pyramid.c446
-rw-r--r--src/battle_pyramid_bag.c67
-rw-r--r--src/battle_records.c2
-rw-r--r--src/battle_script_commands.c1913
-rw-r--r--src/battle_setup.c111
-rw-r--r--src/battle_tent.c280
-rw-r--r--src/battle_tower.c1577
-rw-r--r--src/battle_transition.c31
-rw-r--r--src/battle_util.c30
-rw-r--r--src/battle_util2.c14
-rw-r--r--src/berry.c1
-rw-r--r--src/berry_blender.c47
-rwxr-xr-xsrc/berry_crush.c2664
-rw-r--r--src/berry_fix_program.c56
-rw-r--r--src/berry_tag_screen.c17
-rw-r--r--src/bg.c1305
-rw-r--r--src/bike.c99
-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.c10
-rw-r--r--src/cable_club.c147
-rw-r--r--src/clock.c2
-rw-r--r--src/coins.c7
-rw-r--r--src/contest.c202
-rw-r--r--src/contest_link_80F57C4.c150
-rw-r--r--src/contest_painting.c197
-rw-r--r--src/contest_painting_effects.c1365
-rw-r--r--src/coord_event_weather.c50
-rw-r--r--src/credits.c144
-rw-r--r--src/dark.c10
-rw-r--r--src/data.c2
-rw-r--r--src/data/battle_frontier/apprentice.h982
-rw-r--r--src/data/battle_frontier/battle_frontier_exchange_corner.h99
-rw-r--r--src/data/battle_frontier/battle_frontier_mons.h1766
-rw-r--r--src/data/battle_frontier/battle_frontier_trainer_mons.h20200
-rw-r--r--src/data/battle_frontier/battle_frontier_trainers.h1214
-rw-r--r--src/data/battle_frontier/battle_tent.h2070
-rw-r--r--src/data/battle_frontier/trainer_hill.h133
-rw-r--r--src/data/contest_text_tables.h765
-rw-r--r--src/data/decoration/icon.h245
-rwxr-xr-xsrc/data/field_event_obj/event_object_graphics.h2
-rwxr-xr-xsrc/data/field_event_obj/event_object_graphics_info_pointers.h14
-rwxr-xr-xsrc/data/field_event_obj/event_object_subsprites.h1530
-rwxr-xr-xsrc/data/field_event_obj/field_effect_object_template_pointers.h4
-rwxr-xr-xsrc/data/field_event_obj/field_effect_objects.h40
-rwxr-xr-xsrc/data/field_event_obj/movement_action_func_tables.h20
-rw-r--r--src/data/graphics/decorations.h168
-rw-r--r--src/data/graphics/pokemon.h12
-rw-r--r--src/data/party_menu.h1255
-rw-r--r--src/data/pokemon/item_effects.h6
-rw-r--r--src/data/pokemon/level_up_learnsets.h1
-rw-r--r--src/data/pokemon/trainer_class_lookups.h4
-rw-r--r--src/data/pokemon/tutor_learnsets.h33
-rw-r--r--src/data/script_menu.h1006
-rw-r--r--src/data/text/match_call_messages.h787
-rw-r--r--src/data/trade.h1214
-rw-r--r--src/data/trainer_parties.h1070
-rw-r--r--src/data/trainers.h594
-rw-r--r--src/data/union_room.h1061
-rwxr-xr-xsrc/data/wild_encounters.json7
-rwxr-xr-xsrc/data/wild_encounters.json.txt14
-rw-r--r--src/daycare.c301
-rw-r--r--src/decompress.c2
-rw-r--r--src/decoration.c185
-rw-r--r--src/dewford_trend.c8
-rw-r--r--src/diploma.c2
-rw-r--r--src/dma3_manager.c181
-rw-r--r--src/dodrio_berry_picking.c98
-rw-r--r--src/dragon.c12
-rw-r--r--src/easy_chat.c162
-rw-r--r--src/egg_hatch.c56
-rw-r--r--src/electric.c44
-rwxr-xr-xsrc/ereader_helpers.c18
-rwxr-xr-xsrc/ereader_screen.c32
-rw-r--r--src/event_data.c24
-rw-r--r--src/event_obj_lock.c16
-rw-r--r--src/event_object_movement.c257
-rw-r--r--src/evolution_graphics.c26
-rw-r--r--src/evolution_scene.c64
-rw-r--r--src/field_control_avatar.c90
-rw-r--r--src/field_door.c14
-rw-r--r--src/field_effect.c390
-rwxr-xr-xsrc/field_effect_helpers.c6
-rw-r--r--src/field_player_avatar.c131
-rw-r--r--src/field_poison.c20
-rw-r--r--src/field_region_map.c2
-rw-r--r--src/field_screen_effect.c429
-rw-r--r--src/field_special_scene.c85
-rw-r--r--src/field_specials.c2402
-rw-r--r--src/field_tasks.c17
-rw-r--r--src/field_weather.c88
-rw-r--r--src/field_weather_effect.c456
-rw-r--r--src/fieldmap.c4
-rw-r--r--src/fight.c42
-rw-r--r--src/fire.c42
-rw-r--r--src/fldeff_cut.c12
-rw-r--r--src/fldeff_dig.c2
-rw-r--r--src/fldeff_flash.c16
-rw-r--r--src/fldeff_misc.c88
-rw-r--r--src/fldeff_softboiled.c90
-rw-r--r--src/flying.c865
-rw-r--r--src/frontier_pass.c70
-rw-r--r--src/frontier_util.c873
-rw-r--r--src/ghost.c18
-rw-r--r--src/gpu_regs.c195
-rw-r--r--src/graphics.c67
-rw-r--r--src/ground.c14
-rw-r--r--src/hall_of_fame.c64
-rw-r--r--src/hof_pc.c2
-rw-r--r--src/ice.c42
-rw-r--r--src/image_processing_effects.c1226
-rw-r--r--src/international_string_util.c4
-rw-r--r--src/intro.c116
-rw-r--r--src/intro_credits_graphics.c2
-rw-r--r--src/item.c13
-rw-r--r--src/item_icon.c8
-rwxr-xr-xsrc/item_menu.c141
-rw-r--r--src/item_menu_icons.c32
-rwxr-xr-xsrc/item_use.c589
-rw-r--r--src/libagbsyscall.s116
-rw-r--r--src/link.c61
-rw-r--r--src/link_rfu.c84
-rw-r--r--src/list_menu.c14
-rw-r--r--src/load_save.c2
-rw-r--r--src/mail.c16
-rw-r--r--src/mail_data.c2
-rw-r--r--src/main.c2
-rw-r--r--src/main_menu.c82
-rw-r--r--src/map_name_popup.c2
-rw-r--r--src/match_call.c34
-rw-r--r--src/mauville_old_man.c344
-rw-r--r--src/menu.c58
-rw-r--r--src/menu_helpers.c18
-rw-r--r--src/menu_specialized.c50
-rw-r--r--src/metatile_behavior.c6
-rwxr-xr-xsrc/mevent2.c15
-rw-r--r--src/mevent_801BAAC.c32
-rw-r--r--src/mevent_client.c2
-rw-r--r--src/mevent_news.c1
-rw-r--r--src/mevent_server.c2
-rw-r--r--src/mevent_server_helpers.c2
-rw-r--r--src/mirage_tower.c8
-rw-r--r--src/mon_markings.c32
-rw-r--r--src/money.c6
-rw-r--r--src/mossdeep_gym.c314
-rw-r--r--src/move_relearner.c28
-rw-r--r--src/mystery_event_menu.c2
-rw-r--r--src/mystery_event_script.c2
-rw-r--r--src/mystery_gift.c4
-rw-r--r--src/naming_screen.c342
-rw-r--r--src/new_game.c8
-rw-r--r--src/normal.c20
-rw-r--r--src/option_menu.c53
-rw-r--r--src/overworld.c109
-rwxr-xr-xsrc/party_menu.c5724
-rw-r--r--src/player_pc.c22
-rw-r--r--src/poison.c16
-rw-r--r--src/pokeball.c8
-rw-r--r--src/pokeblock.c20
-rw-r--r--src/pokeblock_feed.c16
-rw-r--r--src/pokedex.c663
-rwxr-xr-xsrc/pokedex_area_screen.c2
-rw-r--r--src/pokedex_cry_screen.c2
-rw-r--r--src/pokemon.c174
-rw-r--r--src/pokemon_animation.c6
-rw-r--r--src/pokemon_icon.c52
-rwxr-xr-xsrc/pokemon_jump.c116
-rw-r--r--src/pokemon_size_record.c4
-rw-r--r--src/pokemon_storage_system.c103
-rw-r--r--src/pokemon_summary_screen.c137
-rw-r--r--src/pokenav.c22
-rw-r--r--src/pokenav_main_menu.c76
-rw-r--r--src/pokenav_match_call_data.c1098
-rw-r--r--src/pokenav_match_call_ui.c57
-rw-r--r--src/pokenav_unk_1.c26
-rw-r--r--src/pokenav_unk_10.c16
-rw-r--r--src/pokenav_unk_2.c59
-rwxr-xr-xsrc/pokenav_unk_3.c296
-rwxr-xr-xsrc/pokenav_unk_4.c824
-rwxr-xr-xsrc/pokenav_unk_5.c14
-rw-r--r--src/pokenav_unk_6.c6
-rw-r--r--src/pokenav_unk_7.c94
-rw-r--r--src/pokenav_unk_8.c28
-rw-r--r--src/pokenav_unk_9.c24
-rw-r--r--src/post_battle_event_funcs.c7
-rw-r--r--src/psychic.c40
-rw-r--r--src/rayquaza_scene.c54
-rw-r--r--src/record_mixing.c106
-rw-r--r--src/recorded_battle.c44
-rw-r--r--src/region_map.c48
-rw-r--r--src/reset_rtc_screen.c18
-rw-r--r--src/reset_save_heap.c6
-rw-r--r--src/rock.c32
-rw-r--r--src/rom_8034C54.c30
-rw-r--r--src/rom_81520A8.c2
-rw-r--r--src/rotating_gate.c4
-rw-r--r--src/rotating_tile_puzzle.c338
-rw-r--r--src/roulette.c62
-rw-r--r--src/safari_zone.c16
-rw-r--r--src/save.c299
-rw-r--r--src/save_failed_screen.c6
-rw-r--r--src/save_location.c10
-rw-r--r--src/scrcmd.c108
-rw-r--r--src/script_menu.c1284
-rw-r--r--src/script_movement.c174
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c174
-rw-r--r--src/secret_base.c541
-rwxr-xr-xsrc/shop.c21
-rw-r--r--src/slot_machine.c8
-rw-r--r--src/smokescreen.c34
-rw-r--r--src/sprite.c1758
-rw-r--r--src/start_menu.c91
-rw-r--r--src/starter_choose.c68
-rw-r--r--src/string_util.c784
-rw-r--r--src/strings.c769
-rw-r--r--src/text.c2540
-rw-r--r--src/title_screen.c36
-rw-r--r--src/trade.c7031
-rw-r--r--src/trader.c10
-rwxr-xr-xsrc/trainer_card.c104
-rw-r--r--src/trainer_hill.c473
-rw-r--r--src/trainer_pokemon_sprites.c4
-rw-r--r--src/trainer_see.c43
-rw-r--r--src/tv.c547
-rw-r--r--src/union_room.c1498
-rw-r--r--src/union_room_battle.c2
-rwxr-xr-xsrc/union_room_chat.c158
-rw-r--r--src/unk_pokedex_area_screen_helper.c2
-rw-r--r--src/unk_transition.c6
-rw-r--r--src/use_pokeblock.c28
-rw-r--r--src/walda_phrase.c2
-rw-r--r--src/water.c52
-rw-r--r--src/wild_encounter.c33
-rw-r--r--src/window.c721
268 files changed, 45081 insertions, 57777 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/anim_mon_front_pics.c b/src/anim_mon_front_pics.c
index b566b7760..d764e10ac 100644
--- a/src/anim_mon_front_pics.c
+++ b/src/anim_mon_front_pics.c
@@ -84,7 +84,7 @@ const u32 gMonFrontPic_Slowpoke[] = INCBIN_U32("graphics/pokemon/slowpoke/anim_f
const u32 gMonFrontPic_Slowbro[] = INCBIN_U32("graphics/pokemon/slowbro/anim_front.4bpp.lz");
const u32 gMonFrontPic_Magnemite[] = INCBIN_U32("graphics/pokemon/magnemite/anim_front.4bpp.lz");
const u32 gMonFrontPic_Magneton[] = INCBIN_U32("graphics/pokemon/magneton/anim_front.4bpp.lz");
-const u32 gMonFrontPic_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetch_d/anim_front.4bpp.lz");
+const u32 gMonFrontPic_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetchd/anim_front.4bpp.lz");
const u32 gMonFrontPic_Doduo[] = INCBIN_U32("graphics/pokemon/doduo/anim_front.4bpp.lz");
const u32 gMonFrontPic_Dodrio[] = INCBIN_U32("graphics/pokemon/dodrio/anim_front.4bpp.lz");
const u32 gMonFrontPic_Seel[] = INCBIN_U32("graphics/pokemon/seel/anim_front.4bpp.lz");
diff --git a/src/apprentice.c b/src/apprentice.c
index 4ad295e1a..2c8959024 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"
@@ -22,1052 +22,117 @@
#include "strings.h"
#include "task.h"
#include "text.h"
-#include "constants/apprentice.h"
+#include "constants/battle_frontier.h"
+#include "constants/easy_chat.h"
#include "constants/items.h"
+#include "constants/pokemon.h"
#include "constants/songs.h"
#include "constants/species.h"
+#include "constants/trainers.h"
#include "constants/moves.h"
+/* Summary of Apprentice, because (as of writing at least) its not very well documented online
+ *
+ * ## Basic info
+ * In the Battle Tower lobby there is an NPC which asks to be taught by the player
+ * They can be any 1 of 16 NPC trainers, each with their own name, class, and set of possible party species
+ * They ask the player a series of questions once per day, and eventually depart the lobby to be replaced by a new Apprentice
+ *
+ * ## Initial Questions
+ * The first question they always ask is a request to be taught, which cannot be rejected
+ * The second question (which follows immediately after) is whether they should participate in Battle Tower Lv 50 or Open Lv
+ * After these opening questions they always ask the player to choose between 2 mons, which they repeat 3 times
+ *
+ * ## Random Questions
+ * After choosing 3 mons for them, the Apprentice will randomly ask between 1 and 8 questions of 4 different types, as follows
+ * - Asking which mon to lead with, which they will only ask at most once
+ * - Asking which move a mon should use, which they will ask at most 5 times
+ * - Asking what held item to give to a mon, which they will ask at most 3 times (once for each mon)
+ * - Asking what they should say when they win a battle, which will always be their final question before departing
+ *
+ * ## After departing
+ * After telling them what they should say when they win a battle they will leave the lobby for a final time
+ * They will then be replaced by a new random Apprentice (they can repeat)
+ * Up to 4 old Apprentices are saved and can be encountered (or partnered with) during challenges of the mode they were told to battle in
+ * They can also be record mixed to and from other Emerald games
+ * Old/record mixed Apprentices are stored in struct Apprentice apprentices of SaveBlock2
+ * and the current Apprentice is stored in struct PlayersApprentice playerApprentice of SaveBlock2
+ */
+
#define PLAYER_APPRENTICE gSaveBlock2Ptr->playerApprentice
+#define CURRENT_QUESTION_NUM PLAYER_APPRENTICE.questionsAnswered - NUM_WHICH_MON_QUESTIONS
-struct Unk030062ECStruct
+struct ApprenticePartyMovesData
{
- u8 unk0;
- u16 unk2[3][5];
- u8 unk20[3][5];
+ u8 moveCounter;
+ u16 moves[MULTI_PARTY_SIZE][NUM_WHICH_MOVE_QUESTIONS];
+ u8 moveSlots[MULTI_PARTY_SIZE][NUM_WHICH_MOVE_QUESTIONS];
};
-struct Unk030062F0Struct
+struct ApprenticeQuestionData
{
- u16 unk0;
- u16 unk2;
- u16 unk4;
- u16 unk6;
+ u16 speciesId;
+ u16 altSpeciesId;
+ u16 moveId1;
+ u16 moveId2;
};
-// data/scripts/apprentice.inc
-extern const u8 gText_082B7229[];
-extern const u8 gText_082B731C[];
-extern const u8 gText_082B735B[];
-extern const u8 gText_082B7423[];
-extern const u8 gText_082B74C1[];
-extern const u8 gText_082B756F[];
-extern const u8 gText_082B75B2[];
-extern const u8 gText_082B763F[];
-extern const u8 gText_082B76AC[];
-extern const u8 gText_082B7772[];
-extern const u8 gText_082B77CE[];
-extern const u8 gText_082B7871[];
-extern const u8 gText_082B78D4[];
-extern const u8 gText_082B7B1A[];
-extern const u8 gText_082B7C13[];
-extern const u8 gText_082B7D18[];
-extern const u8 gText_082B7DD4[];
-extern const u8 gText_082B7EE5[];
-extern const u8 gText_082B7F35[];
-extern const u8 gText_082B7FE8[];
-extern const u8 gText_082B8087[];
-extern const u8 gText_082B822B[];
-extern const u8 gText_082B8286[];
-extern const u8 gText_082B8356[];
-extern const u8 gText_082B83CE[];
-extern const u8 gText_082B84FC[];
-extern const u8 gText_082B8559[];
-extern const u8 gText_082B8656[];
-extern const u8 gText_082B86EA[];
-extern const u8 gText_082B87DA[];
-extern const u8 gText_082B887C[];
-extern const u8 gText_082B8957[];
-extern const u8 gText_082B89C6[];
-extern const u8 gText_082B8ACF[];
-extern const u8 gText_082B8B66[];
-extern const u8 gText_082B8C20[];
-extern const u8 gText_082B8CAA[];
-extern const u8 gText_082B8DD3[];
-extern const u8 gText_082B8E24[];
-extern const u8 gText_082B8ED5[];
-extern const u8 gText_082B8F45[];
-extern const u8 gText_082B905F[];
-extern const u8 gText_082B910E[];
-extern const u8 gText_082B9204[];
-extern const u8 gText_082B929C[];
-extern const u8 gText_082B9438[];
-extern const u8 gText_082B9488[];
-extern const u8 gText_082B9564[];
-extern const u8 gText_082B95D8[];
-extern const u8 gText_082B9763[];
-extern const u8 gText_082B97E5[];
-extern const u8 gText_082B989A[];
-extern const u8 gText_082B992D[];
-extern const u8 gText_082B9A84[];
-extern const u8 gText_082B9AB9[];
-extern const u8 gText_082B9B76[];
-extern const u8 gText_082B9BF2[];
-extern const u8 gText_082B9D83[];
-extern const u8 gText_082B9DF9[];
-extern const u8 gText_082B9EAA[];
-extern const u8 gText_082B9F55[];
-extern const u8 gText_082BA084[];
-extern const u8 gText_082BA11D[];
-extern const u8 gText_082BA1F3[];
-
-extern const u8 gText_082BE50D[];
-extern const u8 gText_082BE5F5[];
-extern const u8 gText_082BE679[];
-extern const u8 gText_082BE71E[];
-extern const u8 gText_082BE762[];
-extern const u8 gText_082BE7F8[];
-extern const u8 gText_082BE850[];
-extern const u8 gText_082BE99C[];
-extern const u8 gText_082BEA1B[];
-extern const u8 gText_082BEAE9[];
-extern const u8 gText_082BEB72[];
-extern const u8 gText_082BEC8E[];
-extern const u8 gText_082BED16[];
-extern const u8 gText_082BEE29[];
-extern const u8 gText_082BEEB4[];
-extern const u8 gText_082BEFE2[];
-extern const u8 gText_082BF04E[];
-extern const u8 gText_082BF11D[];
-extern const u8 gText_082BF1A8[];
-extern const u8 gText_082BF268[];
-extern const u8 gText_082BF2D1[];
-extern const u8 gText_082BF3CF[];
-extern const u8 gText_082BF46A[];
-extern const u8 gText_082BF551[];
-extern const u8 gText_082BF5C3[];
-extern const u8 gText_082BF6E5[];
-extern const u8 gText_082BF773[];
-extern const u8 gText_082BF869[];
-extern const u8 gText_082BF8DD[];
-extern const u8 gText_082BF9BA[];
-extern const u8 gText_082BFA5A[];
-extern const u8 gText_082BFB4E[];
-
-extern const u8 gText_082BA2A3[];
-extern const u8 gText_082BA34E[];
-extern const u8 gText_082BA380[];
-extern const u8 gText_082BA3D2[];
-extern const u8 gText_082BA448[];
-extern const u8 gText_082BA4D3[];
-extern const u8 gText_082BA58C[];
-extern const u8 gText_082BA5BF[];
-extern const u8 gText_082BA5F3[];
-extern const u8 gText_082BA635[];
-extern const u8 gText_082BA6E6[];
-extern const u8 gText_082BA742[];
-extern const u8 gText_082BA770[];
-extern const u8 gText_082BA78F[];
-extern const u8 gText_082BA7D8[];
-extern const u8 gText_082BA867[];
-extern const u8 gText_082BA96B[];
-extern const u8 gText_082BA9B7[];
-extern const u8 gText_082BAA1B[];
-extern const u8 gText_082BAA81[];
-extern const u8 gText_082BAB22[];
-extern const u8 gText_082BAC43[];
-extern const u8 gText_082BAC78[];
-extern const u8 gText_082BAD17[];
-extern const u8 gText_082BADB6[];
-extern const u8 gText_082BAE36[];
-extern const u8 gText_082BAF4E[];
-extern const u8 gText_082BAF8F[];
-extern const u8 gText_082BAFDB[];
-extern const u8 gText_082BB05F[];
-extern const u8 gText_082BB0D4[];
-extern const u8 gText_082BB18C[];
-extern const u8 gText_082BB1CE[];
-extern const u8 gText_082BB242[];
-extern const u8 gText_082BB2D9[];
-extern const u8 gText_082BB370[];
-extern const u8 gText_082BB4C3[];
-extern const u8 gText_082BB4FB[];
-extern const u8 gText_082BB575[];
-extern const u8 gText_082BB5E1[];
-extern const u8 gText_082BB656[];
-extern const u8 gText_082BB6E5[];
-extern const u8 gText_082BB72C[];
-extern const u8 gText_082BB7A2[];
-extern const u8 gText_082BB84A[];
-extern const u8 gText_082BB8CD[];
-extern const u8 gText_082BB970[];
-extern const u8 gText_082BB9AE[];
-extern const u8 gText_082BBA05[];
-extern const u8 gText_082BBA6C[];
-extern const u8 gText_082BBB01[];
-extern const u8 gText_082BBC1C[];
-extern const u8 gText_082BBC4B[];
-extern const u8 gText_082BBCF6[];
-extern const u8 gText_082BBD90[];
-extern const u8 gText_082BBE0B[];
-extern const u8 gText_082BBEE5[];
-extern const u8 gText_082BBF25[];
-extern const u8 gText_082BBFA4[];
-extern const u8 gText_082BC024[];
-extern const u8 gText_082BC0C8[];
-extern const u8 gText_082BC213[];
-extern const u8 gText_082BC247[];
-extern const u8 gText_082BC2DD[];
-extern const u8 gText_082BC373[];
-extern const u8 gText_082BC40E[];
-extern const u8 gText_082BC514[];
-extern const u8 gText_082BC555[];
-extern const u8 gText_082BC5CE[];
-extern const u8 gText_082BC666[];
-extern const u8 gText_082BC714[];
-extern const u8 gText_082BC808[];
-extern const u8 gText_082BC84D[];
-extern const u8 gText_082BC8EA[];
-extern const u8 gText_082BC984[];
-extern const u8 gText_082BCA4D[];
-extern const u8 gText_082BCB75[];
-extern const u8 gText_082BCBA6[];
-extern const u8 gText_082BCBFC[];
-extern const u8 gText_082BCCA4[];
-
-extern const u8 gText_082BFBF2[];
-extern const u8 gText_082BFCAE[];
-extern const u8 gText_082BFD26[];
-extern const u8 gText_082BFDB1[];
-extern const u8 gText_082BFE24[];
-extern const u8 gText_082BFEAD[];
-extern const u8 gText_082BFF0A[];
-extern const u8 gText_082C0032[];
-extern const u8 gText_082C0090[];
-extern const u8 gText_082C016E[];
-extern const u8 gText_082C01F7[];
-extern const u8 gText_082C034C[];
-extern const u8 gText_082C03CA[];
-extern const u8 gText_082C046E[];
-extern const u8 gText_082C04F9[];
-extern const u8 gText_082C0598[];
-extern const u8 gText_082C0602[];
-extern const u8 gText_082C06D8[];
-extern const u8 gText_082C074A[];
-extern const u8 gText_082C0809[];
-extern const u8 gText_082C086E[];
-extern const u8 gText_082C0982[];
-extern const u8 gText_082C0A1D[];
-extern const u8 gText_082C0AFD[];
-extern const u8 gText_082C0B6F[];
-extern const u8 gText_082C0C7D[];
-extern const u8 gText_082C0D0B[];
-extern const u8 gText_082C0DFE[];
-extern const u8 gText_082C0E71[];
-extern const u8 gText_082C0F6D[];
-extern const u8 gText_082C1003[];
-extern const u8 gText_082C1122[];
-
-extern const u8 gText_082BCD68[];
-extern const u8 gText_082BCE64[];
-extern const u8 gText_082BCEF2[];
-extern const u8 gText_082BCF61[];
-extern const u8 gText_082BCFA1[];
-extern const u8 gText_082BD03C[];
-extern const u8 gText_082BD06D[];
-extern const u8 gText_082BD18A[];
-extern const u8 gText_082BD222[];
-extern const u8 gText_082BD325[];
-extern const u8 gText_082BD3B1[];
-extern const u8 gText_082BD493[];
-extern const u8 gText_082BD51C[];
-extern const u8 gText_082BD609[];
-extern const u8 gText_082BD697[];
-extern const u8 gText_082BD797[];
-extern const u8 gText_082BD806[];
-extern const u8 gText_082BD8F5[];
-extern const u8 gText_082BD9BE[];
-extern const u8 gText_082BDAE1[];
-extern const u8 gText_082BDB4E[];
-extern const u8 gText_082BDC6B[];
-extern const u8 gText_082BDD0D[];
-extern const u8 gText_082BDDEC[];
-extern const u8 gText_082BDE68[];
-extern const u8 gText_082BDF4D[];
-extern const u8 gText_082BDFD8[];
-extern const u8 gText_082BE0FD[];
-extern const u8 gText_082BE189[];
-extern const u8 gText_082BE2A5[];
-extern const u8 gText_082BE33E[];
-extern const u8 gText_082BE46C[];
-
-extern const u8 gText_082C11D1[];
-extern const u8 gText_082C12D5[];
-extern const u8 gText_082C13AB[];
-extern const u8 gText_082C1444[];
-extern const u8 gText_082C1501[];
-extern const u8 gText_082C15B6[];
-extern const u8 gText_082C165E[];
-extern const u8 gText_082C174F[];
-extern const u8 gText_082C1862[];
-extern const u8 gText_082C19A0[];
-extern const u8 gText_082C1A76[];
-extern const u8 gText_082C1C16[];
-extern const u8 gText_082C1CF5[];
-extern const u8 gText_082C1DC1[];
-extern const u8 gText_082C1EDC[];
-extern const u8 gText_082C1FEC[];
-extern const u8 gText_082C20D1[];
-extern const u8 gText_082C21FF[];
-extern const u8 gText_082C231C[];
-extern const u8 gText_082C2407[];
-extern const u8 gText_082C24B5[];
-extern const u8 gText_082C25B1[];
-extern const u8 gText_082C2707[];
-extern const u8 gText_082C27D4[];
-extern const u8 gText_082C28D6[];
-extern const u8 gText_082C2A0B[];
-extern const u8 gText_082C2B50[];
-extern const u8 gText_082C2C77[];
-extern const u8 gText_082C2D67[];
-extern const u8 gText_082C2E41[];
-extern const u8 gText_082C2EF5[];
-extern const u8 gText_082C3023[];
-
-extern const u8 gText_082B6EA5[];
-extern const u8 gText_082B6EEC[];
-extern const u8 gText_082B6F16[];
-extern const u8 gText_082B6F4C[];
-extern const u8 gText_082B6F92[];
-extern const u8 gText_082B6FC9[];
-extern const u8 gText_082B700C[];
-extern const u8 gText_082B703A[];
-extern const u8 gText_082B706A[];
-extern const u8 gText_082B709C[];
-extern const u8 gText_082B70CC[];
-extern const u8 gText_082B710A[];
-extern const u8 gText_082B714D[];
-extern const u8 gText_082B7185[];
-extern const u8 gText_082B71C1[];
-extern const u8 gText_082B71F9[];
-
// IWRAM common
-struct Unk030062ECStruct *gUnknown_030062EC;
-struct Unk030062F0Struct *gUnknown_030062F0;
-void (*gUnknown_030062F4)(void);
+struct ApprenticePartyMovesData *gApprenticePartyMovesData;
+struct ApprenticeQuestionData *gApprenticeQuestionData;
+void (*gApprenticeFunc)(void);
// This file's functions.
-static u16 sub_819FF98(u8 arg0);
-static bool8 sub_81A0194(u8 arg0, u16 moveId);
+static u16 GetRandomAlternateMove(u8 monId);
+static bool8 TrySetMove(u8 monId, u16 moveId);
static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId);
static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height);
static void RemoveAndHideWindow(u8 windowId);
static void ExecuteFuncAfterButtonPress(void (*func)(void));
-static void Script_IsPlayersApprenticeActive(void);
-static void Script_SetPlayersApprenticeLvlMode(void);
-static void sub_81A0978(void);
-static void sub_819FC60(void);
-static void sub_81A0984(void);
-static void sub_81A0990(void);
-static void sub_81A09D0(void);
+static void Script_GivenApprenticeLvlMode(void);
+static void Script_SetApprenticeLvlMode(void);
+static void Script_SetApprenticeId(void);
+static void ShuffleApprenticeSpecies(void);
+static void Script_SetRandomQuestionData(void);
+static void IncrementQuestionsAnswered(void);
+static void IsFinalQuestion(void);
static void Script_CreateApprenticeMenu(void);
-static void Script_PrintMessage(void);
+static void Script_PrintApprenticeMessage(void);
static void Script_ResetPlayerApprentice(void);
-static void sub_81A1638(void);
-static void sub_81A0CC0(void);
-static void sub_81A09B4(void);
-static void sub_81A0D40(void);
-static void sub_81A0DD4(void);
-static void sub_81A0FE4(void);
-static void sub_81A0FFC(void);
-static void sub_81A0D80(void);
-static void sub_81A11F8(void);
-static void sub_81A1218(void);
-static void sub_81A1224(void);
-static void sub_81A1438(void);
-static void sub_81A150C(void);
-static void Script_SetPlayerApprenticeTrainerGfxId(void);
-static void sub_81A1644(void);
-static void sub_81A1370(void);
-
-// rodata
-
-const struct ApprenticeTrainer gApprentices[] =
-{
- {
- .name = {_("サダヒロ"), _("ALANN"), _("ALAIN"), _("ADELFO"), _("CLAUS"), _("TEO")},
- .otId = 0xBDC9,
- .facilityClass = 0x43,
- .species = {SPECIES_BEAUTIFLY, SPECIES_DUSTOX, SPECIES_ILLUMISE, SPECIES_SHIFTRY, SPECIES_BRELOOM, SPECIES_NINJASK, SPECIES_SHEDINJA, SPECIES_PINSIR, SPECIES_HERACROSS, SPECIES_VOLBEAT},
- .id = 0,
- .easyChatWords = {0x81D, 0x143E, 0xC00, 0xA01, 0x630, 0x1444},
- },
- {
- .name = {_("ヒロオ"), _("LIONEL"), _("LIONEL"), _("CAIO"), _("LUDWIG"), _("LEO")},
- .otId = 0xCF09,
- .facilityClass = 0x2B,
- .species = {SPECIES_SWELLOW, SPECIES_SWALOT, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_TORKOAL, SPECIES_HARIYAMA, SPECIES_MIGHTYENA, SPECIES_LUDICOLO, SPECIES_CRAWDAUNT, SPECIES_WHISCASH},
- .id = 1,
- .easyChatWords = {0xC38, 0xA01, 0x630, 0xA06, 0x1020, 0x2213},
- },
- {
- .name = {_("ケイジ"), _("SONNY"), _("HERVE"), _("FEDRO"), _("WENZEL"), _("SANTI")},
- .otId = 0x2E34,
- .facilityClass = 0x26,
- .species = {SPECIES_LINOONE, SPECIES_MIGHTYENA, SPECIES_WHISCASH, SPECIES_ZANGOOSE, SPECIES_SEVIPER, SPECIES_NINETALES, SPECIES_KECLEON, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_MACHAMP},
- .id = 2,
- .easyChatWords = {0xA01, 0x160A, 0xE15, 0x630, 0xC3B, 0xC04},
- },
- {
- .name = {_("ユラ"), _("LAYLA"), _("LAYLA"), _("ASTRID"), _("SONJA"), _("LOLA")},
- .otId = 0x84EF,
- .facilityClass = 0x47,
- .species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA},
- .id = 3,
- .easyChatWords = {0x100B, 0x1E0F, 0x1039, 0x1421, 0xC03, 0xFFFF},
- },
- {
- .name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")},
- .otId = 0x1E43,
- .facilityClass = 0x27,
- .species = {SPECIES_WIGGLYTUFF, SPECIES_LINOONE, SPECIES_KINGDRA, SPECIES_DELCATTY, SPECIES_RAICHU, SPECIES_FEAROW, SPECIES_STARMIE, SPECIES_MEDICHAM, SPECIES_SHIFTRY, SPECIES_BEAUTIFLY},
- .id = 4,
- .easyChatWords = {0x1E0F, 0x1014, 0x1006, 0x280F, 0x1C1C, 0x1C13},
- },
- {
- .name = {_("ヤスシ"), _("DONTE"), _("BRAHIM"), _("GLAUCO"), _("JOSEF"), _("ROQUE")},
- .otId = 0x379F,
- .facilityClass = 0x30,
- .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_AGGRON, SPECIES_MAGNETON, SPECIES_MACHAMP, SPECIES_ARMALDO, SPECIES_HERACROSS, SPECIES_NOSEPASS, SPECIES_EXPLOUD, SPECIES_MIGHTYENA},
- .id = 5,
- .easyChatWords = {0xA29, 0x1408, 0x102F, 0x1638, 0x820, 0xC00},
- },
- {
- .name = {_("ミサオ"), _("AMIRA"), _("LAURE"), _("DAFNE"), _("AMELIE"), _("LARA")},
- .otId = 0xF555,
- .facilityClass = 0x31,
- .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO},
- .id = 6,
- .easyChatWords = {0xC0B, 0x123E, 0xC00, 0xA31, 0x1430, 0xC00},
- },
- {
- .name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")},
- .otId = 0x8D26,
- .facilityClass = 0x14,
- .species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC},
- .id = 7,
- .easyChatWords = {0xA06, 0x620, 0xA1F, 0xA02, 0xC03, 0xFFFF},
- },
- {
- .name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")},
- .otId = 0x800C,
- .facilityClass = 0xD,
- .species = {SPECIES_SCEPTILE, SPECIES_VILEPLUME, SPECIES_BELLOSSOM, SPECIES_ROSELIA, SPECIES_CORSOLA, SPECIES_FLYGON, SPECIES_BRELOOM, SPECIES_MILOTIC, SPECIES_ALTARIA, SPECIES_CRADILY},
- .id = 8,
- .easyChatWords = {0x1E22, 0x433, 0x20E, 0xA02, 0x101E, 0xC00},
- },
- {
- .name = {_("アキノリ"), _("DILLEN"), _("RENE"), _("INDRO"), _("DETLEF"), _("PEDRO")},
- .otId = 0x469f,
- .facilityClass = 0,
- .species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON},
- .id = 9,
- .easyChatWords = {0xA3D, 0x1011, 0xE1E, 0x201C, 0xC04, 0xFFFF},
- },
- {
- .name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")},
- .otId = 0x71FC,
- .facilityClass = 0x2D,
- .species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA},
- .id = 10,
- .easyChatWords = {0xA05, 0x606, 0x160E, 0xA14, 0xC00, 0xFFFF},
- },
- {
- .name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")},
- .otId = 0xA39E,
- .facilityClass = 0x3A,
- .species = {SPECIES_QUAGSIRE, SPECIES_STARMIE, SPECIES_PELIPPER, SPECIES_CRAWDAUNT, SPECIES_WAILORD, SPECIES_GYARADOS, SPECIES_SWAMPERT, SPECIES_LANTURN, SPECIES_WHISCASH, SPECIES_SHUCKLE},
- .id = 11,
- .easyChatWords = {0x280E, 0x103D, 0x240F, 0xA14, 0x1E23, 0x1024},
- },
- {
- .name = {_("リュウジ"), _("LAMONT"), _("XAV"), _("ORFEO"), _("JÜRGEN"), _("JORGE")},
- .otId = 0xE590,
- .facilityClass = 0x19,
- .species = {SPECIES_ABSOL, SPECIES_CROBAT, SPECIES_EXPLOUD, SPECIES_MAGNETON, SPECIES_SHARPEDO, SPECIES_MANECTRIC, SPECIES_METAGROSS, SPECIES_ELECTRODE, SPECIES_NOSEPASS, SPECIES_WEEZING},
- .id = 12,
- .easyChatWords = {0x1020, 0x62E, 0x100B, 0x1E22, 0x1E0F, 0x100B},
- },
- {
- .name = {_("カツアキ"), _("TYRESE"), _("ANDY"), _("PARIDE"), _("DAVID"), _("CHICHO")},
- .otId = 0xD018,
- .facilityClass = 10,
- .species = {SPECIES_BLAZIKEN, SPECIES_GOLEM, SPECIES_MACHAMP, SPECIES_RHYDON, SPECIES_HARIYAMA, SPECIES_AGGRON, SPECIES_MEDICHAM, SPECIES_ZANGOOSE, SPECIES_VIGOROTH, SPECIES_SLAKING},
- .id = 13,
- .easyChatWords = {0xA29, 0x63A, 0xE15, 0x1435, 0x1034, 0x61E},
- },
- {
- .name = {_("トシミツ"), _("DANTE"), _("DANTE"), _("RAOUL"), _("LOTHAR"), _("PABLO")},
- .otId = 0xBC75,
- .facilityClass = 14,
- .species = {SPECIES_SCEPTILE, SPECIES_SANDSLASH, SPECIES_FLYGON, SPECIES_CLAYDOL, SPECIES_ARMALDO, SPECIES_CROBAT, SPECIES_CRADILY, SPECIES_SOLROCK, SPECIES_LUNATONE, SPECIES_GOLEM},
- .id = 14,
- .easyChatWords = {0xA01, 0x1017, 0x1243, 0x1E22, 0x100B, 0x280F},
- },
- {
- .name = {_("ローウェン"), _("ARTURO"), _("ARTURO"), _("ROMOLO"), _("BRIAN"), _("ARTURO")},
- .otId = 0xFA02,
- .facilityClass = 0x20,
- .species = {SPECIES_ABSOL, SPECIES_MIGHTYENA, SPECIES_ALAKAZAM, SPECIES_BANETTE, SPECIES_NINETALES, SPECIES_CLAYDOL, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_WALREIN, SPECIES_DUSCLOPS},
- .id = 15,
- .easyChatWords = {0x1E0F, 0x1404, 0x102F, 0x1006, 0x1020, 0xE03},
- },
-};
-
-static const u8 *const gUnknown_08610EF0[][4] =
-{
- {gText_082B7229, gText_082B731C, gText_082B735B, gText_082B7423},
- {gText_082B74C1, gText_082B756F, gText_082B75B2, gText_082B763F},
- {gText_082B76AC, gText_082B7772, gText_082B77CE, gText_082B7871},
- {gText_082B78D4, gText_082B7B1A, gText_082B7C13, gText_082B7D18},
- {gText_082B7DD4, gText_082B7EE5, gText_082B7F35, gText_082B7FE8},
- {gText_082B8087, gText_082B822B, gText_082B8286, gText_082B8356},
- {gText_082B83CE, gText_082B84FC, gText_082B8559, gText_082B8656},
- {gText_082B86EA, gText_082B87DA, gText_082B887C, gText_082B8957},
- {gText_082B89C6, gText_082B8ACF, gText_082B8B66, gText_082B8C20},
- {gText_082B8CAA, gText_082B8DD3, gText_082B8E24, gText_082B8ED5},
- {gText_082B8F45, gText_082B905F, gText_082B910E, gText_082B9204},
- {gText_082B929C, gText_082B9438, gText_082B9488, gText_082B9564},
- {gText_082B95D8, gText_082B9763, gText_082B97E5, gText_082B989A},
- {gText_082B992D, gText_082B9A84, gText_082B9AB9, gText_082B9B76},
- {gText_082B9BF2, gText_082B9D83, gText_082B9DF9, gText_082B9EAA},
- {gText_082B9F55, gText_082BA084, gText_082BA11D, gText_082BA1F3},
-};
-
-static const u8 *const gUnknown_08610FF0[][2] =
-{
- {gText_082BE50D, gText_082BE5F5},
- {gText_082BE679, gText_082BE71E},
- {gText_082BE762, gText_082BE7F8},
- {gText_082BE850, gText_082BE99C},
- {gText_082BEA1B, gText_082BEAE9},
- {gText_082BEB72, gText_082BEC8E},
- {gText_082BED16, gText_082BEE29},
- {gText_082BEEB4, gText_082BEFE2},
- {gText_082BF04E, gText_082BF11D},
- {gText_082BF1A8, gText_082BF268},
- {gText_082BF2D1, gText_082BF3CF},
- {gText_082BF46A, gText_082BF551},
- {gText_082BF5C3, gText_082BF6E5},
- {gText_082BF773, gText_082BF869},
- {gText_082BF8DD, gText_082BF9BA},
- {gText_082BFA5A, gText_082BFB4E},
-};
-
-static const u8 *const gUnknown_08611070[][5] =
-{
- {gText_082BA2A3, gText_082BA34E, gText_082BA380, gText_082BA3D2, gText_082BA448},
- {gText_082BA4D3, gText_082BA58C, gText_082BA5BF, gText_082BA5F3, gText_082BA635},
- {gText_082BA6E6, gText_082BA742, gText_082BA770, gText_082BA78F, gText_082BA7D8},
- {gText_082BA867, gText_082BA96B, gText_082BA9B7, gText_082BAA1B, gText_082BAA81},
- {gText_082BAB22, gText_082BAC43, gText_082BAC78, gText_082BAD17, gText_082BADB6},
- {gText_082BAE36, gText_082BAF4E, gText_082BAF8F, gText_082BAFDB, gText_082BB05F},
- {gText_082BB0D4, gText_082BB18C, gText_082BB1CE, gText_082BB242, gText_082BB2D9},
- {gText_082BB370, gText_082BB4C3, gText_082BB4FB, gText_082BB575, gText_082BB5E1},
- {gText_082BB656, gText_082BB6E5, gText_082BB72C, gText_082BB7A2, gText_082BB84A},
- {gText_082BB8CD, gText_082BB970, gText_082BB9AE, gText_082BBA05, gText_082BBA6C},
- {gText_082BBB01, gText_082BBC1C, gText_082BBC4B, gText_082BBCF6, gText_082BBD90},
- {gText_082BBE0B, gText_082BBEE5, gText_082BBF25, gText_082BBFA4, gText_082BC024},
- {gText_082BC0C8, gText_082BC213, gText_082BC247, gText_082BC2DD, gText_082BC373},
- {gText_082BC40E, gText_082BC514, gText_082BC555, gText_082BC5CE, gText_082BC666},
- {gText_082BC714, gText_082BC808, gText_082BC84D, gText_082BC8EA, gText_082BC984},
- {gText_082BCA4D, gText_082BCB75, gText_082BCBA6, gText_082BCBFC, gText_082BCCA4},
-};
-
-static const u8 *const gUnknown_086111B0[][2] =
-{
- {gText_082BFBF2, gText_082BFCAE},
- {gText_082BFD26, gText_082BFDB1},
- {gText_082BFE24, gText_082BFEAD},
- {gText_082BFF0A, gText_082C0032},
- {gText_082C0090, gText_082C016E},
- {gText_082C01F7, gText_082C034C},
- {gText_082C03CA, gText_082C046E},
- {gText_082C04F9, gText_082C0598},
- {gText_082C0602, gText_082C06D8},
- {gText_082C074A, gText_082C0809},
- {gText_082C086E, gText_082C0982},
- {gText_082C0A1D, gText_082C0AFD},
- {gText_082C0B6F, gText_082C0C7D},
- {gText_082C0D0B, gText_082C0DFE},
- {gText_082C0E71, gText_082C0F6D},
- {gText_082C1003, gText_082C1122},
-};
-
-static const u8 *const gUnknown_08611230[][2] =
-{
- {gText_082BCD68, gText_082BCE64},
- {gText_082BCEF2, gText_082BCF61},
- {gText_082BCFA1, gText_082BD03C},
- {gText_082BD06D, gText_082BD18A},
- {gText_082BD222, gText_082BD325},
- {gText_082BD3B1, gText_082BD493},
- {gText_082BD51C, gText_082BD609},
- {gText_082BD697, gText_082BD797},
- {gText_082BD806, gText_082BD8F5},
- {gText_082BD9BE, gText_082BDAE1},
- {gText_082BDB4E, gText_082BDC6B},
- {gText_082BDD0D, gText_082BDDEC},
- {gText_082BDE68, gText_082BDF4D},
- {gText_082BDFD8, gText_082BE0FD},
- {gText_082BE189, gText_082BE2A5},
- {gText_082BE33E, gText_082BE46C},
-};
-
-static const u8 *const gUnknown_086112B0[][2] =
-{
- {gText_082C11D1, gText_082C12D5},
- {gText_082C13AB, gText_082C1444},
- {gText_082C1501, gText_082C15B6},
- {gText_082C165E, gText_082C174F},
- {gText_082C1862, gText_082C19A0},
- {gText_082C1A76, gText_082C1C16},
- {gText_082C1CF5, gText_082C1DC1},
- {gText_082C1EDC, gText_082C1FEC},
- {gText_082C20D1, gText_082C21FF},
- {gText_082C231C, gText_082C2407},
- {gText_082C24B5, gText_082C25B1},
- {gText_082C2707, gText_082C27D4},
- {gText_082C28D6, gText_082C2A0B},
- {gText_082C2B50, gText_082C2C77},
- {gText_082C2D67, gText_082C2E41},
- {gText_082C2EF5, gText_082C3023},
-};
-
-static const u8 *const gUnknown_08611330[] =
-{
- gText_082B6EA5,
- gText_082B6EEC,
- gText_082B6F16,
- gText_082B6F4C,
- gText_082B6F92,
- gText_082B6FC9,
- gText_082B700C,
- gText_082B703A,
- gText_082B706A,
- gText_082B709C,
- gText_082B70CC,
- gText_082B710A,
- gText_082B714D,
- gText_082B7185,
- gText_082B71C1,
- gText_082B71F9,
-};
-
-static const bool8 gUnknown_08611370[MOVES_COUNT] =
-{
- [MOVE_NONE] = FALSE,
- [MOVE_POUND] = FALSE,
- [MOVE_KARATE_CHOP] = TRUE,
- [MOVE_DOUBLE_SLAP] = TRUE,
- [MOVE_COMET_PUNCH] = FALSE,
- [MOVE_MEGA_PUNCH] = TRUE,
- [MOVE_PAY_DAY] = FALSE,
- [MOVE_FIRE_PUNCH] = TRUE,
- [MOVE_ICE_PUNCH] = TRUE,
- [MOVE_THUNDER_PUNCH] = TRUE,
- [MOVE_SCRATCH] = FALSE,
- [MOVE_VICE_GRIP] = FALSE,
- [MOVE_GUILLOTINE] = TRUE,
- [MOVE_RAZOR_WIND] = FALSE,
- [MOVE_SWORDS_DANCE] = TRUE,
- [MOVE_CUT] = FALSE,
- [MOVE_GUST] = FALSE,
- [MOVE_WING_ATTACK] = FALSE,
- [MOVE_WHIRLWIND] = TRUE,
- [MOVE_FLY] = TRUE,
- [MOVE_BIND] = TRUE,
- [MOVE_SLAM] = TRUE,
- [MOVE_VINE_WHIP] = FALSE,
- [MOVE_STOMP] = TRUE,
- [MOVE_DOUBLE_KICK] = TRUE,
- [MOVE_MEGA_KICK] = TRUE,
- [MOVE_JUMP_KICK] = TRUE,
- [MOVE_ROLLING_KICK] = TRUE,
- [MOVE_SAND_ATTACK] = TRUE,
- [MOVE_HEADBUTT] = TRUE,
- [MOVE_HORN_ATTACK] = FALSE,
- [MOVE_FURY_ATTACK] = FALSE,
- [MOVE_HORN_DRILL] = TRUE,
- [MOVE_TACKLE] = FALSE,
- [MOVE_BODY_SLAM] = TRUE,
- [MOVE_WRAP] = TRUE,
- [MOVE_TAKE_DOWN] = TRUE,
- [MOVE_THRASH] = TRUE,
- [MOVE_DOUBLE_EDGE] = TRUE,
- [MOVE_TAIL_WHIP] = FALSE,
- [MOVE_POISON_STING] = FALSE,
- [MOVE_TWINEEDLE] = TRUE,
- [MOVE_PIN_MISSILE] = FALSE,
- [MOVE_LEER] = FALSE,
- [MOVE_BITE] = TRUE,
- [MOVE_GROWL] = FALSE,
- [MOVE_ROAR] = TRUE,
- [MOVE_SING] = TRUE,
- [MOVE_SUPERSONIC] = TRUE,
- [MOVE_SONIC_BOOM] = TRUE,
- [MOVE_DISABLE] = TRUE,
- [MOVE_ACID] = FALSE,
- [MOVE_EMBER] = FALSE,
- [MOVE_FLAMETHROWER] = TRUE,
- [MOVE_MIST] = TRUE,
- [MOVE_WATER_GUN] = FALSE,
- [MOVE_HYDRO_PUMP] = TRUE,
- [MOVE_SURF] = TRUE,
- [MOVE_ICE_BEAM] = TRUE,
- [MOVE_BLIZZARD] = TRUE,
- [MOVE_PSYBEAM] = TRUE,
- [MOVE_BUBBLE_BEAM] = FALSE,
- [MOVE_AURORA_BEAM] = FALSE,
- [MOVE_HYPER_BEAM] = TRUE,
- [MOVE_PECK] = FALSE,
- [MOVE_DRILL_PECK] = TRUE,
- [MOVE_SUBMISSION] = TRUE,
- [MOVE_LOW_KICK] = TRUE,
- [MOVE_COUNTER] = TRUE,
- [MOVE_SEISMIC_TOSS] = TRUE,
- [MOVE_STRENGTH] = TRUE,
- [MOVE_ABSORB] = FALSE,
- [MOVE_MEGA_DRAIN] = FALSE,
- [MOVE_LEECH_SEED] = TRUE,
- [MOVE_GROWTH] = TRUE,
- [MOVE_RAZOR_LEAF] = TRUE,
- [MOVE_SOLAR_BEAM] = TRUE,
- [MOVE_POISON_POWDER] = TRUE,
- [MOVE_STUN_SPORE] = TRUE,
- [MOVE_SLEEP_POWDER] = TRUE,
- [MOVE_PETAL_DANCE] = TRUE,
- [MOVE_STRING_SHOT] = FALSE,
- [MOVE_DRAGON_RAGE] = TRUE,
- [MOVE_FIRE_SPIN] = TRUE,
- [MOVE_THUNDER_SHOCK] = FALSE,
- [MOVE_THUNDERBOLT] = TRUE,
- [MOVE_THUNDER_WAVE] = TRUE,
- [MOVE_THUNDER] = TRUE,
- [MOVE_ROCK_THROW] = FALSE,
- [MOVE_EARTHQUAKE] = TRUE,
- [MOVE_FISSURE] = TRUE,
- [MOVE_DIG] = TRUE,
- [MOVE_TOXIC] = TRUE,
- [MOVE_CONFUSION] = FALSE,
- [MOVE_PSYCHIC] = TRUE,
- [MOVE_HYPNOSIS] = TRUE,
- [MOVE_MEDITATE] = TRUE,
- [MOVE_AGILITY] = TRUE,
- [MOVE_QUICK_ATTACK] = TRUE,
- [MOVE_RAGE] = FALSE,
- [MOVE_TELEPORT] = FALSE,
- [MOVE_NIGHT_SHADE] = TRUE,
- [MOVE_MIMIC] = TRUE,
- [MOVE_SCREECH] = TRUE,
- [MOVE_DOUBLE_TEAM] = TRUE,
- [MOVE_RECOVER] = TRUE,
- [MOVE_HARDEN] = TRUE,
- [MOVE_MINIMIZE] = TRUE,
- [MOVE_SMOKESCREEN] = TRUE,
- [MOVE_CONFUSE_RAY] = TRUE,
- [MOVE_WITHDRAW] = TRUE,
- [MOVE_DEFENSE_CURL] = TRUE,
- [MOVE_BARRIER] = TRUE,
- [MOVE_LIGHT_SCREEN] = TRUE,
- [MOVE_HAZE] = TRUE,
- [MOVE_REFLECT] = TRUE,
- [MOVE_FOCUS_ENERGY] = TRUE,
- [MOVE_BIDE] = FALSE,
- [MOVE_METRONOME] = TRUE,
- [MOVE_MIRROR_MOVE] = TRUE,
- [MOVE_SELF_DESTRUCT] = TRUE,
- [MOVE_EGG_BOMB] = TRUE,
- [MOVE_LICK] = TRUE,
- [MOVE_SMOG] = FALSE,
- [MOVE_SLUDGE] = FALSE,
- [MOVE_BONE_CLUB] = FALSE,
- [MOVE_FIRE_BLAST] = TRUE,
- [MOVE_WATERFALL] = TRUE,
- [MOVE_CLAMP] = TRUE,
- [MOVE_SWIFT] = TRUE,
- [MOVE_SKULL_BASH] = TRUE,
- [MOVE_SPIKE_CANNON] = FALSE,
- [MOVE_CONSTRICT] = FALSE,
- [MOVE_AMNESIA] = TRUE,
- [MOVE_KINESIS] = TRUE,
- [MOVE_SOFT_BOILED] = TRUE,
- [MOVE_HI_JUMP_KICK] = TRUE,
- [MOVE_GLARE] = TRUE,
- [MOVE_DREAM_EATER] = TRUE,
- [MOVE_POISON_GAS] = FALSE,
- [MOVE_BARRAGE] = FALSE,
- [MOVE_LEECH_LIFE] = FALSE,
- [MOVE_LOVELY_KISS] = TRUE,
- [MOVE_SKY_ATTACK] = TRUE,
- [MOVE_TRANSFORM] = TRUE,
- [MOVE_BUBBLE] = FALSE,
- [MOVE_DIZZY_PUNCH] = TRUE,
- [MOVE_SPORE] = TRUE,
- [MOVE_FLASH] = TRUE,
- [MOVE_PSYWAVE] = TRUE,
- [MOVE_SPLASH] = FALSE,
- [MOVE_ACID_ARMOR] = TRUE,
- [MOVE_CRABHAMMER] = TRUE,
- [MOVE_EXPLOSION] = TRUE,
- [MOVE_FURY_SWIPES] = FALSE,
- [MOVE_BONEMERANG] = TRUE,
- [MOVE_REST] = TRUE,
- [MOVE_ROCK_SLIDE] = TRUE,
- [MOVE_HYPER_FANG] = TRUE,
- [MOVE_SHARPEN] = TRUE,
- [MOVE_CONVERSION] = TRUE,
- [MOVE_TRI_ATTACK] = TRUE,
- [MOVE_SUPER_FANG] = TRUE,
- [MOVE_SLASH] = TRUE,
- [MOVE_SUBSTITUTE] = TRUE,
- [MOVE_STRUGGLE] = TRUE,
- [MOVE_SKETCH] = TRUE,
- [MOVE_TRIPLE_KICK] = TRUE,
- [MOVE_THIEF] = TRUE,
- [MOVE_SPIDER_WEB] = TRUE,
- [MOVE_MIND_READER] = TRUE,
- [MOVE_NIGHTMARE] = TRUE,
- [MOVE_FLAME_WHEEL] = FALSE,
- [MOVE_SNORE] = TRUE,
- [MOVE_CURSE] = TRUE,
- [MOVE_FLAIL] = TRUE,
- [MOVE_CONVERSION_2] = TRUE,
- [MOVE_AEROBLAST] = TRUE,
- [MOVE_COTTON_SPORE] = TRUE,
- [MOVE_REVERSAL] = TRUE,
- [MOVE_SPITE] = TRUE,
- [MOVE_POWDER_SNOW] = FALSE,
- [MOVE_PROTECT] = TRUE,
- [MOVE_MACH_PUNCH] = TRUE,
- [MOVE_SCARY_FACE] = TRUE,
- [MOVE_FAINT_ATTACK] = TRUE,
- [MOVE_SWEET_KISS] = TRUE,
- [MOVE_BELLY_DRUM] = TRUE,
- [MOVE_SLUDGE_BOMB] = TRUE,
- [MOVE_MUD_SLAP] = TRUE,
- [MOVE_OCTAZOOKA] = TRUE,
- [MOVE_SPIKES] = TRUE,
- [MOVE_ZAP_CANNON] = TRUE,
- [MOVE_FORESIGHT] = TRUE,
- [MOVE_DESTINY_BOND] = TRUE,
- [MOVE_PERISH_SONG] = TRUE,
- [MOVE_ICY_WIND] = TRUE,
- [MOVE_DETECT] = TRUE,
- [MOVE_BONE_RUSH] = FALSE,
- [MOVE_LOCK_ON] = TRUE,
- [MOVE_OUTRAGE] = TRUE,
- [MOVE_SANDSTORM] = TRUE,
- [MOVE_GIGA_DRAIN] = TRUE,
- [MOVE_ENDURE] = TRUE,
- [MOVE_CHARM] = TRUE,
- [MOVE_ROLLOUT] = TRUE,
- [MOVE_FALSE_SWIPE] = TRUE,
- [MOVE_SWAGGER] = TRUE,
- [MOVE_MILK_DRINK] = TRUE,
- [MOVE_SPARK] = FALSE,
- [MOVE_FURY_CUTTER] = TRUE,
- [MOVE_STEEL_WING] = TRUE,
- [MOVE_MEAN_LOOK] = TRUE,
- [MOVE_ATTRACT] = TRUE,
- [MOVE_SLEEP_TALK] = TRUE,
- [MOVE_HEAL_BELL] = TRUE,
- [MOVE_RETURN] = TRUE,
- [MOVE_PRESENT] = TRUE,
- [MOVE_FRUSTRATION] = TRUE,
- [MOVE_SAFEGUARD] = TRUE,
- [MOVE_PAIN_SPLIT] = TRUE,
- [MOVE_SACRED_FIRE] = TRUE,
- [MOVE_MAGNITUDE] = FALSE,
- [MOVE_DYNAMIC_PUNCH] = TRUE,
- [MOVE_MEGAHORN] = TRUE,
- [MOVE_DRAGON_BREATH] = TRUE,
- [MOVE_BATON_PASS] = TRUE,
- [MOVE_ENCORE] = TRUE,
- [MOVE_PURSUIT] = TRUE,
- [MOVE_RAPID_SPIN] = TRUE,
- [MOVE_SWEET_SCENT] = TRUE,
- [MOVE_IRON_TAIL] = TRUE,
- [MOVE_METAL_CLAW] = TRUE,
- [MOVE_VITAL_THROW] = TRUE,
- [MOVE_MORNING_SUN] = TRUE,
- [MOVE_SYNTHESIS] = TRUE,
- [MOVE_MOONLIGHT] = TRUE,
- [MOVE_HIDDEN_POWER] = TRUE,
- [MOVE_CROSS_CHOP] = TRUE,
- [MOVE_TWISTER] = FALSE,
- [MOVE_RAIN_DANCE] = TRUE,
- [MOVE_SUNNY_DAY] = TRUE,
- [MOVE_CRUNCH] = TRUE,
- [MOVE_MIRROR_COAT] = TRUE,
- [MOVE_PSYCH_UP] = TRUE,
- [MOVE_EXTREME_SPEED] = TRUE,
- [MOVE_ANCIENT_POWER] = TRUE,
- [MOVE_SHADOW_BALL] = TRUE,
- [MOVE_FUTURE_SIGHT] = TRUE,
- [MOVE_ROCK_SMASH] = TRUE,
- [MOVE_WHIRLPOOL] = TRUE,
- [MOVE_BEAT_UP] = TRUE,
- [MOVE_FAKE_OUT] = TRUE,
- [MOVE_UPROAR] = TRUE,
- [MOVE_STOCKPILE] = TRUE,
- [MOVE_SPIT_UP] = TRUE,
- [MOVE_SWALLOW] = TRUE,
- [MOVE_HEAT_WAVE] = TRUE,
- [MOVE_HAIL] = TRUE,
- [MOVE_TORMENT] = TRUE,
- [MOVE_FLATTER] = TRUE,
- [MOVE_WILL_O_WISP] = TRUE,
- [MOVE_MEMENTO] = TRUE,
- [MOVE_FACADE] = TRUE,
- [MOVE_FOCUS_PUNCH] = TRUE,
- [MOVE_SMELLING_SALT] = TRUE,
- [MOVE_FOLLOW_ME] = TRUE,
- [MOVE_NATURE_POWER] = TRUE,
- [MOVE_CHARGE] = TRUE,
- [MOVE_TAUNT] = TRUE,
- [MOVE_HELPING_HAND] = TRUE,
- [MOVE_TRICK] = TRUE,
- [MOVE_ROLE_PLAY] = TRUE,
- [MOVE_WISH] = TRUE,
- [MOVE_ASSIST] = TRUE,
- [MOVE_INGRAIN] = TRUE,
- [MOVE_SUPERPOWER] = TRUE,
- [MOVE_MAGIC_COAT] = TRUE,
- [MOVE_RECYCLE] = TRUE,
- [MOVE_REVENGE] = TRUE,
- [MOVE_BRICK_BREAK] = TRUE,
- [MOVE_YAWN] = TRUE,
- [MOVE_KNOCK_OFF] = TRUE,
- [MOVE_ENDEAVOR] = TRUE,
- [MOVE_ERUPTION] = TRUE,
- [MOVE_SKILL_SWAP] = TRUE,
- [MOVE_IMPRISON] = TRUE,
- [MOVE_REFRESH] = TRUE,
- [MOVE_GRUDGE] = TRUE,
- [MOVE_SNATCH] = TRUE,
- [MOVE_SECRET_POWER] = TRUE,
- [MOVE_DIVE] = TRUE,
- [MOVE_ARM_THRUST] = FALSE,
- [MOVE_CAMOUFLAGE] = TRUE,
- [MOVE_TAIL_GLOW] = TRUE,
- [MOVE_LUSTER_PURGE] = TRUE,
- [MOVE_MIST_BALL] = TRUE,
- [MOVE_FEATHER_DANCE] = TRUE,
- [MOVE_TEETER_DANCE] = TRUE,
- [MOVE_BLAZE_KICK] = TRUE,
- [MOVE_MUD_SPORT] = TRUE,
- [MOVE_ICE_BALL] = FALSE,
- [MOVE_NEEDLE_ARM] = TRUE,
- [MOVE_SLACK_OFF] = TRUE,
- [MOVE_HYPER_VOICE] = TRUE,
- [MOVE_POISON_FANG] = FALSE,
- [MOVE_CRUSH_CLAW] = TRUE,
- [MOVE_BLAST_BURN] = TRUE,
- [MOVE_HYDRO_CANNON] = TRUE,
- [MOVE_METEOR_MASH] = TRUE,
- [MOVE_ASTONISH] = TRUE,
- [MOVE_WEATHER_BALL] = TRUE,
- [MOVE_AROMATHERAPY] = TRUE,
- [MOVE_FAKE_TEARS] = TRUE,
- [MOVE_AIR_CUTTER] = TRUE,
- [MOVE_OVERHEAT] = TRUE,
- [MOVE_ODOR_SLEUTH] = TRUE,
- [MOVE_ROCK_TOMB] = TRUE,
- [MOVE_SILVER_WIND] = TRUE,
- [MOVE_METAL_SOUND] = TRUE,
- [MOVE_GRASS_WHISTLE] = TRUE,
- [MOVE_TICKLE] = TRUE,
- [MOVE_COSMIC_POWER] = TRUE,
- [MOVE_WATER_SPOUT] = TRUE,
- [MOVE_SIGNAL_BEAM] = TRUE,
- [MOVE_SHADOW_PUNCH] = TRUE,
- [MOVE_EXTRASENSORY] = TRUE,
- [MOVE_SKY_UPPERCUT] = TRUE,
- [MOVE_SAND_TOMB] = TRUE,
- [MOVE_SHEER_COLD] = TRUE,
- [MOVE_MUDDY_WATER] = TRUE,
- [MOVE_BULLET_SEED] = FALSE,
- [MOVE_AERIAL_ACE] = TRUE,
- [MOVE_ICICLE_SPEAR] = FALSE,
- [MOVE_IRON_DEFENSE] = TRUE,
- [MOVE_BLOCK] = TRUE,
- [MOVE_HOWL] = TRUE,
- [MOVE_DRAGON_CLAW] = TRUE,
- [MOVE_FRENZY_PLANT] = TRUE,
- [MOVE_BULK_UP] = TRUE,
- [MOVE_BOUNCE] = TRUE,
- [MOVE_MUD_SHOT] = FALSE,
- [MOVE_POISON_TAIL] = TRUE,
- [MOVE_COVET] = TRUE,
- [MOVE_VOLT_TACKLE] = TRUE,
- [MOVE_MAGICAL_LEAF] = TRUE,
- [MOVE_WATER_SPORT] = TRUE,
- [MOVE_CALM_MIND] = TRUE,
- [MOVE_LEAF_BLADE] = TRUE,
- [MOVE_DRAGON_DANCE] = TRUE,
- [MOVE_ROCK_BLAST] = FALSE,
- [MOVE_SHOCK_WAVE] = TRUE,
- [MOVE_WATER_PULSE] = TRUE,
- [MOVE_DOOM_DESIRE] = TRUE,
- [MOVE_PSYCHO_BOOST] = TRUE,
-};
-
-static const u8 gUnknown_086114D3[] = {0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00};
-
-static void (* const sApprenticeFunctions[])(void) =
-{
- Script_IsPlayersApprenticeActive,
- Script_SetPlayersApprenticeLvlMode,
- sub_81A0978,
- sub_819FC60,
- sub_81A0984,
- sub_81A0990,
- sub_81A09D0,
- Script_CreateApprenticeMenu,
- Script_PrintMessage,
- Script_ResetPlayerApprentice,
- sub_81A1638,
- sub_81A0CC0,
- sub_81A09B4,
- sub_81A0D40,
- sub_81A0DD4,
- sub_81A0FE4,
- sub_81A0FFC,
- sub_81A0D80,
- sub_81A11F8,
- sub_81A1218,
- sub_81A1224,
- sub_81A1438,
- sub_81A150C,
- Script_SetPlayerApprenticeTrainerGfxId,
- sub_81A1644,
- sub_81A1370,
-};
-
-static const u8 gUnknown_08611548[8] = {0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x08, 0x09};
-
-// text
-extern const u8 gText_Give[];
-extern const u8 gText_NoNeed[];
-extern const u8 gText_Yes[];
-extern const u8 gText_No[];
-
-void CopyFriendsApprenticeChallengeText(u8 saveblockApprenticeId)
-{
- u8 i, var;
- const u8 *str;
-
- var = gSaveBlock2Ptr->apprentices[saveblockApprenticeId].number;
- for (i = 0; var != 0 && i < 4; var /= 10, i++)
+static void GetShouldCheckApprenticeGone(void);
+static void ApprenticeGetQuestion(void);
+static void GetNumApprenticePartyMonsAssigned(void);
+static void SetApprenticePartyMon(void);
+static void InitQuestionData(void);
+static void FreeQuestionData(void);
+static void ApprenticeBufferString(void);
+static void SetApprenticeMonMove(void);
+static void SetLeadApprenticeMon(void);
+static void Script_ApprenticeOpenBagMenu(void);
+static void TrySetApprenticeHeldItem(void);
+static void SaveApprentice(void);
+static void SetSavedApprenticeTrainerGfxId(void);
+static void SetPlayerApprenticeTrainerGfxId(void);
+static void GetShouldApprenticeLeave(void);
+static void ShiftSavedApprentices(void);
+
+#include "data/battle_frontier/apprentice.h"
+
+void BufferApprenticeChallengeText(u8 saveApprenticeId)
+{
+ u8 i, num;
+ const u8 *challengeText;
+
+ num = gSaveBlock2Ptr->apprentices[saveApprenticeId].number;
+ for (i = 0; num != 0 && i < APPRENTICE_COUNT; num /= 10, i++)
;
- StringCopy7(gStringVar1, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].playerName);
- ConvertInternationalString(gStringVar1, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].language);
- ConvertIntToDecimalStringN(gStringVar2, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].number, STR_CONV_MODE_RIGHT_ALIGN, i);
- str = gUnknown_08611330[gSaveBlock2Ptr->apprentices[saveblockApprenticeId].id];
- StringExpandPlaceholders(gStringVar4, str);
+ StringCopy7(gStringVar1, gSaveBlock2Ptr->apprentices[saveApprenticeId].playerName);
+ ConvertInternationalString(gStringVar1, gSaveBlock2Ptr->apprentices[saveApprenticeId].language);
+ ConvertIntToDecimalStringN(gStringVar2, gSaveBlock2Ptr->apprentices[saveApprenticeId].number, STR_CONV_MODE_RIGHT_ALIGN, i);
+ challengeText = sApprenticeChallengeTexts[gSaveBlock2Ptr->apprentices[saveApprenticeId].id];
+ StringExpandPlaceholders(gStringVar4, challengeText);
}
void Apprentice_EnableBothScriptContexts(void)
@@ -1079,28 +144,28 @@ void ResetApprenticeStruct(struct Apprentice *apprentice)
{
u8 i;
- for (i = 0; i < 6; i++)
- apprentice->easyChatWords[i] = 0xFFFF;
+ for (i = 0; i < ARRAY_COUNT(apprentice->speechWon); i++)
+ apprentice->speechWon[i] = 0xFFFF;
apprentice->playerName[0] = EOS;
- apprentice->id = 16;
+ apprentice->id = NUM_APPRENTICES;
}
void ResetAllApprenticeData(void)
{
u8 i, j;
- PLAYER_APPRENTICE.field_B2_1 = 0;
- for (i = 0; i < 4; i++)
+ PLAYER_APPRENTICE.saveId = 0;
+ for (i = 0; i < APPRENTICE_COUNT; i++)
{
- for (j = 0; j < 6; j++)
- gSaveBlock2Ptr->apprentices[i].easyChatWords[j] = 0xFFFF;
- gSaveBlock2Ptr->apprentices[i].id = 16;
+ for (j = 0; j < ARRAY_COUNT(gSaveBlock2Ptr->apprentices[i].speechWon); j++)
+ gSaveBlock2Ptr->apprentices[i].speechWon[j] = 0xFFFF;
+ gSaveBlock2Ptr->apprentices[i].id = NUM_APPRENTICES;
gSaveBlock2Ptr->apprentices[i].playerName[0] = EOS;
gSaveBlock2Ptr->apprentices[i].lvlMode = 0;
gSaveBlock2Ptr->apprentices[i].number = 0;
- gSaveBlock2Ptr->apprentices[i].field_1 = 0;
- for (j = 0; j < 4; j++)
+ gSaveBlock2Ptr->apprentices[i].numQuestions = 0;
+ for (j = 0; j < TRAINER_ID_LENGTH; j++)
gSaveBlock2Ptr->apprentices[i].playerId[j] = 0;
gSaveBlock2Ptr->apprentices[i].language = gGameLanguage;
gSaveBlock2Ptr->apprentices[i].checksum = 0;
@@ -1109,174 +174,184 @@ void ResetAllApprenticeData(void)
Script_ResetPlayerApprentice();
}
-static bool8 IsPlayersApprenticeActive(void)
+static bool8 GivenApprenticeLvlMode(void)
{
- return (PLAYER_APPRENTICE.activeLvlMode != 0);
+ return (PLAYER_APPRENTICE.lvlMode != 0);
}
-static void sub_819FBC8(void)
+static void SetApprenticeId(void)
{
if (gSaveBlock2Ptr->apprentices[0].number == 0)
{
do
{
- PLAYER_APPRENTICE.id = gUnknown_08611548[Random() % ARRAY_COUNT(gUnknown_08611548)];
+ PLAYER_APPRENTICE.id = sInitialApprenticeIds[Random() % ARRAY_COUNT(sInitialApprenticeIds)];
} while (PLAYER_APPRENTICE.id == gSaveBlock2Ptr->apprentices[0].id);
}
else
{
do
{
- PLAYER_APPRENTICE.id = Random() % 16;
+ PLAYER_APPRENTICE.id = Random() % (NUM_APPRENTICES);
} while (PLAYER_APPRENTICE.id == gSaveBlock2Ptr->apprentices[0].id);
}
}
static void SetPlayersApprenticeLvlMode(u8 mode)
{
- PLAYER_APPRENTICE.activeLvlMode = mode;
+ PLAYER_APPRENTICE.lvlMode = mode;
}
-static void sub_819FC60(void)
+static void ShuffleApprenticeSpecies(void)
{
- u8 array[APPRENTICE_SPECIES_COUNT];
+ u8 species[APPRENTICE_SPECIES_COUNT];
u8 i;
- for (i = 0; i < ARRAY_COUNT(array); i++)
- array[i] = i;
+ for (i = 0; i < ARRAY_COUNT(species); i++)
+ species[i] = i;
+ // Shuffle the possible species an arbitrary 50 times
for (i = 0; i < 50; i++)
{
u8 temp;
- u8 var1 = Random() % ARRAY_COUNT(array);
- u8 var2 = Random() % ARRAY_COUNT(array);
- SWAP(array[var1], array[var2], temp);
+ u8 rand1 = Random() % ARRAY_COUNT(species);
+ u8 rand2 = Random() % ARRAY_COUNT(species);
+ SWAP(species[rand1], species[rand2], temp);
}
- for (i = 0; i < 3; i++)
- PLAYER_APPRENTICE.monIds[i] = ((array[i * 2] & 0xF) << 4) | ((array[i * 2 + 1]) & 0xF);
+ for (i = 0; i < MULTI_PARTY_SIZE; i++)
+ PLAYER_APPRENTICE.speciesIds[i] = ((species[i * 2] & 0xF) << 4) | ((species[i * 2 + 1]) & 0xF);
}
-static u8 sub_819FCF8(u8 val, u8 *arg1, u8 *arg2)
+// Pick one of the Apprentice's mons to ask the question about
+// Picking a move chooses a random mon, picking a held item is sequential (so that none are repeated)
+static u8 GetMonIdForQuestion(u8 questionId, u8 *party, u8 *partySlot)
{
u8 i, count;
- u8 ret = 0;
+ u8 monId = 0;
- if (val == 2)
+ if (questionId == QUESTION_ID_WHICH_MOVE)
{
do
{
- ret = Random() % 3;
- for (count = 0, i = 0; i < 5; i++)
+ monId = Random() % (MULTI_PARTY_SIZE);
+ for (count = 0, i = 0; i < NUM_WHICH_MOVE_QUESTIONS; i++)
{
- if (gUnknown_030062EC->unk2[ret][i] != 0)
+ if (gApprenticePartyMovesData->moves[monId][i] != MOVE_NONE)
count++;
}
- } while (count > 3);
+ } while (count > MULTI_PARTY_SIZE);
}
- else if (val == 1)
+ else if (questionId == QUESTION_ID_WHAT_ITEM)
{
- ret = arg1[*arg2];
- (*arg2)++;
+ monId = party[*partySlot];
+ (*partySlot)++;
}
- return ret;
+ return monId;
}
-static void sub_819FD64(void)
+// Sets the random order and data for the remaining questions after the initial "choose mon" questions
+static void SetRandomQuestionData(void)
{
- u8 sp_0[10];
- u8 sp_C[3];
- u8 sp_10;
+ u8 questionOrder[APPRENTICE_MAX_QUESTIONS + 1];
+ u8 partyOrder[MULTI_PARTY_SIZE];
+ u8 partySlot;
u8 i, j;
u8 rand1, rand2;
u8 id;
- for (i = 0; i < 3; i++)
- sp_C[i] = i;
+ for (i = 0; i < ARRAY_COUNT(partyOrder); i++)
+ partyOrder[i] = i;
+
+ // Shuffle the party an arbitrary 10 times
for (i = 0; i < 10; i++)
{
u8 temp;
- rand1 = Random() % ARRAY_COUNT(sp_C);
- rand2 = Random() % ARRAY_COUNT(sp_C);
- SWAP(sp_C[rand1], sp_C[rand2], temp);
+ rand1 = Random() % ARRAY_COUNT(partyOrder);
+ rand2 = Random() % ARRAY_COUNT(partyOrder);
+ SWAP(partyOrder[rand1], partyOrder[rand2], temp);
}
- for (i = 0; i < 10; i++)
- sp_0[i] = gUnknown_086114D3[i];
+ for (i = 0; i < ARRAY_COUNT(questionOrder); i++)
+ questionOrder[i] = sQuestionPossibilities[i];
+
+ // Shuffle the questions an arbitrary 50 times
for (i = 0; i < 50; i++)
{
u8 temp;
- rand1 = Random() % ARRAY_COUNT(sp_0);
- rand2 = Random() % ARRAY_COUNT(sp_0);
- SWAP(sp_0[rand1], sp_0[rand2], temp);
+ rand1 = Random() % ARRAY_COUNT(questionOrder);
+ rand2 = Random() % ARRAY_COUNT(questionOrder);
+ SWAP(questionOrder[rand1], questionOrder[rand2], temp);
}
- gUnknown_030062EC = AllocZeroed(sizeof(*gUnknown_030062EC));
- gUnknown_030062EC->unk0 = 0;
- for (i = 0; i < 5; i++)
+ gApprenticePartyMovesData = AllocZeroed(sizeof(*gApprenticePartyMovesData));
+ gApprenticePartyMovesData->moveCounter = 0;
+ for (i = 0; i < NUM_WHICH_MOVE_QUESTIONS; i++)
{
- for (j = 0; j < 3; j++)
- gUnknown_030062EC->unk20[j][i] = 4;
+ for (j = 0; j < MULTI_PARTY_SIZE; j++)
+ gApprenticePartyMovesData->moveSlots[j][i] = MAX_MON_MOVES;
}
- sp_10 = 0;
- for (i = 0; i < 9; i++)
+ partySlot = 0;
+ for (i = 0; i < APPRENTICE_MAX_QUESTIONS; i++)
{
- PLAYER_APPRENTICE.field_B8[i].unk0_0 = sp_0[i];
- if (sp_0[i] != 3)
+ PLAYER_APPRENTICE.questions[i].questionId = questionOrder[i];
+ if (questionOrder[i] != QUESTION_ID_WHICH_FIRST)
{
- PLAYER_APPRENTICE.field_B8[i].unk0_1 = sub_819FCF8(sp_0[i], sp_C, &sp_10);
- id = PLAYER_APPRENTICE.field_B8[i].unk0_1;
- if (sp_0[i] == 2)
+ PLAYER_APPRENTICE.questions[i].monId = GetMonIdForQuestion(questionOrder[i], partyOrder, &partySlot);
+ id = PLAYER_APPRENTICE.questions[i].monId;
+ if (questionOrder[i] == QUESTION_ID_WHICH_MOVE)
{
do
{
- rand1 = Random() % 4;
- for (j = 0; j < gUnknown_030062EC->unk0 + 1; j++)
+ rand1 = Random() % MAX_MON_MOVES;
+ for (j = 0; j < gApprenticePartyMovesData->moveCounter + 1; j++)
{
- if (gUnknown_030062EC->unk20[id][j] == rand1)
+ if (gApprenticePartyMovesData->moveSlots[id][j] == rand1)
break;
}
- } while (j != gUnknown_030062EC->unk0 + 1);
+ } while (j != gApprenticePartyMovesData->moveCounter + 1);
- gUnknown_030062EC->unk20[id][gUnknown_030062EC->unk0] = rand1;
- PLAYER_APPRENTICE.field_B8[i].unk0_2 = rand1;
- PLAYER_APPRENTICE.field_B8[i].unk2 = sub_819FF98(PLAYER_APPRENTICE.field_B8[i].unk0_1);
+ gApprenticePartyMovesData->moveSlots[id][gApprenticePartyMovesData->moveCounter] = rand1;
+ PLAYER_APPRENTICE.questions[i].moveSlot = rand1;
+ PLAYER_APPRENTICE.questions[i].data = GetRandomAlternateMove(PLAYER_APPRENTICE.questions[i].monId);
}
}
}
- FREE_AND_SET_NULL(gUnknown_030062EC);
+ FREE_AND_SET_NULL(gApprenticePartyMovesData);
}
// No idea why a do-while loop is needed, but it will not match without it.
-#define APPRENTICE_SPECIES_ID(speciesArrId, monId) speciesArrId = (PLAYER_APPRENTICE.monIds[monId] >> \
- (((PLAYER_APPRENTICE.field_B2_0 >> monId) & 1) << 2)) & 0xF; \
+#define APPRENTICE_SPECIES_ID(speciesArrId, monId) speciesArrId = (PLAYER_APPRENTICE.speciesIds[monId] >> \
+ (((PLAYER_APPRENTICE.party >> monId) & 1) << 2)) & 0xF; \
do {} while (0)
// Why the need to have two macros do the exact thing differently?
-#define APPRENTICE_SPECIES_ID_2(speciesArrId, monId) { u8 a0 = ((PLAYER_APPRENTICE.field_B2_0 >> monId) & 1);\
- speciesArrId = PLAYER_APPRENTICE.monIds[monId]; \
+#define APPRENTICE_SPECIES_ID_2(speciesArrId, monId) { u8 a0 = ((PLAYER_APPRENTICE.party >> monId) & 1);\
+ speciesArrId = PLAYER_APPRENTICE.speciesIds[monId]; \
speciesArrId = ((speciesArrId) >> (a0 << 2)) & 0xF; \
}
-static u16 sub_819FF98(u8 arg0)
+// Get the second move choice for the "Which move" question
+// Unlike the first move choice, this can be either a level up move or a TM/HM move
+static u16 GetRandomAlternateMove(u8 monId)
{
u8 i, j;
u8 id;
- u8 knownMovesCount;
+ u8 numLearnsetMoves;
u16 species;
const u16 *learnset;
- bool32 var_24 = FALSE;
- u16 moveId = 0;
- bool32 valid;
+ bool32 needTMs = FALSE;
+ u16 moveId = MOVE_NONE;
+ bool32 shouldUseMove;
u8 level;
- if (arg0 < 3)
+ if (monId < MULTI_PARTY_SIZE)
{
- APPRENTICE_SPECIES_ID(id, arg0);
+ APPRENTICE_SPECIES_ID(id, monId);
}
else
{
@@ -1286,207 +361,224 @@ static u16 sub_819FF98(u8 arg0)
species = gApprentices[PLAYER_APPRENTICE.id].species[id];
learnset = gLevelUpLearnsets[species];
j = 0;
- if (PLAYER_APPRENTICE.activeLvlMode == 1)
+
+ // Despite being open level, level up moves are only read up to level 60
+ if (PLAYER_APPRENTICE.lvlMode == APPRENTICE_LVL_MODE_50)
level = 50;
- else
+ else // == APPRENTICE_LVL_MODE_OPEN
level = 60;
- for (j = 0; learnset[j] != 0xFFFF; j++)
+ for (j = 0; learnset[j] != LEVEL_UP_END; j++)
{
- if ((learnset[j] & 0xFE00) > (level << 9))
+ if ((learnset[j] & LEVEL_UP_MOVE_LV) > (level << 9))
break;
}
- knownMovesCount = j;
+ numLearnsetMoves = j;
i = 0;
- while (i <= MAX_MON_MOVES)
+
+ // i < 5 here is arbitrary, i isnt used and is only incremented when the selected move isnt in sValidApprenticeMoves
+ // This while loop contains 3 potential infinite loops, though none of them would occur in the base game
+ while (i < 5)
{
- if (Random() % 2 == 0 || var_24 == TRUE)
+ if (Random() % 2 == 0 || needTMs == TRUE)
{
+ // Get TM move
+ // NOTE: Below is an infinite loop if a species that only learns TMs for moves
+ // that are also in its level up learnset is assigned to an Apprentice
do
{
+ // NOTE: Below is an infinite loop if a species which cannot learn TMs is assigned to an Apprentice
do
{
id = Random() % (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES);
- valid = CanSpeciesLearnTMHM(species, id);
+ shouldUseMove = CanSpeciesLearnTMHM(species, id);
}
- while (!valid);
+ while (!shouldUseMove);
moveId = ItemIdToBattleMoveId(ITEM_TM01 + id);
- valid = TRUE;
+ shouldUseMove = TRUE;
- if (knownMovesCount < 5)
+ if (numLearnsetMoves <= MAX_MON_MOVES)
j = 0;
else
- j = knownMovesCount - MAX_MON_MOVES;
+ j = numLearnsetMoves - MAX_MON_MOVES;
- for (; j < knownMovesCount; j++)
+ for (; j < numLearnsetMoves; j++)
{
- if ((learnset[j] & 0x1FF) == moveId)
+ // Keep looking for TMs until one not in the level up learnset is found
+ if ((learnset[j] & LEVEL_UP_MOVE_ID) == moveId)
{
- valid = FALSE;
+ shouldUseMove = FALSE;
break;
}
}
- } while (valid != TRUE);
+ } while (shouldUseMove != TRUE);
}
else
{
- if (knownMovesCount <= MAX_MON_MOVES)
+ if (numLearnsetMoves <= MAX_MON_MOVES)
{
- var_24 = TRUE;
+ needTMs = TRUE;
continue;
}
else
{
+ // Get level up move
+ // NOTE: Below is an infinite loop if a mon whose last 4 moves contain
+ // all the moves in the rest of its learnset is assigned to an Apprentice
do
{
- u8 learnsetId = Random() % (knownMovesCount - MAX_MON_MOVES);
- moveId = learnset[learnsetId] & 0x1FF;
- valid = TRUE;
- for (j = knownMovesCount - MAX_MON_MOVES; j < knownMovesCount; j++)
+ // Get a random move excluding the 4 it would know at max level
+ u8 learnsetId = Random() % (numLearnsetMoves - MAX_MON_MOVES);
+ moveId = learnset[learnsetId] & LEVEL_UP_MOVE_ID;
+ shouldUseMove = TRUE;
+
+ for (j = numLearnsetMoves - MAX_MON_MOVES; j < numLearnsetMoves; j++)
{
- if ((learnset[j] & 0x1FF) == moveId)
+ // Keep looking for moves until one not in the last 4 is found
+ if ((learnset[j] & LEVEL_UP_MOVE_ID) == moveId)
{
- valid = FALSE;
+ shouldUseMove = FALSE;
break;
}
}
- } while (valid != TRUE);
+ } while (shouldUseMove != TRUE);
}
}
- if (sub_81A0194(arg0, moveId))
+ if (TrySetMove(monId, moveId))
{
- if (gUnknown_08611370[moveId])
+ if (sValidApprenticeMoves[moveId])
break;
i++;
}
}
- gUnknown_030062EC->unk0++;
+ gApprenticePartyMovesData->moveCounter++;
return moveId;
}
-static bool8 sub_81A0194(u8 arg0, u16 moveId)
+static bool8 TrySetMove(u8 monId, u16 moveId)
{
u8 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < NUM_WHICH_MOVE_QUESTIONS; i++)
{
- if (gUnknown_030062EC->unk2[arg0][i] == moveId)
+ if (gApprenticePartyMovesData->moves[monId][i] == moveId)
return FALSE;
}
- gUnknown_030062EC->unk2[arg0][gUnknown_030062EC->unk0] = moveId;
+ gApprenticePartyMovesData->moves[monId][gApprenticePartyMovesData->moveCounter] = moveId;
return TRUE;
}
static void GetLatestLearnedMoves(u16 species, u16 *moves)
{
u8 i, j;
- u8 level, knownMovesCount;
+ u8 level, numLearnsetMoves;
const u16 *learnset;
- if (PLAYER_APPRENTICE.activeLvlMode == 1)
+ if (PLAYER_APPRENTICE.lvlMode == APPRENTICE_LVL_MODE_50)
level = 50;
- else
+ else // == APPRENTICE_LVL_MODE_OPEN
level = 60;
learnset = gLevelUpLearnsets[species];
- for (i = 0; learnset[i] != 0xFFFF; i++)
+ for (i = 0; learnset[i] != LEVEL_UP_END; i++)
{
- if ((learnset[i] & 0xFE00) > (level << 9))
+ if ((learnset[i] & LEVEL_UP_MOVE_LV) > (level << 9))
break;
}
- knownMovesCount = i;
- if (knownMovesCount > MAX_MON_MOVES)
- knownMovesCount = MAX_MON_MOVES;
+ numLearnsetMoves = i;
+ if (numLearnsetMoves > MAX_MON_MOVES)
+ numLearnsetMoves = MAX_MON_MOVES;
- for (j = 0; j < knownMovesCount; j++)
- moves[j] = learnset[(i - 1) - j] & 0x1FF;
+ for (j = 0; j < numLearnsetMoves; j++)
+ moves[j] = learnset[(i - 1) - j] & LEVEL_UP_MOVE_ID;
}
-static u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2)
+// Get the level up move or previously suggested move to be the first move choice
+// Compare to GetRandomAlternateMove, which gets the move that will be the second choice
+static u16 GetDefaultMove(u8 monId, u8 speciesArrayId, u8 moveSlot)
{
- u16 moves[4];
- u8 i, count;
+ u16 moves[MAX_MON_MOVES];
+ u8 i, numQuestions;
- if (PLAYER_APPRENTICE.field_B1_1 < 3)
- return 0;
+ if (PLAYER_APPRENTICE.questionsAnswered < NUM_WHICH_MON_QUESTIONS)
+ return MOVE_NONE;
- count = 0;
- for (i = 0; i < 9; i++)
- {
- if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 0)
- break;
- count++;
- }
+ numQuestions = 0;
+ for (i = 0; i < APPRENTICE_MAX_QUESTIONS && PLAYER_APPRENTICE.questions[i].questionId != QUESTION_ID_WIN_SPEECH; i++)
+ numQuestions++;
- GetLatestLearnedMoves(gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId], moves);
- for (i = 0; i < count && i < PLAYER_APPRENTICE.field_B1_1 - 3; i++)
+ GetLatestLearnedMoves(gApprentices[PLAYER_APPRENTICE.id].species[speciesArrayId], moves);
+ for (i = 0; i < numQuestions && i < CURRENT_QUESTION_NUM; i++)
{
- if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 2
- && PLAYER_APPRENTICE.field_B8[i].unk0_1 == arg0
- && PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0)
+ if (PLAYER_APPRENTICE.questions[i].questionId == QUESTION_ID_WHICH_MOVE
+ && PLAYER_APPRENTICE.questions[i].monId == monId
+ && PLAYER_APPRENTICE.questions[i].suggestedChange)
{
- moves[PLAYER_APPRENTICE.field_B8[i].unk0_2] = PLAYER_APPRENTICE.field_B8[i].unk2;
+ moves[PLAYER_APPRENTICE.questions[i].moveSlot] = PLAYER_APPRENTICE.questions[i].data;
}
}
- return moves[arg2];
+ return moves[moveSlot];
}
-static void sub_81A0390(u8 arg0)
+static void SaveApprenticeParty(u8 numQuestions)
{
- struct ApprenticeMon *apprenticeMons[3];
+ struct ApprenticeMon *apprenticeMons[MULTI_PARTY_SIZE];
u8 i, j;
u32 speciesTableId;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MULTI_PARTY_SIZE; i++)
{
- gSaveBlock2Ptr->apprentices[0].party[i].species = 0;
- gSaveBlock2Ptr->apprentices[0].party[i].item = 0;
+ gSaveBlock2Ptr->apprentices[0].party[i].species = SPECIES_NONE;
+ gSaveBlock2Ptr->apprentices[0].party[i].item = ITEM_NONE;
for (j = 0; j < MAX_MON_MOVES; j++)
- gSaveBlock2Ptr->apprentices[0].party[i].moves[j] = 0;
+ gSaveBlock2Ptr->apprentices[0].party[i].moves[j] = MOVE_NONE;
}
- j = PLAYER_APPRENTICE.field_B1_2;
- for (i = 0; i < 3; i++)
+ // Save party order
+ j = PLAYER_APPRENTICE.leadMonId;
+ for (i = 0; i < MULTI_PARTY_SIZE; i++)
{
apprenticeMons[j] = &gSaveBlock2Ptr->apprentices[0].party[i];
- j = (j + 1) % 3;
+ j = (j + 1) % (MULTI_PARTY_SIZE);
}
- for (i = 0; i < 3; i++)
+ // Save party species
+ for (i = 0; i < MULTI_PARTY_SIZE; i++)
{
APPRENTICE_SPECIES_ID(speciesTableId, i);
apprenticeMons[i]->species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId];
GetLatestLearnedMoves(apprenticeMons[i]->species, apprenticeMons[i]->moves);
}
- for (i = 0; i < arg0; i++)
+ // Update party based on response to held item / move choice questions
+ for (i = 0; i < numQuestions; i++)
{
- u8 var1 = PLAYER_APPRENTICE.field_B8[i].unk0_0;
- u8 monId = PLAYER_APPRENTICE.field_B8[i].unk0_1;
- if (var1 == 1)
+ u8 questionId = PLAYER_APPRENTICE.questions[i].questionId;
+ u8 monId = PLAYER_APPRENTICE.questions[i].monId;
+ if (questionId == QUESTION_ID_WHAT_ITEM)
{
- if (PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0)
- apprenticeMons[monId]->item = PLAYER_APPRENTICE.field_B8[i].unk2;
+ if (PLAYER_APPRENTICE.questions[i].suggestedChange)
+ apprenticeMons[monId]->item = PLAYER_APPRENTICE.questions[i].data;
}
- else if (var1 == 2)
+ else if (questionId == QUESTION_ID_WHICH_MOVE)
{
- if (PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0)
+ if (PLAYER_APPRENTICE.questions[i].suggestedChange)
{
- u32 moveSlot = PLAYER_APPRENTICE.field_B8[i].unk0_2;
- apprenticeMons[monId]->moves[moveSlot] = PLAYER_APPRENTICE.field_B8[i].unk2;
+ u32 moveSlot = PLAYER_APPRENTICE.questions[i].moveSlot;
+ apprenticeMons[monId]->moves[moveSlot] = PLAYER_APPRENTICE.questions[i].data;
}
}
}
}
-static void CreateMenuWithAnswers(u8 arg0)
+static void CreateApprenticeMenu(u8 menu)
{
u8 i;
u8 windowId;
@@ -1497,19 +589,19 @@ static void CreateMenuWithAnswers(u8 arg0)
u8 top;
s32 pixelWidth;
- switch (arg0)
+ switch (menu)
{
case APPRENTICE_ASK_WHICH_LEVEL:
- left = 0x12;
+ left = 18;
top = 8;
strings[0] = gText_Lv50;
strings[1] = gText_OpenLevel;
break;
case APPRENTICE_ASK_3SPECIES:
- count = 3;
- left = 0x12;
+ count = MULTI_PARTY_SIZE;
+ left = 18;
top = 6;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MULTI_PARTY_SIZE; i++)
{
u16 species;
u32 speciesTableId;
@@ -1520,27 +612,27 @@ static void CreateMenuWithAnswers(u8 arg0)
}
break;
case APPRENTICE_ASK_2SPECIES:
- left = 0x12;
+ left = 18;
top = 8;
- if (PLAYER_APPRENTICE.field_B1_1 > 2)
+ if (PLAYER_APPRENTICE.questionsAnswered >= NUM_WHICH_MON_QUESTIONS)
return;
- strings[1] = gSpeciesNames[gUnknown_030062F0->unk2];
- strings[0] = gSpeciesNames[gUnknown_030062F0->unk0];
+ strings[1] = gSpeciesNames[gApprenticeQuestionData->altSpeciesId];
+ strings[0] = gSpeciesNames[gApprenticeQuestionData->speciesId];
break;
case APPRENTICE_ASK_MOVES:
- left = 0x11;
+ left = 17;
top = 8;
- strings[0] = gMoveNames[gUnknown_030062F0->unk4];
- strings[1] = gMoveNames[gUnknown_030062F0->unk6];
+ strings[0] = gMoveNames[gApprenticeQuestionData->moveId1];
+ strings[1] = gMoveNames[gApprenticeQuestionData->moveId2];
break;
case APPRENTICE_ASK_GIVE:
- left = 0x12;
+ left = 18;
top = 8;
strings[0] = gText_Give;
strings[1] = gText_NoNeed;
break;
case APPRENTICE_ASK_YES_NO:
- left = 0x14;
+ left = 20;
top = 8;
strings[0] = gText_Yes;
strings[1] = gText_No;
@@ -1559,8 +651,8 @@ static void CreateMenuWithAnswers(u8 arg0)
pixelWidth = width;
}
- width = convert_pixel_width_to_tile_width(pixelWidth);
- left = sub_80E2D5C(left, width);
+ width = ConvertPixelWidthToTileWidth(pixelWidth);
+ left = ScriptMenu_AdjustLeftCoordFromWidth(left, width);
windowId = CreateAndShowWindow(left, top, width, count * 2);
SetStandardWindowBorderStyle(windowId, 0);
@@ -1623,12 +715,12 @@ static void RemoveAndHideWindow(u8 windowId)
RemoveWindow(windowId);
}
-static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId)
+static void CreateChooseAnswerTask(bool8 noBButton, u8 answers, u8 windowId)
{
u8 taskId = CreateTask(Task_ChooseAnswer, 80);
gTasks[taskId].tNoBButton = noBButton;
- if (itemsCount > 3)
+ if (answers > 3)
gTasks[taskId].tWrapAround = TRUE;
else
gTasks[taskId].tWrapAround = FALSE;
@@ -1649,71 +741,79 @@ static void Script_ResetPlayerApprentice(void)
{
u8 i;
- sub_819FBC8();
- PLAYER_APPRENTICE.activeLvlMode = 0;
- PLAYER_APPRENTICE.field_B1_1 = 0;
- PLAYER_APPRENTICE.field_B1_2 = 0;
- PLAYER_APPRENTICE.field_B2_0 = 0;
+ SetApprenticeId();
+ PLAYER_APPRENTICE.lvlMode = 0;
+ PLAYER_APPRENTICE.questionsAnswered = 0;
+ PLAYER_APPRENTICE.leadMonId = 0;
+ PLAYER_APPRENTICE.party = 0;
- for (i = 0; i < 3; i++)
- PLAYER_APPRENTICE.monIds[i] = 0;
+ for (i = 0; i < MULTI_PARTY_SIZE; i++)
+ PLAYER_APPRENTICE.speciesIds[i] = 0;
- for (i = 0; i < 9; i++)
+ for (i = 0; i < APPRENTICE_MAX_QUESTIONS; i++)
{
- PLAYER_APPRENTICE.field_B8[i].unk0_0 = 0;
- PLAYER_APPRENTICE.field_B8[i].unk0_1 = 0;
- PLAYER_APPRENTICE.field_B8[i].unk0_2 = 0;
- PLAYER_APPRENTICE.field_B8[i].unk0_3 = 0;
- PLAYER_APPRENTICE.field_B8[i].unk2 = 0;
+ PLAYER_APPRENTICE.questions[i].questionId = 0;
+ PLAYER_APPRENTICE.questions[i].monId = 0;
+ PLAYER_APPRENTICE.questions[i].moveSlot = 0;
+ PLAYER_APPRENTICE.questions[i].suggestedChange = 0;
+ PLAYER_APPRENTICE.questions[i].data = 0;
}
}
-static void Script_IsPlayersApprenticeActive(void)
+static void Script_GivenApprenticeLvlMode(void)
{
- if (!IsPlayersApprenticeActive())
+ if (!GivenApprenticeLvlMode())
gSpecialVar_Result = FALSE;
else
gSpecialVar_Result = TRUE;
}
-static void Script_SetPlayersApprenticeLvlMode(void)
+// VAR_0x8005 is 1 + the selection value from the multichoice APPRENTICE_ASK_WHICH_LEVEL
+// i.e. APPRENTICE_LVL_MODE_50 or APPRENTICE_LVL_MODE_OPEN
+static void Script_SetApprenticeLvlMode(void)
{
SetPlayersApprenticeLvlMode(gSpecialVar_0x8005);
}
-static void sub_81A0978(void)
+// Never called, APPRENTICE_FUNC_SET_ID is unused
+static void Script_SetApprenticeId(void)
{
- sub_819FBC8();
+ SetApprenticeId();
}
-static void sub_81A0984(void)
+static void Script_SetRandomQuestionData(void)
{
- sub_819FD64();
+ SetRandomQuestionData();
}
-static void sub_81A0990(void)
+static void IncrementQuestionsAnswered(void)
{
- PLAYER_APPRENTICE.field_B1_1++;
+ PLAYER_APPRENTICE.questionsAnswered++;
}
-static void sub_81A09B4(void)
+// The first 3 questions answered after meeting the Apprentice are always selecting party mons
+// after which this is never called
+static void GetNumApprenticePartyMonsAssigned(void)
{
- gSpecialVar_Result = PLAYER_APPRENTICE.field_B1_1;
+ gSpecialVar_Result = PLAYER_APPRENTICE.questionsAnswered;
}
-static void sub_81A09D0(void)
+// Never called, APPRENTICE_FUNC_IS_FINAL_QUESTION is unused
+static void IsFinalQuestion(void)
{
- s32 var = PLAYER_APPRENTICE.field_B1_1 - 3;
- if (var < 0)
+ s32 questionNum = CURRENT_QUESTION_NUM;
+
+ if (questionNum < 0)
{
+ // Not finished asking initial questions
gSpecialVar_Result = FALSE;
}
else
{
- if (var > 8)
+ if (questionNum > APPRENTICE_MAX_QUESTIONS - 1)
gSpecialVar_Result = TRUE;
- if (!PLAYER_APPRENTICE.field_B8[var].unk0_0)
+ if (PLAYER_APPRENTICE.questions[questionNum].questionId == QUESTION_ID_WIN_SPEECH)
gSpecialVar_Result = TRUE;
else
gSpecialVar_Result = FALSE;
@@ -1722,7 +822,7 @@ static void sub_81A09D0(void)
static void Script_CreateApprenticeMenu(void)
{
- CreateMenuWithAnswers(gSpecialVar_0x8005);
+ CreateApprenticeMenu(gSpecialVar_0x8005);
}
static void Task_WaitForPrintingMessage(u8 taskId)
@@ -1737,77 +837,77 @@ static void Task_WaitForPrintingMessage(u8 taskId)
}
}
-static void PrintMessage(void)
+static void PrintApprenticeMessage(void)
{
const u8 *string;
- if (gSpecialVar_0x8006 == 6)
+ if (gSpecialVar_0x8006 == APPRENTICE_MSG_WHICH_MON)
{
- string = gUnknown_08610FF0[PLAYER_APPRENTICE.id][0];
+ string = sApprenticeWhichMonTexts[PLAYER_APPRENTICE.id][0];
}
- else if (gSpecialVar_0x8006 == 7)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_THANKS_MON)
{
- string = gUnknown_08610FF0[PLAYER_APPRENTICE.id][1];
+ string = sApprenticeWhichMonTexts[PLAYER_APPRENTICE.id][1];
}
- else if (gSpecialVar_0x8006 == 8)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_WHICH_MOVE)
{
- string = gUnknown_086111B0[PLAYER_APPRENTICE.id][0];
+ string = sApprenticeWhichMoveTexts[PLAYER_APPRENTICE.id][0];
}
- else if (gSpecialVar_0x8006 == 9)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_THANKS_MOVE)
{
- string = gUnknown_086111B0[PLAYER_APPRENTICE.id][1];
+ string = sApprenticeWhichMoveTexts[PLAYER_APPRENTICE.id][1];
}
- else if (gSpecialVar_0x8006 == 4)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_WHICH_MON_FIRST)
{
- string = gUnknown_08611230[PLAYER_APPRENTICE.id][0];
+ string = sApprenticeWhichMonFirstTexts[PLAYER_APPRENTICE.id][0];
}
- else if (gSpecialVar_0x8006 == 5)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_THANKS_MON_FIRST)
{
- string = gUnknown_08611230[PLAYER_APPRENTICE.id][1];
+ string = sApprenticeWhichMonFirstTexts[PLAYER_APPRENTICE.id][1];
}
- else if (gSpecialVar_0x8006 == 10)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_WHAT_HELD_ITEM)
{
- string = gUnknown_08611070[PLAYER_APPRENTICE.id][0];
+ string = sApprenticeHeldItemTexts[PLAYER_APPRENTICE.id][0];
}
- else if (gSpecialVar_0x8006 == 11)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_PICK_WIN_SPEECH)
{
- string = gUnknown_086112B0[PLAYER_APPRENTICE.id][0];
+ string = sApprenticePickWinSpeechTexts[PLAYER_APPRENTICE.id][0];
}
- else if (gSpecialVar_0x8006 == 12)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_THANKS_HELD_ITEM)
{
- string = gUnknown_08611070[PLAYER_APPRENTICE.id][3];
+ string = sApprenticeHeldItemTexts[PLAYER_APPRENTICE.id][3];
}
- else if (gSpecialVar_0x8006 == 13)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_HOLD_NOTHING)
{
- string = gUnknown_08611070[PLAYER_APPRENTICE.id][1];
+ string = sApprenticeHeldItemTexts[PLAYER_APPRENTICE.id][1];
}
- else if (gSpecialVar_0x8006 == 16)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_ITEM_ALREADY_SUGGESTED)
{
- string = gUnknown_08611070[PLAYER_APPRENTICE.id][4];
+ string = sApprenticeHeldItemTexts[PLAYER_APPRENTICE.id][4];
}
- else if (gSpecialVar_0x8006 == 14)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_THANKS_NO_HELD_ITEM)
{
- string = gUnknown_08611070[PLAYER_APPRENTICE.id][2];
+ string = sApprenticeHeldItemTexts[PLAYER_APPRENTICE.id][2];
}
- else if (gSpecialVar_0x8006 == 15)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_THANKS_WIN_SPEECH)
{
- string = gUnknown_086112B0[PLAYER_APPRENTICE.id][1];
+ string = sApprenticePickWinSpeechTexts[PLAYER_APPRENTICE.id][1];
}
- else if (gSpecialVar_0x8006 == 0)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_PLEASE_TEACH)
{
- string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][0];
+ string = sApprenticeFirstMeetingTexts[PLAYER_APPRENTICE.id][0];
}
- else if (gSpecialVar_0x8006 == 1)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_REJECT)
{
- string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][1];
+ string = sApprenticeFirstMeetingTexts[PLAYER_APPRENTICE.id][1];
}
- else if (gSpecialVar_0x8006 == 2)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_WHICH_LVL_MODE)
{
- string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][2];
+ string = sApprenticeFirstMeetingTexts[PLAYER_APPRENTICE.id][2];
}
- else if (gSpecialVar_0x8006 == 3)
+ else if (gSpecialVar_0x8006 == APPRENTICE_MSG_THANKS_LVL_MODE)
{
- string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][3];
+ string = sApprenticeFirstMeetingTexts[PLAYER_APPRENTICE.id][3];
}
else
{
@@ -1820,121 +920,129 @@ static void PrintMessage(void)
CreateTask(Task_WaitForPrintingMessage, 1);
}
-static void Script_PrintMessage(void)
+static void Script_PrintApprenticeMessage(void)
{
ScriptContext2_Enable();
FreezeEventObjects();
sub_808B864();
sub_808BCF4();
DrawDialogueFrame(0, 1);
- PrintMessage();
+ PrintApprenticeMessage();
}
-static void sub_81A0CC0(void)
+static void ApprenticeGetQuestion(void)
{
- if (PLAYER_APPRENTICE.field_B1_1 < 3)
+ if (PLAYER_APPRENTICE.questionsAnswered < NUM_WHICH_MON_QUESTIONS)
{
- gSpecialVar_Result = 2;
+ gSpecialVar_Result = APPRENTICE_QUESTION_WHICH_MON;
}
- else if (PLAYER_APPRENTICE.field_B1_1 > 11)
+ else if (PLAYER_APPRENTICE.questionsAnswered > (APPRENTICE_MAX_QUESTIONS + NUM_WHICH_MON_QUESTIONS - 1))
{
- gSpecialVar_Result = 5;
+ gSpecialVar_Result = APPRENTICE_QUESTION_WIN_SPEECH;
}
else
{
- s32 id = PLAYER_APPRENTICE.field_B1_1 - 3;
- switch (PLAYER_APPRENTICE.field_B8[id].unk0_0)
+ s32 id = CURRENT_QUESTION_NUM;
+ switch (PLAYER_APPRENTICE.questions[id].questionId)
{
- case 1:
- gSpecialVar_Result = 4;
+ case QUESTION_ID_WHAT_ITEM:
+ gSpecialVar_Result = APPRENTICE_QUESTION_WHAT_ITEM;
break;
- case 2:
- gSpecialVar_Result = 3;
+ case QUESTION_ID_WHICH_MOVE:
+ gSpecialVar_Result = APPRENTICE_QUESTION_WHICH_MOVE;
break;
- case 3:
- gSpecialVar_Result = 1;
+ case QUESTION_ID_WHICH_FIRST:
+ gSpecialVar_Result = APPRENTICE_QUESTION_WHICH_FIRST;
break;
default:
- gSpecialVar_Result = 5;
+ //case QUESTION_ID_WIN_SPEECH:
+ gSpecialVar_Result = APPRENTICE_QUESTION_WIN_SPEECH;
break;
}
}
}
-static void sub_81A0D40(void)
+// gSpecialVar_0x8005 is 0 or 1 for the mon selection (0 is already on the team)
+// gSpecialVar_0x8006 is 0-2 for the number of party mons selected so far
+static void SetApprenticePartyMon(void)
{
if (gSpecialVar_0x8005)
{
- u8 bitNo = gSpecialVar_0x8006;
- PLAYER_APPRENTICE.field_B2_0 |= 1 << bitNo;
+ u8 partySlot = gSpecialVar_0x8006;
+ PLAYER_APPRENTICE.party |= 1 << partySlot;
}
}
-static void sub_81A0D80(void)
+// gSpecialVar_0x8005 is 0 or 1 for the move selection
+// Selection 0 is implicitly the default move assigned
+static void SetApprenticeMonMove(void)
{
- if (PLAYER_APPRENTICE.field_B1_1 >= 3)
+ if (PLAYER_APPRENTICE.questionsAnswered >= NUM_WHICH_MON_QUESTIONS)
{
- u8 id = PLAYER_APPRENTICE.field_B1_1 - 3;
+ u8 id = CURRENT_QUESTION_NUM;
if (gSpecialVar_0x8005)
- PLAYER_APPRENTICE.field_B8[id].unk0_3 = 1;
+ PLAYER_APPRENTICE.questions[id].suggestedChange = TRUE;
else
- PLAYER_APPRENTICE.field_B8[id].unk0_3 = 0;
+ PLAYER_APPRENTICE.questions[id].suggestedChange = FALSE;
}
}
-static void sub_81A0DD4(void)
+static void InitQuestionData(void)
{
u8 i;
u8 count = 0;
u8 id1, id2;
- for (i = 0; i < 9 && PLAYER_APPRENTICE.field_B8[i].unk0_0; count++, i++)
+ for (i = 0; i < APPRENTICE_MAX_QUESTIONS && (PLAYER_APPRENTICE.questions[i].questionId != QUESTION_ID_WIN_SPEECH); count++, i++)
;
- gUnknown_030062F0 = AllocZeroed(sizeof(*gUnknown_030062F0));
- if (gSpecialVar_0x8005 == 2)
+ gApprenticeQuestionData = AllocZeroed(sizeof(*gApprenticeQuestionData));
+ if (gSpecialVar_0x8005 == APPRENTICE_QUESTION_WHICH_MON)
{
- if (PLAYER_APPRENTICE.field_B1_1 < 3)
+ if (PLAYER_APPRENTICE.questionsAnswered < NUM_WHICH_MON_QUESTIONS)
{
- id1 = PLAYER_APPRENTICE.monIds[PLAYER_APPRENTICE.field_B1_1] >> 4;
- gUnknown_030062F0->unk2 = gApprentices[PLAYER_APPRENTICE.id].species[id1];
+ // For the first MULTI_PARTY_SIZE (3) questions, a mon is asked to be selected for the Apprentice's party
+ id1 = PLAYER_APPRENTICE.speciesIds[PLAYER_APPRENTICE.questionsAnswered] >> 4;
+ gApprenticeQuestionData->altSpeciesId = gApprentices[PLAYER_APPRENTICE.id].species[id1];
- id2 = PLAYER_APPRENTICE.monIds[PLAYER_APPRENTICE.field_B1_1] & 0xF;
- gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id2];
+ id2 = PLAYER_APPRENTICE.speciesIds[PLAYER_APPRENTICE.questionsAnswered] & 0xF;
+ gApprenticeQuestionData->speciesId = gApprentices[PLAYER_APPRENTICE.id].species[id2];
}
}
- else if (gSpecialVar_0x8005 == 3)
+ else if (gSpecialVar_0x8005 == APPRENTICE_QUESTION_WHICH_MOVE)
{
- if (PLAYER_APPRENTICE.field_B1_1 >= 3
- && PLAYER_APPRENTICE.field_B1_1 < count + 3
- && PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_0 == 2)
+ if (PLAYER_APPRENTICE.questionsAnswered >= NUM_WHICH_MON_QUESTIONS
+ && PLAYER_APPRENTICE.questionsAnswered < count + NUM_WHICH_MON_QUESTIONS
+ && PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].questionId == QUESTION_ID_WHICH_MOVE)
{
- count = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_1;
+ // count re-used as monId
+ count = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].monId;
APPRENTICE_SPECIES_ID_2(id1, count);
- gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id1];
- gUnknown_030062F0->unk4 = sub_81A0284(count, id1, PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_2);
- gUnknown_030062F0->unk6 = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2;
+ gApprenticeQuestionData->speciesId = gApprentices[PLAYER_APPRENTICE.id].species[id1];
+ gApprenticeQuestionData->moveId1 = GetDefaultMove(count, id1, PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].moveSlot);
+ gApprenticeQuestionData->moveId2 = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data;
}
}
- else if (gSpecialVar_0x8005 == 4)
+ else if (gSpecialVar_0x8005 == APPRENTICE_QUESTION_WHAT_ITEM)
{
- if (PLAYER_APPRENTICE.field_B1_1 >= 3
- && PLAYER_APPRENTICE.field_B1_1 < count + 3
- && PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_0 == 1)
+ if (PLAYER_APPRENTICE.questionsAnswered >= NUM_WHICH_MON_QUESTIONS
+ && PLAYER_APPRENTICE.questionsAnswered < count + NUM_WHICH_MON_QUESTIONS
+ && PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].questionId == QUESTION_ID_WHAT_ITEM)
{
- count = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_1;
+ // count re-used as monId
+ count = PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].monId;
APPRENTICE_SPECIES_ID_2(id2, count);
- gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id2];
+ gApprenticeQuestionData->speciesId = gApprentices[PLAYER_APPRENTICE.id].species[id2];
}
}
}
-static void sub_81A0FE4(void)
+static void FreeQuestionData(void)
{
- FREE_AND_SET_NULL(gUnknown_030062F0);
+ FREE_AND_SET_NULL(gApprenticeQuestionData);
}
-static void sub_81A0FFC(void)
+static void ApprenticeBufferString(void)
{
u8 *stringDst;
u8 text[16];
@@ -1958,41 +1066,41 @@ static void sub_81A0FFC(void)
switch (gSpecialVar_0x8006)
{
case APPRENTICE_BUFF_SPECIES1:
- StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk0]);
+ StringCopy(stringDst, gSpeciesNames[gApprenticeQuestionData->speciesId]);
break;
case APPRENTICE_BUFF_SPECIES2:
- StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk2]);
+ StringCopy(stringDst, gSpeciesNames[gApprenticeQuestionData->altSpeciesId]);
break;
case APPRENTICE_BUFF_SPECIES3:
- StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk0]);
+ StringCopy(stringDst, gSpeciesNames[gApprenticeQuestionData->speciesId]);
break;
case APPRENTICE_BUFF_MOVE1:
- StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk4]);
+ StringCopy(stringDst, gMoveNames[gApprenticeQuestionData->moveId1]);
break;
case APPRENTICE_BUFF_MOVE2:
- StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk6]);
+ StringCopy(stringDst, gMoveNames[gApprenticeQuestionData->moveId2]);
break;
case APPRENTICE_BUFF_ITEM:
- StringCopy(stringDst, ItemId_GetName(PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2));
+ StringCopy(stringDst, ItemId_GetName(PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data));
break;
case APPRENTICE_BUFF_NAME:
TVShowConvertInternationalString(text, GetApprenticeNameInLanguage(PLAYER_APPRENTICE.id, LANGUAGE_ENGLISH), LANGUAGE_ENGLISH);
StringCopy(stringDst, text);
break;
case APPRENTICE_BUFF_LEVEL:
- if (PLAYER_APPRENTICE.activeLvlMode == 1)
+ if (PLAYER_APPRENTICE.lvlMode == APPRENTICE_LVL_MODE_50)
StringCopy(stringDst, gText_Lv50);
- else
+ else // == APPRENTICE_LVL_MODE_OPEN
StringCopy(stringDst, gText_OpenLevel);
break;
- case APPRENTICE_BUFF_EASY_CHAT:
- FrontierSpeechToString(gSaveBlock2Ptr->apprentices[0].easyChatWords);
+ case APPRENTICE_BUFF_WIN_SPEECH:
+ FrontierSpeechToString(gSaveBlock2Ptr->apprentices[0].speechWon);
StringCopy(stringDst, gStringVar4);
break;
- case APPRENTICE_BUFF_SPECIES4:
- if (PLAYER_APPRENTICE.field_B1_2 < 3)
+ case APPRENTICE_BUFF_LEAD_MON_SPECIES:
+ if (PLAYER_APPRENTICE.leadMonId < MULTI_PARTY_SIZE)
{
- APPRENTICE_SPECIES_ID(speciesArrayId, PLAYER_APPRENTICE.field_B1_2);
+ APPRENTICE_SPECIES_ID(speciesArrayId, PLAYER_APPRENTICE.leadMonId);
}
else
{
@@ -2003,56 +1111,57 @@ static void sub_81A0FFC(void)
}
}
-static void sub_81A11F8(void)
+static void SetLeadApprenticeMon(void)
{
- PLAYER_APPRENTICE.field_B1_2 = gSpecialVar_0x8005;
+ PLAYER_APPRENTICE.leadMonId = gSpecialVar_0x8005;
}
-static void sub_81A1218(void)
+static void Script_ApprenticeOpenBagMenu(void)
{
- sub_81AAC28();
+ ApprenticeOpenBagMenu();
}
-static void sub_81A1224(void)
+static void TrySetApprenticeHeldItem(void)
{
u8 i, j;
u8 count;
- if (PLAYER_APPRENTICE.field_B1_1 < 3)
+ if (PLAYER_APPRENTICE.questionsAnswered < NUM_WHICH_MON_QUESTIONS)
return;
- for (count = 0, j = 0; j < 9 && PLAYER_APPRENTICE.field_B8[j].unk0_0; count++, j++)
+ for (count = 0, j = 0; j < APPRENTICE_MAX_QUESTIONS && PLAYER_APPRENTICE.questions[j].questionId != QUESTION_ID_WIN_SPEECH; count++, j++)
;
- for (i = 0; i < count && i < PLAYER_APPRENTICE.field_B1_1 - 3; i++)
+ // Make sure the item hasnt already been suggested in previous questions
+ for (i = 0; i < count && i < CURRENT_QUESTION_NUM; i++)
{
do {} while(0);
- if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 1
- && PLAYER_APPRENTICE.field_B8[i].unk0_3
- && PLAYER_APPRENTICE.field_B8[i].unk2 == gSpecialVar_0x8005)
+ if (PLAYER_APPRENTICE.questions[i].questionId == QUESTION_ID_WHAT_ITEM
+ && PLAYER_APPRENTICE.questions[i].suggestedChange
+ && PLAYER_APPRENTICE.questions[i].data == gSpecialVar_0x8005)
{
- PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_3 = 0;
- PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2 = gSpecialVar_0x8005;
- gSpecialVar_Result = 0;
+ PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].suggestedChange = FALSE;
+ PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data = gSpecialVar_0x8005;
+ gSpecialVar_Result = FALSE;
return;
}
}
- PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_3 = 1;
- PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2 = gSpecialVar_0x8005;
- gSpecialVar_Result = 1;
+ PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].suggestedChange = TRUE;
+ PLAYER_APPRENTICE.questions[CURRENT_QUESTION_NUM].data = gSpecialVar_0x8005;
+ gSpecialVar_Result = TRUE;
}
-static void sub_81A1370(void)
+static void ShiftSavedApprentices(void)
{
s32 i;
- s32 r10;
- s32 r9;
+ s32 apprenticeNum;
+ s32 apprenticeIdx;
if (gSaveBlock2Ptr->apprentices[0].playerName[0] == EOS)
return;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < APPRENTICE_COUNT - 1; i++)
{
if (gSaveBlock2Ptr->apprentices[i + 1].playerName[0] == EOS)
{
@@ -2061,38 +1170,40 @@ static void sub_81A1370(void)
}
}
- r10 = 0xFFFF;
- r9 = -1;
- for (i = 1; i < 4; i++)
+ apprenticeNum = 0xFFFF;
+ apprenticeIdx = -1;
+ for (i = 1; i < APPRENTICE_COUNT; i++)
{
if (GetTrainerId(gSaveBlock2Ptr->apprentices[i].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId)
- && gSaveBlock2Ptr->apprentices[i].number < r10)
+ && gSaveBlock2Ptr->apprentices[i].number < apprenticeNum)
{
- r10 = gSaveBlock2Ptr->apprentices[i].number;
- r9 = i;
+ apprenticeNum = gSaveBlock2Ptr->apprentices[i].number;
+ apprenticeIdx = i;
}
}
- if (r9 > 0)
- gSaveBlock2Ptr->apprentices[r9] = gSaveBlock2Ptr->apprentices[0];
+ if (apprenticeIdx > 0)
+ gSaveBlock2Ptr->apprentices[apprenticeIdx] = gSaveBlock2Ptr->apprentices[0];
}
-static void sub_81A1438(void)
+// Apprentice is always saved in the first slot. Pre-existing Apprentices are moved by ShiftSavedApprentices
+static void SaveApprentice(void)
{
u8 i;
gSaveBlock2Ptr->apprentices[0].id = PLAYER_APPRENTICE.id;
- gSaveBlock2Ptr->apprentices[0].lvlMode = PLAYER_APPRENTICE.activeLvlMode;
+ gSaveBlock2Ptr->apprentices[0].lvlMode = PLAYER_APPRENTICE.lvlMode;
- for (i = 0; i < 9 && PLAYER_APPRENTICE.field_B8[i].unk0_0; i++)
+ // Count questions asked until the final (win speech) question was reached
+ for (i = 0; i < APPRENTICE_MAX_QUESTIONS && (PLAYER_APPRENTICE.questions[i].questionId != QUESTION_ID_WIN_SPEECH); i++)
;
- gSaveBlock2Ptr->apprentices[0].field_1 = i;
+ gSaveBlock2Ptr->apprentices[0].numQuestions = i;
if (gSaveBlock2Ptr->apprentices[0].number < 255)
gSaveBlock2Ptr->apprentices[0].number++;
- sub_81A0390(gSaveBlock2Ptr->apprentices[0].field_1);
- for (i = 0; i < 4; i++)
+ SaveApprenticeParty(gSaveBlock2Ptr->apprentices[0].numQuestions);
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
gSaveBlock2Ptr->apprentices[0].playerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
StringCopy(gSaveBlock2Ptr->apprentices[0].playerName, gSaveBlock2Ptr->playerName);
@@ -2100,13 +1211,13 @@ static void sub_81A1438(void)
CalcApprenticeChecksum(&gSaveBlock2Ptr->apprentices[0]);
}
-static void sub_81A150C(void)
+// Never called, APPRENTICE_FUNC_SET_GFX_SAVED is unused
+static void SetSavedApprenticeTrainerGfxId(void)
{
u8 i;
u8 mapObjectGfxId;
u8 class = gApprentices[gSaveBlock2Ptr->apprentices[0].id].facilityClass;
- // Search male classes.
for (i = 0; i < ARRAY_COUNT(gTowerMaleFacilityClasses) && gTowerMaleFacilityClasses[i] != class; i++)
;
if (i != ARRAY_COUNT(gTowerMaleFacilityClasses))
@@ -2125,7 +1236,7 @@ static void sub_81A150C(void)
}
}
-static void Script_SetPlayerApprenticeTrainerGfxId(void)
+static void SetPlayerApprenticeTrainerGfxId(void)
{
u8 i;
u8 mapObjectGfxId;
@@ -2149,14 +1260,16 @@ static void Script_SetPlayerApprenticeTrainerGfxId(void)
}
}
-static void sub_81A1638(void)
+// Both of the below functions may have been dummied / used for debug
+// In all cases theres a conditional for VAR_0x8004 right after the call to these functions
+static void GetShouldCheckApprenticeGone(void)
{
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE;
}
-static void sub_81A1644(void)
+static void GetShouldApprenticeLeave(void)
{
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE;
}
const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language)
@@ -2181,7 +1294,8 @@ const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language)
}
}
-static void sub_81A16B4(u8 taskId)
+// Functionally unused
+static void Task_SwitchToFollowupFuncAfterButtonPress(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
SwitchTaskToFollowupFunc(taskId);
@@ -2191,8 +1305,8 @@ static void Task_ExecuteFuncAfterButtonPress(u8 taskId)
{
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
{
- gUnknown_030062F4 = (void*)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 0x10)));
- gUnknown_030062F4();
+ gApprenticeFunc = (void*)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 16)));
+ gApprenticeFunc();
DestroyTask(taskId);
}
}
@@ -2204,8 +1318,9 @@ static void ExecuteFuncAfterButtonPress(void (*func)(void))
gTasks[taskId].data[1] = (u32)(func) >> 16;
}
-static void sub_81A175C(TaskFunc taskFunc)
+// Unused
+static void ExecuteFollowupFuncAfterButtonPress(TaskFunc task)
{
- u8 taskId = CreateTask(sub_81A16B4, 1);
- SetTaskFuncWithFollowupFunc(taskId, sub_81A16B4, taskFunc);
+ u8 taskId = CreateTask(Task_SwitchToFollowupFuncAfterButtonPress, 1);
+ SetTaskFuncWithFollowupFunc(taskId, Task_SwitchToFollowupFuncAfterButtonPress, task);
}
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index 3c07cc227..c9a6a6606 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -54,105 +54,105 @@ static void BattleAI_DoAIProcessing(void);
static void AIStackPushVar(const u8 *);
static bool8 AIStackPop(void);
-static void BattleAICmd_if_random_less_than(void);
-static void BattleAICmd_if_random_greater_than(void);
-static void BattleAICmd_if_random_equal(void);
-static void BattleAICmd_if_random_not_equal(void);
-static void BattleAICmd_score(void);
-static void BattleAICmd_if_hp_less_than(void);
-static void BattleAICmd_if_hp_more_than(void);
-static void BattleAICmd_if_hp_equal(void);
-static void BattleAICmd_if_hp_not_equal(void);
-static void BattleAICmd_if_status(void);
-static void BattleAICmd_if_not_status(void);
-static void BattleAICmd_if_status2(void);
-static void BattleAICmd_if_not_status2(void);
-static void BattleAICmd_if_status3(void);
-static void BattleAICmd_if_not_status3(void);
-static void BattleAICmd_if_side_affecting(void);
-static void BattleAICmd_if_not_side_affecting(void);
-static void BattleAICmd_if_less_than(void);
-static void BattleAICmd_if_more_than(void);
-static void BattleAICmd_if_equal(void);
-static void BattleAICmd_if_not_equal(void);
-static void BattleAICmd_if_less_than_ptr(void);
-static void BattleAICmd_if_more_than_ptr(void);
-static void BattleAICmd_if_equal_ptr(void);
-static void BattleAICmd_if_not_equal_ptr(void);
-static void BattleAICmd_if_move(void);
-static void BattleAICmd_if_not_move(void);
-static void BattleAICmd_if_in_bytes(void);
-static void BattleAICmd_if_not_in_bytes(void);
-static void BattleAICmd_if_in_hwords(void);
-static void BattleAICmd_if_not_in_hwords(void);
-static void BattleAICmd_if_user_has_attacking_move(void);
-static void BattleAICmd_if_user_has_no_attacking_moves(void);
-static void BattleAICmd_get_turn_count(void);
-static void BattleAICmd_get_type(void);
-static void BattleAICmd_get_considered_move_power(void);
-static void BattleAICmd_get_how_powerful_move_is(void);
-static void BattleAICmd_get_last_used_battler_move(void);
-static void BattleAICmd_if_equal_(void);
-static void BattleAICmd_if_not_equal_(void);
-static void BattleAICmd_if_user_goes(void);
-static void BattleAICmd_if_user_doesnt_go(void);
-static void BattleAICmd_nullsub_2A(void);
-static void BattleAICmd_nullsub_2B(void);
-static void BattleAICmd_count_usable_party_mons(void);
-static void BattleAICmd_get_considered_move(void);
-static void BattleAICmd_get_considered_move_effect(void);
-static void BattleAICmd_get_ability(void);
-static void BattleAICmd_get_highest_type_effectiveness(void);
-static void BattleAICmd_if_type_effectiveness(void);
-static void BattleAICmd_nullsub_32(void);
-static void BattleAICmd_nullsub_33(void);
-static void BattleAICmd_if_status_in_party(void);
-static void BattleAICmd_if_status_not_in_party(void);
-static void BattleAICmd_get_weather(void);
-static void BattleAICmd_if_effect(void);
-static void BattleAICmd_if_not_effect(void);
-static void BattleAICmd_if_stat_level_less_than(void);
-static void BattleAICmd_if_stat_level_more_than(void);
-static void BattleAICmd_if_stat_level_equal(void);
-static void BattleAICmd_if_stat_level_not_equal(void);
-static void BattleAICmd_if_can_faint(void);
-static void BattleAICmd_if_cant_faint(void);
-static void BattleAICmd_if_has_move(void);
-static void BattleAICmd_if_doesnt_have_move(void);
-static void BattleAICmd_if_has_move_with_effect(void);
-static void BattleAICmd_if_doesnt_have_move_with_effect(void);
-static void BattleAICmd_if_any_move_disabled_or_encored(void);
-static void BattleAICmd_if_curr_move_disabled_or_encored(void);
-static void BattleAICmd_flee(void);
-static void BattleAICmd_if_random_safari_flee(void);
-static void BattleAICmd_watch(void);
-static void BattleAICmd_get_hold_effect(void);
-static void BattleAICmd_get_gender(void);
-static void BattleAICmd_is_first_turn_for(void);
-static void BattleAICmd_get_stockpile_count(void);
-static void BattleAICmd_is_double_battle(void);
-static void BattleAICmd_get_used_held_item(void);
-static void BattleAICmd_get_move_type_from_result(void);
-static void BattleAICmd_get_move_power_from_result(void);
-static void BattleAICmd_get_move_effect_from_result(void);
-static void BattleAICmd_get_protect_count(void);
-static void BattleAICmd_nullsub_52(void);
-static void BattleAICmd_nullsub_53(void);
-static void BattleAICmd_nullsub_54(void);
-static void BattleAICmd_nullsub_55(void);
-static void BattleAICmd_nullsub_56(void);
-static void BattleAICmd_nullsub_57(void);
-static void BattleAICmd_call(void);
-static void BattleAICmd_goto(void);
-static void BattleAICmd_end(void);
-static void BattleAICmd_if_level_cond(void);
-static void BattleAICmd_if_target_taunted(void);
-static void BattleAICmd_if_target_not_taunted(void);
-static void BattleAICmd_check_ability(void);
-static void BattleAICmd_is_of_type(void);
-static void BattleAICmd_if_target_is_ally(void);
-static void BattleAICmd_if_flash_fired(void);
-static void BattleAICmd_if_holds_item(void);
+static void Cmd_if_random_less_than(void);
+static void Cmd_if_random_greater_than(void);
+static void Cmd_if_random_equal(void);
+static void Cmd_if_random_not_equal(void);
+static void Cmd_score(void);
+static void Cmd_if_hp_less_than(void);
+static void Cmd_if_hp_more_than(void);
+static void Cmd_if_hp_equal(void);
+static void Cmd_if_hp_not_equal(void);
+static void Cmd_if_status(void);
+static void Cmd_if_not_status(void);
+static void Cmd_if_status2(void);
+static void Cmd_if_not_status2(void);
+static void Cmd_if_status3(void);
+static void Cmd_if_not_status3(void);
+static void Cmd_if_side_affecting(void);
+static void Cmd_if_not_side_affecting(void);
+static void Cmd_if_less_than(void);
+static void Cmd_if_more_than(void);
+static void Cmd_if_equal(void);
+static void Cmd_if_not_equal(void);
+static void Cmd_if_less_than_ptr(void);
+static void Cmd_if_more_than_ptr(void);
+static void Cmd_if_equal_ptr(void);
+static void Cmd_if_not_equal_ptr(void);
+static void Cmd_if_move(void);
+static void Cmd_if_not_move(void);
+static void Cmd_if_in_bytes(void);
+static void Cmd_if_not_in_bytes(void);
+static void Cmd_if_in_hwords(void);
+static void Cmd_if_not_in_hwords(void);
+static void Cmd_if_user_has_attacking_move(void);
+static void Cmd_if_user_has_no_attacking_moves(void);
+static void Cmd_get_turn_count(void);
+static void Cmd_get_type(void);
+static void Cmd_get_considered_move_power(void);
+static void Cmd_get_how_powerful_move_is(void);
+static void Cmd_get_last_used_battler_move(void);
+static void Cmd_if_equal_(void);
+static void Cmd_if_not_equal_(void);
+static void Cmd_if_user_goes(void);
+static void Cmd_if_user_doesnt_go(void);
+static void Cmd_nullsub_2A(void);
+static void Cmd_nullsub_2B(void);
+static void Cmd_count_usable_party_mons(void);
+static void Cmd_get_considered_move(void);
+static void Cmd_get_considered_move_effect(void);
+static void Cmd_get_ability(void);
+static void Cmd_get_highest_type_effectiveness(void);
+static void Cmd_if_type_effectiveness(void);
+static void Cmd_nullsub_32(void);
+static void Cmd_nullsub_33(void);
+static void Cmd_if_status_in_party(void);
+static void Cmd_if_status_not_in_party(void);
+static void Cmd_get_weather(void);
+static void Cmd_if_effect(void);
+static void Cmd_if_not_effect(void);
+static void Cmd_if_stat_level_less_than(void);
+static void Cmd_if_stat_level_more_than(void);
+static void Cmd_if_stat_level_equal(void);
+static void Cmd_if_stat_level_not_equal(void);
+static void Cmd_if_can_faint(void);
+static void Cmd_if_cant_faint(void);
+static void Cmd_if_has_move(void);
+static void Cmd_if_doesnt_have_move(void);
+static void Cmd_if_has_move_with_effect(void);
+static void Cmd_if_doesnt_have_move_with_effect(void);
+static void Cmd_if_any_move_disabled_or_encored(void);
+static void Cmd_if_curr_move_disabled_or_encored(void);
+static void Cmd_flee(void);
+static void Cmd_if_random_safari_flee(void);
+static void Cmd_watch(void);
+static void Cmd_get_hold_effect(void);
+static void Cmd_get_gender(void);
+static void Cmd_is_first_turn_for(void);
+static void Cmd_get_stockpile_count(void);
+static void Cmd_is_double_battle(void);
+static void Cmd_get_used_held_item(void);
+static void Cmd_get_move_type_from_result(void);
+static void Cmd_get_move_power_from_result(void);
+static void Cmd_get_move_effect_from_result(void);
+static void Cmd_get_protect_count(void);
+static void Cmd_nullsub_52(void);
+static void Cmd_nullsub_53(void);
+static void Cmd_nullsub_54(void);
+static void Cmd_nullsub_55(void);
+static void Cmd_nullsub_56(void);
+static void Cmd_nullsub_57(void);
+static void Cmd_call(void);
+static void Cmd_goto(void);
+static void Cmd_end(void);
+static void Cmd_if_level_cond(void);
+static void Cmd_if_target_taunted(void);
+static void Cmd_if_target_not_taunted(void);
+static void Cmd_check_ability(void);
+static void Cmd_is_of_type(void);
+static void Cmd_if_target_is_ally(void);
+static void Cmd_if_flash_fired(void);
+static void Cmd_if_holds_item(void);
// ewram
EWRAM_DATA const u8 *gAIScriptPtr = NULL;
@@ -163,105 +163,105 @@ typedef void (*BattleAICmdFunc)(void);
static const BattleAICmdFunc sBattleAICmdTable[] =
{
- BattleAICmd_if_random_less_than, // 0x0
- BattleAICmd_if_random_greater_than, // 0x1
- BattleAICmd_if_random_equal, // 0x2
- BattleAICmd_if_random_not_equal, // 0x3
- BattleAICmd_score, // 0x4
- BattleAICmd_if_hp_less_than, // 0x5
- BattleAICmd_if_hp_more_than, // 0x6
- BattleAICmd_if_hp_equal, // 0x7
- BattleAICmd_if_hp_not_equal, // 0x8
- BattleAICmd_if_status, // 0x9
- BattleAICmd_if_not_status, // 0xA
- BattleAICmd_if_status2, // 0xB
- BattleAICmd_if_not_status2, // 0xC
- BattleAICmd_if_status3, // 0xD
- BattleAICmd_if_not_status3, // 0xE
- BattleAICmd_if_side_affecting, // 0xF
- BattleAICmd_if_not_side_affecting, // 0x10
- BattleAICmd_if_less_than, // 0x11
- BattleAICmd_if_more_than, // 0x12
- BattleAICmd_if_equal, // 0x13
- BattleAICmd_if_not_equal, // 0x14
- BattleAICmd_if_less_than_ptr, // 0x15
- BattleAICmd_if_more_than_ptr, // 0x16
- BattleAICmd_if_equal_ptr, // 0x17
- BattleAICmd_if_not_equal_ptr, // 0x18
- BattleAICmd_if_move, // 0x19
- BattleAICmd_if_not_move, // 0x1A
- BattleAICmd_if_in_bytes, // 0x1B
- BattleAICmd_if_not_in_bytes, // 0x1C
- BattleAICmd_if_in_hwords, // 0x1D
- BattleAICmd_if_not_in_hwords, // 0x1E
- BattleAICmd_if_user_has_attacking_move, // 0x1F
- BattleAICmd_if_user_has_no_attacking_moves, // 0x20
- BattleAICmd_get_turn_count, // 0x21
- BattleAICmd_get_type, // 0x22
- BattleAICmd_get_considered_move_power, // 0x23
- BattleAICmd_get_how_powerful_move_is, // 0x24
- BattleAICmd_get_last_used_battler_move, // 0x25
- BattleAICmd_if_equal_, // 0x26
- BattleAICmd_if_not_equal_, // 0x27
- BattleAICmd_if_user_goes, // 0x28
- BattleAICmd_if_user_doesnt_go, // 0x29
- BattleAICmd_nullsub_2A, // 0x2A
- BattleAICmd_nullsub_2B, // 0x2B
- BattleAICmd_count_usable_party_mons, // 0x2C
- BattleAICmd_get_considered_move, // 0x2D
- BattleAICmd_get_considered_move_effect, // 0x2E
- BattleAICmd_get_ability, // 0x2F
- BattleAICmd_get_highest_type_effectiveness, // 0x30
- BattleAICmd_if_type_effectiveness, // 0x31
- BattleAICmd_nullsub_32, // 0x32
- BattleAICmd_nullsub_33, // 0x33
- BattleAICmd_if_status_in_party, // 0x34
- BattleAICmd_if_status_not_in_party, // 0x35
- BattleAICmd_get_weather, // 0x36
- BattleAICmd_if_effect, // 0x37
- BattleAICmd_if_not_effect, // 0x38
- BattleAICmd_if_stat_level_less_than, // 0x39
- BattleAICmd_if_stat_level_more_than, // 0x3A
- BattleAICmd_if_stat_level_equal, // 0x3B
- BattleAICmd_if_stat_level_not_equal, // 0x3C
- BattleAICmd_if_can_faint, // 0x3D
- BattleAICmd_if_cant_faint, // 0x3E
- BattleAICmd_if_has_move, // 0x3F
- BattleAICmd_if_doesnt_have_move, // 0x40
- BattleAICmd_if_has_move_with_effect, // 0x41
- BattleAICmd_if_doesnt_have_move_with_effect, // 0x42
- BattleAICmd_if_any_move_disabled_or_encored, // 0x43
- BattleAICmd_if_curr_move_disabled_or_encored, // 0x44
- BattleAICmd_flee, // 0x45
- BattleAICmd_if_random_safari_flee, // 0x46
- BattleAICmd_watch, // 0x47
- BattleAICmd_get_hold_effect, // 0x48
- BattleAICmd_get_gender, // 0x49
- BattleAICmd_is_first_turn_for, // 0x4A
- BattleAICmd_get_stockpile_count, // 0x4B
- BattleAICmd_is_double_battle, // 0x4C
- BattleAICmd_get_used_held_item, // 0x4D
- BattleAICmd_get_move_type_from_result, // 0x4E
- BattleAICmd_get_move_power_from_result, // 0x4F
- BattleAICmd_get_move_effect_from_result, // 0x50
- BattleAICmd_get_protect_count, // 0x51
- BattleAICmd_nullsub_52, // 0x52
- BattleAICmd_nullsub_53, // 0x53
- BattleAICmd_nullsub_54, // 0x54
- BattleAICmd_nullsub_55, // 0x55
- BattleAICmd_nullsub_56, // 0x56
- BattleAICmd_nullsub_57, // 0x57
- BattleAICmd_call, // 0x58
- BattleAICmd_goto, // 0x59
- BattleAICmd_end, // 0x5A
- BattleAICmd_if_level_cond, // 0x5B
- BattleAICmd_if_target_taunted, // 0x5C
- BattleAICmd_if_target_not_taunted, // 0x5D
- BattleAICmd_if_target_is_ally, // 0x5E
- BattleAICmd_is_of_type, // 0x5F
- BattleAICmd_check_ability, // 0x60
- BattleAICmd_if_flash_fired, // 0x61
- BattleAICmd_if_holds_item, // 0x62
+ Cmd_if_random_less_than, // 0x0
+ Cmd_if_random_greater_than, // 0x1
+ Cmd_if_random_equal, // 0x2
+ Cmd_if_random_not_equal, // 0x3
+ Cmd_score, // 0x4
+ Cmd_if_hp_less_than, // 0x5
+ Cmd_if_hp_more_than, // 0x6
+ Cmd_if_hp_equal, // 0x7
+ Cmd_if_hp_not_equal, // 0x8
+ Cmd_if_status, // 0x9
+ Cmd_if_not_status, // 0xA
+ Cmd_if_status2, // 0xB
+ Cmd_if_not_status2, // 0xC
+ Cmd_if_status3, // 0xD
+ Cmd_if_not_status3, // 0xE
+ Cmd_if_side_affecting, // 0xF
+ Cmd_if_not_side_affecting, // 0x10
+ Cmd_if_less_than, // 0x11
+ Cmd_if_more_than, // 0x12
+ Cmd_if_equal, // 0x13
+ Cmd_if_not_equal, // 0x14
+ Cmd_if_less_than_ptr, // 0x15
+ Cmd_if_more_than_ptr, // 0x16
+ Cmd_if_equal_ptr, // 0x17
+ Cmd_if_not_equal_ptr, // 0x18
+ Cmd_if_move, // 0x19
+ Cmd_if_not_move, // 0x1A
+ Cmd_if_in_bytes, // 0x1B
+ Cmd_if_not_in_bytes, // 0x1C
+ Cmd_if_in_hwords, // 0x1D
+ Cmd_if_not_in_hwords, // 0x1E
+ Cmd_if_user_has_attacking_move, // 0x1F
+ Cmd_if_user_has_no_attacking_moves, // 0x20
+ Cmd_get_turn_count, // 0x21
+ Cmd_get_type, // 0x22
+ Cmd_get_considered_move_power, // 0x23
+ Cmd_get_how_powerful_move_is, // 0x24
+ Cmd_get_last_used_battler_move, // 0x25
+ Cmd_if_equal_, // 0x26
+ Cmd_if_not_equal_, // 0x27
+ Cmd_if_user_goes, // 0x28
+ Cmd_if_user_doesnt_go, // 0x29
+ Cmd_nullsub_2A, // 0x2A
+ Cmd_nullsub_2B, // 0x2B
+ Cmd_count_usable_party_mons, // 0x2C
+ Cmd_get_considered_move, // 0x2D
+ Cmd_get_considered_move_effect, // 0x2E
+ Cmd_get_ability, // 0x2F
+ Cmd_get_highest_type_effectiveness, // 0x30
+ Cmd_if_type_effectiveness, // 0x31
+ Cmd_nullsub_32, // 0x32
+ Cmd_nullsub_33, // 0x33
+ Cmd_if_status_in_party, // 0x34
+ Cmd_if_status_not_in_party, // 0x35
+ Cmd_get_weather, // 0x36
+ Cmd_if_effect, // 0x37
+ Cmd_if_not_effect, // 0x38
+ Cmd_if_stat_level_less_than, // 0x39
+ Cmd_if_stat_level_more_than, // 0x3A
+ Cmd_if_stat_level_equal, // 0x3B
+ Cmd_if_stat_level_not_equal, // 0x3C
+ Cmd_if_can_faint, // 0x3D
+ Cmd_if_cant_faint, // 0x3E
+ Cmd_if_has_move, // 0x3F
+ Cmd_if_doesnt_have_move, // 0x40
+ Cmd_if_has_move_with_effect, // 0x41
+ Cmd_if_doesnt_have_move_with_effect, // 0x42
+ Cmd_if_any_move_disabled_or_encored, // 0x43
+ Cmd_if_curr_move_disabled_or_encored, // 0x44
+ Cmd_flee, // 0x45
+ Cmd_if_random_safari_flee, // 0x46
+ Cmd_watch, // 0x47
+ Cmd_get_hold_effect, // 0x48
+ Cmd_get_gender, // 0x49
+ Cmd_is_first_turn_for, // 0x4A
+ Cmd_get_stockpile_count, // 0x4B
+ Cmd_is_double_battle, // 0x4C
+ Cmd_get_used_held_item, // 0x4D
+ Cmd_get_move_type_from_result, // 0x4E
+ Cmd_get_move_power_from_result, // 0x4F
+ Cmd_get_move_effect_from_result, // 0x50
+ Cmd_get_protect_count, // 0x51
+ Cmd_nullsub_52, // 0x52
+ Cmd_nullsub_53, // 0x53
+ Cmd_nullsub_54, // 0x54
+ Cmd_nullsub_55, // 0x55
+ Cmd_nullsub_56, // 0x56
+ Cmd_nullsub_57, // 0x57
+ Cmd_call, // 0x58
+ Cmd_goto, // 0x59
+ Cmd_end, // 0x5A
+ Cmd_if_level_cond, // 0x5B
+ Cmd_if_target_taunted, // 0x5C
+ Cmd_if_target_not_taunted, // 0x5D
+ Cmd_if_target_is_ally, // 0x5E
+ Cmd_is_of_type, // 0x5F
+ Cmd_check_ability, // 0x60
+ Cmd_if_flash_fired, // 0x61
+ Cmd_if_holds_item, // 0x62
};
static const u16 sDiscouragedPowerfulMoveEffects[] =
@@ -298,7 +298,7 @@ void BattleAI_HandleItemUseBeforeAISetup(u8 defaultScoreMoves)
)
)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_TRAINER_ITEMS; i++)
{
if (gTrainers[gTrainerBattleOpponent_A].items[i] != 0)
{
@@ -397,8 +397,8 @@ u8 BattleAI_ChooseMoveOrAction(void)
static u8 ChooseMoveOrAction_Singles(void)
{
- u8 currentMoveArray[4];
- u8 consideredMoveArray[4];
+ u8 currentMoveArray[MAX_MON_MOVES];
+ u8 consideredMoveArray[MAX_MON_MOVES];
u8 numOfBestMoves;
s32 i;
@@ -452,11 +452,11 @@ static u8 ChooseMoveOrAction_Doubles(void)
s32 i;
s32 j;
s32 scriptsToRun;
- s16 bestMovePointsForTarget[4];
- s8 mostViableTargetsArray[4];
- u8 actionOrMoveIndex[4];
- u8 mostViableMovesScores[4];
- u8 mostViableMovesIndices[4];
+ s16 bestMovePointsForTarget[MAX_BATTLERS_COUNT];
+ s8 mostViableTargetsArray[MAX_BATTLERS_COUNT];
+ u8 actionOrMoveIndex[MAX_BATTLERS_COUNT];
+ u8 mostViableMovesScores[MAX_MON_MOVES];
+ u8 mostViableMovesIndices[MAX_MON_MOVES];
s32 mostViableTargetsNo;
s32 mostViableMovesNo;
s16 mostMovePoints;
@@ -543,7 +543,7 @@ static u8 ChooseMoveOrAction_Doubles(void)
mostViableTargetsArray[0] = 0;
mostViableTargetsNo = 1;
- for (i = 1; i < MAX_MON_MOVES; i++)
+ for (i = 1; i < MAX_BATTLERS_COUNT; i++)
{
if (mostMovePoints == bestMovePointsForTarget[i])
{
@@ -653,7 +653,7 @@ void ClearBattlerItemEffectHistory(u8 battlerId)
BATTLE_HISTORY->itemEffects[battlerId] = 0;
}
-static void BattleAICmd_if_random_less_than(void)
+static void Cmd_if_random_less_than(void)
{
u16 random = Random();
@@ -663,7 +663,7 @@ static void BattleAICmd_if_random_less_than(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_random_greater_than(void)
+static void Cmd_if_random_greater_than(void)
{
u16 random = Random();
@@ -673,7 +673,7 @@ static void BattleAICmd_if_random_greater_than(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_random_equal(void)
+static void Cmd_if_random_equal(void)
{
u16 random = Random();
@@ -683,7 +683,7 @@ static void BattleAICmd_if_random_equal(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_random_not_equal(void)
+static void Cmd_if_random_not_equal(void)
{
u16 random = Random();
@@ -693,7 +693,7 @@ static void BattleAICmd_if_random_not_equal(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_score(void)
+static void Cmd_score(void)
{
AI_THINKING_STRUCT->score[AI_THINKING_STRUCT->movesetIndex] += gAIScriptPtr[1]; // Add the result to the array of the move consider's score.
@@ -703,7 +703,7 @@ static void BattleAICmd_score(void)
gAIScriptPtr += 2; // AI return.
}
-static void BattleAICmd_if_hp_less_than(void)
+static void Cmd_if_hp_less_than(void)
{
u16 battlerId;
@@ -718,7 +718,7 @@ static void BattleAICmd_if_hp_less_than(void)
gAIScriptPtr += 7;
}
-static void BattleAICmd_if_hp_more_than(void)
+static void Cmd_if_hp_more_than(void)
{
u16 battlerId;
@@ -733,7 +733,7 @@ static void BattleAICmd_if_hp_more_than(void)
gAIScriptPtr += 7;
}
-static void BattleAICmd_if_hp_equal(void)
+static void Cmd_if_hp_equal(void)
{
u16 battlerId;
@@ -748,7 +748,7 @@ static void BattleAICmd_if_hp_equal(void)
gAIScriptPtr += 7;
}
-static void BattleAICmd_if_hp_not_equal(void)
+static void Cmd_if_hp_not_equal(void)
{
u16 battlerId;
@@ -763,7 +763,7 @@ static void BattleAICmd_if_hp_not_equal(void)
gAIScriptPtr += 7;
}
-static void BattleAICmd_if_status(void)
+static void Cmd_if_status(void)
{
u16 battlerId;
u32 status;
@@ -781,7 +781,7 @@ static void BattleAICmd_if_status(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_not_status(void)
+static void Cmd_if_not_status(void)
{
u16 battlerId;
u32 status;
@@ -799,7 +799,7 @@ static void BattleAICmd_if_not_status(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_status2(void)
+static void Cmd_if_status2(void)
{
u16 battlerId;
u32 status;
@@ -817,7 +817,7 @@ static void BattleAICmd_if_status2(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_not_status2(void)
+static void Cmd_if_not_status2(void)
{
u16 battlerId;
u32 status;
@@ -835,7 +835,7 @@ static void BattleAICmd_if_not_status2(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_status3(void)
+static void Cmd_if_status3(void)
{
u16 battlerId;
u32 status;
@@ -853,7 +853,7 @@ static void BattleAICmd_if_status3(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_not_status3(void)
+static void Cmd_if_not_status3(void)
{
u16 battlerId;
u32 status;
@@ -871,7 +871,7 @@ static void BattleAICmd_if_not_status3(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_side_affecting(void)
+static void Cmd_if_side_affecting(void)
{
u16 battlerId;
u32 side, status;
@@ -890,7 +890,7 @@ static void BattleAICmd_if_side_affecting(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_not_side_affecting(void)
+static void Cmd_if_not_side_affecting(void)
{
u16 battlerId;
u32 side, status;
@@ -909,7 +909,7 @@ static void BattleAICmd_if_not_side_affecting(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_less_than(void)
+static void Cmd_if_less_than(void)
{
if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -917,7 +917,7 @@ static void BattleAICmd_if_less_than(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_more_than(void)
+static void Cmd_if_more_than(void)
{
if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -925,7 +925,7 @@ static void BattleAICmd_if_more_than(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_equal(void)
+static void Cmd_if_equal(void)
{
if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -933,7 +933,7 @@ static void BattleAICmd_if_equal(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_not_equal(void)
+static void Cmd_if_not_equal(void)
{
if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -941,7 +941,7 @@ static void BattleAICmd_if_not_equal(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_less_than_ptr(void)
+static void Cmd_if_less_than_ptr(void)
{
const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
@@ -951,7 +951,7 @@ static void BattleAICmd_if_less_than_ptr(void)
gAIScriptPtr += 9;
}
-static void BattleAICmd_if_more_than_ptr(void)
+static void Cmd_if_more_than_ptr(void)
{
const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
@@ -961,7 +961,7 @@ static void BattleAICmd_if_more_than_ptr(void)
gAIScriptPtr += 9;
}
-static void BattleAICmd_if_equal_ptr(void)
+static void Cmd_if_equal_ptr(void)
{
const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
@@ -971,7 +971,7 @@ static void BattleAICmd_if_equal_ptr(void)
gAIScriptPtr += 9;
}
-static void BattleAICmd_if_not_equal_ptr(void)
+static void Cmd_if_not_equal_ptr(void)
{
const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
@@ -981,7 +981,7 @@ static void BattleAICmd_if_not_equal_ptr(void)
gAIScriptPtr += 9;
}
-static void BattleAICmd_if_move(void)
+static void Cmd_if_move(void)
{
u16 move = T1_READ_16(gAIScriptPtr + 1);
@@ -991,7 +991,7 @@ static void BattleAICmd_if_move(void)
gAIScriptPtr += 7;
}
-static void BattleAICmd_if_not_move(void)
+static void Cmd_if_not_move(void)
{
u16 move = T1_READ_16(gAIScriptPtr + 1);
@@ -1001,7 +1001,7 @@ static void BattleAICmd_if_not_move(void)
gAIScriptPtr += 7;
}
-static void BattleAICmd_if_in_bytes(void)
+static void Cmd_if_in_bytes(void)
{
const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1017,7 +1017,7 @@ static void BattleAICmd_if_in_bytes(void)
gAIScriptPtr += 9;
}
-static void BattleAICmd_if_not_in_bytes(void)
+static void Cmd_if_not_in_bytes(void)
{
const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -1033,7 +1033,7 @@ static void BattleAICmd_if_not_in_bytes(void)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
}
-static void BattleAICmd_if_in_hwords(void)
+static void Cmd_if_in_hwords(void)
{
const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1);
@@ -1049,7 +1049,7 @@ static void BattleAICmd_if_in_hwords(void)
gAIScriptPtr += 9;
}
-static void BattleAICmd_if_not_in_hwords(void)
+static void Cmd_if_not_in_hwords(void)
{
const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1);
@@ -1065,7 +1065,7 @@ static void BattleAICmd_if_not_in_hwords(void)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
}
-static void BattleAICmd_if_user_has_attacking_move(void)
+static void Cmd_if_user_has_attacking_move(void)
{
s32 i;
@@ -1082,7 +1082,7 @@ static void BattleAICmd_if_user_has_attacking_move(void)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
-static void BattleAICmd_if_user_has_no_attacking_moves(void)
+static void Cmd_if_user_has_no_attacking_moves(void)
{
s32 i;
@@ -1099,13 +1099,13 @@ static void BattleAICmd_if_user_has_no_attacking_moves(void)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
-static void BattleAICmd_get_turn_count(void)
+static void Cmd_get_turn_count(void)
{
AI_THINKING_STRUCT->funcResult = gBattleResults.battleTurnCounter;
gAIScriptPtr += 1;
}
-static void BattleAICmd_get_type(void)
+static void Cmd_get_type(void)
{
u8 typeVar = gAIScriptPtr[1];
@@ -1146,7 +1146,7 @@ static u8 BattleAI_GetWantedBattler(u8 wantedBattler)
}
}
-static void BattleAICmd_is_of_type(void)
+static void Cmd_is_of_type(void)
{
u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
@@ -1158,16 +1158,16 @@ static void BattleAICmd_is_of_type(void)
gAIScriptPtr += 3;
}
-static void BattleAICmd_get_considered_move_power(void)
+static void Cmd_get_considered_move_power(void)
{
AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power;
gAIScriptPtr += 1;
}
-static void BattleAICmd_get_how_powerful_move_is(void)
+static void Cmd_get_how_powerful_move_is(void)
{
s32 i, checkedMove;
- s32 moveDmgs[4];
+ s32 moveDmgs[MAX_MON_MOVES];
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++)
{
@@ -1228,7 +1228,7 @@ static void BattleAICmd_get_how_powerful_move_is(void)
gAIScriptPtr++;
}
-static void BattleAICmd_get_last_used_battler_move(void)
+static void Cmd_get_last_used_battler_move(void)
{
if (gAIScriptPtr[1] == AI_USER)
AI_THINKING_STRUCT->funcResult = gLastMoves[sBattler_AI];
@@ -1238,7 +1238,7 @@ static void BattleAICmd_get_last_used_battler_move(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_if_equal_(void) // Same as if_equal.
+static void Cmd_if_equal_(void) // Same as if_equal.
{
if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -1246,7 +1246,7 @@ static void BattleAICmd_if_equal_(void) // Same as if_equal.
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_not_equal_(void) // Same as if_not_equal.
+static void Cmd_if_not_equal_(void) // Same as if_not_equal.
{
if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -1254,7 +1254,7 @@ static void BattleAICmd_if_not_equal_(void) // Same as if_not_equal.
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_user_goes(void)
+static void Cmd_if_user_goes(void)
{
if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) == gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -1262,7 +1262,7 @@ static void BattleAICmd_if_user_goes(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_user_doesnt_go(void)
+static void Cmd_if_user_doesnt_go(void)
{
if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) != gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -1270,15 +1270,15 @@ static void BattleAICmd_if_user_doesnt_go(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_nullsub_2A(void)
+static void Cmd_nullsub_2A(void)
{
}
-static void BattleAICmd_nullsub_2B(void)
+static void Cmd_nullsub_2B(void)
{
}
-static void BattleAICmd_count_usable_party_mons(void)
+static void Cmd_count_usable_party_mons(void)
{
u8 battlerId;
u8 battlerOnField1, battlerOnField2;
@@ -1324,19 +1324,19 @@ static void BattleAICmd_count_usable_party_mons(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_get_considered_move(void)
+static void Cmd_get_considered_move(void)
{
AI_THINKING_STRUCT->funcResult = AI_THINKING_STRUCT->moveConsidered;
gAIScriptPtr += 1;
}
-static void BattleAICmd_get_considered_move_effect(void)
+static void Cmd_get_considered_move_effect(void)
{
AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect;
gAIScriptPtr += 1;
}
-static void BattleAICmd_get_ability(void)
+static void Cmd_get_ability(void)
{
u8 battlerId;
@@ -1393,7 +1393,7 @@ static void BattleAICmd_get_ability(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_check_ability(void)
+static void Cmd_check_ability(void)
{
u32 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
u32 ability = gAIScriptPtr[2];
@@ -1453,7 +1453,7 @@ static void BattleAICmd_check_ability(void)
gAIScriptPtr += 3;
}
-static void BattleAICmd_get_highest_type_effectiveness(void)
+static void Cmd_get_highest_type_effectiveness(void)
{
s32 i;
u8 *dynamicMoveType;
@@ -1495,7 +1495,7 @@ static void BattleAICmd_get_highest_type_effectiveness(void)
gAIScriptPtr += 1;
}
-static void BattleAICmd_if_type_effectiveness(void)
+static void Cmd_if_type_effectiveness(void)
{
u8 damageVar;
@@ -1531,15 +1531,15 @@ static void BattleAICmd_if_type_effectiveness(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_nullsub_32(void)
+static void Cmd_nullsub_32(void)
{
}
-static void BattleAICmd_nullsub_33(void)
+static void Cmd_nullsub_33(void)
{
}
-static void BattleAICmd_if_status_in_party(void)
+static void Cmd_if_status_in_party(void)
{
struct Pokemon *party;
s32 i;
@@ -1576,7 +1576,7 @@ static void BattleAICmd_if_status_in_party(void)
gAIScriptPtr += 10;
}
-static void BattleAICmd_if_status_not_in_party(void)
+static void Cmd_if_status_not_in_party(void)
{
struct Pokemon *party;
s32 i;
@@ -1613,7 +1613,7 @@ static void BattleAICmd_if_status_not_in_party(void)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
}
-static void BattleAICmd_get_weather(void)
+static void Cmd_get_weather(void)
{
if (gBattleWeather & WEATHER_RAIN_ANY)
AI_THINKING_STRUCT->funcResult = AI_WEATHER_RAIN;
@@ -1627,7 +1627,7 @@ static void BattleAICmd_get_weather(void)
gAIScriptPtr += 1;
}
-static void BattleAICmd_if_effect(void)
+static void Cmd_if_effect(void)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -1635,7 +1635,7 @@ static void BattleAICmd_if_effect(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_not_effect(void)
+static void Cmd_if_not_effect(void)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1])
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
@@ -1643,7 +1643,7 @@ static void BattleAICmd_if_not_effect(void)
gAIScriptPtr += 6;
}
-static void BattleAICmd_if_stat_level_less_than(void)
+static void Cmd_if_stat_level_less_than(void)
{
u32 battlerId;
@@ -1658,7 +1658,7 @@ static void BattleAICmd_if_stat_level_less_than(void)
gAIScriptPtr += 8;
}
-static void BattleAICmd_if_stat_level_more_than(void)
+static void Cmd_if_stat_level_more_than(void)
{
u32 battlerId;
@@ -1673,7 +1673,7 @@ static void BattleAICmd_if_stat_level_more_than(void)
gAIScriptPtr += 8;
}
-static void BattleAICmd_if_stat_level_equal(void)
+static void Cmd_if_stat_level_equal(void)
{
u32 battlerId;
@@ -1688,7 +1688,7 @@ static void BattleAICmd_if_stat_level_equal(void)
gAIScriptPtr += 8;
}
-static void BattleAICmd_if_stat_level_not_equal(void)
+static void Cmd_if_stat_level_not_equal(void)
{
u32 battlerId;
@@ -1703,7 +1703,7 @@ static void BattleAICmd_if_stat_level_not_equal(void)
gAIScriptPtr += 8;
}
-static void BattleAICmd_if_can_faint(void)
+static void Cmd_if_can_faint(void)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2)
{
@@ -1732,7 +1732,7 @@ static void BattleAICmd_if_can_faint(void)
gAIScriptPtr += 5;
}
-static void BattleAICmd_if_cant_faint(void)
+static void Cmd_if_cant_faint(void)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power < 2)
{
@@ -1759,7 +1759,7 @@ static void BattleAICmd_if_cant_faint(void)
gAIScriptPtr += 5;
}
-static void BattleAICmd_if_has_move(void)
+static void Cmd_if_has_move(void)
{
s32 i;
const u16 *movePtr = (u16 *)(gAIScriptPtr + 2);
@@ -1811,7 +1811,7 @@ static void BattleAICmd_if_has_move(void)
}
}
-static void BattleAICmd_if_doesnt_have_move(void)
+static void Cmd_if_doesnt_have_move(void)
{
s32 i;
const u16 *movePtr = (u16 *)(gAIScriptPtr + 2);
@@ -1845,7 +1845,7 @@ static void BattleAICmd_if_doesnt_have_move(void)
}
}
-static void BattleAICmd_if_has_move_with_effect(void)
+static void Cmd_if_has_move_with_effect(void)
{
s32 i;
@@ -1879,7 +1879,7 @@ static void BattleAICmd_if_has_move_with_effect(void)
}
}
-static void BattleAICmd_if_doesnt_have_move_with_effect(void)
+static void Cmd_if_doesnt_have_move_with_effect(void)
{
s32 i;
@@ -1912,7 +1912,7 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void)
}
}
-static void BattleAICmd_if_any_move_disabled_or_encored(void)
+static void Cmd_if_any_move_disabled_or_encored(void)
{
u8 battlerId;
@@ -1941,7 +1941,7 @@ static void BattleAICmd_if_any_move_disabled_or_encored(void)
}
}
-static void BattleAICmd_if_curr_move_disabled_or_encored(void)
+static void Cmd_if_curr_move_disabled_or_encored(void)
{
switch (gAIScriptPtr[1])
{
@@ -1963,12 +1963,12 @@ static void BattleAICmd_if_curr_move_disabled_or_encored(void)
}
}
-static void BattleAICmd_flee(void)
+static void Cmd_flee(void)
{
AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_FLEE | AI_ACTION_DO_NOT_ATTACK);
}
-static void BattleAICmd_if_random_safari_flee(void)
+static void Cmd_if_random_safari_flee(void)
{
u8 safariFleeRate = gBattleStruct->safariEscapeFactor * 5; // Safari flee rate, from 0-20.
@@ -1978,12 +1978,12 @@ static void BattleAICmd_if_random_safari_flee(void)
gAIScriptPtr += 5;
}
-static void BattleAICmd_watch(void)
+static void Cmd_watch(void)
{
AI_THINKING_STRUCT->aiAction |= (AI_ACTION_DONE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK);
}
-static void BattleAICmd_get_hold_effect(void)
+static void Cmd_get_hold_effect(void)
{
u8 battlerId;
@@ -2000,7 +2000,7 @@ static void BattleAICmd_get_hold_effect(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_if_holds_item(void)
+static void Cmd_if_holds_item(void)
{
u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
u16 item;
@@ -2021,7 +2021,7 @@ static void BattleAICmd_if_holds_item(void)
gAIScriptPtr += 8;
}
-static void BattleAICmd_get_gender(void)
+static void Cmd_get_gender(void)
{
u8 battlerId;
@@ -2035,7 +2035,7 @@ static void BattleAICmd_get_gender(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_is_first_turn_for(void)
+static void Cmd_is_first_turn_for(void)
{
u8 battlerId;
@@ -2049,7 +2049,7 @@ static void BattleAICmd_is_first_turn_for(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_get_stockpile_count(void)
+static void Cmd_get_stockpile_count(void)
{
u8 battlerId;
@@ -2063,14 +2063,14 @@ static void BattleAICmd_get_stockpile_count(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_is_double_battle(void)
+static void Cmd_is_double_battle(void)
{
AI_THINKING_STRUCT->funcResult = gBattleTypeFlags & BATTLE_TYPE_DOUBLE;
gAIScriptPtr += 1;
}
-static void BattleAICmd_get_used_held_item(void)
+static void Cmd_get_used_held_item(void)
{
u8 battlerId;
@@ -2089,28 +2089,28 @@ static void BattleAICmd_get_used_held_item(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_get_move_type_from_result(void)
+static void Cmd_get_move_type_from_result(void)
{
AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].type;
gAIScriptPtr += 1;
}
-static void BattleAICmd_get_move_power_from_result(void)
+static void Cmd_get_move_power_from_result(void)
{
AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].power;
gAIScriptPtr += 1;
}
-static void BattleAICmd_get_move_effect_from_result(void)
+static void Cmd_get_move_effect_from_result(void)
{
AI_THINKING_STRUCT->funcResult = gBattleMoves[AI_THINKING_STRUCT->funcResult].effect;
gAIScriptPtr += 1;
}
-static void BattleAICmd_get_protect_count(void)
+static void Cmd_get_protect_count(void)
{
u8 battlerId;
@@ -2124,48 +2124,48 @@ static void BattleAICmd_get_protect_count(void)
gAIScriptPtr += 2;
}
-static void BattleAICmd_nullsub_52(void)
+static void Cmd_nullsub_52(void)
{
}
-static void BattleAICmd_nullsub_53(void)
+static void Cmd_nullsub_53(void)
{
}
-static void BattleAICmd_nullsub_54(void)
+static void Cmd_nullsub_54(void)
{
}
-static void BattleAICmd_nullsub_55(void)
+static void Cmd_nullsub_55(void)
{
}
-static void BattleAICmd_nullsub_56(void)
+static void Cmd_nullsub_56(void)
{
}
-static void BattleAICmd_nullsub_57(void)
+static void Cmd_nullsub_57(void)
{
}
-static void BattleAICmd_call(void)
+static void Cmd_call(void)
{
AIStackPushVar(gAIScriptPtr + 5);
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
-static void BattleAICmd_goto(void)
+static void Cmd_goto(void)
{
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
-static void BattleAICmd_end(void)
+static void Cmd_end(void)
{
if (AIStackPop() == 0)
AI_THINKING_STRUCT->aiAction |= AI_ACTION_DONE;
}
-static void BattleAICmd_if_level_cond(void)
+static void Cmd_if_level_cond(void)
{
switch (gAIScriptPtr[1])
{
@@ -2190,7 +2190,7 @@ static void BattleAICmd_if_level_cond(void)
}
}
-static void BattleAICmd_if_target_taunted(void)
+static void Cmd_if_target_taunted(void)
{
if (gDisableStructs[gBattlerTarget].tauntTimer != 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -2198,7 +2198,7 @@ static void BattleAICmd_if_target_taunted(void)
gAIScriptPtr += 5;
}
-static void BattleAICmd_if_target_not_taunted(void)
+static void Cmd_if_target_not_taunted(void)
{
if (gDisableStructs[gBattlerTarget].tauntTimer == 0)
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -2206,7 +2206,7 @@ static void BattleAICmd_if_target_not_taunted(void)
gAIScriptPtr += 5;
}
-static void BattleAICmd_if_target_is_ally(void)
+static void Cmd_if_target_is_ally(void)
{
if ((sBattler_AI & BIT_SIDE) == (gBattlerTarget & BIT_SIDE))
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
@@ -2214,7 +2214,7 @@ static void BattleAICmd_if_target_is_ally(void)
gAIScriptPtr += 5;
}
-static void BattleAICmd_if_flash_fired(void)
+static void Cmd_if_flash_fired(void)
{
u8 battlerId = BattleAI_GetWantedBattler(gAIScriptPtr[1]);
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index cd31293f8..32f9620b7 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -787,9 +787,9 @@ static u8 GetAI_ItemType(u8 itemId, const u8 *itemEffect) // NOTE: should take u
return AI_ITEM_HEAL_HP;
else if (itemEffect[3] & ITEM3_STATUS_ALL)
return AI_ITEM_CURE_CONDITION;
- else if (itemEffect[0] & (ITEM0_HIGH_CRIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0)
+ else if (itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK) || itemEffect[1] != 0 || itemEffect[2] != 0)
return AI_ITEM_X_STAT;
- else if (itemEffect[3] & ITEM3_MIST)
+ else if (itemEffect[3] & ITEM3_GUARD_SPEC)
return AI_ITEM_GUARD_SPECS;
else
return AI_ITEM_NOT_RECOGNIZABLE;
@@ -820,7 +820,7 @@ static bool8 ShouldUseItem(void)
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_TRAINER_ITEMS; i++)
{
u16 item;
const u8 *itemEffects;
@@ -907,7 +907,7 @@ static bool8 ShouldUseItem(void)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x8;
if (itemEffects[2] & ITEM2_X_ACCURACY)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x20;
- if (itemEffects[0] & ITEM0_HIGH_CRIT)
+ if (itemEffects[0] & ITEM0_DIRE_HIT)
*(gBattleStruct->AI_itemFlags + gActiveBattler / 2) |= 0x80;
shouldUse = TRUE;
break;
diff --git a/src/battle_anim.c b/src/battle_anim.c
index ab1e5ed6a..becc12d56 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,
@@ -1355,7 +1355,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_Spotlight, 0x0800, ANIM_TAG_SPOTLIGHT},
{gBattleAnimSpriteGfx_LetterZ, 0x0200, ANIM_TAG_LETTER_Z},
{gBattleAnimSpriteGfx_RapidSpin, 0x0300, ANIM_TAG_RAPID_SPIN},
- {gBattleAnimSpriteGfx_TriForceTriangle, 0x0800, ANIM_TAG_TRI_FORCE_TRIANGLE},
+ {gBattleAnimSpriteGfx_TriAttackTriangle, 0x0800, ANIM_TAG_TRI_ATTACK_TRIANGLE},
{gBattleAnimSpriteGfx_WispOrb, 0x0380, ANIM_TAG_WISP_ORB},
{gBattleAnimSpriteGfx_WispFire, 0x0800, ANIM_TAG_WISP_FIRE},
{gBattleAnimSpriteGfx_GoldStars, 0x00c0, ANIM_TAG_GOLD_STARS},
@@ -1648,7 +1648,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_Pokeball, ANIM_TAG_SPOTLIGHT},
{gBattleAnimSpritePal_LetterZ, ANIM_TAG_LETTER_Z},
{gBattleAnimSpritePal_RapidSpin, ANIM_TAG_RAPID_SPIN},
- {gBattleAnimSpritePal_TriForceTriangle, ANIM_TAG_TRI_FORCE_TRIANGLE},
+ {gBattleAnimSpritePal_TriAttackTriangle, ANIM_TAG_TRI_ATTACK_TRIANGLE},
{gBattleAnimSpritePal_WispOrb, ANIM_TAG_WISP_ORB},
{gBattleAnimSpritePal_WispOrb, ANIM_TAG_WISP_FIRE},
{gBattleAnimSpritePal_GoldStars, ANIM_TAG_GOLD_STARS},
@@ -2808,12 +2808,12 @@ static void LoadMoveBg(u16 bgId)
void *dmaDest;
LZDecompressWram(tilemap, gDecompressionBuffer);
- sub_80A4720(sub_80A6D94(), (void*)(gDecompressionBuffer), 0x100, 0);
+ sub_80A4720(GetBattleBgPaletteNum(), (void*)(gDecompressionBuffer), 0x100, 0);
dmaSrc = gDecompressionBuffer;
dmaDest = (void *)(BG_SCREEN_ADDR(26));
DmaCopy32(3, dmaSrc, dmaDest, 0x800);
LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_SCREEN_ADDR(4)));
- LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, sub_80A6D94() * 16, 32);
+ LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, GetBattleBgPaletteNum() * 16, 32);
}
else
{
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index db9057cb4..1efb29ecd 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())
{
@@ -4941,19 +4947,19 @@ void sub_81024E0(struct Sprite* sprite)
sprite->pos1.y = gBattleAnimArgs[1];
}
- sprite->oam.shape = 0;
- sprite->oam.size = 3;
+ sprite->oam.shape = SPRITE_SHAPE(64x64);
+ sprite->oam.size = SPRITE_SIZE(64x64);
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..dcbcced39 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);
@@ -2118,7 +2124,7 @@ static void CreateMinimizeSprite(struct Task* task, u8 taskId)
gSprites[spriteId].data[2] = 6;
gSprites[spriteId].callback = ClonedMinizeSprite_Step;
SetSpriteRotScale(spriteId, task->data[4], task->data[4], 0);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
}
}
@@ -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..1778ce881 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,26 +24,26 @@
#include "constants/species.h"
#include "constants/weather.h"
-extern const struct SpriteTemplate gUnknown_08593114;
-
-void sub_815A0D4(struct Sprite *);
-void sub_815A1B0(struct Sprite *);
-void sub_815A254(struct Sprite *);
-void sub_815A2F0(struct Sprite *);
-void sub_815A6C4(struct Sprite *);
-void sub_815A7B0(struct Sprite *);
-void sub_815A7EC(struct Sprite *);
-void sub_815A8AC(struct Sprite *);
-void sub_815A934(struct Sprite *);
-void sub_815AAA4(struct Sprite *);
-void sub_815ABD0(struct Sprite *);
-void sub_815ACD0(struct Sprite *);
-void sub_815B27C(struct Sprite *);
-void sub_815B394(struct Sprite *);
-void sub_815B49C(struct Sprite *);
+extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate;
+
+void AnimBlackSmoke(struct Sprite *);
+void AnimWhiteHalo(struct Sprite *);
+void AnimTealAlert(struct Sprite *);
+void AnimMeanLookEye(struct Sprite *);
+void AnimSpikes(struct Sprite *);
+void AnimLeer(struct Sprite *);
+void AnimLetterZ(struct Sprite *);
+void AnimFang(struct Sprite *);
+void AnimSpotlight(struct Sprite *);
+void AnimClappingHand(struct Sprite *);
+void AnimClappingHand2(struct Sprite *);
+void AnimRapidSpin(struct Sprite *);
+void AnimTriAttackTriangle(struct Sprite *);
+void AnimBatonPassPokeball(struct Sprite *);
+void AnimWishStar(struct Sprite *);
void AnimMiniTwinklingStar(struct Sprite *);
-void sub_815B70C(struct Sprite *);
-void sub_815BE04(struct Sprite *);
+void AnimSwallowBlueOrb(struct Sprite *);
+void AnimGreenStar(struct Sprite *);
void AnimWeakFrustrationAngerMark(struct Sprite *);
void AnimSweetScentPetal(struct Sprite *);
void AnimPainSplitProjectile(struct Sprite *);
@@ -52,7 +52,7 @@ void AnimFlatterSpotlight(struct Sprite *);
void AnimReversalOrb(struct Sprite *);
void AnimYawnCloud(struct Sprite *);
void AnimSmokeBallEscapeCloud(struct Sprite *);
-void sub_815DEBC(struct Sprite *);
+void AnimFacadeSweatDrop(struct Sprite *);
void AnimRoarNoiseLine(struct Sprite *);
void AnimGlareEyeDot(struct Sprite *);
void AnimAssistPawprint(struct Sprite *);
@@ -63,32 +63,32 @@ 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 *);
-static void sub_815A1F4(struct Sprite *);
-static void sub_815A234(struct Sprite *);
-static void sub_815A31C(struct Sprite *);
-static void sub_815A3AC(struct Sprite *);
-static void sub_815A3F0(struct Sprite *);
-static void sub_815A49C(struct Sprite *);
-static void sub_815A52C(u8);
-static void sub_815A5F0(u8);
-static void sub_815A73C(struct Sprite *);
-static void sub_815A76C(struct Sprite *);
-static void sub_815A9A0(struct Sprite *);
-static void sub_815AA6C(struct Sprite *);
-static void sub_815AB5C(struct Sprite *);
-static void sub_815AD4C(struct Sprite *);
-static void sub_815AED8(u8);
-static void sub_815B054(u8);
-static void sub_815B23C(struct Sprite *);
-static void sub_815B4D4(struct Sprite *);
-static void sub_815B5D0(struct Sprite *);
-static void sub_815BF44(struct Sprite *);
-static void sub_815BFF4(struct Sprite *);
-static void sub_815C050(struct Sprite *);
+static void AnimBlackSmokeStep(struct Sprite *);
+static void AnimWhiteHalo_Step1(struct Sprite *);
+static void AnimWhiteHalo_Step2(struct Sprite *);
+static void AnimMeanLookEye_Step1(struct Sprite *);
+static void AnimMeanLookEye_Step2(struct Sprite *);
+static void AnimMeanLookEye_Step3(struct Sprite *);
+static void AnimMeanLookEye_Step4(struct Sprite *);
+static void SetPsychicBackground_Step(u8);
+static void FadeScreenToWhite_Step(u8);
+static void AnimSpikes_Step1(struct Sprite *);
+static void AnimSpikes_Step2(struct Sprite *);
+static void AnimSpotlight_Step1(struct Sprite *);
+static void AnimSpotlight_Step2(struct Sprite *);
+static void AnimClappingHand_Step(struct Sprite *);
+static void AnimRapidSpin_Step(struct Sprite *);
+static void RapinSpinMonElevation_Step(u8);
+static void TormentAttacker_Step(u8);
+static void TormentAttacker_Callback(struct Sprite *);
+static void AnimWishStar_Step(struct Sprite *);
+static void AnimMiniTwinklingStar_Step(struct Sprite *);
+static void AnimGreenStar_Step1(struct Sprite *);
+static void AnimGreenStar_Step2(struct Sprite *);
+static void AnimGreenStar_Callback(struct Sprite *);
static void AnimTask_RockMonBackAndForthStep(u8);
static void AnimSweetScentPetalStep(struct Sprite *);
static void AnimTask_FlailMovementStep(u8);
@@ -107,7 +107,7 @@ static void AnimRoarNoiseLineStep(struct Sprite *);
static void AnimTask_GlareEyeDotsStep(u8);
static void GetGlareEyeDotCoords(s16, s16, s16, s16, u8, u8, s16 *, s16 *);
static void AnimTask_BarrageBallStep(u8);
-static void sub_815E784(struct Sprite *);
+static void AnimSmellingSaltsHand_Step(struct Sprite *);
static void AnimTask_SmellingSaltsSquishStep(u8);
static void AnimSmellingSaltExclamationStep(struct Sprite *);
static void AnimHelpingHandClapStep(struct Sprite *);
@@ -121,7 +121,7 @@ static void AnimTask_TeeterDanceMovementStep(u8);
static void AnimRecycleStep(struct Sprite *);
static void AnimTask_SlackOffSquishStep(u8);
-const union AnimCmd gUnknown_085CE004[] =
+const union AnimCmd gScratchAnimCmds[] =
{
ANIMCMD_FRAME(0, 4),
ANIMCMD_FRAME(16, 4),
@@ -131,45 +131,45 @@ const union AnimCmd gUnknown_085CE004[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE01C[] =
+const union AnimCmd *const gScratchAnimTable[] =
{
- gUnknown_085CE004,
+ gScratchAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE020 =
+const struct SpriteTemplate gScratchSpriteTemplate =
{
.tileTag = ANIM_TAG_SCRATCH,
.paletteTag = ANIM_TAG_SCRATCH,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_085CE01C,
+ .oam = &gOamData_AffineOff_ObjBlend_32x32,
+ .anims = gScratchAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
-const struct SpriteTemplate gUnknown_085CE038 =
+const struct SpriteTemplate gBlackSmokeSpriteTemplate =
{
.tileTag = ANIM_TAG_BLACK_SMOKE,
.paletteTag = ANIM_TAG_BLACK_SMOKE,
- .oam = &gUnknown_08524934,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815A0D4,
+ .callback = AnimBlackSmoke,
};
-const struct SpriteTemplate gUnknown_085CE050 =
+const struct SpriteTemplate gBlackBallSpriteTemplate =
{
.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[] =
+const union AnimCmd gOpeningEyeAnimCmds[] =
{
ANIMCMD_FRAME(0, 40),
ANIMCMD_FRAME(16, 8),
@@ -177,45 +177,45 @@ const union AnimCmd gUnknown_085CE068[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE078[] =
+const union AnimCmd *const gOpeningEyeAnimTable[] =
{
- gUnknown_085CE068,
+ gOpeningEyeAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE07C =
+const struct SpriteTemplate gOpeningEyeSpriteTemplate =
{
.tileTag = ANIM_TAG_OPENING_EYE,
.paletteTag = ANIM_TAG_OPENING_EYE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085CE078,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gOpeningEyeAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
-const struct SpriteTemplate gUnknown_085CE094 =
+const struct SpriteTemplate gWhiteHaloSpriteTemplate =
{
.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,
- .callback = sub_815A1B0,
+ .callback = AnimWhiteHalo,
};
-const struct SpriteTemplate gUnknown_085CE0AC =
+const struct SpriteTemplate gTealAlertSpriteTemplate =
{
.tileTag = ANIM_TAG_TEAL_ALERT,
.paletteTag = ANIM_TAG_TEAL_ALERT,
- .oam = &gUnknown_08524974,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815A254,
+ .callback = AnimTealAlert,
};
-const union AffineAnimCmd gUnknown_085CE0C4[] =
+const union AffineAnimCmd gMeanLookEyeAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0),
AFFINEANIMCMD_FRAME(-0x20, 0x18, 0, 5),
@@ -223,42 +223,42 @@ const union AffineAnimCmd gUnknown_085CE0C4[] =
AFFINEANIMCMD_JUMP(1),
};
-const union AffineAnimCmd gUnknown_085CE0E4[] =
+const union AffineAnimCmd gMeanLookEyeAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x30, 0x30, 0, 0),
AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 6),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_085CE0FC[] =
+const union AffineAnimCmd *const gMeanLookEyeAffineAnimTable[] =
{
- gUnknown_085CE0C4,
- gUnknown_085CE0E4,
+ gMeanLookEyeAffineAnimCmds1,
+ gMeanLookEyeAffineAnimCmds2,
};
-const struct SpriteTemplate gUnknown_085CE104 =
+const struct SpriteTemplate gMeanLookEyeSpriteTemplate =
{
.tileTag = ANIM_TAG_EYE,
.paletteTag = ANIM_TAG_EYE,
- .oam = &gUnknown_08524AFC,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE0FC,
- .callback = sub_815A2F0,
+ .affineAnims = gMeanLookEyeAffineAnimTable,
+ .callback = AnimMeanLookEye,
};
-const struct SpriteTemplate gUnknown_085CE11C =
+const struct SpriteTemplate gSpikesSpriteTemplate =
{
.tileTag = ANIM_TAG_SPIKES,
.paletteTag = ANIM_TAG_SPIKES,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815A6C4,
+ .callback = AnimSpikes,
};
-const union AnimCmd gUnknown_085CE134[] =
+const union AnimCmd gLeerAnimCmds[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
@@ -268,57 +268,57 @@ const union AnimCmd gUnknown_085CE134[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE14C[] =
+const union AnimCmd *const gLeerAnimTable[] =
{
- gUnknown_085CE134,
+ gLeerAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE150 =
+const struct SpriteTemplate gLeerSpriteTemplate =
{
.tileTag = ANIM_TAG_LEER,
.paletteTag = ANIM_TAG_LEER,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085CE14C,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gLeerAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815A7B0,
+ .callback = AnimLeer,
};
-const union AnimCmd gUnknown_085CE168[] =
+const union AnimCmd gLetterZAnimCmds[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE170[] =
+const union AnimCmd *const gLetterZAnimTable[] =
{
- gUnknown_085CE168,
+ gLetterZAnimCmds,
};
-const union AffineAnimCmd gUnknown_085CE174[] =
+const union AffineAnimCmd gLetterZAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(-7, -7, -3, 16),
AFFINEANIMCMD_FRAME(7, 7, 3, 16),
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_085CE18C[] =
+const union AffineAnimCmd *const gLetterZAffineAnimTable[] =
{
- gUnknown_085CE174,
+ gLetterZAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE190 =
+const struct SpriteTemplate gLetterZSpriteTemplate =
{
.tileTag = ANIM_TAG_LETTER_Z,
.paletteTag = ANIM_TAG_LETTER_Z,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085CE170,
+ .oam = &gOamData_AffineNormal_ObjNormal_32x32,
+ .anims = gLetterZAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE18C,
- .callback = sub_815A7EC,
+ .affineAnims = gLetterZAffineAnimTable,
+ .callback = AnimLetterZ,
};
-const union AnimCmd gUnknown_085CE1A8[] =
+const union AnimCmd gFangAnimCmds[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_FRAME(16, 16),
@@ -327,88 +327,88 @@ const union AnimCmd gUnknown_085CE1A8[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE1BC[] =
+const union AnimCmd *const gFangAnimTable[] =
{
- gUnknown_085CE1A8,
+ gFangAnimCmds,
};
-const union AffineAnimCmd gUnknown_085CE1C0[] =
+const union AffineAnimCmd gFangAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
AFFINEANIMCMD_FRAME(-0x20, -0x20, 0, 8),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_085CE1D8[] =
+const union AffineAnimCmd *const gFangAffineAnimTable[] =
{
- gUnknown_085CE1C0,
+ gFangAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE1DC =
+const struct SpriteTemplate gFangSpriteTemplate =
{
.tileTag = ANIM_TAG_FANG_ATTACK,
.paletteTag = ANIM_TAG_FANG_ATTACK,
- .oam = &gUnknown_085249D4,
- .anims = gUnknown_085CE1BC,
+ .oam = &gOamData_AffineDouble_ObjNormal_32x32,
+ .anims = gFangAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE1D8,
- .callback = sub_815A8AC,
+ .affineAnims = gFangAffineAnimTable,
+ .callback = AnimFang,
};
-const union AffineAnimCmd gUnknown_085CE1F4[] =
+const union AffineAnimCmd gSpotlightAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x0, 0x180, 0, 0),
AFFINEANIMCMD_FRAME(0x10, 0x0, 0, 20),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_085CE20C[] =
+const union AffineAnimCmd gSpotlightAffineAnimCmds2[] =
{
AFFINEANIMCMD_FRAME(0x140, 0x180, 0, 0),
AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 19),
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd *const gUnknown_085CE224[] =
+const union AffineAnimCmd *const gSpotlightAffineAnimTable[] =
{
- gUnknown_085CE1F4,
- gUnknown_085CE20C,
+ gSpotlightAffineAnimCmds1,
+ gSpotlightAffineAnimCmds2,
};
-const struct SpriteTemplate gUnknown_085CE22C =
+const struct SpriteTemplate gSpotlightSpriteTemplate =
{
.tileTag = ANIM_TAG_SPOTLIGHT,
.paletteTag = ANIM_TAG_SPOTLIGHT,
- .oam = &gUnknown_085249DC,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE224,
- .callback = sub_815A934,
+ .affineAnims = gSpotlightAffineAnimTable,
+ .callback = AnimSpotlight,
};
-const struct SpriteTemplate gUnknown_085CE244 =
+const struct SpriteTemplate gClappingHandSpriteTemplate =
{
.tileTag = ANIM_TAG_TAG_HAND,
.paletteTag = ANIM_TAG_TAG_HAND,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815AAA4,
+ .callback = AnimClappingHand,
};
-const struct SpriteTemplate gUnknown_085CE25C =
+const struct SpriteTemplate gClappingHand2SpriteTemplate =
{
.tileTag = ANIM_TAG_TAG_HAND,
.paletteTag = ANIM_TAG_TAG_HAND,
- .oam = &gUnknown_08524914,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815ABD0,
+ .callback = AnimClappingHand2,
};
-const union AnimCmd gUnknown_085CE274[] =
+const union AnimCmd gRapidSpinAnimCmds[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(8, 2),
@@ -416,20 +416,20 @@ const union AnimCmd gUnknown_085CE274[] =
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gUnknown_085CE284[] =
+const union AnimCmd *const gRapidSpinAnimTable[] =
{
- gUnknown_085CE274,
+ gRapidSpinAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE288 =
+const struct SpriteTemplate gRapidSpinSpriteTemplate =
{
.tileTag = ANIM_TAG_RAPID_SPIN,
.paletteTag = ANIM_TAG_RAPID_SPIN,
- .oam = &gUnknown_08524934,
- .anims = gUnknown_085CE284,
+ .oam = &gOamData_AffineOff_ObjNormal_32x16,
+ .anims = gRapidSpinAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815ACD0,
+ .callback = AnimRapidSpin,
};
const union AffineAnimCmd gUnknown_085CE2A0[] =
@@ -440,18 +440,18 @@ const union AffineAnimCmd gUnknown_085CE2A0[] =
AFFINEANIMCMD_END,
};
-const union AnimCmd gUnknown_085CE2C0[] =
+const union AnimCmd gTriAttackTriangleAnimCmds[] =
{
ANIMCMD_FRAME(0, 8),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE2C8[] =
+const union AnimCmd *const gTriAttackTriangleAnimTable[] =
{
- gUnknown_085CE2C0,
+ gTriAttackTriangleAnimCmds,
};
-const union AffineAnimCmd gUnknown_085CE2CC[] =
+const union AffineAnimCmd gTriAttackTriangleAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0, 0, 5, 40),
AFFINEANIMCMD_FRAME(0, 0, 10, 10),
@@ -460,23 +460,23 @@ const union AffineAnimCmd gUnknown_085CE2CC[] =
AFFINEANIMCMD_JUMP(0),
};
-const union AffineAnimCmd *const gUnknown_085CE2F4[] =
+const union AffineAnimCmd *const gTriAttackTriangleAffineAnimTable[] =
{
- gUnknown_085CE2CC,
+ gTriAttackTriangleAffineAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE2F8 =
+const struct SpriteTemplate gTriAttackTriangleSpriteTemplate =
{
- .tileTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
- .paletteTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
- .oam = &gUnknown_085249DC,
- .anims = gUnknown_085CE2C8,
+ .tileTag = ANIM_TAG_TRI_ATTACK_TRIANGLE,
+ .paletteTag = ANIM_TAG_TRI_ATTACK_TRIANGLE,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gTriAttackTriangleAnimTable,
.images = NULL,
- .affineAnims = gUnknown_085CE2F4,
- .callback = sub_815B27C,
+ .affineAnims = gTriAttackTriangleAffineAnimTable,
+ .callback = AnimTriAttackTriangle,
};
-const union AnimCmd gUnknown_085CE310[] =
+const union AnimCmd gEclipsingOrbAnimCmds[] =
{
ANIMCMD_FRAME(0, 3),
ANIMCMD_FRAME(16, 3),
@@ -489,23 +489,23 @@ const union AnimCmd gUnknown_085CE310[] =
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE334[] =
+const union AnimCmd *const gEclipsingOrbAnimTable[] =
{
- gUnknown_085CE310,
+ gEclipsingOrbAnimCmds,
};
-const struct SpriteTemplate gUnknown_085CE338 =
+const struct SpriteTemplate gEclipsingOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_ECLIPSING_ORB,
.paletteTag = ANIM_TAG_ECLIPSING_ORB,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085CE334,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gEclipsingOrbAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
+ .callback = AnimSpriteOnMonPos,
};
-const union AffineAnimCmd gUnknown_085CE350[] =
+const union AffineAnimCmd DefenseCurlDeformMonAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(-12, 20, 0, 8),
AFFINEANIMCMD_FRAME(12, -20, 0, 8),
@@ -513,40 +513,40 @@ const union AffineAnimCmd gUnknown_085CE350[] =
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gUnknown_085CE370 =
+const struct SpriteTemplate gBatonPassPokeballSpriteTemplate =
{
.tileTag = ANIM_TAG_POKEBALL,
.paletteTag = ANIM_TAG_POKEBALL,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815B394,
+ .callback = AnimBatonPassPokeball,
};
-const struct SpriteTemplate gUnknown_085CE388 =
+const struct SpriteTemplate gWishStarSpriteTemplate =
{
.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_815B49C,
+ .callback = AnimWishStar,
};
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,
.callback = AnimMiniTwinklingStar,
};
-const union AffineAnimCmd gUnknown_085CE3B8[] =
+const union AffineAnimCmd gStockpileDeformMonAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(8, -8, 0, 12),
AFFINEANIMCMD_FRAME(-16, 16, 0, 12),
@@ -555,7 +555,7 @@ const union AffineAnimCmd gUnknown_085CE3B8[] =
AFFINEANIMCMD_END,
};
-const union AffineAnimCmd gUnknown_085CE3E0[] =
+const union AffineAnimCmd gSpitUpDeformMonAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0, 6, 0, 20),
AFFINEANIMCMD_FRAME(0, 0, 0, 20),
@@ -566,18 +566,18 @@ const union AffineAnimCmd gUnknown_085CE3E0[] =
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gUnknown_085CE418 =
+const struct SpriteTemplate gSwallowBlueOrbSpriteTemplate =
{
.tileTag = ANIM_TAG_BLUE_ORB,
.paletteTag = ANIM_TAG_BLUE_ORB,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815B70C,
+ .callback = AnimSwallowBlueOrb,
};
-const union AffineAnimCmd gUnknown_085CE430[] =
+const union AffineAnimCmd gSwallowDeformMonAffineAnimCmds[] =
{
AFFINEANIMCMD_FRAME(0, 6, 0, 20),
AFFINEANIMCMD_FRAME(0, 0, 0, 20),
@@ -587,7 +587,7 @@ const union AffineAnimCmd gUnknown_085CE430[] =
AFFINEANIMCMD_END,
};
-const s8 gUnknown_085CE460[] =
+const s8 gMorningSunLightBeamCoordsTable[] =
{
0xE8,
0x18,
@@ -595,44 +595,44 @@ const s8 gUnknown_085CE460[] =
0x00,
};
-const union AnimCmd gUnknown_085CE464[] =
+const union AnimCmd gGreenStarAnimCmds1[] =
{
ANIMCMD_FRAME(0, 6),
ANIMCMD_FRAME(4, 6),
ANIMCMD_JUMP(0),
};
-const union AnimCmd gUnknown_085CE470[] =
+const union AnimCmd gGreenStarAnimCmds2[] =
{
ANIMCMD_FRAME(8, 6),
ANIMCMD_END,
};
-const union AnimCmd gUnknown_085CE478[] =
+const union AnimCmd gGreenStarAnimCmds3[] =
{
ANIMCMD_FRAME(12, 6),
ANIMCMD_END,
};
-const union AnimCmd *const gUnknown_085CE480[] =
+const union AnimCmd *const gGreenStarAnimTable[] =
{
- gUnknown_085CE464,
- gUnknown_085CE470,
- gUnknown_085CE478,
+ gGreenStarAnimCmds1,
+ gGreenStarAnimCmds2,
+ gGreenStarAnimCmds3,
};
-const struct SpriteTemplate gUnknown_085CE48C =
+const struct SpriteTemplate gGreenStarSpriteTemplate =
{
.tileTag = ANIM_TAG_GREEN_STAR,
.paletteTag = ANIM_TAG_GREEN_STAR,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085CE480,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gGreenStarAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815BE04,
+ .callback = AnimGreenStar,
};
-const s8 gUnknown_085CE4A4[] =
+const s8 gDoomDesireLightBeamCoordTable[] =
{
0x78,
0x50,
@@ -640,7 +640,7 @@ const s8 gUnknown_085CE4A4[] =
0x00,
};
-const u8 gUnknown_085CE4A8[] =
+const u8 gDoomDesireLightBeamDelayTable[] =
{
0,
0,
@@ -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,10 +759,10 @@ 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,
+ .affineAnims = gSpotlightAffineAnimTable,
.callback = AnimFlatterSpotlight,
};
@@ -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,
@@ -888,15 +888,15 @@ const union AffineAnimCmd gFacadeSquishAffineAnimCmds[] =
AFFINEANIMCMD_END,
};
-const struct SpriteTemplate gFacadeSweatDrop =
+const struct SpriteTemplate gFacadeSweatDropSpriteTemplate =
{
.tileTag = ANIM_TAG_SWEAT_DROP,
.paletteTag = ANIM_TAG_SWEAT_DROP,
- .oam = &gUnknown_08524904,
+ .oam = &gOamData_AffineOff_ObjNormal_8x8,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_815DEBC,
+ .callback = AnimFacadeSweatDrop,
};
const u16 gFacadeBlendColors[] = {
@@ -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,
@@ -1179,7 +1179,7 @@ const union AffineAnimCmd gSlackOffSquishAffineAnimCmds[] =
AFFINEANIMCMD_END,
};
-void sub_815A0D4(struct Sprite *sprite)
+void AnimBlackSmoke(struct Sprite *sprite)
{
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
@@ -1190,10 +1190,10 @@ void sub_815A0D4(struct Sprite *sprite)
sprite->data[0] = -gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[4];
- sprite->callback = sub_815A114;
+ sprite->callback = AnimBlackSmokeStep;
}
-static void sub_815A114(struct Sprite *sprite)
+static void AnimBlackSmokeStep(struct Sprite *sprite)
{
if (sprite->data[1] > 0)
{
@@ -1208,43 +1208,43 @@ static void sub_815A114(struct Sprite *sprite)
}
}
-void sub_815A160(u8 taskId)
+void AnimTask_SmokescreenImpact(u8 taskId)
{
- sub_807521C(
+ SmokescreenImpact(
GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 8,
GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 8,
0);
DestroyAnimVisualTask(taskId);
}
-void sub_815A1B0(struct Sprite *sprite)
+void AnimWhiteHalo(struct Sprite *sprite)
{
sprite->data[0] = 90;
sprite->callback = WaitAnimForDuration;
sprite->data[1] = 7;
- StoreSpriteCallbackInData6(sprite, sub_815A1F4);
+ StoreSpriteCallbackInData6(sprite, AnimWhiteHalo_Step1);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
}
-static void sub_815A1F4(struct Sprite *sprite)
+static void AnimWhiteHalo_Step1(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
if (--sprite->data[1] < 0)
{
sprite->invisible = 1;
- sprite->callback = sub_815A234;
+ sprite->callback = AnimWhiteHalo_Step2;
}
}
-static void sub_815A234(struct Sprite *sprite)
+static void AnimWhiteHalo_Step2(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyAnimSprite(sprite);
}
-void sub_815A254(struct Sprite *sprite)
+void AnimTealAlert(struct Sprite *sprite)
{
u16 rotation;
u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
@@ -1266,15 +1266,15 @@ void sub_815A254(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_815A2F0(struct Sprite *sprite)
+void AnimMeanLookEye(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
sprite->data[0] = 4;
- sprite->callback = sub_815A31C;
+ sprite->callback = AnimMeanLookEye_Step1;
}
-static void sub_815A31C(struct Sprite *sprite)
+static void AnimMeanLookEye_Step1(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
@@ -1294,22 +1294,22 @@ static void sub_815A31C(struct Sprite *sprite)
sprite->data[2] = 0;
sprite->invisible = 1;
sprite->affineAnimPaused = 1;
- sprite->callback = sub_815A3AC;
+ sprite->callback = AnimMeanLookEye_Step2;
}
}
-static void sub_815A3AC(struct Sprite *sprite)
+static void AnimMeanLookEye_Step2(struct Sprite *sprite)
{
if (sprite->data[2]++ > 9)
{
sprite->invisible = 0;
sprite->affineAnimPaused = 0;
if (sprite->affineAnimEnded)
- sprite->callback = sub_815A3F0;
+ sprite->callback = AnimMeanLookEye_Step3;
}
}
-static void sub_815A3F0(struct Sprite *sprite)
+static void AnimMeanLookEye_Step3(struct Sprite *sprite)
{
switch (sprite->data[3])
{
@@ -1344,11 +1344,11 @@ static void sub_815A3F0(struct Sprite *sprite)
sprite->data[1] = 0;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 0));
- sprite->callback = sub_815A49C;
+ sprite->callback = AnimMeanLookEye_Step4;
}
}
-static void sub_815A49C(struct Sprite *sprite)
+static void AnimMeanLookEye_Step4(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
@@ -1369,17 +1369,17 @@ static void sub_815A49C(struct Sprite *sprite)
}
}
-void sub_815A504(u8 taskId)
+void AnimTask_SetPsychicBackground(u8 taskId)
{
- gTasks[taskId].func = sub_815A52C;
+ gTasks[taskId].func = SetPsychicBackground_Step;
gAnimVisualTaskCount--;
}
-static void sub_815A52C(u8 taskId)
+static void SetPsychicBackground_Step(u8 taskId)
{
int i;
u16 lastColor;
- u8 paletteIndex = sub_80A6D94();
+ u8 paletteIndex = GetBattleBgPaletteNum();
if (++gTasks[taskId].data[5] == 4)
{
@@ -1395,17 +1395,17 @@ static void sub_815A52C(u8 taskId)
DestroyTask(taskId);
}
-void sub_815A5C8(u8 taskId)
+void AnimTask_FadeScreenToWhite(u8 taskId)
{
- gTasks[taskId].func = sub_815A5F0;
+ gTasks[taskId].func = FadeScreenToWhite_Step;
gAnimVisualTaskCount--;
}
-static void sub_815A5F0(u8 taskId)
+static void FadeScreenToWhite_Step(u8 taskId)
{
int i;
u16 lastColor;
- u8 paletteIndex = sub_80A6D94();
+ u8 paletteIndex = GetBattleBgPaletteNum();
if (++gTasks[taskId].data[5] == 4)
{
@@ -1426,7 +1426,7 @@ static void sub_815A5F0(u8 taskId)
DestroyTask(taskId);
}
-void sub_815A6C4(struct Sprite *sprite)
+void AnimSpikes(struct Sprite *sprite)
{
u16 x;
u16 y;
@@ -1443,21 +1443,21 @@ void sub_815A6C4(struct Sprite *sprite)
sprite->data[5] = -50;
InitAnimArcTranslation(sprite);
- sprite->callback = sub_815A73C;
+ sprite->callback = AnimSpikes_Step1;
}
-static void sub_815A73C(struct Sprite *sprite)
+static void AnimSpikes_Step1(struct Sprite *sprite)
{
if (TranslateAnimHorizontalArc(sprite))
{
sprite->data[0] = 30;
sprite->data[1] = 0;
sprite->callback = WaitAnimForDuration;
- StoreSpriteCallbackInData6(sprite, sub_815A76C);
+ StoreSpriteCallbackInData6(sprite, AnimSpikes_Step2);
}
}
-static void sub_815A76C(struct Sprite *sprite)
+static void AnimSpikes_Step2(struct Sprite *sprite)
{
if (sprite->data[1] & 1)
sprite->invisible ^= 1;
@@ -1466,7 +1466,7 @@ static void sub_815A76C(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_815A7B0(struct Sprite *sprite)
+void AnimLeer(struct Sprite *sprite)
{
SetSpriteCoordsToAnimAttackerCoords(sprite);
SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
@@ -1475,7 +1475,7 @@ void sub_815A7B0(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-void sub_815A7EC(struct Sprite *sprite)
+void AnimLetterZ(struct Sprite *sprite)
{
int var0;
if (sprite->data[0] == 0)
@@ -1513,7 +1513,7 @@ void sub_815A7EC(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_815A8AC(struct Sprite *sprite)
+void AnimFang(struct Sprite *sprite)
{
if (sprite->animEnded)
DestroyAnimSprite(sprite);
@@ -1539,7 +1539,7 @@ void AnimTask_IsHealingMove(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_815A934(struct Sprite *sprite)
+void AnimSpotlight(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
@@ -1552,10 +1552,10 @@ void sub_815A934(struct Sprite *sprite)
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
sprite->invisible = 1;
- sprite->callback = sub_815A9A0;
+ sprite->callback = AnimSpotlight_Step1;
}
-static void sub_815A9A0(struct Sprite *sprite)
+static void AnimSpotlight_Step1(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -1591,20 +1591,20 @@ static void sub_815A9A0(struct Sprite *sprite)
if (sprite->affineAnimEnded)
{
sprite->invisible = 1;
- sprite->callback = sub_815AA6C;
+ sprite->callback = AnimSpotlight_Step2;
}
break;
}
}
-static void sub_815AA6C(struct Sprite *sprite)
+static void AnimSpotlight_Step2(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
DestroyAnimSprite(sprite);
}
-void sub_815AAA4(struct Sprite *sprite)
+void AnimClappingHand(struct Sprite *sprite)
{
if (gBattleAnimArgs[3] == 0)
{
@@ -1633,10 +1633,10 @@ void sub_815AAA4(struct Sprite *sprite)
if (sprite->data[3] != 255)
sprite->data[3] = gBattleAnimArgs[2];
- sprite->callback = sub_815AB5C;
+ sprite->callback = AnimClappingHand_Step;
}
-static void sub_815AB5C(struct Sprite *sprite)
+static void AnimClappingHand_Step(struct Sprite *sprite)
{
if (sprite->data[2] == 0)
{
@@ -1665,14 +1665,14 @@ static void sub_815AB5C(struct Sprite *sprite)
DestroyAnimSprite(sprite);
}
-void sub_815ABD0(struct Sprite *sprite)
+void AnimClappingHand2(struct Sprite *sprite)
{
sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
sprite->data[3] = 255;
- sub_815AAA4(sprite);
+ AnimClappingHand(sprite);
}
-void sub_815ABEC(u8 taskId)
+void AnimTask_CreateSpotlight(u8 taskId)
{
if (IsContest())
{
@@ -1695,7 +1695,7 @@ void sub_815ABEC(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_815AC8C(u8 taskId)
+void AnimTask_RemoveSpotlight(u8 taskId)
{
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
gBattle_WIN1H = 0;
@@ -1706,7 +1706,7 @@ void sub_815AC8C(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_815ACD0(struct Sprite *sprite)
+void AnimRapidSpin(struct Sprite *sprite)
{
if (gBattleAnimArgs[0] == 0)
{
@@ -1726,10 +1726,10 @@ void sub_815ACD0(struct Sprite *sprite)
sprite->data[2] = gBattleAnimArgs[4];
sprite->data[3] = gBattleAnimArgs[5];
sprite->data[4] = gBattleAnimArgs[3];
- sprite->callback = sub_815AD4C;
+ sprite->callback = AnimRapidSpin_Step;
}
-static void sub_815AD4C(struct Sprite *sprite)
+static void AnimRapidSpin_Step(struct Sprite *sprite)
{
sprite->data[1] = (sprite->data[1] + sprite->data[2]) & 0xFF;
sprite->pos2.x = gSineTable[sprite->data[1]] >> 4;
@@ -1747,7 +1747,7 @@ static void sub_815AD4C(struct Sprite *sprite)
}
}
-void sub_815ADB0(u8 taskId)
+void AnimTask_RapinSpinMonElevation(u8 taskId)
{
s16 var0;
u8 toBG2;
@@ -1828,10 +1828,10 @@ void sub_815ADB0(u8 taskId)
scanlineParams.unused9 = 0;
ScanlineEffect_SetParams(scanlineParams);
- task->func = sub_815AED8;
+ task->func = RapinSpinMonElevation_Step;
}
-static void sub_815AED8(u8 taskId)
+static void RapinSpinMonElevation_Step(u8 taskId)
{
s16 i;
struct Task *task = &gTasks[taskId];
@@ -1890,7 +1890,7 @@ static void sub_815AED8(u8 taskId)
}
}
-void sub_815AFF0(u8 taskId)
+void AnimTask_TormentAttacker(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -1902,10 +1902,10 @@ void sub_815AFF0(u8 taskId)
task->data[5] = -20;
task->data[6] = 0;
task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
- task->func = sub_815B054;
+ task->func = TormentAttacker_Step;
}
-static void sub_815B054(u8 taskId)
+static void TormentAttacker_Step(u8 taskId)
{
int var0, var1;
s16 x, y;
@@ -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,12 +1982,12 @@ 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;
StartSpriteAnim(&gSprites[i], 2);
- gSprites[i].callback = sub_815B23C;
+ gSprites[i].callback = TormentAttacker_Callback;
if (++j == 6)
break;
@@ -2004,7 +2004,7 @@ static void sub_815B054(u8 taskId)
}
}
-static void sub_815B23C(struct Sprite *sprite)
+static void TormentAttacker_Callback(struct Sprite *sprite)
{
if (sprite->animEnded)
{
@@ -2013,7 +2013,7 @@ static void sub_815B23C(struct Sprite *sprite)
}
}
-void sub_815B27C(struct Sprite *sprite)
+void AnimTriAttackTriangle(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
InitSpritePosToAnimAttacker(sprite, FALSE);
@@ -2044,12 +2044,12 @@ void sub_815B27C(struct Sprite *sprite)
}
}
-void sub_815B338(u8 taskId)
+void AnimTask_DefenseCurlDeformMon(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
case 0:
- PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE350);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), DefenseCurlDeformMonAffineAnimCmds);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -2059,7 +2059,7 @@ void sub_815B338(u8 taskId)
}
}
-void sub_815B394(struct Sprite *sprite)
+void AnimBatonPassPokeball(struct Sprite *sprite)
{
u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
@@ -2102,7 +2102,7 @@ void sub_815B394(struct Sprite *sprite)
}
}
-void sub_815B49C(struct Sprite *sprite)
+void AnimWishStar(struct Sprite *sprite)
{
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
sprite->pos1.x = -16;
@@ -2110,10 +2110,10 @@ void sub_815B49C(struct Sprite *sprite)
sprite->pos1.x = 256;
sprite->pos1.y = 0;
- sprite->callback = sub_815B4D4;
+ sprite->callback = AnimWishStar_Step;
}
-static void sub_815B4D4(struct Sprite *sprite)
+static void AnimWishStar_Step(struct Sprite *sprite)
{
u32 newX;
@@ -2156,10 +2156,10 @@ void AnimMiniTwinklingStar(struct Sprite *sprite)
y = -y;
sprite->pos2.y = y;
- sprite->callback = sub_815B5D0;
+ sprite->callback = AnimMiniTwinklingStar_Step;
}
-static void sub_815B5D0(struct Sprite *sprite)
+static void AnimMiniTwinklingStar_Step(struct Sprite *sprite)
{
if (++sprite->data[0] < 30)
{
@@ -2187,11 +2187,11 @@ static void sub_815B5D0(struct Sprite *sprite)
DestroySprite(sprite);
}
-void sub_815B65C(u8 taskId)
+void AnimTask_StockpileDeformMon(u8 taskId)
{
if (!gTasks[taskId].data[0])
{
- PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3B8);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gStockpileDeformMonAffineAnimCmds);
gTasks[taskId].data[0]++;
}
else
@@ -2201,11 +2201,11 @@ void sub_815B65C(u8 taskId)
}
}
-void sub_815B6B4(u8 taskId)
+void AnimTask_SpitUpDeformMon(u8 taskId)
{
if (!gTasks[taskId].data[0])
{
- PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3E0);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gSpitUpDeformMonAffineAnimCmds);
gTasks[taskId].data[0]++;
}
else
@@ -2215,7 +2215,7 @@ void sub_815B6B4(u8 taskId)
}
}
-void sub_815B70C(struct Sprite *sprite)
+void AnimSwallowBlueOrb(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -2234,11 +2234,11 @@ void sub_815B70C(struct Sprite *sprite)
}
}
-void sub_815B778(u8 taskId)
+void AnimTask_SwallowDeformMon(u8 taskId)
{
if (!gTasks[taskId].data[0])
{
- PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE430);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gSwallowDeformMonAffineAnimCmds);
gTasks[taskId].data[0]++;
}
else
@@ -2248,7 +2248,7 @@ void sub_815B778(u8 taskId)
}
}
-void sub_815B7D0(u8 taskId)
+void AnimTask_TransformMon(u8 taskId)
{
int i, j;
u8 position;
@@ -2361,19 +2361,19 @@ void sub_815B7D0(u8 taskId)
}
}
-void sub_815BB18(u8 taskId)
+void AnimTask_IsMonInvisible(u8 taskId)
{
gBattleAnimArgs[7] = gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible;
DestroyAnimVisualTask(taskId);
}
-void sub_815BB58(u8 taskId)
+void AnimTask_CastformGfxChange(u8 taskId)
{
HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE);
DestroyAnimVisualTask(taskId);
}
-void sub_815BB84(u8 taskId)
+void AnimTask_MorningSunLightBeam(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -2434,7 +2434,7 @@ void sub_815BB84(u8 taskId)
if (!gTasks[taskId].data[1])
{
- gBattle_BG1_X = gUnknown_085CE460[gTasks[taskId].data[2]] + gTasks[taskId].data[10];
+ gBattle_BG1_X = gMorningSunLightBeamCoordsTable[gTasks[taskId].data[2]] + gTasks[taskId].data[10];
if (++gTasks[taskId].data[2] == 4)
gTasks[taskId].data[0] = 4;
else
@@ -2465,7 +2465,7 @@ void sub_815BB84(u8 taskId)
}
}
-void sub_815BE04(struct Sprite *sprite)
+void AnimGreenStar(struct Sprite *sprite)
{
s16 xOffset;
u8 spriteId1;
@@ -2481,8 +2481,8 @@ void sub_815BE04(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[0];
sprite->data[2] = gBattleAnimArgs[1];
- spriteId1 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
- spriteId2 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ spriteId1 = CreateSprite(&gGreenStarSpriteTemplate, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ spriteId2 = CreateSprite(&gGreenStarSpriteTemplate, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
StartSpriteAnim(&gSprites[spriteId1], 1);
StartSpriteAnim(&gSprites[spriteId2], 2);
@@ -2494,15 +2494,15 @@ void sub_815BE04(struct Sprite *sprite)
gSprites[spriteId2].data[7] = -1;
gSprites[spriteId1].invisible = 1;
gSprites[spriteId2].invisible = 1;
- gSprites[spriteId1].callback = sub_815C050;
- gSprites[spriteId2].callback = sub_815C050;
+ gSprites[spriteId1].callback = AnimGreenStar_Callback;
+ gSprites[spriteId2].callback = AnimGreenStar_Callback;
sprite->data[6] = spriteId1;
sprite->data[7] = spriteId2;
- sprite->callback = sub_815BF44;
+ sprite->callback = AnimGreenStar_Step1;
}
-static void sub_815BF44(struct Sprite *sprite)
+static void AnimGreenStar_Step1(struct Sprite *sprite)
{
s16 delta = sprite->data[3] + sprite->data[2];
sprite->pos2.y -= delta >> 8;
@@ -2523,11 +2523,11 @@ static void sub_815BF44(struct Sprite *sprite)
if (--sprite->data[1] == -1)
{
sprite->invisible = 1;
- sprite->callback = sub_815BFF4;
+ sprite->callback = AnimGreenStar_Step2;
}
}
-static void sub_815BFF4(struct Sprite *sprite)
+static void AnimGreenStar_Step2(struct Sprite *sprite)
{
if (gSprites[sprite->data[6]].callback == SpriteCallbackDummy
&& gSprites[sprite->data[7]].callback == SpriteCallbackDummy)
@@ -2538,7 +2538,7 @@ static void sub_815BFF4(struct Sprite *sprite)
}
}
-static void sub_815C050(struct Sprite *sprite)
+static void AnimGreenStar_Callback(struct Sprite *sprite)
{
if (!sprite->invisible)
{
@@ -2554,7 +2554,7 @@ static void sub_815C050(struct Sprite *sprite)
}
}
-void sub_815C0A4(u8 taskId)
+void AnimTask_DoomDesireLightBeam(u8 taskId)
{
struct BattleAnimBgData animBg;
@@ -2609,9 +2609,9 @@ void sub_815C0A4(u8 taskId)
case 1:
gTasks[taskId].data[3] = 0;
if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
- gBattle_BG1_X = gTasks[taskId].data[10] + gUnknown_085CE4A4[gTasks[taskId].data[2]];
+ gBattle_BG1_X = gTasks[taskId].data[10] + gDoomDesireLightBeamCoordTable[gTasks[taskId].data[2]];
else
- gBattle_BG1_X = gTasks[taskId].data[10] - gUnknown_085CE4A4[gTasks[taskId].data[2]];
+ gBattle_BG1_X = gTasks[taskId].data[10] - gDoomDesireLightBeamCoordTable[gTasks[taskId].data[2]];
if (++gTasks[taskId].data[2] == 5)
gTasks[taskId].data[0] = 5;
@@ -2627,7 +2627,7 @@ void sub_815C0A4(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 3:
- if (++gTasks[taskId].data[3] > gUnknown_085CE4A8[gTasks[taskId].data[2]])
+ if (++gTasks[taskId].data[3] > gDoomDesireLightBeamDelayTable[gTasks[taskId].data[2]])
gTasks[taskId].data[0]++;
break;
case 4:
@@ -3808,7 +3808,7 @@ static void CreateSweatDroplets(u8 taskId, bool8 arg1)
for (i = 0; i < 4; i++)
{
- u8 spriteId = CreateSprite(&gFacadeSweatDrop, xCoords[i], yCoords[i & 1], task->data[6] - 5);
+ u8 spriteId = CreateSprite(&gFacadeSweatDropSpriteTemplate, xCoords[i], yCoords[i & 1], task->data[6] - 5);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[0] = 0;
@@ -3821,7 +3821,7 @@ static void CreateSweatDroplets(u8 taskId, bool8 arg1)
}
}
-void sub_815DEBC(struct Sprite *sprite)
+void AnimFacadeSweatDrop(struct Sprite *sprite)
{
sprite->pos1.x += sprite->data[1];
sprite->pos1.y += sprite->data[2];
@@ -4175,10 +4175,10 @@ void AnimSmellingSaltsHand(struct Sprite *sprite)
sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8;
}
- sprite->callback = sub_815E784;
+ sprite->callback = AnimSmellingSaltsHand_Step;
}
-static void sub_815E784(struct Sprite *sprite)
+static void AnimSmellingSaltsHand_Step(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -4709,7 +4709,7 @@ void AnimTask_MonToSubstitute(u8 taskId)
if (gTasks[taskId].data[0] == 0)
{
- PrepareBattlerSpriteForRotScale(spriteId, FALSE);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
gTasks[taskId].data[1] = 0x100;
gTasks[taskId].data[2] = 0x100;
gTasks[taskId].data[0]++;
diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c
index a667daecf..b356d57e0 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,
@@ -966,7 +966,7 @@ void sub_80A6D60(struct BattleAnimBgData *unk, const void *src, u32 arg2)
CopyBgTilemapBufferToVram(unk->bgId);
}
-u8 sub_80A6D94(void)
+u8 GetBattleBgPaletteNum(void)
{
if (IsContest())
return 1;
@@ -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;
@@ -1253,7 +1253,7 @@ void ResetSpriteRotScale(u8 spriteId)
{
SetSpriteRotScale(spriteId, 0x100, 0x100, 0);
gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
- gSprites[spriteId].oam.objMode = 0;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
gSprites[spriteId].affineAnimPaused = FALSE;
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
}
@@ -1353,7 +1353,7 @@ u32 sub_80A75AC(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner,
if (!IsContest())
selectedPalettes = 0xe;
else
- selectedPalettes = 1 << sub_80A6D94();
+ selectedPalettes = 1 << GetBattleBgPaletteNum();
}
if (attacker)
{
@@ -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;
@@ -2267,7 +2267,7 @@ u8 sub_80A89C8(int battlerId, u8 spriteId, int species)
gSprites[newSpriteId] = gSprites[spriteId];
gSprites[newSpriteId].usingSheet = TRUE;
gSprites[newSpriteId].oam.priority = 0;
- gSprites[newSpriteId].oam.objMode = 2;
+ gSprites[newSpriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
gSprites[newSpriteId].oam.tileNum = gSprites[spriteId].oam.tileNum;
gSprites[newSpriteId].callback = SpriteCallbackDummy;
return newSpriteId;
diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c
index 6780f0a32..6ff5ee893 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,14 +396,14 @@ 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,
.callback = sub_817330C,
};
-extern const struct SpriteTemplate gUnknown_085CE388;
+extern const struct SpriteTemplate gWishStarSpriteTemplate;
extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate;
void unref_sub_8170478(u8 taskId)
@@ -2081,7 +2081,7 @@ static void sub_8172FEC(u8 taskId)
state = gTasks[taskId].data[11];
if (state == 0)
{
- spriteId = CreateSprite(&gUnknown_085CE388, x, y, 5);
+ spriteId = CreateSprite(&gWishStarSpriteTemplate, x, y, 5);
}
else if (state >= 0 && gTasks[taskId].data[11] < 4)
{
diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c
index 7ed78ea9a..003b6d2ef 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,
@@ -206,10 +206,38 @@ const struct SpriteTemplate gUnknown_0853EF18 =
static const struct Subsprite gUnknown_0853EF30[] =
{
- {.x = -16, .y = -16, .shape = ST_OAM_SQUARE, .size = 3, .tileOffset = 0, .priority = 2},
- {.x = -16, .y = 48, .shape = ST_OAM_H_RECTANGLE, .size = 3, .tileOffset = 64, .priority = 2},
- {.x = 48, .y = -16, .shape = ST_OAM_V_RECTANGLE, .size = 3, .tileOffset = 96, .priority = 2},
- {.x = 48, .y = 48, .shape = ST_OAM_SQUARE, .size = 2, .tileOffset = 128, .priority = 2},
+ {
+ .x = -16,
+ .y = -16,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 48,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 64,
+ .priority = 2
+ },
+ {
+ .x = 48,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x64),
+ .size = SPRITE_SIZE(32x64),
+ .tileOffset = 96,
+ .priority = 2
+ },
+ {
+ .x = 48,
+ .y = 48,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .tileOffset = 128,
+ .priority = 2
+ },
};
static const struct SubspriteTable gUnknown_0853EF40[] =
@@ -221,7 +249,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 +260,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_arena.c b/src/battle_arena.c
index f785fa7c3..42a967fc6 100644
--- a/src/battle_arena.c
+++ b/src/battle_arena.c
@@ -20,8 +20,10 @@
#include "text.h"
#include "util.h"
#include "constants/songs.h"
+#include "constants/battle_arena.h"
#include "constants/battle_string_ids.h"
#include "constants/battle_frontier.h"
+#include "constants/frontier_util.h"
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/rgb.h"
@@ -30,9 +32,9 @@
static void InitArenaChallenge(void);
static void GetArenaData(void);
static void SetArenaData(void);
-static void sub_81A5AC4(void);
-static void SetArenaRewardItem(void);
-static void GiveArenaRewardItem(void);
+static void SaveArenaChallenge(void);
+static void SetArenaPrize(void);
+static void GiveArenaPrize(void);
static void BufferArenaOpponentName(void);
static void SpriteCb_JudgmentIcon(struct Sprite *sprite);
static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler);
@@ -402,10 +404,10 @@ static const s8 sMindRatings[] =
static const struct OamData sJudgementIconOamData =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -467,16 +469,16 @@ static const struct CompressedSpriteSheet sBattleArenaJudgementSymbolsSpriteShee
static void (* const sArenaFunctions[])(void) =
{
- InitArenaChallenge,
- GetArenaData,
- SetArenaData,
- sub_81A5AC4,
- SetArenaRewardItem,
- GiveArenaRewardItem,
- BufferArenaOpponentName,
+ [BATTLE_ARENA_FUNC_INIT] = InitArenaChallenge,
+ [BATTLE_ARENA_FUNC_GET_DATA] = GetArenaData,
+ [BATTLE_ARENA_FUNC_SET_DATA] = SetArenaData,
+ [BATTLE_ARENA_FUNC_SAVE] = SaveArenaChallenge,
+ [BATTLE_ARENA_FUNC_SET_PRIZE] = SetArenaPrize,
+ [BATTLE_ARENA_FUNC_GIVE_PRIZE] = GiveArenaPrize,
+ [BATTLE_ARENA_FUNC_GET_TRAINER_NAME] = BufferArenaOpponentName,
};
-static const u16 sShortStreakRewardItems[] =
+static const u16 sShortStreakPrizeItems[] =
{
ITEM_HP_UP,
ITEM_PROTEIN,
@@ -486,7 +488,7 @@ static const u16 sShortStreakRewardItems[] =
ITEM_ZINC,
};
-static const u16 sLongStreakRewardItems[] =
+static const u16 sLongStreakPrizeItems[] =
{
ITEM_BRIGHT_POWDER,
ITEM_WHITE_HERB,
@@ -562,8 +564,8 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
break;
case 4:
PlaySE(SE_HANTEI1);
- ShowJudgmentSprite(80, 40, 0, 0);
- ShowJudgmentSprite(160, 40, 0, 1);
+ ShowJudgmentSprite(80, 40, ARENA_CATEGORY_MIND, B_POSITION_PLAYER_LEFT);
+ ShowJudgmentSprite(160, 40, ARENA_CATEGORY_MIND, B_POSITION_OPPONENT_LEFT);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, 21);
(*state)++;
@@ -571,8 +573,8 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
break;
case 5:
PlaySE(SE_HANTEI1);
- ShowJudgmentSprite(80, 56, 1, 0);
- ShowJudgmentSprite(160, 56, 1, 1);
+ ShowJudgmentSprite(80, 56, ARENA_CATEGORY_SKILL, B_POSITION_PLAYER_LEFT);
+ ShowJudgmentSprite(160, 56, ARENA_CATEGORY_SKILL, B_POSITION_OPPONENT_LEFT);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, 21);
(*state)++;
@@ -580,8 +582,8 @@ u8 BattleArena_ShowJudgmentWindow(u8 *state)
break;
case 6:
PlaySE(SE_HANTEI1);
- ShowJudgmentSprite(80, 72, 2, 0);
- ShowJudgmentSprite(160, 72, 2, 1);
+ ShowJudgmentSprite(80, 72, ARENA_CATEGORY_BODY, B_POSITION_PLAYER_LEFT);
+ ShowJudgmentSprite(160, 72, ARENA_CATEGORY_BODY, B_POSITION_OPPONENT_LEFT);
BattleStringExpandPlaceholdersToDisplayedString(gText_Judgement);
BattlePutTextOnWindow(gDisplayedStringBattle, 21);
(*state)++;
@@ -641,15 +643,15 @@ static void ShowJudgmentSprite(u8 x, u8 y, u8 category, u8 battler)
switch (category)
{
- case 0:
+ case ARENA_CATEGORY_MIND:
pointsPlayer = mindPoints[battler];
pointsOpponent = mindPoints[BATTLE_OPPOSITE(battler)];
break;
- case 1:
+ case ARENA_CATEGORY_SKILL:
pointsPlayer = skillPoints[battler];
pointsOpponent = skillPoints[BATTLE_OPPOSITE(battler)];
break;
- case 2:
+ case ARENA_CATEGORY_BODY:
pointsPlayer = (gBattleMons[battler].hp * 100) / hpAtStart[battler];
pointsOpponent = (gBattleMons[BATTLE_OPPOSITE(battler)].hp * 100) / hpAtStart[BATTLE_OPPOSITE(battler)];
break;
@@ -786,14 +788,14 @@ static void InitArenaChallenge(void)
bool32 isCurrent;
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = 0;
- gSaveBlock2Ptr->frontier.field_CA9_b = 0;
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = FALSE;
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x80;
+ isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_OPEN;
else
- isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x40;
+ isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_50;
if (!isCurrent)
gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0;
@@ -808,17 +810,17 @@ static void GetArenaData(void)
switch (gSpecialVar_0x8005)
{
- case 0:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.arenaRewardItem;
+ case ARENA_DATA_PRIZE:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.arenaPrize;
break;
- case 1:
+ case ARENA_DATA_WIN_STREAK:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode];
break;
- case 2:
+ case ARENA_DATA_WIN_STREAK_ACTIVE:
if (lvlMode != FRONTIER_LVL_50)
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x80;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_OPEN;
else
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x40;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_50;
break;
}
}
@@ -829,55 +831,55 @@ static void SetArenaData(void)
switch (gSpecialVar_0x8005)
{
- case 0:
- gSaveBlock2Ptr->frontier.arenaRewardItem = gSpecialVar_0x8006;
+ case ARENA_DATA_PRIZE:
+ gSaveBlock2Ptr->frontier.arenaPrize = gSpecialVar_0x8006;
break;
- case 1:
+ case ARENA_DATA_WIN_STREAK:
gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = gSpecialVar_0x8006;
break;
- case 2:
+ case ARENA_DATA_WIN_STREAK_ACTIVE:
if (lvlMode != FRONTIER_LVL_50)
{
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= 0x80;
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_ARENA_OPEN;
else
- gSaveBlock2Ptr->frontier.field_CDC &= ~(0x80);
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_ARENA_OPEN);
}
else
{
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= 0x40;
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_ARENA_50;
else
- gSaveBlock2Ptr->frontier.field_CDC &= ~(0x40);
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_ARENA_50);
}
break;
}
}
-static void sub_81A5AC4(void)
+static void SaveArenaChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = 1;
- sub_81A4C30();
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
+ SaveGameFrontier();
}
-static void SetArenaRewardItem(void)
+static void SetArenaPrize(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 41)
- gSaveBlock2Ptr->frontier.arenaRewardItem = sLongStreakRewardItems[Random() % ARRAY_COUNT(sLongStreakRewardItems)];
+ gSaveBlock2Ptr->frontier.arenaPrize = sLongStreakPrizeItems[Random() % ARRAY_COUNT(sLongStreakPrizeItems)];
else
- gSaveBlock2Ptr->frontier.arenaRewardItem = sShortStreakRewardItems[Random() % ARRAY_COUNT(sShortStreakRewardItems)];
+ gSaveBlock2Ptr->frontier.arenaPrize = sShortStreakPrizeItems[Random() % ARRAY_COUNT(sShortStreakPrizeItems)];
}
-static void GiveArenaRewardItem(void)
+static void GiveArenaPrize(void)
{
- if (AddBagItem(gSaveBlock2Ptr->frontier.arenaRewardItem, 1) == TRUE)
+ if (AddBagItem(gSaveBlock2Ptr->frontier.arenaPrize, 1) == TRUE)
{
- CopyItemName(gSaveBlock2Ptr->frontier.arenaRewardItem, gStringVar1);
- gSaveBlock2Ptr->frontier.arenaRewardItem = 0;
+ CopyItemName(gSaveBlock2Ptr->frontier.arenaPrize, gStringVar1);
+ gSaveBlock2Ptr->frontier.arenaPrize = ITEM_NONE;
gSpecialVar_Result = TRUE;
}
else
diff --git a/src/battle_bg.c b/src/battle_bg.c
index a08873857..01d05e68d 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -36,13 +36,13 @@ struct BattleBackground
// .rodata
static const u16 sUnrefArray[] = {0x0300, 0x0000}; //OamData?
-static const struct OamData gUnknown_0831A988 =
+static const struct OamData sVsLetter_V_OamData =
{
.y = 0,
- .affineMode = 3,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -53,13 +53,13 @@ static const struct OamData gUnknown_0831A988 =
.affineParam = 0,
};
-static const struct OamData gUnknown_0831A990 =
+static const struct OamData sVsLetter_S_OamData =
{
.y = 0,
- .affineMode = 3,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -70,13 +70,13 @@ static const struct OamData gUnknown_0831A990 =
.affineParam = 0,
};
-static const union AffineAnimCmd gUnknown_0831A998[] =
+static const union AffineAnimCmd sVsLetterAffineAnimCmds0[] =
{
AFFINEANIMCMD_FRAME(0x0080, 0x0080, 0x00, 0x00),
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd gUnknown_0831A9A8[] =
+static const union AffineAnimCmd sVsLetterAffineAnimCmds1[] =
{
AFFINEANIMCMD_FRAME(0x0080, 0x0080, 0x00, 0x00),
AFFINEANIMCMD_FRAME(0x0018, 0x0018, 0x00, 0x80),
@@ -84,37 +84,39 @@ static const union AffineAnimCmd gUnknown_0831A9A8[] =
AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd * const gUnknown_0831A9C8[] =
+static const union AffineAnimCmd *const sVsLetterAffineAnimTable[] =
{
- gUnknown_0831A998,
- gUnknown_0831A9A8,
+ sVsLetterAffineAnimCmds0,
+ sVsLetterAffineAnimCmds1,
};
-static const struct SpriteTemplate gUnknown_0831A9D0 =
+#define TAG_VS_LETTERS 10000
+
+static const struct SpriteTemplate sVsLetter_V_SpriteTemplate =
{
- .tileTag = 0x2710,
- .paletteTag = 0x2710,
- .oam = &gUnknown_0831A988,
+ .tileTag = TAG_VS_LETTERS,
+ .paletteTag = TAG_VS_LETTERS,
+ .oam = &sVsLetter_V_OamData,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_0831A9C8,
+ .affineAnims = sVsLetterAffineAnimTable,
.callback = nullsub_17
};
-static const struct SpriteTemplate gUnknown_0831A9E8 =
+static const struct SpriteTemplate sVsLetter_S_SpriteTemplate =
{
- .tileTag = 0x2710,
- .paletteTag = 0x2710,
- .oam = &gUnknown_0831A990,
+ .tileTag = TAG_VS_LETTERS,
+ .paletteTag = TAG_VS_LETTERS,
+ .oam = &sVsLetter_S_OamData,
.anims = gDummySpriteAnimTable,
.images = NULL,
- .affineAnims = gUnknown_0831A9C8,
+ .affineAnims = sVsLetterAffineAnimTable,
.callback = nullsub_17
};
-static const struct CompressedSpriteSheet gUnknown_0831AA00 =
+static const struct CompressedSpriteSheet sVsLettersSpriteSheet =
{
- gUnknown_08D77B0C, 0x1000, 0x2710
+ gVsLettersGfx, 0x1000, TAG_VS_LETTERS
};
const struct BgTemplate gBattleBgTemplates[] =
@@ -689,7 +691,6 @@ static const struct BattleBackground gBattleTerrainTable[] =
},
};
-// .text
void BattleInitBgsAndWindows(void)
{
ResetBgsAndClearDma3BusyFlags(0);
@@ -710,7 +711,7 @@ void BattleInitBgsAndWindows(void)
DeactivateAllTextPrinters();
}
-void sub_80356D0(void)
+void InitBattleBgsVideo(void)
{
DisableInterrupts(INTR_FLAG_HBLANK);
EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
@@ -725,10 +726,11 @@ void LoadBattleMenuWindowGfx(void)
{
LoadUserWindowBorderGfx(2, 0x12, 0x10);
LoadUserWindowBorderGfx(2, 0x22, 0x10);
- LoadCompressedPalette(gUnknown_08D85600, 0x50, 0x20);
+ LoadCompressedPalette(gBattleWindowTextPalette, 0x50, 0x20);
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
{
+ // Load graphics for the Battle Arena referee's mid-battle messages.
Menu_LoadStdPalAt(0x70);
LoadMessageBoxGfx(0, 0x30, 0x70);
gPlttBufferUnfaded[0x76] = 0;
@@ -837,86 +839,81 @@ void DrawMainBattleBackground(void)
void LoadBattleTextboxAndBackground(void)
{
- LZDecompressVram(gBattleTextboxTiles, (void*)(VRAM));
+ LZDecompressVram(gBattleTextboxTiles, (void*)(BG_CHAR_ADDR(0)));
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
CopyBgTilemapBufferToVram(0);
LoadCompressedPalette(gBattleTextboxPalette, 0, 0x40);
LoadBattleMenuWindowGfx();
-
DrawMainBattleBackground();
}
-static void sub_8035AE4(u8 taskId, u8 battlerId, u8 bgId, u8 destX, u8 destY)
+static void DrawLinkBattleParticipantPokeballs(u8 taskId, u8 multiplayerId, u8 bgId, u8 destX, u8 destY)
{
s32 i;
- u16 var = 0;
- u16 src[6];
+ u16 pokeballStatuses = 0;
+ u16 tiles[6];
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (gTasks[taskId].data[5] != 0)
{
- switch (battlerId)
+ switch (multiplayerId)
{
case 0:
- var = 0x3F & gTasks[taskId].data[3];
+ pokeballStatuses = 0x3F & gTasks[taskId].data[3];
break;
case 1:
- var = (0xFC0 & gTasks[taskId].data[4]) >> 6;
+ pokeballStatuses = (0xFC0 & gTasks[taskId].data[4]) >> 6;
break;
case 2:
- var = (0xFC0 & gTasks[taskId].data[3]) >> 6;
+ pokeballStatuses = (0xFC0 & gTasks[taskId].data[3]) >> 6;
break;
case 3:
- var = 0x3F & gTasks[taskId].data[4];
+ pokeballStatuses = 0x3F & gTasks[taskId].data[4];
break;
}
}
else
{
- switch (battlerId)
+ switch (multiplayerId)
{
case 0:
- var = 0x3F & gTasks[taskId].data[3];
+ pokeballStatuses = 0x3F & gTasks[taskId].data[3];
break;
case 1:
- var = 0x3F & gTasks[taskId].data[4];
+ pokeballStatuses = 0x3F & gTasks[taskId].data[4];
break;
case 2:
- var = (0xFC0 & gTasks[taskId].data[3]) >> 6;
+ pokeballStatuses = (0xFC0 & gTasks[taskId].data[3]) >> 6;
break;
case 3:
- var = (0xFC0 & gTasks[taskId].data[4]) >> 6;
+ pokeballStatuses = (0xFC0 & gTasks[taskId].data[4]) >> 6;
break;
}
}
for (i = 0; i < 3; i++)
- {
- src[i] = ((var & (3 << (i * 2))) >> (i * 2)) + 0x6001;
- }
+ tiles[i] = ((pokeballStatuses & (3 << (i * 2))) >> (i * 2)) + 0x6001;
- CopyToBgTilemapBufferRect_ChangePalette(bgId, src, destX, destY, 3, 1, 0x11);
+ CopyToBgTilemapBufferRect_ChangePalette(bgId, tiles, destX, destY, 3, 1, 0x11);
CopyBgTilemapBufferToVram(bgId);
}
else
{
- if (battlerId == gBattleScripting.multiplayerId)
- var = gTasks[taskId].data[3];
+ if (multiplayerId == gBattleScripting.multiplayerId)
+ pokeballStatuses = gTasks[taskId].data[3];
else
- var = gTasks[taskId].data[4];
+ pokeballStatuses = gTasks[taskId].data[4];
for (i = 0; i < 6; i++)
- {
- src[i] = ((var & (3 << (i * 2))) >> (i * 2)) + 0x6001;
- }
+ tiles[i] = ((pokeballStatuses & (3 << (i * 2))) >> (i * 2)) + 0x6001;
- CopyToBgTilemapBufferRect_ChangePalette(bgId, src, destX, destY, 6, 1, 0x11);
+ CopyToBgTilemapBufferRect_ChangePalette(bgId, tiles, destX, destY, 6, 1, 0x11);
CopyBgTilemapBufferToVram(bgId);
}
}
-static void sub_8035C4C(void)
+static void DrawLinkBattleVsScreenOutcomeText(void)
{
if (gBattleOutcome == B_OUTCOME_DREW)
{
@@ -997,7 +994,7 @@ static void sub_8035C4C(void)
}
}
-void sub_8035D74(u8 taskId)
+void InitLinkBattleVsScreen(u8 taskId)
{
struct LinkPlayer *linkPlayer;
u8 *name;
@@ -1017,19 +1014,19 @@ void sub_8035D74(u8 taskId)
{
case 0:
BattlePutTextOnWindow(name, 0x11);
- sub_8035AE4(taskId, linkPlayer->id, 1, 2, 4);
+ DrawLinkBattleParticipantPokeballs(taskId, linkPlayer->id, 1, 2, 4);
break;
case 1:
BattlePutTextOnWindow(name, 0x12);
- sub_8035AE4(taskId, linkPlayer->id, 2, 2, 4);
+ DrawLinkBattleParticipantPokeballs(taskId, linkPlayer->id, 2, 2, 4);
break;
case 2:
BattlePutTextOnWindow(name, 0x13);
- sub_8035AE4(taskId, linkPlayer->id, 1, 2, 8);
+ DrawLinkBattleParticipantPokeballs(taskId, linkPlayer->id, 1, 2, 8);
break;
case 3:
BattlePutTextOnWindow(name, 0x14);
- sub_8035AE4(taskId, linkPlayer->id, 2, 2, 8);
+ DrawLinkBattleParticipantPokeballs(taskId, linkPlayer->id, 2, 2, 8);
break;
}
}
@@ -1049,16 +1046,16 @@ void sub_8035D74(u8 taskId)
name = gLinkPlayers[opponentId].name;
BattlePutTextOnWindow(name, 0x10);
- sub_8035AE4(taskId, playerId, 1, 2, 7);
- sub_8035AE4(taskId, opponentId, 2, 2, 7);
+ DrawLinkBattleParticipantPokeballs(taskId, playerId, 1, 2, 7);
+ DrawLinkBattleParticipantPokeballs(taskId, opponentId, 2, 2, 7);
}
gTasks[taskId].data[0]++;
break;
case 1:
- palId = AllocSpritePalette(0x2710);
+ palId = AllocSpritePalette(TAG_VS_LETTERS);
gPlttBufferUnfaded[palId * 16 + 0x10F] = gPlttBufferFaded[palId * 16 + 0x10F] = 0x7FFF;
- gBattleStruct->linkBattleVsSpriteId_V = CreateSprite(&gUnknown_0831A9D0, 111, 80, 0);
- gBattleStruct->linkBattleVsSpriteId_S = CreateSprite(&gUnknown_0831A9E8, 129, 80, 0);
+ gBattleStruct->linkBattleVsSpriteId_V = CreateSprite(&sVsLetter_V_SpriteTemplate, 111, 80, 0);
+ gBattleStruct->linkBattleVsSpriteId_S = CreateSprite(&sVsLetter_S_SpriteTemplate, 129, 80, 0);
gSprites[gBattleStruct->linkBattleVsSpriteId_V].invisible = TRUE;
gSprites[gBattleStruct->linkBattleVsSpriteId_S].invisible = TRUE;
gTasks[taskId].data[0]++;
@@ -1087,7 +1084,7 @@ void sub_8035D74(u8 taskId)
else
{
if (gTasks[taskId].data[5] != 0)
- sub_8035C4C();
+ DrawLinkBattleVsScreenOutcomeText();
PlaySE(SE_W231);
DestroyTask(taskId);
@@ -1110,7 +1107,7 @@ void DrawBattleEntryBackground(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
LZDecompressVram(gUnknown_08D778F0, (void*)(BG_CHAR_ADDR(1)));
- LZDecompressVram(gUnknown_08D77B0C, (void*)(VRAM + 0x10000));
+ LZDecompressVram(gVsLettersGfx, (void*)(VRAM + 0x10000));
LoadCompressedPalette(gUnknown_08D77AE4, 0x60, 0x20);
SetBgAttribute(1, BG_ATTR_SCREENSIZE, 1);
SetGpuReg(REG_OFFSET_BG1CNT, 0x5C04);
@@ -1122,7 +1119,7 @@ void DrawBattleEntryBackground(void)
SetGpuReg(REG_OFFSET_WINOUT, 0x36);
gBattle_BG1_Y = 0xFF5C;
gBattle_BG2_Y = 0xFF5C;
- LoadCompressedSpriteSheetUsingHeap(&gUnknown_0831AA00);
+ LoadCompressedSpriteSheetUsingHeap(&sVsLettersSpriteSheet);
}
else if (gBattleTypeFlags & (BATTLE_TYPE_FRONTIER | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000 | BATTLE_TYPE_EREADER_TRAINER))
{
@@ -1195,7 +1192,7 @@ bool8 LoadChosenBattleElement(u8 caseId)
switch (caseId)
{
case 0:
- LZDecompressVram(gBattleTextboxTiles, (void*)(VRAM));
+ LZDecompressVram(gBattleTextboxTiles, (void*)(BG_CHAR_ADDR(0)));
break;
case 1:
CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0);
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index d3842e416..6604fa142 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -1429,7 +1429,7 @@ static void LinkOpponentDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
- sub_805EB9C(0);
+ sub_805EB9C(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1438,7 +1438,7 @@ static void LinkOpponentDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_805EB9C(1);
+ sub_805EB9C(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -1846,7 +1846,7 @@ static void LinkOpponentHandleCmd55(void)
else
gBattleOutcome = gBattleBufferA[gActiveBattler][1] ^ B_OUTCOME_DREW;
- gSaveBlock2Ptr->frontier.field_CA9_b = gBattleBufferA[gActiveBattler][2];
+ gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
LinkOpponentBufferExecCompleted();
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 1c92aaaad..ece4c24bc 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -1253,7 +1253,7 @@ static void LinkPartnerDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
- sub_805EB9C(0);
+ sub_805EB9C(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1262,7 +1262,7 @@ static void LinkPartnerDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_805EB9C(1);
+ sub_805EB9C(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -1676,7 +1676,7 @@ static void LinkPartnerHandleCmd55(void)
{
sub_81851A8(&gBattleBufferA[gActiveBattler][4]);
gBattleOutcome = gBattleBufferA[gActiveBattler][1];
- gSaveBlock2Ptr->frontier.field_CA9_b = gBattleBufferA[gActiveBattler][2];
+ gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
LinkPartnerBufferExecCompleted();
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index e096536c9..daf2c260e 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -1465,7 +1465,7 @@ static void OpponentDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
- sub_805EB9C(0);
+ sub_805EB9C(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1474,7 +1474,7 @@ static void OpponentDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_805EB9C(1);
+ sub_805EB9C(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index b73bfc36f..7fe1ed24a 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"
@@ -664,7 +665,7 @@ u32 sub_8057FBC(void) // unused
static void HandleMoveSwitching(void)
{
- u8 perMovePPBonuses[4];
+ u8 perMovePPBonuses[MAX_MON_MOVES];
struct ChooseMoveStruct moveStruct;
u8 totalPPBonuses;
@@ -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);
}
@@ -2312,7 +2313,7 @@ static void PlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y = 48;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = 0;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1;
}
// Use the back pic in any other scenario.
@@ -2484,7 +2485,7 @@ static void PlayerDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
- sub_805EB9C(0);
+ sub_805EB9C(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -2493,7 +2494,7 @@ static void PlayerDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_805EB9C(1);
+ sub_805EB9C(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
@@ -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
@@ -2675,8 +2676,9 @@ static void PlayerHandleHealthBarUpdate(void)
LoadBattleBarGfx(0);
hpVal = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8);
+ // gPlayerPartyLostHP used by Battle Dome, but never read
if (hpVal > 0)
- gUnknown_0203CD70 += hpVal;
+ gPlayerPartyLostHP += hpVal;
if (hpVal != INSTANT_HP_BAR_DROP)
{
@@ -3092,7 +3094,7 @@ static void PlayerHandleCmd55(void)
{
sub_81851A8(&gBattleBufferA[gActiveBattler][4]);
gBattleOutcome = gBattleBufferA[gActiveBattler][1];
- gSaveBlock2Ptr->frontier.field_CA9_b = gBattleBufferA[gActiveBattler][2];
+ gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleBufferA[gActiveBattler][2];
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
PlayerBufferExecCompleted();
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index e625f24de..21c1fdd5b 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -1334,7 +1334,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y = 48;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = 0;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1;
}
@@ -1444,7 +1444,7 @@ static void PlayerPartnerDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
- sub_805EB9C(0);
+ sub_805EB9C(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1453,7 +1453,7 @@ static void PlayerPartnerDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_805EB9C(1);
+ sub_805EB9C(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index b21d8288c..7c1bff64a 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -1355,7 +1355,7 @@ static void RecordedOpponentDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
- sub_805EB9C(0);
+ sub_805EB9C(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1364,7 +1364,7 @@ static void RecordedOpponentDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_805EB9C(1);
+ sub_805EB9C(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index b59a4f25d..5f3b3ea65 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -1238,7 +1238,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y = 48;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = 0;
+ gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gBattlerSpriteIds[gActiveBattler]].hFlip = 1;
}
else
@@ -1359,7 +1359,7 @@ static void RecordedPlayerDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
- sub_805EB9C(0);
+ sub_805EB9C(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1368,7 +1368,7 @@ static void RecordedPlayerDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_805EB9C(1);
+ sub_805EB9C(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index f7035540b..a5b1ae2f7 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -1134,7 +1134,7 @@ static void WallyDoMoveAnimation(void)
case 1:
if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive)
{
- sub_805EB9C(0);
+ sub_805EB9C(ST_OAM_AFFINE_OFF);
DoMoveAnim(move);
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2;
}
@@ -1143,7 +1143,7 @@ static void WallyDoMoveAnimation(void)
gAnimScriptCallback();
if (!gAnimScriptActive)
{
- sub_805EB9C(1);
+ sub_805EB9C(ST_OAM_AFFINE_NORMAL);
if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute)
{
InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE);
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index 17db0b868..b411c12f6 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);
}
@@ -1509,8 +1509,8 @@ void BtlController_EmitCmd55(u8 bufferId, u8 battleOutcome)
{
sBattleBuffersTransferData[0] = CONTROLLER_55;
sBattleBuffersTransferData[1] = battleOutcome;
- sBattleBuffersTransferData[2] = gSaveBlock2Ptr->frontier.field_CA9_b;
- sBattleBuffersTransferData[3] = gSaveBlock2Ptr->frontier.field_CA9_b;
+ sBattleBuffersTransferData[2] = gSaveBlock2Ptr->frontier.disableRecordBattle;
+ sBattleBuffersTransferData[3] = gSaveBlock2Ptr->frontier.disableRecordBattle;
sBattleBuffersTransferData[5] = sBattleBuffersTransferData[4] = sub_81850DC(&sBattleBuffersTransferData[6]);
PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sBattleBuffersTransferData[4] + 6);
}
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 1c116467d..746d195d9 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "battle_dome.h"
#include "battle.h"
+#include "battle_main.h"
#include "battle_setup.h"
#include "battle_tower.h"
#include "frontier_util.h"
@@ -8,7 +9,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"
@@ -30,69 +31,84 @@
#include "scanline_effect.h"
#include "script_pokemon_util_80F87D8.h"
#include "graphics.h"
+#include "constants/battle_dome.h"
+#include "constants/frontier_util.h"
#include "constants/species.h"
#include "constants/moves.h"
+#include "constants/pokemon.h"
#include "constants/trainers.h"
#include "constants/abilities.h"
#include "constants/songs.h"
#include "constants/battle_frontier.h"
#include "constants/rgb.h"
-#define DOME_ROUND1 0
-#define DOME_ROUND2 1
-#define DOME_QUARTERFINAL 1 // Different name for the same round.
-#define DOME_SEMIFINAL 2
-#define DOME_FINAL 3
-#define DOME_ROUNDS_COUNT 4
+// Enough space to hold 2 match info cards worth of trainers and their parties
+#define NUM_INFOCARD_SPRITES ((FRONTIER_PARTY_SIZE + 1) * 4)
+#define NUM_INFOCARD_TRAINERS 2
-struct BattleDomeStruct
+// An 'Info Card' is a trainer or match information page that can be viewed on the Tourney Tree
+struct TourneyTreeInfoCard
{
- u8 arr[DOME_TOURNAMENT_TRAINERS_COUNT];
- u8 unk_10;
- u8 unk_11[3];
+ u8 spriteIds[NUM_INFOCARD_SPRITES];
+ u8 pos;
+ u8 tournamentIds[NUM_INFOCARD_TRAINERS];
};
-struct UnkStruct_860DD10
+struct TourneyTreeLineSection
{
u8 x;
u8 y;
u16 src;
};
+#define DOME_TRAINERS gSaveBlock2Ptr->frontier.domeTrainers
+#define DOME_MONS gSaveBlock2Ptr->frontier.domeMonIds
+
+#define tState data[0]
+
+// Task data for Task_ShowTourneyTree
+#define tNotInteractive data[1]
+#define tIsPrevTourneyTree data[4]
+
+// Task data for Task_ShowTourneyInfoCard
+#define tTournamentId data[1]
+#define tMode data[2]
+#define tPrevTaskId data[3]
+
// This file's functions.
static u8 GetDomeTrainerMonIvs(u16 trainerId);
static void SwapDomeTrainers(int id1, int id2, u16 *statsArray);
static void CalcDomeMonStats(u16 species, int level, int ivs, u8 evBits, u8 nature, int *stats);
static void CreateDomeOpponentMons(u16 tournamentTrainerId);
-static int sub_818FCBC(u16 tournamentTrainerId, bool8 arg1);
-static int sub_818FDB8(u16 tournamentTrainerId, bool8 arg1);
+static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 arg1);
+static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 arg1);
static int GetTypeEffectivenessPoints(int move, int species, int arg2);
-static int sub_818FEB4(int *arr, bool8 arg1);
-static void Task_ShowOpponentInfo(u8 taskId);
-static void sub_8190CD4(u8 taskId);
-static u8 sub_819221C(u8 taskId);
-static void InitDomeFacilityTrainersAndMons(void);
+static int SelectOpponentMonsFromParty(int *arr, bool8 arg1);
+static void Task_ShowTourneyInfoCard(u8 taskId);
+static void Task_HandleInfoCardInput(u8 taskId);
+static u8 Task_GetInfoCardInput(u8 taskId);
+static void SetFacilityTrainerAndMonPtrs(void);
static int TrainerIdToTournamentId(u16 trainerId);
static u16 TrainerIdOfPlayerOpponent(void);
static void Task_ShowTourneyTree(u8 taskId);
-static void sub_8194950(u8 taskId);
-static void CB2_BattleDome(void);
-static void VblankCb0_BattleDome(void);
+static void Task_HandleStaticTourneyTreeInput(u8 taskId);
+static void CB2_TourneyTree(void);
+static void VblankCb_TourneyInfoCard(void);
static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo);
-static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId);
-static int sub_8192F08(u8, u8*);
+static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId);
+static int BufferDomeWinString(u8, u8*);
static u8 GetDomeBrainTrainerPicId(void);
static u8 GetDomeBrainTrainerClass(void);
static void CopyDomeBrainTrainerName(u8 *str);
static void CopyDomeTrainerName(u8 *str, u16 trainerId);
-static void HblankCb_BattleDome(void);
-static void VblankCb1_BattleDome(void);
+static void HblankCb_TourneyTree(void);
+static void VblankCb_TourneyTree(void);
static u8 UpdateTourneyTreeCursor(u8 taskId);
static void DecideRoundWinners(u8 roundId);
static u8 sub_81953E8(u8 tournamentId, u8);
-static void sub_81948EC(u8, u8);
-static void sub_8190B40(struct Sprite *sprite);
-static void sub_8190C6C(struct Sprite *sprite);
+static void DrawTourneyAdvancementLine(u8, u8);
+static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite);
+static void SpriteCb_VerticalScrollArrow(struct Sprite *sprite);
static void InitDomeChallenge(void);
static void GetDomeData(void);
static void SetDomeData(void);
@@ -101,420 +117,424 @@ static void BufferDomeOpponentName(void);
static void InitDomeOpponentParty(void);
static void ShowDomeOpponentInfo(void);
static void ShowDomeTourneyTree(void);
-static void ShowPreviousDomeResultsTourneyTree(void);
+static void ShowPreviousDomeTourneyTree(void);
static void SetDomeOpponentId(void);
static void SetDomeOpponentGraphicsId(void);
static void ShowNonInteractiveDomeTourneyTree(void);
static void ResolveDomeRoundWinners(void);
-static void sub_81902F8(void);
-static void UpdateDomeStreaks(void);
-static void RestoreDomePlayerParty(void);
+static void SaveDomeChallenge(void);
+static void IncrementDomeStreaks(void);
+static void ResetSketchedMoves(void);
static void RestoreDomePlayerPartyHeldItems(void);
-static void ReduceDomePlayerPartyTo3Mons(void);
+static void ReduceDomePlayerPartyToSelectedMons(void);
static void GetPlayerSeededBeforeOpponent(void);
static void BufferLastDomeWinnerName(void);
-static void sub_8194F58(void);
+static void InitRandomTourneyTreeResults(void);
static void InitDomeTrainers(void);
// EWRAM variables.
-EWRAM_DATA u32 gUnknown_0203CD70 = 0;
-static EWRAM_DATA u32 gUnknown_0203CD74 = 0;
-static EWRAM_DATA struct BattleDomeStruct *sBattleDomeStruct = {0};
+EWRAM_DATA u32 gPlayerPartyLostHP = 0; // never read
+static EWRAM_DATA u32 sPlayerPartyMaxHP = 0; // never read
+static EWRAM_DATA struct TourneyTreeInfoCard *sInfoCard = {0};
static EWRAM_DATA u8 *sTilemapBuffer = NULL;
-// Const rom data.
-static const u8 sMovePointsForDomeTrainers[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS_COUNT] =
-{
- [MOVE_NONE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_POUND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_KARATE_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_DOUBLE_SLAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_COMET_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_MEGA_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_PAY_DAY] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_FIRE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_ICE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_THUNDER_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SCRATCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_VICE_GRIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_GUILLOTINE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_RAZOR_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SWORDS_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0},
- [MOVE_CUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_GUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_WING_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_WHIRLWIND] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FLY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BIND] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_VINE_WHIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_STOMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_DOUBLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_MEGA_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ROLLING_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_SAND_ATTACK] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_HEADBUTT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_HORN_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FURY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_HORN_DRILL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BODY_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_WRAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_TAKE_DOWN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_THRASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_DOUBLE_EDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_TAIL_WHIP] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_POISON_STING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_TWINEEDLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_PIN_MISSILE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_LEER] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_BITE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_GROWL] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_ROAR] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SING] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SUPERSONIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SONIC_BOOM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_DISABLE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ACID] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_EMBER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_FLAMETHROWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
- [MOVE_MIST] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_WATER_GUN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_HYDRO_PUMP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0},
- [MOVE_SURF] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0},
- [MOVE_ICE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
- [MOVE_BLIZZARD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1},
- [MOVE_PSYBEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_BUBBLE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_AURORA_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_HYPER_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0},
- [MOVE_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_DRILL_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SUBMISSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_LOW_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_COUNTER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0},
- [MOVE_SEISMIC_TOSS] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_STRENGTH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_ABSORB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_MEGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_LEECH_SEED] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_GROWTH] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_RAZOR_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SOLAR_BEAM] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0},
- [MOVE_POISON_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_STUN_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SLEEP_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_PETAL_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_STRING_SHOT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_DRAGON_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FIRE_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_THUNDER_SHOCK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_THUNDERBOLT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
- [MOVE_THUNDER_WAVE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_THUNDER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1},
- [MOVE_ROCK_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_EARTHQUAKE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0},
- [MOVE_FISSURE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0},
- [MOVE_DIG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_TOXIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_CONFUSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_PSYCHIC] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
- [MOVE_HYPNOSIS] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_MEDITATE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_AGILITY] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_QUICK_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_TELEPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_NIGHT_SHADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_MIMIC] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SCREECH] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_DOUBLE_TEAM] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_RECOVER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_HARDEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_MINIMIZE] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SMOKESCREEN] = {0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_CONFUSE_RAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_WITHDRAW] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_DEFENSE_CURL] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BARRIER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_LIGHT_SCREEN] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_HAZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_REFLECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_FOCUS_ENERGY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BIDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_METRONOME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
- [MOVE_MIRROR_MOVE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
- [MOVE_SELF_DESTRUCT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0},
- [MOVE_EGG_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0},
- [MOVE_LICK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SMOG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_SLUDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_BONE_CLUB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_FIRE_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1},
- [MOVE_WATERFALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_CLAMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_SWIFT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SKULL_BASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0},
- [MOVE_SPIKE_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_CONSTRICT] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_AMNESIA] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_KINESIS] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SOFT_BOILED] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_HI_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_GLARE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_DREAM_EATER] = {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0},
- [MOVE_POISON_GAS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BARRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_LEECH_LIFE] = {0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_LOVELY_KISS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SKY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1},
- [MOVE_TRANSFORM] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BUBBLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_DIZZY_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FLASH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_PSYWAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SPLASH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ACID_ARMOR] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_CRABHAMMER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
- [MOVE_EXPLOSION] = {0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0},
- [MOVE_FURY_SWIPES] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BONEMERANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_REST] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ROCK_SLIDE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_HYPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_SHARPEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_CONVERSION] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_TRI_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SUPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SLASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SUBSTITUTE] = {0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_STRUGGLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_SKETCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0},
- [MOVE_TRIPLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_THIEF] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SPIDER_WEB] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_MIND_READER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_NIGHTMARE] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FLAME_WHEEL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SNORE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_CURSE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_FLAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_CONVERSION_2] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_AEROBLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
- [MOVE_COTTON_SPORE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_REVERSAL] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SPITE] = {0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_POWDER_SNOW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_PROTECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0},
- [MOVE_MACH_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SCARY_FACE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_FAINT_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SWEET_KISS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BELLY_DRUM] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SLUDGE_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1},
- [MOVE_MUD_SLAP] = {0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_OCTAZOOKA] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_SPIKES] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ZAP_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1},
- [MOVE_FORESIGHT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_DESTINY_BOND] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_PERISH_SONG] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_ICY_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_DETECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_BONE_RUSH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_LOCK_ON] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_OUTRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1},
- [MOVE_SANDSTORM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_GIGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_ENDURE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_CHARM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_ROLLOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_FALSE_SWIPE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SWAGGER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_MILK_DRINK] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SPARK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_FURY_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_STEEL_WING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_MEAN_LOOK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_ATTRACT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SLEEP_TALK] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0},
- [MOVE_HEAL_BELL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_RETURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_PRESENT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0},
- [MOVE_FRUSTRATION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SAFEGUARD] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_PAIN_SPLIT] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SACRED_FIRE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1},
- [MOVE_MAGNITUDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_DYNAMIC_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1},
- [MOVE_MEGAHORN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},
- [MOVE_DRAGON_BREATH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_BATON_PASS] = {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ENCORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_PURSUIT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_RAPID_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SWEET_SCENT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_IRON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1},
- [MOVE_METAL_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_VITAL_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_MORNING_SUN] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_SYNTHESIS] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_MOONLIGHT] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_HIDDEN_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_CROSS_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0},
- [MOVE_TWISTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_RAIN_DANCE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_SUNNY_DAY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_CRUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_MIRROR_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_PSYCH_UP] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_EXTREME_SPEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_ANCIENT_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1},
- [MOVE_SHADOW_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_FUTURE_SIGHT] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ROCK_SMASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_WHIRLPOOL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_BEAT_UP] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FAKE_OUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_UPROAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_STOCKPILE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SPIT_UP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0},
- [MOVE_SWALLOW] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_HEAT_WAVE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1},
- [MOVE_HAIL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_TORMENT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FLATTER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_WILL_O_WISP] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_MEMENTO] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FACADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FOCUS_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0},
- [MOVE_SMELLING_SALT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FOLLOW_ME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_NATURE_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_CHARGE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_TAUNT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_HELPING_HAND] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_TRICK] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_ROLE_PLAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_WISH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_ASSIST] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0},
- [MOVE_INGRAIN] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_SUPERPOWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0},
- [MOVE_MAGIC_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0},
- [MOVE_RECYCLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_REVENGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0},
- [MOVE_BRICK_BREAK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_YAWN] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_KNOCK_OFF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_ENDEAVOR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_ERUPTION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0},
- [MOVE_SKILL_SWAP] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_IMPRISON] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0},
- [MOVE_REFRESH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_GRUDGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_SNATCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0},
- [MOVE_SECRET_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_DIVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_ARM_THRUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_CAMOUFLAGE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_TAIL_GLOW] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_LUSTER_PURGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1},
- [MOVE_MIST_BALL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1},
- [MOVE_FEATHER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_TEETER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_BLAZE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_MUD_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_ICE_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_NEEDLE_ARM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SLACK_OFF] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_HYPER_VOICE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0},
- [MOVE_POISON_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_CRUSH_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_BLAST_BURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
- [MOVE_HYDRO_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
- [MOVE_METEOR_MASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1},
- [MOVE_ASTONISH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_WEATHER_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_AROMATHERAPY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},
- [MOVE_FAKE_TEARS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_AIR_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_OVERHEAT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1},
- [MOVE_ODOR_SLEUTH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_ROCK_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_SILVER_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1},
- [MOVE_METAL_SOUND] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_GRASS_WHISTLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_TICKLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_COSMIC_POWER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_WATER_SPOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0},
- [MOVE_SIGNAL_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SHADOW_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_EXTRASENSORY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_SKY_UPPERCUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SAND_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_SHEER_COLD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0},
- [MOVE_MUDDY_WATER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1},
- [MOVE_BULLET_SEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_AERIAL_ACE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ICICLE_SPEAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_IRON_DEFENSE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BLOCK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0},
- [MOVE_HOWL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_DRAGON_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_FRENZY_PLANT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
- [MOVE_BULK_UP] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_BOUNCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1},
- [MOVE_MUD_SHOT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1},
- [MOVE_POISON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_COVET] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_VOLT_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0},
- [MOVE_MAGICAL_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_WATER_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_CALM_MIND] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_LEAF_BLADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0},
- [MOVE_DRAGON_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_ROCK_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_SHOCK_WAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0},
- [MOVE_WATER_PULSE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1},
- [MOVE_DOOM_DESIRE] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
- [MOVE_PSYCHO_BOOST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1},
+// Each move has an array of points for different move characteristics which contribute to a tourney trainers listed battle style (see sBattleStyleThresholds)
+// All move points are either 1 or 0, so theyre essentially flags saying whether or not the move has that characteristic
+static const u8 sBattleStyleMovePoints[MOVES_COUNT][NUM_MOVE_POINT_TYPES] =
+{
+ [MOVE_NONE] = {0},
+ [MOVE_POUND] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_KARATE_CHOP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_DOUBLE_SLAP] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_COMET_PUNCH] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_MEGA_PUNCH] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_PAY_DAY] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_FIRE_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_ICE_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_THUNDER_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SCRATCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_VICE_GRIP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_GUILLOTINE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_RAZOR_WIND] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SWORDS_DANCE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_POPULAR] = 1},
+ [MOVE_CUT] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_GUST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_WING_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_WHIRLWIND] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FLY] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_BIND] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SLAM] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_VINE_WHIP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_STOMP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_DOUBLE_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_MEGA_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_JUMP_KICK] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_ROLLING_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SAND_ATTACK] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_HEADBUTT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_HORN_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FURY_ATTACK] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_HORN_DRILL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_TACKLE] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_BODY_SLAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_WRAP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_TAKE_DOWN] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_THRASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_DOUBLE_EDGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_TAIL_WHIP] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_POISON_STING] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_TWINEEDLE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_PIN_MISSILE] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_LEER] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_BITE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_GROWL] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_ROAR] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SING] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_SUPERSONIC] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_SONIC_BOOM] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_DISABLE] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_ACID] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_EMBER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_FLAMETHROWER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MIST] = {0},
+ [MOVE_WATER_GUN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_HYDRO_PUMP] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_SURF] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_ICE_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_BLIZZARD] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_PSYBEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_BUBBLE_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_AURORA_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_HYPER_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_PECK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_DRILL_PECK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SUBMISSION] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_LOW_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_COUNTER] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_SEISMIC_TOSS] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_STRENGTH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_ABSORB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_MEGA_DRAIN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_LEECH_SEED] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STATUS] = 1},
+ [MOVE_GROWTH] = {[MOVE_POINTS_STAT_RAISE] = 1},
+ [MOVE_RAZOR_LEAF] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_SOLAR_BEAM] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_POISON_POWDER] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_STUN_SPORE] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_SLEEP_POWDER] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_PETAL_DANCE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_STRING_SHOT] = {[MOVE_POINTS_STAT_LOWER] = 1},
+ [MOVE_DRAGON_RAGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FIRE_SPIN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_THUNDER_SHOCK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_THUNDERBOLT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_THUNDER_WAVE] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_THUNDER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_ROCK_THROW] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_EARTHQUAKE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_FISSURE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_DIG] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_TOXIC] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_CONFUSION] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_PSYCHIC] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_HYPNOSIS] = {[MOVE_POINTS_COMBO] = 1},
+ [MOVE_MEDITATE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1},
+ [MOVE_AGILITY] = {[MOVE_POINTS_STAT_RAISE] = 1},
+ [MOVE_QUICK_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_RAGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_TELEPORT] = {0},
+ [MOVE_NIGHT_SHADE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_MIMIC] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SCREECH] = {[MOVE_POINTS_STAT_LOWER] = 1},
+ [MOVE_DOUBLE_TEAM] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_RECOVER] = {0},
+ [MOVE_HARDEN] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_MINIMIZE] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_SMOKESCREEN] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_CONFUSE_RAY] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_WITHDRAW] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_DEFENSE_CURL] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_BARRIER] = {[MOVE_POINTS_DEF] = 1},
+ [MOVE_LIGHT_SCREEN] = {[MOVE_POINTS_DEF] = 1},
+ [MOVE_HAZE] = {0},
+ [MOVE_REFLECT] = {[MOVE_POINTS_DEF] = 1},
+ [MOVE_FOCUS_ENERGY] = {[MOVE_POINTS_COMBO] = 1},
+ [MOVE_BIDE] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_METRONOME] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_MIRROR_MOVE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_SELF_DESTRUCT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_EGG_BOMB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_LICK] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SMOG] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SLUDGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_BONE_CLUB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_FIRE_BLAST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_WATERFALL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_CLAMP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SWIFT] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_SKULL_BASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_SPIKE_CANNON] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_CONSTRICT] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_AMNESIA] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_KINESIS] = {[MOVE_POINTS_STAT_LOWER] = 1},
+ [MOVE_SOFT_BOILED] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_HI_JUMP_KICK] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_GLARE] = {[MOVE_POINTS_STAT_LOWER] = 1},
+ [MOVE_DREAM_EATER] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_RARE] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_POISON_GAS] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_BARRAGE] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_LEECH_LIFE] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_LOVELY_KISS] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_SKY_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_TRANSFORM] = {[MOVE_POINTS_RARE] = 1},
+ [MOVE_BUBBLE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_DIZZY_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SPORE] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FLASH] = {0},
+ [MOVE_PSYWAVE] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_SPLASH] = {[MOVE_POINTS_RARE] = 1},
+ [MOVE_ACID_ARMOR] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_CRABHAMMER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_EXPLOSION] = {[MOVE_POINTS_RISKY] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_FURY_SWIPES] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_BONEMERANG] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_REST] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1},
+ [MOVE_ROCK_SLIDE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_HYPER_FANG] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SHARPEN] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_CONVERSION] = {[MOVE_POINTS_DEF] = 1},
+ [MOVE_TRI_ATTACK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SUPER_FANG] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_SLASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SUBSTITUTE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DEF] = 1},
+ [MOVE_STRUGGLE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1}, // Odd that this is assigned qualities
+ [MOVE_SKETCH] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_TRIPLE_KICK] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_THIEF] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SPIDER_WEB] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_MIND_READER] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_NIGHTMARE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FLAME_WHEEL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SNORE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_CURSE] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_FLAIL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_CONVERSION_2] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_AEROBLAST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_COTTON_SPORE] = {[MOVE_POINTS_STAT_LOWER] = 1},
+ [MOVE_REVERSAL] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SPITE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_RISKY] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_POWDER_SNOW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_PROTECT] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_POPULAR] = 1},
+ [MOVE_MACH_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SCARY_FACE] = {0},
+ [MOVE_FAINT_ATTACK] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_SWEET_KISS] = {0},
+ [MOVE_BELLY_DRUM] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1},
+ [MOVE_SLUDGE_BOMB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MUD_SLAP] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_OCTAZOOKA] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SPIKES] = {[MOVE_POINTS_COMBO] = 1},
+ [MOVE_ZAP_CANNON] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_FORESIGHT] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_DESTINY_BOND] = {[MOVE_POINTS_RISKY] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_PERISH_SONG] = {[MOVE_POINTS_RISKY] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_ICY_WIND] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_DETECT] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_BONE_RUSH] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_LOCK_ON] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_OUTRAGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SANDSTORM] = {0},
+ [MOVE_GIGA_DRAIN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_ENDURE] = {[MOVE_POINTS_DEF] = 1},
+ [MOVE_CHARM] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_ROLLOUT] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_FALSE_SWIPE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SWAGGER] = {[MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MILK_DRINK] = {[MOVE_POINTS_HEAL] = 1},
+ [MOVE_SPARK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_FURY_CUTTER] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_STEEL_WING] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MEAN_LOOK] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_ATTRACT] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SLEEP_TALK] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_HEAL_BELL] = {[MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_RETURN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_PRESENT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_FRUSTRATION] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SAFEGUARD] = {[MOVE_POINTS_DEF] = 1},
+ [MOVE_PAIN_SPLIT] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SACRED_FIRE] = {[MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MAGNITUDE] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_DYNAMIC_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MEGAHORN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_DRAGON_BREATH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_BATON_PASS] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_RARE] = 1},
+ [MOVE_ENCORE] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_PURSUIT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_RAPID_SPIN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SWEET_SCENT] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_IRON_TAIL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_METAL_CLAW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_VITAL_THROW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_MORNING_SUN] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_SYNTHESIS] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_MOONLIGHT] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_HIDDEN_POWER] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_CROSS_CHOP] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_TWISTER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_RAIN_DANCE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_SUNNY_DAY] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_CRUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MIRROR_COAT] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_PSYCH_UP] = {[MOVE_POINTS_STAT_RAISE] = 1},
+ [MOVE_EXTREME_SPEED] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_ANCIENT_POWER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SHADOW_BALL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_FUTURE_SIGHT] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1},
+ [MOVE_ROCK_SMASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_WHIRLPOOL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_BEAT_UP] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FAKE_OUT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_UPROAR] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_STOCKPILE] = {[MOVE_POINTS_COMBO] = 1},
+ [MOVE_SPIT_UP] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_SWALLOW] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1},
+ [MOVE_HEAT_WAVE] = {[MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_HAIL] = {0},
+ [MOVE_TORMENT] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FLATTER] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_WILL_O_WISP] = {[MOVE_POINTS_STATUS] = 1},
+ [MOVE_MEMENTO] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FACADE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FOCUS_PUNCH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_SMELLING_SALT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FOLLOW_ME] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_NATURE_POWER] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_CHARGE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_TAUNT] = {[MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_HELPING_HAND] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_TRICK] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_ROLE_PLAY] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_WISH] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_ASSIST] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_INGRAIN] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_SUPERPOWER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_MAGIC_COAT] = {[MOVE_POINTS_DEF] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_RECYCLE] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_REVENGE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_BRICK_BREAK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_YAWN] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_KNOCK_OFF] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_ENDEAVOR] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_ERUPTION] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_SKILL_SWAP] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_IMPRISON] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_REFRESH] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_GRUDGE] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_SNATCH] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LUCK] = 1},
+ [MOVE_SECRET_POWER] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_DIVE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_ARM_THRUST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_CAMOUFLAGE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_TAIL_GLOW] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_LUSTER_PURGE] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MIST_BALL] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_FEATHER_DANCE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_TEETER_DANCE] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_BLAZE_KICK] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MUD_SPORT] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_ICE_BALL] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_NEEDLE_ARM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SLACK_OFF] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_HYPER_VOICE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_POISON_FANG] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_CRUSH_CLAW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_BLAST_BURN] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_HYDRO_CANNON] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_METEOR_MASH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_ASTONISH] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_WEATHER_BALL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_AROMATHERAPY] = {[MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_FAKE_TEARS] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_AIR_CUTTER] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_OVERHEAT] = {[MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_ODOR_SLEUTH] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_ROCK_TOMB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SILVER_WIND] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_METAL_SOUND] = {0},
+ [MOVE_GRASS_WHISTLE] = {0},
+ [MOVE_TICKLE] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_COSMIC_POWER] = {0},
+ [MOVE_WATER_SPOUT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_SIGNAL_BEAM] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SHADOW_PUNCH] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_EXTRASENSORY] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SKY_UPPERCUT] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_SAND_TOMB] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_SHEER_COLD] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LUCK] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_MUDDY_WATER] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_BULLET_SEED] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_AERIAL_ACE] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_ICICLE_SPEAR] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_IRON_DEFENSE] = {[MOVE_POINTS_DEF] = 1},
+ [MOVE_BLOCK] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_HOWL] = {0},
+ [MOVE_DRAGON_CLAW] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_FRENZY_PLANT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_BULK_UP] = {[MOVE_POINTS_COMBO] = 1},
+ [MOVE_BOUNCE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_MUD_SHOT] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_POISON_TAIL] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_COVET] = {[MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_VOLT_TACKLE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1},
+ [MOVE_MAGICAL_LEAF] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_WATER_SPORT] = {[MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_CALM_MIND] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1},
+ [MOVE_LEAF_BLADE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1},
+ [MOVE_DRAGON_DANCE] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1},
+ [MOVE_ROCK_BLAST] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_SHOCK_WAVE] = {[MOVE_POINTS_DMG] = 1},
+ [MOVE_WATER_PULSE] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_ACCURATE] = 1, [MOVE_POINTS_EFFECT] = 1},
+ [MOVE_DOOM_DESIRE] = {[MOVE_POINTS_RARE] = 1, [MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1},
+ [MOVE_PSYCHO_BOOST] = {[MOVE_POINTS_DMG] = 1, [MOVE_POINTS_POWERFUL] = 1, [MOVE_POINTS_STRONG] = 1, [MOVE_POINTS_LOW_PP] = 1, [MOVE_POINTS_EFFECT] = 1},
};
-static const u8 gUnknown_0860C988[][DOME_TOURNAMENT_TRAINERS_COUNT] =
-{
- {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0},
- {1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0},
- {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0},
- {0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0},
- {0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0},
- {2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+// This array is searched in-order to determine what battle style a tourney trainer uses.
+// If the sum of the points for the party's moves meets/exceeds all the point totals of an element, then they use that battle style
+static const u8 sBattleStyleThresholds[NUM_BATTLE_STYLES - 1][NUM_MOVE_POINT_TYPES] =
+{
+ [DOME_BATTLE_STYLE_RISKY] = {[MOVE_POINTS_RISKY] = 1},
+ [DOME_BATTLE_STYLE_STALL] = {[MOVE_POINTS_HEAL] = 2, [MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_DEF] = 2},
+ [DOME_BATTLE_STYLE_VARIED] = {[MOVE_POINTS_COMBO] = 1, [MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_STATUS] = 1, [MOVE_POINTS_DEF] = 1},
+ [DOME_BATTLE_STYLE_COMBO_HIGH] = {[MOVE_POINTS_COMBO] = 3},
+ [DOME_BATTLE_STYLE_RARE_MOVES] = {[MOVE_POINTS_RARE] = 2},
+ [DOME_BATTLE_STYLE_RARE_MOVE] = {[MOVE_POINTS_RARE] = 1},
+ [DOME_BATTLE_STYLE_HP] = {[MOVE_POINTS_HEAL] = 3},
+ [DOME_BATTLE_STYLE_STORE_POWER] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_HEAL] = 1},
+ [DOME_BATTLE_STYLE_ENFEEBLE_LOW] = {[MOVE_POINTS_STAT_LOWER] = 1, [MOVE_POINTS_STATUS] = 1},
+ [DOME_BATTLE_STYLE_LUCK] = {[MOVE_POINTS_LUCK] = 2},
+ [DOME_BATTLE_STYLE_REGAL] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_DEF] = 1, [MOVE_POINTS_POPULAR] = 1, [MOVE_POINTS_STRONG] = 1},
+ [DOME_BATTLE_STYLE_LOW_PP] = {[MOVE_POINTS_LOW_PP] = 3},
+ [DOME_BATTLE_STYLE_STATUS_ATK] = {[MOVE_POINTS_STAT_RAISE] = 1, [MOVE_POINTS_STATUS] = 1},
+ [DOME_BATTLE_STYLE_ENDURE] = {[MOVE_POINTS_HEAL] = 2, [MOVE_POINTS_DEF] = 2},
+ [DOME_BATTLE_STYLE_STATUS] = {[MOVE_POINTS_STATUS] = 2},
+ [DOME_BATTLE_STYLE_STRAIGHTFORWARD] = {[MOVE_POINTS_ACCURATE] = 3, [MOVE_POINTS_STRONG] = 3},
+ [DOME_BATTLE_STYLE_AGGRESSIVE] = {[MOVE_POINTS_STRONG] = 4},
+ [DOME_BATTLE_STYLE_DEF] = {[MOVE_POINTS_DEF] = 3},
+ [DOME_BATTLE_STYLE_ENFEEBLE_HIGH] = {[MOVE_POINTS_STAT_LOWER] = 2, [MOVE_POINTS_STATUS] = 2}, // BUG: This battle style is unobtainable; DOME_BATTLE_STYLE_ENFEEBLE_LOW will always succeed before it
+ [DOME_BATTLE_STYLE_POPULAR_POWER] = {[MOVE_POINTS_POWERFUL] = 3, [MOVE_POINTS_POPULAR] = 3},
+ [DOME_BATTLE_STYLE_COMBO_LOW] = {[MOVE_POINTS_COMBO] = 2},
+ [DOME_BATTLE_STYLE_ACCURATE] = {[MOVE_POINTS_HEAL] = 1, [MOVE_POINTS_ACCURATE] = 3},
+ [DOME_BATTLE_STYLE_POWERFUL] = {[MOVE_POINTS_POWERFUL] = 4},
+ [DOME_BATTLE_STYLE_ATK_OVER_DEF] = {[MOVE_POINTS_DMG] = 7},
+ [DOME_BATTLE_STYLE_DEF_OVER_ATK] = {[MOVE_POINTS_DEF] = 4}, // BUG: This battle style is unobtainable; DOME_BATTLE_STYLE_DEF will always succeed before it
+ [DOME_BATTLE_STYLE_POPULAR_STRONG] = {[MOVE_POINTS_POPULAR] = 2, [MOVE_POINTS_STRONG] = 4},
+ [DOME_BATTLE_STYLE_EFFECTS] = {[MOVE_POINTS_EFFECT] = 4},
+ [DOME_BATTLE_STYLE_BALANCED] = {0}, // If no other thresholds are met, this battle style is used
+ [DOME_BATTLE_STYLE_UNUSED1] = {0}, // Here below is unreachable
+ [DOME_BATTLE_STYLE_UNUSED2] = {0},
+ [DOME_BATTLE_STYLE_UNUSED3] = {0},
+ //[DOME_BATTLE_STYLE_UNUSED4] = {0}, // Excluded here, presumably was meant to be a style just for Dome Ace Tucker
};
static const u8 sUnusedArray[] =
{
@@ -528,43 +548,47 @@ static const u8 sUnusedArray[] =
0, 0, 0, 254, 0, 0, 0, 0, 0,
};
-static const u8 sTourneyTreeCursorMovementMap[][5][4]=
-{
- {{0x07, 0x01, 0x08, 0x10}, {0x07, 0x01, 0x08, 0x10}, {0x07, 0x01, 0x08, 0x10}, {0x07, 0x01, 0x08, 0x10}, {0x07, 0x01, 0x08, 0x10}},
- {{0x00, 0x02, 0x09, 0x10}, {0x00, 0x02, 0x09, 0x10}, {0x00, 0x02, 0x09, 0x10}, {0x00, 0x02, 0x09, 0x10}, {0x00, 0x02, 0x09, 0x10}},
- {{0x01, 0x03, 0x0a, 0x11}, {0x01, 0x03, 0x0a, 0x11}, {0x01, 0x03, 0x0a, 0x11}, {0x01, 0x03, 0x0a, 0x11}, {0x01, 0x03, 0x0a, 0x11}},
- {{0x02, 0x04, 0x0b, 0x11}, {0x02, 0x04, 0x0b, 0x11}, {0x02, 0x04, 0x0b, 0x11}, {0x02, 0x04, 0x0b, 0x11}, {0x02, 0x04, 0x0b, 0x11}},
- {{0x03, 0x05, 0x0c, 0x12}, {0x03, 0x05, 0x0c, 0x12}, {0x03, 0x05, 0x0c, 0x12}, {0x03, 0x05, 0x0c, 0x12}, {0x03, 0x05, 0x0c, 0x12}},
- {{0x04, 0x06, 0x0d, 0x12}, {0x04, 0x06, 0x0d, 0x12}, {0x04, 0x06, 0x0d, 0x12}, {0x04, 0x06, 0x0d, 0x12}, {0x04, 0x06, 0x0d, 0x12}},
- {{0x05, 0x07, 0x0e, 0x13}, {0x05, 0x07, 0x0e, 0x13}, {0x05, 0x07, 0x0e, 0x13}, {0x05, 0x07, 0x0e, 0x13}, {0x05, 0x07, 0x0e, 0x13}},
- {{0x06, 0x00, 0x0f, 0x13}, {0x06, 0x00, 0x0f, 0x13}, {0x06, 0x00, 0x0f, 0x13}, {0x06, 0x00, 0x0f, 0x13}, {0x06, 0x00, 0x0f, 0x13}},
- {{0x1f, 0x09, 0x14, 0x1f}, {0x1f, 0x09, 0x14, 0x1f}, {0x1f, 0x09, 0x14, 0x1f}, {0x1f, 0x09, 0x14, 0x1f}, {0x1f, 0x09, 0x14, 0x1f}},
- {{0x08, 0x0a, 0x14, 0x01}, {0x08, 0x0a, 0x14, 0x01}, {0x08, 0x0a, 0x14, 0x01}, {0x08, 0x0a, 0x14, 0x01}, {0x08, 0x0a, 0x14, 0x01}},
- {{0x09, 0x0b, 0x15, 0x02}, {0x09, 0x0b, 0x15, 0x02}, {0x09, 0x0b, 0x15, 0x02}, {0x09, 0x0b, 0x15, 0x02}, {0x09, 0x0b, 0x15, 0x02}},
- {{0x0a, 0x0c, 0x15, 0x03}, {0x0a, 0x0c, 0x15, 0x03}, {0x0a, 0x0c, 0x15, 0x03}, {0x0a, 0x0c, 0x15, 0x03}, {0x0a, 0x0c, 0x15, 0x03}},
- {{0x0b, 0x0d, 0x16, 0x04}, {0x0b, 0x0d, 0x16, 0x04}, {0x0b, 0x0d, 0x16, 0x04}, {0x0b, 0x0d, 0x16, 0x04}, {0x0b, 0x0d, 0x16, 0x04}},
- {{0x0c, 0x0e, 0x16, 0x05}, {0x0c, 0x0e, 0x16, 0x05}, {0x0c, 0x0e, 0x16, 0x05}, {0x0c, 0x0e, 0x16, 0x05}, {0x0c, 0x0e, 0x16, 0x05}},
- {{0x0d, 0x0f, 0x17, 0x06}, {0x0d, 0x0f, 0x17, 0x06}, {0x0d, 0x0f, 0x17, 0x06}, {0x0d, 0x0f, 0x17, 0x06}, {0x0d, 0x0f, 0x17, 0x06}},
- {{0x0e, 0x1f, 0x17, 0x07}, {0x0e, 0x1f, 0x17, 0x07}, {0x0e, 0x1f, 0x17, 0x07}, {0x0e, 0x1f, 0x17, 0x07}, {0x0e, 0x1f, 0x17, 0x07}},
- {{0x13, 0x11, 0x00, 0x14}, {0x13, 0x11, 0x00, 0x18}, {0x13, 0x11, 0x00, 0x18}, {0x13, 0x11, 0x00, 0x18}, {0x13, 0x11, 0x00, 0x18}},
- {{0x10, 0x12, 0x02, 0x15}, {0x10, 0x12, 0x02, 0x18}, {0x10, 0x12, 0x02, 0x18}, {0x10, 0x12, 0x02, 0x18}, {0x10, 0x12, 0x02, 0x18}},
- {{0x11, 0x13, 0x04, 0x16}, {0x11, 0x13, 0x04, 0x19}, {0x11, 0x13, 0x04, 0x19}, {0x11, 0x13, 0x04, 0x19}, {0x11, 0x13, 0x04, 0x19}},
- {{0x12, 0x10, 0x06, 0x17}, {0x12, 0x10, 0x06, 0x19}, {0x12, 0x10, 0x06, 0x19}, {0x12, 0x10, 0x06, 0x19}, {0x12, 0x10, 0x06, 0x19}},
- {{0x17, 0x15, 0x10, 0x08}, {0x17, 0x15, 0x1a, 0x08}, {0x17, 0x15, 0x1a, 0x08}, {0x17, 0x15, 0x1a, 0x08}, {0x17, 0x15, 0x1a, 0x08}},
- {{0x14, 0x16, 0x11, 0x0a}, {0x14, 0x16, 0x1a, 0x0a}, {0x14, 0x16, 0x1a, 0x0a}, {0x14, 0x16, 0x1a, 0x0a}, {0x14, 0x16, 0x1a, 0x0a}},
- {{0x15, 0x17, 0x12, 0x0c}, {0x15, 0x17, 0x1b, 0x0c}, {0x15, 0x17, 0x1b, 0x0c}, {0x15, 0x17, 0x1b, 0x0c}, {0x15, 0x17, 0x1b, 0x0c}},
- {{0x16, 0x14, 0x13, 0x0e}, {0x16, 0x14, 0x1b, 0x0e}, {0x16, 0x14, 0x1b, 0x0e}, {0x16, 0x14, 0x1b, 0x0e}, {0x16, 0x14, 0x1b, 0x0e}},
- {{0xff, 0xff, 0xff, 0xff}, {0x19, 0x19, 0x10, 0x1a}, {0x19, 0x19, 0x10, 0x1c}, {0x19, 0x19, 0x10, 0x1c}, {0x19, 0x19, 0x10, 0x1c}},
- {{0xff, 0xff, 0xff, 0xff}, {0x18, 0x18, 0x12, 0x1b}, {0x18, 0x18, 0x12, 0x1c}, {0x18, 0x18, 0x12, 0x1c}, {0x18, 0x18, 0x12, 0x1c}},
- {{0xff, 0xff, 0xff, 0xff}, {0x1b, 0x1b, 0x18, 0x14}, {0x1b, 0x1b, 0x1d, 0x14}, {0x1b, 0x1b, 0x1d, 0x14}, {0x1b, 0x1b, 0x1d, 0x14}},
- {{0xff, 0xff, 0xff, 0xff}, {0x1a, 0x1a, 0x19, 0x16}, {0x1a, 0x1a, 0x1d, 0x16}, {0x1a, 0x1a, 0x1d, 0x16}, {0x1a, 0x1a, 0x1d, 0x16}},
- {{0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0x18, 0x1d}, {0xff, 0xff, 0x18, 0x1e}, {0xff, 0xff, 0x18, 0x1e}},
- {{0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0x1c, 0x1a}, {0xff, 0xff, 0x1e, 0x1a}, {0xff, 0xff, 0x1e, 0x1a}},
- {{0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0x1c, 0x1d}, {0xff, 0xff, 0x1c, 0x1d}},
- {{0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}},
+// 1st array is for cursor position (sprite id): cursor can be on a trainer info button, a match info button, or the exit/cancel button
+// 2nd array is for round count. For some reason this array contains an inaccessible Round 5 which is identical to Round 4
+// 3rd array is movement direction (see the MOVE_DIR_* constants in UpdateTourneyTreeCursor)
+// The values are sprite IDs for the cursor position to move to, with 0xFF being an invalid move
+static const u8 sTourneyTreeCursorMovementMap[DOME_TOURNAMENT_TRAINERS_COUNT + DOME_TOURNAMENT_MATCHES_COUNT + 1][DOME_ROUNDS_COUNT + 1][4]=
+{
+ [0] = {{ 7, 1, 8, 16}, { 7, 1, 8, 16}, { 7, 1, 8, 16}, { 7, 1, 8, 16}, { 7, 1, 8, 16}},
+ [1] = {{ 0, 2, 9, 16}, { 0, 2, 9, 16}, { 0, 2, 9, 16}, { 0, 2, 9, 16}, { 0, 2, 9, 16}},
+ [2] = {{ 1, 3, 10, 17}, { 1, 3, 10, 17}, { 1, 3, 10, 17}, { 1, 3, 10, 17}, { 1, 3, 10, 17}},
+ [3] = {{ 2, 4, 11, 17}, { 2, 4, 11, 17}, { 2, 4, 11, 17}, { 2, 4, 11, 17}, { 2, 4, 11, 17}},
+ [4] = {{ 3, 5, 12, 18}, { 3, 5, 12, 18}, { 3, 5, 12, 18}, { 3, 5, 12, 18}, { 3, 5, 12, 18}},
+ [5] = {{ 4, 6, 13, 18}, { 4, 6, 13, 18}, { 4, 6, 13, 18}, { 4, 6, 13, 18}, { 4, 6, 13, 18}},
+ [6] = {{ 5, 7, 14, 19}, { 5, 7, 14, 19}, { 5, 7, 14, 19}, { 5, 7, 14, 19}, { 5, 7, 14, 19}},
+ [7] = {{ 6, 0, 15, 19}, { 6, 0, 15, 19}, { 6, 0, 15, 19}, { 6, 0, 15, 19}, { 6, 0, 15, 19}},
+ [8] = {{ 31, 9, 20, 31}, { 31, 9, 20, 31}, { 31, 9, 20, 31}, { 31, 9, 20, 31}, { 31, 9, 20, 31}},
+ [9] = {{ 8, 10, 20, 1}, { 8, 10, 20, 1}, { 8, 10, 20, 1}, { 8, 10, 20, 1}, { 8, 10, 20, 1}},
+ [10] = {{ 9, 11, 21, 2}, { 9, 11, 21, 2}, { 9, 11, 21, 2}, { 9, 11, 21, 2}, { 9, 11, 21, 2}},
+ [11] = {{ 10, 12, 21, 3}, { 10, 12, 21, 3}, { 10, 12, 21, 3}, { 10, 12, 21, 3}, { 10, 12, 21, 3}},
+ [12] = {{ 11, 13, 22, 4}, { 11, 13, 22, 4}, { 11, 13, 22, 4}, { 11, 13, 22, 4}, { 11, 13, 22, 4}},
+ [13] = {{ 12, 14, 22, 5}, { 12, 14, 22, 5}, { 12, 14, 22, 5}, { 12, 14, 22, 5}, { 12, 14, 22, 5}},
+ [14] = {{ 13, 15, 23, 6}, { 13, 15, 23, 6}, { 13, 15, 23, 6}, { 13, 15, 23, 6}, { 13, 15, 23, 6}},
+ [15] = {{ 14, 31, 23, 7}, { 14, 31, 23, 7}, { 14, 31, 23, 7}, { 14, 31, 23, 7}, { 14, 31, 23, 7}},
+ [16] = {{ 19, 17, 0, 20}, { 19, 17, 0, 24}, { 19, 17, 0, 24}, { 19, 17, 0, 24}, { 19, 17, 0, 24}},
+ [17] = {{ 16, 18, 2, 21}, { 16, 18, 2, 24}, { 16, 18, 2, 24}, { 16, 18, 2, 24}, { 16, 18, 2, 24}},
+ [18] = {{ 17, 19, 4, 22}, { 17, 19, 4, 25}, { 17, 19, 4, 25}, { 17, 19, 4, 25}, { 17, 19, 4, 25}},
+ [19] = {{ 18, 16, 6, 23}, { 18, 16, 6, 25}, { 18, 16, 6, 25}, { 18, 16, 6, 25}, { 18, 16, 6, 25}},
+ [20] = {{ 23, 21, 16, 8}, { 23, 21, 26, 8}, { 23, 21, 26, 8}, { 23, 21, 26, 8}, { 23, 21, 26, 8}},
+ [21] = {{ 20, 22, 17, 10}, { 20, 22, 26, 10}, { 20, 22, 26, 10}, { 20, 22, 26, 10}, { 20, 22, 26, 10}},
+ [22] = {{ 21, 23, 18, 12}, { 21, 23, 27, 12}, { 21, 23, 27, 12}, { 21, 23, 27, 12}, { 21, 23, 27, 12}},
+ [23] = {{ 22, 20, 19, 14}, { 22, 20, 27, 14}, { 22, 20, 27, 14}, { 22, 20, 27, 14}, { 22, 20, 27, 14}},
+ [24] = {{0xFF, 0xFF, 0xFF, 0xFF}, { 25, 25, 16, 26}, { 25, 25, 16, 28}, { 25, 25, 16, 28}, { 25, 25, 16, 28}},
+ [25] = {{0xFF, 0xFF, 0xFF, 0xFF}, { 24, 24, 18, 27}, { 24, 24, 18, 28}, { 24, 24, 18, 28}, { 24, 24, 18, 28}},
+ [26] = {{0xFF, 0xFF, 0xFF, 0xFF}, { 27, 27, 24, 20}, { 27, 27, 29, 20}, { 27, 27, 29, 20}, { 27, 27, 29, 20}},
+ [27] = {{0xFF, 0xFF, 0xFF, 0xFF}, { 26, 26, 25, 22}, { 26, 26, 29, 22}, { 26, 26, 29, 22}, { 26, 26, 29, 22}},
+ [28] = {{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 24, 29}, {0xFF, 0xFF, 24, 30}, {0xFF, 0xFF, 24, 30}},
+ [29] = {{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 28, 26}, {0xFF, 0xFF, 30, 26}, {0xFF, 0xFF, 30, 26}},
+ [30] = {{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 28, 29}, {0xFF, 0xFF, 28, 29}},
+ [31] = {{ 15, 8, 8, 0}, { 15, 8, 8, 0}, { 15, 8, 8, 0}, { 15, 8, 8, 0}, { 15, 8, 8, 0}}, // TOURNEY_TREE_CLOSE_BUTTON
};
-static const struct BgTemplate gUnknown_0860CE74[4] =
+static const struct BgTemplate sTourneyTreeBgTemplates[4] =
{
{
.bg = 0,
@@ -604,7 +628,7 @@ static const struct BgTemplate gUnknown_0860CE74[4] =
},
};
-static const struct BgTemplate gUnknown_0860CE84[4] =
+static const struct BgTemplate sInfoCardBgTemplates[4] =
{
{
.bg = 0,
@@ -644,7 +668,7 @@ static const struct BgTemplate gUnknown_0860CE84[4] =
},
};
-static const struct WindowTemplate gUnknown_0860CE94[] =
+static const struct WindowTemplate sTourneyTreeWindowTemplates[] =
{
{
.bg = 0,
@@ -676,7 +700,7 @@ static const struct WindowTemplate gUnknown_0860CE94[] =
DUMMY_WIN_TEMPLATE,
};
-static const struct WindowTemplate gUnknown_0860CEB4[] =
+static const struct WindowTemplate sInfoCardWindowTemplates[] =
{
{
.bg = 0,
@@ -850,25 +874,26 @@ static const struct ScanlineEffectParams sTourneyTreeScanlineEffectParams =
.initState = 1,
};
-static const struct CompressedSpriteSheet sDomeOptionsSpriteSheet[] =
+static const struct CompressedSpriteSheet sTourneyTreeButtonsSpriteSheet[] =
{
- {gBattleFrontierGfx_DomeOptions, 0x0600, 0x0000},
+ {gDomeTourneyTreeButtons_Gfx, 0x0600, 0x0000},
{},
};
-static const struct CompressedSpritePalette gUnknown_0860CF60[] =
+// Unused
+static const struct CompressedSpritePalette sTourneyTreeButtonsSpritePal[] =
{
- {gUnknown_08D85444, 0x0000},
+ {gDomeTourneyTreeButtons_Pal, 0x0000},
{},
};
-static const struct OamData gUnknown_0860CF70 =
+static const struct OamData sOamData_TourneyTreePokeball =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -879,13 +904,14 @@ static const struct OamData gUnknown_0860CF70 =
.affineParam = 0,
};
-static const struct OamData gUnknown_0860CF78 =
+// For Exit/Cancel buttons
+static const struct OamData sOamData_TourneyTreeCloseButton =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
@@ -896,13 +922,13 @@ static const struct OamData gUnknown_0860CF78 =
.affineParam = 0,
};
-static const struct OamData gUnknown_0860CF80 =
+static const struct OamData sOamData_VerticalScrollArrow =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
.matrixNum = 0,
@@ -913,13 +939,13 @@ static const struct OamData gUnknown_0860CF80 =
.affineParam = 0,
};
-static const struct OamData gUnknown_0860CF88 =
+static const struct OamData sOamData_HorizontalScrollArrow =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x16),
.x = 0,
.matrixNum = 0,
@@ -930,1324 +956,1128 @@ static const struct OamData gUnknown_0860CF88 =
.affineParam = 0,
};
-static const union AnimCmd gUnknown_0860CF90[] =
+static const union AnimCmd sSpriteAnim_TourneyTreePokeballNormal[] =
{
ANIMCMD_FRAME(20, 1),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_0860CF98[] =
+static const union AnimCmd sSpriteAnim_TourneyTreePokeballSelected[] =
{
ANIMCMD_FRAME(24, 1),
ANIMCMD_END,
};
-static const union AnimCmd * const gUnknown_0860CFA0[] =
+static const union AnimCmd * const sSpriteAnimTable_TourneyTreePokeball[] =
{
- gUnknown_0860CF90,
- gUnknown_0860CF98,
+ sSpriteAnim_TourneyTreePokeballNormal,
+ sSpriteAnim_TourneyTreePokeballSelected,
};
-static const struct SpriteTemplate gUnknown_0860CFA8 =
+// Sprite template for the pokeballs on the tourney tree that act as buttons to view a trainer/match info card
+static const struct SpriteTemplate sTourneyTreePokeballSpriteTemplate =
{
.tileTag = 0x0000,
.paletteTag = 0xffff,
- .oam = &gUnknown_0860CF70,
- .anims = gUnknown_0860CFA0,
+ .oam = &sOamData_TourneyTreePokeball,
+ .anims = sSpriteAnimTable_TourneyTreePokeball,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy
+ .callback = SpriteCallbackDummy
};
-static const union AnimCmd gUnknown_0860CFC0[] =
+static const union AnimCmd sSpriteAnim_TourneyTreeCancelButtonNormal[] =
{
ANIMCMD_FRAME(8, 1),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_0860CFC8[] =
+static const union AnimCmd sSpriteAnim_TourneyTreeCancelButtonSelected[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-static const union AnimCmd * const gUnknown_0860CFD0[] =
+static const union AnimCmd * const sSpriteAnimTable_TourneyTreeCancelButton[] =
{
- gUnknown_0860CFC0,
- gUnknown_0860CFC8,
+ sSpriteAnim_TourneyTreeCancelButtonNormal,
+ sSpriteAnim_TourneyTreeCancelButtonSelected,
};
-static const struct SpriteTemplate gUnknown_0860CFD8 =
+static const struct SpriteTemplate sCancelButtonSpriteTemplate =
{
.tileTag = 0x0000,
.paletteTag = 0xffff,
- .oam = &gUnknown_0860CF78,
- .anims = gUnknown_0860CFD0,
+ .oam = &sOamData_TourneyTreeCloseButton,
+ .anims = sSpriteAnimTable_TourneyTreeCancelButton,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const union AnimCmd gUnknown_0860CFF0[] =
+static const union AnimCmd sSpriteAnim_TourneyTreeExitButtonNormal[] =
{
ANIMCMD_FRAME(40, 1),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_0860CFF8[] =
+static const union AnimCmd sSpriteAnim_TourneyTreeExitButtonSelected[] =
{
ANIMCMD_FRAME(32, 1),
ANIMCMD_END,
};
-static const union AnimCmd * const gUnknown_0860D000[] =
+static const union AnimCmd * const sSpriteAnimTable_TourneyTreeExitButton[] =
{
- gUnknown_0860CFF0,
- gUnknown_0860CFF8,
+ sSpriteAnim_TourneyTreeExitButtonNormal,
+ sSpriteAnim_TourneyTreeExitButtonSelected,
};
-static const struct SpriteTemplate gUnknown_0860D008 =
+static const struct SpriteTemplate sExitButtonSpriteTemplate =
{
.tileTag = 0x0000,
.paletteTag = 0xffff,
- .oam = &gUnknown_0860CF78,
- .anims = gUnknown_0860D000,
+ .oam = &sOamData_TourneyTreeCloseButton,
+ .anims = sSpriteAnimTable_TourneyTreeExitButton,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
};
-static const union AnimCmd gUnknown_0860D020[] =
+static const union AnimCmd sSpriteAnim_UpArrow[] =
{
ANIMCMD_FRAME(18, 1),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_0860D028[] =
+static const union AnimCmd sSpriteAnim_DownArrow[] =
{
ANIMCMD_FRAME(18, 1, .vFlip = TRUE),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_0860D030[] =
+static const union AnimCmd sSpriteAnim_LeftArrow[] =
{
ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
ANIMCMD_END,
};
-static const union AnimCmd gUnknown_0860D038[] =
+static const union AnimCmd sSpriteAnim_RightArrow[] =
{
ANIMCMD_FRAME(16, 1),
ANIMCMD_END,
};
-static const union AnimCmd * const gUnknown_0860D040[] =
+static const union AnimCmd * const sSpriteAnimTable_VerticalScrollArrow[] =
{
- gUnknown_0860D020,
- gUnknown_0860D028,
+ sSpriteAnim_UpArrow,
+ sSpriteAnim_DownArrow,
};
-static const union AnimCmd * const gUnknown_0860D048[] =
+static const union AnimCmd * const sSpriteAnimTable_HorizontalScrollArrow[] =
{
- gUnknown_0860D030,
- gUnknown_0860D038,
+ sSpriteAnim_LeftArrow,
+ sSpriteAnim_RightArrow,
};
-static const struct SpriteTemplate gUnknown_0860D050 =
+static const struct SpriteTemplate sHorizontalScrollArrowSpriteTemplate =
{
.tileTag = 0x0000,
.paletteTag = 0xffff,
- .oam = &gUnknown_0860CF88,
- .anims = gUnknown_0860D048,
+ .oam = &sOamData_HorizontalScrollArrow,
+ .anims = sSpriteAnimTable_HorizontalScrollArrow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8190B40
+ .callback = SpriteCb_HorizontalScrollArrow
};
-static const struct SpriteTemplate gUnknown_0860D068 =
+static const struct SpriteTemplate sVerticalScrollArrowSpriteTemplate =
{
.tileTag = 0x0000,
.paletteTag = 0xffff,
- .oam = &gUnknown_0860CF80,
- .anims = gUnknown_0860D040,
+ .oam = &sOamData_VerticalScrollArrow,
+ .anims = sSpriteAnimTable_VerticalScrollArrow,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8190C6C
+ .callback = SpriteCb_VerticalScrollArrow
};
-static const u8 sTourneyTreeTrainerIds[] = {0, 8, 12, 4, 7, 15, 11, 3, 2, 10, 14, 6, 5, 13, 9, 1};
+// Organized by seed starting position, i.e. seed 0 battles seed 8 first
+static const u8 sTourneyTreeTrainerIds[DOME_TOURNAMENT_TRAINERS_COUNT] = {0, 8, 12, 4, 7, 15, 11, 3, 2, 10, 14, 6, 5, 13, 9, 1};
static void (* const sBattleDomeFunctions[])(void) =
{
- InitDomeChallenge,
- GetDomeData,
- SetDomeData,
- BufferDomeRoundText,
- BufferDomeOpponentName,
- InitDomeOpponentParty,
- ShowDomeOpponentInfo,
- ShowDomeTourneyTree,
- ShowPreviousDomeResultsTourneyTree,
- SetDomeOpponentId,
- SetDomeOpponentGraphicsId,
- ShowNonInteractiveDomeTourneyTree,
- ResolveDomeRoundWinners,
- sub_81902F8,
- UpdateDomeStreaks,
- InitDomeFacilityTrainersAndMons,
- RestoreDomePlayerParty,
- RestoreDomePlayerPartyHeldItems,
- ReduceDomePlayerPartyTo3Mons,
- GetPlayerSeededBeforeOpponent,
- BufferLastDomeWinnerName,
- sub_8194F58,
- InitDomeTrainers,
+ [BATTLE_DOME_FUNC_INIT] = InitDomeChallenge,
+ [BATTLE_DOME_FUNC_GET_DATA] = GetDomeData,
+ [BATTLE_DOME_FUNC_SET_DATA] = SetDomeData,
+ [BATTLE_DOME_FUNC_GET_ROUND_TEXT] = BufferDomeRoundText,
+ [BATTLE_DOME_FUNC_GET_OPPONENT_NAME] = BufferDomeOpponentName,
+ [BATTLE_DOME_FUNC_INIT_OPPONENT_PARTY] = InitDomeOpponentParty,
+ [BATTLE_DOME_FUNC_SHOW_OPPONENT_INFO] = ShowDomeOpponentInfo,
+ [BATTLE_DOME_FUNC_SHOW_TOURNEY_TREE] = ShowDomeTourneyTree,
+ [BATTLE_DOME_FUNC_SHOW_PREV_TOURNEY_TREE] = ShowPreviousDomeTourneyTree,
+ [BATTLE_DOME_FUNC_SET_OPPONENT_ID] = SetDomeOpponentId,
+ [BATTLE_DOME_FUNC_SET_OPPONENT_GFX] = SetDomeOpponentGraphicsId,
+ [BATTLE_DOME_FUNC_SHOW_STATIC_TOURNEY_TREE] = ShowNonInteractiveDomeTourneyTree,
+ [BATTLE_DOME_FUNC_RESOLVE_WINNERS] = ResolveDomeRoundWinners,
+ [BATTLE_DOME_FUNC_SAVE] = SaveDomeChallenge,
+ [BATTLE_DOME_FUNC_INCREMENT_STREAK] = IncrementDomeStreaks,
+ [BATTLE_DOME_FUNC_SET_TRAINERS] = SetFacilityTrainerAndMonPtrs,
+ [BATTLE_DOME_FUNC_RESET_SKETCH] = ResetSketchedMoves,
+ [BATTLE_DOME_FUNC_RESTORE_HELD_ITEMS] = RestoreDomePlayerPartyHeldItems,
+ [BATTLE_DOME_FUNC_REDUCE_PARTY] = ReduceDomePlayerPartyToSelectedMons,
+ [BATTLE_DOME_FUNC_COMPARE_SEEDS] = GetPlayerSeededBeforeOpponent,
+ [BATTLE_DOME_FUNC_GET_WINNER_NAME] = BufferLastDomeWinnerName,
+ [BATTLE_DOME_FUNC_INIT_RESULTS_TREE] = InitRandomTourneyTreeResults,
+ [BATTLE_DOME_FUNC_INIT_TRAINERS] = InitDomeTrainers,
};
-static const u32 gUnknown_0860D0EC[][2] =
+static const u32 sWinStreakFlags[][2] =
{
- {0x00000004, 0x00000008},
- {0x00100000, 0x00200000},
+ {STREAK_DOME_SINGLES_50, STREAK_DOME_SINGLES_OPEN},
+ {STREAK_DOME_DOUBLES_50, STREAK_DOME_DOUBLES_OPEN},
};
-static const u32 gUnknown_0860D0FC[][2] =
+static const u32 sWinStreakMasks[][2] =
{
- {0xfffffffb, 0xfffffff7},
- {0xffefffff, 0xffdfffff},
+ {~(STREAK_DOME_SINGLES_50), ~(STREAK_DOME_SINGLES_OPEN)},
+ {~(STREAK_DOME_DOUBLES_50), ~(STREAK_DOME_DOUBLES_OPEN)},
};
+// TODO: The below two arrays probably need better names. The one below for example is only true of sIdToOpponentId[i][0]
static const u8 sIdToOpponentId[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] =
{
- [0] = {8, 0, 4, 8},
- [1] = {9, 12, 8, 0},
- [2] = {10, 8, 12, 0},
- [3] = {11, 4, 0, 8},
- [4] = {12, 0, 4, 8},
- [5] = {13, 12, 8, 0},
- [6] = {14, 8, 12, 0},
- [7] = {15, 4, 0, 8},
- [8] = {0, 0, 4, 8},
- [9] = {1, 12, 8, 0},
- [10] = {2, 8, 12, 0},
- [11] = {3, 4, 0, 8},
- [12] = {4, 0, 4, 8},
- [13] = {5, 12, 8, 0},
- [14] = {6, 8, 12, 0},
- [15] = {7, 4, 0, 8},
+ [0] = { 8, 0, 4, 8},
+ [1] = { 9, 12, 8, 0},
+ [2] = {10, 8, 12, 0},
+ [3] = {11, 4, 0, 8},
+ [4] = {12, 0, 4, 8},
+ [5] = {13, 12, 8, 0},
+ [6] = {14, 8, 12, 0},
+ [7] = {15, 4, 0, 8},
+ [8] = { 0, 0, 4, 8},
+ [9] = { 1, 12, 8, 0},
+ [10] = { 2, 8, 12, 0},
+ [11] = { 3, 4, 0, 8},
+ [12] = { 4, 0, 4, 8},
+ [13] = { 5, 12, 8, 0},
+ [14] = { 6, 8, 12, 0},
+ [15] = { 7, 4, 0, 8},
};
-static const u8 gUnknown_0860D14C[] = {0x00, 0x08, 0x04, 0x0c, 0x07, 0x0f, 0x03, 0x0b, 0x02, 0x0a, 0x06, 0x0e, 0x05, 0x0d, 0x01, 0x09};
-
-static const u8 gUnknown_0860D15C[][4] =
-{
- {0x00, 0x08, 0x0c, 0x0e},
- {0x00, 0x08, 0x0c, 0x0e},
- {0x01, 0x08, 0x0c, 0x0e},
- {0x01, 0x08, 0x0c, 0x0e},
- {0x02, 0x09, 0x0c, 0x0e},
- {0x02, 0x09, 0x0c, 0x0e},
- {0x03, 0x09, 0x0c, 0x0e},
- {0x03, 0x09, 0x0c, 0x0e},
- {0x04, 0x0a, 0x0d, 0x0e},
- {0x04, 0x0a, 0x0d, 0x0e},
- {0x05, 0x0a, 0x0d, 0x0e},
- {0x05, 0x0a, 0x0d, 0x0e},
- {0x06, 0x0b, 0x0d, 0x0e},
- {0x06, 0x0b, 0x0d, 0x0e},
- {0x07, 0x0b, 0x0d, 0x0e},
- {0x07, 0x0b, 0x0d, 0x0e},
+// sTourneyTreeTrainerIds with every other pair swapped
+static const u8 sTourneyTreeTrainerOpponentIds[DOME_TOURNAMENT_TRAINERS_COUNT] = { 0, 8, 4, 12, 7, 15, 3, 11, 2, 10, 6, 14, 5, 13, 1, 9 };
+
+// The match number - 1 that a given tournament trainer will participate in for a given round
+static const u8 sIdToMatchNumber[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] =
+{
+ { 0, 8, 12, 14},
+ { 0, 8, 12, 14},
+ { 1, 8, 12, 14},
+ { 1, 8, 12, 14},
+ { 2, 9, 12, 14},
+ { 2, 9, 12, 14},
+ { 3, 9, 12, 14},
+ { 3, 9, 12, 14},
+ { 4, 10, 13, 14},
+ { 4, 10, 13, 14},
+ { 5, 10, 13, 14},
+ { 5, 10, 13, 14},
+ { 6, 11, 13, 14},
+ { 6, 11, 13, 14},
+ { 7, 11, 13, 14},
+ { 7, 11, 13, 14},
};
-static const u8 gUnknown_0860D19C[] = {0x17, 0x1b, 0x1d, 0x1e};
+static const u8 sLastMatchCardNum[DOME_ROUNDS_COUNT] =
+{
+ [DOME_ROUND1] = 23,
+ [DOME_ROUND2] = 27,
+ [DOME_SEMIFINAL] = 29,
+ [DOME_FINAL] = 30
+};
-static const u8 gUnknown_0860D1A0[][4] =
+static const u8 gUnknown_0860D1A0[DOME_TOURNAMENT_TRAINERS_COUNT / 2][DOME_ROUNDS_COUNT] =
{
- {0x10, 0x18, 0x1c, 0x1e},
- {0x11, 0x18, 0x1c, 0x1e},
- {0x12, 0x19, 0x1c, 0x1e},
- {0x13, 0x19, 0x1c, 0x1e},
- {0x14, 0x1a, 0x1d, 0x1e},
- {0x15, 0x1a, 0x1d, 0x1e},
- {0x16, 0x1b, 0x1d, 0x1e},
- {0x17, 0x1b, 0x1d, 0x1e},
+ {16, 24, 28, 30},
+ {17, 24, 28, 30},
+ {18, 25, 28, 30},
+ {19, 25, 28, 30},
+ {20, 26, 29, 30},
+ {21, 26, 29, 30},
+ {22, 27, 29, 30},
+ {23, 27, 29, 30},
};
-static const u8 gUnknown_0860D1C0[] = {0x00, 0x0f, 0x08, 0x07, 0x03, 0x0c, 0x0b, 0x04, 0x01, 0x0e, 0x09, 0x06, 0x02, 0x0d, 0x0a, 0x05};
-
-static const u8 *const sBattleDomePotentialTexts[] =
-{
- gBattleDomeOpponentPotentialText1,
- gBattleDomeOpponentPotentialText2,
- gBattleDomeOpponentPotentialText3,
- gBattleDomeOpponentPotentialText4,
- gBattleDomeOpponentPotentialText5,
- gBattleDomeOpponentPotentialText6,
- gBattleDomeOpponentPotentialText7,
- gBattleDomeOpponentPotentialText8,
- gBattleDomeOpponentPotentialText9,
- gBattleDomeOpponentPotentialText10,
- gBattleDomeOpponentPotentialText11,
- gBattleDomeOpponentPotentialText12,
- gBattleDomeOpponentPotentialText13,
- gBattleDomeOpponentPotentialText14,
- gBattleDomeOpponentPotentialText15,
- gBattleDomeOpponentPotentialText16,
- gBattleDomeOpponentPotentialText17,
+static const u8 gUnknown_0860D1C0[DOME_TOURNAMENT_TRAINERS_COUNT] = {0, 15, 8, 7, 3, 12, 11, 4, 1, 14, 9, 6, 2, 13, 10, 5};
+
+// Each tourney trainer has a text describing their potential to win, depending on their seed ranking for the current tourney
+// Dome Ace Tucker has their own separate potential text
+static const u8 *const sBattleDomePotentialTexts[DOME_TOURNAMENT_TRAINERS_COUNT + 1] =
+{
+ BattleDome_Text_Potential1, // Highest potential
+ BattleDome_Text_Potential2,
+ BattleDome_Text_Potential3,
+ BattleDome_Text_Potential4,
+ BattleDome_Text_Potential5,
+ BattleDome_Text_Potential6,
+ BattleDome_Text_Potential7,
+ BattleDome_Text_Potential8,
+ BattleDome_Text_Potential9,
+ BattleDome_Text_Potential10,
+ BattleDome_Text_Potential11,
+ BattleDome_Text_Potential12,
+ BattleDome_Text_Potential13,
+ BattleDome_Text_Potential14,
+ BattleDome_Text_Potential15,
+ BattleDome_Text_Potential16, // Lowest potential
+ BattleDome_Text_PotentialDomeAceTucker,
};
-static const u8 *const sBattleDomeOpponentStyleTexts[] =
-{
- gBattleDomeOpponentStyleText1,
- gBattleDomeOpponentStyleText2,
- gBattleDomeOpponentStyleText3,
- gBattleDomeOpponentStyleText4,
- gBattleDomeOpponentStyleText5,
- gBattleDomeOpponentStyleText6,
- gBattleDomeOpponentStyleText7,
- gBattleDomeOpponentStyleText8,
- gBattleDomeOpponentStyleText9,
- gBattleDomeOpponentStyleText10,
- gBattleDomeOpponentStyleText11,
- gBattleDomeOpponentStyleText12,
- gBattleDomeOpponentStyleText13,
- gBattleDomeOpponentStyleText14,
- gBattleDomeOpponentStyleText15,
- gBattleDomeOpponentStyleText16,
- gBattleDomeOpponentStyleText17,
- gBattleDomeOpponentStyleText18,
- gBattleDomeOpponentStyleText19,
- gBattleDomeOpponentStyleText20,
- gBattleDomeOpponentStyleText21,
- gBattleDomeOpponentStyleText22,
- gBattleDomeOpponentStyleText23,
- gBattleDomeOpponentStyleText24,
- gBattleDomeOpponentStyleText25,
- gBattleDomeOpponentStyleText26,
- gBattleDomeOpponentStyleText27,
- gBattleDomeOpponentStyleText28,
- gBattleDomeOpponentStyleTextUnused1,
- gBattleDomeOpponentStyleTextUnused2,
- gBattleDomeOpponentStyleTextUnused3,
- gBattleDomeOpponentStyleTextUnused4,
+// The first line of text on a trainers info card that gives information about their battle style (dependent on their party's moves)
+static const u8 *const sBattleDomeOpponentStyleTexts[NUM_BATTLE_STYLES] =
+{
+ [DOME_BATTLE_STYLE_RISKY] = BattleDome_Text_StyleRiskDisaster,
+ [DOME_BATTLE_STYLE_STALL] = BattleDome_Text_StyleEndureLongBattles,
+ [DOME_BATTLE_STYLE_VARIED] = BattleDome_Text_StyleVariesTactics,
+ [DOME_BATTLE_STYLE_COMBO_HIGH] = BattleDome_Text_StyleToughWinningPattern,
+ [DOME_BATTLE_STYLE_RARE_MOVES] = BattleDome_Text_StyleUsesVeryRareMove, // Seems like the text for these two was swapped
+ [DOME_BATTLE_STYLE_RARE_MOVE] = BattleDome_Text_StyleUsesStartlingMoves, //
+ [DOME_BATTLE_STYLE_HP] = BattleDome_Text_StyleConstantlyWatchesHP,
+ [DOME_BATTLE_STYLE_STORE_POWER] = BattleDome_Text_StyleStoresAndLoosesPower,
+ [DOME_BATTLE_STYLE_ENFEEBLE_LOW] = BattleDome_Text_StyleEnfeeblesFoes,
+ [DOME_BATTLE_STYLE_LUCK] = BattleDome_Text_StylePrefersLuckTactics,
+ [DOME_BATTLE_STYLE_REGAL] = BattleDome_Text_StyleRegalAtmosphere,
+ [DOME_BATTLE_STYLE_LOW_PP] = BattleDome_Text_StylePowerfulLowPPMoves,
+ [DOME_BATTLE_STYLE_STATUS_ATK] = BattleDome_Text_StyleEnfeebleThenAttack,
+ [DOME_BATTLE_STYLE_ENDURE] = BattleDome_Text_StyleBattlesWhileEnduring,
+ [DOME_BATTLE_STYLE_STATUS] = BattleDome_Text_StyleUpsetsFoesEmotionally,
+ [DOME_BATTLE_STYLE_STRAIGHTFORWARD] = BattleDome_Text_StyleStrongAndStraightforward,
+ [DOME_BATTLE_STYLE_AGGRESSIVE] = BattleDome_Text_StyleAggressivelyStrongMoves,
+ [DOME_BATTLE_STYLE_DEF] = BattleDome_Text_StyleCleverlyDodgesAttacks,
+ [DOME_BATTLE_STYLE_ENFEEBLE_HIGH] = BattleDome_Text_StyleUsesUpsettingMoves,
+ [DOME_BATTLE_STYLE_POPULAR_POWER] = BattleDome_Text_StyleUsesPopularMoves,
+ [DOME_BATTLE_STYLE_COMBO_LOW] = BattleDome_Text_StyleHasPowerfulComboMoves,
+ [DOME_BATTLE_STYLE_ACCURATE] = BattleDome_Text_StyleUsesHighProbabilityMoves,
+ [DOME_BATTLE_STYLE_POWERFUL] = BattleDome_Text_StyleAggressivelySpectacularMoves,
+ [DOME_BATTLE_STYLE_ATK_OVER_DEF] = BattleDome_Text_StyleEmphasizesOffenseOverDefense,
+ [DOME_BATTLE_STYLE_DEF_OVER_ATK] = BattleDome_Text_StyleEmphasizesDefenseOverOffense,
+ [DOME_BATTLE_STYLE_POPULAR_STRONG] = BattleDome_Text_StyleAttacksQuicklyStrongMoves,
+ [DOME_BATTLE_STYLE_EFFECTS] = BattleDome_Text_StyleUsesAddedEffectMoves,
+ [DOME_BATTLE_STYLE_BALANCED] = BattleDome_Text_StyleUsesBalancedMixOfMoves,
+ [DOME_BATTLE_STYLE_UNUSED1] = BattleDome_Text_StyleSampleMessage1,
+ [DOME_BATTLE_STYLE_UNUSED2] = BattleDome_Text_StyleSampleMessage2,
+ [DOME_BATTLE_STYLE_UNUSED3] = BattleDome_Text_StyleSampleMessage3,
+ [DOME_BATTLE_STYLE_UNUSED4] = BattleDome_Text_StyleSampleMessage4,
};
+// The second line of text on a trainers info card that gives information about their party's stat spread
static const u8 *const sBattleDomeOpponentStatsTexts[] =
{
- gBattleDomeOpponentStatsText1,
- gBattleDomeOpponentStatsText2,
- gBattleDomeOpponentStatsText3,
- gBattleDomeOpponentStatsText4,
- gBattleDomeOpponentStatsText5,
- gBattleDomeOpponentStatsText6,
- gBattleDomeOpponentStatsText7,
- gBattleDomeOpponentStatsText8,
- gBattleDomeOpponentStatsText9,
- gBattleDomeOpponentStatsText10,
- gBattleDomeOpponentStatsText11,
- gBattleDomeOpponentStatsText12,
- gBattleDomeOpponentStatsText13,
- gBattleDomeOpponentStatsText14,
- gBattleDomeOpponentStatsText15,
- gBattleDomeOpponentStatsText16,
- gBattleDomeOpponentStatsText17,
- gBattleDomeOpponentStatsText18,
- gBattleDomeOpponentStatsText19,
- gBattleDomeOpponentStatsText20,
- gBattleDomeOpponentStatsText21,
- gBattleDomeOpponentStatsText22,
- gBattleDomeOpponentStatsText23,
- gBattleDomeOpponentStatsText24,
- gBattleDomeOpponentStatsText25,
- gBattleDomeOpponentStatsText26,
- gBattleDomeOpponentStatsText27,
- gBattleDomeOpponentStatsText28,
- gBattleDomeOpponentStatsText29,
- gBattleDomeOpponentStatsText30,
- gBattleDomeOpponentStatsText31,
- gBattleDomeOpponentStatsText32,
- gBattleDomeOpponentStatsText33,
- gBattleDomeOpponentStatsText34,
- gBattleDomeOpponentStatsText35,
- gBattleDomeOpponentStatsText36,
- gBattleDomeOpponentStatsText37,
- gBattleDomeOpponentStatsText38,
- gBattleDomeOpponentStatsText39,
- gBattleDomeOpponentStatsText40,
- gBattleDomeOpponentStatsText41,
- gBattleDomeOpponentStatsText42,
- gBattleDomeOpponentStatsText43,
+ BattleDome_Text_EmphasizesHPAndAtk, // DOME_TEXT_TWO_GOOD_STATS and DOME_TEXT_HP start here
+ BattleDome_Text_EmphasizesHPAndDef,
+ BattleDome_Text_EmphasizesHPAndSpeed,
+ BattleDome_Text_EmphasizesHPAndSpAtk,
+ BattleDome_Text_EmphasizesHPAndSpDef,
+ BattleDome_Text_EmphasizesAtkAndDef, // DOME_TEXT_ATK starts here
+ BattleDome_Text_EmphasizesAtkAndSpeed,
+ BattleDome_Text_EmphasizesAtkAndSpAtk,
+ BattleDome_Text_EmphasizesAtkAndSpDef,
+ BattleDome_Text_EmphasizesDefAndSpeed, // DOME_TEXT_DEF starts here
+ BattleDome_Text_EmphasizesDefAndSpAtk,
+ BattleDome_Text_EmphasizesDefAndSpDef,
+ BattleDome_Text_EmphasizesSpeedAndSpAtk, // DOME_TEXT_SPEED starts here
+ BattleDome_Text_EmphasizesSpeedAndSpDef,
+ BattleDome_Text_EmphasizesSpAtkAndSpDef, // DOME_TEXT_SPATK starts here
+ BattleDome_Text_EmphasizesHP, // DOME_TEXT_ONE_GOOD_STAT starts here
+ BattleDome_Text_EmphasizesAtk,
+ BattleDome_Text_EmphasizesDef,
+ BattleDome_Text_EmphasizesSpeed,
+ BattleDome_Text_EmphasizesSpAtk,
+ BattleDome_Text_EmphasizesSpDef,
+ BattleDome_Text_NeglectsHPAndAtk, // DOME_TEXT_TWO_BAD_STATS starts here
+ BattleDome_Text_NeglectsHPAndDef,
+ BattleDome_Text_NeglectsHPAndSpeed,
+ BattleDome_Text_NeglectsHPAndSpAtk,
+ BattleDome_Text_NeglectsHPAndSpDef,
+ BattleDome_Text_NeglectsAtkAndDef,
+ BattleDome_Text_NeglectsAtkAndSpeed,
+ BattleDome_Text_NeglectsAtkAndSpAtk,
+ BattleDome_Text_NeglectsAtkAndSpDef,
+ BattleDome_Text_NeglectsDefAndSpeed,
+ BattleDome_Text_NeglectsDefAndSpAtk,
+ BattleDome_Text_NeglectsDefAndSpDef,
+ BattleDome_Text_NeglectsSpeedAndSpAtk,
+ BattleDome_Text_NeglectsSpeedAndSpDef,
+ BattleDome_Text_NeglectsSpAtkAndSpDef,
+ BattleDome_Text_NeglectsHP, // DOME_TEXT_ONE_BAD_STAT starts here
+ BattleDome_Text_NeglectsAtk,
+ BattleDome_Text_NeglectsDef,
+ BattleDome_Text_NeglectsSpeed,
+ BattleDome_Text_NeglectsSpAtk,
+ BattleDome_Text_NeglectsSpDef,
+ [DOME_TEXT_WELL_BALANCED] = BattleDome_Text_RaisesMonsWellBalanced,
};
-static const u8 sInfoTrainerMonX[] = {0x68, 0x88, 0x68};
-static const u8 sInfoTrainerMonY[] = {0x26, 0x3e, 0x4e};
-static const u8 gUnknown_0860D346[] = {0x00, 0x04, 0x00};
-
-static const u8 gUnknown_0860D349[] = {0x00, 0x05, 0x09, 0x0c, 0x0e, 0x00, 0x00};
-
-static const u8 *const sBattleDomeMatchNumberTexts[] =
-{
- gBattleDomeMatchNumberText1,
- gBattleDomeMatchNumberText2,
- gBattleDomeMatchNumberText3,
- gBattleDomeMatchNumberText4,
- gBattleDomeMatchNumberText5,
- gBattleDomeMatchNumberText6,
- gBattleDomeMatchNumberText7,
- gBattleDomeMatchNumberText8,
- gBattleDomeMatchNumberText9,
- gBattleDomeMatchNumberText10,
- gBattleDomeMatchNumberText11,
- gBattleDomeMatchNumberText12,
- gBattleDomeMatchNumberText13,
- gBattleDomeMatchNumberText14,
- gBattleDomeMatchNumberText15,
+static const u8 sInfoTrainerMonX[FRONTIER_PARTY_SIZE] = {104, 136, 104};
+static const u8 sInfoTrainerMonY[FRONTIER_PARTY_SIZE] = { 38, 62, 78};
+static const u8 sSpeciesNameTextYCoords[] = {0, 4, 0};
+
+// Offsets within sBattleDomeOpponentStatsTexts for stat combinations
+// SPDEF has no offset because by then all stat combinations have been reached, so it has no combination texts
+static const u8 sStatTextOffsets[NUM_STATS - 1] =
+{
+ DOME_TEXT_HP,
+ DOME_TEXT_ATK,
+ DOME_TEXT_DEF,
+ DOME_TEXT_SPEED,
+ DOME_TEXT_SPATK
+};
+
+static const u8 *const sBattleDomeMatchNumberTexts[DOME_TOURNAMENT_MATCHES_COUNT] =
+{
+ BattleDome_Text_Round1Match1,
+ BattleDome_Text_Round1Match2,
+ BattleDome_Text_Round1Match3,
+ BattleDome_Text_Round1Match4,
+ BattleDome_Text_Round1Match5,
+ BattleDome_Text_Round1Match6,
+ BattleDome_Text_Round1Match7,
+ BattleDome_Text_Round1Match8,
+ BattleDome_Text_Round2Match1,
+ BattleDome_Text_Round2Match2,
+ BattleDome_Text_Round2Match3,
+ BattleDome_Text_Round2Match4,
+ BattleDome_Text_SemifinalMatch1,
+ BattleDome_Text_SemifinalMatch2,
+ BattleDome_Text_FinalMatch,
};
static const u8 *const sBattleDomeWinTexts[] =
{
- gBattleDomeWinText1,
- gBattleDomeWinText2,
- gBattleDomeWinText3,
- gBattleDomeWinText4,
- gBattleDomeWinText5,
- gBattleDomeWinText6,
- gBattleDomeWinText7,
+ [DOME_TEXT_NO_WINNER_YET] = BattleDome_Text_LetTheBattleBegin,
+ [DOME_TEXT_WON_USING_MOVE] = BattleDome_Text_TrainerWonUsingMove,
+ [DOME_TEXT_CHAMP_USING_MOVE] = BattleDome_Text_TrainerBecameChamp,
+ [DOME_TEXT_WON_ON_FORFEIT] = BattleDome_Text_TrainerWonByDefault,
+ [DOME_TEXT_CHAMP_ON_FORFEIT] = BattleDome_Text_TrainerWonOutrightByDefault,
+ [DOME_TEXT_WON_NO_MOVES] = BattleDome_Text_TrainerWonNoMoves,
+ [DOME_TEXT_CHAMP_NO_MOVES] = BattleDome_Text_TrainerWonOutrightNoMoves,
};
-static const u8 sFirstTrainerMonX[] = {0x60, 0x60, 0x60};
-static const u8 sFirstTrainerMonY[] = {0x38, 0x50, 0x68};
-static const u8 sSecondTrainerMonX[] = {0x90, 0x90, 0x90};
-static const u8 sSecondTrainerMonY[] = {0x38, 0x50, 0x68};
-
-static const u8 gUnknown_0860D3B4[] = {0x00, 0x08, 0x0c, 0x04, 0x07, 0x0f, 0x0b, 0x03, 0x02, 0x0a, 0x0e, 0x06, 0x05, 0x0d, 0x09, 0x01};
-
-static const u8 gUnknown_0860D3C4[][3] =
-{
- {0x00, 0x02, 0x00},
- {0x02, 0x02, 0x00},
- {0x04, 0x02, 0x00},
- {0x06, 0x02, 0x00},
- {0x08, 0x02, 0x00},
- {0x0a, 0x02, 0x00},
- {0x0c, 0x02, 0x00},
- {0x0e, 0x02, 0x00},
- {0x00, 0x04, 0x01},
- {0x04, 0x04, 0x01},
- {0x08, 0x04, 0x01},
- {0x0c, 0x04, 0x01},
- {0x00, 0x08, 0x02},
- {0x08, 0x08, 0x02},
- {0x00, 0x10, 0x03},
+static const u8 sLeftTrainerMonX[FRONTIER_PARTY_SIZE] = { 96, 96, 96};
+static const u8 sLeftTrainerMonY[FRONTIER_PARTY_SIZE] = { 56, 80, 104};
+static const u8 sRightTrainerMonX[FRONTIER_PARTY_SIZE] = {144, 144, 144};
+static const u8 sRightTrainerMonY[FRONTIER_PARTY_SIZE] = { 56, 80, 104};
+
+// Duplicate of sTourneyTreeTrainerIds
+static const u8 sTourneyTreeTrainerIds2[DOME_TOURNAMENT_TRAINERS_COUNT] = {0, 8, 12, 4, 7, 15, 11, 3, 2, 10, 14, 6, 5, 13, 9, 1};
+
+// The number of possible trainers that could be competing in a given match
+#define NUM_POSSIBLE_MATCH_TRAINERS(round) (DOME_TOURNAMENT_TRAINERS_COUNT / (1 << (DOME_ROUNDS_COUNT - round - 1)))
+
+// The range of tournament trainers to check as possible participants in a given match
+// Given by the offset in sCompetitorRangeByMatch[][0], the number of trainers in sCompetitorRangeByMatch[][1], and the round
+static const u8 sCompetitorRangeByMatch[DOME_TOURNAMENT_MATCHES_COUNT][3] =
+{
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1) * 0, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1), DOME_ROUND1},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1) * 1, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1), DOME_ROUND1},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1) * 2, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1), DOME_ROUND1},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1) * 3, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1), DOME_ROUND1},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1) * 4, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1), DOME_ROUND1},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1) * 5, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1), DOME_ROUND1},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1) * 6, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1), DOME_ROUND1},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1) * 7, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND1), DOME_ROUND1},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND2) * 0, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND2), DOME_ROUND2},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND2) * 1, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND2), DOME_ROUND2},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND2) * 2, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND2), DOME_ROUND2},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND2) * 3, NUM_POSSIBLE_MATCH_TRAINERS(DOME_ROUND2), DOME_ROUND2},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_SEMIFINAL) * 0, NUM_POSSIBLE_MATCH_TRAINERS(DOME_SEMIFINAL), DOME_SEMIFINAL},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_SEMIFINAL) * 1, NUM_POSSIBLE_MATCH_TRAINERS(DOME_SEMIFINAL), DOME_SEMIFINAL},
+ { NUM_POSSIBLE_MATCH_TRAINERS(DOME_FINAL) * 0, NUM_POSSIBLE_MATCH_TRAINERS(DOME_FINAL), DOME_FINAL},
};
-static const u8 gUnknown_0860D3F1[][2] =
-{
- {0x00, 0x00},
- {0x01, 0x70},
- {0x01, 0x00},
- {0x00, 0x70},
- {0x00, 0x30},
- {0x01, 0x40},
- {0x01, 0x30},
- {0x00, 0x40},
- {0x00, 0x10},
- {0x01, 0x60},
- {0x01, 0x10},
- {0x00, 0x60},
- {0x00, 0x20},
- {0x01, 0x50},
- {0x01, 0x20},
- {0x00, 0x50},
+// 1st value is the windowId (0 for left column, 1 for right column)
+// 2nd value is the y coord
+static const u8 sTrainerNamePositions[DOME_TOURNAMENT_TRAINERS_COUNT][2] =
+{
+ { 0, 0},
+ { 1, 112},
+ { 1, 0},
+ { 0, 112},
+ { 0, 48},
+ { 1, 64},
+ { 1, 48},
+ { 0, 64},
+ { 0, 16},
+ { 1, 96},
+ { 1, 16},
+ { 0, 96},
+ { 0, 32},
+ { 1, 80},
+ { 1, 32},
+ { 0, 80},
};
-static const u8 gUnknown_0860D411[][2] =
-{
- {0x44, 0x21},
- {0x44, 0x31},
- {0x44, 0x41},
- {0x44, 0x51},
- {0x44, 0x61},
- {0x44, 0x71},
- {0x44, 0x81},
- {0x44, 0x91},
- {0xac, 0x21},
- {0xac, 0x31},
- {0xac, 0x41},
- {0xac, 0x51},
- {0xac, 0x61},
- {0xac, 0x71},
- {0xac, 0x81},
- {0xac, 0x91},
- {0x57, 0x29},
- {0x57, 0x49},
- {0x57, 0x69},
- {0x57, 0x89},
- {0x99, 0x29},
- {0x99, 0x49},
- {0x99, 0x69},
- {0x99, 0x89},
- {0x5f, 0x39},
- {0x5f, 0x79},
- {0x91, 0x39},
- {0x91, 0x79},
- {0x67, 0x59},
- {0x89, 0x59},
- {0x78, 0x59},
+// Coords for the pokeballs on the tourney tree that act as buttons to view trainer/match info
+static const u8 sTourneyTreePokeballCoords[DOME_TOURNAMENT_TRAINERS_COUNT + DOME_TOURNAMENT_MATCHES_COUNT][2] =
+{
+ { 68, 33}, // Left side trainers
+ { 68, 49},
+ { 68, 65},
+ { 68, 81},
+ { 68, 97},
+ { 68, 113},
+ { 68, 129},
+ { 68, 145},
+ {172, 33}, // Right side trainers
+ {172, 49},
+ {172, 65},
+ {172, 81},
+ {172, 97},
+ {172, 113},
+ {172, 129},
+ {172, 145},
+ { 87, 41}, // Left side Round 1 matches
+ { 87, 73},
+ { 87, 105},
+ { 87, 137},
+ {153, 41}, // Right side Round 1 matches
+ {153, 73},
+ {153, 105},
+ {153, 137},
+ { 95, 57}, // Left side Round 2 matches
+ { 95, 121},
+ {145, 57}, // Right side Round 2 matches
+ {145, 121},
+ {103, 89}, // Left side semifinal match
+ {137, 89}, // Right side semifinal match
+ {120, 89}, // Final match
};
-static const struct UnkStruct_860DD10 gUnknown_0860d450[] =
+// Each of these line sections define the position of the advancement line on the tourney tree for the victor of that round
+// The trainers here are numbered by tourney ID (rank/seed) and ordered according to where they start on the tourney tree
+#define LINESECTION_ROUND1_TRAINER1(lastSrc) \
+ {.src = 0x6021, .y = 0x04, .x = 0x09}, \
+ {.src = 0x6023, .y = 0x04, .x = 0x0a}, \
+ {.src = 0x6047, .y = 0x05, .x = 0x0a}, \
+ {.src = lastSrc, .y = 0x05, .x = 0x0b},
+
+#define LINESECTION_ROUND1_TRAINER9(lastSrc) \
+ {.src = 0x6021, .y = 0x06, .x = 0x09}, \
+ {.src = 0x6021, .y = 0x06, .x = 0x0a}, \
+ {.src = 0x6027, .y = 0x05, .x = 0x0a}, \
+ {.src = lastSrc, .y = 0x05, .x = 0x0b},
+
+#define LINESECTION_ROUND1_TRAINER13(lastSrc) \
+ {.src = 0x6021, .y = 0x08, .x = 0x09}, \
+ {.src = 0x6023, .y = 0x08, .x = 0x0a}, \
+ {.src = 0x6047, .y = 0x09, .x = 0x0a}, \
+ {.src = lastSrc, .y = 0x09, .x = 0x0b},
+
+#define LINESECTION_ROUND1_TRAINER5(lastSrc) \
+ {.src = 0x6021, .y = 0x0a, .x = 0x09}, \
+ {.src = 0x6021, .y = 0x0a, .x = 0x0a}, \
+ {.src = 0x6027, .y = 0x09, .x = 0x0a}, \
+ {.src = lastSrc, .y = 0x09, .x = 0x0b},
+
+#define LINESECTION_ROUND1_TRAINER8(lastSrc) \
+ {.src = 0x6021, .y = 0x0c, .x = 0x09}, \
+ {.src = 0x6023, .y = 0x0c, .x = 0x0a}, \
+ {.src = 0x6047, .y = 0x0d, .x = 0x0a}, \
+ {.src = lastSrc, .y = 0x0d, .x = 0x0b},
+
+#define LINESECTION_ROUND1_TRAINER16(lastSrc) \
+ {.src = 0x6021, .y = 0x0e, .x = 0x09}, \
+ {.src = 0x6021, .y = 0x0e, .x = 0x0a}, \
+ {.src = 0x6027, .y = 0x0d, .x = 0x0a}, \
+ {.src = lastSrc, .y = 0x0d, .x = 0x0b},
+
+#define LINESECTION_ROUND1_TRAINER12(lastSrc) \
+ {.src = 0x6021, .y = 0x10, .x = 0x09}, \
+ {.src = 0x6023, .y = 0x10, .x = 0x0a}, \
+ {.src = 0x6047, .y = 0x11, .x = 0x0a}, \
+ {.src = lastSrc, .y = 0x11, .x = 0x0b},
+
+#define LINESECTION_ROUND1_TRAINER4(lastSrc) \
+ {.src = 0x602b, .y = 0x12, .x = 0x09}, \
+ {.src = 0x602b, .y = 0x12, .x = 0x0a}, \
+ {.src = 0x6027, .y = 0x11, .x = 0x0a}, \
+ {.src = lastSrc, .y = 0x11, .x = 0x0b},
+
+#define LINESECTION_ROUND1_TRAINER3(lastSrc) \
+ {.src = 0x6021, .y = 0x04, .x = 0x14}, \
+ {.src = 0x6025, .y = 0x04, .x = 0x13}, \
+ {.src = 0x6049, .y = 0x05, .x = 0x13}, \
+ {.src = lastSrc, .y = 0x05, .x = 0x12},
+
+#define LINESECTION_ROUND1_TRAINER11(lastSrc) \
+ {.src = 0x6021, .y = 0x06, .x = 0x14}, \
+ {.src = 0x6021, .y = 0x06, .x = 0x13}, \
+ {.src = 0x6029, .y = 0x05, .x = 0x13}, \
+ {.src = lastSrc, .y = 0x05, .x = 0x12},
+
+#define LINESECTION_ROUND1_TRAINER15(lastSrc) \
+ {.src = 0x6021, .y = 0x08, .x = 0x14}, \
+ {.src = 0x6025, .y = 0x08, .x = 0x13}, \
+ {.src = 0x6049, .y = 0x09, .x = 0x13}, \
+ {.src = lastSrc, .y = 0x09, .x = 0x12},
+
+#define LINESECTION_ROUND1_TRAINER7(lastSrc) \
+ {.src = 0x6021, .y = 0x0a, .x = 0x14}, \
+ {.src = 0x6021, .y = 0x0a, .x = 0x13}, \
+ {.src = 0x6029, .y = 0x09, .x = 0x13}, \
+ {.src = lastSrc, .y = 0x09, .x = 0x12},
+
+#define LINESECTION_ROUND1_TRAINER6(lastSrc) \
+ {.src = 0x6021, .y = 0x0c, .x = 0x14}, \
+ {.src = 0x6025, .y = 0x0c, .x = 0x13}, \
+ {.src = 0x6049, .y = 0x0d, .x = 0x13}, \
+ {.src = lastSrc, .y = 0x0d, .x = 0x12},
+
+#define LINESECTION_ROUND1_TRAINER14(lastSrc) \
+ {.src = 0x6021, .y = 0x0e, .x = 0x14}, \
+ {.src = 0x6021, .y = 0x0e, .x = 0x13}, \
+ {.src = 0x6029, .y = 0x0d, .x = 0x13}, \
+ {.src = lastSrc, .y = 0x0d, .x = 0x12},
+
+#define LINESECTION_ROUND1_TRAINER10(lastSrc) \
+ {.src = 0x6021, .y = 0x10, .x = 0x14}, \
+ {.src = 0x6025, .y = 0x10, .x = 0x13}, \
+ {.src = 0x6049, .y = 0x11, .x = 0x13}, \
+ {.src = lastSrc, .y = 0x11, .x = 0x12},
+
+#define LINESECTION_ROUND1_TRAINER2(lastSrc) \
+ {.src = 0x602b, .y = 0x12, .x = 0x14}, \
+ {.src = 0x602b, .y = 0x12, .x = 0x13}, \
+ {.src = 0x6029, .y = 0x11, .x = 0x13}, \
+ {.src = lastSrc, .y = 0x11, .x = 0x12},
+
+#define LINESECTION_ROUND2_MATCH1(lastSrc) \
+ {.src = 0x6027, .y = 0x06, .x = 0x0b}, \
+ {.src = 0x6047, .y = 0x07, .x = 0x0b}, \
+ {.src = lastSrc, .y = 0x07, .x = 0x0c},
+
+#define LINESECTION_ROUND2_MATCH2(lastSrc) \
+ {.src = 0x6027, .y = 0x08, .x = 0x0b}, \
+ {.src = 0x6027, .y = 0x07, .x = 0x0b}, \
+ {.src = lastSrc, .y = 0x07, .x = 0x0c},
+
+#define LINESECTION_ROUND2_MATCH3(lastSrc) \
+ {.src = 0x6027, .y = 0x0e, .x = 0x0b}, \
+ {.src = 0x6047, .y = 0x0f, .x = 0x0b}, \
+ {.src = lastSrc, .y = 0x0f, .x = 0x0c},
+
+#define LINESECTION_ROUND2_MATCH4(lastSrc) \
+ {.src = 0x6027, .y = 0x10, .x = 0x0b}, \
+ {.src = 0x6027, .y = 0x0f, .x = 0x0b}, \
+ {.src = lastSrc, .y = 0x0f, .x = 0x0c},
+
+#define LINESECTION_ROUND2_MATCH5(lastSrc) \
+ {.src = 0x6029, .y = 0x06, .x = 0x12}, \
+ {.src = 0x6049, .y = 0x07, .x = 0x12}, \
+ {.src = lastSrc, .y = 0x07, .x = 0x11},
+
+#define LINESECTION_ROUND2_MATCH6(lastSrc) \
+ {.src = 0x6029, .y = 0x08, .x = 0x12}, \
+ {.src = 0x6029, .y = 0x07, .x = 0x12}, \
+ {.src = lastSrc, .y = 0x07, .x = 0x11},
+
+#define LINESECTION_ROUND2_MATCH7(lastSrc) \
+ {.src = 0x6029, .y = 0x0e, .x = 0x12}, \
+ {.src = 0x6049, .y = 0x0f, .x = 0x12}, \
+ {.src = lastSrc, .y = 0x0f, .x = 0x11},
+
+#define LINESECTION_ROUND2_MATCH8(lastSrc) \
+ {.src = 0x6029, .y = 0x10, .x = 0x12}, \
+ {.src = 0x6029, .y = 0x0f, .x = 0x12}, \
+ {.src = lastSrc, .y = 0x0f, .x = 0x11},
+
+#define LINESECTION_SEMIFINAL_TOP_LEFT \
+ {.src = 0x6027, .y = 0x08, .x = 0x0c}, \
+ {.src = 0x6027, .y = 0x09, .x = 0x0c}, \
+ {.src = 0x6027, .y = 0x0a, .x = 0x0c}, \
+ {.src = 0x603b, .y = 0x0b, .x = 0x0c},
+
+#define LINESECTION_SEMIFINAL_BOTTOM_LEFT \
+ {.src = 0x6033, .y = 0x0e, .x = 0x0c}, \
+ {.src = 0x6032, .y = 0x0d, .x = 0x0c}, \
+ {.src = 0x6031, .y = 0x0c, .x = 0x0c}, \
+ {.src = 0x6030, .y = 0x0b, .x = 0x0c},
+
+#define LINESECTION_SEMIFINAL_TOP_RIGHT \
+ {.src = 0x6029, .y = 0x08, .x = 0x11}, \
+ {.src = 0x6029, .y = 0x09, .x = 0x11}, \
+ {.src = 0x6029, .y = 0x0a, .x = 0x11}, \
+ {.src = 0x603c, .y = 0x0b, .x = 0x11},
+
+#define LINESECTION_SEMIFINAL_BOTTOM_RIGHT \
+ {.src = 0x6038, .y = 0x0e, .x = 0x11}, \
+ {.src = 0x6037, .y = 0x0d, .x = 0x11}, \
+ {.src = 0x6036, .y = 0x0c, .x = 0x11}, \
+ {.src = 0x6035, .y = 0x0b, .x = 0x11},
+
+#define LINESECTION_FINAL_LEFT \
+ {.src = 0x602c, .y = 0x0b, .x = 0x0d}, \
+ {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+
+#define LINESECTION_FINAL_RIGHT \
+ {.src = 0x602f, .y = 0x0b, .x = 0x10}, \
+ {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+
+
+static const struct TourneyTreeLineSection sLineSectionTrainer1Round1[] =
{
- {.src = 0x6021, .y = 0x04, .x = 0x09},
- {.src = 0x6023, .y = 0x04, .x = 0x0a},
- {.src = 0x6047, .y = 0x05, .x = 0x0a},
- {.src = 0x6043, .y = 0x05, .x = 0x0b},
+ LINESECTION_ROUND1_TRAINER1(0x6043)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d460[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer1Round2[] =
{
- {.src = 0x6021, .y = 0x04, .x = 0x09},
- {.src = 0x6023, .y = 0x04, .x = 0x0a},
- {.src = 0x6047, .y = 0x05, .x = 0x0a},
- {.src = 0x6023, .y = 0x05, .x = 0x0b},
- {.src = 0x6027, .y = 0x06, .x = 0x0b},
- {.src = 0x6047, .y = 0x07, .x = 0x0b},
- {.src = 0x6043, .y = 0x07, .x = 0x0c},
+ LINESECTION_ROUND1_TRAINER1(0x6023)
+ LINESECTION_ROUND2_MATCH1(0x6043)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d47c[] =
-{
- {.src = 0x6021, .y = 0x04, .x = 0x09},
- {.src = 0x6023, .y = 0x04, .x = 0x0a},
- {.src = 0x6047, .y = 0x05, .x = 0x0a},
- {.src = 0x6023, .y = 0x05, .x = 0x0b},
- {.src = 0x6027, .y = 0x06, .x = 0x0b},
- {.src = 0x6047, .y = 0x07, .x = 0x0b},
- {.src = 0x6023, .y = 0x07, .x = 0x0c},
- {.src = 0x6027, .y = 0x08, .x = 0x0c},
- {.src = 0x6027, .y = 0x09, .x = 0x0c},
- {.src = 0x6027, .y = 0x0a, .x = 0x0c},
- {.src = 0x603b, .y = 0x0b, .x = 0x0c},
+static const struct TourneyTreeLineSection sLineSectionTrainer1Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER1(0x6023)
+ LINESECTION_ROUND2_MATCH1(0x6023)
+ LINESECTION_SEMIFINAL_TOP_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d4a8[] =
-{
- {.src = 0x6021, .y = 0x04, .x = 0x09},
- {.src = 0x6023, .y = 0x04, .x = 0x0a},
- {.src = 0x6047, .y = 0x05, .x = 0x0a},
- {.src = 0x6023, .y = 0x05, .x = 0x0b},
- {.src = 0x6027, .y = 0x06, .x = 0x0b},
- {.src = 0x6047, .y = 0x07, .x = 0x0b},
- {.src = 0x6023, .y = 0x07, .x = 0x0c},
- {.src = 0x6027, .y = 0x08, .x = 0x0c},
- {.src = 0x6027, .y = 0x09, .x = 0x0c},
- {.src = 0x6027, .y = 0x0a, .x = 0x0c},
- {.src = 0x603b, .y = 0x0b, .x = 0x0c},
- {.src = 0x602c, .y = 0x0b, .x = 0x0d},
- {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+static const struct TourneyTreeLineSection sLineSectionTrainer1Final[] =
+{
+ LINESECTION_ROUND1_TRAINER1(0x6023)
+ LINESECTION_ROUND2_MATCH1(0x6023)
+ LINESECTION_SEMIFINAL_TOP_LEFT
+ LINESECTION_FINAL_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d4dc[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer9Round1[] =
{
- {.src = 0x6021, .y = 0x06, .x = 0x09},
- {.src = 0x6021, .y = 0x06, .x = 0x0a},
- {.src = 0x6027, .y = 0x05, .x = 0x0a},
- {.src = 0x6043, .y = 0x05, .x = 0x0b},
+ LINESECTION_ROUND1_TRAINER9(0x6043)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d4ec[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer9Round2[] =
{
- {.src = 0x6021, .y = 0x06, .x = 0x09},
- {.src = 0x6021, .y = 0x06, .x = 0x0a},
- {.src = 0x6027, .y = 0x05, .x = 0x0a},
- {.src = 0x6023, .y = 0x05, .x = 0x0b},
- {.src = 0x6027, .y = 0x06, .x = 0x0b},
- {.src = 0x6047, .y = 0x07, .x = 0x0b},
- {.src = 0x6043, .y = 0x07, .x = 0x0c},
+ LINESECTION_ROUND1_TRAINER9(0x6023)
+ LINESECTION_ROUND2_MATCH1(0x6043)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d508[] =
-{
- {.src = 0x6021, .y = 0x06, .x = 0x09},
- {.src = 0x6021, .y = 0x06, .x = 0x0a},
- {.src = 0x6027, .y = 0x05, .x = 0x0a},
- {.src = 0x6023, .y = 0x05, .x = 0x0b},
- {.src = 0x6027, .y = 0x06, .x = 0x0b},
- {.src = 0x6047, .y = 0x07, .x = 0x0b},
- {.src = 0x6023, .y = 0x07, .x = 0x0c},
- {.src = 0x6027, .y = 0x08, .x = 0x0c},
- {.src = 0x6027, .y = 0x09, .x = 0x0c},
- {.src = 0x6027, .y = 0x0a, .x = 0x0c},
- {.src = 0x603b, .y = 0x0b, .x = 0x0c},
+static const struct TourneyTreeLineSection sLineSectionTrainer9Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER9(0x6023)
+ LINESECTION_ROUND2_MATCH1(0x6023)
+ LINESECTION_SEMIFINAL_TOP_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d534[] =
-{
- {.src = 0x6021, .y = 0x06, .x = 0x09},
- {.src = 0x6021, .y = 0x06, .x = 0x0a},
- {.src = 0x6027, .y = 0x05, .x = 0x0a},
- {.src = 0x6023, .y = 0x05, .x = 0x0b},
- {.src = 0x6027, .y = 0x06, .x = 0x0b},
- {.src = 0x6047, .y = 0x07, .x = 0x0b},
- {.src = 0x6023, .y = 0x07, .x = 0x0c},
- {.src = 0x6027, .y = 0x08, .x = 0x0c},
- {.src = 0x6027, .y = 0x09, .x = 0x0c},
- {.src = 0x6027, .y = 0x0a, .x = 0x0c},
- {.src = 0x603b, .y = 0x0b, .x = 0x0c},
- {.src = 0x602c, .y = 0x0b, .x = 0x0d},
- {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+static const struct TourneyTreeLineSection sLineSectionTrainer9Final[] =
+{
+ LINESECTION_ROUND1_TRAINER9(0x6023)
+ LINESECTION_ROUND2_MATCH1(0x6023)
+ LINESECTION_SEMIFINAL_TOP_LEFT
+ LINESECTION_FINAL_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d568[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer13Round1[] =
{
- {.src = 0x6021, .y = 0x08, .x = 0x09},
- {.src = 0x6023, .y = 0x08, .x = 0x0a},
- {.src = 0x6047, .y = 0x09, .x = 0x0a},
- {.src = 0x6021, .y = 0x09, .x = 0x0b},
+ LINESECTION_ROUND1_TRAINER13(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d578[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer13Round2[] =
{
- {.src = 0x6021, .y = 0x08, .x = 0x09},
- {.src = 0x6023, .y = 0x08, .x = 0x0a},
- {.src = 0x6047, .y = 0x09, .x = 0x0a},
- {.src = 0x6021, .y = 0x09, .x = 0x0b},
- {.src = 0x6027, .y = 0x08, .x = 0x0b},
- {.src = 0x6027, .y = 0x07, .x = 0x0b},
- {.src = 0x6043, .y = 0x07, .x = 0x0c},
+ LINESECTION_ROUND1_TRAINER13(0x6021)
+ LINESECTION_ROUND2_MATCH2(0x6043)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d594[] =
-{
- {.src = 0x6021, .y = 0x08, .x = 0x09},
- {.src = 0x6023, .y = 0x08, .x = 0x0a},
- {.src = 0x6047, .y = 0x09, .x = 0x0a},
- {.src = 0x6021, .y = 0x09, .x = 0x0b},
- {.src = 0x6027, .y = 0x08, .x = 0x0b},
- {.src = 0x6027, .y = 0x07, .x = 0x0b},
- {.src = 0x6023, .y = 0x07, .x = 0x0c},
- {.src = 0x6027, .y = 0x08, .x = 0x0c},
- {.src = 0x6027, .y = 0x09, .x = 0x0c},
- {.src = 0x6027, .y = 0x0a, .x = 0x0c},
- {.src = 0x603b, .y = 0x0b, .x = 0x0c},
+static const struct TourneyTreeLineSection sLineSectionTrainer13Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER13(0x6021)
+ LINESECTION_ROUND2_MATCH2(0x6023)
+ LINESECTION_SEMIFINAL_TOP_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d5c0[] =
-{
- {.src = 0x6021, .y = 0x08, .x = 0x09},
- {.src = 0x6023, .y = 0x08, .x = 0x0a},
- {.src = 0x6047, .y = 0x09, .x = 0x0a},
- {.src = 0x6021, .y = 0x09, .x = 0x0b},
- {.src = 0x6027, .y = 0x08, .x = 0x0b},
- {.src = 0x6027, .y = 0x07, .x = 0x0b},
- {.src = 0x6023, .y = 0x07, .x = 0x0c},
- {.src = 0x6027, .y = 0x08, .x = 0x0c},
- {.src = 0x6027, .y = 0x09, .x = 0x0c},
- {.src = 0x6027, .y = 0x0a, .x = 0x0c},
- {.src = 0x603b, .y = 0x0b, .x = 0x0c},
- {.src = 0x602c, .y = 0x0b, .x = 0x0d},
- {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+static const struct TourneyTreeLineSection sLineSectionTrainer13Final[] =
+{
+ LINESECTION_ROUND1_TRAINER13(0x6021)
+ LINESECTION_ROUND2_MATCH2(0x6023)
+ LINESECTION_SEMIFINAL_TOP_LEFT
+ LINESECTION_FINAL_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d5f4[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer5Round1[] =
{
- {.src = 0x6021, .y = 0x0a, .x = 0x09},
- {.src = 0x6021, .y = 0x0a, .x = 0x0a},
- {.src = 0x6027, .y = 0x09, .x = 0x0a},
- {.src = 0x6021, .y = 0x09, .x = 0x0b},
+ LINESECTION_ROUND1_TRAINER5(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d604[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer5Round2[] =
{
- {.src = 0x6021, .y = 0x0a, .x = 0x09},
- {.src = 0x6021, .y = 0x0a, .x = 0x0a},
- {.src = 0x6027, .y = 0x09, .x = 0x0a},
- {.src = 0x6021, .y = 0x09, .x = 0x0b},
- {.src = 0x6027, .y = 0x08, .x = 0x0b},
- {.src = 0x6027, .y = 0x07, .x = 0x0b},
- {.src = 0x6043, .y = 0x07, .x = 0x0c},
+ LINESECTION_ROUND1_TRAINER5(0x6021)
+ LINESECTION_ROUND2_MATCH2(0x6043)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d620[] =
-{
- {.src = 0x6021, .y = 0x0a, .x = 0x09},
- {.src = 0x6021, .y = 0x0a, .x = 0x0a},
- {.src = 0x6027, .y = 0x09, .x = 0x0a},
- {.src = 0x6021, .y = 0x09, .x = 0x0b},
- {.src = 0x6027, .y = 0x08, .x = 0x0b},
- {.src = 0x6027, .y = 0x07, .x = 0x0b},
- {.src = 0x6023, .y = 0x07, .x = 0x0c},
- {.src = 0x6027, .y = 0x08, .x = 0x0c},
- {.src = 0x6027, .y = 0x09, .x = 0x0c},
- {.src = 0x6027, .y = 0x0a, .x = 0x0c},
- {.src = 0x603b, .y = 0x0b, .x = 0x0c},
+static const struct TourneyTreeLineSection sLineSectionTrainer5Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER5(0x6021)
+ LINESECTION_ROUND2_MATCH2(0x6023)
+ LINESECTION_SEMIFINAL_TOP_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d64c[] =
-{
- {.src = 0x6021, .y = 0x0a, .x = 0x09},
- {.src = 0x6021, .y = 0x0a, .x = 0x0a},
- {.src = 0x6027, .y = 0x09, .x = 0x0a},
- {.src = 0x6021, .y = 0x09, .x = 0x0b},
- {.src = 0x6027, .y = 0x08, .x = 0x0b},
- {.src = 0x6027, .y = 0x07, .x = 0x0b},
- {.src = 0x6023, .y = 0x07, .x = 0x0c},
- {.src = 0x6027, .y = 0x08, .x = 0x0c},
- {.src = 0x6027, .y = 0x09, .x = 0x0c},
- {.src = 0x6027, .y = 0x0a, .x = 0x0c},
- {.src = 0x603b, .y = 0x0b, .x = 0x0c},
- {.src = 0x602c, .y = 0x0b, .x = 0x0d},
- {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+static const struct TourneyTreeLineSection sLineSectionTrainer5Final[] =
+{
+ LINESECTION_ROUND1_TRAINER5(0x6021)
+ LINESECTION_ROUND2_MATCH2(0x6023)
+ LINESECTION_SEMIFINAL_TOP_LEFT
+ LINESECTION_FINAL_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d680[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer8Round1[] =
{
- {.src = 0x6021, .y = 0x0c, .x = 0x09},
- {.src = 0x6023, .y = 0x0c, .x = 0x0a},
- {.src = 0x6047, .y = 0x0d, .x = 0x0a},
- {.src = 0x6043, .y = 0x0d, .x = 0x0b},
+ LINESECTION_ROUND1_TRAINER8(0x6043)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d690[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer8Round2[] =
{
- {.src = 0x6021, .y = 0x0c, .x = 0x09},
- {.src = 0x6023, .y = 0x0c, .x = 0x0a},
- {.src = 0x6047, .y = 0x0d, .x = 0x0a},
- {.src = 0x6023, .y = 0x0d, .x = 0x0b},
- {.src = 0x6027, .y = 0x0e, .x = 0x0b},
- {.src = 0x6047, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
+ LINESECTION_ROUND1_TRAINER8(0x6023)
+ LINESECTION_ROUND2_MATCH3(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d6ac[] =
-{
- {.src = 0x6021, .y = 0x0c, .x = 0x09},
- {.src = 0x6023, .y = 0x0c, .x = 0x0a},
- {.src = 0x6047, .y = 0x0d, .x = 0x0a},
- {.src = 0x6023, .y = 0x0d, .x = 0x0b},
- {.src = 0x6027, .y = 0x0e, .x = 0x0b},
- {.src = 0x6047, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
- {.src = 0x6033, .y = 0x0e, .x = 0x0c},
- {.src = 0x6032, .y = 0x0d, .x = 0x0c},
- {.src = 0x6031, .y = 0x0c, .x = 0x0c},
- {.src = 0x6030, .y = 0x0b, .x = 0x0c},
+static const struct TourneyTreeLineSection sLineSectionTrainer8Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER8(0x6023)
+ LINESECTION_ROUND2_MATCH3(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d6d8[] =
-{
- {.src = 0x6021, .y = 0x0c, .x = 0x09},
- {.src = 0x6023, .y = 0x0c, .x = 0x0a},
- {.src = 0x6047, .y = 0x0d, .x = 0x0a},
- {.src = 0x6023, .y = 0x0d, .x = 0x0b},
- {.src = 0x6027, .y = 0x0e, .x = 0x0b},
- {.src = 0x6047, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
- {.src = 0x6033, .y = 0x0e, .x = 0x0c},
- {.src = 0x6032, .y = 0x0d, .x = 0x0c},
- {.src = 0x6031, .y = 0x0c, .x = 0x0c},
- {.src = 0x6030, .y = 0x0b, .x = 0x0c},
- {.src = 0x602c, .y = 0x0b, .x = 0x0d},
- {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+static const struct TourneyTreeLineSection sLineSectionTrainer8Final[] =
+{
+ LINESECTION_ROUND1_TRAINER8(0x6023)
+ LINESECTION_ROUND2_MATCH3(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_LEFT
+ LINESECTION_FINAL_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d70c[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer16Round1[] =
{
- {.src = 0x6021, .y = 0x0e, .x = 0x09},
- {.src = 0x6021, .y = 0x0e, .x = 0x0a},
- {.src = 0x6027, .y = 0x0d, .x = 0x0a},
- {.src = 0x6043, .y = 0x0d, .x = 0x0b},
+ LINESECTION_ROUND1_TRAINER16(0x6043)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d71c[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer16Round2[] =
{
- {.src = 0x6021, .y = 0x0e, .x = 0x09},
- {.src = 0x6021, .y = 0x0e, .x = 0x0a},
- {.src = 0x6027, .y = 0x0d, .x = 0x0a},
- {.src = 0x6023, .y = 0x0d, .x = 0x0b},
- {.src = 0x6027, .y = 0x0e, .x = 0x0b},
- {.src = 0x6047, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
+ LINESECTION_ROUND1_TRAINER16(0x6023)
+ LINESECTION_ROUND2_MATCH3(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d738[] =
-{
- {.src = 0x6021, .y = 0x0e, .x = 0x09},
- {.src = 0x6021, .y = 0x0e, .x = 0x0a},
- {.src = 0x6027, .y = 0x0d, .x = 0x0a},
- {.src = 0x6023, .y = 0x0d, .x = 0x0b},
- {.src = 0x6027, .y = 0x0e, .x = 0x0b},
- {.src = 0x6047, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
- {.src = 0x6033, .y = 0x0e, .x = 0x0c},
- {.src = 0x6032, .y = 0x0d, .x = 0x0c},
- {.src = 0x6031, .y = 0x0c, .x = 0x0c},
- {.src = 0x6030, .y = 0x0b, .x = 0x0c},
+static const struct TourneyTreeLineSection sLineSectionTrainer16Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER16(0x6023)
+ LINESECTION_ROUND2_MATCH3(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d764[] =
-{
- {.src = 0x6021, .y = 0x0e, .x = 0x09},
- {.src = 0x6021, .y = 0x0e, .x = 0x0a},
- {.src = 0x6027, .y = 0x0d, .x = 0x0a},
- {.src = 0x6023, .y = 0x0d, .x = 0x0b},
- {.src = 0x6027, .y = 0x0e, .x = 0x0b},
- {.src = 0x6047, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
- {.src = 0x6033, .y = 0x0e, .x = 0x0c},
- {.src = 0x6032, .y = 0x0d, .x = 0x0c},
- {.src = 0x6031, .y = 0x0c, .x = 0x0c},
- {.src = 0x6030, .y = 0x0b, .x = 0x0c},
- {.src = 0x602c, .y = 0x0b, .x = 0x0d},
- {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+static const struct TourneyTreeLineSection sLineSectionTrainer16Final[] =
+{
+ LINESECTION_ROUND1_TRAINER16(0x6023)
+ LINESECTION_ROUND2_MATCH3(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_LEFT
+ LINESECTION_FINAL_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d798[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer12Round1[] =
{
- {.src = 0x6021, .y = 0x10, .x = 0x09},
- {.src = 0x6023, .y = 0x10, .x = 0x0a},
- {.src = 0x6047, .y = 0x11, .x = 0x0a},
- {.src = 0x6021, .y = 0x11, .x = 0x0b},
+ LINESECTION_ROUND1_TRAINER12(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d7a8[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer12Round2[] =
{
- {.src = 0x6021, .y = 0x10, .x = 0x09},
- {.src = 0x6023, .y = 0x10, .x = 0x0a},
- {.src = 0x6047, .y = 0x11, .x = 0x0a},
- {.src = 0x6021, .y = 0x11, .x = 0x0b},
- {.src = 0x6027, .y = 0x10, .x = 0x0b},
- {.src = 0x6027, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
+ LINESECTION_ROUND1_TRAINER12(0x6021)
+ LINESECTION_ROUND2_MATCH4(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d7c4[] =
-{
- {.src = 0x6021, .y = 0x10, .x = 0x09},
- {.src = 0x6023, .y = 0x10, .x = 0x0a},
- {.src = 0x6047, .y = 0x11, .x = 0x0a},
- {.src = 0x6021, .y = 0x11, .x = 0x0b},
- {.src = 0x6027, .y = 0x10, .x = 0x0b},
- {.src = 0x6027, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
- {.src = 0x6033, .y = 0x0e, .x = 0x0c},
- {.src = 0x6032, .y = 0x0d, .x = 0x0c},
- {.src = 0x6031, .y = 0x0c, .x = 0x0c},
- {.src = 0x6030, .y = 0x0b, .x = 0x0c},
+static const struct TourneyTreeLineSection sLineSectionTrainer12Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER12(0x6021)
+ LINESECTION_ROUND2_MATCH4(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d7f0[] =
-{
- {.src = 0x6021, .y = 0x10, .x = 0x09},
- {.src = 0x6023, .y = 0x10, .x = 0x0a},
- {.src = 0x6047, .y = 0x11, .x = 0x0a},
- {.src = 0x6021, .y = 0x11, .x = 0x0b},
- {.src = 0x6027, .y = 0x10, .x = 0x0b},
- {.src = 0x6027, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
- {.src = 0x6033, .y = 0x0e, .x = 0x0c},
- {.src = 0x6032, .y = 0x0d, .x = 0x0c},
- {.src = 0x6031, .y = 0x0c, .x = 0x0c},
- {.src = 0x6030, .y = 0x0b, .x = 0x0c},
- {.src = 0x602c, .y = 0x0b, .x = 0x0d},
- {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+static const struct TourneyTreeLineSection sLineSectionTrainer12Final[] =
+{
+ LINESECTION_ROUND1_TRAINER12(0x6021)
+ LINESECTION_ROUND2_MATCH4(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_LEFT
+ LINESECTION_FINAL_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d824[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer4Round1[] =
{
- {.src = 0x602b, .y = 0x12, .x = 0x09},
- {.src = 0x602b, .y = 0x12, .x = 0x0a},
- {.src = 0x6027, .y = 0x11, .x = 0x0a},
- {.src = 0x6021, .y = 0x11, .x = 0x0b},
+ LINESECTION_ROUND1_TRAINER4(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d834[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer4Round2[] =
{
- {.src = 0x602b, .y = 0x12, .x = 0x09},
- {.src = 0x602b, .y = 0x12, .x = 0x0a},
- {.src = 0x6027, .y = 0x11, .x = 0x0a},
- {.src = 0x6021, .y = 0x11, .x = 0x0b},
- {.src = 0x6027, .y = 0x10, .x = 0x0b},
- {.src = 0x6027, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
+ LINESECTION_ROUND1_TRAINER4(0x6021)
+ LINESECTION_ROUND2_MATCH4(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d850[] =
-{
- {.src = 0x602b, .y = 0x12, .x = 0x09},
- {.src = 0x602b, .y = 0x12, .x = 0x0a},
- {.src = 0x6027, .y = 0x11, .x = 0x0a},
- {.src = 0x6021, .y = 0x11, .x = 0x0b},
- {.src = 0x6027, .y = 0x10, .x = 0x0b},
- {.src = 0x6027, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
- {.src = 0x6033, .y = 0x0e, .x = 0x0c},
- {.src = 0x6032, .y = 0x0d, .x = 0x0c},
- {.src = 0x6031, .y = 0x0c, .x = 0x0c},
- {.src = 0x6030, .y = 0x0b, .x = 0x0c},
+static const struct TourneyTreeLineSection sLineSectionTrainer4Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER4(0x6021)
+ LINESECTION_ROUND2_MATCH4(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d87c[] =
-{
- {.src = 0x602b, .y = 0x12, .x = 0x09},
- {.src = 0x602b, .y = 0x12, .x = 0x0a},
- {.src = 0x6027, .y = 0x11, .x = 0x0a},
- {.src = 0x6021, .y = 0x11, .x = 0x0b},
- {.src = 0x6027, .y = 0x10, .x = 0x0b},
- {.src = 0x6027, .y = 0x0f, .x = 0x0b},
- {.src = 0x6021, .y = 0x0f, .x = 0x0c},
- {.src = 0x6033, .y = 0x0e, .x = 0x0c},
- {.src = 0x6032, .y = 0x0d, .x = 0x0c},
- {.src = 0x6031, .y = 0x0c, .x = 0x0c},
- {.src = 0x6030, .y = 0x0b, .x = 0x0c},
- {.src = 0x602c, .y = 0x0b, .x = 0x0d},
- {.src = 0x602d, .y = 0x0b, .x = 0x0e},
+static const struct TourneyTreeLineSection sLineSectionTrainer4Final[] =
+{
+ LINESECTION_ROUND1_TRAINER4(0x6021)
+ LINESECTION_ROUND2_MATCH4(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_LEFT
+ LINESECTION_FINAL_LEFT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d8b0[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer3Round1[] =
{
- {.src = 0x6021, .y = 0x04, .x = 0x14},
- {.src = 0x6025, .y = 0x04, .x = 0x13},
- {.src = 0x6049, .y = 0x05, .x = 0x13},
- {.src = 0x6045, .y = 0x05, .x = 0x12},
+ LINESECTION_ROUND1_TRAINER3(0x6045)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d8c0[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer3Round2[] =
{
- {.src = 0x6021, .y = 0x04, .x = 0x14},
- {.src = 0x6025, .y = 0x04, .x = 0x13},
- {.src = 0x6049, .y = 0x05, .x = 0x13},
- {.src = 0x6025, .y = 0x05, .x = 0x12},
- {.src = 0x6029, .y = 0x06, .x = 0x12},
- {.src = 0x6049, .y = 0x07, .x = 0x12},
- {.src = 0x6045, .y = 0x07, .x = 0x11},
+ LINESECTION_ROUND1_TRAINER3(0x6025)
+ LINESECTION_ROUND2_MATCH5(0x6045)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d8dc[] =
-{
- {.src = 0x6021, .y = 0x04, .x = 0x14},
- {.src = 0x6025, .y = 0x04, .x = 0x13},
- {.src = 0x6049, .y = 0x05, .x = 0x13},
- {.src = 0x6025, .y = 0x05, .x = 0x12},
- {.src = 0x6029, .y = 0x06, .x = 0x12},
- {.src = 0x6049, .y = 0x07, .x = 0x12},
- {.src = 0x6025, .y = 0x07, .x = 0x11},
- {.src = 0x6029, .y = 0x08, .x = 0x11},
- {.src = 0x6029, .y = 0x09, .x = 0x11},
- {.src = 0x6029, .y = 0x0a, .x = 0x11},
- {.src = 0x603c, .y = 0x0b, .x = 0x11},
+static const struct TourneyTreeLineSection sLineSectionTrainer3Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER3(0x6025)
+ LINESECTION_ROUND2_MATCH5(0x6025)
+ LINESECTION_SEMIFINAL_TOP_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d908[] =
-{
- {.src = 0x6021, .y = 0x04, .x = 0x14},
- {.src = 0x6025, .y = 0x04, .x = 0x13},
- {.src = 0x6049, .y = 0x05, .x = 0x13},
- {.src = 0x6025, .y = 0x05, .x = 0x12},
- {.src = 0x6029, .y = 0x06, .x = 0x12},
- {.src = 0x6049, .y = 0x07, .x = 0x12},
- {.src = 0x6025, .y = 0x07, .x = 0x11},
- {.src = 0x6029, .y = 0x08, .x = 0x11},
- {.src = 0x6029, .y = 0x09, .x = 0x11},
- {.src = 0x6029, .y = 0x0a, .x = 0x11},
- {.src = 0x603c, .y = 0x0b, .x = 0x11},
- {.src = 0x602f, .y = 0x0b, .x = 0x10},
- {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+static const struct TourneyTreeLineSection sLineSectionTrainer3Final[] =
+{
+ LINESECTION_ROUND1_TRAINER3(0x6025)
+ LINESECTION_ROUND2_MATCH5(0x6025)
+ LINESECTION_SEMIFINAL_TOP_RIGHT
+ LINESECTION_FINAL_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d93c[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer11Round1[] =
{
- {.src = 0x6021, .y = 0x06, .x = 0x14},
- {.src = 0x6021, .y = 0x06, .x = 0x13},
- {.src = 0x6029, .y = 0x05, .x = 0x13},
- {.src = 0x6045, .y = 0x05, .x = 0x12},
+ LINESECTION_ROUND1_TRAINER11(0x6045)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d94c[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer11Round2[] =
{
- {.src = 0x6021, .y = 0x06, .x = 0x14},
- {.src = 0x6021, .y = 0x06, .x = 0x13},
- {.src = 0x6029, .y = 0x05, .x = 0x13},
- {.src = 0x6025, .y = 0x05, .x = 0x12},
- {.src = 0x6029, .y = 0x06, .x = 0x12},
- {.src = 0x6049, .y = 0x07, .x = 0x12},
- {.src = 0x6045, .y = 0x07, .x = 0x11},
+ LINESECTION_ROUND1_TRAINER11(0x6025)
+ LINESECTION_ROUND2_MATCH5(0x6045)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d968[] =
-{
- {.src = 0x6021, .y = 0x06, .x = 0x14},
- {.src = 0x6021, .y = 0x06, .x = 0x13},
- {.src = 0x6029, .y = 0x05, .x = 0x13},
- {.src = 0x6025, .y = 0x05, .x = 0x12},
- {.src = 0x6029, .y = 0x06, .x = 0x12},
- {.src = 0x6049, .y = 0x07, .x = 0x12},
- {.src = 0x6025, .y = 0x07, .x = 0x11},
- {.src = 0x6029, .y = 0x08, .x = 0x11},
- {.src = 0x6029, .y = 0x09, .x = 0x11},
- {.src = 0x6029, .y = 0x0a, .x = 0x11},
- {.src = 0x603c, .y = 0x0b, .x = 0x11},
+static const struct TourneyTreeLineSection sLineSectionTrainer11Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER11(0x6025)
+ LINESECTION_ROUND2_MATCH5(0x6025)
+ LINESECTION_SEMIFINAL_TOP_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d994[] =
-{
- {.src = 0x6021, .y = 0x06, .x = 0x14},
- {.src = 0x6021, .y = 0x06, .x = 0x13},
- {.src = 0x6029, .y = 0x05, .x = 0x13},
- {.src = 0x6025, .y = 0x05, .x = 0x12},
- {.src = 0x6029, .y = 0x06, .x = 0x12},
- {.src = 0x6049, .y = 0x07, .x = 0x12},
- {.src = 0x6025, .y = 0x07, .x = 0x11},
- {.src = 0x6029, .y = 0x08, .x = 0x11},
- {.src = 0x6029, .y = 0x09, .x = 0x11},
- {.src = 0x6029, .y = 0x0a, .x = 0x11},
- {.src = 0x603c, .y = 0x0b, .x = 0x11},
- {.src = 0x602f, .y = 0x0b, .x = 0x10},
- {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+static const struct TourneyTreeLineSection sLineSectionTrainer11Final[] =
+{
+ LINESECTION_ROUND1_TRAINER11(0x6025)
+ LINESECTION_ROUND2_MATCH5(0x6025)
+ LINESECTION_SEMIFINAL_TOP_RIGHT
+ LINESECTION_FINAL_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860d9c8[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer15Round1[] =
{
- {.src = 0x6021, .y = 0x08, .x = 0x14},
- {.src = 0x6025, .y = 0x08, .x = 0x13},
- {.src = 0x6049, .y = 0x09, .x = 0x13},
- {.src = 0x6021, .y = 0x09, .x = 0x12},
+ LINESECTION_ROUND1_TRAINER15(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d9d8[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer15Round2[] =
{
- {.src = 0x6021, .y = 0x08, .x = 0x14},
- {.src = 0x6025, .y = 0x08, .x = 0x13},
- {.src = 0x6049, .y = 0x09, .x = 0x13},
- {.src = 0x6021, .y = 0x09, .x = 0x12},
- {.src = 0x6029, .y = 0x08, .x = 0x12},
- {.src = 0x6029, .y = 0x07, .x = 0x12},
- {.src = 0x6045, .y = 0x07, .x = 0x11},
+ LINESECTION_ROUND1_TRAINER15(0x6021)
+ LINESECTION_ROUND2_MATCH6(0x6045)
};
-static const struct UnkStruct_860DD10 gUnknown_0860d9f4[] =
-{
- {.src = 0x6021, .y = 0x08, .x = 0x14},
- {.src = 0x6025, .y = 0x08, .x = 0x13},
- {.src = 0x6049, .y = 0x09, .x = 0x13},
- {.src = 0x6021, .y = 0x09, .x = 0x12},
- {.src = 0x6029, .y = 0x08, .x = 0x12},
- {.src = 0x6029, .y = 0x07, .x = 0x12},
- {.src = 0x6025, .y = 0x07, .x = 0x11},
- {.src = 0x6029, .y = 0x08, .x = 0x11},
- {.src = 0x6029, .y = 0x09, .x = 0x11},
- {.src = 0x6029, .y = 0x0a, .x = 0x11},
- {.src = 0x603c, .y = 0x0b, .x = 0x11},
+static const struct TourneyTreeLineSection sLineSectionTrainer15Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER15(0x6021)
+ LINESECTION_ROUND2_MATCH6(0x6025)
+ LINESECTION_SEMIFINAL_TOP_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860da20[] =
-{
- {.src = 0x6021, .y = 0x08, .x = 0x14},
- {.src = 0x6025, .y = 0x08, .x = 0x13},
- {.src = 0x6049, .y = 0x09, .x = 0x13},
- {.src = 0x6021, .y = 0x09, .x = 0x12},
- {.src = 0x6029, .y = 0x08, .x = 0x12},
- {.src = 0x6029, .y = 0x07, .x = 0x12},
- {.src = 0x6025, .y = 0x07, .x = 0x11},
- {.src = 0x6029, .y = 0x08, .x = 0x11},
- {.src = 0x6029, .y = 0x09, .x = 0x11},
- {.src = 0x6029, .y = 0x0a, .x = 0x11},
- {.src = 0x603c, .y = 0x0b, .x = 0x11},
- {.src = 0x602f, .y = 0x0b, .x = 0x10},
- {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+static const struct TourneyTreeLineSection sLineSectionTrainer15Final[] =
+{
+ LINESECTION_ROUND1_TRAINER15(0x6021)
+ LINESECTION_ROUND2_MATCH6(0x6025)
+ LINESECTION_SEMIFINAL_TOP_RIGHT
+ LINESECTION_FINAL_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860da54[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer7Round1[] =
{
- {.src = 0x6021, .y = 0x0a, .x = 0x14},
- {.src = 0x6021, .y = 0x0a, .x = 0x13},
- {.src = 0x6029, .y = 0x09, .x = 0x13},
- {.src = 0x6021, .y = 0x09, .x = 0x12},
+ LINESECTION_ROUND1_TRAINER7(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860da64[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer7Round2[] =
{
- {.src = 0x6021, .y = 0x0a, .x = 0x14},
- {.src = 0x6021, .y = 0x0a, .x = 0x13},
- {.src = 0x6029, .y = 0x09, .x = 0x13},
- {.src = 0x6021, .y = 0x09, .x = 0x12},
- {.src = 0x6029, .y = 0x08, .x = 0x12},
- {.src = 0x6029, .y = 0x07, .x = 0x12},
- {.src = 0x6045, .y = 0x07, .x = 0x11},
+ LINESECTION_ROUND1_TRAINER7(0x6021)
+ LINESECTION_ROUND2_MATCH6(0x6045)
};
-static const struct UnkStruct_860DD10 gUnknown_0860da80[] =
-{
- {.src = 0x6021, .y = 0x0a, .x = 0x14},
- {.src = 0x6021, .y = 0x0a, .x = 0x13},
- {.src = 0x6029, .y = 0x09, .x = 0x13},
- {.src = 0x6021, .y = 0x09, .x = 0x12},
- {.src = 0x6029, .y = 0x08, .x = 0x12},
- {.src = 0x6029, .y = 0x07, .x = 0x12},
- {.src = 0x6025, .y = 0x07, .x = 0x11},
- {.src = 0x6029, .y = 0x08, .x = 0x11},
- {.src = 0x6029, .y = 0x09, .x = 0x11},
- {.src = 0x6029, .y = 0x0a, .x = 0x11},
- {.src = 0x603c, .y = 0x0b, .x = 0x11},
+static const struct TourneyTreeLineSection sLineSectionTrainer7Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER7(0x6021)
+ LINESECTION_ROUND2_MATCH6(0x6025)
+ LINESECTION_SEMIFINAL_TOP_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860daac[] =
-{
- {.src = 0x6021, .y = 0x0a, .x = 0x14},
- {.src = 0x6021, .y = 0x0a, .x = 0x13},
- {.src = 0x6029, .y = 0x09, .x = 0x13},
- {.src = 0x6021, .y = 0x09, .x = 0x12},
- {.src = 0x6029, .y = 0x08, .x = 0x12},
- {.src = 0x6029, .y = 0x07, .x = 0x12},
- {.src = 0x6025, .y = 0x07, .x = 0x11},
- {.src = 0x6029, .y = 0x08, .x = 0x11},
- {.src = 0x6029, .y = 0x09, .x = 0x11},
- {.src = 0x6029, .y = 0x0a, .x = 0x11},
- {.src = 0x603c, .y = 0x0b, .x = 0x11},
- {.src = 0x602f, .y = 0x0b, .x = 0x10},
- {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+static const struct TourneyTreeLineSection sLineSectionTrainer7Final[] =
+{
+ LINESECTION_ROUND1_TRAINER7(0x6021)
+ LINESECTION_ROUND2_MATCH6(0x6025)
+ LINESECTION_SEMIFINAL_TOP_RIGHT
+ LINESECTION_FINAL_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860dae0[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer6Round1[] =
{
- {.src = 0x6021, .y = 0x0c, .x = 0x14},
- {.src = 0x6025, .y = 0x0c, .x = 0x13},
- {.src = 0x6049, .y = 0x0d, .x = 0x13},
- {.src = 0x6045, .y = 0x0d, .x = 0x12},
+ LINESECTION_ROUND1_TRAINER6(0x6045)
};
-static const struct UnkStruct_860DD10 gUnknown_0860daf0[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer6Round2[] =
{
- {.src = 0x6021, .y = 0x0c, .x = 0x14},
- {.src = 0x6025, .y = 0x0c, .x = 0x13},
- {.src = 0x6049, .y = 0x0d, .x = 0x13},
- {.src = 0x6025, .y = 0x0d, .x = 0x12},
- {.src = 0x6029, .y = 0x0e, .x = 0x12},
- {.src = 0x6049, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
+ LINESECTION_ROUND1_TRAINER6(0x6025)
+ LINESECTION_ROUND2_MATCH7(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860db0c[] =
-{
- {.src = 0x6021, .y = 0x0c, .x = 0x14},
- {.src = 0x6025, .y = 0x0c, .x = 0x13},
- {.src = 0x6049, .y = 0x0d, .x = 0x13},
- {.src = 0x6025, .y = 0x0d, .x = 0x12},
- {.src = 0x6029, .y = 0x0e, .x = 0x12},
- {.src = 0x6049, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
- {.src = 0x6038, .y = 0x0e, .x = 0x11},
- {.src = 0x6037, .y = 0x0d, .x = 0x11},
- {.src = 0x6036, .y = 0x0c, .x = 0x11},
- {.src = 0x6035, .y = 0x0b, .x = 0x11},
+static const struct TourneyTreeLineSection sLineSectionTrainer6Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER6(0x6025)
+ LINESECTION_ROUND2_MATCH7(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860db38[] =
-{
- {.src = 0x6021, .y = 0x0c, .x = 0x14},
- {.src = 0x6025, .y = 0x0c, .x = 0x13},
- {.src = 0x6049, .y = 0x0d, .x = 0x13},
- {.src = 0x6025, .y = 0x0d, .x = 0x12},
- {.src = 0x6029, .y = 0x0e, .x = 0x12},
- {.src = 0x6049, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
- {.src = 0x6038, .y = 0x0e, .x = 0x11},
- {.src = 0x6037, .y = 0x0d, .x = 0x11},
- {.src = 0x6036, .y = 0x0c, .x = 0x11},
- {.src = 0x6035, .y = 0x0b, .x = 0x11},
- {.src = 0x602f, .y = 0x0b, .x = 0x10},
- {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+static const struct TourneyTreeLineSection sLineSectionTrainer6Final[] =
+{
+ LINESECTION_ROUND1_TRAINER6(0x6025)
+ LINESECTION_ROUND2_MATCH7(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_RIGHT
+ LINESECTION_FINAL_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860db6c[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer14Round1[] =
{
- {.src = 0x6021, .y = 0x0e, .x = 0x14},
- {.src = 0x6021, .y = 0x0e, .x = 0x13},
- {.src = 0x6029, .y = 0x0d, .x = 0x13},
- {.src = 0x6045, .y = 0x0d, .x = 0x12},
+ LINESECTION_ROUND1_TRAINER14(0x6045)
};
-static const struct UnkStruct_860DD10 gUnknown_0860db7c[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer14Round2[] =
{
- {.src = 0x6021, .y = 0x0e, .x = 0x14},
- {.src = 0x6021, .y = 0x0e, .x = 0x13},
- {.src = 0x6029, .y = 0x0d, .x = 0x13},
- {.src = 0x6025, .y = 0x0d, .x = 0x12},
- {.src = 0x6029, .y = 0x0e, .x = 0x12},
- {.src = 0x6049, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
+ LINESECTION_ROUND1_TRAINER14(0x6025)
+ LINESECTION_ROUND2_MATCH7(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860db98[] =
-{
- {.src = 0x6021, .y = 0x0e, .x = 0x14},
- {.src = 0x6021, .y = 0x0e, .x = 0x13},
- {.src = 0x6029, .y = 0x0d, .x = 0x13},
- {.src = 0x6025, .y = 0x0d, .x = 0x12},
- {.src = 0x6029, .y = 0x0e, .x = 0x12},
- {.src = 0x6049, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
- {.src = 0x6038, .y = 0x0e, .x = 0x11},
- {.src = 0x6037, .y = 0x0d, .x = 0x11},
- {.src = 0x6036, .y = 0x0c, .x = 0x11},
- {.src = 0x6035, .y = 0x0b, .x = 0x11},
+static const struct TourneyTreeLineSection sLineSectionTrainer14Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER14(0x6025)
+ LINESECTION_ROUND2_MATCH7(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860dbc4[] =
-{
- {.src = 0x6021, .y = 0x0e, .x = 0x14},
- {.src = 0x6021, .y = 0x0e, .x = 0x13},
- {.src = 0x6029, .y = 0x0d, .x = 0x13},
- {.src = 0x6025, .y = 0x0d, .x = 0x12},
- {.src = 0x6029, .y = 0x0e, .x = 0x12},
- {.src = 0x6049, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
- {.src = 0x6038, .y = 0x0e, .x = 0x11},
- {.src = 0x6037, .y = 0x0d, .x = 0x11},
- {.src = 0x6036, .y = 0x0c, .x = 0x11},
- {.src = 0x6035, .y = 0x0b, .x = 0x11},
- {.src = 0x602f, .y = 0x0b, .x = 0x10},
- {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+static const struct TourneyTreeLineSection sLineSectionTrainer14Final[] =
+{
+ LINESECTION_ROUND1_TRAINER14(0x6025)
+ LINESECTION_ROUND2_MATCH7(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_RIGHT
+ LINESECTION_FINAL_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860dbf8[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer10Round1[] =
{
- {.src = 0x6021, .y = 0x10, .x = 0x14},
- {.src = 0x6025, .y = 0x10, .x = 0x13},
- {.src = 0x6049, .y = 0x11, .x = 0x13},
- {.src = 0x6021, .y = 0x11, .x = 0x12},
+ LINESECTION_ROUND1_TRAINER10(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860dc08[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer10Round2[] =
{
- {.src = 0x6021, .y = 0x10, .x = 0x14},
- {.src = 0x6025, .y = 0x10, .x = 0x13},
- {.src = 0x6049, .y = 0x11, .x = 0x13},
- {.src = 0x6021, .y = 0x11, .x = 0x12},
- {.src = 0x6029, .y = 0x10, .x = 0x12},
- {.src = 0x6029, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
+ LINESECTION_ROUND1_TRAINER10(0x6021)
+ LINESECTION_ROUND2_MATCH8(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860dc24[] =
-{
- {.src = 0x6021, .y = 0x10, .x = 0x14},
- {.src = 0x6025, .y = 0x10, .x = 0x13},
- {.src = 0x6049, .y = 0x11, .x = 0x13},
- {.src = 0x6021, .y = 0x11, .x = 0x12},
- {.src = 0x6029, .y = 0x10, .x = 0x12},
- {.src = 0x6029, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
- {.src = 0x6038, .y = 0x0e, .x = 0x11},
- {.src = 0x6037, .y = 0x0d, .x = 0x11},
- {.src = 0x6036, .y = 0x0c, .x = 0x11},
- {.src = 0x6035, .y = 0x0b, .x = 0x11},
+static const struct TourneyTreeLineSection sLineSectionTrainer10Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER10(0x6021)
+ LINESECTION_ROUND2_MATCH8(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860dc50[] =
-{
- {.src = 0x6021, .y = 0x10, .x = 0x14},
- {.src = 0x6025, .y = 0x10, .x = 0x13},
- {.src = 0x6049, .y = 0x11, .x = 0x13},
- {.src = 0x6021, .y = 0x11, .x = 0x12},
- {.src = 0x6029, .y = 0x10, .x = 0x12},
- {.src = 0x6029, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
- {.src = 0x6038, .y = 0x0e, .x = 0x11},
- {.src = 0x6037, .y = 0x0d, .x = 0x11},
- {.src = 0x6036, .y = 0x0c, .x = 0x11},
- {.src = 0x6035, .y = 0x0b, .x = 0x11},
- {.src = 0x602f, .y = 0x0b, .x = 0x10},
- {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+static const struct TourneyTreeLineSection sLineSectionTrainer10Final[] =
+{
+ LINESECTION_ROUND1_TRAINER10(0x6021)
+ LINESECTION_ROUND2_MATCH8(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_RIGHT
+ LINESECTION_FINAL_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860dc84[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer2Round1[] =
{
- {.src = 0x602b, .y = 0x12, .x = 0x14},
- {.src = 0x602b, .y = 0x12, .x = 0x13},
- {.src = 0x6029, .y = 0x11, .x = 0x13},
- {.src = 0x6021, .y = 0x11, .x = 0x12},
+ LINESECTION_ROUND1_TRAINER2(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860dc94[] =
+static const struct TourneyTreeLineSection sLineSectionTrainer2Round2[] =
{
- {.src = 0x602b, .y = 0x12, .x = 0x14},
- {.src = 0x602b, .y = 0x12, .x = 0x13},
- {.src = 0x6029, .y = 0x11, .x = 0x13},
- {.src = 0x6021, .y = 0x11, .x = 0x12},
- {.src = 0x6029, .y = 0x10, .x = 0x12},
- {.src = 0x6029, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
+ LINESECTION_ROUND1_TRAINER2(0x6021)
+ LINESECTION_ROUND2_MATCH8(0x6021)
};
-static const struct UnkStruct_860DD10 gUnknown_0860dcb0[] =
-{
- {.src = 0x602b, .y = 0x12, .x = 0x14},
- {.src = 0x602b, .y = 0x12, .x = 0x13},
- {.src = 0x6029, .y = 0x11, .x = 0x13},
- {.src = 0x6021, .y = 0x11, .x = 0x12},
- {.src = 0x6029, .y = 0x10, .x = 0x12},
- {.src = 0x6029, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
- {.src = 0x6038, .y = 0x0e, .x = 0x11},
- {.src = 0x6037, .y = 0x0d, .x = 0x11},
- {.src = 0x6036, .y = 0x0c, .x = 0x11},
- {.src = 0x6035, .y = 0x0b, .x = 0x11},
+static const struct TourneyTreeLineSection sLineSectionTrainer2Semifinal[] =
+{
+ LINESECTION_ROUND1_TRAINER2(0x6021)
+ LINESECTION_ROUND2_MATCH8(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_RIGHT
};
-static const struct UnkStruct_860DD10 gUnknown_0860dcdc[] =
-{
- {.src = 0x602b, .y = 0x12, .x = 0x14},
- {.src = 0x602b, .y = 0x12, .x = 0x13},
- {.src = 0x6029, .y = 0x11, .x = 0x13},
- {.src = 0x6021, .y = 0x11, .x = 0x12},
- {.src = 0x6029, .y = 0x10, .x = 0x12},
- {.src = 0x6029, .y = 0x0f, .x = 0x12},
- {.src = 0x6021, .y = 0x0f, .x = 0x11},
- {.src = 0x6038, .y = 0x0e, .x = 0x11},
- {.src = 0x6037, .y = 0x0d, .x = 0x11},
- {.src = 0x6036, .y = 0x0c, .x = 0x11},
- {.src = 0x6035, .y = 0x0b, .x = 0x11},
- {.src = 0x602f, .y = 0x0b, .x = 0x10},
- {.src = 0x602e, .y = 0x0b, .x = 0x0f},
+static const struct TourneyTreeLineSection sLineSectionTrainer2Final[] =
+{
+ LINESECTION_ROUND1_TRAINER2(0x6021)
+ LINESECTION_ROUND2_MATCH8(0x6021)
+ LINESECTION_SEMIFINAL_BOTTOM_RIGHT
+ LINESECTION_FINAL_RIGHT
};
-static const struct UnkStruct_860DD10 * const gUnknown_0860DD10[DOME_TOURNAMENT_TRAINERS_COUNT][4] =
-{
- {gUnknown_0860d450, gUnknown_0860d460, gUnknown_0860d47c, gUnknown_0860d4a8},
- {gUnknown_0860dc84, gUnknown_0860dc94, gUnknown_0860dcb0, gUnknown_0860dcdc},
- {gUnknown_0860d8b0, gUnknown_0860d8c0, gUnknown_0860d8dc, gUnknown_0860d908},
- {gUnknown_0860d824, gUnknown_0860d834, gUnknown_0860d850, gUnknown_0860d87c},
- {gUnknown_0860d5f4, gUnknown_0860d604, gUnknown_0860d620, gUnknown_0860d64c},
- {gUnknown_0860dae0, gUnknown_0860daf0, gUnknown_0860db0c, gUnknown_0860db38},
- {gUnknown_0860da54, gUnknown_0860da64, gUnknown_0860da80, gUnknown_0860daac},
- {gUnknown_0860d680, gUnknown_0860d690, gUnknown_0860d6ac, gUnknown_0860d6d8},
- {gUnknown_0860d4dc, gUnknown_0860d4ec, gUnknown_0860d508, gUnknown_0860d534},
- {gUnknown_0860dbf8, gUnknown_0860dc08, gUnknown_0860dc24, gUnknown_0860dc50},
- {gUnknown_0860d93c, gUnknown_0860d94c, gUnknown_0860d968, gUnknown_0860d994},
- {gUnknown_0860d798, gUnknown_0860d7a8, gUnknown_0860d7c4, gUnknown_0860d7f0},
- {gUnknown_0860d568, gUnknown_0860d578, gUnknown_0860d594, gUnknown_0860d5c0},
- {gUnknown_0860db6c, gUnknown_0860db7c, gUnknown_0860db98, gUnknown_0860dbc4},
- {gUnknown_0860d9c8, gUnknown_0860d9d8, gUnknown_0860d9f4, gUnknown_0860da20},
- {gUnknown_0860d70c, gUnknown_0860d71c, gUnknown_0860d738, gUnknown_0860d764},
+static const struct TourneyTreeLineSection *const sTourneyTreeLineSections[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] =
+{
+ {sLineSectionTrainer1Round1, sLineSectionTrainer1Round2, sLineSectionTrainer1Semifinal, sLineSectionTrainer1Final},
+ {sLineSectionTrainer2Round1, sLineSectionTrainer2Round2, sLineSectionTrainer2Semifinal, sLineSectionTrainer2Final},
+ {sLineSectionTrainer3Round1, sLineSectionTrainer3Round2, sLineSectionTrainer3Semifinal, sLineSectionTrainer3Final},
+ {sLineSectionTrainer4Round1, sLineSectionTrainer4Round2, sLineSectionTrainer4Semifinal, sLineSectionTrainer4Final},
+ {sLineSectionTrainer5Round1, sLineSectionTrainer5Round2, sLineSectionTrainer5Semifinal, sLineSectionTrainer5Final},
+ {sLineSectionTrainer6Round1, sLineSectionTrainer6Round2, sLineSectionTrainer6Semifinal, sLineSectionTrainer6Final},
+ {sLineSectionTrainer7Round1, sLineSectionTrainer7Round2, sLineSectionTrainer7Semifinal, sLineSectionTrainer7Final},
+ {sLineSectionTrainer8Round1, sLineSectionTrainer8Round2, sLineSectionTrainer8Semifinal, sLineSectionTrainer8Final},
+ {sLineSectionTrainer9Round1, sLineSectionTrainer9Round2, sLineSectionTrainer9Semifinal, sLineSectionTrainer9Final},
+ {sLineSectionTrainer10Round1, sLineSectionTrainer10Round2, sLineSectionTrainer10Semifinal, sLineSectionTrainer10Final},
+ {sLineSectionTrainer11Round1, sLineSectionTrainer11Round2, sLineSectionTrainer11Semifinal, sLineSectionTrainer11Final},
+ {sLineSectionTrainer12Round1, sLineSectionTrainer12Round2, sLineSectionTrainer12Semifinal, sLineSectionTrainer12Final},
+ {sLineSectionTrainer13Round1, sLineSectionTrainer13Round2, sLineSectionTrainer13Semifinal, sLineSectionTrainer13Final},
+ {sLineSectionTrainer14Round1, sLineSectionTrainer14Round2, sLineSectionTrainer14Semifinal, sLineSectionTrainer14Final},
+ {sLineSectionTrainer15Round1, sLineSectionTrainer15Round2, sLineSectionTrainer15Semifinal, sLineSectionTrainer15Final},
+ {sLineSectionTrainer16Round1, sLineSectionTrainer16Round2, sLineSectionTrainer16Semifinal, sLineSectionTrainer16Final},
};
-static const u8 gUnknown_0860DE10[DOME_TOURNAMENT_TRAINERS_COUNT][4] =
-{
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
- {0x04, 0x07, 0x0b, 0x0d},
+static const u8 sTourneyTreeLineSectionArrayCounts[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] =
+{
+ {ARRAY_COUNT(sLineSectionTrainer1Round1), ARRAY_COUNT(sLineSectionTrainer1Round2), ARRAY_COUNT(sLineSectionTrainer1Semifinal), ARRAY_COUNT(sLineSectionTrainer1Final)},
+ {ARRAY_COUNT(sLineSectionTrainer2Round1), ARRAY_COUNT(sLineSectionTrainer2Round2), ARRAY_COUNT(sLineSectionTrainer2Semifinal), ARRAY_COUNT(sLineSectionTrainer2Final)},
+ {ARRAY_COUNT(sLineSectionTrainer3Round1), ARRAY_COUNT(sLineSectionTrainer3Round2), ARRAY_COUNT(sLineSectionTrainer3Semifinal), ARRAY_COUNT(sLineSectionTrainer3Final)},
+ {ARRAY_COUNT(sLineSectionTrainer4Round1), ARRAY_COUNT(sLineSectionTrainer4Round2), ARRAY_COUNT(sLineSectionTrainer4Semifinal), ARRAY_COUNT(sLineSectionTrainer4Final)},
+ {ARRAY_COUNT(sLineSectionTrainer5Round1), ARRAY_COUNT(sLineSectionTrainer5Round2), ARRAY_COUNT(sLineSectionTrainer5Semifinal), ARRAY_COUNT(sLineSectionTrainer5Final)},
+ {ARRAY_COUNT(sLineSectionTrainer6Round1), ARRAY_COUNT(sLineSectionTrainer6Round2), ARRAY_COUNT(sLineSectionTrainer6Semifinal), ARRAY_COUNT(sLineSectionTrainer6Final)},
+ {ARRAY_COUNT(sLineSectionTrainer7Round1), ARRAY_COUNT(sLineSectionTrainer7Round2), ARRAY_COUNT(sLineSectionTrainer7Semifinal), ARRAY_COUNT(sLineSectionTrainer7Final)},
+ {ARRAY_COUNT(sLineSectionTrainer8Round1), ARRAY_COUNT(sLineSectionTrainer8Round2), ARRAY_COUNT(sLineSectionTrainer8Semifinal), ARRAY_COUNT(sLineSectionTrainer8Final)},
+ {ARRAY_COUNT(sLineSectionTrainer9Round1), ARRAY_COUNT(sLineSectionTrainer9Round2), ARRAY_COUNT(sLineSectionTrainer9Semifinal), ARRAY_COUNT(sLineSectionTrainer9Final)},
+ {ARRAY_COUNT(sLineSectionTrainer10Round1), ARRAY_COUNT(sLineSectionTrainer10Round2), ARRAY_COUNT(sLineSectionTrainer10Semifinal), ARRAY_COUNT(sLineSectionTrainer10Final)},
+ {ARRAY_COUNT(sLineSectionTrainer11Round1), ARRAY_COUNT(sLineSectionTrainer11Round2), ARRAY_COUNT(sLineSectionTrainer11Semifinal), ARRAY_COUNT(sLineSectionTrainer11Final)},
+ {ARRAY_COUNT(sLineSectionTrainer12Round1), ARRAY_COUNT(sLineSectionTrainer12Round2), ARRAY_COUNT(sLineSectionTrainer12Semifinal), ARRAY_COUNT(sLineSectionTrainer12Final)},
+ {ARRAY_COUNT(sLineSectionTrainer13Round1), ARRAY_COUNT(sLineSectionTrainer13Round2), ARRAY_COUNT(sLineSectionTrainer13Semifinal), ARRAY_COUNT(sLineSectionTrainer13Final)},
+ {ARRAY_COUNT(sLineSectionTrainer14Round1), ARRAY_COUNT(sLineSectionTrainer14Round2), ARRAY_COUNT(sLineSectionTrainer14Semifinal), ARRAY_COUNT(sLineSectionTrainer14Final)},
+ {ARRAY_COUNT(sLineSectionTrainer15Round1), ARRAY_COUNT(sLineSectionTrainer15Round2), ARRAY_COUNT(sLineSectionTrainer15Semifinal), ARRAY_COUNT(sLineSectionTrainer15Final)},
+ {ARRAY_COUNT(sLineSectionTrainer16Round1), ARRAY_COUNT(sLineSectionTrainer16Round2), ARRAY_COUNT(sLineSectionTrainer16Semifinal), ARRAY_COUNT(sLineSectionTrainer16Final)},
};
// code
@@ -2261,11 +2091,11 @@ static void InitDomeChallenge(void)
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = 0;
- gSaveBlock2Ptr->frontier.field_CA9_b = 0;
- if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]))
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = FALSE;
+ if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0;
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
@@ -2279,63 +2109,63 @@ static void GetDomeData(void)
switch (gSpecialVar_0x8005)
{
- case 0:
+ case DOME_DATA_WIN_STREAK:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
break;
- case 1:
- gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0);
+ case DOME_DATA_WIN_STREAK_ACTIVE:
+ gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0);
break;
- case 2:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0;
+ case DOME_DATA_ATTEMPTED_SINGLES_50:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeAttemptedSingles50;
break;
- case 3:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1;
+ case DOME_DATA_ATTEMPTED_SINGLES_OPEN:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeAttemptedSinglesOpen;
break;
- case 4:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2;
+ case DOME_DATA_HAS_WON_SINGLES_50:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeHasWonSingles50;
break;
- case 5:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3;
+ case DOME_DATA_HAS_WON_SINGLES_OPEN:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeHasWonSinglesOpen;
break;
- case 6:
+ case DOME_DATA_ATTEMPTED_CHALLENGE:
if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES)
{
- if (lvlMode)
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_5;
+ if (lvlMode != FRONTIER_LVL_50)
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeAttemptedDoublesOpen;
else
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_4;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeAttemptedDoubles50;
}
else
{
- if (lvlMode)
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1;
+ if (lvlMode != FRONTIER_LVL_50)
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeAttemptedSinglesOpen;
else
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeAttemptedSingles50;
}
break;
- case 7:
+ case DOME_DATA_HAS_WON_CHALLENGE:
if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES)
{
- if (lvlMode)
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_7;
+ if (lvlMode != FRONTIER_LVL_50)
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeHasWonDoublesOpen;
else
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_6;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeHasWonDoubles50;
}
else
{
- if (lvlMode)
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3;
+ if (lvlMode != FRONTIER_LVL_50)
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeHasWonSinglesOpen;
else
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeHasWonSingles50;
}
break;
- case 8:
- sub_81B8558();
- gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.field_CB0;
- gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8;
+ case DOME_DATA_SELECTED_MONS:
+ ClearSelectedPartyOrder();
+ gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.selectedPartyMons[3];
+ gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.selectedPartyMons[3] >> 8;
break;
- case 9:
- gSpecialVar_Result = (gSaveBlock2Ptr->frontier.field_D0A * 2) - 3 + gSaveBlock2Ptr->frontier.field_D0B;
+ case DOME_DATA_PREV_TOURNEY_TYPE:
+ gSpecialVar_Result = (gSaveBlock2Ptr->frontier.domeLvlMode * 2) - 3 + gSaveBlock2Ptr->frontier.domeBattleMode;
break;
}
}
@@ -2347,61 +2177,61 @@ static void SetDomeData(void)
switch (gSpecialVar_0x8005)
{
- case 0:
+ case DOME_DATA_WIN_STREAK:
gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
- case 1:
+ case DOME_DATA_WIN_STREAK_ACTIVE:
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode];
else
- gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode];
break;
- case 2:
- gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006;
+ case DOME_DATA_ATTEMPTED_SINGLES_50:
+ gSaveBlock2Ptr->frontier.domeAttemptedSingles50 = gSpecialVar_0x8006;
break;
- case 3:
- gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006;
+ case DOME_DATA_ATTEMPTED_SINGLES_OPEN:
+ gSaveBlock2Ptr->frontier.domeAttemptedSinglesOpen = gSpecialVar_0x8006;
break;
- case 4:
- gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006;
+ case DOME_DATA_HAS_WON_SINGLES_50:
+ gSaveBlock2Ptr->frontier.domeHasWonSingles50 = gSpecialVar_0x8006;
break;
- case 5:
- gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006;
+ case DOME_DATA_HAS_WON_SINGLES_OPEN:
+ gSaveBlock2Ptr->frontier.domeHasWonSinglesOpen = gSpecialVar_0x8006;
break;
- case 6:
+ case DOME_DATA_ATTEMPTED_CHALLENGE:
if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES)
{
- if (lvlMode)
- gSaveBlock2Ptr->frontier.field_D08_5 = gSpecialVar_0x8006;
+ if (lvlMode != FRONTIER_LVL_50)
+ gSaveBlock2Ptr->frontier.domeAttemptedDoublesOpen = gSpecialVar_0x8006;
else
- gSaveBlock2Ptr->frontier.field_D08_4 = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.domeAttemptedDoubles50 = gSpecialVar_0x8006;
}
else
{
- if (lvlMode)
- gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006;
+ if (lvlMode != FRONTIER_LVL_50)
+ gSaveBlock2Ptr->frontier.domeAttemptedSinglesOpen = gSpecialVar_0x8006;
else
- gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.domeAttemptedSingles50 = gSpecialVar_0x8006;
}
break;
- case 7:
+ case DOME_DATA_HAS_WON_CHALLENGE:
if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES)
{
- if (lvlMode)
- gSaveBlock2Ptr->frontier.field_D08_7 = gSpecialVar_0x8006;
+ if (lvlMode != FRONTIER_LVL_50)
+ gSaveBlock2Ptr->frontier.domeHasWonDoublesOpen = gSpecialVar_0x8006;
else
- gSaveBlock2Ptr->frontier.field_D08_6 = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.domeHasWonDoubles50 = gSpecialVar_0x8006;
}
else
{
- if (lvlMode)
- gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006;
+ if (lvlMode != FRONTIER_LVL_50)
+ gSaveBlock2Ptr->frontier.domeHasWonSinglesOpen = gSpecialVar_0x8006;
else
- gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.domeHasWonSingles50 = gSpecialVar_0x8006;
}
break;
- case 8:
- gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gSelectedOrderFromParty);
+ case DOME_DATA_SELECTED_MONS:
+ gSaveBlock2Ptr->frontier.selectedPartyMons[3] = T1_READ_16(gSelectedOrderFromParty);
break;
}
}
@@ -2410,108 +2240,118 @@ static void InitDomeTrainers(void)
{
int i, j, k;
int monLevel;
- int species[3];
+ int species[FRONTIER_PARTY_SIZE];
int monTypesBits, monTypesCount;
int trainerId;
- int monSetId;
- u16 *statSums;
+ int monId;
+ u16 *rankingScores;
int *statValues;
u8 ivs = 0;
species[0] = 0;
species[1] = 0;
species[2] = 0;
- statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT);
- statValues = AllocZeroed(sizeof(int) * 6);
-
- gSaveBlock2Ptr->frontier.field_D0A = gSaveBlock2Ptr->frontier.lvlMode + 1;
- gSaveBlock2Ptr->frontier.field_D0B = VarGet(VAR_FRONTIER_BATTLE_MODE) + 1;
- gSaveBlock2Ptr->frontier.domeTrainers[0].trainerId = TRAINER_PLAYER;
- gSaveBlock2Ptr->frontier.domeTrainers[0].isEliminated = 0;
- gSaveBlock2Ptr->frontier.domeTrainers[0].eliminatedAt = 0;
- gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0;
-
- for (i = 0; i < 3; i++)
+ rankingScores = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT);
+ statValues = AllocZeroed(sizeof(int) * NUM_STATS);
+
+ gSaveBlock2Ptr->frontier.domeLvlMode = gSaveBlock2Ptr->frontier.lvlMode + 1;
+ gSaveBlock2Ptr->frontier.domeBattleMode = VarGet(VAR_FRONTIER_BATTLE_MODE) + 1;
+ DOME_TRAINERS[0].trainerId = TRAINER_PLAYER;
+ DOME_TRAINERS[0].isEliminated = FALSE;
+ DOME_TRAINERS[0].eliminatedAt = 0;
+ DOME_TRAINERS[0].forfeited = FALSE;
+
+ // Store the data used to display party information on the player's tourney page
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- gSaveBlock2Ptr->frontier.domeMonIds[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL);
+ DOME_MONS[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL);
for (j = 0; j < MAX_MON_MOVES; j++)
- gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_MOVE1 + j, NULL);
- for (j = 0; j < 6; j++)
- gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HP_EV + j, NULL);
+ gSaveBlock2Ptr->frontier.domePlayerPartyData[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_MOVE1 + j, NULL);
+ for (j = 0; j < NUM_STATS; j++)
+ gSaveBlock2Ptr->frontier.domePlayerPartyData[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HP_EV + j, NULL);
- gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1]);
+ gSaveBlock2Ptr->frontier.domePlayerPartyData[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1]);
}
+ // Populate the tourney roster with random frontier trainers (dependent on streak)
for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
+ // Choose trainer. First 5/16 trainers are easier than the rest
if (i > 5)
{
do
{
- trainerId = sub_8162548(GetCurrentFacilityWinStreak(), 0);
+ trainerId = GetRandomScaledFrontierTrainerId(GetCurrentFacilityWinStreak(), 0);
for (j = 1; j < i; j++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId)
+ if (DOME_TRAINERS[j].trainerId == trainerId)
break;
}
} while (j != i);
- gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId;
+ DOME_TRAINERS[i].trainerId = trainerId;
}
else
{
do
{
- trainerId = sub_8162548(GetCurrentFacilityWinStreak() + 1, 0);
+ trainerId = GetRandomScaledFrontierTrainerId(GetCurrentFacilityWinStreak() + 1, 0);
for (j = 1; j < i; j++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId)
+ if (DOME_TRAINERS[j].trainerId == trainerId)
break;
}
} while (j != i);
- gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId;
+ DOME_TRAINERS[i].trainerId = trainerId;
}
- for (j = 0; j < 3; j++)
+ // Choose party
+ for (j = 0; j < FRONTIER_PARTY_SIZE; j++)
{
- // Make sure the mon is valid.
do
{
- monSetId = RandomizeFacilityTrainerMonSet(trainerId);
+ monId = GetRandomFrontierMonFromSet(trainerId);
for (k = 0; k < j; k++)
{
- int checkingMonSetId = gSaveBlock2Ptr->frontier.domeMonIds[i][k];
- if (checkingMonSetId == monSetId
- || species[0] == gFacilityTrainerMons[monSetId].species
- || species[1] == gFacilityTrainerMons[monSetId].species
- || gFacilityTrainerMons[checkingMonSetId].itemTableId == gFacilityTrainerMons[monSetId].itemTableId)
+ // Make sure the mon is valid.
+ int alreadySelectedMonId = DOME_MONS[i][k];
+ if (alreadySelectedMonId == monId
+ || species[0] == gFacilityTrainerMons[monId].species
+ || species[1] == gFacilityTrainerMons[monId].species
+ || gFacilityTrainerMons[alreadySelectedMonId].itemTableId == gFacilityTrainerMons[monId].itemTableId)
break;
}
} while (k != j);
- gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monSetId;
- species[j] = gFacilityTrainerMons[monSetId].species;
+ DOME_MONS[i][j] = monId;
+ species[j] = gFacilityTrainerMons[monId].species;
}
- gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0;
- gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0;
- gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0;
+ DOME_TRAINERS[i].isEliminated = FALSE;
+ DOME_TRAINERS[i].eliminatedAt = 0;
+ DOME_TRAINERS[i].forfeited = FALSE;
}
+ // rankingScores is used to determine the seed (ranking) of the trainers
+ // rankingScores[0] is for the player, rankingScores[1-15] are for the opponent trainers
+
+ // Calculate player's ranking score
monTypesBits = 0;
- statSums[0] = 0;
- for (i = 0; i < 3; i++)
+ rankingScores[0] = 0;
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- trainerId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; // Great variable choice, gamefreak.
- statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL);
- statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL);
- statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL);
- statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL);
- statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL);
- statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL);
+ // trainerId var re-used here as index of selected mons
+ trainerId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
+ rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL);
+ rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL);
+ rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL);
+ rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL);
+ rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL);
+ rankingScores[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL);
monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type1];
monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type2];
}
+ // Count the number of types in the players party, to factor into the ranking
for (monTypesCount = 0, j = 0; j < 32; j++)
{
if (monTypesBits & 1)
@@ -2520,29 +2360,30 @@ static void InitDomeTrainers(void)
}
monLevel = SetFacilityPtrsGetLevel();
- statSums[0] += (monTypesCount * monLevel) / 20;
+ rankingScores[0] += (monTypesCount * monLevel) / 20;
+ // Calculate rankingScores for the opponent trainers
for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
monTypesBits = 0;
- statSums[i] = 0;
- ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
- for (j = 0; j < 3; j++)
+ rankingScores[i] = 0;
+ ivs = GetDomeTrainerMonIvs(DOME_TRAINERS[i].trainerId);
+ for (j = 0; j < FRONTIER_PARTY_SIZE; j++)
{
- CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species,
+ CalcDomeMonStats(gFacilityTrainerMons[DOME_MONS[i][j]].species,
monLevel, ivs,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].evSpread,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].nature,
+ gFacilityTrainerMons[DOME_MONS[i][j]].evSpread,
+ gFacilityTrainerMons[DOME_MONS[i][j]].nature,
statValues);
- statSums[i] += statValues[STAT_ATK];
- statSums[i] += statValues[STAT_DEF];
- statSums[i] += statValues[STAT_SPATK];
- statSums[i] += statValues[STAT_SPDEF];
- statSums[i] += statValues[STAT_SPEED];
- statSums[i] += statValues[STAT_HP];
- monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type1];
- monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type2];
+ rankingScores[i] += statValues[STAT_ATK];
+ rankingScores[i] += statValues[STAT_DEF];
+ rankingScores[i] += statValues[STAT_SPATK];
+ rankingScores[i] += statValues[STAT_SPDEF];
+ rankingScores[i] += statValues[STAT_SPEED];
+ rankingScores[i] += statValues[STAT_HP];
+ monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type1];
+ monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type2];
}
for (monTypesCount = 0, j = 0; j < 32; j++)
@@ -2551,54 +2392,56 @@ static void InitDomeTrainers(void)
monTypesCount++;
monTypesBits >>= 1;
}
- statSums[i] += (monTypesCount * monLevel) / 20;
+ rankingScores[i] += (monTypesCount * monLevel) / 20;
}
+ // Seed tourney trainers according to their ranking
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++)
{
for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++)
{
- if (statSums[i] < statSums[j])
+ if (rankingScores[i] < rankingScores[j])
{
- SwapDomeTrainers(i, j, statSums);
+ SwapDomeTrainers(i, j, rankingScores);
}
else
{
- if (statSums[i] == statSums[j])
+ if (rankingScores[i] == rankingScores[j])
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == TRAINER_PLAYER)
- SwapDomeTrainers(i, j, statSums);
- else if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId)
- SwapDomeTrainers(i, j, statSums);
+ if (DOME_TRAINERS[j].trainerId == TRAINER_PLAYER)
+ SwapDomeTrainers(i, j, rankingScores);
+ else if (DOME_TRAINERS[i].trainerId > DOME_TRAINERS[j].trainerId)
+ SwapDomeTrainers(i, j, rankingScores);
}
}
}
}
- if (sub_81A3610())
+ // Add Frontier Brain to the tourney if they should be fought at the end of it
+ if (GetFrontierBrainStatus() != FRONTIER_BRAIN_NOT_READY)
{
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER)
+ if (DOME_TRAINERS[i].trainerId == TRAINER_PLAYER)
break;
}
- if (gUnknown_0860D3F1[i][0] != 0)
+ if (sTrainerNamePositions[i][0] != 0)
{
j = 0;
- gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN;
+ DOME_TRAINERS[j].trainerId = TRAINER_FRONTIER_BRAIN;
}
else
{
j = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN;
+ DOME_TRAINERS[j].trainerId = TRAINER_FRONTIER_BRAIN;
}
- for (i = 0; i < 3; i++)
- gSaveBlock2Ptr->frontier.domeMonIds[j][i] = GetFrontierBrainMonSpecies(i);
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
+ DOME_MONS[j][i] = GetFrontierBrainMonSpecies(i);
}
- Free(statSums);
+ Free(rankingScores);
Free(statValues);
}
@@ -2654,10 +2497,10 @@ static void SwapDomeTrainers(int id1, int id2, u16 *statsArray)
u16 temp;
SWAP(statsArray[id1], statsArray[id2], temp);
- SWAP(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId, temp);
+ SWAP(DOME_TRAINERS[id1].trainerId, DOME_TRAINERS[id2].trainerId, temp);
- for (i = 0; i < 3; i++)
- SWAP(gSaveBlock2Ptr->frontier.domeMonIds[id1][i], gSaveBlock2Ptr->frontier.domeMonIds[id2][i], temp);
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
+ SWAP(DOME_MONS[id1][i], DOME_MONS[id2][i], temp);
}
static void BufferDomeRoundText(void)
@@ -2673,9 +2516,9 @@ static void BufferDomeOpponentName(void)
static void InitDomeOpponentParty(void)
{
- gUnknown_0203CD70 = 0;
- gUnknown_0203CD74 = GetMonData(&gPlayerParty[0], MON_DATA_MAX_HP, NULL);
- gUnknown_0203CD74 += GetMonData(&gPlayerParty[1], MON_DATA_MAX_HP, NULL);
+ gPlayerPartyLostHP = 0;
+ sPlayerPartyMaxHP = GetMonData(&gPlayerParty[0], MON_DATA_MAX_HP, NULL);
+ sPlayerPartyMaxHP += GetMonData(&gPlayerParty[1], MON_DATA_MAX_HP, NULL);
CalculatePlayerPartyCount();
CreateDomeOpponentMons(TrainerIdToTournamentId(gTrainerBattleOpponent_A));
}
@@ -2683,160 +2526,168 @@ static void InitDomeOpponentParty(void)
static void CreateDomeOpponentMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentMonId, u32 otId)
{
int i;
- u8 happiness = 0xFF;
- u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3.
+ u8 friendship = MAX_FRIENDSHIP;
+ u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using (DOME_TRAINERS[tournamentTrainerId].trainerId) instead of (tournamentTrainerId). As a result, all Pokemon have ivs of 3.
u8 level = SetFacilityPtrsGetLevel();
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[monPartyId],
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].species,
+ gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].species,
level,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].nature,
+ gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].nature,
fixedIv,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].evSpread, otId);
+ gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].evSpread, otId);
- happiness = 0xFF;
+ friendship = MAX_FRIENDSHIP;
for (i = 0; i < MAX_MON_MOVES; i++)
{
SetMonMoveSlot(&gEnemyParty[monPartyId],
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].moves[i], i);
- if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION)
- happiness = 0;
+ gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].moves[i], i);
+ if (gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION)
+ friendship = 0;
}
- SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &happiness);
+ SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &friendship);
SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM,
- &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].itemTableId]);
+ &gBattleFrontierHeldItems[gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].itemTableId]);
}
static void CreateDomeOpponentMons(u16 tournamentTrainerId)
{
u8 monsCount = 0;
u32 otId = 0;
- int i, bits;
+ int i, selectedMonBits;
ZeroEnemyPartyMons();
- bits = GetDomeTrainerMonCountInBits(tournamentTrainerId);
+ selectedMonBits = GetDomeTrainerSelectedMons(tournamentTrainerId);
otId = Random32();
+
if (Random() % 10 > 5)
{
- for (i = 0; i < 3; i++)
+ // Create mon if it was selected, starting from front
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- if (bits & 1)
+ if (selectedMonBits & 1)
{
CreateDomeOpponentMon(monsCount, tournamentTrainerId, i, otId);
monsCount++;
}
- bits >>= 1;
+ selectedMonBits >>= 1;
}
}
else
{
- for (i = 2; i >= 0; i--)
+ // Create mon if it was selected, starting from back
+ for (i = FRONTIER_PARTY_SIZE - 1; i >= 0; i--)
{
- if (bits & 4)
+ if (selectedMonBits & 4)
{
CreateDomeOpponentMon(monsCount, tournamentTrainerId, i, otId);
monsCount++;
}
- bits <<= 1;
+ selectedMonBits <<= 1;
}
}
}
-int GetDomeTrainerMonCountInBits(u16 tournamentTrainerId)
+int GetDomeTrainerSelectedMons(u16 tournamentTrainerId)
{
- int bits;
+ int selectedMonBits;
if (Random() & 1)
{
- bits = sub_818FCBC(tournamentTrainerId, FALSE);
- if (bits == 0)
- bits = sub_818FDB8(tournamentTrainerId, TRUE);
+ selectedMonBits = SelectOpponentMonsUsingPersonality(tournamentTrainerId, FALSE);
+ if (selectedMonBits == 0)
+ selectedMonBits = SelectOpponentMonsUsingOtId(tournamentTrainerId, TRUE);
}
else
{
- bits = sub_818FDB8(tournamentTrainerId, FALSE);
- if (bits == 0)
- bits = sub_818FCBC(tournamentTrainerId, TRUE);
+ selectedMonBits = SelectOpponentMonsUsingOtId(tournamentTrainerId, FALSE);
+ if (selectedMonBits == 0)
+ selectedMonBits = SelectOpponentMonsUsingPersonality(tournamentTrainerId, TRUE);
}
- return bits;
+ return selectedMonBits;
}
-static int sub_818FCBC(u16 tournamentTrainerId, bool8 arg1)
+// Could probably use a better name once GetTypeEffectivenessPoints is clarified
+// Personality seems to be used to select a different weighting system for type effectiveness points
+static int SelectOpponentMonsUsingPersonality(u16 tournamentTrainerId, bool8 allowRandom)
{
int i, moveId, playerMonId;
- int array[3];
+ int partyMovePoints[FRONTIER_PARTY_SIZE];
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- array[i] = 0;
+ partyMovePoints[i] = 0;
for (moveId = 0; moveId < MAX_MON_MOVES; moveId++)
{
- for (playerMonId = 0; playerMonId < 3; playerMonId++)
+ for (playerMonId = 0; playerMonId < FRONTIER_PARTY_SIZE; playerMonId++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
+ if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
{
- array[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
- GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0);
+ partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
+ GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_PERSONALITY);
}
else
{
- array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][i]].moves[moveId],
- GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0);
+ partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId],
+ GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_PERSONALITY);
}
}
}
}
- return sub_818FEB4(array, arg1);
+ return SelectOpponentMonsFromParty(partyMovePoints, allowRandom);
}
-static int sub_818FDB8(u16 tournamentTrainerId, bool8 arg1)
+// See above function, identical but uses MON_DATA_OT_ID
+static int SelectOpponentMonsUsingOtId(u16 tournamentTrainerId, bool8 allowRandom)
{
int i, moveId, playerMonId;
- int array[3];
+ int partyMovePoints[FRONTIER_PARTY_SIZE];
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- array[i] = 0;
+ partyMovePoints[i] = 0;
for (moveId = 0; moveId < MAX_MON_MOVES; moveId++)
{
- for (playerMonId = 0; playerMonId < 3; playerMonId++)
+ for (playerMonId = 0; playerMonId < FRONTIER_PARTY_SIZE; playerMonId++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
+ if (DOME_TRAINERS[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN)
{
- array[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
- GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1);
+ partyMovePoints[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId),
+ GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_OT_ID);
}
else
{
- array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][i]].moves[moveId],
- GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1);
+ partyMovePoints[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][i]].moves[moveId],
+ GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), MON_DATA_OT_ID);
}
}
}
}
- return sub_818FEB4(array, arg1);
+ return SelectOpponentMonsFromParty(partyMovePoints, allowRandom);
}
-static int sub_818FEB4(int *arr, bool8 arg1)
+static int SelectOpponentMonsFromParty(int *partyMovePoints, bool8 allowRandom)
{
int i, j;
- int bits = 0;
- int array[3];
+ int selectedMonBits = 0;
+ int partyPositions[FRONTIER_PARTY_SIZE];
- for (i = 0; i < 3; i++)
- array[i] = i;
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
+ partyPositions[i] = i;
- if (arr[0] == arr[1] && arr[0] == arr[2])
+ // All party mons have equal move score totals, choose randomly
+ if (partyMovePoints[0] == partyMovePoints[1]
+ && partyMovePoints[0] == partyMovePoints[2])
{
- if (arg1)
+ if (allowRandom)
{
i = 0;
- while (i != 2)
+ while (i != DOME_BATTLE_PARTY_SIZE)
{
- u32 rand = Random() & 3;
- if (rand != 3 && !(bits & gBitTable[rand]))
+ u32 rand = Random() & FRONTIER_PARTY_SIZE;
+ if (rand != FRONTIER_PARTY_SIZE && !(selectedMonBits & gBitTable[rand]))
{
- bits |= gBitTable[rand];
+ selectedMonBits |= gBitTable[rand];
i++;
}
}
@@ -2844,43 +2695,33 @@ static int sub_818FEB4(int *arr, bool8 arg1)
}
else
{
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DOME_BATTLE_PARTY_SIZE; i++)
{
- for (j = i + 1; j < 3; j++)
+ for (j = i + 1; j < FRONTIER_PARTY_SIZE; j++)
{
int temp;
- if (arr[i] < arr[j])
+ if (partyMovePoints[i] < partyMovePoints[j])
{
- temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
-
- temp = array[i];
- array[i] = array[j];
- array[j] = temp;
+ SWAP(partyMovePoints[i], partyMovePoints[j],temp)
+ SWAP(partyPositions[i], partyPositions[j], temp)
}
- if (arr[i] == arr[j] && (Random() & 1))
+ if (partyMovePoints[i] == partyMovePoints[j] && (Random() & 1))
{
- temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
-
- temp = array[i];
- array[i] = array[j];
- array[j] = temp;
+ SWAP(partyMovePoints[i], partyMovePoints[j],temp)
+ SWAP(partyPositions[i], partyPositions[j], temp)
}
}
}
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DOME_BATTLE_PARTY_SIZE; i++)
{
- bits |= gBitTable[array[i]];
+ selectedMonBits |= gBitTable[partyPositions[i]];
}
}
- return bits;
+ return selectedMonBits;
}
#define TYPE_x0 0
@@ -2891,6 +2732,7 @@ static int sub_818FEB4(int *arr, bool8 arg1)
#define TYPE_x4 80
// Functionally equivalent, while loop is impossible to match.
+// arg2 is either 2, a personality, or an OTID
#ifdef NONMATCHING
static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
{
@@ -2913,25 +2755,22 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
}
else
{
- while (gTypeEffectiveness[i + 0] != TYPE_ENDTABLE)
+ while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE)
{
- if (gTypeEffectiveness[i + 0] == TYPE_FORESIGHT)
+ if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT)
{
i += 3;
+ continue;
}
- else
+ else if (TYPE_EFFECT_ATK_TYPE(i) == moveType)
{
- u8 val = gTypeEffectiveness[i + 0];
- if (val == moveType)
- {
- // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard.
- if (gTypeEffectiveness[i + 1] == defType1 && (defAbility != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2))
- typePower = (gTypeEffectiveness[i + 2] * typePower) / 10;
- if (gTypeEffectiveness[i + 1] == defType2 && defType1 != defType2 && (defAbility != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2))
- typePower = (gTypeEffectiveness[i + 2] * typePower) / 10;
- }
- i += 3;
+ // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard.
+ if (TYPE_EFFECT_DEF_TYPE(i) == defType1 && (defAbility != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2))
+ typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
+ if (TYPE_EFFECT_DEF_TYPE(i) == defType2 && defType1 != defType2 && (defAbility != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2))
+ typePower = (typePower * TYPE_EFFECT_MULTIPLIER(i)) / 10;
}
+ i += 3;
}
}
@@ -2940,19 +2779,19 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
case 0:
switch (typePower)
{
- case 10:
- case 5:
- case 0:
+ case TYPE_x0_50:
+ case TYPE_x0_25:
+ case TYPE_x0:
default:
typePower = 0;
break;
- case 20:
+ case TYPE_x1:
typePower = 2;
break;
- case 40:
+ case TYPE_x2:
typePower = 4;
break;
- case 80:
+ case TYPE_x4:
typePower = 8;
break;
}
@@ -2961,22 +2800,22 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2)
switch (typePower)
{
default:
- case 20:
+ case TYPE_x1:
typePower = 0;
break;
- case 5:
+ case TYPE_x0_25:
typePower = 4;
break;
- case 0:
+ case TYPE_x0:
typePower = 8;
break;
- case 10:
+ case TYPE_x0_50:
typePower = 2;
break;
- case 40:
+ case TYPE_x2:
typePower = -2;
break;
- case 80:
+ case TYPE_x4:
typePower = -4;
break;
}
@@ -3251,24 +3090,28 @@ _08190156:\n\
}
#endif // NONMATCHING
+// Duplicate of GetFrontierTrainerFixedIvs
+// NOTE: In CreateDomeOpponentMon a tournament trainer ID (0-15) is passed instead, resulting in all IVs of 3
+// To fix, see CreateDomeOpponentMon
static u8 GetDomeTrainerMonIvs(u16 trainerId)
{
u8 fixedIv;
- if (trainerId <= 99)
+
+ if (trainerId <= FRONTIER_TRAINER_JILL) // 0 - 99
fixedIv = 3;
- else if (trainerId <= 119)
+ else if (trainerId <= FRONTIER_TRAINER_CHLOE) // 100 - 119
fixedIv = 6;
- else if (trainerId <= 139)
+ else if (trainerId <= FRONTIER_TRAINER_SOFIA) // 120 - 139
fixedIv = 9;
- else if (trainerId <= 159)
+ else if (trainerId <= FRONTIER_TRAINER_JAZLYN) // 140 - 159
fixedIv = 12;
- else if (trainerId <= 179)
+ else if (trainerId <= FRONTIER_TRAINER_ALISON) // 160 - 179
fixedIv = 15;
- else if (trainerId <= 199)
+ else if (trainerId <= FRONTIER_TRAINER_LAMAR) // 180 - 199
fixedIv = 18;
- else if (trainerId <= 219)
+ else if (trainerId <= FRONTIER_TRAINER_TESS) // 200 - 219
fixedIv = 21;
- else
+ else // 220+ (- 299)
fixedIv = 31;
return fixedIv;
@@ -3276,38 +3119,41 @@ static u8 GetDomeTrainerMonIvs(u16 trainerId)
static int TournamentIdOfOpponent(int roundId, int trainerId)
{
- int i, j, val;
+ int i, j, opponentMax;
+ // Get trainer's tournament id
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId)
+ if (DOME_TRAINERS[i].trainerId == trainerId)
break;
}
+ // Get trainer's opponent's tournament id
if (roundId != DOME_ROUND1)
{
if (roundId == DOME_FINAL)
- val = sIdToOpponentId[i][roundId] + 8;
+ opponentMax = sIdToOpponentId[i][roundId] + 8;
else
- val = sIdToOpponentId[i][roundId] + 4;
+ opponentMax = sIdToOpponentId[i][roundId] + 4;
- for (j = sIdToOpponentId[i][roundId]; j < val; j++)
+ // Get first non-eliminated trainer in range of possible opponents
+ for (j = sIdToOpponentId[i][roundId]; j < opponentMax; j++)
{
- if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].isEliminated)
+ if (sTourneyTreeTrainerOpponentIds[j] != i && !DOME_TRAINERS[sTourneyTreeTrainerOpponentIds[j]].isEliminated)
break;
}
- if (j != val)
- return gUnknown_0860D14C[j];
+ if (j != opponentMax)
+ return sTourneyTreeTrainerOpponentIds[j];
else
- return 0xFF;
+ return 0xFF; // Already eliminated
}
else
{
- if (!gSaveBlock2Ptr->frontier.domeTrainers[sIdToOpponentId[i][roundId]].isEliminated)
+ if (!DOME_TRAINERS[sIdToOpponentId[i][roundId]].isEliminated)
return sIdToOpponentId[i][roundId];
else
- return 0xFF;
+ return 0xFF; // Already eliminated
}
}
@@ -3316,9 +3162,10 @@ static void SetDomeOpponentId(void)
gTrainerBattleOpponent_A = TrainerIdOfPlayerOpponent();
}
+// While not an issue in-game, this will overflow if called after the player's opponent for the current round has been eliminated
static u16 TrainerIdOfPlayerOpponent(void)
{
- return gSaveBlock2Ptr->frontier.domeTrainers[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.curChallengeBattleNum, TRAINER_PLAYER)].trainerId;
+ return DOME_TRAINERS[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.curChallengeBattleNum, TRAINER_PLAYER)].trainerId;
}
static void SetDomeOpponentGraphicsId(void)
@@ -3326,15 +3173,15 @@ static void SetDomeOpponentGraphicsId(void)
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
}
-static void sub_81902F8(void)
+static void SaveDomeChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = 1;
- sub_81A4C30();
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
+ SaveGameFrontier();
}
-static void UpdateDomeStreaks(void)
+static void IncrementDomeStreaks(void)
{
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
@@ -3348,25 +3195,27 @@ static void UpdateDomeStreaks(void)
gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
}
+// For showing the opponent info card of the upcoming trainer
static void ShowDomeOpponentInfo(void)
{
- u8 taskId = CreateTask(Task_ShowOpponentInfo, 0);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = TrainerIdToTournamentId(TrainerIdOfPlayerOpponent());
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = 0;
+ u8 taskId = CreateTask(Task_ShowTourneyInfoCard, 0);
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tTournamentId = TrainerIdToTournamentId(TrainerIdOfPlayerOpponent());
+ gTasks[taskId].tMode = INFOCARD_NEXT_OPPONENT;
+ gTasks[taskId].tPrevTaskId = 0;
- SetMainCallback2(CB2_BattleDome);
+ SetMainCallback2(CB2_TourneyTree);
}
-static void Task_ShowOpponentInfo(u8 taskId)
+// For showing the opponent info card or the match info card
+static void Task_ShowTourneyInfoCard(u8 taskId)
{
int i;
- int r5 = gTasks[taskId].data[1];
- int r9 = gTasks[taskId].data[2];
- int r7 = gTasks[taskId].data[3];
+ int tournamentId = gTasks[taskId].tTournamentId;
+ int mode = gTasks[taskId].tMode;
+ int id = gTasks[taskId].tPrevTaskId;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
SetHBlankCallback(NULL);
@@ -3374,8 +3223,8 @@ static void Task_ShowOpponentInfo(u8 taskId)
EnableInterrupts(INTR_FLAG_VBLANK);
CpuFill32(0, (void *)VRAM, VRAM_SIZE);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0860CE84, ARRAY_COUNT(gUnknown_0860CE84));
- InitWindows(gUnknown_0860CEB4);
+ InitBgsFromTemplates(0, sInfoCardBgTemplates, ARRAY_COUNT(sInfoCardBgTemplates));
+ InitWindows(sInfoCardWindowTemplates);
DeactivateAllTextPrinters();
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -3383,12 +3232,12 @@ static void Task_ShowOpponentInfo(u8 taskId)
gBattle_BG1_Y = 0;
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
- if (r9 == 2)
+ if (mode == INFOCARD_MATCH)
gBattle_BG2_X = 0, gBattle_BG2_Y = 0;
else
gBattle_BG2_X = 0, gBattle_BG2_Y = 160;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 1:
SetGpuReg(REG_OFFSET_BLDCNT, 0);
@@ -3400,72 +3249,76 @@ static void Task_ShowOpponentInfo(u8 taskId)
SetGpuReg(REG_OFFSET_WIN1H, 0);
SetGpuReg(REG_OFFSET_WIN1V, 0);
SetGpuReg(REG_OFFSET_WININ, 0);
- SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
ResetPaletteFade();
ResetSpriteData();
FreeAllSpritePalettes();
gReservedSpritePaletteCount = 4;
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 2:
- DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83D50, 0x2000, 0, 0);
- DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D84970, 0x2000, 0, 1);
- DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D84F00, 0x800, 0, 1);
- LoadCompressedSpriteSheet(sDomeOptionsSpriteSheet);
- LoadCompressedPalette(gUnknown_08D85358, 0, 0x200);
- LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200);
- LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20);
- if (r9 == 2)
- LoadCompressedPalette(gUnknown_08D854C8, 0x50, 0x20);
+ DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyInfoCard_Gfx, 0x2000, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyInfoCard_Tilemap, 0x2000, 0, 1);
+ DecompressAndLoadBgGfxUsingHeap(3, gDomeTourneyInfoCardBg_Tilemap, 0x800, 0, 1);
+ LoadCompressedSpriteSheet(sTourneyTreeButtonsSpriteSheet);
+ LoadCompressedPalette(gDomeTourneyTree_Pal, 0, 0x200);
+ LoadCompressedPalette(gDomeTourneyTreeButtons_Pal, 0x100, 0x200);
+ LoadCompressedPalette(gBattleWindowTextPalette, 0xF0, 0x20);
+ if (mode == INFOCARD_MATCH)
+ LoadCompressedPalette(gDomeTourneyMatchCardBg_Pal, 0x50, 0x20); // Changes the moving info card bg to orange when in match card mode
CpuFill32(0, gPlttBufferFaded, 0x400);
ShowBg(0);
ShowBg(1);
ShowBg(2);
ShowBg(3);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 3:
- SetVBlankCallback(VblankCb0_BattleDome);
- sBattleDomeStruct = AllocZeroed(sizeof(*sBattleDomeStruct));
- for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
- sBattleDomeStruct->arr[i] = 0xFF;
+ SetVBlankCallback(VblankCb_TourneyInfoCard);
+ sInfoCard = AllocZeroed(sizeof(*sInfoCard));
+ for (i = 0; i < NUM_INFOCARD_SPRITES; i++)
+ sInfoCard->spriteIds[i] = 0xFF;
LoadMonIconPalettes();
- i = CreateTask(sub_8190CD4, 0);
+ i = CreateTask(Task_HandleInfoCardInput, 0);
gTasks[i].data[0] = 0;
gTasks[i].data[2] = 0;
- gTasks[i].data[3] = r9;
- gTasks[i].data[4] = r7;
- if (r9 == 2)
+ gTasks[i].data[3] = mode;
+ gTasks[i].data[4] = id;
+ if (mode == INFOCARD_MATCH)
{
- DisplayMatchInfoOnCard(0, r5);
- sBattleDomeStruct->unk_10 = 1;
+ DisplayMatchInfoOnCard(0, tournamentId);
+ sInfoCard->pos = 1;
}
else
{
- DisplayTrainerInfoOnCard(0, r5);
+ DisplayTrainerInfoOnCard(0, tournamentId);
}
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP);
- if (r9 != 0)
+ if (mode != INFOCARD_NEXT_OPPONENT)
{
- r7 = CreateSprite(&gUnknown_0860D068, 120, 4, 0);
- StartSpriteAnim(&gSprites[r7], 0);
- gSprites[r7].data[0] = i;
-
- r7 = CreateSprite(&gUnknown_0860D068, 120, 156, 0);
- StartSpriteAnim(&gSprites[r7], 1);
- gSprites[r7].data[0] = i;
-
- r7 = CreateSprite(&gUnknown_0860D050, 6, 80, 0);
- StartSpriteAnim(&gSprites[r7], 0);
- gSprites[r7].data[0] = i;
- gSprites[r7].data[1] = 0;
- if (r9 == 1)
- gSprites[r7].invisible = TRUE;
-
- r7 = CreateSprite(&gUnknown_0860D050, 234, 80, 0);
- StartSpriteAnim(&gSprites[r7], 1);
- gSprites[r7].data[0] = i;
- gSprites[r7].data[1] = 1;
+ // Scroll up arrow
+ id = CreateSprite(&sVerticalScrollArrowSpriteTemplate, 120, 4, 0);
+ StartSpriteAnim(&gSprites[id], 0);
+ gSprites[id].data[0] = i;
+
+ // Scroll down arrow
+ id = CreateSprite(&sVerticalScrollArrowSpriteTemplate, 120, 156, 0);
+ StartSpriteAnim(&gSprites[id], 1);
+ gSprites[id].data[0] = i;
+
+ // Scroll left arrow
+ id = CreateSprite(&sHorizontalScrollArrowSpriteTemplate, 6, 80, 0);
+ StartSpriteAnim(&gSprites[id], 0);
+ gSprites[id].data[0] = i;
+ gSprites[id].data[1] = 0;
+ if (mode == INFOCARD_TRAINER)
+ gSprites[id].invisible = TRUE;
+
+ // Scroll right arrow
+ id = CreateSprite(&sHorizontalScrollArrowSpriteTemplate, 234, 80, 0);
+ StartSpriteAnim(&gSprites[id], 1);
+ gSprites[id].data[0] = i;
+ gSprites[id].data[1] = 1;
}
DestroyTask(taskId);
break;
@@ -3475,7 +3328,6 @@ static void Task_ShowOpponentInfo(u8 taskId)
// Note: Card scrolling up means the current card goes down and another one appears from top.
// The same is true for scrolling left.
// That means that the sprite needs to move with the moving card in the opposite scrolling direction.
-
static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite)
{
sprite->pos1.y += 4;
@@ -3490,7 +3342,7 @@ static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite)
{
if (sprite->pos1.y >= 192)
{
- sBattleDomeStruct->arr[sprite->data[2]] = 0xFF;
+ sInfoCard->spriteIds[sprite->data[2]] = 0xFF;
FreeAndDestroyTrainerPicSprite(sprite->data[3]);
}
}
@@ -3510,7 +3362,7 @@ static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite)
{
if (sprite->pos1.y <= -32)
{
- sBattleDomeStruct->arr[sprite->data[2]] = 0xFF;
+ sInfoCard->spriteIds[sprite->data[2]] = 0xFF;
FreeAndDestroyTrainerPicSprite(sprite->data[3]);
}
}
@@ -3530,7 +3382,7 @@ static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite)
{
if (sprite->pos1.x >= 272)
{
- sBattleDomeStruct->arr[sprite->data[2]] = 0xFF;
+ sInfoCard->spriteIds[sprite->data[2]] = 0xFF;
FreeAndDestroyTrainerPicSprite(sprite->data[3]);
}
}
@@ -3550,7 +3402,7 @@ static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite)
{
if (sprite->pos1.x <= -32)
{
- sBattleDomeStruct->arr[sprite->data[2]] = 0xFF;
+ sInfoCard->spriteIds[sprite->data[2]] = 0xFF;
FreeAndDestroyTrainerPicSprite(sprite->data[3]);
}
}
@@ -3580,8 +3432,8 @@ static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite)
{
if (sprite->pos1.y >= 176)
{
- sBattleDomeStruct->arr[sprite->data[2]] = 0xFF;
- sub_80D2EF8(sprite);
+ sInfoCard->spriteIds[sprite->data[2]] = 0xFF;
+ FreeAndDestroyMonIconSprite(sprite);
}
}
}
@@ -3602,8 +3454,8 @@ static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite)
{
if (sprite->pos1.y <= -16)
{
- sBattleDomeStruct->arr[sprite->data[2]] = 0xFF;
- sub_80D2EF8(sprite);
+ sInfoCard->spriteIds[sprite->data[2]] = 0xFF;
+ FreeAndDestroyMonIconSprite(sprite);
}
}
}
@@ -3624,8 +3476,8 @@ static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite)
{
if (sprite->pos1.x >= 256)
{
- sBattleDomeStruct->arr[sprite->data[2]] = 0xFF;
- sub_80D2EF8(sprite);
+ sInfoCard->spriteIds[sprite->data[2]] = 0xFF;
+ FreeAndDestroyMonIconSprite(sprite);
}
}
}
@@ -3646,13 +3498,13 @@ static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite)
{
if (sprite->pos1.x <= -16)
{
- sBattleDomeStruct->arr[sprite->data[2]] = 0xFF;
- sub_80D2EF8(sprite);
+ sInfoCard->spriteIds[sprite->data[2]] = 0xFF;
+ FreeAndDestroyMonIconSprite(sprite);
}
}
}
-static void sub_8190B40(struct Sprite *sprite)
+static void SpriteCb_HorizontalScrollArrow(struct Sprite *sprite)
{
int taskId1 = sprite->data[0];
int arrId = gTasks[gTasks[taskId1].data[4]].data[1];
@@ -3663,13 +3515,13 @@ static void sub_8190B40(struct Sprite *sprite)
{
if (sprite->data[1])
{
- if ((gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated
- && sBattleDomeStruct->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].eliminatedAt))
+ if ((DOME_TRAINERS[tournmanetTrainerId].isEliminated
+ && sInfoCard->pos - 1 < DOME_TRAINERS[tournmanetTrainerId].eliminatedAt))
{
sprite->invisible = FALSE;
}
- else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated
- && sBattleDomeStruct->unk_10 - 1 < roundId)
+ else if (!DOME_TRAINERS[tournmanetTrainerId].isEliminated
+ && sInfoCard->pos - 1 < roundId)
{
sprite->invisible = FALSE;
}
@@ -3681,7 +3533,7 @@ static void sub_8190B40(struct Sprite *sprite)
}
else
{
- if (sBattleDomeStruct->unk_10 != 0)
+ if (sInfoCard->pos != 0)
{
sprite->invisible = FALSE;
}
@@ -3696,7 +3548,7 @@ static void sub_8190B40(struct Sprite *sprite)
{
if (sprite->data[1])
{
- if (sBattleDomeStruct->unk_10 > 1)
+ if (sInfoCard->pos > 1)
{
if (gTasks[taskId1].data[0] == 2)
sprite->invisible = TRUE;
@@ -3708,7 +3560,7 @@ static void sub_8190B40(struct Sprite *sprite)
}
else
{
- if (sBattleDomeStruct->unk_10 != 0)
+ if (sInfoCard->pos != 0)
{
sprite->invisible = FALSE;
}
@@ -3721,13 +3573,13 @@ static void sub_8190B40(struct Sprite *sprite)
}
}
-static void sub_8190C6C(struct Sprite *sprite)
+static void SpriteCb_VerticalScrollArrow(struct Sprite *sprite)
{
int taskId1 = sprite->data[0];
if (gTasks[taskId1].data[3] == 1)
{
- if (sBattleDomeStruct->unk_10 != 0)
+ if (sInfoCard->pos != 0)
{
if (gTasks[taskId1].data[0] == 2)
sprite->invisible = TRUE;
@@ -3739,7 +3591,7 @@ static void sub_8190C6C(struct Sprite *sprite)
}
else
{
- if (sBattleDomeStruct->unk_10 != 1)
+ if (sInfoCard->pos != 1)
{
if (gTasks[taskId1].data[0] == 2)
sprite->invisible = TRUE;
@@ -3751,39 +3603,53 @@ static void sub_8190C6C(struct Sprite *sprite)
}
}
-static void sub_8190CD4(u8 taskId)
+// Task states for Task_HandleInfoCardInput
+#define STATE_FADE_IN 0
+#define STATE_WAIT_FADE 1
+#define STATE_GET_INPUT 2
+#define STATE_REACT_INPUT 3
+#define STATE_MOVE_UP 4
+#define STATE_MOVE_DOWN 5
+#define STATE_MOVE_LEFT 6
+#define STATE_MOVE_RIGHT 7
+#define STATE_CLOSE_CARD 8
+
+#define tUsingAlternateSlot data[2] // CARD_ALTERNATE_SLOT
+
+static void Task_HandleInfoCardInput(u8 taskId)
{
int i;
int windowId = 0;
- int r9 = gTasks[taskId].data[3];
+ int mode = gTasks[taskId].data[3];
int taskId2 = gTasks[taskId].data[4];
- int trainerTournamentId = 0;
+ int trainerTourneyId = 0;
int matchNo = 0;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
- case 0:
+ case STATE_FADE_IN:
if (!gPaletteFade.active)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = STATE_WAIT_FADE;
}
break;
- case 1:
+ case STATE_WAIT_FADE:
if (!gPaletteFade.active)
- gTasks[taskId].data[0] = 2;
+ gTasks[taskId].tState = STATE_GET_INPUT;
break;
- case 2:
- i = sub_819221C(taskId);
+ case STATE_GET_INPUT:
+ i = Task_GetInfoCardInput(taskId);
switch (i)
{
- case 9:
+ case INFOCARD_INPUT_AB:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].data[0] = 8;
+ gTasks[taskId].tState = STATE_CLOSE_CARD;
break;
- case 1 ... 8:
+ case TRAINERCARD_INPUT_UP ... TRAINERCARD_INPUT_RIGHT:
+ case MATCHCARD_INPUT_UP ... MATCHCARD_INPUT_RIGHT:
gTasks[taskId].data[5] = i;
- if (gTasks[taskId].data[2] != 0)
+ if (gTasks[taskId].tUsingAlternateSlot)
windowId = 9;
else
windowId = 0;
@@ -3793,19 +3659,19 @@ static void sub_8190CD4(u8 taskId)
CopyWindowToVram(i, 2);
FillWindowPixelBuffer(i, PIXEL_FILL(0));
}
- gTasks[taskId].data[0] = 3;
+ gTasks[taskId].tState = STATE_REACT_INPUT;
break;
- case 0:
+ case INFOCARD_INPUT_NONE:
break;
}
break;
- case 3:
+ case STATE_REACT_INPUT:
i = gTasks[taskId].data[5];
switch (i)
{
- case 1:
- case 5:
- if (gTasks[taskId].data[2])
+ case TRAINERCARD_INPUT_UP:
+ case MATCHCARD_INPUT_UP:
+ if (gTasks[taskId].tUsingAlternateSlot)
{
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -3820,108 +3686,108 @@ static void sub_8190CD4(u8 taskId)
gBattle_BG1_Y = 0;
}
- if (i == 1)
+ if (i == TRAINERCARD_INPUT_UP)
{
- if (sBattleDomeStruct->unk_10 == 0)
+ if (sInfoCard->pos == 0)
{
gBattle_BG2_X = 0;
gBattle_BG2_Y = 320;
- trainerTournamentId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId);
+ trainerTourneyId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_UP, trainerTourneyId);
}
else
{
gBattle_BG2_X = 256;
gBattle_BG2_Y = 0;
- trainerTournamentId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId);
- sBattleDomeStruct->unk_10 = 0;
+ trainerTourneyId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_UP, trainerTourneyId);
+ sInfoCard->pos = 0;
}
}
- else
+ else // i == MATCHCARD_INPUT_UP
{
- if (sBattleDomeStruct->unk_10 == 0)
+ if (sInfoCard->pos == 0)
{
matchNo = gTasks[taskId2].data[1] - 16;
- sub_8192F08(matchNo, sBattleDomeStruct->unk_11);
+ BufferDomeWinString(matchNo, sInfoCard->tournamentIds);
gBattle_BG2_X = 0;
gBattle_BG2_Y = 320;
- trainerTournamentId = sBattleDomeStruct->unk_11[0];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId);
+ trainerTourneyId = sInfoCard->tournamentIds[0];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_UP, trainerTourneyId);
}
- else if (sBattleDomeStruct->unk_10 == 2)
+ else if (sInfoCard->pos == 2)
{
matchNo = gTasks[taskId2].data[1] - 16;
- sub_8192F08(matchNo, sBattleDomeStruct->unk_11);
+ BufferDomeWinString(matchNo, sInfoCard->tournamentIds);
gBattle_BG2_X = 0;
gBattle_BG2_Y = 320;
- trainerTournamentId = sBattleDomeStruct->unk_11[1];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId);
+ trainerTourneyId = sInfoCard->tournamentIds[1];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_UP, trainerTourneyId);
}
else
{
gBattle_BG2_X = 256;
gBattle_BG2_Y = 160;
matchNo = gTasks[taskId2].data[1] - 16;
- DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 0x10, matchNo);
+ DisplayMatchInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_UP, matchNo);
}
}
- for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++)
+ for (i = 0; i < NUM_INFOCARD_SPRITES / 2; i++)
{
if (i < 2)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollUp;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollUp;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollUp;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
+ for (i = NUM_INFOCARD_SPRITES / 2; i < NUM_INFOCARD_SPRITES; i++)
{
if (i < 10)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollUp;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollUp;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollUp;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- gTasks[taskId].data[0] = 4;
+ gTasks[taskId].tState = STATE_MOVE_UP;
gTasks[taskId].data[5] = 0;
break;
- case 2:
- case 6:
- if (gTasks[taskId].data[2])
+ case TRAINERCARD_INPUT_DOWN:
+ case MATCHCARD_INPUT_DOWN:
+ if (gTasks[taskId].tUsingAlternateSlot)
{
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -3936,107 +3802,107 @@ static void sub_8190CD4(u8 taskId)
gBattle_BG1_Y = 0;
}
- if (i == 2)
+ if (i == TRAINERCARD_INPUT_DOWN)
{
- if (sBattleDomeStruct->unk_10 == 0)
+ if (sInfoCard->pos == 0)
{
gBattle_BG2_X = 0;
gBattle_BG2_Y = 160;
- trainerTournamentId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId);
+ trainerTourneyId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_DOWN, trainerTourneyId);
}
else
{
gBattle_BG2_X = 0;
gBattle_BG2_Y = 0;
- trainerTournamentId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId);
- sBattleDomeStruct->unk_10 = 0;
+ trainerTourneyId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_DOWN, trainerTourneyId);
+ sInfoCard->pos = 0;
}
}
- else
+ else // i == MATCHCARD_INPUT_DOWN
{
- if (sBattleDomeStruct->unk_10 == 0)
+ if (sInfoCard->pos == 0)
{
matchNo = gTasks[taskId2].data[1] - 16;
- sub_8192F08(matchNo, sBattleDomeStruct->unk_11);
+ BufferDomeWinString(matchNo, sInfoCard->tournamentIds);
gBattle_BG2_X = 0;
gBattle_BG2_Y = 160;
- trainerTournamentId = sBattleDomeStruct->unk_11[0];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId);
+ trainerTourneyId = sInfoCard->tournamentIds[0];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_DOWN, trainerTourneyId);
}
- else if (sBattleDomeStruct->unk_10 == 2)
+ else if (sInfoCard->pos == 2)
{
matchNo = gTasks[taskId2].data[1] - 16;
- sub_8192F08(matchNo, sBattleDomeStruct->unk_11);
+ BufferDomeWinString(matchNo, sInfoCard->tournamentIds);
gBattle_BG2_X = 0;
gBattle_BG2_Y = 160;
- trainerTournamentId = sBattleDomeStruct->unk_11[1];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId);
+ trainerTourneyId = sInfoCard->tournamentIds[1];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_DOWN, trainerTourneyId);
}
else
{
gBattle_BG2_X = 256;
gBattle_BG2_Y = 0;
matchNo = gTasks[taskId2].data[1] - 16;
- DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 4, matchNo);
+ DisplayMatchInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_DOWN, matchNo);
}
}
- for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++)
+ for (i = 0; i < NUM_INFOCARD_SPRITES / 2; i++)
{
if (i < 2)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollDown;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollDown;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollDown;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
+ for (i = NUM_INFOCARD_SPRITES / 2; i < NUM_INFOCARD_SPRITES; i++)
{
if (i < 10)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollDown;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollDown;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollDown;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- gTasks[taskId].data[0] = 5;
+ gTasks[taskId].tState = STATE_MOVE_DOWN;
gTasks[taskId].data[5] = 0;
break;
- case 3:
- if (gTasks[taskId].data[2])
+ case TRAINERCARD_INPUT_LEFT:
+ if (gTasks[taskId].tUsingAlternateSlot)
{
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -4051,75 +3917,75 @@ static void sub_8190CD4(u8 taskId)
gBattle_BG1_Y = 0;
}
- if (sBattleDomeStruct->unk_10 == 0)
+ if (sInfoCard->pos == 0)
{
gBattle_BG2_X = 256;
gBattle_BG2_Y = 160;
- trainerTournamentId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId);
+ trainerTourneyId = sTourneyTreeTrainerIds[gTasks[taskId2].data[1]];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_LEFT, trainerTourneyId);
}
else
{
gBattle_BG2_X = 256;
gBattle_BG2_Y = 0;
- matchNo = gUnknown_0860D15C[gTasks[taskId2].data[1]][sBattleDomeStruct->unk_10 - 1];
- DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo);
+ matchNo = sIdToMatchNumber[gTasks[taskId2].data[1]][sInfoCard->pos - 1];
+ DisplayMatchInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_LEFT, matchNo);
}
- for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++)
+ for (i = 0; i < NUM_INFOCARD_SPRITES / 2; i++)
{
if (i < 2)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollLeft;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
+ for (i = NUM_INFOCARD_SPRITES / 2; i < NUM_INFOCARD_SPRITES; i++)
{
if (i < 10)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollLeft;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- gTasks[taskId].data[0] = 6;
+ gTasks[taskId].tState = STATE_MOVE_LEFT;
gTasks[taskId].data[5] = 0;
break;
- case 7:
- if (gTasks[taskId].data[2])
+ case MATCHCARD_INPUT_LEFT:
+ if (gTasks[taskId].tUsingAlternateSlot)
{
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -4134,75 +4000,75 @@ static void sub_8190CD4(u8 taskId)
gBattle_BG1_Y = 0;
}
- if (sBattleDomeStruct->unk_10 == 0)
+ if (sInfoCard->pos == 0)
{
gBattle_BG2_X = 256;
gBattle_BG2_Y = 160;
- trainerTournamentId = sBattleDomeStruct->unk_11[0];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId);
+ trainerTourneyId = sInfoCard->tournamentIds[0];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_LEFT, trainerTourneyId);
}
else
{
gBattle_BG2_X = 0;
gBattle_BG2_Y = 160;
matchNo = gTasks[taskId2].data[1] - 16;
- DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo);
+ DisplayMatchInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_LEFT, matchNo);
}
- for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++)
+ for (i = 0; i < NUM_INFOCARD_SPRITES / 2; i++)
{
if (i < 2)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollLeft;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
+ for (i = NUM_INFOCARD_SPRITES / 2; i < NUM_INFOCARD_SPRITES; i++)
{
if (i < 10)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollLeft;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollLeft;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- gTasks[taskId].data[0] = 6;
+ gTasks[taskId].tState = STATE_MOVE_LEFT;
gTasks[taskId].data[5] = 0;
break;
- case 4:
- if (gTasks[taskId].data[2])
+ case TRAINERCARD_INPUT_RIGHT:
+ if (gTasks[taskId].tUsingAlternateSlot)
{
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -4217,7 +4083,7 @@ static void sub_8190CD4(u8 taskId)
gBattle_BG1_Y = 0;
}
- if (sBattleDomeStruct->unk_10 == 1)
+ if (sInfoCard->pos == 1)
{
gBattle_BG2_X = 0;
gBattle_BG2_Y = 160;
@@ -4227,63 +4093,63 @@ static void sub_8190CD4(u8 taskId)
gBattle_BG2_X = 0;
gBattle_BG2_Y = 0;
}
- matchNo = gUnknown_0860D15C[gTasks[taskId2].data[1]][sBattleDomeStruct->unk_10 - 1];
- DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo);
+ matchNo = sIdToMatchNumber[gTasks[taskId2].data[1]][sInfoCard->pos - 1];
+ DisplayMatchInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_RIGHT, matchNo);
- for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++)
+ for (i = 0; i < NUM_INFOCARD_SPRITES / 2; i++)
{
if (i < 2)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollRight;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
+ for (i = NUM_INFOCARD_SPRITES / 2; i < NUM_INFOCARD_SPRITES; i++)
{
if (i < 10)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollRight;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- gTasks[taskId].data[0] = 7;
+ gTasks[taskId].tState = STATE_MOVE_RIGHT;
gTasks[taskId].data[5] = 0;
break;
- case 8:
- if (gTasks[taskId].data[2])
+ case MATCHCARD_INPUT_RIGHT:
+ if (gTasks[taskId].tUsingAlternateSlot)
{
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -4298,76 +4164,76 @@ static void sub_8190CD4(u8 taskId)
gBattle_BG1_Y = 0;
}
- if (sBattleDomeStruct->unk_10 == 2)
+ if (sInfoCard->pos == 2)
{
gBattle_BG2_X = 256;
gBattle_BG2_Y = 160;
- trainerTournamentId = sBattleDomeStruct->unk_11[1];
- DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 2, trainerTournamentId);
+ trainerTourneyId = sInfoCard->tournamentIds[1];
+ DisplayTrainerInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_RIGHT, trainerTourneyId);
}
else
{
gBattle_BG2_X = 0;
gBattle_BG2_Y = 160;
matchNo = gTasks[taskId2].data[1] - 16;
- DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo);
+ DisplayMatchInfoOnCard(gTasks[taskId].tUsingAlternateSlot | MOVE_CARD_RIGHT, matchNo);
}
- for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++)
+ for (i = 0; i < NUM_INFOCARD_SPRITES / 2; i++)
{
if (i < 2)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollRight;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1;
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot ^ 1;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
+ for (i = NUM_INFOCARD_SPRITES / 2; i < NUM_INFOCARD_SPRITES; i++)
{
if (i < 10)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
- gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i];
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_TrainerIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].data[3] = sInfoCard->spriteIds[i];
}
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
+ if (sInfoCard->spriteIds[i] != 0xFF)
{
- gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollRight;
- gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2];
- gSprites[sBattleDomeStruct->arr[i]].data[1] = 0;
- gSprites[sBattleDomeStruct->arr[i]].data[2] = i;
+ gSprites[sInfoCard->spriteIds[i]].callback = SpriteCb_MonIconCardScrollRight;
+ gSprites[sInfoCard->spriteIds[i]].data[0] = gTasks[taskId].tUsingAlternateSlot;
+ gSprites[sInfoCard->spriteIds[i]].data[1] = 0;
+ gSprites[sInfoCard->spriteIds[i]].data[2] = i;
}
}
}
- gTasks[taskId].data[0] = 7;
+ gTasks[taskId].tState = STATE_MOVE_RIGHT;
gTasks[taskId].data[5] = 0;
break;
}
break;
- case 4:
+ case STATE_MOVE_UP:
if (++gTasks[taskId].data[5] != 41)
{
gBattle_BG0_Y -= 4;
@@ -4376,10 +4242,10 @@ static void sub_8190CD4(u8 taskId)
}
else
{
- gTasks[taskId].data[0] = 2;
+ gTasks[taskId].tState = STATE_GET_INPUT;
}
break;
- case 5:
+ case STATE_MOVE_DOWN:
if (++gTasks[taskId].data[5] != 41)
{
gBattle_BG0_Y += 4;
@@ -4388,10 +4254,10 @@ static void sub_8190CD4(u8 taskId)
}
else
{
- gTasks[taskId].data[0] = 2;
+ gTasks[taskId].tState = STATE_GET_INPUT;
}
break;
- case 6:
+ case STATE_MOVE_LEFT:
if (++gTasks[taskId].data[5] != 65)
{
gBattle_BG0_X -= 4;
@@ -4400,10 +4266,10 @@ static void sub_8190CD4(u8 taskId)
}
else
{
- gTasks[taskId].data[0] = 2;
+ gTasks[taskId].tState = STATE_GET_INPUT;
}
break;
- case 7:
+ case STATE_MOVE_RIGHT:
if (++gTasks[taskId].data[5] != 65)
{
gBattle_BG0_X += 4;
@@ -4412,43 +4278,44 @@ static void sub_8190CD4(u8 taskId)
}
else
{
- gTasks[taskId].data[0] = 2;
+ gTasks[taskId].tState = STATE_GET_INPUT;
}
break;
- case 8:
+ case STATE_CLOSE_CARD:
if (!gPaletteFade.active)
{
- for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++)
+ for (i = 0; i < NUM_INFOCARD_SPRITES / 2; i++)
{
if (i < 2)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
- FreeAndDestroyTrainerPicSprite(sBattleDomeStruct->arr[i]);
+ if (sInfoCard->spriteIds[i] != 0xFF)
+ FreeAndDestroyTrainerPicSprite(sInfoCard->spriteIds[i]);
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
- sub_80D2EF8(&gSprites[sBattleDomeStruct->arr[i]]);
+ if (sInfoCard->spriteIds[i] != 0xFF)
+ FreeAndDestroyMonIconSprite(&gSprites[sInfoCard->spriteIds[i]]);
}
}
- for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
+ for (i = NUM_INFOCARD_SPRITES / 2; i < NUM_INFOCARD_SPRITES; i++)
{
if (i < 10)
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
- FreeAndDestroyTrainerPicSprite(sBattleDomeStruct->arr[i]);
+ if (sInfoCard->spriteIds[i] != 0xFF)
+ FreeAndDestroyTrainerPicSprite(sInfoCard->spriteIds[i]);
}
else
{
- if (sBattleDomeStruct->arr[i] != 0xFF)
- sub_80D2EF8(&gSprites[sBattleDomeStruct->arr[i]]);
+ if (sInfoCard->spriteIds[i] != 0xFF)
+ FreeAndDestroyMonIconSprite(&gSprites[sInfoCard->spriteIds[i]]);
}
}
FreeMonIconPalettes();
- FREE_AND_SET_NULL(sBattleDomeStruct);
+ FREE_AND_SET_NULL(sInfoCard);
FreeAllWindowBuffers();
- if (r9 == 0)
+
+ if (mode == INFOCARD_NEXT_OPPONENT)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
@@ -4456,10 +4323,10 @@ static void sub_8190CD4(u8 taskId)
{
i = CreateTask(Task_ShowTourneyTree, 0);
gTasks[i].data[0] = 0;
- gTasks[i].data[1] = 0;
+ gTasks[i].tNotInteractive = FALSE;
gTasks[i].data[2] = 3;
gTasks[i].data[3] = gTasks[taskId].data[4];
- gTasks[i].data[4] = gTasks[taskId2].data[6];
+ gTasks[i].tIsPrevTourneyTree = gTasks[taskId2].data[6];
}
DestroyTask(taskId);
}
@@ -4467,116 +4334,142 @@ static void sub_8190CD4(u8 taskId)
}
}
-static u8 sub_819221C(u8 taskId)
+// undefine task states for Task_HandleInfoCardInput
+#undef STATE_FADE_IN
+#undef STATE_WAIT_FADE
+#undef STATE_GET_INPUT
+#undef STATE_REACT_INPUT
+#undef STATE_MOVE_UP
+#undef STATE_MOVE_DOWN
+#undef STATE_MOVE_LEFT
+#undef STATE_MOVE_RIGHT
+#undef STATE_CLOSE_CARD
+
+static u8 Task_GetInfoCardInput(u8 taskId)
{
- u8 retVal = 0;
+ u8 input = INFOCARD_INPUT_NONE;
int taskId2 = gTasks[taskId].data[4];
- int r5 = gTasks[taskId2].data[1];
- u8 r10 = sTourneyTreeTrainerIds[r5];
+ int position = gTasks[taskId2].data[1];
+ u8 tourneyId = sTourneyTreeTrainerIds[position];
u16 roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
- retVal = 9;
+ input = INFOCARD_INPUT_AB;
- if (gTasks[taskId].data[3] == 0)
- return retVal;
+ // Next opponent card cant scroll
+ if (gTasks[taskId].data[3] == INFOCARD_NEXT_OPPONENT)
+ return input;
- if (gTasks[taskId].data[3] == 1)
+ if (gTasks[taskId].data[3] == INFOCARD_TRAINER)
{
- if (gMain.newKeys & DPAD_UP && sBattleDomeStruct->unk_10 == 0)
+ // For trainer info cards, pos is 0 when on a trainer info card (not viewing that trainer's match progression)
+ // Scrolling up/down from a trainer info card goes to other trainer info cards
+ if (gMain.newKeys & DPAD_UP && sInfoCard->pos == 0)
{
- if (r5 == 0)
- r5 = 15;
+ if (position == 0)
+ position = DOME_TOURNAMENT_TRAINERS_COUNT - 1;
else
- r5--;
- retVal = 1;
+ position--;
+ input = TRAINERCARD_INPUT_UP;
}
- else if (gMain.newKeys & DPAD_DOWN && sBattleDomeStruct->unk_10 == 0)
+ else if (gMain.newKeys & DPAD_DOWN && sInfoCard->pos == 0)
{
- if (r5 == 15)
- r5 = 0;
+ if (position == DOME_TOURNAMENT_TRAINERS_COUNT - 1)
+ position = 0;
else
- r5++;
- retVal = 2;
+ position++;
+ input = TRAINERCARD_INPUT_DOWN;
}
- else if (gMain.newKeys & DPAD_LEFT && sBattleDomeStruct->unk_10 != 0)
+ // Scrolling left can only be done after scrolling right
+ else if (gMain.newKeys & DPAD_LEFT && sInfoCard->pos != 0)
{
- sBattleDomeStruct->unk_10--;
- retVal = 3;
+ sInfoCard->pos--;
+ input = TRAINERCARD_INPUT_LEFT;
}
+ // Scrolling right from a trainer info card shows their match progression
else if (gMain.newKeys & DPAD_RIGHT)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && sBattleDomeStruct->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].eliminatedAt)
+ // Can only scroll right from a trainer card until the round they were eliminated
+ if (DOME_TRAINERS[tourneyId].isEliminated && sInfoCard->pos - 1 < DOME_TRAINERS[tourneyId].eliminatedAt)
{
- sBattleDomeStruct->unk_10++;
- retVal = 4;
+ sInfoCard->pos++;
+ input = TRAINERCARD_INPUT_RIGHT;
}
- if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && sBattleDomeStruct->unk_10 - 1 < roundId)
+ // otherwise can scroll as far right as the current round allows
+ if (!DOME_TRAINERS[tourneyId].isEliminated && sInfoCard->pos - 1 < roundId)
{
- sBattleDomeStruct->unk_10++;
- retVal = 4;
+ sInfoCard->pos++;
+ input = TRAINERCARD_INPUT_RIGHT;
}
}
- if (retVal == 9)
+ if (input == INFOCARD_INPUT_AB)
{
- if (sBattleDomeStruct->unk_10 != 0)
- gTasks[taskId2].data[1] = gUnknown_0860D1A0[r5 / 2][sBattleDomeStruct->unk_10 - 1];
+ if (sInfoCard->pos != 0)
+ gTasks[taskId2].data[1] = gUnknown_0860D1A0[position / 2][sInfoCard->pos - 1];
else
- gTasks[taskId2].data[1] = r5;
+ gTasks[taskId2].data[1] = position;
}
}
- else
+ else // gTasks[taskId].data[3] == INFOCARD_MATCH
{
- if (gMain.newKeys & DPAD_UP && sBattleDomeStruct->unk_10 == 1)
+ // For match info cards, pos is 1 when on the match card, 0 when on the left trainer, and 1 when on the right trainer
+ // Scrolling up/down from a match info card goes to the next/previous match
+ if (gMain.newKeys & DPAD_UP && sInfoCard->pos == 1)
{
- if (r5 == 16)
- r5 = gUnknown_0860D19C[roundId];
+ if (position == DOME_TOURNAMENT_TRAINERS_COUNT)
+ position = sLastMatchCardNum[roundId];
else
- r5--;
- retVal = 5;
+ position--;
+ input = MATCHCARD_INPUT_UP;
}
- else if (gMain.newKeys & DPAD_DOWN && sBattleDomeStruct->unk_10 == 1)
+ else if (gMain.newKeys & DPAD_DOWN && sInfoCard->pos == 1)
{
- if (r5 == gUnknown_0860D19C[roundId])
- r5 = 16;
+ if (position == sLastMatchCardNum[roundId])
+ position = DOME_TOURNAMENT_TRAINERS_COUNT;
else
- r5++;
- retVal = 6;
+ position++;
+ input = MATCHCARD_INPUT_DOWN;
}
- else if (gMain.newKeys & DPAD_LEFT && sBattleDomeStruct->unk_10 != 0)
+ // Scrolling left/right from a match info card shows the trainer info card of the competitors for that match
+ else if (gMain.newKeys & DPAD_LEFT && sInfoCard->pos != 0)
{
- retVal = 7;
- sBattleDomeStruct->unk_10--;
+ input = MATCHCARD_INPUT_LEFT;
+ sInfoCard->pos--;
}
- else if (gMain.newKeys & DPAD_RIGHT && (sBattleDomeStruct->unk_10 == 0 || sBattleDomeStruct->unk_10 == 1))
+ else if (gMain.newKeys & DPAD_RIGHT && (sInfoCard->pos == 0 || sInfoCard->pos == 1))
{
- retVal = 8;
- sBattleDomeStruct->unk_10++;
+ input = MATCHCARD_INPUT_RIGHT;
+ sInfoCard->pos++;
}
- if (retVal == 9)
+ if (input == INFOCARD_INPUT_AB)
{
- if (sBattleDomeStruct->unk_10 == 0)
- gTasks[taskId2].data[1] = gUnknown_0860D1C0[sBattleDomeStruct->unk_11[0]];
- else if (sBattleDomeStruct->unk_10 == 2)
- gTasks[taskId2].data[1] = gUnknown_0860D1C0[sBattleDomeStruct->unk_11[1]];
- else
- gTasks[taskId2].data[1] = r5;
+ if (sInfoCard->pos == 0) // On left trainer info card
+ gTasks[taskId2].data[1] = gUnknown_0860D1C0[sInfoCard->tournamentIds[0]];
+ else if (sInfoCard->pos == 2) // On right trainer info card
+ gTasks[taskId2].data[1] = gUnknown_0860D1C0[sInfoCard->tournamentIds[1]];
+ else // On match info card
+ gTasks[taskId2].data[1] = position;
}
}
- if (retVal != 0 && retVal != 9)
+ if (input != INFOCARD_INPUT_NONE && input != INFOCARD_INPUT_AB)
{
PlaySE(SE_SELECT);
- gTasks[taskId2].data[1] = r5;
- gTasks[taskId].data[2] ^= 1;
+ gTasks[taskId2].data[1] = position;
+ gTasks[taskId].tUsingAlternateSlot ^= 1;
}
- return retVal;
+ return input;
}
-static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
+#undef tUsingAlternateSlot
+
+// allocatedArray below needs to be large enough to hold stat totals for each mon, or totals of each type of move points
+#define ALLOC_ARRAY_SIZE (NUM_STATS * FRONTIER_PARTY_SIZE >= NUM_MOVE_POINT_TYPES ? (NUM_STATS * FRONTIER_PARTY_SIZE) : NUM_MOVE_POINT_TYPES)
+
+static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
{
struct TextPrinterTemplate textPrinter;
int i, j, k;
@@ -4586,63 +4479,67 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
int windowId = 0;
int x = 0, y = 0;
u8 palSlot = 0;
- s16 *allocatedArray = AllocZeroed(sizeof(s16) * 18);
- trainerId = gSaveBlock2Ptr->frontier.domeTrainers[trainerTournamentId].trainerId;
+ s16 *allocatedArray = AllocZeroed(sizeof(s16) * ALLOC_ARRAY_SIZE);
+ trainerId = DOME_TRAINERS[trainerTourneyId].trainerId;
- if (flags & 1)
- arrId = 8, windowId = 9, palSlot = 2;
- if (flags & 2)
+ if (flags & CARD_ALTERNATE_SLOT)
+ arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = 9, palSlot = 2;
+ if (flags & MOVE_CARD_RIGHT)
x = 256;
- if (flags & 4)
+ if (flags & MOVE_CARD_DOWN)
y = 160;
- if (flags & 8)
+ if (flags & MOVE_CARD_LEFT)
x = -256;
- if (flags & 0x10)
+ if (flags & MOVE_CARD_UP)
y = -160;
+ // Create trainer pic sprite
if (trainerId == TRAINER_PLAYER)
- sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF);
+ sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF);
else if (trainerId == TRAINER_FRONTIER_BRAIN)
- sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF);
+ sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF);
else
- sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF);
+ sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF);
- if (flags & 0x1E)
- gSprites[sBattleDomeStruct->arr[arrId]].invisible = TRUE;
+ if (flags & MOVE_CARD)
+ gSprites[sInfoCard->spriteIds[arrId]].invisible = TRUE;
- for (i = 0; i < 3; i++)
+ // Create party mon icons
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
if (trainerId == TRAINER_PLAYER)
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i],
+ sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[trainerTourneyId][i],
SpriteCb_MonIcon,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].oam.priority = 0;
}
else if (trainerId == TRAINER_FRONTIER_BRAIN)
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i],
+ sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[trainerTourneyId][i],
SpriteCb_MonIcon,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].oam.priority = 0;
}
else
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].species,
+ sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].species,
SpriteCb_MonIcon,
x | sInfoTrainerMonX[i],
y + sInfoTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].oam.priority = 0;
}
- if (flags & 0x1E)
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].invisible = TRUE;
+ if (flags & MOVE_CARD)
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].invisible = TRUE;
}
+
+ // Initialize the text printer
textPrinter.fontId = 2;
textPrinter.x = 0;
textPrinter.y = 0;
@@ -4651,10 +4548,11 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
textPrinter.letterSpacing = 2;
textPrinter.lineSpacing = 0;
textPrinter.unk = 0;
- textPrinter.fgColor = 14;
- textPrinter.bgColor = 0;
- textPrinter.shadowColor = 13;
+ textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
+ textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
+ textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
+ // Get class and trainer name
i = 0;
if (trainerId == TRAINER_PLAYER)
j = gFacilityClassToTrainerClass[FACILITY_CLASS_BRENDAN];
@@ -4683,6 +4581,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
StringAppend(gStringVar1, gStringVar2);
}
+ // Print class and trainer name
textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, gStringVar1, 0xD0, textPrinter.letterSpacing);
textPrinter.currentChar = gStringVar1;
textPrinter.windowId = windowId;
@@ -4691,15 +4590,16 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
AddTextPrinter(&textPrinter, 0, NULL);
textPrinter.letterSpacing = 0;
- for (i = 0; i < 3; i++)
+ // Print names of the party mons
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- textPrinter.currentY = gUnknown_0860D346[i];
+ textPrinter.currentY = sSpeciesNameTextYCoords[i];
if (trainerId == TRAINER_PLAYER)
- textPrinter.currentChar = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]];
+ textPrinter.currentChar = gSpeciesNames[DOME_MONS[trainerTourneyId][i]];
else if (trainerId == TRAINER_FRONTIER_BRAIN)
- textPrinter.currentChar = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]];
+ textPrinter.currentChar = gSpeciesNames[DOME_MONS[trainerTourneyId][i]];
else
- textPrinter.currentChar = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].species];
+ textPrinter.currentChar = gSpeciesNames[gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].species];
textPrinter.windowId = 1 + i + windowId;
if (i == 1)
@@ -4714,10 +4614,12 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
PutWindowTilemap(windowId + 4);
CopyWindowToVram(windowId + 4, 3);
+
+ // Print text about trainers potential in the tourney
if (trainerId == TRAINER_FRONTIER_BRAIN)
- textPrinter.currentChar = sBattleDomePotentialTexts[16];
+ textPrinter.currentChar = sBattleDomePotentialTexts[DOME_TOURNAMENT_TRAINERS_COUNT];
else
- textPrinter.currentChar = sBattleDomePotentialTexts[trainerTournamentId];
+ textPrinter.currentChar = sBattleDomePotentialTexts[trainerTourneyId];
textPrinter.fontId = 1;
textPrinter.windowId = windowId + 4;
@@ -4726,91 +4628,103 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
textPrinter.currentY = 4;
AddTextPrinter(&textPrinter, 0, NULL);
- for (i = 0; i < 3; i++)
+ // Calculate move scores to determine the trainers battle style
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
for (j = 0; j < MAX_MON_MOVES; j++)
{
- for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++)
+ for (k = 0; k < NUM_MOVE_POINT_TYPES; k++)
{
if (trainerId == TRAINER_FRONTIER_BRAIN)
- allocatedArray[k] += sMovePointsForDomeTrainers[GetFrontierBrainMonMove(i, j)][k];
+ allocatedArray[k] += sBattleStyleMovePoints[GetFrontierBrainMonMove(i, j)][k];
else if (trainerId == TRAINER_PLAYER)
- allocatedArray[k] += sMovePointsForDomeTrainers[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k];
+ allocatedArray[k] += sBattleStyleMovePoints[gSaveBlock2Ptr->frontier.domePlayerPartyData[i].moves[j]][k];
else
- allocatedArray[k] += sMovePointsForDomeTrainers[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].moves[j]][k];
+ allocatedArray[k] += sBattleStyleMovePoints[gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].moves[j]][k];
}
}
}
- for (i = 0; i < ARRAY_COUNT(gUnknown_0860C988); i++)
+ // Get the battle style the trainer uses
+ // Each element of sBattleStyleThresholds is an array of point thresholds for particular move qualities
+ // If all the point thresholds in the array are satisfied, the player is considered to be using that battle style
+ for (i = 0; i < ARRAY_COUNT(sBattleStyleThresholds); i++)
{
- int r4 = 0;
+ int thresholdStatCount = 0;
- for (k = 0, j = 0; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++)
+ for (k = 0, j = 0; j < NUM_MOVE_POINT_TYPES; j++)
{
- if (gUnknown_0860C988[i][j] != 0)
+ if (sBattleStyleThresholds[i][j] != 0)
{
- r4++;
- if (allocatedArray[j] != 0 && allocatedArray[j] >= gUnknown_0860C988[i][j])
- k++;
+ thresholdStatCount++;
+ if (allocatedArray[j] != 0 && allocatedArray[j] >= sBattleStyleThresholds[i][j])
+ k++; // number of point thresholds met/exceeded
}
}
- if (r4 == k)
- break;
+ if (thresholdStatCount == k)
+ break; // All thresholds for battle style met/exceeded, player uses this battle style
}
+ // Print the trainers battle style
textPrinter.currentChar = sBattleDomeOpponentStyleTexts[i];
textPrinter.y = 20;
textPrinter.currentY = 20;
AddTextPrinter(&textPrinter, 0, NULL);
- for (i = 0; i < 18; i++)
+ for (i = 0; i < ALLOC_ARRAY_SIZE; i++)
allocatedArray[i] = 0;
+ // Calculate EV/nature points for the stat portion of battle style
if (trainerId == TRAINER_FRONTIER_BRAIN || trainerId == TRAINER_PLAYER)
{
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- for (j = 0; j < 6; j++)
+ // Add the EVs for this mon
+ for (j = 0; j < NUM_STATS; j++)
{
if (trainerId == TRAINER_FRONTIER_BRAIN)
allocatedArray[j] = GetFrontierBrainMonEvs(i, j);
else
- allocatedArray[j] = gSaveBlock2Ptr->frontier.field_EFC[i].evs[j];
+ allocatedArray[j] = gSaveBlock2Ptr->frontier.domePlayerPartyData[i].evs[j];
}
- allocatedArray[6] += allocatedArray[0];
- for (j = 0; j < 5; j++)
+
+ // HP doesnt have a nature modifier, so just add it here
+ allocatedArray[NUM_STATS] += allocatedArray[STAT_HP];
+
+ // Add the EVs with the nature modifier for this mon and and track number of negative natures
+ for (j = 0; j < NUM_EV_STATS; j++)
{
if (trainerId == TRAINER_FRONTIER_BRAIN)
nature = GetFrontierBrainMonNature(i);
else
- nature = gSaveBlock2Ptr->frontier.field_EFC[i].nature;
+ nature = gSaveBlock2Ptr->frontier.domePlayerPartyData[i].nature;
if (gNatureStatTable[nature][j] > 0)
{
- allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100;
+ allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 110) / 100;
}
else if (gNatureStatTable[nature][j] < 0)
{
- allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100;
- allocatedArray[j + 13]++;
+ allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 90) / 100;
+ allocatedArray[j + NUM_STATS + NUM_EV_STATS + 2]++;
}
else
{
- allocatedArray[j + 7] += allocatedArray[j + 1];
+ allocatedArray[j + NUM_STATS + 1] += allocatedArray[j + 1];
}
}
}
- for (j = 0, i = 0; i < 6; i++)
- j += allocatedArray[6 + i];
- for (i = 0; i < 6; i++)
- allocatedArray[i] = (allocatedArray[6 + i] * 100) / j;
+ for (j = 0, i = 0; i < NUM_STATS; i++)
+ j += allocatedArray[NUM_STATS + i];
+ for (i = 0; i < NUM_STATS; i++)
+ allocatedArray[i] = (allocatedArray[NUM_STATS + i] * 100) / j;
}
+ // Same as above but for regular trainers instead of the frontier brain or player
else
{
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- int evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].evSpread;
+ int evBits = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].evSpread;
for (k = 0, j = 0; j < NUM_STATS; j++)
{
allocatedArray[j] = 0;
@@ -4819,7 +4733,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
evBits >>= 1;
}
k = MAX_TOTAL_EVS / k;
- evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].evSpread;
+ evBits = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].evSpread;
for (j = 0; j < NUM_STATS; j++)
{
if (evBits & 1)
@@ -4827,37 +4741,42 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
evBits >>= 1;
}
- allocatedArray[6] += allocatedArray[0];
- for (j = 0; j < 5; j++)
+ allocatedArray[NUM_STATS] += allocatedArray[STAT_HP];
+ for (j = 0; j < NUM_EV_STATS; j++)
{
- nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].nature;
+ nature = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].nature;
if (gNatureStatTable[nature][j] > 0)
{
- allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100;
+ allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 110) / 100;
}
else if (gNatureStatTable[nature][j] < 0)
{
- allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100;
- allocatedArray[j + 13]++;
+ allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 90) / 100;
+ allocatedArray[j + NUM_STATS + NUM_EV_STATS + 2]++;
}
else
{
- allocatedArray[j + 7] += allocatedArray[j + 1];
+ allocatedArray[j + NUM_STATS + 1] += allocatedArray[j + 1];
}
}
}
- for (j = 0, i = 0; i < 6; i++)
- j += allocatedArray[i + 6];
- for (i = 0; i < 6; i++)
- allocatedArray[i] = (allocatedArray[6 + i] * 100) / j;
+ for (j = 0, i = 0; i < NUM_STATS; i++)
+ j += allocatedArray[i + NUM_STATS];
+ for (i = 0; i < NUM_STATS; i++)
+ allocatedArray[i] = (allocatedArray[NUM_STATS + i] * 100) / j;
}
- for (i = 0, j = 0, k = 0; k < 6; k++)
+ // Count the number of good/bad stats for the party
+ // i is the number of good stats, j is the number of bad stats
+ for (i = 0, j = 0, k = 0; k < NUM_STATS; k++)
{
+ // Any stat above 29 EVs is considered good
if (allocatedArray[k] > 29)
{
+ // If 2 good stats have been found already, choose which to use
if (i == 2)
{
+
if (allocatedArray[6] < allocatedArray[k])
{
if (allocatedArray[7] < allocatedArray[k])
@@ -4890,8 +4809,11 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
i++;
}
}
+
+ // Any stat with 0 EVs is considered bad
if (allocatedArray[k] == 0)
{
+ // If 2 bad stats have been found already, choose which to use
if (j == 2)
{
if (allocatedArray[k + 12] >= 2
@@ -4920,17 +4842,19 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
}
}
+ // Get the string ID to display which stats are good/bad
if (i == 2)
- i = gUnknown_0860D349[allocatedArray[6]] + (allocatedArray[7] - (allocatedArray[6] + 1));
+ i = sStatTextOffsets[allocatedArray[6]] + (allocatedArray[7] - (allocatedArray[6] + 1)) + DOME_TEXT_TWO_GOOD_STATS;
else if (i == 1)
- i = allocatedArray[6] + 15;
+ i = allocatedArray[6] + DOME_TEXT_ONE_GOOD_STAT;
else if (j == 2)
- i = gUnknown_0860D349[allocatedArray[8]] + (allocatedArray[9] - (allocatedArray[8] + 1)) + 21;
+ i = sStatTextOffsets[allocatedArray[8]] + (allocatedArray[9] - (allocatedArray[8] + 1)) + DOME_TEXT_TWO_BAD_STATS;
else if (j == 1)
- i = allocatedArray[8] + 36;
+ i = allocatedArray[8] + DOME_TEXT_ONE_BAD_STAT;
else
- i = 42;
+ i = DOME_TEXT_WELL_BALANCED;
+ // Print the stat text
textPrinter.currentChar = sBattleDomeOpponentStatsTexts[i];
textPrinter.y = 36;
textPrinter.currentY = 36;
@@ -4938,55 +4862,61 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId)
Free(allocatedArray);
}
-static int sub_8192F08(u8 arg0, u8 *arg1)
+static int BufferDomeWinString(u8 matchNum, u8 *tournamentIds)
{
int i;
u8 tournamentId;
- int retVal = 0;
+ int winStringId = 0;
int count = 0;
- for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++)
+ // Get winners name
+ for (i = sCompetitorRangeByMatch[matchNum][0]; i < sCompetitorRangeByMatch[matchNum][0] + sCompetitorRangeByMatch[matchNum][1]; i++)
{
- tournamentId = gUnknown_0860D3B4[i];
- if (!gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated)
+ tournamentId = sTourneyTreeTrainerIds2[i];
+ if (!DOME_TRAINERS[tournamentId].isEliminated)
{
- arg1[count] = tournamentId;
- if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER)
+ tournamentIds[count] = tournamentId;
+ if (DOME_TRAINERS[tournamentId].trainerId == TRAINER_PLAYER)
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
- else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
+ else if (DOME_TRAINERS[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
CopyDomeBrainTrainerName(gStringVar1);
else
- CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId);
+ CopyDomeTrainerName(gStringVar1, DOME_TRAINERS[tournamentId].trainerId);
count++;
}
}
+ // Neither trainer has been eliminated, battle hasn't occurred yet
if (count == 2)
- return 0;
+ return DOME_TEXT_NO_WINNER_YET;
- for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++)
+ for (i = sCompetitorRangeByMatch[matchNum][0]; i < sCompetitorRangeByMatch[matchNum][0] + sCompetitorRangeByMatch[matchNum][1]; i++)
{
- tournamentId = gUnknown_0860D3B4[i];
- if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated
- && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt >= gUnknown_0860D3C4[arg0][2])
+ tournamentId = sTourneyTreeTrainerIds2[i];
+
+ if (DOME_TRAINERS[tournamentId].isEliminated
+ && DOME_TRAINERS[tournamentId].eliminatedAt >= sCompetitorRangeByMatch[matchNum][2])
{
- arg1[count] = tournamentId;
+ tournamentIds[count] = tournamentId;
count++;
- if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt == gUnknown_0860D3C4[arg0][2])
+
+ if (DOME_TRAINERS[tournamentId].eliminatedAt == sCompetitorRangeByMatch[matchNum][2])
{
- StringCopy(gStringVar2, gMoveNames[gSaveBlock2Ptr->frontier.field_EC0[tournamentId]]);
- retVal = gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 * 2;
- if (gSaveBlock2Ptr->frontier.field_EC0[tournamentId] == 0 && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 == 0)
- retVal = 4;
+ // Set initial winStringId offset
+ StringCopy(gStringVar2, gMoveNames[gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId]]);
+ winStringId = DOME_TRAINERS[tournamentId].forfeited * 2; // (DOME_TEXT_WON_USING_MOVE - 1) or (DOME_TEXT_WON_ON_FORFEIT - 1)
+
+ if (gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId] == MOVE_NONE && DOME_TRAINERS[tournamentId].forfeited == FALSE)
+ winStringId = DOME_TEXT_WON_NO_MOVES - 1;
}
else
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER)
+ if (DOME_TRAINERS[tournamentId].trainerId == TRAINER_PLAYER)
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
- else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
+ else if (DOME_TRAINERS[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
CopyDomeBrainTrainerName(gStringVar1);
else
- CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId);
+ CopyDomeTrainerName(gStringVar1, DOME_TRAINERS[tournamentId].trainerId);
}
}
@@ -4994,10 +4924,10 @@ static int sub_8192F08(u8 arg0, u8 *arg1)
break;
}
- if (arg0 == 14)
- return retVal + 2;
+ if (matchNum == DOME_TOURNAMENT_MATCHES_COUNT - 1)
+ return winStringId + 2; // use DOME_TEXT_CHAMP_*
else
- return retVal + 1;
+ return winStringId + 1; // use DOME_TEXT_WON_*
}
static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
@@ -5013,137 +4943,137 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
int x = 0, y = 0;
u8 palSlot = 0;
- if (flags & 1)
- arrId = 8, windowId = 9, palSlot = 2;
- if (flags & 2)
+ if (flags & CARD_ALTERNATE_SLOT)
+ arrId = 2 * (FRONTIER_PARTY_SIZE + 1), windowId = 9, palSlot = 2;
+ if (flags & MOVE_CARD_RIGHT)
x = 256;
- if (flags & 4)
+ if (flags & MOVE_CARD_DOWN)
y = 160;
- if (flags & 8)
+ if (flags & MOVE_CARD_LEFT)
x = -256;
- if (flags & 0x10)
+ if (flags & MOVE_CARD_UP)
y = -160;
// Copy trainers information to handy arrays.
- winStringId = sub_8192F08(matchNo, sBattleDomeStruct->unk_11);
- for (i = 0; i < 2; i++)
+ winStringId = BufferDomeWinString(matchNo, sInfoCard->tournamentIds);
+ for (i = 0; i < NUM_INFOCARD_TRAINERS; i++)
{
- tournamentIds[i] = sBattleDomeStruct->unk_11[i];
- trainerIds[i] = gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].trainerId;
- if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].eliminatedAt <= gUnknown_0860D3C4[matchNo][2]
- && gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].isEliminated)
+ tournamentIds[i] = sInfoCard->tournamentIds[i];
+ trainerIds[i] = DOME_TRAINERS[tournamentIds[i]].trainerId;
+ if (DOME_TRAINERS[tournamentIds[i]].eliminatedAt <= sCompetitorRangeByMatch[matchNo][2]
+ && DOME_TRAINERS[tournamentIds[i]].isEliminated)
lost[i] = TRUE;
else
lost[i] = FALSE;
}
- // Draw first trainer sprite.
+ // Draw left trainer sprite.
if (trainerIds[0] == TRAINER_PLAYER)
- sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF);
+ sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF);
else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN)
- sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF);
+ sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF);
else
- sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[0]), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF);
+ sInfoCard->spriteIds[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[0]), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF);
- if (flags & 0x1E)
- gSprites[sBattleDomeStruct->arr[arrId]].invisible = TRUE;
+ if (flags & MOVE_CARD)
+ gSprites[sInfoCard->spriteIds[arrId]].invisible = TRUE;
if (lost[0])
- gSprites[sBattleDomeStruct->arr[arrId]].oam.paletteNum = 3;
+ gSprites[sInfoCard->spriteIds[arrId]].oam.paletteNum = 3;
- // Draw second trainer sprite.
+ // Draw right trainer sprite.
if (trainerIds[1] == TRAINER_PLAYER)
- sBattleDomeStruct->arr[1 + arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF);
+ sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF);
else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN)
- sBattleDomeStruct->arr[1 + arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF);
+ sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF);
else
- sBattleDomeStruct->arr[1 + arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[1]), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF);
+ sInfoCard->spriteIds[1 + arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[1]), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF);
- if (flags & 0x1E)
- gSprites[sBattleDomeStruct->arr[1 + arrId]].invisible = TRUE;
+ if (flags & MOVE_CARD)
+ gSprites[sInfoCard->spriteIds[1 + arrId]].invisible = TRUE;
if (lost[1])
- gSprites[sBattleDomeStruct->arr[1 + arrId]].oam.paletteNum = 3;
+ gSprites[sInfoCard->spriteIds[1 + arrId]].oam.paletteNum = 3;
- // Draw first trainer's pokemon icons.
- for (i = 0; i < 3; i++)
+ // Draw left trainer's pokemon icons.
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
if (trainerIds[0] == TRAINER_PLAYER)
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i],
+ sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[0]][i],
SpriteCb_MonIcon,
- x | sFirstTrainerMonX[i],
- y + sFirstTrainerMonY[i],
+ x | sLeftTrainerMonX[i],
+ y + sLeftTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].oam.priority = 0;
}
else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN)
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i],
+ sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[0]][i],
SpriteCb_MonIcon,
- x | sFirstTrainerMonX[i],
- y + sFirstTrainerMonY[i],
+ x | sLeftTrainerMonX[i],
+ y + sLeftTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].oam.priority = 0;
}
else
{
- sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i]].species,
+ sInfoCard->spriteIds[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[tournamentIds[0]][i]].species,
SpriteCb_MonIcon,
- x | sFirstTrainerMonX[i],
- y + sFirstTrainerMonY[i],
+ x | sLeftTrainerMonX[i],
+ y + sLeftTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].oam.priority = 0;
}
- if (flags & 0x1E)
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].invisible = TRUE;
+ if (flags & MOVE_CARD)
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].invisible = TRUE;
if (lost[0])
{
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.paletteNum = 3;
- gSprites[sBattleDomeStruct->arr[2 + i + arrId]].sMonIconStill = TRUE;
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].oam.paletteNum = 3;
+ gSprites[sInfoCard->spriteIds[2 + i + arrId]].sMonIconStill = TRUE;
}
}
- // Draw second trainer's pokemon icons.
- for (i = 0; i < 3; i++)
+ // Draw right trainer's pokemon icons.
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
if (trainerIds[1] == TRAINER_PLAYER)
{
- sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i],
+ sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[1]][i],
SpriteCb_MonIcon,
- x | sSecondTrainerMonX[i],
- y + sSecondTrainerMonY[i],
+ x | sRightTrainerMonX[i],
+ y + sRightTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[5 + i + arrId]].oam.priority = 0;
}
else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN)
{
- sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i],
+ sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(DOME_MONS[tournamentIds[1]][i],
SpriteCb_MonIcon,
- x | sSecondTrainerMonX[i],
- y + sSecondTrainerMonY[i],
+ x | sRightTrainerMonX[i],
+ y + sRightTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[5 + i + arrId]].oam.priority = 0;
}
else
{
- sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i]].species,
+ sInfoCard->spriteIds[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[DOME_MONS[tournamentIds[1]][i]].species,
SpriteCb_MonIcon,
- x | sSecondTrainerMonX[i],
- y + sSecondTrainerMonY[i],
+ x | sRightTrainerMonX[i],
+ y + sRightTrainerMonY[i],
0, 0, TRUE);
- gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0;
+ gSprites[sInfoCard->spriteIds[5 + i + arrId]].oam.priority = 0;
}
- if (flags & 0x1E)
- gSprites[sBattleDomeStruct->arr[5 + i + arrId]].invisible = TRUE;
+ if (flags & MOVE_CARD)
+ gSprites[sInfoCard->spriteIds[5 + i + arrId]].invisible = TRUE;
if (lost[1])
{
- gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.paletteNum = 3;
- gSprites[sBattleDomeStruct->arr[5 + i + arrId]].sMonIconStill = TRUE;
+ gSprites[sInfoCard->spriteIds[5 + i + arrId]].oam.paletteNum = 3;
+ gSprites[sInfoCard->spriteIds[5 + i + arrId]].sMonIconStill = TRUE;
}
}
- // Print the win string (or 'Let the battle begin!' one).
+ // Print the win string (or 'Let the battle begin!').
textPrinter.x = 0;
textPrinter.y = 2;
textPrinter.currentX = textPrinter.x;
@@ -5151,9 +5081,9 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
textPrinter.letterSpacing = 0;
textPrinter.lineSpacing = 0;
textPrinter.unk = 0;
- textPrinter.fgColor = 14;
- textPrinter.bgColor = 0;
- textPrinter.shadowColor = 13;
+ textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
+ textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
+ textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
StringExpandPlaceholders(gStringVar4, sBattleDomeWinTexts[winStringId]);
textPrinter.currentChar = gStringVar4;
textPrinter.windowId = windowId + 8;
@@ -5164,7 +5094,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
textPrinter.currentY = textPrinter.y = 0;
AddTextPrinter(&textPrinter, 0, NULL);
- // Print first trainer's name.
+ // Print left trainer's name.
if (trainerIds[0] == TRAINER_PLAYER)
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN)
@@ -5182,7 +5112,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
CopyWindowToVram(windowId + 6, 3);
AddTextPrinter(&textPrinter, 0, NULL);
- // Print second trainer's name.
+ // Print right trainer's name.
if (trainerIds[1] == TRAINER_PLAYER)
StringCopy(gStringVar1, gSaveBlock2Ptr->playerName);
else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN)
@@ -5212,103 +5142,112 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo)
static void ShowDomeTourneyTree(void)
{
u8 taskId = CreateTask(Task_ShowTourneyTree, 0);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tNotInteractive = FALSE;
gTasks[taskId].data[2] = 2;
- gTasks[taskId].data[4] = 0;
- SetMainCallback2(CB2_BattleDome);
+ gTasks[taskId].tIsPrevTourneyTree = FALSE;
+ SetMainCallback2(CB2_TourneyTree);
}
-static void ShowPreviousDomeResultsTourneyTree(void)
+// To show the results of the last tourney on the computer in the lobby
+static void ShowPreviousDomeTourneyTree(void)
{
u8 taskId;
- InitDomeFacilityTrainersAndMons();
- gSaveBlock2Ptr->frontier.lvlMode = gSaveBlock2Ptr->frontier.field_D0A - 1;
- gSaveBlock2Ptr->frontier.curChallengeBattleNum = 3;
+ SetFacilityTrainerAndMonPtrs();
+ gSaveBlock2Ptr->frontier.lvlMode = gSaveBlock2Ptr->frontier.domeLvlMode - 1;
+ gSaveBlock2Ptr->frontier.curChallengeBattleNum = DOME_FINAL;
taskId = CreateTask(Task_ShowTourneyTree, 0);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 0;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tNotInteractive = FALSE;
gTasks[taskId].data[2] = 2;
- gTasks[taskId].data[4] = 1;
- SetMainCallback2(CB2_BattleDome);
+ gTasks[taskId].tIsPrevTourneyTree = TRUE;
+ SetMainCallback2(CB2_TourneyTree);
}
-static void sub_819395C(u8 taskId)
+// Task states for Task_HandleTourneyTreeInput
+#define STATE_FADE_IN 0
+#define STATE_WAIT_FADE 1
+#define STATE_GET_INPUT 2
+#define STATE_SHOW_INFOCARD_TRAINER 3
+#define STATE_SHOW_INFOCARD_MATCH 5
+#define STATE_CLOSE_TOURNEY_TREE 7
+
+static void Task_HandleTourneyTreeInput(u8 taskId)
{
u8 newTaskId = 0;
int spriteId = gTasks[taskId].data[1];
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
- case 0:
+ case STATE_FADE_IN:
if (!gPaletteFade.active)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = STATE_WAIT_FADE;
StartSpriteAnim(&gSprites[spriteId], 1);
}
break;
- case 1:
+ case STATE_WAIT_FADE:
if (!gPaletteFade.active)
- gTasks[taskId].data[0] = 2;
+ gTasks[taskId].tState = STATE_GET_INPUT;
break;
- case 2:
+ case STATE_GET_INPUT:
switch (UpdateTourneyTreeCursor(taskId))
{
- case 0:
+ case TOURNEY_TREE_SELECTED_CLOSE:
default:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].data[0] = 7;
+ gTasks[taskId].tState = STATE_CLOSE_TOURNEY_TREE;
break;
- case 1:
+ case TOURNEY_TREE_NO_SELECTION:
break;
- case 2:
+ case TOURNEY_TREE_SELECTED_TRAINER:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].data[0] = 3;
+ gTasks[taskId].tState = STATE_SHOW_INFOCARD_TRAINER;
break;
- case 3:
+ case TOURNEY_TREE_SELECTED_MATCH:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].data[0] = 5;
+ gTasks[taskId].tState = STATE_SHOW_INFOCARD_MATCH;
break;
}
break;
- case 3:
+ case STATE_SHOW_INFOCARD_TRAINER:
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
ScanlineEffect_Stop();
FREE_AND_SET_NULL(sTilemapBuffer);
- newTaskId = CreateTask(Task_ShowOpponentInfo, 0);
- gTasks[newTaskId].data[0] = 0;
- gTasks[newTaskId].data[1] = sTourneyTreeTrainerIds[spriteId];
- gTasks[newTaskId].data[2] = 1;
- gTasks[newTaskId].data[3] = taskId;
-
- gTasks[taskId].data[0] = 4;
- sBattleDomeStruct->unk_10 = 0;
+ newTaskId = CreateTask(Task_ShowTourneyInfoCard, 0);
+ gTasks[newTaskId].tState = 0;
+ gTasks[newTaskId].tTournamentId = sTourneyTreeTrainerIds[spriteId];
+ gTasks[newTaskId].tMode = INFOCARD_TRAINER;
+ gTasks[newTaskId].tPrevTaskId = taskId;
+
+ gTasks[taskId].tState = STATE_SHOW_INFOCARD_TRAINER + 1;
+ sInfoCard->pos = 0;
}
break;
- case 4:
+ case STATE_SHOW_INFOCARD_TRAINER + 1:
break;
- case 5:
+ case STATE_SHOW_INFOCARD_MATCH:
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
ScanlineEffect_Stop();
FREE_AND_SET_NULL(sTilemapBuffer);
- newTaskId = CreateTask(Task_ShowOpponentInfo, 0);
- gTasks[newTaskId].data[0] = 0;
- gTasks[newTaskId].data[1] = spriteId - 16;
- gTasks[newTaskId].data[2] = 2;
- gTasks[newTaskId].data[3] = taskId;
+ newTaskId = CreateTask(Task_ShowTourneyInfoCard, 0);
+ gTasks[newTaskId].tState = 0;
+ gTasks[newTaskId].tTournamentId = spriteId - DOME_TOURNAMENT_TRAINERS_COUNT;
+ gTasks[newTaskId].tMode = INFOCARD_MATCH;
+ gTasks[newTaskId].tPrevTaskId = taskId;
- gTasks[taskId].data[0] = 6;
+ gTasks[taskId].tState = STATE_SHOW_INFOCARD_MATCH + 1;
}
break;
- case 6:
+ case STATE_SHOW_INFOCARD_MATCH + 1:
break;
- case 7:
+ case STATE_CLOSE_TOURNEY_TREE:
if (!gPaletteFade.active)
{
FreeAllWindowBuffers();
@@ -5322,157 +5261,188 @@ static void sub_819395C(u8 taskId)
}
}
+// undefine task states for Task_HandleTourneyTreeInput
+#undef STATE_FADE_IN
+#undef STATE_WAIT_FADE
+#undef STATE_GET_INPUT
+#undef STATE_SHOW_INFOCARD_TRAINER
+#undef STATE_SHOW_INFOCARD_MATCH
+#undef STATE_CLOSE_TOURNEY_TREE
+
+
+#define MOVE_DIR_UP 0
+#define MOVE_DIR_DOWN 1
+#define MOVE_DIR_LEFT 2
+#define MOVE_DIR_RIGHT 3
+#define MOVE_DIR_NONE 4
+
+// Move the tourney tree cursor
+// The 'cursor' is actually just which button sprite is currently doing the 'selected' animation
static u8 UpdateTourneyTreeCursor(u8 taskId)
{
- u8 retVal = 1;
- int direction = 4;
+ u8 selection = TOURNEY_TREE_NO_SELECTION;
+ int direction = MOVE_DIR_NONE;
int tourneyTreeCursorSpriteId = gTasks[taskId].data[1];
int roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
- if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && tourneyTreeCursorSpriteId == 31))
+ if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && tourneyTreeCursorSpriteId == TOURNEY_TREE_CLOSE_BUTTON))
{
PlaySE(SE_SELECT);
- retVal = 0;
+ selection = TOURNEY_TREE_SELECTED_CLOSE;
}
else if (gMain.newKeys & A_BUTTON)
{
- if (tourneyTreeCursorSpriteId < 16)
+ if (tourneyTreeCursorSpriteId < DOME_TOURNAMENT_TRAINERS_COUNT)
{
PlaySE(SE_SELECT);
- retVal = 2;
+ selection = TOURNEY_TREE_SELECTED_TRAINER;
}
else
{
PlaySE(SE_SELECT);
- retVal = 3;
+ selection = TOURNEY_TREE_SELECTED_MATCH;
}
}
else
{
if (gMain.newKeys == DPAD_UP && sTourneyTreeCursorMovementMap[tourneyTreeCursorSpriteId][roundId][0] != 0xFF)
- direction = 0;
+ direction = MOVE_DIR_UP;
else if (gMain.newKeys == DPAD_DOWN && sTourneyTreeCursorMovementMap[tourneyTreeCursorSpriteId][roundId][1] != 0xFF)
- direction = 1;
+ direction = MOVE_DIR_DOWN;
else if (gMain.newKeys == DPAD_LEFT && sTourneyTreeCursorMovementMap[tourneyTreeCursorSpriteId][roundId][2] != 0xFF)
- direction = 2;
+ direction = MOVE_DIR_LEFT;
else if (gMain.newKeys == DPAD_RIGHT && sTourneyTreeCursorMovementMap[tourneyTreeCursorSpriteId][roundId][3] != 0xFF)
- direction = 3;
+ direction = MOVE_DIR_RIGHT;
}
- if (direction != 4)
+ if (direction != MOVE_DIR_NONE)
{
PlaySE(SE_SELECT);
- StartSpriteAnim(&gSprites[tourneyTreeCursorSpriteId], 0);
+ StartSpriteAnim(&gSprites[tourneyTreeCursorSpriteId], 0); // Do unselected sprite anim
tourneyTreeCursorSpriteId = sTourneyTreeCursorMovementMap[tourneyTreeCursorSpriteId][roundId][direction];
- StartSpriteAnim(&gSprites[tourneyTreeCursorSpriteId], 1);
+ StartSpriteAnim(&gSprites[tourneyTreeCursorSpriteId], 1); // Do selected sprite anim
gTasks[taskId].data[1] = tourneyTreeCursorSpriteId;
}
- return retVal;
+ return selection;
}
+#undef MOVE_DIR_UP
+#undef MOVE_DIR_DOWN
+#undef MOVE_DIR_LEFT
+#undef MOVE_DIR_RIGHT
+#undef MOVE_DIR_NONE
+
+// Shows the results of the just-completed round for the current tourney
static void ShowNonInteractiveDomeTourneyTree(void)
{
u8 taskId = CreateTask(Task_ShowTourneyTree, 0);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = 1;
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tNotInteractive = TRUE;
gTasks[taskId].data[2] = 2;
- gTasks[taskId].data[4] = 0;
- SetMainCallback2(CB2_BattleDome);
+ gTasks[taskId].tIsPrevTourneyTree = FALSE;
+ SetMainCallback2(CB2_TourneyTree);
}
static void ResolveDomeRoundWinners(void)
{
int i;
- if (gSpecialVar_0x8005 == 1)
+ if (gSpecialVar_0x8005 == DOME_PLAYER_WON_MATCH)
{
- gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
- gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer;
+ DOME_TRAINERS[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = TRUE;
+ DOME_TRAINERS[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
+ gSaveBlock2Ptr->frontier.domeWinningMoves[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer;
+
+ // If the player's match was the final one, no NPC vs NPC matches to decide
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < DOME_FINAL)
DecideRoundWinners(gSaveBlock2Ptr->frontier.curChallengeBattleNum);
}
- else
+ else // DOME_PLAYER_LOST_MATCH or DOME_PLAYER_RETIRED
{
- gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].isEliminated = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
- gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent;
- if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == 9)
- gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk3 = 1;
+ DOME_TRAINERS[TrainerIdToTournamentId(TRAINER_PLAYER)].isEliminated = TRUE;
+ DOME_TRAINERS[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
+ gSaveBlock2Ptr->frontier.domeWinningMoves[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent;
+
+ if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == DOME_PLAYER_RETIRED)
+ DOME_TRAINERS[TrainerIdToTournamentId(TRAINER_PLAYER)].forfeited = TRUE;
+
+ // Player lost, decide remaining outcome of tournament
for (i = gSaveBlock2Ptr->frontier.curChallengeBattleNum; i < DOME_ROUNDS_COUNT; i++)
DecideRoundWinners(i);
}
}
+// Decides the winning move of an NPC vs NPC match
static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roundId)
{
int i, j, k;
- int moveScores[4 * 3];
- u16 moveIds[4 * 3];
+ int moveScores[MAX_MON_MOVES * FRONTIER_PARTY_SIZE];
+ u16 moveIds[MAX_MON_MOVES * FRONTIER_PARTY_SIZE];
u16 bestScore = 0;
u16 bestId = 0;
int movePower = 0;
SetFacilityPtrsGetLevel();
// Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons.
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
for (j = 0; j < MAX_MON_MOVES; j++)
{
- // TODO: Clean this up, looks like a different data structure
- moveScores[i * 4 + j] = 0;
- if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
- moveIds[i * 4 + j] = GetFrontierBrainMonMove(i, j);
+ // TODO: Clean this up, looks like a different data structure (2D array)
+ moveScores[i * MAX_MON_MOVES + j] = 0;
+ if (DOME_TRAINERS[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN)
+ moveIds[i * MAX_MON_MOVES + j] = GetFrontierBrainMonMove(i, j);
else
- moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[winnerTournamentId][i]].moves[j];
+ moveIds[i * MAX_MON_MOVES + j] = gFacilityTrainerMons[DOME_MONS[winnerTournamentId][i]].moves[j];
- movePower = gBattleMoves[moveIds[i * 4 + j]].power;
+ movePower = gBattleMoves[moveIds[i * MAX_MON_MOVES + j]].power;
if (movePower == 0)
movePower = 40;
else if (movePower == 1)
movePower = 60;
- else if (moveIds[i * 4 + j] == MOVE_SELF_DESTRUCT || moveIds[i * 4 + j] == MOVE_EXPLOSION)
+ else if (moveIds[i * MAX_MON_MOVES + j] == MOVE_SELF_DESTRUCT
+ || moveIds[i * MAX_MON_MOVES + j] == MOVE_EXPLOSION)
movePower /= 2;
- for (k = 0; k < 3; k++)
+ for (k = 0; k < FRONTIER_PARTY_SIZE; k++)
{
u32 var = 0;
- u32 targetSpecies = 0;
- u32 targetAbility = 0;
+ u16 targetSpecies = SPECIES_NONE;
+ u16 targetAbility = ABILITY_NONE;
do
{
var = Random32();
- } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[loserTournamentId][k]].nature != GetNatureFromPersonality(var));
+ } while (gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].nature != GetNatureFromPersonality(var));
- targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[loserTournamentId][k]].species;
+ targetSpecies = gFacilityTrainerMons[DOME_MONS[loserTournamentId][k]].species;
if (var & 1)
targetAbility = gBaseStats[targetSpecies].abilities[1];
else
targetAbility = gBaseStats[targetSpecies].abilities[0];
- var = AI_TypeCalc(moveIds[i * 4 + j], targetSpecies, targetAbility);
+ var = AI_TypeCalc(moveIds[i * MAX_MON_MOVES + j], targetSpecies, targetAbility);
if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE)
- moveScores[i * 4 + j] += movePower;
+ moveScores[i * MAX_MON_MOVES + j] += movePower;
else if (var & MOVE_RESULT_NO_EFFECT)
- moveScores[i * 4 + j] += 0;
+ moveScores[i * MAX_MON_MOVES + j] += 0;
else if (var & MOVE_RESULT_SUPER_EFFECTIVE)
- moveScores[i * 4 + j] += movePower * 2;
+ moveScores[i * MAX_MON_MOVES + j] += movePower * 2;
else if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE)
- moveScores[i * 4 + j] += movePower / 2;
+ moveScores[i * MAX_MON_MOVES + j] += movePower / 2;
else
- moveScores[i * 4 + j] += movePower;
+ moveScores[i * MAX_MON_MOVES + j] += movePower;
}
- if (bestScore < moveScores[i * 4 + j])
+ if (bestScore < moveScores[i * MAX_MON_MOVES + j])
{
- bestId = i * 4 + j;
- bestScore = moveScores[i * 4 + j];
+ bestId = i * MAX_MON_MOVES + j;
+ bestScore = moveScores[i * MAX_MON_MOVES + j];
}
- else if (bestScore == moveScores[i * 4 + j])
+ else if (bestScore == moveScores[i * MAX_MON_MOVES + j])
{
- if (moveIds[bestId] < moveIds[i * 4 + j]) // Why not use (Random() & 1) instead of promoting moves with a higher id?
- bestId = i * 4 + j;
+ if (moveIds[bestId] < moveIds[i * MAX_MON_MOVES + j]) // Why not use (Random() & 1) instead of promoting moves with a higher id?
+ bestId = i * MAX_MON_MOVES + j;
}
}
}
@@ -5481,7 +5451,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
goto LABEL;
while (j != 0)
{
- for (j = 0, k = 0; k < MAX_MON_MOVES * 3; k++)
+ for (j = 0, k = 0; k < MAX_MON_MOVES * FRONTIER_PARTY_SIZE; k++)
{
if (bestScore < moveScores[k])
{
@@ -5499,7 +5469,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
{
for (i = 0; i < roundId - 1; i++)
{
- if (gSaveBlock2Ptr->frontier.field_EC0[sub_81953E8(winnerTournamentId, i)] == moveIds[j])
+ if (gSaveBlock2Ptr->frontier.domeWinningMoves[sub_81953E8(winnerTournamentId, i)] == moveIds[j])
break;
}
if (i == roundId - 1)
@@ -5508,7 +5478,7 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun
moveScores[j] = 0;
bestScore = 0;
j = 0;
- for (k = 0; k < MAX_MON_MOVES * 3; k++)
+ for (k = 0; k < MAX_MON_MOVES * FRONTIER_PARTY_SIZE; k++)
j += moveScores[k];
}
}
@@ -5523,10 +5493,10 @@ static void Task_ShowTourneyTree(u8 taskId)
{
int i;
struct TextPrinterTemplate textPrinter;
- int r10 = gTasks[taskId].data[1];
+ int notInteractive = gTasks[taskId].tNotInteractive;
int r4 = gTasks[taskId].data[2];
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
SetHBlankCallback(NULL);
@@ -5534,8 +5504,8 @@ static void Task_ShowTourneyTree(u8 taskId)
EnableInterrupts(INTR_FLAG_HBLANK | INTR_FLAG_VBLANK);
CpuFill32(0, (void *)VRAM, VRAM_SIZE);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0860CE74, ARRAY_COUNT(gUnknown_0860CE74));
- InitWindows(gUnknown_0860CE94);
+ InitBgsFromTemplates(0, sTourneyTreeBgTemplates, ARRAY_COUNT(sTourneyTreeBgTemplates));
+ InitWindows(sTourneyTreeWindowTemplates);
DeactivateAllTextPrinters();
gBattle_BG0_X = 0;
gBattle_BG0_Y = 0;
@@ -5545,7 +5515,7 @@ static void Task_ShowTourneyTree(u8 taskId)
ChangeBgY(2, 0, 0);
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0xB00, 0);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 1:
SetGpuReg(REG_OFFSET_BLDCNT, 0);
@@ -5557,45 +5527,46 @@ static void Task_ShowTourneyTree(u8 taskId)
SetGpuReg(REG_OFFSET_WIN1H, 0x9098);
SetGpuReg(REG_OFFSET_WIN1V, 0x9F);
SetGpuReg(REG_OFFSET_WININ, 0);
- SetGpuReg(REG_OFFSET_WINOUT, 0x3F);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
ResetPaletteFade();
ResetSpriteData();
FreeAllSpritePalettes();
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 2:
sTilemapBuffer = AllocZeroed(0x800);
- LZDecompressWram(gUnknown_08D83900, sTilemapBuffer);
+ LZDecompressWram(gDomeTourneyLineMask_Tilemap, sTilemapBuffer);
SetBgTilemapBuffer(1, sTilemapBuffer);
CopyBgTilemapBufferToVram(1);
- DecompressAndLoadBgGfxUsingHeap(1, gUnknown_08D82F10, 0x2000, 0, 0);
- DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D834FC, 0x2000, 0, 0);
- DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83B2C, 0x2000, 0, 1);
- DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D83C3C, 0x2000, 0, 1);
- LoadCompressedPalette(gUnknown_08D85358, 0, 0x200);
- LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200);
- LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20);
+ DecompressAndLoadBgGfxUsingHeap(1, gDomeTourneyBg_Gfx, 0x2000, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyLine_Gfx, 0x2000, 0, 0);
+ DecompressAndLoadBgGfxUsingHeap(2, gDomeTourneyLineDown_Tilemap, 0x2000, 0, 1);
+ DecompressAndLoadBgGfxUsingHeap(3, gDomeTourneyLineUp_Tilemap, 0x2000, 0, 1);
+ LoadCompressedPalette(gDomeTourneyTree_Pal, 0, 0x200);
+ LoadCompressedPalette(gDomeTourneyTreeButtons_Pal, 0x100, 0x200);
+ LoadCompressedPalette(gBattleWindowTextPalette, 0xF0, 0x20);
CpuFill32(0, gPlttBufferFaded, 0x400);
ShowBg(0);
ShowBg(1);
ShowBg(2);
ShowBg(3);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 3:
- LoadCompressedSpriteSheet(sDomeOptionsSpriteSheet);
- if (r10 == 0)
+ LoadCompressedSpriteSheet(sTourneyTreeButtonsSpriteSheet);
+ if (notInteractive == FALSE)
{
- for (i = 0; i < (unsigned) 31; i++)
- CreateSprite(&gUnknown_0860CFA8, gUnknown_0860D411[i][0], gUnknown_0860D411[i][1], 0);
- if (gTasks[taskId].data[4])
- CreateSprite(&gUnknown_0860D008, 218, 12, 0);
+ for (i = 0; i < ARRAY_COUNT(sTourneyTreePokeballCoords); i++)
+ CreateSprite(&sTourneyTreePokeballSpriteTemplate, sTourneyTreePokeballCoords[i][0], sTourneyTreePokeballCoords[i][1], 0);
+
+ if (gTasks[taskId].tIsPrevTourneyTree)
+ CreateSprite(&sExitButtonSpriteTemplate, 218, 12, 0);
else
- CreateSprite(&gUnknown_0860CFD8, 218, 12, 0);
+ CreateSprite(&sCancelButtonSpriteTemplate, 218, 12, 0);
}
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_1D_MAP);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 4:
textPrinter.fontId = 2;
@@ -5608,94 +5579,94 @@ static void Task_ShowTourneyTree(u8 taskId)
textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.currentChar, 0x70, textPrinter.letterSpacing);
textPrinter.currentY = 1;
textPrinter.unk = 0;
- textPrinter.fgColor = 14;
- textPrinter.bgColor = 0;
- textPrinter.shadowColor = 13;
+ textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
+ textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
+ textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
AddTextPrinter(&textPrinter, 0, NULL);
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
int roundId, var2;
- CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
- if (r10 == 1)
+ CopyDomeTrainerName(gDisplayedStringBattle, DOME_TRAINERS[i].trainerId);
+ if (notInteractive == TRUE)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
+ if (DOME_TRAINERS[i].isEliminated)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0)
+ if (DOME_TRAINERS[i].eliminatedAt != DOME_ROUND1)
{
- var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1;
- sub_81948EC(i, var2);
+ var2 = DOME_TRAINERS[i].eliminatedAt - 1;
+ DrawTourneyAdvancementLine(i, var2);
}
}
else if (gSaveBlock2Ptr->frontier.curChallengeBattleNum != DOME_ROUND2)
{
- sub_81948EC(i, gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2);
+ DrawTourneyAdvancementLine(i, gSaveBlock2Ptr->frontier.curChallengeBattleNum - 2);
}
}
- else if (r10 == 0)
+ else if (notInteractive == FALSE)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
+ if (DOME_TRAINERS[i].isEliminated)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0)
+ if (DOME_TRAINERS[i].eliminatedAt != DOME_ROUND1)
{
- var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1;
- sub_81948EC(i, var2);
+ var2 = DOME_TRAINERS[i].eliminatedAt - 1;
+ DrawTourneyAdvancementLine(i, var2);
}
}
else if (gSaveBlock2Ptr->frontier.curChallengeBattleNum != DOME_ROUND1)
{
- if (gTasks[taskId].data[4])
+ if (gTasks[taskId].tIsPrevTourneyTree)
var2 = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
else
var2 = gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1;
- sub_81948EC(i, var2);
+ DrawTourneyAdvancementLine(i, var2);
}
}
- if (gTasks[taskId].data[4])
+ if (gTasks[taskId].tIsPrevTourneyTree)
roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
else
roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1;
- if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1)
- || (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt <= roundId))
- && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
+ if ( ((notInteractive == TRUE && DOME_TRAINERS[i].eliminatedAt < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1)
+ || (notInteractive == FALSE && DOME_TRAINERS[i].eliminatedAt <= roundId))
+ && DOME_TRAINERS[i].isEliminated)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER)
+ if (DOME_TRAINERS[i].trainerId == TRAINER_PLAYER)
{
- textPrinter.fgColor = 3;
- textPrinter.shadowColor = 4;
+ textPrinter.fgColor = TEXT_COLOR_LIGHT_GREY;
+ textPrinter.shadowColor = TEXT_COLOR_RED;
}
else
{
- textPrinter.fgColor = 11;
- textPrinter.shadowColor = 13;
+ textPrinter.fgColor = TEXT_DYNAMIC_COLOR_2;
+ textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
}
}
else
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER)
+ if (DOME_TRAINERS[i].trainerId == TRAINER_PLAYER)
{
- textPrinter.fgColor = 3;
- textPrinter.shadowColor = 4;
+ textPrinter.fgColor = TEXT_COLOR_LIGHT_GREY;
+ textPrinter.shadowColor = TEXT_COLOR_RED;
}
else
{
- textPrinter.fgColor = 14;
- textPrinter.shadowColor = 13;
+ textPrinter.fgColor = TEXT_DYNAMIC_COLOR_5;
+ textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
}
}
- if (gUnknown_0860D3F1[i][0] == 0)
+ if (sTrainerNamePositions[i][0] == 0)
textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing);
else
textPrinter.currentX = 3;
textPrinter.currentChar = gDisplayedStringBattle;
- textPrinter.windowId = gUnknown_0860D3F1[i][0];
- textPrinter.currentY = gUnknown_0860D3F1[i][1];
+ textPrinter.windowId = sTrainerNamePositions[i][0];
+ textPrinter.currentY = sTrainerNamePositions[i][1];
AddTextPrinter(&textPrinter, 0, NULL);
}
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 5:
PutWindowTilemap(0);
@@ -5704,27 +5675,27 @@ static void Task_ShowTourneyTree(u8 taskId)
CopyWindowToVram(0, 3);
CopyWindowToVram(1, 3);
CopyWindowToVram(2, 3);
- SetHBlankCallback(HblankCb_BattleDome);
- SetVBlankCallback(VblankCb1_BattleDome);
+ SetHBlankCallback(HblankCb_TourneyTree);
+ SetVBlankCallback(VblankCb_TourneyTree);
if (r4 == 2)
{
- if (r10 == 0)
+ if (notInteractive == FALSE)
{
- i = CreateTask(sub_819395C, 0);
- gTasks[i].data[0] = r10;
- gTasks[i].data[1] = r10;
- gTasks[i].data[6] = gTasks[taskId].data[4];
+ i = CreateTask(Task_HandleTourneyTreeInput, 0);
+ gTasks[i].data[0] = notInteractive;
+ gTasks[i].data[1] = notInteractive;
+ gTasks[i].data[6] = gTasks[taskId].tIsPrevTourneyTree;
}
else
{
- i = CreateTask(sub_8194950, 0);
+ i = CreateTask(Task_HandleStaticTourneyTreeInput, 0);
gTasks[i].data[0] = 0;
}
}
else
{
i = gTasks[taskId].data[3];
- gTasks[i].data[0] = 0;
+ gTasks[i].tState = 0;
}
ScanlineEffect_Clear();
@@ -5749,32 +5720,39 @@ static void Task_ShowTourneyTree(u8 taskId)
}
}
-static void sub_81948EC(u8 tournamentId, u8 arg1)
+static void DrawTourneyAdvancementLine(u8 tournamentId, u8 roundId)
{
int i;
- const struct UnkStruct_860DD10 *structPtr = gUnknown_0860DD10[tournamentId][arg1];
+ const struct TourneyTreeLineSection *lineSection = sTourneyTreeLineSections[tournamentId][roundId];
- for (i = 0; i < gUnknown_0860DE10[tournamentId][arg1]; i++)
- CopyToBgTilemapBufferRect_ChangePalette(1, &structPtr[i].src, structPtr[i].x, structPtr[i].y, 1, 1, 0x11);
+ for (i = 0; i < sTourneyTreeLineSectionArrayCounts[tournamentId][roundId]; i++)
+ CopyToBgTilemapBufferRect_ChangePalette(1, &lineSection[i].src, lineSection[i].x, lineSection[i].y, 1, 1, 17);
CopyBgTilemapBufferToVram(1);
}
-static void sub_8194950(u8 taskId)
+#define STATE_FADE_IN 0
+#define STATE_SHOW_RESULTS 1
+#define STATE_DELAY 2
+#define STATE_WAIT_FOR_INPUT 3
+#define STATE_CLOSE_TOURNEY_TREE 4
+
+// The non-interactive tourney tree that's shown when a round is completed
+static void Task_HandleStaticTourneyTreeInput(u8 taskId)
{
int i;
struct TextPrinterTemplate textPrinter;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
- case 0:
+ case STATE_FADE_IN:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
- gTasks[taskId].data[0] = 1;
+ gTasks[taskId].tState = STATE_SHOW_RESULTS;
break;
- case 1:
+ case STATE_SHOW_RESULTS:
if (!gPaletteFade.active)
{
- gTasks[taskId].data[0] = 2;
+ gTasks[taskId].tState = STATE_DELAY;
gTasks[taskId].data[3] = 64;
textPrinter.fontId = 2;
textPrinter.x = 0;
@@ -5782,45 +5760,47 @@ static void sub_8194950(u8 taskId)
textPrinter.letterSpacing = 2;
textPrinter.lineSpacing = 0;
textPrinter.unk = 0;
- textPrinter.fgColor = 11;
- textPrinter.bgColor = 0;
- textPrinter.shadowColor = 13;
+ textPrinter.fgColor = TEXT_DYNAMIC_COLOR_2;
+ textPrinter.bgColor = TEXT_COLOR_TRANSPARENT;
+ textPrinter.shadowColor = TEXT_DYNAMIC_COLOR_4;
+
+ // Update the advancement lines and gray out eliminated trainer names
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
- CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt == gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1
- && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
+ CopyDomeTrainerName(gDisplayedStringBattle, DOME_TRAINERS[i].trainerId);
+ if (DOME_TRAINERS[i].eliminatedAt == gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1
+ && DOME_TRAINERS[i].isEliminated)
{
- if (gUnknown_0860D3F1[i][0] == 0)
+ if (sTrainerNamePositions[i][0] == 0)
textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing);
else
textPrinter.currentX = 3;
textPrinter.currentChar = gDisplayedStringBattle;
- textPrinter.windowId = gUnknown_0860D3F1[i][0];
- textPrinter.currentY = gUnknown_0860D3F1[i][1];
+ textPrinter.windowId = sTrainerNamePositions[i][0];
+ textPrinter.currentY = sTrainerNamePositions[i][1];
AddTextPrinter(&textPrinter, 0, NULL);
}
- if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
+ if (!DOME_TRAINERS[i].isEliminated)
{
int roundId = gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1;
- sub_81948EC(i, roundId);
+ DrawTourneyAdvancementLine(i, roundId);
}
}
}
break;
- case 2:
+ case STATE_DELAY:
if (--gTasks[taskId].data[3] == 0)
- gTasks[taskId].data[0] = 3;
+ gTasks[taskId].tState = STATE_WAIT_FOR_INPUT;
break;
- case 3:
+ case STATE_WAIT_FOR_INPUT:
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].data[0] = 4;
+ gTasks[taskId].tState = STATE_CLOSE_TOURNEY_TREE;
}
break;
- case 4:
+ case STATE_CLOSE_TOURNEY_TREE:
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
@@ -5830,7 +5810,13 @@ static void sub_8194950(u8 taskId)
}
}
-static void CB2_BattleDome(void)
+#undef STATE_FADE_IN
+#undef STATE_SHOW_RESULTS
+#undef STATE_DELAY
+#undef STATE_WAIT_FOR_INPUT
+#undef STATE_CLOSE_TOURNEY_TREE
+
+static void CB2_TourneyTree(void)
{
AnimateSprites();
BuildOamBuffer();
@@ -5839,7 +5825,7 @@ static void CB2_BattleDome(void)
RunTasks();
}
-static void VblankCb0_BattleDome(void)
+static void VblankCb_TourneyInfoCard(void)
{
ChangeBgX(3, 0x80, 1);
ChangeBgY(3, 0x80, 2);
@@ -5859,7 +5845,7 @@ static void VblankCb0_BattleDome(void)
*(vu32*)(REG_ADDR_WIN0H) = ((win0H << 16) | (win1H)); \
}
-static void HblankCb_BattleDome(void)
+static void HblankCb_TourneyTree(void)
{
register u32 vCount asm("r0") = REG_VCOUNT;
register u32 vCount_ asm("r1") = vCount;
@@ -5867,7 +5853,8 @@ static void HblankCb_BattleDome(void)
{
if (vCount < 50)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(152, 155), WIN_RANGE(85, 88));
return;
}
@@ -5875,13 +5862,15 @@ static void HblankCb_BattleDome(void)
{
if (vCount < 75)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(144, 152), WIN_RANGE(88, 96));
return;
}
else if (vCount < 82)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(152, 155), WIN_RANGE(85, 88));
return;
}
@@ -5889,13 +5878,15 @@ static void HblankCb_BattleDome(void)
{
if (vCount < 103)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(152, 155), WIN_RANGE(85, 88));
return;
}
else if (vCount < 119)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(144, 152), WIN_RANGE(88, 96));
return;
}
@@ -5903,7 +5894,8 @@ static void HblankCb_BattleDome(void)
{
if (vCount_ < 135)
{
- REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
+ REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR
+ | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR;
SET_WIN0H_WIN1H(WIN_RANGE(152, 155), WIN_RANGE(85, 88));
return;
}
@@ -5912,11 +5904,12 @@ static void HblankCb_BattleDome(void)
}
}
- REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_CLR | WININ_WIN1_OBJ;
+ REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ
+ | WININ_WIN1_BG_ALL | WININ_WIN1_CLR | WININ_WIN1_OBJ;
SET_WIN0H_WIN1H(0, 0);
}
-static void VblankCb1_BattleDome(void)
+static void VblankCb_TourneyTree(void)
{
SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X);
SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y);
@@ -5930,17 +5923,17 @@ static void VblankCb1_BattleDome(void)
ScanlineEffect_InitHBlankDmaTransfer();
}
-static void InitDomeFacilityTrainersAndMons(void)
+static void SetFacilityTrainerAndMonPtrs(void)
{
gFacilityTrainerMons = gBattleFrontierMons;
gFacilityTrainers = gBattleFrontierTrainers;
}
-static void RestoreDomePlayerParty(void)
+static void ResetSketchedMoves(void)
{
int i, moveSlot;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DOME_BATTLE_PARTY_SIZE; i++)
{
int playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gSelectedOrderFromParty[i] - 1] - 1;
int count;
@@ -5966,7 +5959,7 @@ static void RestoreDomePlayerPartyHeldItems(void)
{
int i;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DOME_BATTLE_PARTY_SIZE; i++)
{
int playerMonId = gSaveBlock2Ptr->frontier.selectedPartyMons[gSelectedOrderFromParty[i] - 1] - 1;
u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_HELD_ITEM, NULL);
@@ -5974,13 +5967,14 @@ static void RestoreDomePlayerPartyHeldItems(void)
}
}
-static void ReduceDomePlayerPartyTo3Mons(void)
+static void ReduceDomePlayerPartyToSelectedMons(void)
{
ReducePlayerPartyToSelectedMons();
}
static void GetPlayerSeededBeforeOpponent(void)
{
+ // A higher tournament ID is a worse seed
if (TrainerIdToTournamentId(gTrainerBattleOpponent_A) > TrainerIdToTournamentId(TRAINER_PLAYER))
gSpecialVar_Result = 1;
else
@@ -5991,23 +5985,24 @@ static void BufferLastDomeWinnerName(void)
{
int i;
- InitDomeFacilityTrainersAndMons();
+ SetFacilityTrainerAndMonPtrs();
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
- if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated)
+ if (!DOME_TRAINERS[i].isEliminated)
break;
}
- CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
+ CopyDomeTrainerName(gStringVar1, DOME_TRAINERS[i].trainerId);
}
-static void sub_8194F58(void)
+// For showing the previous tourney results before the player has entered a challenge
+static void InitRandomTourneyTreeResults(void)
{
int i, j, k;
int monLevel;
- int species[3];
+ int species[FRONTIER_PARTY_SIZE];
int monTypesBits;
int trainerId;
- int monSetId;
+ int monId;
u8 lvlMode;
u16 *statSums;
int *statValues;
@@ -6016,18 +6011,18 @@ static void sub_8194F58(void)
species[0] = 0;
species[1] = 0;
species[2] = 0;
- if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.field_CA8 != 1)
+ if ((gSaveBlock2Ptr->frontier.domeLvlMode != -gSaveBlock2Ptr->frontier.domeBattleMode) && gSaveBlock2Ptr->frontier.challengeStatus != CHALLENGE_STATUS_SAVING)
return;
statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT);
- statValues = AllocZeroed(sizeof(int) * 6);
+ statValues = AllocZeroed(sizeof(int) * NUM_STATS);
lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
- gSaveBlock2Ptr->frontier.lvlMode = 0;
+ gSaveBlock2Ptr->frontier.lvlMode = FRONTIER_LVL_50;
// This one, I'd like to call a 'C fakematching'.
{
u8 one;
- gSaveBlock2Ptr->frontier.field_D0A = (one = 1);
- gSaveBlock2Ptr->frontier.field_D0B = one;
+ gSaveBlock2Ptr->frontier.domeLvlMode = (one = 1);
+ gSaveBlock2Ptr->frontier.domeBattleMode = one;
}
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
@@ -6043,35 +6038,35 @@ static void sub_8194F58(void)
for (j = 0; j < i; j++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId)
+ if (DOME_TRAINERS[j].trainerId == trainerId)
break;
}
} while (j != i);
- gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId;
- for (j = 0; j < 3; j++)
+ DOME_TRAINERS[i].trainerId = trainerId;
+ for (j = 0; j < FRONTIER_PARTY_SIZE; j++)
{
- // Make sure the mon is valid.
do
{
- monSetId = RandomizeFacilityTrainerMonSet(trainerId);
+ monId = GetRandomFrontierMonFromSet(trainerId);
for (k = 0; k < j; k++)
{
- int checkingMonId = gSaveBlock2Ptr->frontier.domeMonIds[i][k];
- if (checkingMonId == monSetId
- || species[0] == gFacilityTrainerMons[monSetId].species
- || species[1] == gFacilityTrainerMons[monSetId].species
- || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monSetId].itemTableId)
+ // Make sure the mon is valid.
+ int alreadySelectedMonId = DOME_MONS[i][k];
+ if (alreadySelectedMonId == monId
+ || species[0] == gFacilityTrainerMons[monId].species
+ || species[1] == gFacilityTrainerMons[monId].species
+ || gFacilityTrainerMons[alreadySelectedMonId].itemTableId == gFacilityTrainerMons[monId].itemTableId)
break;
}
} while (k != j);
- gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monSetId;
- species[j] = gFacilityTrainerMons[monSetId].species;
+ DOME_MONS[i][j] = monId;
+ species[j] = gFacilityTrainerMons[monId].species;
}
- gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0;
- gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0;
- gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0;
+ DOME_TRAINERS[i].isEliminated = FALSE;
+ DOME_TRAINERS[i].eliminatedAt = 0;
+ DOME_TRAINERS[i].forfeited = FALSE;
}
monLevel = 50;
@@ -6079,13 +6074,13 @@ static void sub_8194F58(void)
{
monTypesBits = 0;
statSums[i] = 0;
- ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId);
- for (j = 0; j < 3; j++)
+ ivs = GetDomeTrainerMonIvs(DOME_TRAINERS[i].trainerId);
+ for (j = 0; j < FRONTIER_PARTY_SIZE; j++)
{
- CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species,
+ CalcDomeMonStats(gFacilityTrainerMons[DOME_MONS[i][j]].species,
monLevel, ivs,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].evSpread,
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].nature,
+ gFacilityTrainerMons[DOME_MONS[i][j]].evSpread,
+ gFacilityTrainerMons[DOME_MONS[i][j]].nature,
statValues);
statSums[i] += statValues[STAT_ATK];
@@ -6094,8 +6089,8 @@ static void sub_8194F58(void)
statSums[i] += statValues[STAT_SPDEF];
statSums[i] += statValues[STAT_SPEED];
statSums[i] += statValues[STAT_HP];
- monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type1];
- monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type2];
+ monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type1];
+ monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[DOME_MONS[i][j]].species].type2];
}
// Because GF hates temporary vars, trainerId acts like monTypesCount here.
@@ -6118,7 +6113,7 @@ static void sub_8194F58(void)
}
else if (statSums[i] == statSums[j])
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId)
+ if (DOME_TRAINERS[i].trainerId > DOME_TRAINERS[j].trainerId)
SwapDomeTrainers(i, j, statSums);
}
}
@@ -6127,7 +6122,7 @@ static void sub_8194F58(void)
Free(statSums);
Free(statValues);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < DOME_ROUNDS_COUNT; i++)
DecideRoundWinners(i);
gSaveBlock2Ptr->frontier.lvlMode = lvlMode;
@@ -6139,7 +6134,7 @@ static int TrainerIdToTournamentId(u16 trainerId)
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId)
+ if (DOME_TRAINERS[i].trainerId == trainerId)
break;
}
@@ -6153,7 +6148,7 @@ int TrainerIdToDomeTournamentId(u16 trainerId)
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId)
+ if (DOME_TRAINERS[i].trainerId == trainerId)
break;
}
@@ -6162,14 +6157,15 @@ int TrainerIdToDomeTournamentId(u16 trainerId)
static u8 sub_81953E8(u8 tournamentId, u8 round)
{
- u8 arr[2];
- sub_8192F08(gUnknown_0860D1A0[gUnknown_0860D1C0[tournamentId] / 2][round] - 16, arr);
- if (tournamentId == arr[0])
- return arr[1];
+ u8 tournamentIds[2];
+ BufferDomeWinString(gUnknown_0860D1A0[gUnknown_0860D1C0[tournamentId] / 2][round] - 16, tournamentIds);
+ if (tournamentId == tournamentIds[0])
+ return tournamentIds[1];
else
- return arr[0];
+ return tournamentIds[0];
}
+// Determines which trainers won in the NPC vs NPC battles
static void DecideRoundWinners(u8 roundId)
{
int i;
@@ -6180,24 +6176,24 @@ static void DecideRoundWinners(u8 roundId)
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
{
- if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated || gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER)
+ if (DOME_TRAINERS[i].isEliminated || DOME_TRAINERS[i].trainerId == TRAINER_PLAYER)
continue;
tournamentId1 = i;
- tournamentId2 = TournamentIdOfOpponent(roundId, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId);
+ tournamentId2 = TournamentIdOfOpponent(roundId, DOME_TRAINERS[tournamentId1].trainerId);
// Frontier Brain always wins, check tournamentId1.
- if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId2 != 0xFF)
+ if (DOME_TRAINERS[tournamentId1].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId2 != 0xFF)
{
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId;
- gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId);
+ DOME_TRAINERS[tournamentId2].isEliminated = TRUE;
+ DOME_TRAINERS[tournamentId2].eliminatedAt = roundId;
+ gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId);
}
// Frontier Brain always wins, check tournamentId2.
- else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId1 != 0xFF)
+ else if (DOME_TRAINERS[tournamentId2].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId1 != 0xFF)
{
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId;
- gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId);
+ DOME_TRAINERS[tournamentId1].isEliminated = TRUE;
+ DOME_TRAINERS[tournamentId1].eliminatedAt = roundId;
+ gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId);
}
// Decide which one of two trainers wins!
else if (tournamentId2 != 0xFF)
@@ -6205,17 +6201,17 @@ static void DecideRoundWinners(u8 roundId)
// BUG: points1 and points2 are not cleared at the beginning of the loop resulting in not fair results.
// Calculate points for both trainers.
- for (monId1 = 0; monId1 < 3; monId1++)
+ for (monId1 = 0; monId1 < FRONTIER_PARTY_SIZE; monId1++)
{
for (moveSlot = 0; moveSlot < MAX_MON_MOVES; moveSlot++)
{
- for (monId2 = 0; monId2 < 3; monId2++)
+ for (monId2 = 0; monId2 < FRONTIER_PARTY_SIZE; monId2++)
{
- points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId1]].moves[moveSlot],
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId2]].species, 2);
+ points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].moves[moveSlot],
+ gFacilityTrainerMons[DOME_MONS[tournamentId2][monId2]].species, 2);
}
}
- species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId1]].species;
+ species = gFacilityTrainerMons[DOME_MONS[tournamentId1][monId1]].species;
points1 += ( gBaseStats[species].baseHP
+ gBaseStats[species].baseAttack
+ gBaseStats[species].baseDefense
@@ -6228,17 +6224,17 @@ static void DecideRoundWinners(u8 roundId)
// Favor trainers with higher id;
points1 += tournamentId1;
- for (monId1 = 0; monId1 < 3; monId1++)
+ for (monId1 = 0; monId1 < FRONTIER_PARTY_SIZE; monId1++)
{
for (moveSlot = 0; moveSlot < MAX_MON_MOVES; moveSlot++)
{
- for (monId2 = 0; monId2 < 3; monId2++)
+ for (monId2 = 0; monId2 < FRONTIER_PARTY_SIZE; monId2++)
{
- points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId1]].moves[moveSlot],
- gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId2]].species, 2);
+ points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].moves[moveSlot],
+ gFacilityTrainerMons[DOME_MONS[tournamentId1][monId2]].species, 2);
}
}
- species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId1]].species;
+ species = gFacilityTrainerMons[DOME_MONS[tournamentId2][monId1]].species;
points2 += ( gBaseStats[species].baseHP
+ gBaseStats[species].baseAttack
+ gBaseStats[species].baseDefense
@@ -6253,28 +6249,28 @@ static void DecideRoundWinners(u8 roundId)
if (points1 > points2)
{
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId;
- gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId);
+ DOME_TRAINERS[tournamentId2].isEliminated = TRUE;
+ DOME_TRAINERS[tournamentId2].eliminatedAt = roundId;
+ gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId);
}
else if (points1 < points2)
{
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId;
- gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId);
+ DOME_TRAINERS[tournamentId1].isEliminated = TRUE;
+ DOME_TRAINERS[tournamentId1].eliminatedAt = roundId;
+ gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId);
}
// Points are the same, so we favor the one with the higher id.
else if (tournamentId1 > tournamentId2)
{
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId;
- gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId);
+ DOME_TRAINERS[tournamentId2].isEliminated = TRUE;
+ DOME_TRAINERS[tournamentId2].eliminatedAt = roundId;
+ gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId);
}
else
{
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1;
- gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId;
- gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId);
+ DOME_TRAINERS[tournamentId1].isEliminated = TRUE;
+ DOME_TRAINERS[tournamentId1].eliminatedAt = roundId;
+ gSaveBlock2Ptr->frontier.domeWinningMoves[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId);
}
}
}
@@ -6296,7 +6292,7 @@ static void CopyDomeTrainerName(u8 *str, u16 trainerId)
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
str[i] = gSaveBlock2Ptr->playerName[i];
}
- else if (trainerId < 300)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
str[i] = gFacilityTrainers[trainerId].trainerName[i];
diff --git a/src/battle_factory.c b/src/battle_factory.c
index bc47b1fda..913b1b1a0 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -10,7 +10,10 @@
#include "random.h"
#include "constants/species.h"
#include "constants/battle_ai.h"
+#include "constants/battle_factory.h"
#include "constants/battle_frontier.h"
+#include "constants/battle_frontier_mons.h"
+#include "constants/frontier_util.h"
#include "constants/layouts.h"
#include "constants/trainers.h"
#include "constants/moves.h"
@@ -22,7 +25,7 @@ static bool8 sPerformedRentalSwap;
static void InitFactoryChallenge(void);
static void GetBattleFactoryData(void);
static void SetBattleFactoryData(void);
-static void sub_81A613C(void);
+static void SaveFactoryChallenge(void);
static void nullsub_75(void);
static void nullsub_123(void);
static void SelectInitialRentalMons(void);
@@ -48,14 +51,14 @@ static const u16 sMoves_TotalPreparation[] =
MOVE_MINIMIZE, MOVE_WITHDRAW, MOVE_DEFENSE_CURL, MOVE_BARRIER, MOVE_FOCUS_ENERGY, MOVE_AMNESIA,
MOVE_ACID_ARMOR, MOVE_SHARPEN, MOVE_CONVERSION, MOVE_CONVERSION_2, MOVE_BELLY_DRUM, MOVE_PSYCH_UP,
MOVE_CHARGE, MOVE_SNATCH, MOVE_TAIL_GLOW, MOVE_COSMIC_POWER, MOVE_IRON_DEFENSE, MOVE_HOWL, MOVE_BULK_UP, MOVE_CALM_MIND, MOVE_DRAGON_DANCE,
- 0
+ MOVE_NONE
};
static const u16 sMoves_ImpossibleToPredict[] =
{
MOVE_MIMIC, MOVE_METRONOME, MOVE_MIRROR_MOVE, MOVE_TRANSFORM, MOVE_SUBSTITUTE, MOVE_SKETCH, MOVE_CURSE,
MOVE_PRESENT, MOVE_FOLLOW_ME, MOVE_TRICK, MOVE_ROLE_PLAY, MOVE_ASSIST, MOVE_SKILL_SWAP, MOVE_CAMOUFLAGE,
- 0
+ MOVE_NONE
};
static const u16 sMoves_WeakeningTheFoe[] =
@@ -63,7 +66,7 @@ static const u16 sMoves_WeakeningTheFoe[] =
MOVE_SAND_ATTACK, MOVE_TAIL_WHIP, MOVE_LEER, MOVE_GROWL, MOVE_STRING_SHOT, MOVE_SCREECH, MOVE_SMOKESCREEN, MOVE_KINESIS,
MOVE_FLASH, MOVE_COTTON_SPORE, MOVE_SPITE, MOVE_SCARY_FACE, MOVE_CHARM, MOVE_KNOCK_OFF, MOVE_SWEET_SCENT, MOVE_FEATHER_DANCE,
MOVE_FAKE_TEARS, MOVE_METAL_SOUND, MOVE_TICKLE,
- 0
+ MOVE_NONE
};
static const u16 sMoves_HighRiskHighReturn[] =
@@ -72,7 +75,7 @@ static const u16 sMoves_HighRiskHighReturn[] =
MOVE_BIDE, MOVE_SELF_DESTRUCT, MOVE_SKY_ATTACK, MOVE_EXPLOSION, MOVE_FLAIL, MOVE_REVERSAL, MOVE_DESTINY_BOND,
MOVE_PERISH_SONG, MOVE_PAIN_SPLIT, MOVE_MIRROR_COAT, MOVE_MEMENTO, MOVE_GRUDGE, MOVE_FACADE, MOVE_FOCUS_PUNCH,
MOVE_BLAST_BURN, MOVE_HYDRO_CANNON, MOVE_OVERHEAT, MOVE_FRENZY_PLANT, MOVE_PSYCHO_BOOST, MOVE_VOLT_TACKLE,
- 0
+ MOVE_NONE
};
static const u16 sMoves_Endurance[] =
@@ -81,7 +84,7 @@ static const u16 sMoves_Endurance[] =
MOVE_DETECT, MOVE_ENDURE, MOVE_MILK_DRINK, MOVE_HEAL_BELL, MOVE_SAFEGUARD, MOVE_BATON_PASS, MOVE_MORNING_SUN,
MOVE_SYNTHESIS, MOVE_MOONLIGHT, MOVE_SWALLOW, MOVE_WISH, MOVE_INGRAIN, MOVE_MAGIC_COAT, MOVE_RECYCLE, MOVE_REFRESH,
MOVE_MUD_SPORT, MOVE_SLACK_OFF, MOVE_AROMATHERAPY, MOVE_WATER_SPORT,
- 0
+ MOVE_NONE
};
static const u16 sMoves_SlowAndSteady[] =
@@ -90,57 +93,58 @@ static const u16 sMoves_SlowAndSteady[] =
MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_HYPNOSIS, MOVE_CONFUSE_RAY, MOVE_GLARE, MOVE_POISON_GAS, MOVE_LOVELY_KISS, MOVE_SPORE,
MOVE_SPIDER_WEB, MOVE_SWEET_KISS, MOVE_SPIKES, MOVE_SWAGGER, MOVE_MEAN_LOOK, MOVE_ATTRACT, MOVE_ENCORE, MOVE_TORMENT,
MOVE_FLATTER, MOVE_WILL_O_WISP, MOVE_TAUNT, MOVE_YAWN, MOVE_IMPRISON, MOVE_SNATCH, MOVE_TEETER_DANCE, MOVE_GRASS_WHISTLE, MOVE_BLOCK,
- 0
+ MOVE_NONE
};
static const u16 sMoves_DependsOnTheBattlesFlow[] =
{
MOVE_SANDSTORM, MOVE_RAIN_DANCE, MOVE_SUNNY_DAY, MOVE_HAIL, MOVE_WEATHER_BALL,
- 0
+ MOVE_NONE
};
-static const u16 *const sMoveStyles[] =
+// Excludes FACTORY_STYLE_NONE
+static const u16 *const sMoveStyles[FACTORY_NUM_STYLES - 1] =
{
- sMoves_TotalPreparation,
- sMoves_SlowAndSteady,
- sMoves_Endurance,
- sMoves_HighRiskHighReturn,
- sMoves_WeakeningTheFoe,
- sMoves_ImpossibleToPredict,
- sMoves_DependsOnTheBattlesFlow,
+ [FACTORY_STYLE_PREPARATION - 1] = sMoves_TotalPreparation,
+ [FACTORY_STYLE_SLOW_STEADY - 1] = sMoves_SlowAndSteady,
+ [FACTORY_STYLE_ENDURANCE - 1] = sMoves_Endurance,
+ [FACTORY_STYLE_HIGH_RISK - 1] = sMoves_HighRiskHighReturn,
+ [FACTORY_STYLE_WEAKENING - 1] = sMoves_WeakeningTheFoe,
+ [FACTORY_STYLE_UNPREDICTABLE - 1] = sMoves_ImpossibleToPredict,
+ [FACTORY_STYLE_WEATHER - 1] = sMoves_DependsOnTheBattlesFlow,
};
static void (* const sBattleFactoryFunctions[])(void) =
{
- InitFactoryChallenge,
- GetBattleFactoryData,
- SetBattleFactoryData,
- sub_81A613C,
- nullsub_75,
- nullsub_123,
- SelectInitialRentalMons,
- SwapRentalMons,
- SetPerformedRentalSwap,
- SetRentalsToOpponentParty,
- SetPlayerAndOpponentParties,
- SetOpponentGfxVar,
- GenerateOpponentMons,
- GenerateInitialRentalMons,
- GetOpponentMostCommonMonType,
- GetOpponentBattleStyle,
- RestorePlayerPartyHeldItems,
+ [BATTLE_FACTORY_FUNC_INIT] = InitFactoryChallenge,
+ [BATTLE_FACTORY_FUNC_GET_DATA] = GetBattleFactoryData,
+ [BATTLE_FACTORY_FUNC_SET_DATA] = SetBattleFactoryData,
+ [BATTLE_FACTORY_FUNC_SAVE] = SaveFactoryChallenge,
+ [BATTLE_FACTORY_FUNC_NULL] = nullsub_75,
+ [BATTLE_FACTORY_FUNC_NULL2] = nullsub_123,
+ [BATTLE_FACTORY_FUNC_SELECT_RENT_MONS] = SelectInitialRentalMons,
+ [BATTLE_FACTORY_FUNC_SWAP_RENT_MONS] = SwapRentalMons,
+ [BATTLE_FACTORY_FUNC_SET_SWAPPED] = SetPerformedRentalSwap,
+ [BATTLE_FACTORY_FUNC_SET_OPPONENT_MONS] = SetRentalsToOpponentParty,
+ [BATTLE_FACTORY_FUNC_SET_PARTIES] = SetPlayerAndOpponentParties,
+ [BATTLE_FACTORY_FUNC_SET_OPPONENT_GFX] = SetOpponentGfxVar,
+ [BATTLE_FACTORY_FUNC_GENERATE_OPPONENT_MONS] = GenerateOpponentMons,
+ [BATTLE_FACTORY_FUNC_GENERATE_RENTAL_MONS] = GenerateInitialRentalMons,
+ [BATTLE_FACTORY_FUNC_GET_OPPONENT_MON_TYPE] = GetOpponentMostCommonMonType,
+ [BATTLE_FACTORY_FUNC_GET_OPPONENT_STYLE] = GetOpponentBattleStyle,
+ [BATTLE_FACTORY_FUNC_RESET_HELD_ITEMS] = RestorePlayerPartyHeldItems,
};
-static const u32 gUnknown_08612164[][2] =
+static const u32 sWinStreakFlags[][2] =
{
- {0x100, 0x200},
- {0x1000000, 0x2000000},
+ {STREAK_FACTORY_SINGLES_50, STREAK_FACTORY_SINGLES_OPEN},
+ {STREAK_FACTORY_DOUBLES_50, STREAK_FACTORY_DOUBLES_OPEN},
};
-static const u32 gUnknown_08612174[][2] =
+static const u32 sWinStreakMasks[][2] =
{
- {0xfffffeff, 0xfffffdff},
- {0xfeffffff, 0xfdffffff},
+ {~(STREAK_FACTORY_SINGLES_50), ~(STREAK_FACTORY_SINGLES_OPEN)},
+ {~(STREAK_FACTORY_DOUBLES_50), ~(STREAK_FACTORY_DOUBLES_OPEN)},
};
static const u8 sFixedIVTable[][2] =
@@ -187,11 +191,11 @@ static void InitFactoryChallenge(void)
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = 0;
- gSaveBlock2Ptr->frontier.field_CA9_b = 0;
- if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612164[battleMode][lvlMode]))
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = FALSE;
+ if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
{
gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = 0;
gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = 0;
@@ -200,7 +204,7 @@ static void InitFactoryChallenge(void)
sPerformedRentalSwap = FALSE;
for (i = 0; i < 6; i++)
gSaveBlock2Ptr->frontier.rentalMons[i].monId = 0xFFFF;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
gUnknown_03006298[i] = 0xFFFF;
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
@@ -214,13 +218,13 @@ static void GetBattleFactoryData(void)
switch (gSpecialVar_0x8005)
{
- case 1:
+ case FACTORY_DATA_WIN_STREAK:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode];
break;
- case 2:
- gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612164[battleMode][lvlMode]) != 0);
+ case FACTORY_DATA_WIN_STREAK_ACTIVE:
+ gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0);
break;
- case 3:
+ case FACTORY_DATA_WIN_STREAK_SWAPS:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode];
break;
}
@@ -233,16 +237,16 @@ static void SetBattleFactoryData(void)
switch (gSpecialVar_0x8005)
{
- case 1:
+ case FACTORY_DATA_WIN_STREAK:
gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
- case 2:
+ case FACTORY_DATA_WIN_STREAK_ACTIVE:
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_08612164[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode];
else
- gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_08612174[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode];
break;
- case 3:
+ case FACTORY_DATA_WIN_STREAK_SWAPS:
if (sPerformedRentalSwap == TRUE)
{
gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = gSpecialVar_0x8006;
@@ -252,12 +256,12 @@ static void SetBattleFactoryData(void)
}
}
-static void sub_81A613C(void)
+static void SaveFactoryChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = 1;
- sub_81A4C30();
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
+ SaveGameFrontier();
}
static void nullsub_75(void)
@@ -289,8 +293,8 @@ static void SetPerformedRentalSwap(void)
static void GenerateOpponentMons(void)
{
int i, j, k;
- u16 species[3];
- u16 heldItems[3];
+ u16 species[FRONTIER_PARTY_SIZE];
+ u16 heldItems[FRONTIER_PARTY_SIZE];
int firstMonId = 0;
u16 trainerId = 0;
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -301,7 +305,7 @@ static void GenerateOpponentMons(void)
do
{
- trainerId = sub_8162548(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum);
+ trainerId = GetRandomScaledFrontierTrainerId(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum);
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -314,7 +318,7 @@ static void GenerateOpponentMons(void)
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = trainerId;
i = 0;
- while (i != 3)
+ while (i != FRONTIER_PARTY_SIZE)
{
u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE);
if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
@@ -328,7 +332,7 @@ static void GenerateOpponentMons(void)
if (j != 6)
continue;
- if (lvlMode == FRONTIER_LVL_50 && monSetId > 849)
+ if (lvlMode == FRONTIER_LVL_50 && monSetId > FRONTIER_MONS_HIGH_TIER)
continue;
for (k = firstMonId; k < firstMonId + i; k++)
@@ -368,7 +372,7 @@ static void SetRentalsToOpponentParty(void)
else
gFacilityTrainerMons = gSlateportBattleTentMons;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId = gUnknown_03006298[i];
gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL);
@@ -406,7 +410,7 @@ static void SetPlayerAndOpponentParties(void)
if (gSpecialVar_0x8005 < 2)
{
ZeroPlayerPartyMons();
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
monSetId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
ivs = gSaveBlock2Ptr->frontier.rentalMons[i].ivs;
@@ -447,7 +451,7 @@ static void SetPlayerAndOpponentParties(void)
{
case 0:
case 2:
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
monSetId = gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId;
ivs = gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs;
@@ -587,7 +591,7 @@ static void GetOpponentMostCommonMonType(void)
gFacilityTrainerMons = gBattleFrontierMons;
for (i = 0; i < NUMBER_OF_MON_TYPES; i++)
typesCount[i] = 0;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
u32 species = gFacilityTrainerMons[gUnknown_03006298[i]].species;
@@ -616,14 +620,14 @@ static void GetOpponentMostCommonMonType(void)
static void GetOpponentBattleStyle(void)
{
u8 i, j, count;
- u8 stylePoints[8];
+ u8 stylePoints[FACTORY_NUM_STYLES];
count = 0;
gFacilityTrainerMons = gBattleFrontierMons;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < FACTORY_NUM_STYLES; i++)
stylePoints[i] = 0;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
u16 monSetId = gUnknown_03006298[i];
for (j = 0; j < MAX_MON_MOVES; j++)
@@ -634,7 +638,7 @@ static void GetOpponentBattleStyle(void)
}
gSpecialVar_Result = 0;
- for (i = 1; i < 8; i++)
+ for (i = 1; i < FACTORY_NUM_STYLES; i++)
{
if (stylePoints[i] >= sRequiredMoveCounts[i - 1])
{
@@ -643,8 +647,9 @@ static void GetOpponentBattleStyle(void)
}
}
+ // Has no singular style
if (count > 2)
- gSpecialVar_Result = 8;
+ gSpecialVar_Result = FACTORY_NUM_STYLES;
}
static u8 GetMoveBattleStyle(u16 move)
@@ -654,13 +659,13 @@ static u8 GetMoveBattleStyle(u16 move)
for (i = 0; i < ARRAY_COUNT(sMoveStyles); i++)
{
- for (j = 0, moves = sMoveStyles[i]; moves[j] != 0; j++)
+ for (j = 0, moves = sMoveStyles[i]; moves[j] != MOVE_NONE; j++)
{
if (moves[j] == move)
return i + 1;
}
}
- return 0;
+ return FACTORY_STYLE_NONE;
}
bool8 InBattleFactory(void)
@@ -678,7 +683,7 @@ static void RestorePlayerPartyHeldItems(void)
else
gFacilityTrainerMons = gSlateportBattleTentMons;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
SetMonData(&gPlayerParty[i],
MON_DATA_HELD_ITEM,
@@ -702,8 +707,8 @@ u8 GetFactoryMonFixedIV(u8 arg0, u8 arg1)
void FillFactoryBrainParty(void)
{
int i, j, k;
- u16 species[3];
- u16 heldItems[3];
+ u16 species[FRONTIER_PARTY_SIZE];
+ u16 heldItems[FRONTIER_PARTY_SIZE];
u8 friendship;
int monLevel;
u8 fixedIV;
@@ -717,13 +722,13 @@ void FillFactoryBrainParty(void)
i = 0;
otId = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
- while (i != 3)
+ while (i != FRONTIER_PARTY_SIZE)
{
u16 monSetId = GetMonSetId(lvlMode, challengeNum, FALSE);
if (gFacilityTrainerMons[monSetId].species == SPECIES_UNOWN)
continue;
- if (monLevel == 50 && monSetId > 849)
+ if (monLevel == 50 && monSetId > FRONTIER_MONS_HIGH_TIER)
continue;
for (j = 0; j < 6; j++)
diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c
index f56442432..de2f3a10c 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"
@@ -375,16 +375,16 @@ static const struct WindowTemplate sSelect_WindowTemplates[] =
static const u16 gUnknown_0861046C[] = INCBIN_U16("graphics/unknown/unknown_61046C.gbapal");
-static const u8 gUnknown_08610476[] = {0x00, 0x02, 0x00};
-static const u8 gUnknown_08610479[] = {0x00, 0x04, 0x00};
+static const u8 sMenuOptionTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_TRANSPARENT};
+static const u8 sSpeciesNameTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_TRANSPARENT};
static const struct OamData gUnknown_0861047C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -398,10 +398,10 @@ static const struct OamData gUnknown_0861047C =
static const struct OamData gUnknown_08610484 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -415,10 +415,10 @@ static const struct OamData gUnknown_08610484 =
static const struct OamData gUnknown_0861048C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
@@ -432,10 +432,10 @@ static const struct OamData gUnknown_0861048C =
static const struct OamData gUnknown_08610494 =
{
.y = 0,
- .affineMode = 3,
- .objMode = 1,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_BLEND,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -632,14 +632,14 @@ static const struct SpritePalette gUnknown_086106B0[] =
static const struct OamData gUnknown_086106D8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
- .size = 2,
+ .size = SPRITE_SIZE(32x32),
.tileNum = 0,
.priority = 3,
.paletteNum = 0,
@@ -649,14 +649,14 @@ static const struct OamData gUnknown_086106D8 =
static const struct OamData gUnknown_086106E0 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
- .size = 1,
+ .size = SPRITE_SIZE(16x16),
.tileNum = 0,
.priority = 3,
.paletteNum = 0,
@@ -666,14 +666,14 @@ static const struct OamData gUnknown_086106E0 =
static const struct OamData gUnknown_086106E8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 1,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
- .size = 2,
+ .size = SPRITE_SIZE(32x16),
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
@@ -683,14 +683,14 @@ static const struct OamData gUnknown_086106E8 =
static const struct OamData gUnknown_086106F0 =
{
.y = 0,
- .affineMode = 3,
- .objMode = 1,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_BLEND,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
- .size = 3,
+ .size = SPRITE_SIZE(64x64),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
@@ -985,8 +985,8 @@ static const struct WindowTemplate sSwap_WindowTemplates[] =
};
static const u16 gUnknown_08610918[] = {RGB_BLACK, RGB_BLACK, RGB_WHITE, RGB_BLACK, RGB_RED}; // Palette.
-static const u8 gUnknown_08610922[] = {0x0, 0x02, 0x0};
-static const u8 gUnknown_08610925[] = {0x0, 0x04, 0x0};
+static const u8 sSwapMenuOptionsTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_TRANSPARENT};
+static const u8 sSwapSpeciesNameTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_TRANSPARENT};
static const struct SwapActionIdAndFunc sSwap_PlayerScreenActions[] =
{
@@ -1808,7 +1808,7 @@ static void Select_PrintMonSpecies(void)
species = GetMonData(&sFactorySelectScreen->mons[monId].monData, MON_DATA_SPECIES, NULL);
StringCopy(gStringVar4, gSpeciesNames[species]);
x = GetStringRightAlignXOffset(1, gStringVar4, 86);
- AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610479, 0, gStringVar4);
+ AddTextPrinterParameterized3(1, 1, x, 1, sSpeciesNameTextColors, 0, gStringVar4);
CopyWindowToVram(1, 2);
}
@@ -1843,13 +1843,13 @@ static void Select_PrintMenuOptions(void)
PutWindowTilemap(3);
FillWindowPixelBuffer(3, PIXEL_FILL(0));
- AddTextPrinterParameterized3(3, 1, 7, 1, gUnknown_08610476, 0, gText_Summary);
+ AddTextPrinterParameterized3(3, 1, 7, 1, sMenuOptionTextColors, 0, gText_Summary);
if (selectedId != 0)
- AddTextPrinterParameterized3(3, 1, 7, 17, gUnknown_08610476, 0, gText_Deselect);
+ AddTextPrinterParameterized3(3, 1, 7, 17, sMenuOptionTextColors, 0, gText_Deselect);
else
- AddTextPrinterParameterized3(3, 1, 7, 17, gUnknown_08610476, 0, gText_Rent);
+ AddTextPrinterParameterized3(3, 1, 7, 17, sMenuOptionTextColors, 0, gText_Rent);
- AddTextPrinterParameterized3(3, 1, 7, 33, gUnknown_08610476, 0, gText_Others2);
+ AddTextPrinterParameterized3(3, 1, 7, 33, sMenuOptionTextColors, 0, gText_Others2);
CopyWindowToVram(3, 3);
}
@@ -1857,8 +1857,8 @@ static void Select_PrintYesNoOptions(void)
{
PutWindowTilemap(4);
FillWindowPixelBuffer(4, PIXEL_FILL(0));
- AddTextPrinterParameterized3(4, 1, 7, 1, gUnknown_08610476, 0, gText_Yes2);
- AddTextPrinterParameterized3(4, 1, 7, 17, gUnknown_08610476, 0, gText_No2);
+ AddTextPrinterParameterized3(4, 1, 7, 1, sMenuOptionTextColors, 0, gText_Yes2);
+ AddTextPrinterParameterized3(4, 1, 7, 17, sMenuOptionTextColors, 0, gText_No2);
CopyWindowToVram(4, 3);
}
@@ -3599,7 +3599,7 @@ static void Swap_PrintMonSpecies(void)
species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL);
StringCopy(gStringVar4, gSpeciesNames[species]);
x = GetStringRightAlignXOffset(1, gStringVar4, 86);
- AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610925, 0, gStringVar4);
+ AddTextPrinterParameterized3(1, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4);
CopyWindowToVram(1, 3);
}
}
@@ -3615,9 +3615,9 @@ static void Swap_PrintMenuOptions(void)
{
PutWindowTilemap(3);
FillWindowPixelBuffer(3, PIXEL_FILL(0));
- AddTextPrinterParameterized3(3, 1, 15, 1, gUnknown_08610922, 0, gText_Summary2);
- AddTextPrinterParameterized3(3, 1, 15, 17, gUnknown_08610922, 0, gText_Swap);
- AddTextPrinterParameterized3(3, 1, 15, 33, gUnknown_08610922, 0, gText_Rechoose);
+ AddTextPrinterParameterized3(3, 1, 15, 1, sSwapMenuOptionsTextColors, 0, gText_Summary2);
+ AddTextPrinterParameterized3(3, 1, 15, 17, sSwapMenuOptionsTextColors, 0, gText_Swap);
+ AddTextPrinterParameterized3(3, 1, 15, 33, sSwapMenuOptionsTextColors, 0, gText_Rechoose);
CopyWindowToVram(3, 3);
}
@@ -3625,15 +3625,15 @@ static void Swap_PrintYesNoOptions(void)
{
PutWindowTilemap(4);
FillWindowPixelBuffer(4, PIXEL_FILL(0));
- AddTextPrinterParameterized3(4, 1, 7, 1, gUnknown_08610922, 0, gText_Yes3);
- AddTextPrinterParameterized3(4, 1, 7, 17, gUnknown_08610922, 0, gText_No3);
+ AddTextPrinterParameterized3(4, 1, 7, 1, sSwapMenuOptionsTextColors, 0, gText_Yes3);
+ AddTextPrinterParameterized3(4, 1, 7, 17, sSwapMenuOptionsTextColors, 0, gText_No3);
CopyWindowToVram(4, 3);
}
static void Swap_PrintActionString(const u8 *str, u32 y, u32 windowId)
{
s32 x = GetStringRightAlignXOffset(0, str, 0x46);
- AddTextPrinterParameterized3(windowId, 0, x, y, gUnknown_08610922, 0, str);
+ AddTextPrinterParameterized3(windowId, 0, x, y, sSwapMenuOptionsTextColors, 0, str);
}
static void Swap_PrintActionStrings(void)
@@ -3707,7 +3707,7 @@ static void Swap_PrintMonSpecies2(void)
species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL);
StringCopy(gStringVar4, gSpeciesNames[species]);
x = GetStringRightAlignXOffset(1, gStringVar4, 86);
- AddTextPrinterParameterized3(7, 1, x, 1, gUnknown_08610925, 0, gStringVar4);
+ AddTextPrinterParameterized3(7, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4);
CopyWindowToVram(7, 3);
}
}
@@ -3733,7 +3733,7 @@ static void Swap_PrintMonSpecies3(void)
species = GetMonData(&gEnemyParty[monId], MON_DATA_SPECIES, NULL);
StringCopy(gStringVar4, gSpeciesNames[species]);
x = GetStringRightAlignXOffset(1, gStringVar4, 86);
- AddTextPrinterParameterized3(1, 1, x, 1, gUnknown_08610925, 0, gStringVar4);
+ AddTextPrinterParameterized3(1, 1, x, 1, sSwapSpeciesNameTextColors, 0, gStringVar4);
CopyWindowToVram(1, 3);
}
}
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_interface.c b/src/battle_interface.c
index 8fabfed68..12273addb 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -202,10 +202,10 @@ static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
static const struct OamData sUnknown_0832C138 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
@@ -274,10 +274,10 @@ static const struct SpriteTemplate sHealthboxSafariSpriteTemplate =
static const struct OamData sOamData_Healthbar =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.matrixNum = 0,
@@ -330,45 +330,178 @@ static const struct SpriteTemplate sHealthbarSpriteTemplates[MAX_BATTLERS_COUNT]
static const struct Subsprite sUnknown_0832C220[] =
{
- {240, 0, 1, 3, 0, 1},
- {48, 0, 0, 2, 32, 1},
- {240, 32, 1, 1, 48, 1},
- {16, 32, 1, 1, 52, 1},
- {48, 32, 1, 1, 56, 1}
+ {
+ .x = 240,
+ .y = 0,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 48,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .tileOffset = 32,
+ .priority = 1
+ },
+ {
+ .x = 240,
+ .y = 32,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 48,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = 32,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 52,
+ .priority = 1
+ },
+ {
+ .x = 48,
+ .y = 32,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 56,
+ .priority = 1
+ }
};
static const struct Subsprite sUnknown_0832C234[] =
{
- {240, 0, 1, 3, 64, 1},
- {48, 0, 0, 2, 96, 1},
- {240, 32, 1, 1, 112, 1},
- {16, 32, 1, 1, 116, 1},
- {48, 32, 1, 1, 120, 1}
+ {
+ .x = 240,
+ .y = 0,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 64,
+ .priority = 1
+ },
+ {
+ .x = 48,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .tileOffset = 96,
+ .priority = 1
+ },
+ {
+ .x = 240,
+ .y = 32,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 112,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = 32,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 116,
+ .priority = 1
+ },
+ {
+ .x = 48,
+ .y = 32,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 120,
+ .priority = 1
+ }
};
static const struct Subsprite sUnknown_0832C248[] =
{
- {240, 0, 1, 3, 0, 1},
- {48, 0, 0, 2, 32, 1}
+ {
+ .x = 240,
+ .y = 0,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 48,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .tileOffset = 32,
+ .priority = 1
+ }
};
static const struct Subsprite sUnknown_0832C250[] =
{
- {240, 0, 1, 3, 0, 1},
- {48, 0, 0, 2, 32, 1}
+ {
+ .x = 240,
+ .y = 0,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 48,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .tileOffset = 32,
+ .priority = 1
+ }
};
static const struct Subsprite sUnknown_0832C258[] =
{
- {240, 0, 1, 1, 0, 1},
- {16, 0, 1, 1, 4, 1}
+ {
+ .x = 240,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1
+ }
};
static const struct Subsprite sUnknown_0832C260[] =
{
- {240, 0, 1, 1, 0, 1},
- {16, 0, 1, 1, 4, 1},
- {224, 0, 0, 0, 8, 1}
+ {
+ .x = 240,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = 224,
+ .y = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 8,
+ .priority = 1
+ }
};
// unused subsprite table
@@ -388,20 +521,90 @@ static const struct SubspriteTable sUnknown_0832C28C[] =
static const struct Subsprite sStatusSummaryBar_Subsprites_0[] =
{
- {160, 0, 1, 1, 0, 1},
- {192, 0, 1, 1, 4, 1},
- {224, 0, 1, 1, 8, 1},
- {0, 0, 1, 1, 12, 1}
+ {
+ .x = 160,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 192,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = 224,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 1
+ }
};
static const struct Subsprite sUnknown_0832C2AC[] =
{
- {160, 0, 1, 1, 0, 1},
- {192, 0, 1, 1, 4, 1},
- {224, 0, 1, 1, 8, 1},
- {0, 0, 1, 1, 8, 1},
- {32, 0, 1, 1, 8, 1},
- {64, 0, 1, 1, 12, 1}
+ {
+ .x = 160,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 192,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = 224,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = 32,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = 64,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 1
+ }
};
static const struct SubspriteTable sStatusSummaryBar_SubspriteTable[] =
@@ -441,10 +644,10 @@ static const struct SpriteSheet sStatusSummaryBallsSpriteSheet =
static const struct OamData sUnknown_0832C354 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
@@ -458,10 +661,10 @@ static const struct OamData sUnknown_0832C354 =
static const struct OamData sOamData_StatusSummaryBalls =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -558,62 +761,52 @@ static s32 DummiedOutFunction(s16 unused1, s16 unused2, s32 unused3)
{
return 9;
}
-
-#ifdef NONMATCHING
-static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
+void sub_8072308(s16 number, u16 *dest, bool8 unk)
{
s8 i, j;
- u8 array[4];
- u8 *arrayPtr;
- s32 r9, vaaa;
+ u8 buff[4];
for (i = 0; i < 4; i++)
- array[i] = 0;
+ {
+ buff[i] = 0;
+ }
- i = 3;
- r9 = -1;
- arrayPtr = array;
- while (1)
+ for (i = 3; ; i--)
{
- if (arg0 > 0)
+ if (number > 0)
{
- array[i] = arg0 % 10;
- arg0 = arg0 / 10;
- i--;
+ buff[i] = number % 10;
+ number /= 10;
}
else
{
+ for (; i > -1; i--)
+ {
+ buff[i] = 0xFF;
+ }
+ if (buff[3] == 0xFF)
+ buff[3] = 0;
break;
}
}
- for (; i > -1; i--)
- {
- array[i] = 0xFF;
- }
-
- if (arrayPtr[3] == 0xFF)
- arrayPtr[3] = 0;
-
- if (arg2 == 0)
+ if (!unk)
{
for (i = 0, j = 0; i < 4; i++)
{
- if (array[j] == 0xFF)
+ if (buff[j] == 0xFF)
{
- arg1[j] &= 0xFC00;
- arg1[j] |= 0x1E;
-
- arg1[i + 0x20] &= 0xFC00;
- arg1[i + 0x20] |= 0x1E;
+ dest[j + 0x00] &= 0xFC00;
+ dest[j + 0x00] |= 0x1E;
+ dest[i + 0x20] &= 0xFC00;
+ dest[i + 0x20] |= 0x1E;
}
else
{
- arg1[j] &= 0xFC00;
- arg1[j] |= array[j] + 0x14;
-
- arg1[i + 0x20] &= 0xFC00;
- arg1[i + 0x20] |= array[i] + 0x34;
+ dest[j + 0x00] &= 0xFC00;
+ dest[j + 0x00] |= 0x14 + buff[j];
+ dest[i + 0x20] &= 0xFC00;
+ dest[i + 0x20] |= 0x34 + buff[i];
}
j++;
}
@@ -622,254 +815,24 @@ static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
{
for (i = 0; i < 4; i++)
{
- if (array[i] == 0xFF)
+ if (buff[i] == 0xFF)
{
- arg1[i] &= 0xFC00;
- arg1[i] |= 0x1E;
-
- arg1[i + 0x20] &= 0xFC00;
- arg1[i + 0x20] |= 0x1E;
+ dest[i + 0x00] &= 0xFC00;
+ dest[i + 0x00] |= 0x1E;
+ dest[i + 0x20] &= 0xFC00;
+ dest[i + 0x20] |= 0x1E;
}
else
{
- arg1[i] &= 0xFC00;
- arg1[i] |= array[i] + 0x14;
-
- arg1[i + 0x20] &= 0xFC00;
- arg1[i + 0x20] |= array[i] + 0x34;
+ dest[i + 0x00] &= 0xFC00;
+ dest[i + 0x00] |= 0x14 + buff[i];
+ dest[i + 0x20] &= 0xFC00;
+ dest[i + 0x20] |= 0x34 + buff[i];
}
}
}
}
-#else
-NAKED
-static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- adds r7, r1, 0\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- mov r10, r2\n\
- movs r3, 0\n\
- movs r2, 0\n\
-_08072324:\n\
- lsls r0, r3, 24\n\
- asrs r0, 24\n\
- mov r3, sp\n\
- adds r1, r3, r0\n\
- strb r2, [r1]\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3\n\
- ble _08072324\n\
- movs r3, 0x3\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- mov r9, r0\n\
- mov r8, sp\n\
-_08072344:\n\
- lsls r0, r5, 16\n\
- asrs r6, r0, 16\n\
- cmp r6, 0\n\
- ble _08072372\n\
- lsls r4, r3, 24\n\
- asrs r4, 24\n\
- mov r1, sp\n\
- adds r5, r1, r4\n\
- adds r0, r6, 0\n\
- movs r1, 0xA\n\
- bl __modsi3\n\
- strb r0, [r5]\n\
- adds r0, r6, 0\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r5, r0, 16\n\
- subs r4, 0x1\n\
- lsls r4, 24\n\
- lsrs r3, r4, 24\n\
- b _08072344\n\
-_08072372:\n\
- lsls r1, r3, 24\n\
- asrs r0, r1, 24\n\
- cmp r0, r9\n\
- ble _08072396\n\
- movs r4, 0xFF\n\
- movs r3, 0x1\n\
- negs r3, r3\n\
-_08072380:\n\
- asrs r2, r1, 24\n\
- mov r5, sp\n\
- adds r1, r5, r2\n\
- ldrb r0, [r1]\n\
- orrs r0, r4\n\
- strb r0, [r1]\n\
- subs r2, 0x1\n\
- lsls r1, r2, 24\n\
- asrs r0, r1, 24\n\
- cmp r0, r3\n\
- bgt _08072380\n\
-_08072396:\n\
- mov r1, r8\n\
- ldrb r0, [r1, 0x3]\n\
- cmp r0, 0xFF\n\
- bne _080723A2\n\
- movs r0, 0\n\
- strb r0, [r1, 0x3]\n\
-_080723A2:\n\
- mov r2, r10\n\
- cmp r2, 0\n\
- bne _08072432\n\
- movs r3, 0\n\
- movs r1, 0\n\
- movs r6, 0xFC\n\
- lsls r6, 8\n\
- movs r5, 0x1E\n\
- mov r12, r5\n\
-_080723B4:\n\
- lsls r1, 24\n\
- asrs r2, r1, 24\n\
- mov r0, sp\n\
- adds r5, r0, r2\n\
- ldrb r0, [r5]\n\
- mov r8, r1\n\
- cmp r0, 0xFF\n\
- bne _080723EA\n\
- lsls r1, r2, 1\n\
- adds r1, r7\n\
- ldrh r2, [r1]\n\
- adds r0, r6, 0\n\
- ands r0, r2\n\
- mov r2, r12\n\
- orrs r0, r2\n\
- strh r0, [r1]\n\
- lsls r3, 24\n\
- asrs r1, r3, 23\n\
- adds r1, r7\n\
- adds r1, 0x40\n\
- ldrh r2, [r1]\n\
- adds r0, r6, 0\n\
- ands r0, r2\n\
- mov r5, r12\n\
- orrs r0, r5\n\
- strh r0, [r1]\n\
- b _0807241A\n\
-_080723EA:\n\
- lsls r2, 1\n\
- adds r2, r7\n\
- ldrh r0, [r2]\n\
- adds r1, r6, 0\n\
- ands r1, r0\n\
- ldrb r0, [r5]\n\
- adds r0, 0x14\n\
- orrs r1, r0\n\
- strh r1, [r2]\n\
- lsls r4, r3, 24\n\
- asrs r3, r4, 24\n\
- lsls r2, r3, 1\n\
- adds r2, r7\n\
- adds r2, 0x40\n\
- ldrh r0, [r2]\n\
- adds r1, r6, 0\n\
- ands r1, r0\n\
- mov r5, sp\n\
- adds r0, r5, r3\n\
- ldrb r0, [r0]\n\
- adds r0, 0x34\n\
- orrs r1, r0\n\
- strh r1, [r2]\n\
- adds r3, r4, 0\n\
-_0807241A:\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- add r0, r8\n\
- lsrs r1, r0, 24\n\
- movs r2, 0x80\n\
- lsls r2, 17\n\
- adds r0, r3, r2\n\
- lsrs r3, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3\n\
- ble _080723B4\n\
- b _08072496\n\
-_08072432:\n\
- movs r3, 0\n\
- movs r4, 0xFC\n\
- lsls r4, 8\n\
- movs r6, 0x1E\n\
-_0807243A:\n\
- lsls r1, r3, 24\n\
- asrs r2, r1, 24\n\
- mov r3, sp\n\
- adds r5, r3, r2\n\
- ldrb r0, [r5]\n\
- adds r3, r1, 0\n\
- cmp r0, 0xFF\n\
- bne _08072466\n\
- lsls r1, r2, 1\n\
- adds r1, r7\n\
- ldrh r2, [r1]\n\
- adds r0, r4, 0\n\
- ands r0, r2\n\
- orrs r0, r6\n\
- strh r0, [r1]\n\
- adds r1, 0x40\n\
- ldrh r2, [r1]\n\
- adds r0, r4, 0\n\
- ands r0, r2\n\
- orrs r0, r6\n\
- strh r0, [r1]\n\
- b _08072488\n\
-_08072466:\n\
- lsls r2, 1\n\
- adds r2, r7\n\
- ldrh r0, [r2]\n\
- adds r1, r4, 0\n\
- ands r1, r0\n\
- ldrb r0, [r5]\n\
- adds r0, 0x14\n\
- orrs r1, r0\n\
- strh r1, [r2]\n\
- adds r2, 0x40\n\
- ldrh r0, [r2]\n\
- adds r1, r4, 0\n\
- ands r1, r0\n\
- ldrb r0, [r5]\n\
- adds r0, 0x34\n\
- orrs r1, r0\n\
- strh r1, [r2]\n\
-_08072488:\n\
- movs r5, 0x80\n\
- lsls r5, 17\n\
- adds r0, r3, r5\n\
- lsrs r3, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3\n\
- ble _0807243A\n\
-_08072496:\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided");
-}
-
-#endif // NONMATCHING
void sub_80724A8(s16 arg0, s16 arg1, u16 *arg2)
{
@@ -910,9 +873,9 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
healthboxLeftSpriteId = CreateSprite(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1);
healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxPlayerSpriteTemplates[0], 240, 160, 1);
- gSprites[healthboxLeftSpriteId].oam.shape = 0;
+ gSprites[healthboxLeftSpriteId].oam.shape = ST_OAM_SQUARE;
- gSprites[healthboxRightSpriteId].oam.shape = 0;
+ gSprites[healthboxRightSpriteId].oam.shape = ST_OAM_SQUARE;
gSprites[healthboxRightSpriteId].oam.tileNum += 64;
}
else
@@ -962,7 +925,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
healthbarSpriteId = CreateSpriteAtEnd(&sHealthbarSpriteTemplates[gBattlerPositions[battlerId]], 140, 60, 0);
healthBarSpritePtr = &gSprites[healthbarSpriteId];
SetSubspriteTables(healthBarSpritePtr, &sUnknown_0832C28C[GetBattlerSide(battlerId)]);
- healthBarSpritePtr->subspriteMode = 2;
+ healthBarSpritePtr->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
healthBarSpritePtr->oam.priority = 1;
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void*)(OBJ_VRAM0 + healthBarSpritePtr->oam.tileNum * TILE_SIZE_4BPP), 64);
@@ -987,8 +950,8 @@ u8 CreateSafariPlayerHealthboxSprites(void)
healthboxLeftSpriteId = CreateSprite(&sHealthboxSafariSpriteTemplate, 240, 160, 1);
healthboxRightSpriteId = CreateSpriteAtEnd(&sHealthboxSafariSpriteTemplate, 240, 160, 1);
- gSprites[healthboxLeftSpriteId].oam.shape = 0;
- gSprites[healthboxRightSpriteId].oam.shape = 0;
+ gSprites[healthboxLeftSpriteId].oam.shape = ST_OAM_SQUARE;
+ gSprites[healthboxRightSpriteId].oam.shape = ST_OAM_SQUARE;
gSprites[healthboxRightSpriteId].oam.tileNum += 64;
@@ -1711,9 +1674,9 @@ void Task_HidePartyStatusSummary(u8 taskId)
gTasks[taskId].tData15 = 16;
for (i = 0; i < PARTY_SIZE; i++)
- gSprites[ballIconSpriteIds[i]].oam.objMode = 1;
+ gSprites[ballIconSpriteIds[i]].oam.objMode = ST_OAM_OBJ_BLEND;
- gSprites[summaryBarSpriteId].oam.objMode = 1;
+ gSprites[summaryBarSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
if (isBattleStart)
{
diff --git a/src/battle_main.c b/src/battle_main.c
index 87e29dd57..bcef3b286 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"),
@@ -686,7 +687,7 @@ static void CB2_InitBattleInternal(void)
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
gBattleTerrain = BATTLE_TERRAIN_BUILDING;
- sub_80356D0();
+ InitBattleBgsVideo();
LoadBattleTextboxAndBackground();
ResetSpriteData();
ResetTasks();
@@ -714,7 +715,7 @@ static void CB2_InitBattleInternal(void)
}
gMain.inBattle = TRUE;
- gSaveBlock2Ptr->frontier.field_CA9_b = 0;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = FALSE;
for (i = 0; i < PARTY_SIZE; i++)
AdjustFriendship(&gPlayerParty[i], 3);
@@ -1023,7 +1024,7 @@ static void CB2_HandleStartBattle(void)
ResetBlockReceivedFlags();
sub_8036EB8(2, playerMultiplayerId);
SetAllPlayersBerryData();
- taskId = CreateTask(sub_8035D74, 0);
+ taskId = CreateTask(InitLinkBattleVsScreen, 0);
gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 0;
@@ -1225,7 +1226,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
ResetBlockReceivedFlags();
sub_8036EB8(2, playerMultiplayerId);
SetAllPlayersBerryData();
- taskId = CreateTask(sub_8035D74, 0);
+ taskId = CreateTask(InitLinkBattleVsScreen, 0);
gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 0;
@@ -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;
}
@@ -1611,7 +1612,7 @@ static void CB2_HandleStartMultiBattle(void)
sub_8036EB8(4, playerMultiplayerId);
SetAllPlayersBerryData();
SetDeoxysStats();
- var = CreateTask(sub_8035D74, 0);
+ var = CreateTask(InitLinkBattleVsScreen, 0);
gTasks[var].data[1] = 0x10E;
gTasks[var].data[2] = 0x5A;
gTasks[var].data[5] = 0;
@@ -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;
}
}
@@ -1790,9 +1791,9 @@ static void CB2_HandleStartMultiBattle(void)
gBattleCommunication[SPRITES_INIT_STATE2] = 0;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- for (id = 0; id < 4 && (gLinkPlayers[id].version & 0xFF) == 3; id++);
+ for (id = 0; id < MAX_LINK_PLAYERS && (gLinkPlayers[id].version & 0xFF) == VERSION_EMERALD; id++);
- if (id == 4)
+ if (id == MAX_LINK_PLAYERS)
gBattleCommunication[MULTIUSE_STATE] = 8;
else
gBattleCommunication[MULTIUSE_STATE] = 10;
@@ -2249,7 +2250,7 @@ void sub_8038D64(void)
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
- sub_80356D0();
+ InitBattleBgsVideo();
LoadCompressedPalette(gBattleTextboxPalette, 0, 64);
LoadBattleMenuWindowGfx();
ResetSpriteData();
@@ -2260,7 +2261,7 @@ void sub_8038D64(void)
gReservedSpritePaletteCount = 4;
SetVBlankCallback(VBlankCB_Battle);
- taskId = CreateTask(sub_8035D74, 0);
+ taskId = CreateTask(InitLinkBattleVsScreen, 0);
gTasks[taskId].data[1] = 0x10E;
gTasks[taskId].data[2] = 0x5A;
gTasks[taskId].data[5] = 1;
@@ -2314,7 +2315,7 @@ static void sub_8038F34(void)
for (i = 0; i < monsCount && (gLinkPlayers[i].version & 0xFF) == VERSION_EMERALD; i++);
- if (!gSaveBlock2Ptr->frontier.field_CA9_b && i == monsCount)
+ if (!gSaveBlock2Ptr->frontier.disableRecordBattle && i == monsCount)
{
if (FlagGet(FLAG_SYS_FRONTIER_PASS))
{
@@ -2445,7 +2446,7 @@ static void sub_80392A8(void)
gBattle_BG2_Y = 0;
gBattle_BG3_X = 0;
gBattle_BG3_Y = 0;
- sub_80356D0();
+ InitBattleBgsVideo();
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
LoadBattleMenuWindowGfx();
@@ -2593,7 +2594,7 @@ static void sub_803939C(void)
}
else
{
- BattleStringExpandPlaceholdersToDisplayedString(gText_BattleRecordCouldntBeSaved);
+ BattleStringExpandPlaceholdersToDisplayedString(BattleFrontier_BattleTowerBattleRoom_Text_RecordCouldntBeSaved);
BattlePutTextOnWindow(gDisplayedStringBattle, 0);
gBattleCommunication[1] = 0x80;
gBattleCommunication[MULTIUSE_STATE]++;
@@ -3953,7 +3954,7 @@ static void TryDoEventsBeforeFirstTurn(void)
*(&gBattleStruct->turnEffectsBattlerId) = 0;
*(&gBattleStruct->wishPerishSongState) = 0;
*(&gBattleStruct->wishPerishSongBattlerId) = 0;
- gBattleScripting.atk49_state = 0;
+ gBattleScripting.moveendState = 0;
gBattleStruct->faintedActionsState = 0;
gBattleStruct->turnCountersTracker = 0;
gMoveResultFlags = 0;
@@ -4016,7 +4017,7 @@ void BattleTurnPassed(void)
gHitMarker &= ~(HITMARKER_x100000);
gBattleScripting.animTurn = 0;
gBattleScripting.animTargetsHit = 0;
- gBattleScripting.atk49_state = 0;
+ gBattleScripting.moveendState = 0;
gBattleMoveDamage = 0;
gMoveResultFlags = 0;
@@ -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];
}
}
}
@@ -4244,7 +4245,7 @@ static void HandleTurnActionSelectionState(void)
moveInfo.monType1 = gBattleMons[gActiveBattler].type1;
moveInfo.monType2 = gBattleMons[gActiveBattler].type2;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
moveInfo.moves[i] = gBattleMons[gActiveBattler].moves[i];
moveInfo.currentPp[i] = gBattleMons[gActiveBattler].pp[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));
}
}
}
@@ -5069,7 +5070,7 @@ static void HandleEndTurn_BattleLost(void)
{
gBattlescriptCurrInstr = BattleScript_PrintPlayerForfeitedLinkBattle;
gBattleOutcome &= ~(B_OUTCOME_LINK_BATTLE_RAN);
- gSaveBlock2Ptr->frontier.field_CA9_b = 1;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE;
}
else
{
@@ -5101,7 +5102,7 @@ static void HandleEndTurn_RanFromBattle(void)
{
gBattlescriptCurrInstr = BattleScript_PrintPlayerForfeited;
gBattleOutcome = B_OUTCOME_FORFEITED;
- gSaveBlock2Ptr->frontier.field_CA9_b = 1;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE;
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
@@ -5720,7 +5721,7 @@ static void HandleAction_Run(void)
}
gBattleOutcome |= B_OUTCOME_LINK_BATTLE_RAN;
- gSaveBlock2Ptr->frontier.field_CA9_b = 1;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE;
}
else
{
@@ -5884,7 +5885,7 @@ static void HandleAction_ActionFinished(void)
gLastHitByType[gBattlerAttacker] = 0;
gBattleStruct->dynamicMoveType = 0;
gDynamicBasePower = 0;
- gBattleScripting.atk49_state = 0;
+ gBattleScripting.moveendState = 0;
gBattleCommunication[3] = 0;
gBattleCommunication[4] = 0;
gBattleScripting.multihitMoveEffect = 0;
diff --git a/src/battle_message.c b/src/battle_message.c
index 3fec571f4..f60527d7a 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -20,9 +20,11 @@
#include "trainer_hill.h"
#include "window.h"
#include "constants/battle_string_ids.h"
+#include "constants/frontier_util.h"
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/trainers.h"
+#include "constants/trainer_hill.h"
struct BattleWindowText
{
@@ -874,8 +876,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,
};
@@ -1193,7 +1195,7 @@ const u8 gText_Love[] = _("love");
const u8 gText_SpaceAndSpace[] = _(" and ");
const u8 gText_CommaSpace[] = _(", ");
const u8 gText_Space2[] = _(" ");
-const u8 gText_ScrollTextUp[] = _("\l");
+const u8 gText_LineBreak[] = _("\l");
const u8 gText_NewLine[] = _("\n");
const u8 gText_Are[] = _("are");
const u8 gText_Are2[] = _("are");
@@ -2573,7 +2575,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
- CopyTrainerHillTrainerText(4, gTrainerBattleOpponent_A);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_WON, gTrainerBattleOpponent_A);
toCpy = gStringVar4;
}
else
@@ -2589,7 +2591,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
- CopyTrainerHillTrainerText(3, gTrainerBattleOpponent_A);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_LOST, gTrainerBattleOpponent_A);
toCpy = gStringVar4;
}
break;
@@ -2670,7 +2672,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
- CopyTrainerHillTrainerText(4, gTrainerBattleOpponent_B);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_WON, gTrainerBattleOpponent_B);
toCpy = gStringVar4;
}
else
@@ -2686,7 +2688,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
}
else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL)
{
- CopyTrainerHillTrainerText(3, gTrainerBattleOpponent_B);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_PLAYER_LOST, gTrainerBattleOpponent_B);
toCpy = gStringVar4;
}
break;
@@ -2759,7 +2761,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_palace.c b/src/battle_palace.c
index fb8cc0729..633666254 100644
--- a/src/battle_palace.c
+++ b/src/battle_palace.c
@@ -8,47 +8,71 @@
#include "item.h"
#include "string_util.h"
#include "constants/items.h"
+#include "constants/battle_frontier.h"
+#include "constants/battle_palace.h"
+#include "constants/frontier_util.h"
+#include "constants/trainers.h"
// This file's functions.
-static void sub_8195980(void);
-static void sub_8195A38(void);
-static void sub_8195AE4(void);
-static void sub_8195BB0(void);
-static void sub_8195C20(void);
-static void sub_8195C50(void);
-static void sub_8195C7C(void);
-static void sub_8195CE4(void);
-static void sub_8195D28(void);
-static void sub_8195DB8(void);
+static void InitPalaceChallenge(void);
+static void GetPalaceData(void);
+static void SetPalaceData(void);
+static void GetPalaceCommentId(void);
+static void SetPalaceOpponent(void);
+static void BufferOpponentIntroSpeech(void);
+static void IncrementPalaceStreak(void);
+static void SavePalaceChallenge(void);
+static void SetRandomPalacePrize(void);
+static void GivePalacePrize(void);
// Const rom data.
static void (* const sBattlePalaceFunctions[])(void) =
{
- sub_8195980,
- sub_8195A38,
- sub_8195AE4,
- sub_8195BB0,
- sub_8195C20,
- sub_8195C50,
- sub_8195C7C,
- sub_8195CE4,
- sub_8195D28,
- sub_8195DB8,
+ [BATTLE_PALACE_FUNC_INIT] = InitPalaceChallenge,
+ [BATTLE_PALACE_FUNC_GET_DATA] = GetPalaceData,
+ [BATTLE_PALACE_FUNC_SET_DATA] = SetPalaceData,
+ [BATTLE_PALACE_FUNC_GET_COMMENT_ID] = GetPalaceCommentId,
+ [BATTLE_PALACE_FUNC_SET_OPPONENT] = SetPalaceOpponent,
+ [BATTLE_PALACE_FUNC_GET_OPPONENT_INTRO] = BufferOpponentIntroSpeech,
+ [BATTLE_PALACE_FUNC_INCREMENT_STREAK] = IncrementPalaceStreak,
+ [BATTLE_PALACE_FUNC_SAVE] = SavePalaceChallenge,
+ [BATTLE_PALACE_FUNC_SET_PRIZE] = SetRandomPalacePrize,
+ [BATTLE_PALACE_FUNC_GIVE_PRIZE] = GivePalacePrize,
};
-static const u16 gUnknown_0860DE78[] = {ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, ITEM_CALCIUM, ITEM_CARBOS, ITEM_ZINC};
-static const u16 gUnknown_0860DE84[] = {ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, ITEM_LEFTOVERS, ITEM_MENTAL_HERB, ITEM_KINGS_ROCK, ITEM_FOCUS_BAND, ITEM_SCOPE_LENS, ITEM_CHOICE_BAND};
+static const u16 sBattlePalaceEarlyPrizes[] =
+{
+ ITEM_HP_UP,
+ ITEM_PROTEIN,
+ ITEM_IRON,
+ ITEM_CALCIUM,
+ ITEM_CARBOS,
+ ITEM_ZINC
+};
+
+static const u16 sBattlePalaceLatePrizes[] =
+{
+ ITEM_BRIGHT_POWDER,
+ ITEM_WHITE_HERB,
+ ITEM_QUICK_CLAW,
+ ITEM_LEFTOVERS,
+ ITEM_MENTAL_HERB,
+ ITEM_KINGS_ROCK,
+ ITEM_FOCUS_BAND,
+ ITEM_SCOPE_LENS,
+ ITEM_CHOICE_BAND
+};
-static const u32 gUnknown_0860DE98[][2] =
+static const u32 sWinStreakFlags[][2] =
{
- {0x10, 0x20},
- {0x400000, 0x800000},
+ {STREAK_PALACE_SINGLES_50, STREAK_PALACE_SINGLES_OPEN},
+ {STREAK_PALACE_DOUBLES_50, STREAK_PALACE_DOUBLES_OPEN},
};
-static const u32 gUnknown_0860DEA8[][2] =
+static const u32 sWinStreakMasks[][2] =
{
- {~0x10, ~0x20},
- {~0x400000, ~0x800000},
+ {~(STREAK_PALACE_SINGLES_50), ~(STREAK_PALACE_SINGLES_OPEN)},
+ {~(STREAK_PALACE_DOUBLES_50), ~(STREAK_PALACE_DOUBLES_OPEN)},
};
// code
@@ -57,64 +81,64 @@ void CallBattlePalaceFunction(void)
sBattlePalaceFunctions[gSpecialVar_0x8004]();
}
-static void sub_8195980(void)
+static void InitPalaceChallenge(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = 0;
- gSaveBlock2Ptr->frontier.field_CA9_b = 0;
- if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]))
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = FALSE;
+ if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0;
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
gTrainerBattleOpponent_A = 0;
}
-static void sub_8195A38(void)
+static void GetPalaceData(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005)
{
- case 0:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC6;
+ case PALACE_DATA_PRIZE:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.palacePrize;
break;
- case 1:
+ case PALACE_DATA_WIN_STREAK:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
break;
- case 2:
- gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0);
+ case PALACE_DATA_WIN_STREAK_ACTIVE:
+ gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0);
break;
}
}
-static void sub_8195AE4(void)
+static void SetPalaceData(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
switch (gSpecialVar_0x8005)
{
- case 0:
- gSaveBlock2Ptr->frontier.field_DC6 = gSpecialVar_0x8006;
+ case PALACE_DATA_PRIZE:
+ gSaveBlock2Ptr->frontier.palacePrize = gSpecialVar_0x8006;
break;
- case 1:
+ case PALACE_DATA_WIN_STREAK:
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
- case 2:
+ case PALACE_DATA_WIN_STREAK_ACTIVE:
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode];
else
- gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode];
break;
}
}
-static void sub_8195BB0(void)
+static void GetPalaceCommentId(void)
{
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -127,24 +151,24 @@ static void sub_8195BB0(void)
gSpecialVar_Result = 4;
}
-static void sub_8195C20(void)
+static void SetPalaceOpponent(void)
{
gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u;
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
}
-static void sub_8195C50(void)
+static void BufferOpponentIntroSpeech(void)
{
- if (gTrainerBattleOpponent_A < 300)
+ if (gTrainerBattleOpponent_A < FRONTIER_TRAINERS_COUNT)
FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
}
-static void sub_8195C7C(void)
+static void IncrementPalaceStreak(void)
{
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < MAX_STREAK)
{
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++;
@@ -154,31 +178,31 @@ static void sub_8195C7C(void)
}
}
-static void sub_8195CE4(void)
+static void SavePalaceChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = 1;
- sub_81A4C30();
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
+ SaveGameFrontier();
}
-static void sub_8195D28(void)
+static void SetRandomPalacePrize(void)
{
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 41)
- gSaveBlock2Ptr->frontier.field_DC6 = gUnknown_0860DE84[Random() % ARRAY_COUNT(gUnknown_0860DE84)];
+ gSaveBlock2Ptr->frontier.palacePrize = sBattlePalaceLatePrizes[Random() % ARRAY_COUNT(sBattlePalaceLatePrizes)];
else
- gSaveBlock2Ptr->frontier.field_DC6 = gUnknown_0860DE78[Random() % ARRAY_COUNT(gUnknown_0860DE78)];
+ gSaveBlock2Ptr->frontier.palacePrize = sBattlePalaceEarlyPrizes[Random() % ARRAY_COUNT(sBattlePalaceEarlyPrizes)];
}
-static void sub_8195DB8(void)
+static void GivePalacePrize(void)
{
- if (AddBagItem(gSaveBlock2Ptr->frontier.field_DC6, 1) == TRUE)
+ if (AddBagItem(gSaveBlock2Ptr->frontier.palacePrize, 1) == TRUE)
{
- CopyItemName(gSaveBlock2Ptr->frontier.field_DC6, gStringVar1);
- gSaveBlock2Ptr->frontier.field_DC6 = 0;
+ CopyItemName(gSaveBlock2Ptr->frontier.palacePrize, gStringVar1);
+ gSaveBlock2Ptr->frontier.palacePrize = 0;
gSpecialVar_Result = TRUE;
}
else
diff --git a/src/battle_pike.c b/src/battle_pike.c
index 8846e2d1a..1c05d12cf 100644
--- a/src/battle_pike.c
+++ b/src/battle_pike.c
@@ -9,12 +9,13 @@
#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"
#include "constants/event_objects.h"
#include "constants/battle_frontier.h"
+#include "constants/frontier_util.h"
#include "constants/abilities.h"
#include "constants/easy_chat.h"
#include "constants/layouts.h"
@@ -22,20 +23,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
{
@@ -49,13 +38,13 @@ struct PikeWildMon
{
u16 species;
u8 levelDelta;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
};
// IWRAM bss
static u8 sRoomType;
static u8 sStatusMon;
-static bool8 sUnknown_0300128E;
+static bool8 sInWildMonRoom;
static u32 sStatusFlags;
static u8 sNpcId;
@@ -63,30 +52,30 @@ static u8 sNpcId;
static void SetRoomType(void);
static void GetBattlePikeData(void);
static void SetBattlePikeData(void);
-static void GetInFinalRoom(void);
+static void IsNextRoomFinal(void);
static void SetupRoomEventObjects(void);
static void GetRoomType(void);
-static void sub_81A7400(void);
-static void sub_81A740C(void);
-static void sub_81A7418(void);
+static void SetInWildMonRoom(void);
+static void ClearInWildMonRoom(void);
+static void SavePikeChallenge(void);
static void nullsub_76(void);
static void nullsub_124(void);
static void GetRoomInflictedStatus(void);
static void GetRoomInflictedStatusMon(void);
static void HealOneOrTwoMons(void);
static void BufferNPCMessage(void);
-static void StatusInflictionScreenFade(void);
+static void StatusInflictionScreenFlash(void);
static void GetInBattlePike(void);
static void SetHintedRoom(void);
static void GetHintedRoomIndex(void);
static void GetRoomTypeHint(void);
static void ClearPikeTrainerIds(void);
-static void BufferRecordMixingTrainerMessage(void);
+static void BufferTrainerIntro(void);
static void GetCurrentRoomPikeQueenFightType(void);
static void HealSomeMonsBeforePikeQueen(void);
-static void SetHealingRoomsDisabled(void);
-static void CanAnyPartyMonsBeHealed(void);
-static void BackupMonHeldItems(void);
+static void SetHealingroomTypesDisabled(void);
+static void IsPartyFullHealed(void);
+static void SaveMonHeldItems(void);
static void RestoreMonHeldItems(void);
static void InitPikeChallenge(void);
static u8 GetNextRoomType(void);
@@ -94,7 +83,7 @@ static void PrepareOneTrainer(bool8 difficult);
static u16 GetNPCRoomGraphicsId(void);
static void PrepareTwoTrainers(void);
static void TryHealMons(u8 healCount);
-static void Task_DoStatusInflictionScreenFade(u8 taskId);
+static void Task_DoStatusInflictionScreenFlash(u8 taskId);
static bool8 AtLeastTwoAliveMons(void);
static u8 SpeciesToPikeMonId(u16 species);
static bool8 CanEncounterWildMon(u8 monLevel);
@@ -431,7 +420,7 @@ static const struct PikeRoomNPC sNPCTable[] =
}
};
-static const u16 sNPCSpeeches[][6] =
+static const u16 sNPCSpeeches[][EASY_CHAT_BATTLE_WORDS_COUNT] =
{
{EC_WORD_I_AM, EC_WORD_LOST, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND)},
{EC_WORD_I_VE, EC_WORD_NO, EC_WORD_SENSE, EC_WORD_OF, EC_WORD_WHERE, EC_WORD_I_AM},
@@ -477,61 +466,61 @@ static const u16 sNPCSpeeches[][6] =
{EC_MOVE2(TOXIC), EC_WORD_IS, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_THING, EC_WORD_ISN_T_IT_QUES},
};
-// Only the 5th array in this data is used by the code.
-static const u8 sPikeQueenWinStreakAppearances[][4] =
+// Table duplicated from frontier_util, only Battle Pike entry used
+static const u8 sFrontierBrainStreakAppearances[NUM_FRONTIER_FACILITIES][4] =
{
- {35, 70, 35, 1},
- { 4, 9, 5, 0},
- {21, 42, 21, 1},
- {28, 56, 28, 1},
- {21, 42, 21, 1},
- {28, 140, 56, 1},
- {21, 70, 35, 0},
+ [FRONTIER_FACILITY_TOWER] = {35, 70, 35, 1},
+ [FRONTIER_FACILITY_DOME] = { 4, 9, 5, 0},
+ [FRONTIER_FACILITY_PALACE] = {21, 42, 21, 1},
+ [FRONTIER_FACILITY_ARENA] = {28, 56, 28, 1},
+ [FRONTIER_FACILITY_FACTORY] = {21, 42, 21, 1},
+ [FRONTIER_FACILITY_PIKE] = {28, 140, 56, 1},
+ [FRONTIER_FACILITY_PYRAMID] = {21, 70, 35, 0},
};
static void (* const sBattlePikeFunctions[])(void) =
{
- SetRoomType,
- GetBattlePikeData,
- SetBattlePikeData,
- GetInFinalRoom,
- SetupRoomEventObjects,
- GetRoomType,
- sub_81A7400,
- sub_81A740C,
- sub_81A7418,
- nullsub_76,
- nullsub_124,
- GetRoomInflictedStatus,
- GetRoomInflictedStatusMon,
- HealOneOrTwoMons,
- BufferNPCMessage,
- StatusInflictionScreenFade,
- GetInBattlePike,
- SetHintedRoom,
- GetHintedRoomIndex,
- GetRoomTypeHint,
- ClearPikeTrainerIds,
- BufferRecordMixingTrainerMessage,
- GetCurrentRoomPikeQueenFightType,
- HealSomeMonsBeforePikeQueen,
- SetHealingRoomsDisabled,
- CanAnyPartyMonsBeHealed,
- BackupMonHeldItems,
- RestoreMonHeldItems,
- InitPikeChallenge
+ [BATTLE_PIKE_FUNC_SET_ROOM_TYPE] = SetRoomType,
+ [BATTLE_PIKE_FUNC_GET_DATA] = GetBattlePikeData,
+ [BATTLE_PIKE_FUNC_SET_DATA] = SetBattlePikeData,
+ [BATTLE_PIKE_FUNC_IS_FINAL_ROOM] = IsNextRoomFinal,
+ [BATTLE_PIKE_FUNC_SET_ROOM_OBJECTS] = SetupRoomEventObjects,
+ [BATTLE_PIKE_FUNC_GET_ROOM_TYPE] = GetRoomType,
+ [BATTLE_PIKE_FUNC_SET_IN_WILD_MON_ROOM] = SetInWildMonRoom,
+ [BATTLE_PIKE_FUNC_CLEAR_IN_WILD_MON_ROOM] = ClearInWildMonRoom,
+ [BATTLE_PIKE_FUNC_SAVE] = SavePikeChallenge,
+ [BATTLE_PIKE_FUNC_NULL_9] = nullsub_76,
+ [BATTLE_PIKE_FUNC_NULL_10] = nullsub_124,
+ [BATTLE_PIKE_FUNC_GET_ROOM_STATUS] = GetRoomInflictedStatus,
+ [BATTLE_PIKE_FUNC_GET_ROOM_STATUS_MON] = GetRoomInflictedStatusMon,
+ [BATTLE_PIKE_FUNC_HEAL_ONE_TWO_MONS] = HealOneOrTwoMons,
+ [BATTLE_PIKE_FUNC_BUFFER_NPC_MSG] = BufferNPCMessage,
+ [BATTLE_PIKE_FUNC_STATUS_SCREEN_FLASH] = StatusInflictionScreenFlash,
+ [BATTLE_PIKE_FUNC_IS_IN] = GetInBattlePike,
+ [BATTLE_PIKE_FUNC_SET_HINT_ROOM] = SetHintedRoom,
+ [BATTLE_PIKE_FUNC_GET_HINT_ROOM_ID] = GetHintedRoomIndex,
+ [BATTLE_PIKE_FUNC_GET_ROOM_TYPE_HINT] = GetRoomTypeHint,
+ [BATTLE_PIKE_FUNC_CLEAR_TRAINER_IDS] = ClearPikeTrainerIds,
+ [BATTLE_PIKE_FUNC_GET_TRAINER_INTRO] = BufferTrainerIntro,
+ [BATTLE_PIKE_FUNC_GET_QUEEN_FIGHT_TYPE] = GetCurrentRoomPikeQueenFightType,
+ [BATTLE_PIKE_FUNC_HEAL_MONS_BEFORE_QUEEN] = HealSomeMonsBeforePikeQueen,
+ [BATTLE_PIKE_FUNC_SET_HEAL_ROOMS_DISABLED] = SetHealingroomTypesDisabled,
+ [BATTLE_PIKE_FUNC_IS_PARTY_FULL_HEALTH] = IsPartyFullHealed,
+ [BATTLE_PIKE_FUNC_SAVE_HELD_ITEMS] = SaveMonHeldItems,
+ [BATTLE_PIKE_FUNC_RESET_HELD_ITEMS] = RestoreMonHeldItems,
+ [BATTLE_PIKE_FUNC_INIT] = InitPikeChallenge
};
static const u8 sRoomTypeHints[] = {
- 3, // PIKE_ROOM_SINGLE_BATTLE
- 3, // PIKE_ROOM_HEAL_FULL
- 1, // PIKE_ROOM_NPC
- 0, // PIKE_ROOM_STATUS
- 0, // PIKE_ROOM_HEAL_PART
- 2, // PIKE_ROOM_WILD_MONS
- 2, // PIKE_ROOM_HARD_BATTLE
- 1, // PIKE_ROOM_DOUBLE_BATTLE
- 4, // PIKE_ROOM_BRAIN
+ PIKE_HINT_PEOPLE, // PIKE_ROOM_SINGLE_BATTLE
+ PIKE_HINT_PEOPLE, // PIKE_ROOM_HEAL_FULL
+ PIKE_HINT_WHISPERING, // PIKE_ROOM_NPC
+ PIKE_HINT_NOSTALGIA, // PIKE_ROOM_STATUS
+ PIKE_HINT_NOSTALGIA, // PIKE_ROOM_HEAL_PART
+ PIKE_HINT_POKEMON, // PIKE_ROOM_WILD_MONS
+ PIKE_HINT_POKEMON, // PIKE_ROOM_HARD_BATTLE
+ PIKE_HINT_WHISPERING, // PIKE_ROOM_DOUBLE_BATTLE
+ PIKE_HINT_BRAIN, // PIKE_ROOM_BRAIN
};
static const u8 sNumMonsToHealBeforePikeQueen[][3] =
@@ -544,12 +533,12 @@ static const u8 sNumMonsToHealBeforePikeQueen[][3] =
{0, 1, 2},
};
-static bool8 (* const sStatusInflictionScreenFadeFuncs[])(struct Task *) =
+static bool8 (* const sStatusInflictionScreenFlashFuncs[])(struct Task *) =
{
StatusInflictionFadeOut, StatusInflictionFadeIn
};
-static const u32 gUnknown_08612690[] = {0x400, 0x800};
+static const u32 sWinStreakFlags[] = {STREAK_PIKE_50, STREAK_PIKE_OPEN};
// code
void CallBattlePikeFunction(void)
@@ -590,7 +579,7 @@ static void SetupRoomEventObjects(void)
break;
case PIKE_ROOM_STATUS:
objGfx1 = EVENT_OBJ_GFX_GENTLEMAN;
- if (sStatusMon == PIKE_STATUS_DUSCLOPS)
+ if (sStatusMon == PIKE_STATUSMON_DUSCLOPS)
objGfx2 = EVENT_OBJ_GFX_DUSCLOPS;
else
objGfx2 = EVENT_OBJ_GFX_KIRLIA;
@@ -634,23 +623,23 @@ static void GetBattlePikeData(void)
switch (gSpecialVar_0x8005)
{
- case 0:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_E02;
+ case PIKE_DATA_PRIZE:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikePrize;
break;
- case 1:
+ case PIKE_DATA_WIN_STREAK:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikeWinStreaks[gSaveBlock2Ptr->frontier.lvlMode];
break;
- case 2:
+ case PIKE_DATA_RECORD_STREAK:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode];
break;
- case 3:
+ case PIKE_DATA_TOTAL_STREAKS:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikeTotalStreaks[gSaveBlock2Ptr->frontier.lvlMode];
break;
- case 4:
+ case PIKE_DATA_WIN_STREAK_ACTIVE:
if (lvlMode != FRONTIER_LVL_50)
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x800;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PIKE_OPEN;
else
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x400;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PIKE_50;
break;
}
}
@@ -661,41 +650,41 @@ static void SetBattlePikeData(void)
switch (gSpecialVar_0x8005)
{
- case 0:
- gSaveBlock2Ptr->frontier.field_E02 = gSpecialVar_0x8006;
+ case PIKE_DATA_PRIZE:
+ gSaveBlock2Ptr->frontier.pikePrize = gSpecialVar_0x8006;
break;
- case 1:
- if (gSpecialVar_0x8006 <= 9999)
+ case PIKE_DATA_WIN_STREAK:
+ if (gSpecialVar_0x8006 <= MAX_STREAK)
gSaveBlock2Ptr->frontier.pikeWinStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006;
break;
- case 2:
- if (gSpecialVar_0x8006 <= 9999 && gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] < gSpecialVar_0x8006)
+ case PIKE_DATA_RECORD_STREAK:
+ if (gSpecialVar_0x8006 <= MAX_STREAK && gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] < gSpecialVar_0x8006)
gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006;
break;
- case 3:
- if (gSpecialVar_0x8006 <= 9999)
+ case PIKE_DATA_TOTAL_STREAKS:
+ if (gSpecialVar_0x8006 <= MAX_STREAK)
gSaveBlock2Ptr->frontier.pikeTotalStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006;
break;
- case 4:
+ case PIKE_DATA_WIN_STREAK_ACTIVE:
if (lvlMode != FRONTIER_LVL_50)
{
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= 0x800;
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PIKE_OPEN;
else
- gSaveBlock2Ptr->frontier.field_CDC &= ~(0x800);
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PIKE_OPEN);
}
else
{
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= 0x400;
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PIKE_50;
else
- gSaveBlock2Ptr->frontier.field_CDC &= ~(0x400);
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PIKE_50);
}
break;
}
}
-static void GetInFinalRoom(void)
+static void IsNextRoomFinal(void)
{
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum > 14)
gSpecialVar_Result = TRUE;
@@ -708,21 +697,21 @@ static void GetRoomType(void)
gSpecialVar_Result = sRoomType;
}
-static void sub_81A7400(void)
+static void SetInWildMonRoom(void)
{
- sUnknown_0300128E = TRUE;
+ sInWildMonRoom = TRUE;
}
-static void sub_81A740C(void)
+static void ClearInWildMonRoom(void)
{
- sUnknown_0300128E = FALSE;
+ sInWildMonRoom = FALSE;
}
-static void sub_81A7418(void)
+static void SavePikeChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = 1;
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
save_serialize_map();
TrySavingData(SAVE_LINK);
}
@@ -742,19 +731,19 @@ static void GetRoomInflictedStatus(void)
switch (sStatusFlags)
{
case STATUS1_FREEZE:
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = PIKE_STATUS_FREEZE;
break;
case STATUS1_BURN:
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = PIKE_STATUS_BURN;
break;
case STATUS1_TOXIC_POISON:
- gSpecialVar_Result = 2;
+ gSpecialVar_Result = PIKE_STATUS_TOXIC;
break;
case STATUS1_PARALYSIS:
- gSpecialVar_Result = 3;
+ gSpecialVar_Result = PIKE_STATUS_PARALYSIS;
break;
case STATUS1_SLEEP:
- gSpecialVar_Result = 4;
+ gSpecialVar_Result = PIKE_STATUS_SLEEP;
break;
}
}
@@ -785,9 +774,9 @@ static void BufferNPCMessage(void)
FrontierSpeechToString(sNPCSpeeches[speechId]);
}
-static void StatusInflictionScreenFade(void)
+static void StatusInflictionScreenFlash(void)
{
- CreateTask(Task_DoStatusInflictionScreenFade, 2);
+ CreateTask(Task_DoStatusInflictionScreenFlash, 2);
}
static void HealMon(struct Pokemon *mon)
@@ -935,7 +924,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++;
@@ -957,19 +946,19 @@ static bool8 TryInflictRandomStatus(void)
switch (sStatusFlags)
{
case STATUS1_FREEZE:
- sStatusMon = PIKE_STATUS_DUSCLOPS;
+ sStatusMon = PIKE_STATUSMON_DUSCLOPS;
break;
case STATUS1_BURN:
if (Random() % 2 != 0)
- sStatusMon = PIKE_STATUS_DUSCLOPS;
+ sStatusMon = PIKE_STATUSMON_DUSCLOPS;
else
- sStatusMon = PIKE_STATUS_KIRLIA;
+ sStatusMon = PIKE_STATUSMON_KIRLIA;
break;
case STATUS1_PARALYSIS:
case STATUS1_SLEEP:
case STATUS1_TOXIC_POISON:
default:
- sStatusMon = PIKE_STATUS_KIRLIA;
+ sStatusMon = PIKE_STATUSMON_KIRLIA;
break;
}
@@ -977,7 +966,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 +998,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++;
@@ -1026,10 +1015,10 @@ static bool8 AtLeastOneHealthyMon(void)
static u8 GetNextRoomType(void)
{
- u8 roomTypesAvailability[8];
+ bool8 roomTypesDisabled[NUM_PIKE_ROOM_TYPES - 1]; // excludes Brain room, which cant be disabled
u8 i;
u8 nextRoomType;
- u8 roomTypeGroup;
+ u8 roomHint;
u8 numRoomCandidates;
u8 *roomCandidates;
u8 id;
@@ -1045,54 +1034,54 @@ static u8 GetNextRoomType(void)
return gSaveBlock2Ptr->frontier.pikeHintedRoomType;
}
- for (i = 0; i < 8; i++)
- roomTypesAvailability[i] = 0;
+ for (i = 0; i < ARRAY_COUNT(roomTypesDisabled); i++)
+ roomTypesDisabled[i] = FALSE;
- numRoomCandidates = 8;
+ numRoomCandidates = NUM_PIKE_ROOM_TYPES - 1;
- // The room types associated with the lady's hint cannot be in the other two rooms.
- roomTypeGroup = sRoomTypeHints[gSaveBlock2Ptr->frontier.pikeHintedRoomType];
- for (i = 0; i < 8; i++)
+ // The other two room types cannot be the same type as the one associated with the lady's hint
+ roomHint = sRoomTypeHints[gSaveBlock2Ptr->frontier.pikeHintedRoomType];
+ for (i = 0; i < ARRAY_COUNT(roomTypesDisabled); i++)
{
- if (sRoomTypeHints[i] == roomTypeGroup)
+ if (sRoomTypeHints[i] == roomHint)
{
- roomTypesAvailability[i] = 1;
+ roomTypesDisabled[i] = TRUE;
numRoomCandidates--;
}
}
// Remove room type candidates that would have no effect on the player's party.
- if (roomTypesAvailability[PIKE_ROOM_DOUBLE_BATTLE] != 1 && !AtLeastTwoAliveMons())
+ if (roomTypesDisabled[PIKE_ROOM_DOUBLE_BATTLE] != TRUE && !AtLeastTwoAliveMons())
{
- roomTypesAvailability[PIKE_ROOM_DOUBLE_BATTLE] = 1;
+ roomTypesDisabled[PIKE_ROOM_DOUBLE_BATTLE] = TRUE;
numRoomCandidates--;
}
- if (roomTypesAvailability[PIKE_ROOM_STATUS] != 1 && !AtLeastOneHealthyMon())
+ if (roomTypesDisabled[PIKE_ROOM_STATUS] != TRUE && !AtLeastOneHealthyMon())
{
- roomTypesAvailability[PIKE_ROOM_STATUS] = 1;
+ roomTypesDisabled[PIKE_ROOM_STATUS] = TRUE;
numRoomCandidates--;
}
// Remove healing room type candidates if healing rooms are disabled.
if (gSaveBlock2Ptr->frontier.pikeHealingRoomsDisabled)
{
- if (roomTypesAvailability[PIKE_ROOM_HEAL_FULL] != 1)
+ if (roomTypesDisabled[PIKE_ROOM_HEAL_FULL] != TRUE)
{
- roomTypesAvailability[PIKE_ROOM_HEAL_FULL] = 1;
+ roomTypesDisabled[PIKE_ROOM_HEAL_FULL] = TRUE;
numRoomCandidates--;
}
- if (roomTypesAvailability[PIKE_ROOM_HEAL_PART] != 1)
+ if (roomTypesDisabled[PIKE_ROOM_HEAL_PART] != TRUE)
{
- roomTypesAvailability[PIKE_ROOM_HEAL_PART] = 1;
+ roomTypesDisabled[PIKE_ROOM_HEAL_PART] = TRUE;
numRoomCandidates--;
}
}
roomCandidates = AllocZeroed(numRoomCandidates);
id = 0;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(roomTypesDisabled); i++)
{
- if (roomTypesAvailability[i] == 0)
+ if (roomTypesDisabled[i] == FALSE)
roomCandidates[id++] = i;
}
@@ -1110,9 +1099,10 @@ static u16 GetNPCRoomGraphicsId(void)
return sNPCTable[sNpcId].graphicsId;
}
-static u8 sub_81A7B84(void)
+// Unused
+static u8 GetInWildMonRoom(void)
{
- return sUnknown_0300128E;
+ return sInWildMonRoom;
}
bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate)
@@ -1182,9 +1172,9 @@ u8 GetBattlePikeWildMonHeaderId(void)
return headerId;
}
-static void DoStatusInflictionScreenFade(u8 taskId)
+static void DoStatusInflictionScreenFlash(u8 taskId)
{
- while (sStatusInflictionScreenFadeFuncs[gTasks[taskId].data[0]](&gTasks[taskId]));
+ while (sStatusInflictionScreenFlashFuncs[gTasks[taskId].data[0]](&gTasks[taskId]));
}
static bool8 StatusInflictionFadeOut(struct Task *task)
@@ -1221,7 +1211,7 @@ static bool8 StatusInflictionFadeIn(struct Task *task)
{
if (--task->data[3] == 0)
{
- DestroyTask(FindTaskIdByFunc(DoStatusInflictionScreenFade));
+ DestroyTask(FindTaskIdByFunc(DoStatusInflictionScreenFlash));
}
else
{
@@ -1232,9 +1222,9 @@ static bool8 StatusInflictionFadeIn(struct Task *task)
return FALSE;
}
-static void StartStatusInflictionScreenFade(s16 fadeOutDelay, s16 fadeInDelay, s16 numFades, s16 fadeOutSpeed, s16 fadeInSpped)
+static void StartStatusInflictionScreenFlash(s16 fadeOutDelay, s16 fadeInDelay, s16 numFades, s16 fadeOutSpeed, s16 fadeInSpped)
{
- u8 taskId = CreateTask(DoStatusInflictionScreenFade, 3);
+ u8 taskId = CreateTask(DoStatusInflictionScreenFlash, 3);
gTasks[taskId].data[1] = fadeOutDelay;
gTasks[taskId].data[2] = fadeInDelay;
@@ -1244,24 +1234,24 @@ static void StartStatusInflictionScreenFade(s16 fadeOutDelay, s16 fadeInDelay, s
gTasks[taskId].data[6] = fadeOutDelay;
}
-static bool8 IsStatusInflictionScreenFadeTaskFinished(void)
+static bool8 IsStatusInflictionScreenFlashTaskFinished(void)
{
- if (FindTaskIdByFunc(DoStatusInflictionScreenFade) == 0xFF)
+ if (FindTaskIdByFunc(DoStatusInflictionScreenFlash) == 0xFF)
return TRUE;
else
return FALSE;
}
-static void Task_DoStatusInflictionScreenFade(u8 taskId)
+static void Task_DoStatusInflictionScreenFlash(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
gTasks[taskId].data[0]++;
- StartStatusInflictionScreenFade(0, 0, 3, 2, 2);
+ StartStatusInflictionScreenFlash(0, 0, 3, 2, 2);
}
else
{
- if (IsStatusInflictionScreenFadeTaskFinished())
+ if (IsStatusInflictionScreenFlashTaskFinished())
{
EnableBothScriptContexts();
DestroyTask(taskId);
@@ -1298,7 +1288,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;
}
@@ -1335,8 +1325,8 @@ static void GetInBattlePike(void)
bool8 InBattlePike(void)
{
return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM
- || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1
- || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3
+ || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL
+ || gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS
|| gMapHeader.mapLayoutId == LAYOUT_UNKNOWN_084693AC;
}
@@ -1345,10 +1335,10 @@ static void SetHintedRoom(void)
u8 i, count, id;
u8 *roomCandidates;
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
if (GetPikeQueenFightType(1))
{
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
gSaveBlock2Ptr->frontier.pikeHintedRoomIndex = Random() % 6;
gSaveBlock2Ptr->frontier.pikeHintedRoomType = PIKE_ROOM_BRAIN;
}
@@ -1356,9 +1346,9 @@ static void SetHintedRoom(void)
{
gSaveBlock2Ptr->frontier.pikeHintedRoomIndex = Random() % 3;
if (gSaveBlock2Ptr->frontier.pikeHealingRoomsDisabled)
- count = 6;
+ count = NUM_PIKE_ROOM_TYPES - 3; // exclude healing rooms and Brain room
else
- count = 8;
+ count = NUM_PIKE_ROOM_TYPES - 1; // exclude Brain room
roomCandidates = AllocZeroed(count);
for (i = 0, id = 0; i < count; i++)
@@ -1385,9 +1375,6 @@ static void SetHintedRoom(void)
static void GetHintedRoomIndex(void)
{
- // 0 = left room
- // 1 = center room
- // 2 = right room
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikeHintedRoomIndex;
}
@@ -1413,7 +1400,7 @@ static void PrepareOneTrainer(bool8 difficult)
challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14;
do
{
- trainerId = sub_8162548(challengeNum, battleNum);
+ trainerId = GetRandomScaledFrontierTrainerId(challengeNum, battleNum);
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -1438,7 +1425,7 @@ static void PrepareTwoTrainers(void)
gFacilityTrainers = gBattleFrontierTrainers;
do
{
- trainerId = sub_8162548(challengeNum, 1);
+ trainerId = GetRandomScaledFrontierTrainerId(challengeNum, 1);
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum - 1; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -1453,7 +1440,7 @@ static void PrepareTwoTrainers(void)
do
{
- trainerId = sub_8162548(challengeNum, 1);
+ trainerId = GetRandomScaledFrontierTrainerId(challengeNum, 1);
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -1475,16 +1462,16 @@ static void ClearPikeTrainerIds(void)
gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF;
}
-static void BufferRecordMixingTrainerMessage(void)
+static void BufferTrainerIntro(void)
{
if (gSpecialVar_0x8005 == 0)
{
- if (gTrainerBattleOpponent_A < TRAINER_RECORD_MIXING_FRIEND)
+ if (gTrainerBattleOpponent_A < FRONTIER_TRAINERS_COUNT)
FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
}
else if (gSpecialVar_0x8005 == 1)
{
- if (gTrainerBattleOpponent_B < TRAINER_RECORD_MIXING_FRIEND)
+ if (gTrainerBattleOpponent_B < FRONTIER_TRAINERS_COUNT)
FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_B].speechBefore);
}
}
@@ -1512,8 +1499,8 @@ static u8 GetPikeQueenFightType(u8 nextRoom)
{
u8 numPikeSymbols;
- u8 var = 5;
- u8 ret = 0;
+ u8 facility = FRONTIER_FACILITY_PIKE;
+ u8 ret = FRONTIER_BRAIN_NOT_READY;
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
winStreak += nextRoom;
@@ -1523,17 +1510,17 @@ static u8 GetPikeQueenFightType(u8 nextRoom)
{
case 0:
case 1:
- if (winStreak == sPikeQueenWinStreakAppearances[var][numPikeSymbols] - sPikeQueenWinStreakAppearances[var][3])
- ret = numPikeSymbols + 1;
+ if (winStreak == sFrontierBrainStreakAppearances[facility][numPikeSymbols] - sFrontierBrainStreakAppearances[facility][3])
+ ret = numPikeSymbols + 1; // FRONTIER_BRAIN_SILVER and FRONTIER_BRAIN_GOLD
break;
case 2:
default:
- if (winStreak == sPikeQueenWinStreakAppearances[var][0] - sPikeQueenWinStreakAppearances[var][3])
- ret = 3;
- else if (winStreak == sPikeQueenWinStreakAppearances[var][1] - sPikeQueenWinStreakAppearances[var][3]
- || (winStreak > sPikeQueenWinStreakAppearances[var][1]
- && (winStreak - sPikeQueenWinStreakAppearances[var][1] + sPikeQueenWinStreakAppearances[var][3]) % sPikeQueenWinStreakAppearances[var][2] == 0))
- ret = 4;
+ if (winStreak == sFrontierBrainStreakAppearances[facility][0] - sFrontierBrainStreakAppearances[facility][3])
+ ret = FRONTIER_BRAIN_STREAK;
+ else if (winStreak == sFrontierBrainStreakAppearances[facility][1] - sFrontierBrainStreakAppearances[facility][3]
+ || (winStreak > sFrontierBrainStreakAppearances[facility][1]
+ && (winStreak - sFrontierBrainStreakAppearances[facility][1] + sFrontierBrainStreakAppearances[facility][3]) % sFrontierBrainStreakAppearances[facility][2] == 0))
+ ret = FRONTIER_BRAIN_STREAK_LONG;
break;
}
@@ -1553,23 +1540,23 @@ static void HealSomeMonsBeforePikeQueen(void)
gSpecialVar_Result = toHealCount;
}
-static void SetHealingRoomsDisabled(void)
+static void SetHealingroomTypesDisabled(void)
{
gSaveBlock2Ptr->frontier.pikeHealingRoomsDisabled = gSpecialVar_0x8005;
}
-static void CanAnyPartyMonsBeHealed(void)
+static void IsPartyFullHealed(void)
{
u8 i, j;
gSpecialVar_Result = TRUE;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
bool32 canBeHealed = FALSE;
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++)
@@ -1597,11 +1584,11 @@ static void CanAnyPartyMonsBeHealed(void)
}
}
-static void BackupMonHeldItems(void)
+static void SaveMonHeldItems(void)
{
u8 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
int heldItem = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1],
MON_DATA_HELD_ITEM);
@@ -1613,7 +1600,7 @@ static void RestoreMonHeldItems(void)
{
u8 i;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
SetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1],
MON_DATA_HELD_ITEM,
@@ -1625,10 +1612,10 @@ static void InitPikeChallenge(void)
{
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = 0;
- if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612690[lvlMode]))
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
+ if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[lvlMode]))
gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0;
gTrainerBattleOpponent_A = 0;
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index cc722da8d..9fa6beb1d 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -23,12 +23,14 @@
#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/frontier_util.h"
#include "constants/items.h"
#include "constants/layouts.h"
#include "constants/maps.h"
@@ -39,45 +41,14 @@
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
{
u16 species;
u8 lvl;
u8 abilityNum;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
};
struct PyramidFloorTemplate
@@ -100,20 +71,20 @@ struct PyramidTrainerEncounterMusic
static void InitPyramidChallenge(void);
static void GetBattlePyramidData(void);
static void SetBattlePyramidData(void);
-static void sub_81A9134(void);
-static void SetBattlePyramidRewardItem(void);
-static void GiveBattlePyramidRewardItem(void);
+static void SavePyramidChallenge(void);
+static void SetBattlePyramidPrize(void);
+static void GiveBattlePyramidPrize(void);
static void SeedPyramidFloor(void);
static void SetPickupItem(void);
static void HidePyramidItem(void);
-static void InitPyramidFacilityTrainers(void);
+static void SetPyramidFacilityTrainers(void);
static void ShowPostBattleHintText(void);
static void UpdatePyramidWinStreak(void);
static void GetInBattlePyramid(void);
static void UpdatePyramidLightRadius(void);
static void ClearPyramidPartyHeldItems(void);
static void SetPyramidFloorPalette(void);
-static void sub_81A9828(void);
+static void BattlePyramidStartMenu(void);
static void RestorePyramidPlayerParty(void);
static void InitPyramidBagItems(u8 lvlMode);
static u8 GetPyramidFloorTemplateId(void);
@@ -544,7 +515,7 @@ static const u8 sTrainerTextGroups[50][2] =
{FACILITY_CLASS_SAILOR, 2},
{FACILITY_CLASS_COLLECTOR, 2},
{FACILITY_CLASS_PKMN_BREEDER_M, 2},
- {FACILITY_CLASS_POKEMON_BREEDER_F, 3},
+ {FACILITY_CLASS_PKMN_BREEDER_F, 3},
{FACILITY_CLASS_PKMN_RANGER_M, 2},
{FACILITY_CLASS_PKMN_RANGER_F, 3},
{FACILITY_CLASS_LASS, 3},
@@ -554,200 +525,200 @@ static const u8 sTrainerTextGroups[50][2] =
static const u8 *const sExitDirectionHintTexts1[] =
{
- BattlePyramid_ExitHintUp_Text1,
- BattlePyramid_ExitHintLeft_Text1,
- BattlePyramid_ExitHintRight_Text1,
- BattlePyramid_ExitHintDown_Text1,
+ BattlePyramid_Text_ExitHintUp1,
+ BattlePyramid_Text_ExitHintLeft1,
+ BattlePyramid_Text_ExitHintRight1,
+ BattlePyramid_Text_ExitHintDown1,
};
static const u8 *const sRemainingItemsHintTexts1[] =
{
- BattlePyramid_ZeroItemsRemaining_Text1,
- BattlePyramid_OneItemRemaining_Text1,
- BattlePyramid_TwoItemsRemaining_Text1,
- BattlePyramid_ThreeItemsRemaining_Text1,
- BattlePyramid_FourItemsRemaining_Text1,
- BattlePyramid_FiveItemsRemaining_Text1,
- BattlePyramid_SixItemsRemaining_Text1,
- BattlePyramid_SevenItemsRemaining_Text1,
- BattlePyramid_EightItemsRemaining_Text1,
+ BattlePyramid_Text_ZeroItemsRemaining1,
+ BattlePyramid_Text_OneItemRemaining1,
+ BattlePyramid_Text_TwoItemsRemaining1,
+ BattlePyramid_Text_ThreeItemsRemaining1,
+ BattlePyramid_Text_FourItemsRemaining1,
+ BattlePyramid_Text_FiveItemsRemaining1,
+ BattlePyramid_Text_SixItemsRemaining1,
+ BattlePyramid_Text_SevenItemsRemaining1,
+ BattlePyramid_Text_EightItemsRemaining1,
};
static const u8 *const sRemainingTrainersHintTexts1[] =
{
- BattlePyramid_ZeroTrainersRemaining_Text1,
- BattlePyramid_OneTrainersRemaining_Text1,
- BattlePyramid_TwoTrainersRemaining_Text1,
- BattlePyramid_ThreeTrainersRemaining_Text1,
- BattlePyramid_FourTrainersRemaining_Text1,
- BattlePyramid_FiveTrainersRemaining_Text1,
- BattlePyramid_SixTrainersRemaining_Text1,
- BattlePyramid_SevenTrainersRemaining_Text1,
+ BattlePyramid_Text_ZeroTrainersRemaining1,
+ BattlePyramid_Text_OneTrainersRemaining1,
+ BattlePyramid_Text_TwoTrainersRemaining1,
+ BattlePyramid_Text_ThreeTrainersRemaining1,
+ BattlePyramid_Text_FourTrainersRemaining1,
+ BattlePyramid_Text_FiveTrainersRemaining1,
+ BattlePyramid_Text_SixTrainersRemaining1,
+ BattlePyramid_Text_SevenTrainersRemaining1,
};
static const u8 *const sExitDirectionHintTexts2[] =
{
- BattlePyramid_ExitHintUp_Text2,
- BattlePyramid_ExitHintLeft_Text2,
- BattlePyramid_ExitHintRight_Text2,
- BattlePyramid_ExitHintDown_Text2,
+ BattlePyramid_Text_ExitHintUp2,
+ BattlePyramid_Text_ExitHintLeft2,
+ BattlePyramid_Text_ExitHintRight2,
+ BattlePyramid_Text_ExitHintDown2,
};
static const u8 *const sRemainingItemsHintTexts2[] =
{
- BattlePyramid_ZeroItemsRemaining_Text2,
- BattlePyramid_OneItemRemaining_Text2,
- BattlePyramid_TwoItemsRemaining_Text2,
- BattlePyramid_ThreeItemsRemaining_Text2,
- BattlePyramid_FourItemsRemaining_Text2,
- BattlePyramid_FiveItemsRemaining_Text2,
- BattlePyramid_SixItemsRemaining_Text2,
- BattlePyramid_SevenItemsRemaining_Text2,
- BattlePyramid_EightItemsRemaining_Text2,
+ BattlePyramid_Text_ZeroItemsRemaining2,
+ BattlePyramid_Text_OneItemRemaining2,
+ BattlePyramid_Text_TwoItemsRemaining2,
+ BattlePyramid_Text_ThreeItemsRemaining2,
+ BattlePyramid_Text_FourItemsRemaining2,
+ BattlePyramid_Text_FiveItemsRemaining2,
+ BattlePyramid_Text_SixItemsRemaining2,
+ BattlePyramid_Text_SevenItemsRemaining2,
+ BattlePyramid_Text_EightItemsRemaining2,
};
static const u8 *const sRemainingTrainersHintTexts2[] =
{
- BattlePyramid_ZeroTrainersRemaining_Text2,
- BattlePyramid_OneTrainersRemaining_Text2,
- BattlePyramid_TwoTrainersRemaining_Text2,
- BattlePyramid_ThreeTrainersRemaining_Text2,
- BattlePyramid_FourTrainersRemaining_Text2,
- BattlePyramid_FiveTrainersRemaining_Text2,
- BattlePyramid_SixTrainersRemaining_Text2,
- BattlePyramid_SevenTrainersRemaining_Text2,
+ BattlePyramid_Text_ZeroTrainersRemaining2,
+ BattlePyramid_Text_OneTrainersRemaining2,
+ BattlePyramid_Text_TwoTrainersRemaining2,
+ BattlePyramid_Text_ThreeTrainersRemaining2,
+ BattlePyramid_Text_FourTrainersRemaining2,
+ BattlePyramid_Text_FiveTrainersRemaining2,
+ BattlePyramid_Text_SixTrainersRemaining2,
+ BattlePyramid_Text_SevenTrainersRemaining2,
};
static const u8 *const sExitDirectionHintTexts3[] =
{
- BattlePyramid_ExitHintUp_Text3,
- BattlePyramid_ExitHintLeft_Text3,
- BattlePyramid_ExitHintRight_Text3,
- BattlePyramid_ExitHintDown_Text3,
+ BattlePyramid_Text_ExitHintUp3,
+ BattlePyramid_Text_ExitHintLeft3,
+ BattlePyramid_Text_ExitHintRight3,
+ BattlePyramid_Text_ExitHintDown3,
};
static const u8 *const sRemainingItemsHintTexts3[] =
{
- BattlePyramid_ZeroItemsRemaining_Text3,
- BattlePyramid_OneItemRemaining_Text3,
- BattlePyramid_TwoItemsRemaining_Text3,
- BattlePyramid_ThreeItemsRemaining_Text3,
- BattlePyramid_FourItemsRemaining_Text3,
- BattlePyramid_FiveItemsRemaining_Text3,
- BattlePyramid_SixItemsRemaining_Text3,
- BattlePyramid_SevenItemsRemaining_Text3,
- BattlePyramid_EightItemsRemaining_Text3,
+ BattlePyramid_Text_ZeroItemsRemaining3,
+ BattlePyramid_Text_OneItemRemaining3,
+ BattlePyramid_Text_TwoItemsRemaining3,
+ BattlePyramid_Text_ThreeItemsRemaining3,
+ BattlePyramid_Text_FourItemsRemaining3,
+ BattlePyramid_Text_FiveItemsRemaining3,
+ BattlePyramid_Text_SixItemsRemaining3,
+ BattlePyramid_Text_SevenItemsRemaining3,
+ BattlePyramid_Text_EightItemsRemaining3,
};
static const u8 *const sRemainingTrainersHintTexts3[] =
{
- BattlePyramid_ZeroTrainersRemaining_Text3,
- BattlePyramid_OneTrainersRemaining_Text3,
- BattlePyramid_TwoTrainersRemaining_Text3,
- BattlePyramid_ThreeTrainersRemaining_Text3,
- BattlePyramid_FourTrainersRemaining_Text3,
- BattlePyramid_FiveTrainersRemaining_Text3,
- BattlePyramid_SixTrainersRemaining_Text3,
- BattlePyramid_SevenTrainersRemaining_Text3,
+ BattlePyramid_Text_ZeroTrainersRemaining3,
+ BattlePyramid_Text_OneTrainersRemaining3,
+ BattlePyramid_Text_TwoTrainersRemaining3,
+ BattlePyramid_Text_ThreeTrainersRemaining3,
+ BattlePyramid_Text_FourTrainersRemaining3,
+ BattlePyramid_Text_FiveTrainersRemaining3,
+ BattlePyramid_Text_SixTrainersRemaining3,
+ BattlePyramid_Text_SevenTrainersRemaining3,
};
static const u8 *const sExitDirectionHintTexts4[] =
{
- BattlePyramid_ExitHintUp_Text4,
- BattlePyramid_ExitHintLeft_Text4,
- BattlePyramid_ExitHintRight_Text4,
- BattlePyramid_ExitHintDown_Text4,
+ BattlePyramid_Text_ExitHintUp4,
+ BattlePyramid_Text_ExitHintLeft4,
+ BattlePyramid_Text_ExitHintRight4,
+ BattlePyramid_Text_ExitHintDown4,
};
static const u8 *const sRemainingItemsHintTexts4[] =
{
- BattlePyramid_ZeroItemsRemaining_Text4,
- BattlePyramid_OneItemRemaining_Text4,
- BattlePyramid_TwoItemsRemaining_Text4,
- BattlePyramid_ThreeItemsRemaining_Text4,
- BattlePyramid_FourItemsRemaining_Text4,
- BattlePyramid_FiveItemsRemaining_Text4,
- BattlePyramid_SixItemsRemaining_Text4,
- BattlePyramid_SevenItemsRemaining_Text4,
- BattlePyramid_EightItemsRemaining_Text4,
+ BattlePyramid_Text_ZeroItemsRemaining4,
+ BattlePyramid_Text_OneItemRemaining4,
+ BattlePyramid_Text_TwoItemsRemaining4,
+ BattlePyramid_Text_ThreeItemsRemaining4,
+ BattlePyramid_Text_FourItemsRemaining4,
+ BattlePyramid_Text_FiveItemsRemaining4,
+ BattlePyramid_Text_SixItemsRemaining4,
+ BattlePyramid_Text_SevenItemsRemaining4,
+ BattlePyramid_Text_EightItemsRemaining4,
};
static const u8 *const sRemainingTrainersHintTexts4[] =
{
- BattlePyramid_ZeroTrainersRemaining_Text4,
- BattlePyramid_OneTrainersRemaining_Text4,
- BattlePyramid_TwoTrainersRemaining_Text4,
- BattlePyramid_ThreeTrainersRemaining_Text4,
- BattlePyramid_FourTrainersRemaining_Text4,
- BattlePyramid_FiveTrainersRemaining_Text4,
- BattlePyramid_SixTrainersRemaining_Text4,
- BattlePyramid_SevenTrainersRemaining_Text4,
+ BattlePyramid_Text_ZeroTrainersRemaining4,
+ BattlePyramid_Text_OneTrainersRemaining4,
+ BattlePyramid_Text_TwoTrainersRemaining4,
+ BattlePyramid_Text_ThreeTrainersRemaining4,
+ BattlePyramid_Text_FourTrainersRemaining4,
+ BattlePyramid_Text_FiveTrainersRemaining4,
+ BattlePyramid_Text_SixTrainersRemaining4,
+ BattlePyramid_Text_SevenTrainersRemaining4,
};
static const u8 *const sExitDirectionHintTexts5[] =
{
- BattlePyramid_ExitHintUp_Text5,
- BattlePyramid_ExitHintLeft_Text5,
- BattlePyramid_ExitHintRight_Text5,
- BattlePyramid_ExitHintDown_Text5,
+ BattlePyramid_Text_ExitHintUp5,
+ BattlePyramid_Text_ExitHintLeft5,
+ BattlePyramid_Text_ExitHintRight5,
+ BattlePyramid_Text_ExitHintDown5,
};
static const u8 *const sRemainingItemsHintTexts5[] =
{
- BattlePyramid_ZeroItemsRemaining_Text5,
- BattlePyramid_OneItemRemaining_Text5,
- BattlePyramid_TwoItemsRemaining_Text5,
- BattlePyramid_ThreeItemsRemaining_Text5,
- BattlePyramid_FourItemsRemaining_Text5,
- BattlePyramid_FiveItemsRemaining_Text5,
- BattlePyramid_SixItemsRemaining_Text5,
- BattlePyramid_SevenItemsRemaining_Text5,
- BattlePyramid_EightItemsRemaining_Text5,
+ BattlePyramid_Text_ZeroItemsRemaining5,
+ BattlePyramid_Text_OneItemRemaining5,
+ BattlePyramid_Text_TwoItemsRemaining5,
+ BattlePyramid_Text_ThreeItemsRemaining5,
+ BattlePyramid_Text_FourItemsRemaining5,
+ BattlePyramid_Text_FiveItemsRemaining5,
+ BattlePyramid_Text_SixItemsRemaining5,
+ BattlePyramid_Text_SevenItemsRemaining5,
+ BattlePyramid_Text_EightItemsRemaining5,
};
static const u8 *const sRemainingTrainersHintTexts5[] =
{
- BattlePyramid_ZeroTrainersRemaining_Text5,
- BattlePyramid_OneTrainersRemaining_Text5,
- BattlePyramid_TwoTrainersRemaining_Text5,
- BattlePyramid_ThreeTrainersRemaining_Text5,
- BattlePyramid_FourTrainersRemaining_Text5,
- BattlePyramid_FiveTrainersRemaining_Text5,
- BattlePyramid_SixTrainersRemaining_Text5,
- BattlePyramid_SevenTrainersRemaining_Text5,
+ BattlePyramid_Text_ZeroTrainersRemaining5,
+ BattlePyramid_Text_OneTrainersRemaining5,
+ BattlePyramid_Text_TwoTrainersRemaining5,
+ BattlePyramid_Text_ThreeTrainersRemaining5,
+ BattlePyramid_Text_FourTrainersRemaining5,
+ BattlePyramid_Text_FiveTrainersRemaining5,
+ BattlePyramid_Text_SixTrainersRemaining5,
+ BattlePyramid_Text_SevenTrainersRemaining5,
};
static const u8 *const sExitDirectionHintTexts6[] =
{
- BattlePyramid_ExitHintUp_Text6,
- BattlePyramid_ExitHintLeft_Text6,
- BattlePyramid_ExitHintRight_Text6,
- BattlePyramid_ExitHintDown_Text6,
+ BattlePyramid_Text_ExitHintUp6,
+ BattlePyramid_Text_ExitHintLeft6,
+ BattlePyramid_Text_ExitHintRight6,
+ BattlePyramid_Text_ExitHintDown6,
};
static const u8 *const sRemainingItemsHintTexts6[] =
{
- BattlePyramid_ZeroItemsRemaining_Text6,
- BattlePyramid_OneItemRemaining_Text6,
- BattlePyramid_TwoItemsRemaining_Text6,
- BattlePyramid_ThreeItemsRemaining_Text6,
- BattlePyramid_FourItemsRemaining_Text6,
- BattlePyramid_FiveItemsRemaining_Text6,
- BattlePyramid_SixItemsRemaining_Text6,
- BattlePyramid_SevenItemsRemaining_Text6,
- BattlePyramid_EightItemsRemaining_Text6,
+ BattlePyramid_Text_ZeroItemsRemaining6,
+ BattlePyramid_Text_OneItemRemaining6,
+ BattlePyramid_Text_TwoItemsRemaining6,
+ BattlePyramid_Text_ThreeItemsRemaining6,
+ BattlePyramid_Text_FourItemsRemaining6,
+ BattlePyramid_Text_FiveItemsRemaining6,
+ BattlePyramid_Text_SixItemsRemaining6,
+ BattlePyramid_Text_SevenItemsRemaining6,
+ BattlePyramid_Text_EightItemsRemaining6,
};
static const u8 *const sRemainingTrainersHintTexts6[] =
{
- BattlePyramid_ZeroTrainersRemaining_Text6,
- BattlePyramid_OneTrainersRemaining_Text6,
- BattlePyramid_TwoTrainersRemaining_Text6,
- BattlePyramid_ThreeTrainersRemaining_Text6,
- BattlePyramid_FourTrainersRemaining_Text6,
- BattlePyramid_FiveTrainersRemaining_Text6,
- BattlePyramid_SixTrainersRemaining_Text6,
- BattlePyramid_SevenTrainersRemaining_Text6,
+ BattlePyramid_Text_ZeroTrainersRemaining6,
+ BattlePyramid_Text_OneTrainersRemaining6,
+ BattlePyramid_Text_TwoTrainersRemaining6,
+ BattlePyramid_Text_ThreeTrainersRemaining6,
+ BattlePyramid_Text_FourTrainersRemaining6,
+ BattlePyramid_Text_FiveTrainersRemaining6,
+ BattlePyramid_Text_SixTrainersRemaining6,
+ BattlePyramid_Text_SevenTrainersRemaining6,
};
static const u8 *const *const sPostBattleHintTexts1[] =
@@ -816,24 +787,24 @@ static const u8 sHintTextTypes[] =
static void (* const sBattlePyramidFunctions[])(void) =
{
- InitPyramidChallenge,
- GetBattlePyramidData,
- SetBattlePyramidData,
- sub_81A9134,
- SetBattlePyramidRewardItem,
- GiveBattlePyramidRewardItem,
- SeedPyramidFloor,
- SetPickupItem,
- HidePyramidItem,
- InitPyramidFacilityTrainers,
- ShowPostBattleHintText,
- UpdatePyramidWinStreak,
- GetInBattlePyramid,
- UpdatePyramidLightRadius,
- ClearPyramidPartyHeldItems,
- SetPyramidFloorPalette,
- sub_81A9828,
- RestorePyramidPlayerParty,
+ [BATTLE_PYRAMID_FUNC_INIT] = InitPyramidChallenge,
+ [BATTLE_PYRAMID_FUNC_GET_DATA] = GetBattlePyramidData,
+ [BATTLE_PYRAMID_FUNC_SET_DATA] = SetBattlePyramidData,
+ [BATTLE_PYRAMID_FUNC_SAVE] = SavePyramidChallenge,
+ [BATTLE_PYRAMID_FUNC_SET_PRIZE] = SetBattlePyramidPrize,
+ [BATTLE_PYRAMID_FUNC_GIVE_PRIZE] = GiveBattlePyramidPrize,
+ [BATTLE_PYRAMID_FUNC_SEED_FLOOR] = SeedPyramidFloor,
+ [BATTLE_PYRAMID_FUNC_SET_ITEM] = SetPickupItem,
+ [BATTLE_PYRAMID_FUNC_HIDE_ITEM] = HidePyramidItem,
+ [BATTLE_PYRAMID_FUNC_SET_TRAINERS] = SetPyramidFacilityTrainers,
+ [BATTLE_PYRAMID_FUNC_SHOW_HINT_TEXT] = ShowPostBattleHintText,
+ [BATTLE_PYRAMID_FUNC_UPDATE_STREAK] = UpdatePyramidWinStreak,
+ [BATTLE_PYRAMID_FUNC_IS_IN] = GetInBattlePyramid,
+ [BATTLE_PYRAMID_FUNC_UPDATE_LIGHT] = UpdatePyramidLightRadius,
+ [BATTLE_PYRAMID_FUNC_CLEAR_HELD_ITEMS] = ClearPyramidPartyHeldItems,
+ [BATTLE_PYRAMID_FUNC_SET_FLOOR_PALETTE] = SetPyramidFloorPalette,
+ [BATTLE_PYRAMID_FUNC_START_MENU] = BattlePyramidStartMenu,
+ [BATTLE_PYRAMID_FUNC_RESTORE_PARTY] = RestorePyramidPlayerParty,
};
static const u16 sShortStreakRewardItems[] = {ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, ITEM_CALCIUM, ITEM_CARBOS, ITEM_ZINC};
@@ -872,13 +843,13 @@ static void InitPyramidChallenge(void)
bool32 isCurrent;
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = 0;
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x2000;
+ isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN;
else
- isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x1000;
+ isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50;
if (!isCurrent)
{
@@ -897,29 +868,29 @@ static void GetBattlePyramidData(void)
switch (gSpecialVar_0x8005)
{
- case 0:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidRewardItem;
+ case PYRAMID_DATA_PRIZE:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidPrize;
break;
- case 1:
+ case PYRAMID_DATA_WIN_STREAK:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode];
break;
- case 2:
+ case PYRAMID_DATA_WIN_STREAK_ACTIVE:
if (lvlMode != FRONTIER_LVL_50)
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x2000;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN;
else
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x1000;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50;
break;
- case 3:
+ case PYRAMID_DATA_WIN_STREAK_50:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50];
break;
- case 4:
+ case PYRAMID_DATA_WIN_STREAK_OPEN:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN];
break;
- case 5:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x1000;
+ case PYRAMID_DATA_WIN_STREAK_ACTIVE_50:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50;
break;
- case 6:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x2000;
+ case PYRAMID_DATA_WIN_STREAK_ACTIVE_OPEN:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN;
break;
}
}
@@ -930,59 +901,59 @@ static void SetBattlePyramidData(void)
switch (gSpecialVar_0x8005)
{
- case 0:
- gSaveBlock2Ptr->frontier.pyramidRewardItem = gSpecialVar_0x8006;
+ case PYRAMID_DATA_PRIZE:
+ gSaveBlock2Ptr->frontier.pyramidPrize = gSpecialVar_0x8006;
break;
- case 1:
+ case PYRAMID_DATA_WIN_STREAK:
gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] = gSpecialVar_0x8006;
break;
- case 2:
+ case PYRAMID_DATA_WIN_STREAK_ACTIVE:
if (lvlMode != FRONTIER_LVL_50)
{
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= 0x2000;
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PYRAMID_OPEN;
else
- gSaveBlock2Ptr->frontier.field_CDC &= ~(0x2000);
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PYRAMID_OPEN);
}
else
{
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= 0x1000;
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PYRAMID_50;
else
- gSaveBlock2Ptr->frontier.field_CDC &= ~(0x1000);
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PYRAMID_50);
}
break;
- case 7:
+ case PYRAMID_DATA_TRAINER_FLAGS:
gSaveBlock2Ptr->frontier.pyramidTrainerFlags = gSpecialVar_0x8006;
break;
}
}
-static void sub_81A9134(void)
+static void SavePyramidChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = 1;
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
save_serialize_map();
TrySavingData(SAVE_LINK);
}
-static void SetBattlePyramidRewardItem(void)
+static void SetBattlePyramidPrize(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 41)
- gSaveBlock2Ptr->frontier.pyramidRewardItem = sLongStreakRewardItems[Random() % ARRAY_COUNT(sLongStreakRewardItems)];
+ gSaveBlock2Ptr->frontier.pyramidPrize = sLongStreakRewardItems[Random() % ARRAY_COUNT(sLongStreakRewardItems)];
else
- gSaveBlock2Ptr->frontier.pyramidRewardItem = sShortStreakRewardItems[Random() % ARRAY_COUNT(sShortStreakRewardItems)];
+ gSaveBlock2Ptr->frontier.pyramidPrize = sShortStreakRewardItems[Random() % ARRAY_COUNT(sShortStreakRewardItems)];
}
-static void GiveBattlePyramidRewardItem(void)
+static void GiveBattlePyramidPrize(void)
{
- if (AddBagItem(gSaveBlock2Ptr->frontier.pyramidRewardItem, 1) == TRUE)
+ if (AddBagItem(gSaveBlock2Ptr->frontier.pyramidPrize, 1) == TRUE)
{
- CopyItemName(gSaveBlock2Ptr->frontier.pyramidRewardItem, gStringVar1);
- gSaveBlock2Ptr->frontier.pyramidRewardItem = 0;
+ CopyItemName(gSaveBlock2Ptr->frontier.pyramidPrize, gStringVar1);
+ gSaveBlock2Ptr->frontier.pyramidPrize = 0;
gSpecialVar_Result = TRUE;
}
else
@@ -1033,6 +1004,7 @@ static void SetPickupItem(void)
else
gSpecialVar_0x8000 = sPickupItemsLvl50[round][sPickupItemSlots[i][1]];
+ // Quantity of item to give
gSpecialVar_0x8001 = 1;
}
@@ -1057,7 +1029,7 @@ static void HidePyramidItem(void)
}
}
-static void InitPyramidFacilityTrainers(void)
+static void SetPyramidFacilityTrainers(void)
{
gFacilityTrainers = gBattleFrontierTrainers;
}
@@ -1151,10 +1123,10 @@ static void UpdatePyramidLightRadius(void)
{
switch (gSpecialVar_0x8006)
{
- case 0:
+ case PYRAMID_LIGHT_SET_RADIUS:
gSaveBlock2Ptr->frontier.pyramidLightRadius = gSpecialVar_0x8005;
break;
- case 1:
+ case PYRAMID_LIGHT_INCR_RADIUS:
switch (gSpecialVar_Result)
{
case 0:
@@ -1199,7 +1171,7 @@ static void ClearPyramidPartyHeldItems(void)
for (i = 0; i < PARTY_SIZE; i++)
{
- for (j = 0; j < 4; j++)
+ for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++)
{
if (gSaveBlock2Ptr->frontier.selectedPartyMons[j] != 0 && gSaveBlock2Ptr->frontier.selectedPartyMons[j] - 1 == i)
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item);
@@ -1221,19 +1193,20 @@ static void Task_SetPyramidFloorPalette(u8 taskId)
}
}
-static void sub_81A9828(void)
+// Unused. Handled by BuildStartMenuActions
+static void BattlePyramidStartMenu(void)
{
- sub_809FDD4();
+ ShowBattlePyramidStartMenu();
}
static void RestorePyramidPlayerParty(void)
{
int i, j, k, l;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
int partyIndex = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
- for (j = 0; j < 3; j++)
+ for (j = 0; j < FRONTIER_PARTY_SIZE; j++)
{
if (GetMonData(&gSaveBlock1Ptr->playerParty[partyIndex], MON_DATA_SPECIES, NULL) == GetMonData(&gPlayerParty[j], MON_DATA_SPECIES, NULL))
{
@@ -1254,7 +1227,7 @@ static void RestorePyramidPlayerParty(void)
}
}
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gSelectedOrderFromParty[i];
}
@@ -1445,7 +1418,7 @@ u8 GetPyramidRunMultiplier(void)
u8 InBattlePyramid(void)
{
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
return 1;
else if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP)
return 2;
@@ -1455,16 +1428,16 @@ u8 InBattlePyramid(void)
bool8 InBattlePyramid_(void)
{
- return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE
+ return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR
|| gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP;
}
-void sub_81A9E90(void)
+void PausePyramidChallenge(void)
{
if (InBattlePyramid())
{
RestorePyramidPlayerParty();
- gSaveBlock2Ptr->frontier.field_CA8 = 2;
+ gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED;
VarSet(VAR_TEMP_E, 0);
LoadPlayerParty();
}
@@ -1503,9 +1476,10 @@ u8 GetBattlePyramindTrainerEncounterMusicId(u16 trainerId)
return TRAINER_ENCOUNTER_MUSIC_MALE;
}
-void sub_81A9F80(void)
+// Unused
+static void BattlePyramidRetireChallenge(void)
{
- ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88);
+ ScriptContext1_SetupScript(BattlePyramid_Retire);
}
static u16 GetUniqueTrainerId(u8 eventObjectId)
@@ -1519,7 +1493,7 @@ static u16 GetUniqueTrainerId(u8 eventObjectId)
{
do
{
- trainerId = sub_8162548(challengeNum + 1, battleNum);
+ trainerId = GetRandomScaledFrontierTrainerId(challengeNum + 1, battleNum);
for (i = 0; i < eventObjectId; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -1531,7 +1505,7 @@ static u16 GetUniqueTrainerId(u8 eventObjectId)
{
do
{
- trainerId = sub_8162548(challengeNum, battleNum);
+ trainerId = GetRandomScaledFrontierTrainerId(challengeNum, battleNum);
for (i = 0; i < eventObjectId; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -1556,7 +1530,7 @@ void GenerateBattlePyramidFloorLayout(u16 *backupMapData, bool8 setPlayerPositio
{
u16 *map;
int yOffset, xOffset;
- const struct MapLayout *mapLayout = gMapLayouts[floorLayoutOffsets[i] + LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE];
+ const struct MapLayout *mapLayout = gMapLayouts[floorLayoutOffsets[i] + LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR];
const u16 *layoutMap = mapLayout->map;
gBackupMapLayout.map = backupMapData;
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index b4ec6cd62..7c650800b 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"
@@ -39,7 +39,7 @@ EWRAM_DATA struct PyramidBagCursorData gPyramidBagCursorData = {0};
// This file's functions.
static void Task_HandlePyramidBagInput(u8 taskId);
-static void sub_81C4F44(u8 taskId);
+static void Task_ChooseItemsToTossFromPyramidBag(u8 taskId);
static void sub_81C5B4C(u8 taskId);
static void Task_BeginItemSwap(u8 taskId);
static void sub_81C5D20(u8 taskId);
@@ -67,7 +67,7 @@ static void sub_81C700C(void);
static void sub_81C6E98(void);
static void sub_81C6F20(void);
static void sub_81C6404(void);
-static void sub_81C6E1C(void);
+static void CloseBattlePyramidBagTextWindow(void);
static bool8 sub_81C5238(void);
static bool8 sub_81C5078(void);
static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId);
@@ -278,10 +278,10 @@ static const struct WindowTemplate gUnknown_0861F350[] =
static const struct OamData gOamData_861F378 =
{
.y = 0,
- .affineMode = 1,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -346,38 +346,38 @@ 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)
+void ChooseItemsToTossFromPyramidBag(void)
{
ScriptContext2_Enable();
- FadeScreen(1, 0);
- CreateTask(sub_81C4F44, 10);
+ FadeScreen(FADE_TO_BLACK, 0);
+ CreateTask(Task_ChooseItemsToTossFromPyramidBag, 10);
}
-static void sub_81C4F44(u8 taskId)
+static void Task_ChooseItemsToTossFromPyramidBag(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));
@@ -589,7 +589,7 @@ static void PyramidBag_CopyItemName(u8 *dst, u16 itemId)
{
ConvertIntToDecimalStringN(gStringVar1, ITEM_TO_BERRY(itemId), STR_CONV_MODE_LEADING_ZEROS, 2);
CopyItemName(itemId, gStringVar2);
- StringExpandPlaceholders(dst, gText_UnkF908Var1Clear7Var2);
+ StringExpandPlaceholders(dst, gText_NumberVar1Clear7Var2);
}
else
{
@@ -809,7 +809,7 @@ static void sub_81C5AB8(u8 y, u8 arg1)
PrintOnWindow_Font1(0, gText_SelectorArrow2, 0, y, 0, 0, 0, arg1);
}
-void sub_81C5B14(u8 taskId)
+void CloseBattlePyramidBagAndSetCallback(u8 taskId)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
gTasks[taskId].func = sub_81C5B4C;
@@ -862,7 +862,7 @@ static void Task_HandlePyramidBagInput(u8 taskId)
case LIST_CANCEL:
PlaySE(SE_SELECT);
gSpecialVar_ItemId = 0;
- sub_81C5B14(taskId);
+ CloseBattlePyramidBagAndSetCallback(taskId);
break;
default:
PlaySE(SE_SELECT);
@@ -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))
{
@@ -1043,7 +1043,7 @@ static void BagAction_UseOnField(u8 taskId)
|| ItemIsMail(gSpecialVar_ItemId) == TRUE)
{
sub_81C61A8();
- DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, sub_81C6714);
+ DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage);
}
else if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL)
{
@@ -1202,8 +1202,8 @@ static void BagAction_Give(u8 taskId)
}
else if (!ItemId_GetImportance(gSpecialVar_ItemId))
{
- gPyramidBagResources->callback2 = sub_81B7F60;
- sub_81C5B14(taskId);
+ gPyramidBagResources->callback2 = CB2_ChooseMonToGiveItem;
+ CloseBattlePyramidBagAndSetCallback(taskId);
}
else
{
@@ -1223,15 +1223,15 @@ static void sub_81C66EC(u8 taskId)
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_SELECT);
- sub_81C6714(taskId);
+ Task_CloseBattlePyramidBagMessage(taskId);
}
}
-void sub_81C6714(u8 taskId)
+void Task_CloseBattlePyramidBagMessage(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- sub_81C6E1C();
+ CloseBattlePyramidBagTextWindow();
PrintItemDescription(data[1]);
sub_81C5A98(data[0], 0);
SetTaskToMainPyramidBagInputHandler(taskId);
@@ -1242,7 +1242,7 @@ static void sub_81C674C(u8 taskId)
if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId))
DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, sub_81C66EC);
else if (!ItemId_GetImportance(gSpecialVar_ItemId))
- sub_81C5B14(taskId);
+ CloseBattlePyramidBagAndSetCallback(taskId);
else
sub_81C66AC(taskId);
}
@@ -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);
@@ -1461,7 +1462,7 @@ void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback
schedule_bg_copy_tilemap_to_vram(1);
}
-static void sub_81C6E1C(void)
+static void CloseBattlePyramidBagTextWindow(void)
{
ClearDialogWindowAndFrameToTransparent(2, FALSE);
// This ClearWindowTilemap call is redundant, since ClearDialogWindowAndFrameToTransparent already calls it.
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 5016a3a58..8924c6729 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;
@@ -76,507 +77,507 @@ static void PutLevelAndGenderOnLvlUpBox(void);
static void SpriteCB_MonIconOnLvlUpBox(struct Sprite* sprite);
-static void atk00_attackcanceler(void);
-static void atk01_accuracycheck(void);
-static void atk02_attackstring(void);
-static void atk03_ppreduce(void);
-static void atk04_critcalc(void);
-static void atk05_damagecalc(void);
-static void atk06_typecalc(void);
-static void atk07_adjustnormaldamage(void);
-static void atk08_adjustnormaldamage2(void);
-static void atk09_attackanimation(void);
-static void atk0A_waitanimation(void);
-static void atk0B_healthbarupdate(void);
-static void atk0C_datahpupdate(void);
-static void atk0D_critmessage(void);
-static void atk0E_effectivenesssound(void);
-static void atk0F_resultmessage(void);
-static void atk10_printstring(void);
-static void atk11_printselectionstring(void);
-static void atk12_waitmessage(void);
-static void atk13_printfromtable(void);
-static void atk14_printselectionstringfromtable(void);
-static void atk15_seteffectwithchance(void);
-static void atk16_seteffectprimary(void);
-static void atk17_seteffectsecondary(void);
-static void atk18_clearstatusfromeffect(void);
-static void atk19_tryfaintmon(void);
-static void atk1A_dofaintanimation(void);
-static void atk1B_cleareffectsonfaint(void);
-static void atk1C_jumpifstatus(void);
-static void atk1D_jumpifstatus2(void);
-static void atk1E_jumpifability(void);
-static void atk1F_jumpifsideaffecting(void);
-static void atk20_jumpifstat(void);
-static void atk21_jumpifstatus3condition(void);
-static void atk22_jumpiftype(void);
-static void atk23_getexp(void);
-static void atk24(void);
-static void atk25_movevaluescleanup(void);
-static void atk26_setmultihit(void);
-static void atk27_decrementmultihit(void);
-static void atk28_goto(void);
-static void atk29_jumpifbyte(void);
-static void atk2A_jumpifhalfword(void);
-static void atk2B_jumpifword(void);
-static void atk2C_jumpifarrayequal(void);
-static void atk2D_jumpifarraynotequal(void);
-static void atk2E_setbyte(void);
-static void atk2F_addbyte(void);
-static void atk30_subbyte(void);
-static void atk31_copyarray(void);
-static void atk32_copyarraywithindex(void);
-static void atk33_orbyte(void);
-static void atk34_orhalfword(void);
-static void atk35_orword(void);
-static void atk36_bicbyte(void);
-static void atk37_bichalfword(void);
-static void atk38_bicword(void);
-static void atk39_pause(void);
-static void atk3A_waitstate(void);
-static void atk3B_healthbar_update(void);
-static void atk3C_return(void);
-static void atk3D_end(void);
-static void atk3E_end2(void);
-static void atk3F_end3(void);
-static void atk40_jumpifaffectedbyprotect(void);
-static void atk41_call(void);
-static void atk42_jumpiftype2(void);
-static void atk43_jumpifabilitypresent(void);
-static void atk44_endselectionscript(void);
-static void atk45_playanimation(void);
-static void atk46_playanimation2(void);
-static void atk47_setgraphicalstatchangevalues(void);
-static void atk48_playstatchangeanimation(void);
-static void atk49_moveend(void);
-static void atk4A_typecalc2(void);
-static void atk4B_returnatktoball(void);
-static void atk4C_getswitchedmondata(void);
-static void atk4D_switchindataupdate(void);
-static void atk4E_switchinanim(void);
-static void atk4F_jumpifcantswitch(void);
-static void atk50_openpartyscreen(void);
-static void atk51_switchhandleorder(void);
-static void atk52_switchineffects(void);
-static void atk53_trainerslidein(void);
-static void atk54_playse(void);
-static void atk55_fanfare(void);
-static void atk56_playfaintcry(void);
-static void atk57(void);
-static void atk58_returntoball(void);
-static void atk59_handlelearnnewmove(void);
-static void atk5A_yesnoboxlearnmove(void);
-static void atk5B_yesnoboxstoplearningmove(void);
-static void atk5C_hitanimation(void);
-static void atk5D_getmoneyreward(void);
-static void atk5E(void);
-static void atk5F_swapattackerwithtarget(void);
-static void atk60_incrementgamestat(void);
-static void atk61_drawpartystatussummary(void);
-static void atk62_hidepartystatussummary(void);
-static void atk63_jumptocalledmove(void);
-static void atk64_statusanimation(void);
-static void atk65_status2animation(void);
-static void atk66_chosenstatusanimation(void);
-static void atk67_yesnobox(void);
-static void atk68_cancelallactions(void);
-static void atk69_adjustsetdamage(void);
-static void atk6A_removeitem(void);
-static void atk6B_atknameinbuff1(void);
-static void atk6C_drawlvlupbox(void);
-static void atk6D_resetsentmonsvalue(void);
-static void atk6E_setatktoplayer0(void);
-static void atk6F_makevisible(void);
-static void atk70_recordlastability(void);
-static void atk71_buffermovetolearn(void);
-static void atk72_jumpifplayerran(void);
-static void atk73_hpthresholds(void);
-static void atk74_hpthresholds2(void);
-static void atk75_useitemonopponent(void);
-static void atk76_various(void);
-static void atk77_setprotectlike(void);
-static void atk78_faintifabilitynotdamp(void);
-static void atk79_setatkhptozero(void);
-static void atk7A_jumpifnexttargetvalid(void);
-static void atk7B_tryhealhalfhealth(void);
-static void atk7C_trymirrormove(void);
-static void atk7D_setrain(void);
-static void atk7E_setreflect(void);
-static void atk7F_setseeded(void);
-static void atk80_manipulatedamage(void);
-static void atk81_trysetrest(void);
-static void atk82_jumpifnotfirstturn(void);
-static void atk83_nop(void);
-static void atk84_jumpifcantmakeasleep(void);
-static void atk85_stockpile(void);
-static void atk86_stockpiletobasedamage(void);
-static void atk87_stockpiletohpheal(void);
-static void atk88_negativedamage(void);
-static void atk89_statbuffchange(void);
-static void atk8A_normalisebuffs(void);
-static void atk8B_setbide(void);
-static void atk8C_confuseifrepeatingattackends(void);
-static void atk8D_setmultihitcounter(void);
-static void atk8E_initmultihitstring(void);
-static void atk8F_forcerandomswitch(void);
-static void atk90_tryconversiontypechange(void);
-static void atk91_givepaydaymoney(void);
-static void atk92_setlightscreen(void);
-static void atk93_tryKO(void);
-static void atk94_damagetohalftargethp(void);
-static void atk95_setsandstorm(void);
-static void atk96_weatherdamage(void);
-static void atk97_tryinfatuating(void);
-static void atk98_updatestatusicon(void);
-static void atk99_setmist(void);
-static void atk9A_setfocusenergy(void);
-static void atk9B_transformdataexecution(void);
-static void atk9C_setsubstitute(void);
-static void atk9D_mimicattackcopy(void);
-static void atk9E_metronome(void);
-static void atk9F_dmgtolevel(void);
-static void atkA0_psywavedamageeffect(void);
-static void atkA1_counterdamagecalculator(void);
-static void atkA2_mirrorcoatdamagecalculator(void);
-static void atkA3_disablelastusedattack(void);
-static void atkA4_trysetencore(void);
-static void atkA5_painsplitdmgcalc(void);
-static void atkA6_settypetorandomresistance(void);
-static void atkA7_setalwayshitflag(void);
-static void atkA8_copymovepermanently(void);
-static void atkA9_trychoosesleeptalkmove(void);
-static void atkAA_setdestinybond(void);
-static void atkAB_trysetdestinybondtohappen(void);
-static void atkAC_remaininghptopower(void);
-static void atkAD_tryspiteppreduce(void);
-static void atkAE_healpartystatus(void);
-static void atkAF_cursetarget(void);
-static void atkB0_trysetspikes(void);
-static void atkB1_setforesight(void);
-static void atkB2_trysetperishsong(void);
-static void atkB3_rolloutdamagecalculation(void);
-static void atkB4_jumpifconfusedandstatmaxed(void);
-static void atkB5_furycuttercalc(void);
-static void atkB6_happinesstodamagecalculation(void);
-static void atkB7_presentdamagecalculation(void);
-static void atkB8_setsafeguard(void);
-static void atkB9_magnitudedamagecalculation(void);
-static void atkBA_jumpifnopursuitswitchdmg(void);
-static void atkBB_setsunny(void);
-static void atkBC_maxattackhalvehp(void);
-static void atkBD_copyfoestats(void);
-static void atkBE_rapidspinfree(void);
-static void atkBF_setdefensecurlbit(void);
-static void atkC0_recoverbasedonsunlight(void);
-static void atkC1_hiddenpowercalc(void);
-static void atkC2_selectfirstvalidtarget(void);
-static void atkC3_trysetfutureattack(void);
-static void atkC4_trydobeatup(void);
-static void atkC5_setsemiinvulnerablebit(void);
-static void atkC6_clearsemiinvulnerablebit(void);
-static void atkC7_setminimize(void);
-static void atkC8_sethail(void);
-static void atkC9_jumpifattackandspecialattackcannotfall(void);
-static void atkCA_setforcedtarget(void);
-static void atkCB_setcharge(void);
-static void atkCC_callterrainattack(void);
-static void atkCD_cureifburnedparalysedorpoisoned(void);
-static void atkCE_settorment(void);
-static void atkCF_jumpifnodamage(void);
-static void atkD0_settaunt(void);
-static void atkD1_trysethelpinghand(void);
-static void atkD2_tryswapitems(void);
-static void atkD3_trycopyability(void);
-static void atkD4_trywish(void);
-static void atkD5_trysetroots(void);
-static void atkD6_doubledamagedealtifdamaged(void);
-static void atkD7_setyawn(void);
-static void atkD8_setdamagetohealthdifference(void);
-static void atkD9_scaledamagebyhealthratio(void);
-static void atkDA_tryswapabilities(void);
-static void atkDB_tryimprison(void);
-static void atkDC_trysetgrudge(void);
-static void atkDD_weightdamagecalculation(void);
-static void atkDE_assistattackselect(void);
-static void atkDF_trysetmagiccoat(void);
-static void atkE0_trysetsnatch(void);
-static void atkE1_trygetintimidatetarget(void);
-static void atkE2_switchoutabilities(void);
-static void atkE3_jumpifhasnohp(void);
-static void atkE4_getsecretpowereffect(void);
-static void atkE5_pickup(void);
-static void atkE6_docastformchangeanimation(void);
-static void atkE7_trycastformdatachange(void);
-static void atkE8_settypebasedhalvers(void);
-static void atkE9_setweatherballtype(void);
-static void atkEA_tryrecycleitem(void);
-static void atkEB_settypetoterrain(void);
-static void atkEC_pursuitrelated(void);
-static void atkEF_snatchsetbattlers(void);
-static void atkEE_removelightscreenreflect(void);
-static void atkEF_handleballthrow(void);
-static void atkF0_givecaughtmon(void);
-static void atkF1_trysetcaughtmondexflags(void);
-static void atkF2_displaydexinfo(void);
-static void atkF3_trygivecaughtmonnick(void);
-static void atkF4_subattackerhpbydmg(void);
-static void atkF5_removeattackerstatus1(void);
-static void atkF6_finishaction(void);
-static void atkF7_finishturn(void);
-static void atkF8_trainerslideout(void);
+static void Cmd_attackcanceler(void);
+static void Cmd_accuracycheck(void);
+static void Cmd_attackstring(void);
+static void Cmd_ppreduce(void);
+static void Cmd_critcalc(void);
+static void Cmd_damagecalc(void);
+static void Cmd_typecalc(void);
+static void Cmd_adjustnormaldamage(void);
+static void Cmd_adjustnormaldamage2(void);
+static void Cmd_attackanimation(void);
+static void Cmd_waitanimation(void);
+static void Cmd_healthbarupdate(void);
+static void Cmd_datahpupdate(void);
+static void Cmd_critmessage(void);
+static void Cmd_effectivenesssound(void);
+static void Cmd_resultmessage(void);
+static void Cmd_printstring(void);
+static void Cmd_printselectionstring(void);
+static void Cmd_waitmessage(void);
+static void Cmd_printfromtable(void);
+static void Cmd_printselectionstringfromtable(void);
+static void Cmd_seteffectwithchance(void);
+static void Cmd_seteffectprimary(void);
+static void Cmd_seteffectsecondary(void);
+static void Cmd_clearstatusfromeffect(void);
+static void Cmd_tryfaintmon(void);
+static void Cmd_dofaintanimation(void);
+static void Cmd_cleareffectsonfaint(void);
+static void Cmd_jumpifstatus(void);
+static void Cmd_jumpifstatus2(void);
+static void Cmd_jumpifability(void);
+static void Cmd_jumpifsideaffecting(void);
+static void Cmd_jumpifstat(void);
+static void Cmd_jumpifstatus3condition(void);
+static void Cmd_jumpiftype(void);
+static void Cmd_getexp(void);
+static void Cmd_unknown_24(void);
+static void Cmd_movevaluescleanup(void);
+static void Cmd_setmultihit(void);
+static void Cmd_decrementmultihit(void);
+static void Cmd_goto(void);
+static void Cmd_jumpifbyte(void);
+static void Cmd_jumpifhalfword(void);
+static void Cmd_jumpifword(void);
+static void Cmd_jumpifarrayequal(void);
+static void Cmd_jumpifarraynotequal(void);
+static void Cmd_setbyte(void);
+static void Cmd_addbyte(void);
+static void Cmd_subbyte(void);
+static void Cmd_copyarray(void);
+static void Cmd_copyarraywithindex(void);
+static void Cmd_orbyte(void);
+static void Cmd_orhalfword(void);
+static void Cmd_orword(void);
+static void Cmd_bicbyte(void);
+static void Cmd_bichalfword(void);
+static void Cmd_bicword(void);
+static void Cmd_pause(void);
+static void Cmd_waitstate(void);
+static void Cmd_healthbar_update(void);
+static void Cmd_return(void);
+static void Cmd_end(void);
+static void Cmd_end2(void);
+static void Cmd_end3(void);
+static void Cmd_jumpifaffectedbyprotect(void);
+static void Cmd_call(void);
+static void Cmd_jumpiftype2(void);
+static void Cmd_jumpifabilitypresent(void);
+static void Cmd_endselectionscript(void);
+static void Cmd_playanimation(void);
+static void Cmd_playanimation2(void);
+static void Cmd_setgraphicalstatchangevalues(void);
+static void Cmd_playstatchangeanimation(void);
+static void Cmd_moveend(void);
+static void Cmd_typecalc2(void);
+static void Cmd_returnatktoball(void);
+static void Cmd_getswitchedmondata(void);
+static void Cmd_switchindataupdate(void);
+static void Cmd_switchinanim(void);
+static void Cmd_jumpifcantswitch(void);
+static void Cmd_openpartyscreen(void);
+static void Cmd_switchhandleorder(void);
+static void Cmd_switchineffects(void);
+static void Cmd_trainerslidein(void);
+static void Cmd_playse(void);
+static void Cmd_fanfare(void);
+static void Cmd_playfaintcry(void);
+static void Cmd_unknown_57(void);
+static void Cmd_returntoball(void);
+static void Cmd_handlelearnnewmove(void);
+static void Cmd_yesnoboxlearnmove(void);
+static void Cmd_yesnoboxstoplearningmove(void);
+static void Cmd_hitanimation(void);
+static void Cmd_getmoneyreward(void);
+static void Cmd_unknown_5E(void);
+static void Cmd_swapattackerwithtarget(void);
+static void Cmd_incrementgamestat(void);
+static void Cmd_drawpartystatussummary(void);
+static void Cmd_hidepartystatussummary(void);
+static void Cmd_jumptocalledmove(void);
+static void Cmd_statusanimation(void);
+static void Cmd_status2animation(void);
+static void Cmd_chosenstatusanimation(void);
+static void Cmd_yesnobox(void);
+static void Cmd_cancelallactions(void);
+static void Cmd_adjustsetdamage(void);
+static void Cmd_removeitem(void);
+static void Cmd_atknameinbuff1(void);
+static void Cmd_drawlvlupbox(void);
+static void Cmd_resetsentmonsvalue(void);
+static void Cmd_setatktoplayer0(void);
+static void Cmd_makevisible(void);
+static void Cmd_recordlastability(void);
+static void Cmd_buffermovetolearn(void);
+static void Cmd_jumpifplayerran(void);
+static void Cmd_hpthresholds(void);
+static void Cmd_hpthresholds2(void);
+static void Cmd_useitemonopponent(void);
+static void Cmd_various(void);
+static void Cmd_setprotectlike(void);
+static void Cmd_faintifabilitynotdamp(void);
+static void Cmd_setatkhptozero(void);
+static void Cmd_jumpifnexttargetvalid(void);
+static void Cmd_tryhealhalfhealth(void);
+static void Cmd_trymirrormove(void);
+static void Cmd_setrain(void);
+static void Cmd_setreflect(void);
+static void Cmd_setseeded(void);
+static void Cmd_manipulatedamage(void);
+static void Cmd_trysetrest(void);
+static void Cmd_jumpifnotfirstturn(void);
+static void Cmd_nop(void);
+static void Cmd_jumpifcantmakeasleep(void);
+static void Cmd_stockpile(void);
+static void Cmd_stockpiletobasedamage(void);
+static void Cmd_stockpiletohpheal(void);
+static void Cmd_negativedamage(void);
+static void Cmd_statbuffchange(void);
+static void Cmd_normalisebuffs(void);
+static void Cmd_setbide(void);
+static void Cmd_confuseifrepeatingattackends(void);
+static void Cmd_setmultihitcounter(void);
+static void Cmd_initmultihitstring(void);
+static void Cmd_forcerandomswitch(void);
+static void Cmd_tryconversiontypechange(void);
+static void Cmd_givepaydaymoney(void);
+static void Cmd_setlightscreen(void);
+static void Cmd_tryKO(void);
+static void Cmd_damagetohalftargethp(void);
+static void Cmd_setsandstorm(void);
+static void Cmd_weatherdamage(void);
+static void Cmd_tryinfatuating(void);
+static void Cmd_updatestatusicon(void);
+static void Cmd_setmist(void);
+static void Cmd_setfocusenergy(void);
+static void Cmd_transformdataexecution(void);
+static void Cmd_setsubstitute(void);
+static void Cmd_mimicattackcopy(void);
+static void Cmd_metronome(void);
+static void Cmd_dmgtolevel(void);
+static void Cmd_psywavedamageeffect(void);
+static void Cmd_counterdamagecalculator(void);
+static void Cmd_mirrorcoatdamagecalculator(void);
+static void Cmd_disablelastusedattack(void);
+static void Cmd_trysetencore(void);
+static void Cmd_painsplitdmgcalc(void);
+static void Cmd_settypetorandomresistance(void);
+static void Cmd_setalwayshitflag(void);
+static void Cmd_copymovepermanently(void);
+static void Cmd_trychoosesleeptalkmove(void);
+static void Cmd_setdestinybond(void);
+static void Cmd_trysetdestinybondtohappen(void);
+static void Cmd_remaininghptopower(void);
+static void Cmd_tryspiteppreduce(void);
+static void Cmd_healpartystatus(void);
+static void Cmd_cursetarget(void);
+static void Cmd_trysetspikes(void);
+static void Cmd_setforesight(void);
+static void Cmd_trysetperishsong(void);
+static void Cmd_rolloutdamagecalculation(void);
+static void Cmd_jumpifconfusedandstatmaxed(void);
+static void Cmd_furycuttercalc(void);
+static void Cmd_happinesstodamagecalculation(void);
+static void Cmd_presentdamagecalculation(void);
+static void Cmd_setsafeguard(void);
+static void Cmd_magnitudedamagecalculation(void);
+static void Cmd_jumpifnopursuitswitchdmg(void);
+static void Cmd_setsunny(void);
+static void Cmd_maxattackhalvehp(void);
+static void Cmd_copyfoestats(void);
+static void Cmd_rapidspinfree(void);
+static void Cmd_setdefensecurlbit(void);
+static void Cmd_recoverbasedonsunlight(void);
+static void Cmd_hiddenpowercalc(void);
+static void Cmd_selectfirstvalidtarget(void);
+static void Cmd_trysetfutureattack(void);
+static void Cmd_trydobeatup(void);
+static void Cmd_setsemiinvulnerablebit(void);
+static void Cmd_clearsemiinvulnerablebit(void);
+static void Cmd_setminimize(void);
+static void Cmd_sethail(void);
+static void Cmd_jumpifattackandspecialattackcannotfall(void);
+static void Cmd_setforcedtarget(void);
+static void Cmd_setcharge(void);
+static void Cmd_callterrainattack(void);
+static void Cmd_cureifburnedparalysedorpoisoned(void);
+static void Cmd_settorment(void);
+static void Cmd_jumpifnodamage(void);
+static void Cmd_settaunt(void);
+static void Cmd_trysethelpinghand(void);
+static void Cmd_tryswapitems(void);
+static void Cmd_trycopyability(void);
+static void Cmd_trywish(void);
+static void Cmd_trysetroots(void);
+static void Cmd_doubledamagedealtifdamaged(void);
+static void Cmd_setyawn(void);
+static void Cmd_setdamagetohealthdifference(void);
+static void Cmd_scaledamagebyhealthratio(void);
+static void Cmd_tryswapabilities(void);
+static void Cmd_tryimprison(void);
+static void Cmd_trysetgrudge(void);
+static void Cmd_weightdamagecalculation(void);
+static void Cmd_assistattackselect(void);
+static void Cmd_trysetmagiccoat(void);
+static void Cmd_trysetsnatch(void);
+static void Cmd_trygetintimidatetarget(void);
+static void Cmd_switchoutabilities(void);
+static void Cmd_jumpifhasnohp(void);
+static void Cmd_getsecretpowereffect(void);
+static void Cmd_pickup(void);
+static void Cmd_docastformchangeanimation(void);
+static void Cmd_trycastformdatachange(void);
+static void Cmd_settypebasedhalvers(void);
+static void Cmd_setweatherballtype(void);
+static void Cmd_tryrecycleitem(void);
+static void Cmd_settypetoterrain(void);
+static void Cmd_pursuitrelated(void);
+static void Cmd_snatchsetbattlers(void);
+static void Cmd_removelightscreenreflect(void);
+static void Cmd_handleballthrow(void);
+static void Cmd_givecaughtmon(void);
+static void Cmd_trysetcaughtmondexflags(void);
+static void Cmd_displaydexinfo(void);
+static void Cmd_trygivecaughtmonnick(void);
+static void Cmd_subattackerhpbydmg(void);
+static void Cmd_removeattackerstatus1(void);
+static void Cmd_finishaction(void);
+static void Cmd_finishturn(void);
+static void Cmd_trainerslideout(void);
void (* const gBattleScriptingCommandsTable[])(void) =
{
- atk00_attackcanceler,
- atk01_accuracycheck,
- atk02_attackstring,
- atk03_ppreduce,
- atk04_critcalc,
- atk05_damagecalc,
- atk06_typecalc,
- atk07_adjustnormaldamage,
- atk08_adjustnormaldamage2,
- atk09_attackanimation,
- atk0A_waitanimation,
- atk0B_healthbarupdate,
- atk0C_datahpupdate,
- atk0D_critmessage,
- atk0E_effectivenesssound,
- atk0F_resultmessage,
- atk10_printstring,
- atk11_printselectionstring,
- atk12_waitmessage,
- atk13_printfromtable,
- atk14_printselectionstringfromtable,
- atk15_seteffectwithchance,
- atk16_seteffectprimary,
- atk17_seteffectsecondary,
- atk18_clearstatusfromeffect,
- atk19_tryfaintmon,
- atk1A_dofaintanimation,
- atk1B_cleareffectsonfaint,
- atk1C_jumpifstatus,
- atk1D_jumpifstatus2,
- atk1E_jumpifability,
- atk1F_jumpifsideaffecting,
- atk20_jumpifstat,
- atk21_jumpifstatus3condition,
- atk22_jumpiftype,
- atk23_getexp,
- atk24,
- atk25_movevaluescleanup,
- atk26_setmultihit,
- atk27_decrementmultihit,
- atk28_goto,
- atk29_jumpifbyte,
- atk2A_jumpifhalfword,
- atk2B_jumpifword,
- atk2C_jumpifarrayequal,
- atk2D_jumpifarraynotequal,
- atk2E_setbyte,
- atk2F_addbyte,
- atk30_subbyte,
- atk31_copyarray,
- atk32_copyarraywithindex,
- atk33_orbyte,
- atk34_orhalfword,
- atk35_orword,
- atk36_bicbyte,
- atk37_bichalfword,
- atk38_bicword,
- atk39_pause,
- atk3A_waitstate,
- atk3B_healthbar_update,
- atk3C_return,
- atk3D_end,
- atk3E_end2,
- atk3F_end3,
- atk40_jumpifaffectedbyprotect,
- atk41_call,
- atk42_jumpiftype2,
- atk43_jumpifabilitypresent,
- atk44_endselectionscript,
- atk45_playanimation,
- atk46_playanimation2,
- atk47_setgraphicalstatchangevalues,
- atk48_playstatchangeanimation,
- atk49_moveend,
- atk4A_typecalc2,
- atk4B_returnatktoball,
- atk4C_getswitchedmondata,
- atk4D_switchindataupdate,
- atk4E_switchinanim,
- atk4F_jumpifcantswitch,
- atk50_openpartyscreen,
- atk51_switchhandleorder,
- atk52_switchineffects,
- atk53_trainerslidein,
- atk54_playse,
- atk55_fanfare,
- atk56_playfaintcry,
- atk57,
- atk58_returntoball,
- atk59_handlelearnnewmove,
- atk5A_yesnoboxlearnmove,
- atk5B_yesnoboxstoplearningmove,
- atk5C_hitanimation,
- atk5D_getmoneyreward,
- atk5E,
- atk5F_swapattackerwithtarget,
- atk60_incrementgamestat,
- atk61_drawpartystatussummary,
- atk62_hidepartystatussummary,
- atk63_jumptocalledmove,
- atk64_statusanimation,
- atk65_status2animation,
- atk66_chosenstatusanimation,
- atk67_yesnobox,
- atk68_cancelallactions,
- atk69_adjustsetdamage,
- atk6A_removeitem,
- atk6B_atknameinbuff1,
- atk6C_drawlvlupbox,
- atk6D_resetsentmonsvalue,
- atk6E_setatktoplayer0,
- atk6F_makevisible,
- atk70_recordlastability,
- atk71_buffermovetolearn,
- atk72_jumpifplayerran,
- atk73_hpthresholds,
- atk74_hpthresholds2,
- atk75_useitemonopponent,
- atk76_various,
- atk77_setprotectlike,
- atk78_faintifabilitynotdamp,
- atk79_setatkhptozero,
- atk7A_jumpifnexttargetvalid,
- atk7B_tryhealhalfhealth,
- atk7C_trymirrormove,
- atk7D_setrain,
- atk7E_setreflect,
- atk7F_setseeded,
- atk80_manipulatedamage,
- atk81_trysetrest,
- atk82_jumpifnotfirstturn,
- atk83_nop,
- atk84_jumpifcantmakeasleep,
- atk85_stockpile,
- atk86_stockpiletobasedamage,
- atk87_stockpiletohpheal,
- atk88_negativedamage,
- atk89_statbuffchange,
- atk8A_normalisebuffs,
- atk8B_setbide,
- atk8C_confuseifrepeatingattackends,
- atk8D_setmultihitcounter,
- atk8E_initmultihitstring,
- atk8F_forcerandomswitch,
- atk90_tryconversiontypechange,
- atk91_givepaydaymoney,
- atk92_setlightscreen,
- atk93_tryKO,
- atk94_damagetohalftargethp,
- atk95_setsandstorm,
- atk96_weatherdamage,
- atk97_tryinfatuating,
- atk98_updatestatusicon,
- atk99_setmist,
- atk9A_setfocusenergy,
- atk9B_transformdataexecution,
- atk9C_setsubstitute,
- atk9D_mimicattackcopy,
- atk9E_metronome,
- atk9F_dmgtolevel,
- atkA0_psywavedamageeffect,
- atkA1_counterdamagecalculator,
- atkA2_mirrorcoatdamagecalculator,
- atkA3_disablelastusedattack,
- atkA4_trysetencore,
- atkA5_painsplitdmgcalc,
- atkA6_settypetorandomresistance,
- atkA7_setalwayshitflag,
- atkA8_copymovepermanently,
- atkA9_trychoosesleeptalkmove,
- atkAA_setdestinybond,
- atkAB_trysetdestinybondtohappen,
- atkAC_remaininghptopower,
- atkAD_tryspiteppreduce,
- atkAE_healpartystatus,
- atkAF_cursetarget,
- atkB0_trysetspikes,
- atkB1_setforesight,
- atkB2_trysetperishsong,
- atkB3_rolloutdamagecalculation,
- atkB4_jumpifconfusedandstatmaxed,
- atkB5_furycuttercalc,
- atkB6_happinesstodamagecalculation,
- atkB7_presentdamagecalculation,
- atkB8_setsafeguard,
- atkB9_magnitudedamagecalculation,
- atkBA_jumpifnopursuitswitchdmg,
- atkBB_setsunny,
- atkBC_maxattackhalvehp,
- atkBD_copyfoestats,
- atkBE_rapidspinfree,
- atkBF_setdefensecurlbit,
- atkC0_recoverbasedonsunlight,
- atkC1_hiddenpowercalc,
- atkC2_selectfirstvalidtarget,
- atkC3_trysetfutureattack,
- atkC4_trydobeatup,
- atkC5_setsemiinvulnerablebit,
- atkC6_clearsemiinvulnerablebit,
- atkC7_setminimize,
- atkC8_sethail,
- atkC9_jumpifattackandspecialattackcannotfall,
- atkCA_setforcedtarget,
- atkCB_setcharge,
- atkCC_callterrainattack,
- atkCD_cureifburnedparalysedorpoisoned,
- atkCE_settorment,
- atkCF_jumpifnodamage,
- atkD0_settaunt,
- atkD1_trysethelpinghand,
- atkD2_tryswapitems,
- atkD3_trycopyability,
- atkD4_trywish,
- atkD5_trysetroots,
- atkD6_doubledamagedealtifdamaged,
- atkD7_setyawn,
- atkD8_setdamagetohealthdifference,
- atkD9_scaledamagebyhealthratio,
- atkDA_tryswapabilities,
- atkDB_tryimprison,
- atkDC_trysetgrudge,
- atkDD_weightdamagecalculation,
- atkDE_assistattackselect,
- atkDF_trysetmagiccoat,
- atkE0_trysetsnatch,
- atkE1_trygetintimidatetarget,
- atkE2_switchoutabilities,
- atkE3_jumpifhasnohp,
- atkE4_getsecretpowereffect,
- atkE5_pickup,
- atkE6_docastformchangeanimation,
- atkE7_trycastformdatachange,
- atkE8_settypebasedhalvers,
- atkE9_setweatherballtype,
- atkEA_tryrecycleitem,
- atkEB_settypetoterrain,
- atkEC_pursuitrelated,
- atkEF_snatchsetbattlers,
- atkEE_removelightscreenreflect,
- atkEF_handleballthrow,
- atkF0_givecaughtmon,
- atkF1_trysetcaughtmondexflags,
- atkF2_displaydexinfo,
- atkF3_trygivecaughtmonnick,
- atkF4_subattackerhpbydmg,
- atkF5_removeattackerstatus1,
- atkF6_finishaction,
- atkF7_finishturn,
- atkF8_trainerslideout
+ Cmd_attackcanceler, //0x0
+ Cmd_accuracycheck, //0x1
+ Cmd_attackstring, //0x2
+ Cmd_ppreduce, //0x3
+ Cmd_critcalc, //0x4
+ Cmd_damagecalc, //0x5
+ Cmd_typecalc, //0x6
+ Cmd_adjustnormaldamage, //0x7
+ Cmd_adjustnormaldamage2, //0x8
+ Cmd_attackanimation, //0x9
+ Cmd_waitanimation, //0xA
+ Cmd_healthbarupdate, //0xB
+ Cmd_datahpupdate, //0xC
+ Cmd_critmessage, //0xD
+ Cmd_effectivenesssound, //0xE
+ Cmd_resultmessage, //0xF
+ Cmd_printstring, //0x10
+ Cmd_printselectionstring, //0x11
+ Cmd_waitmessage, //0x12
+ Cmd_printfromtable, //0x13
+ Cmd_printselectionstringfromtable, //0x14
+ Cmd_seteffectwithchance, //0x15
+ Cmd_seteffectprimary, //0x16
+ Cmd_seteffectsecondary, //0x17
+ Cmd_clearstatusfromeffect, //0x18
+ Cmd_tryfaintmon, //0x19
+ Cmd_dofaintanimation, //0x1A
+ Cmd_cleareffectsonfaint, //0x1B
+ Cmd_jumpifstatus, //0x1C
+ Cmd_jumpifstatus2, //0x1D
+ Cmd_jumpifability, //0x1E
+ Cmd_jumpifsideaffecting, //0x1F
+ Cmd_jumpifstat, //0x20
+ Cmd_jumpifstatus3condition, //0x21
+ Cmd_jumpiftype, //0x22
+ Cmd_getexp, //0x23
+ Cmd_unknown_24, //0x24
+ Cmd_movevaluescleanup, //0x25
+ Cmd_setmultihit, //0x26
+ Cmd_decrementmultihit, //0x27
+ Cmd_goto, //0x28
+ Cmd_jumpifbyte, //0x29
+ Cmd_jumpifhalfword, //0x2A
+ Cmd_jumpifword, //0x2B
+ Cmd_jumpifarrayequal, //0x2C
+ Cmd_jumpifarraynotequal, //0x2D
+ Cmd_setbyte, //0x2E
+ Cmd_addbyte, //0x2F
+ Cmd_subbyte, //0x30
+ Cmd_copyarray, //0x31
+ Cmd_copyarraywithindex, //0x32
+ Cmd_orbyte, //0x33
+ Cmd_orhalfword, //0x34
+ Cmd_orword, //0x35
+ Cmd_bicbyte, //0x36
+ Cmd_bichalfword, //0x37
+ Cmd_bicword, //0x38
+ Cmd_pause, //0x39
+ Cmd_waitstate, //0x3A
+ Cmd_healthbar_update, //0x3B
+ Cmd_return, //0x3C
+ Cmd_end, //0x3D
+ Cmd_end2, //0x3E
+ Cmd_end3, //0x3F
+ Cmd_jumpifaffectedbyprotect, //0x40
+ Cmd_call, //0x41
+ Cmd_jumpiftype2, //0x42
+ Cmd_jumpifabilitypresent, //0x43
+ Cmd_endselectionscript, //0x44
+ Cmd_playanimation, //0x45
+ Cmd_playanimation2, //0x46
+ Cmd_setgraphicalstatchangevalues, //0x47
+ Cmd_playstatchangeanimation, //0x48
+ Cmd_moveend, //0x49
+ Cmd_typecalc2, //0x4A
+ Cmd_returnatktoball, //0x4B
+ Cmd_getswitchedmondata, //0x4C
+ Cmd_switchindataupdate, //0x4D
+ Cmd_switchinanim, //0x4E
+ Cmd_jumpifcantswitch, //0x4F
+ Cmd_openpartyscreen, //0x50
+ Cmd_switchhandleorder, //0x51
+ Cmd_switchineffects, //0x52
+ Cmd_trainerslidein, //0x53
+ Cmd_playse, //0x54
+ Cmd_fanfare, //0x55
+ Cmd_playfaintcry, //0x56
+ Cmd_unknown_57, //0x57
+ Cmd_returntoball, //0x58
+ Cmd_handlelearnnewmove, //0x59
+ Cmd_yesnoboxlearnmove, //0x5A
+ Cmd_yesnoboxstoplearningmove, //0x5B
+ Cmd_hitanimation, //0x5C
+ Cmd_getmoneyreward, //0x5D
+ Cmd_unknown_5E, //0x5E
+ Cmd_swapattackerwithtarget, //0x5F
+ Cmd_incrementgamestat, //0x60
+ Cmd_drawpartystatussummary, //0x61
+ Cmd_hidepartystatussummary, //0x62
+ Cmd_jumptocalledmove, //0x63
+ Cmd_statusanimation, //0x64
+ Cmd_status2animation, //0x65
+ Cmd_chosenstatusanimation, //0x66
+ Cmd_yesnobox, //0x67
+ Cmd_cancelallactions, //0x68
+ Cmd_adjustsetdamage, //0x69
+ Cmd_removeitem, //0x6A
+ Cmd_atknameinbuff1, //0x6B
+ Cmd_drawlvlupbox, //0x6C
+ Cmd_resetsentmonsvalue, //0x6D
+ Cmd_setatktoplayer0, //0x6E
+ Cmd_makevisible, //0x6F
+ Cmd_recordlastability, //0x70
+ Cmd_buffermovetolearn, //0x71
+ Cmd_jumpifplayerran, //0x72
+ Cmd_hpthresholds, //0x73
+ Cmd_hpthresholds2, //0x74
+ Cmd_useitemonopponent, //0x75
+ Cmd_various, //0x76
+ Cmd_setprotectlike, //0x77
+ Cmd_faintifabilitynotdamp, //0x78
+ Cmd_setatkhptozero, //0x79
+ Cmd_jumpifnexttargetvalid, //0x7A
+ Cmd_tryhealhalfhealth, //0x7B
+ Cmd_trymirrormove, //0x7C
+ Cmd_setrain, //0x7D
+ Cmd_setreflect, //0x7E
+ Cmd_setseeded, //0x7F
+ Cmd_manipulatedamage, //0x80
+ Cmd_trysetrest, //0x81
+ Cmd_jumpifnotfirstturn, //0x82
+ Cmd_nop, //0x83
+ Cmd_jumpifcantmakeasleep, //0x84
+ Cmd_stockpile, //0x85
+ Cmd_stockpiletobasedamage, //0x86
+ Cmd_stockpiletohpheal, //0x87
+ Cmd_negativedamage, //0x88
+ Cmd_statbuffchange, //0x89
+ Cmd_normalisebuffs, //0x8A
+ Cmd_setbide, //0x8B
+ Cmd_confuseifrepeatingattackends, //0x8C
+ Cmd_setmultihitcounter, //0x8D
+ Cmd_initmultihitstring, //0x8E
+ Cmd_forcerandomswitch, //0x8F
+ Cmd_tryconversiontypechange, //0x90
+ Cmd_givepaydaymoney, //0x91
+ Cmd_setlightscreen, //0x92
+ Cmd_tryKO, //0x93
+ Cmd_damagetohalftargethp, //0x94
+ Cmd_setsandstorm, //0x95
+ Cmd_weatherdamage, //0x96
+ Cmd_tryinfatuating, //0x97
+ Cmd_updatestatusicon, //0x98
+ Cmd_setmist, //0x99
+ Cmd_setfocusenergy, //0x9A
+ Cmd_transformdataexecution, //0x9B
+ Cmd_setsubstitute, //0x9C
+ Cmd_mimicattackcopy, //0x9D
+ Cmd_metronome, //0x9E
+ Cmd_dmgtolevel, //0x9F
+ Cmd_psywavedamageeffect, //0xA0
+ Cmd_counterdamagecalculator, //0xA1
+ Cmd_mirrorcoatdamagecalculator, //0xA2
+ Cmd_disablelastusedattack, //0xA3
+ Cmd_trysetencore, //0xA4
+ Cmd_painsplitdmgcalc, //0xA5
+ Cmd_settypetorandomresistance, //0xA6
+ Cmd_setalwayshitflag, //0xA7
+ Cmd_copymovepermanently, //0xA8
+ Cmd_trychoosesleeptalkmove, //0xA9
+ Cmd_setdestinybond, //0xAA
+ Cmd_trysetdestinybondtohappen, //0xAB
+ Cmd_remaininghptopower, //0xAC
+ Cmd_tryspiteppreduce, //0xAD
+ Cmd_healpartystatus, //0xAE
+ Cmd_cursetarget, //0xAF
+ Cmd_trysetspikes, //0xB0
+ Cmd_setforesight, //0xB1
+ Cmd_trysetperishsong, //0xB2
+ Cmd_rolloutdamagecalculation, //0xB3
+ Cmd_jumpifconfusedandstatmaxed, //0xB4
+ Cmd_furycuttercalc, //0xB5
+ Cmd_happinesstodamagecalculation, //0xB6
+ Cmd_presentdamagecalculation, //0xB7
+ Cmd_setsafeguard, //0xB8
+ Cmd_magnitudedamagecalculation, //0xB9
+ Cmd_jumpifnopursuitswitchdmg, //0xBA
+ Cmd_setsunny, //0xBB
+ Cmd_maxattackhalvehp, //0xBC
+ Cmd_copyfoestats, //0xBD
+ Cmd_rapidspinfree, //0xBE
+ Cmd_setdefensecurlbit, //0xBF
+ Cmd_recoverbasedonsunlight, //0xC0
+ Cmd_hiddenpowercalc, //0xC1
+ Cmd_selectfirstvalidtarget, //0xC2
+ Cmd_trysetfutureattack, //0xC3
+ Cmd_trydobeatup, //0xC4
+ Cmd_setsemiinvulnerablebit, //0xC5
+ Cmd_clearsemiinvulnerablebit, //0xC6
+ Cmd_setminimize, //0xC7
+ Cmd_sethail, //0xC8
+ Cmd_jumpifattackandspecialattackcannotfall, //0xC9
+ Cmd_setforcedtarget, //0xCA
+ Cmd_setcharge, //0xCB
+ Cmd_callterrainattack, //0xCC
+ Cmd_cureifburnedparalysedorpoisoned, //0xCD
+ Cmd_settorment, //0xCE
+ Cmd_jumpifnodamage, //0xCF
+ Cmd_settaunt, //0xD0
+ Cmd_trysethelpinghand, //0xD1
+ Cmd_tryswapitems, //0xD2
+ Cmd_trycopyability, //0xD3
+ Cmd_trywish, //0xD4
+ Cmd_trysetroots, //0xD5
+ Cmd_doubledamagedealtifdamaged, //0xD6
+ Cmd_setyawn, //0xD7
+ Cmd_setdamagetohealthdifference, //0xD8
+ Cmd_scaledamagebyhealthratio, //0xD9
+ Cmd_tryswapabilities, //0xDA
+ Cmd_tryimprison, //0xDB
+ Cmd_trysetgrudge, //0xDC
+ Cmd_weightdamagecalculation, //0xDD
+ Cmd_assistattackselect, //0xDE
+ Cmd_trysetmagiccoat, //0xDF
+ Cmd_trysetsnatch, //0xE0
+ Cmd_trygetintimidatetarget, //0xE1
+ Cmd_switchoutabilities, //0xE2
+ Cmd_jumpifhasnohp, //0xE3
+ Cmd_getsecretpowereffect, //0xE4
+ Cmd_pickup, //0xE5
+ Cmd_docastformchangeanimation, //0xE6
+ Cmd_trycastformdatachange, //0xE7
+ Cmd_settypebasedhalvers, //0xE8
+ Cmd_setweatherballtype, //0xE9
+ Cmd_tryrecycleitem, //0xEA
+ Cmd_settypetoterrain, //0xEB
+ Cmd_pursuitrelated, //0xEC
+ Cmd_snatchsetbattlers, //0xED
+ Cmd_removelightscreenreflect, //0xEE
+ Cmd_handleballthrow, //0xEF
+ Cmd_givecaughtmon, //0xF0
+ Cmd_trysetcaughtmondexflags, //0xF1
+ Cmd_displaydexinfo, //0xF2
+ Cmd_trygivecaughtmonnick, //0xF3
+ Cmd_subattackerhpbydmg, //0xF4
+ Cmd_removeattackerstatus1, //0xF5
+ Cmd_finishaction, //0xF6
+ Cmd_finishturn, //0xF7
+ Cmd_trainerslideout //0xF8
};
struct StatFractions
@@ -729,10 +730,10 @@ static const u8 sRubyLevelUpStatBoxStats[] =
static const struct OamData sOamData_MonIconOnLvlUpBox =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -917,7 +918,7 @@ static const u8 sUnknown_0831C4F8[] =
0x03, 0x00, 0x00, 0x00
};
-static void atk00_attackcanceler(void)
+static void Cmd_attackcanceler(void)
{
s32 i;
@@ -1029,7 +1030,7 @@ static void JumpIfMoveFailed(u8 adder, u16 move)
gBattlescriptCurrInstr = BS_ptr;
}
-static void atk40_jumpifaffectedbyprotect(void)
+static void Cmd_jumpifaffectedbyprotect(void)
{
if (DEFENDER_IS_PROTECTED)
{
@@ -1101,7 +1102,7 @@ static bool8 AccuracyCalcHelper(u16 move)
return FALSE;
}
-static void atk01_accuracycheck(void)
+static void Cmd_accuracycheck(void)
{
u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
@@ -1193,7 +1194,7 @@ static void atk01_accuracycheck(void)
}
}
-static void atk02_attackstring(void)
+static void Cmd_attackstring(void)
{
if (gBattleControllerExecFlags)
return;
@@ -1206,7 +1207,7 @@ static void atk02_attackstring(void)
gBattleCommunication[MSG_DISPLAY] = 0;
}
-static void atk03_ppreduce(void)
+static void Cmd_ppreduce(void)
{
s32 ppToDeduct = 1;
@@ -1253,7 +1254,7 @@ static void atk03_ppreduce(void)
gBattlescriptCurrInstr++;
}
-static void atk04_critcalc(void)
+static void Cmd_critcalc(void)
{
u8 holdEffect;
u16 item, critChance;
@@ -1290,7 +1291,7 @@ static void atk04_critcalc(void)
gBattlescriptCurrInstr++;
}
-static void atk05_damagecalc(void)
+static void Cmd_damagecalc(void)
{
u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)];
gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
@@ -1355,7 +1356,7 @@ static void ModulateDmgByType(u8 multiplier)
}
}
-static void atk06_typecalc(void)
+static void Cmd_typecalc(void)
{
s32 i = 0;
u8 moveType;
@@ -1657,7 +1658,7 @@ static void Unused_ApplyRandomDmgMultiplier(void)
ApplyRandomDmgMultiplier();
}
-static void atk07_adjustnormaldamage(void)
+static void Cmd_adjustnormaldamage(void)
{
u8 holdEffect, param;
@@ -1681,32 +1682,25 @@ static void atk07_adjustnormaldamage(void)
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
}
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- goto END;
- if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBattlerTarget].endured
- && !gSpecialStatuses[gBattlerTarget].focusBanded)
- goto END;
-
- if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- goto END;
-
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
-
- if (gProtectStructs[gBattlerTarget].endured)
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
{
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
}
-
- END:
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr++;
}
-static void atk08_adjustnormaldamage2(void) // The same as 0x7 except it doesn't check for false swipe move effect.
+static void Cmd_adjustnormaldamage2(void) // The same as adjustnormaldamage except it doesn't check for false swipe move effect.
{
u8 holdEffect, param;
@@ -1730,30 +1724,25 @@ static void atk08_adjustnormaldamage2(void) // The same as 0x7 except it doesn't
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
}
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- goto END;
- if (!gProtectStructs[gBattlerTarget].endured && !gSpecialStatuses[gBattlerTarget].focusBanded)
- goto END;
- if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- goto END;
-
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
-
- if (gProtectStructs[gBattlerTarget].endured)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
{
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
}
-
- END:
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr++;
}
-static void atk09_attackanimation(void)
+static void Cmd_attackanimation(void)
{
if (gBattleControllerExecFlags)
return;
@@ -1807,13 +1796,13 @@ static void atk09_attackanimation(void)
}
}
-static void atk0A_waitanimation(void)
+static void Cmd_waitanimation(void)
{
if (gBattleControllerExecFlags == 0)
gBattlescriptCurrInstr++;
}
-static void atk0B_healthbarupdate(void)
+static void Cmd_healthbarupdate(void)
{
if (gBattleControllerExecFlags)
return;
@@ -1849,7 +1838,7 @@ static void atk0B_healthbarupdate(void)
gBattlescriptCurrInstr += 2;
}
-static void atk0C_datahpupdate(void)
+static void Cmd_datahpupdate(void)
{
u32 moveType;
@@ -1975,7 +1964,7 @@ static void atk0C_datahpupdate(void)
gBattlescriptCurrInstr += 2;
}
-static void atk0D_critmessage(void)
+static void Cmd_critmessage(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -1988,7 +1977,7 @@ static void atk0D_critmessage(void)
}
}
-static void atk0E_effectivenesssound(void)
+static void Cmd_effectivenesssound(void)
{
if (gBattleControllerExecFlags)
return;
@@ -2035,7 +2024,7 @@ static void atk0E_effectivenesssound(void)
gBattlescriptCurrInstr++;
}
-static void atk0F_resultmessage(void)
+static void Cmd_resultmessage(void)
{
u32 stringId = 0;
@@ -2124,7 +2113,7 @@ static void atk0F_resultmessage(void)
gBattlescriptCurrInstr++;
}
-static void atk10_printstring(void)
+static void Cmd_printstring(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -2135,7 +2124,7 @@ static void atk10_printstring(void)
}
}
-static void atk11_printselectionstring(void)
+static void Cmd_printselectionstring(void)
{
gActiveBattler = gBattlerAttacker;
@@ -2146,7 +2135,7 @@ static void atk11_printselectionstring(void)
gBattleCommunication[MSG_DISPLAY] = 1;
}
-static void atk12_waitmessage(void)
+static void Cmd_waitmessage(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -2167,7 +2156,7 @@ static void atk12_waitmessage(void)
}
}
-static void atk13_printfromtable(void)
+static void Cmd_printfromtable(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -2181,7 +2170,7 @@ static void atk13_printfromtable(void)
}
}
-static void atk14_printselectionstringfromtable(void)
+static void Cmd_printselectionstringfromtable(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -2893,7 +2882,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MOVE_EFFECT_BYTE] = 0;
}
-static void atk15_seteffectwithchance(void)
+static void Cmd_seteffectwithchance(void)
{
u32 percentChance;
@@ -2926,17 +2915,17 @@ static void atk15_seteffectwithchance(void)
gBattleScripting.multihitMoveEffect = 0;
}
-static void atk16_seteffectprimary(void)
+static void Cmd_seteffectprimary(void)
{
SetMoveEffect(TRUE, 0);
}
-static void atk17_seteffectsecondary(void)
+static void Cmd_seteffectsecondary(void)
{
SetMoveEffect(FALSE, 0);
}
-static void atk18_clearstatusfromeffect(void)
+static void Cmd_clearstatusfromeffect(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
@@ -2950,7 +2939,7 @@ static void atk18_clearstatusfromeffect(void)
gBattleScripting.multihitMoveEffect = 0;
}
-static void atk19_tryfaintmon(void)
+static void Cmd_tryfaintmon(void)
{
const u8 *BS_ptr;
@@ -3037,7 +3026,7 @@ static void atk19_tryfaintmon(void)
}
}
-static void atk1A_dofaintanimation(void)
+static void Cmd_dofaintanimation(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -3048,7 +3037,7 @@ static void atk1A_dofaintanimation(void)
}
}
-static void atk1B_cleareffectsonfaint(void)
+static void Cmd_cleareffectsonfaint(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -3066,7 +3055,7 @@ static void atk1B_cleareffectsonfaint(void)
}
}
-static void atk1C_jumpifstatus(void)
+static void Cmd_jumpifstatus(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
@@ -3078,7 +3067,7 @@ static void atk1C_jumpifstatus(void)
gBattlescriptCurrInstr += 10;
}
-static void atk1D_jumpifstatus2(void)
+static void Cmd_jumpifstatus2(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
@@ -3090,7 +3079,7 @@ static void atk1D_jumpifstatus2(void)
gBattlescriptCurrInstr += 10;
}
-static void atk1E_jumpifability(void)
+static void Cmd_jumpifability(void)
{
u8 battlerId;
u8 ability = gBattlescriptCurrInstr[2];
@@ -3137,7 +3126,7 @@ static void atk1E_jumpifability(void)
}
}
-static void atk1F_jumpifsideaffecting(void)
+static void Cmd_jumpifsideaffecting(void)
{
u8 side;
u16 flags;
@@ -3157,7 +3146,7 @@ static void atk1F_jumpifsideaffecting(void)
gBattlescriptCurrInstr += 8;
}
-static void atk20_jumpifstat(void)
+static void Cmd_jumpifstat(void)
{
u8 ret = 0;
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
@@ -3197,7 +3186,7 @@ static void atk20_jumpifstat(void)
gBattlescriptCurrInstr += 9;
}
-static void atk21_jumpifstatus3condition(void)
+static void Cmd_jumpifstatus3condition(void)
{
u32 flags;
const u8 *jumpPtr;
@@ -3222,7 +3211,7 @@ static void atk21_jumpifstatus3condition(void)
}
}
-static void atk22_jumpiftype(void)
+static void Cmd_jumpiftype(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u8 type = gBattlescriptCurrInstr[2];
@@ -3234,7 +3223,7 @@ static void atk22_jumpiftype(void)
gBattlescriptCurrInstr += 7;
}
-static void atk23_getexp(void)
+static void Cmd_getexp(void)
{
u16 item;
s32 i; // also used as stringId
@@ -3246,7 +3235,7 @@ static void atk23_getexp(void)
gBattlerFainted = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
sentIn = gSentPokesToOpponent[(gBattlerFainted & 2) >> 1];
- switch (gBattleScripting.atk23_state)
+ switch (gBattleScripting.getexpState)
{
case 0: // check if should receive exp at all
if (GetBattlerSide(gBattlerFainted) != B_SIDE_OPPONENT || (gBattleTypeFlags &
@@ -3258,11 +3247,11 @@ static void atk23_getexp(void)
| BATTLE_TYPE_BATTLE_TOWER
| BATTLE_TYPE_EREADER_TRAINER)))
{
- gBattleScripting.atk23_state = 6; // goto last case
+ gBattleScripting.getexpState = 6; // goto last case
}
else
{
- gBattleScripting.atk23_state++;
+ gBattleScripting.getexpState++;
gBattleStruct->givenExpMons |= gBitTable[gBattlerPartyIndexes[gBattlerFainted]];
}
break;
@@ -3309,7 +3298,7 @@ static void atk23_getexp(void)
gExpShareExp = 0;
}
- gBattleScripting.atk23_state++;
+ gBattleScripting.getexpState++;
gBattleStruct->expGetterMonId = 0;
gBattleStruct->sentInPokes = sentIn;
}
@@ -3327,13 +3316,13 @@ static void atk23_getexp(void)
if (holdEffect != HOLD_EFFECT_EXP_SHARE && !(gBattleStruct->sentInPokes & 1))
{
*(&gBattleStruct->sentInPokes) >>= 1;
- gBattleScripting.atk23_state = 5;
+ gBattleScripting.getexpState = 5;
gBattleMoveDamage = 0; // used for exp
}
else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_LEVEL) == MAX_LEVEL)
{
*(&gBattleStruct->sentInPokes) >>= 1;
- gBattleScripting.atk23_state = 5;
+ gBattleScripting.getexpState = 5;
gBattleMoveDamage = 0; // used for exp
}
else
@@ -3405,7 +3394,7 @@ static void atk23_getexp(void)
MonGainEVs(&gPlayerParty[gBattleStruct->expGetterMonId], gBattleMons[gBattlerFainted].species);
}
gBattleStruct->sentInPokes >>= 1;
- gBattleScripting.atk23_state++;
+ gBattleScripting.getexpState++;
}
}
break;
@@ -3426,7 +3415,7 @@ static void atk23_getexp(void)
BtlController_EmitExpUpdate(0, gBattleStruct->expGetterMonId, gBattleMoveDamage);
MarkBattlerForControllerExec(gActiveBattler);
}
- gBattleScripting.atk23_state++;
+ gBattleScripting.getexpState++;
}
break;
case 4: // lvl up if necessary
@@ -3476,27 +3465,27 @@ static void atk23_getexp(void)
gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_SPATK);
}
- gBattleScripting.atk23_state = 5;
+ gBattleScripting.getexpState = 5;
}
else
{
gBattleMoveDamage = 0;
- gBattleScripting.atk23_state = 5;
+ gBattleScripting.getexpState = 5;
}
}
break;
case 5: // looper increment
if (gBattleMoveDamage) // there is exp to give, goto case 3 that gives exp
{
- gBattleScripting.atk23_state = 3;
+ gBattleScripting.getexpState = 3;
}
else
{
gBattleStruct->expGetterMonId++;
if (gBattleStruct->expGetterMonId <= 5)
- gBattleScripting.atk23_state = 2; // loop again
+ gBattleScripting.getexpState = 2; // loop again
else
- gBattleScripting.atk23_state = 6; // we're done
+ gBattleScripting.getexpState = 6; // we're done
}
break;
case 6: // increment instruction
@@ -3512,7 +3501,7 @@ static void atk23_getexp(void)
}
#ifdef NONMATCHING
-static void atk24(void)
+static void Cmd_unknown_24(void)
{
u16 HP_count = 0;
s32 i;
@@ -3595,7 +3584,7 @@ static void atk24(void)
}
#else
NAKED
-static void atk24(void)
+static void Cmd_unknown_24(void)
{
asm("\n\
.syntax unified\n\
@@ -3900,19 +3889,19 @@ static void MoveValuesCleanUp(void)
gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT);
}
-static void atk25_movevaluescleanup(void)
+static void Cmd_movevaluescleanup(void)
{
MoveValuesCleanUp();
gBattlescriptCurrInstr += 1;
}
-static void atk26_setmultihit(void)
+static void Cmd_setmultihit(void)
{
gMultiHitCounter = gBattlescriptCurrInstr[1];
gBattlescriptCurrInstr += 2;
}
-static void atk27_decrementmultihit(void)
+static void Cmd_decrementmultihit(void)
{
if (--gMultiHitCounter == 0)
gBattlescriptCurrInstr += 5;
@@ -3920,12 +3909,12 @@ static void atk27_decrementmultihit(void)
gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
}
-static void atk28_goto(void)
+static void Cmd_goto(void)
{
gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
}
-static void atk29_jumpifbyte(void)
+static void Cmd_jumpifbyte(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
const u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2);
@@ -3963,7 +3952,7 @@ static void atk29_jumpifbyte(void)
}
}
-static void atk2A_jumpifhalfword(void)
+static void Cmd_jumpifhalfword(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
const u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2);
@@ -4001,7 +3990,7 @@ static void atk2A_jumpifhalfword(void)
}
}
-static void atk2B_jumpifword(void)
+static void Cmd_jumpifword(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
const u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2);
@@ -4039,7 +4028,7 @@ static void atk2B_jumpifword(void)
}
}
-static void atk2C_jumpifarrayequal(void)
+static void Cmd_jumpifarrayequal(void)
{
const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
@@ -4061,7 +4050,7 @@ static void atk2C_jumpifarrayequal(void)
gBattlescriptCurrInstr = jumpPtr;
}
-static void atk2D_jumpifarraynotequal(void)
+static void Cmd_jumpifarraynotequal(void)
{
u8 equalBytes = 0;
const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -4085,7 +4074,7 @@ static void atk2D_jumpifarraynotequal(void)
gBattlescriptCurrInstr += 14;
}
-static void atk2E_setbyte(void)
+static void Cmd_setbyte(void)
{
u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte = gBattlescriptCurrInstr[5];
@@ -4093,21 +4082,21 @@ static void atk2E_setbyte(void)
gBattlescriptCurrInstr += 6;
}
-static void atk2F_addbyte(void)
+static void Cmd_addbyte(void)
{
u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte += gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
-static void atk30_subbyte(void)
+static void Cmd_subbyte(void)
{
u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte -= gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
-static void atk31_copyarray(void)
+static void Cmd_copyarray(void)
{
u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
@@ -4122,7 +4111,7 @@ static void atk31_copyarray(void)
gBattlescriptCurrInstr += 10;
}
-static void atk32_copyarraywithindex(void)
+static void Cmd_copyarraywithindex(void)
{
u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
@@ -4138,14 +4127,14 @@ static void atk32_copyarraywithindex(void)
gBattlescriptCurrInstr += 14;
}
-static void atk33_orbyte(void)
+static void Cmd_orbyte(void)
{
u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte |= gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
-static void atk34_orhalfword(void)
+static void Cmd_orhalfword(void)
{
u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
@@ -4154,7 +4143,7 @@ static void atk34_orhalfword(void)
gBattlescriptCurrInstr += 7;
}
-static void atk35_orword(void)
+static void Cmd_orword(void)
{
u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
@@ -4163,14 +4152,14 @@ static void atk35_orword(void)
gBattlescriptCurrInstr += 9;
}
-static void atk36_bicbyte(void)
+static void Cmd_bicbyte(void)
{
u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte &= ~(gBattlescriptCurrInstr[5]);
gBattlescriptCurrInstr += 6;
}
-static void atk37_bichalfword(void)
+static void Cmd_bichalfword(void)
{
u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
@@ -4179,7 +4168,7 @@ static void atk37_bichalfword(void)
gBattlescriptCurrInstr += 7;
}
-static void atk38_bicword(void)
+static void Cmd_bicword(void)
{
u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
@@ -4188,7 +4177,7 @@ static void atk38_bicword(void)
gBattlescriptCurrInstr += 9;
}
-static void atk39_pause(void)
+static void Cmd_pause(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -4201,13 +4190,13 @@ static void atk39_pause(void)
}
}
-static void atk3A_waitstate(void)
+static void Cmd_waitstate(void)
{
if (gBattleControllerExecFlags == 0)
gBattlescriptCurrInstr++;
}
-static void atk3B_healthbar_update(void)
+static void Cmd_healthbar_update(void)
{
if (gBattlescriptCurrInstr[1] == BS_TARGET)
gActiveBattler = gBattlerTarget;
@@ -4219,12 +4208,12 @@ static void atk3B_healthbar_update(void)
gBattlescriptCurrInstr += 2;
}
-static void atk3C_return(void)
+static void Cmd_return(void)
{
BattleScriptPop();
}
-static void atk3D_end(void)
+static void Cmd_end(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
BattleArena_AddSkillPoints(gBattlerAttacker);
@@ -4234,13 +4223,13 @@ static void atk3D_end(void)
gCurrentActionFuncId = B_ACTION_TRY_FINISH;
}
-static void atk3E_end2(void)
+static void Cmd_end2(void)
{
gActiveBattler = 0;
gCurrentActionFuncId = B_ACTION_TRY_FINISH;
}
-static void atk3F_end3(void) // pops the main function stack
+static void Cmd_end3(void) // pops the main function stack
{
BattleScriptPop();
if (gBattleResources->battleCallbackStack->size != 0)
@@ -4248,13 +4237,13 @@ static void atk3F_end3(void) // pops the main function stack
gBattleMainFunc = gBattleResources->battleCallbackStack->function[gBattleResources->battleCallbackStack->size];
}
-static void atk41_call(void)
+static void Cmd_call(void)
{
BattleScriptPush(gBattlescriptCurrInstr + 5);
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
-static void atk42_jumpiftype2(void)
+static void Cmd_jumpiftype2(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
@@ -4264,7 +4253,7 @@ static void atk42_jumpiftype2(void)
gBattlescriptCurrInstr += 7;
}
-static void atk43_jumpifabilitypresent(void)
+static void Cmd_jumpifabilitypresent(void)
{
if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0))
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
@@ -4272,12 +4261,12 @@ static void atk43_jumpifabilitypresent(void)
gBattlescriptCurrInstr += 6;
}
-static void atk44_endselectionscript(void)
+static void Cmd_endselectionscript(void)
{
*(gBattlerAttacker + gBattleStruct->selectionScriptFinished) = TRUE;
}
-static void atk45_playanimation(void)
+static void Cmd_playanimation(void)
{
const u16* argumentPtr;
@@ -4318,7 +4307,7 @@ static void atk45_playanimation(void)
}
}
-static void atk46_playanimation2(void) // animation Id is stored in the first pointer
+static void Cmd_playanimation2(void) // animation Id is stored in the first pointer
{
const u16* argumentPtr;
const u8* animationIdPtr;
@@ -4360,7 +4349,7 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po
}
}
-static void atk47_setgraphicalstatchangevalues(void)
+static void Cmd_setgraphicalstatchangevalues(void)
{
u8 value = 0;
switch (GET_STAT_BUFF_VALUE2(gBattleScripting.statChanger))
@@ -4383,7 +4372,7 @@ static void atk47_setgraphicalstatchangevalues(void)
gBattlescriptCurrInstr++;
}
-static void atk48_playstatchangeanimation(void)
+static void Cmd_playstatchangeanimation(void)
{
u32 currStat = 0;
u16 statAnimId = 0;
@@ -4393,10 +4382,10 @@ static void atk48_playstatchangeanimation(void)
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
statsToCheck = gBattlescriptCurrInstr[2];
- if (gBattlescriptCurrInstr[3] & ATK48_STAT_NEGATIVE) // goes down
+ if (gBattlescriptCurrInstr[3] & STAT_CHANGE_NEGATIVE) // goes down
{
s16 startingStatAnimId;
- if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO)
startingStatAnimId = STAT_ANIM_MINUS2 - 1;
else
startingStatAnimId = STAT_ANIM_MINUS1 - 1;
@@ -4405,7 +4394,7 @@ static void atk48_playstatchangeanimation(void)
{
if (statsToCheck & 1)
{
- if (gBattlescriptCurrInstr[3] & ATK48_DONT_CHECK_LOWER)
+ if (gBattlescriptCurrInstr[3] & STAT_CHANGE_CANT_PREVENT)
{
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
{
@@ -4431,7 +4420,7 @@ static void atk48_playstatchangeanimation(void)
if (changeableStatsCount > 1) // more than one stat, so the color is gray
{
- if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO)
statAnimId = STAT_ANIM_MULTIPLE_MINUS2;
else
statAnimId = STAT_ANIM_MULTIPLE_MINUS1;
@@ -4440,7 +4429,7 @@ static void atk48_playstatchangeanimation(void)
else // goes up
{
s16 startingStatAnimId;
- if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO)
startingStatAnimId = STAT_ANIM_PLUS2 - 1;
else
startingStatAnimId = STAT_ANIM_PLUS1 - 1;
@@ -4457,14 +4446,14 @@ static void atk48_playstatchangeanimation(void)
if (changeableStatsCount > 1) // more than one stat, so the color is gray
{
- if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ if (gBattlescriptCurrInstr[3] & STAT_CHANGE_BY_TWO)
statAnimId = STAT_ANIM_MULTIPLE_PLUS2;
else
statAnimId = STAT_ANIM_MULTIPLE_PLUS1;
}
}
- if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount < 2)
+ if (gBattlescriptCurrInstr[3] & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount < 2)
{
gBattlescriptCurrInstr += 4;
}
@@ -4472,7 +4461,7 @@ static void atk48_playstatchangeanimation(void)
{
BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId);
MarkBattlerForControllerExec(gActiveBattler);
- if (gBattlescriptCurrInstr[3] & ATK48_ONLY_MULTIPLE && changeableStatsCount > 1)
+ if (gBattlescriptCurrInstr[3] & STAT_CHANGE_MULTIPLE_STATS && changeableStatsCount > 1)
gBattleScripting.statAnimPlayed = TRUE;
gBattlescriptCurrInstr += 4;
}
@@ -4482,7 +4471,7 @@ static void atk48_playstatchangeanimation(void)
}
}
-static void atk49_moveend(void)
+static void Cmd_moveend(void)
{
s32 i;
bool32 effect = FALSE;
@@ -4510,9 +4499,9 @@ static void atk49_moveend(void)
do
{
- switch (gBattleScripting.atk49_state)
+ switch (gBattleScripting.moveendState)
{
- case ATK49_RAGE: // rage check
+ case MOVEEND_RAGE: // rage check
if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
@@ -4524,9 +4513,9 @@ static void atk49_moveend(void)
gBattlescriptCurrInstr = BattleScript_RageIsBuilding;
effect = TRUE;
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_DEFROST: // defrosting check
+ case MOVEEND_DEFROST: // defrosting check
if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE
&& gBattleMons[gBattlerTarget].hp != 0 && gBattlerAttacker != gBattlerTarget
&& gSpecialStatuses[gBattlerTarget].specialDmg
@@ -4540,53 +4529,52 @@ static void atk49_moveend(void)
gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
effect = TRUE;
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_SYNCHRONIZE_TARGET: // target synchronize
+ case MOVEEND_SYNCHRONIZE_TARGET: // target synchronize
if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBattlerTarget, 0, 0, 0))
effect = TRUE;
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_MOVE_END_ABILITIES: // Such as abilities activating on contact(Poison Spore, Rough Skin, etc.).
- if (AbilityBattleEffects(ABILITYEFFECT_MOVE_END, gBattlerTarget, 0, 0, 0))
+ case MOVEEND_ON_DAMAGE_ABILITIES: // Contact abilities and Color Change
+ if (AbilityBattleEffects(ABILITYEFFECT_ON_DAMAGE, gBattlerTarget, 0, 0, 0))
effect = TRUE;
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_STATUS_IMMUNITY_ABILITIES: // status immunities
+ case MOVEEND_IMMUNITY_ABILITIES: // status immunities
if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0))
effect = TRUE; // it loops through all battlers, so we increment after its done with all battlers
else
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_SYNCHRONIZE_ATTACKER: // attacker synchronize
+ case MOVEEND_SYNCHRONIZE_ATTACKER: // attacker synchronize
if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBattlerAttacker, 0, 0, 0))
effect = TRUE;
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_CHOICE_MOVE: // update choice band move
- if (!(gHitMarker & HITMARKER_OBEYS) || holdEffectAtk != HOLD_EFFECT_CHOICE_BAND
- || gChosenMove == MOVE_STRUGGLE || (*choicedMoveAtk != 0 && *choicedMoveAtk != 0xFFFF))
- goto LOOP;
- if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED))
- {
- gBattleScripting.atk49_state++;
- break;
- }
- *choicedMoveAtk = gChosenMove;
- LOOP:
+ case MOVEEND_CHOICE_MOVE: // update choice band move
+ if (gHitMarker & HITMARKER_OBEYS
+ && holdEffectAtk == HOLD_EFFECT_CHOICE_BAND
+ && gChosenMove != MOVE_STRUGGLE
+ && (*choicedMoveAtk == 0 || *choicedMoveAtk == 0xFFFF))
{
- for (i = 0; i < MAX_MON_MOVES; i++)
+ if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED))
{
- if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk)
- break;
+ ++gBattleScripting.moveendState;
+ break;
}
- if (i == MAX_MON_MOVES)
- *choicedMoveAtk = 0;
-
- gBattleScripting.atk49_state++;
+ *choicedMoveAtk = gChosenMove;
+ }
+ for (i = 0; i < MAX_MON_MOVES; ++i)
+ {
+ if (gBattleMons[gBattlerAttacker].moves[i] == *choicedMoveAtk)
+ break;
}
+ if (i == MAX_MON_MOVES)
+ *choicedMoveAtk = 0;
+ ++gBattleScripting.moveendState;
break;
- case ATK49_CHANGED_ITEMS: // changed held items
+ case MOVEEND_CHANGED_ITEMS: // changed held items
for (i = 0; i < gBattlersCount; i++)
{
u16* changedItem = &gBattleStruct->changedItems[i];
@@ -4596,32 +4584,32 @@ static void atk49_moveend(void)
*changedItem = 0;
}
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_ITEM_EFFECTS_ALL: // item effects for all battlers
+ case MOVEEND_ITEM_EFFECTS_ALL: // item effects for all battlers
if (ItemBattleEffects(ITEMEFFECT_MOVE_END, 0, FALSE))
effect = TRUE;
else
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_KINGSROCK_SHELLBELL: // king's rock and shell bell
+ case MOVEEND_KINGSROCK_SHELLBELL: // king's rock and shell bell
if (ItemBattleEffects(ITEMEFFECT_KINGSROCK_SHELLBELL, 0, FALSE))
effect = TRUE;
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_ATTACKER_INVISIBLE: // make attacker sprite invisible
+ case MOVEEND_ATTACKER_INVISIBLE: // make attacker sprite invisible
if (gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE)
&& gHitMarker & HITMARKER_NO_ANIMATIONS)
{
gActiveBattler = gBattlerAttacker;
BtlController_EmitSpriteInvisibility(0, TRUE);
MarkBattlerForControllerExec(gActiveBattler);
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
return;
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_ATTACKER_VISIBLE: // make attacker sprite visible
+ case MOVEEND_ATTACKER_VISIBLE: // make attacker sprite visible
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT
|| !(gStatuses3[gBattlerAttacker] & (STATUS3_SEMI_INVULNERABLE))
|| WasUnableToUseMove(gBattlerAttacker))
@@ -4631,12 +4619,12 @@ static void atk49_moveend(void)
MarkBattlerForControllerExec(gActiveBattler);
gStatuses3[gBattlerAttacker] &= ~(STATUS3_SEMI_INVULNERABLE);
gSpecialStatuses[gBattlerAttacker].restoredBattlerSprite = 1;
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
return;
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_TARGET_VISIBLE: // make target sprite visible
+ case MOVEEND_TARGET_VISIBLE: // make target sprite visible
if (!gSpecialStatuses[gBattlerTarget].restoredBattlerSprite && gBattlerTarget < gBattlersCount
&& !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
{
@@ -4644,20 +4632,20 @@ static void atk49_moveend(void)
BtlController_EmitSpriteInvisibility(0, FALSE);
MarkBattlerForControllerExec(gActiveBattler);
gStatuses3[gBattlerTarget] &= ~(STATUS3_SEMI_INVULNERABLE);
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
return;
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_SUBSTITUTE: // update substitute
+ case MOVEEND_SUBSTITUTE: // update substitute
for (i = 0; i < gBattlersCount; i++)
{
if (gDisableStructs[i].substituteHP == 0)
gBattleMons[i].status2 &= ~(STATUS2_SUBSTITUTE);
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_UPDATE_LAST_MOVES:
+ case MOVEEND_UPDATE_LAST_MOVES:
if (gHitMarker & HITMARKER_SWAP_ATTACKER_TARGET)
{
gActiveBattler = gBattlerAttacker;
@@ -4704,9 +4692,9 @@ static void atk49_moveend(void)
gLastLandedMoves[gBattlerTarget] = 0xFFFF;
}
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_MIRROR_MOVE: // mirror move
+ case MOVEEND_MIRROR_MOVE: // mirror move
if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker])
&& gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS
&& gBattlerAttacker != gBattlerTarget && !(gHitMarker & HITMARKER_FAINTED(gBattlerTarget))
@@ -4725,9 +4713,9 @@ static void atk49_moveend(void)
attacker = gBattlerAttacker;
*(attacker * 2 + target * 8 + (u8*)(gBattleStruct->lastTakenMoveFrom) + 1) = gChosenMove >> 8;
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_NEXT_TARGET: // For moves hitting two opposing Pokemon.
+ case MOVEEND_NEXT_TARGET: // For moves hitting two opposing Pokemon.
if (!(gHitMarker & HITMARKER_UNABLE_TO_USE_MOVE) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE
&& !gProtectStructs[gBattlerAttacker].chargingTurn && gBattleMoves[gCurrentMove].target == MOVE_TARGET_BOTH
&& !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
@@ -4737,7 +4725,7 @@ static void atk49_moveend(void)
{
gBattlerTarget = battlerId;
gHitMarker |= HITMARKER_NO_ATTACKSTRING;
- gBattleScripting.atk49_state = 0;
+ gBattleScripting.moveendState = 0;
MoveValuesCleanUp();
BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]);
gBattlescriptCurrInstr = BattleScript_FlushMessageBox;
@@ -4748,24 +4736,24 @@ static void atk49_moveend(void)
gHitMarker |= HITMARKER_NO_ATTACKSTRING;
}
}
- gBattleScripting.atk49_state++;
+ gBattleScripting.moveendState++;
break;
- case ATK49_COUNT:
+ case MOVEEND_COUNT:
break;
}
if (arg1 == 1 && effect == FALSE)
- gBattleScripting.atk49_state = ATK49_COUNT;
- if (arg1 == 2 && arg2 == gBattleScripting.atk49_state)
- gBattleScripting.atk49_state = ATK49_COUNT;
+ gBattleScripting.moveendState = MOVEEND_COUNT;
+ if (arg1 == 2 && arg2 == gBattleScripting.moveendState)
+ gBattleScripting.moveendState = MOVEEND_COUNT;
- } while (gBattleScripting.atk49_state != ATK49_COUNT && effect == FALSE);
+ } while (gBattleScripting.moveendState != MOVEEND_COUNT && effect == FALSE);
- if (gBattleScripting.atk49_state == ATK49_COUNT && effect == FALSE)
+ if (gBattleScripting.moveendState == MOVEEND_COUNT && effect == FALSE)
gBattlescriptCurrInstr += 3;
}
-static void atk4A_typecalc2(void)
+static void Cmd_typecalc2(void)
{
u8 flags = 0;
s32 i = 0;
@@ -4860,7 +4848,7 @@ static void atk4A_typecalc2(void)
gBattlescriptCurrInstr++;
}
-static void atk4B_returnatktoball(void)
+static void Cmd_returnatktoball(void)
{
gActiveBattler = gBattlerAttacker;
if (!(gHitMarker & HITMARKER_FAINTED(gActiveBattler)))
@@ -4871,7 +4859,7 @@ static void atk4B_returnatktoball(void)
gBattlescriptCurrInstr++;
}
-static void atk4C_getswitchedmondata(void)
+static void Cmd_getswitchedmondata(void)
{
if (gBattleControllerExecFlags)
return;
@@ -4886,7 +4874,7 @@ static void atk4C_getswitchedmondata(void)
gBattlescriptCurrInstr += 2;
}
-static void atk4D_switchindataupdate(void)
+static void Cmd_switchindataupdate(void)
{
struct BattlePokemon oldData;
s32 i;
@@ -4939,7 +4927,7 @@ static void atk4D_switchindataupdate(void)
gBattlescriptCurrInstr += 2;
}
-static void atk4E_switchinanim(void)
+static void Cmd_switchinanim(void)
{
if (gBattleControllerExecFlags)
return;
@@ -4965,15 +4953,15 @@ static void atk4E_switchinanim(void)
BattleArena_InitPoints();
}
-static void atk4F_jumpifcantswitch(void)
+static void Cmd_jumpifcantswitch(void)
{
s32 i;
s32 lastMonId;
struct Pokemon *party;
- gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES));
+ gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(SWITCH_IGNORE_ESCAPE_PREVENTION));
- if (!(gBattlescriptCurrInstr[1] & ATK4F_DONT_CHECK_STATUSES)
+ if (!(gBattlescriptCurrInstr[1] & SWITCH_IGNORE_ESCAPE_PREVENTION)
&& ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
|| (gStatuses3[gActiveBattler] & STATUS3_ROOTED)))
{
@@ -5120,17 +5108,17 @@ static void atk4F_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);
}
-static void atk50_openpartyscreen(void)
+static void Cmd_openpartyscreen(void)
{
u32 flags;
u8 hitmarkerFaintBits;
@@ -5158,7 +5146,7 @@ static void atk50_openpartyscreen(void)
}
else if (!gSpecialStatuses[gActiveBattler].flag40)
{
- sub_804CF10(6);
+ sub_804CF10(PARTY_SIZE);
gSpecialStatuses[gActiveBattler].flag40 = 1;
}
}
@@ -5365,9 +5353,9 @@ static void atk50_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)
@@ -5388,7 +5376,7 @@ static void atk50_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;
@@ -5420,7 +5408,7 @@ static void atk50_openpartyscreen(void)
}
}
-static void atk51_switchhandleorder(void)
+static void Cmd_switchhandleorder(void)
{
s32 i;
if (gBattleControllerExecFlags)
@@ -5446,7 +5434,7 @@ static void atk51_switchhandleorder(void)
break;
case 1:
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- sub_803BDA0(gActiveBattler);
+ SwitchPartyOrder(gActiveBattler);
break;
case 2:
if (!(gBattleStruct->field_93 & gBitTable[gActiveBattler]))
@@ -5471,11 +5459,11 @@ static void atk51_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)
@@ -5487,7 +5475,7 @@ static void atk51_switchhandleorder(void)
gBattlescriptCurrInstr += 3;
}
-static void atk52_switchineffects(void)
+static void Cmd_switchineffects(void)
{
s32 i;
@@ -5569,7 +5557,7 @@ static void atk52_switchineffects(void)
}
}
-static void atk53_trainerslidein(void)
+static void Cmd_trainerslidein(void)
{
gActiveBattler = GetBattlerAtPosition(gBattlescriptCurrInstr[1]);
BtlController_EmitTrainerSlide(0);
@@ -5578,7 +5566,7 @@ static void atk53_trainerslidein(void)
gBattlescriptCurrInstr += 2;
}
-static void atk54_playse(void)
+static void Cmd_playse(void)
{
gActiveBattler = gBattlerAttacker;
BtlController_EmitPlaySE(0, T2_READ_16(gBattlescriptCurrInstr + 1));
@@ -5587,7 +5575,7 @@ static void atk54_playse(void)
gBattlescriptCurrInstr += 3;
}
-static void atk55_fanfare(void)
+static void Cmd_fanfare(void)
{
gActiveBattler = gBattlerAttacker;
BtlController_EmitPlayFanfareOrBGM(0, T2_READ_16(gBattlescriptCurrInstr + 1), FALSE);
@@ -5596,7 +5584,7 @@ static void atk55_fanfare(void)
gBattlescriptCurrInstr += 3;
}
-static void atk56_playfaintcry(void)
+static void Cmd_playfaintcry(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitFaintingCry(0);
@@ -5605,7 +5593,7 @@ static void atk56_playfaintcry(void)
gBattlescriptCurrInstr += 2;
}
-static void atk57(void)
+static void Cmd_unknown_57(void)
{
gActiveBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
BtlController_EmitCmd55(0, gBattleOutcome);
@@ -5614,7 +5602,7 @@ static void atk57(void)
gBattlescriptCurrInstr += 1;
}
-static void atk58_returntoball(void)
+static void Cmd_returntoball(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitReturnMonToBall(0, 1);
@@ -5623,20 +5611,20 @@ static void atk58_returntoball(void)
gBattlescriptCurrInstr += 2;
}
-static void atk59_handlelearnnewmove(void)
+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;
}
@@ -5647,7 +5635,7 @@ static void atk59_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)
{
@@ -5655,7 +5643,7 @@ static void atk59_handlelearnnewmove(void)
if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED))
{
- GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret);
+ GiveMoveToBattleMon(&gBattleMons[gActiveBattler], learnMove);
}
}
@@ -5663,7 +5651,7 @@ static void atk59_handlelearnnewmove(void)
}
}
-static void atk5A_yesnoboxlearnmove(void)
+static void Cmd_yesnoboxlearnmove(void)
{
gActiveBattler = 0;
@@ -5728,8 +5716,8 @@ static void atk5A_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;
}
@@ -5782,7 +5770,7 @@ static void atk5A_yesnoboxlearnmove(void)
}
}
-static void atk5B_yesnoboxstoplearningmove(void)
+static void Cmd_yesnoboxstoplearningmove(void)
{
switch (gBattleScripting.learnMoveState)
{
@@ -5829,7 +5817,7 @@ static void atk5B_yesnoboxstoplearningmove(void)
}
}
-static void atk5C_hitanimation(void)
+static void Cmd_hitanimation(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
@@ -5906,7 +5894,7 @@ static u32 GetTrainerMoneyToGive(u16 trainerId)
return moneyReward;
}
-static void atk5D_getmoneyreward(void)
+static void Cmd_getmoneyreward(void)
{
u32 moneyReward = GetTrainerMoneyToGive(gTrainerBattleOpponent_A);
if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
@@ -5918,7 +5906,7 @@ static void atk5D_getmoneyreward(void)
gBattlescriptCurrInstr++;
}
-static void atk5E(void)
+static void Cmd_unknown_5E(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
@@ -5945,7 +5933,7 @@ static void atk5E(void)
}
}
-static void atk5F_swapattackerwithtarget(void)
+static void Cmd_swapattackerwithtarget(void)
{
gActiveBattler = gBattlerAttacker;
gBattlerAttacker = gBattlerTarget;
@@ -5959,7 +5947,7 @@ static void atk5F_swapattackerwithtarget(void)
gBattlescriptCurrInstr++;
}
-static void atk60_incrementgamestat(void)
+static void Cmd_incrementgamestat(void)
{
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
IncrementGameStat(gBattlescriptCurrInstr[1]);
@@ -5967,7 +5955,7 @@ static void atk60_incrementgamestat(void)
gBattlescriptCurrInstr += 2;
}
-static void atk61_drawpartystatussummary(void)
+static void Cmd_drawpartystatussummary(void)
{
s32 i;
struct Pokemon *party;
@@ -6004,7 +5992,7 @@ static void atk61_drawpartystatussummary(void)
gBattlescriptCurrInstr += 2;
}
-static void atk62_hidepartystatussummary(void)
+static void Cmd_hidepartystatussummary(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitHidePartyStatusSummary(0);
@@ -6013,7 +6001,7 @@ static void atk62_hidepartystatussummary(void)
gBattlescriptCurrInstr += 2;
}
-static void atk63_jumptocalledmove(void)
+static void Cmd_jumptocalledmove(void)
{
if (gBattlescriptCurrInstr[1])
gCurrentMove = gCalledMove;
@@ -6023,7 +6011,7 @@ static void atk63_jumptocalledmove(void)
gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect];
}
-static void atk64_statusanimation(void)
+static void Cmd_statusanimation(void)
{
if (gBattleControllerExecFlags == 0)
{
@@ -6039,7 +6027,7 @@ static void atk64_statusanimation(void)
}
}
-static void atk65_status2animation(void)
+static void Cmd_status2animation(void)
{
u32 wantedToAnimate;
@@ -6058,7 +6046,7 @@ static void atk65_status2animation(void)
}
}
-static void atk66_chosenstatusanimation(void)
+static void Cmd_chosenstatusanimation(void)
{
u32 wantedStatus;
@@ -6077,7 +6065,7 @@ static void atk66_chosenstatusanimation(void)
}
}
-static void atk67_yesnobox(void)
+static void Cmd_yesnobox(void)
{
switch (gBattleCommunication[0])
{
@@ -6120,7 +6108,7 @@ static void atk67_yesnobox(void)
}
}
-static void atk68_cancelallactions(void)
+static void Cmd_cancelallactions(void)
{
s32 i;
@@ -6130,7 +6118,7 @@ static void atk68_cancelallactions(void)
gBattlescriptCurrInstr++;
}
-static void atk69_adjustsetdamage(void) // The same as 0x7, except there's no random damage multiplier.
+static void Cmd_adjustsetdamage(void) // The same as adjustnormaldamage, except there's no random damage multiplier.
{
u8 holdEffect, param;
@@ -6152,32 +6140,25 @@ static void atk69_adjustsetdamage(void) // The same as 0x7, except there's no ra
RecordItemEffectBattle(gBattlerTarget, holdEffect);
gSpecialStatuses[gBattlerTarget].focusBanded = 1;
}
- if (gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
- goto END;
- if (gBattleMoves[gCurrentMove].effect != EFFECT_FALSE_SWIPE && !gProtectStructs[gBattlerTarget].endured
- && !gSpecialStatuses[gBattlerTarget].focusBanded)
- goto END;
-
- if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- goto END;
-
- gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
-
- if (gProtectStructs[gBattlerTarget].endured)
- {
- gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
- }
- else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE)
+ && (gBattleMoves[gCurrentMove].effect == EFFECT_FALSE_SWIPE || gProtectStructs[gBattlerTarget].endured || gSpecialStatuses[gBattlerTarget].focusBanded)
+ && gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
{
- gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
- gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ gBattleMoveDamage = gBattleMons[gBattlerTarget].hp - 1;
+ if (gProtectStructs[gBattlerTarget].endured)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_ENDURED;
+ }
+ else if (gSpecialStatuses[gBattlerTarget].focusBanded)
+ {
+ gMoveResultFlags |= MOVE_RESULT_FOE_HUNG_ON;
+ gLastUsedItem = gBattleMons[gBattlerTarget].item;
+ }
}
-
- END:
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr++;
}
-static void atk6A_removeitem(void)
+static void Cmd_removeitem(void)
{
u16* usedHeldItem;
@@ -6193,35 +6174,35 @@ static void atk6A_removeitem(void)
gBattlescriptCurrInstr += 2;
}
-static void atk6B_atknameinbuff1(void)
+static void Cmd_atknameinbuff1(void)
{
PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, gBattlerPartyIndexes[gBattlerAttacker])
gBattlescriptCurrInstr++;
}
-static void atk6C_drawlvlupbox(void)
+static void Cmd_drawlvlupbox(void)
{
- if (gBattleScripting.atk6C_state == 0)
+ if (gBattleScripting.drawlvlupboxState == 0)
{
if (IsMonGettingExpSentOut())
- gBattleScripting.atk6C_state = 3;
+ gBattleScripting.drawlvlupboxState = 3;
else
- gBattleScripting.atk6C_state = 1;
+ gBattleScripting.drawlvlupboxState = 1;
}
- switch (gBattleScripting.atk6C_state)
+ switch (gBattleScripting.drawlvlupboxState)
{
case 1:
gBattle_BG2_Y = 0x60;
SetBgAttribute(2, BG_ATTR_PRIORITY, 0);
ShowBg(2);
sub_804F17C();
- gBattleScripting.atk6C_state = 2;
+ gBattleScripting.drawlvlupboxState = 2;
break;
case 2:
if (!sub_804F1CC())
- gBattleScripting.atk6C_state = 3;
+ gBattleScripting.drawlvlupboxState = 3;
break;
case 3:
gBattle_BG1_X = 0;
@@ -6231,20 +6212,20 @@ static void atk6C_drawlvlupbox(void)
ShowBg(0);
ShowBg(1);
HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80);
- gBattleScripting.atk6C_state = 4;
+ gBattleScripting.drawlvlupboxState = 4;
break;
case 4:
DrawLevelUpWindow1();
PutWindowTilemap(13);
CopyWindowToVram(13, 3);
- gBattleScripting.atk6C_state++;
+ gBattleScripting.drawlvlupboxState++;
break;
case 5:
case 7:
if (!IsDma3ManagerBusyWithBgCopy())
{
gBattle_BG1_Y = 0;
- gBattleScripting.atk6C_state++;
+ gBattleScripting.drawlvlupboxState++;
}
break;
case 6:
@@ -6253,7 +6234,7 @@ static void atk6C_drawlvlupbox(void)
PlaySE(SE_SELECT);
DrawLevelUpWindow2();
CopyWindowToVram(13, 2);
- gBattleScripting.atk6C_state++;
+ gBattleScripting.drawlvlupboxState++;
}
break;
case 8:
@@ -6261,7 +6242,7 @@ static void atk6C_drawlvlupbox(void)
{
PlaySE(SE_SELECT);
HandleBattleWindow(0x12, 7, 0x1D, 0x13, WINDOW_x80 | WINDOW_CLEAR);
- gBattleScripting.atk6C_state++;
+ gBattleScripting.drawlvlupboxState++;
}
break;
case 9:
@@ -6276,7 +6257,7 @@ static void atk6C_drawlvlupbox(void)
SetBgAttribute(2, BG_ATTR_PRIORITY, 2);
ShowBg(2);
- gBattleScripting.atk6C_state = 10;
+ gBattleScripting.drawlvlupboxState = 10;
}
break;
case 10:
@@ -6297,7 +6278,7 @@ static void DrawLevelUpWindow1(void)
u16 currStats[NUM_STATS];
GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
- DrawLevelUpWindowPg1(0xD, gBattleResources->beforeLvlUp->stats, currStats, 0xE, 0xD, 0xF);
+ DrawLevelUpWindowPg1(0xD, gBattleResources->beforeLvlUp->stats, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6);
}
static void DrawLevelUpWindow2(void)
@@ -6305,7 +6286,7 @@ static void DrawLevelUpWindow2(void)
u16 currStats[NUM_STATS];
GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], currStats);
- DrawLevelUpWindowPg2(0xD, currStats, 0xE, 0xD, 0xF);
+ DrawLevelUpWindowPg2(0xD, currStats, TEXT_DYNAMIC_COLOR_5, TEXT_DYNAMIC_COLOR_4, TEXT_DYNAMIC_COLOR_6);
}
static void sub_804F17C(void)
@@ -6474,19 +6455,19 @@ static bool32 IsMonGettingExpSentOut(void)
return FALSE;
}
-static void atk6D_resetsentmonsvalue(void)
+static void Cmd_resetsentmonsvalue(void)
{
ResetSentPokesToOpponentValue();
gBattlescriptCurrInstr++;
}
-static void atk6E_setatktoplayer0(void)
+static void Cmd_setatktoplayer0(void)
{
gBattlerAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
gBattlescriptCurrInstr++;
}
-static void atk6F_makevisible(void)
+static void Cmd_makevisible(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
BtlController_EmitSpriteInvisibility(0, FALSE);
@@ -6495,7 +6476,7 @@ static void atk6F_makevisible(void)
gBattlescriptCurrInstr += 2;
}
-static void atk70_recordlastability(void)
+static void Cmd_recordlastability(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
@@ -6507,13 +6488,13 @@ void BufferMoveToLearnIntoBattleTextBuff2(void)
PREPARE_MOVE_BUFFER(gBattleTextBuff2, gMoveToLearn);
}
-static void atk71_buffermovetolearn(void)
+static void Cmd_buffermovetolearn(void)
{
BufferMoveToLearnIntoBattleTextBuff2();
gBattlescriptCurrInstr++;
}
-static void atk72_jumpifplayerran(void)
+static void Cmd_jumpifplayerran(void)
{
if (TryRunFromBattle(gBattlerFainted))
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -6521,7 +6502,7 @@ static void atk72_jumpifplayerran(void)
gBattlescriptCurrInstr += 5;
}
-static void atk73_hpthresholds(void)
+static void Cmd_hpthresholds(void)
{
u8 opposingBank;
s32 result;
@@ -6548,7 +6529,7 @@ static void atk73_hpthresholds(void)
gBattlescriptCurrInstr += 2;
}
-static void atk74_hpthresholds2(void)
+static void Cmd_hpthresholds2(void)
{
u8 opposingBank;
s32 result;
@@ -6574,14 +6555,14 @@ static void atk74_hpthresholds2(void)
gBattlescriptCurrInstr += 2;
}
-static void atk75_useitemonopponent(void)
+static void Cmd_useitemonopponent(void)
{
gBattlerInMenuId = gBattlerAttacker;
PokemonUseItemEffects(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, 1);
gBattlescriptCurrInstr += 1;
}
-static void atk76_various(void)
+static void Cmd_various(void)
{
u8 side;
s32 i;
@@ -6760,7 +6741,7 @@ static void atk76_various(void)
gBattlescriptCurrInstr += 3;
}
-static void atk77_setprotectlike(void) // protect and endure
+static void Cmd_setprotectlike(void) // protect and endure
{
bool8 notLastTurn = TRUE;
u16 lastMove = gLastResultingMoves[gBattlerAttacker];
@@ -6795,7 +6776,7 @@ static void atk77_setprotectlike(void) // protect and endure
gBattlescriptCurrInstr++;
}
-static void atk78_faintifabilitynotdamp(void)
+static void Cmd_faintifabilitynotdamp(void)
{
if (gBattleControllerExecFlags)
return;
@@ -6830,7 +6811,7 @@ static void atk78_faintifabilitynotdamp(void)
}
}
-static void atk79_setatkhptozero(void)
+static void Cmd_setatkhptozero(void)
{
if (gBattleControllerExecFlags)
return;
@@ -6843,7 +6824,7 @@ static void atk79_setatkhptozero(void)
gBattlescriptCurrInstr++;
}
-static void atk7A_jumpifnexttargetvalid(void)
+static void Cmd_jumpifnexttargetvalid(void)
{
const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -6868,7 +6849,7 @@ static void atk7A_jumpifnexttargetvalid(void)
}
}
-static void atk7B_tryhealhalfhealth(void)
+static void Cmd_tryhealhalfhealth(void)
{
const u8* failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -6886,7 +6867,7 @@ static void atk7B_tryhealhalfhealth(void)
gBattlescriptCurrInstr += 6;
}
-static void atk7C_trymirrormove(void)
+static void Cmd_trymirrormove(void)
{
s32 validMovesCount;
s32 i;
@@ -6936,7 +6917,7 @@ static void atk7C_trymirrormove(void)
}
}
-static void atk7D_setrain(void)
+static void Cmd_setrain(void)
{
if (gBattleWeather & WEATHER_RAIN_ANY)
{
@@ -6952,7 +6933,7 @@ static void atk7D_setrain(void)
gBattlescriptCurrInstr++;
}
-static void atk7E_setreflect(void)
+static void Cmd_setreflect(void)
{
if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_REFLECT)
{
@@ -6973,7 +6954,7 @@ static void atk7E_setreflect(void)
gBattlescriptCurrInstr++;
}
-static void atk7F_setseeded(void)
+static void Cmd_setseeded(void)
{
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || gStatuses3[gBattlerTarget] & STATUS3_LEECHSEED)
{
@@ -6995,21 +6976,21 @@ static void atk7F_setseeded(void)
gBattlescriptCurrInstr++;
}
-static void atk80_manipulatedamage(void)
+static void Cmd_manipulatedamage(void)
{
switch (gBattlescriptCurrInstr[1])
{
- case ATK80_DMG_CHANGE_SIGN:
+ case DMG_CHANGE_SIGN:
gBattleMoveDamage *= -1;
break;
- case ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP:
+ case DMG_RECOIL_FROM_MISS:
gBattleMoveDamage /= 2;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
if ((gBattleMons[gBattlerTarget].maxHP / 2) < gBattleMoveDamage)
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP / 2;
break;
- case ATK80_DMG_DOUBLED:
+ case DMG_DOUBLED:
gBattleMoveDamage *= 2;
break;
}
@@ -7017,7 +6998,7 @@ static void atk80_manipulatedamage(void)
gBattlescriptCurrInstr += 2;
}
-static void atk81_trysetrest(void)
+static void Cmd_trysetrest(void)
{
const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
gActiveBattler = gBattlerTarget = gBattlerAttacker;
@@ -7041,7 +7022,7 @@ static void atk81_trysetrest(void)
}
}
-static void atk82_jumpifnotfirstturn(void)
+static void Cmd_jumpifnotfirstturn(void)
{
const u8* failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -7051,7 +7032,7 @@ static void atk82_jumpifnotfirstturn(void)
gBattlescriptCurrInstr = failJump;
}
-static void atk83_nop(void)
+static void Cmd_nop(void)
{
gBattlescriptCurrInstr++;
}
@@ -7083,7 +7064,7 @@ bool8 UproarWakeUpCheck(u8 battlerId)
return TRUE;
}
-static void atk84_jumpifcantmakeasleep(void)
+static void Cmd_jumpifcantmakeasleep(void)
{
const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -7105,7 +7086,7 @@ static void atk84_jumpifcantmakeasleep(void)
}
}
-static void atk85_stockpile(void)
+static void Cmd_stockpile(void)
{
if (gDisableStructs[gBattlerAttacker].stockpileCounter == 3)
{
@@ -7123,7 +7104,7 @@ static void atk85_stockpile(void)
gBattlescriptCurrInstr++;
}
-static void atk86_stockpiletobasedamage(void)
+static void Cmd_stockpiletobasedamage(void)
{
const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
@@ -7149,7 +7130,7 @@ static void atk86_stockpiletobasedamage(void)
}
}
-static void atk87_stockpiletohpheal(void)
+static void Cmd_stockpiletohpheal(void)
{
const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
@@ -7180,7 +7161,7 @@ static void atk87_stockpiletohpheal(void)
}
}
-static void atk88_negativedamage(void)
+static void Cmd_negativedamage(void)
{
gBattleMoveDamage = -(gHpDealt / 2);
if (gBattleMoveDamage == 0)
@@ -7189,8 +7170,8 @@ static void atk88_negativedamage(void)
gBattlescriptCurrInstr++;
}
-#define STAT_CHANGE_WORKED 0
-#define STAT_CHANGE_DIDNT_WORK 1
+#define STAT_BUFF_WORKED 0
+#define STAT_BUFF_DIDNT_WORK 1
static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
{
@@ -7209,9 +7190,9 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
certain++;
flags &= ~(MOVE_EFFECT_CERTAIN);
- if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED)
+ if (flags & STAT_BUFF_NOT_PROTECT_AFFECTED)
notProtectAffected++;
- flags &= ~(STAT_CHANGE_NOT_PROTECT_AFFECTED);
+ flags &= ~(STAT_BUFF_NOT_PROTECT_AFFECTED);
PREPARE_STAT_BUFFER(gBattleTextBuff1, statId)
@@ -7220,7 +7201,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
if (gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
&& !certain && gCurrentMove != MOVE_CURSE)
{
- if (flags == STAT_CHANGE_BS_PTR)
+ if (flags == STAT_BUFF_ALLOW_PTR)
{
if (gSpecialStatuses[gActiveBattler].statLowered)
{
@@ -7234,19 +7215,19 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
gSpecialStatuses[gActiveBattler].statLowered = 1;
}
}
- return STAT_CHANGE_DIDNT_WORK;
+ return STAT_BUFF_DIDNT_WORK;
}
else if (gCurrentMove != MOVE_CURSE
&& notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(0))
{
gBattlescriptCurrInstr = BattleScript_ButItFailed;
- return STAT_CHANGE_DIDNT_WORK;
+ return STAT_BUFF_DIDNT_WORK;
}
else if ((gBattleMons[gActiveBattler].ability == ABILITY_CLEAR_BODY
|| gBattleMons[gActiveBattler].ability == ABILITY_WHITE_SMOKE)
&& !certain && gCurrentMove != MOVE_CURSE)
{
- if (flags == STAT_CHANGE_BS_PTR)
+ if (flags == STAT_BUFF_ALLOW_PTR)
{
if (gSpecialStatuses[gActiveBattler].statLowered)
{
@@ -7262,12 +7243,12 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
gSpecialStatuses[gActiveBattler].statLowered = 1;
}
}
- return STAT_CHANGE_DIDNT_WORK;
+ return STAT_BUFF_DIDNT_WORK;
}
else if (gBattleMons[gActiveBattler].ability == ABILITY_KEEN_EYE
&& !certain && statId == STAT_ACC)
{
- if (flags == STAT_CHANGE_BS_PTR)
+ if (flags == STAT_BUFF_ALLOW_PTR)
{
BattleScriptPush(BS_ptr);
gBattleScripting.battler = gActiveBattler;
@@ -7275,12 +7256,12 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
gLastUsedAbility = gBattleMons[gActiveBattler].ability;
RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
}
- return STAT_CHANGE_DIDNT_WORK;
+ return STAT_BUFF_DIDNT_WORK;
}
else if (gBattleMons[gActiveBattler].ability == ABILITY_HYPER_CUTTER
&& !certain && statId == STAT_ATK)
{
- if (flags == STAT_CHANGE_BS_PTR)
+ if (flags == STAT_BUFF_ALLOW_PTR)
{
BattleScriptPush(BS_ptr);
gBattleScripting.battler = gActiveBattler;
@@ -7288,11 +7269,11 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
gLastUsedAbility = gBattleMons[gActiveBattler].ability;
RecordAbilityBattle(gActiveBattler, gLastUsedAbility);
}
- return STAT_CHANGE_DIDNT_WORK;
+ return STAT_BUFF_DIDNT_WORK;
}
else if (gBattleMons[gActiveBattler].ability == ABILITY_SHIELD_DUST && flags == 0)
{
- return STAT_CHANGE_DIDNT_WORK;
+ return STAT_BUFF_DIDNT_WORK;
}
else // try to decrease
{
@@ -7353,23 +7334,23 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
if (gBattleMons[gActiveBattler].statStages[statId] > 0xC)
gBattleMons[gActiveBattler].statStages[statId] = 0xC;
- if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_CHANGE_BS_PTR)
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_BUFF_ALLOW_PTR)
gMoveResultFlags |= MOVE_RESULT_MISSED;
- if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & STAT_CHANGE_BS_PTR))
- return STAT_CHANGE_DIDNT_WORK;
+ if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & STAT_BUFF_ALLOW_PTR))
+ return STAT_BUFF_DIDNT_WORK;
- return STAT_CHANGE_WORKED;
+ return STAT_BUFF_WORKED;
}
-static void atk89_statbuffchange(void)
+static void Cmd_statbuffchange(void)
{
const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
- if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_CHANGE_WORKED)
+ if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_BUFF_WORKED)
gBattlescriptCurrInstr += 6;
}
-static void atk8A_normalisebuffs(void) // haze
+static void Cmd_normalisebuffs(void) // haze
{
s32 i, j;
@@ -7382,7 +7363,7 @@ static void atk8A_normalisebuffs(void) // haze
gBattlescriptCurrInstr++;
}
-static void atk8B_setbide(void)
+static void Cmd_setbide(void)
{
gBattleMons[gBattlerAttacker].status2 |= STATUS2_MULTIPLETURNS;
gLockedMoves[gBattlerAttacker] = gCurrentMove;
@@ -7392,7 +7373,7 @@ static void atk8B_setbide(void)
gBattlescriptCurrInstr++;
}
-static void atk8C_confuseifrepeatingattackends(void)
+static void Cmd_confuseifrepeatingattackends(void)
{
if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE))
gBattleCommunication[MOVE_EFFECT_BYTE] = (MOVE_EFFECT_THRASH | MOVE_EFFECT_AFFECTS_USER);
@@ -7400,7 +7381,7 @@ static void atk8C_confuseifrepeatingattackends(void)
gBattlescriptCurrInstr++;
}
-static void atk8D_setmultihitcounter(void)
+static void Cmd_setmultihitcounter(void)
{
if (gBattlescriptCurrInstr[1])
{
@@ -7418,7 +7399,7 @@ static void atk8D_setmultihitcounter(void)
gBattlescriptCurrInstr += 2;
}
-static void atk8E_initmultihitstring(void)
+static void Cmd_initmultihitstring(void)
{
PREPARE_BYTE_NUMBER_BUFFER(gBattleScripting.multihitString, 1, 0)
@@ -7446,7 +7427,7 @@ static bool8 TryDoForceSwitchOut(void)
return TRUE;
}
-static void atk8F_forcerandomswitch(void)
+static void Cmd_forcerandomswitch(void)
{
s32 i;
s32 battler1PartyId = 0;
@@ -7586,19 +7567,19 @@ static void atk8F_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
@@ -7607,7 +7588,7 @@ static void atk8F_forcerandomswitch(void)
}
}
-static void atk90_tryconversiontypechange(void) // randomly changes user's type to one of its moves' type
+static void Cmd_tryconversiontypechange(void) // randomly changes user's type to one of its moves' type
{
u8 validMoves = 0;
u8 moveChecked;
@@ -7669,7 +7650,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
}
}
-static void atk91_givepaydaymoney(void)
+static void Cmd_givepaydaymoney(void)
{
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) && gPaydayMoney != 0)
{
@@ -7687,7 +7668,7 @@ static void atk91_givepaydaymoney(void)
}
}
-static void atk92_setlightscreen(void)
+static void Cmd_setlightscreen(void)
{
if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_LIGHTSCREEN)
{
@@ -7709,7 +7690,7 @@ static void atk92_setlightscreen(void)
gBattlescriptCurrInstr++;
}
-static void atk93_tryKO(void)
+static void Cmd_tryKO(void)
{
u8 holdEffect, param;
@@ -7795,7 +7776,7 @@ static void atk93_tryKO(void)
}
}
-static void atk94_damagetohalftargethp(void) // super fang
+static void Cmd_damagetohalftargethp(void) // super fang
{
gBattleMoveDamage = gBattleMons[gBattlerTarget].hp / 2;
if (gBattleMoveDamage == 0)
@@ -7804,7 +7785,7 @@ static void atk94_damagetohalftargethp(void) // super fang
gBattlescriptCurrInstr++;
}
-static void atk95_setsandstorm(void)
+static void Cmd_setsandstorm(void)
{
if (gBattleWeather & WEATHER_SANDSTORM_ANY)
{
@@ -7820,7 +7801,7 @@ static void atk95_setsandstorm(void)
gBattlescriptCurrInstr++;
}
-static void atk96_weatherdamage(void)
+static void Cmd_weatherdamage(void)
{
if (WEATHER_HAS_EFFECT)
{
@@ -7845,7 +7826,7 @@ static void atk96_weatherdamage(void)
gBattleMoveDamage = 0;
}
}
- if (gBattleWeather & WEATHER_HAIL)
+ if (gBattleWeather & WEATHER_HAIL_ANY)
{
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
&& !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
@@ -7872,7 +7853,7 @@ static void atk96_weatherdamage(void)
gBattlescriptCurrInstr++;
}
-static void atk97_tryinfatuating(void)
+static void Cmd_tryinfatuating(void)
{
struct Pokemon *monAttacker, *monTarget;
u16 speciesAttacker, speciesTarget;
@@ -7917,7 +7898,7 @@ static void atk97_tryinfatuating(void)
}
}
-static void atk98_updatestatusicon(void)
+static void Cmd_updatestatusicon(void)
{
if (gBattleControllerExecFlags)
return;
@@ -7950,7 +7931,7 @@ static void atk98_updatestatusicon(void)
}
}
-static void atk99_setmist(void)
+static void Cmd_setmist(void)
{
if (gSideTimers[GET_BATTLER_SIDE(gBattlerAttacker)].mistTimer)
{
@@ -7967,7 +7948,7 @@ static void atk99_setmist(void)
gBattlescriptCurrInstr++;
}
-static void atk9A_setfocusenergy(void)
+static void Cmd_setfocusenergy(void)
{
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY)
{
@@ -7982,7 +7963,7 @@ static void atk9A_setfocusenergy(void)
gBattlescriptCurrInstr++;
}
-static void atk9B_transformdataexecution(void)
+static void Cmd_transformdataexecution(void)
{
gChosenMove = 0xFFFF;
gBattlescriptCurrInstr++;
@@ -8026,7 +8007,7 @@ static void atk9B_transformdataexecution(void)
}
}
-static void atk9C_setsubstitute(void)
+static void Cmd_setsubstitute(void)
{
u32 hp = gBattleMons[gBattlerAttacker].maxHP / 4;
if (gBattleMons[gBattlerAttacker].maxHP / 4 == 0)
@@ -8062,7 +8043,7 @@ static bool8 IsMoveUncopyableByMimic(u16 move)
return (sMovesForbiddenToCopy[i] != MIMIC_FORBIDDEN_END);
}
-static void atk9D_mimicattackcopy(void)
+static void Cmd_mimicattackcopy(void)
{
gChosenMove = 0xFFFF;
@@ -8104,7 +8085,7 @@ static void atk9D_mimicattackcopy(void)
}
}
-static void atk9E_metronome(void)
+static void Cmd_metronome(void)
{
while (1)
{
@@ -8136,13 +8117,13 @@ static void atk9E_metronome(void)
}
}
-static void atk9F_dmgtolevel(void)
+static void Cmd_dmgtolevel(void)
{
gBattleMoveDamage = gBattleMons[gBattlerAttacker].level;
gBattlescriptCurrInstr++;
}
-static void atkA0_psywavedamageeffect(void)
+static void Cmd_psywavedamageeffect(void)
{
s32 randDamage;
@@ -8153,7 +8134,7 @@ static void atkA0_psywavedamageeffect(void)
gBattlescriptCurrInstr++;
}
-static void atkA1_counterdamagecalculator(void)
+static void Cmd_counterdamagecalculator(void)
{
u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].physicalBattlerId);
@@ -8178,7 +8159,7 @@ static void atkA1_counterdamagecalculator(void)
}
}
-static void atkA2_mirrorcoatdamagecalculator(void) // a copy of atkA1 with the physical -> special field changes
+static void Cmd_mirrorcoatdamagecalculator(void) // a copy of Cmd with the physical -> special field changes
{
u8 sideAttacker = GetBattlerSide(gBattlerAttacker);
u8 sideTarget = GetBattlerSide(gProtectStructs[gBattlerAttacker].specialBattlerId);
@@ -8201,7 +8182,7 @@ static void atkA2_mirrorcoatdamagecalculator(void) // a copy of atkA1 with the p
}
}
-static void atkA3_disablelastusedattack(void)
+static void Cmd_disablelastusedattack(void)
{
s32 i;
@@ -8226,7 +8207,7 @@ static void atkA3_disablelastusedattack(void)
}
}
-static void atkA4_trysetencore(void)
+static void Cmd_trysetencore(void)
{
s32 i;
@@ -8258,7 +8239,7 @@ static void atkA4_trysetencore(void)
}
}
-static void atkA5_painsplitdmgcalc(void)
+static void Cmd_painsplitdmgcalc(void)
{
if (!(gBattleMons[gBattlerTarget].status2 & STATUS2_SUBSTITUTE))
{
@@ -8282,7 +8263,7 @@ static void atkA5_painsplitdmgcalc(void)
}
}
-static void atkA6_settypetorandomresistance(void) // conversion 2
+static void Cmd_settypetorandomresistance(void) // conversion 2
{
if (gLastLandedMoves[gBattlerAttacker] == 0
|| gLastLandedMoves[gBattlerAttacker] == 0xFFFF)
@@ -8342,7 +8323,7 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
}
}
-static void atkA7_setalwayshitflag(void)
+static void Cmd_setalwayshitflag(void)
{
gStatuses3[gBattlerTarget] &= ~(STATUS3_ALWAYS_HITS);
gStatuses3[gBattlerTarget] |= 0x10;
@@ -8350,7 +8331,7 @@ static void atkA7_setalwayshitflag(void)
gBattlescriptCurrInstr++;
}
-static void atkA8_copymovepermanently(void) // sketch
+static void Cmd_copymovepermanently(void) // sketch
{
gChosenMove = 0xFFFF;
@@ -8445,7 +8426,7 @@ static u8 AttacksThisTurn(u8 battlerId, u16 move) // Note: returns 1 if it's a c
return 2;
}
-static void atkA9_trychoosesleeptalkmove(void)
+static void Cmd_trychoosesleeptalkmove(void)
{
s32 i;
u8 unusableMovesBits = 0;
@@ -8484,7 +8465,7 @@ static void atkA9_trychoosesleeptalkmove(void)
}
}
-static void atkAA_setdestinybond(void)
+static void Cmd_setdestinybond(void)
{
gBattleMons[gBattlerAttacker].status2 |= STATUS2_DESTINY_BOND;
gBattlescriptCurrInstr++;
@@ -8502,13 +8483,13 @@ static void TrySetDestinyBondToHappen(void)
}
}
-static void atkAB_trysetdestinybondtohappen(void)
+static void Cmd_trysetdestinybondtohappen(void)
{
TrySetDestinyBondToHappen();
gBattlescriptCurrInstr++;
}
-static void atkAC_remaininghptopower(void)
+static void Cmd_remaininghptopower(void)
{
s32 i;
s32 hpFraction = GetScaledHPFraction(gBattleMons[gBattlerAttacker].hp, gBattleMons[gBattlerAttacker].maxHP, 48);
@@ -8523,7 +8504,7 @@ static void atkAC_remaininghptopower(void)
gBattlescriptCurrInstr++;
}
-static void atkAD_tryspiteppreduce(void)
+static void Cmd_tryspiteppreduce(void)
{
if (gLastMoves[gBattlerTarget] != 0
&& gLastMoves[gBattlerTarget] != 0xFFFF)
@@ -8544,7 +8525,7 @@ static void atkAD_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)
@@ -8574,7 +8555,7 @@ static void atkAD_tryspiteppreduce(void)
}
}
-static void atkAE_healpartystatus(void)
+static void Cmd_healpartystatus(void)
{
u32 zero = 0;
u8 toHeal = 0;
@@ -8670,7 +8651,7 @@ static void atkAE_healpartystatus(void)
gBattlescriptCurrInstr++;
}
-static void atkAF_cursetarget(void)
+static void Cmd_cursetarget(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED)
{
@@ -8687,7 +8668,7 @@ static void atkAF_cursetarget(void)
}
}
-static void atkB0_trysetspikes(void)
+static void Cmd_trysetspikes(void)
{
u8 targetSide = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
@@ -8704,13 +8685,13 @@ static void atkB0_trysetspikes(void)
}
}
-static void atkB1_setforesight(void)
+static void Cmd_setforesight(void)
{
gBattleMons[gBattlerTarget].status2 |= STATUS2_FORESIGHT;
gBattlescriptCurrInstr++;
}
-static void atkB2_trysetperishsong(void)
+static void Cmd_trysetperishsong(void)
{
s32 i;
s32 notAffectedCount = 0;
@@ -8738,7 +8719,7 @@ static void atkB2_trysetperishsong(void)
gBattlescriptCurrInstr += 5;
}
-static void atkB3_rolloutdamagecalculation(void)
+static void Cmd_rolloutdamagecalculation(void)
{
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
@@ -8773,7 +8754,7 @@ static void atkB3_rolloutdamagecalculation(void)
}
}
-static void atkB4_jumpifconfusedandstatmaxed(void)
+static void Cmd_jumpifconfusedandstatmaxed(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION
&& gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 0xC)
@@ -8782,7 +8763,7 @@ static void atkB4_jumpifconfusedandstatmaxed(void)
gBattlescriptCurrInstr += 6;
}
-static void atkB5_furycuttercalc(void)
+static void Cmd_furycuttercalc(void)
{
if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
@@ -8805,7 +8786,7 @@ static void atkB5_furycuttercalc(void)
}
}
-static void atkB6_happinesstodamagecalculation(void)
+static void Cmd_happinesstodamagecalculation(void)
{
if (gBattleMoves[gCurrentMove].effect == EFFECT_RETURN)
gDynamicBasePower = 10 * (gBattleMons[gBattlerAttacker].friendship) / 25;
@@ -8815,7 +8796,7 @@ static void atkB6_happinesstodamagecalculation(void)
gBattlescriptCurrInstr++;
}
-static void atkB7_presentdamagecalculation(void)
+static void Cmd_presentdamagecalculation(void)
{
s32 rand = Random() & 0xFF;
@@ -8843,7 +8824,7 @@ static void atkB7_presentdamagecalculation(void)
}
}
-static void atkB8_setsafeguard(void)
+static void Cmd_setsafeguard(void)
{
if (gSideStatuses[GET_BATTLER_SIDE(gBattlerAttacker)] & SIDE_STATUS_SAFEGUARD)
{
@@ -8861,7 +8842,7 @@ static void atkB8_setsafeguard(void)
gBattlescriptCurrInstr++;
}
-static void atkB9_magnitudedamagecalculation(void)
+static void Cmd_magnitudedamagecalculation(void)
{
s32 magnitude = Random() % 100;
@@ -8915,7 +8896,7 @@ static void atkB9_magnitudedamagecalculation(void)
gBattlescriptCurrInstr++;
}
-static void atkBA_jumpifnopursuitswitchdmg(void)
+static void Cmd_jumpifnopursuitswitchdmg(void)
{
if (gMultiHitCounter == 1)
{
@@ -8959,7 +8940,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void)
}
}
-static void atkBB_setsunny(void)
+static void Cmd_setsunny(void)
{
if (gBattleWeather & WEATHER_SUN_ANY)
{
@@ -8976,7 +8957,7 @@ static void atkBB_setsunny(void)
gBattlescriptCurrInstr++;
}
-static void atkBC_maxattackhalvehp(void) // belly drum
+static void Cmd_maxattackhalvehp(void) // belly drum
{
u32 halfHp = gBattleMons[gBattlerAttacker].maxHP / 2;
@@ -8999,7 +8980,7 @@ static void atkBC_maxattackhalvehp(void) // belly drum
}
}
-static void atkBD_copyfoestats(void) // psych up
+static void Cmd_copyfoestats(void) // psych up
{
s32 i;
@@ -9011,7 +8992,7 @@ static void atkBD_copyfoestats(void) // psych up
gBattlescriptCurrInstr += 5; // Has an unused jump ptr(possibly for a failed attempt) parameter.
}
-static void atkBE_rapidspinfree(void)
+static void Cmd_rapidspinfree(void)
{
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_WRAPPED)
{
@@ -9048,13 +9029,13 @@ static void atkBE_rapidspinfree(void)
}
}
-static void atkBF_setdefensecurlbit(void)
+static void Cmd_setdefensecurlbit(void)
{
gBattleMons[gBattlerAttacker].status2 |= STATUS2_DEFENSE_CURL;
gBattlescriptCurrInstr++;
}
-static void atkC0_recoverbasedonsunlight(void)
+static void Cmd_recoverbasedonsunlight(void)
{
gBattlerTarget = gBattlerAttacker;
@@ -9079,7 +9060,7 @@ static void atkC0_recoverbasedonsunlight(void)
}
}
-static void atkC1_hiddenpowercalc(void)
+static void Cmd_hiddenpowercalc(void)
{
u8 powerBits;
u8 typeBits;
@@ -9108,7 +9089,7 @@ static void atkC1_hiddenpowercalc(void)
gBattlescriptCurrInstr++;
}
-static void atkC2_selectfirstvalidtarget(void)
+static void Cmd_selectfirstvalidtarget(void)
{
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
{
@@ -9120,7 +9101,7 @@ static void atkC2_selectfirstvalidtarget(void)
gBattlescriptCurrInstr++;
}
-static void atkC3_trysetfutureattack(void)
+static void Cmd_trysetfutureattack(void)
{
if (gWishFutureKnock.futureSightCounter[gBattlerTarget] != 0)
{
@@ -9148,7 +9129,7 @@ static void atkC3_trysetfutureattack(void)
}
}
-static void atkC4_trydobeatup(void)
+static void Cmd_trydobeatup(void)
{
struct Pokemon *party;
@@ -9195,7 +9176,7 @@ static void atkC4_trydobeatup(void)
}
}
-static void atkC5_setsemiinvulnerablebit(void)
+static void Cmd_setsemiinvulnerablebit(void)
{
switch (gCurrentMove)
{
@@ -9214,7 +9195,7 @@ static void atkC5_setsemiinvulnerablebit(void)
gBattlescriptCurrInstr++;
}
-static void atkC6_clearsemiinvulnerablebit(void)
+static void Cmd_clearsemiinvulnerablebit(void)
{
switch (gCurrentMove)
{
@@ -9233,7 +9214,7 @@ static void atkC6_clearsemiinvulnerablebit(void)
gBattlescriptCurrInstr++;
}
-static void atkC7_setminimize(void)
+static void Cmd_setminimize(void)
{
if (gHitMarker & HITMARKER_OBEYS)
gStatuses3[gBattlerAttacker] |= STATUS3_MINIMIZED;
@@ -9241,7 +9222,7 @@ static void atkC7_setminimize(void)
gBattlescriptCurrInstr++;
}
-static void atkC8_sethail(void)
+static void Cmd_sethail(void)
{
if (gBattleWeather & WEATHER_HAIL_ANY)
{
@@ -9258,7 +9239,7 @@ static void atkC8_sethail(void)
gBattlescriptCurrInstr++;
}
-static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento
+static void Cmd_jumpifattackandspecialattackcannotfall(void) // memento
{
if (gBattleMons[gBattlerTarget].statStages[STAT_ATK] == 0
&& gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0
@@ -9276,14 +9257,14 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento
}
}
-static void atkCA_setforcedtarget(void) // follow me
+static void Cmd_setforcedtarget(void) // follow me
{
gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTimer = 1;
gSideTimers[GetBattlerSide(gBattlerAttacker)].followmeTarget = gBattlerAttacker;
gBattlescriptCurrInstr++;
}
-static void atkCB_setcharge(void)
+static void Cmd_setcharge(void)
{
gStatuses3[gBattlerAttacker] |= STATUS3_CHARGED_UP;
gDisableStructs[gBattlerAttacker].chargeTimer = 2;
@@ -9291,7 +9272,7 @@ static void atkCB_setcharge(void)
gBattlescriptCurrInstr++;
}
-static void atkCC_callterrainattack(void) // nature power
+static void Cmd_callterrainattack(void) // nature power
{
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gCurrentMove = sNaturePowerMoves[gBattleTerrain];
@@ -9300,7 +9281,7 @@ static void atkCC_callterrainattack(void) // nature power
gBattlescriptCurrInstr++;
}
-static void atkCD_cureifburnedparalysedorpoisoned(void) // refresh
+static void Cmd_cureifburnedparalysedorpoisoned(void) // refresh
{
if (gBattleMons[gBattlerAttacker].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON))
{
@@ -9316,7 +9297,7 @@ static void atkCD_cureifburnedparalysedorpoisoned(void) // refresh
}
}
-static void atkCE_settorment(void)
+static void Cmd_settorment(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT)
{
@@ -9329,7 +9310,7 @@ static void atkCE_settorment(void)
}
}
-static void atkCF_jumpifnodamage(void)
+static void Cmd_jumpifnodamage(void)
{
if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg)
gBattlescriptCurrInstr += 5;
@@ -9337,7 +9318,7 @@ static void atkCF_jumpifnodamage(void)
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
-static void atkD0_settaunt(void)
+static void Cmd_settaunt(void)
{
if (gDisableStructs[gBattlerTarget].tauntTimer == 0)
{
@@ -9351,7 +9332,7 @@ static void atkD0_settaunt(void)
}
}
-static void atkD1_trysethelpinghand(void)
+static void Cmd_trysethelpinghand(void)
{
gBattlerTarget = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
@@ -9369,7 +9350,7 @@ static void atkD1_trysethelpinghand(void)
}
}
-static void atkD2_tryswapitems(void) // trick
+static void Cmd_tryswapitems(void) // trick
{
// opponent can't swap items with player in regular battles
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL
@@ -9456,7 +9437,7 @@ static void atkD2_tryswapitems(void) // trick
}
}
-static void atkD3_trycopyability(void) // role play
+static void Cmd_trycopyability(void) // role play
{
if (gBattleMons[gBattlerTarget].ability != 0
&& gBattleMons[gBattlerTarget].ability != ABILITY_WONDER_GUARD)
@@ -9471,7 +9452,7 @@ static void atkD3_trycopyability(void) // role play
}
}
-static void atkD4_trywish(void)
+static void Cmd_trywish(void)
{
switch (gBattlescriptCurrInstr[1])
{
@@ -9504,7 +9485,7 @@ static void atkD4_trywish(void)
}
}
-static void atkD5_trysetroots(void) // ingrain
+static void Cmd_trysetroots(void) // ingrain
{
if (gStatuses3[gBattlerAttacker] & STATUS3_ROOTED)
{
@@ -9517,7 +9498,7 @@ static void atkD5_trysetroots(void) // ingrain
}
}
-static void atkD6_doubledamagedealtifdamaged(void)
+static void Cmd_doubledamagedealtifdamaged(void)
{
if ((gProtectStructs[gBattlerAttacker].physicalDmg
&& gProtectStructs[gBattlerAttacker].physicalBattlerId == gBattlerTarget)
@@ -9530,7 +9511,7 @@ static void atkD6_doubledamagedealtifdamaged(void)
gBattlescriptCurrInstr++;
}
-static void atkD7_setyawn(void)
+static void Cmd_setyawn(void)
{
if (gStatuses3[gBattlerTarget] & STATUS3_YAWN
|| gBattleMons[gBattlerTarget].status1 & STATUS1_ANY)
@@ -9544,7 +9525,7 @@ static void atkD7_setyawn(void)
}
}
-static void atkD8_setdamagetohealthdifference(void)
+static void Cmd_setdamagetohealthdifference(void)
{
if (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerAttacker].hp)
{
@@ -9557,7 +9538,7 @@ static void atkD8_setdamagetohealthdifference(void)
}
}
-static void atkD9_scaledamagebyhealthratio(void)
+static void Cmd_scaledamagebyhealthratio(void)
{
if (gDynamicBasePower == 0)
{
@@ -9569,7 +9550,7 @@ static void atkD9_scaledamagebyhealthratio(void)
gBattlescriptCurrInstr++;
}
-static void atkDA_tryswapabilities(void) // skill swap
+static void Cmd_tryswapabilities(void) // skill swap
{
if ((gBattleMons[gBattlerAttacker].ability == 0
&& gBattleMons[gBattlerTarget].ability == 0)
@@ -9589,7 +9570,7 @@ static void atkDA_tryswapabilities(void) // skill swap
}
}
-static void atkDB_tryimprison(void)
+static void Cmd_tryimprison(void)
{
if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS))
{
@@ -9631,7 +9612,7 @@ static void atkDB_tryimprison(void)
}
}
-static void atkDC_trysetgrudge(void)
+static void Cmd_trysetgrudge(void)
{
if (gStatuses3[gBattlerAttacker] & STATUS3_GRUDGE)
{
@@ -9644,7 +9625,7 @@ static void atkDC_trysetgrudge(void)
}
}
-static void atkDD_weightdamagecalculation(void)
+static void Cmd_weightdamagecalculation(void)
{
s32 i;
for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2)
@@ -9661,7 +9642,7 @@ static void atkDD_weightdamagecalculation(void)
gBattlescriptCurrInstr++;
}
-static void atkDE_assistattackselect(void)
+static void Cmd_assistattackselect(void)
{
s32 chooseableMovesNo = 0;
struct Pokemon* party;
@@ -9714,7 +9695,7 @@ static void atkDE_assistattackselect(void)
}
}
-static void atkDF_trysetmagiccoat(void)
+static void Cmd_trysetmagiccoat(void)
{
gBattlerTarget = gBattlerAttacker;
gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
@@ -9729,7 +9710,7 @@ static void atkDF_trysetmagiccoat(void)
}
}
-static void atkE0_trysetsnatch(void) // snatch
+static void Cmd_trysetsnatch(void) // snatch
{
gSpecialStatuses[gBattlerAttacker].ppNotAffectedByPressure = 1;
if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
@@ -9743,7 +9724,7 @@ static void atkE0_trysetsnatch(void) // snatch
}
}
-static void atkE1_trygetintimidatetarget(void)
+static void Cmd_trygetintimidatetarget(void)
{
u8 side;
@@ -9766,7 +9747,7 @@ static void atkE1_trygetintimidatetarget(void)
gBattlescriptCurrInstr += 5;
}
-static void atkE2_switchoutabilities(void)
+static void Cmd_switchoutabilities(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
@@ -9782,7 +9763,7 @@ static void atkE2_switchoutabilities(void)
gBattlescriptCurrInstr += 2;
}
-static void atkE3_jumpifhasnohp(void)
+static void Cmd_jumpifhasnohp(void)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
@@ -9792,7 +9773,7 @@ static void atkE3_jumpifhasnohp(void)
gBattlescriptCurrInstr += 6;
}
-static void atkE4_getsecretpowereffect(void)
+static void Cmd_getsecretpowereffect(void)
{
switch (gBattleTerrain)
{
@@ -9827,7 +9808,7 @@ static void atkE4_getsecretpowereffect(void)
gBattlescriptCurrInstr++;
}
-static void atkE5_pickup(void)
+static void Cmd_pickup(void)
{
s32 i;
u16 species, heldItem;
@@ -9904,7 +9885,7 @@ static void atkE5_pickup(void)
gBattlescriptCurrInstr++;
}
-static void atkE6_docastformchangeanimation(void)
+static void Cmd_docastformchangeanimation(void)
{
gActiveBattler = gBattleScripting.battler;
@@ -9917,7 +9898,7 @@ static void atkE6_docastformchangeanimation(void)
gBattlescriptCurrInstr++;
}
-static void atkE7_trycastformdatachange(void)
+static void Cmd_trycastformdatachange(void)
{
u8 form;
@@ -9930,7 +9911,7 @@ static void atkE7_trycastformdatachange(void)
}
}
-static void atkE8_settypebasedhalvers(void) // water and mud sport
+static void Cmd_settypebasedhalvers(void) // water and mud sport
{
bool8 worked = FALSE;
@@ -9959,7 +9940,7 @@ static void atkE8_settypebasedhalvers(void) // water and mud sport
gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
-static void atkE9_setweatherballtype(void)
+static void Cmd_setweatherballtype(void)
{
if (WEATHER_HAS_EFFECT)
{
@@ -9980,7 +9961,7 @@ static void atkE9_setweatherballtype(void)
gBattlescriptCurrInstr++;
}
-static void atkEA_tryrecycleitem(void)
+static void Cmd_tryrecycleitem(void)
{
u16 *usedHeldItem;
@@ -10003,7 +9984,7 @@ static void atkEA_tryrecycleitem(void)
}
}
-static void atkEB_settypetoterrain(void)
+static void Cmd_settypetoterrain(void)
{
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
{
@@ -10018,7 +9999,7 @@ static void atkEB_settypetoterrain(void)
}
}
-static void atkEC_pursuitrelated(void)
+static void Cmd_pursuitrelated(void)
{
gActiveBattler = GetBattlerAtPosition(GetBattlerPosition(gBattlerAttacker) ^ BIT_FLANK);
@@ -10040,7 +10021,7 @@ static void atkEC_pursuitrelated(void)
}
}
-static void atkEF_snatchsetbattlers(void)
+static void Cmd_snatchsetbattlers(void)
{
gEffectBattler = gBattlerAttacker;
@@ -10053,7 +10034,7 @@ static void atkEF_snatchsetbattlers(void)
gBattlescriptCurrInstr++;
}
-static void atkEE_removelightscreenreflect(void) // brick break
+static void Cmd_removelightscreenreflect(void) // brick break
{
u8 opposingSide = GetBattlerSide(gBattlerAttacker) ^ BIT_SIDE;
@@ -10075,7 +10056,7 @@ static void atkEE_removelightscreenreflect(void) // brick break
gBattlescriptCurrInstr++;
}
-static void atkEF_handleballthrow(void)
+static void Cmd_handleballthrow(void)
{
u8 ballMultiplier = 0;
@@ -10184,7 +10165,7 @@ static void atkEF_handleballthrow(void)
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
- if (CalculatePlayerPartyCount() == 6)
+ if (CalculatePlayerPartyCount() == PARTY_SIZE)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
@@ -10196,7 +10177,7 @@ static void atkEF_handleballthrow(void)
odds = Sqrt(Sqrt(16711680 / odds));
odds = 1048560 / odds;
- for (shakes = 0; shakes < 4 && Random() < odds; shakes++);
+ for (shakes = 0; shakes < BALL_3_SHAKES_SUCCESS && Random() < odds; shakes++);
if (gLastUsedItem == ITEM_MASTER_BALL)
shakes = BALL_3_SHAKES_SUCCESS; // why calculate the shakes before that check?
@@ -10209,7 +10190,7 @@ static void atkEF_handleballthrow(void)
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_POKEBALL, &gLastUsedItem);
- if (CalculatePlayerPartyCount() == 6)
+ if (CalculatePlayerPartyCount() == PARTY_SIZE)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
@@ -10223,21 +10204,21 @@ static void atkEF_handleballthrow(void)
}
}
-static void atkF0_givecaughtmon(void)
+static void Cmd_givecaughtmon(void)
{
if (GiveMonToPlayer(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]]) != MON_GIVEN_TO_PARTY)
{
- if (!sub_813B21C())
+ if (!ShouldShowBoxWasFullMessage())
{
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
- StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2);
}
else
{
- StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON))); // box the mon was sent to
GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gStringVar2);
- StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id()));
+ StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon())); //box the mon was going to be sent to
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
}
@@ -10252,7 +10233,7 @@ static void atkF0_givecaughtmon(void)
gBattlescriptCurrInstr++;
}
-static void atkF1_trysetcaughtmondexflags(void)
+static void Cmd_trysetcaughtmondexflags(void)
{
u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
u32 personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL);
@@ -10268,7 +10249,7 @@ static void atkF1_trysetcaughtmondexflags(void)
}
}
-static void atkF2_displaydexinfo(void)
+static void Cmd_displaydexinfo(void)
{
u16 species = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL);
@@ -10298,7 +10279,7 @@ static void atkF2_displaydexinfo(void)
}
break;
case 3:
- sub_80356D0();
+ InitBattleBgsVideo();
LoadBattleTextboxAndBackground();
gBattle_BG3_X = 0x100;
gBattleCommunication[0]++;
@@ -10387,7 +10368,7 @@ void BattleDestroyYesNoCursorAt(u8 cursorPosition)
CopyBgTilemapBufferToVram(0);
}
-static void atkF3_trygivecaughtmonnick(void)
+static void Cmd_trygivecaughtmonnick(void)
{
switch (gBattleCommunication[MULTIUSE_STATE])
{
@@ -10463,30 +10444,30 @@ static void atkF3_trygivecaughtmonnick(void)
}
}
-static void atkF4_subattackerhpbydmg(void)
+static void Cmd_subattackerhpbydmg(void)
{
gBattleMons[gBattlerAttacker].hp -= gBattleMoveDamage;
gBattlescriptCurrInstr++;
}
-static void atkF5_removeattackerstatus1(void)
+static void Cmd_removeattackerstatus1(void)
{
gBattleMons[gBattlerAttacker].status1 = 0;
gBattlescriptCurrInstr++;
}
-static void atkF6_finishaction(void)
+static void Cmd_finishaction(void)
{
gCurrentActionFuncId = B_ACTION_FINISHED;
}
-static void atkF7_finishturn(void)
+static void Cmd_finishturn(void)
{
gCurrentActionFuncId = B_ACTION_FINISHED;
gCurrentTurnActionNumber = gBattlersCount;
}
-static void atkF8_trainerslideout(void)
+static void Cmd_trainerslideout(void)
{
gActiveBattler = GetBattlerAtPosition(gBattlescriptCurrInstr[1]);
BtlController_EmitTrainerSlideBack(0);
diff --git a/src/battle_setup.c b/src/battle_setup.c
index c2d7cb6c6..33d50807f 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -1,25 +1,18 @@
#include "global.h"
-#include "constants/trainers.h"
#include "battle.h"
-#include "constants/battle_setup.h"
#include "battle_setup.h"
#include "battle_transition.h"
#include "main.h"
#include "task.h"
#include "safari_zone.h"
#include "script.h"
-#include "constants/game_stat.h"
#include "event_data.h"
-#include "constants/species.h"
-#include "constants/songs.h"
#include "metatile_behavior.h"
-#include "constants/maps.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
#include "random.h"
#include "starter_choose.h"
#include "script_pokemon_80F8.h"
-#include "constants/items.h"
#include "palette.h"
#include "window.h"
#include "event_object_movement.h"
@@ -42,10 +35,18 @@
#include "fldeff_misc.h"
#include "field_control_avatar.h"
#include "mirage_tower.h"
-#include "constants/map_types.h"
-#include "constants/battle_frontier.h"
#include "field_screen_effect.h"
#include "data.h"
+#include "constants/battle_frontier.h"
+#include "constants/battle_setup.h"
+#include "constants/game_stat.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+#include "constants/map_types.h"
+#include "constants/maps.h"
+#include "constants/species.h"
+#include "constants/trainers.h"
+#include "constants/trainer_hill.h"
enum
{
@@ -72,8 +73,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);
@@ -304,7 +305,7 @@ const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] =
[REMATCH_TRENT] = REMATCH(TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5, ROUTE112),
[REMATCH_SAWYER] = REMATCH(TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5, MT_CHIMNEY),
[REMATCH_KIRA_AND_DAN] = REMATCH(TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5, ABANDONED_SHIP_ROOMS2_1F),
- [REMATCH_WALLY_3] = REMATCH(TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6, VICTORY_ROAD_1F),
+ [REMATCH_WALLY_3] = REMATCH(TRAINER_WALLY_VR_2, TRAINER_WALLY_VR_3, TRAINER_WALLY_VR_4, TRAINER_WALLY_VR_5, TRAINER_WALLY_VR_5, VICTORY_ROAD_1F),
[REMATCH_ROXANNE] = REMATCH(TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5, RUSTBORO_CITY),
[REMATCH_BRAWLY] = REMATCH(TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5, DEWFORD_TOWN),
[REMATCH_WATTSON] = REMATCH(TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5, MAUVILLE_CITY),
@@ -395,8 +396,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 +410,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 +434,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 +443,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 +455,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 +476,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 +488,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 +527,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 +544,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 +577,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)
@@ -897,7 +898,7 @@ static void CB2_GiveStarter(void)
*GetVarPointer(VAR_STARTER_MON) = gSpecialVar_Result;
starterMon = GetStarterPokemon(gSpecialVar_Result);
- ScriptGiveMon(starterMon, 5, 0, 0, 0, 0);
+ ScriptGiveMon(starterMon, 5, ITEM_NONE, 0, 0, 0);
ResetTasks();
PlayBattleBGM();
SetMainCallback2(CB2_StartFirstBattle);
@@ -919,8 +920,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 +931,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();
@@ -960,12 +961,12 @@ static u8 TrainerBattleLoadArg8(const u8 *ptr)
static u16 GetTrainerAFlag(void)
{
- return FLAG_TRAINER_FLAG_START + gTrainerBattleOpponent_A;
+ return TRAINER_FLAGS_START + gTrainerBattleOpponent_A;
}
static u16 GetTrainerBFlag(void)
{
- return FLAG_TRAINER_FLAG_START + gTrainerBattleOpponent_B;
+ return TRAINER_FLAGS_START + gTrainerBattleOpponent_B;
}
static bool32 IsPlayerDefeated(u32 battleOutcome)
@@ -1140,7 +1141,7 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
case TRAINER_BATTLE_SET_TRAINER_B:
TrainerBattleLoadArgs(sTrainerBOrdinaryBattleParams, data);
return NULL;
- case TRAINER_BATTLE_12:
+ case TRAINER_BATTLE_HILL:
if (gApproachingTrainerId == 0)
{
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
@@ -1192,7 +1193,7 @@ void SetUpTwoTrainersBattle(void)
bool32 GetTrainerFlagFromScriptPointer(const u8 *data)
{
u32 flag = TrainerBattleLoadArg16(data + 2);
- return FlagGet(FLAG_TRAINER_FLAG_START + flag);
+ return FlagGet(TRAINER_FLAGS_START + flag);
}
void SetUpTrainerMovement(void)
@@ -1231,17 +1232,17 @@ static void SetBattledTrainerFlag(void)
bool8 HasTrainerBeenFought(u16 trainerId)
{
- return FlagGet(FLAG_TRAINER_FLAG_START + trainerId);
+ return FlagGet(TRAINER_FLAGS_START + trainerId);
}
void SetTrainerFlag(u16 trainerId)
{
- FlagSet(FLAG_TRAINER_FLAG_START + trainerId);
+ FlagSet(TRAINER_FLAGS_START + trainerId);
}
void ClearTrainerFlag(u16 trainerId)
{
- FlagClear(FLAG_TRAINER_FLAG_START + trainerId);
+ FlagClear(TRAINER_FLAGS_START + trainerId);
}
void BattleSetup_StartTrainerBattle(void)
@@ -1273,7 +1274,7 @@ void BattleSetup_StartTrainerBattle(void)
MarkApproachingPyramidTrainersAsBattled();
}
- else if (sub_81D5C18())
+ else if (InTrainerHillChallenge())
{
gBattleTypeFlags |= BATTLE_TYPE_TRAINER_HILL;
@@ -1288,10 +1289,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 +1308,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 +1316,7 @@ static void CB2_EndTrainerBattle(void)
else
{
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
- if (!InBattlePyramid() && !sub_81D5C18())
+ if (!InBattlePyramid() && !InTrainerHillChallenge())
{
RegisterTrainerInMatchCall();
SetBattledTrainersFlags();
@@ -1361,12 +1362,12 @@ void ShowTrainerIntroSpeech(void)
sub_80982B8();
}
- else if (sub_81D5C18())
+ else if (InTrainerHillChallenge())
{
if (gNoOfApproachingTrainers == 0 || gNoOfApproachingTrainers == 1)
- CopyTrainerHillTrainerText(2, LocalIdToHillTrainerId(gSpecialVar_LastTalked));
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_INTRO, LocalIdToHillTrainerId(gSpecialVar_LastTalked));
else
- CopyTrainerHillTrainerText(2, LocalIdToHillTrainerId(gEventObjects[gApproachingTrainers[gApproachingTrainerId].eventObjectId].localId));
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_INTRO, LocalIdToHillTrainerId(gEventObjects[gApproachingTrainers[gApproachingTrainerId].eventObjectId].localId));
sub_80982B8();
}
@@ -1391,7 +1392,7 @@ const u8 *BattleSetup_GetTrainerPostBattleScript(void)
sShouldCheckTrainerBScript = FALSE;
if (sTrainerBBattleScriptRetAddr != NULL)
{
- gUnknown_03006080 = 1;
+ gWhichTrainerToFaceAfterBattle = 1;
return sTrainerBBattleScriptRetAddr;
}
}
@@ -1399,7 +1400,7 @@ const u8 *BattleSetup_GetTrainerPostBattleScript(void)
{
if (sTrainerABattleScriptRetAddr != NULL)
{
- gUnknown_03006080 = 0;
+ gWhichTrainerToFaceAfterBattle = 0;
return sTrainerABattleScriptRetAddr;
}
}
@@ -1581,7 +1582,7 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u
s32 i;
bool32 ret = FALSE;
- for (i = 0; i <= REMATCH_WALLY_3; i++)
+ for (i = 0; i <= REMATCH_SPECIAL_TRAINER_START; i++)
{
if (table[i].mapGroup == mapGroup && table[i].mapNum == mapNum && !sub_80B1D94(i))
{
@@ -1640,7 +1641,7 @@ static bool8 IsFirstTrainerIdReadyForRematch(const struct RematchTrainer *table,
if (tableId == -1)
return FALSE;
- if (tableId >= 100)
+ if (tableId >= MAX_REMATCH_ENTRIES)
return FALSE;
if (gSaveBlock1Ptr->trainerRematches[tableId] == 0)
return FALSE;
@@ -1654,7 +1655,7 @@ static bool8 IsTrainerReadyForRematch_(const struct RematchTrainer *table, u16 t
if (tableId == -1)
return FALSE;
- if (tableId >= 100)
+ if (tableId >= MAX_REMATCH_ENTRIES)
return FALSE;
if (gSaveBlock1Ptr->trainerRematches[tableId] == 0)
return FALSE;
diff --git a/src/battle_tent.c b/src/battle_tent.c
index 34e3e9628..b2db0e39c 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -11,140 +11,154 @@
#include "battle_factory_screen.h"
#include "frontier_util.h"
#include "string_util.h"
+#include "constants/battle_tent.h"
+#include "constants/battle_tent_trainers.h"
+#include "constants/battle_tent_mons.h"
#include "constants/items.h"
#include "constants/layouts.h"
#include "constants/region_map_sections.h"
#include "constants/species.h"
+#include "constants/trainers.h"
// This file's functions.
-static void sub_81B99D4(void);
-static void sub_81B9A28(void);
-static void sub_81B9A44(void);
-static void sub_81B9A60(void);
-static void sub_81B9A90(void);
-static void sub_81B9ABC(void);
-static void sub_81B9B00(void);
-static void sub_81B9B28(void);
-static void sub_81B9BA0(void);
-static void sub_81B9BF4(void);
-static void sub_81B9C10(void);
-static void sub_81B9C2C(void);
-static void sub_81B9C70(void);
-static void sub_81B9C98(void);
-static void sub_81B9CF0(void);
-static void sub_81B9D28(void);
-static void sub_81B9D7C(void);
-static void sub_81B9D98(void);
-static void sub_81B9DB4(void);
-static void sub_81B9DF8(void);
-static void sub_81B9E20(void);
-static void sub_81B9E78(void);
-static void sub_81B9E88(void);
-static void sub_81BA040(void);
-static void sub_81B9EC0(void);
+static void InitVerdanturfTentChallenge(void);
+static void GetVerdanturfTentPrize(void);
+static void SetVerdanturfTentPrize(void);
+static void SetVerdanturfTentTrainerGfx(void);
+static void BufferVerdanturfTentTrainerIntro(void);
+static void SaveVerdanturfTentChallenge(void);
+static void SetRandomVerdanturfTentPrize(void);
+static void GiveVerdanturfTentPrize(void);
+static void InitFallarborTentChallenge(void);
+static void GetFallarborTentPrize(void);
+static void SetFallarborTentPrize(void);
+static void SaveFallarborTentChallenge(void);
+static void SetRandomFallarborTentPrize(void);
+static void GiveFallarborTentPrize(void);
+static void BufferFallarborTentTrainerName(void);
+static void InitSlateportTentChallenge(void);
+static void GetSlateportTentPrize(void);
+static void SetSlateportTentPrize(void);
+static void SaveSlateportTentChallenge(void);
+static void SetRandomSlateportTentPrize(void);
+static void GiveSlateportTentPrize(void);
+static void SelectInitialRentalMons(void);
+static void SwapRentalMons(void);
+static void GenerateOpponentMons(void);
+static void GenerateInitialRentalMons(void);
+
+/*
+ * Battle Tents are mini versions of particular Battle Frontier facilities
+ * As such they each share some scripts and functions with their counterpart
+ *
+ * Verdanturf Battle Tent: Battle Palace
+ * Fallarbor Battle Tent: Battle Arena
+ * Slateport Battle Tent: Battle Factory
+ *
+ */
// IWRAM bss
static u16 sRandMonSetId;
// const rom data
-void static (*const gUnknown_086160B4[])(void) =
-{
- sub_81B99D4,
- sub_81B9A28,
- sub_81B9A44,
- sub_81B9A60,
- sub_81B9A90,
- sub_81B9ABC,
- sub_81B9B00,
- sub_81B9B28
+void static (*const sVerdanturfTentFuncs[])(void) =
+{
+ [VERDANTURF_TENT_FUNC_INIT] = InitVerdanturfTentChallenge,
+ [VERDANTURF_TENT_FUNC_GET_PRIZE] = GetVerdanturfTentPrize,
+ [VERDANTURF_TENT_FUNC_SET_PRIZE] = SetVerdanturfTentPrize,
+ [VERDANTURF_TENT_FUNC_SET_OPPONENT_GFX] = SetVerdanturfTentTrainerGfx,
+ [VERDANTURF_TENT_FUNC_GET_OPPONENT_INTRO] = BufferVerdanturfTentTrainerIntro,
+ [VERDANTURF_TENT_FUNC_SAVE] = SaveVerdanturfTentChallenge,
+ [VERDANTURF_TENT_FUNC_SET_RANDOM_PRIZE] = SetRandomVerdanturfTentPrize,
+ [VERDANTURF_TENT_FUNC_GIVE_PRIZE] = GiveVerdanturfTentPrize
};
static const u16 sVerdanturfTentRewards[] = {ITEM_NEST_BALL};
-void static (*const gUnknown_086160D8[])(void) =
+void static (*const sFallarborTentFuncs[])(void) =
{
- sub_81B9BA0,
- sub_81B9BF4,
- sub_81B9C10,
- sub_81B9C2C,
- sub_81B9C70,
- sub_81B9C98,
- sub_81B9CF0
+ [FALLARBOR_TENT_FUNC_INIT] = InitFallarborTentChallenge,
+ [FALLARBOR_TENT_FUNC_GET_PRIZE] = GetFallarborTentPrize,
+ [FALLARBOR_TENT_FUNC_SET_PRIZE] = SetFallarborTentPrize,
+ [FALLARBOR_TENT_FUNC_SAVE] = SaveFallarborTentChallenge,
+ [FALLARBOR_TENT_FUNC_SET_RANDOM_PRIZE] = SetRandomFallarborTentPrize,
+ [FALLARBOR_TENT_FUNC_GIVE_PRIZE] = GiveFallarborTentPrize,
+ [FALLARBOR_TENT_FUNC_GET_OPPONENT_NAME] = BufferFallarborTentTrainerName
};
static const u16 sFallarborTentRewards[] = {ITEM_HYPER_POTION};
-void static (*const gUnknown_086160F8[])(void) =
-{
- sub_81B9D28,
- sub_81B9D7C,
- sub_81B9D98,
- sub_81B9DB4,
- sub_81B9DF8,
- sub_81B9E20,
- sub_81B9E78,
- sub_81B9E88,
- sub_81BA040,
- sub_81B9EC0
+void static (*const sSlateportTentFuncs[])(void) =
+{
+ [SLATEPORT_TENT_FUNC_INIT] = InitSlateportTentChallenge,
+ [SLATEPORT_TENT_FUNC_GET_PRIZE] = GetSlateportTentPrize,
+ [SLATEPORT_TENT_FUNC_SET_PRIZE] = SetSlateportTentPrize,
+ [SLATEPORT_TENT_FUNC_SAVE] = SaveSlateportTentChallenge,
+ [SLATEPORT_TENT_FUNC_SET_RANDOM_PRIZE] = SetRandomSlateportTentPrize,
+ [SLATEPORT_TENT_FUNC_GIVE_PRIZE] = GiveSlateportTentPrize,
+ [SLATEPORT_TENT_FUNC_SELECT_RENT_MONS] = SelectInitialRentalMons,
+ [SLATEPORT_TENT_FUNC_SWAP_RENT_MONS] = SwapRentalMons,
+ [SLATEPORT_TENT_FUNC_GENERATE_OPPONENT_MONS] = GenerateOpponentMons,
+ [SLATEPORT_TENT_FUNC_GENERATE_RENTAL_MONS] = GenerateInitialRentalMons
};
static const u16 sSlateportTentRewards[] = {ITEM_FULL_HEAL};
// code
-void sub_81B99B4(void)
+void CallVerdanturfTentFunction(void)
{
- gUnknown_086160B4[gSpecialVar_0x8004]();
+ sVerdanturfTentFuncs[gSpecialVar_0x8004]();
}
-static void sub_81B99D4(void)
+static void InitVerdanturfTentChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
}
-static void sub_81B9A28(void)
+static void GetVerdanturfTentPrize(void)
{
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_E6A;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.verdanturfTentPrize;
}
-static void sub_81B9A44(void)
+static void SetVerdanturfTentPrize(void)
{
- gSaveBlock2Ptr->frontier.field_E6A = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.verdanturfTentPrize = gSpecialVar_0x8006;
}
-static void sub_81B9A60(void)
+static void SetVerdanturfTentTrainerGfx(void)
{
gTrainerBattleOpponent_A = (u32)((Random() % 255) * 5) / 64;
SetBattleFacilityTrainerGfxId(gTrainerBattleOpponent_A, 0);
}
-static void sub_81B9A90(void)
+static void BufferVerdanturfTentTrainerIntro(void)
{
- if (gTrainerBattleOpponent_A < 300)
+ if (gTrainerBattleOpponent_A < FRONTIER_TRAINERS_COUNT)
FrontierSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore);
}
-static void sub_81B9ABC(void)
+static void SaveVerdanturfTentChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = TRUE;
- sub_81A4C30();
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
+ SaveGameFrontier();
}
-static void sub_81B9B00(void)
+static void SetRandomVerdanturfTentPrize(void)
{
- gSaveBlock2Ptr->frontier.field_E6A = sVerdanturfTentRewards[Random() % ARRAY_COUNT(sVerdanturfTentRewards)];
+ gSaveBlock2Ptr->frontier.verdanturfTentPrize = sVerdanturfTentRewards[Random() % ARRAY_COUNT(sVerdanturfTentRewards)];
}
-static void sub_81B9B28(void)
+static void GiveVerdanturfTentPrize(void)
{
- if (AddBagItem(gSaveBlock2Ptr->frontier.field_E6A, 1) == TRUE)
+ if (AddBagItem(gSaveBlock2Ptr->frontier.verdanturfTentPrize, 1) == TRUE)
{
- CopyItemName(gSaveBlock2Ptr->frontier.field_E6A, gStringVar1);
- gSaveBlock2Ptr->frontier.field_E6A = ITEM_NONE;
+ CopyItemName(gSaveBlock2Ptr->frontier.verdanturfTentPrize, gStringVar1);
+ gSaveBlock2Ptr->frontier.verdanturfTentPrize = ITEM_NONE;
gSpecialVar_Result = TRUE;
}
else
@@ -153,48 +167,48 @@ static void sub_81B9B28(void)
}
}
-void sub_81B9B80(void)
+void CallFallarborTentFunction(void)
{
- gUnknown_086160D8[gSpecialVar_0x8004]();
+ sFallarborTentFuncs[gSpecialVar_0x8004]();
}
-static void sub_81B9BA0(void)
+static void InitFallarborTentChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
}
-static void sub_81B9BF4(void)
+static void GetFallarborTentPrize(void)
{
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_E6C;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.fallarborTentPrize;
}
-static void sub_81B9C10(void)
+static void SetFallarborTentPrize(void)
{
- gSaveBlock2Ptr->frontier.field_E6C = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.fallarborTentPrize = gSpecialVar_0x8006;
}
-static void sub_81B9C2C(void)
+static void SaveFallarborTentChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = TRUE;
- sub_81A4C30();
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
+ SaveGameFrontier();
}
-static void sub_81B9C70(void)
+static void SetRandomFallarborTentPrize(void)
{
- gSaveBlock2Ptr->frontier.field_E6C = sFallarborTentRewards[Random() % ARRAY_COUNT(sFallarborTentRewards)];
+ gSaveBlock2Ptr->frontier.fallarborTentPrize = sFallarborTentRewards[Random() % ARRAY_COUNT(sFallarborTentRewards)];
}
-static void sub_81B9C98(void)
+static void GiveFallarborTentPrize(void)
{
- if (AddBagItem(gSaveBlock2Ptr->frontier.field_E6C, 1) == TRUE)
+ if (AddBagItem(gSaveBlock2Ptr->frontier.fallarborTentPrize, 1) == TRUE)
{
- CopyItemName(gSaveBlock2Ptr->frontier.field_E6C, gStringVar1);
- gSaveBlock2Ptr->frontier.field_E6C = ITEM_NONE;
+ CopyItemName(gSaveBlock2Ptr->frontier.fallarborTentPrize, gStringVar1);
+ gSaveBlock2Ptr->frontier.fallarborTentPrize = ITEM_NONE;
gSpecialVar_Result = TRUE;
}
else
@@ -203,53 +217,53 @@ static void sub_81B9C98(void)
}
}
-static void sub_81B9CF0(void)
+static void BufferFallarborTentTrainerName(void)
{
GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A);
}
-void sub_81B9D08(void)
+void CallSlateportTentFunction(void)
{
- gUnknown_086160F8[gSpecialVar_0x8004]();
+ sSlateportTentFuncs[gSpecialVar_0x8004]();
}
-static void sub_81B9D28(void)
+static void InitSlateportTentChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = 0;
+ gSaveBlock2Ptr->frontier.challengeStatus = 0;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
}
-static void sub_81B9D7C(void)
+static void GetSlateportTentPrize(void)
{
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_E6E;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.slateportTentPrize;
}
-static void sub_81B9D98(void)
+static void SetSlateportTentPrize(void)
{
- gSaveBlock2Ptr->frontier.field_E6E = gSpecialVar_0x8006;
+ gSaveBlock2Ptr->frontier.slateportTentPrize = gSpecialVar_0x8006;
}
-static void sub_81B9DB4(void)
+static void SaveSlateportTentChallenge(void)
{
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = TRUE;
- sub_81A4C30();
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
+ SaveGameFrontier();
}
-static void sub_81B9DF8(void)
+static void SetRandomSlateportTentPrize(void)
{
- gSaveBlock2Ptr->frontier.field_E6E = sSlateportTentRewards[Random() % ARRAY_COUNT(sSlateportTentRewards)];
+ gSaveBlock2Ptr->frontier.slateportTentPrize = sSlateportTentRewards[Random() % ARRAY_COUNT(sSlateportTentRewards)];
}
-static void sub_81B9E20(void)
+static void GiveSlateportTentPrize(void)
{
- if (AddBagItem(gSaveBlock2Ptr->frontier.field_E6E, 1) == TRUE)
+ if (AddBagItem(gSaveBlock2Ptr->frontier.slateportTentPrize, 1) == TRUE)
{
- CopyItemName(gSaveBlock2Ptr->frontier.field_E6E, gStringVar1);
- gSaveBlock2Ptr->frontier.field_E6E = ITEM_NONE;
+ CopyItemName(gSaveBlock2Ptr->frontier.slateportTentPrize, gStringVar1);
+ gSaveBlock2Ptr->frontier.slateportTentPrize = ITEM_NONE;
gSpecialVar_Result = TRUE;
}
else
@@ -258,13 +272,13 @@ static void sub_81B9E20(void)
}
}
-static void sub_81B9E78(void)
+static void SelectInitialRentalMons(void)
{
ZeroPlayerPartyMons();
DoBattleFactorySelectScreen();
}
-static void sub_81B9E88(void)
+static void SwapRentalMons(void)
{
DoBattleFactorySwapScreen();
}
@@ -275,7 +289,7 @@ bool8 InSlateportBattleTent(void)
&& (gMapHeader.mapLayoutId == LAYOUT_BATTLE_TENT_CORRIDOR || gMapHeader.mapLayoutId == LAYOUT_BATTLE_TENT_BATTLE_ROOM);
}
-static void sub_81B9EC0(void)
+static void GenerateInitialRentalMons(void)
{
s32 i, j;
u8 firstMonId;
@@ -299,7 +313,7 @@ static void sub_81B9EC0(void)
while (i != PARTY_SIZE)
{
// Cannot have two pokemon of the same species.
- monSetId = Random() % 70;
+ monSetId = Random() % NUM_SLATEPORT_TENT_MONS;
for (j = firstMonId; j < firstMonId + i; j++)
{
u16 monId = monIds[j];
@@ -337,14 +351,14 @@ static void sub_81B9EC0(void)
}
}
-static void sub_81BA040(void)
+static void GenerateOpponentMons(void)
{
u16 trainerId;
s32 i, j, k;
- register const u16 *monSets asm("r9"); // Fix me. Compiler insists on moving that variable into stack.
- u16 species[3];
- u16 heldItems[3];
- s32 setsCount = 0;
+ register const u16 *monSet asm("r9"); // Fix me. Compiler insists on moving that variable into stack.
+ u16 species[FRONTIER_PARTY_SIZE];
+ u16 heldItems[FRONTIER_PARTY_SIZE];
+ s32 monId = 0;
gFacilityTrainers = gSlateportBattleTentTrainers;
gFacilityTrainerMons = gSlateportBattleTentMons;
@@ -353,7 +367,7 @@ static void sub_81BA040(void)
{
do
{
- trainerId = Random() % 30;
+ trainerId = Random() % NUM_BATTLE_TENT_TRAINERS;
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -362,21 +376,21 @@ static void sub_81BA040(void)
} while (i != gSaveBlock2Ptr->frontier.curChallengeBattleNum);
gTrainerBattleOpponent_A = trainerId;
- while (gFacilityTrainers[gTrainerBattleOpponent_A].monSets[setsCount] != 0xFFFF)
- setsCount++;
- if (setsCount > 8)
+ while (gFacilityTrainers[gTrainerBattleOpponent_A].monSet[monId] != 0xFFFF)
+ monId++;
+ if (monId > 8)
break;
- setsCount = 0;
+ monId = 0;
}
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 2)
gSaveBlock2Ptr->frontier.trainerIds[gSaveBlock2Ptr->frontier.curChallengeBattleNum] = gTrainerBattleOpponent_A;
- monSets = gFacilityTrainers[gTrainerBattleOpponent_A].monSets;
+ monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet;
i = 0;
- while (i != 3)
+ while (i != FRONTIER_PARTY_SIZE)
{
- sRandMonSetId = monSets[Random() % setsCount];
+ sRandMonSetId = monSet[Random() % monId];
for (j = 0; j < 6; j++)
{
if (gFacilityTrainerMons[sRandMonSetId].species == gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[j].monId].species)
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 8ef848e39..8f6393cbf 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -23,45 +23,52 @@
#include "field_message_box.h"
#include "tv.h"
#include "battle_factory.h"
+#include "constants/apprentice.h"
#include "constants/battle_frontier.h"
+#include "constants/battle_frontier_mons.h"
+#include "constants/battle_tent_mons.h"
+#include "constants/battle_tent_trainers.h"
+#include "constants/battle_tower.h"
+#include "constants/frontier_util.h"
#include "constants/items.h"
#include "constants/trainers.h"
#include "constants/event_objects.h"
#include "constants/moves.h"
#include "constants/species.h"
#include "constants/easy_chat.h"
+#include "constants/tv.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;
EWRAM_DATA const struct FacilityMon *gFacilityTrainerMons = NULL;
// IWRAM common
-u16 gUnknown_03006298[4];
+u16 gUnknown_03006298[MAX_FRONTIER_PARTY_SIZE];
// This file's functions.
-static void sub_8161F94(void);
-static void sub_8162054(void);
-static void sub_81620F4(void);
-static void ChooseNextBattleTowerTrainer(void);
-static void sub_81621C0(void);
+static void InitTowerChallenge(void);
+static void GetTowerData(void);
+static void SetTowerData(void);
+static void SetNextFacilityOpponent(void);
+static void SetTowerBattleWon(void);
static void AwardBattleTowerRibbons(void);
-static void SaveBattleTowerProgress(void);
-static void sub_8163914(void);
+static void SaveTowerChallenge(void);
+static void GetOpponentIntroSpeech(void);
static void nullsub_61(void);
-static void SpriteCB_Null6(void);
-static void sub_81642A0(void);
-static void sub_8164828(void);
-static void sub_8164B74(void);
+static void nullsub_116(void);
+static void LoadMultiPartnerCandidatesData(void);
+static void ShowPartnerCandidateMessage(void);
+static void LoadLinkMultiOpponentsData(void);
static void sub_8164DCC(void);
-static void sub_8164DE4(void);
-static void sub_8164E04(void);
+static void SetMultiPartnerGfx(void);
+static void SetTowerInterviewData(void);
static void ValidateBattleTowerRecordChecksums(void);
static void SaveCurrentWinStreak(void);
static void ValidateApprenticesChecksums(void);
-static void sub_8165E18(void);
+static void SetNextBattleTentOpponent(void);
static void CopyEReaderTrainerFarewellMessage(void);
static void ClearBattleTowerRecord(struct EmeraldBattleTowerRecord *record);
static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount);
@@ -198,7 +205,7 @@ const u8 gTowerFemaleFacilityClasses[20] =
FACILITY_CLASS_PARASOL_LADY,
FACILITY_CLASS_SWIMMER_F,
FACILITY_CLASS_PICNICKER,
- FACILITY_CLASS_POKEMON_BREEDER_F,
+ FACILITY_CLASS_PKMN_BREEDER_F,
FACILITY_CLASS_PKMN_RANGER_F,
FACILITY_CLASS_LASS
};
@@ -261,755 +268,499 @@ const u8 gTowerFemaleTrainerGfxIds[20] =
EVENT_OBJ_GFX_LASS
};
-static const u8 sRubyFacilityClassToEmerald[][2] =
-{
- {0x00, FACILITY_CLASS_AQUA_LEADER_ARCHIE},
- {0x01, FACILITY_CLASS_AQUA_GRUNT_M},
- {0x02, FACILITY_CLASS_AQUA_GRUNT_F},
- {0x03, FACILITY_CLASS_AROMA_LADY},
- {0x04, FACILITY_CLASS_RUIN_MANIAC},
- {0x05, FACILITY_CLASS_INTERVIEWER},
- {0x06, FACILITY_CLASS_TUBER_F},
- {0x07, FACILITY_CLASS_TUBER_M},
- {0x08, FACILITY_CLASS_COOLTRAINER_M},
- {0x09, FACILITY_CLASS_COOLTRAINER_F},
- {0x0a, FACILITY_CLASS_HEX_MANIAC},
- {0x0b, FACILITY_CLASS_LADY},
- {0x0c, FACILITY_CLASS_BEAUTY},
- {0x0d, FACILITY_CLASS_RICH_BOY},
- {0x0e, FACILITY_CLASS_POKEMANIAC},
- {0x0f, FACILITY_CLASS_SWIMMER_M},
- {0x10, FACILITY_CLASS_BLACK_BELT},
- {0x11, FACILITY_CLASS_GUITARIST},
- {0x12, FACILITY_CLASS_KINDLER},
- {0x13, FACILITY_CLASS_CAMPER},
- {0x14, FACILITY_CLASS_BUG_MANIAC},
- {0x15, FACILITY_CLASS_PSYCHIC_M},
- {0x16, FACILITY_CLASS_PSYCHIC_F},
- {0x17, FACILITY_CLASS_GENTLEMAN},
- {0x18, FACILITY_CLASS_ELITE_FOUR_SIDNEY},
- {0x19, FACILITY_CLASS_ELITE_FOUR_PHOEBE},
- {0x1a, FACILITY_CLASS_LEADER_ROXANNE},
- {0x1b, FACILITY_CLASS_LEADER_BRAWLY},
- {0x1c, FACILITY_CLASS_LEADER_TATE_AND_LIZA},
- {0x1d, FACILITY_CLASS_SCHOOL_KID_M},
- {0x1e, FACILITY_CLASS_SCHOOL_KID_F},
- {0x1f, FACILITY_CLASS_SR_AND_JR},
- {0x20, FACILITY_CLASS_POKEFAN_M},
- {0x21, FACILITY_CLASS_POKEFAN_F},
- {0x22, FACILITY_CLASS_EXPERT_M},
- {0x23, FACILITY_CLASS_EXPERT_F},
- {0x24, FACILITY_CLASS_YOUNGSTER},
- {0x25, FACILITY_CLASS_CHAMPION_WALLACE},
- {0x26, FACILITY_CLASS_FISHERMAN},
- {0x27, FACILITY_CLASS_CYCLING_TRIATHLETE_M},
- {0x28, FACILITY_CLASS_CYCLING_TRIATHLETE_F},
- {0x29, FACILITY_CLASS_RUNNING_TRIATHLETE_M},
- {0x2a, FACILITY_CLASS_RUNNING_TRIATHLETE_F},
- {0x2b, FACILITY_CLASS_SWIMMING_TRIATHLETE_M},
- {0x2c, FACILITY_CLASS_SWIMMING_TRIATHLETE_F},
- {0x2d, FACILITY_CLASS_DRAGON_TAMER},
- {0x2e, FACILITY_CLASS_BIRD_KEEPER},
- {0x2f, FACILITY_CLASS_NINJA_BOY},
- {0x30, FACILITY_CLASS_BATTLE_GIRL},
- {0x31, FACILITY_CLASS_PARASOL_LADY},
- {0x32, FACILITY_CLASS_SWIMMER_F},
- {0x33, FACILITY_CLASS_PICNICKER},
- {0x34, FACILITY_CLASS_TWINS},
- {0x35, FACILITY_CLASS_SAILOR},
- {0x38, FACILITY_CLASS_COLLECTOR},
- {0x39, FACILITY_CLASS_WALLY},
- {0x3a, FACILITY_CLASS_BRENDAN},
- {0x3b, FACILITY_CLASS_BRENDAN_2},
- {0x3c, FACILITY_CLASS_BRENDAN_3},
- {0x3d, FACILITY_CLASS_MAY},
- {0x3e, FACILITY_CLASS_MAY_2},
- {0x3f, FACILITY_CLASS_MAY_3},
- {0x40, FACILITY_CLASS_PKMN_BREEDER_M},
- {0x41, FACILITY_CLASS_POKEMON_BREEDER_F},
- {0x42, FACILITY_CLASS_PKMN_RANGER_M},
- {0x43, FACILITY_CLASS_PKMN_RANGER_F},
- {0x44, FACILITY_CLASS_MAGMA_LEADER_MAXIE},
- {0x45, FACILITY_CLASS_MAGMA_GRUNT_M},
- {0x46, FACILITY_CLASS_MAGMA_GRUNT_F},
- {0x47, FACILITY_CLASS_LASS},
- {0x48, FACILITY_CLASS_BUG_CATCHER},
- {0x49, FACILITY_CLASS_HIKER},
- {0x4a, FACILITY_CLASS_YOUNG_COUPLE},
- {0x4b, FACILITY_CLASS_OLD_COUPLE},
- {0x4c, FACILITY_CLASS_SIS_AND_BRO},
-};
-
-static const u8 *const gUnknown_085DCFD8[] =
-{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244383,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2443E7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244413,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24444B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2444D6
-};
-
-static const u8 *const gUnknown_085DCFEC[] =
-{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2444EF,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24451E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244549,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24459B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2445C5
-};
-
-static const u8 *const gUnknown_085DD000[] =
-{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2445E8,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244618,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244643,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24468F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2446B4
-};
-
-static const u8 *const gUnknown_085DD014[] =
-{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2446E5,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24474D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24479E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24480C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2448A7
-};
-
-static const u8 *const gUnknown_085DD028[] =
-{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2448CD,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2448F5,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244939,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244989,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2449E6
+// Excludes the unused RS_FACILITY_CLASS_BOARDER_1 and _2
+static const u8 sRubyFacilityClassToEmerald[RS_FACILITY_CLASSES_COUNT - 2][2] =
+{
+ {RS_FACILITY_CLASS_AQUA_LEADER_ARCHIE, FACILITY_CLASS_AQUA_LEADER_ARCHIE},
+ {RS_FACILITY_CLASS_AQUA_GRUNT_M, FACILITY_CLASS_AQUA_GRUNT_M},
+ {RS_FACILITY_CLASS_AQUA_GRUNT_F, FACILITY_CLASS_AQUA_GRUNT_F},
+ {RS_FACILITY_CLASS_AROMA_LADY, FACILITY_CLASS_AROMA_LADY},
+ {RS_FACILITY_CLASS_RUIN_MANIAC, FACILITY_CLASS_RUIN_MANIAC},
+ {RS_FACILITY_CLASS_INTERVIEWER, FACILITY_CLASS_INTERVIEWER},
+ {RS_FACILITY_CLASS_TUBER_F, FACILITY_CLASS_TUBER_F},
+ {RS_FACILITY_CLASS_TUBER_M, FACILITY_CLASS_TUBER_M},
+ {RS_FACILITY_CLASS_COOLTRAINER_M, FACILITY_CLASS_COOLTRAINER_M},
+ {RS_FACILITY_CLASS_COOLTRAINER_F, FACILITY_CLASS_COOLTRAINER_F},
+ {RS_FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_HEX_MANIAC},
+ {RS_FACILITY_CLASS_LADY, FACILITY_CLASS_LADY},
+ {RS_FACILITY_CLASS_BEAUTY, FACILITY_CLASS_BEAUTY},
+ {RS_FACILITY_CLASS_RICH_BOY, FACILITY_CLASS_RICH_BOY},
+ {RS_FACILITY_CLASS_POKEMANIAC, FACILITY_CLASS_POKEMANIAC},
+ {RS_FACILITY_CLASS_SWIMMER_M, FACILITY_CLASS_SWIMMER_M},
+ {RS_FACILITY_CLASS_BLACK_BELT, FACILITY_CLASS_BLACK_BELT},
+ {RS_FACILITY_CLASS_GUITARIST, FACILITY_CLASS_GUITARIST},
+ {RS_FACILITY_CLASS_KINDLER, FACILITY_CLASS_KINDLER},
+ {RS_FACILITY_CLASS_CAMPER, FACILITY_CLASS_CAMPER},
+ {RS_FACILITY_CLASS_BUG_MANIAC, FACILITY_CLASS_BUG_MANIAC},
+ {RS_FACILITY_CLASS_PSYCHIC_M, FACILITY_CLASS_PSYCHIC_M},
+ {RS_FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_PSYCHIC_F},
+ {RS_FACILITY_CLASS_GENTLEMAN, FACILITY_CLASS_GENTLEMAN},
+ {RS_FACILITY_CLASS_ELITE_FOUR_M, FACILITY_CLASS_ELITE_FOUR_SIDNEY},
+ {RS_FACILITY_CLASS_ELITE_FOUR_F, FACILITY_CLASS_ELITE_FOUR_PHOEBE},
+ {RS_FACILITY_CLASS_LEADER_F, FACILITY_CLASS_LEADER_ROXANNE},
+ {RS_FACILITY_CLASS_LEADER_M, FACILITY_CLASS_LEADER_BRAWLY},
+ {RS_FACILITY_CLASS_LEADER_MF, FACILITY_CLASS_LEADER_TATE_AND_LIZA},
+ {RS_FACILITY_CLASS_SCHOOL_KID_M, FACILITY_CLASS_SCHOOL_KID_M},
+ {RS_FACILITY_CLASS_SCHOOL_KID_F, FACILITY_CLASS_SCHOOL_KID_F},
+ {RS_FACILITY_CLASS_SR_AND_JR, FACILITY_CLASS_SR_AND_JR},
+ {RS_FACILITY_CLASS_POKEFAN_M, FACILITY_CLASS_POKEFAN_M},
+ {RS_FACILITY_CLASS_POKEFAN_F, FACILITY_CLASS_POKEFAN_F},
+ {RS_FACILITY_CLASS_EXPERT_M, FACILITY_CLASS_EXPERT_M},
+ {RS_FACILITY_CLASS_EXPERT_F, FACILITY_CLASS_EXPERT_F},
+ {RS_FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_YOUNGSTER},
+ {RS_FACILITY_CLASS_CHAMPION, FACILITY_CLASS_CHAMPION_WALLACE},
+ {RS_FACILITY_CLASS_FISHERMAN, FACILITY_CLASS_FISHERMAN},
+ {RS_FACILITY_CLASS_CYCLING_TRIATHLETE_M, FACILITY_CLASS_CYCLING_TRIATHLETE_M},
+ {RS_FACILITY_CLASS_CYCLING_TRIATHLETE_F, FACILITY_CLASS_CYCLING_TRIATHLETE_F},
+ {RS_FACILITY_CLASS_RUNNING_TRIATHLETE_M, FACILITY_CLASS_RUNNING_TRIATHLETE_M},
+ {RS_FACILITY_CLASS_RUNNING_TRIATHLETE_F, FACILITY_CLASS_RUNNING_TRIATHLETE_F},
+ {RS_FACILITY_CLASS_SWIMMING_TRIATHLETE_M, FACILITY_CLASS_SWIMMING_TRIATHLETE_M},
+ {RS_FACILITY_CLASS_SWIMMING_TRIATHLETE_F, FACILITY_CLASS_SWIMMING_TRIATHLETE_F},
+ {RS_FACILITY_CLASS_DRAGON_TAMER, FACILITY_CLASS_DRAGON_TAMER},
+ {RS_FACILITY_CLASS_BIRD_KEEPER, FACILITY_CLASS_BIRD_KEEPER},
+ {RS_FACILITY_CLASS_NINJA_BOY, FACILITY_CLASS_NINJA_BOY},
+ {RS_FACILITY_CLASS_BATTLE_GIRL, FACILITY_CLASS_BATTLE_GIRL},
+ {RS_FACILITY_CLASS_PARASOL_LADY, FACILITY_CLASS_PARASOL_LADY},
+ {RS_FACILITY_CLASS_SWIMMER_F, FACILITY_CLASS_SWIMMER_F},
+ {RS_FACILITY_CLASS_PICNICKER, FACILITY_CLASS_PICNICKER},
+ {RS_FACILITY_CLASS_TWINS, FACILITY_CLASS_TWINS},
+ {RS_FACILITY_CLASS_SAILOR, FACILITY_CLASS_SAILOR},
+ {RS_FACILITY_CLASS_COLLECTOR, FACILITY_CLASS_COLLECTOR},
+ {RS_FACILITY_CLASS_WALLY, FACILITY_CLASS_WALLY},
+ {RS_FACILITY_CLASS_BRENDAN_1, FACILITY_CLASS_BRENDAN},
+ {RS_FACILITY_CLASS_BRENDAN_2, FACILITY_CLASS_BRENDAN_2},
+ {RS_FACILITY_CLASS_BRENDAN_3, FACILITY_CLASS_BRENDAN_3},
+ {RS_FACILITY_CLASS_MAY_1, FACILITY_CLASS_MAY},
+ {RS_FACILITY_CLASS_MAY_2, FACILITY_CLASS_MAY_2},
+ {RS_FACILITY_CLASS_MAY_3, FACILITY_CLASS_MAY_3},
+ {RS_FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_PKMN_BREEDER_M},
+ {RS_FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_PKMN_BREEDER_F},
+ {RS_FACILITY_CLASS_PKMN_RANGER_M, FACILITY_CLASS_PKMN_RANGER_M},
+ {RS_FACILITY_CLASS_PKMN_RANGER_F, FACILITY_CLASS_PKMN_RANGER_F},
+ {RS_FACILITY_CLASS_MAGMA_LEADER, FACILITY_CLASS_MAGMA_LEADER_MAXIE},
+ {RS_FACILITY_CLASS_MAGMA_GRUNT_M, FACILITY_CLASS_MAGMA_GRUNT_M},
+ {RS_FACILITY_CLASS_MAGMA_GRUNT_F, FACILITY_CLASS_MAGMA_GRUNT_F},
+ {RS_FACILITY_CLASS_LASS, FACILITY_CLASS_LASS},
+ {RS_FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_BUG_CATCHER},
+ {RS_FACILITY_CLASS_HIKER, FACILITY_CLASS_HIKER},
+ {RS_FACILITY_CLASS_YOUNG_COUPLE, FACILITY_CLASS_YOUNG_COUPLE},
+ {RS_FACILITY_CLASS_OLD_COUPLE, FACILITY_CLASS_OLD_COUPLE},
+ {RS_FACILITY_CLASS_SIS_AND_BRO, FACILITY_CLASS_SIS_AND_BRO},
};
-static const u8 *const gUnknown_085DD03C[] =
+#define PARTNER_TEXTS(name) \
+ BattleFrontier_BattleTowerMultiPartnerRoom_Text_##name##Intro, \
+ BattleFrontier_BattleTowerMultiPartnerRoom_Text_##name##Mon1, \
+ BattleFrontier_BattleTowerMultiPartnerRoom_Text_##name##Mon2Ask, \
+ BattleFrontier_BattleTowerMultiPartnerRoom_Text_##name##Accept, \
+ BattleFrontier_BattleTowerMultiPartnerRoom_Text_##name##Reject
+
+static const u8 *const sPartnerApprenticeTexts1[] =
+{
+ PARTNER_TEXTS(Apprentice1)
+};
+
+static const u8 *const sPartnerApprenticeTexts2[] =
+{
+ PARTNER_TEXTS(Apprentice2)
+};
+
+static const u8 *const sPartnerApprenticeTexts3[] =
+{
+ PARTNER_TEXTS(Apprentice3)
+};
+
+static const u8 *const sPartnerApprenticeTexts4[] =
+{
+ PARTNER_TEXTS(Apprentice4)
+};
+
+static const u8 *const sPartnerApprenticeTexts5[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244A23,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244AA9,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244AD6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244B52,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244B93
+ PARTNER_TEXTS(Apprentice5)
};
-static const u8 *const gUnknown_085DD050[] =
+static const u8 *const sPartnerApprenticeTexts6[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244BD2,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244C18,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244C6E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244CD6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244D07
+ PARTNER_TEXTS(Apprentice6)
};
-static const u8 *const gUnknown_085DD064[] =
+static const u8 *const sPartnerApprenticeTexts7[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244D36,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244D82,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244DC6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244DFE,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244E5B
+ PARTNER_TEXTS(Apprentice7)
};
-static const u8 *const gUnknown_085DD078[] =
+static const u8 *const sPartnerApprenticeTexts8[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244E7E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244ECA,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244EF4,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244F4F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244F98
+ PARTNER_TEXTS(Apprentice8)
};
-static const u8 *const gUnknown_085DD08C[] =
+static const u8 *const sPartnerApprenticeTexts9[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_244FD3,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245013,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24503D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245087,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2450C0
+ PARTNER_TEXTS(Apprentice9)
};
-static const u8 *const gUnknown_085DD0A0[] =
+static const u8 *const sPartnerApprenticeTexts10[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2450E6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245196,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2451BD,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24522F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24529A
+ PARTNER_TEXTS(Apprentice10)
};
-static const u8 *const gUnknown_085DD0B4[] =
+static const u8 *const sPartnerApprenticeTexts11[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2452EF,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2453B4,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245406,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245464,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2454A3
+ PARTNER_TEXTS(Apprentice11)
};
-static const u8 *const gUnknown_085DD0C8[] =
+static const u8 *const sPartnerApprenticeTexts12[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2454D6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245535,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24555F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2455EC,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245656
+ PARTNER_TEXTS(Apprentice12)
};
-static const u8 *const gUnknown_085DD0DC[] =
+static const u8 *const sPartnerApprenticeTexts13[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24568A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2456F5,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245740,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2457D9,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24581F
+ PARTNER_TEXTS(Apprentice13)
};
-static const u8 *const gUnknown_085DD0F0[] =
+static const u8 *const sPartnerApprenticeTexts14[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245851,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24589C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2458CE,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245923,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24597F
+ PARTNER_TEXTS(Apprentice14)
};
-static const u8 *const gUnknown_085DD104[] =
+static const u8 *const sPartnerApprenticeTexts15[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2459BE,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2459F7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245A5F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245AB4,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245B3E
+ PARTNER_TEXTS(Apprentice15)
};
-static const u8 *const gUnknown_085DD118[] =
+static const u8 *const sPartnerApprenticeTexts16[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245B79,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245B91,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245BBD,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245C05,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245C2D
+ PARTNER_TEXTS(Apprentice16)
};
-static const u8 *const gUnknown_085DD12C[] =
+static const u8 *const sPartnerTextsLass[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245C66,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245C7F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245CAC,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245CE6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245D07
+ PARTNER_TEXTS(Lass)
};
-static const u8 *const gUnknown_085DD140[] =
+static const u8 *const sPartnerTextsYoungster[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245D4B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245D60,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245D8D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245DC7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245DF0
+ PARTNER_TEXTS(Youngster)
};
-static const u8 *const gUnknown_085DD154[] =
+static const u8 *const sPartnerTextsHiker[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245E20,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245E41,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245E78,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245EBD,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245EEC
+ PARTNER_TEXTS(Hiker)
};
-static const u8 *const gUnknown_085DD168[] =
+static const u8 *const sPartnerTextsBeauty[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245F2B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245F58,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245F87,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_245FC6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246002
+ PARTNER_TEXTS(Beauty)
};
-static const u8 *const gUnknown_085DD17C[] =
+static const u8 *const sPartnerTextsFisherman[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246020,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246051,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246082,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2460D5,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24610D
+ PARTNER_TEXTS(Fisherman)
};
-static const u8 *const gUnknown_085DD190[] =
+static const u8 *const sPartnerTextsLady[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24614A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24615D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24617D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2461C7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2461F5
+ PARTNER_TEXTS(Lady)
};
-static const u8 *const gUnknown_085DD1A4[] =
+static const u8 *const sPartnerTextsCyclingTriathleteF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24622A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246244,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24626E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2462AA,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2462E4
+ PARTNER_TEXTS(CyclingTriathleteF)
};
-static const u8 *const gUnknown_085DD1B8[] =
+static const u8 *const sPartnerTextsBugCatcher[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24631F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24633C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24636B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2463C5,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2463FF
+ PARTNER_TEXTS(BugCatcher)
};
-static const u8 *const gUnknown_085DD1CC[] =
+static const u8 *const sPartnerTextsSchoolKidM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246449,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246478,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24649D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2464EE,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246529
+ PARTNER_TEXTS(SchoolKidM)
};
-static const u8 *const gUnknown_085DD1E0[] =
+static const u8 *const sPartnerTextsRichBoy[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246571,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24658C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2465B5,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246605,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24662A
+ PARTNER_TEXTS(RichBoy)
};
-static const u8 *const gUnknown_085DD1F4[] =
+static const u8 *const sPartnerTextsBlackBelt[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246662,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246686,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2466B4,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2466E6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24670A
+ PARTNER_TEXTS(BlackBelt)
};
-static const u8 *const gUnknown_085DD208[] =
+static const u8 *const sPartnerTextsTuberF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246741,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246760,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246791,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2467C4,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2467E6
+ PARTNER_TEXTS(TuberF)
};
-static const u8 *const gUnknown_085DD21C[] =
+static const u8 *const sPartnerTextsHexManiac[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2467FF,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246831,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246864,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2468A7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2468FE
+ PARTNER_TEXTS(HexManiac)
};
-static const u8 *const gUnknown_085DD230[] =
+static const u8 *const sPartnerTextsPkmnBreederM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24692B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24694B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24697C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2469B4,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2469F1
+ PARTNER_TEXTS(PkmnBreederM)
};
-static const u8 *const gUnknown_085DD244[] =
+static const u8 *const sPartnerTextsRunningTriathleteF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246A22,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246A4E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246A85,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246ACF,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246AF7
+ PARTNER_TEXTS(RunningTriathleteF)
};
-static const u8 *const gUnknown_085DD258[] =
+static const u8 *const sPartnerTextsRunningTriathleteM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246B2B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246B3F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246B6B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246BB2,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246BE9
+ PARTNER_TEXTS(RunningTriathleteM)
};
-static const u8 *const gUnknown_085DD26C[] =
+static const u8 *const sPartnerTextsBattleGirl[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246C22,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246C35,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246C6C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246CB3,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246CE9
+ PARTNER_TEXTS(BattleGirl)
};
-static const u8 *const gUnknown_085DD280[] =
+static const u8 *const sPartnerTextsCyclingTriathleteM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246D2D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246D3F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246D6A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246D9E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246DD3
+ PARTNER_TEXTS(CyclingTriathleteM)
};
-static const u8 *const gUnknown_085DD294[] =
+static const u8 *const sPartnerTextsTuberM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246E1A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246E39,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246E64,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246EB6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246EEE
+ PARTNER_TEXTS(TuberM)
};
-static const u8 *const gUnknown_085DD2A8[] =
+static const u8 *const sPartnerTextsGuitarist[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246F21,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246F4C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246F7B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_246FCC,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247013
+ PARTNER_TEXTS(Guitarist)
};
-static const u8 *const gUnknown_085DD2BC[] =
+static const u8 *const sPartnerTextsGentleman[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24705B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24707D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2470B2,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2470FD,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24712A
+ PARTNER_TEXTS(Gentleman)
};
-static const u8 *const gUnknown_085DD2D0[] =
+static const u8 *const sPartnerTextsPokefanM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24716C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24718D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2471C7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2471FB,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247238
+ PARTNER_TEXTS(PokefanM)
};
-static const u8 *const gUnknown_085DD2E4[] =
+static const u8 *const sPartnerTextsExpertM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247268,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247291,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2472C7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247313,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247348
+ PARTNER_TEXTS(ExpertM)
};
-static const u8 *const gUnknown_085DD2F8[] =
+static const u8 *const sPartnerTextsExpertF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24737A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24738F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2473C6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2473FB,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247438
+ PARTNER_TEXTS(ExpertF)
};
-static const u8 *const gUnknown_085DD30C[] =
+static const u8 *const sPartnerTextsDragonTamer[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247470,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247484,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2474AF,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2474EC,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24751D
+ PARTNER_TEXTS(DragonTamer)
};
-static const u8 *const gUnknown_085DD320[] =
+static const u8 *const sPartnerTextsBirdKeeper[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24754A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24755C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24758B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2475BC,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2475D5
+ PARTNER_TEXTS(BirdKeeper)
};
-static const u8 *const gUnknown_085DD334[] =
+static const u8 *const sPartnerTextsNinjaBoy[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24760D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247629,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247655,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24769B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2476ED
+ PARTNER_TEXTS(NinjaBoy)
};
-static const u8 *const gUnknown_085DD348[] =
+static const u8 *const sPartnerTextsParasolLady[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247724,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247749,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24777A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2477CE,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247807
+ PARTNER_TEXTS(ParasolLady)
};
-static const u8 *const gUnknown_085DD35C[] =
+static const u8 *const sPartnerTextsBugManiac[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247838,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247854,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247889,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2478DD,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24790D
+ PARTNER_TEXTS(BugManiac)
};
-static const u8 *const gUnknown_085DD370[] =
+static const u8 *const sPartnerTextsSailor[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247942,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24795F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247991,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2479CE,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247A18
+ PARTNER_TEXTS(Sailor)
};
-static const u8 *const gUnknown_085DD384[] =
+static const u8 *const sPartnerTextsCollector[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247A51,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247A76,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247AA1,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247AE3,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247B16
+ PARTNER_TEXTS(Collector)
};
-static const u8 *const gUnknown_085DD398[] =
+static const u8 *const sPartnerTextsPkmnRangerM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247B3E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247B62,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247B9B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247BE7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247C23
+ PARTNER_TEXTS(PkmnRangerM)
};
-static const u8 *const gUnknown_085DD3AC[] =
+static const u8 *const sPartnerTextsPkmnRangerF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247C4E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247C8C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247CB2,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247D07,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247D4E
+ PARTNER_TEXTS(PkmnRangerF)
};
-static const u8 *const gUnknown_085DD3C0[] =
+static const u8 *const sPartnerTextsAromaLady[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247D97,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247DC7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247DFE,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247E3E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247E7E
+ PARTNER_TEXTS(AromaLady)
};
-static const u8 *const gUnknown_085DD3D4[] =
+static const u8 *const sPartnerTextsRuinManiac[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247EA1,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247EB5,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247EE9,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247F3F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247F6D
+ PARTNER_TEXTS(RuinManiac)
};
-static const u8 *const gUnknown_085DD3E8[] =
+static const u8 *const sPartnerTextsCoolTrainerM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247FA3,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247FB7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_247FE9,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248031,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24805E
+ PARTNER_TEXTS(CoolTrainerM)
};
-static const u8 *const gUnknown_085DD3FC[] =
+static const u8 *const sPartnerTextsCoolTrainerF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24808D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2480AB,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2480DC,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248128,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248151
+ PARTNER_TEXTS(CoolTrainerF)
};
-static const u8 *const gUnknown_085DD410[] =
+static const u8 *const sPartnerTextsPokemaniac[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24818E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2481A9,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2481E1,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248221,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24824F
+ PARTNER_TEXTS(Pokemaniac)
};
-static const u8 *const gUnknown_085DD424[] =
+static const u8 *const sPartnerTextsKindler[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248297,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2482B1,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2482DC,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248321,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24833D
+ PARTNER_TEXTS(Kindler)
};
-static const u8 *const gUnknown_085DD438[] =
+static const u8 *const sPartnerTextsCamper[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248369,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24838D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2483C1,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248401,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248431
+ PARTNER_TEXTS(Camper)
};
-static const u8 *const gUnknown_085DD44C[] =
+static const u8 *const sPartnerTextsPicnicker[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248467,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248477,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2484AC,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2484E7,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248517
+ PARTNER_TEXTS(Picnicker)
};
-static const u8 *const gUnknown_085DD460[] =
+static const u8 *const sPartnerTextsPsychicM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248553,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24856A,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24857D,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2485E5,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248614
+ PARTNER_TEXTS(PsychicM)
};
-static const u8 *const gUnknown_085DD474[] =
+static const u8 *const sPartnerTextsPsychicF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24864E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248661,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248671,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2486C6,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2486FF
+ PARTNER_TEXTS(PsychicF)
};
-static const u8 *const gUnknown_085DD488[] =
+static const u8 *const sPartnerTextsSchoolKidF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248725,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248751,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248781,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2487C9,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2487F7
+ PARTNER_TEXTS(SchoolKidF)
};
-static const u8 *const gUnknown_085DD49C[] =
+static const u8 *const sPartnerTextsPkmnBreederF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248829,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24885B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248892,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2488D8,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248908
+ PARTNER_TEXTS(PkmnBreederF)
};
-static const u8 *const gUnknown_085DD4B0[] =
+static const u8 *const sPartnerTextsPokefanF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24894B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24895F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_24896F,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2489BD,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_2489E7
+ PARTNER_TEXTS(PokefanF)
};
-static const u8 *const gUnknown_085DD4C4[] =
+static const u8 *const sPartnerTextsSwimmerF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248A10,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248A40,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248A72,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248AC0,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248AEB
+ PARTNER_TEXTS(SwimmerF)
};
-static const u8 *const gUnknown_085DD4D8[] =
+static const u8 *const sPartnerTextsSwimmingTriathleteM[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248B22,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248B39,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248B4C,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248BB4,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248BEE
+ PARTNER_TEXTS(SwimmingTriathleteM)
};
-static const u8 *const gUnknown_085DD4EC[] =
+static const u8 *const sPartnerTextsSwimmingTriathleteF[] =
{
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248C2E,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248C5B,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248C90,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248CCF,
- BattleFrontier_BattleTowerMultiBattleRoom_Text_248D04
+ PARTNER_TEXTS(SwimmingTriathleteF)
+};
+
+static const u8 *const sPartnerTextsSwimmerM[] =
+{
+ PARTNER_TEXTS(SwimmerM)
};
struct
{
u32 facilityClass;
const u8 *const *strings;
-} const gUnknown_085DD500[] =
-{
- {FACILITY_CLASS_LASS, gUnknown_085DD118},
- {FACILITY_CLASS_YOUNGSTER, gUnknown_085DD12C},
- {FACILITY_CLASS_HIKER, gUnknown_085DD140},
- {FACILITY_CLASS_BEAUTY, gUnknown_085DD154},
- {FACILITY_CLASS_FISHERMAN, gUnknown_085DD168},
- {FACILITY_CLASS_LADY, gUnknown_085DD17C},
- {FACILITY_CLASS_CYCLING_TRIATHLETE_F, gUnknown_085DD190},
- {FACILITY_CLASS_BUG_CATCHER, gUnknown_085DD1A4},
- {FACILITY_CLASS_SCHOOL_KID_M, gUnknown_085DD1B8},
- {FACILITY_CLASS_RICH_BOY, gUnknown_085DD1CC},
- {FACILITY_CLASS_BLACK_BELT, gUnknown_085DD1E0},
- {FACILITY_CLASS_TUBER_F, gUnknown_085DD1F4},
- {FACILITY_CLASS_HEX_MANIAC, gUnknown_085DD208},
- {FACILITY_CLASS_PKMN_BREEDER_M, gUnknown_085DD21C},
- {FACILITY_CLASS_RUNNING_TRIATHLETE_F, gUnknown_085DD230},
- {FACILITY_CLASS_RUNNING_TRIATHLETE_M, gUnknown_085DD244},
- {FACILITY_CLASS_BATTLE_GIRL, gUnknown_085DD258},
- {FACILITY_CLASS_CYCLING_TRIATHLETE_M, gUnknown_085DD26C},
- {FACILITY_CLASS_TUBER_M, gUnknown_085DD280},
- {FACILITY_CLASS_GUITARIST, gUnknown_085DD294},
- {FACILITY_CLASS_GENTLEMAN, gUnknown_085DD2A8},
- {FACILITY_CLASS_POKEFAN_M, gUnknown_085DD2BC},
- {FACILITY_CLASS_EXPERT_M, gUnknown_085DD2D0},
- {FACILITY_CLASS_EXPERT_F, gUnknown_085DD2E4},
- {FACILITY_CLASS_DRAGON_TAMER, gUnknown_085DD2F8},
- {FACILITY_CLASS_BIRD_KEEPER, gUnknown_085DD30C},
- {FACILITY_CLASS_NINJA_BOY, gUnknown_085DD320},
- {FACILITY_CLASS_PARASOL_LADY, gUnknown_085DD334},
- {FACILITY_CLASS_BUG_MANIAC, gUnknown_085DD348},
- {FACILITY_CLASS_SAILOR, gUnknown_085DD35C},
- {FACILITY_CLASS_COLLECTOR, gUnknown_085DD370},
- {FACILITY_CLASS_PKMN_RANGER_M, gUnknown_085DD384},
- {FACILITY_CLASS_PKMN_RANGER_F, gUnknown_085DD398},
- {FACILITY_CLASS_AROMA_LADY, gUnknown_085DD3AC},
- {FACILITY_CLASS_RUIN_MANIAC, gUnknown_085DD3C0},
- {FACILITY_CLASS_COOLTRAINER_M, gUnknown_085DD3D4},
- {FACILITY_CLASS_COOLTRAINER_F, gUnknown_085DD3E8},
- {FACILITY_CLASS_POKEMANIAC, gUnknown_085DD3FC},
- {FACILITY_CLASS_KINDLER, gUnknown_085DD410},
- {FACILITY_CLASS_CAMPER, gUnknown_085DD424},
- {FACILITY_CLASS_PICNICKER, gUnknown_085DD438},
- {FACILITY_CLASS_PSYCHIC_M, gUnknown_085DD44C},
- {FACILITY_CLASS_PSYCHIC_F, gUnknown_085DD460},
- {FACILITY_CLASS_SCHOOL_KID_F, gUnknown_085DD474},
- {FACILITY_CLASS_POKEMON_BREEDER_F, gUnknown_085DD488},
- {FACILITY_CLASS_POKEFAN_F, gUnknown_085DD49C},
- {FACILITY_CLASS_SWIMMER_F, gUnknown_085DD4B0},
- {FACILITY_CLASS_SWIMMING_TRIATHLETE_M, gUnknown_085DD4C4},
- {FACILITY_CLASS_SWIMMING_TRIATHLETE_F, gUnknown_085DD4D8},
- {FACILITY_CLASS_SWIMMER_M, gUnknown_085DD4EC}
-};
-
-static const u8 *const *const gUnknown_085DD690[] =
-{
- gUnknown_085DCFD8,
- gUnknown_085DCFEC,
- gUnknown_085DD000,
- gUnknown_085DD014,
- gUnknown_085DD028,
- gUnknown_085DD03C,
- gUnknown_085DD050,
- gUnknown_085DD064,
- gUnknown_085DD078,
- gUnknown_085DD08C,
- gUnknown_085DD0A0,
- gUnknown_085DD0B4,
- gUnknown_085DD0C8,
- gUnknown_085DD0DC,
- gUnknown_085DD0F0,
- gUnknown_085DD104
+} const sPartnerTrainerTextTables[] =
+{
+ {FACILITY_CLASS_LASS, sPartnerTextsLass},
+ {FACILITY_CLASS_YOUNGSTER, sPartnerTextsYoungster},
+ {FACILITY_CLASS_HIKER, sPartnerTextsHiker},
+ {FACILITY_CLASS_BEAUTY, sPartnerTextsBeauty},
+ {FACILITY_CLASS_FISHERMAN, sPartnerTextsFisherman},
+ {FACILITY_CLASS_LADY, sPartnerTextsLady},
+ {FACILITY_CLASS_CYCLING_TRIATHLETE_F, sPartnerTextsCyclingTriathleteF},
+ {FACILITY_CLASS_BUG_CATCHER, sPartnerTextsBugCatcher},
+ {FACILITY_CLASS_SCHOOL_KID_M, sPartnerTextsSchoolKidM},
+ {FACILITY_CLASS_RICH_BOY, sPartnerTextsRichBoy},
+ {FACILITY_CLASS_BLACK_BELT, sPartnerTextsBlackBelt},
+ {FACILITY_CLASS_TUBER_F, sPartnerTextsTuberF},
+ {FACILITY_CLASS_HEX_MANIAC, sPartnerTextsHexManiac},
+ {FACILITY_CLASS_PKMN_BREEDER_M, sPartnerTextsPkmnBreederM},
+ {FACILITY_CLASS_RUNNING_TRIATHLETE_F, sPartnerTextsRunningTriathleteF},
+ {FACILITY_CLASS_RUNNING_TRIATHLETE_M, sPartnerTextsRunningTriathleteM},
+ {FACILITY_CLASS_BATTLE_GIRL, sPartnerTextsBattleGirl},
+ {FACILITY_CLASS_CYCLING_TRIATHLETE_M, sPartnerTextsCyclingTriathleteM},
+ {FACILITY_CLASS_TUBER_M, sPartnerTextsTuberM},
+ {FACILITY_CLASS_GUITARIST, sPartnerTextsGuitarist},
+ {FACILITY_CLASS_GENTLEMAN, sPartnerTextsGentleman},
+ {FACILITY_CLASS_POKEFAN_M, sPartnerTextsPokefanM},
+ {FACILITY_CLASS_EXPERT_M, sPartnerTextsExpertM},
+ {FACILITY_CLASS_EXPERT_F, sPartnerTextsExpertF},
+ {FACILITY_CLASS_DRAGON_TAMER, sPartnerTextsDragonTamer},
+ {FACILITY_CLASS_BIRD_KEEPER, sPartnerTextsBirdKeeper},
+ {FACILITY_CLASS_NINJA_BOY, sPartnerTextsNinjaBoy},
+ {FACILITY_CLASS_PARASOL_LADY, sPartnerTextsParasolLady},
+ {FACILITY_CLASS_BUG_MANIAC, sPartnerTextsBugManiac},
+ {FACILITY_CLASS_SAILOR, sPartnerTextsSailor},
+ {FACILITY_CLASS_COLLECTOR, sPartnerTextsCollector},
+ {FACILITY_CLASS_PKMN_RANGER_M, sPartnerTextsPkmnRangerM},
+ {FACILITY_CLASS_PKMN_RANGER_F, sPartnerTextsPkmnRangerF},
+ {FACILITY_CLASS_AROMA_LADY, sPartnerTextsAromaLady},
+ {FACILITY_CLASS_RUIN_MANIAC, sPartnerTextsRuinManiac},
+ {FACILITY_CLASS_COOLTRAINER_M, sPartnerTextsCoolTrainerM},
+ {FACILITY_CLASS_COOLTRAINER_F, sPartnerTextsCoolTrainerF},
+ {FACILITY_CLASS_POKEMANIAC, sPartnerTextsPokemaniac},
+ {FACILITY_CLASS_KINDLER, sPartnerTextsKindler},
+ {FACILITY_CLASS_CAMPER, sPartnerTextsCamper},
+ {FACILITY_CLASS_PICNICKER, sPartnerTextsPicnicker},
+ {FACILITY_CLASS_PSYCHIC_M, sPartnerTextsPsychicM},
+ {FACILITY_CLASS_PSYCHIC_F, sPartnerTextsPsychicF},
+ {FACILITY_CLASS_SCHOOL_KID_F, sPartnerTextsSchoolKidF},
+ {FACILITY_CLASS_PKMN_BREEDER_F, sPartnerTextsPkmnBreederF},
+ {FACILITY_CLASS_POKEFAN_F, sPartnerTextsPokefanF},
+ {FACILITY_CLASS_SWIMMER_F, sPartnerTextsSwimmerF},
+ {FACILITY_CLASS_SWIMMING_TRIATHLETE_M, sPartnerTextsSwimmingTriathleteM},
+ {FACILITY_CLASS_SWIMMING_TRIATHLETE_F, sPartnerTextsSwimmingTriathleteF},
+ {FACILITY_CLASS_SWIMMER_M, sPartnerTextsSwimmerM}
+};
+
+static const u8 *const *const sPartnerApprenticeTextTables[NUM_APPRENTICES] =
+{
+ sPartnerApprenticeTexts1,
+ sPartnerApprenticeTexts2,
+ sPartnerApprenticeTexts3,
+ sPartnerApprenticeTexts4,
+ sPartnerApprenticeTexts5,
+ sPartnerApprenticeTexts6,
+ sPartnerApprenticeTexts7,
+ sPartnerApprenticeTexts8,
+ sPartnerApprenticeTexts9,
+ sPartnerApprenticeTexts10,
+ sPartnerApprenticeTexts11,
+ sPartnerApprenticeTexts12,
+ sPartnerApprenticeTexts13,
+ sPartnerApprenticeTexts14,
+ sPartnerApprenticeTexts15,
+ sPartnerApprenticeTexts16
};
struct
@@ -1018,9 +769,9 @@ struct
u8 fixedIV;
u8 level;
u8 nature;
- u8 evs[6];
- u16 moves[4];
-} const sStevenMons[3] =
+ u8 evs[NUM_STATS];
+ u16 moves[MAX_MON_MOVES];
+} const sStevenMons[MULTI_PARTY_SIZE] =
{
{
.species = SPECIES_METANG,
@@ -1050,116 +801,125 @@ struct
#include "data/battle_frontier/battle_tent.h"
-static void (* const gUnknown_085DF96C[])(void) =
+static void (* const sBattleTowerFuncs[])(void) =
+{
+ [BATTLE_TOWER_FUNC_INIT] = InitTowerChallenge,
+ [BATTLE_TOWER_FUNC_GET_DATA] = GetTowerData,
+ [BATTLE_TOWER_FUNC_SET_DATA] = SetTowerData,
+ [BATTLE_TOWER_FUNC_SET_OPPONENT] = SetNextFacilityOpponent,
+ [BATTLE_TOWER_FUNC_SET_BATTLE_WON] = SetTowerBattleWon,
+ [BATTLE_TOWER_FUNC_GIVE_RIBBONS] = AwardBattleTowerRibbons,
+ [BATTLE_TOWER_FUNC_SAVE] = SaveTowerChallenge,
+ [BATTLE_TOWER_FUNC_GET_OPPONENT_INTRO] = GetOpponentIntroSpeech,
+ [BATTLE_TOWER_FUNC_NOP] = nullsub_61,
+ [BATTLE_TOWER_FUNC_NOP2] = nullsub_116,
+ [BATTLE_TOWER_FUNC_LOAD_PARTNERS] = LoadMultiPartnerCandidatesData,
+ [BATTLE_TOWER_FUNC_PARTNER_MSG] = ShowPartnerCandidateMessage,
+ [BATTLE_TOWER_FUNC_LOAD_LINK_OPPONENTS] = LoadLinkMultiOpponentsData,
+ [BATTLE_TOWER_FUNC_13] = sub_8164DCC,
+ [BATTLE_TOWER_FUNC_SET_PARTNER_GFX] = SetMultiPartnerGfx,
+ [BATTLE_TOWER_FUNC_SET_INTERVIEW_DATA] = SetTowerInterviewData,
+};
+
+static const u32 sWinStreakFlags[][2] =
{
- sub_8161F94,
- sub_8162054,
- sub_81620F4,
- ChooseNextBattleTowerTrainer,
- sub_81621C0,
- AwardBattleTowerRibbons,
- SaveBattleTowerProgress,
- sub_8163914,
- nullsub_61,
- SpriteCB_Null6,
- sub_81642A0,
- sub_8164828,
- sub_8164B74,
- sub_8164DCC,
- sub_8164DE4,
- sub_8164E04,
+ {STREAK_TOWER_SINGLES_50, STREAK_TOWER_SINGLES_OPEN},
+ {STREAK_TOWER_DOUBLES_50, STREAK_TOWER_DOUBLES_OPEN},
+ {STREAK_TOWER_MULTIS_50, STREAK_TOWER_MULTIS_OPEN},
+ {STREAK_TOWER_LINK_MULTIS_50, STREAK_TOWER_LINK_MULTIS_OPEN},
};
-static const u32 gUnknown_085DF9AC[][2] =
+static const u32 sWinStreakMasks[][2] =
{
- {0x00000001, 0x00000002},
- {0x00004000, 0x00008000},
- {0x00010000, 0x00020000},
- {0x00040000, 0x00080000},
+ {~(STREAK_TOWER_SINGLES_50), ~(STREAK_TOWER_SINGLES_OPEN)},
+ {~(STREAK_TOWER_DOUBLES_50), ~(STREAK_TOWER_DOUBLES_OPEN)},
+ {~(STREAK_TOWER_MULTIS_50), ~(STREAK_TOWER_MULTIS_OPEN)},
+ {~(STREAK_TOWER_LINK_MULTIS_50), ~(STREAK_TOWER_LINK_MULTIS_OPEN)},
};
-static const u32 gUnknown_085DF9CC[][2] =
+// The challenge number at which an Apprentice can appear, depending on how many of their questions were answered
+static const u8 sApprenticeChallengeThreshold[MAX_APPRENTICE_QUESTIONS] =
{
- {0xfffffffe, 0xfffffffd},
- {0xffffbfff, 0xffff7fff},
- {0xfffeffff, 0xfffdffff},
- {0xfffbffff, 0xfff7ffff},
+ 1, 2, 3, 4, 5, 8, 9, 10, 11, 12
};
-static const u8 gUnknown_085DF9EC[] =
+// Unclear why this was duplicated
+static const u8 sBattleTowerPartySizes2[] =
{
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c
+ [FRONTIER_MODE_SINGLES] = FRONTIER_PARTY_SIZE,
+ [FRONTIER_MODE_DOUBLES] = FRONTIER_DOUBLES_PARTY_SIZE,
+ [FRONTIER_MODE_MULTIS] = FRONTIER_MULTI_PARTY_SIZE,
+ [FRONTIER_MODE_LINK_MULTIS] = FRONTIER_MULTI_PARTY_SIZE,
};
-static const u8 gUnknown_085DF9F6[] =
+// Trainer ID ranges for possible frontier trainers to encounter on particular challenges
+// Trainers are scaled by difficulty, so higher trainer IDs have better teams
+static const u16 sFrontierTrainerIdRanges[][2] =
{
- [FRONTIER_MODE_SINGLES] = 3,
- [FRONTIER_MODE_DOUBLES] = 4,
- [FRONTIER_MODE_MULTIS] = 2,
- [FRONTIER_MODE_LINK_MULTIS] = 2,
+ {FRONTIER_TRAINER_BRADY, FRONTIER_TRAINER_JILL}, // 0 - 99
+ {FRONTIER_TRAINER_TREVIN, FRONTIER_TRAINER_CHLOE}, // 80 - 119
+ {FRONTIER_TRAINER_ERIK, FRONTIER_TRAINER_SOFIA}, // 100 - 139
+ {FRONTIER_TRAINER_NORTON, FRONTIER_TRAINER_JAZLYN}, // 120 - 159
+ {FRONTIER_TRAINER_BRADEN, FRONTIER_TRAINER_ALISON}, // 140 - 179
+ {FRONTIER_TRAINER_ZACHERY, FRONTIER_TRAINER_LAMAR}, // 160 - 199
+ {FRONTIER_TRAINER_HANK, FRONTIER_TRAINER_TESS}, // 180 - 219
+ {FRONTIER_TRAINER_JAXON, FRONTIER_TRAINER_GRETEL}, // 200 - 299
};
-static const u16 gUnknown_085DF9FA[][2] =
+static const u16 sFrontierTrainerIdRangesHard[][2] =
{
- {0x0000, 0x0063},
- {0x0050, 0x0077},
- {0x0064, 0x008b},
- {0x0078, 0x009f},
- {0x008c, 0x00b3},
- {0x00a0, 0x00c7},
- {0x00b4, 0x00db},
- {0x00c8, 0x012b},
+ {FRONTIER_TRAINER_ERIK, FRONTIER_TRAINER_CHLOE}, // 100 - 119
+ {FRONTIER_TRAINER_NORTON, FRONTIER_TRAINER_SOFIA}, // 120 - 139
+ {FRONTIER_TRAINER_BRADEN, FRONTIER_TRAINER_JAZLYN}, // 140 - 159
+ {FRONTIER_TRAINER_ZACHERY, FRONTIER_TRAINER_ALISON}, // 160 - 179
+ {FRONTIER_TRAINER_HANK, FRONTIER_TRAINER_LAMAR}, // 180 - 199
+ {FRONTIER_TRAINER_JAXON, FRONTIER_TRAINER_TESS}, // 200 - 219
+ {FRONTIER_TRAINER_LEON, FRONTIER_TRAINER_RAUL}, // 220 - 239
+ {FRONTIER_TRAINER_JAXON, FRONTIER_TRAINER_GRETEL}, // 200 - 299
};
-static const u16 gUnknown_085DFA1A[][2] =
+// Trainer IDs? Don't make sense as part of previous array, min/max relationship reversed and never accessed
+static const u16 sUnused_085DFA1A[][2] =
{
- {0x0064, 0x0077},
- {0x0078, 0x008b},
- {0x008c, 0x009f},
- {0x00a0, 0x00b3},
- {0x00b4, 0x00c7},
- {0x00c8, 0x00db},
- {0x00dc, 0x00ef},
- {0x00c8, 0x012b},
- {0x00b3, 0x008d},
- {0x00c8, 0x00b7},
+ {179, 141}, // FRONTIER_TRAINER_ALISON - FRONTIER_TRAINER_KAYDEN
+ {200, 183}, // FRONTIER_TRAINER_JAXON - FRONTIER_TRAINER_HUNTER
};
-static const u8 gUnknown_085DFA42[4] =
+static const u8 sBattleTowerPartySizes[FRONTIER_MODE_COUNT] =
{
- [FRONTIER_MODE_SINGLES] = 3,
- [FRONTIER_MODE_DOUBLES] = 4,
- [FRONTIER_MODE_MULTIS] = 2,
- [FRONTIER_MODE_LINK_MULTIS] = 2,
+ [FRONTIER_MODE_SINGLES] = FRONTIER_PARTY_SIZE,
+ [FRONTIER_MODE_DOUBLES] = FRONTIER_DOUBLES_PARTY_SIZE,
+ [FRONTIER_MODE_MULTIS] = FRONTIER_MULTI_PARTY_SIZE,
+ [FRONTIER_MODE_LINK_MULTIS] = FRONTIER_MULTI_PARTY_SIZE,
};
-static const u16 gUnknown_085DFA46[] =
+static const u16 sRecordTrainerSpeechWon[] =
{
- 0x0c3a, 0x0c3a, 0x0c01, 0x0a2a, 0x0607, 0x0c01
+ EC_WORD_YAY, EC_WORD_YAY, EC_WORD_EXCL_EXCL, EC_WORD_I_VE, EC_WORD_WON, EC_WORD_EXCL_EXCL
};
-static const u16 gUnknown_085DFA52[] =
+static const u16 sRecordTrainerSpeechLost[] =
{
- 0x1039, 0x122e, 0x0c04, 0x0a3d, 0x0630, 0x0c04
+ EC_WORD_TOO, EC_WORD_BAD, EC_WORD_ELLIPSIS, EC_WORD_WE, EC_WORD_LOST, EC_WORD_ELLIPSIS
};
// code
-void sub_8161F74(void)
+void CallBattleTowerFunc(void)
{
- gUnknown_085DF96C[gSpecialVar_0x8004]();
+ sBattleTowerFuncs[gSpecialVar_0x8004]();
}
-static void sub_8161F94(void)
+static void InitTowerChallenge(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- gSaveBlock2Ptr->frontier.field_CA8 = 1;
+ gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_SAVING;
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
- gSaveBlock2Ptr->frontier.field_CA9_a = 0;
- gSaveBlock2Ptr->frontier.field_CA9_b = 0;
- sub_81A3ACC();
- if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]))
+ gSaveBlock2Ptr->frontier.challengePaused = FALSE;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = FALSE;
+ ResetFrontierTrainerIds();
+ if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0;
ValidateBattleTowerRecordChecksums();
@@ -1167,7 +927,7 @@ static void sub_8161F94(void)
gTrainerBattleOpponent_A = 0;
}
-static void sub_8162054(void)
+static void GetTowerData(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
@@ -1176,19 +936,19 @@ static void sub_8162054(void)
{
case 0:
break;
- case 1:
+ case TOWER_DATA_WIN_STREAK:
gSpecialVar_Result = GetCurrentBattleTowerWinStreak(lvlMode, battleMode);
break;
- case 2:
- gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]) != 0);
+ case TOWER_DATA_WIN_STREAK_ACTIVE:
+ gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0);
break;
- case 3:
- gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode;
+ case TOWER_DATA_LVL_MODE:
+ gSaveBlock2Ptr->frontier.towerLvlMode = gSaveBlock2Ptr->frontier.lvlMode;
break;
}
}
-static void sub_81620F4(void)
+static void SetTowerData(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
@@ -1197,28 +957,29 @@ static void sub_81620F4(void)
{
case 0:
break;
- case 1:
+ case TOWER_DATA_WIN_STREAK:
gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006;
break;
- case 2:
+ case TOWER_DATA_WIN_STREAK_ACTIVE:
if (gSpecialVar_0x8006)
- gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_085DF9AC[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode];
else
- gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_085DF9CC[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode];
break;
- case 3:
- gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode;
+ case TOWER_DATA_LVL_MODE:
+ gSaveBlock2Ptr->frontier.towerLvlMode = gSaveBlock2Ptr->frontier.lvlMode;
break;
}
}
-static void sub_81621C0(void)
+static void SetTowerBattleWon(void)
{
if (gTrainerBattleOpponent_A == TRAINER_EREADER)
ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer);
- if (gSaveBlock2Ptr->frontier.field_D04 < 9999)
- gSaveBlock2Ptr->frontier.field_D04++;
+ // towerNumWins is never read outside this conditional
+ if (gSaveBlock2Ptr->frontier.towerNumWins < MAX_STREAK)
+ gSaveBlock2Ptr->frontier.towerNumWins++;
gSaveBlock2Ptr->frontier.curChallengeBattleNum++;
SaveCurrentWinStreak();
@@ -1256,7 +1017,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
validMons++;
}
- if (validMons >= gUnknown_085DF9F6[battleMode]
+ if (validMons >= sBattleTowerPartySizes2[battleMode]
&& gSaveBlock2Ptr->frontier.towerRecords[i].winStreak == winStreak
&& gSaveBlock2Ptr->frontier.towerRecords[i].lvlMode == lvlMode
&& recordHasData
@@ -1270,10 +1031,10 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
if (battleMode == FRONTIER_MODE_SINGLES)
{
ValidateApprenticesChecksums();
- for (i = 0; i < 4; i++)
+ for (i = 0; i < APPRENTICE_COUNT; i++)
{
if (gSaveBlock2Ptr->apprentices[i].lvlMode != 0
- && gUnknown_085DF9EC[gSaveBlock2Ptr->apprentices[i].field_1] == winStreak
+ && sApprenticeChallengeThreshold[gSaveBlock2Ptr->apprentices[i].numQuestions] == winStreak
&& gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode)
{
trainerIds[idsCount] = i + TRAINER_RECORD_MIXING_APPRENTICE;
@@ -1293,12 +1054,12 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
}
}
-static void ChooseNextBattleTowerTrainer(void)
+static void SetNextFacilityOpponent(void)
{
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
if (lvlMode == FRONTIER_LVL_TENT)
{
- sub_8165E18();
+ SetNextBattleTentOpponent();
}
else
{
@@ -1326,7 +1087,7 @@ static void ChooseNextBattleTowerTrainer(void)
s32 i;
while (1)
{
- id = sub_8162548(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum);
+ id = GetRandomScaledFrontierTrainerId(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum);
// Ensure trainer wasn't previously fought in this challenge.
for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++)
@@ -1346,7 +1107,7 @@ static void ChooseNextBattleTowerTrainer(void)
}
}
-u16 sub_8162548(u8 challengeNum, u8 battleNum)
+u16 GetRandomScaledFrontierTrainerId(u8 challengeNum, u8 battleNum)
{
u16 trainerId;
@@ -1354,49 +1115,54 @@ u16 sub_8162548(u8 challengeNum, u8 battleNum)
{
if (battleNum == 6)
{
- trainerId = (gUnknown_085DFA1A[challengeNum][1] - gUnknown_085DFA1A[challengeNum][0]) + 1;
- trainerId = gUnknown_085DFA1A[challengeNum][0] + (Random() % trainerId);
+ // The last battle in each challenge has a jump in difficulty, pulls from a table with higher ranges
+ trainerId = (sFrontierTrainerIdRangesHard[challengeNum][1] - sFrontierTrainerIdRangesHard[challengeNum][0]) + 1;
+ trainerId = sFrontierTrainerIdRangesHard[challengeNum][0] + (Random() % trainerId);
}
else
{
- trainerId = (gUnknown_085DF9FA[challengeNum][1] - gUnknown_085DF9FA[challengeNum][0]) + 1;
- trainerId = gUnknown_085DF9FA[challengeNum][0] + (Random() % trainerId);
+ trainerId = (sFrontierTrainerIdRanges[challengeNum][1] - sFrontierTrainerIdRanges[challengeNum][0]) + 1;
+ trainerId = sFrontierTrainerIdRanges[challengeNum][0] + (Random() % trainerId);
}
}
else
{
- trainerId = (gUnknown_085DF9FA[7][1] - gUnknown_085DF9FA[7][0]) + 1;
- trainerId = gUnknown_085DF9FA[7][0] + (Random() % trainerId);
+ // After challenge 7, trainer IDs always come from the last, hardest range, which is the same for both trainer ID tables
+ trainerId = (sFrontierTrainerIdRanges[7][1] - sFrontierTrainerIdRanges[7][0]) + 1;
+ trainerId = sFrontierTrainerIdRanges[7][0] + (Random() % trainerId);
}
return trainerId;
}
-static void sub_81625B4(u8 challengeNum, u8 battleNum, u16 *trainerIdPtr, u8 *arg3) // Unused
+// Unused
+static void GetRandomScaledFrontierTrainerIdRange(u8 challengeNum, u8 battleNum, u16 *trainerIdPtr, u8 *rangePtr)
{
- u16 trainerId, count;
+ u16 trainerId, range;
if (challengeNum <= 7)
{
if (battleNum == 6)
{
- count = (gUnknown_085DFA1A[challengeNum][1] - gUnknown_085DFA1A[challengeNum][0]) + 1;
- trainerId = gUnknown_085DFA1A[challengeNum][0];
+ // The last battle in each challenge has a jump in difficulty, pulls from a table with higher ranges
+ range = (sFrontierTrainerIdRangesHard[challengeNum][1] - sFrontierTrainerIdRangesHard[challengeNum][0]) + 1;
+ trainerId = sFrontierTrainerIdRangesHard[challengeNum][0];
}
else
{
- count = (gUnknown_085DF9FA[challengeNum][1] - gUnknown_085DF9FA[challengeNum][0]) + 1;
- trainerId = gUnknown_085DF9FA[challengeNum][0];
+ range = (sFrontierTrainerIdRanges[challengeNum][1] - sFrontierTrainerIdRanges[challengeNum][0]) + 1;
+ trainerId = sFrontierTrainerIdRanges[challengeNum][0];
}
}
else
{
- count = (gUnknown_085DF9FA[7][1] - gUnknown_085DF9FA[7][0]) + 1;
- trainerId = gUnknown_085DF9FA[7][0];
+ // After challenge 7, trainer IDs always come from the last, hardest range, which is the same for both trainer ID tables
+ range = (sFrontierTrainerIdRanges[7][1] - sFrontierTrainerIdRanges[7][0]) + 1;
+ trainerId = sFrontierTrainerIdRanges[7][0];
}
*trainerIdPtr = trainerId;
- *arg3 = count;
+ *rangePtr = range;
}
void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId)
@@ -1415,7 +1181,7 @@ void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId)
SetFrontierBrainEventObjGfx_2();
return;
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
facilityClass = gFacilityTrainers[trainerId].facilityClass;
}
@@ -1507,7 +1273,7 @@ u8 GetBattleFacilityTrainerGfxId(u16 trainerId)
{
facilityClass = gSaveBlock2Ptr->frontier.ereaderTrainer.facilityClass;
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
facilityClass = gFacilityTrainers[trainerId].facilityClass;
}
@@ -1561,7 +1327,7 @@ void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm)
for (i = 0; i < 5; i++)
{
k = 0;
- for (j = 0; j < 4; j++)
+ for (j = 0; j < TRAINER_ID_LENGTH; j++)
{
if (gSaveBlock2Ptr->frontier.towerRecords[i].trainerId[j] != newRecord->trainerId[j])
break;
@@ -1649,7 +1415,7 @@ u8 GetFrontierTrainerFrontSpriteId(u16 trainerId)
{
return GetFrontierBrainTrainerPicIndex();
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
return gFacilityClassToPicIndex[gFacilityTrainers[trainerId].facilityClass];
}
@@ -1686,7 +1452,7 @@ u8 GetFrontierOpponentClass(u16 trainerId)
{
trainerClass = gTrainers[TRAINER_STEVEN].trainerClass;
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
trainerClass = gFacilityClassToTrainerClass[gFacilityTrainers[trainerId].facilityClass];
}
@@ -1727,7 +1493,7 @@ static u8 GetFrontierTrainerFacilityClass(u16 trainerId)
{
facilityClass = gSaveBlock2Ptr->frontier.ereaderTrainer.facilityClass;
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
facilityClass = gFacilityTrainers[trainerId].facilityClass;
}
@@ -1769,7 +1535,7 @@ void GetFrontierTrainerName(u8 *dst, u16 trainerId)
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
dst[i] = gTrainers[TRAINER_STEVEN].trainerName[i];
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
dst[i] = gFacilityTrainers[trainerId].trainerName[i];
@@ -1824,7 +1590,7 @@ static bool8 IsFrontierTrainerFemale(u16 trainerId)
{
return IsFrontierBrainFemale();
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
facilityClass = gFacilityTrainers[trainerId].facilityClass;
}
@@ -1872,18 +1638,18 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
{
s32 i, j;
u16 chosenMonIndices[4];
- u8 friendship = 0xFF;
+ u8 friendship = MAX_FRIENDSHIP;
u8 level = SetFacilityPtrsGetLevel();
u8 fixedIV = 0;
u8 bfMonCount;
- const u16 *monSets = NULL;
+ const u16 *monSet = NULL;
u32 otID = 0;
- if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ if (trainerId < FRONTIER_TRAINERS_COUNT)
{
// Normal battle frontier trainer.
fixedIV = GetFrontierTrainerFixedIvs(trainerId);
- monSets = gFacilityTrainers[gTrainerBattleOpponent_A].monSets;
+ monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet;
}
else if (trainerId == TRAINER_EREADER)
{
@@ -1921,20 +1687,20 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
// Attempt to fill the trainer's party with random Pokemon until 3 have been
// successfully chosen. The trainer's party may not have duplicate pokemon species
// or duplicate held items.
- for (bfMonCount = 0; monSets[bfMonCount] != 0xFFFF; bfMonCount++)
+ for (bfMonCount = 0; monSet[bfMonCount] != 0xFFFF; bfMonCount++)
;
i = 0;
otID = Random32();
while (i != monCount)
{
- u16 monSetId = monSets[Random() % bfMonCount];
- if ((level == 50 || level == 20) && monSetId > 849)
+ u16 monId = monSet[Random() % bfMonCount];
+ if ((level == 50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER)
continue;
// Ensure this pokemon species isn't a duplicate.
for (j = 0; j < i + firstMonId; j++)
{
- if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monSetId].species)
+ if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monId].species)
break;
}
if (j != i + firstMonId)
@@ -1944,7 +1710,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
for (j = 0; j < i + firstMonId; j++)
{
if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != 0
- && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
break;
}
if (j != i + firstMonId)
@@ -1954,34 +1720,34 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
// because the species and held items were already checked directly above.
for (j = 0; j < i; j++)
{
- if (chosenMonIndices[j] == monSetId)
+ if (chosenMonIndices[j] == monId)
break;
}
if (j != i)
continue;
- chosenMonIndices[i] = monSetId;
+ chosenMonIndices[i] = monId;
// Place the chosen pokemon into the trainer's party.
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
fixedIV,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otID);
- friendship = 255;
+ friendship = MAX_FRIENDSHIP;
// Give the chosen pokemon its specified moves.
for (j = 0; j < MAX_MON_MOVES; j++)
{
- SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monSetId].moves[j], j);
- if (gFacilityTrainerMons[monSetId].moves[j] == MOVE_FRUSTRATION)
+ SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].moves[j], j);
+ if (gFacilityTrainerMons[monId].moves[j] == MOVE_FRUSTRATION)
friendship = 0; // Frustration is more powerful the lower the pokemon's friendship is.
}
SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
// The pokemon was successfully added to the trainer's party, so it's safe to move on to
// the next party slot.
@@ -1993,12 +1759,12 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId)
{
s32 i, j;
- u8 friendship = 0xFF;
+ u8 friendship = MAX_FRIENDSHIP;
u8 level = 0;
u8 fixedIV = 0;
struct Apprentice *apprentice = &gSaveBlock2Ptr->apprentices[0];
- if (apprentice->field_1 < 5)
+ if (apprentice->numQuestions < 5)
fixedIV = 6;
else
fixedIV = 9;
@@ -2011,7 +1777,7 @@ static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId)
for (i = 0; i != 3; i++)
{
CreateMonWithEVSpread(&gEnemyParty[firstMonId + i], apprentice->party[i].species, level, fixedIV, 8);
- friendship = 0xFF;
+ friendship = MAX_FRIENDSHIP;
for (j = 0; j < MAX_MON_MOVES; j++)
{
if (apprentice->party[i].moves[j] == MOVE_FRUSTRATION)
@@ -2022,27 +1788,27 @@ static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId)
}
}
-u16 RandomizeFacilityTrainerMonSet(u16 trainerId)
+u16 GetRandomFrontierMonFromSet(u16 trainerId)
{
u8 level = SetFacilityPtrsGetLevel();
- const u16 *monSets = gFacilityTrainers[trainerId].monSets;
- u8 bfMonCount = 0;
- u32 monSetId = monSets[bfMonCount];
+ const u16 *monSet = gFacilityTrainers[trainerId].monSet;
+ u8 numMons = 0;
+ u32 monId = monSet[numMons];
- while (monSetId != 0xFFFF)
+ while (monId != 0xFFFF)
{
- bfMonCount++;
- monSetId = monSets[bfMonCount];
- if (monSetId == 0xFFFF)
+ numMons++;
+ monId = monSet[numMons];
+ if (monId == 0xFFFF)
break;
}
do
{
- monSetId = monSets[Random() % bfMonCount];
- } while((level == 50 || level == 20) && monSetId > 849);
+ monId = monSet[Random() % numMons];
+ } while((level == 50 || level == 20) && monId > FRONTIER_MONS_HIGH_TIER);
- return monSetId;
+ return monId;
}
static void FillFactoryTrainerParty(void)
@@ -2062,7 +1828,7 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId)
u8 fixedIV;
u32 otID;
- if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ if (trainerId < FRONTIER_TRAINERS_COUNT)
{
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; // Unused variable.
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
@@ -2090,23 +1856,23 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId)
level = SetFacilityPtrsGetLevel();
otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- u16 monSetId = gUnknown_03006298[i];
+ u16 monId = gUnknown_03006298[i];
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
fixedIV,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otID);
friendship = 0;
for (j = 0; j < MAX_MON_MOVES; j++)
- SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monSetId].moves[j], j);
+ SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monId].moves[j], j);
SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
}
}
@@ -2118,27 +1884,27 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId)
u8 fixedIV = 0;
u32 otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- u16 monSetId = gUnknown_03006298[i];
+ u16 monId = gUnknown_03006298[i];
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
fixedIV,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otID);
friendship = 0;
for (j = 0; j < MAX_MON_MOVES; j++)
{
- SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monSetId].moves[j], j);
- if (gFacilityTrainerMons[monSetId].moves[j] == MOVE_FRUSTRATION)
+ SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monId].moves[j], j);
+ if (gFacilityTrainerMons[monId].moves[j] == MOVE_FRUSTRATION)
friendship = 0;
}
SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
}
}
@@ -2159,7 +1925,7 @@ void FrontierSpeechToString(const u16 *words)
}
}
-static void sub_8163914(void)
+static void GetOpponentIntroSpeech(void)
{
u16 trainerId;
SetFacilityPtrsGetLevel();
@@ -2171,12 +1937,12 @@ static void sub_8163914(void)
if (trainerId == TRAINER_EREADER)
FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.greeting);
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
FrontierSpeechToString(gFacilityTrainers[trainerId].speechBefore);
else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].greeting);
else
- CopyFriendsApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE);
+ BufferApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE);
}
static void HandleSpecialTrainerBattleEnd(void)
@@ -2242,21 +2008,21 @@ void DoSpecialTrainerBattle(void)
switch (VarGet(VAR_FRONTIER_BATTLE_MODE))
{
case FRONTIER_MODE_SINGLES:
- FillFrontierTrainerParty(3);
+ FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
break;
case FRONTIER_MODE_DOUBLES:
- FillFrontierTrainerParty(4);
+ FillFrontierTrainerParty(FRONTIER_DOUBLES_PARTY_SIZE);
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
break;
case FRONTIER_MODE_MULTIS:
- FillFrontierTrainersParties(2);
+ FillFrontierTrainersParties(FRONTIER_MULTI_PARTY_SIZE);
gPartnerTrainerId = gSaveBlock2Ptr->frontier.trainerIds[17];
FillPartnerParty(gPartnerTrainerId);
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS;
break;
case FRONTIER_MODE_LINK_MULTIS:
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_MULTI | BATTLE_TYPE_x800000;
- FillFrontierTrainersParties(2);
+ FillFrontierTrainersParties(FRONTIER_MULTI_PARTY_SIZE);
break;
}
CreateTask(Task_StartBattleAfterTransition, 1);
@@ -2298,9 +2064,9 @@ void DoSpecialTrainerBattle(void)
if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES)
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT)
- FillFrontierTrainerParty(3);
+ FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
else
- FillTentTrainerParty(3);
+ FillTentTrainerParty(FRONTIER_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
BattleTransition_StartOnField(sub_80B100C(4));
@@ -2308,9 +2074,9 @@ void DoSpecialTrainerBattle(void)
case SPECIAL_BATTLE_ARENA:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_ARENA;
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT)
- FillFrontierTrainerParty(3);
+ FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
else
- FillTentTrainerParty(3);
+ FillTentTrainerParty(FRONTIER_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
BattleTransition_StartOnField(sub_80B100C(5));
@@ -2326,14 +2092,14 @@ void DoSpecialTrainerBattle(void)
break;
case SPECIAL_BATTLE_PIKE_SINGLE:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER;
- FillFrontierTrainerParty(3);
+ FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
BattleTransition_StartOnField(sub_80B100C(7));
break;
case SPECIAL_BATTLE_PYRAMID:
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID;
- FillFrontierTrainerParty(3);
+ FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1);
PlayMapChosenOrBattleBGM(0);
BattleTransition_StartOnField(sub_80B100C(10));
@@ -2349,9 +2115,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);
@@ -2399,14 +2165,14 @@ static void sub_8163EE4(void)
StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName);
playerRecord->winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
{
playerRecord->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i];
playerRecord->speechWon[i] = gSaveBlock1Ptr->easyChatBattleWon[i];
playerRecord->speechLost[i] = gSaveBlock1Ptr->easyChatBattleLost[i];
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
{
if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0)
sub_80686FC(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]);
@@ -2417,7 +2183,7 @@ static void sub_8163EE4(void)
SaveCurrentWinStreak();
}
-static void SaveBattleTowerProgress(void)
+static void SaveTowerChallenge(void)
{
u16 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
@@ -2426,10 +2192,10 @@ static void SaveBattleTowerProgress(void)
if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0))
sub_8163EE4();
- gSaveBlock2Ptr->frontier.field_CA8 =gSpecialVar_0x8005;
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
VarSet(VAR_TEMP_0, 0);
- gSaveBlock2Ptr->frontier.field_CA9_a = 1;
- sub_81A4C30();
+ gSaveBlock2Ptr->frontier.challengePaused = TRUE;
+ SaveGameFrontier();
}
static void nullsub_61(void)
@@ -2437,12 +2203,12 @@ static void nullsub_61(void)
}
-static void SpriteCB_Null6(void)
+static void nullsub_116(void)
{
}
-static void sub_81640E0(u16 trainerId)
+static void GetApprenticeMultiPartnerParty(u16 trainerId)
{
s32 i, count;
u32 validSpecies[3];
@@ -2467,7 +2233,7 @@ static void sub_81640E0(u16 trainerId)
} while (gUnknown_03006298[0] == gUnknown_03006298[1]);
}
-static void sub_8164188(u16 trainerId)
+static void GetRecordMixFriendMultiPartnerParty(u16 trainerId)
{
s32 i, count;
u32 validSpecies[3];
@@ -2495,13 +2261,13 @@ static void sub_8164188(u16 trainerId)
} while (gUnknown_03006298[2] == gUnknown_03006298[3]);
}
-static void sub_81642A0(void)
+static void LoadMultiPartnerCandidatesData(void)
{
s32 i, j, k;
u32 spArray[5];
s32 r10;
u16 trainerId;
- u16 monSetId;
+ u16 monId;
u32 lvlMode, battleMode;
s32 challengeNum;
u32 species1, species2;
@@ -2521,7 +2287,7 @@ static void sub_81642A0(void)
{
do
{
- trainerId = sub_8162548(challengeNum, 0);
+ trainerId = GetRandomScaledFrontierTrainerId(challengeNum, 0);
for (i = 0; i < j; i++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == trainerId)
@@ -2543,34 +2309,34 @@ static void sub_81642A0(void)
{
while (1)
{
- monSetId = RandomizeFacilityTrainerMonSet(trainerId);
- if (j % 2 != 0 && gFacilityTrainerMons[gSaveBlock2Ptr->frontier.trainerIds[r10 - 1]].itemTableId == gFacilityTrainerMons[monSetId].itemTableId)
+ monId = GetRandomFrontierMonFromSet(trainerId);
+ if (j % 2 != 0 && gFacilityTrainerMons[gSaveBlock2Ptr->frontier.trainerIds[r10 - 1]].itemTableId == gFacilityTrainerMons[monId].itemTableId)
continue;
for (k = 8; k < r10; k++)
{
- if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.trainerIds[k]].species == gFacilityTrainerMons[monSetId].species)
+ if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.trainerIds[k]].species == gFacilityTrainerMons[monId].species)
break;
- if (species1 == gFacilityTrainerMons[monSetId].species)
+ if (species1 == gFacilityTrainerMons[monId].species)
break;
- if (species2 == gFacilityTrainerMons[monSetId].species)
+ if (species2 == gFacilityTrainerMons[monId].species)
break;
}
if (k == r10)
break;
}
- gSaveBlock2Ptr->frontier.trainerIds[r10] = monSetId;
+ gSaveBlock2Ptr->frontier.trainerIds[r10] = monId;
r10++;
}
}
r10 = 0;
ValidateApprenticesChecksums();
- for (i = 0; i < 4; i++)
+ for (i = 0; i < APPRENTICE_COUNT; i++)
{
if (gSaveBlock2Ptr->apprentices[i].lvlMode != 0
- && gUnknown_085DF9EC[gSaveBlock2Ptr->apprentices[i].field_1] / 7 <= challengeNum
+ && sApprenticeChallengeThreshold[gSaveBlock2Ptr->apprentices[i].numQuestions] / 7 <= challengeNum
&& gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode)
{
k = 0;
@@ -2594,7 +2360,7 @@ static void sub_81642A0(void)
gSaveBlock2Ptr->frontier.trainerIds[6] = spArray[Random() % r10];
eventObjTemplates[7].graphicsId = GetBattleFacilityTrainerGfxId(gSaveBlock2Ptr->frontier.trainerIds[6]);
FlagClear(FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_ALT_1);
- sub_81640E0(gSaveBlock2Ptr->frontier.trainerIds[6]);
+ GetApprenticeMultiPartnerParty(gSaveBlock2Ptr->frontier.trainerIds[6]);
}
r10 = 0;
@@ -2637,11 +2403,11 @@ static void sub_81642A0(void)
gSaveBlock2Ptr->frontier.trainerIds[7] = spArray[Random() % r10];
eventObjTemplates[8].graphicsId = GetBattleFacilityTrainerGfxId(gSaveBlock2Ptr->frontier.trainerIds[7]);
FlagClear(FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_ALT_2);
- sub_8164188(gSaveBlock2Ptr->frontier.trainerIds[7]);
+ GetRecordMixFriendMultiPartnerParty(gSaveBlock2Ptr->frontier.trainerIds[7]);
}
}
-static void sub_81646BC(u16 trainerId, u16 monSetId)
+static void sub_81646BC(u16 trainerId, u16 monId)
{
u16 move = 0;
u16 species = 0;
@@ -2649,10 +2415,10 @@ static void sub_81646BC(u16 trainerId, u16 monSetId)
if (trainerId != TRAINER_EREADER)
{
- if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ if (trainerId < FRONTIER_TRAINERS_COUNT)
{
- move = gFacilityTrainerMons[monSetId].moves[0];
- species = gFacilityTrainerMons[monSetId].species;
+ move = gFacilityTrainerMons[monId].moves[0];
+ species = gFacilityTrainerMons[monId].species;
}
else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
{
@@ -2676,28 +2442,28 @@ static void sub_81646BC(u16 trainerId, u16 monSetId)
StringCopy(gStringVar2, gSpeciesNames[species]);
}
-static void sub_8164828(void)
+static void ShowPartnerCandidateMessage(void)
{
- s32 i, j, arrId;
- s32 monSetId;
+ s32 i, j, partnerId;
+ s32 monId;
s32 level = SetFacilityPtrsGetLevel();
u16 winStreak = GetCurrentFacilityWinStreak();
s32 challengeNum = winStreak / 7;
s32 k = gSpecialVar_LastTalked - 2;
s32 trainerId = gSaveBlock2Ptr->frontier.trainerIds[k];
- for (arrId = 0; arrId < ARRAY_COUNT(gUnknown_085DD500); arrId++)
+ for (partnerId = 0; partnerId < ARRAY_COUNT(sPartnerTrainerTextTables); partnerId++)
{
- if (gUnknown_085DD500[arrId].facilityClass == GetFrontierTrainerFacilityClass(trainerId))
+ if (sPartnerTrainerTextTables[partnerId].facilityClass == GetFrontierTrainerFacilityClass(trainerId))
break;
}
switch (gSpecialVar_0x8005)
{
- case 0:
+ case PARTNER_MSGID_INTRO:
if (trainerId == TRAINER_EREADER)
return;
- if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ if (trainerId < FRONTIER_TRAINERS_COUNT)
{
GetFrontierTrainerName(gStringVar1, trainerId);
}
@@ -2716,17 +2482,17 @@ static void sub_8164828(void)
GetFrontierTrainerName(gStringVar3, trainerId);
}
break;
- case 1:
- monSetId = gSaveBlock2Ptr->frontier.trainerIds[8 + k * 2];
- sub_81646BC(trainerId, monSetId);
+ case PARTNER_MSGID_MON1:
+ monId = gSaveBlock2Ptr->frontier.trainerIds[8 + k * 2];
+ sub_81646BC(trainerId, monId);
break;
- case 2:
- monSetId = gSaveBlock2Ptr->frontier.trainerIds[9 + k * 2];
- sub_81646BC(trainerId, monSetId);
+ case PARTNER_MSGID_MON2_ASK:
+ monId = gSaveBlock2Ptr->frontier.trainerIds[9 + k * 2];
+ sub_81646BC(trainerId, monId);
break;
- case 3:
+ case PARTNER_MSGID_ACCEPT:
gPartnerTrainerId = trainerId;
- if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ if (trainerId < FRONTIER_TRAINERS_COUNT)
{
gSaveBlock2Ptr->frontier.trainerIds[18] = gSaveBlock2Ptr->frontier.trainerIds[8 + k * 2];
gSaveBlock2Ptr->frontier.trainerIds[19] = gSaveBlock2Ptr->frontier.trainerIds[9 + k * 2];
@@ -2745,7 +2511,7 @@ static void sub_8164828(void)
{
while (1)
{
- i = sub_8162548(challengeNum, k / 2);
+ i = GetRandomScaledFrontierTrainerId(challengeNum, k / 2);
if (gPartnerTrainerId == i)
continue;
@@ -2761,29 +2527,31 @@ static void sub_8164828(void)
}
gSaveBlock2Ptr->frontier.trainerIds[17] = trainerId;
break;
- case 4:
+ case PARTNER_MSGID_REJECT:
break;
}
if (trainerId == TRAINER_EREADER)
return;
- if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ // First check is redundant, only needs to make sure it's not an Apprentice
+ if (trainerId < FRONTIER_TRAINERS_COUNT)
{
- ShowFieldMessage(gUnknown_085DD500[arrId].strings[gSpecialVar_0x8005]);
+ ShowFieldMessage(sPartnerTrainerTextTables[partnerId].strings[gSpecialVar_0x8005]);
}
else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
{
- ShowFieldMessage(gUnknown_085DD500[arrId].strings[gSpecialVar_0x8005]);
+ ShowFieldMessage(sPartnerTrainerTextTables[partnerId].strings[gSpecialVar_0x8005]);
}
+ // Trainer is a former/record-mixed Apprentice, do Apprentice message
else
{
- u8 id = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id;
- ShowFieldMessage(gUnknown_085DD690[id][gSpecialVar_0x8005]);
+ u8 apprenticeId = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id;
+ ShowFieldMessage(sPartnerApprenticeTextTables[apprenticeId][gSpecialVar_0x8005]);
}
}
-static void sub_8164B74(void)
+static void LoadLinkMultiOpponentsData(void)
{
s32 challengeNum;
s32 i, j;
@@ -2822,7 +2590,7 @@ static void sub_8164B74(void)
{
do
{
- trainerId = sub_8162548(challengeNum, i / 2);
+ trainerId = GetRandomScaledFrontierTrainerId(challengeNum, i / 2);
for (j = 0; j < i; j++)
{
if (gSaveBlock2Ptr->frontier.trainerIds[j] == trainerId)
@@ -2878,12 +2646,13 @@ static void sub_8164DCC(void)
sub_800AC34();
}
-static void sub_8164DE4(void)
+static void SetMultiPartnerGfx(void)
{
- SetBattleFacilityTrainerGfxId(gSaveBlock2Ptr->frontier.trainerIds[17], 0xF);
+ // 0xF below means use VAR_OBJ_GFX_ID_E
+ SetBattleFacilityTrainerGfxId(gSaveBlock2Ptr->frontier.trainerIds[17], 0xF);
}
-static void sub_8164E04(void)
+static void SetTowerInterviewData(void)
{
s32 i;
u8 text[32];
@@ -2893,13 +2662,13 @@ static void sub_8164E04(void)
GetFrontierTrainerName(text, gTrainerBattleOpponent_A);
StripExtCtrlCodes(text);
- StringCopy(gSaveBlock2Ptr->frontier.field_BD8, text);
- GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.field_BEB, gTrainerBattleOpponent_A);
- gSaveBlock2Ptr->frontier.field_BD6 = GetMonData(&gEnemyParty[gBattlerPartyIndexes[1]], MON_DATA_SPECIES, NULL);
- gSaveBlock2Ptr->frontier.field_BD4 = GetMonData(&gPlayerParty[gBattlerPartyIndexes[0]], MON_DATA_SPECIES, NULL);
+ StringCopy(gSaveBlock2Ptr->frontier.towerInterview.opponentName, text);
+ GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage, gTrainerBattleOpponent_A);
+ gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[1]], MON_DATA_SPECIES, NULL);
+ gSaveBlock2Ptr->frontier.towerInterview.playerSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[0]], MON_DATA_SPECIES, NULL);
for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
- gSaveBlock2Ptr->frontier.field_BE0[i] = gBattleMons[0].nickname[i];
- gSaveBlock2Ptr->frontier.field_D06 = gBattleOutcome;
+ gSaveBlock2Ptr->frontier.towerInterview.opponentMonNickname[i] = gBattleMons[0].nickname[i];
+ gSaveBlock2Ptr->frontier.towerBattleOutcome = gBattleOutcome;
}
static void ValidateBattleTowerRecordChecksums(void)
@@ -2966,13 +2735,13 @@ u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode)
static u8 GetMonCountForBattleMode(u8 battleMode)
{
- u8 sp[ARRAY_COUNT(gUnknown_085DFA42)];
- memcpy(sp, gUnknown_085DFA42, sizeof(gUnknown_085DFA42));
+ u8 partySizes[ARRAY_COUNT(sBattleTowerPartySizes)];
+ memcpy(partySizes, sBattleTowerPartySizes, sizeof(sBattleTowerPartySizes));
- if (battleMode < ARRAY_COUNT(gUnknown_085DFA42))
- return sp[battleMode];
+ if (battleMode < ARRAY_COUNT(sBattleTowerPartySizes))
+ return partySizes[battleMode];
else
- return 3;
+ return FRONTIER_PARTY_SIZE;
}
struct RibbonCounter
@@ -3026,9 +2795,9 @@ static void AwardBattleTowerRibbons(void)
ribbons[i] = prevBest;
}
}
- if (ribbons[0].count > 4)
+ if (ribbons[0].count > NUM_CUTIES_RIBBONS)
{
- sub_80EE4DC(&gSaveBlock1Ptr->playerParty[ribbons[0].partyIndex], ribbonType);
+ TryPutSpotTheCutiesOnAir(&gSaveBlock1Ptr->playerParty[ribbons[0].partyIndex], ribbonType);
}
}
}
@@ -3154,13 +2923,13 @@ static void CopyEReaderTrainerFarewellMessage(void)
FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerLost);
}
-void sub_81653CC(void)
+void TryHideBattleTowerReporter(void)
{
- if (gSaveBlock2Ptr->frontier.field_CA8 == 1)
- sub_80F01B8();
+ if (gSaveBlock2Ptr->frontier.challengeStatus == CHALLENGE_STATUS_SAVING)
+ HideBattleTowerReporter();
if (FlagGet(FLAG_CANCEL_BATTLE_ROOM_CHALLENGE) == TRUE)
{
- sub_80F01B8();
+ HideBattleTowerReporter();
FlagClear(FLAG_CANCEL_BATTLE_ROOM_CHALLENGE);
}
}
@@ -3172,7 +2941,7 @@ static void FillPartnerParty(u16 trainerId)
s32 i, j;
u32 ivs, level;
u32 friendship;
- u16 monSetId;
+ u16 monId;
u32 otID;
u8 trainerName[PLAYER_NAME_LENGTH + 1];
SetFacilityPtrsGetLevel();
@@ -3191,7 +2960,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);
@@ -3206,30 +2975,30 @@ static void FillPartnerParty(u16 trainerId)
// Scrapped, lol.
trainerName[0] = gGameLanguage;
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
level = SetFacilityPtrsGetLevel();
ivs = GetFrontierTrainerFixedIvs(trainerId);
otID = Random32();
for (i = 0; i < 2; i++)
{
- monSetId = gSaveBlock2Ptr->frontier.trainerIds[i + 18];
+ monId = gSaveBlock2Ptr->frontier.trainerIds[i + 18];
CreateMonWithEVSpreadNatureOTID(&gPlayerParty[3 + i],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
ivs,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otID);
- friendship = 0xFF;
+ friendship = MAX_FRIENDSHIP;
for (j = 0; j < MAX_MON_MOVES; j++)
{
- SetMonMoveSlot(&gPlayerParty[3 + i], gFacilityTrainerMons[monSetId].moves[j], j);
- if (gFacilityTrainerMons[monSetId].moves[j] == MOVE_FRUSTRATION)
+ SetMonMoveSlot(&gPlayerParty[3 + i], gFacilityTrainerMons[monId].moves[j], j);
+ if (gFacilityTrainerMons[monId].moves[j] == MOVE_FRUSTRATION)
friendship = 0;
}
SetMonData(&gPlayerParty[3 + i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gPlayerParty[3 + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gPlayerParty[3 + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
trainerName[j] = gFacilityTrainers[trainerId].trainerName[j];
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_NAME, &trainerName);
@@ -3280,13 +3049,13 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
{
s32 i, validMons = 0;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
if (src->party[i].species)
validMons++;
}
- if (validMons != 3)
+ if (validMons != FRONTIER_PARTY_SIZE)
{
memset(dst, 0, sizeof(*dst));
return FALSE;
@@ -3296,6 +3065,7 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
dst->lvlMode = src->lvlMode;
dst->winStreak = src->winStreak;
// BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
+ // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald)
for (i = 0; i < FACILITY_CLASSES_COUNT; i++)
{
if (sRubyFacilityClassToEmerald[i][0] == src->facilityClass)
@@ -3308,18 +3078,18 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
dst->name[i] = src->name[i];
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
dst->trainerId[i] = src->trainerId[i];
- for (i = 0; i < 6; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
dst->greeting[i] = src->greeting[i];
- for (i = 0; i < 6; i++)
- dst->speechWon[i] = gUnknown_085DFA46[i];
- for (i = 0; i < 6; i++)
- dst->speechLost[i] = gUnknown_085DFA52[i];
- for (i = 0; i < 3; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
+ dst->speechWon[i] = sRecordTrainerSpeechWon[i];
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
+ dst->speechLost[i] = sRecordTrainerSpeechLost[i];
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
dst->party[i] = src->party[i];
- CpuFill32(0, &dst->party[3], sizeof(dst->party[3]));
+ CpuFill32(0, &dst->party[FRONTIER_PARTY_SIZE], sizeof(dst->party[FRONTIER_PARTY_SIZE]));
CalcEmeraldBattleTowerChecksum(dst);
return TRUE;
}
@@ -3329,13 +3099,13 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
{
s32 i, validMons = 0;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
if (src->party[i].species)
validMons++;
}
- if (validMons != 3)
+ if (validMons != FRONTIER_PARTY_SIZE)
{
memset(dst, 0, sizeof(*dst));
return FALSE;
@@ -3345,6 +3115,7 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
dst->lvlMode = src->lvlMode;
dst->winStreak = src->winStreak;
// BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
+ // Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) instead
for (i = 0; i < FACILITY_CLASSES_COUNT; i++)
{
if (sRubyFacilityClassToEmerald[i][1] == src->facilityClass)
@@ -3353,15 +3124,15 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
if (i != FACILITY_CLASSES_COUNT)
dst->facilityClass = sRubyFacilityClassToEmerald[i][0];
else
- dst->facilityClass = 0x24; // FACILITY_CLASS_YOUNGSTER in Ruby/Sapphire.
+ dst->facilityClass = RS_FACILITY_CLASS_YOUNGSTER;
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
dst->name[i] = src->name[i];
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
dst->trainerId[i] = src->trainerId[i];
- for (i = 0; i < 6; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
dst->greeting[i] = src->greeting[i];
- for (i = 0; i < 3; i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
dst->party[i] = src->party[i];
CalcRubyBattleTowerChecksum(dst);
@@ -3391,7 +3162,7 @@ static void ValidateApprenticesChecksums(void)
{
s32 i, j;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < APPRENTICE_COUNT; i++)
{
u32 *data = (u32*) &gSaveBlock2Ptr->apprentices[i];
u32 checksum = 0;
@@ -3408,7 +3179,7 @@ void GetBattleTowerTrainerLanguage(u8 *dst, u16 trainerId)
{
*dst = gGameLanguage;
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
*dst = gGameLanguage;
}
@@ -3481,28 +3252,30 @@ s32 GetHighestLevelInPlayerParty(void)
return highestLevel;
}
+// Frontier Trainer parties are roughly scaled in difficulty with higher trainer IDs, so scale IVs as well
+// Duplicated in Battle Dome as GetDomeTrainerMonIvs
static u8 GetFrontierTrainerFixedIvs(u16 trainerId)
{
- u8 fixedIV = 0;
+ u8 fixedIv;
- if (trainerId < 100)
- fixedIV = 3;
- else if (trainerId < 120)
- fixedIV = 6;
- else if (trainerId < 140)
- fixedIV = 9;
- else if (trainerId < 160)
- fixedIV = 12;
- else if (trainerId < 180)
- fixedIV = 15;
- else if (trainerId < 200)
- fixedIV = 18;
- else if (trainerId < 220)
- fixedIV = 21;
- else
- fixedIV = 31;
+ if (trainerId <= FRONTIER_TRAINER_JILL) // 0 - 99
+ fixedIv = 3;
+ else if (trainerId <= FRONTIER_TRAINER_CHLOE) // 100 - 119
+ fixedIv = 6;
+ else if (trainerId <= FRONTIER_TRAINER_SOFIA) // 120 - 139
+ fixedIv = 9;
+ else if (trainerId <= FRONTIER_TRAINER_JAZLYN) // 140 - 159
+ fixedIv = 12;
+ else if (trainerId <= FRONTIER_TRAINER_ALISON) // 160 - 179
+ fixedIv = 15;
+ else if (trainerId <= FRONTIER_TRAINER_LAMAR) // 180 - 199
+ fixedIv = 18;
+ else if (trainerId <= FRONTIER_TRAINER_TESS) // 200 - 219
+ fixedIv = 21;
+ else // 220+ (- 299)
+ fixedIv = 31;
- return fixedIV;
+ return fixedIv;
}
static u16 sub_8165D40(void)
@@ -3524,19 +3297,19 @@ static u16 sub_8165D40(void)
static u8 SetTentPtrsGetLevel(void)
{
u8 level = 30;
- u32 tentFacility = VarGet(VAR_FRONTIER_FACILITY);
+ u32 facility = VarGet(VAR_FRONTIER_FACILITY);
- if (tentFacility == TENT_SLATEPORT)
+ if (facility == FRONTIER_FACILITY_FACTORY)
{
gFacilityTrainers = gSlateportBattleTentTrainers;
gFacilityTrainerMons = gSlateportBattleTentMons;
}
- else if (tentFacility == TENT_VERDANTURF)
+ else if (facility == FRONTIER_FACILITY_PALACE)
{
gFacilityTrainers = gVerdanturfBattleTentTrainers;
gFacilityTrainerMons = gVerdanturfBattleTentMons;
}
- else if (tentFacility == TENT_FALLARBOR)
+ else if (facility == FRONTIER_FACILITY_ARENA)
{
gFacilityTrainers = gFallarborBattleTentTrainers;
gFacilityTrainerMons = gFallarborBattleTentMons;
@@ -3554,7 +3327,7 @@ static u8 SetTentPtrsGetLevel(void)
return level;
}
-static void sub_8165E18(void)
+static void SetNextBattleTentOpponent(void)
{
s32 i;
u16 trainerId;
@@ -3583,19 +3356,19 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
u8 level = SetTentPtrsGetLevel();
u8 fixedIV = 0;
u8 bfMonCount;
- const u16 *monSets = NULL;
+ const u16 *monSet = NULL;
u32 otID = 0;
- u16 monSetId;
+ u16 monId;
- monSets = gFacilityTrainers[gTrainerBattleOpponent_A].monSets;
+ monSet = gFacilityTrainers[gTrainerBattleOpponent_A].monSet;
bfMonCount = 0;
- monSetId = monSets[bfMonCount];
- while (monSetId != 0xFFFF)
+ monId = monSet[bfMonCount];
+ while (monId != 0xFFFF)
{
bfMonCount++;
- monSetId = monSets[bfMonCount];
- if (monSetId == 0xFFFF)
+ monId = monSet[bfMonCount];
+ if (monId == 0xFFFF)
break;
}
@@ -3603,12 +3376,12 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
otID = Random32();
while (i != monCount)
{
- u16 monSetId = monSets[Random() % bfMonCount];
+ u16 monId = monSet[Random() % bfMonCount];
// Ensure this pokemon species isn't a duplicate.
for (j = 0; j < i + firstMonId; j++)
{
- if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monSetId].species)
+ if (GetMonData(&gEnemyParty[j], MON_DATA_SPECIES, NULL) == gFacilityTrainerMons[monId].species)
break;
}
if (j != i + firstMonId)
@@ -3618,7 +3391,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
for (j = 0; j < i + firstMonId; j++)
{
if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != 0
- && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
break;
}
if (j != i + firstMonId)
@@ -3628,34 +3401,34 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
// because the species and held items were already checked directly above.
for (j = 0; j < i; j++)
{
- if (chosenMonIndices[j] == monSetId)
+ if (chosenMonIndices[j] == monId)
break;
}
if (j != i)
continue;
- chosenMonIndices[i] = monSetId;
+ chosenMonIndices[i] = monId;
// Place the chosen pokemon into the trainer's party.
CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId],
- gFacilityTrainerMons[monSetId].species,
+ gFacilityTrainerMons[monId].species,
level,
- gFacilityTrainerMons[monSetId].nature,
+ gFacilityTrainerMons[monId].nature,
fixedIV,
- gFacilityTrainerMons[monSetId].evSpread,
+ gFacilityTrainerMons[monId].evSpread,
otID);
- friendship = 255;
+ friendship = MAX_FRIENDSHIP;
// Give the chosen pokemon its specified moves.
for (j = 0; j < MAX_MON_MOVES; j++)
{
- SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monSetId].moves[j], j);
- if (gFacilityTrainerMons[monSetId].moves[j] == MOVE_FRUSTRATION)
+ SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].moves[j], j);
+ if (gFacilityTrainerMons[monId].moves[j] == MOVE_FRUSTRATION)
friendship = 0; // Frustration is more powerful the lower the pokemon's friendship is.
}
SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]);
+ SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
// The pokemon was successfully added to the trainer's party, so it's safe to move on to
// the next party slot.
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 3e86fcf51..9e66b8938 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"
@@ -760,10 +760,10 @@ static const struct SpriteTemplate gUnknown_085C8E68 =
static const struct OamData gOamData_85C8E80 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -1672,7 +1672,7 @@ bool8 FldEff_Pokeball(void)
{
u8 spriteId = CreateSpriteAtEnd(&gUnknown_085C8E68, gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
gSprites[spriteId].oam.priority = 0;
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].data[0] = gFieldEffectArguments[2];
gSprites[spriteId].data[1] = gFieldEffectArguments[3];
gSprites[spriteId].data[2] = -1;
@@ -1961,9 +1961,10 @@ static bool8 Phase2_Ripple_Func2(struct Task *task)
for (i = 0; i < 160; i++, r4 += r8)
{
- // todo: fix the asm
s16 var = r4 >> 8;
- asm("");
+
+ var++;
+ var--;
gScanlineEffectRegBuffers[0][i] = sTransitionStructPtr->field_16 + Sin(var, r3);
}
@@ -2393,20 +2394,20 @@ static void Mugshots_CreateOpponentPlayerSprites(struct Task *task)
opponentSprite->callback = sub_8148380;
playerSprite->callback = sub_8148380;
- opponentSprite->oam.affineMode = 3;
- playerSprite->oam.affineMode = 3;
+ opponentSprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ playerSprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
opponentSprite->oam.matrixNum = AllocOamMatrix();
playerSprite->oam.matrixNum = AllocOamMatrix();
- opponentSprite->oam.shape = 1;
- playerSprite->oam.shape = 1;
+ opponentSprite->oam.shape = SPRITE_SHAPE(64x32);
+ playerSprite->oam.shape = SPRITE_SHAPE(64x32);
- opponentSprite->oam.size = 3;
- playerSprite->oam.size = 3;
+ opponentSprite->oam.size = SPRITE_SIZE(64x32);
+ playerSprite->oam.size = SPRITE_SIZE(64x32);
- CalcCenterToCornerVec(opponentSprite, 1, 3, 3);
- CalcCenterToCornerVec(playerSprite, 1, 3, 3);
+ CalcCenterToCornerVec(opponentSprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_DOUBLE);
+ CalcCenterToCornerVec(playerSprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_DOUBLE);
SetOamMatrixRotationScaling(opponentSprite->oam.matrixNum, sMugshotsOpponentRotationScales[mugshotId][0], sMugshotsOpponentRotationScales[mugshotId][1], 0);
SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 512, 0);
diff --git a/src/battle_util.c b/src/battle_util.c
index 03f1482da..4352a02c2 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -1,30 +1,30 @@
#include "global.h"
#include "battle.h"
#include "battle_anim.h"
-#include "constants/battle_script_commands.h"
-#include "constants/abilities.h"
-#include "constants/moves.h"
-#include "constants/hold_effects.h"
-#include "constants/battle_anim.h"
#include "pokemon.h"
-#include "constants/species.h"
#include "item.h"
-#include "constants/items.h"
#include "util.h"
-#include "constants/battle_move_effects.h"
#include "battle_scripts.h"
#include "random.h"
#include "text.h"
#include "string_util.h"
#include "battle_message.h"
-#include "constants/battle_string_ids.h"
-#include "constants/weather.h"
#include "battle_ai_script_commands.h"
#include "battle_controllers.h"
#include "event_data.h"
#include "link.h"
-#include "berry.h"
#include "field_weather.h"
+#include "constants/abilities.h"
+#include "constants/battle_anim.h"
+#include "constants/battle_move_effects.h"
+#include "constants/battle_script_commands.h"
+#include "constants/battle_string_ids.h"
+#include "constants/berry.h"
+#include "constants/hold_effects.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+#include "constants/weather.h"
// rom const data
static const u16 sSoundMovesTable[] =
@@ -1830,9 +1830,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
{
switch (GetCurrentWeather())
{
- case WEATHER_RAIN_LIGHT:
- case WEATHER_RAIN_MED:
- case WEATHER_RAIN_HEAVY:
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
if (!(gBattleWeather & WEATHER_RAIN_ANY))
{
gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT);
@@ -2084,7 +2084,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
}
break;
- case ABILITYEFFECT_MOVE_END: // Think contact abilities.
+ case ABILITYEFFECT_ON_DAMAGE: // Contact abilities and Color Change
switch (gLastUsedAbility)
{
case ABILITY_COLOR_CHANGE:
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.c b/src/berry.c
index 49acb7d10..bbaa2b03b 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -11,6 +11,7 @@
#include "random.h"
#include "string_util.h"
#include "text.h"
+#include "constants/berry.h"
#include "constants/event_object_movement_constants.h"
#include "constants/items.h"
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 03764b2f8..2a122541d 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"
@@ -36,6 +36,7 @@
#include "new_game.h"
#include "save.h"
#include "link.h"
+#include "constants/berry.h"
#include "constants/rgb.h"
#define BLENDER_SCORE_BEST 0
@@ -401,10 +402,10 @@ static const TaskFunc sUnknown_083399EC[] =
static const struct OamData sOamData_8216314 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -544,10 +545,10 @@ static const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate =
static const struct OamData sOamData_821640C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -613,10 +614,10 @@ static const struct SpriteTemplate sUnknown_08339B40 =
static const struct OamData sOamData_8216474 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -700,10 +701,10 @@ static const struct SpriteTemplate sUnknown_08339BE0 =
static const struct OamData sOamData_8216514 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -758,10 +759,10 @@ static const struct SpriteTemplate sUnknown_08339C2C =
static const struct OamData sOamData_8216560 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
@@ -1029,7 +1030,7 @@ static void sub_807FAC8(void)
UnsetBgTilemapBuffer(2);
UnsetBgTilemapBuffer(1);
SetVBlankCallback(NULL);
- sub_81AABF0(sub_807FFA4);
+ ChooseBerrySetCallback(sub_807FFA4);
sBerryBlenderData->mainState = 0;
}
@@ -1108,7 +1109,7 @@ static void Blender_SetPlayerNamesLocal(u8 opponentsNum)
sBerryBlenderData->playersNo = 2;
StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName);
- if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER_ONLOOKERS))
+ if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER))
StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[BLENDER_MASTER]);
else
StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[BLENDER_MISTER]);
@@ -1173,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++)
{
@@ -1431,7 +1432,7 @@ static void Blender_SetOpponentsBerryData(u16 playerBerryItemId, u8 playersNum,
{
opponentBerryId = sOpponentBerrySets[opponentSetId][i];
var = playerBerryItemId - 163;
- if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER_ONLOOKERS) && gSpecialVar_0x8004 == 1)
+ if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER) && gSpecialVar_0x8004 == 1)
{
opponentSetId %= 5;
opponentBerryId = sSpecialOpponentBerrySets[opponentSetId];
@@ -1516,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:
@@ -1631,7 +1632,7 @@ static void sub_80808D4(void)
if (gSpecialVar_0x8004 == 1)
{
- if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER_ONLOOKERS))
+ if (!FlagGet(FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER))
sBerryBlenderData->field_120[0] = CreateTask(sub_8081224, 10);
else
sBerryBlenderData->field_120[0] = CreateTask(sUnknown_083399EC[0], 10);
@@ -3338,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..f0987c953 100755
--- a/src/berry_crush.c
+++ b/src/berry_crush.c
@@ -1,26 +1,36 @@
#include "global.h"
-#include "alloc.h"
+#include "berry.h"
#include "berry_powder.h"
#include "bg.h"
+#include "decompress.h"
+#include "dynamic_placeholder_text_util.h"
#include "event_data.h"
#include "gpu_regs.h"
#include "graphics.h"
+#include "international_string_util.h"
#include "item_icon.h"
#include "item_menu.h"
#include "link.h"
#include "link_rfu.h"
#include "main.h"
+#include "malloc.h"
#include "math_util.h"
#include "menu.h"
#include "overworld.h"
#include "palette.h"
+#include "pokemon_jump.h"
+#include "random.h"
#include "rom_8034C54.h"
+#include "save.h"
#include "scanline_effect.h"
+#include "script.h"
#include "sound.h"
#include "sprite.h"
#include "string_util.h"
+#include "strings.h"
#include "task.h"
#include "text.h"
+#include "text_window.h"
#include "trig.h"
#include "window.h"
#include "constants/items.h"
@@ -30,96 +40,146 @@
struct BerryCrushGame_Player
{
u16 unk0;
- u8 filler2[0x12];
- u8 unk14[0xC];
+ u16 unk2;
+ union
+ {
+ u8 as_2d_bytes[2][8];
+ u16 as_hwords[8];
+ } unk4;
+ u8 unk14[12];
};
-struct BerryCrushGame_PlayersSeparate
+struct __attribute__((packed, aligned(2))) BerryCrushGame_4E
{
- struct BerryCrushGame_Player player;
- struct BerryCrushGame_Player others[4];
+ u16 unk0;
+ u16 filler2;
+ u8 unk4_0:1;
+ u8 unk4_1:1;
+ s8 unk5;
+ u16 unk6;
+ u16 unk8;
+ u16 unkA;
+ u16 unkC;
};
-typedef union BerryCrushGame_Players
+struct __attribute__((packed)) BerryCrushGame_40
{
- struct BerryCrushGame_Player players[5];
- struct BerryCrushGame_PlayersSeparate separate;
-} BerryCrushGame_Players;
+ u8 unk0[2];
+ u16 unk2[6];
+ struct BerryCrushGame_4E unkE;
+};
-struct BerryCrushGame_138_C
+struct BerryCrushGame_5C
{
- u8 filler0[0x8];
- s16 unk8;
- u16 unkA;
+ u16 unk00;
+ u8 unk02_0:1;
+ u8 unk02_1:1;
+ u8 unk02_2:1;
+ u8 unk02_3:5;
+ u8 unk03;
+ u16 unk04;
+ u16 unk06;
+ u16 unk08;
+ u16 unk0A;
};
-struct BerryCrushGame_138
+union BerryCrushGame_68
{
- u8 filler0[0x4];
- u16 unk4;
- u16 unk6;
- u16 unk8;
- struct BerryCrushGame_138_C *unkC[5];
- u8 filler1C[0x4];
- struct Sprite *unk24[5];
- struct Sprite *unk38[5];
- struct Sprite *unk4C[5];
- struct Sprite *unk60[5];
- struct Sprite *unk74[5];
+ struct BerryCrushGame_68_x
+ {
+ struct BerryCrushGame_68_x_SubStruct
+ {
+ s32 unk00;
+ u16 unk04;
+ s16 unk06;
+ u16 unk08;
+ u16 unk0A;
+ u16 unk0C[2][5];
+ u8 filler20[16];
+ } unk00;
+ u8 unk30[12];
+ struct BerryCrushGame_Player others[4];
+ u8 fillerBC[20];
+ } as_four_players;
+ struct BerryCrushGame_68_y
+ {
+ u8 filler00[28];
+ struct BerryCrushGame_Player unk1C[5];
+ u8 fillerBC[20];
+ } as_five_players;
};
-struct BerryCrushGame_4E
+struct BerryCrushGame_138_C
{
- u8 filler0[0x4];
- u8 unk4;
- u8 filler5[0x5];
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u16 unk4;
+ u16 unk6;
+ s16 unk8;
u16 unkA;
- u16 unkC;
};
-struct __attribute__((packed)) BerryCrushGame_40
+struct BerryCrushGame_138
{
- u8 filler0[0xE];
- struct BerryCrushGame_4E unkE;
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ s16 unk4;
+ s16 unk6;
+ s16 unk8;
+ const struct BerryCrushGame_138_C *unkC[5];
+ struct Sprite *unk20;
+ struct Sprite *unk24[5];
+ struct Sprite *unk38[5];
+ struct Sprite *unk4C[11];
+ struct Sprite *unk78[2];
+ u8 unk80;
+ u8 filler81;
+ u8 unk82;
+ u8 unk83[5];
};
struct BerryCrushGame
{
MainCallback unk0;
- void (* unk4)(struct BerryCrushGame *, u8 *);
+ u32 (* unk4)(struct BerryCrushGame *, u8 *);
u8 unk8;
u8 unk9;
u8 unkA;
u8 unkB;
u8 unkC;
- u8 fillerD[0x1];
+ u8 unkD;
u8 unkE;
u8 unkF;
- u8 filler10[0x2];
+ u16 unk10;
u16 unk12;
- u8 filler14[0x2];
+ u16 unk14;
u16 unk16;
- u8 filler18[0x4];
+ s16 unk18;
+ s16 unk1A;
int unk1C;
- u8 filler20[0x5];
+ s32 unk20;
+ u8 unk24;
u8 unk25_0:1;
u8 unk25_1:1;
u8 unk25_2:1;
- u8 filler26[0x2];
+ u8 unk25_3:1;
+ u8 unk25_4:1;
+ u8 unk25_5:3;
+ u16 unk26;
u16 unk28;
- u16 unk2A;
+ s16 unk2A;
s16 unk2C;
- u8 filler2E[0x8];
+ s16 unk2E;
+ s16 unk30;
+ s16 unk32;
+ s16 unk34;
u8 unk36[0xA];
struct BerryCrushGame_40 unk40;
- u8 filler60[0x8];
- int unk68;
- u16 unk6C;
- u8 filler6E[0x4];
- u16 unk72;
- u8 filler74[0x10];
- BerryCrushGame_Players unk84;
- u8 filler124[0x14];
+ struct BerryCrushGame_5C unk5C;
+ union BerryCrushGame_68 unk68;
struct BerryCrushGame_138 unk138;
u8 unk1C0[0x1000];
u8 unk11C0[0x1000];
@@ -132,7 +192,7 @@ static void sub_8020F88(void);
static void sub_8020FA0(u8);
void sub_8020FC4(struct BerryCrushGame *);
void sub_8022BEC(u16, u8, u8 *);
-void sub_8024604(u8 *, u8, s8, u8, u8, u8, u8);
+void sub_8024604(u8 *, u32, s32, u32, u32, u32, u32);
static int sub_8021450(struct BerryCrushGame *);
void sub_8022588(struct BerryCrushGame *);
void sub_8022600(struct BerryCrushGame *);
@@ -141,6 +201,9 @@ void sub_8022730(struct BerryCrushGame *);
void sub_8022960(struct BerryCrushGame *);
void sub_8022524(struct BerryCrushGame_138 *, u16);
void sub_8022B28(struct Sprite *);
+void sub_8022554(struct BerryCrushGame_138 *r0);
+void sub_8024578(struct BerryCrushGame *);
+void sub_8024644(u8 *, u32, u32, u32, u32);
static EWRAM_DATA struct BerryCrushGame *gUnknown_02022C90 = NULL;
@@ -153,14 +216,42 @@ extern const u16 gUnknown_082F41E8[];
extern const s8 gUnknown_082F41CC[][2];
extern const s8 gUnknown_082F41D2[][2];
extern const u32 gUnknown_082F334C[];
-extern const u8 gUnknown_082F32D8[][3];
+extern const u8 sBerryCrushTextColors1[][3];
+extern const u8 *gUnknown_082F43B4[];
+extern const u8 sBerryCrushTextColors4[];
+extern const struct WindowTemplate gUnknown_082F32CC[];
+extern const u8 gUnknown_082F3344[][4];
+extern const struct WindowTemplate gUnknown_082F32EC;
+extern const u8 sBerryCrushTextColorTable[][3];
+extern const struct WindowTemplate gUnknown_082F32F4[];
+extern const u8 gUnknown_082F417C[][5];
+extern const struct BerryCrushGame_138_C gUnknown_082F4190[];
+extern const u8 sBerryCrushTextColors2[][3];
+extern const u8 sBerryCrushTextColors3[][3];
+extern const u32 gUnknown_08DE3FD4[];
+extern const struct CompressedSpriteSheet gUnknown_082F41F4[];
+extern const struct SpritePalette gUnknown_082F421C;
+extern const struct SpriteTemplate gUnknown_082F430C;
+extern const struct SpriteTemplate gUnknown_082F4324;
+extern const struct SpriteTemplate gUnknown_082F433C;
+extern const struct SpriteTemplate gUnknown_082F4354;
+extern const struct UnkStruct3 gUnknown_082F4384[];
+extern u32 (*const gUnknown_082F43CC[])(struct BerryCrushGame *, u8 *);
+extern const u8 *const gUnknown_082F32A4[];
+extern const u8 gUnknown_082F4448[];
+extern const s8 gUnknown_082F326C[][7];
+extern const u8 gUnknown_082F325C[];
+extern const u8 gUnknown_082F3264[];
+extern const u8 gUnknown_082F3290[][4];
+extern const u8 gUnknown_082F4434[][4];
+extern const u8 gUnknown_082F4444[];
struct BerryCrushGame *sub_8020C00(void)
{
return gUnknown_02022C90;
}
-int sub_8020C0C(MainCallback callback)
+u32 sub_8020C0C(MainCallback callback)
{
if (!gUnknown_02022C90)
return 2;
@@ -173,7 +264,7 @@ int sub_8020C0C(MainCallback callback)
SetMainCallback2(callback);
if (callback == CB2_ReturnToField)
{
- gTextFlags.autoScroll = 1;
+ gTextFlags.autoScroll = TRUE;
PlayNewMapMusic(MUS_POKECEN);
SetMainCallback1(CB1_Overworld);
}
@@ -237,7 +328,7 @@ static void sub_8020D8C(void)
else
RemoveBagItem(gSpecialVar_ItemId, 1);
- gUnknown_02022C90->unk84.separate.others[gUnknown_02022C90->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX;
+ gUnknown_02022C90->unk68.as_four_players.others[gUnknown_02022C90->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX;
gUnknown_02022C90->unkE = 1;
gUnknown_02022C90->unkF = 9;
sub_8024604(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0);
@@ -249,7 +340,7 @@ static void sub_8020D8C(void)
void sub_8020E1C(void)
{
DestroyTask(gUnknown_02022C90->unkA);
- sub_81AABF0(sub_8020D8C);
+ ChooseBerrySetCallback(sub_8020D8C);
}
static void sub_8020E3C(void)
@@ -266,10 +357,10 @@ void sub_8020E58(void)
{
u32 var0, var1;
- var0 = gUnknown_02022C90->unk6C;
+ var0 = gUnknown_02022C90->unk68.as_four_players.unk00.unk04;
var0 <<= 8;
var0 = sub_81515FC(var0, 60 << 8);
- var1 = gUnknown_02022C90->unk72;
+ var1 = gUnknown_02022C90->unk68.as_four_players.unk00.unk0A;
var1 <<= 8;
var1 = sub_81515FC(var1, var0) & 0xFFFF;
gUnknown_02022C90->unk16 = var1;
@@ -305,7 +396,7 @@ void sub_8020E58(void)
break;
}
- gUnknown_02022C90->unk1C = gUnknown_02022C90->unk68;
+ gUnknown_02022C90->unk1C = gUnknown_02022C90->unk68.as_four_players.unk00.unk00;
if (GiveBerryPowder(gUnknown_02022C90->unk1C))
return;
@@ -335,18 +426,22 @@ static void sub_8020FA0(u8 taskId)
sub_8021450(gUnknown_02022C90);
}
-#ifdef NONMATCHING
+#define PLAYER_UNK14(game, i) \
+ ((u8 *)(game) \
+ + offsetof(struct BerryCrushGame, unk68) \
+ + offsetof(struct BerryCrushGame_68_x, unk30) \
+ + sizeof(struct BerryCrushGame_Player) * (i))
+
void sub_8020FC4(struct BerryCrushGame *arg0)
{
u8 i;
for (i = 0; i < arg0->unk9; i++)
- StringCopy(arg0->unk84.players[i].unk14, gLinkPlayers[i].name);
-
+ StringCopy(PLAYER_UNK14(arg0, i), gLinkPlayers[i].name);
for (; i < 5; i++)
{
- memset(arg0->unk84.players[i].unk14, 1, PLAYER_NAME_LENGTH);
- arg0->unk84.players[i].unk14[PLAYER_NAME_LENGTH] = EOS;
+ memset(PLAYER_UNK14(arg0, i), 1, PLAYER_NAME_LENGTH);
+ arg0->unk68.as_five_players.unk1C[i].unk14[PLAYER_NAME_LENGTH] = EOS;
}
switch (gSaveBlock2Ptr->optionsTextSpeed)
@@ -362,85 +457,6 @@ void sub_8020FC4(struct BerryCrushGame *arg0)
break;
}
}
-#else
-NAKED
-void sub_8020FC4(struct BerryCrushGame *arg0)
-{
- asm_unified("\n\
- push {r4-r6,lr}\n\
- adds r6, r0, 0\n\
- movs r5, 0\n\
- b _08020FE6\n\
-LOOP_1:\n\
- lsls r0, r5, 5\n\
- adds r0, 0x98\n\
- adds r0, r6, r0\n\
- lsls r1, r5, 3\n\
- subs r1, r5\n\
- lsls r1, 2\n\
- ldr r2, =gLinkPlayers + 8\n\
- adds r1, r2\n\
- bl StringCopy\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
-_08020FE6:\n\
- ldrb r0, [r6, 0x9]\n\
- cmp r5, r0\n\
- bcc LOOP_1\n\
- cmp r5, 0x4\n\
- bhi _08021012\n\
-_08020FF0:\n\
- lsls r4, r5, 5\n\
- adds r0, r4, 0\n\
- adds r0, 0x98\n\
- adds r0, r6, r0\n\
- movs r1, 0x1\n\
- movs r2, 0x7\n\
- bl memset\n\
- adds r4, r6, r4\n\
- adds r4, 0x9F\n\
- movs r0, 0xFF\n\
- strb r0, [r4]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x4\n\
- bls _08020FF0\n\
-_08021012:\n\
- ldr r0, =gSaveBlock2Ptr\n\
- ldr r0, [r0]\n\
- ldrb r0, [r0, 0x14]\n\
- lsls r0, 29\n\
- lsrs r0, 29\n\
- cmp r0, 0x1\n\
- beq _0802103E\n\
- cmp r0, 0x1\n\
- bgt _08021034\n\
- cmp r0, 0\n\
- beq _0802103A\n\
- b _08021046\n\
- .pool\n\
-_08021034:\n\
- cmp r0, 0x2\n\
- beq _08021042\n\
- b _08021046\n\
-_0802103A:\n\
- movs r0, 0x8\n\
- b _08021044\n\
-_0802103E:\n\
- movs r0, 0x4\n\
- b _08021044\n\
-_08021042:\n\
- movs r0, 0x1\n\
-_08021044:\n\
- strb r0, [r6, 0xB]\n\
-_08021046:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0");
-}
-#endif // NONMATCHING
int sub_802104C(void)
{
@@ -503,7 +519,7 @@ int sub_802104C(void)
sub_8197200();
sub_8022588(var0);
sub_8022600(var0);
- gPaletteFade.bufferTransferDisabled = 1;
+ gPaletteFade.bufferTransferDisabled = TRUE;
break;
case 7:
LoadPalette(gUnknown_08DE3398, 0, 0x180);
@@ -524,7 +540,7 @@ int sub_802104C(void)
ChangeBgY(1, 0, 0);
break;
case 9:
- gPaletteFade.bufferTransferDisabled = 0;
+ gPaletteFade.bufferTransferDisabled = FALSE;
BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
ShowBg(0);
ShowBg(1);
@@ -636,10 +652,10 @@ void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
&gUnknown_082F436C,
gUnknown_082F41E8[i],
gUnknown_082F41E8[i],
- arg0->unk84.separate.others[i].unk0 + 133);
+ arg0->unk68.as_four_players.others[i].unk0 + 133);
arg1->unk38[i] = &gSprites[spriteId];
arg1->unk38[i]->oam.priority = 3;
- arg1->unk38[i]->affineAnimPaused = 1;
+ arg1->unk38[i]->affineAnimPaused = TRUE;
arg1->unk38[i]->pos1.x = arg1->unkC[i]->unk8 + 120;
arg1->unk38[i]->pos1.y = -16;
data = arg1->unk38[i]->data;
@@ -695,7 +711,7 @@ void sub_8021608(struct Sprite *sprite)
}
}
-void sub_80216A8(struct BerryCrushGame *arg0)
+void sub_80216A8(struct BerryCrushGame *arg0, __attribute__((unused)) struct BerryCrushGame_138 *arg1)
{
u8 i;
for (i = 0; i < arg0->unk9; i++)
@@ -726,8 +742,8 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
else
StartSpriteAnim(arg1->unk24[i], 0);
- arg1->unk24[i]->invisible = 0;
- arg1->unk24[i]->animPaused = 0;
+ arg1->unk24[i]->invisible = FALSE;
+ arg1->unk24[i]->animPaused = FALSE;
arg1->unk24[i]->pos2.x = gUnknown_082F41CC[(var % 4) - 1][0];
arg1->unk24[i]->pos2.y = gUnknown_082F41CC[(var % 4) - 1][1];
}
@@ -750,7 +766,7 @@ void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
arg1->unk4C[i]->pos1.y = gUnknown_082F41D2[i][1] + 136 - (var * 4);
arg1->unk4C[i]->pos2.x = gUnknown_082F41D2[i][0] + (gUnknown_082F41D2[i][0] / (var2 * 4));
arg1->unk4C[i]->pos2.y = gUnknown_082F41D2[i][1];
- if (var4E->unk4 & 0x2)
+ if (var4E->unk4_1)
StartSpriteAnim(arg1->unk4C[i], 1);
else
StartSpriteAnim(arg1->unk4C[i], 0);
@@ -821,5 +837,2347 @@ void sub_8021944(struct BerryCrushGame_138 *arg0, u16 arg1)
void sub_80219C8(u8 windowId, u8 left, u8 colorId, const u8 *string)
{
left = (left * 4) - (GetStringWidth(2, string, -1) / 2u);
- AddTextPrinterParameterized3(windowId, 2, left, 0, gUnknown_082F32D8[colorId], 0, string);
+ AddTextPrinterParameterized3(windowId, 2, left, 0, sBerryCrushTextColors1[colorId], 0, string);
+}
+
+#ifdef NONMATCHING
+void sub_8021A28(struct BerryCrushGame *sp0C, u8 sp10, u8 sp14, u8 r3)
+{
+ s32 r6;
+ u8 i, j;
+ u8 sp18 = 0;
+ u8 sp1C = 0;
+ union BerryCrushGame_68 *sp20 = &sp0C->unk68;
+ u32 xOffset;
+ u32 r8, r9, r4, r7, r3_;
+ u8 r10, r2;
+
+ r3 -= 16;
+ if (sp10 == 2)
+ r3 -= 42;
+ r6 = r3 - 14 * sp0C->unk9;
+ if (r6 > 0)
+ r6 = r6 / 2 + 16;
+ else
+ r6 = 16;
+ i = 0;
+ while (i < sp0C->unk9)
+ {
+ DynamicPlaceholderTextUtil_Reset();
+ switch (sp10)
+ {
+ default: // how can you write this twice??????
+ r4 = sp14 - 4;
+ r10 = r6;
+ r9 = sp1C + 0xA2;
+ r8 = sp18;
+ r6 += 14;
+ ++i;
+ break;
+ case 0:
+ sp18 = sp20->as_five_players.unk1C[0].unk4.as_2d_bytes[0][i];
+ if (i != 0 && sp20->as_four_players.unk00.unk0C[0][i] != sp20->as_four_players.unk00.unk0C[0][i - 1])
+ sp1C = i;
+ ConvertIntToDecimalStringN(
+ gStringVar4,
+ sp20->as_four_players.unk00.unk0C[sp10][i],
+ STR_CONV_MODE_RIGHT_ALIGN,
+ 4
+ );
+ StringAppend(gStringVar4, gUnknown_082F43B4[sp10]);
+ r4 = sp14 - 4;
+ r10 = r6;
+ r9 = sp1C + 0xA2;
+ r8 = sp18;
+ r6 += 14;
+ ++i;
+ break;
+ case 1:
+ sp18 = sp20->as_five_players.unk1C[0].unk4.as_2d_bytes[1][i];
+ if (i != 0 && sp20->as_four_players.unk00.unk0C[1][i] != sp20->as_four_players.unk00.unk0C[1][i - 1])
+ sp1C = i;
+ ConvertIntToDecimalStringN(
+ gStringVar1,
+ sp20->as_four_players.unk00.unk0C[sp10][i] >> 4,
+ STR_CONV_MODE_RIGHT_ALIGN,
+ 3
+ );
+ j = 0;
+ r3_ = 15 & (u8)sp20->as_four_players.unk00.unk0C[sp10][i];
+ r4 = sp14 - 4;
+ r10 = r6;
+ r9 = sp1C + 0xA2;
+ r8 = sp18;
+ r6 += 14;
+ ++i;
+ for (; j < 4; ++j)
+ if (((r3_ >> (3 - j)) & 1) != 0) // why does it load constant 1 into r10?
+ r7 += gUnknown_082F334C[j];
+ ConvertIntToDecimalStringN(
+ gStringVar2,
+ (u8)(r7 / 1000000),
+ STR_CONV_MODE_LEADING_ZEROS,
+ 2
+ );
+ StringExpandPlaceholders(gStringVar4, gText_XDotY);
+ break;
+ case 2:
+ sp18 = i;
+ sp1C = i;
+ r2 = sp0C->unk68.as_four_players.others[i].unk0;
+ if (r2 > 43)
+ r2 = 0;
+ StringCopy(gStringVar1,gBerries[r2].name);
+ StringExpandPlaceholders(gStringVar4, gText_Var1Berry);
+ r4 = sp14 - 4;
+ r10 = r6;
+ r9 = sp1C + 0xA2;
+ r8 = i;
+ r6 += 14;
+ ++i;
+ break;
+ }
+ xOffset = GetStringRightAlignXOffset(2, gStringVar4, r4);
+ AddTextPrinterParameterized3(
+ sp0C->unk138.unk82,
+ 2,
+ xOffset,
+ r10,
+ sBerryCrushTextColors1[0],
+ 0,
+ gStringVar4
+ );
+ if (sp18 == sp0C->unk8)
+ StringCopy(gStringVar3, gText_1DotBlueF700);
+ else
+ StringCopy(gStringVar3, gText_1DotF700);
+ gStringVar3[0] = r9;
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, PLAYER_UNK14(sp0C, r8));
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gStringVar3);
+ AddTextPrinterParameterized3(
+ sp0C->unk138.unk82,
+ 2,
+ 4,
+ r10,
+ sBerryCrushTextColors1[0],
+ 0,
+ gStringVar4
+ );
+ }
+}
+#else
+NAKED
+void sub_8021A28(struct BerryCrushGame *sp0C, u8 sp10, u8 sp14, u8 r3)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x2C\n\
+ str r0, [sp, 0xC]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ str r1, [sp, 0x10]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ str r2, [sp, 0x14]\n\
+ lsls r3, 24\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x18]\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x1C]\n\
+ ldr r2, [sp, 0xC]\n\
+ adds r2, 0x68\n\
+ str r2, [sp, 0x20]\n\
+ movs r4, 0xF0\n\
+ lsls r4, 24\n\
+ adds r3, r4\n\
+ lsrs r3, 24\n\
+ ldr r0, [sp, 0x10]\n\
+ cmp r0, 0x2\n\
+ bne _08021A68\n\
+ adds r0, r3, 0\n\
+ subs r0, 0x2A\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ _08021A68:\n\
+ ldr r2, [sp, 0xC]\n\
+ ldrb r1, [r2, 0x9]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 1\n\
+ subs r6, r3, r0\n\
+ cmp r6, 0\n\
+ ble _08021A84\n\
+ lsrs r0, r6, 31\n\
+ adds r0, r6, r0\n\
+ asrs r0, 1\n\
+ adds r6, r0, 0\n\
+ adds r6, 0x10\n\
+ b _08021A86\n\
+ _08021A84:\n\
+ movs r6, 0x10\n\
+ _08021A86:\n\
+ movs r5, 0\n\
+ ldr r3, [sp, 0xC]\n\
+ ldrb r3, [r3, 0x9]\n\
+ cmp r5, r3\n\
+ bcc _08021A92\n\
+ b _08021D14\n\
+ _08021A92:\n\
+ ldr r4, [sp, 0x10]\n\
+ lsls r4, 2\n\
+ str r4, [sp, 0x24]\n\
+ _08021A98:\n\
+ bl DynamicPlaceholderTextUtil_Reset\n\
+ ldr r0, [sp, 0x10]\n\
+ cmp r0, 0x1\n\
+ beq _08021B48\n\
+ cmp r0, 0x1\n\
+ bgt _08021AC0\n\
+ cmp r0, 0\n\
+ beq _08021ADE\n\
+ ldr r4, [sp, 0x14]\n\
+ subs r4, 0x4\n\
+ lsls r1, r6, 24\n\
+ mov r10, r1\n\
+ ldr r2, [sp, 0x1C]\n\
+ adds r2, 0xA2\n\
+ mov r9, r2\n\
+ ldr r3, [sp, 0x18]\n\
+ lsls r3, 5\n\
+ mov r8, r3\n\
+ b _08021C5A\n\
+ _08021AC0:\n\
+ ldr r4, [sp, 0x10]\n\
+ cmp r4, 0x2\n\
+ bne _08021AC8\n\
+ b _08021C1C\n\
+ _08021AC8:\n\
+ ldr r4, [sp, 0x14]\n\
+ subs r4, 0x4\n\
+ lsls r0, r6, 24\n\
+ mov r10, r0\n\
+ ldr r1, [sp, 0x1C]\n\
+ adds r1, 0xA2\n\
+ mov r9, r1\n\
+ ldr r2, [sp, 0x18]\n\
+ lsls r2, 5\n\
+ mov r8, r2\n\
+ b _08021C5A\n\
+ _08021ADE:\n\
+ ldr r0, [sp, 0x20]\n\
+ adds r0, 0x20\n\
+ adds r0, r5\n\
+ ldrb r0, [r0]\n\
+ str r0, [sp, 0x18]\n\
+ lsls r3, r5, 1\n\
+ ldr r2, [sp, 0x20]\n\
+ adds r2, 0xC\n\
+ cmp r5, 0\n\
+ beq _08021B04\n\
+ adds r0, r2, r3\n\
+ subs r1, r5, 0x1\n\
+ lsls r1, 1\n\
+ adds r1, r2, r1\n\
+ ldrh r0, [r0]\n\
+ ldrh r1, [r1]\n\
+ cmp r0, r1\n\
+ beq _08021B04\n\
+ str r5, [sp, 0x1C]\n\
+ _08021B04:\n\
+ ldr r4, [sp, 0x24]\n\
+ ldr r1, [sp, 0x10]\n\
+ adds r0, r4, r1\n\
+ lsls r0, 1\n\
+ adds r0, r3, r0\n\
+ adds r0, r2, r0\n\
+ ldrh r1, [r0]\n\
+ ldr r0, =gStringVar4\n\
+ movs r2, 0x1\n\
+ movs r3, 0x4\n\
+ bl ConvertIntToDecimalStringN\n\
+ ldr r0, =gUnknown_082F43B4\n\
+ adds r0, r4, r0\n\
+ ldr r1, [r0]\n\
+ ldr r0, =gStringVar4\n\
+ bl StringAppend\n\
+ ldr r4, [sp, 0x14]\n\
+ subs r4, 0x4\n\
+ lsls r2, r6, 24\n\
+ mov r10, r2\n\
+ ldr r3, [sp, 0x1C]\n\
+ adds r3, 0xA2\n\
+ mov r9, r3\n\
+ ldr r0, [sp, 0x18]\n\
+ lsls r0, 5\n\
+ mov r8, r0\n\
+ b _08021C5A\n\
+ .pool\n\
+ _08021B48:\n\
+ ldr r1, [sp, 0x20]\n\
+ adds r0, r1, r5\n\
+ adds r0, 0x28\n\
+ ldrb r0, [r0]\n\
+ str r0, [sp, 0x18]\n\
+ lsls r3, r5, 1\n\
+ adds r2, r1, 0\n\
+ adds r2, 0xC\n\
+ cmp r5, 0\n\
+ beq _08021B72\n\
+ adds r0, r3, 0\n\
+ adds r0, 0xA\n\
+ adds r0, r2, r0\n\
+ adds r1, r3, 0\n\
+ adds r1, 0x8\n\
+ adds r1, r2, r1\n\
+ ldrh r0, [r0]\n\
+ ldrh r1, [r1]\n\
+ cmp r0, r1\n\
+ beq _08021B72\n\
+ str r5, [sp, 0x1C]\n\
+ _08021B72:\n\
+ ldr r0, [sp, 0x24]\n\
+ ldr r1, [sp, 0x10]\n\
+ adds r4, r0, r1\n\
+ lsls r4, 1\n\
+ adds r4, r3, r4\n\
+ adds r4, r2, r4\n\
+ ldrh r1, [r4]\n\
+ lsrs r1, 4\n\
+ ldr r0, =gStringVar1\n\
+ movs r2, 0x1\n\
+ movs r3, 0x3\n\
+ bl ConvertIntToDecimalStringN\n\
+ movs r7, 0\n\
+ ldrb r0, [r4]\n\
+ movs r3, 0xF\n\
+ ands r3, r0\n\
+ movs r2, 0\n\
+ ldr r4, [sp, 0x10]\n\
+ lsls r4, 2\n\
+ str r4, [sp, 0x28]\n\
+ ldr r4, [sp, 0x14]\n\
+ subs r4, 0x4\n\
+ lsls r0, r6, 24\n\
+ mov r10, r0\n\
+ ldr r1, [sp, 0x1C]\n\
+ adds r1, 0xA2\n\
+ mov r9, r1\n\
+ ldr r0, [sp, 0x18]\n\
+ lsls r0, 5\n\
+ mov r8, r0\n\
+ adds r6, 0xE\n\
+ adds r5, 0x1\n\
+ ldr r1, =gUnknown_082F334C\n\
+ mov r12, r1\n\
+ _08021BB8:\n\
+ movs r0, 0x3\n\
+ subs r1, r0, r2\n\
+ adds r0, r3, 0\n\
+ asrs r0, r1\n\
+ movs r1, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08021BD0\n\
+ lsls r0, r2, 2\n\
+ add r0, r12\n\
+ ldr r0, [r0]\n\
+ adds r7, r0\n\
+ _08021BD0:\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ cmp r2, 0x3\n\
+ bls _08021BB8\n\
+ adds r0, r7, 0\n\
+ ldr r1, =0x000f4240\n\
+ bl __udivsi3\n\
+ lsls r0, 24\n\
+ lsrs r3, r0, 24\n\
+ ldr r0, =gStringVar2\n\
+ adds r1, r3, 0\n\
+ movs r2, 0x2\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ ldr r0, =gUnknown_082F43B4\n\
+ ldr r2, [sp, 0x28]\n\
+ adds r0, r2, r0\n\
+ ldr r1, [r0]\n\
+ ldr r0, =gStringVar4\n\
+ bl StringExpandPlaceholders\n\
+ b _08021C5E\n\
+ .pool\n\
+ _08021C1C:\n\
+ str r5, [sp, 0x18]\n\
+ str r5, [sp, 0x1C]\n\
+ lsls r7, r5, 5\n\
+ ldr r3, [sp, 0xC]\n\
+ adds r0, r3, r7\n\
+ adds r0, 0xA4\n\
+ ldrb r2, [r0]\n\
+ cmp r2, 0x2B\n\
+ bls _08021C30\n\
+ movs r2, 0\n\
+ _08021C30:\n\
+ lsls r1, r2, 3\n\
+ subs r1, r2\n\
+ lsls r1, 2\n\
+ ldr r0, =gBerries\n\
+ adds r1, r0\n\
+ ldr r0, =gStringVar1\n\
+ bl StringCopy\n\
+ ldr r0, =gUnknown_082F43B4\n\
+ ldr r1, [r0, 0x8]\n\
+ ldr r0, =gStringVar4\n\
+ bl StringExpandPlaceholders\n\
+ ldr r4, [sp, 0x14]\n\
+ subs r4, 0x4\n\
+ lsls r0, r6, 24\n\
+ mov r10, r0\n\
+ movs r1, 0xA2\n\
+ adds r1, r5\n\
+ mov r9, r1\n\
+ mov r8, r7\n\
+ _08021C5A:\n\
+ adds r6, 0xE\n\
+ adds r5, 0x1\n\
+ _08021C5E:\n\
+ movs r0, 0x2\n\
+ ldr r1, =gStringVar4\n\
+ adds r2, r4, 0\n\
+ bl GetStringRightAlignXOffset\n\
+ adds r2, r0, 0\n\
+ ldr r3, [sp, 0xC]\n\
+ movs r4, 0xDD\n\
+ lsls r4, 1\n\
+ adds r0, r3, r4\n\
+ ldrb r0, [r0]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r1, r10\n\
+ lsrs r3, r1, 24\n\
+ ldr r1, =sBerryCrushTextColors1\n\
+ str r1, [sp]\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r1, =gStringVar4\n\
+ str r1, [sp, 0x8]\n\
+ movs r1, 0x2\n\
+ bl AddTextPrinterParameterized3\n\
+ ldr r3, [sp, 0x18]\n\
+ ldr r2, [sp, 0xC]\n\
+ ldrb r2, [r2, 0x8]\n\
+ cmp r3, r2\n\
+ bne _08021CC0\n\
+ ldr r0, =gStringVar3\n\
+ ldr r1, =gText_1DotBlueF700\n\
+ bl StringCopy\n\
+ b _08021CC8\n\
+ .pool\n\
+ _08021CC0:\n\
+ ldr r0, =gStringVar3\n\
+ ldr r1, =gText_1DotF700\n\
+ bl StringCopy\n\
+ _08021CC8:\n\
+ ldr r4, =gStringVar3\n\
+ mov r3, r9\n\
+ strb r3, [r4]\n\
+ mov r1, r8\n\
+ adds r1, 0x98\n\
+ ldr r0, [sp, 0xC]\n\
+ adds r1, r0, r1\n\
+ movs r0, 0\n\
+ bl DynamicPlaceholderTextUtil_SetPlaceholderPtr\n\
+ ldr r0, =gStringVar4\n\
+ adds r1, r4, 0\n\
+ bl DynamicPlaceholderTextUtil_ExpandPlaceholders\n\
+ ldr r1, [sp, 0xC]\n\
+ movs r2, 0xDD\n\
+ lsls r2, 1\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ mov r4, r10\n\
+ lsrs r3, r4, 24\n\
+ ldr r1, =sBerryCrushTextColors1\n\
+ str r1, [sp]\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x4]\n\
+ ldr r2, =gStringVar4\n\
+ str r2, [sp, 0x8]\n\
+ movs r1, 0x2\n\
+ movs r2, 0x4\n\
+ bl AddTextPrinterParameterized3\n\
+ lsls r0, r5, 24\n\
+ lsrs r5, r0, 24\n\
+ ldr r3, [sp, 0xC]\n\
+ ldrb r3, [r3, 0x9]\n\
+ cmp r5, r3\n\
+ bcs _08021D14\n\
+ b _08021A98\n\
+ _08021D14:\n\
+ add sp, 0x2C\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
+
+void sub_8021D34(struct BerryCrushGame *r8)
+{
+ u8 r10 = 0;
+ u8 r6 = 0;
+ u32 sp0C = 0;
+ union BerryCrushGame_68 *sp10 = &r8->unk68;
+ u8 r7 = GetWindowAttribute(r8->unk138.unk82, WINDOW_HEIGHT) * 8 - 42;
+
+ sub_8021944(&r8->unk138, sp10->as_four_players.unk00.unk04);
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors1[0], 0, gText_TimeColon);
+ r6 = 176 - (u8)GetStringWidth(2, gText_SpaceSec, -1);
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors1[0], 0, gText_SpaceSec);
+ ConvertIntToDecimalStringN(gStringVar1, r8->unk138.unk6, STR_CONV_MODE_LEADING_ZEROS, 2);
+ ConvertIntToDecimalStringN(gStringVar2, r8->unk138.unk8, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringExpandPlaceholders(gStringVar4, gText_XDotY2);
+ r6 -= GetStringWidth(2, gStringVar4, -1);
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors1[0], 0, gStringVar4);
+ r6 -= GetStringWidth(2, gText_SpaceMin, -1);
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors1[0], 0, gText_SpaceMin);
+ ConvertIntToDecimalStringN(gStringVar1, r8->unk138.unk4, STR_CONV_MODE_LEADING_ZEROS, 1);
+ StringExpandPlaceholders(gStringVar4, gText_StrVar1);
+ r6 -= GetStringWidth(2, gStringVar4, -1);
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors1[0], 0, gStringVar4);
+ r7 += 14;
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, 0, r7, sBerryCrushTextColors1[0], 0, gText_PressingSpeed);
+ r6 = 176 - (u8)GetStringWidth(2, gText_TimesPerSec, -1);
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors1[0], 0, gText_TimesPerSec);
+ for (; r10 < 8; ++r10)
+ if (((u8)r8->unk16 >> (7 - r10)) & 1)
+ sp0C += *(r10 + gUnknown_082F334C); // It's accessed in a different way here for unknown reason
+ ConvertIntToDecimalStringN(gStringVar1, r8->unk16 >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringExpandPlaceholders(gStringVar4, gText_XDotY3);
+ r6 -= GetStringWidth(2, gStringVar4, -1);
+ if (r8->unk25_1)
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors4, 0, gStringVar4);
+ else
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors1[0], 0, gStringVar4);
+ r7 += 14;
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, 0, r7, sBerryCrushTextColors1[0], 0, gText_Silkiness);
+ ConvertIntToDecimalStringN(gStringVar1, sp10->as_four_players.unk00.unk08, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, gText_Var1Percent);
+ r6 = 176 - (u8)GetStringWidth(2, gStringVar4, -1);
+ AddTextPrinterParameterized3(r8->unk138.unk82, 2, r6, r7, sBerryCrushTextColors1[0], 0, gStringVar4);
+}
+
+bool32 sub_8022070(struct BerryCrushGame *r4, struct BerryCrushGame_138 *r6)
+{
+ u8 r5;
+ struct WindowTemplate template;
+
+ switch (r6->unk80)
+ {
+ case 0:
+ r5 = r4->unk9 - 2;
+ sub_8022554(r6);
+ memcpy(&template, &gUnknown_082F32CC[r4->unk12], sizeof(struct WindowTemplate));
+ if (r4->unk12 == 13)
+ template.height = gUnknown_082F3344[1][r5];
+ else
+ template.height = gUnknown_082F3344[0][r5];
+ r6->unk82 = AddWindow(&template);
+ break;
+ case 1:
+ PutWindowTilemap(r6->unk82);
+ FillWindowPixelBuffer(r6->unk82, PIXEL_FILL(0));
+ break;
+ case 2:
+ LoadUserWindowBorderGfx_(r6->unk82, 541, 208);
+ DrawStdFrameWithCustomTileAndPalette(r6->unk82, 0, 541, 13);
+ break;
+ case 3:
+ r5 = r4->unk9 - 2;
+ switch (r4->unk12)
+ {
+ case 11:
+ sub_80219C8(r6->unk82, 20, 3, gText_PressesRankings);
+ sub_8021A28(r4, 0, 0xA0, 8 * gUnknown_082F3344[0][r5]);
+ r6->unk80 = 5;
+ return FALSE;
+ case 12:
+ sub_80219C8(r6->unk82, 20, 4, gUnknown_082F43B4[r4->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] + 3]);
+ sub_8021A28(r4, 1, 0xA0, 8 * gUnknown_082F3344[0][r5]);
+ r6->unk80 = 5;
+ return FALSE;
+ case 13:
+ sub_80219C8(r6->unk82, 22, 3, gText_CrushingResults);
+ sub_8021A28(r4, 2, 0xB0, 8 * gUnknown_082F3344[1][r5]);
+ break;
+ }
+ break;
+ case 4:
+ sub_8021D34(r4);
+ break;
+ case 5:
+ CopyWindowToVram(r6->unk82, 3);
+ r6->unk80 = 0;
+ return TRUE;
+ }
+ ++r6->unk80;
+ return FALSE;
+}
+
+void sub_802222C(struct BerryCrushGame *r4)
+{
+ ClearStdWindowAndFrameToTransparent(r4->unk138.unk82, 1);
+ RemoveWindow(r4->unk138.unk82);
+ sub_8022600(r4);
+}
+
+void sub_8022250(u8 r4)
+{
+ u8 r9 = 0, r2, r7, r10;
+ u32 sp0C = 0;
+ s16 *r6 = gTasks[r4].data;
+ const u8 *r10_; // turn r5/sl register swap into r8/sl
+
+ switch (r6[0])
+ {
+ case 0:
+ r6[1] = AddWindow(&gUnknown_082F32EC);
+ PutWindowTilemap((u8)r6[1]);
+ FillWindowPixelBuffer((u8)r6[1], PIXEL_FILL(0));
+ LoadUserWindowBorderGfx_((u8)r6[1], 541, 208);
+ DrawStdFrameWithCustomTileAndPalette((u8)r6[1], 0, 541, 13);
+ break;
+ case 1:
+ r10_ = gText_BerryCrush2;
+ ++r10_; --r10_; // swap sb/sl
+ #ifndef NONMATCHING
+ asm("":::"r8"); // turn r8/sl register swap into sb/sl
+ #endif
+ r7 = 96 - GetStringWidth(1, r10_, -1) / 2u;
+ AddTextPrinterParameterized3(
+ (u8)r6[1],
+ 1,
+ r7,
+ 1,
+ sBerryCrushTextColorTable[0],
+ 0,
+ r10_
+ );
+ r10_ = gText_PressingSpeedRankings;
+ r7 = 96 - GetStringWidth(1, r10_, -1) / 2u;
+ AddTextPrinterParameterized3(
+ (u8)r6[1],
+ 1,
+ r7,
+ 17,
+ sBerryCrushTextColorTable[0],
+ 0,
+ r10_
+ );
+ r10 = 41;
+ for (; r9 < 4; ++r9)
+ {
+ ConvertIntToDecimalStringN(gStringVar1, r9 + 2, STR_CONV_MODE_LEFT_ALIGN, 1);
+ StringExpandPlaceholders(gStringVar4, gText_Var1Players);
+ AddTextPrinterParameterized3(
+ (u8)r6[1],
+ 1,
+ 0,
+ r10,
+ sBerryCrushTextColors1[0],
+ 0,
+ gStringVar4
+ );
+ r7 = 192 - (u8)GetStringWidth(1, gText_TimesPerSec, -1);
+ AddTextPrinterParameterized3(
+ (u8)r6[1],
+ 1,
+ r7,
+ r10,
+ sBerryCrushTextColors1[0],
+ 0,
+ gText_TimesPerSec
+ );
+ for (r2 = 0; r2 < 8; ++r2)
+ if (((u8)r6[r9 + 2] >> (7 - r2)) & 1)
+ sp0C += gUnknown_082F334C[r2];
+ ConvertIntToDecimalStringN(gStringVar1, (u16)r6[r9 + 2] >> 8, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ ConvertIntToDecimalStringN(gStringVar2, sp0C / 1000000, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringExpandPlaceholders(gStringVar4, gText_XDotY3);
+ r7 -= GetStringWidth(1, gStringVar4, -1);
+ AddTextPrinterParameterized3(
+ (u8)r6[1],
+ 1,
+ r7,
+ r10,
+ sBerryCrushTextColors1[0],
+ 0,
+ gStringVar4
+ );
+ r10 += 16;
+ sp0C = 0;
+ }
+ CopyWindowToVram((u8)r6[1], 3);
+ break;
+ case 2:
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ break;
+ else
+ return;
+ case 3:
+ ClearStdWindowAndFrameToTransparent((u8)r6[1], 1);
+ ClearWindowTilemap((u8)r6[1]);
+ RemoveWindow((u8)r6[1]);
+ DestroyTask(r4);
+ EnableBothScriptContexts();
+ ScriptContext2_Disable();
+ r6[0] = 0;
+ return;
+ }
+ ++r6[0];
+}
+
+void ShowBerryCrushRankings(void)
+{
+ u8 taskId;
+
+ ScriptContext2_Enable();
+ taskId = CreateTask(sub_8022250, 0);
+ gTasks[taskId].data[2] = gSaveBlock2Ptr->berryCrush.berryCrushResults[0];
+ gTasks[taskId].data[3] = gSaveBlock2Ptr->berryCrush.berryCrushResults[1];
+ gTasks[taskId].data[4] = gSaveBlock2Ptr->berryCrush.berryCrushResults[2];
+ gTasks[taskId].data[5] = gSaveBlock2Ptr->berryCrush.berryCrushResults[3];
+}
+
+void sub_8022524(struct BerryCrushGame_138 *r4, u16 r1)
+{
+ sub_8021944(r4, r1);
+ sub_8035044(0, r4->unk4);
+ sub_8035044(1, r4->unk6);
+ sub_8035044(2, r4->unk8);
+}
+
+void sub_8022554(struct BerryCrushGame_138 *r0)
+{
+ r0->unk78[0]->invisible = TRUE;
+ r0->unk78[1]->invisible = TRUE;
+ sub_803547C(2, 1);
+ sub_803547C(1, 1);
+ sub_803547C(0, 1);
+}
+
+void sub_8022588(struct BerryCrushGame *r5)
+{
+ u8 r6;
+
+ for (r6 = 0; r6 < r5->unk9; ++r6)
+ {
+ r5->unk138.unkC[r6] = &gUnknown_082F4190[gUnknown_082F417C[r5->unk9 - 2][r6]];
+ r5->unk138.unk83[r6] = AddWindow(&gUnknown_082F32F4[r5->unk138.unkC[r6]->unk0]);
+ PutWindowTilemap(r5->unk138.unk83[r6]);
+ FillWindowPixelBuffer(r5->unk138.unk83[r6], 0);
+ }
+}
+
+void sub_8022600(struct BerryCrushGame *r6)
+{
+ u8 r7, r2;
+ u8 *r4;
+
+ for (r7 = 0; r7 < r6->unk9; ++r7)
+ {
+ PutWindowTilemap(r6->unk138.unk83[r7]);
+ if (r7 == r6->unk8)
+ {
+ AddTextPrinterParameterized4(
+ r6->unk138.unk83[r7],
+ 2,
+ 36 - GetStringWidth(2, PLAYER_UNK14(r6, r7), 0) / 2u,
+ 1,
+ 0,
+ 0,
+ sBerryCrushTextColors2[0],
+ 0,
+ PLAYER_UNK14(r6, r7)
+ );
+ }
+ else
+ {
+ AddTextPrinterParameterized4(
+ r6->unk138.unk83[r7],
+ 2,
+ 36 - GetStringWidth(2, PLAYER_UNK14(r6, r7), 0) / 2u,
+ 1,
+ 0,
+ 0,
+ sBerryCrushTextColors3[0],
+ 0,
+ PLAYER_UNK14(r6, r7)
+ );
+ }
+ CopyWindowToVram(r6->unk138.unk83[r7], 3);
+ }
+ CopyBgTilemapBufferToVram(0);
+}
+
+void sub_80226D0(struct BerryCrushGame *r6)
+{
+ u8 r5 = 0;
+ const u32 *r0 = gUnknown_08DE3FD4;
+#ifndef NONMATCHING // r4, r5, r6 register roulette
+ register u8 *r4 asm("r4") = gDecompressionBuffer;
+ register u32 r0_ asm("r0");
+#else
+ u8 *r4 = gDecompressionBuffer;
+ u32 r0_;
+#endif
+
+ LZ77UnCompWram(r0, r4);
+ for (; r5 < r6->unk9; ++r5)
+ {
+ r0_ = r6->unk138.unkC[r5]->unk0;
+ CopyToBgTilemapBufferRect(
+ 3,
+ &r4[r0_ * 40],
+ r6->unk138.unkC[r5]->unk1,
+ r6->unk138.unkC[r5]->unk2,
+ 10,
+ 2
+ );
+ }
+ CopyBgTilemapBufferToVram(3);
+}
+
+void sub_8022730(struct BerryCrushGame *r6)
+{
+ u8 r5 = 0;
+ u8 r2;
+
+ r6->unk2A = -104;
+ r6->unk2C = 0;
+ gSpriteCoordOffsetX = 0;
+ gSpriteCoordOffsetY = -104;
+ for (; r5 < 4; ++r5)
+ LoadCompressedSpriteSheet(&gUnknown_082F41F4[r5]);
+ LoadSpritePalettes(&gUnknown_082F421C);
+ r2 = CreateSprite(&gUnknown_082F430C, 120, 88, 5);
+ r6->unk138.unk20 = &gSprites[r2];
+ r6->unk138.unk20->oam.priority = 3;
+ r6->unk138.unk20->coordOffsetEnabled = TRUE;
+ r6->unk138.unk20->animPaused = TRUE;
+ for (r5 = 0; r5 < r6->unk9; ++r5)
+ {
+ r2 = CreateSprite(
+ &gUnknown_082F4324,
+ r6->unk138.unkC[r5]->unk4 + 120,
+ r6->unk138.unkC[r5]->unk6 + 32,
+ 0
+ );
+ r6->unk138.unk24[r5] = &gSprites[r2];
+ r6->unk138.unk24[r5]->oam.priority = 1;
+ r6->unk138.unk24[r5]->invisible = TRUE;
+ r6->unk138.unk24[r5]->coordOffsetEnabled = TRUE;
+ r6->unk138.unk24[r5]->animPaused = TRUE;
+ }
+ for (r5 = 0; r5 < ARRAY_COUNT(r6->unk138.unk4C); ++r5)
+ {
+ r2 = CreateSprite(
+ &gUnknown_082F433C,
+ gUnknown_082F41D2[r5][0] + 120,
+ gUnknown_082F41D2[r5][1] + 136,
+ 6
+ );
+ r6->unk138.unk4C[r5] = &gSprites[r2];
+ r6->unk138.unk4C[r5]->oam.priority = 3;
+ r6->unk138.unk4C[r5]->invisible = TRUE;
+ r6->unk138.unk4C[r5]->animPaused = TRUE;
+ r6->unk138.unk4C[r5]->data[0] = r5;
+ }
+ for (r5 = 0; r5 < ARRAY_COUNT(r6->unk138.unk78); ++r5)
+ {
+ r2 = CreateSprite(
+ &gUnknown_082F4354,
+ 24 * r5 + 176,
+ 8,
+ 0
+ );
+ r6->unk138.unk78[r5] = &gSprites[r2];
+ r6->unk138.unk78[r5]->oam.priority = 0;
+ r6->unk138.unk78[r5]->invisible = FALSE;
+ r6->unk138.unk78[r5]->animPaused = FALSE;
+ }
+ sub_8034D14(0, 0, &gUnknown_082F4384[0]);
+ sub_8034D14(1, 0, &gUnknown_082F4384[1]);
+ sub_8034D14(2, 0, &gUnknown_082F4384[2]);
+ if (r6->unk12 == 1)
+ sub_8022554(&r6->unk138);
+}
+
+void sub_8022960(struct BerryCrushGame *r5)
+{
+ u8 r4 = 0;
+
+ FreeSpriteTilesByTag(4);
+ FreeSpriteTilesByTag(3);
+ FreeSpriteTilesByTag(2);
+ FreeSpriteTilesByTag(1);
+ FreeSpritePaletteByTag(4);
+ FreeSpritePaletteByTag(2);
+ FreeSpritePaletteByTag(1);
+ for (; r4 < ARRAY_COUNT(r5->unk138.unk78); ++r4)
+ DestroySprite(r5->unk138.unk78[r4]);
+ sub_80353DC(2);
+ sub_80353DC(1);
+ sub_80353DC(0);
+ for (r4 = 0; r4 < ARRAY_COUNT(r5->unk138.unk4C); ++r4)
+ DestroySprite(r5->unk138.unk4C[r4]);
+ for (r4 = 0; r4 < r5->unk9; ++r4)
+ DestroySprite(r5->unk138.unk24[r4]);
+ if (r5->unk138.unk20->inUse)
+ DestroySprite(r5->unk138.unk20);
+}
+
+void sub_8022A20(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ sprite->invisible = TRUE;
+ sprite->animPaused = TRUE;
+ }
+}
+
+void sub_8022A4C(struct Sprite *sprite)
+{
+ u8 r1 = 0;
+ SpriteCallback r5 = SpriteCallbackDummy;
+
+ for (; r1 < ARRAY_COUNT(sprite->data); ++r1)
+ sprite->data[r1] = 0;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->invisible = TRUE;
+ sprite->animPaused = TRUE;
+ sprite->callback = r5;
+}
+
+void sub_8022A94(struct Sprite *sprite)
+{
+ s16 *r4 = sprite->data;
+
+ r4[1] += r4[2];
+ sprite->pos2.y += r4[1] >> 8;
+ if (r4[7] & 0x8000)
+ {
+ sprite->data[0] += r4[3];
+ r4[4] += r4[5];
+ sprite->pos2.x = Sin(r4[4] >> 7, r4[6]);
+ if (r4[7] & 0x8000 && r4[4] >> 7 > 126)
+ {
+ sprite->pos2.x = 0;
+ r4[7] &= 0x7FFF;
+ }
+ }
+ sprite->pos1.x = r4[0] >> 7;
+ if (sprite->pos1.y + sprite->pos2.y > (r4[7] & 0x7FFF))
+ sprite->callback = sub_8022A4C;
+}
+
+void sub_8022B28(struct Sprite *sprite)
+{
+ s16 *r7 = sprite->data;
+ s16 r4, r5;
+ s32 r2;
+ u32 r8 = 0;
+
+ r2 = 640;
+ r7[1] = r2;
+ r7[2] = 32;
+ r7[7] = 168;
+ r4 = sprite->pos2.x * 128;
+ r5 = sub_81515D4(7, (168 - sprite->pos1.y) << 7, (r2 + 32) >> 1);
+ sprite->data[0] = sprite->pos1.x << 7;
+ r7[3] = sub_81515D4(7, r4, r5);
+ r2 = sub_8151550(7, r5, 85);
+ r7[4] = r8;
+ r7[5] = sub_81515D4(7, 0x3F80, r2);
+ r7[6] = sprite->pos2.x / 4;
+ r7[7] |= 0x8000;
+ sprite->pos2.y = r8;
+ sprite->pos2.x = r8;
+ sprite->callback = sub_8022A94;
+ sprite->animPaused = FALSE;
+ sprite->invisible = FALSE;
+}
+
+void sub_8022BEC(u16 r5, u8 r4, u8 *r7)
+{
+ struct BerryCrushGame *r6 = sub_8020C00();
+
+ if (r5 > 25)
+ r5 = 0;
+ switch (r4)
+ {
+ case 0:
+ if (r5 != 0)
+ gUnknown_082F43CC[r5](r6, r7);
+ if (r6->unkE > 25)
+ r6->unkE = r4;
+ r6->unk4 = gUnknown_082F43CC[r6->unkE];
+ break;
+ case 1:
+ r6->unk4 = gUnknown_082F43CC[r5];
+ break;
+ }
+}
+
+u32 sub_8022C58(struct BerryCrushGame *r6, u8 *r1)
+{
+ u16 r4;
+ u32 r0;
+#ifndef NONMATCHING // fake match, nobody can write such code
+ register u32 r2 asm("r2");
+ register u32 r3 asm("r3");
+
+ r2 = r1[0];
+ r3 = r1[1];
+ r3 <<= 8;
+ r2 |= r3;
+ r3 = r1[2];
+ r3 <<= 16;
+ r2 |= r3;
+ r3 = r1[3];
+ r3 <<= 24;
+ r0 = r2;
+ r0 |= r3;
+#else
+ u32 r2;
+
+ r0 = T1_READ_32(r1);
+#endif
+ r2 = r1[9];
+ r1[0] = r2;
+ r4 = r1[8] << 8;
+ r2 = r1[7];
+ r4 |= r2;
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ BeginNormalPaletteFade(r0, r1[4], r1[5], r1[6], r4);
+ UpdatePaletteFade();
+ r6->unkE = 2;
+ return 0;
+}
+
+u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5)
+{
+ switch (r4->unkC)
+ {
+ case 0:
+ if (UpdatePaletteFade())
+ return 0;
+ if(r5[0] != 0)
+ ++r4->unkC;
+ else
+ r4->unkC = 3;
+ return 0;
+ case 1:
+ sub_8010434();
+ ++r4->unkC;
+ return 0;
+ case 2:
+ if (IsLinkTaskFinished())
+ {
+ ++r4->unkC;
+ return 0;
+ }
+ return 0;
+ case 3:
+ sub_8022BEC(r4->unkF, 1, NULL);
+ r4->unkC = 0;
+ return 0;
+ default:
+ ++r4->unkC;
+ return 0;
+ }
+}
+
+u32 sub_8022D14(struct BerryCrushGame *r7, u8 *r5)
+{
+ u16 r4 = r5[3];
+
+ r4 <<= 8;
+ r4 |= r5[2];
+ switch (r7->unkC)
+ {
+ case 0:
+ DrawDialogueFrame(0, 0);
+ if (r5[1] & 2)
+ {
+ StringExpandPlaceholders(gStringVar4, gUnknown_082F32A4[r5[0]]);
+ AddTextPrinterParameterized2(0, 1, gStringVar4, r7->unkB, 0, 2, 1, 3);
+ }
+ else
+ {
+ AddTextPrinterParameterized2(0, 1, gUnknown_082F32A4[r5[0]], r7->unkB, 0, 2, 1, 3);
+ }
+ CopyWindowToVram(0, 3);
+ break;
+ case 1:
+ if (!IsTextPrinterActive(0))
+ {
+ if (r4 == 0)
+ ++r7->unkC;
+ break;
+ }
+ return 0;
+ case 2:
+ if (!(r4 & gMain.newKeys))
+ return 0;
+ break;
+ case 3:
+ if (r5[1] & 1)
+ ClearDialogWindowAndFrame(0, 1);
+ sub_8022BEC(r7->unkE, 1, NULL);
+ r7->unkC = r5[4];
+ return 0;
+ }
+ ++r7->unkC;
+ return 0;
+}
+
+u32 sub_8022E1C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ if (sub_802104C() != 0)
+ sub_8022BEC(r4->unkE, 0, r4->unk36);
+ return 0;
+}
+
+u32 sub_8022E3C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ if (sub_802130C() != 0)
+ sub_8022BEC(r4->unkE, 0, r4->unk36);
+ return 0;
+}
+
+u32 sub_8022E5C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ switch (r4->unkC)
+ {
+ case 0:
+ sub_8010434();
+ break;
+ case 1:
+ if (IsLinkTaskFinished())
+ {
+ PlayNewMapMusic(MUS_RG_SLOT);
+ sub_8022BEC(7, 1, NULL);
+ r4->unk12 = 3;
+ r4->unkC = 0;
+ }
+ return 0;
+ }
+ ++r4->unkC;
+ return 0;
+}
+
+u32 sub_8022EAC(struct BerryCrushGame *r4, u8 *r5)
+{
+ switch (r4->unkC)
+ {
+ default:
+ ++r4->unkC;
+ break;
+ case 0:
+ sub_8024578(r4);
+ sub_8024644(r5, 0, 1, 0, 1);
+ r4->unkE = 7;
+ sub_8022BEC(3, 1, NULL);
+ break;
+ case 1:
+ r4->unkE = 8;
+ sub_8022BEC(5, 1, NULL);
+ r4->unkC = 2;
+ break;
+ }
+ return 0;
+}
+
+u32 sub_8022F04(struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1)
+{
+ r0->unk4 = NULL;
+ SetMainCallback2(sub_8020E1C);
+ return 0;
+}
+
+u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
+{
+ u8 r3;
+
+ switch (r5->unkC)
+ {
+ case 0:
+ sub_8024644(r2, 1, 0, 0, 1);
+ r5->unkE = 9;
+ sub_8022BEC(3, 1, NULL);
+ return 0;
+ case 1:
+ sub_8010434();
+ break;
+ case 2:
+ if (!IsLinkTaskFinished())
+ return 0;
+ memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2));
+ r5->unk40.unk2[0] = r5->unk68.as_four_players.others[r5->unk8].unk0;
+ SendBlock(0, r5->unk40.unk2, 2);
+ break;
+ case 3:
+ if (!IsLinkTaskFinished())
+ return 0;
+ r5->unk10 = 0;
+ break;
+ case 4:
+ if (GetBlockReceivedStatus() != gUnknown_082F4448[r5->unk9 - 2])
+ return 0;
+ for (r3 = 0; r3 < r5->unk9; ++r3)
+ {
+ r5->unk68.as_four_players.others[r3].unk0 = gBlockRecvBuffer[r3][0];
+ if (r5->unk68.as_four_players.others[r3].unk0 > 0xB0)
+ r5->unk68.as_four_players.others[r3].unk0 = 0;
+ r5->unk18 += gUnknown_0858AB24[r5->unk68.as_four_players.others[r3].unk0].unk0;
+ r5->unk1C += gUnknown_0858AB24[r5->unk68.as_four_players.others[r3].unk0].unk1;
+ }
+ r5->unk10 = 0;
+ ResetBlockReceivedFlags();
+ r5->unk20 = sub_81515FC(r5->unk18 << 8, 0x2000);
+ break;
+ case 5:
+ ClearDialogWindowAndFrame(0, 1);
+ sub_8022BEC(10, 1, NULL);
+ r5->unk12 = 4;
+ r5->unkC = 0;
+ return 0;
+ }
+ ++r5->unkC;
+ return 0;
+}
+
+u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ switch (r4->unkC)
+ {
+ case 0:
+ sub_80214A8(r4, &r4->unk138);
+ sub_8010434();
+ break;
+ case 1:
+ if (!IsLinkTaskFinished())
+ return 0;
+ r4->unk138.unk0 = 0;
+ r4->unk138.unk1 = 0;
+ r4->unk138.unk2 = 0;
+ r4->unk138.unk3 = 0;
+ break;
+ case 2:
+ r4->unk138.unk38[r4->unk138.unk0]->callback = sub_8021608;
+ r4->unk138.unk38[r4->unk138.unk0]->affineAnimPaused = FALSE;
+ PlaySE(SE_NAGERU);
+ break;
+ case 3:
+ if (r4->unk138.unk38[r4->unk138.unk0]->callback == sub_8021608)
+ return 0;
+ r4->unk138.unk38[r4->unk138.unk0] = NULL;
+ ++r4->unk138.unk0;
+ sub_8010434();
+ break;
+ case 4:
+ if (!IsLinkTaskFinished())
+ return 0;
+ if (r4->unk138.unk0 < r4->unk9)
+ {
+ r4->unkC = 2;
+ return 0;
+ }
+ r4->unk138.unk0 = 0;
+ break;
+ case 5:
+ sub_80216A8(r4, &r4->unk138);
+ sub_8010434();
+ break;
+ case 6:
+ if (!IsLinkTaskFinished())
+ return 0;
+ PlaySE(SE_RU_HYUU);
+ sub_8022BEC(11, 1, NULL);
+ r4->unk12 = 5;
+ r4->unkC = 0;
+ return 0;
+ }
+ ++r4->unkC;
+ return 0;
+}
+
+u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ switch (r4->unkC)
+ {
+ case 0:
+ r4->unk2A += 4;
+ if (r4->unk2A < 0)
+ return 0;
+ r4->unk2A = 0;
+ r4->unk138.unk1 = 4;
+ r4->unk138.unk0 = 0;
+ r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0];
+ PlaySE(SE_W070);
+ break;
+ case 1:
+ r4->unk2C = gUnknown_082F326C[r4->unk138.unk1][r4->unk138.unk0];
+ SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C);
+ SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C);
+ SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C);
+ ++r4->unk138.unk0;
+ if (r4->unk138.unk0 < r4->unk138.unk2)
+ return 0;
+ if (r4->unk138.unk1 == 0)
+ break;
+ --r4->unk138.unk1;
+ r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0];
+ r4->unk138.unk0 = 0;
+ return 0;
+ case 2:
+ r4->unk2C = 0;
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ sub_8010434();
+ break;
+ case 3:
+ if (!IsLinkTaskFinished())
+ return 0;
+ sub_8022BEC(12, 1, NULL);
+ r4->unk12 = 6;
+ r4->unkC = 0;
+ return 0;
+ }
+ ++r4->unkC;
+ return 0;
+}
+
+u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ switch (r4-> unkC)
+ {
+ case 1:
+ if (!IsLinkTaskFinished())
+ return 0;
+ sub_802EB24(0x1000, 0x1000, 120, 80, 0);
+ break;
+ case 2:
+ if (sub_802EB84())
+ return 0;
+ // fallthrough
+ case 0:
+ sub_8010434();
+ break;
+ case 3:
+ if (!IsLinkTaskFinished())
+ return 0;
+ r4->unk138.unk0 = 0;
+ r4->unk138.unk1 = 0;
+ r4->unk138.unk2 = 0;
+ r4->unk138.unk3 = 0;
+ r4->unk10 = 0;
+ if (r4->unk8 == 0)
+ sub_8022BEC(13, 1, NULL);
+ else
+ sub_8022BEC(14, 1, NULL);
+ r4->unk12 = 7;
+ r4->unkC = 0;
+ return 0;
+ }
+ ++r4->unkC;
+ return 0;
+}
+
+void sub_802339C(struct BerryCrushGame *r4)
+{
+ u8 r8 = 0;
+ u16 r3;
+ u16 *r2;
+ u8 r7 = 0;
+ s32 r2_ = 0;
+ s32 r0;
+
+ for (r7 = 0; r7 < r4->unk9; ++r7)
+ {
+ r2 = gRecvCmds[r7];
+ if ((r2[0] & 0xFF00) == 0x2F00
+ && r2[1] == 2)
+ {
+ if ((u8)r2[2] & 4)
+ {
+ r4->unk5C.unk02_3 |= gUnknown_082F325C[r7];
+ r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 1;
+ ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[3];
+ ++r8;
+ r3 = r4->unk28 - r4->unk68.as_four_players.others[r7].unk2;
+ if (r3 >= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] - 1
+ && r3 <= r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] + 1)
+ {
+ ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[0];
+ r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3;
+ if (r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] > r4->unk68.as_four_players.others[r7].unk4.as_hwords[2])
+ r4->unk68.as_four_players.others[r7].unk4.as_hwords[2] = r4->unk68.as_four_players.others[r7].unk4.as_hwords[0];
+ }
+ else
+ {
+ r4->unk68.as_four_players.others[r7].unk4.as_hwords[0] = 0;
+ r4->unk68.as_four_players.others[r7].unk4.as_hwords[1] = r3;
+ }
+ r4->unk68.as_four_players.others[r7].unk2 = r4->unk28;
+ if (++r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] > 2)
+ r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][4] = 0;
+ }
+ else
+ {
+ r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] = 0;
+ }
+ }
+ }
+ if (r8 > 1)
+ {
+ for (r7 = 0; r7 < r4->unk9; ++r7)
+ {
+ if (r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] != 0)
+ {
+ r4->unk68.as_four_players.others[r7].unk4.as_2d_bytes[1][5] |= 2;
+ ++r4->unk68.as_four_players.others[r7].unk4.as_hwords[4];
+ }
+ }
+ }
+ if (r8 != 0)
+ {
+ r4->unk2E += r8;
+ r8 += gUnknown_082F3264[r8 - 1];
+ r4->unk34 += r8;
+ r4->unk1A += r8;
+ r0 = r4->unk18;
+ r2_ = r4->unk1A;
+ if (r0 - r2_ > 0)
+ {
+ r2_ <<= 8;
+ r2_ = sub_81515FC(r2_, r4->unk20);
+ r2_ >>= 8;
+ r4->unk24 = r2_;
+ }
+ else
+ {
+ r4->unk24 = 32;
+ r4->unk5C.unk02_0 = 1;
+ }
+ }
+}
+
+void sub_8023558(struct BerryCrushGame *r3)
+{
+ u8 r6 = 0;
+ u16 r1 = 0;
+ u8 r4 = 0;
+
+ for (r4 = 0; r4 < r3->unk9; ++r4)
+ {
+ if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] != 0)
+ {
+ ++r6;
+ r1 = r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][4] + 1;
+ if (r3->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] & 2)
+ r1 |= 4;
+ r1 <<= 3 * r4;
+ r3->unk5C.unk08 |= r1;
+ }
+ }
+ r3->unk5C.unk04 = r3->unk24;
+ if (r6 == 0)
+ {
+ if (r3->unk138.unk3 != 0)
+ ++r3->unk138.unk0;
+ else
+ goto SET_UNK5F_0;
+ }
+ else
+ {
+ if (r3->unk138.unk3 != 0)
+ {
+ if (r6 != r3->unk138.unk1)
+ {
+ r3->unk138.unk1 = r6 - 1;
+ r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0];
+ }
+ else
+ {
+ ++r3->unk138.unk0;
+ }
+ }
+ else
+ {
+ r3->unk138.unk0 = 0;
+ r3->unk138.unk1 = r6 - 1;
+ r3->unk138.unk2 = gUnknown_082F3290[r6 - 1][0];
+ r3->unk138.unk3 = 1;
+ }
+ }
+ if (r3->unk138.unk3 != 0)
+ {
+ if (r3->unk138.unk0 >= r3->unk138.unk2)
+ {
+ r3->unk138.unk0 = 0;
+ r3->unk138.unk1 = 0;
+ r3->unk138.unk2 = 0;
+ r3->unk138.unk3 = 0;
+ r1 = 0;
+ }
+ else
+ {
+ r1 = gUnknown_082F3290[r3->unk138.unk1][r3->unk138.unk0 + 1];
+ }
+ r3->unk5C.unk03 = r1;
+ }
+ else
+ {
+ SET_UNK5F_0:
+ r3->unk5C.unk03 = 0;
+ }
+ r3->unk5C.unk06 = r3->unk26;
+}
+
+void sub_80236B8(struct BerryCrushGame *r5)
+{
+ if (gMain.newKeys & A_BUTTON)
+ r5->unk5C.unk02_2 = 1;
+ if (gMain.heldKeys & A_BUTTON)
+ {
+ if (r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5] < r5->unk28)
+ ++r5->unk68.as_four_players.others[r5->unk8].unk4.as_hwords[5];
+ }
+ if (r5->unk8 != 0 && r5->unk5C.unk02_2 == 0)
+ return;
+ r5->unk5C.unk00 = 2;
+ if (r5->unk28 % 30 == 0)
+ {
+ if (r5->unk2E > gUnknown_082F4444[r5->unk9 - 2])
+ {
+ ++r5->unk30;
+ r5->unk25_4 = 1;
+ }
+ else
+ {
+ r5->unk25_4 = 0;
+ }
+ r5->unk2E = 0;
+ ++r5->unk32;
+ }
+ if (r5->unk28 % 15 == 0)
+ {
+ if (r5->unk34 < gUnknown_082F4434[r5->unk9 - 2][0])
+ r5->unk25_5 = 0;
+ else if (r5->unk34 < gUnknown_082F4434[r5->unk9 - 2][1])
+ r5->unk25_5 = 1;
+ else if (r5->unk34 < gUnknown_082F4434[r5->unk9 - 2][2])
+ r5->unk34 = 2; // typo since r5->unk34 will be reset?
+ else if (r5->unk34 < gUnknown_082F4434[r5->unk9 - 2][3])
+ r5->unk34 = 3; // typo since r5->unk34 will be reset?
+ else
+ r5->unk25_5 = 4;
+ r5->unk34 = 0;
+ }
+ else
+ {
+ ++r5->unk10;
+ if (r5->unk10 > 60)
+ {
+ if (r5->unk10 > 70)
+ {
+ sub_8011AC8();
+ r5->unk10 = 0;
+ }
+ else if (r5->unk5C.unk02_3 == 0)
+ {
+ sub_8011AC8();
+ r5->unk10 = 0;
+ }
+ }
+
+ }
+ if (r5->unk28 >= 36000)
+ r5->unk5C.unk02_0 = 1;
+ r5->unk5C.unk02_1 = r5->unk25_4;
+ r5->unk5C.unk0A = r5->unk25_5;
+ memcpy(r5->unk40.unk2, &r5->unk5C, sizeof(r5->unk40.unk2));
+ sub_800FE50(r5->unk40.unk2);
+}
+
+void sub_802385C(struct BerryCrushGame *r5)
+{
+ struct BerryCrushGame_4E *r4_;
+#ifndef NONMATCHING
+ register u32 r4 asm("r4");
+ register u32 r0 asm("r0");
+
+ for (r4 = 0; r4 < r5->unk9; r4 = (u8)r0)
+ {
+ r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0;
+ r0 = r4 + 1;
+ }
+#else
+ u8 r4;
+
+ for (r4 = 0; r4 < r5->unk9; ++r4)
+ r5->unk68.as_four_players.others[r4].unk4.as_2d_bytes[1][5] = 0;
+#endif
+ if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00
+ || gRecvCmds[0][1] != 2)
+ {
+ r5->unk25_2 = 0;
+ }
+ else
+ {
+ r4_ = &r5->unk40.unkE;
+ memcpy(r4_, gRecvCmds, sizeof(struct BerryCrushGame_4E));
+ r5->unk2A = r4_->unk6;
+ r5->unk2C = r4_->unk5;
+ r5->unk28 = r4_->unk8;
+ sub_80216E0(r5, &r5->unk138);
+ if (r4_->unk4_0)
+ r5->unk25_3 = 1;
+ }
+}
+
+u32 sub_80238F0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ memset(&r4->unk5C, 0, sizeof(r4->unk5C));
+ memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE));
+ sub_802385C(r4);
+ SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C);
+ SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C);
+ SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C);
+ if (r4->unk25_3)
+ {
+ if (r4->unk28 >= 36000)
+ {
+ r4->unk28 = 36000;
+ sub_8022BEC(16, 1, NULL);
+ }
+ else
+ {
+ sub_8022BEC(15, 1, NULL);
+ }
+ r4->unk10 = 0;
+ r4->unkC = 0;
+ return 0;
+ }
+ else
+ {
+ ++r4->unk26;
+ sub_802339C(r4);
+ sub_8023558(r4);
+ sub_80236B8(r4);
+ return 0;
+ }
+}
+
+u32 sub_8023998(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ memset(&r4->unk5C, 0, sizeof(r4->unk5C));
+ memset(&r4->unk40.unkE, 0, sizeof(r4->unk40.unkE));
+ sub_802385C(r4);
+ SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C);
+ SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C);
+ SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C);
+ if (r4->unk25_3)
+ {
+ if (r4->unk28 >= 36000)
+ {
+ r4->unk28 = 36000;
+ sub_8022BEC(16, 1, NULL);
+ }
+ else
+ {
+ sub_8022BEC(15, 1, NULL);
+ }
+ r4->unk10 = 0;
+ r4->unkC = 0;
+ return 0;
+ }
+ else
+ {
+ sub_80236B8(r4);
+ return 0;
+ }
+}
+
+u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ switch (r4->unkC)
+ {
+ case 0:
+ r4->unk12 = 8;
+ PlaySE(SE_W070);
+ BlendPalettes(0xFFFFFFFF, 8, RGB(31, 31, 0));
+ r4->unk138.unk0 = 2;
+ break;
+ case 1:
+ if (--r4->unk138.unk0 != 255)
+ return 0;
+ BlendPalettes(0xFFFFFFFF, 0, RGB(31, 31, 0));
+ r4->unk138.unk1 = 4;
+ r4->unk138.unk0 = 0;
+ r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0];
+ break;
+ case 2:
+ r4->unk2C = gUnknown_082F326C[r4->unk138.unk1][r4->unk138.unk0];
+ SetGpuReg(REG_OFFSET_BG0VOFS, -r4->unk2C);
+ SetGpuReg(REG_OFFSET_BG2VOFS, -r4->unk2C);
+ SetGpuReg(REG_OFFSET_BG3VOFS, -r4->unk2C);
+ if (++r4->unk138.unk0 < r4->unk138.unk2)
+ return 0;
+ if (r4->unk138.unk1 != 0)
+ {
+ --r4->unk138.unk1;
+ r4->unk138.unk2 = gUnknown_082F326C[r4->unk138.unk1][0];
+ r4->unk138.unk0 = 0;
+ return 0;
+ }
+ break;
+ case 3:
+ r4->unk2C = 0;
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ break;
+ case 4:
+ if (!sub_80218D4(r4, &r4->unk138))
+ return 0;
+ sub_8010434();
+ r4->unk10 = 0;
+ break;
+ case 5:
+ if (!IsLinkTaskFinished())
+ return 0;
+ sub_8022BEC(17, 1, NULL);
+ r4->unk10 = 0;
+ r4->unkC = 0;
+ return 0;
+ }
+ ++r4->unkC;
+ return 0;
+}
+
+u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
+{
+ switch (r5->unkC)
+ {
+ case 0:
+ r5->unk12 = 9;
+ PlaySE(SE_HAZURE);
+ BlendPalettes(0xFFFFFFFF, 8, RGB(31, 0, 0));
+ r5->unk138.unk0 = 4;
+ break;
+ case 1:
+ if (--r5->unk138.unk0 != 255)
+ return 0;
+ BlendPalettes(0xFFFFFFFF, 0, RGB(31, 0, 0));
+ r5->unk138.unk0 = 0;
+ break;
+ case 2:
+ if (!sub_80218D4(r5, &r5->unk138))
+ return 0;
+ sub_8010434();
+ r5->unk10 = 0;
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ break;
+ case 3:
+ if (!IsLinkTaskFinished())
+ return 0;
+ ConvertIntToDecimalStringN(gStringVar1, r5->unk1C, STR_CONV_MODE_LEFT_ALIGN, 6);
+ sub_8024644(r6, 7, 1, 0, 0);
+ r5->unkE = 19;
+ sub_8022BEC(3, 1, NULL);
+ r5->unk10 = 0;
+ r5->unkC = 0;
+ return 0;
+ }
+ ++r5->unkC;
+ return 0;
+}
+
+u32 sub_8023CAC(struct BerryCrushGame *r7, __attribute__((unused)) u8 *r1)
+{
+ u8 r8, r4_;
+ s32 r2;
+ s32 r4;
+ u8 r6; // ???
+
+ switch (r7->unkC)
+ {
+ case 0:
+ memset(r7->unk40.unk2, 0, 2 * sizeof(u16));
+ if (r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5] > r7->unk28)
+ r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5] = r7->unk28;
+ r7->unk40.unk2[0] = r7->unk68.as_four_players.others[r7->unk8].unk4.as_hwords[5];
+ SendBlock(0, r7->unk40.unk2, 2);
+ break;
+ case 1:
+ if (!IsLinkTaskFinished())
+ return 0;
+ r7->unk10 = 0;
+ break;
+ case 2:
+ if (GetBlockReceivedStatus() != gUnknown_082F4448[r7->unk9 - 2])
+ return 0;
+ for (r8 = 0; r8 < r7->unk9; ++r8)
+ r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] = gBlockRecvBuffer[r8][0];
+ r7->unk10 = 0;
+ r7->unk40.unk2[0] = 0;
+ ResetBlockReceivedFlags();
+ if (r7->unk8 == 0)
+ r7->unkC = 3;
+ else
+ r7->unkC = 6;
+ return 0;
+ case 3:
+ memset(
+ &r7->unk68,
+ 0,
+ sizeof(struct BerryCrushGame_68_x_SubStruct)
+ );
+ r7->unk68.as_four_players.unk00.unk04 = r7->unk28;
+ r7->unk68.as_four_players.unk00.unk06 = r7->unk18 / (r7->unk28 / 60);
+ r2 = sub_8151574(r7->unk30 << 8, 0x3200);
+ r2 = sub_81515FC(r2, r7->unk32 << 8) + 0x3200;
+ r2 >>= 8;
+ r7->unk68.as_four_players.unk00.unk08 = r2 & 0x7F;
+ r2 <<= 8;
+ r2 = sub_81515FC(r2, 0x6400);
+ r4 = (r7->unk1C * r7->unk9) << 8;
+ r4 = sub_8151574(r4, r2);
+ r7->unk68.as_four_players.unk00.unk00 = r4 >> 8;
+ r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7] = Random() % 3;
+ for (r6 = 0, r8 = 0; r8 < r7->unk9; ++r8)
+ {
+ r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][r8] = r8;
+ r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[1][r8] = r8;
+ r7->unk68.as_four_players.unk00.unk0C[0][r8] = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3];
+ r7->unk68.as_four_players.unk00.unk0A += r7->unk68.as_four_players.unk00.unk0C[0][r8];
+ switch (r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0][7])
+ {
+ case 0:
+ if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0)
+ {
+ r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[2];
+ r2 <<= 8;
+ r2 = sub_8151574(r2, 0x6400);
+ r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3];
+ r4 <<= 8;
+ r4 = sub_81515FC(r2, r4);
+ }
+ else
+ {
+ r4 = 0;
+ }
+ break;
+ case 1:
+ if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] != 0)
+ {
+ r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[4];
+ r2 <<= 8;
+ r2 = sub_8151574(r2, 0x6400);
+ r4 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[3];
+ r4 <<= 8;
+ r4 = sub_81515FC(r2, r4);
+ }
+ else
+ {
+ r4 = 0;
+ }
+ break;
+ case 2:
+ if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[3] == 0)
+ {
+ r4 = 0;
+ }
+ else if (r7->unk68.as_four_players.others[r8].unk4.as_hwords[5] >= r7->unk28)
+ {
+ r4 = 0x6400;
+ }
+ else
+ {
+ r2 = r7->unk68.as_four_players.others[r8].unk4.as_hwords[5];
+ r2 <<= 8;
+ r2 = sub_8151574(r2, 0x6400);
+ r4 = r7->unk28;
+ r4 <<= 8;
+ r4 = sub_81515FC(r2, r4);
+ }
+ break;
+ }
+ r4 >>= 4;
+ r7->unk68.as_four_players.unk00.unk0C[1][r8] = r4;
+ }
+ break;
+ case 4:
+ for (r6 = 0, r8 = 0; r8 < r7->unk9 - 1; ++r8)
+ {
+ for (r4_ = r7->unk9 - 1; r4_ > r8; --r4_)
+ {
+ u16 r0;
+ u8 r3;
+ u16 *sp00 = r7->unk68.as_four_players.unk00.unk0C[0];
+ u8 *sp04 = r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[0];
+ u8 *r10 = r7->unk68.as_five_players.unk1C[0].unk4.as_2d_bytes[1];
+ u16 *r9 = r7->unk68.as_four_players.unk00.unk0C[1];
+ s32 r12 = r4_ - 1;
+ u16 *p1 = sp00 + r12; // these have to be here
+ u16 *p2 = sp00 + r4_; // to swap operands. macro?
+
+ if (*p1 < *p2)
+ {
+ r0 = sp00[r4_];
+ sp00[r4_] = sp00[r12];
+ sp00[r12] = r0;
+ r3 = sp04[r4_];
+ sp04[r4_] = sp04[r12];
+ sp04[r12] = r3;
+ }
+ p1 = r9 + r12;
+ p2 = r9 + r4_;
+ if (*p1 < *p2)
+ {
+ r0 = r9[r4_];
+ r9[r4_] = r9[r12];
+ r9[r12] = r0;
+ r3 = r10[r4_];
+ r10[r4_] = r10[r12];
+ r10[r12] = r3;
+ }
+ }
+ }
+ SendBlock(
+ 0,
+ &r7->unk68,
+ sizeof(struct BerryCrushGame_68_x_SubStruct)
+ );
+ break;
+ case 5:
+ if (!IsLinkTaskFinished())
+ return 0;
+ r7->unk10 = 0;
+ break;
+ case 6:
+ if (GetBlockReceivedStatus() != 1)
+ return 0;
+ memset(
+ &r7->unk68,
+ 0,
+ sizeof(struct BerryCrushGame_68_x_SubStruct)
+ );
+ memcpy(
+ &r7->unk68,
+ gBlockRecvBuffer,
+ sizeof(struct BerryCrushGame_68_x_SubStruct)
+ );
+ ResetBlockReceivedFlags();
+ r7->unk10 = 0;
+ break;
+ case 7:
+ sub_8020E58();
+ sub_8022BEC(18, 1, NULL);
+ r7->unk12 = 11;
+ r7->unkC = 0;
+ r7->unk24 = 0;
+ return 0;
+ }
+ ++r7->unkC;
+ return 0;
+}
+
+u32 sub_8024048(struct BerryCrushGame *r5, u8 *r6)
+{
+ switch (r5->unkC)
+ {
+ case 0:
+ if (!sub_8022070(r5, &r5->unk138))
+ return 0;
+ break;
+ case 1:
+ CopyBgTilemapBufferToVram(0);
+ r5->unk138.unk0 = 30;
+ break;
+ case 2:
+ if (r5->unk138.unk0 != 0)
+ {
+ --r5->unk138.unk0;
+ return 0;
+ }
+ if (!(gMain.newKeys & A_BUTTON))
+ return 0;
+ PlaySE(SE_SELECT);
+ sub_802222C(r5);
+ break;
+ case 3:
+ if (r5->unk12 <= 12)
+ {
+ ++r5->unk12;
+ r5->unkC = 0;
+ return 0;
+ }
+ break;
+ case 4:
+ ConvertIntToDecimalStringN(gStringVar1, r5->unk1C, STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar2, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 6);
+ sub_8024644(r6, 2, 3, 0, 0);
+ r5->unkE = 19;
+ sub_8022BEC(3, 1, NULL);
+ r5->unkC = 0;
+ return 0;
+ }
+ ++r5->unkC;
+ return 0;
+}
+
+u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
+{
+ switch (r5->unkC)
+ {
+ case 0:
+ if (r5->unk28 >= 36000)
+ sub_8022554(&r5->unk138);
+ sub_8024644(r4, 8, 0, 0, 1);
+ r5->unkE = 19;
+ sub_8022BEC(3, 1, NULL);
+ r5->unkC = 0;
+ return 0;
+ case 1:
+ sub_8010434();
+ break;
+ case 2:
+ if (!IsLinkTaskFinished())
+ return 0;
+ DrawDialogueFrame(0, 0);
+ AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
+ CopyWindowToVram(0, 3);
+ CreateTask(sub_8153688, 0);
+ break;
+ case 3:
+ if (FuncIsActiveTask(sub_8153688))
+ return 0;
+ break;
+ case 4:
+ sub_8022BEC(20, 1, NULL);
+ r5->unk12 = 15;
+ r5->unkC = 0;
+ return 0;
+ }
+ ++r5->unkC;
+ return 0;
+}
+
+u32 sub_8024228(struct BerryCrushGame *r5, u8 *r6)
+{
+ s32 r4;
+#ifndef NONMATCHING
+ register s32 r0 asm("r0");
+#else
+ s32 r0;
+#endif
+
+ switch (r5->unkC)
+ {
+ case 0:
+ sub_8024644(r6, 4, 0, 0, 1);
+ r5->unkE = 20;
+ sub_8022BEC(3, 1, NULL);
+ r0 = 0;
+ r5->unkC = r0; // dunno what it's doing because it's already in case 0
+ return 0;
+ case 1:
+ DisplayYesNoMenuDefaultYes();
+ break;
+ case 2:
+ if ((r4 = Menu_ProcessInputNoWrapClearOnChoose()) != -2)
+ {
+ memset(r5->unk40.unk2, 0, sizeof(r5->unk40.unk2));
+ if (r4 == 0)
+ {
+ if (HasAtLeastOneBerry())
+ r5->unk14 = 0;
+ else
+ r5->unk14 = 3;
+ }
+ else
+ {
+ r5->unk14 = 1;
+ }
+ ClearDialogWindowAndFrame(0, 1);
+ sub_8024644(r6, 8, 0, 0, 0);
+ r5->unkE = 21;
+ sub_8022BEC(3, 1, NULL);
+ r5->unkC = 0;
+ }
+ return 0;
+ }
+ ++r5->unkC;
+ return 0;
+}
+
+u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1)
+{
+ u8 r5 = 0;
+
+ switch (r4->unkC)
+ {
+ case 0:
+ sub_8010434();
+ break;
+ case 1:
+ if (!IsLinkTaskFinished())
+ return 0;
+ r4->unk40.unk2[0] = r4->unk14;
+ r4->unk40.unkE.unk0 = 0;
+ SendBlock(0, r4->unk40.unk2, sizeof(u16));
+ break;
+ case 2:
+ if (!IsLinkTaskFinished())
+ return 0;
+ r4->unk10 = 0;
+ break;
+ case 3:
+ if (GetBlockReceivedStatus() != gUnknown_082F4448[r4->unk9 - 2])
+ return 0;
+ for (; r5 < r4->unk9; ++r5)
+ r4->unk40.unkE.unk0 += gBlockRecvBuffer[r5][0];
+ if (r4->unk40.unkE.unk0 != 0)
+ sub_8022BEC(23, 1, NULL);
+ else
+ sub_8022BEC(22, 1, NULL);
+ ResetBlockReceivedFlags();
+ r4->unk40.unk2[0] = 0;
+ r4->unk40.unkE.unk0 = 0;
+ r4->unk10 = 0;
+ r4->unkC = 0;
+ return 0;
+ }
+ ++r4->unkC;
+ return 0;
+}
+
+u32 sub_80243BC(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1)
+{
+ switch (r5->unkC)
+ {
+ case 0:
+ BeginNormalPaletteFade(0xFFFFFFFF, 1, 0, 0x10, RGB_BLACK);
+ UpdatePaletteFade();
+ break;
+ case 1:
+ if (UpdatePaletteFade())
+ return 0;
+ break;
+ case 2:
+ ClearDialogWindowAndFrame(0, 1);
+ sub_8021488(r5);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
+ UpdatePaletteFade();
+ break;
+ case 3:
+ if (UpdatePaletteFade())
+ return 0;
+ sub_8022BEC(7, 1, NULL);
+ r5->unk12 = 3;
+ r5->unkC = 0;
+ return 0;
+ }
+ ++r5->unkC;
+ return 0;
+}
+
+u32 sub_8024444(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1)
+{
+ switch (r5->unkC)
+ {
+ case 0:
+ DrawDialogueFrame(0, 0);
+ if (r5->unk14 == 3)
+ AddTextPrinterParameterized2(0, 1, gUnknown_082F32A4[5], r5->unkB, 0, 2, 1, 3);
+ else
+ AddTextPrinterParameterized2(0, 1, gUnknown_082F32A4[6], r5->unkB, 0, 2, 1, 3);
+ CopyWindowToVram(0, 3);
+ break;
+ case 1:
+ if (IsTextPrinterActive(0))
+ return 0;
+ r5->unk138.unk0 = 120;
+ break;
+ case 2:
+ if (r5->unk138.unk0 != 0)
+ --r5->unk138.unk0;
+ else
+ {
+ sub_8022BEC(24, 1, NULL);
+ r5->unkC = 0;
+ }
+ return 0;
+ }
+ ++r5->unkC;
+ return 0;
+}
+
+u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1)
+{
+ switch (r5->unkC)
+ {
+ case 0:
+ sub_8010434();
+ break;
+ case 1:
+ if (!IsLinkTaskFinished())
+ return 0;
+ sub_800AC34();
+ break;
+ case 2:
+ if (gReceivedRemoteLinkPlayers != 0)
+ return 0;
+ r5->unkE = 25;
+ sub_8022BEC(5, 1, NULL);
+ r5->unkC = 2; // ???
+ return 0;
+ }
+ ++r5->unkC;
+ return 0;
+}
+
+u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attribute__((unused)) u8 *r1)
+{
+ sub_8020C0C(NULL);
+ return 0;
+}
+
+void sub_8024578(struct BerryCrushGame *r4)
+{
+ u8 r5 = 0;
+
+ IncrementGameStat(GAME_STAT_51);
+ r4->unkD = 0;
+ r4->unk10 = 0;
+ r4->unk12 = 2;
+ r4->unk14 = 0;
+ r4->unk1C = 0;
+ r4->unk18 = 0;
+ r4->unk1A = 0;
+ r4->unk20 = 0;
+ r4->unk24 = 0;
+ r4->unk25_0 = 0;
+ r4->unk25_1 = 0;
+ r4->unk25_2 = 0;
+ r4->unk25_3 = 0;
+ r4->unk25_4 = 0;
+ r4->unk25_5 = 0;
+ r4->unk26 = 0;
+ r4->unk28 = 0;
+ r4->unk2E = 0;
+ r4->unk32 = -1;
+ r4->unk30 = 0;
+ r4->unk34 = 0;
+ for (; r5 < 5; ++r5) // why is it 5 instead of 4? fillerBC isn't sufficient for one player
+ {
+ r4->unk68.as_four_players.others[r5].unk0 = -1;
+ r4->unk68.as_four_players.others[r5].unk2 = 0;
+ r4->unk68.as_four_players.others[r5].unk4.as_hwords[0] = 0;
+ r4->unk68.as_four_players.others[r5].unk4.as_hwords[1] = 1;
+ r4->unk68.as_four_players.others[r5].unk4.as_hwords[2] = 0;
+ r4->unk68.as_four_players.others[r5].unk4.as_hwords[3] = 0;
+ r4->unk68.as_four_players.others[r5].unk4.as_hwords[4] = 0;
+ r4->unk68.as_four_players.others[r5].unk4.as_hwords[5] = 0;
+ r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][4] = 0;
+ r4->unk68.as_four_players.others[r5].unk4.as_2d_bytes[1][5] = 0;
+ }
+}
+
+#ifdef NONMATCHING
+void sub_8024604(u8 *r0, u32 r1, s32 r2, u32 r3, u32 r5, u32 r6, u32 r4)
+{
+ u8 sp[8];
+ u8 *p;
+
+ 1[(u32 *)sp] = r2;
+ 0[(u16 *)sp] = r4;
+ p = &sp[4];
+ r0[0] = p[0];
+ r0[1] = p[1];
+ r0[2] = p[2];
+ r0[3] = p[3];
+ r0[4] = r3;
+ r0[5] = r5;
+ r0[6] = r6;
+ r0[7] = sp[0];
+ r0[8] = sp[1];
+ r0[9] = r1;
+}
+#else
+NAKED
+void sub_8024604(u8 *r0, u32 r1, s32 r2, u32 r3, u32 r5, u32 r6, u32 r4)
+{
+ asm_unified("\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0x8\n\
+ str r2, [sp, 0x4]\n\
+ ldr r5, [sp, 0x18]\n\
+ ldr r6, [sp, 0x1C]\n\
+ ldr r4, [sp, 0x20]\n\
+ mov r2, sp\n\
+ strh r4, [r2]\n\
+ add r4, sp, 0x4\n\
+ ldrb r2, [r4]\n\
+ strb r2, [r0]\n\
+ ldrb r2, [r4, 0x1]\n\
+ strb r2, [r0, 0x1]\n\
+ ldrb r2, [r4, 0x2]\n\
+ strb r2, [r0, 0x2]\n\
+ ldrb r2, [r4, 0x3]\n\
+ strb r2, [r0, 0x3]\n\
+ strb r3, [r0, 0x4]\n\
+ strb r5, [r0, 0x5]\n\
+ strb r6, [r0, 0x6]\n\
+ mov r2, sp\n\
+ ldrb r2, [r2]\n\
+ strb r2, [r0, 0x7]\n\
+ mov r2, sp\n\
+ ldrb r2, [r2, 0x1]\n\
+ strb r2, [r0, 0x8]\n\
+ strb r1, [r0, 0x9]\n\
+ add sp, 0x8\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0");
+}
+#endif
+
+void sub_8024644(u8 *r0, u32 r1, u32 r2, u32 r3, u32 r5)
+{
+ u8 sp[4];
+
+ 0[(u16 *)sp] = r3;
+ r0[0] = r1;
+ r0[1] = r2;
+ r0[2] = sp[0];
+ r0[3] = sp[1];
+ r0[4] = r5;
}
diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c
index 37be569f8..f42531f15 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"
@@ -36,16 +36,16 @@ static void berry_fix_bg_hide(void);
// .rodata
-static const u8 sUnknown_08617E78[] = _("Berry Program Update");
-static const u8 sUnknown_08617E8D[] = _("Ruby/Sapphire");
-static const u8 sUnknown_08617E9B[] = _("Emerald");
+static const u8 sText_BerryProgramUpdate[] = _("Berry Program Update");
+static const u8 sText_RubySapphire[] = _("Ruby/Sapphire");
+static const u8 sText_Emerald[] = _("Emerald");
-static const u8 Unknown_08617EA3[] = _("The Berry Program on your POKéMON\nRuby/Sapphire Game Pak will be updated.\n{COLOR RED}{SHADOW LIGHT_RED}Press the A Button.");
-static const u8 Unknown_08617F07[] = _("Please ensure the connection of your\nGame Boy Advance system matches this.\n{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\nNO: Turn off the power and try again.");
-static const u8 Unknown_08617F97[] = _("Please turn on the power of POKéMON\nRuby/Sapphire while holding START and\nSELECT simultaneously. Then, ensure\nthe picture above appears.");
-static const u8 Unknown_08618020[] = _("Transmitting. Please wait.\n{COLOR RED}{SHADOW LIGHT_RED}Please do not turn off the power or\nunplug the Game Boy Advance Game\nLink Cable.");
-static const u8 Unknown_08618092[] = _("Please follow the instructions on your\nPOKéMON Ruby/Sapphire screen.");
-static const u8 Unknown_086180D7[] = _("Transmission failure.\n{COLOR RED}{SHADOW LIGHT_RED}Please try again.");
+static const u8 sText_BerryProgramWillBeUpdatedPressA[] = _("The Berry Program on your POKéMON\nRuby/Sapphire Game Pak will be updated.\n{COLOR RED}{SHADOW LIGHT_RED}Press the A Button.");
+static const u8 sText_EnsureGBAConnectionMatches[] = _("Please ensure the connection of your\nGame Boy Advance system matches this.\n{COLOR RED}{SHADOW LIGHT_RED}YES: Press the A Button.\nNO: Turn off the power and try again.");
+static const u8 sText_TurnOffPowerHoldingStartSelect[] = _("Please turn on the power of POKéMON\nRuby/Sapphire while holding START and\nSELECT simultaneously. Then, ensure\nthe picture above appears.");
+static const u8 sText_TransmittingPleaseWait[] = _("Transmitting. Please wait.\n{COLOR RED}{SHADOW LIGHT_RED}Please do not turn off the power or\nunplug the Game Boy Advance Game\nLink Cable.");
+static const u8 sText_PleaseFollowInstructionsOnScreen[] = _("Please follow the instructions on your\nPOKéMON Ruby/Sapphire screen.");
+static const u8 sText_TransmissionFailureTryAgain[] = _("Transmission failure.\n{COLOR RED}{SHADOW LIGHT_RED}Please try again.");
static const struct BgTemplate gUnknown_08618108[] = {
{
@@ -70,16 +70,16 @@ static const u16 sUnknown_08618138[] = {
0x675a, 0, 0, 0
};
-static const u8 sUnknown_08618158[] = {10, 11, 12};
-static const u8 sUnknown_0861815B[] = { 0, 10, 13};
+static const u8 sBerryProgramTextColors[] = {TEXT_DYNAMIC_COLOR_1, TEXT_DYNAMIC_COLOR_2, TEXT_DYNAMIC_COLOR_3};
+static const u8 sGameTitleTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_1, TEXT_DYNAMIC_COLOR_4};
-static const u8 *const gUnknown_08618160[] = {
- Unknown_08617F07,
- Unknown_08617F97,
- Unknown_08618020,
- Unknown_08618092,
- Unknown_086180D7,
- Unknown_08617EA3
+static const u8 *const sBerryProgramTexts[] = {
+ sText_EnsureGBAConnectionMatches,
+ sText_TurnOffPowerHoldingStartSelect,
+ sText_TransmittingPleaseWait,
+ sText_PleaseFollowInstructionsOnScreen,
+ sText_TransmissionFailureTryAgain,
+ sText_BerryProgramWillBeUpdatedPressA
};
static const void *const gUnknown_08618178[][3] = {
@@ -230,21 +230,21 @@ static void berry_fix_gpu_set(void)
FillWindowPixelBuffer(3, PIXEL_FILL(0));
FillWindowPixelBuffer(0, PIXEL_FILL(0xA));
- width = GetStringWidth(0, sUnknown_08617E9B, 0);
+ width = GetStringWidth(0, sText_Emerald, 0);
left = (0x78 - width) / 2;
- AddTextPrinterParameterized3(2, 0, left, 3, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E9B);
+ AddTextPrinterParameterized3(2, 0, left, 3, sGameTitleTextColors, TEXT_SPEED_FF, sText_Emerald);
- width = GetStringWidth(0, sUnknown_08617E8D, 0);
+ width = GetStringWidth(0, sText_RubySapphire, 0);
left = (0x78 - width) / 2 + 0x78;
- AddTextPrinterParameterized3(2, 0, left, 3, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E8D);
+ AddTextPrinterParameterized3(2, 0, left, 3, sGameTitleTextColors, TEXT_SPEED_FF, sText_RubySapphire);
- width = GetStringWidth(0, sUnknown_08617E8D, 0);
+ width = GetStringWidth(0, sText_RubySapphire, 0);
left = (0x70 - width) / 2;
- AddTextPrinterParameterized3(3, 0, left, 0, sUnknown_0861815B, TEXT_SPEED_FF, sUnknown_08617E8D);
+ AddTextPrinterParameterized3(3, 0, left, 0, sGameTitleTextColors, TEXT_SPEED_FF, sText_RubySapphire);
- width = GetStringWidth(1, sUnknown_08617E78, 0);
+ width = GetStringWidth(1, sText_BerryProgramUpdate, 0);
left = (0xD0 - width) / 2;
- AddTextPrinterParameterized3(0, 1, left, 2, sUnknown_08618158, TEXT_SPEED_FF, sUnknown_08617E78);
+ AddTextPrinterParameterized3(0, 1, left, 2, sBerryProgramTextColors, TEXT_SPEED_FF, sText_BerryProgramUpdate);
CopyWindowToVram(2, 2);
CopyWindowToVram(3, 2);
@@ -274,7 +274,7 @@ static void berry_fix_text_print(int scene)
{
FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
FillWindowPixelBuffer(1, PIXEL_FILL(0xA));
- AddTextPrinterParameterized3(1, 1, 0, 0, sUnknown_08618158, -1, gUnknown_08618160[scene]);
+ AddTextPrinterParameterized3(1, 1, 0, 0, sBerryProgramTextColors, -1, sBerryProgramTexts[scene]);
PutWindowTilemap(1);
CopyWindowToVram(1, 2);
switch (scene)
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index c3eac783d..89175c1bf 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -4,7 +4,6 @@
#include "decompress.h"
#include "event_object_movement.h"
#include "item_menu.h"
-#include "constants/items.h"
#include "item.h"
#include "item_use.h"
#include "main.h"
@@ -15,20 +14,22 @@
#include "menu_helpers.h"
#include "palette.h"
#include "overworld.h"
-#include "constants/songs.h"
#include "sound.h"
#include "sprite.h"
#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"
#include "item_menu_icons.h"
#include "decompress.h"
#include "international_string_util.h"
+#include "constants/berry.h"
+#include "constants/items.h"
#include "constants/rgb.h"
+#include "constants/songs.h"
// There are 4 windows used in berry tag screen.
enum
@@ -400,9 +401,9 @@ 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);
+ StringExpandPlaceholders(gStringVar4, gText_NumberVar1Var2);
PrintTextInBerryTagScreen(WIN_BERRY_NAME, gStringVar4, 0, 1, 0, 0);
}
@@ -420,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);
}
@@ -526,7 +527,7 @@ static void Task_CloseBerryTagScreen(u8 taskId)
DestroyFlavorCircleSprites();
Free(sBerryTag);
FreeAllWindowBuffers();
- SetMainCallback2(bag_menu_mail_related);
+ SetMainCallback2(CB2_ReturnToBagMenuPocket);
DestroyTask(taskId);
}
}
diff --git a/src/bg.c b/src/bg.c
deleted file mode 100644
index 1678f4023..000000000
--- a/src/bg.c
+++ /dev/null
@@ -1,1305 +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;
-}
-
-#ifdef NONMATCHING // This one has some weird switch statement cases that refuse to cooperate
-void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2)
-{
- u16 var;
- switch (palette1)
- {
- case 0 ... 16:
- if (palette1 != 16)
- var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12);
- else
- var = ((*dest & 0xFC00) + (palette2 << 12)) | ((*src + tileOffset) & 0x3FF);
- break;
- default:
- var = *src + tileOffset + (palette2 << 12);
- break;
- }
-
- *dest = var;
-}
-#else
-NAKED
-void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2)
-{
- asm("push {r4-r6,lr}\n\
- add r4, r0, #0\n\
- add r6, r1, #0\n\
- ldr r5, [sp, #0x10]\n\
- cmp r2, #0x10\n\
- beq _08002B14\n\
- cmp r2, #0x10\n\
- bgt _08002B34\n\
- cmp r2, #0\n\
- blt _08002B34\n\
- ldrh r0, [r4]\n\
- add r0, r3\n\
- ldr r3, =0x00000fff\n\
- add r1, r3, #0\n\
- and r0, r1\n\
- add r1, r2, r5\n\
- lsl r1, #12\n\
- b _08002B3A\n\
- .pool\n\
-_08002B14:\n\
- ldrh r1, [r6]\n\
- mov r0, #0xFC\n\
- lsl r0, #8\n\
- and r1, r0\n\
- lsl r2, r5, #12\n\
- add r2, r1, r2\n\
- ldrh r0, [r4]\n\
- add r0, r3\n\
- ldr r3, =0x000003ff\n\
- add r1, r3, #0\n\
- and r0, r1\n\
- orr r0, r2\n\
- b _08002B3C\n\
- .pool\n\
-_08002B34:\n\
- ldrh r0, [r4]\n\
- add r0, r3\n\
- lsl r1, r5, #12\n\
-_08002B3A:\n\
- add r0, r1\n\
-_08002B3C:\n\
- lsl r0, #16\n\
- lsr r1, r0, #16\n\
- strh r1, [r6]\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n");
-}
-#endif // NONMATCHING
-
-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..7397fed40 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;
}
@@ -1059,7 +1056,7 @@ void Bike_HandleBumpySlopeJump(void)
bool32 IsRunningDisallowed(u8 metatile)
{
- if (!(gMapHeader.flags & 4) || IsRunningDisallowedByMetatile(metatile) == TRUE)
+ if (!(gMapHeader.flags & MAP_ALLOW_RUN) || IsRunningDisallowedByMetatile(metatile) == TRUE)
return TRUE;
else
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..d310ae299 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"
@@ -307,7 +307,7 @@ static void CableCarMainCallback_Setup(void)
gMain.state++;
break;
case 5:
- if (sCableCar->weather == WEATHER_ASH)
+ if (sCableCar->weather == WEATHER_VOLCANIC_ASH)
{
gMain.state++;
}
@@ -425,7 +425,7 @@ static void sub_81503E4(u8 taskId)
case 1:
switch (sCableCar->weather)
{
- case WEATHER_ASH:
+ case WEATHER_VOLCANIC_ASH:
if (gWeatherPtr->sprites.s2.ashSprites[0] != NULL && gWeatherPtr->sprites.s2.ashSprites[0]->oam.priority != 0)
{
for (; i < NUM_ASH_SPRITES; i++)
@@ -815,7 +815,7 @@ static void LoadCableCarSprites(void)
gSprites[spriteId].pos2.y = 4;
gSprites[spriteId].data[0] = 200;
gSprites[spriteId].data[1] = 99;
- sCableCar->weather = WEATHER_ASH;
+ sCableCar->weather = WEATHER_VOLCANIC_ASH;
sCableCar->unk4 = 0x15e;
SetCurrentAndNextWeatherNoDelay(WEATHER_SUNNY);
break;
@@ -841,7 +841,7 @@ static void LoadCableCarSprites(void)
gSprites[spriteId].data[1] = 0x41;
sCableCar->weather = WEATHER_SUNNY;
sCableCar->unk4 = 0x109;
- SetCurrentAndNextWeatherNoDelay(WEATHER_ASH);
+ SetCurrentAndNextWeatherNoDelay(WEATHER_VOLCANIC_ASH);
break;
}
for (i = 0; i < 9; i++)
diff --git a/src/cable_club.c b/src/cable_club.c
index 303cc76d1..11920bea9 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);
@@ -201,7 +203,7 @@ static void sub_80B2634(u8 taskId)
if (data[0] == 0)
{
OpenLinkTimed();
- sub_800AB98();
+ ResetLinkPlayerCount();
ResetLinkPlayers();
data[5] = AddWindow(&gUnknown_08550594);
}
@@ -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,53 +552,50 @@ 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);
}
-void sub_80B2E74(void)
+void TryRecordMixLinkup(void)
{
gSpecialVar_Result = 0;
- gLinkType = 0x3311;
+ gLinkType = LINKTYPE_0x3311;
gBattleTypeFlags = 0;
sub_80B236C(2, 4);
}
@@ -679,23 +678,23 @@ static void sub_80B2EE4(u8 taskId)
}
}
-void sub_80B2FD8(void)
+void TryBerryBlenderLinkup(void)
{
- gLinkType = 0x4411;
+ gLinkType = LINKTYPE_BERRY_BLENDER_SETUP;
gBattleTypeFlags = 0;
sub_80B236C(2, 4);
}
-void sub_80B3000(void)
+void TryContestGModeLinkup(void)
{
- gLinkType = 0x6601;
+ gLinkType = LINKTYPE_CONTEST_GMODE;
gBattleTypeFlags = 0;
sub_80B236C(4, 4);
}
-void sub_80B3028(void)
+void TryContestEModeLinkup(void)
{
- gLinkType = 0x6602;
+ gLinkType = LINKTYPE_CONTEST_EMODE;
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;
}
@@ -785,26 +784,27 @@ static void sub_80B3220(u8 taskId)
}
}
-void sub_80B3254(void)
+// Unused
+void CableClubSaveGame(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;
}
@@ -817,8 +817,8 @@ static void sub_80B32B4(u8 taskId)
switch (task->data[0])
{
case 0:
- FadeScreen(1, 0);
- gLinkType = 0x2211;
+ FadeScreen(FADE_TO_BLACK, 0);
+ gLinkType = LINKTYPE_BATTLE;
ClearLinkCallback_2();
task->data[0]++;
break;
@@ -845,7 +845,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);
@@ -863,8 +863,8 @@ static void sub_80B33BC(u8 taskId)
switch (data[0])
{
case 0:
- FadeScreen(1, 0);
- gLinkType = 0x2211;
+ FadeScreen(FADE_TO_BLACK, 0);
+ gLinkType = LINKTYPE_BATTLE;
ClearLinkCallback_2();
data[0] = 1;
break;
@@ -910,8 +910,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);
@@ -971,9 +971,9 @@ void sub_80B360C(void)
Overworld_ResetMapMusic();
LoadPlayerParty();
SavePlayerBag();
- sub_813BF10();
+ UpdateTrainerFansAfterLinkBattle();
- 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 +1004,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();
@@ -1075,7 +1078,7 @@ static void sub_80B37FC(u8 taskId)
{
case 0:
ScriptContext2_Enable();
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
ClearLinkCallback_2();
task->data[0]++;
break;
@@ -1084,8 +1087,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 +1096,7 @@ static void sub_80B37FC(u8 taskId)
case 3:
if (!gReceivedRemoteLinkPlayers)
{
- SetMainCallback2(sub_80773AC);
+ SetMainCallback2(CB2_StartCreateTradeMenu);
DestroyTask(taskId);
}
break;
@@ -1108,8 +1111,8 @@ static void sub_80B3894(u8 taskId)
{
case 0:
ScriptContext2_Enable();
- FadeScreen(1, 0);
- Rfu_set_zero();
+ FadeScreen(FADE_TO_BLACK, 0);
+ ClearLinkRfuCallback();
data[0]++;
break;
case 1:
@@ -1117,8 +1120,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 +1162,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 +1181,7 @@ static void sub_80B39A4(void)
ScriptContext1_Stop();
}
-void sp02A_crash_sound(void)
+void Script_ShowLinkTrainerCard(void)
{
ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
@@ -1296,10 +1299,10 @@ void sub_80B3AF8(u8 taskId)
}
}
-void sub_80B3BC4(void)
+void TrySetBattleTowerLinkType(void)
{
if (gWirelessCommType == 0)
{
- gLinkType = 0x2288;
+ gLinkType = LINKTYPE_BATTLE_TOWER;
}
}
diff --git a/src/clock.c b/src/clock.c
index 1e7c5f83e..125d403bb 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -25,7 +25,7 @@ static void InitTimeBasedEvents(void)
void DoTimeBasedEvents(void)
{
- if (FlagGet(FLAG_SYS_CLOCK_SET) && !sub_813B9C0())
+ if (FlagGet(FLAG_SYS_CLOCK_SET) && !InPokemonCenter())
{
RtcCalcLocalTime();
UpdatePerDay(&gLocalTime);
diff --git a/src/coins.c b/src/coins.c
index b838c303e..302817f8d 100644
--- a/src/coins.c
+++ b/src/coins.c
@@ -6,8 +6,7 @@
#include "string_util.h"
#include "menu.h"
#include "international_string_util.h"
-
-#define MAX_COINS 9999
+#include "constants/coins.h"
EWRAM_DATA u8 sCoinsWindowId = 0;
@@ -49,7 +48,7 @@ void SetCoins(u16 coinAmount)
gSaveBlock1Ptr->coins = coinAmount ^ gSaveBlock2Ptr->encryptionKey;
}
-bool8 GiveCoins(u16 toAdd)
+bool8 AddCoins(u16 toAdd)
{
u16 newAmount;
u16 ownedCoins = GetCoins();
@@ -71,7 +70,7 @@ bool8 GiveCoins(u16 toAdd)
return TRUE;
}
-bool8 TakeCoins(u16 toSub)
+bool8 RemoveCoins(u16 toSub)
{
u16 ownedCoins = GetCoins();
if (ownedCoins >= toSub)
diff --git a/src/contest.c b/src/contest.c
index 79c1616c2..66dbdb6f1 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"
@@ -219,15 +219,15 @@ static void sub_80DF9E0(u8 *, s32);
static void SwapMoveDescAndContestTilemaps(void);
// EWRAM vars.
-EWRAM_DATA struct ContestPokemon gContestMons[4] = {0};
-EWRAM_DATA s16 gContestMonConditions[4] = {0};
-EWRAM_DATA s16 gUnknown_02039F08[4] = {0};
-EWRAM_DATA s16 gUnknown_02039F10[4] = {0};
-EWRAM_DATA s16 gUnknown_02039F18[4] = {0};
-EWRAM_DATA u8 gContestFinalStandings[4] = {0};
+EWRAM_DATA struct ContestPokemon gContestMons[CONTESTANT_COUNT] = {0};
+EWRAM_DATA s16 gContestMonConditions[CONTESTANT_COUNT] = {0};
+EWRAM_DATA s16 gUnknown_02039F08[CONTESTANT_COUNT] = {0};
+EWRAM_DATA s16 gUnknown_02039F10[CONTESTANT_COUNT] = {0};
+EWRAM_DATA s16 gUnknown_02039F18[CONTESTANT_COUNT] = {0};
+EWRAM_DATA u8 gContestFinalStandings[CONTESTANT_COUNT] = {0};
EWRAM_DATA u8 gContestMonPartyIndex = 0;
EWRAM_DATA u8 gContestPlayerMonIndex = 0;
-EWRAM_DATA u8 gContestantTurnOrder[4] = {0};
+EWRAM_DATA u8 gContestantTurnOrder[CONTESTANT_COUNT] = {0};
EWRAM_DATA u8 gLinkContestFlags = 0;
// Bit 0: Is a link contest
// Bit 1: Link contest uses wireless adapter
@@ -238,7 +238,7 @@ EWRAM_DATA u8 gNumLinkContestPlayers = 0;
EWRAM_DATA u8 gHighestRibbonRank = 0;
EWRAM_DATA struct ContestResources *gContestResources = NULL;
EWRAM_DATA u8 sContestBgCopyFlags = 0;
-EWRAM_DATA struct ContestWinner gUnknown_02039F3C = {0};
+EWRAM_DATA struct ContestWinner gCurContestWinner = {0};
EWRAM_DATA u8 gUnknown_02039F5C = 0;
EWRAM_DATA u8 gUnknown_02039F5D = 0;
@@ -246,29 +246,8 @@ EWRAM_DATA u8 gUnknown_02039F5D = 0;
u32 gContestRngValue;
extern const u8 gText_LinkStandby4[];
-extern const u8 gText_0827D55A[];
-extern const u8 gText_0827E793[];
-extern const u8 gText_0827E32E[];
-extern const u8 gText_0827E35B[];
-extern const u8 gText_0827E38D[];
-extern const u8 gText_0827E2FE[];
-extern const u8 gText_RepeatedAppeal[];
-extern const u8 gText_0827E73C[];
-extern const u8 gText_0827E717[];
-extern const u8 gText_0827E76A[];
-extern const u8 gText_0827E7EA[];
-extern const u8 gText_0827E817[];
-extern const u8 gText_0827E58A[];
-extern const u8 gText_0827D56F[];
-extern const u8 gText_0827D597[];
-extern const u8 gText_Contest_Shyness[];
-extern const u8 gText_Contest_Anxiety[];
-extern const u8 gText_Contest_Laziness[];
-extern const u8 gText_Contest_Hesitancy[];
-extern const u8 gText_Contest_Fear[];
extern const u8 gText_BDot[];
extern const u8 gText_CDot[];
-extern const u8 *const gUnknown_08587E10[];
extern void (*const gContestEffectFuncs[])(void);
static const u8 gUnknown_08587A6C[] =
@@ -291,10 +270,10 @@ static const struct SpriteSheet gUnknown_08587A74 =
static const struct OamData gOamData_8587A7C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -376,10 +355,10 @@ static const struct SpritePalette gUnknown_08587B08 =
static const struct OamData gOamData_8587B10 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.matrixNum = 0,
@@ -435,16 +414,16 @@ const struct Subsprite gSubspriteTable_8587B78[] =
{
.x = -28,
.y = -4,
- .shape = ST_OAM_H_RECTANGLE,
- .size = 1,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
.tileOffset = 0,
.priority = 0
},
{
.x = 4,
.y = -4,
- .shape = ST_OAM_H_RECTANGLE,
- .size = 1,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
.tileOffset = 4,
.priority = 0
}
@@ -577,7 +556,7 @@ const struct SpriteTemplate gSpriteTemplate_8587C18 =
{
.tileTag = 0xABE0,
.paletteTag = 0xABE0,
- .oam = &gUnknown_0852490C,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -1345,9 +1324,9 @@ static void sub_80D833C(u8 taskId)
DmaCopy32Defvars(3, gPlttBufferUnfaded, eUnknownHeap1A004.unk18204, PLTT_BUFFER_SIZE * 2);
ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
- StringCopy(gDisplayedStringBattle, gText_0827D507);
+ StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed);
else
- StringCopy(gDisplayedStringBattle, gText_0827D531);
+ StringCopy(gDisplayedStringBattle, gText_AppealNumButItCantParticipate);
ContestClearGeneralTextWindow();
StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
Contest_StartTextPrinter(gStringVar4, TRUE);
@@ -1443,9 +1422,9 @@ static void sub_80D8610(u8 taskId)
sub_80DC490(FALSE);
ConvertIntToDecimalStringN(gStringVar1, eContest.turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
- StringCopy(gDisplayedStringBattle, gText_0827D507);
+ StringCopy(gDisplayedStringBattle, gText_AppealNumWhichMoveWillBePlayed);
else
- StringCopy(gDisplayedStringBattle, gText_0827D531);
+ StringCopy(gDisplayedStringBattle, gText_AppealNumButItCantParticipate);
ContestClearGeneralTextWindow();
StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
Contest_StartTextPrinter(gStringVar4, 0);
@@ -1574,7 +1553,7 @@ static void sub_80D8A88(u8 taskId)
{
s32 i;
- for (i = 0; i + gNumLinkContestPlayers < 4; i++)
+ for (i = 0; i + gNumLinkContestPlayers < CONTESTANT_COUNT; i++)
{
eContestantStatus[gNumLinkContestPlayers + i].currMove = GetChosenMove(gNumLinkContestPlayers + i);
}
@@ -1673,8 +1652,8 @@ static void sub_80D8B38(u8 taskId)
if (eContestantStatus[r6].currMove < MOVES_COUNT)
StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
else
- StringCopy(gStringVar2, gUnknown_08587F1C[eContestantStatus[r6].moveCategory]);
- StringExpandPlaceholders(gStringVar4, gText_0827D55A);
+ StringCopy(gStringVar2, sInvalidContestMoveNames[eContestantStatus[r6].moveCategory]);
+ StringExpandPlaceholders(gStringVar4, gText_MonAppealedWithMove);
Contest_StartTextPrinter(gStringVar4, 1);
gTasks[taskId].data[0] = 6;
}
@@ -1735,7 +1714,7 @@ static void sub_80D8B38(u8 taskId)
{
if (eContestantStatus[r6].effectStringId2 != CONTEST_STRING_NONE)
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (i != r6 && eContestantStatus[i].effectStringId != CONTEST_STRING_NONE)
break;
@@ -1838,10 +1817,10 @@ static void sub_80D8B38(u8 taskId)
s32 r2 = 0;
r3 = 0;
- for (i = gTasks[taskId].data[1]; i < 4; i++)
+ for (i = gTasks[taskId].data[1]; i < CONTESTANT_COUNT; i++)
{
r3 = 0;
- for (r2 = 0; r2 < 4; r2++)
+ for (r2 = 0; r2 < CONTESTANT_COUNT; r2++)
{
if (r2 != r6 && gContestantTurnOrder[r2] == i
&& eContestantStatus[r2].effectStringId != CONTEST_STRING_NONE)
@@ -1906,7 +1885,7 @@ static void sub_80D8B38(u8 taskId)
}
return;
case 30:
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestantTurnOrder[i] == gTasks[taskId].data[1])
break;
@@ -1932,7 +1911,7 @@ static void sub_80D8B38(u8 taskId)
{
ContestClearGeneralTextWindow();
StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringExpandPlaceholders(gStringVar4, gText_0827E793);
+ StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn);
Contest_StartTextPrinter(gStringVar4, 1);
}
gTasks[taskId].data[0] = 52;
@@ -1953,11 +1932,11 @@ static void sub_80D8B38(u8 taskId)
{
ContestClearGeneralTextWindow();
if (r3 == 1)
- Contest_StartTextPrinter(gText_0827E32E, TRUE);
+ Contest_StartTextPrinter(gText_AppealComboWentOverWell, TRUE);
else if (r3 == 2)
- Contest_StartTextPrinter(gText_0827E35B, TRUE);
+ Contest_StartTextPrinter(gText_AppealComboWentOverVeryWell, TRUE);
else
- Contest_StartTextPrinter(gText_0827E38D, TRUE);
+ Contest_StartTextPrinter(gText_AppealComboWentOverExcellently, TRUE);
sub_80DD720(3);
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[0] = 45;
@@ -1966,7 +1945,7 @@ static void sub_80D8B38(u8 taskId)
{
ContestClearGeneralTextWindow();
StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringExpandPlaceholders(gStringVar4, gText_0827E2FE);
+ StringExpandPlaceholders(gStringVar4, gText_JudgeLookedAtMonExpectantly);
Contest_StartTextPrinter(gStringVar4, 1);
sub_80DD720(2);
gTasks[taskId].data[10] = 0;
@@ -2056,7 +2035,7 @@ static void sub_80D8B38(u8 taskId)
}
else
{
- StringCopy(gStringVar3, gUnknown_08587F08[gContestMoves[eContestantStatus[r6].currMove].contestCategory]);
+ StringCopy(gStringVar3, sContestConditions[gContestMoves[eContestantStatus[r6].currMove].contestCategory]);
}
if (r3 > 0)
{
@@ -2075,11 +2054,11 @@ static void sub_80D8B38(u8 taskId)
else
{
if (r3 < 0)
- StringExpandPlaceholders(gStringVar4, gText_0827E73C);
+ StringExpandPlaceholders(gStringVar4, gText_MonsXDidntGoOverWell);
else if (r3 > 0 && eContest.applauseLevel <= 4)
- StringExpandPlaceholders(gStringVar4, gText_0827E717);
+ StringExpandPlaceholders(gStringVar4, gText_MonsXWentOverGreat);
else
- StringExpandPlaceholders(gStringVar4, gText_0827E76A);
+ StringExpandPlaceholders(gStringVar4, gText_MonsXGotTheCrowdGoing);
Contest_StartTextPrinter(gStringVar4, 1);
gTasks[taskId].data[10] = 0;
gTasks[taskId].data[11] = 0;
@@ -2189,7 +2168,7 @@ static void sub_80D8B38(u8 taskId)
StringCopy(gStringVar3, gContestMons[gContestResources->field_10->excitementFreezer].nickname);
StringCopy(gStringVar1, gContestMons[r6].nickname);
StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
- StringExpandPlaceholders(gStringVar4, gText_0827E7EA);
+ StringExpandPlaceholders(gStringVar4, gText_CrowdContinuesToWatchMon);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[0] = 58;
return;
@@ -2197,7 +2176,7 @@ static void sub_80D8B38(u8 taskId)
if (!Contest_RunTextPrinters())
{
ContestClearGeneralTextWindow();
- StringExpandPlaceholders(gStringVar4, gText_0827E817);
+ StringExpandPlaceholders(gStringVar4, gText_MonsMoveIsIgnored);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[0] = 59;
}
@@ -2215,7 +2194,7 @@ static void sub_80D8B38(u8 taskId)
sub_80DC9B4(r6);
StringCopy(gStringVar1, gContestMons[r6].nickname);
StringCopy(gStringVar2, gMoveNames[eContestantStatus[r6].currMove]);
- StringExpandPlaceholders(gStringVar4, gText_0827E58A);
+ StringExpandPlaceholders(gStringVar4, gText_MonWasTooNervousToMove);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[0] = 34;
return;
@@ -2259,7 +2238,7 @@ static void sub_80D8B38(u8 taskId)
case 31:
ContestClearGeneralTextWindow();
StringCopy(gStringVar1, gContestMons[r6].nickname);
- StringExpandPlaceholders(gStringVar4, gText_0827D56F);
+ StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[0] = 32;
return;
@@ -2427,11 +2406,11 @@ static void sub_80DA3CC(u8 taskId)
{
if (gTasks[taskId].data[0] == 0)
{
- u8 r4 = eContestantStatus[gContestPlayerMonIndex].attentionLevel;
+ u8 attention = eContestantStatus[gContestPlayerMonIndex].attentionLevel;
ContestClearGeneralTextWindow();
StringCopy(gStringVar1, gContestMons[gContestPlayerMonIndex].nickname);
- StringExpandPlaceholders(gStringVar4, gUnknown_08587D90[r4]);
+ StringExpandPlaceholders(gStringVar4, sRoundResultTexts[attention]);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[0]++;
}
@@ -2509,7 +2488,7 @@ static void sub_80DA5E8(u8 taskId)
gBattle_BG0_Y = 0;
gBattle_BG2_Y = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
gUnknown_02039F10[i] = eContestantStatus[i].pointTotal;
sub_80DBD18();
ContestClearGeneralTextWindow();
@@ -2522,7 +2501,7 @@ static void sub_80DA5E8(u8 taskId)
ContestDebugPrintBitStrings();
}
gContestRngValue = gRngValue;
- StringExpandPlaceholders(gStringVar4, gText_0827D597);
+ StringExpandPlaceholders(gStringVar4, gText_AllOutOfAppealTime);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_80DA6B4;
@@ -2786,9 +2765,9 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
opponents[opponentsCount++] = i;
}
opponents[opponentsCount] = 0xFF;
- for (i = 0; i < 4 - gNumLinkContestPlayers; i++)
+ for (i = 0; i < CONTESTANT_COUNT - gNumLinkContestPlayers; i++)
{
- u16 rnd = sub_80F903C() % opponentsCount;
+ u16 rnd = GetContestRand() % opponentsCount;
gContestMons[gNumLinkContestPlayers + i] = gContestOpponents[opponents[rnd]];
sub_80DF9D4(gContestMons[gNumLinkContestPlayers + i].trainerName);
@@ -2799,16 +2778,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 +2805,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)
@@ -2935,7 +2913,7 @@ void sub_80DB09C(u8 contestCategory)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
gContestMonConditions[i] = sub_80DAFE0(i, contestCategory);
}
@@ -3102,7 +3080,7 @@ static void sub_80DB584(void)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
sub_80DB4E0(eContestantStatus[i].currMove, i);
}
@@ -3213,7 +3191,7 @@ static void sub_80DB884(void)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
sub_80DB798(i);
}
@@ -3863,7 +3841,7 @@ static void sub_80DC864(void)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
sub_80DC87C(i);
}
@@ -4260,7 +4238,7 @@ static void sub_80DD080(u8 contestant)
eContestResources8.jam2 = eContestResources8.jam;
eContestResources8.contestant = contestant;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
eContestantStatus[i].jam = 0;
eContestResources8.unnervedPokes[i] = 0;
@@ -4382,7 +4360,7 @@ static void sub_80DD45C(u8 contestant, u8 stringId)
StringCopy(gStringVar3, gText_Contest_Hesitancy);
else
StringCopy(gStringVar3, gText_Contest_Fear);
- StringExpandPlaceholders(gStringVar4, gUnknown_08587E10[stringId]);
+ StringExpandPlaceholders(gStringVar4, sAppealResultTexts[stringId]);
ContestClearGeneralTextWindow();
Contest_StartTextPrinter(gStringVar4, 1);
}
@@ -4797,7 +4775,7 @@ static void sub_80DE008(bool8 a)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (eContestantStatus[i].turnOrderMod != 0 && a)
{
@@ -5043,7 +5021,7 @@ static void sub_80DE69C(u8 a)
for (i = 0; i < CONTESTANT_COUNT; i++)
{
gSprites[gContestResources->field_14[i].unk0].oam.matrixNum = AllocOamMatrix();
- gSprites[gContestResources->field_14[i].unk0].oam.affineMode = 1;
+ gSprites[gContestResources->field_14[i].unk0].oam.affineMode = ST_OAM_AFFINE_NORMAL;
StartSpriteAffineAnim(&gSprites[gContestResources->field_14[i].unk0], a);
if (a == 2)
{
@@ -5115,7 +5093,7 @@ static void sub_80DE864(u8 a)
gContestResources->field_18->unk4_0 = 1;
break;
case MOVE_RETURN:
- gAnimFriendship = 0xFF;
+ gAnimFriendship = MAX_FRIENDSHIP;
break;
case MOVE_FRUSTRATION:
gAnimFriendship = 0;
@@ -5303,7 +5281,7 @@ void ResetContestLinkResults(void)
gSaveBlock2Ptr->contestLinkResults[i][j] = 0;
}
-bool8 sub_80DEDA8(u8 a)
+bool8 sub_80DEDA8(u8 rank)
{
s32 i;
u8 r7 = Random() % 3;
@@ -5313,7 +5291,7 @@ bool8 sub_80DEDA8(u8 a)
if (gContestFinalStandings[i] == 0)
break;
}
- if (a == 0xFF && i != gContestPlayerMonIndex)
+ if (rank == 0xFF && i != gContestPlayerMonIndex)
return FALSE;
switch (gSpecialVar_ContestCategory)
{
@@ -5333,9 +5311,9 @@ bool8 sub_80DEDA8(u8 a)
r7 += 12;
break;
}
- if (a != 0xFE)
+ if (rank != 0xFE)
{
- u8 r4 = sub_80DEFA8(a, 1);
+ u8 r4 = sub_80DEFA8(rank, 1);
gSaveBlock1Ptr->contestWinners[r4].personality = gContestMons[i].personality;
gSaveBlock1Ptr->contestWinners[r4].species = gContestMons[i].species;
@@ -5343,44 +5321,44 @@ bool8 sub_80DEDA8(u8 a)
StringCopy(gSaveBlock1Ptr->contestWinners[r4].monName, gContestMons[i].nickname);
StringCopy(gSaveBlock1Ptr->contestWinners[r4].trainerName, gContestMons[i].trainerName);
if(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
- gSaveBlock1Ptr->contestWinners[r4].contestRank = 4;
+ gSaveBlock1Ptr->contestWinners[r4].contestRank = CONTEST_RANK_LINK;
else
gSaveBlock1Ptr->contestWinners[r4].contestRank = gSpecialVar_ContestRank;
- if (a != 0xFF)
+ if (rank != 0xFF)
gSaveBlock1Ptr->contestWinners[r4].contestCategory = gSpecialVar_ContestCategory;
else
gSaveBlock1Ptr->contestWinners[r4].contestCategory = r7;
}
else
{
- gUnknown_02039F3C.personality = gContestMons[i].personality;
- gUnknown_02039F3C.trainerId = gContestMons[i].otId;
- gUnknown_02039F3C.species = gContestMons[i].species;
- StringCopy(gUnknown_02039F3C.monName, gContestMons[i].nickname);
- StringCopy(gUnknown_02039F3C.trainerName, gContestMons[i].trainerName);
- gUnknown_02039F3C.contestCategory = r7;
+ gCurContestWinner.personality = gContestMons[i].personality;
+ gCurContestWinner.trainerId = gContestMons[i].otId;
+ gCurContestWinner.species = gContestMons[i].species;
+ StringCopy(gCurContestWinner.monName, gContestMons[i].nickname);
+ StringCopy(gCurContestWinner.trainerName, gContestMons[i].trainerName);
+ gCurContestWinner.contestCategory = r7;
}
return TRUE;
}
-u8 sub_80DEFA8(u8 a, u8 b)
+u8 sub_80DEFA8(u8 rank, u8 b)
{
s32 i;
- switch (a)
+ switch (rank)
{
- case 0:
- case 1:
- case 2:
- case 3:
+ case CONTEST_RANK_NORMAL:
+ case CONTEST_RANK_SUPER:
+ case CONTEST_RANK_HYPER:
+ case CONTEST_RANK_MASTER:
if (b != 0)
{
for (i = 5; i >= 1; i--)
memcpy(&gSaveBlock1Ptr->contestWinners[i], &gSaveBlock1Ptr->contestWinners[i - 1], sizeof(struct ContestWinner));
}
return 0;
- default:
+ default: // CONTEST_RANK_LINK
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
@@ -5435,7 +5413,7 @@ static void sub_80DF080(u8 contestant)
gContestResources->field_1c[contestant].unkC |= 8;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (i != contestant && eContestantStatus[i].jam != 0)
{
@@ -5482,7 +5460,7 @@ static void sub_80DF250(void)
r1 = 0;
var_38 = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestFinalStandings[i] == 0)
var_38 = i;
@@ -5509,7 +5487,7 @@ static void sub_80DF250(void)
r12 = FALSE;
r8 = FALSE;
- for (j = 0; j < 4; j++)
+ for (j = 0; j < CONTESTANT_COUNT; j++)
{
if (gContestMonConditions[i] > gContestMonConditions[j])
r12 = TRUE;
diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c
index a0a29f0ad..8a1fce64b 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"
@@ -39,6 +39,7 @@
#include "constants/game_stat.h"
#include "constants/rgb.h"
#include "constants/songs.h"
+#include "constants/tv.h"
#include "constants/vars.h"
#include "contest.h"
@@ -88,7 +89,7 @@ extern const struct CompressedSpriteSheet gUnknown_0858D878[];
extern const struct CompressedSpritePalette gUnknown_0858D880[];
extern const struct SpriteSheet gUnknown_0858D8E0;
extern const struct SpriteTemplate gSpriteTemplate_858D8C8;
-extern const u8 gUnknown_0858D8E8[];
+extern const u8 sContestLinkTextColors[];
extern const u8 gUnknown_0858D6D0[];
extern const struct SpriteTemplate gSpriteTemplate_858D7F8;
extern const struct SpriteSheet gUnknown_0858D810[];
@@ -265,7 +266,7 @@ void sub_80F5AE0(void)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
sub_80F5A74(i);
CopyBgTilemapBufferToVram(1);
@@ -355,17 +356,17 @@ static void sub_80F5CE4(u8 taskId)
InterviewAfter();
}
- sub_813BADC(2);
+ TryGainNewFanFromCounter(2);
sub_80DEDA8(gSpecialVar_ContestRank);
sub_80DEDA8(0xFE);
gUnknown_02039F5C = 1;
gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
- var = VarGet(VAR_LINK_CONTEST_ROOM_STATE);
- VarSet(VAR_LINK_CONTEST_ROOM_STATE, 0);
+ var = VarGet(VAR_CONTEST_HALL_STATE);
+ VarSet(VAR_CONTEST_HALL_STATE, 0);
SetContinueGameWarpStatusToDynamicWarp();
TrySavingData(SAVE_LINK);
ClearContinueGameWarpStatus2();
- VarSet(VAR_LINK_CONTEST_ROOM_STATE, var);
+ VarSet(VAR_CONTEST_HALL_STATE, var);
gTasks[taskId].data[0]++;
break;
case 1:
@@ -410,7 +411,7 @@ static void sub_80F5CE4(u8 taskId)
sub_80DEDA8(0xFE);
gUnknown_02039F5C = 1;
gUnknown_02039F5D = sub_80DEFA8(0xFE, 0);
- sub_813BADC(2);
+ TryGainNewFanFromCounter(2);
gTasks[taskId].func = sub_80F5F74;
}
}
@@ -576,7 +577,7 @@ static void sub_80F6204(u8 taskId)
}
break;
case 2:
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
newTaskId = CreateTask(sub_80F73DC, 10);
gTasks[newTaskId].data[0] = gContestFinalStandings[i];
@@ -592,7 +593,7 @@ static void sub_80F6204(u8 taskId)
gTasks[taskId].data[1] = 0;
CreateTask(sub_80F74BC, 10);
gTasks[taskId].data[0]++;
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
;
sub_80F77E0(i, 14);
@@ -603,7 +604,7 @@ static void sub_80F6204(u8 taskId)
if (++gTasks[taskId].data[1] == 21)
{
gTasks[taskId].data[1] = 0;
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
;
StringCopy(gStringVar1, gContestMons[i].trainerName);
@@ -636,7 +637,7 @@ static void sub_80F6404(u8 taskId)
case 0:
gBattle_WIN0H = 0x00F0;
gBattle_WIN0V = 0x5050;
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
;
species = gContestMons[i].species;
@@ -732,7 +733,7 @@ static void sub_80F66B4(u8 taskId)
{
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK))
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
nationalDexNum = SpeciesToNationalPokedexNum(gContestMons[i].species);
GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
@@ -874,7 +875,7 @@ static void LoadAllContestMonIcons(u8 srcOffset, u8 useDmaNow)
{
int i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
sub_80F69B8(gContestMons[i].species, i, srcOffset, useDmaNow, gContestMons[i].personality);
}
@@ -882,7 +883,7 @@ static void sub_80F6A9C(void)
{
int i, species;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
species = gContestMons[i].species;
LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[GetIconSpecies(species, 0)]], i * 0x10 + 0xA0, 0x20);
@@ -934,7 +935,7 @@ s32 sub_80F6B78(const u8 *text, u8 spriteId)
if (strWidth > 30)
strWidth = 30;
- AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, gUnknown_0858D8E8, -1, text);
+ AddTextPrinterParameterized3(windowId, 1, (strWidth * 8 - origWidth) / 2, 1, sContestLinkTextColors, -1, text);
windowTilesPtr = (u8 *)(GetWindowAttribute(windowId, WINDOW_TILE_DATA));
src = (u8 *)(gUnknown_0858D6D0);
@@ -1028,7 +1029,7 @@ _080F6BD0:\n\
asrs r2, 1\n\
lsls r2, 24\n\
lsrs r2, 24\n\
- ldr r0, =gUnknown_0858D8E8\n\
+ ldr r0, =sContestLinkTextColors\n\
str r0, [sp]\n\
movs r0, 0x1\n\
negs r0, r0\n\
@@ -1423,48 +1424,48 @@ static void sub_80F71C8(void)
CopyToBgTilemapBufferRect(2, gUnknown_08DC6498, 5, 1, 5, 2);
x = 10;
}
- else if (gSpecialVar_ContestRank == 0)
+ else if (gSpecialVar_ContestRank == CONTEST_RANK_NORMAL)
{
CopyToBgTilemapBufferRect(2, gUnknown_08DC63F8, 5, 1, 10, 2);
x = 15;
}
- else if (gSpecialVar_ContestRank == 1)
+ else if (gSpecialVar_ContestRank == CONTEST_RANK_SUPER)
{
CopyToBgTilemapBufferRect(2, gUnknown_08DC6420, 5, 1, 10, 2);
x = 15;
}
- else if (gSpecialVar_ContestRank == 2)
+ else if (gSpecialVar_ContestRank == CONTEST_RANK_HYPER)
{
CopyToBgTilemapBufferRect(2, gUnknown_08DC6448, 5, 1, 10, 2);
x = 15;
}
- else
+ else // CONTEST_RANK_MASTER
{
CopyToBgTilemapBufferRect(2, gUnknown_08DC6470, 5, 1, 10, 2);
x = 15;
}
- if (gSpecialVar_ContestCategory == 0)
+ if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_COOL)
{
palette = 0;
CopyToBgTilemapBufferRect(2, gUnknown_08DC64AC, x, y, 5, 2);
}
- else if (gSpecialVar_ContestCategory == 1)
+ else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_BEAUTY)
{
palette = 1;
CopyToBgTilemapBufferRect(2, gUnknown_08DC64C0, x, y, 5, 2);
}
- else if (gSpecialVar_ContestCategory == 2)
+ else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_CUTE)
{
palette = 2;
CopyToBgTilemapBufferRect(2, gUnknown_08DC64D4, x, y, 5, 2);
}
- else if (gSpecialVar_ContestCategory == 3)
+ else if (gSpecialVar_ContestCategory == CONTEST_CATEGORY_SMART)
{
palette = 3;
CopyToBgTilemapBufferRect(2, gUnknown_08DC64E8, x, y, 5, 2);
}
- else
+ else // CONTEST_CATEGORY_TOUGH
{
palette = 4;
CopyToBgTilemapBufferRect(2, gUnknown_08DC64FC, x, y, 5, 2);
@@ -1550,7 +1551,7 @@ static void sub_80F73DC(u8 taskId)
static void sub_80F74BC(u8 taskId)
{
int i;
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
;
CopyToBgTilemapBufferRect_ChangePalette(2, i * 0xC0 + 0x100 + gUnknown_0203A034->unkC[2], 0, i * 3 + 4, 32, 3, 9);
@@ -1706,7 +1707,7 @@ static void sub_80F7880(void)
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
r4 = (gContestMonConditions[i] * 1000) / abs(r2);
if (r4 % 10 > 4)
@@ -1933,50 +1934,52 @@ static void sub_80F7ED0(int windowId, u8 *str, int arg2)
PutWindowTilemap(windowId);
}
-void sub_80F7F30(void)
+void TryEnterContestMon(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)
+u16 HasMonWonThisContestBefore(void)
{
- u16 result = 0;
+ u16 hasRankRibbon = FALSE;
struct Pokemon *mon = &gPlayerParty[gContestMonPartyIndex];
switch (gSpecialVar_ContestCategory)
{
case CONTEST_CATEGORY_COOL:
if (GetMonData(mon, MON_DATA_COOL_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
+ hasRankRibbon = TRUE;
break;
case CONTEST_CATEGORY_BEAUTY:
if (GetMonData(mon, MON_DATA_BEAUTY_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
+ hasRankRibbon = TRUE;
break;
case CONTEST_CATEGORY_CUTE:
if (GetMonData(mon, MON_DATA_CUTE_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
+ hasRankRibbon = TRUE;
break;
case CONTEST_CATEGORY_SMART:
if (GetMonData(mon, MON_DATA_SMART_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
+ hasRankRibbon = TRUE;
break;
case CONTEST_CATEGORY_TOUGH:
if (GetMonData(mon, MON_DATA_TOUGH_RIBBON) > gSpecialVar_ContestRank)
- result = 1;
+ hasRankRibbon = TRUE;
break;
}
- return result;
+ return hasRankRibbon;
}
-void sub_80F7FFC(void)
+void GiveMonContestRibbon(void)
{
u8 ribbonData;
@@ -1991,8 +1994,8 @@ void sub_80F7FFC(void)
{
ribbonData++;
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > 4)
- sub_80EE4DC(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
}
break;
case CONTEST_CATEGORY_BEAUTY:
@@ -2001,8 +2004,8 @@ void sub_80F7FFC(void)
{
ribbonData++;
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > 4)
- sub_80EE4DC(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
}
break;
case CONTEST_CATEGORY_CUTE:
@@ -2011,8 +2014,8 @@ void sub_80F7FFC(void)
{
ribbonData++;
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > 4)
- sub_80EE4DC(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
}
break;
case CONTEST_CATEGORY_SMART:
@@ -2021,8 +2024,8 @@ void sub_80F7FFC(void)
{
ribbonData++;
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > 4)
- sub_80EE4DC(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
}
break;
case CONTEST_CATEGORY_TOUGH:
@@ -2031,95 +2034,96 @@ void sub_80F7FFC(void)
{
ribbonData++;
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON, &ribbonData);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > 4)
- sub_80EE4DC(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
}
break;
}
}
-void sub_80F8264(void)
+void BufferContestantTrainerName(void)
{
StringCopy(gStringVar1, gContestMons[gSpecialVar_0x8006].trainerName);
sub_81DB5AC(gStringVar1);
}
-void sub_80F8290(void)
+void BufferContestantMonNickname(void)
{
StringCopy(gStringVar3, gContestMons[gSpecialVar_0x8006].nickname);
}
-void sub_80F82B4(void)
+// Unused script special
+void GetContestMonConditionRanking(void)
{
- u8 i, count;
+ u8 i, rank;
- for (i = 0, count = 0; i < 4; i++)
+ for (i = 0, rank = 0; i < CONTESTANT_COUNT; i++)
{
if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i])
- count++;
+ rank++;
}
- gSpecialVar_0x8004 = count;
+ gSpecialVar_0x8004 = rank;
}
-void sub_80F82FC(void)
+void GetContestMonCondition(void)
{
gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006];
}
-void sub_80F831C(void)
+void GetContestWinnerId(void)
{
u8 i;
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
;
gSpecialVar_0x8005 = i;
}
-void sub_80F834C(void)
+void BufferContestWinnerTrainerName(void)
{
u8 i;
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
;
StringCopy(gStringVar3, gContestMons[i].trainerName);
sub_81DB5AC(gStringVar3);
}
-void sub_80F8390(void)
+void BufferContestWinnerMonName(void)
{
u8 i;
- for (i = 0; i < 4 && gContestFinalStandings[i] != 0; i++)
+ for (i = 0; i < CONTESTANT_COUNT && gContestFinalStandings[i] != 0; i++)
;
StringCopy(gStringVar1, gContestMons[i].nickname);
}
-void sub_80F83D0(void)
+void CB2_SetStartContestCallback(void)
{
SetMainCallback2(CB2_StartContest);
}
-static void sub_80F83E0(u8 taskId)
+static void Task_StartContest(u8 taskId)
{
if (!gPaletteFade.active)
{
DestroyTask(taskId);
- SetMainCallback2(sub_80F83D0);
+ SetMainCallback2(CB2_SetStartContestCallback);
}
}
-void sub_80F840C(void)
+void StartContest(void)
{
ScriptContext2_Enable();
- CreateTask(sub_80F83E0, 10);
+ CreateTask(Task_StartContest, 10);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
}
-void sub_80F8438(void)
+void BufferContestantMonSpecies(void)
{
gSpecialVar_0x8004 = gContestMons[gSpecialVar_0x8006].species;
}
@@ -2140,7 +2144,7 @@ void sub_80F8484(void)
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
}
-void sub_80F84B0(void)
+void GetContestPlayerId(void)
{
gSpecialVar_0x8004 = gContestPlayerMonIndex;
}
@@ -2246,7 +2250,7 @@ void sub_80F8714(u8 taskId)
}
else
{
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
StringGetEnd10(gContestMons[i].nickname);
DestroyTask(taskId);
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 1b95e1ed9..7f33cac09 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -1,14 +1,14 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_gfx_sfx_util.h"
#include "bg.h"
#include "contest.h"
#include "contest_painting.h"
-#include "contest_painting_effects.h"
#include "data.h"
#include "decompress.h"
#include "gpu_regs.h"
+#include "image_processing_effects.h"
#include "international_string_util.h"
#include "main.h"
#include "lilycove_lady.h"
@@ -22,9 +22,9 @@
#include "constants/rgb.h"
// IWRAM common
-u16 (*gUnknown_03006190)[][32];
-struct Unk030061A0 gUnknown_030061A0;
-struct ContestWinner *gUnknown_030061C0;
+u16 (*gContestMonPixels)[][32];
+struct ImageProcessingContext gImageProcessingContext;
+struct ContestWinner *gContestPaintingWinner;
u16 *gContestPaintingMonPalette;
// IWRAM bss
@@ -39,10 +39,10 @@ static void HoldContestPainting(void);
static void InitContestPaintingWindow(void);
static void InitContestPaintingBg(void);
static void InitContestPaintingVars(bool8);
-static void sub_8130884(u8, u8);
+static void CreateContestPaintingPicture(u8, u8);
static void PrintContestPaintingCaption(u8, u8);
static void VBlankCB_ContestPainting(void);
-static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64]);
+static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64]);
extern const u8 gUnknown_0827EA0C[];
extern const u8 gContestCoolness[];
@@ -85,7 +85,7 @@ const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map
const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl");
const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl");
-const u8 *const gUnknown_085B07C0[] =
+static const u8 *const sContestCategoryNames_Unused[] =
{
gContestCoolness,
gContestBeauty,
@@ -94,7 +94,7 @@ const u8 *const gUnknown_085B07C0[] =
gContestToughness,
};
-const u8 *const gContestRankTextPointers[] =
+static const u8 *const sContestRankNames[] =
{
gContestRankNormal,
gContestRankSuper,
@@ -103,7 +103,7 @@ const u8 *const gContestRankTextPointers[] =
gContestLink,
};
-const struct BgTemplate gUnknown_085B07E8[] =
+static const struct BgTemplate sContestPaintingBgTemplates[] =
{
{
.bg = 1,
@@ -116,7 +116,7 @@ const struct BgTemplate gUnknown_085B07E8[] =
},
};
-const struct WindowTemplate gUnknown_085B07EC =
+static const struct WindowTemplate sContestPaintingWindowTemplate =
{
.bg = 1,
.tilemapLeft = 2,
@@ -127,7 +127,7 @@ const struct WindowTemplate gUnknown_085B07EC =
.baseBlock = 1,
};
-const u8 *const gContestPaintingDescriptionPointers[] =
+static const u8 *const sContestPaintingDescriptionPointers[] =
{
gContestPaintingCool1,
gContestPaintingCool2,
@@ -146,7 +146,7 @@ const u8 *const gContestPaintingDescriptionPointers[] =
gContestPaintingTough3,
};
-const struct OamData gUnknown_085B0830 =
+static const struct OamData sContestPaintingMonOamData =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -163,13 +163,13 @@ const struct OamData gUnknown_085B0830 =
const u16 gUnknown_085B0838[] = {RGB(0, 0, 0), RGB(0, 0, 0)};
-void sub_812FDA8(int contestWinner)
+void SetContestWinnerForPainting(int contestWinnerId)
{
// probably fakematching
u8 *ptr1 = &gUnknown_02039F5D;
u8 *ptr2 = &gUnknown_02039F5C;
- gUnknown_02039F3C = gSaveBlock1Ptr->contestWinners[contestWinner - 1];
- *ptr1 = contestWinner - 1;
+ gCurContestWinner = gSaveBlock1Ptr->contestWinners[contestWinnerId - 1];
+ *ptr1 = contestWinnerId - 1;
*ptr2 = 0;
}
@@ -189,7 +189,7 @@ static void CB2_QuitContestPainting(void)
{
SetMainCallback2(gMain.savedCallback);
FREE_AND_SET_NULL(gContestPaintingMonPalette);
- FREE_AND_SET_NULL(gUnknown_03006190);
+ FREE_AND_SET_NULL(gContestMonPixels);
RemoveWindow(gContestPaintingWindowId);
Free(GetBgTilemapBuffer(1));
FreeMonSpritesGfx();
@@ -203,7 +203,7 @@ static void ShowContestPainting(void)
ScanlineEffect_Stop();
SetVBlankCallback(NULL);
AllocateMonSpritesGfx();
- gUnknown_030061C0 = &gUnknown_02039F3C;
+ gContestPaintingWinner = &gCurContestWinner;
InitContestPaintingVars(1);
InitContestPaintingBg();
gMain.state++;
@@ -221,7 +221,7 @@ static void ShowContestPainting(void)
gMain.state++;
break;
case 3:
- sub_8130884(gUnknown_02039F5D, gUnknown_02039F5C);
+ CreateContestPaintingPicture(gUnknown_02039F5D, gUnknown_02039F5C);
gMain.state++;
break;
case 4:
@@ -269,11 +269,11 @@ static void HoldContestPainting(void)
static void InitContestPaintingWindow(void)
{
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_085B07E8, ARRAY_COUNT(gUnknown_085B07E8));
+ InitBgsFromTemplates(0, sContestPaintingBgTemplates, ARRAY_COUNT(sContestPaintingBgTemplates));
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
- gContestPaintingWindowId = AddWindow(&gUnknown_085B07EC);
+ gContestPaintingWindowId = AddWindow(&sContestPaintingWindowTemplate);
DeactivateAllTextPrinters();
FillWindowPixelBuffer(gContestPaintingWindowId, PIXEL_FILL(0));
PutWindowTilemap(gContestPaintingWindowId);
@@ -289,21 +289,21 @@ static void PrintContestPaintingCaption(u8 contestType, u8 arg1)
if (arg1 == TRUE)
return;
- category = gUnknown_030061C0->contestCategory;
+ category = gContestPaintingWinner->contestCategory;
if (contestType < 8)
{
BufferContestName(gStringVar1, category);
StringAppend(gStringVar1, gText_Space);
- StringAppend(gStringVar1, gContestRankTextPointers[gUnknown_030061C0->contestRank]);
- StringCopy(gStringVar2, gUnknown_030061C0->trainerName);
+ StringAppend(gStringVar1, sContestRankNames[gContestPaintingWinner->contestRank]);
+ StringCopy(gStringVar2, gContestPaintingWinner->trainerName);
sub_81DB5AC(gStringVar2);
- StringCopy(gStringVar3, gUnknown_030061C0->monName);
+ StringCopy(gStringVar3, gContestPaintingWinner->monName);
StringExpandPlaceholders(gStringVar4, gUnknown_0827EA0C);
}
else
{
- StringCopy(gStringVar1, gUnknown_030061C0->monName);
- StringExpandPlaceholders(gStringVar4, gContestPaintingDescriptionPointers[category]);
+ StringCopy(gStringVar1, gContestPaintingWinner->monName);
+ StringExpandPlaceholders(gStringVar4, sContestPaintingDescriptionPointers[category]);
}
x = GetStringCenterAlignXOffset(1, gStringVar4, 208);
@@ -360,18 +360,18 @@ static void VBlankCB_ContestPainting(void)
TransferPlttBuffer();
}
-void sub_81302E8(u16 species, u8 arg1)
+static void InitContestMonPixels(u16 species, u8 whichSprite)
{
- const void *pal = GetMonSpritePalFromSpeciesAndPersonality(species, gUnknown_030061C0->trainerId, gUnknown_030061C0->personality);
+ const void *pal = GetMonSpritePalFromSpeciesAndPersonality(species, gContestPaintingWinner->trainerId, gContestPaintingWinner->personality);
LZDecompressVram(pal, gContestPaintingMonPalette);
- if (!arg1)
+ if (whichSprite == 0)
{
HandleLoadSpecialPokePic_DontHandleDeoxys(
&gMonFrontPicTable[species],
gMonSpritesGfxPtr->sprites[1],
species,
- gUnknown_030061C0->personality);
- sub_8130380(gMonSpritesGfxPtr->sprites[1], gContestPaintingMonPalette, (void *)gUnknown_03006190);
+ gContestPaintingWinner->personality);
+ _InitContestMonPixels(gMonSpritesGfxPtr->sprites[1], gContestPaintingMonPalette, (void *)gContestMonPixels);
}
else
{
@@ -379,14 +379,14 @@ void sub_81302E8(u16 species, u8 arg1)
&gMonBackPicTable[species],
gMonSpritesGfxPtr->sprites[0],
species,
- gUnknown_030061C0->personality);
- sub_8130380(gMonSpritesGfxPtr->sprites[0], gContestPaintingMonPalette, (void *)gUnknown_03006190);
+ gContestPaintingWinner->personality);
+ _InitContestMonPixels(gMonSpritesGfxPtr->sprites[0], gContestPaintingMonPalette, (void *)gContestMonPixels);
}
}
#ifdef NONMATCHING
// functionally equivalent.
-static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64])
+static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64])
{
u16 tileY, tileX, pixelY, pixelX;
u8 colorIndex;
@@ -400,16 +400,16 @@ static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[6
for (pixelX = 0; pixelX < 8; pixelX++)
{
int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2);
- colorIndex = spritePixels[offset];
+ colorIndex = spriteGfx[offset];
if (pixelX & 1)
colorIndex >>= 4;
else
colorIndex &= 0xF;
if (colorIndex == 0) // transparent pixel
- (*destColorBuffer)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000;
+ (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000;
else
- (*destColorBuffer)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
+ (*destPixels)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
}
}
}
@@ -417,7 +417,7 @@ static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[6
}
#else
NAKED
-static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64])
+static void _InitContestMonPixels(u8 *spriteGfx, u16 *palette, u16 (*destPixels)[64][64])
{
asm_unified("\n\
push {r4-r7,lr}\n\
@@ -519,34 +519,34 @@ _081303F8:\n\
}
#endif
-static void sub_8130430(u8 arg0, u8 arg1)
+static void LoadContestPaintingFrame(u8 contestWinnerId, u8 arg1)
{
u8 x, y;
LoadPalette(gPictureFramePalettes, 0, 0x100);
if (arg1 == 1)
{
- switch (gUnknown_030061C0->contestCategory / 3)
+ switch (gContestPaintingWinner->contestCategory / 3)
{
case CONTEST_CATEGORY_COOL:
RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03006190);
+ RLUnCompWram(gPictureFrameTilemap_0, gContestMonPixels);
break;
case CONTEST_CATEGORY_BEAUTY:
RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03006190);
+ RLUnCompWram(gPictureFrameTilemap_1, gContestMonPixels);
break;
case CONTEST_CATEGORY_CUTE:
RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03006190);
+ RLUnCompWram(gPictureFrameTilemap_2, gContestMonPixels);
break;
case CONTEST_CATEGORY_SMART:
RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03006190);
+ RLUnCompWram(gPictureFrameTilemap_3, gContestMonPixels);
break;
case CONTEST_CATEGORY_TOUGH:
RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03006190);
+ RLUnCompWram(gPictureFrameTilemap_4, gContestMonPixels);
break;
}
@@ -563,23 +563,23 @@ static void sub_8130430(u8 arg0, u8 arg1)
for (y = 0; y < 10; y++)
{
for (x = 0; x < 18; x++)
- VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03006190)[y + 2][x + 6];
+ VRAM_PICTURE_DATA(x + 6, y + 2) = (*gContestMonPixels)[y + 2][x + 6];
}
// Re-set the entire top row to the first top frame part
for (x = 0; x < 16; x++)
- VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03006190)[2][7];
+ VRAM_PICTURE_DATA(x + 7, 2) = (*gContestMonPixels)[2][7];
#undef VRAM_PICTURE_DATA
}
- else if (arg0 < 8)
+ else if (contestWinnerId < 8)
{
RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM);
RLUnCompVram(gPictureFrameTilemap_5, (void *)(BG_SCREEN_ADDR(12)));
}
else
{
- switch (gUnknown_030061C0->contestCategory / 3)
+ switch (gContestPaintingWinner->contestCategory / 3)
{
case CONTEST_CATEGORY_COOL:
RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
@@ -605,100 +605,99 @@ static void sub_8130430(u8 arg0, u8 arg1)
}
}
-static void sub_8130688(u8 arg0)
+static void InitPaintingMonOamData(u8 contestWinnerId)
{
//Some hacks just to get the asm to match
#ifndef NONMATCHING
- asm(""::"r"(arg0));
+ asm(""::"r"(contestWinnerId));
#endif
- gMain.oamBuffer[0] = gUnknown_085B0830;
+ gMain.oamBuffer[0] = sContestPaintingMonOamData;
gMain.oamBuffer[0].tileNum = 0;
#ifndef NONMATCHING
- if (arg0) arg0 = gMain.oamBuffer[0].tileNum;
+ if (contestWinnerId) contestWinnerId = gMain.oamBuffer[0].tileNum;
#endif
gMain.oamBuffer[0].x = 88;
gMain.oamBuffer[0].y = 24;
}
-static u8 sub_81306CC(u8 arg0)
+static u8 GetImageEffectForContestWinner(u8 contestWinnerId)
{
u8 contestCategory;
- if (arg0 < 8)
- contestCategory = gUnknown_030061C0->contestCategory;
+ if (contestWinnerId < 8)
+ contestCategory = gContestPaintingWinner->contestCategory;
else
- contestCategory = gUnknown_030061C0->contestCategory / 3;
+ contestCategory = gContestPaintingWinner->contestCategory / 3;
switch (contestCategory)
{
case CONTEST_CATEGORY_COOL:
- return CONTESTRESULT_COOL;
+ return IMAGE_EFFECT_OUTLINE_COLORED;
case CONTEST_CATEGORY_BEAUTY:
- return CONTESTRESULT_BEAUTY;
+ return IMAGE_EFFECT_SHIMMER;
case CONTEST_CATEGORY_CUTE:
- return CONTESTRESULT_CUTE;
+ return IMAGE_EFFECT_POINTILLISM;
case CONTEST_CATEGORY_SMART:
- return CONTESTRESULT_SMART;
+ return IMAGE_EFFECT_CHARCOAL;
case CONTEST_CATEGORY_TOUGH:
- return CONTESTRESULT_TOUGH;
+ return IMAGE_EFFECT_GRAYSCALE_LIGHT;
}
return contestCategory;
}
-static void sub_8130738(void)
+static void AllocPaintingResources(void)
{
- gContestPaintingMonPalette = AllocZeroed(0x200);
- gUnknown_03006190 = AllocZeroed(0x2000);
+ gContestPaintingMonPalette = AllocZeroed(OBJ_PLTT_SIZE);
+ gContestMonPixels = AllocZeroed(0x2000);
}
-static void sub_8130760(u8 contestResult)
+static void DoContestPaintingImageProcessing(u8 imageEffect)
{
- gUnknown_030061A0.var_4 = gUnknown_03006190;
- gUnknown_030061A0.var_8 = gContestPaintingMonPalette;
- gUnknown_030061A0.var_18 = 0;
- gUnknown_030061A0.var_1F = gUnknown_030061C0->personality % 256;
- gUnknown_030061A0.var_19 = 0;
- gUnknown_030061A0.var_1A = 0;
- gUnknown_030061A0.var_1B = 64;
- gUnknown_030061A0.var_1C = 64;
- gUnknown_030061A0.var_1D = 64;
- gUnknown_030061A0.var_1E = 64;
-
- switch (contestResult)
+ gImageProcessingContext.canvasPixels = gContestMonPixels;
+ gImageProcessingContext.canvasPalette = gContestPaintingMonPalette;
+ gImageProcessingContext.paletteStart = 0;
+ gImageProcessingContext.personality = gContestPaintingWinner->personality % 256;
+ gImageProcessingContext.columnStart = 0;
+ gImageProcessingContext.rowStart = 0;
+ gImageProcessingContext.columnEnd = 64;
+ gImageProcessingContext.rowEnd = 64;
+ gImageProcessingContext.canvasWidth = 64;
+ gImageProcessingContext.canvasHeight = 64;
+
+ switch (imageEffect)
{
- case CONTESTRESULT_SMART:
- case CONTESTRESULT_TOUGH:
- gUnknown_030061A0.var_14 = 3;
+ case IMAGE_EFFECT_CHARCOAL:
+ case IMAGE_EFFECT_GRAYSCALE_LIGHT:
+ gImageProcessingContext.quantizeEffect = QUANTIZE_EFFECT_GRAYSCALE;
break;
- case CONTESTRESULT_COOL:
- case CONTESTRESULT_BEAUTY:
- case CONTESTRESULT_CUTE:
+ case IMAGE_EFFECT_OUTLINE_COLORED:
+ case IMAGE_EFFECT_SHIMMER:
+ case IMAGE_EFFECT_POINTILLISM:
default:
- gUnknown_030061A0.var_14 = 1;
+ gImageProcessingContext.quantizeEffect = QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS;
break;
}
- gUnknown_030061A0.var_16 = 2;
- gUnknown_030061A0.var_0 = contestResult;
- gUnknown_030061A0.var_10 = OBJ_VRAM0;
-
- sub_8124F2C(&gUnknown_030061A0);
- sub_81261A4(&gUnknown_030061A0);
- sub_8126058(&gUnknown_030061A0);
+ gImageProcessingContext.var_16 = 2;
+ gImageProcessingContext.effect = imageEffect;
+ gImageProcessingContext.dest = (void *)OBJ_VRAM0;
+ ApplyImageProcessingEffects(&gImageProcessingContext);
+ ApplyImageProcessingQuantization(&gImageProcessingContext);
+ ConvertImageProcessingToGBA(&gImageProcessingContext);
LoadPalette(gContestPaintingMonPalette, 0x100, 0x200);
}
-static void sub_8130884(u8 arg0, u8 arg1)
+static void CreateContestPaintingPicture(u8 contestWinnerId, u8 arg1)
{
- sub_8130738();
- sub_81302E8(gUnknown_030061C0->species, 0);
- sub_8130760(sub_81306CC(arg0));
- sub_8130688(arg0);
- sub_8130430(arg0, arg1);
+ AllocPaintingResources();
+ InitContestMonPixels(gContestPaintingWinner->species, 0);
+ DoContestPaintingImageProcessing(GetImageEffectForContestWinner(contestWinnerId));
+ InitPaintingMonOamData(contestWinnerId);
+ LoadContestPaintingFrame(contestWinnerId, arg1);
}
diff --git a/src/contest_painting_effects.c b/src/contest_painting_effects.c
deleted file mode 100644
index a791df65c..000000000
--- a/src/contest_painting_effects.c
+++ /dev/null
@@ -1,1365 +0,0 @@
-#include "global.h"
-#include "contest_painting_effects.h"
-#include "contest_painting.h"
-#include "constants/rgb.h"
-
-struct Unk8125954
-{
- u8 unk0;
- u8 unk1;
- u16 unk2;
-};
-
-// IWRAM common
-u8 gUnknown_03006164;
-u16 (*gUnknown_03006168)[][32];
-u8 gUnknown_0300616C;
-u8 gUnknown_03006170;
-u8 gUnknown_03006174;
-u8 gUnknown_03006178;
-u8 gUnknown_0300617C;
-u8 gUnknown_03006180;
-u16 *gUnknown_03006184;
-u16 gUnknown_03006188;
-
-static void sub_8125230(void);
-static void sub_81252E8(void);
-static void sub_81254E0(void);
-static void sub_8125630(void);
-static void sub_8125448(void);
-static void sub_81257F8(void);
-static void sub_81258A0(void);
-static void sub_81256C8(void);
-static void sub_8125250(void);
-static void sub_81253A4(u8);
-static void sub_81250B8(u8);
-static void sub_8125170(u8);
-static void sub_8125954(u16);
-static u16 ConvertColorToGrayscale(u16*);
-static u16 sub_8125E18(u16*, u16*, u16*);
-static u16 ConvertCoolColor(u16*, u8);
-static u16 ConvertToBlackOrWhite(u16*);
-static u16 sub_8125C98(u16*, u16*);
-static u16 InvertColor(u16*);
-static u16 sub_8125F38(u16*, u16*, u16*);
-static u16 sub_8125CF4(u16*, u16*);
-static u16 GetCoolColorFromPersonality(u8);
-static void sub_81263A4(bool8);
-static void sub_8126270(void);
-static void sub_8126714(void);
-static void sub_8126370(void);
-static void sub_8126664(void);
-static void sub_8126334(void);
-static void sub_81265B4(void);
-static void sub_8126318(void);
-static void sub_81264FC(void);
-static u16 sub_81267C4(u16*);
-static u16 sub_8126908(u16*);
-static u16 sub_812693C(u16*);
-static u16 sub_8126838(u16*);
-
-extern const u8 gUnknown_085A1F94[][3];
-
-void sub_8124F2C(struct Unk030061A0 *info)
-{
- gUnknown_03006168 = info->var_4;
- gUnknown_0300617C = info->var_1F;
- gUnknown_03006164 = info->var_19;
- gUnknown_03006178 = info->var_1A;
- gUnknown_03006174 = info->var_1B;
- gUnknown_0300616C = info->var_1C;
- gUnknown_03006180 = info->var_1D;
- gUnknown_03006170 = info->var_1E;
- switch (info->var_0)
- {
- case 2:
- sub_8125230();
- break;
- case 8:
- sub_81252E8();
- break;
- case 9:
- sub_81254E0();
- sub_81253A4(gUnknown_0300617C);
- break;
- case 10:
- sub_81254E0();
- sub_8125630();
- sub_8125448();
- case 31:
- sub_8125630();
- break;
- case 11:
- sub_81254E0();
- sub_81257F8();
- sub_81257F8();
- sub_81258A0();
- sub_8125448();
- break;
- case 13:
- sub_81256C8();
- break;
- case 30:
- sub_81254E0();
- break;
- case 32:
- sub_81257F8();
- break;
- case 33:
- sub_81258A0();
- break;
- case 6:
- sub_8125250();
- sub_81250B8(3);
- break;
- case 36:
- sub_81254E0();
- sub_81257F8();
- sub_81258A0();
- sub_8125448();
- sub_81252E8();
- sub_81252E8();
- sub_81250B8(2);
- sub_8125170(4);
- break;
- }
-}
-
-static void sub_81250B8(u8 a0) // it changes palette someway somehow... .__.
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* pal = &var2[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, pal++)
- {
- if (!(0x8000 & *pal))
- {
- u8 val = (31 & *pal);
- val += a0;
- if (val > 31)
- val = 31;
-
- *pal = RGB2(val, val, val);
- }
- }
- }
-}
-
-static void sub_8125170(u8 a0)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* pal = &var2[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, pal++)
- {
- if (!(0x8000 & *pal))
- {
- u8 val = (31 & *pal);
- if (val > 31 - a0)
- val = 31 - (a0 >> 1);
-
- *pal = RGB2(val, val, val);
- }
- }
- }
-}
-
-static void sub_8125230(void)
-{
- u32 i;
- for (i = 0; i < 3200; i++)
- sub_8125954(i);
-}
-
-static void sub_8125250(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* color = &var2[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, color++)
- {
- if (!(0x8000 & *color))
- {
- *color = ConvertColorToGrayscale(color);
- }
- }
- }
-}
-
-static void sub_81252E8(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_03006174; i++)
- {
- u16* var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
- u16* palette = &var0[gUnknown_03006164 + i];
- u16 color = *palette;
-
- j = 1;
- palette += gUnknown_03006180;
- while (j < gUnknown_0300616C - 1)
- {
- if (!(0x8000 & *palette))
- {
- *palette = sub_8125E18(&color, palette, palette + gUnknown_03006180);
- color = *palette;
- }
-
- j++;
- palette += gUnknown_03006180;
- }
- }
-}
-
-static void sub_81253A4(u8 arg0)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* color = &var0[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, color++)
- {
- if (!(0x8000 & *color))
- {
- *color = ConvertCoolColor(color, arg0);
- }
- }
- }
-}
-
-static void sub_8125448(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* color = &var0[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, color++)
- {
- if (!(0x8000 & *color))
- {
- *color = ConvertToBlackOrWhite(color);
- }
- }
- }
-}
-
-static void sub_81254E0(void)
-{
- u8 i, j;
- u16 *palette;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- palette = &var0[gUnknown_03006164];
- *palette = sub_8125C98(palette, palette + 1);
- for (j = 1, palette = palette + 1; j < gUnknown_03006174 - 1; j++, palette++)
- {
- *palette = sub_8125C98(palette, palette + 1);
- *palette = sub_8125C98(palette, palette - 1);
- }
-
- *palette = sub_8125C98(palette, palette - 1);
- }
-
- for (j = 0; j < gUnknown_03006174; j++)
- {
- u16 *var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
- palette = &var0[gUnknown_03006164 + j];
- *palette = sub_8125C98(palette, palette + gUnknown_03006180);
- for (i = 1, palette = palette + gUnknown_03006180; i < gUnknown_0300616C - 1; i++, palette += gUnknown_03006180)
- {
- *palette = sub_8125C98(palette, palette + gUnknown_03006180);
- *palette = sub_8125C98(palette, palette - gUnknown_03006180);
- }
-
- *palette = sub_8125C98(palette, palette - gUnknown_03006180);
- }
-}
-
-static void sub_8125630(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16 *color = &var0[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, color++)
- {
- if (!(0x8000 & *color))
- {
- *color = InvertColor(color);
- }
- }
- }
-}
-
-static void sub_81256C8(void)
-{
- u8 i, j;
- u16 *palette;
- u16 color;
-
- palette = (*gUnknown_03006168)[0];
- for (i = 0; i < 64; i++)
- {
- for (j = 0; j < 64; j++, palette++)
- {
- if (!(0x8000 & *palette))
- {
- *palette = InvertColor(palette);
- }
- }
- }
-
- for (j = 0; j < 64; j++)
- {
- palette = &(*gUnknown_03006168)[0][j];
- color = *palette;
- *palette = 0x8000;
- for (i = 1, palette += 64; i < 63; i++, palette += 64)
- {
- if (!(0x8000 & *palette))
- {
- *palette = sub_8125F38(&color, palette, palette + 64);
- color = *palette;
- }
- }
-
- *palette = 0x8000;
- palette = &(*gUnknown_03006168)[0][j];
- color = *palette;
- *palette = 0x8000;
- for (i = 1, palette += 64; i < 63; i++, palette += 64)
- {
- if (!(0x8000 & *palette))
- {
- *palette = sub_8125F38(&color, palette, palette + 64);
- color = *palette;
- }
- }
-
- *palette = 0x8000;
- }
-
- palette = (*gUnknown_03006168)[0];
- for (i = 0; i < 64; i++)
- {
- for (j = 0; j < 64; j++, palette++)
- {
- if (!(0x8000 & *palette))
- {
- *palette = InvertColor(palette);
- }
- }
- }
-}
-
-static void sub_81257F8(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16 *var0 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16 *palette = &var0[gUnknown_03006164];
- u16 color = *palette;
- for (j = 1, palette++; j < gUnknown_03006174 - 1; j++, palette++)
- {
- if (!(0x8000 & *palette))
- {
- *palette = sub_8125CF4(&color, palette);
- color = *palette;
- }
- }
- }
-}
-
-static void sub_81258A0(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_03006174; i++)
- {
- u16* var0 = &(*gUnknown_03006168)[0][gUnknown_03006178 * gUnknown_03006180];
- u16* palette = &var0[gUnknown_03006164 + i];
- u16 color = *palette;
- for (j = 1, palette += gUnknown_03006180; j < gUnknown_0300616C - 1; j++, palette += gUnknown_03006180)
- {
- if (!(0x8000 & *palette))
- {
- *palette = sub_8125CF4(&color, palette);
- color = *palette;
- }
- }
- }
-}
-
-static void sub_8125954(u16 arg0)
-{
- u8 i;
- u8 r5, r9;
- struct Unk8125954 unkStruct[6];
-
- unkStruct[0].unk0 = gUnknown_085A1F94[arg0][0];
- unkStruct[0].unk1 = gUnknown_085A1F94[arg0][1];
- unkStruct[0].unk2 = (gUnknown_085A1F94[arg0][2] >> 3) & 7;
-
- r9 = (gUnknown_085A1F94[arg0][2] >> 1) & 3;
- r5 = gUnknown_085A1F94[arg0][2] & 1;
- for (i = 1; i < unkStruct[0].unk2; i++)
- {
- if (!r5)
- {
- unkStruct[i].unk0 = unkStruct[0].unk0 - i;
- unkStruct[i].unk1 = unkStruct[0].unk1 + i;
- }
- else
- {
- unkStruct[i].unk0 = unkStruct[0].unk0 + 1;
- unkStruct[i].unk1 = unkStruct[0].unk1 - 1;
- }
-
- if (unkStruct[i].unk0 > 63 || unkStruct[i].unk1 > 63)
- {
- unkStruct[0].unk2 = i - 1;
- break;
- }
-
- unkStruct[i].unk2 = unkStruct[0].unk2 - i;
- }
-
- for (i = 0; i < unkStruct[0].unk2; i++)
- {
- u16 *pal = &(*gUnknown_03006168)[unkStruct[i].unk1 * 2][unkStruct[i].unk0];
-
- if (!(0x8000 & *pal))
- {
- u16 r = (*pal) & 0x1F;
- u16 g = (*pal >> 5) & 0x1F;
- u16 b = (*pal >> 10) & 0x1F;
-
- switch (r9)
- {
- case 0:
- case 1:
- switch (((gUnknown_085A1F94[arg0][2] >> 3) & 7) % 3)
- {
- case 0:
- if (r >= unkStruct[i].unk2)
- r -= unkStruct[i].unk2;
- else
- r = 0;
- break;
- case 1:
- if (g >= unkStruct[i].unk2)
- g -= unkStruct[i].unk2;
- else
- g = 0;
- break;
- case 2:
- if (b >= unkStruct[i].unk2)
- b -= unkStruct[i].unk2;
- else
- b = 0;
- break;
- }
- break;
- case 2:
- case 3:
- r += unkStruct[i].unk2;
- g += unkStruct[i].unk2;
- b += unkStruct[i].unk2;
- if (r > 31)
- r = 31;
- if (g > 31)
- g = 31;
- if (b > 31)
- b = 31;
- break;
- }
-
- *pal = RGB2(r, g, b);
- }
- }
-}
-
-static u16 ConvertColorToGrayscale(u16 *color)
-{
- s32 clr = *color;
- s32 r = clr & 0x1F;
- s32 g = (clr >> 5) & 0x1F;
- s32 b = (clr >> 10) & 0x1F;
- s32 gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
- return RGB2(gray, gray, gray);
-}
-
-// The dark colors are the colored edges of the Cool painting effect.
-// Everything else is white.
-static u16 ConvertCoolColor(u16 *color, u8 personality)
-{
- u16 red = *color & 0x1F;
- u16 green = (*color >> 5) & 0x1F;
- u16 blue = (*color >> 10) & 0x1F;
-
- if (red < 17 && green < 17 && blue < 17)
- return GetCoolColorFromPersonality(personality);
- else
- return RGB_WHITE;
-}
-
-// Based on the given value, which comes from the first 8 bits of
-// the mon's personality value, return a color.
-static u16 GetCoolColorFromPersonality(u8 personality)
-{
- u16 red = 0;
- u16 green = 0;
- u16 blue = 0;
- u8 strength = (personality / 6) % 3;
- u8 colorType = personality % 6;
-
- switch (colorType)
- {
- case 0:
- // Teal color
- green = 21 - strength;
- blue = green;
- red = 0;
- break;
- case 1:
- // Yellow color
- blue = 0;
- red = 21 - strength;
- green = red;
- break;
- case 2:
- // Purple color
- blue = 21 - strength;
- green = 0;
- red = blue;
- break;
- case 3:
- // Red color
- blue = 0;
- green = 0;
- red = 23 - strength;
- break;
- case 4:
- // Blue color
- blue = 23 - strength;
- green = 0;
- red = 0;
- break;
- case 5:
- // Green color
- blue = 0;
- green = 23 - strength;
- red = 0;
- break;
- }
-
- return RGB2(red, green, blue);
-}
-
-static u16 ConvertToBlackOrWhite(u16 *color)
-{
- u16 red = *color & 0x1F;
- u16 green = (*color >> 5) & 0x1F;
- u16 blue = (*color >> 10) & 0x1F;
-
- if (red < 17 && green < 17 && blue < 17)
- return RGB_BLACK;
- else
- return RGB_WHITE;
-}
-
-static u16 sub_8125C98(u16 *colorA, u16 *colorB)
-{
- if (*colorA)
- {
- if (*colorA & 0x8000)
- return 0x8000;
- if (*colorB & 0x8000)
- return RGB_BLACK;
-
- return *colorA;
- }
-
- return RGB_BLACK;
-}
-
-static u16 InvertColor(u16 *color)
-{
- u16 red = *color & 0x1F;
- u16 green = (*color >> 5) & 0x1F;
- u16 blue = (*color >> 10) & 0x1F;
-
- red = 31 - red;
- green = 31 - green;
- blue = 31 - blue;
-
- return RGB2(red, green, blue);
-}
-
-static u16 sub_8125CF4(u16 *a0, u16 *a1)
-{
- u16 sp0[2][3];
- u16 spC[3];
- u8 r4;
- u16 r2;
- u16 r, g, b;
-
- if (*a0 == *a1)
- return *a1;
-
- sp0[0][0] = (*a0 >> 0) & 0x1F;
- sp0[0][1] = (*a0 >> 5) & 0x1F;
- sp0[0][2] = (*a0 >> 10) & 0x1F;
- sp0[1][0] = (*a1 >> 0) & 0x1F;
- sp0[1][1] = (*a1 >> 5) & 0x1F;
- sp0[1][2] = (*a1 >> 10) & 0x1F;
-
- if (sp0[0][0] > 25 && sp0[0][1] > 25 && sp0[0][2] > 25)
- return *a1;
- if (sp0[1][0] > 25 && sp0[1][1] > 25 && sp0[1][2] > 25)
- return *a1;
-
- for (r4 = 0; r4 < 3; r4++)
- {
- if (sp0[0][r4] > sp0[1][r4])
- spC[r4] = sp0[0][r4] - sp0[1][r4];
- else
- spC[r4] = sp0[1][r4] - sp0[0][r4];
- }
-
- if (spC[0] >= spC[1])
- {
- if (spC[0] >= spC[2])
- r2 = spC[0];
- else if (spC[1] >= spC[2])
- r2 = spC[1];
- else
- r2 = spC[2];
- }
- else
- {
- if (spC[1] >= spC[2])
- r2 = spC[1];
- else if (spC[2] >= spC[0])
- r2 = spC[2];
- else
- r2 = spC[0];
- }
-
- r = (sp0[1][0] * (31 - r2 / 2)) / 31;
- g = (sp0[1][1] * (31 - r2 / 2)) / 31;
- b = (sp0[1][2] * (31 - r2 / 2)) / 31;
- return RGB2(r, g, b);
-}
-
-static u16 sub_8125E18(u16 * a0, u16 * a1, u16 * a2)
-{
- u16 red, green, blue;
- u16 avg0, avg1, avg2;
- u16 diff1, diff2;
- u32 minimum;
- u16 factor;
-
- if (*a0 == *a1 && *a2 == *a1)
- return *a1;
-
- red = (*a1 >> 0) & 0x1F;
- green = (*a1 >> 5) & 0x1F;
- blue = (*a1 >> 10) & 0x1F;
-
- avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3;
- avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3;
- avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3;
-
- if (avg0 == avg1 && avg2 == avg1)
- return *a1;
-
- if (avg0 > avg1)
- diff1 = avg0 - avg1;
- else
- diff1 = avg1 - avg0;
-
- if (avg2 > avg1)
- diff2 = avg2 - avg1;
- else
- diff2 = avg1 - avg2;
-
- if (diff1 >= diff2)
- minimum = diff1;
- else
- minimum = diff2;
-
- factor = 31 - minimum / 2;
- red = red * factor / 31;
- green = green * factor / 31;
- blue = blue * factor / 31;
- return RGB2(red, green, blue);
-}
-
-static u16 sub_8125F38(u16 *a0, u16 *a1, u16 *a2)
-{
- u16 red, green, blue;
- u16 avg0, avg1, avg2;
- u16 diff1, diff2;
- u32 minimum;
- u16 factor;
-
- if (*a0 == *a1 && *a2 == *a1)
- return *a1;
-
- red = (*a1 >> 0) & 0x1F;
- green = (*a1 >> 5) & 0x1F;
- blue = (*a1 >> 10) & 0x1F;
-
- avg0 = (((*a0 >> 0) & 0x1F) + ((*a0 >> 5) & 0x1F) + ((*a0 >> 10) & 0x1F)) / 3;
- avg1 = (((*a1 >> 0) & 0x1F) + ((*a1 >> 5) & 0x1F) + ((*a1 >> 10) & 0x1F)) / 3;
- avg2 = (((*a2 >> 0) & 0x1F) + ((*a2 >> 5) & 0x1F) + ((*a2 >> 10) & 0x1F)) / 3;
-
- if (avg0 == avg1 && avg2 == avg1)
- return *a1;
-
- if (avg0 > avg1)
- diff1 = avg0 - avg1;
- else
- diff1 = avg1 - avg0;
-
- if (avg2 > avg1)
- diff2 = avg2 - avg1;
- else
- diff2 = avg1 - avg2;
-
- if (diff1 >= diff2)
- minimum = diff1;
- else
- minimum = diff2;
-
- factor = 31 - minimum;
- red = red * factor / 31;
- green = green * factor / 31;
- blue = blue * factor / 31;
- return RGB2(red, green, blue);
-}
-
-/*
-void sub_8126058(struct Unk030061A0 *arg0)
-{
- u16 i, j, k;
- u8 r5 = arg0->var_1D >> 3;
- u8 var_24 = arg0->var_1E >> 3;
- u16 (*var_2C)[][32] = arg0->var_4;
- u32 var_28 = arg0->var_10;
-
- if (arg0->var_16 == 2)
- {
- for (i = 0; i < var_24; i++)
- {
- for (j = 0; j < r5; j++)
- {
- for (k = 0; k < 8; k++)
- {
- (*var_2C)[][];
- }
- }
- }
- }
-}
-*/
-
-NAKED
-void sub_8126058(struct Unk030061A0 *arg0)
-{
- asm_unified("\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0xC\n\
- ldrb r1, [r0, 0x1D]\n\
- lsrs r5, r1, 3\n\
- ldrb r1, [r0, 0x1E]\n\
- lsrs r1, 3\n\
- str r1, [sp, 0x8]\n\
- ldr r1, [r0, 0x4]\n\
- str r1, [sp]\n\
- ldr r2, [r0, 0x10]\n\
- str r2, [sp, 0x4]\n\
- ldrh r0, [r0, 0x16]\n\
- cmp r0, 0x2\n\
- bne _08126108\n\
- movs r1, 0\n\
- ldr r0, [sp, 0x8]\n\
- cmp r1, r0\n\
- bcc _08126086\n\
- b _08126194\n\
-_08126086:\n\
- movs r0, 0\n\
- adds r2, r1, 0x1\n\
- mov r10, r2\n\
- cmp r0, r5\n\
- bcs _081260FA\n\
- adds r2, r1, 0\n\
- muls r2, r5\n\
- mov r9, r2\n\
- lsls r1, 3\n\
- mov r8, r1\n\
-_0812609A:\n\
- movs r4, 0\n\
- lsls r6, r0, 4\n\
- adds r7, r0, 0x1\n\
- add r0, r9\n\
- lsls r0, 6\n\
- ldr r1, [sp, 0x4]\n\
- adds r1, r0\n\
- mov r12, r1\n\
-_081260AA:\n\
- lsls r0, r4, 3\n\
- mov r2, r12\n\
- adds r3, r2, r0\n\
- mov r1, r8\n\
- adds r0, r1, r4\n\
- lsls r0, 3\n\
- muls r0, r5\n\
- lsls r0, 1\n\
- ldr r2, [sp]\n\
- adds r0, r2, r0\n\
- adds r2, r0, r6\n\
- ldrh r0, [r2, 0x2]\n\
- lsls r0, 8\n\
- ldrh r1, [r2]\n\
- orrs r0, r1\n\
- strh r0, [r3]\n\
- ldrh r0, [r2, 0x6]\n\
- lsls r0, 8\n\
- ldrh r1, [r2, 0x4]\n\
- orrs r0, r1\n\
- strh r0, [r3, 0x2]\n\
- ldrh r0, [r2, 0xA]\n\
- lsls r0, 8\n\
- ldrh r1, [r2, 0x8]\n\
- orrs r0, r1\n\
- strh r0, [r3, 0x4]\n\
- ldrh r0, [r2, 0xE]\n\
- lsls r0, 8\n\
- ldrh r1, [r2, 0xC]\n\
- orrs r0, r1\n\
- strh r0, [r3, 0x6]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, 0x7\n\
- bls _081260AA\n\
- lsls r0, r7, 16\n\
- lsrs r0, 16\n\
- cmp r0, r5\n\
- bcc _0812609A\n\
-_081260FA:\n\
- mov r1, r10\n\
- lsls r0, r1, 16\n\
- lsrs r1, r0, 16\n\
- ldr r2, [sp, 0x8]\n\
- cmp r1, r2\n\
- bcc _08126086\n\
- b _08126194\n\
-_08126108:\n\
- movs r1, 0\n\
- ldr r0, [sp, 0x8]\n\
- cmp r1, r0\n\
- bcs _08126194\n\
-_08126110:\n\
- movs r0, 0\n\
- adds r2, r1, 0x1\n\
- mov r10, r2\n\
- cmp r0, r5\n\
- bcs _08126188\n\
- adds r2, r1, 0\n\
- muls r2, r5\n\
- mov r9, r2\n\
- lsls r1, 3\n\
- mov r8, r1\n\
-_08126124:\n\
- movs r4, 0\n\
- lsls r6, r0, 4\n\
- adds r7, r0, 0x1\n\
- add r0, r9\n\
- lsls r0, 5\n\
- ldr r1, [sp, 0x4]\n\
- adds r1, r0\n\
- mov r12, r1\n\
-_08126134:\n\
- lsls r0, r4, 2\n\
- mov r2, r12\n\
- adds r3, r2, r0\n\
- mov r1, r8\n\
- adds r0, r1, r4\n\
- lsls r0, 3\n\
- muls r0, r5\n\
- lsls r0, 1\n\
- ldr r2, [sp]\n\
- adds r0, r2, r0\n\
- adds r2, r0, r6\n\
- ldrh r1, [r2, 0x2]\n\
- lsls r1, 4\n\
- ldrh r0, [r2]\n\
- orrs r1, r0\n\
- ldrh r0, [r2, 0x4]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrh r0, [r2, 0x6]\n\
- lsls r0, 12\n\
- orrs r1, r0\n\
- strh r1, [r3]\n\
- ldrh r1, [r2, 0xA]\n\
- lsls r1, 4\n\
- ldrh r0, [r2, 0x8]\n\
- orrs r1, r0\n\
- ldrh r0, [r2, 0xC]\n\
- lsls r0, 8\n\
- orrs r1, r0\n\
- ldrh r0, [r2, 0xE]\n\
- lsls r0, 12\n\
- orrs r1, r0\n\
- strh r1, [r3, 0x2]\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, 0x7\n\
- bls _08126134\n\
- lsls r0, r7, 16\n\
- lsrs r0, 16\n\
- cmp r0, r5\n\
- bcc _08126124\n\
-_08126188:\n\
- mov r1, r10\n\
- lsls r0, r1, 16\n\
- lsrs r1, r0, 16\n\
- ldr r2, [sp, 0x8]\n\
- cmp r1, r2\n\
- bcc _08126110\n\
-_08126194:\n\
- add sp, 0xC\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");
-}
-
-void sub_81261A4(struct Unk030061A0 *arg0)
-{
- gUnknown_03006188 = arg0->var_18 * 16;
- gUnknown_03006184 = &arg0->var_8[gUnknown_03006188];
- gUnknown_03006168 = arg0->var_4;
- gUnknown_03006164 = arg0->var_19;
- gUnknown_03006178 = arg0->var_1A;
- gUnknown_03006174 = arg0->var_1B;
- gUnknown_0300616C = arg0->var_1C;
- gUnknown_03006180 = arg0->var_1D;
- gUnknown_03006170 = arg0->var_1E;
-
- switch (arg0->var_14)
- {
- case 0:
- sub_81263A4(FALSE);
- break;
- case 1:
- sub_81263A4(TRUE);
- break;
- case 2:
- sub_8126270();
- sub_8126714();
- break;
- case 3:
- sub_8126370();
- sub_8126664();
- break;
- case 4:
- sub_8126334();
- sub_81265B4();
- break;
- case 5:
- sub_8126318();
- sub_81264FC();
- break;
- }
-}
-
-static void sub_8126270(void)
-{
- gUnknown_03006184[0] = RGB2(0, 0, 0);
- gUnknown_03006184[1] = RGB2(6, 6, 6);
- gUnknown_03006184[2] = RGB2(29, 29, 29);
- gUnknown_03006184[3] = RGB2(11, 11, 11);
- gUnknown_03006184[4] = RGB2(29, 6, 6);
- gUnknown_03006184[5] = RGB2(6, 29, 6);
- gUnknown_03006184[6] = RGB2(6, 6, 29);
- gUnknown_03006184[7] = RGB2(29, 29, 6);
- gUnknown_03006184[8] = RGB2(29, 6, 29);
- gUnknown_03006184[9] = RGB2(6, 29, 29);
- gUnknown_03006184[10] = RGB2(29, 11, 6);
- gUnknown_03006184[11] = RGB2(11, 29, 6);
- gUnknown_03006184[12] = RGB2(6, 11, 29);
- gUnknown_03006184[13] = RGB2(29, 6, 11);
- gUnknown_03006184[14] = RGB2(6, 29, 11);
- gUnknown_03006184[15] = RGB2(11, 6, 29);
-}
-
-static void sub_8126318(void)
-{
- gUnknown_03006184[0] = RGB2(0, 0, 0);
- gUnknown_03006184[1] = RGB2(0, 0, 0);
- gUnknown_03006184[2] = RGB2(31, 31, 31);
-}
-
-static void sub_8126334(void)
-{
- u8 i;
-
- gUnknown_03006184[0] = RGB2(0, 0, 0);
- gUnknown_03006184[1] = RGB2(0, 0, 0);
- for (i = 0; i < 14; i++)
- gUnknown_03006184[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2));
-}
-
-static void sub_8126370(void)
-{
- u8 i;
-
- gUnknown_03006184[0] = RGB2(0, 0, 0);
- for (i = 0; i < 32; i++)
- gUnknown_03006184[i + 1] = RGB2(i, i, i);
-}
-
-static void sub_81263A4(bool8 arg0)
-{
- u8 i, j;
- u16 maxIndex;
-
- maxIndex = 0xDF;
- if (!arg0)
- maxIndex = 0xFF;
-
- for (j = 0; j < maxIndex; j++)
- gUnknown_03006184[j] = 0;
-
- gUnknown_03006184[maxIndex] = RGB2(15, 15, 15);
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* pal = &var2[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, pal++)
- {
- if (*pal & 0x8000)
- {
- *pal = gUnknown_03006188;
- }
- else
- {
- u16 color = sub_81267C4(pal);
- u8 curIndex = 1;
- if (curIndex < maxIndex)
- {
- if (gUnknown_03006184[curIndex] == RGB_BLACK)
- {
- gUnknown_03006184[curIndex] = color;
- *pal = gUnknown_03006188 + curIndex;
- }
- else
- {
- while (curIndex < maxIndex)
- {
- if (gUnknown_03006184[curIndex] == RGB_BLACK)
- {
- gUnknown_03006184[curIndex] = color;
- *pal = gUnknown_03006188 + curIndex;
- break;
- }
-
- if (gUnknown_03006184[curIndex] == color)
- {
- *pal = gUnknown_03006188 + curIndex;
- break;
- }
-
- curIndex++;
- }
- }
- }
-
- if (curIndex == maxIndex)
- {
- curIndex = maxIndex;
- *pal = curIndex;
- }
- }
- }
- }
-}
-
-static void sub_81264FC(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* pal = &var2[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, pal++)
- {
- if (*pal & 0x8000)
- {
- *pal = gUnknown_03006188;
- }
- else
- {
- if (ConvertToBlackOrWhite(pal) == RGB_BLACK)
- *pal = gUnknown_03006188 + 1;
- else
- *pal = gUnknown_03006188 + 2;
- }
- }
- }
-}
-
-static void sub_81265B4(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* pal = &var2[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, pal++)
- {
- if (*pal & 0x8000)
- *pal = gUnknown_03006188;
- else
- *pal = sub_8126908(pal) + gUnknown_03006188;
- }
- }
-}
-
-static void sub_8126664(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* pal = &var2[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, pal++)
- {
- if (*pal & 0x8000)
- *pal = gUnknown_03006188;
- else
- *pal = sub_812693C(pal) + gUnknown_03006188;
- }
- }
-}
-
-static void sub_8126714(void)
-{
- u8 i, j;
-
- for (i = 0; i < gUnknown_0300616C; i++)
- {
- u16* var2 = &(*gUnknown_03006168)[0][(gUnknown_03006178 + i) * gUnknown_03006180];
- u16* pal = &var2[gUnknown_03006164];
- for (j = 0; j < gUnknown_03006174; j++, pal++)
- {
- if (*pal & 0x8000)
- *pal = gUnknown_03006188;
- else
- *pal = sub_8126838(pal) + gUnknown_03006188;
- }
- }
-}
-
-static u16 sub_81267C4(u16 *color)
-{
- u16 red = *color & 0x1F;
- u16 green = (*color >> 5) & 0x1F;
- u16 blue = (*color >> 10) & 0x1F;
-
- if (red & 3)
- red = (red & 0x1C) + 4;
- if (green & 3)
- green = (green & 0x1C) + 4;
- if (blue & 3)
- blue = (blue & 0x1C) + 4;
-
- if (red < 6)
- red = 6;
- if (red > 30)
- red = 30;
-
- if (green < 6)
- green = 6;
- if (green > 30)
- green = 30;
-
- if (blue < 6)
- blue = 6;
- if (blue > 30)
- blue = 30;
-
- return RGB2(red, green, blue);
-}
-
-static u16 sub_8126838(u16* color)
-{
- u16 red = *color & 0x1F;
- u16 green = (*color >> 5) & 0x1F;
- u16 blue = (*color >> 10) & 0x1F;
-
- if (red < 12 && green < 11 && blue < 11)
- return 1;
-
- if (red > 19 && green > 19 && blue > 19)
- return 2;
-
- if (red > 19)
- {
- if (green > 19)
- {
- if (blue > 14)
- return 2;
- else
- return 7;
- }
- else if (blue > 19)
- {
- if (green > 14)
- return 2;
- else
- return 8;
- }
- }
-
- if (green > 19 && blue > 19)
- {
- if (red > 14)
- return 2;
- else
- return 9;
- }
-
- if (red > 19)
- {
- if (green > 11)
- {
- if (blue > 11)
- {
- if (green < blue)
- return 8;
- else
- return 7;
- }
- else
- {
- return 10;
- }
- }
- else if (blue > 11)
- {
- return 13;
- }
- else
- {
- return 4;
- }
- }
-
- if (green > 19)
- {
- if (red > 11)
- {
- if (blue > 11)
- {
- if (red < blue)
- return 9;
- else
- return 7;
- }
- else
- {
- return 11;
- }
- }
- else
- {
- if (blue > 11)
- return 14;
- else
- return 5;
- }
- }
-
- if (blue > 19)
- {
- if (red > 11)
- {
- if (green > 11)
- {
- if (red < green)
- return 9;
- else
- return 8;
- }
- }
- else if (green > 11)
- {
- return 12;
- }
-
- if (blue > 11)
- return 15;
- else
- return 6;
- }
-
- return 3;
-}
-
-static u16 sub_8126908(u16 *color)
-{
- u16 red = *color & 0x1F;
- u16 green = (*color >> 5) & 0x1F;
- u16 blue = (*color >> 10) & 0x1F;
- u16 average = ((red + green + blue) / 3) & 0x1E;
- if (average == 0)
- return 1;
- else
- return average / 2;
-}
-
-static u16 sub_812693C(u16 *color)
-{
- u16 red = *color & 0x1F;
- u16 green = (*color >> 5) & 0x1F;
- u16 blue = (*color >> 10) & 0x1F;
- u16 average = (red + green + blue) / 3;
- return average + 1;
-}
diff --git a/src/coord_event_weather.c b/src/coord_event_weather.c
index 60b87fa30..85f22a8b7 100644
--- a/src/coord_event_weather.c
+++ b/src/coord_event_weather.c
@@ -11,38 +11,38 @@ struct CoordEventWeather
static void CoordEventWeather_Clouds(void);
static void CoordEventWeather_Sunny(void);
-static void CoordEventWeather_LightRain(void);
+static void CoordEventWeather_Rain(void);
static void CoordEventWeather_Snow(void);
static void CoordEventWeather_Thunderstorm(void);
-static void CoordEventWeather_Fog(void);
+static void CoordEventWeather_HorizontalFog(void);
static void CoordEventWeather_DiagonalFog(void);
static void CoordEventWeather_Ash(void);
static void CoordEventWeather_Sandstorm(void);
-static void CoordEventWeather_Dark(void);
+static void CoordEventWeather_Shade(void);
static void CoordEventWeather_Drought(void);
static void CoordEventWeather_Route119Cycle(void);
static void CoordEventWeather_Route123Cycle(void);
static const struct CoordEventWeather sCoordEventWeatherFuncs[] =
{
- { COORD_EVENT_WEATHER_CLOUDS, CoordEventWeather_Clouds },
- { COORD_EVENT_WEATHER_SUNNY, CoordEventWeather_Sunny },
- { COORD_EVENT_WEATHER_RAIN_LIGHT, CoordEventWeather_LightRain },
- { COORD_EVENT_WEATHER_SNOW, CoordEventWeather_Snow },
- { COORD_EVENT_WEATHER_RAIN_MED, CoordEventWeather_Thunderstorm },
- { COORD_EVENT_WEATHER_FOG_1, CoordEventWeather_Fog },
- { COORD_EVENT_WEATHER_FOG_2, CoordEventWeather_DiagonalFog },
- { COORD_EVENT_WEATHER_ASH, CoordEventWeather_Ash },
- { COORD_EVENT_WEATHER_SANDSTORM, CoordEventWeather_Sandstorm },
- { COORD_EVENT_WEATHER_SHADE, CoordEventWeather_Dark },
- { COORD_EVENT_WEATHER_DROUGHT, CoordEventWeather_Drought },
- { COORD_EVENT_WEATHER_ROUTE119_CYCLE, CoordEventWeather_Route119Cycle },
- { COORD_EVENT_WEATHER_ROUTE123_CYCLE, CoordEventWeather_Route123Cycle },
+ { COORD_EVENT_WEATHER_SUNNY_CLOUDS, CoordEventWeather_Clouds },
+ { COORD_EVENT_WEATHER_SUNNY, CoordEventWeather_Sunny },
+ { COORD_EVENT_WEATHER_RAIN, CoordEventWeather_Rain },
+ { COORD_EVENT_WEATHER_SNOW, CoordEventWeather_Snow },
+ { COORD_EVENT_WEATHER_RAIN_THUNDERSTORM, CoordEventWeather_Thunderstorm },
+ { COORD_EVENT_WEATHER_FOG_HORIZONTAL, CoordEventWeather_HorizontalFog },
+ { COORD_EVENT_WEATHER_FOG_DIAGONAL, CoordEventWeather_DiagonalFog },
+ { COORD_EVENT_WEATHER_VOLCANIC_ASH, CoordEventWeather_Ash },
+ { COORD_EVENT_WEATHER_SANDSTORM, CoordEventWeather_Sandstorm },
+ { COORD_EVENT_WEATHER_SHADE, CoordEventWeather_Shade },
+ { COORD_EVENT_WEATHER_DROUGHT, CoordEventWeather_Drought },
+ { COORD_EVENT_WEATHER_ROUTE119_CYCLE, CoordEventWeather_Route119Cycle },
+ { COORD_EVENT_WEATHER_ROUTE123_CYCLE, CoordEventWeather_Route123Cycle },
};
static void CoordEventWeather_Clouds(void)
{
- SetWeather(WEATHER_CLOUDS);
+ SetWeather(WEATHER_SUNNY_CLOUDS);
}
static void CoordEventWeather_Sunny(void)
@@ -50,9 +50,9 @@ static void CoordEventWeather_Sunny(void)
SetWeather(WEATHER_SUNNY);
}
-static void CoordEventWeather_LightRain(void)
+static void CoordEventWeather_Rain(void)
{
- SetWeather(WEATHER_RAIN_LIGHT);
+ SetWeather(WEATHER_RAIN);
}
static void CoordEventWeather_Snow(void)
@@ -62,22 +62,22 @@ static void CoordEventWeather_Snow(void)
static void CoordEventWeather_Thunderstorm(void)
{
- SetWeather(WEATHER_RAIN_MED);
+ SetWeather(WEATHER_RAIN_THUNDERSTORM);
}
-static void CoordEventWeather_Fog(void)
+static void CoordEventWeather_HorizontalFog(void)
{
- SetWeather(WEATHER_FOG_1);
+ SetWeather(WEATHER_FOG_HORIZONTAL);
}
static void CoordEventWeather_DiagonalFog(void)
{
- SetWeather(WEATHER_FOG_2);
+ SetWeather(WEATHER_FOG_DIAGONAL);
}
static void CoordEventWeather_Ash(void)
{
- SetWeather(WEATHER_ASH);
+ SetWeather(WEATHER_VOLCANIC_ASH);
}
static void CoordEventWeather_Sandstorm(void)
@@ -85,7 +85,7 @@ static void CoordEventWeather_Sandstorm(void)
SetWeather(WEATHER_SANDSTORM);
}
-static void CoordEventWeather_Dark(void)
+static void CoordEventWeather_Shade(void)
{
SetWeather(WEATHER_SHADE);
}
diff --git a/src/credits.c b/src/credits.c
index 44fa2002c..a8bed9a3f 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},
@@ -1052,10 +1053,10 @@ static const struct SpritePalette gUnknown_085E702C[] = {
static const struct OamData gUnknown_085E703C =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -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;
@@ -2182,7 +2183,7 @@ static void sub_8177050(struct Sprite *sprite)
{
case 0:
default:
- sprite->oam.affineMode = 1;
+ sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
sprite->oam.matrixNum = sprite->data[1];
sprite->data[2] = 16;
SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]);
@@ -2224,7 +2225,7 @@ static void sub_8177050(struct Sprite *sprite)
{
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG0 | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
- sprite->oam.objMode = 1;
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
sprite->data[3] = 16;
sprite->data[0] += 1;
}
@@ -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/battle_frontier/apprentice.h b/src/data/battle_frontier/apprentice.h
new file mode 100644
index 000000000..349dc9619
--- /dev/null
+++ b/src/data/battle_frontier/apprentice.h
@@ -0,0 +1,982 @@
+// data/text/apprentice.inc
+extern const u8 gText_ApprenticePleaseTeach0[];
+extern const u8 gText_ApprenticePleaseTeach1[];
+extern const u8 gText_ApprenticePleaseTeach2[];
+extern const u8 gText_ApprenticePleaseTeach3[];
+extern const u8 gText_ApprenticePleaseTeach4[];
+extern const u8 gText_ApprenticePleaseTeach5[];
+extern const u8 gText_ApprenticePleaseTeach6[];
+extern const u8 gText_ApprenticePleaseTeach7[];
+extern const u8 gText_ApprenticePleaseTeach8[];
+extern const u8 gText_ApprenticePleaseTeach9[];
+extern const u8 gText_ApprenticePleaseTeach10[];
+extern const u8 gText_ApprenticePleaseTeach11[];
+extern const u8 gText_ApprenticePleaseTeach12[];
+extern const u8 gText_ApprenticePleaseTeach13[];
+extern const u8 gText_ApprenticePleaseTeach14[];
+extern const u8 gText_ApprenticePleaseTeach15[];
+extern const u8 gText_ApprenticeRejectTeaching0[];
+extern const u8 gText_ApprenticeRejectTeaching1[];
+extern const u8 gText_ApprenticeRejectTeaching2[];
+extern const u8 gText_ApprenticeRejectTeaching3[];
+extern const u8 gText_ApprenticeRejectTeaching4[];
+extern const u8 gText_ApprenticeRejectTeaching5[];
+extern const u8 gText_ApprenticeRejectTeaching6[];
+extern const u8 gText_ApprenticeRejectTeaching7[];
+extern const u8 gText_ApprenticeRejectTeaching8[];
+extern const u8 gText_ApprenticeRejectTeaching9[];
+extern const u8 gText_ApprenticeRejectTeaching10[];
+extern const u8 gText_ApprenticeRejectTeaching11[];
+extern const u8 gText_ApprenticeRejectTeaching12[];
+extern const u8 gText_ApprenticeRejectTeaching13[];
+extern const u8 gText_ApprenticeRejectTeaching14[];
+extern const u8 gText_ApprenticeRejectTeaching15[];
+extern const u8 gText_ApprenticeWhichLevelMode0[];
+extern const u8 gText_ApprenticeWhichLevelMode1[];
+extern const u8 gText_ApprenticeWhichLevelMode2[];
+extern const u8 gText_ApprenticeWhichLevelMode3[];
+extern const u8 gText_ApprenticeWhichLevelMode4[];
+extern const u8 gText_ApprenticeWhichLevelMode5[];
+extern const u8 gText_ApprenticeWhichLevelMode6[];
+extern const u8 gText_ApprenticeWhichLevelMode7[];
+extern const u8 gText_ApprenticeWhichLevelMode8[];
+extern const u8 gText_ApprenticeWhichLevelMode9[];
+extern const u8 gText_ApprenticeWhichLevelMode10[];
+extern const u8 gText_ApprenticeWhichLevelMode11[];
+extern const u8 gText_ApprenticeWhichLevelMode12[];
+extern const u8 gText_ApprenticeWhichLevelMode13[];
+extern const u8 gText_ApprenticeWhichLevelMode14[];
+extern const u8 gText_ApprenticeWhichLevelMode15[];
+extern const u8 gText_ApprenticeLevelModeThanks0[];
+extern const u8 gText_ApprenticeLevelModeThanks1[];
+extern const u8 gText_ApprenticeLevelModeThanks2[];
+extern const u8 gText_ApprenticeLevelModeThanks3[];
+extern const u8 gText_ApprenticeLevelModeThanks4[];
+extern const u8 gText_ApprenticeLevelModeThanks5[];
+extern const u8 gText_ApprenticeLevelModeThanks6[];
+extern const u8 gText_ApprenticeLevelModeThanks7[];
+extern const u8 gText_ApprenticeLevelModeThanks8[];
+extern const u8 gText_ApprenticeLevelModeThanks9[];
+extern const u8 gText_ApprenticeLevelModeThanks10[];
+extern const u8 gText_ApprenticeLevelModeThanks11[];
+extern const u8 gText_ApprenticeLevelModeThanks12[];
+extern const u8 gText_ApprenticeLevelModeThanks13[];
+extern const u8 gText_ApprenticeLevelModeThanks14[];
+extern const u8 gText_ApprenticeLevelModeThanks15[];
+
+extern const u8 gText_ApprenticeWhichMon0[];
+extern const u8 gText_ApprenticeWhichMon1[];
+extern const u8 gText_ApprenticeWhichMon2[];
+extern const u8 gText_ApprenticeWhichMon3[];
+extern const u8 gText_ApprenticeWhichMon4[];
+extern const u8 gText_ApprenticeWhichMon5[];
+extern const u8 gText_ApprenticeWhichMon6[];
+extern const u8 gText_ApprenticeWhichMon7[];
+extern const u8 gText_ApprenticeWhichMon8[];
+extern const u8 gText_ApprenticeWhichMon9[];
+extern const u8 gText_ApprenticeWhichMon10[];
+extern const u8 gText_ApprenticeWhichMon11[];
+extern const u8 gText_ApprenticeWhichMon12[];
+extern const u8 gText_ApprenticeWhichMon13[];
+extern const u8 gText_ApprenticeWhichMon14[];
+extern const u8 gText_ApprenticeWhichMon15[];
+extern const u8 gText_ApprenticeMonThanks0[];
+extern const u8 gText_ApprenticeMonThanks1[];
+extern const u8 gText_ApprenticeMonThanks2[];
+extern const u8 gText_ApprenticeMonThanks3[];
+extern const u8 gText_ApprenticeMonThanks4[];
+extern const u8 gText_ApprenticeMonThanks5[];
+extern const u8 gText_ApprenticeMonThanks6[];
+extern const u8 gText_ApprenticeMonThanks7[];
+extern const u8 gText_ApprenticeMonThanks8[];
+extern const u8 gText_ApprenticeMonThanks9[];
+extern const u8 gText_ApprenticeMonThanks10[];
+extern const u8 gText_ApprenticeMonThanks11[];
+extern const u8 gText_ApprenticeMonThanks12[];
+extern const u8 gText_ApprenticeMonThanks13[];
+extern const u8 gText_ApprenticeMonThanks14[];
+extern const u8 gText_ApprenticeMonThanks15[];
+
+extern const u8 gText_ApprenticeWhatHeldItem0[];
+extern const u8 gText_ApprenticeWhatHeldItem1[];
+extern const u8 gText_ApprenticeWhatHeldItem2[];
+extern const u8 gText_ApprenticeWhatHeldItem3[];
+extern const u8 gText_ApprenticeWhatHeldItem4[];
+extern const u8 gText_ApprenticeWhatHeldItem5[];
+extern const u8 gText_ApprenticeWhatHeldItem6[];
+extern const u8 gText_ApprenticeWhatHeldItem7[];
+extern const u8 gText_ApprenticeWhatHeldItem8[];
+extern const u8 gText_ApprenticeWhatHeldItem9[];
+extern const u8 gText_ApprenticeWhatHeldItem10[];
+extern const u8 gText_ApprenticeWhatHeldItem11[];
+extern const u8 gText_ApprenticeWhatHeldItem12[];
+extern const u8 gText_ApprenticeWhatHeldItem13[];
+extern const u8 gText_ApprenticeWhatHeldItem14[];
+extern const u8 gText_ApprenticeWhatHeldItem15[];
+extern const u8 gText_ApprenticeHoldNothing0[];
+extern const u8 gText_ApprenticeHoldNothing1[];
+extern const u8 gText_ApprenticeHoldNothing2[];
+extern const u8 gText_ApprenticeHoldNothing3[];
+extern const u8 gText_ApprenticeHoldNothing4[];
+extern const u8 gText_ApprenticeHoldNothing5[];
+extern const u8 gText_ApprenticeHoldNothing6[];
+extern const u8 gText_ApprenticeHoldNothing7[];
+extern const u8 gText_ApprenticeHoldNothing8[];
+extern const u8 gText_ApprenticeHoldNothing9[];
+extern const u8 gText_ApprenticeHoldNothing10[];
+extern const u8 gText_ApprenticeHoldNothing11[];
+extern const u8 gText_ApprenticeHoldNothing12[];
+extern const u8 gText_ApprenticeHoldNothing13[];
+extern const u8 gText_ApprenticeHoldNothing14[];
+extern const u8 gText_ApprenticeHoldNothing15[];
+extern const u8 gText_ApprenticeThanksNoHeldItem0[];
+extern const u8 gText_ApprenticeThanksNoHeldItem1[];
+extern const u8 gText_ApprenticeThanksNoHeldItem2[];
+extern const u8 gText_ApprenticeThanksNoHeldItem3[];
+extern const u8 gText_ApprenticeThanksNoHeldItem4[];
+extern const u8 gText_ApprenticeThanksNoHeldItem5[];
+extern const u8 gText_ApprenticeThanksNoHeldItem6[];
+extern const u8 gText_ApprenticeThanksNoHeldItem7[];
+extern const u8 gText_ApprenticeThanksNoHeldItem8[];
+extern const u8 gText_ApprenticeThanksNoHeldItem9[];
+extern const u8 gText_ApprenticeThanksNoHeldItem10[];
+extern const u8 gText_ApprenticeThanksNoHeldItem11[];
+extern const u8 gText_ApprenticeThanksNoHeldItem12[];
+extern const u8 gText_ApprenticeThanksNoHeldItem13[];
+extern const u8 gText_ApprenticeThanksNoHeldItem14[];
+extern const u8 gText_ApprenticeThanksNoHeldItem15[];
+extern const u8 gText_ApprenticeThanksHeldItem0[];
+extern const u8 gText_ApprenticeThanksHeldItem1[];
+extern const u8 gText_ApprenticeThanksHeldItem2[];
+extern const u8 gText_ApprenticeThanksHeldItem3[];
+extern const u8 gText_ApprenticeThanksHeldItem4[];
+extern const u8 gText_ApprenticeThanksHeldItem5[];
+extern const u8 gText_ApprenticeThanksHeldItem6[];
+extern const u8 gText_ApprenticeThanksHeldItem7[];
+extern const u8 gText_ApprenticeThanksHeldItem8[];
+extern const u8 gText_ApprenticeThanksHeldItem9[];
+extern const u8 gText_ApprenticeThanksHeldItem10[];
+extern const u8 gText_ApprenticeThanksHeldItem11[];
+extern const u8 gText_ApprenticeThanksHeldItem12[];
+extern const u8 gText_ApprenticeThanksHeldItem13[];
+extern const u8 gText_ApprenticeThanksHeldItem14[];
+extern const u8 gText_ApprenticeThanksHeldItem15[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended0[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended1[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended2[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended3[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended4[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended5[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended6[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended7[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended8[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended9[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended10[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended11[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended12[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended13[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended14[];
+extern const u8 gText_ApprenticeItemAlreadyRecommended15[];
+
+extern const u8 gText_ApprenticeWhichMove0[];
+extern const u8 gText_ApprenticeWhichMove1[];
+extern const u8 gText_ApprenticeWhichMove2[];
+extern const u8 gText_ApprenticeWhichMove3[];
+extern const u8 gText_ApprenticeWhichMove4[];
+extern const u8 gText_ApprenticeWhichMove5[];
+extern const u8 gText_ApprenticeWhichMove6[];
+extern const u8 gText_ApprenticeWhichMove7[];
+extern const u8 gText_ApprenticeWhichMove8[];
+extern const u8 gText_ApprenticeWhichMove9[];
+extern const u8 gText_ApprenticeWhichMove10[];
+extern const u8 gText_ApprenticeWhichMove11[];
+extern const u8 gText_ApprenticeWhichMove12[];
+extern const u8 gText_ApprenticeWhichMove13[];
+extern const u8 gText_ApprenticeWhichMove14[];
+extern const u8 gText_ApprenticeWhichMove15[];
+extern const u8 gText_ApprenticeMoveThanks0[];
+extern const u8 gText_ApprenticeMoveThanks1[];
+extern const u8 gText_ApprenticeMoveThanks2[];
+extern const u8 gText_ApprenticeMoveThanks3[];
+extern const u8 gText_ApprenticeMoveThanks4[];
+extern const u8 gText_ApprenticeMoveThanks5[];
+extern const u8 gText_ApprenticeMoveThanks6[];
+extern const u8 gText_ApprenticeMoveThanks7[];
+extern const u8 gText_ApprenticeMoveThanks8[];
+extern const u8 gText_ApprenticeMoveThanks9[];
+extern const u8 gText_ApprenticeMoveThanks10[];
+extern const u8 gText_ApprenticeMoveThanks11[];
+extern const u8 gText_ApprenticeMoveThanks12[];
+extern const u8 gText_ApprenticeMoveThanks13[];
+extern const u8 gText_ApprenticeMoveThanks14[];
+extern const u8 gText_ApprenticeMoveThanks15[];
+
+extern const u8 gText_ApprenticeWhichMonFirst0[];
+extern const u8 gText_ApprenticeWhichMonFirst1[];
+extern const u8 gText_ApprenticeWhichMonFirst2[];
+extern const u8 gText_ApprenticeWhichMonFirst3[];
+extern const u8 gText_ApprenticeWhichMonFirst4[];
+extern const u8 gText_ApprenticeWhichMonFirst5[];
+extern const u8 gText_ApprenticeWhichMonFirst6[];
+extern const u8 gText_ApprenticeWhichMonFirst7[];
+extern const u8 gText_ApprenticeWhichMonFirst8[];
+extern const u8 gText_ApprenticeWhichMonFirst9[];
+extern const u8 gText_ApprenticeWhichMonFirst10[];
+extern const u8 gText_ApprenticeWhichMonFirst11[];
+extern const u8 gText_ApprenticeWhichMonFirst12[];
+extern const u8 gText_ApprenticeWhichMonFirst13[];
+extern const u8 gText_ApprenticeWhichMonFirst14[];
+extern const u8 gText_ApprenticeWhichMonFirst15[];
+extern const u8 gText_ApprenticeMonFirstThanks0[];
+extern const u8 gText_ApprenticeMonFirstThanks1[];
+extern const u8 gText_ApprenticeMonFirstThanks2[];
+extern const u8 gText_ApprenticeMonFirstThanks3[];
+extern const u8 gText_ApprenticeMonFirstThanks4[];
+extern const u8 gText_ApprenticeMonFirstThanks5[];
+extern const u8 gText_ApprenticeMonFirstThanks6[];
+extern const u8 gText_ApprenticeMonFirstThanks7[];
+extern const u8 gText_ApprenticeMonFirstThanks8[];
+extern const u8 gText_ApprenticeMonFirstThanks9[];
+extern const u8 gText_ApprenticeMonFirstThanks10[];
+extern const u8 gText_ApprenticeMonFirstThanks11[];
+extern const u8 gText_ApprenticeMonFirstThanks12[];
+extern const u8 gText_ApprenticeMonFirstThanks13[];
+extern const u8 gText_ApprenticeMonFirstThanks14[];
+extern const u8 gText_ApprenticeMonFirstThanks15[];
+
+extern const u8 gText_ApprenticePickWinSpeech0[];
+extern const u8 gText_ApprenticePickWinSpeech1[];
+extern const u8 gText_ApprenticePickWinSpeech2[];
+extern const u8 gText_ApprenticePickWinSpeech3[];
+extern const u8 gText_ApprenticePickWinSpeech4[];
+extern const u8 gText_ApprenticePickWinSpeech5[];
+extern const u8 gText_ApprenticePickWinSpeech6[];
+extern const u8 gText_ApprenticePickWinSpeech7[];
+extern const u8 gText_ApprenticePickWinSpeech8[];
+extern const u8 gText_ApprenticePickWinSpeech9[];
+extern const u8 gText_ApprenticePickWinSpeech10[];
+extern const u8 gText_ApprenticePickWinSpeech11[];
+extern const u8 gText_ApprenticePickWinSpeech12[];
+extern const u8 gText_ApprenticePickWinSpeech13[];
+extern const u8 gText_ApprenticePickWinSpeech14[];
+extern const u8 gText_ApprenticePickWinSpeech15[];
+extern const u8 gText_ApprenticeWinSpeechThanks0[];
+extern const u8 gText_ApprenticeWinSpeechThanks1[];
+extern const u8 gText_ApprenticeWinSpeechThanks2[];
+extern const u8 gText_ApprenticeWinSpeechThanks3[];
+extern const u8 gText_ApprenticeWinSpeechThanks4[];
+extern const u8 gText_ApprenticeWinSpeechThanks5[];
+extern const u8 gText_ApprenticeWinSpeechThanks6[];
+extern const u8 gText_ApprenticeWinSpeechThanks7[];
+extern const u8 gText_ApprenticeWinSpeechThanks8[];
+extern const u8 gText_ApprenticeWinSpeechThanks9[];
+extern const u8 gText_ApprenticeWinSpeechThanks10[];
+extern const u8 gText_ApprenticeWinSpeechThanks11[];
+extern const u8 gText_ApprenticeWinSpeechThanks12[];
+extern const u8 gText_ApprenticeWinSpeechThanks13[];
+extern const u8 gText_ApprenticeWinSpeechThanks14[];
+extern const u8 gText_ApprenticeWinSpeechThanks15[];
+
+extern const u8 gText_ApprenticeChallenge0[];
+extern const u8 gText_ApprenticeChallenge1[];
+extern const u8 gText_ApprenticeChallenge2[];
+extern const u8 gText_ApprenticeChallenge3[];
+extern const u8 gText_ApprenticeChallenge4[];
+extern const u8 gText_ApprenticeChallenge5[];
+extern const u8 gText_ApprenticeChallenge6[];
+extern const u8 gText_ApprenticeChallenge7[];
+extern const u8 gText_ApprenticeChallenge8[];
+extern const u8 gText_ApprenticeChallenge9[];
+extern const u8 gText_ApprenticeChallenge10[];
+extern const u8 gText_ApprenticeChallenge11[];
+extern const u8 gText_ApprenticeChallenge12[];
+extern const u8 gText_ApprenticeChallenge13[];
+extern const u8 gText_ApprenticeChallenge14[];
+extern const u8 gText_ApprenticeChallenge15[];
+
+const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
+{
+ {
+ .name = {_("サダヒロ"), _("ALANN"), _("ALAIN"), _("ADELFO"), _("CLAUS"), _("TEO")},
+ .otId = 0xBDC9,
+ .facilityClass = FACILITY_CLASS_BUG_CATCHER,
+ .species = {SPECIES_BEAUTIFLY, SPECIES_DUSTOX, SPECIES_ILLUMISE, SPECIES_SHIFTRY, SPECIES_BRELOOM, SPECIES_NINJASK, SPECIES_SHEDINJA, SPECIES_PINSIR, SPECIES_HERACROSS, SPECIES_VOLBEAT},
+ .id = 0,
+ .speechLost = {EC_WORD_NO, EC_WORD_MISTAKE, EC_WORD_EXCL, EC_WORD_I, EC_WORD_LOST, EC_WORD_BADLY},
+ },
+ {
+ .name = {_("ヒロオ"), _("LIONEL"), _("LIONEL"), _("CAIO"), _("LUDWIG"), _("LEO")},
+ .otId = 0xCF09,
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .species = {SPECIES_SWELLOW, SPECIES_SWALOT, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_TORKOAL, SPECIES_HARIYAMA, SPECIES_MIGHTYENA, SPECIES_LUDICOLO, SPECIES_CRAWDAUNT, SPECIES_WHISCASH},
+ .id = 1,
+ .speechLost = {EC_WORD_OKAY, EC_WORD_I, EC_WORD_LOST, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MASTER},
+ },
+ {
+ .name = {_("ケイジ"), _("SONNY"), _("HERVE"), _("FEDRO"), _("WENZEL"), _("SANTI")},
+ .otId = 0x2E34,
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
+ .species = {SPECIES_LINOONE, SPECIES_MIGHTYENA, SPECIES_WHISCASH, SPECIES_ZANGOOSE, SPECIES_SEVIPER, SPECIES_NINETALES, SPECIES_KECLEON, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_MACHAMP},
+ .id = 2,
+ .speechLost = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AND, EC_WORD_LOST, EC_WORD_AWW, EC_WORD_ELLIPSIS},
+ },
+ {
+ .name = {_("ユラ"), _("LAYLA"), _("LAYLA"), _("ASTRID"), _("SONJA"), _("LOLA")},
+ .otId = 0x84EF,
+ .facilityClass = FACILITY_CLASS_LASS,
+ .species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA},
+ .id = 3,
+ .speechLost = {EC_WORD_IS, EC_WORD_THIS, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_QUES, 0xFFFF},
+ },
+ {
+ .name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")},
+ .otId = 0x1E43,
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .species = {SPECIES_WIGGLYTUFF, SPECIES_LINOONE, SPECIES_KINGDRA, SPECIES_DELCATTY, SPECIES_RAICHU, SPECIES_FEAROW, SPECIES_STARMIE, SPECIES_MEDICHAM, SPECIES_SHIFTRY, SPECIES_BEAUTIFLY},
+ .id = 4,
+ .speechLost = {EC_WORD_THIS, EC_WORD_WON_T, EC_WORD_BE, EC_WORD_HAPPENING, EC_WORD_NEXT, EC_WORD_TIME},
+ },
+ {
+ .name = {_("ヤスシ"), _("DONTE"), _("BRAHIM"), _("GLAUCO"), _("JOSEF"), _("ROQUE")},
+ .otId = 0x379F,
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
+ .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_AGGRON, SPECIES_MAGNETON, SPECIES_MACHAMP, SPECIES_ARMALDO, SPECIES_HERACROSS, SPECIES_NOSEPASS, SPECIES_EXPLOUD, SPECIES_MIGHTYENA},
+ .id = 5,
+ .speechLost = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_RUN, EC_WORD_BYE_BYE, EC_WORD_EXCL},
+ },
+ {
+ .name = {_("ミサオ"), _("AMIRA"), _("LAURE"), _("DAFNE"), _("AMELIE"), _("LARA")},
+ .otId = 0xF555,
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
+ .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO},
+ .id = 6,
+ .speechLost = {EC_WORD_AHAHA, EC_WORD_DEFEATED, EC_WORD_EXCL, EC_WORD_IT_S, EC_WORD_NOTHING, EC_WORD_EXCL},
+ },
+ {
+ .name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")},
+ .otId = 0x8D26,
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC},
+ .id = 7,
+ .speechLost = {EC_WORD_YOU_RE, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
+ },
+ {
+ .name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")},
+ .otId = 0x800C,
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .species = {SPECIES_SCEPTILE, SPECIES_VILEPLUME, SPECIES_BELLOSSOM, SPECIES_ROSELIA, SPECIES_CORSOLA, SPECIES_FLYGON, SPECIES_BRELOOM, SPECIES_MILOTIC, SPECIES_ALTARIA, SPECIES_CRADILY},
+ .id = 8,
+ .speechLost = {EC_WORD_WHAT, EC_WORD_TOUGH, EC_WORD_POKEMON, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_EXCL},
+ },
+ {
+ .name = {_("アキノリ"), _("DILLEN"), _("RENE"), _("INDRO"), _("DETLEF"), _("PEDRO")},
+ .otId = 0x469f,
+ .facilityClass = FACILITY_CLASS_HIKER,
+ .species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON},
+ .id = 9,
+ .speechLost = {EC_WORD_WE, EC_WORD_WERE, EC_WORD_JUST, EC_WORD_SHREDDED, EC_WORD_ELLIPSIS, 0xFFFF},
+ },
+ {
+ .name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")},
+ .otId = 0x71FC,
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA},
+ .id = 10,
+ .speechLost = {EC_WORD_YOUR, EC_WORD_WIN, EC_WORD_ANGERS, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
+ },
+ {
+ .name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")},
+ .otId = 0xA39E,
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .species = {SPECIES_QUAGSIRE, SPECIES_STARMIE, SPECIES_PELIPPER, SPECIES_CRAWDAUNT, SPECIES_WAILORD, SPECIES_GYARADOS, SPECIES_SWAMPERT, SPECIES_LANTURN, SPECIES_WHISCASH, SPECIES_SHUCKLE},
+ .id = 11,
+ .speechLost = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_MOVE(CUT), EC_WORD_ME, EC_WORD_DEEP, EC_WORD_OK_QUES},
+ },
+ {
+ .name = {_("リュウジ"), _("LAMONT"), _("XAV"), _("ORFEO"), _("JÜRGEN"), _("JORGE")},
+ .otId = 0xE590,
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .species = {SPECIES_ABSOL, SPECIES_CROBAT, SPECIES_EXPLOUD, SPECIES_MAGNETON, SPECIES_SHARPEDO, SPECIES_MANECTRIC, SPECIES_METAGROSS, SPECIES_ELECTRODE, SPECIES_NOSEPASS, SPECIES_WEEZING},
+ .id = 12,
+ .speechLost = {EC_WORD_A, EC_WORD_LOSS, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_THIS, EC_WORD_IS},
+ },
+ {
+ .name = {_("カツアキ"), _("TYRESE"), _("ANDY"), _("PARIDE"), _("DAVID"), _("CHICHO")},
+ .otId = 0xD018,
+ .facilityClass = FACILITY_CLASS_BLACK_BELT,
+ .species = {SPECIES_BLAZIKEN, SPECIES_GOLEM, SPECIES_MACHAMP, SPECIES_RHYDON, SPECIES_HARIYAMA, SPECIES_AGGRON, SPECIES_MEDICHAM, SPECIES_ZANGOOSE, SPECIES_VIGOROTH, SPECIES_SLAKING},
+ .id = 13,
+ .speechLost = {EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_WORD_AND, EC_WORD_LOW, EC_WORD_OF, EC_WORD_POWER},
+ },
+ {
+ .name = {_("トシミツ"), _("DANTE"), _("DANTE"), _("RAOUL"), _("LOTHAR"), _("PABLO")},
+ .otId = 0xBC75,
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .species = {SPECIES_SCEPTILE, SPECIES_SANDSLASH, SPECIES_FLYGON, SPECIES_CLAYDOL, SPECIES_ARMALDO, SPECIES_CROBAT, SPECIES_CRADILY, SPECIES_SOLROCK, SPECIES_LUNATONE, SPECIES_GOLEM},
+ .id = 14,
+ .speechLost = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_UNDERSTAND, EC_WORD_WHAT, EC_WORD_IS, EC_WORD_HAPPENING},
+ },
+ {
+ .name = {_("ローウェン"), _("ARTURO"), _("ARTURO"), _("ROMOLO"), _("BRIAN"), _("ARTURO")},
+ .otId = 0xFA02,
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .species = {SPECIES_ABSOL, SPECIES_MIGHTYENA, SPECIES_ALAKAZAM, SPECIES_BANETTE, SPECIES_NINETALES, SPECIES_CLAYDOL, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_WALREIN, SPECIES_DUSCLOPS},
+ .id = 15,
+ .speechLost = {EC_WORD_THIS, EC_WORD_HAS, EC_WORD_TO, EC_WORD_BE, EC_WORD_A, EC_WORD_LIE},
+ },
+};
+
+// Sequence of 4 messages for the first meeting with the apprentice
+static const u8 *const sApprenticeFirstMeetingTexts[NUM_APPRENTICES][4] =
+{
+ {gText_ApprenticePleaseTeach0, gText_ApprenticeRejectTeaching0, gText_ApprenticeWhichLevelMode0, gText_ApprenticeLevelModeThanks0},
+ {gText_ApprenticePleaseTeach1, gText_ApprenticeRejectTeaching1, gText_ApprenticeWhichLevelMode1, gText_ApprenticeLevelModeThanks1},
+ {gText_ApprenticePleaseTeach2, gText_ApprenticeRejectTeaching2, gText_ApprenticeWhichLevelMode2, gText_ApprenticeLevelModeThanks2},
+ {gText_ApprenticePleaseTeach3, gText_ApprenticeRejectTeaching3, gText_ApprenticeWhichLevelMode3, gText_ApprenticeLevelModeThanks3},
+ {gText_ApprenticePleaseTeach4, gText_ApprenticeRejectTeaching4, gText_ApprenticeWhichLevelMode4, gText_ApprenticeLevelModeThanks4},
+ {gText_ApprenticePleaseTeach5, gText_ApprenticeRejectTeaching5, gText_ApprenticeWhichLevelMode5, gText_ApprenticeLevelModeThanks5},
+ {gText_ApprenticePleaseTeach6, gText_ApprenticeRejectTeaching6, gText_ApprenticeWhichLevelMode6, gText_ApprenticeLevelModeThanks6},
+ {gText_ApprenticePleaseTeach7, gText_ApprenticeRejectTeaching7, gText_ApprenticeWhichLevelMode7, gText_ApprenticeLevelModeThanks7},
+ {gText_ApprenticePleaseTeach8, gText_ApprenticeRejectTeaching8, gText_ApprenticeWhichLevelMode8, gText_ApprenticeLevelModeThanks8},
+ {gText_ApprenticePleaseTeach9, gText_ApprenticeRejectTeaching9, gText_ApprenticeWhichLevelMode9, gText_ApprenticeLevelModeThanks9},
+ {gText_ApprenticePleaseTeach10, gText_ApprenticeRejectTeaching10, gText_ApprenticeWhichLevelMode10, gText_ApprenticeLevelModeThanks10},
+ {gText_ApprenticePleaseTeach11, gText_ApprenticeRejectTeaching11, gText_ApprenticeWhichLevelMode11, gText_ApprenticeLevelModeThanks11},
+ {gText_ApprenticePleaseTeach12, gText_ApprenticeRejectTeaching12, gText_ApprenticeWhichLevelMode12, gText_ApprenticeLevelModeThanks12},
+ {gText_ApprenticePleaseTeach13, gText_ApprenticeRejectTeaching13, gText_ApprenticeWhichLevelMode13, gText_ApprenticeLevelModeThanks13},
+ {gText_ApprenticePleaseTeach14, gText_ApprenticeRejectTeaching14, gText_ApprenticeWhichLevelMode14, gText_ApprenticeLevelModeThanks14},
+ {gText_ApprenticePleaseTeach15, gText_ApprenticeRejectTeaching15, gText_ApprenticeWhichLevelMode15, gText_ApprenticeLevelModeThanks15},
+};
+
+static const u8 *const sApprenticeWhichMonTexts[NUM_APPRENTICES][2] =
+{
+ {gText_ApprenticeWhichMon0, gText_ApprenticeMonThanks0},
+ {gText_ApprenticeWhichMon1, gText_ApprenticeMonThanks1},
+ {gText_ApprenticeWhichMon2, gText_ApprenticeMonThanks2},
+ {gText_ApprenticeWhichMon3, gText_ApprenticeMonThanks3},
+ {gText_ApprenticeWhichMon4, gText_ApprenticeMonThanks4},
+ {gText_ApprenticeWhichMon5, gText_ApprenticeMonThanks5},
+ {gText_ApprenticeWhichMon6, gText_ApprenticeMonThanks6},
+ {gText_ApprenticeWhichMon7, gText_ApprenticeMonThanks7},
+ {gText_ApprenticeWhichMon8, gText_ApprenticeMonThanks8},
+ {gText_ApprenticeWhichMon9, gText_ApprenticeMonThanks9},
+ {gText_ApprenticeWhichMon10, gText_ApprenticeMonThanks10},
+ {gText_ApprenticeWhichMon11, gText_ApprenticeMonThanks11},
+ {gText_ApprenticeWhichMon12, gText_ApprenticeMonThanks12},
+ {gText_ApprenticeWhichMon13, gText_ApprenticeMonThanks13},
+ {gText_ApprenticeWhichMon14, gText_ApprenticeMonThanks14},
+ {gText_ApprenticeWhichMon15, gText_ApprenticeMonThanks15},
+};
+
+// Sequence of 5 messages for suggesting a held item to the apprentice
+static const u8 *const sApprenticeHeldItemTexts[NUM_APPRENTICES][5] =
+{
+ {gText_ApprenticeWhatHeldItem0, gText_ApprenticeHoldNothing0, gText_ApprenticeThanksNoHeldItem0, gText_ApprenticeThanksHeldItem0, gText_ApprenticeItemAlreadyRecommended0},
+ {gText_ApprenticeWhatHeldItem1, gText_ApprenticeHoldNothing1, gText_ApprenticeThanksNoHeldItem1, gText_ApprenticeThanksHeldItem1, gText_ApprenticeItemAlreadyRecommended1},
+ {gText_ApprenticeWhatHeldItem2, gText_ApprenticeHoldNothing2, gText_ApprenticeThanksNoHeldItem2, gText_ApprenticeThanksHeldItem2, gText_ApprenticeItemAlreadyRecommended2},
+ {gText_ApprenticeWhatHeldItem3, gText_ApprenticeHoldNothing3, gText_ApprenticeThanksNoHeldItem3, gText_ApprenticeThanksHeldItem3, gText_ApprenticeItemAlreadyRecommended3},
+ {gText_ApprenticeWhatHeldItem4, gText_ApprenticeHoldNothing4, gText_ApprenticeThanksNoHeldItem4, gText_ApprenticeThanksHeldItem4, gText_ApprenticeItemAlreadyRecommended4},
+ {gText_ApprenticeWhatHeldItem5, gText_ApprenticeHoldNothing5, gText_ApprenticeThanksNoHeldItem5, gText_ApprenticeThanksHeldItem5, gText_ApprenticeItemAlreadyRecommended5},
+ {gText_ApprenticeWhatHeldItem6, gText_ApprenticeHoldNothing6, gText_ApprenticeThanksNoHeldItem6, gText_ApprenticeThanksHeldItem6, gText_ApprenticeItemAlreadyRecommended6},
+ {gText_ApprenticeWhatHeldItem7, gText_ApprenticeHoldNothing7, gText_ApprenticeThanksNoHeldItem7, gText_ApprenticeThanksHeldItem7, gText_ApprenticeItemAlreadyRecommended7},
+ {gText_ApprenticeWhatHeldItem8, gText_ApprenticeHoldNothing8, gText_ApprenticeThanksNoHeldItem8, gText_ApprenticeThanksHeldItem8, gText_ApprenticeItemAlreadyRecommended8},
+ {gText_ApprenticeWhatHeldItem9, gText_ApprenticeHoldNothing9, gText_ApprenticeThanksNoHeldItem9, gText_ApprenticeThanksHeldItem9, gText_ApprenticeItemAlreadyRecommended9},
+ {gText_ApprenticeWhatHeldItem10, gText_ApprenticeHoldNothing10, gText_ApprenticeThanksNoHeldItem10, gText_ApprenticeThanksHeldItem10, gText_ApprenticeItemAlreadyRecommended10},
+ {gText_ApprenticeWhatHeldItem11, gText_ApprenticeHoldNothing11, gText_ApprenticeThanksNoHeldItem11, gText_ApprenticeThanksHeldItem11, gText_ApprenticeItemAlreadyRecommended11},
+ {gText_ApprenticeWhatHeldItem12, gText_ApprenticeHoldNothing12, gText_ApprenticeThanksNoHeldItem12, gText_ApprenticeThanksHeldItem12, gText_ApprenticeItemAlreadyRecommended12},
+ {gText_ApprenticeWhatHeldItem13, gText_ApprenticeHoldNothing13, gText_ApprenticeThanksNoHeldItem13, gText_ApprenticeThanksHeldItem13, gText_ApprenticeItemAlreadyRecommended13},
+ {gText_ApprenticeWhatHeldItem14, gText_ApprenticeHoldNothing14, gText_ApprenticeThanksNoHeldItem14, gText_ApprenticeThanksHeldItem14, gText_ApprenticeItemAlreadyRecommended14},
+ {gText_ApprenticeWhatHeldItem15, gText_ApprenticeHoldNothing15, gText_ApprenticeThanksNoHeldItem15, gText_ApprenticeThanksHeldItem15, gText_ApprenticeItemAlreadyRecommended15},
+};
+
+static const u8 *const sApprenticeWhichMoveTexts[NUM_APPRENTICES][2] =
+{
+ {gText_ApprenticeWhichMove0, gText_ApprenticeMoveThanks0},
+ {gText_ApprenticeWhichMove1, gText_ApprenticeMoveThanks1},
+ {gText_ApprenticeWhichMove2, gText_ApprenticeMoveThanks2},
+ {gText_ApprenticeWhichMove3, gText_ApprenticeMoveThanks3},
+ {gText_ApprenticeWhichMove4, gText_ApprenticeMoveThanks4},
+ {gText_ApprenticeWhichMove5, gText_ApprenticeMoveThanks5},
+ {gText_ApprenticeWhichMove6, gText_ApprenticeMoveThanks6},
+ {gText_ApprenticeWhichMove7, gText_ApprenticeMoveThanks7},
+ {gText_ApprenticeWhichMove8, gText_ApprenticeMoveThanks8},
+ {gText_ApprenticeWhichMove9, gText_ApprenticeMoveThanks9},
+ {gText_ApprenticeWhichMove10, gText_ApprenticeMoveThanks10},
+ {gText_ApprenticeWhichMove11, gText_ApprenticeMoveThanks11},
+ {gText_ApprenticeWhichMove12, gText_ApprenticeMoveThanks12},
+ {gText_ApprenticeWhichMove13, gText_ApprenticeMoveThanks13},
+ {gText_ApprenticeWhichMove14, gText_ApprenticeMoveThanks14},
+ {gText_ApprenticeWhichMove15, gText_ApprenticeMoveThanks15},
+};
+
+static const u8 *const sApprenticeWhichMonFirstTexts[NUM_APPRENTICES][2] =
+{
+ {gText_ApprenticeWhichMonFirst0, gText_ApprenticeMonFirstThanks0},
+ {gText_ApprenticeWhichMonFirst1, gText_ApprenticeMonFirstThanks1},
+ {gText_ApprenticeWhichMonFirst2, gText_ApprenticeMonFirstThanks2},
+ {gText_ApprenticeWhichMonFirst3, gText_ApprenticeMonFirstThanks3},
+ {gText_ApprenticeWhichMonFirst4, gText_ApprenticeMonFirstThanks4},
+ {gText_ApprenticeWhichMonFirst5, gText_ApprenticeMonFirstThanks5},
+ {gText_ApprenticeWhichMonFirst6, gText_ApprenticeMonFirstThanks6},
+ {gText_ApprenticeWhichMonFirst7, gText_ApprenticeMonFirstThanks7},
+ {gText_ApprenticeWhichMonFirst8, gText_ApprenticeMonFirstThanks8},
+ {gText_ApprenticeWhichMonFirst9, gText_ApprenticeMonFirstThanks9},
+ {gText_ApprenticeWhichMonFirst10, gText_ApprenticeMonFirstThanks10},
+ {gText_ApprenticeWhichMonFirst11, gText_ApprenticeMonFirstThanks11},
+ {gText_ApprenticeWhichMonFirst12, gText_ApprenticeMonFirstThanks12},
+ {gText_ApprenticeWhichMonFirst13, gText_ApprenticeMonFirstThanks13},
+ {gText_ApprenticeWhichMonFirst14, gText_ApprenticeMonFirstThanks14},
+ {gText_ApprenticeWhichMonFirst15, gText_ApprenticeMonFirstThanks15},
+};
+
+static const u8 *const sApprenticePickWinSpeechTexts[NUM_APPRENTICES][2] =
+{
+ {gText_ApprenticePickWinSpeech0, gText_ApprenticeWinSpeechThanks0},
+ {gText_ApprenticePickWinSpeech1, gText_ApprenticeWinSpeechThanks1},
+ {gText_ApprenticePickWinSpeech2, gText_ApprenticeWinSpeechThanks2},
+ {gText_ApprenticePickWinSpeech3, gText_ApprenticeWinSpeechThanks3},
+ {gText_ApprenticePickWinSpeech4, gText_ApprenticeWinSpeechThanks4},
+ {gText_ApprenticePickWinSpeech5, gText_ApprenticeWinSpeechThanks5},
+ {gText_ApprenticePickWinSpeech6, gText_ApprenticeWinSpeechThanks6},
+ {gText_ApprenticePickWinSpeech7, gText_ApprenticeWinSpeechThanks7},
+ {gText_ApprenticePickWinSpeech8, gText_ApprenticeWinSpeechThanks8},
+ {gText_ApprenticePickWinSpeech9, gText_ApprenticeWinSpeechThanks9},
+ {gText_ApprenticePickWinSpeech10, gText_ApprenticeWinSpeechThanks10},
+ {gText_ApprenticePickWinSpeech11, gText_ApprenticeWinSpeechThanks11},
+ {gText_ApprenticePickWinSpeech12, gText_ApprenticeWinSpeechThanks12},
+ {gText_ApprenticePickWinSpeech13, gText_ApprenticeWinSpeechThanks13},
+ {gText_ApprenticePickWinSpeech14, gText_ApprenticeWinSpeechThanks14},
+ {gText_ApprenticePickWinSpeech15, gText_ApprenticeWinSpeechThanks15},
+};
+
+static const u8 *const sApprenticeChallengeTexts[NUM_APPRENTICES] =
+{
+ gText_ApprenticeChallenge0,
+ gText_ApprenticeChallenge1,
+ gText_ApprenticeChallenge2,
+ gText_ApprenticeChallenge3,
+ gText_ApprenticeChallenge4,
+ gText_ApprenticeChallenge5,
+ gText_ApprenticeChallenge6,
+ gText_ApprenticeChallenge7,
+ gText_ApprenticeChallenge8,
+ gText_ApprenticeChallenge9,
+ gText_ApprenticeChallenge10,
+ gText_ApprenticeChallenge11,
+ gText_ApprenticeChallenge12,
+ gText_ApprenticeChallenge13,
+ gText_ApprenticeChallenge14,
+ gText_ApprenticeChallenge15,
+};
+
+// Unclear what the criteria are for valid moves
+// Notably, a large percentage of multi-strike moves are not valid
+static const bool8 sValidApprenticeMoves[MOVES_COUNT] =
+{
+ [MOVE_NONE] = FALSE,
+ [MOVE_POUND] = FALSE,
+ [MOVE_KARATE_CHOP] = TRUE,
+ [MOVE_DOUBLE_SLAP] = TRUE,
+ [MOVE_COMET_PUNCH] = FALSE,
+ [MOVE_MEGA_PUNCH] = TRUE,
+ [MOVE_PAY_DAY] = FALSE,
+ [MOVE_FIRE_PUNCH] = TRUE,
+ [MOVE_ICE_PUNCH] = TRUE,
+ [MOVE_THUNDER_PUNCH] = TRUE,
+ [MOVE_SCRATCH] = FALSE,
+ [MOVE_VICE_GRIP] = FALSE,
+ [MOVE_GUILLOTINE] = TRUE,
+ [MOVE_RAZOR_WIND] = FALSE,
+ [MOVE_SWORDS_DANCE] = TRUE,
+ [MOVE_CUT] = FALSE,
+ [MOVE_GUST] = FALSE,
+ [MOVE_WING_ATTACK] = FALSE,
+ [MOVE_WHIRLWIND] = TRUE,
+ [MOVE_FLY] = TRUE,
+ [MOVE_BIND] = TRUE,
+ [MOVE_SLAM] = TRUE,
+ [MOVE_VINE_WHIP] = FALSE,
+ [MOVE_STOMP] = TRUE,
+ [MOVE_DOUBLE_KICK] = TRUE,
+ [MOVE_MEGA_KICK] = TRUE,
+ [MOVE_JUMP_KICK] = TRUE,
+ [MOVE_ROLLING_KICK] = TRUE,
+ [MOVE_SAND_ATTACK] = TRUE,
+ [MOVE_HEADBUTT] = TRUE,
+ [MOVE_HORN_ATTACK] = FALSE,
+ [MOVE_FURY_ATTACK] = FALSE,
+ [MOVE_HORN_DRILL] = TRUE,
+ [MOVE_TACKLE] = FALSE,
+ [MOVE_BODY_SLAM] = TRUE,
+ [MOVE_WRAP] = TRUE,
+ [MOVE_TAKE_DOWN] = TRUE,
+ [MOVE_THRASH] = TRUE,
+ [MOVE_DOUBLE_EDGE] = TRUE,
+ [MOVE_TAIL_WHIP] = FALSE,
+ [MOVE_POISON_STING] = FALSE,
+ [MOVE_TWINEEDLE] = TRUE,
+ [MOVE_PIN_MISSILE] = FALSE,
+ [MOVE_LEER] = FALSE,
+ [MOVE_BITE] = TRUE,
+ [MOVE_GROWL] = FALSE,
+ [MOVE_ROAR] = TRUE,
+ [MOVE_SING] = TRUE,
+ [MOVE_SUPERSONIC] = TRUE,
+ [MOVE_SONIC_BOOM] = TRUE,
+ [MOVE_DISABLE] = TRUE,
+ [MOVE_ACID] = FALSE,
+ [MOVE_EMBER] = FALSE,
+ [MOVE_FLAMETHROWER] = TRUE,
+ [MOVE_MIST] = TRUE,
+ [MOVE_WATER_GUN] = FALSE,
+ [MOVE_HYDRO_PUMP] = TRUE,
+ [MOVE_SURF] = TRUE,
+ [MOVE_ICE_BEAM] = TRUE,
+ [MOVE_BLIZZARD] = TRUE,
+ [MOVE_PSYBEAM] = TRUE,
+ [MOVE_BUBBLE_BEAM] = FALSE,
+ [MOVE_AURORA_BEAM] = FALSE,
+ [MOVE_HYPER_BEAM] = TRUE,
+ [MOVE_PECK] = FALSE,
+ [MOVE_DRILL_PECK] = TRUE,
+ [MOVE_SUBMISSION] = TRUE,
+ [MOVE_LOW_KICK] = TRUE,
+ [MOVE_COUNTER] = TRUE,
+ [MOVE_SEISMIC_TOSS] = TRUE,
+ [MOVE_STRENGTH] = TRUE,
+ [MOVE_ABSORB] = FALSE,
+ [MOVE_MEGA_DRAIN] = FALSE,
+ [MOVE_LEECH_SEED] = TRUE,
+ [MOVE_GROWTH] = TRUE,
+ [MOVE_RAZOR_LEAF] = TRUE,
+ [MOVE_SOLAR_BEAM] = TRUE,
+ [MOVE_POISON_POWDER] = TRUE,
+ [MOVE_STUN_SPORE] = TRUE,
+ [MOVE_SLEEP_POWDER] = TRUE,
+ [MOVE_PETAL_DANCE] = TRUE,
+ [MOVE_STRING_SHOT] = FALSE,
+ [MOVE_DRAGON_RAGE] = TRUE,
+ [MOVE_FIRE_SPIN] = TRUE,
+ [MOVE_THUNDER_SHOCK] = FALSE,
+ [MOVE_THUNDERBOLT] = TRUE,
+ [MOVE_THUNDER_WAVE] = TRUE,
+ [MOVE_THUNDER] = TRUE,
+ [MOVE_ROCK_THROW] = FALSE,
+ [MOVE_EARTHQUAKE] = TRUE,
+ [MOVE_FISSURE] = TRUE,
+ [MOVE_DIG] = TRUE,
+ [MOVE_TOXIC] = TRUE,
+ [MOVE_CONFUSION] = FALSE,
+ [MOVE_PSYCHIC] = TRUE,
+ [MOVE_HYPNOSIS] = TRUE,
+ [MOVE_MEDITATE] = TRUE,
+ [MOVE_AGILITY] = TRUE,
+ [MOVE_QUICK_ATTACK] = TRUE,
+ [MOVE_RAGE] = FALSE,
+ [MOVE_TELEPORT] = FALSE,
+ [MOVE_NIGHT_SHADE] = TRUE,
+ [MOVE_MIMIC] = TRUE,
+ [MOVE_SCREECH] = TRUE,
+ [MOVE_DOUBLE_TEAM] = TRUE,
+ [MOVE_RECOVER] = TRUE,
+ [MOVE_HARDEN] = TRUE,
+ [MOVE_MINIMIZE] = TRUE,
+ [MOVE_SMOKESCREEN] = TRUE,
+ [MOVE_CONFUSE_RAY] = TRUE,
+ [MOVE_WITHDRAW] = TRUE,
+ [MOVE_DEFENSE_CURL] = TRUE,
+ [MOVE_BARRIER] = TRUE,
+ [MOVE_LIGHT_SCREEN] = TRUE,
+ [MOVE_HAZE] = TRUE,
+ [MOVE_REFLECT] = TRUE,
+ [MOVE_FOCUS_ENERGY] = TRUE,
+ [MOVE_BIDE] = FALSE,
+ [MOVE_METRONOME] = TRUE,
+ [MOVE_MIRROR_MOVE] = TRUE,
+ [MOVE_SELF_DESTRUCT] = TRUE,
+ [MOVE_EGG_BOMB] = TRUE,
+ [MOVE_LICK] = TRUE,
+ [MOVE_SMOG] = FALSE,
+ [MOVE_SLUDGE] = FALSE,
+ [MOVE_BONE_CLUB] = FALSE,
+ [MOVE_FIRE_BLAST] = TRUE,
+ [MOVE_WATERFALL] = TRUE,
+ [MOVE_CLAMP] = TRUE,
+ [MOVE_SWIFT] = TRUE,
+ [MOVE_SKULL_BASH] = TRUE,
+ [MOVE_SPIKE_CANNON] = FALSE,
+ [MOVE_CONSTRICT] = FALSE,
+ [MOVE_AMNESIA] = TRUE,
+ [MOVE_KINESIS] = TRUE,
+ [MOVE_SOFT_BOILED] = TRUE,
+ [MOVE_HI_JUMP_KICK] = TRUE,
+ [MOVE_GLARE] = TRUE,
+ [MOVE_DREAM_EATER] = TRUE,
+ [MOVE_POISON_GAS] = FALSE,
+ [MOVE_BARRAGE] = FALSE,
+ [MOVE_LEECH_LIFE] = FALSE,
+ [MOVE_LOVELY_KISS] = TRUE,
+ [MOVE_SKY_ATTACK] = TRUE,
+ [MOVE_TRANSFORM] = TRUE,
+ [MOVE_BUBBLE] = FALSE,
+ [MOVE_DIZZY_PUNCH] = TRUE,
+ [MOVE_SPORE] = TRUE,
+ [MOVE_FLASH] = TRUE,
+ [MOVE_PSYWAVE] = TRUE,
+ [MOVE_SPLASH] = FALSE,
+ [MOVE_ACID_ARMOR] = TRUE,
+ [MOVE_CRABHAMMER] = TRUE,
+ [MOVE_EXPLOSION] = TRUE,
+ [MOVE_FURY_SWIPES] = FALSE,
+ [MOVE_BONEMERANG] = TRUE,
+ [MOVE_REST] = TRUE,
+ [MOVE_ROCK_SLIDE] = TRUE,
+ [MOVE_HYPER_FANG] = TRUE,
+ [MOVE_SHARPEN] = TRUE,
+ [MOVE_CONVERSION] = TRUE,
+ [MOVE_TRI_ATTACK] = TRUE,
+ [MOVE_SUPER_FANG] = TRUE,
+ [MOVE_SLASH] = TRUE,
+ [MOVE_SUBSTITUTE] = TRUE,
+ [MOVE_STRUGGLE] = TRUE,
+ [MOVE_SKETCH] = TRUE,
+ [MOVE_TRIPLE_KICK] = TRUE,
+ [MOVE_THIEF] = TRUE,
+ [MOVE_SPIDER_WEB] = TRUE,
+ [MOVE_MIND_READER] = TRUE,
+ [MOVE_NIGHTMARE] = TRUE,
+ [MOVE_FLAME_WHEEL] = FALSE,
+ [MOVE_SNORE] = TRUE,
+ [MOVE_CURSE] = TRUE,
+ [MOVE_FLAIL] = TRUE,
+ [MOVE_CONVERSION_2] = TRUE,
+ [MOVE_AEROBLAST] = TRUE,
+ [MOVE_COTTON_SPORE] = TRUE,
+ [MOVE_REVERSAL] = TRUE,
+ [MOVE_SPITE] = TRUE,
+ [MOVE_POWDER_SNOW] = FALSE,
+ [MOVE_PROTECT] = TRUE,
+ [MOVE_MACH_PUNCH] = TRUE,
+ [MOVE_SCARY_FACE] = TRUE,
+ [MOVE_FAINT_ATTACK] = TRUE,
+ [MOVE_SWEET_KISS] = TRUE,
+ [MOVE_BELLY_DRUM] = TRUE,
+ [MOVE_SLUDGE_BOMB] = TRUE,
+ [MOVE_MUD_SLAP] = TRUE,
+ [MOVE_OCTAZOOKA] = TRUE,
+ [MOVE_SPIKES] = TRUE,
+ [MOVE_ZAP_CANNON] = TRUE,
+ [MOVE_FORESIGHT] = TRUE,
+ [MOVE_DESTINY_BOND] = TRUE,
+ [MOVE_PERISH_SONG] = TRUE,
+ [MOVE_ICY_WIND] = TRUE,
+ [MOVE_DETECT] = TRUE,
+ [MOVE_BONE_RUSH] = FALSE,
+ [MOVE_LOCK_ON] = TRUE,
+ [MOVE_OUTRAGE] = TRUE,
+ [MOVE_SANDSTORM] = TRUE,
+ [MOVE_GIGA_DRAIN] = TRUE,
+ [MOVE_ENDURE] = TRUE,
+ [MOVE_CHARM] = TRUE,
+ [MOVE_ROLLOUT] = TRUE,
+ [MOVE_FALSE_SWIPE] = TRUE,
+ [MOVE_SWAGGER] = TRUE,
+ [MOVE_MILK_DRINK] = TRUE,
+ [MOVE_SPARK] = FALSE,
+ [MOVE_FURY_CUTTER] = TRUE,
+ [MOVE_STEEL_WING] = TRUE,
+ [MOVE_MEAN_LOOK] = TRUE,
+ [MOVE_ATTRACT] = TRUE,
+ [MOVE_SLEEP_TALK] = TRUE,
+ [MOVE_HEAL_BELL] = TRUE,
+ [MOVE_RETURN] = TRUE,
+ [MOVE_PRESENT] = TRUE,
+ [MOVE_FRUSTRATION] = TRUE,
+ [MOVE_SAFEGUARD] = TRUE,
+ [MOVE_PAIN_SPLIT] = TRUE,
+ [MOVE_SACRED_FIRE] = TRUE,
+ [MOVE_MAGNITUDE] = FALSE,
+ [MOVE_DYNAMIC_PUNCH] = TRUE,
+ [MOVE_MEGAHORN] = TRUE,
+ [MOVE_DRAGON_BREATH] = TRUE,
+ [MOVE_BATON_PASS] = TRUE,
+ [MOVE_ENCORE] = TRUE,
+ [MOVE_PURSUIT] = TRUE,
+ [MOVE_RAPID_SPIN] = TRUE,
+ [MOVE_SWEET_SCENT] = TRUE,
+ [MOVE_IRON_TAIL] = TRUE,
+ [MOVE_METAL_CLAW] = TRUE,
+ [MOVE_VITAL_THROW] = TRUE,
+ [MOVE_MORNING_SUN] = TRUE,
+ [MOVE_SYNTHESIS] = TRUE,
+ [MOVE_MOONLIGHT] = TRUE,
+ [MOVE_HIDDEN_POWER] = TRUE,
+ [MOVE_CROSS_CHOP] = TRUE,
+ [MOVE_TWISTER] = FALSE,
+ [MOVE_RAIN_DANCE] = TRUE,
+ [MOVE_SUNNY_DAY] = TRUE,
+ [MOVE_CRUNCH] = TRUE,
+ [MOVE_MIRROR_COAT] = TRUE,
+ [MOVE_PSYCH_UP] = TRUE,
+ [MOVE_EXTREME_SPEED] = TRUE,
+ [MOVE_ANCIENT_POWER] = TRUE,
+ [MOVE_SHADOW_BALL] = TRUE,
+ [MOVE_FUTURE_SIGHT] = TRUE,
+ [MOVE_ROCK_SMASH] = TRUE,
+ [MOVE_WHIRLPOOL] = TRUE,
+ [MOVE_BEAT_UP] = TRUE,
+ [MOVE_FAKE_OUT] = TRUE,
+ [MOVE_UPROAR] = TRUE,
+ [MOVE_STOCKPILE] = TRUE,
+ [MOVE_SPIT_UP] = TRUE,
+ [MOVE_SWALLOW] = TRUE,
+ [MOVE_HEAT_WAVE] = TRUE,
+ [MOVE_HAIL] = TRUE,
+ [MOVE_TORMENT] = TRUE,
+ [MOVE_FLATTER] = TRUE,
+ [MOVE_WILL_O_WISP] = TRUE,
+ [MOVE_MEMENTO] = TRUE,
+ [MOVE_FACADE] = TRUE,
+ [MOVE_FOCUS_PUNCH] = TRUE,
+ [MOVE_SMELLING_SALT] = TRUE,
+ [MOVE_FOLLOW_ME] = TRUE,
+ [MOVE_NATURE_POWER] = TRUE,
+ [MOVE_CHARGE] = TRUE,
+ [MOVE_TAUNT] = TRUE,
+ [MOVE_HELPING_HAND] = TRUE,
+ [MOVE_TRICK] = TRUE,
+ [MOVE_ROLE_PLAY] = TRUE,
+ [MOVE_WISH] = TRUE,
+ [MOVE_ASSIST] = TRUE,
+ [MOVE_INGRAIN] = TRUE,
+ [MOVE_SUPERPOWER] = TRUE,
+ [MOVE_MAGIC_COAT] = TRUE,
+ [MOVE_RECYCLE] = TRUE,
+ [MOVE_REVENGE] = TRUE,
+ [MOVE_BRICK_BREAK] = TRUE,
+ [MOVE_YAWN] = TRUE,
+ [MOVE_KNOCK_OFF] = TRUE,
+ [MOVE_ENDEAVOR] = TRUE,
+ [MOVE_ERUPTION] = TRUE,
+ [MOVE_SKILL_SWAP] = TRUE,
+ [MOVE_IMPRISON] = TRUE,
+ [MOVE_REFRESH] = TRUE,
+ [MOVE_GRUDGE] = TRUE,
+ [MOVE_SNATCH] = TRUE,
+ [MOVE_SECRET_POWER] = TRUE,
+ [MOVE_DIVE] = TRUE,
+ [MOVE_ARM_THRUST] = FALSE,
+ [MOVE_CAMOUFLAGE] = TRUE,
+ [MOVE_TAIL_GLOW] = TRUE,
+ [MOVE_LUSTER_PURGE] = TRUE,
+ [MOVE_MIST_BALL] = TRUE,
+ [MOVE_FEATHER_DANCE] = TRUE,
+ [MOVE_TEETER_DANCE] = TRUE,
+ [MOVE_BLAZE_KICK] = TRUE,
+ [MOVE_MUD_SPORT] = TRUE,
+ [MOVE_ICE_BALL] = FALSE,
+ [MOVE_NEEDLE_ARM] = TRUE,
+ [MOVE_SLACK_OFF] = TRUE,
+ [MOVE_HYPER_VOICE] = TRUE,
+ [MOVE_POISON_FANG] = FALSE,
+ [MOVE_CRUSH_CLAW] = TRUE,
+ [MOVE_BLAST_BURN] = TRUE,
+ [MOVE_HYDRO_CANNON] = TRUE,
+ [MOVE_METEOR_MASH] = TRUE,
+ [MOVE_ASTONISH] = TRUE,
+ [MOVE_WEATHER_BALL] = TRUE,
+ [MOVE_AROMATHERAPY] = TRUE,
+ [MOVE_FAKE_TEARS] = TRUE,
+ [MOVE_AIR_CUTTER] = TRUE,
+ [MOVE_OVERHEAT] = TRUE,
+ [MOVE_ODOR_SLEUTH] = TRUE,
+ [MOVE_ROCK_TOMB] = TRUE,
+ [MOVE_SILVER_WIND] = TRUE,
+ [MOVE_METAL_SOUND] = TRUE,
+ [MOVE_GRASS_WHISTLE] = TRUE,
+ [MOVE_TICKLE] = TRUE,
+ [MOVE_COSMIC_POWER] = TRUE,
+ [MOVE_WATER_SPOUT] = TRUE,
+ [MOVE_SIGNAL_BEAM] = TRUE,
+ [MOVE_SHADOW_PUNCH] = TRUE,
+ [MOVE_EXTRASENSORY] = TRUE,
+ [MOVE_SKY_UPPERCUT] = TRUE,
+ [MOVE_SAND_TOMB] = TRUE,
+ [MOVE_SHEER_COLD] = TRUE,
+ [MOVE_MUDDY_WATER] = TRUE,
+ [MOVE_BULLET_SEED] = FALSE,
+ [MOVE_AERIAL_ACE] = TRUE,
+ [MOVE_ICICLE_SPEAR] = FALSE,
+ [MOVE_IRON_DEFENSE] = TRUE,
+ [MOVE_BLOCK] = TRUE,
+ [MOVE_HOWL] = TRUE,
+ [MOVE_DRAGON_CLAW] = TRUE,
+ [MOVE_FRENZY_PLANT] = TRUE,
+ [MOVE_BULK_UP] = TRUE,
+ [MOVE_BOUNCE] = TRUE,
+ [MOVE_MUD_SHOT] = FALSE,
+ [MOVE_POISON_TAIL] = TRUE,
+ [MOVE_COVET] = TRUE,
+ [MOVE_VOLT_TACKLE] = TRUE,
+ [MOVE_MAGICAL_LEAF] = TRUE,
+ [MOVE_WATER_SPORT] = TRUE,
+ [MOVE_CALM_MIND] = TRUE,
+ [MOVE_LEAF_BLADE] = TRUE,
+ [MOVE_DRAGON_DANCE] = TRUE,
+ [MOVE_ROCK_BLAST] = FALSE,
+ [MOVE_SHOCK_WAVE] = TRUE,
+ [MOVE_WATER_PULSE] = TRUE,
+ [MOVE_DOOM_DESIRE] = TRUE,
+ [MOVE_PSYCHO_BOOST] = TRUE,
+};
+
+// The possible questions to ask after the initial 3 WHICH MON questions. Retrieved from here and shuffled
+// WHAT_ITEM has max 3 occurrences, one for each party member
+// WHICH_MOVE has max 5 occurrences, defined as NUM_WHICH_MOVE_QUESTIONS
+// WHICH_FIRST has max 1 occurrence, lead mon should only be chosen once
+// WHICH_SPEECH has max 1 occurrence, as the apprentice leaves after its asked
+static const u8 sQuestionPossibilities[MAX_APPRENTICE_QUESTIONS] =
+{
+ QUESTION_ID_WHAT_ITEM,
+ QUESTION_ID_WHAT_ITEM,
+ QUESTION_ID_WHAT_ITEM,
+ QUESTION_ID_WHICH_MOVE,
+ QUESTION_ID_WHICH_MOVE,
+ QUESTION_ID_WHICH_MOVE,
+ QUESTION_ID_WHICH_MOVE,
+ QUESTION_ID_WHICH_MOVE,
+ QUESTION_ID_WHICH_FIRST,
+ QUESTION_ID_WIN_SPEECH
+};
+
+static void (* const sApprenticeFunctions[])(void) =
+{
+ [APPRENTICE_FUNC_GAVE_LVLMODE] = Script_GivenApprenticeLvlMode,
+ [APPRENTICE_FUNC_SET_LVLMODE] = Script_SetApprenticeLvlMode,
+ [APPRENTICE_FUNC_SET_ID] = Script_SetApprenticeId,
+ [APPRENTICE_FUNC_SHUFFLE_SPECIES] = ShuffleApprenticeSpecies,
+ [APPRENTICE_FUNC_RANDOMIZE_QUESTIONS] = Script_SetRandomQuestionData,
+ [APPRENTICE_FUNC_ANSWERED_QUESTION] = IncrementQuestionsAnswered,
+ [APPRENTICE_FUNC_IS_FINAL_QUESTION] = IsFinalQuestion,
+ [APPRENTICE_FUNC_MENU] = Script_CreateApprenticeMenu,
+ [APPRENTICE_FUNC_PRINT_MSG] = Script_PrintApprenticeMessage,
+ [APPRENTICE_FUNC_RESET] = Script_ResetPlayerApprentice,
+ [APPRENTICE_FUNC_CHECK_GONE] = GetShouldCheckApprenticeGone,
+ [APPRENTICE_FUNC_GET_QUESTION] = ApprenticeGetQuestion,
+ [APPRENTICE_FUNC_GET_NUM_PARTY_MONS] = GetNumApprenticePartyMonsAssigned,
+ [APPRENTICE_FUNC_SET_PARTY_MON] = SetApprenticePartyMon,
+ [APPRENTICE_FUNC_INIT_QUESTION_DATA] = InitQuestionData,
+ [APPRENTICE_FUNC_FREE_QUESTION_DATA] = FreeQuestionData,
+ [APPRENTICE_FUNC_BUFFER_STRING] = ApprenticeBufferString,
+ [APPRENTICE_FUNC_SET_MOVE] = SetApprenticeMonMove,
+ [APPRENTICE_FUNC_SET_LEAD_MON] = SetLeadApprenticeMon,
+ [APPRENTICE_FUNC_OPEN_BAG] = Script_ApprenticeOpenBagMenu,
+ [APPRENTICE_FUNC_TRY_SET_HELD_ITEM] = TrySetApprenticeHeldItem,
+ [APPRENTICE_FUNC_SAVE] = SaveApprentice,
+ [APPRENTICE_FUNC_SET_GFX_SAVED] = SetSavedApprenticeTrainerGfxId,
+ [APPRENTICE_FUNC_SET_GFX] = SetPlayerApprenticeTrainerGfxId,
+ [APPRENTICE_FUNC_SHOULD_LEAVE] = GetShouldApprenticeLeave,
+ [APPRENTICE_FUNC_SHIFT_SAVED] = ShiftSavedApprentices,
+};
+
+// The first Apprentice can only be one of these
+static const u8 sInitialApprenticeIds[8] = {0, 1, 2, 3, 6, 7, 8, 9};
diff --git a/src/data/battle_frontier/battle_frontier_exchange_corner.h b/src/data/battle_frontier/battle_frontier_exchange_corner.h
new file mode 100644
index 000000000..d29dbdc44
--- /dev/null
+++ b/src/data/battle_frontier/battle_frontier_exchange_corner.h
@@ -0,0 +1,99 @@
+static const u16 sFrontierExchangeCorner_Decor1[] =
+{
+ DECOR_KISS_POSTER,
+ DECOR_KISS_CUSHION,
+ DECOR_SMOOCHUM_DOLL,
+ DECOR_TOGEPI_DOLL,
+ DECOR_MEOWTH_DOLL,
+ DECOR_CLEFAIRY_DOLL,
+ DECOR_DITTO_DOLL,
+ DECOR_CYNDAQUIL_DOLL,
+ DECOR_CHIKORITA_DOLL,
+ DECOR_TOTODILE_DOLL,
+ 0xFFFF
+};
+
+static const u16 sFrontierExchangeCorner_Decor2[] =
+{
+ DECOR_LAPRAS_DOLL,
+ DECOR_SNORLAX_DOLL,
+ DECOR_VENUSAUR_DOLL,
+ DECOR_CHARIZARD_DOLL,
+ DECOR_BLASTOISE_DOLL,
+ 0xFFFF
+};
+
+static const u16 sFrontierExchangeCorner_Vitamins[] =
+{
+ ITEM_PROTEIN,
+ ITEM_CALCIUM,
+ ITEM_IRON,
+ ITEM_ZINC,
+ ITEM_CARBOS,
+ ITEM_HP_UP,
+ 0xFFFF
+};
+
+static const u16 sFrontierExchangeCorner_HoldItems[] =
+{
+ ITEM_LEFTOVERS,
+ ITEM_WHITE_HERB,
+ ITEM_QUICK_CLAW,
+ ITEM_MENTAL_HERB,
+ ITEM_BRIGHT_POWDER,
+ ITEM_CHOICE_BAND,
+ ITEM_KINGS_ROCK,
+ ITEM_FOCUS_BAND,
+ ITEM_SCOPE_LENS,
+ 0xFFFF
+};
+
+static const u8 *const sFrontierExchangeCorner_Decor1Descriptions[] =
+{
+ BattleFrontier_ExchangeServiceCorner_Text_KissPosterDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_KissCushionDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_SmoochumDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_TogepiDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_MeowthDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_ClefairyDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_DittoDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_CyndaquilDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_ChikoritaDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_TotodileDollDesc,
+ gText_Exit,
+};
+
+static const u8 *const sFrontierExchangeCorner_Decor2Descriptions[] =
+{
+ BattleFrontier_ExchangeServiceCorner_Text_LargeDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_LargeDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_LargeDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_LargeDollDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_LargeDollDesc,
+ gText_Exit
+};
+
+static const u8 *const sFrontierExchangeCorner_VitaminsDescriptions[] =
+{
+ BattleFrontier_ExchangeServiceCorner_Text_ProteinDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_CalciumDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_IronDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_ZincDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_CarbosDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_HPUpDesc,
+ gText_Exit
+};
+
+static const u8 *const sFrontierExchangeCorner_HoldItemsDescriptions[] =
+{
+ BattleFrontier_ExchangeServiceCorner_Text_LeftoversDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_WhiteHerbDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_QuickClawDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_MentalHerbDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_BrightpowderDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_ChoiceBandDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_KingsRockDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_FocusBandDesc,
+ BattleFrontier_ExchangeServiceCorner_Text_ScopeLensDesc,
+ gText_Exit
+};
diff --git a/src/data/battle_frontier/battle_frontier_mons.h b/src/data/battle_frontier/battle_frontier_mons.h
index 44cfb8036..d94d6acaf 100644
--- a/src/data/battle_frontier/battle_frontier_mons.h
+++ b/src/data/battle_frontier/battle_frontier_mons.h
@@ -1,6173 +1,6173 @@
-const struct FacilityMon gBattleFrontierMons[] =
+const struct FacilityMon gBattleFrontierMons[NUM_FRONTIER_MONS] =
{
- [0] = {
+ [FRONTIER_MON_SUNKERN] = {
.species = SPECIES_SUNKERN,
.moves = {MOVE_MEGA_DRAIN, MOVE_HELPING_HAND, MOVE_SUNNY_DAY, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [1] = {
+ [FRONTIER_MON_AZURILL] = {
.species = SPECIES_AZURILL,
.moves = {MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SING, MOVE_CHARM},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RASH
},
- [2] = {
+ [FRONTIER_MON_CATERPIE] = {
.species = SPECIES_CATERPIE,
.moves = {MOVE_TACKLE, MOVE_STRING_SHOT, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [3] = {
+ [FRONTIER_MON_WEEDLE] = {
.species = SPECIES_WEEDLE,
.moves = {MOVE_POISON_STING, MOVE_STRING_SHOT, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [4] = {
+ [FRONTIER_MON_WURMPLE] = {
.species = SPECIES_WURMPLE,
.moves = {MOVE_TACKLE, MOVE_STRING_SHOT, MOVE_POISON_STING, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [5] = {
+ [FRONTIER_MON_RALTS] = {
.species = SPECIES_RALTS,
.moves = {MOVE_CONFUSION, MOVE_IMPRISON, MOVE_DOUBLE_TEAM, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [6] = {
+ [FRONTIER_MON_MAGIKARP] = {
.species = SPECIES_MAGIKARP,
.moves = {MOVE_FLAIL, MOVE_NONE, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [7] = {
+ [FRONTIER_MON_FEEBAS] = {
.species = SPECIES_FEEBAS,
.moves = {MOVE_FLAIL, MOVE_MIRROR_COAT, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [8] = {
+ [FRONTIER_MON_METAPOD] = {
.species = SPECIES_METAPOD,
.moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BASHFUL
},
- [9] = {
+ [FRONTIER_MON_KAKUNA] = {
.species = SPECIES_KAKUNA,
.moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BASHFUL
},
- [10] = {
+ [FRONTIER_MON_PICHU] = {
.species = SPECIES_PICHU,
.moves = {MOVE_SWEET_KISS, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SHOCK_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RASH
},
- [11] = {
+ [FRONTIER_MON_SILCOON] = {
.species = SPECIES_SILCOON,
.moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BASHFUL
},
- [12] = {
+ [FRONTIER_MON_CASCOON] = {
.species = SPECIES_CASCOON,
.moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BASHFUL
},
- [13] = {
+ [FRONTIER_MON_IGGLYBUFF] = {
.species = SPECIES_IGGLYBUFF,
.moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_ATTRACT, MOVE_SEISMIC_TOSS},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [14] = {
+ [FRONTIER_MON_WOOPER] = {
.species = SPECIES_WOOPER,
.moves = {MOVE_YAWN, MOVE_DIG, MOVE_WATER_PULSE, MOVE_RAIN_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [15] = {
+ [FRONTIER_MON_TYROGUE] = {
.species = SPECIES_TYROGUE,
.moves = {MOVE_MACH_PUNCH, MOVE_PROTECT, MOVE_DOUBLE_TEAM, MOVE_FACADE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [16] = {
+ [FRONTIER_MON_SENTRET] = {
.species = SPECIES_SENTRET,
.moves = {MOVE_QUICK_ATTACK, MOVE_FOLLOW_ME, MOVE_HELPING_HAND, MOVE_ASSIST},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [17] = {
+ [FRONTIER_MON_CLEFFA] = {
.species = SPECIES_CLEFFA,
.moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_ATTRACT, MOVE_METRONOME},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SERIOUS
},
- [18] = {
+ [FRONTIER_MON_SEEDOT] = {
.species = SPECIES_SEEDOT,
.moves = {MOVE_BULLET_SEED, MOVE_BIDE, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [19] = {
+ [FRONTIER_MON_LOTAD] = {
.species = SPECIES_LOTAD,
.moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_SUNNY_DAY, MOVE_MEGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [20] = {
+ [FRONTIER_MON_POOCHYENA] = {
.species = SPECIES_POOCHYENA,
.moves = {MOVE_CRUNCH, MOVE_SWAGGER, MOVE_ROAR, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [21] = {
+ [FRONTIER_MON_SHEDINJA] = {
.species = SPECIES_SHEDINJA,
.moves = {MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_SILVER_WIND, MOVE_GRUDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_NAIVE
},
- [22] = {
+ [FRONTIER_MON_MAKUHITA] = {
.species = SPECIES_MAKUHITA,
.moves = {MOVE_FAKE_OUT, MOVE_SEISMIC_TOSS, MOVE_DETECT, MOVE_WHIRLWIND},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [23] = {
+ [FRONTIER_MON_WHISMUR] = {
.species = SPECIES_WHISMUR,
.moves = {MOVE_UPROAR, MOVE_SWAGGER, MOVE_BODY_SLAM, MOVE_SMELLING_SALT},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [24] = {
+ [FRONTIER_MON_ZIGZAGOON] = {
.species = SPECIES_ZIGZAGOON,
.moves = {MOVE_HEADBUTT, MOVE_PIN_MISSILE, MOVE_SWIFT, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_TIMID
},
- [25] = {
+ [FRONTIER_MON_ZUBAT] = {
.species = SPECIES_ZUBAT,
.moves = {MOVE_POISON_FANG, MOVE_WHIRLWIND, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [26] = {
+ [FRONTIER_MON_TOGEPI] = {
.species = SPECIES_TOGEPI,
.moves = {MOVE_RETURN, MOVE_YAWN, MOVE_WISH, MOVE_SWEET_KISS},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [27] = {
+ [FRONTIER_MON_SPINARAK] = {
.species = SPECIES_SPINARAK,
.moves = {MOVE_SIGNAL_BEAM, MOVE_NIGHT_SHADE, MOVE_SPIDER_WEB, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [28] = {
+ [FRONTIER_MON_MARILL] = {
.species = SPECIES_MARILL,
.moves = {MOVE_WATER_PULSE, MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_RETURN},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_GENTLE
},
- [29] = {
+ [FRONTIER_MON_HOPPIP] = {
.species = SPECIES_HOPPIP,
.moves = {MOVE_MEGA_DRAIN, MOVE_LEECH_SEED, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_LAX
},
- [30] = {
+ [FRONTIER_MON_SLUGMA] = {
.species = SPECIES_SLUGMA,
.moves = {MOVE_EMBER, MOVE_ROCK_SLIDE, MOVE_YAWN, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [31] = {
+ [FRONTIER_MON_SWINUB] = {
.species = SPECIES_SWINUB,
.moves = {MOVE_ICY_WIND, MOVE_DIG, MOVE_ROCK_TOMB, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_GENTLE
},
- [32] = {
+ [FRONTIER_MON_SMEARGLE] = {
.species = SPECIES_SMEARGLE,
.moves = {MOVE_EXTREME_SPEED, MOVE_FAKE_OUT, MOVE_QUICK_ATTACK, MOVE_MACH_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [33] = {
+ [FRONTIER_MON_PIDGEY] = {
.species = SPECIES_PIDGEY,
.moves = {MOVE_GUST, MOVE_SAND_ATTACK, MOVE_WHIRLWIND, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [34] = {
+ [FRONTIER_MON_RATTATA] = {
.species = SPECIES_RATTATA,
.moves = {MOVE_HYPER_FANG, MOVE_PURSUIT, MOVE_QUICK_ATTACK, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [35] = {
+ [FRONTIER_MON_WYNAUT] = {
.species = SPECIES_WYNAUT,
.moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_CHARM},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_JOLLY
},
- [36] = {
+ [FRONTIER_MON_SKITTY] = {
.species = SPECIES_SKITTY,
.moves = {MOVE_SING, MOVE_ATTRACT, MOVE_CHARM, MOVE_DOUBLE_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [37] = {
+ [FRONTIER_MON_SPEAROW] = {
.species = SPECIES_SPEAROW,
.moves = {MOVE_FURY_ATTACK, MOVE_PURSUIT, MOVE_MIRROR_MOVE, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [38] = {
+ [FRONTIER_MON_HOOTHOOT] = {
.species = SPECIES_HOOTHOOT,
.moves = {MOVE_CONFUSION, MOVE_HYPNOSIS, MOVE_SUPERSONIC, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [39] = {
+ [FRONTIER_MON_DIGLETT] = {
.species = SPECIES_DIGLETT,
.moves = {MOVE_MAGNITUDE, MOVE_SLASH, MOVE_ROCK_TOMB, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAIVE
},
- [40] = {
+ [FRONTIER_MON_LEDYBA] = {
.species = SPECIES_LEDYBA,
.moves = {MOVE_PSYBEAM, MOVE_AGILITY, MOVE_BATON_PASS, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BASHFUL
},
- [41] = {
+ [FRONTIER_MON_NINCADA] = {
.species = SPECIES_NINCADA,
.moves = {MOVE_MUD_SLAP, MOVE_DIG, MOVE_TOXIC, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [42] = {
+ [FRONTIER_MON_SURSKIT] = {
.species = SPECIES_SURSKIT,
.moves = {MOVE_BUBBLE_BEAM, MOVE_RAIN_DANCE, MOVE_SWEET_SCENT, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [43] = {
+ [FRONTIER_MON_JIGGLYPUFF] = {
.species = SPECIES_JIGGLYPUFF,
.moves = {MOVE_SING, MOVE_WISH, MOVE_MIMIC, MOVE_DOUBLE_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [44] = {
+ [FRONTIER_MON_TAILLOW] = {
.species = SPECIES_TAILLOW,
.moves = {MOVE_FLY, MOVE_QUICK_ATTACK, MOVE_ENDEAVOR, MOVE_FOCUS_ENERGY},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_GENTLE
},
- [45] = {
+ [FRONTIER_MON_WINGULL] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_WATER_PULSE, MOVE_FLY, MOVE_QUICK_ATTACK, MOVE_STEEL_WING},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [46] = {
+ [FRONTIER_MON_NIDORAN_M] = {
.species = SPECIES_NIDORAN_M,
.moves = {MOVE_DOUBLE_KICK, MOVE_POISON_STING, MOVE_DISABLE, MOVE_HELPING_HAND},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [47] = {
+ [FRONTIER_MON_NIDORAN_F] = {
.species = SPECIES_NIDORAN_F,
.moves = {MOVE_CRUNCH, MOVE_DOUBLE_KICK, MOVE_FLATTER, MOVE_HELPING_HAND},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [48] = {
+ [FRONTIER_MON_KIRLIA] = {
.species = SPECIES_KIRLIA,
.moves = {MOVE_CONFUSION, MOVE_WILL_O_WISP, MOVE_FUTURE_SIGHT, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [49] = {
+ [FRONTIER_MON_MAREEP] = {
.species = SPECIES_MAREEP,
.moves = {MOVE_SHOCK_WAVE, MOVE_FLASH, MOVE_REFLECT, MOVE_COTTON_SPORE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [50] = {
+ [FRONTIER_MON_MEDITITE] = {
.species = SPECIES_MEDITITE,
.moves = {MOVE_HI_JUMP_KICK, MOVE_MEDITATE, MOVE_SWAGGER, MOVE_PSYCH_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [51] = {
+ [FRONTIER_MON_SLAKOTH] = {
.species = SPECIES_SLAKOTH,
.moves = {MOVE_YAWN, MOVE_SCRATCH, MOVE_ENCORE, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [52] = {
+ [FRONTIER_MON_PARAS] = {
.species = SPECIES_PARAS,
.moves = {MOVE_SPORE, MOVE_LEECH_LIFE, MOVE_SLASH, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [53] = {
+ [FRONTIER_MON_EKANS] = {
.species = SPECIES_EKANS,
.moves = {MOVE_ACID, MOVE_DIG, MOVE_SCREECH, MOVE_TORMENT},
.itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [54] = {
+ [FRONTIER_MON_DITTO] = {
.species = SPECIES_DITTO,
.moves = {MOVE_TRANSFORM, MOVE_NONE, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_METAL_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [55] = {
+ [FRONTIER_MON_BARBOACH] = {
.species = SPECIES_BARBOACH,
.moves = {MOVE_MAGNITUDE, MOVE_WATER_PULSE, MOVE_SPARK, MOVE_FUTURE_SIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_BASHFUL
},
- [56] = {
+ [FRONTIER_MON_MEOWTH] = {
.species = SPECIES_MEOWTH,
.moves = {MOVE_SLASH, MOVE_BITE, MOVE_SCREECH, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [57] = {
+ [FRONTIER_MON_PINECO] = {
.species = SPECIES_PINECO,
.moves = {MOVE_SELF_DESTRUCT, MOVE_TAKE_DOWN, MOVE_REFLECT, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [58] = {
+ [FRONTIER_MON_TRAPINCH] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_TOXIC, MOVE_DIG, MOVE_SANDSTORM, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SERIOUS
},
- [59] = {
+ [FRONTIER_MON_SPHEAL] = {
.species = SPECIES_SPHEAL,
.moves = {MOVE_ICE_BALL, MOVE_WATER_PULSE, MOVE_HAIL, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [60] = {
+ [FRONTIER_MON_HORSEA] = {
.species = SPECIES_HORSEA,
.moves = {MOVE_WATER_GUN, MOVE_AGILITY, MOVE_ICY_WIND, MOVE_TWISTER},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [61] = {
+ [FRONTIER_MON_SHROOMISH] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_SPORE, MOVE_BULLET_SEED, MOVE_LEECH_SEED, MOVE_HEADBUTT},
.itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [62] = {
+ [FRONTIER_MON_SHUPPET] = {
.species = SPECIES_SHUPPET,
.moves = {MOVE_WILL_O_WISP, MOVE_NIGHT_SHADE, MOVE_GRUDGE, MOVE_KNOCK_OFF},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RASH
},
- [63] = {
+ [FRONTIER_MON_DUSKULL] = {
.species = SPECIES_DUSKULL,
.moves = {MOVE_SKILL_SWAP, MOVE_NIGHT_SHADE, MOVE_DISABLE, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [64] = {
+ [FRONTIER_MON_ELECTRIKE] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_ROAR, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [65] = {
+ [FRONTIER_MON_VULPIX] = {
.species = SPECIES_VULPIX,
.moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_FIRE_SPIN, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [66] = {
+ [FRONTIER_MON_PIKACHU] = {
.species = SPECIES_PIKACHU,
.moves = {MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_DOUBLE_TEAM, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_LIGHT_BALL,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [67] = {
+ [FRONTIER_MON_SANDSHREW] = {
.species = SPECIES_SANDSHREW,
.moves = {MOVE_DIG, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [68] = {
+ [FRONTIER_MON_POLIWAG] = {
.species = SPECIES_POLIWAG,
.moves = {MOVE_HYPNOSIS, MOVE_ICY_WIND, MOVE_WATER_GUN, MOVE_RAIN_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [69] = {
+ [FRONTIER_MON_BELLSPROUT] = {
.species = SPECIES_BELLSPROUT,
.moves = {MOVE_RAZOR_LEAF, MOVE_ACID, MOVE_STUN_SPORE, MOVE_WRAP},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_LAX
},
- [70] = {
+ [FRONTIER_MON_GEODUDE] = {
.species = SPECIES_GEODUDE,
.moves = {MOVE_MAGNITUDE, MOVE_ROCK_BLAST, MOVE_STRENGTH, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [71] = {
+ [FRONTIER_MON_DRATINI] = {
.species = SPECIES_DRATINI,
.moves = {MOVE_OUTRAGE, MOVE_THUNDER_WAVE, MOVE_SUPERSONIC, MOVE_WATER_PULSE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [72] = {
+ [FRONTIER_MON_SNUBBULL] = {
.species = SPECIES_SNUBBULL,
.moves = {MOVE_BITE, MOVE_CHARM, MOVE_SWAGGER, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [73] = {
+ [FRONTIER_MON_REMORAID] = {
.species = SPECIES_REMORAID,
.moves = {MOVE_BUBBLE_BEAM, MOVE_AURORA_BEAM, MOVE_PSYBEAM, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [74] = {
+ [FRONTIER_MON_LARVITAR] = {
.species = SPECIES_LARVITAR,
.moves = {MOVE_THRASH, MOVE_ROCK_SLIDE, MOVE_DIG, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [75] = {
+ [FRONTIER_MON_BALTOY] = {
.species = SPECIES_BALTOY,
.moves = {MOVE_PSYBEAM, MOVE_ANCIENT_POWER, MOVE_LIGHT_SCREEN, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [76] = {
+ [FRONTIER_MON_SNORUNT] = {
.species = SPECIES_SNORUNT,
.moves = {MOVE_ICY_WIND, MOVE_HEADBUTT, MOVE_LEER, MOVE_BITE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [77] = {
+ [FRONTIER_MON_BAGON] = {
.species = SPECIES_BAGON,
.moves = {MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_BRICK_BREAK, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [78] = {
+ [FRONTIER_MON_BELDUM] = {
.species = SPECIES_BELDUM,
.moves = {MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [79] = {
+ [FRONTIER_MON_GULPIN] = {
.species = SPECIES_GULPIN,
.moves = {MOVE_TOXIC, MOVE_YAWN, MOVE_PAIN_SPLIT, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SERIOUS
},
- [80] = {
+ [FRONTIER_MON_VENONAT] = {
.species = SPECIES_VENONAT,
.moves = {MOVE_PSYBEAM, MOVE_SUPERSONIC, MOVE_STUN_SPORE, MOVE_SKILL_SWAP},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [81] = {
+ [FRONTIER_MON_MANKEY] = {
.species = SPECIES_MANKEY,
.moves = {MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SCREECH, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [82] = {
+ [FRONTIER_MON_MACHOP] = {
.species = SPECIES_MACHOP,
.moves = {MOVE_SEISMIC_TOSS, MOVE_REVENGE, MOVE_ROCK_TOMB, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [83] = {
+ [FRONTIER_MON_SHELLDER] = {
.species = SPECIES_SHELLDER,
.moves = {MOVE_ICICLE_SPEAR, MOVE_SUPERSONIC, MOVE_CLAMP, MOVE_WITHDRAW},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [84] = {
+ [FRONTIER_MON_SMOOCHUM] = {
.species = SPECIES_SMOOCHUM,
.moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_MUD_SLAP, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [85] = {
+ [FRONTIER_MON_NUMEL] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_EMBER, MOVE_MAGNITUDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [86] = {
+ [FRONTIER_MON_CARVANHA] = {
.species = SPECIES_CARVANHA,
.moves = {MOVE_BITE, MOVE_SCREECH, MOVE_SCARY_FACE, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [87] = {
+ [FRONTIER_MON_CORPHISH] = {
.species = SPECIES_CORPHISH,
.moves = {MOVE_CRABHAMMER, MOVE_WATER_PULSE, MOVE_MUD_SLAP, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [88] = {
+ [FRONTIER_MON_CHARMANDER] = {
.species = SPECIES_CHARMANDER,
.moves = {MOVE_FIRE_SPIN, MOVE_METAL_CLAW, MOVE_SMOKESCREEN, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [89] = {
+ [FRONTIER_MON_CYNDAQUIL] = {
.species = SPECIES_CYNDAQUIL,
.moves = {MOVE_EMBER, MOVE_SWIFT, MOVE_QUICK_ATTACK, MOVE_SMOKESCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [90] = {
+ [FRONTIER_MON_ABRA] = {
.species = SPECIES_ABRA,
.moves = {MOVE_MIMIC, MOVE_METRONOME, MOVE_FLASH, MOVE_SEISMIC_TOSS},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [91] = {
+ [FRONTIER_MON_DODUO] = {
.species = SPECIES_DODUO,
.moves = {MOVE_FURY_ATTACK, MOVE_UPROAR, MOVE_MUD_SLAP, MOVE_FAINT_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [92] = {
+ [FRONTIER_MON_GASTLY] = {
.species = SPECIES_GASTLY,
.moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_NIGHT_SHADE, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [93] = {
+ [FRONTIER_MON_SWABLU] = {
.species = SPECIES_SWABLU,
.moves = {MOVE_TAKE_DOWN, MOVE_DREAM_EATER, MOVE_SING, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [94] = {
+ [FRONTIER_MON_TREECKO] = {
.species = SPECIES_TREECKO,
.moves = {MOVE_BULLET_SEED, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_LONELY
},
- [95] = {
+ [FRONTIER_MON_TORCHIC] = {
.species = SPECIES_TORCHIC,
.moves = {MOVE_FIRE_SPIN, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [96] = {
+ [FRONTIER_MON_MUDKIP] = {
.species = SPECIES_MUDKIP,
.moves = {MOVE_WHIRLPOOL, MOVE_ENDEAVOR, MOVE_MUD_SPORT, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [97] = {
+ [FRONTIER_MON_SQUIRTLE] = {
.species = SPECIES_SQUIRTLE,
.moves = {MOVE_WATER_PULSE, MOVE_BITE, MOVE_WITHDRAW, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [98] = {
+ [FRONTIER_MON_TOTODILE] = {
.species = SPECIES_TOTODILE,
.moves = {MOVE_SLASH, MOVE_WATER_PULSE, MOVE_SCREECH, MOVE_ICY_WIND},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [99] = {
+ [FRONTIER_MON_SLOWPOKE] = {
.species = SPECIES_SLOWPOKE,
.moves = {MOVE_CONFUSION, MOVE_DISABLE, MOVE_WATER_PULSE, MOVE_YAWN},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [100] = {
+ [FRONTIER_MON_BULBASAUR] = {
.species = SPECIES_BULBASAUR,
.moves = {MOVE_RAZOR_LEAF, MOVE_SWEET_SCENT, MOVE_SLEEP_POWDER, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [101] = {
+ [FRONTIER_MON_CHIKORITA] = {
.species = SPECIES_CHIKORITA,
.moves = {MOVE_SECRET_POWER, MOVE_BULLET_SEED, MOVE_MUD_SLAP, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [102] = {
+ [FRONTIER_MON_ODDISH] = {
.species = SPECIES_ODDISH,
.moves = {MOVE_ACID, MOVE_STUN_SPORE, MOVE_SWEET_SCENT, MOVE_MOONLIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [103] = {
+ [FRONTIER_MON_PSYDUCK] = {
.species = SPECIES_PSYDUCK,
.moves = {MOVE_CONFUSION, MOVE_FURY_SWIPES, MOVE_AERIAL_ACE, MOVE_DISABLE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HASTY
},
- [104] = {
+ [FRONTIER_MON_CUBONE] = {
.species = SPECIES_CUBONE,
.moves = {MOVE_BONE_CLUB, MOVE_HEADBUTT, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [105] = {
+ [FRONTIER_MON_GOLDEEN] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_WATERFALL, MOVE_FURY_ATTACK, MOVE_AGILITY, MOVE_PSYBEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [106] = {
+ [FRONTIER_MON_NATU] = {
.species = SPECIES_NATU,
.moves = {MOVE_NIGHT_SHADE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_FLASH},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [107] = {
+ [FRONTIER_MON_CLEFAIRY] = {
.species = SPECIES_CLEFAIRY,
.moves = {MOVE_FOLLOW_ME, MOVE_RETURN, MOVE_ENCORE, MOVE_SING},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [108] = {
+ [FRONTIER_MON_MAGNEMITE] = {
.species = SPECIES_MAGNEMITE,
.moves = {MOVE_SHOCK_WAVE, MOVE_SUPERSONIC, MOVE_METAL_SOUND, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_GENTLE
},
- [109] = {
+ [FRONTIER_MON_SEEL] = {
.species = SPECIES_SEEL,
.moves = {MOVE_AURORA_BEAM, MOVE_DIVE, MOVE_BODY_SLAM, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [110] = {
+ [FRONTIER_MON_GRIMER] = {
.species = SPECIES_GRIMER,
.moves = {MOVE_SLUDGE, MOVE_ROCK_TOMB, MOVE_ACID_ARMOR, MOVE_MINIMIZE},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [111] = {
+ [FRONTIER_MON_KRABBY] = {
.species = SPECIES_KRABBY,
.moves = {MOVE_CRABHAMMER, MOVE_MUD_SHOT, MOVE_FLAIL, MOVE_KNOCK_OFF},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [112] = {
+ [FRONTIER_MON_EXEGGCUTE] = {
.species = SPECIES_EXEGGCUTE,
.moves = {MOVE_CONFUSION, MOVE_ANCIENT_POWER, MOVE_LEECH_SEED, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [113] = {
+ [FRONTIER_MON_EEVEE] = {
.species = SPECIES_EEVEE,
.moves = {MOVE_CHARM, MOVE_ATTRACT, MOVE_FLAIL, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [114] = {
+ [FRONTIER_MON_DROWZEE] = {
.species = SPECIES_DROWZEE,
.moves = {MOVE_CONFUSION, MOVE_HEADBUTT, MOVE_DISABLE, MOVE_BARRIER},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [115] = {
+ [FRONTIER_MON_VOLTORB] = {
.species = SPECIES_VOLTORB,
.moves = {MOVE_SPARK, MOVE_SCREECH, MOVE_ROLLOUT, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [116] = {
+ [FRONTIER_MON_CHINCHOU] = {
.species = SPECIES_CHINCHOU,
.moves = {MOVE_SPARK, MOVE_DIVE, MOVE_CONFUSE_RAY, MOVE_TAKE_DOWN},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [117] = {
+ [FRONTIER_MON_TEDDIURSA] = {
.species = SPECIES_TEDDIURSA,
.moves = {MOVE_SECRET_POWER, MOVE_FAKE_TEARS, MOVE_FAINT_ATTACK, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [118] = {
+ [FRONTIER_MON_DELIBIRD] = {
.species = SPECIES_DELIBIRD,
.moves = {MOVE_PRESENT, MOVE_ICE_BALL, MOVE_AERIAL_ACE, MOVE_HAIL},
.itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [119] = {
+ [FRONTIER_MON_HOUNDOUR] = {
.species = SPECIES_HOUNDOUR,
.moves = {MOVE_CRUNCH, MOVE_EMBER, MOVE_ROAR, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [120] = {
+ [FRONTIER_MON_PHANPY] = {
.species = SPECIES_PHANPY,
.moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_ROCK_TOMB, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [121] = {
+ [FRONTIER_MON_SPOINK] = {
.species = SPECIES_SPOINK,
.moves = {MOVE_PSYWAVE, MOVE_BOUNCE, MOVE_MAGIC_COAT, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [122] = {
+ [FRONTIER_MON_ARON] = {
.species = SPECIES_ARON,
.moves = {MOVE_METAL_CLAW, MOVE_AERIAL_ACE, MOVE_METAL_SOUND, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [123] = {
+ [FRONTIER_MON_LUVDISC] = {
.species = SPECIES_LUVDISC,
.moves = {MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_DIVE, MOVE_RAIN_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [124] = {
+ [FRONTIER_MON_TENTACOOL] = {
.species = SPECIES_TENTACOOL,
.moves = {MOVE_BUBBLE_BEAM, MOVE_ACID, MOVE_BARRIER, MOVE_WRAP},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [125] = {
+ [FRONTIER_MON_CACNEA] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_NEEDLE_ARM, MOVE_FAINT_ATTACK, MOVE_COTTON_SPORE, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [126] = {
+ [FRONTIER_MON_UNOWN] = {
.species = SPECIES_UNOWN,
.moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [127] = {
+ [FRONTIER_MON_KOFFING] = {
.species = SPECIES_KOFFING,
.moves = {MOVE_SLUDGE, MOVE_SMOKESCREEN, MOVE_TORMENT, MOVE_HAZE},
.itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [128] = {
+ [FRONTIER_MON_STARYU] = {
.species = SPECIES_STARYU,
.moves = {MOVE_BUBBLE_BEAM, MOVE_MINIMIZE, MOVE_SWIFT, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [129] = {
+ [FRONTIER_MON_SKIPLOOM] = {
.species = SPECIES_SKIPLOOM,
.moves = {MOVE_MEGA_DRAIN, MOVE_CONFUSION, MOVE_COTTON_SPORE, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [130] = {
+ [FRONTIER_MON_NUZLEAF] = {
.species = SPECIES_NUZLEAF,
.moves = {MOVE_EXTRASENSORY, MOVE_FAKE_OUT, MOVE_RAZOR_WIND, MOVE_FAINT_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [131] = {
+ [FRONTIER_MON_LOMBRE] = {
.species = SPECIES_LOMBRE,
.moves = {MOVE_WATER_PULSE, MOVE_FAKE_OUT, MOVE_BRICK_BREAK, MOVE_ABSORB},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [132] = {
+ [FRONTIER_MON_VIBRAVA] = {
.species = SPECIES_VIBRAVA,
.moves = {MOVE_DRAGON_BREATH, MOVE_DIG, MOVE_SCREECH, MOVE_ROCK_TOMB},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [133] = {
+ [FRONTIER_MON_RHYHORN] = {
.species = SPECIES_RHYHORN,
.moves = {MOVE_ROCK_BLAST, MOVE_DIG, MOVE_SCARY_FACE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [134] = {
+ [FRONTIER_MON_CLAMPERL] = {
.species = SPECIES_CLAMPERL,
.moves = {MOVE_DIVE, MOVE_TOXIC, MOVE_IRON_DEFENSE, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_DEEP_SEA_SCALE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [135] = {
+ [FRONTIER_MON_PIDGEOTTO] = {
.species = SPECIES_PIDGEOTTO,
.moves = {MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_FEATHER_DANCE, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [136] = {
+ [FRONTIER_MON_GROWLITHE] = {
.species = SPECIES_GROWLITHE,
.moves = {MOVE_FLAME_WHEEL, MOVE_BITE, MOVE_ROAR, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [137] = {
+ [FRONTIER_MON_FARFETCHD] = {
.species = SPECIES_FARFETCHD,
.moves = {MOVE_SLASH, MOVE_KNOCK_OFF, MOVE_SWORDS_DANCE, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_STICK,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [138] = {
+ [FRONTIER_MON_OMANYTE] = {
.species = SPECIES_OMANYTE,
.moves = {MOVE_MUD_SHOT, MOVE_WATER_GUN, MOVE_ANCIENT_POWER, MOVE_TICKLE},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [139] = {
+ [FRONTIER_MON_KABUTO] = {
.species = SPECIES_KABUTO,
.moves = {MOVE_MEGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_SAND_ATTACK, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [140] = {
+ [FRONTIER_MON_LILEEP] = {
.species = SPECIES_LILEEP,
.moves = {MOVE_ANCIENT_POWER, MOVE_ACID, MOVE_INGRAIN, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [141] = {
+ [FRONTIER_MON_ANORITH] = {
.species = SPECIES_ANORITH,
.moves = {MOVE_METAL_CLAW, MOVE_FURY_CUTTER, MOVE_ANCIENT_POWER, MOVE_WATER_GUN},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [142] = {
+ [FRONTIER_MON_AIPOM] = {
.species = SPECIES_AIPOM,
.moves = {MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_BATON_PASS, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [143] = {
+ [FRONTIER_MON_ELEKID] = {
.species = SPECIES_ELEKID,
.moves = {MOVE_THUNDER_PUNCH, MOVE_QUICK_ATTACK, MOVE_SWIFT, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAIVE
},
- [144] = {
+ [FRONTIER_MON_LOUDRED] = {
.species = SPECIES_LOUDRED,
.moves = {MOVE_STOMP, MOVE_HOWL, MOVE_ASTONISH, MOVE_SUPERSONIC},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [145] = {
+ [FRONTIER_MON_SPINDA] = {
.species = SPECIES_SPINDA,
.moves = {MOVE_DIZZY_PUNCH, MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FAINT_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [146] = {
+ [FRONTIER_MON_NIDORINA] = {
.species = SPECIES_NIDORINA,
.moves = {MOVE_DOUBLE_KICK, MOVE_BITE, MOVE_AERIAL_ACE, MOVE_FLATTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [147] = {
+ [FRONTIER_MON_NIDORINO] = {
.species = SPECIES_NIDORINO,
.moves = {MOVE_DOUBLE_KICK, MOVE_WATER_PULSE, MOVE_MUD_SLAP, MOVE_FLATTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [148] = {
+ [FRONTIER_MON_FLAAFFY] = {
.species = SPECIES_FLAAFFY,
.moves = {MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MILD
},
- [149] = {
+ [FRONTIER_MON_MAGBY] = {
.species = SPECIES_MAGBY,
.moves = {MOVE_FIRE_PUNCH, MOVE_SMOKESCREEN, MOVE_CONFUSE_RAY, MOVE_SMOG},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [150] = {
+ [FRONTIER_MON_NOSEPASS] = {
.species = SPECIES_NOSEPASS,
.moves = {MOVE_ROCK_SLIDE, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [151] = {
+ [FRONTIER_MON_CORSOLA] = {
.species = SPECIES_CORSOLA,
.moves = {MOVE_BUBBLE_BEAM, MOVE_MIRROR_COAT, MOVE_ATTRACT, MOVE_ANCIENT_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [152] = {
+ [FRONTIER_MON_MAWILE] = {
.species = SPECIES_MAWILE,
.moves = {MOVE_CRUNCH, MOVE_FAKE_TEARS, MOVE_IRON_DEFENSE, MOVE_BATON_PASS},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [153] = {
+ [FRONTIER_MON_BUTTERFREE] = {
.species = SPECIES_BUTTERFREE,
.moves = {MOVE_SILVER_WIND, MOVE_PSYBEAM, MOVE_TOXIC, MOVE_WHIRLWIND},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [154] = {
+ [FRONTIER_MON_BEEDRILL] = {
.species = SPECIES_BEEDRILL,
.moves = {MOVE_TWINEEDLE, MOVE_PURSUIT, MOVE_ENDEAVOR, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [155] = {
+ [FRONTIER_MON_POLIWHIRL] = {
.species = SPECIES_POLIWHIRL,
.moves = {MOVE_WATER_PULSE, MOVE_DOUBLE_SLAP, MOVE_ICY_WIND, MOVE_RAIN_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [156] = {
+ [FRONTIER_MON_ONIX] = {
.species = SPECIES_ONIX,
.moves = {MOVE_ROCK_SLIDE, MOVE_BIND, MOVE_DRAGON_BREATH, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [157] = {
+ [FRONTIER_MON_BEAUTIFLY] = {
.species = SPECIES_BEAUTIFLY,
.moves = {MOVE_SILVER_WIND, MOVE_MEGA_DRAIN, MOVE_ATTRACT, MOVE_WHIRLWIND},
.itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [158] = {
+ [FRONTIER_MON_DUSTOX] = {
.species = SPECIES_DUSTOX,
.moves = {MOVE_SILVER_WIND, MOVE_TOXIC, MOVE_PSYBEAM, MOVE_WHIRLWIND},
.itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [159] = {
+ [FRONTIER_MON_LEDIAN] = {
.species = SPECIES_LEDIAN,
.moves = {MOVE_COMET_PUNCH, MOVE_BATON_PASS, MOVE_SWORDS_DANCE, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_BASHFUL
},
- [160] = {
+ [FRONTIER_MON_ARIADOS] = {
.species = SPECIES_ARIADOS,
.moves = {MOVE_SIGNAL_BEAM, MOVE_SPIDER_WEB, MOVE_NIGHT_SHADE, MOVE_TOXIC},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SERIOUS
},
- [161] = {
+ [FRONTIER_MON_YANMA] = {
.species = SPECIES_YANMA,
.moves = {MOVE_SIGNAL_BEAM, MOVE_AERIAL_ACE, MOVE_DOUBLE_TEAM, MOVE_DETECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_RELAXED
},
- [162] = {
+ [FRONTIER_MON_DELCATTY_1] = {
.species = SPECIES_DELCATTY,
.moves = {MOVE_SECRET_POWER, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_HEAL_BELL},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [163] = {
+ [FRONTIER_MON_SABLEYE_1] = {
.species = SPECIES_SABLEYE,
.moves = {MOVE_FAINT_ATTACK, MOVE_CONFUSE_RAY, MOVE_KNOCK_OFF, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [164] = {
+ [FRONTIER_MON_LICKITUNG_1] = {
.species = SPECIES_LICKITUNG,
.moves = {MOVE_SLAM, MOVE_BRICK_BREAK, MOVE_LICK, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [165] = {
+ [FRONTIER_MON_WEEPINBELL_1] = {
.species = SPECIES_WEEPINBELL,
.moves = {MOVE_RAZOR_LEAF, MOVE_ACID, MOVE_WRAP, MOVE_SWEET_SCENT},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [166] = {
+ [FRONTIER_MON_GRAVELER_1] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_MAGNITUDE, MOVE_ROCK_THROW, MOVE_DEFENSE_CURL, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [167] = {
+ [FRONTIER_MON_GLOOM_1] = {
.species = SPECIES_GLOOM,
.moves = {MOVE_PETAL_DANCE, MOVE_ACID, MOVE_STUN_SPORE, MOVE_MOONLIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [168] = {
+ [FRONTIER_MON_PORYGON_1] = {
.species = SPECIES_PORYGON,
.moves = {MOVE_PSYBEAM, MOVE_ICY_WIND, MOVE_RECYCLE, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [169] = {
+ [FRONTIER_MON_KADABRA_1] = {
.species = SPECIES_KADABRA,
.moves = {MOVE_CONFUSION, MOVE_ROLE_PLAY, MOVE_FUTURE_SIGHT, MOVE_DISABLE},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [170] = {
+ [FRONTIER_MON_WAILMER_1] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_WHIRLPOOL, MOVE_ROAR, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_DOCILE
},
- [171] = {
+ [FRONTIER_MON_ROSELIA_1] = {
.species = SPECIES_ROSELIA,
.moves = {MOVE_MAGICAL_LEAF, MOVE_TOXIC, MOVE_GRASS_WHISTLE, MOVE_COTTON_SPORE},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [172] = {
+ [FRONTIER_MON_VOLBEAT_1] = {
.species = SPECIES_VOLBEAT,
.moves = {MOVE_SILVER_WIND, MOVE_CONFUSE_RAY, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [173] = {
+ [FRONTIER_MON_ILLUMISE_1] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_SILVER_WIND, MOVE_WISH, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [174] = {
+ [FRONTIER_MON_IVYSAUR_1] = {
.species = SPECIES_IVYSAUR,
.moves = {MOVE_PETAL_DANCE, MOVE_GROWTH, MOVE_SWEET_SCENT, MOVE_FURY_CUTTER},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_GENTLE
},
- [175] = {
+ [FRONTIER_MON_CHARMELEON_1] = {
.species = SPECIES_CHARMELEON,
.moves = {MOVE_SLASH, MOVE_FIRE_SPIN, MOVE_SWORDS_DANCE, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [176] = {
+ [FRONTIER_MON_WARTORTLE_1] = {
.species = SPECIES_WARTORTLE,
.moves = {MOVE_WATER_PULSE, MOVE_BITE, MOVE_MUD_SLAP, MOVE_YAWN},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [177] = {
+ [FRONTIER_MON_PARASECT_1] = {
.species = SPECIES_PARASECT,
.moves = {MOVE_SLASH, MOVE_PSYBEAM, MOVE_STUN_SPORE, MOVE_FLASH},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_RASH
},
- [178] = {
+ [FRONTIER_MON_MACHOKE_1] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_LOW_KICK, MOVE_ROCK_TOMB, MOVE_FORESIGHT, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [179] = {
+ [FRONTIER_MON_HAUNTER_1] = {
.species = SPECIES_HAUNTER,
.moves = {MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_SPITE, MOVE_GRUDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RASH
},
- [180] = {
+ [FRONTIER_MON_BAYLEEF_1] = {
.species = SPECIES_BAYLEEF,
.moves = {MOVE_RAZOR_LEAF, MOVE_TOXIC, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [181] = {
+ [FRONTIER_MON_QUILAVA_1] = {
.species = SPECIES_QUILAVA,
.moves = {MOVE_FLAME_WHEEL, MOVE_FURY_SWIPES, MOVE_SWIFT, MOVE_SMOKESCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [182] = {
+ [FRONTIER_MON_CROCONAW_1] = {
.species = SPECIES_CROCONAW,
.moves = {MOVE_SLASH, MOVE_WATER_PULSE, MOVE_BITE, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [183] = {
+ [FRONTIER_MON_TOGETIC_1] = {
.species = SPECIES_TOGETIC,
.moves = {MOVE_AERIAL_ACE, MOVE_MAGICAL_LEAF, MOVE_WISH, MOVE_FOLLOW_ME},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [184] = {
+ [FRONTIER_MON_MURKROW_1] = {
.species = SPECIES_MURKROW,
.moves = {MOVE_FAINT_ATTACK, MOVE_FLY, MOVE_TORMENT, MOVE_TAUNT},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [185] = {
+ [FRONTIER_MON_WOBBUFFET_1] = {
.species = SPECIES_WOBBUFFET,
.moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_CHARM, MOVE_SAFEGUARD},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [186] = {
+ [FRONTIER_MON_PLUSLE_1] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_SPARK, MOVE_FAKE_TEARS, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [187] = {
+ [FRONTIER_MON_MINUN_1] = {
.species = SPECIES_MINUN,
.moves = {MOVE_SPARK, MOVE_CHARM, MOVE_ENCORE, MOVE_HELPING_HAND},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [188] = {
+ [FRONTIER_MON_GROVYLE_1] = {
.species = SPECIES_GROVYLE,
.moves = {MOVE_FURY_CUTTER, MOVE_ENDEAVOR, MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [189] = {
+ [FRONTIER_MON_COMBUSKEN_1] = {
.species = SPECIES_COMBUSKEN,
.moves = {MOVE_EMBER, MOVE_DOUBLE_KICK, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [190] = {
+ [FRONTIER_MON_MARSHTOMP_1] = {
.species = SPECIES_MARSHTOMP,
.moves = {MOVE_MUD_SHOT, MOVE_WATER_GUN, MOVE_ROCK_TOMB, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [191] = {
+ [FRONTIER_MON_PONYTA_1] = {
.species = SPECIES_PONYTA,
.moves = {MOVE_FIRE_SPIN, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_TAIL_WHIP},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [192] = {
+ [FRONTIER_MON_AZUMARILL_1] = {
.species = SPECIES_AZUMARILL,
.moves = {MOVE_BUBBLE_BEAM, MOVE_FACADE, MOVE_DIG, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_DOCILE
},
- [193] = {
+ [FRONTIER_MON_SUDOWOODO_1] = {
.species = SPECIES_SUDOWOODO,
.moves = {MOVE_ROCK_SLIDE, MOVE_FAINT_ATTACK, MOVE_SANDSTORM, MOVE_BLOCK},
.itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [194] = {
+ [FRONTIER_MON_MAGCARGO_1] = {
.species = SPECIES_MAGCARGO,
.moves = {MOVE_ROCK_SLIDE, MOVE_EMBER, MOVE_ACID_ARMOR, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_GENTLE
},
- [195] = {
+ [FRONTIER_MON_PUPITAR_1] = {
.species = SPECIES_PUPITAR,
.moves = {MOVE_DIG, MOVE_BITE, MOVE_SCARY_FACE, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [196] = {
+ [FRONTIER_MON_SEALEO_1] = {
.species = SPECIES_SEALEO,
.moves = {MOVE_ICE_BALL, MOVE_HAIL, MOVE_SNORE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [197] = {
+ [FRONTIER_MON_RATICATE_1] = {
.species = SPECIES_RATICATE,
.moves = {MOVE_ENDEAVOR, MOVE_PURSUIT, MOVE_SCARY_FACE, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAIVE
},
- [198] = {
+ [FRONTIER_MON_MASQUERAIN_1] = {
.species = SPECIES_MASQUERAIN,
.moves = {MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_ICY_WIND, MOVE_STUN_SPORE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_RELAXED
},
- [199] = {
+ [FRONTIER_MON_FURRET_1] = {
.species = SPECIES_FURRET,
.moves = {MOVE_SLAM, MOVE_PROTECT, MOVE_HELPING_HAND, MOVE_FOLLOW_ME},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_SERIOUS
},
- [200] = {
+ [FRONTIER_MON_DUNSPARCE_1] = {
.species = SPECIES_DUNSPARCE,
.moves = {MOVE_HEADBUTT, MOVE_GLARE, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [201] = {
+ [FRONTIER_MON_DRAGONAIR_1] = {
.species = SPECIES_DRAGONAIR,
.moves = {MOVE_DRAGON_BREATH, MOVE_LEER, MOVE_WRAP, MOVE_SAFEGUARD},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [202] = {
+ [FRONTIER_MON_MIGHTYENA_1] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_BITE, MOVE_POISON_FANG, MOVE_TAUNT, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_TIMID
},
- [203] = {
+ [FRONTIER_MON_LINOONE_1] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_SECRET_POWER, MOVE_SAND_ATTACK, MOVE_COVET, MOVE_TICKLE},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [204] = {
+ [FRONTIER_MON_CASTFORM_1] = {
.species = SPECIES_CASTFORM,
.moves = {MOVE_EMBER, MOVE_WATER_PULSE, MOVE_SHOCK_WAVE, MOVE_ICY_WIND},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HASTY
},
- [205] = {
+ [FRONTIER_MON_SHELGON_1] = {
.species = SPECIES_SHELGON,
.moves = {MOVE_HEADBUTT, MOVE_DRAGON_BREATH, MOVE_PROTECT, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [206] = {
+ [FRONTIER_MON_METANG_1] = {
.species = SPECIES_METANG,
.moves = {MOVE_METAL_CLAW, MOVE_CONFUSION, MOVE_PURSUIT, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [207] = {
+ [FRONTIER_MON_WIGGLYTUFF_1] = {
.species = SPECIES_WIGGLYTUFF,
.moves = {MOVE_SING, MOVE_DISABLE, MOVE_WISH, MOVE_SECRET_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_RELAXED
},
- [208] = {
+ [FRONTIER_MON_SUNFLORA_1] = {
.species = SPECIES_SUNFLORA,
.moves = {MOVE_PETAL_DANCE, MOVE_INGRAIN, MOVE_LEECH_SEED, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [209] = {
+ [FRONTIER_MON_CHIMECHO_1] = {
.species = SPECIES_CHIMECHO,
.moves = {MOVE_PSYWAVE, MOVE_TAKE_DOWN, MOVE_HEAL_BELL, MOVE_SAFEGUARD},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [210] = {
+ [FRONTIER_MON_GLIGAR_1] = {
.species = SPECIES_GLIGAR,
.moves = {MOVE_METAL_CLAW, MOVE_DIG, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HASTY
},
- [211] = {
+ [FRONTIER_MON_QWILFISH_1] = {
.species = SPECIES_QWILFISH,
.moves = {MOVE_BUBBLE_BEAM, MOVE_PIN_MISSILE, MOVE_SPIKES, MOVE_MINIMIZE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
.nature = NATURE_IMPISH
},
- [212] = {
+ [FRONTIER_MON_SNEASEL_1] = {
.species = SPECIES_SNEASEL,
.moves = {MOVE_FAINT_ATTACK, MOVE_FAKE_OUT, MOVE_ICY_WIND, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [213] = {
+ [FRONTIER_MON_PELIPPER_1] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_STOCKPILE, MOVE_SWALLOW},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [214] = {
+ [FRONTIER_MON_SWELLOW_1] = {
.species = SPECIES_SWELLOW,
.moves = {MOVE_FLY, MOVE_ENDEAVOR, MOVE_FACADE, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [215] = {
+ [FRONTIER_MON_LAIRON_1] = {
.species = SPECIES_LAIRON,
.moves = {MOVE_METAL_CLAW, MOVE_ROCK_TOMB, MOVE_IRON_DEFENSE, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [216] = {
+ [FRONTIER_MON_TANGELA_1] = {
.species = SPECIES_TANGELA,
.moves = {MOVE_MEGA_DRAIN, MOVE_SLAM, MOVE_TOXIC, MOVE_BIND},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [217] = {
+ [FRONTIER_MON_ARBOK_1] = {
.species = SPECIES_ARBOK,
.moves = {MOVE_POISON_FANG, MOVE_DIG, MOVE_BITE, MOVE_GLARE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [218] = {
+ [FRONTIER_MON_PERSIAN_1] = {
.species = SPECIES_PERSIAN,
.moves = {MOVE_FAKE_OUT, MOVE_SLASH, MOVE_TORMENT, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [219] = {
+ [FRONTIER_MON_SEADRA_1] = {
.species = SPECIES_SEADRA,
.moves = {MOVE_AURORA_BEAM, MOVE_SMOKESCREEN, MOVE_WATER_GUN, MOVE_RAIN_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [220] = {
+ [FRONTIER_MON_KECLEON_1] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_SECRET_POWER, MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_SEISMIC_TOSS},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAIVE
},
- [221] = {
+ [FRONTIER_MON_VIGOROTH_1] = {
.species = SPECIES_VIGOROTH,
.moves = {MOVE_SLASH, MOVE_COUNTER, MOVE_ENCORE, MOVE_UPROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [222] = {
+ [FRONTIER_MON_LUNATONE_1] = {
.species = SPECIES_LUNATONE,
.moves = {MOVE_CONFUSION, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [223] = {
+ [FRONTIER_MON_SOLROCK_1] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_CONFUSION, MOVE_FIRE_SPIN, MOVE_LIGHT_SCREEN, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [224] = {
+ [FRONTIER_MON_NOCTOWL_1] = {
.species = SPECIES_NOCTOWL,
.moves = {MOVE_CONFUSION, MOVE_AERIAL_ACE, MOVE_FAINT_ATTACK, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [225] = {
+ [FRONTIER_MON_SANDSLASH_1] = {
.species = SPECIES_SANDSLASH,
.moves = {MOVE_CRUSH_CLAW, MOVE_ROCK_SLIDE, MOVE_SWIFT, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [226] = {
+ [FRONTIER_MON_VENOMOTH_1] = {
.species = SPECIES_VENOMOTH,
.moves = {MOVE_SILVER_WIND, MOVE_PSYBEAM, MOVE_SLEEP_POWDER, MOVE_SKILL_SWAP},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [227] = {
+ [FRONTIER_MON_CHANSEY_1] = {
.species = SPECIES_CHANSEY,
.moves = {MOVE_METRONOME, MOVE_REFRESH, MOVE_DEFENSE_CURL, MOVE_MINIMIZE},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_RELAXED
},
- [228] = {
+ [FRONTIER_MON_SEAKING_1] = {
.species = SPECIES_SEAKING,
.moves = {MOVE_WATER_PULSE, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [229] = {
+ [FRONTIER_MON_JUMPLUFF_1] = {
.species = SPECIES_JUMPLUFF,
.moves = {MOVE_AERIAL_ACE, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [230] = {
+ [FRONTIER_MON_PILOSWINE_1] = {
.species = SPECIES_PILOSWINE,
.moves = {MOVE_DIG, MOVE_ANCIENT_POWER, MOVE_HAIL, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [231] = {
+ [FRONTIER_MON_GOLBAT_1] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_AIR_CUTTER, MOVE_CONFUSE_RAY, MOVE_TOXIC, MOVE_STEEL_WING},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [232] = {
+ [FRONTIER_MON_PRIMEAPE_1] = {
.species = SPECIES_PRIMEAPE,
.moves = {MOVE_KARATE_CHOP, MOVE_COUNTER, MOVE_SWAGGER, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [233] = {
+ [FRONTIER_MON_HITMONLEE_1] = {
.species = SPECIES_HITMONLEE,
.moves = {MOVE_ROLLING_KICK, MOVE_BRICK_BREAK, MOVE_FOCUS_ENERGY, MOVE_FACADE},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [234] = {
+ [FRONTIER_MON_HITMONCHAN_1] = {
.species = SPECIES_HITMONCHAN,
.moves = {MOVE_MACH_PUNCH, MOVE_SKY_UPPERCUT, MOVE_DETECT, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [235] = {
+ [FRONTIER_MON_GIRAFARIG_1] = {
.species = SPECIES_GIRAFARIG,
.moves = {MOVE_PSYBEAM, MOVE_STOMP, MOVE_WISH, MOVE_SKILL_SWAP},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [236] = {
+ [FRONTIER_MON_HITMONTOP_1] = {
.species = SPECIES_HITMONTOP,
.moves = {MOVE_TRIPLE_KICK, MOVE_DIG, MOVE_MACH_PUNCH, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [237] = {
+ [FRONTIER_MON_BANETTE_1] = {
.species = SPECIES_BANETTE,
.moves = {MOVE_NIGHT_SHADE, MOVE_WILL_O_WISP, MOVE_SPITE, MOVE_KNOCK_OFF},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [238] = {
+ [FRONTIER_MON_NINJASK_1] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_BATON_PASS, MOVE_SWORDS_DANCE, MOVE_ENDURE, MOVE_DIG},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MILD
},
- [239] = {
+ [FRONTIER_MON_SEVIPER_1] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_POISON_TAIL, MOVE_BITE, MOVE_GLARE, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [240] = {
+ [FRONTIER_MON_ZANGOOSE_1] = {
.species = SPECIES_ZANGOOSE,
.moves = {MOVE_SLASH, MOVE_DOUBLE_KICK, MOVE_ROAR, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [241] = {
+ [FRONTIER_MON_CAMERUPT_1] = {
.species = SPECIES_CAMERUPT,
.moves = {MOVE_MAGNITUDE, MOVE_PROTECT, MOVE_SANDSTORM, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [242] = {
+ [FRONTIER_MON_SHARPEDO_1] = {
.species = SPECIES_SHARPEDO,
.moves = {MOVE_SLASH, MOVE_BITE, MOVE_WATER_PULSE, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [243] = {
+ [FRONTIER_MON_TROPIUS_1] = {
.species = SPECIES_TROPIUS,
.moves = {MOVE_MAGICAL_LEAF, MOVE_WHIRLWIND, MOVE_AERIAL_ACE, MOVE_STEEL_WING},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [244] = {
+ [FRONTIER_MON_MAGNETON_1] = {
.species = SPECIES_MAGNETON,
.moves = {MOVE_SHOCK_WAVE, MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_SUPERSONIC},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_LONELY
},
- [245] = {
+ [FRONTIER_MON_MANTINE_1] = {
.species = SPECIES_MANTINE,
.moves = {MOVE_BUBBLE_BEAM, MOVE_AERIAL_ACE, MOVE_RAIN_DANCE, MOVE_ICY_WIND},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [246] = {
+ [FRONTIER_MON_STANTLER_1] = {
.species = SPECIES_STANTLER,
.moves = {MOVE_EXTRASENSORY, MOVE_CONFUSE_RAY, MOVE_STOMP, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_GENTLE
},
- [247] = {
+ [FRONTIER_MON_ABSOL_1] = {
.species = SPECIES_ABSOL,
.moves = {MOVE_BITE, MOVE_RAZOR_WIND, MOVE_FUTURE_SIGHT, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [248] = {
+ [FRONTIER_MON_SWALOT_1] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_STOCKPILE, MOVE_SWALLOW, MOVE_SPIT_UP, MOVE_SLUDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIRKY
},
- [249] = {
+ [FRONTIER_MON_CRAWDAUNT_1] = {
.species = SPECIES_CRAWDAUNT,
.moves = {MOVE_BUBBLE_BEAM, MOVE_VICE_GRIP, MOVE_KNOCK_OFF, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [250] = {
+ [FRONTIER_MON_PIDGEOT_1] = {
.species = SPECIES_PIDGEOT,
.moves = {MOVE_AERIAL_ACE, MOVE_FEATHER_DANCE, MOVE_MUD_SLAP, MOVE_FAINT_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [251] = {
+ [FRONTIER_MON_GRUMPIG_1] = {
.species = SPECIES_GRUMPIG,
.moves = {MOVE_PSYBEAM, MOVE_CONFUSE_RAY, MOVE_FUTURE_SIGHT, MOVE_MAGIC_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [252] = {
+ [FRONTIER_MON_TORKOAL_1] = {
.species = SPECIES_TORKOAL,
.moves = {MOVE_EMBER, MOVE_FIRE_SPIN, MOVE_SMOKESCREEN, MOVE_AMNESIA},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [253] = {
+ [FRONTIER_MON_KINGLER_1] = {
.species = SPECIES_KINGLER,
.moves = {MOVE_CRABHAMMER, MOVE_METAL_CLAW, MOVE_MUD_SHOT, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [254] = {
+ [FRONTIER_MON_CACTURNE_1] = {
.species = SPECIES_CACTURNE,
.moves = {MOVE_NEEDLE_ARM, MOVE_FAINT_ATTACK, MOVE_ACID, MOVE_MEGA_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_HASTY
},
- [255] = {
+ [FRONTIER_MON_BELLOSSOM_1] = {
.species = SPECIES_BELLOSSOM,
.moves = {MOVE_PETAL_DANCE, MOVE_SAFEGUARD, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [256] = {
+ [FRONTIER_MON_OCTILLERY_1] = {
.species = SPECIES_OCTILLERY,
.moves = {MOVE_OCTAZOOKA, MOVE_AURORA_BEAM, MOVE_PSYBEAM, MOVE_ROCK_BLAST},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [257] = {
+ [FRONTIER_MON_HUNTAIL_1] = {
.species = SPECIES_HUNTAIL,
.moves = {MOVE_WHIRLPOOL, MOVE_SCARY_FACE, MOVE_MUD_SLAP, MOVE_BITE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [258] = {
+ [FRONTIER_MON_GOREBYSS_1] = {
.species = SPECIES_GOREBYSS,
.moves = {MOVE_WHIRLPOOL, MOVE_AMNESIA, MOVE_ICY_WIND, MOVE_CONFUSION},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [259] = {
+ [FRONTIER_MON_RELICANTH_1] = {
.species = SPECIES_RELICANTH,
.moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_HARDEN, MOVE_AMNESIA},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [260] = {
+ [FRONTIER_MON_OMASTAR_1] = {
.species = SPECIES_OMASTAR,
.moves = {MOVE_BUBBLE_BEAM, MOVE_SPIKE_CANNON, MOVE_TICKLE, MOVE_ANCIENT_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [261] = {
+ [FRONTIER_MON_KABUTOPS_1] = {
.species = SPECIES_KABUTOPS,
.moves = {MOVE_SLASH, MOVE_DIG, MOVE_FURY_CUTTER, MOVE_KNOCK_OFF},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [262] = {
+ [FRONTIER_MON_POLIWRATH_1] = {
.species = SPECIES_POLIWRATH,
.moves = {MOVE_SUBMISSION, MOVE_DIG, MOVE_ROCK_TOMB, MOVE_BUBBLE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [263] = {
+ [FRONTIER_MON_SCYTHER_1] = {
.species = SPECIES_SCYTHER,
.moves = {MOVE_FURY_CUTTER, MOVE_AERIAL_ACE, MOVE_LIGHT_SCREEN, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [264] = {
+ [FRONTIER_MON_PINSIR_1] = {
.species = SPECIES_PINSIR,
.moves = {MOVE_SUBMISSION, MOVE_FOCUS_ENERGY, MOVE_SWORDS_DANCE, MOVE_REVENGE},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [265] = {
+ [FRONTIER_MON_POLITOED_1] = {
.species = SPECIES_POLITOED,
.moves = {MOVE_DIVE, MOVE_DIG, MOVE_HYPNOSIS, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_RELAXED
},
- [266] = {
+ [FRONTIER_MON_CLOYSTER_1] = {
.species = SPECIES_CLOYSTER,
.moves = {MOVE_AURORA_BEAM, MOVE_SPIKE_CANNON, MOVE_SUPERSONIC, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [267] = {
+ [FRONTIER_MON_DELCATTY_2] = {
.species = SPECIES_DELCATTY,
.moves = {MOVE_FAKE_TEARS, MOVE_SING, MOVE_THUNDERBOLT, MOVE_ICE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [268] = {
+ [FRONTIER_MON_SABLEYE_2] = {
.species = SPECIES_SABLEYE,
.moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_CONFUSE_RAY, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [269] = {
+ [FRONTIER_MON_LICKITUNG_2] = {
.species = SPECIES_LICKITUNG,
.moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [270] = {
+ [FRONTIER_MON_WEEPINBELL_2] = {
.species = SPECIES_WEEPINBELL,
.moves = {MOVE_SLUDGE_BOMB, MOVE_RAZOR_LEAF, MOVE_SLEEP_POWDER, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIRKY
},
- [271] = {
+ [FRONTIER_MON_GRAVELER_2] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [272] = {
+ [FRONTIER_MON_GLOOM_2] = {
.species = SPECIES_GLOOM,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SLUDGE_BOMB, MOVE_MOONLIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [273] = {
+ [FRONTIER_MON_PORYGON_2] = {
.species = SPECIES_PORYGON,
.moves = {MOVE_TRI_ATTACK, MOVE_PSYCHIC, MOVE_THUNDER_WAVE, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [274] = {
+ [FRONTIER_MON_KADABRA_2] = {
.species = SPECIES_KADABRA,
.moves = {MOVE_PSYCHIC, MOVE_THUNDER_WAVE, MOVE_REFLECT, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [275] = {
+ [FRONTIER_MON_WAILMER_2] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_WATER_SPOUT, MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_DOCILE
},
- [276] = {
+ [FRONTIER_MON_ROSELIA_2] = {
.species = SPECIES_ROSELIA,
.moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_GRASS_WHISTLE, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [277] = {
+ [FRONTIER_MON_VOLBEAT_2] = {
.species = SPECIES_VOLBEAT,
.moves = {MOVE_SIGNAL_BEAM, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_TAIL_GLOW},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [278] = {
+ [FRONTIER_MON_ILLUMISE_2] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_SILVER_WIND, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [279] = {
+ [FRONTIER_MON_IVYSAUR_2] = {
.species = SPECIES_IVYSAUR,
.moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_SLEEP_POWDER, MOVE_LEECH_SEED},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [280] = {
+ [FRONTIER_MON_CHARMELEON_2] = {
.species = SPECIES_CHARMELEON,
.moves = {MOVE_FLAMETHROWER, MOVE_SLASH, MOVE_ANCIENT_POWER, MOVE_DRAGON_RAGE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [281] = {
+ [FRONTIER_MON_WARTORTLE_2] = {
.species = SPECIES_WARTORTLE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAPID_SPIN, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [282] = {
+ [FRONTIER_MON_PARASECT_2] = {
.species = SPECIES_PARASECT,
.moves = {MOVE_SPORE, MOVE_GIGA_DRAIN, MOVE_DIG, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [283] = {
+ [FRONTIER_MON_MACHOKE_2] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FORESIGHT, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [284] = {
+ [FRONTIER_MON_HAUNTER_2] = {
.species = SPECIES_HAUNTER,
.moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_NIGHTMARE, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [285] = {
+ [FRONTIER_MON_BAYLEEF_2] = {
.species = SPECIES_BAYLEEF,
.moves = {MOVE_GIGA_DRAIN, MOVE_BODY_SLAM, MOVE_GRASS_WHISTLE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [286] = {
+ [FRONTIER_MON_QUILAVA_2] = {
.species = SPECIES_QUILAVA,
.moves = {MOVE_FLAMETHROWER, MOVE_CRUSH_CLAW, MOVE_BODY_SLAM, MOVE_SMOKESCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [287] = {
+ [FRONTIER_MON_CROCONAW_2] = {
.species = SPECIES_CROCONAW,
.moves = {MOVE_MEGA_KICK, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_DIG},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [288] = {
+ [FRONTIER_MON_TOGETIC_2] = {
.species = SPECIES_TOGETIC,
.moves = {MOVE_RETURN, MOVE_SWEET_KISS, MOVE_AERIAL_ACE, MOVE_YAWN},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [289] = {
+ [FRONTIER_MON_MURKROW_2] = {
.species = SPECIES_MURKROW,
.moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [290] = {
+ [FRONTIER_MON_WOBBUFFET_2] = {
.species = SPECIES_WOBBUFFET,
.moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_ENCORE, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_CAREFUL
},
- [291] = {
+ [FRONTIER_MON_PLUSLE_2] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_SEISMIC_TOSS, MOVE_WISH},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_DOCILE
},
- [292] = {
+ [FRONTIER_MON_MINUN_2] = {
.species = SPECIES_MINUN,
.moves = {MOVE_THUNDERBOLT, MOVE_ATTRACT, MOVE_CHARM, MOVE_WISH},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_DOCILE
},
- [293] = {
+ [FRONTIER_MON_GROVYLE_2] = {
.species = SPECIES_GROVYLE,
.moves = {MOVE_GIGA_DRAIN, MOVE_CRUSH_CLAW, MOVE_SCREECH, MOVE_ROCK_TOMB},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [294] = {
+ [FRONTIER_MON_COMBUSKEN_2] = {
.species = SPECIES_COMBUSKEN,
.moves = {MOVE_FLAMETHROWER, MOVE_SKY_UPPERCUT, MOVE_SLASH, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [295] = {
+ [FRONTIER_MON_MARSHTOMP_2] = {
.species = SPECIES_MARSHTOMP,
.moves = {MOVE_MUDDY_WATER, MOVE_EARTHQUAKE, MOVE_MUD_SLAP, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [296] = {
+ [FRONTIER_MON_PONYTA_2] = {
.species = SPECIES_PONYTA,
.moves = {MOVE_FLAMETHROWER, MOVE_BODY_SLAM, MOVE_DOUBLE_KICK, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [297] = {
+ [FRONTIER_MON_AZUMARILL_2] = {
.species = SPECIES_AZUMARILL,
.moves = {MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_IRON_TAIL, MOVE_DIG},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [298] = {
+ [FRONTIER_MON_SUDOWOODO_2] = {
.species = SPECIES_SUDOWOODO,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_LOW_KICK, MOVE_SELF_DESTRUCT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [299] = {
+ [FRONTIER_MON_MAGCARGO_2] = {
.species = SPECIES_MAGCARGO,
.moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [300] = {
+ [FRONTIER_MON_PUPITAR_2] = {
.species = SPECIES_PUPITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [301] = {
+ [FRONTIER_MON_SEALEO_2] = {
.species = SPECIES_SEALEO,
.moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_BODY_SLAM, MOVE_HAIL},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [302] = {
+ [FRONTIER_MON_RATICATE_2] = {
.species = SPECIES_RATICATE,
.moves = {MOVE_SUPER_FANG, MOVE_HYPER_FANG, MOVE_SHADOW_BALL, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [303] = {
+ [FRONTIER_MON_MASQUERAIN_2] = {
.species = SPECIES_MASQUERAIN,
.moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_GIGA_DRAIN, MOVE_STUN_SPORE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [304] = {
+ [FRONTIER_MON_FURRET_2] = {
.species = SPECIES_FURRET,
.moves = {MOVE_TRICK, MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_FOLLOW_ME},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [305] = {
+ [FRONTIER_MON_DUNSPARCE_2] = {
.species = SPECIES_DUNSPARCE,
.moves = {MOVE_ICE_BEAM, MOVE_ROCK_TOMB, MOVE_BITE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [306] = {
+ [FRONTIER_MON_DRAGONAIR_2] = {
.species = SPECIES_DRAGONAIR,
.moves = {MOVE_RETURN, MOVE_REST, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [307] = {
+ [FRONTIER_MON_MIGHTYENA_2] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_CRUNCH, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIRKY
},
- [308] = {
+ [FRONTIER_MON_LINOONE_2] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_TRICK, MOVE_FRUSTRATION, MOVE_THUNDER_WAVE, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [309] = {
+ [FRONTIER_MON_CASTFORM_2] = {
.species = SPECIES_CASTFORM,
.moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_WATER_PULSE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [310] = {
+ [FRONTIER_MON_SHELGON_2] = {
.species = SPECIES_SHELGON,
.moves = {MOVE_FRUSTRATION, MOVE_DRAGON_DANCE, MOVE_CRUNCH, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [311] = {
+ [FRONTIER_MON_METANG_2] = {
.species = SPECIES_METANG,
.moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_BODY_SLAM, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [312] = {
+ [FRONTIER_MON_WIGGLYTUFF_2] = {
.species = SPECIES_WIGGLYTUFF,
.moves = {MOVE_FAKE_TEARS, MOVE_SING, MOVE_DREAM_EATER, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_DOCILE
},
- [313] = {
+ [FRONTIER_MON_SUNFLORA_2] = {
.species = SPECIES_SUNFLORA,
.moves = {MOVE_GIGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_GROWTH, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [314] = {
+ [FRONTIER_MON_CHIMECHO_2] = {
.species = SPECIES_CHIMECHO,
.moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEAL_BELL},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [315] = {
+ [FRONTIER_MON_GLIGAR_2] = {
.species = SPECIES_GLIGAR,
.moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_GUILLOTINE, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [316] = {
+ [FRONTIER_MON_QWILFISH_2] = {
.species = SPECIES_QWILFISH,
.moves = {MOVE_REVENGE, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [317] = {
+ [FRONTIER_MON_SNEASEL_2] = {
.species = SPECIES_SNEASEL,
.moves = {MOVE_CRUSH_CLAW, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_JOLLY
},
- [318] = {
+ [FRONTIER_MON_PELIPPER_2] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_SURF, MOVE_BLIZZARD, MOVE_AERIAL_ACE, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [319] = {
+ [FRONTIER_MON_SWELLOW_2] = {
.species = SPECIES_SWELLOW,
.moves = {MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_PURSUIT, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [320] = {
+ [FRONTIER_MON_LAIRON_2] = {
.species = SPECIES_LAIRON,
.moves = {MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_ROAR, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [321] = {
+ [FRONTIER_MON_TANGELA_2] = {
.species = SPECIES_TANGELA,
.moves = {MOVE_GIGA_DRAIN, MOVE_STUN_SPORE, MOVE_REST, MOVE_AMNESIA},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [322] = {
+ [FRONTIER_MON_ARBOK_2] = {
.species = SPECIES_ARBOK,
.moves = {MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_GLARE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [323] = {
+ [FRONTIER_MON_PERSIAN_2] = {
.species = SPECIES_PERSIAN,
.moves = {MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_ROAR, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [324] = {
+ [FRONTIER_MON_SEADRA_2] = {
.species = SPECIES_SEADRA,
.moves = {MOVE_HYDRO_PUMP, MOVE_FRUSTRATION, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [325] = {
+ [FRONTIER_MON_KECLEON_2] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_TRICK, MOVE_BRICK_BREAK, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [326] = {
+ [FRONTIER_MON_VIGOROTH_2] = {
.species = SPECIES_VIGOROTH,
.moves = {MOVE_CRUSH_CLAW, MOVE_REVERSAL, MOVE_ENDURE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [327] = {
+ [FRONTIER_MON_LUNATONE_2] = {
.species = SPECIES_LUNATONE,
.moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_COSMIC_POWER, MOVE_CALM_MIND},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [328] = {
+ [FRONTIER_MON_SOLROCK_2] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COSMIC_POWER, MOVE_OVERHEAT},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [329] = {
+ [FRONTIER_MON_NOCTOWL_2] = {
.species = SPECIES_NOCTOWL,
.moves = {MOVE_PSYCHIC, MOVE_FAINT_ATTACK, MOVE_AERIAL_ACE, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [330] = {
+ [FRONTIER_MON_SANDSLASH_2] = {
.species = SPECIES_SANDSLASH,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUSH_CLAW, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [331] = {
+ [FRONTIER_MON_VENOMOTH_2] = {
.species = SPECIES_VENOMOTH,
.moves = {MOVE_SIGNAL_BEAM, MOVE_PSYCHIC, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [332] = {
+ [FRONTIER_MON_CHANSEY_2] = {
.species = SPECIES_CHANSEY,
.moves = {MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_SOFT_BOILED},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_RELAXED
},
- [333] = {
+ [FRONTIER_MON_SEAKING_2] = {
.species = SPECIES_SEAKING,
.moves = {MOVE_HORN_DRILL, MOVE_MEGAHORN, MOVE_SLEEP_TALK, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [334] = {
+ [FRONTIER_MON_JUMPLUFF_2] = {
.species = SPECIES_JUMPLUFF,
.moves = {MOVE_LEECH_SEED, MOVE_SLEEP_POWDER, MOVE_GIGA_DRAIN, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BOLD
},
- [335] = {
+ [FRONTIER_MON_PILOSWINE_2] = {
.species = SPECIES_PILOSWINE,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BODY_SLAM, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_ADAMANT
},
- [336] = {
+ [FRONTIER_MON_GOLBAT_2] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_AIR_CUTTER},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [337] = {
+ [FRONTIER_MON_PRIMEAPE_2] = {
.species = SPECIES_PRIMEAPE,
.moves = {MOVE_CROSS_CHOP, MOVE_ROCK_TOMB, MOVE_OVERHEAT, MOVE_BULK_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [338] = {
+ [FRONTIER_MON_HITMONLEE_2] = {
.species = SPECIES_HITMONLEE,
.moves = {MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_FORESIGHT, MOVE_ROCK_TOMB},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [339] = {
+ [FRONTIER_MON_HITMONCHAN_2] = {
.species = SPECIES_HITMONCHAN,
.moves = {MOVE_DYNAMIC_PUNCH, MOVE_MACH_PUNCH, MOVE_DETECT, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [340] = {
+ [FRONTIER_MON_GIRAFARIG_2] = {
.species = SPECIES_GIRAFARIG,
.moves = {MOVE_PSYCHIC, MOVE_CRUNCH, MOVE_BATON_PASS, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [341] = {
+ [FRONTIER_MON_HITMONTOP_2] = {
.species = SPECIES_HITMONTOP,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SEISMIC_TOSS, MOVE_ROCK_SLIDE, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [342] = {
+ [FRONTIER_MON_BANETTE_2] = {
.species = SPECIES_BANETTE,
.moves = {MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_SCREECH, MOVE_WILL_O_WISP},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_ADAMANT
},
- [343] = {
+ [FRONTIER_MON_NINJASK_2] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_SLASH, MOVE_SHADOW_BALL, MOVE_SWORDS_DANCE, MOVE_BATON_PASS},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [344] = {
+ [FRONTIER_MON_SEVIPER_2] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [345] = {
+ [FRONTIER_MON_ZANGOOSE_2] = {
.species = SPECIES_ZANGOOSE,
.moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [346] = {
+ [FRONTIER_MON_CAMERUPT_2] = {
.species = SPECIES_CAMERUPT,
.moves = {MOVE_EARTHQUAKE, MOVE_ERUPTION, MOVE_BODY_SLAM, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [347] = {
+ [FRONTIER_MON_SHARPEDO_2] = {
.species = SPECIES_SHARPEDO,
.moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_SURF},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [348] = {
+ [FRONTIER_MON_TROPIUS_2] = {
.species = SPECIES_TROPIUS,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [349] = {
+ [FRONTIER_MON_MAGNETON_2] = {
.species = SPECIES_MAGNETON,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [350] = {
+ [FRONTIER_MON_MANTINE_2] = {
.species = SPECIES_MANTINE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAIN_DANCE, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [351] = {
+ [FRONTIER_MON_STANTLER_2] = {
.species = SPECIES_STANTLER,
.moves = {MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [352] = {
+ [FRONTIER_MON_ABSOL_2] = {
.species = SPECIES_ABSOL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IRON_TAIL},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [353] = {
+ [FRONTIER_MON_SWALOT_2] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_BODY_SLAM, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [354] = {
+ [FRONTIER_MON_CRAWDAUNT_2] = {
.species = SPECIES_CRAWDAUNT,
.moves = {MOVE_GUILLOTINE, MOVE_FRUSTRATION, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [355] = {
+ [FRONTIER_MON_PIDGEOT_2] = {
.species = SPECIES_PIDGEOT,
.moves = {MOVE_RETURN, MOVE_AERIAL_ACE, MOVE_STEEL_WING, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [356] = {
+ [FRONTIER_MON_GRUMPIG_2] = {
.species = SPECIES_GRUMPIG,
.moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [357] = {
+ [FRONTIER_MON_TORKOAL_2] = {
.species = SPECIES_TORKOAL,
.moves = {MOVE_OVERHEAT, MOVE_BODY_SLAM, MOVE_SMOKESCREEN, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [358] = {
+ [FRONTIER_MON_KINGLER_2] = {
.species = SPECIES_KINGLER,
.moves = {MOVE_GUILLOTINE, MOVE_ROCK_TOMB, MOVE_FLAIL, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [359] = {
+ [FRONTIER_MON_CACTURNE_2] = {
.species = SPECIES_CACTURNE,
.moves = {MOVE_MEGA_KICK, MOVE_TEETER_DANCE, MOVE_FAINT_ATTACK, MOVE_SANDSTORM},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_HARDY
},
- [360] = {
+ [FRONTIER_MON_BELLOSSOM_2] = {
.species = SPECIES_BELLOSSOM,
.moves = {MOVE_SOLAR_BEAM, MOVE_ATTRACT, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [361] = {
+ [FRONTIER_MON_OCTILLERY_2] = {
.species = SPECIES_OCTILLERY,
.moves = {MOVE_OCTAZOOKA, MOVE_FIRE_BLAST, MOVE_THUNDER_WAVE, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [362] = {
+ [FRONTIER_MON_HUNTAIL_2] = {
.species = SPECIES_HUNTAIL,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_CRUNCH, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [363] = {
+ [FRONTIER_MON_GOREBYSS_2] = {
.species = SPECIES_GOREBYSS,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_PSYCHIC, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [364] = {
+ [FRONTIER_MON_RELICANTH_2] = {
.species = SPECIES_RELICANTH,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AMNESIA, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [365] = {
+ [FRONTIER_MON_OMASTAR_2] = {
.species = SPECIES_OMASTAR,
.moves = {MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_ICE_BEAM, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [366] = {
+ [FRONTIER_MON_KABUTOPS_2] = {
.species = SPECIES_KABUTOPS,
.moves = {MOVE_SLASH, MOVE_ROCK_SLIDE, MOVE_FLAIL, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [367] = {
+ [FRONTIER_MON_POLIWRATH_2] = {
.species = SPECIES_POLIWRATH,
.moves = {MOVE_BRICK_BREAK, MOVE_HYPNOSIS, MOVE_REST, MOVE_BELLY_DRUM},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [368] = {
+ [FRONTIER_MON_SCYTHER_2] = {
.species = SPECIES_SCYTHER,
.moves = {MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [369] = {
+ [FRONTIER_MON_PINSIR_2] = {
.species = SPECIES_PINSIR,
.moves = {MOVE_GUILLOTINE, MOVE_SWORDS_DANCE, MOVE_FLAIL, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_JOLLY
},
- [370] = {
+ [FRONTIER_MON_POLITOED_2] = {
.species = SPECIES_POLITOED,
.moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_MUD_SLAP, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [371] = {
+ [FRONTIER_MON_CLOYSTER_2] = {
.species = SPECIES_CLOYSTER,
.moves = {MOVE_DIVE, MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [372] = {
+ [FRONTIER_MON_DUGTRIO_1] = {
.species = SPECIES_DUGTRIO,
.moves = {MOVE_EARTHQUAKE, MOVE_TRI_ATTACK, MOVE_SLASH, MOVE_SAND_TOMB},
.itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [373] = {
+ [FRONTIER_MON_MEDICHAM_1] = {
.species = SPECIES_MEDICHAM,
.moves = {MOVE_PSYCHIC, MOVE_HI_JUMP_KICK, MOVE_CALM_MIND, MOVE_BATON_PASS},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [374] = {
+ [FRONTIER_MON_MISDREAVUS_1] = {
.species = SPECIES_MISDREAVUS,
.moves = {MOVE_PAIN_SPLIT, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [375] = {
+ [FRONTIER_MON_FEAROW_1] = {
.species = SPECIES_FEAROW,
.moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_FACADE, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [376] = {
+ [FRONTIER_MON_GRANBULL_1] = {
.species = SPECIES_GRANBULL,
.moves = {MOVE_MEGA_KICK, MOVE_SMELLING_SALT, MOVE_THUNDER_WAVE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [377] = {
+ [FRONTIER_MON_JYNX_1] = {
.species = SPECIES_JYNX,
.moves = {MOVE_ICE_BEAM, MOVE_FAKE_OUT, MOVE_LOVELY_KISS, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [378] = {
+ [FRONTIER_MON_DUSCLOPS_1] = {
.species = SPECIES_DUSCLOPS,
.moves = {MOVE_WILL_O_WISP, MOVE_SEISMIC_TOSS, MOVE_PAIN_SPLIT, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [379] = {
+ [FRONTIER_MON_DODRIO_1] = {
.species = SPECIES_DODRIO,
.moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_SLEEP_TALK, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [380] = {
+ [FRONTIER_MON_MR_MIME_1] = {
.species = SPECIES_MR_MIME,
.moves = {MOVE_PSYCHIC, MOVE_MAGICAL_LEAF, MOVE_FAKE_OUT, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [381] = {
+ [FRONTIER_MON_LANTURN_1] = {
.species = SPECIES_LANTURN,
.moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [382] = {
+ [FRONTIER_MON_BRELOOM_1] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_SKY_UPPERCUT, MOVE_MACH_PUNCH, MOVE_HEADBUTT, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [383] = {
+ [FRONTIER_MON_FORRETRESS_1] = {
.species = SPECIES_FORRETRESS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_LIGHT_SCREEN, MOVE_SPIKES},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [384] = {
+ [FRONTIER_MON_WHISCASH_1] = {
.species = SPECIES_WHISCASH,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AMNESIA, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [385] = {
+ [FRONTIER_MON_XATU_1] = {
.species = SPECIES_XATU,
.moves = {MOVE_DRILL_PECK, MOVE_NIGHT_SHADE, MOVE_WISH, MOVE_FUTURE_SIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [386] = {
+ [FRONTIER_MON_SKARMORY_1] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_STEEL_WING, MOVE_AIR_CUTTER, MOVE_COUNTER, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [387] = {
+ [FRONTIER_MON_MAROWAK_1] = {
.species = SPECIES_MAROWAK,
.moves = {MOVE_BONEMERANG, MOVE_ROCK_SLIDE, MOVE_ICY_WIND, MOVE_HEADBUTT},
.itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [388] = {
+ [FRONTIER_MON_QUAGSIRE_1] = {
.species = SPECIES_QUAGSIRE,
.moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [389] = {
+ [FRONTIER_MON_CLEFABLE_1] = {
.species = SPECIES_CLEFABLE,
.moves = {MOVE_METRONOME, MOVE_DOUBLE_TEAM, MOVE_REFLECT, MOVE_FOLLOW_ME},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BRAVE
},
- [390] = {
+ [FRONTIER_MON_HARIYAMA_1] = {
.species = SPECIES_HARIYAMA,
.moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [391] = {
+ [FRONTIER_MON_RAICHU_1] = {
.species = SPECIES_RAICHU,
.moves = {MOVE_THUNDERBOLT, MOVE_QUICK_ATTACK, MOVE_LIGHT_SCREEN, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [392] = {
+ [FRONTIER_MON_DEWGONG_1] = {
.species = SPECIES_DEWGONG,
.moves = {MOVE_ICE_BEAM, MOVE_ICY_WIND, MOVE_HEADBUTT, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [393] = {
+ [FRONTIER_MON_MANECTRIC_1] = {
.species = SPECIES_MANECTRIC,
.moves = {MOVE_THUNDERBOLT, MOVE_FLASH, MOVE_QUICK_ATTACK, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [394] = {
+ [FRONTIER_MON_VILEPLUME_1] = {
.species = SPECIES_VILEPLUME,
.moves = {MOVE_SLUDGE_BOMB, MOVE_PETAL_DANCE, MOVE_MOONLIGHT, MOVE_AROMATHERAPY},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [395] = {
+ [FRONTIER_MON_VICTREEBEL_1] = {
.species = SPECIES_VICTREEBEL,
.moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_SWEET_SCENT, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [396] = {
+ [FRONTIER_MON_ELECTRODE_1] = {
.species = SPECIES_ELECTRODE,
.moves = {MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [397] = {
+ [FRONTIER_MON_EXPLOUD_1] = {
.species = SPECIES_EXPLOUD,
.moves = {MOVE_HYPER_VOICE, MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [398] = {
+ [FRONTIER_MON_SHIFTRY_1] = {
.species = SPECIES_SHIFTRY,
.moves = {MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_QUICK_ATTACK, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [399] = {
+ [FRONTIER_MON_GLALIE_1] = {
.species = SPECIES_GLALIE,
.moves = {MOVE_ICE_BEAM, MOVE_CRUNCH, MOVE_HAIL, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [400] = {
+ [FRONTIER_MON_LUDICOLO_1] = {
.species = SPECIES_LUDICOLO,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [401] = {
+ [FRONTIER_MON_HYPNO_1] = {
.species = SPECIES_HYPNO,
.moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_HYPNOSIS},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [402] = {
+ [FRONTIER_MON_GOLEM_1] = {
.species = SPECIES_GOLEM,
.moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_ROCK_TOMB},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [403] = {
+ [FRONTIER_MON_RHYDON_1] = {
.species = SPECIES_RHYDON,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_TOMB, MOVE_SCARY_FACE, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [404] = {
+ [FRONTIER_MON_ALAKAZAM_1] = {
.species = SPECIES_ALAKAZAM,
.moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [405] = {
+ [FRONTIER_MON_WEEZING_1] = {
.species = SPECIES_WEEZING,
.moves = {MOVE_SLUDGE_BOMB, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL, MOVE_SMOKESCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [406] = {
+ [FRONTIER_MON_KANGASKHAN_1] = {
.species = SPECIES_KANGASKHAN,
.moves = {MOVE_DIZZY_PUNCH, MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [407] = {
+ [FRONTIER_MON_ELECTABUZZ_1] = {
.species = SPECIES_ELECTABUZZ,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_BRICK_BREAK, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [408] = {
+ [FRONTIER_MON_TAUROS_1] = {
.species = SPECIES_TAUROS,
.moves = {MOVE_EARTHQUAKE, MOVE_THRASH, MOVE_SWAGGER, MOVE_FACADE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [409] = {
+ [FRONTIER_MON_SLOWBRO_1] = {
.species = SPECIES_SLOWBRO,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_HEADBUTT, MOVE_ICE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [410] = {
+ [FRONTIER_MON_SLOWKING_1] = {
.species = SPECIES_SLOWKING,
.moves = {MOVE_PSYCHIC, MOVE_BRICK_BREAK, MOVE_AMNESIA, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [411] = {
+ [FRONTIER_MON_MILTANK_1] = {
.species = SPECIES_MILTANK,
.moves = {MOVE_FACADE, MOVE_SHADOW_BALL, MOVE_COUNTER, MOVE_MILK_DRINK},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [412] = {
+ [FRONTIER_MON_ALTARIA_1] = {
.species = SPECIES_ALTARIA,
.moves = {MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE, MOVE_REFRESH, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [413] = {
+ [FRONTIER_MON_NIDOQUEEN_1] = {
.species = SPECIES_NIDOQUEEN,
.moves = {MOVE_SLUDGE_BOMB, MOVE_DOUBLE_KICK, MOVE_BODY_SLAM, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [414] = {
+ [FRONTIER_MON_NIDOKING_1] = {
.species = SPECIES_NIDOKING,
.moves = {MOVE_HORN_DRILL, MOVE_DOUBLE_KICK, MOVE_BODY_SLAM, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [415] = {
+ [FRONTIER_MON_MAGMAR_1] = {
.species = SPECIES_MAGMAR,
.moves = {MOVE_FLAMETHROWER, MOVE_SMOKESCREEN, MOVE_BRICK_BREAK, MOVE_BARRIER},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [416] = {
+ [FRONTIER_MON_CRADILY_1] = {
.species = SPECIES_CRADILY,
.moves = {MOVE_GIGA_DRAIN, MOVE_ROCK_SLIDE, MOVE_BARRIER, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [417] = {
+ [FRONTIER_MON_ARMALDO_1] = {
.species = SPECIES_ARMALDO,
.moves = {MOVE_SLASH, MOVE_AERIAL_ACE, MOVE_ANCIENT_POWER, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [418] = {
+ [FRONTIER_MON_GOLDUCK_1] = {
.species = SPECIES_GOLDUCK,
.moves = {MOVE_HYDRO_PUMP, MOVE_DIG, MOVE_BRICK_BREAK, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [419] = {
+ [FRONTIER_MON_RAPIDASH_1] = {
.species = SPECIES_RAPIDASH,
.moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_KICK, MOVE_QUICK_ATTACK, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIET
},
- [420] = {
+ [FRONTIER_MON_MUK_1] = {
.species = SPECIES_MUK,
.moves = {MOVE_SLUDGE_BOMB, MOVE_BODY_SLAM, MOVE_SCREECH, MOVE_MINIMIZE},
.itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [421] = {
+ [FRONTIER_MON_GENGAR_1] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_TIMID
},
- [422] = {
+ [FRONTIER_MON_AMPHAROS_1] = {
.species = SPECIES_AMPHAROS,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_THUNDER_WAVE, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [423] = {
+ [FRONTIER_MON_SCIZOR_1] = {
.species = SPECIES_SCIZOR,
.moves = {MOVE_METAL_CLAW, MOVE_AERIAL_ACE, MOVE_COUNTER, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [424] = {
+ [FRONTIER_MON_HERACROSS_1] = {
.species = SPECIES_HERACROSS,
.moves = {MOVE_MEGAHORN, MOVE_BRICK_BREAK, MOVE_ROCK_TOMB, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [425] = {
+ [FRONTIER_MON_URSARING_1] = {
.species = SPECIES_URSARING,
.moves = {MOVE_MEGA_KICK, MOVE_CRUNCH, MOVE_AERIAL_ACE, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [426] = {
+ [FRONTIER_MON_HOUNDOOM_1] = {
.species = SPECIES_HOUNDOOM,
.moves = {MOVE_FLAMETHROWER, MOVE_SHADOW_BALL, MOVE_COUNTER, MOVE_WILL_O_WISP},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [427] = {
+ [FRONTIER_MON_DONPHAN_1] = {
.species = SPECIES_DONPHAN,
.moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_SWAGGER, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [428] = {
+ [FRONTIER_MON_CLAYDOL_1] = {
.species = SPECIES_CLAYDOL,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWAGGER, MOVE_PSYCH_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [429] = {
+ [FRONTIER_MON_WAILORD_1] = {
.species = SPECIES_WAILORD,
.moves = {MOVE_SURF, MOVE_ICY_WIND, MOVE_BODY_SLAM, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [430] = {
+ [FRONTIER_MON_NINETALES_1] = {
.species = SPECIES_NINETALES,
.moves = {MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [431] = {
+ [FRONTIER_MON_MACHAMP_1] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [432] = {
+ [FRONTIER_MON_SHUCKLE_1] = {
.species = SPECIES_SHUCKLE,
.moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SLEEP_TALK, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BRAVE
},
- [433] = {
+ [FRONTIER_MON_STEELIX_1] = {
.species = SPECIES_STEELIX,
.moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_ROCK_TOMB, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [434] = {
+ [FRONTIER_MON_TENTACRUEL_1] = {
.species = SPECIES_TENTACRUEL,
.moves = {MOVE_SLUDGE_BOMB, MOVE_ICY_WIND, MOVE_BARRIER, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_IMPISH
},
- [435] = {
+ [FRONTIER_MON_AERODACTYL_1] = {
.species = SPECIES_AERODACTYL,
.moves = {MOVE_ANCIENT_POWER, MOVE_DRAGON_BREATH, MOVE_AERIAL_ACE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [436] = {
+ [FRONTIER_MON_PORYGON2_1] = {
.species = SPECIES_PORYGON2,
.moves = {MOVE_TRI_ATTACK, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [437] = {
+ [FRONTIER_MON_GARDEVOIR_1] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_MAGICAL_LEAF, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_TIMID
},
- [438] = {
+ [FRONTIER_MON_EXEGGUTOR_1] = {
.species = SPECIES_EXEGGUTOR,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [439] = {
+ [FRONTIER_MON_STARMIE_1] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [440] = {
+ [FRONTIER_MON_FLYGON_1] = {
.species = SPECIES_FLYGON,
.moves = {MOVE_EARTHQUAKE, MOVE_STEEL_WING, MOVE_FAINT_ATTACK, MOVE_FACADE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [441] = {
+ [FRONTIER_MON_VENUSAUR_1] = {
.species = SPECIES_VENUSAUR,
.moves = {MOVE_GIGA_DRAIN, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_SLEEP_POWDER},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [442] = {
+ [FRONTIER_MON_VAPOREON_1] = {
.species = SPECIES_VAPOREON,
.moves = {MOVE_SURF, MOVE_ROAR, MOVE_BITE, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [443] = {
+ [FRONTIER_MON_JOLTEON_1] = {
.species = SPECIES_JOLTEON,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [444] = {
+ [FRONTIER_MON_FLAREON_1] = {
.species = SPECIES_FLAREON,
.moves = {MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_BITE, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [445] = {
+ [FRONTIER_MON_MEGANIUM_1] = {
.species = SPECIES_MEGANIUM,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_LIGHT_SCREEN, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [446] = {
+ [FRONTIER_MON_ESPEON_1] = {
.species = SPECIES_ESPEON,
.moves = {MOVE_PSYCHIC, MOVE_CHARM, MOVE_CALM_MIND, MOVE_BATON_PASS},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [447] = {
+ [FRONTIER_MON_UMBREON_1] = {
.species = SPECIES_UMBREON,
.moves = {MOVE_CONFUSE_RAY, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_BATON_PASS},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [448] = {
+ [FRONTIER_MON_BLASTOISE_1] = {
.species = SPECIES_BLASTOISE,
.moves = {MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_BITE, MOVE_SEISMIC_TOSS},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [449] = {
+ [FRONTIER_MON_FERALIGATR_1] = {
.species = SPECIES_FERALIGATR,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_AERIAL_ACE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [450] = {
+ [FRONTIER_MON_AGGRON_1] = {
.species = SPECIES_AGGRON,
.moves = {MOVE_IRON_TAIL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [451] = {
+ [FRONTIER_MON_BLAZIKEN_1] = {
.species = SPECIES_BLAZIKEN,
.moves = {MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_DOUBLE_KICK, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [452] = {
+ [FRONTIER_MON_WALREIN_1] = {
.species = SPECIES_WALREIN,
.moves = {MOVE_BLIZZARD, MOVE_HAIL, MOVE_YAWN, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [453] = {
+ [FRONTIER_MON_SCEPTILE_1] = {
.species = SPECIES_SCEPTILE,
.moves = {MOVE_LEAF_BLADE, MOVE_LEECH_SEED, MOVE_AERIAL_ACE, MOVE_DETECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [454] = {
+ [FRONTIER_MON_CHARIZARD_1] = {
.species = SPECIES_CHARIZARD,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_ROAR, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [455] = {
+ [FRONTIER_MON_TYPHLOSION_1] = {
.species = SPECIES_TYPHLOSION,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_SMOKESCREEN, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [456] = {
+ [FRONTIER_MON_LAPRAS_1] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SURF, MOVE_ATTRACT, MOVE_CONFUSE_RAY, MOVE_SING},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BOLD
},
- [457] = {
+ [FRONTIER_MON_CROBAT_1] = {
.species = SPECIES_CROBAT,
.moves = {MOVE_SLUDGE_BOMB, MOVE_BITE, MOVE_ASTONISH, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [458] = {
+ [FRONTIER_MON_SWAMPERT_1] = {
.species = SPECIES_SWAMPERT,
.moves = {MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_REST, MOVE_CURSE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [459] = {
+ [FRONTIER_MON_GYARADOS_1] = {
.species = SPECIES_GYARADOS,
.moves = {MOVE_RETURN, MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [460] = {
+ [FRONTIER_MON_SNORLAX_1] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_FACADE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [461] = {
+ [FRONTIER_MON_KINGDRA_1] = {
.species = SPECIES_KINGDRA,
.moves = {MOVE_HYDRO_PUMP, MOVE_DRAGON_BREATH, MOVE_ICY_WIND, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [462] = {
+ [FRONTIER_MON_BLISSEY_1] = {
.species = SPECIES_BLISSEY,
.moves = {MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_SING, MOVE_SOFT_BOILED},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BOLD
},
- [463] = {
+ [FRONTIER_MON_MILOTIC_1] = {
.species = SPECIES_MILOTIC,
.moves = {MOVE_HYDRO_PUMP, MOVE_ICY_WIND, MOVE_RECOVER, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [464] = {
+ [FRONTIER_MON_ARCANINE_1] = {
.species = SPECIES_ARCANINE,
.moves = {MOVE_FLAMETHROWER, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [465] = {
+ [FRONTIER_MON_SALAMENCE_1] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE, MOVE_HEADBUTT, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [466] = {
+ [FRONTIER_MON_METAGROSS_1] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_METEOR_MASH, MOVE_AERIAL_ACE, MOVE_FACADE, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [467] = {
+ [FRONTIER_MON_SLAKING_1] = {
.species = SPECIES_SLAKING,
.moves = {MOVE_YAWN, MOVE_BULK_UP, MOVE_SWAGGER, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [468] = {
+ [FRONTIER_MON_DUGTRIO_2] = {
.species = SPECIES_DUGTRIO,
.moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, MOVE_TRI_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [469] = {
+ [FRONTIER_MON_MEDICHAM_2] = {
.species = SPECIES_MEDICHAM,
.moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_PSYCHIC, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [470] = {
+ [FRONTIER_MON_MAROWAK_2] = {
.species = SPECIES_MAROWAK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_ICY_WIND},
.itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [471] = {
+ [FRONTIER_MON_QUAGSIRE_2] = {
.species = SPECIES_QUAGSIRE,
.moves = {MOVE_CURSE, MOVE_ATTRACT, MOVE_YAWN, MOVE_ANCIENT_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_SASSY
},
- [472] = {
+ [FRONTIER_MON_MISDREAVUS_2] = {
.species = SPECIES_MISDREAVUS,
.moves = {MOVE_PSYCHIC, MOVE_ATTRACT, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BOLD
},
- [473] = {
+ [FRONTIER_MON_FEAROW_2] = {
.species = SPECIES_FEAROW,
.moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_ATTRACT, MOVE_PURSUIT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [474] = {
+ [FRONTIER_MON_GRANBULL_2] = {
.species = SPECIES_GRANBULL,
.moves = {MOVE_OVERHEAT, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FACADE},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
.nature = NATURE_QUIET
},
- [475] = {
+ [FRONTIER_MON_JYNX_2] = {
.species = SPECIES_JYNX,
.moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_LOVELY_KISS, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [476] = {
+ [FRONTIER_MON_DUSCLOPS_2] = {
.species = SPECIES_DUSCLOPS,
.moves = {MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [477] = {
+ [FRONTIER_MON_DODRIO_2] = {
.species = SPECIES_DODRIO,
.moves = {MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_FAINT_ATTACK, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [478] = {
+ [FRONTIER_MON_MR_MIME_2] = {
.species = SPECIES_MR_MIME,
.moves = {MOVE_BATON_PASS, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_PSYCHIC},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [479] = {
+ [FRONTIER_MON_LANTURN_2] = {
.species = SPECIES_LANTURN,
.moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_THUNDERBOLT, MOVE_SURF},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [480] = {
+ [FRONTIER_MON_BRELOOM_2] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_GIGA_DRAIN, MOVE_LEECH_SEED, MOVE_FOCUS_PUNCH, MOVE_SPORE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_DOCILE
},
- [481] = {
+ [FRONTIER_MON_FORRETRESS_2] = {
.species = SPECIES_FORRETRESS,
.moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_COUNTER, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [482] = {
+ [FRONTIER_MON_SKARMORY_2] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_SPIKES, MOVE_ROAR, MOVE_DRILL_PECK, MOVE_TOXIC},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [483] = {
+ [FRONTIER_MON_WHISCASH_2] = {
.species = SPECIES_WHISCASH,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_SPARK, MOVE_FUTURE_SIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [484] = {
+ [FRONTIER_MON_XATU_2] = {
.species = SPECIES_XATU,
.moves = {MOVE_FLY, MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [485] = {
+ [FRONTIER_MON_CLEFABLE_2] = {
.species = SPECIES_CLEFABLE,
.moves = {MOVE_METEOR_MASH, MOVE_COSMIC_POWER, MOVE_DOUBLE_TEAM, MOVE_FOLLOW_ME},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [486] = {
+ [FRONTIER_MON_HARIYAMA_2] = {
.species = SPECIES_HARIYAMA,
.moves = {MOVE_CROSS_CHOP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [487] = {
+ [FRONTIER_MON_RAICHU_2] = {
.species = SPECIES_RAICHU,
.moves = {MOVE_THUNDERBOLT, MOVE_REVERSAL, MOVE_ENDURE, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [488] = {
+ [FRONTIER_MON_DEWGONG_2] = {
.species = SPECIES_DEWGONG,
.moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_ENCORE, MOVE_DISABLE},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [489] = {
+ [FRONTIER_MON_MANECTRIC_2] = {
.species = SPECIES_MANECTRIC,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_CRUNCH, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [490] = {
+ [FRONTIER_MON_VILEPLUME_2] = {
.species = SPECIES_VILEPLUME,
.moves = {MOVE_INGRAIN, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [491] = {
+ [FRONTIER_MON_VICTREEBEL_2] = {
.species = SPECIES_VICTREEBEL,
.moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_SLEEP_POWDER, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_SERIOUS
},
- [492] = {
+ [FRONTIER_MON_ELECTRODE_2] = {
.species = SPECIES_ELECTRODE,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [493] = {
+ [FRONTIER_MON_EXPLOUD_2] = {
.species = SPECIES_EXPLOUD,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [494] = {
+ [FRONTIER_MON_SHIFTRY_2] = {
.species = SPECIES_SHIFTRY,
.moves = {MOVE_LEECH_SEED, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_IMPISH
},
- [495] = {
+ [FRONTIER_MON_GLALIE_2] = {
.species = SPECIES_GLALIE,
.moves = {MOVE_EXPLOSION, MOVE_ENDURE, MOVE_BODY_SLAM, MOVE_ICY_WIND},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [496] = {
+ [FRONTIER_MON_LUDICOLO_2] = {
.species = SPECIES_LUDICOLO,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [497] = {
+ [FRONTIER_MON_HYPNO_2] = {
.species = SPECIES_HYPNO,
.moves = {MOVE_HYPNOSIS, MOVE_NIGHTMARE, MOVE_DREAM_EATER, MOVE_PSYCHIC},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [498] = {
+ [FRONTIER_MON_GOLEM_2] = {
.species = SPECIES_GOLEM,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_DOUBLE_TEAM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [499] = {
+ [FRONTIER_MON_RHYDON_2] = {
.species = SPECIES_RHYDON,
.moves = {MOVE_EARTHQUAKE, MOVE_HORN_DRILL, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [500] = {
+ [FRONTIER_MON_ALAKAZAM_2] = {
.species = SPECIES_ALAKAZAM,
.moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_THUNDER_WAVE, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [501] = {
+ [FRONTIER_MON_WEEZING_2] = {
.species = SPECIES_WEEZING,
.moves = {MOVE_MEMENTO, MOVE_SLUDGE_BOMB, MOVE_FACADE, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [502] = {
+ [FRONTIER_MON_KANGASKHAN_2] = {
.species = SPECIES_KANGASKHAN,
.moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [503] = {
+ [FRONTIER_MON_ELECTABUZZ_2] = {
.species = SPECIES_ELECTABUZZ,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_ATTRACT, MOVE_FOCUS_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [504] = {
+ [FRONTIER_MON_TAUROS_2] = {
.species = SPECIES_TAUROS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [505] = {
+ [FRONTIER_MON_SLOWBRO_2] = {
.species = SPECIES_SLOWBRO,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_YAWN},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_MODEST
},
- [506] = {
+ [FRONTIER_MON_SLOWKING_2] = {
.species = SPECIES_SLOWKING,
.moves = {MOVE_YAWN, MOVE_THUNDER_WAVE, MOVE_SURF, MOVE_PSYCHIC},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [507] = {
+ [FRONTIER_MON_MILTANK_2] = {
.species = SPECIES_MILTANK,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [508] = {
+ [FRONTIER_MON_ALTARIA_2] = {
.species = SPECIES_ALTARIA,
.moves = {MOVE_PERISH_SONG, MOVE_DRAGON_BREATH, MOVE_PURSUIT, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [509] = {
+ [FRONTIER_MON_NIDOQUEEN_2] = {
.species = SPECIES_NIDOQUEEN,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [510] = {
+ [FRONTIER_MON_NIDOKING_2] = {
.species = SPECIES_NIDOKING,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [511] = {
+ [FRONTIER_MON_MAGMAR_2] = {
.species = SPECIES_MAGMAR,
.moves = {MOVE_FIRE_BLAST, MOVE_SMOKESCREEN, MOVE_THUNDER_PUNCH, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [512] = {
+ [FRONTIER_MON_CRADILY_2] = {
.species = SPECIES_CRADILY,
.moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_SWAGGER, MOVE_PSYCH_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [513] = {
+ [FRONTIER_MON_ARMALDO_2] = {
.species = SPECIES_ARMALDO,
.moves = {MOVE_IRON_TAIL, MOVE_ANCIENT_POWER, MOVE_BRICK_BREAK, MOVE_KNOCK_OFF},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [514] = {
+ [FRONTIER_MON_GOLDUCK_2] = {
.species = SPECIES_GOLDUCK,
.moves = {MOVE_CROSS_CHOP, MOVE_SURF, MOVE_SWAGGER, MOVE_PSYCH_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [515] = {
+ [FRONTIER_MON_RAPIDASH_2] = {
.species = SPECIES_RAPIDASH,
.moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_DOUBLE_TEAM, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [516] = {
+ [FRONTIER_MON_MUK_2] = {
.species = SPECIES_MUK,
.moves = {MOVE_CURSE, MOVE_REST, MOVE_SLUDGE_BOMB, MOVE_DYNAMIC_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [517] = {
+ [FRONTIER_MON_GENGAR_2] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [518] = {
+ [FRONTIER_MON_AMPHAROS_2] = {
.species = SPECIES_AMPHAROS,
.moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [519] = {
+ [FRONTIER_MON_SCIZOR_2] = {
.species = SPECIES_SCIZOR,
.moves = {MOVE_SILVER_WIND, MOVE_STEEL_WING, MOVE_SWORDS_DANCE, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [520] = {
+ [FRONTIER_MON_HERACROSS_2] = {
.species = SPECIES_HERACROSS,
.moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_BULK_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_JOLLY
},
- [521] = {
+ [FRONTIER_MON_URSARING_2] = {
.species = SPECIES_URSARING,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [522] = {
+ [FRONTIER_MON_HOUNDOOM_2] = {
.species = SPECIES_HOUNDOOM,
.moves = {MOVE_FIRE_BLAST, MOVE_CRUNCH, MOVE_ROAR, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [523] = {
+ [FRONTIER_MON_DONPHAN_2] = {
.species = SPECIES_DONPHAN,
.moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_EARTHQUAKE, MOVE_ROCK_TOMB},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [524] = {
+ [FRONTIER_MON_CLAYDOL_2] = {
.species = SPECIES_CLAYDOL,
.moves = {MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_COSMIC_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [525] = {
+ [FRONTIER_MON_WAILORD_2] = {
.species = SPECIES_WAILORD,
.moves = {MOVE_DOUBLE_EDGE, MOVE_REST, MOVE_CURSE, MOVE_AMNESIA},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [526] = {
+ [FRONTIER_MON_NINETALES_2] = {
.species = SPECIES_NINETALES,
.moves = {MOVE_HEAT_WAVE, MOVE_BODY_SLAM, MOVE_GRUDGE, MOVE_SUNNY_DAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [527] = {
+ [FRONTIER_MON_MACHAMP_2] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_BULK_UP, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [528] = {
+ [FRONTIER_MON_SHUCKLE_2] = {
.species = SPECIES_SHUCKLE,
.moves = {MOVE_SANDSTORM, MOVE_DIG, MOVE_FLASH, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_CAREFUL
},
- [529] = {
+ [FRONTIER_MON_STEELIX_2] = {
.species = SPECIES_STEELIX,
.moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_SANDSTORM, MOVE_BLOCK},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [530] = {
+ [FRONTIER_MON_TENTACRUEL_2] = {
.species = SPECIES_TENTACRUEL,
.moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_SURF},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [531] = {
+ [FRONTIER_MON_AERODACTYL_2] = {
.species = SPECIES_AERODACTYL,
.moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ANCIENT_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [532] = {
+ [FRONTIER_MON_PORYGON2_2] = {
.species = SPECIES_PORYGON2,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [533] = {
+ [FRONTIER_MON_GARDEVOIR_2] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [534] = {
+ [FRONTIER_MON_EXEGGUTOR_2] = {
.species = SPECIES_EXEGGUTOR,
.moves = {MOVE_RETURN, MOVE_CURSE, MOVE_SLEEP_POWDER, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [535] = {
+ [FRONTIER_MON_STARMIE_2] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [536] = {
+ [FRONTIER_MON_FLYGON_2] = {
.species = SPECIES_FLYGON,
.moves = {MOVE_SOLAR_BEAM, MOVE_FIRE_BLAST, MOVE_CRUNCH, MOVE_SUNNY_DAY},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [537] = {
+ [FRONTIER_MON_VENUSAUR_2] = {
.species = SPECIES_VENUSAUR,
.moves = {MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_DOUBLE_TEAM, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [538] = {
+ [FRONTIER_MON_VAPOREON_2] = {
.species = SPECIES_VAPOREON,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BODY_SLAM, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [539] = {
+ [FRONTIER_MON_JOLTEON_2] = {
.species = SPECIES_JOLTEON,
.moves = {MOVE_THUNDERBOLT, MOVE_DIG, MOVE_DOUBLE_KICK, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [540] = {
+ [FRONTIER_MON_FLAREON_2] = {
.species = SPECIES_FLAREON,
.moves = {MOVE_CURSE, MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [541] = {
+ [FRONTIER_MON_MEGANIUM_2] = {
.species = SPECIES_MEGANIUM,
.moves = {MOVE_LEECH_SEED, MOVE_SUBSTITUTE, MOVE_DOUBLE_TEAM, MOVE_GRASS_WHISTLE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [542] = {
+ [FRONTIER_MON_ESPEON_2] = {
.species = SPECIES_ESPEON,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_CALM_MIND, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [543] = {
+ [FRONTIER_MON_UMBREON_2] = {
.species = SPECIES_UMBREON,
.moves = {MOVE_CURSE, MOVE_SCREECH, MOVE_DOUBLE_TEAM, MOVE_DOUBLE_EDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [544] = {
+ [FRONTIER_MON_BLASTOISE_2] = {
.species = SPECIES_BLASTOISE,
.moves = {MOVE_HYDRO_PUMP, MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [545] = {
+ [FRONTIER_MON_FERALIGATR_2] = {
.species = SPECIES_FERALIGATR,
.moves = {MOVE_SURF, MOVE_DRAGON_CLAW, MOVE_BRICK_BREAK, MOVE_SCARY_FACE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [546] = {
+ [FRONTIER_MON_AGGRON_2] = {
.species = SPECIES_AGGRON,
.moves = {MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [547] = {
+ [FRONTIER_MON_BLAZIKEN_2] = {
.species = SPECIES_BLAZIKEN,
.moves = {MOVE_BLAZE_KICK, MOVE_MEGA_KICK, MOVE_THUNDER_PUNCH, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [548] = {
+ [FRONTIER_MON_WALREIN_2] = {
.species = SPECIES_WALREIN,
.moves = {MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_CURSE, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [549] = {
+ [FRONTIER_MON_SCEPTILE_2] = {
.species = SPECIES_SCEPTILE,
.moves = {MOVE_LEAF_BLADE, MOVE_THUNDER_PUNCH, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [550] = {
+ [FRONTIER_MON_CHARIZARD_2] = {
.species = SPECIES_CHARIZARD,
.moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE, MOVE_SMOKESCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [551] = {
+ [FRONTIER_MON_TYPHLOSION_2] = {
.species = SPECIES_TYPHLOSION,
.moves = {MOVE_FLAMETHROWER, MOVE_THUNDER_PUNCH, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [552] = {
+ [FRONTIER_MON_LAPRAS_2] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BODY_SLAM, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_TIMID
},
- [553] = {
+ [FRONTIER_MON_CROBAT_2] = {
.species = SPECIES_CROBAT,
.moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [554] = {
+ [FRONTIER_MON_SWAMPERT_2] = {
.species = SPECIES_SWAMPERT,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [555] = {
+ [FRONTIER_MON_GYARADOS_2] = {
.species = SPECIES_GYARADOS,
.moves = {MOVE_HYDRO_PUMP, MOVE_THUNDERBOLT, MOVE_FIRE_BLAST, MOVE_BLIZZARD},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [556] = {
+ [FRONTIER_MON_SNORLAX_2] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CURSE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [557] = {
+ [FRONTIER_MON_KINGDRA_2] = {
.species = SPECIES_KINGDRA,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_DRAGON_BREATH, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [558] = {
+ [FRONTIER_MON_BLISSEY_2] = {
.species = SPECIES_BLISSEY,
.moves = {MOVE_SEISMIC_TOSS, MOVE_SING, MOVE_ATTRACT, MOVE_SUBSTITUTE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BOLD
},
- [559] = {
+ [FRONTIER_MON_MILOTIC_2] = {
.species = SPECIES_MILOTIC,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_SAFEGUARD, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [560] = {
+ [FRONTIER_MON_ARCANINE_2] = {
.species = SPECIES_ARCANINE,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_CRUNCH, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_DOCILE
},
- [561] = {
+ [FRONTIER_MON_SALAMENCE_2] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_SWAGGER, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [562] = {
+ [FRONTIER_MON_METAGROSS_2] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_EARTHQUAKE, MOVE_METEOR_MASH, MOVE_PSYCH_UP, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [563] = {
+ [FRONTIER_MON_SLAKING_2] = {
.species = SPECIES_SLAKING,
.moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_YAWN, MOVE_AMNESIA},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_ADAMANT
},
- [564] = {
+ [FRONTIER_MON_DUGTRIO_3] = {
.species = SPECIES_DUGTRIO,
.moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_FISSURE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [565] = {
+ [FRONTIER_MON_MEDICHAM_3] = {
.species = SPECIES_MEDICHAM,
.moves = {MOVE_DYNAMIC_PUNCH, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_HARDY
},
- [566] = {
+ [FRONTIER_MON_MISDREAVUS_3] = {
.species = SPECIES_MISDREAVUS,
.moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [567] = {
+ [FRONTIER_MON_FEAROW_3] = {
.species = SPECIES_FEAROW,
.moves = {MOVE_DRILL_PECK, MOVE_RETURN, MOVE_STEEL_WING, MOVE_FAINT_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [568] = {
+ [FRONTIER_MON_GRANBULL_3] = {
.species = SPECIES_GRANBULL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_SLUDGE_BOMB, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [569] = {
+ [FRONTIER_MON_JYNX_3] = {
.species = SPECIES_JYNX,
.moves = {MOVE_DREAM_EATER, MOVE_LOVELY_KISS, MOVE_ATTRACT, MOVE_SUBSTITUTE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [570] = {
+ [FRONTIER_MON_DUSCLOPS_3] = {
.species = SPECIES_DUSCLOPS,
.moves = {MOVE_PSYCH_UP, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [571] = {
+ [FRONTIER_MON_DODRIO_3] = {
.species = SPECIES_DODRIO,
.moves = {MOVE_DOUBLE_EDGE, MOVE_DRILL_PECK, MOVE_STEEL_WING, MOVE_FAINT_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [572] = {
+ [FRONTIER_MON_MR_MIME_3] = {
.species = SPECIES_MR_MIME,
.moves = {MOVE_TRICK, MOVE_TORMENT, MOVE_PSYCHIC, MOVE_THUNDERBOLT},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [573] = {
+ [FRONTIER_MON_LANTURN_3] = {
.species = SPECIES_LANTURN,
.moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [574] = {
+ [FRONTIER_MON_BRELOOM_3] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_IRON_TAIL, MOVE_FOCUS_PUNCH, MOVE_ATTRACT, MOVE_SPORE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [575] = {
+ [FRONTIER_MON_FORRETRESS_3] = {
.species = SPECIES_FORRETRESS,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_GIGA_DRAIN, MOVE_ZAP_CANNON},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [576] = {
+ [FRONTIER_MON_WHISCASH_3] = {
.species = SPECIES_WHISCASH,
.moves = {MOVE_SLEEP_TALK, MOVE_REST, MOVE_SURF, MOVE_FISSURE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_HARDY
},
- [577] = {
+ [FRONTIER_MON_XATU_3] = {
.species = SPECIES_XATU,
.moves = {MOVE_DRILL_PECK, MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_STEEL_WING},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [578] = {
+ [FRONTIER_MON_SKARMORY_3] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_TOXIC, MOVE_CURSE, MOVE_REST, MOVE_FLY},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [579] = {
+ [FRONTIER_MON_MAROWAK_3] = {
.species = SPECIES_MAROWAK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [580] = {
+ [FRONTIER_MON_QUAGSIRE_3] = {
.species = SPECIES_QUAGSIRE,
.moves = {MOVE_EARTHQUAKE, MOVE_SLUDGE_BOMB, MOVE_DOUBLE_EDGE, MOVE_CURSE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [581] = {
+ [FRONTIER_MON_CLEFABLE_3] = {
.species = SPECIES_CLEFABLE,
.moves = {MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_FLAMETHROWER, MOVE_MAGICAL_LEAF},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [582] = {
+ [FRONTIER_MON_HARIYAMA_3] = {
.species = SPECIES_HARIYAMA,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FACADE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [583] = {
+ [FRONTIER_MON_RAICHU_3] = {
.species = SPECIES_RAICHU,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_IRON_TAIL, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_DOCILE
},
- [584] = {
+ [FRONTIER_MON_DEWGONG_3] = {
.species = SPECIES_DEWGONG,
.moves = {MOVE_HORN_DRILL, MOVE_SHEER_COLD, MOVE_SLEEP_TALK, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [585] = {
+ [FRONTIER_MON_MANECTRIC_3] = {
.species = SPECIES_MANECTRIC,
.moves = {MOVE_THUNDERBOLT, MOVE_IRON_TAIL, MOVE_THUNDER_WAVE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [586] = {
+ [FRONTIER_MON_VILEPLUME_3] = {
.species = SPECIES_VILEPLUME,
.moves = {MOVE_ATTRACT, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [587] = {
+ [FRONTIER_MON_VICTREEBEL_3] = {
.species = SPECIES_VICTREEBEL,
.moves = {MOVE_STUN_SPORE, MOVE_INGRAIN, MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [588] = {
+ [FRONTIER_MON_ELECTRODE_3] = {
.species = SPECIES_ELECTRODE,
.moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [589] = {
+ [FRONTIER_MON_EXPLOUD_3] = {
.species = SPECIES_EXPLOUD,
.moves = {MOVE_OVERHEAT, MOVE_ICE_BEAM, MOVE_THUNDER_PUNCH, MOVE_EXTRASENSORY},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [590] = {
+ [FRONTIER_MON_SHIFTRY_3] = {
.species = SPECIES_SHIFTRY,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [591] = {
+ [FRONTIER_MON_GLALIE_3] = {
.species = SPECIES_GLALIE,
.moves = {MOVE_BLIZZARD, MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [592] = {
+ [FRONTIER_MON_LUDICOLO_3] = {
.species = SPECIES_LUDICOLO,
.moves = {MOVE_LEECH_SEED, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [593] = {
+ [FRONTIER_MON_HYPNO_3] = {
.species = SPECIES_HYPNO,
.moves = {MOVE_PSYCH_UP, MOVE_SWAGGER, MOVE_MEGA_KICK, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [594] = {
+ [FRONTIER_MON_GOLEM_3] = {
.species = SPECIES_GOLEM,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [595] = {
+ [FRONTIER_MON_RHYDON_3] = {
.species = SPECIES_RHYDON,
.moves = {MOVE_MEGAHORN, MOVE_CRUSH_CLAW, MOVE_EARTHQUAKE, MOVE_HORN_DRILL},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [596] = {
+ [FRONTIER_MON_ALAKAZAM_3] = {
.species = SPECIES_ALAKAZAM,
.moves = {MOVE_TRICK, MOVE_DISABLE, MOVE_PSYCHIC, MOVE_SKILL_SWAP},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [597] = {
+ [FRONTIER_MON_WEEZING_3] = {
.species = SPECIES_WEEZING,
.moves = {MOVE_EXPLOSION, MOVE_SLUDGE_BOMB, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [598] = {
+ [FRONTIER_MON_KANGASKHAN_3] = {
.species = SPECIES_KANGASKHAN,
.moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [599] = {
+ [FRONTIER_MON_ELECTABUZZ_3] = {
.species = SPECIES_ELECTABUZZ,
.moves = {MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDERBOLT, MOVE_CROSS_CHOP},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [600] = {
+ [FRONTIER_MON_TAUROS_3] = {
.species = SPECIES_TAUROS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ICE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [601] = {
+ [FRONTIER_MON_SLOWBRO_3] = {
.species = SPECIES_SLOWBRO,
.moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
.nature = NATURE_QUIET
},
- [602] = {
+ [FRONTIER_MON_SLOWKING_3] = {
.species = SPECIES_SLOWKING,
.moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [603] = {
+ [FRONTIER_MON_MILTANK_3] = {
.species = SPECIES_MILTANK,
.moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [604] = {
+ [FRONTIER_MON_ALTARIA_3] = {
.species = SPECIES_ALTARIA,
.moves = {MOVE_SING, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [605] = {
+ [FRONTIER_MON_NIDOQUEEN_3] = {
.species = SPECIES_NIDOQUEEN,
.moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_CRUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [606] = {
+ [FRONTIER_MON_NIDOKING_3] = {
.species = SPECIES_NIDOKING,
.moves = {MOVE_HORN_DRILL, MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_SURF},
.itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [607] = {
+ [FRONTIER_MON_MAGMAR_3] = {
.species = SPECIES_MAGMAR,
.moves = {MOVE_MEGA_KICK, MOVE_CROSS_CHOP, MOVE_IRON_TAIL, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_IMPISH
},
- [608] = {
+ [FRONTIER_MON_CRADILY_3] = {
.species = SPECIES_CRADILY,
.moves = {MOVE_SUBSTITUTE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [609] = {
+ [FRONTIER_MON_ARMALDO_3] = {
.species = SPECIES_ARMALDO,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_SWORDS_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [610] = {
+ [FRONTIER_MON_GOLDUCK_3] = {
.species = SPECIES_GOLDUCK,
.moves = {MOVE_HYDRO_PUMP, MOVE_CROSS_CHOP, MOVE_BLIZZARD, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [611] = {
+ [FRONTIER_MON_RAPIDASH_3] = {
.species = SPECIES_RAPIDASH,
.moves = {MOVE_OVERHEAT, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_HYPNOSIS},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [612] = {
+ [FRONTIER_MON_MUK_3] = {
.species = SPECIES_MUK,
.moves = {MOVE_SLUDGE_BOMB, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_QUIET
},
- [613] = {
+ [FRONTIER_MON_GENGAR_3] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_GIGA_DRAIN, MOVE_SKILL_SWAP},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [614] = {
+ [FRONTIER_MON_AMPHAROS_3] = {
.species = SPECIES_AMPHAROS,
.moves = {MOVE_THUNDERBOLT, MOVE_MEGA_KICK, MOVE_IRON_TAIL, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [615] = {
+ [FRONTIER_MON_SCIZOR_3] = {
.species = SPECIES_SCIZOR,
.moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_AGILITY, MOVE_SLASH},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_CAREFUL
},
- [616] = {
+ [FRONTIER_MON_HERACROSS_3] = {
.species = SPECIES_HERACROSS,
.moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [617] = {
+ [FRONTIER_MON_URSARING_3] = {
.species = SPECIES_URSARING,
.moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH, MOVE_CRUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [618] = {
+ [FRONTIER_MON_HOUNDOOM_3] = {
.species = SPECIES_HOUNDOOM,
.moves = {MOVE_OVERHEAT, MOVE_SHADOW_BALL, MOVE_SLUDGE_BOMB, MOVE_DOUBLE_EDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [619] = {
+ [FRONTIER_MON_DONPHAN_3] = {
.species = SPECIES_DONPHAN,
.moves = {MOVE_FISSURE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SECRET_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [620] = {
+ [FRONTIER_MON_CLAYDOL_3] = {
.species = SPECIES_CLAYDOL,
.moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [621] = {
+ [FRONTIER_MON_WAILORD_3] = {
.species = SPECIES_WAILORD,
.moves = {MOVE_HYDRO_PUMP, MOVE_FISSURE, MOVE_DOUBLE_TEAM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [622] = {
+ [FRONTIER_MON_NINETALES_3] = {
.species = SPECIES_NINETALES,
.moves = {MOVE_FIRE_BLAST, MOVE_IRON_TAIL, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [623] = {
+ [FRONTIER_MON_MACHAMP_3] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_FIRE_BLAST, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [624] = {
+ [FRONTIER_MON_SHUCKLE_3] = {
.species = SPECIES_SHUCKLE,
.moves = {MOVE_SUBSTITUTE, MOVE_ATTRACT, MOVE_TOXIC, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_CAREFUL
},
- [625] = {
+ [FRONTIER_MON_STEELIX_3] = {
.species = SPECIES_STEELIX,
.moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [626] = {
+ [FRONTIER_MON_TENTACRUEL_3] = {
.species = SPECIES_TENTACRUEL,
.moves = {MOVE_SURF, MOVE_GIGA_DRAIN, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [627] = {
+ [FRONTIER_MON_AERODACTYL_3] = {
.species = SPECIES_AERODACTYL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_FIRE_BLAST, MOVE_DRAGON_CLAW},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [628] = {
+ [FRONTIER_MON_PORYGON2_3] = {
.species = SPECIES_PORYGON2,
.moves = {MOVE_PSYCHIC, MOVE_TRI_ATTACK, MOVE_THUNDER_WAVE, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [629] = {
+ [FRONTIER_MON_GARDEVOIR_3] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH, MOVE_MAGICAL_LEAF},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [630] = {
+ [FRONTIER_MON_EXEGGUTOR_3] = {
.species = SPECIES_EXEGGUTOR,
.moves = {MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [631] = {
+ [FRONTIER_MON_STARMIE_3] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [632] = {
+ [FRONTIER_MON_FLYGON_3] = {
.species = SPECIES_FLYGON,
.moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_FLAMETHROWER, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [633] = {
+ [FRONTIER_MON_VENUSAUR_3] = {
.species = SPECIES_VENUSAUR,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_SLEEP_POWDER},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [634] = {
+ [FRONTIER_MON_VAPOREON_3] = {
.species = SPECIES_VAPOREON,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_ACID_ARMOR, MOVE_BATON_PASS},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [635] = {
+ [FRONTIER_MON_JOLTEON_3] = {
.species = SPECIES_JOLTEON,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_AGILITY, MOVE_BATON_PASS},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [636] = {
+ [FRONTIER_MON_FLAREON_3] = {
.species = SPECIES_FLAREON,
.moves = {MOVE_SHADOW_BALL, MOVE_FLAIL, MOVE_ENDURE, MOVE_OVERHEAT},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [637] = {
+ [FRONTIER_MON_MEGANIUM_3] = {
.species = SPECIES_MEGANIUM,
.moves = {MOVE_EARTHQUAKE, MOVE_FLAIL, MOVE_ENDURE, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [638] = {
+ [FRONTIER_MON_ESPEON_3] = {
.species = SPECIES_ESPEON,
.moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_WISH, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [639] = {
+ [FRONTIER_MON_UMBREON_3] = {
.species = SPECIES_UMBREON,
.moves = {MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_ATTRACT, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [640] = {
+ [FRONTIER_MON_BLASTOISE_3] = {
.species = SPECIES_BLASTOISE,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [641] = {
+ [FRONTIER_MON_FERALIGATR_3] = {
.species = SPECIES_FERALIGATR,
.moves = {MOVE_HYDRO_PUMP, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [642] = {
+ [FRONTIER_MON_AGGRON_3] = {
.species = SPECIES_AGGRON,
.moves = {MOVE_SURF, MOVE_THUNDER, MOVE_FIRE_BLAST, MOVE_BLIZZARD},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [643] = {
+ [FRONTIER_MON_BLAZIKEN_3] = {
.species = SPECIES_BLAZIKEN,
.moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_REVERSAL},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [644] = {
+ [FRONTIER_MON_WALREIN_3] = {
.species = SPECIES_WALREIN,
.moves = {MOVE_SHEER_COLD, MOVE_FISSURE, MOVE_SURF, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [645] = {
+ [FRONTIER_MON_SCEPTILE_3] = {
.species = SPECIES_SCEPTILE,
.moves = {MOVE_LEAF_BLADE, MOVE_EARTHQUAKE, MOVE_CRUSH_CLAW, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [646] = {
+ [FRONTIER_MON_CHARIZARD_3] = {
.species = SPECIES_CHARIZARD,
.moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_BITE, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [647] = {
+ [FRONTIER_MON_TYPHLOSION_3] = {
.species = SPECIES_TYPHLOSION,
.moves = {MOVE_EARTHQUAKE, MOVE_OVERHEAT, MOVE_ENDURE, MOVE_REVERSAL},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [648] = {
+ [FRONTIER_MON_LAPRAS_3] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [649] = {
+ [FRONTIER_MON_CROBAT_3] = {
.species = SPECIES_CROBAT,
.moves = {MOVE_AIR_CUTTER, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [650] = {
+ [FRONTIER_MON_SWAMPERT_3] = {
.species = SPECIES_SWAMPERT,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_BRAVE
},
- [651] = {
+ [FRONTIER_MON_GYARADOS_3] = {
.species = SPECIES_GYARADOS,
.moves = {MOVE_SURF, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [652] = {
+ [FRONTIER_MON_SNORLAX_3] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_SWAGGER, MOVE_PSYCH_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_ADAMANT
},
- [653] = {
+ [FRONTIER_MON_KINGDRA_3] = {
.species = SPECIES_KINGDRA,
.moves = {MOVE_FLAIL, MOVE_HYDRO_PUMP, MOVE_DRAGON_DANCE, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [654] = {
+ [FRONTIER_MON_BLISSEY_3] = {
.species = SPECIES_BLISSEY,
.moves = {MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_CALM_MIND, MOVE_SOFT_BOILED},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BOLD
},
- [655] = {
+ [FRONTIER_MON_MILOTIC_3] = {
.species = SPECIES_MILOTIC,
.moves = {MOVE_SURF, MOVE_BLIZZARD, MOVE_ATTRACT, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [656] = {
+ [FRONTIER_MON_ARCANINE_3] = {
.species = SPECIES_ARCANINE,
.moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [657] = {
+ [FRONTIER_MON_SALAMENCE_3] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [658] = {
+ [FRONTIER_MON_METAGROSS_3] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_EARTHQUAKE, MOVE_METEOR_MASH, MOVE_DOUBLE_TEAM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [659] = {
+ [FRONTIER_MON_SLAKING_3] = {
.species = SPECIES_SLAKING,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_ADAMANT
},
- [660] = {
+ [FRONTIER_MON_DUGTRIO_4] = {
.species = SPECIES_DUGTRIO,
.moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_FISSURE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [661] = {
+ [FRONTIER_MON_MEDICHAM_4] = {
.species = SPECIES_MEDICHAM,
.moves = {MOVE_MEGA_KICK, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [662] = {
+ [FRONTIER_MON_MISDREAVUS_4] = {
.species = SPECIES_MISDREAVUS,
.moves = {MOVE_DESTINY_BOND, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_TIMID
},
- [663] = {
+ [FRONTIER_MON_FEAROW_4] = {
.species = SPECIES_FEAROW,
.moves = {MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_STEEL_WING, MOVE_SKY_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [664] = {
+ [FRONTIER_MON_GRANBULL_4] = {
.species = SPECIES_GRANBULL,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_BRAVE
},
- [665] = {
+ [FRONTIER_MON_JYNX_4] = {
.species = SPECIES_JYNX,
.moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_LOVELY_KISS, MOVE_FAKE_TEARS},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [666] = {
+ [FRONTIER_MON_DUSCLOPS_4] = {
.species = SPECIES_DUSCLOPS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_CURSE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [667] = {
+ [FRONTIER_MON_DODRIO_4] = {
.species = SPECIES_DODRIO,
.moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_DRILL_PECK, MOVE_FACADE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [668] = {
+ [FRONTIER_MON_MR_MIME_4] = {
.species = SPECIES_MR_MIME,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [669] = {
+ [FRONTIER_MON_LANTURN_4] = {
.species = SPECIES_LANTURN,
.moves = {MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [670] = {
+ [FRONTIER_MON_BRELOOM_4] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SLUDGE_BOMB, MOVE_SPORE, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [671] = {
+ [FRONTIER_MON_FORRETRESS_4] = {
.species = SPECIES_FORRETRESS,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DOUBLE_EDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [672] = {
+ [FRONTIER_MON_WHISCASH_4] = {
.species = SPECIES_WHISCASH,
.moves = {MOVE_FISSURE, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [673] = {
+ [FRONTIER_MON_XATU_4] = {
.species = SPECIES_XATU,
.moves = {MOVE_PSYCHIC, MOVE_DRILL_PECK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [674] = {
+ [FRONTIER_MON_SKARMORY_4] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_DRILL_PECK, MOVE_STEEL_WING, MOVE_COUNTER, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [675] = {
+ [FRONTIER_MON_MAROWAK_4] = {
.species = SPECIES_MAROWAK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_MEGA_KICK},
.itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [676] = {
+ [FRONTIER_MON_QUAGSIRE_4] = {
.species = SPECIES_QUAGSIRE,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_AMNESIA},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_SASSY
},
- [677] = {
+ [FRONTIER_MON_CLEFABLE_4] = {
.species = SPECIES_CLEFABLE,
.moves = {MOVE_MEGA_KICK, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_SOFT_BOILED},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [678] = {
+ [FRONTIER_MON_HARIYAMA_4] = {
.species = SPECIES_HARIYAMA,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [679] = {
+ [FRONTIER_MON_RAICHU_4] = {
.species = SPECIES_RAICHU,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_PROTECT, MOVE_MEGA_KICK},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [680] = {
+ [FRONTIER_MON_DEWGONG_4] = {
.species = SPECIES_DEWGONG,
.moves = {MOVE_SHEER_COLD, MOVE_ICE_BEAM, MOVE_SURF, MOVE_SIGNAL_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [681] = {
+ [FRONTIER_MON_MANECTRIC_4] = {
.species = SPECIES_MANECTRIC,
.moves = {MOVE_THUNDERBOLT, MOVE_CRUNCH, MOVE_THUNDER_WAVE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [682] = {
+ [FRONTIER_MON_VILEPLUME_4] = {
.species = SPECIES_VILEPLUME,
.moves = {MOVE_SOLAR_BEAM, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [683] = {
+ [FRONTIER_MON_VICTREEBEL_4] = {
.species = SPECIES_VICTREEBEL,
.moves = {MOVE_GIGA_DRAIN, MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_SYNTHESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [684] = {
+ [FRONTIER_MON_ELECTRODE_4] = {
.species = SPECIES_ELECTRODE,
.moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [685] = {
+ [FRONTIER_MON_EXPLOUD_4] = {
.species = SPECIES_EXPLOUD,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_OVERHEAT},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [686] = {
+ [FRONTIER_MON_SHIFTRY_4] = {
.species = SPECIES_SHIFTRY,
.moves = {MOVE_EXPLOSION, MOVE_GIGA_DRAIN, MOVE_MEGA_KICK, MOVE_FAKE_OUT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [687] = {
+ [FRONTIER_MON_GLALIE_4] = {
.species = SPECIES_GLALIE,
.moves = {MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [688] = {
+ [FRONTIER_MON_LUDICOLO_4] = {
.species = SPECIES_LUDICOLO,
.moves = {MOVE_LEECH_SEED, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_TOXIC},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [689] = {
+ [FRONTIER_MON_HYPNO_4] = {
.species = SPECIES_HYPNO,
.moves = {MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [690] = {
+ [FRONTIER_MON_GOLEM_4] = {
.species = SPECIES_GOLEM,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DOUBLE_EDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [691] = {
+ [FRONTIER_MON_RHYDON_4] = {
.species = SPECIES_RHYDON,
.moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_HORN_DRILL},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [692] = {
+ [FRONTIER_MON_ALAKAZAM_4] = {
.species = SPECIES_ALAKAZAM,
.moves = {MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [693] = {
+ [FRONTIER_MON_WEEZING_4] = {
.species = SPECIES_WEEZING,
.moves = {MOVE_EXPLOSION, MOVE_SLUDGE_BOMB, MOVE_FRUSTRATION, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [694] = {
+ [FRONTIER_MON_KANGASKHAN_4] = {
.species = SPECIES_KANGASKHAN,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [695] = {
+ [FRONTIER_MON_ELECTABUZZ_4] = {
.species = SPECIES_ELECTABUZZ,
.moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_MEGA_KICK, MOVE_CROSS_CHOP},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [696] = {
+ [FRONTIER_MON_TAUROS_4] = {
.species = SPECIES_TAUROS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_TOMB, MOVE_THUNDERBOLT, MOVE_SURF},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [697] = {
+ [FRONTIER_MON_SLOWBRO_4] = {
.species = SPECIES_SLOWBRO,
.moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
.nature = NATURE_SASSY
},
- [698] = {
+ [FRONTIER_MON_SLOWKING_4] = {
.species = SPECIES_SLOWKING,
.moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_FLAMETHROWER},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [699] = {
+ [FRONTIER_MON_MILTANK_4] = {
.species = SPECIES_MILTANK,
.moves = {MOVE_DOUBLE_EDGE, MOVE_CURSE, MOVE_DOUBLE_TEAM, MOVE_MILK_DRINK},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [700] = {
+ [FRONTIER_MON_ALTARIA_4] = {
.species = SPECIES_ALTARIA,
.moves = {MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ICE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [701] = {
+ [FRONTIER_MON_NIDOQUEEN_4] = {
.species = SPECIES_NIDOQUEEN,
.moves = {MOVE_SUPERPOWER, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [702] = {
+ [FRONTIER_MON_NIDOKING_4] = {
.species = SPECIES_NIDOKING,
.moves = {MOVE_MEGAHORN, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_THUNDER},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [703] = {
+ [FRONTIER_MON_MAGMAR_4] = {
.species = SPECIES_MAGMAR,
.moves = {MOVE_FLAMETHROWER, MOVE_PSYCHIC, MOVE_CROSS_CHOP, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [704] = {
+ [FRONTIER_MON_CRADILY_4] = {
.species = SPECIES_CRADILY,
.moves = {MOVE_TOXIC, MOVE_INGRAIN, MOVE_MIRROR_COAT, MOVE_GIGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [705] = {
+ [FRONTIER_MON_ARMALDO_4] = {
.species = SPECIES_ARMALDO,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [706] = {
+ [FRONTIER_MON_GOLDUCK_4] = {
.species = SPECIES_GOLDUCK,
.moves = {MOVE_SURF, MOVE_CROSS_CHOP, MOVE_ICE_BEAM, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [707] = {
+ [FRONTIER_MON_RAPIDASH_4] = {
.species = SPECIES_RAPIDASH,
.moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_IRON_TAIL, MOVE_DOUBLE_KICK},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [708] = {
+ [FRONTIER_MON_MUK_4] = {
.species = SPECIES_MUK,
.moves = {MOVE_SLUDGE_BOMB, MOVE_BRICK_BREAK, MOVE_GIGA_DRAIN, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_BRAVE
},
- [709] = {
+ [FRONTIER_MON_GENGAR_4] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [710] = {
+ [FRONTIER_MON_AMPHAROS_4] = {
.species = SPECIES_AMPHAROS,
.moves = {MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_THUNDER_WAVE, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [711] = {
+ [FRONTIER_MON_SCIZOR_4] = {
.species = SPECIES_SCIZOR,
.moves = {MOVE_SILVER_WIND, MOVE_SWORDS_DANCE, MOVE_AGILITY, MOVE_BATON_PASS},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [712] = {
+ [FRONTIER_MON_HERACROSS_4] = {
.species = SPECIES_HERACROSS,
.moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_REVERSAL, MOVE_ENDURE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [713] = {
+ [FRONTIER_MON_URSARING_4] = {
.species = SPECIES_URSARING,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [714] = {
+ [FRONTIER_MON_HOUNDOOM_4] = {
.species = SPECIES_HOUNDOOM,
.moves = {MOVE_OVERHEAT, MOVE_SOLAR_BEAM, MOVE_CRUNCH, MOVE_SUNNY_DAY},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [715] = {
+ [FRONTIER_MON_DONPHAN_4] = {
.species = SPECIES_DONPHAN,
.moves = {MOVE_FISSURE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_IRON_TAIL},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [716] = {
+ [FRONTIER_MON_CLAYDOL_4] = {
.species = SPECIES_CLAYDOL,
.moves = {MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [717] = {
+ [FRONTIER_MON_WAILORD_4] = {
.species = SPECIES_WAILORD,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_FISSURE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [718] = {
+ [FRONTIER_MON_NINETALES_4] = {
.species = SPECIES_NINETALES,
.moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [719] = {
+ [FRONTIER_MON_MACHAMP_4] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [720] = {
+ [FRONTIER_MON_SHUCKLE_4] = {
.species = SPECIES_SHUCKLE,
.moves = {MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_WRAP, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_CAREFUL
},
- [721] = {
+ [FRONTIER_MON_STEELIX_4] = {
.species = SPECIES_STEELIX,
.moves = {MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_DOUBLE_EDGE, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [722] = {
+ [FRONTIER_MON_TENTACRUEL_4] = {
.species = SPECIES_TENTACRUEL,
.moves = {MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [723] = {
+ [FRONTIER_MON_AERODACTYL_4] = {
.species = SPECIES_AERODACTYL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_FIRE_BLAST, MOVE_BITE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [724] = {
+ [FRONTIER_MON_PORYGON2_4] = {
.species = SPECIES_PORYGON2,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [725] = {
+ [FRONTIER_MON_GARDEVOIR_4] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [726] = {
+ [FRONTIER_MON_EXEGGUTOR_4] = {
.species = SPECIES_EXEGGUTOR,
.moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [727] = {
+ [FRONTIER_MON_STARMIE_4] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [728] = {
+ [FRONTIER_MON_FLYGON_4] = {
.species = SPECIES_FLYGON,
.moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_DOUBLE_EDGE, MOVE_CRUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [729] = {
+ [FRONTIER_MON_VENUSAUR_4] = {
.species = SPECIES_VENUSAUR,
.moves = {MOVE_SOLAR_BEAM, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [730] = {
+ [FRONTIER_MON_VAPOREON_4] = {
.species = SPECIES_VAPOREON,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_ACID_ARMOR, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [731] = {
+ [FRONTIER_MON_JOLTEON_4] = {
.species = SPECIES_JOLTEON,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_BITE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_TIMID
},
- [732] = {
+ [FRONTIER_MON_FLAREON_4] = {
.species = SPECIES_FLAREON,
.moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [733] = {
+ [FRONTIER_MON_MEGANIUM_4] = {
.species = SPECIES_MEGANIUM,
.moves = {MOVE_GIGA_DRAIN, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [734] = {
+ [FRONTIER_MON_ESPEON_4] = {
.species = SPECIES_ESPEON,
.moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_ATTRACT, MOVE_CALM_MIND},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [735] = {
+ [FRONTIER_MON_UMBREON_4] = {
.species = SPECIES_UMBREON,
.moves = {MOVE_CONFUSE_RAY, MOVE_TOXIC, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [736] = {
+ [FRONTIER_MON_BLASTOISE_4] = {
.species = SPECIES_BLASTOISE,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [737] = {
+ [FRONTIER_MON_FERALIGATR_4] = {
.species = SPECIES_FERALIGATR,
.moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [738] = {
+ [FRONTIER_MON_AGGRON_4] = {
.species = SPECIES_AGGRON,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [739] = {
+ [FRONTIER_MON_BLAZIKEN_4] = {
.species = SPECIES_BLAZIKEN,
.moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_THUNDER_PUNCH, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [740] = {
+ [FRONTIER_MON_WALREIN_4] = {
.species = SPECIES_WALREIN,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_SHEER_COLD},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [741] = {
+ [FRONTIER_MON_SCEPTILE_4] = {
.species = SPECIES_SCEPTILE,
.moves = {MOVE_LEAF_BLADE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_THUNDER_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [742] = {
+ [FRONTIER_MON_CHARIZARD_4] = {
.species = SPECIES_CHARIZARD,
.moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [743] = {
+ [FRONTIER_MON_TYPHLOSION_4] = {
.species = SPECIES_TYPHLOSION,
.moves = {MOVE_OVERHEAT, MOVE_THUNDER_PUNCH, MOVE_EARTHQUAKE, MOVE_CRUSH_CLAW},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [744] = {
+ [FRONTIER_MON_LAPRAS_4] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_PSYCHIC},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [745] = {
+ [FRONTIER_MON_CROBAT_4] = {
.species = SPECIES_CROBAT,
.moves = {MOVE_SLUDGE_BOMB, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [746] = {
+ [FRONTIER_MON_SWAMPERT_4] = {
.species = SPECIES_SWAMPERT,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [747] = {
+ [FRONTIER_MON_GYARADOS_4] = {
.species = SPECIES_GYARADOS,
.moves = {MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_DRAGON_DANCE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [748] = {
+ [FRONTIER_MON_SNORLAX_4] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_CURSE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [749] = {
+ [FRONTIER_MON_KINGDRA_4] = {
.species = SPECIES_KINGDRA,
.moves = {MOVE_DOUBLE_EDGE, MOVE_ICE_BEAM, MOVE_DRAGON_DANCE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [750] = {
+ [FRONTIER_MON_BLISSEY_4] = {
.species = SPECIES_BLISSEY,
.moves = {MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_COUNTER, MOVE_SOFT_BOILED},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BOLD
},
- [751] = {
+ [FRONTIER_MON_MILOTIC_4] = {
.species = SPECIES_MILOTIC,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_MIRROR_COAT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [752] = {
+ [FRONTIER_MON_ARCANINE_4] = {
.species = SPECIES_ARCANINE,
.moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_DOUBLE_EDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_DOCILE
},
- [753] = {
+ [FRONTIER_MON_SALAMENCE_4] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [754] = {
+ [FRONTIER_MON_METAGROSS_4] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [755] = {
+ [FRONTIER_MON_SLAKING_4] = {
.species = SPECIES_SLAKING,
.moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_YAWN},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
.nature = NATURE_MODEST
},
- [756] = {
+ [FRONTIER_MON_ARTICUNO_1] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_ICE_BEAM, MOVE_WATER_PULSE, MOVE_ICY_WIND, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [757] = {
+ [FRONTIER_MON_ZAPDOS_1] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_DOCILE
},
- [758] = {
+ [FRONTIER_MON_MOLTRES_1] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_FLAMETHROWER, MOVE_AERIAL_ACE, MOVE_MUD_SLAP, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [759] = {
+ [FRONTIER_MON_RAIKOU_1] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [760] = {
+ [FRONTIER_MON_ENTEI_1] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [761] = {
+ [FRONTIER_MON_SUICUNE_1] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [762] = {
+ [FRONTIER_MON_REGIROCK_1] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [763] = {
+ [FRONTIER_MON_REGICE_1] = {
.species = SPECIES_REGICE,
.moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_AMNESIA, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [764] = {
+ [FRONTIER_MON_REGISTEEL_1] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_METAL_CLAW, MOVE_CURSE, MOVE_AMNESIA, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [765] = {
+ [FRONTIER_MON_LATIAS_1] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [766] = {
+ [FRONTIER_MON_LATIOS_1] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [767] = {
+ [FRONTIER_MON_ARTICUNO_2] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_SUBSTITUTE, MOVE_TOXIC, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [768] = {
+ [FRONTIER_MON_ZAPDOS_2] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DRILL_PECK, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [769] = {
+ [FRONTIER_MON_MOLTRES_2] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_OVERHEAT, MOVE_AERIAL_ACE, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [770] = {
+ [FRONTIER_MON_RAIKOU_2] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [771] = {
+ [FRONTIER_MON_ENTEI_2] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [772] = {
+ [FRONTIER_MON_SUICUNE_2] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_TOXIC, MOVE_DIVE, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [773] = {
+ [FRONTIER_MON_REGIROCK_2] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [774] = {
+ [FRONTIER_MON_REGICE_2] = {
.species = SPECIES_REGICE,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_BLIZZARD, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [775] = {
+ [FRONTIER_MON_REGISTEEL_2] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [776] = {
+ [FRONTIER_MON_LATIAS_2] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [777] = {
+ [FRONTIER_MON_LATIOS_2] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [778] = {
+ [FRONTIER_MON_ARTICUNO_3] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_ICE_BEAM, MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [779] = {
+ [FRONTIER_MON_ZAPDOS_3] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_SUBSTITUTE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [780] = {
+ [FRONTIER_MON_MOLTRES_3] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_DOUBLE_TEAM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [781] = {
+ [FRONTIER_MON_RAIKOU_3] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [782] = {
+ [FRONTIER_MON_ENTEI_3] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_EDGE, MOVE_SWAGGER, MOVE_PSYCH_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [783] = {
+ [FRONTIER_MON_SUICUNE_3] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAIN_DANCE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [784] = {
+ [FRONTIER_MON_REGIROCK_3] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_CURSE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [785] = {
+ [FRONTIER_MON_REGICE_3] = {
.species = SPECIES_REGICE,
.moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [786] = {
+ [FRONTIER_MON_REGISTEEL_3] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_ANCIENT_POWER, MOVE_AMNESIA, MOVE_COUNTER, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [787] = {
+ [FRONTIER_MON_LATIAS_3] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [788] = {
+ [FRONTIER_MON_LATIOS_3] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [789] = {
+ [FRONTIER_MON_ARTICUNO_4] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_REST, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [790] = {
+ [FRONTIER_MON_ZAPDOS_4] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [791] = {
+ [FRONTIER_MON_MOLTRES_4] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_STEEL_WING, MOVE_SAFEGUARD},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [792] = {
+ [FRONTIER_MON_RAIKOU_4] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [793] = {
+ [FRONTIER_MON_ENTEI_4] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FLAMETHROWER, MOVE_BITE, MOVE_DOUBLE_TEAM, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [794] = {
+ [FRONTIER_MON_SUICUNE_4] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BITE, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [795] = {
+ [FRONTIER_MON_REGIROCK_4] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [796] = {
+ [FRONTIER_MON_REGICE_4] = {
.species = SPECIES_REGICE,
.moves = {MOVE_ICE_BEAM, MOVE_HAIL, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [797] = {
+ [FRONTIER_MON_REGISTEEL_4] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_ANCIENT_POWER, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [798] = {
+ [FRONTIER_MON_LATIAS_4] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_MIST_BALL, MOVE_SHADOW_BALL, MOVE_CHARM, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [799] = {
+ [FRONTIER_MON_LATIOS_4] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_LUSTER_PURGE, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [800] = {
+ [FRONTIER_MON_GENGAR_5] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [801] = {
+ [FRONTIER_MON_GENGAR_6] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [802] = {
+ [FRONTIER_MON_GENGAR_7] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [803] = {
+ [FRONTIER_MON_GENGAR_8] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [804] = {
+ [FRONTIER_MON_URSARING_5] = {
.species = SPECIES_URSARING,
.moves = {MOVE_MEGA_KICK, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [805] = {
+ [FRONTIER_MON_URSARING_6] = {
.species = SPECIES_URSARING,
.moves = {MOVE_HYPER_BEAM, MOVE_YAWN, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [806] = {
+ [FRONTIER_MON_URSARING_7] = {
.species = SPECIES_URSARING,
.moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_BULK_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [807] = {
+ [FRONTIER_MON_URSARING_8] = {
.species = SPECIES_URSARING,
.moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [808] = {
+ [FRONTIER_MON_MACHAMP_5] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [809] = {
+ [FRONTIER_MON_MACHAMP_6] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_ROCK_TOMB},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [810] = {
+ [FRONTIER_MON_MACHAMP_7] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [811] = {
+ [FRONTIER_MON_MACHAMP_8] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_REVENGE, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [812] = {
+ [FRONTIER_MON_GARDEVOIR_5] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ENDURE, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [813] = {
+ [FRONTIER_MON_GARDEVOIR_6] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_TIMID
},
- [814] = {
+ [FRONTIER_MON_GARDEVOIR_7] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [815] = {
+ [FRONTIER_MON_GARDEVOIR_8] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_MAGICAL_LEAF, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [816] = {
+ [FRONTIER_MON_STARMIE_5] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_RECOVER, MOVE_LIGHT_SCREEN},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [817] = {
+ [FRONTIER_MON_STARMIE_6] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [818] = {
+ [FRONTIER_MON_STARMIE_7] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_COSMIC_POWER, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [819] = {
+ [FRONTIER_MON_STARMIE_8] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_SURF, MOVE_THUNDERBOLT, MOVE_COSMIC_POWER, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [820] = {
+ [FRONTIER_MON_LAPRAS_5] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_IRON_TAIL, MOVE_DOUBLE_EDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [821] = {
+ [FRONTIER_MON_LAPRAS_6] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_BLIZZARD},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [822] = {
+ [FRONTIER_MON_LAPRAS_7] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SHEER_COLD, MOVE_HORN_DRILL, MOVE_REST, MOVE_SLEEP_TALK},
.itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [823] = {
+ [FRONTIER_MON_LAPRAS_8] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SHEER_COLD, MOVE_HORN_DRILL, MOVE_SING, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [824] = {
+ [FRONTIER_MON_SNORLAX_5] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [825] = {
+ [FRONTIER_MON_SNORLAX_6] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [826] = {
+ [FRONTIER_MON_SNORLAX_7] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_CURSE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [827] = {
+ [FRONTIER_MON_SNORLAX_8] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_RETURN, MOVE_SHADOW_BALL, MOVE_BELLY_DRUM, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [828] = {
+ [FRONTIER_MON_SALAMENCE_5] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [829] = {
+ [FRONTIER_MON_SALAMENCE_6] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_HEADBUTT, MOVE_AERIAL_ACE, MOVE_CRUNCH, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [830] = {
+ [FRONTIER_MON_SALAMENCE_7] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [831] = {
+ [FRONTIER_MON_SALAMENCE_8] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [832] = {
+ [FRONTIER_MON_METAGROSS_5] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_JOLLY
},
- [833] = {
+ [FRONTIER_MON_METAGROSS_6] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [834] = {
+ [FRONTIER_MON_METAGROSS_7] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [835] = {
+ [FRONTIER_MON_METAGROSS_8] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [836] = {
+ [FRONTIER_MON_REGIROCK_5] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_HYPER_BEAM, MOVE_FOCUS_PUNCH, MOVE_ROCK_SLIDE, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [837] = {
+ [FRONTIER_MON_REGIROCK_6] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [838] = {
+ [FRONTIER_MON_REGICE_5] = {
.species = SPECIES_REGICE,
.moves = {MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_CURSE, MOVE_COUNTER},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [839] = {
+ [FRONTIER_MON_REGICE_6] = {
.species = SPECIES_REGICE,
.moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_SLEEP_TALK, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [840] = {
+ [FRONTIER_MON_REGISTEEL_5] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_TOXIC, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [841] = {
+ [FRONTIER_MON_REGISTEEL_6] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_SUPERPOWER, MOVE_AERIAL_ACE, MOVE_SWAGGER, MOVE_PSYCH_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [842] = {
+ [FRONTIER_MON_LATIAS_5] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [843] = {
+ [FRONTIER_MON_LATIAS_6] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_MIST_BALL, MOVE_DRAGON_CLAW, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [844] = {
+ [FRONTIER_MON_LATIAS_7] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_SWAGGER, MOVE_PSYCH_UP},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [845] = {
+ [FRONTIER_MON_LATIAS_8] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [846] = {
+ [FRONTIER_MON_LATIOS_5] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [847] = {
+ [FRONTIER_MON_LATIOS_6] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_LUSTER_PURGE, MOVE_SHADOW_BALL, MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [848] = {
+ [FRONTIER_MON_LATIOS_7] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_DRAGON_DANCE, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [849] = {
+ [FRONTIER_MON_LATIOS_8] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [850] = {
+ [FRONTIER_MON_DRAGONITE_1] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [851] = {
+ [FRONTIER_MON_DRAGONITE_2] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [852] = {
+ [FRONTIER_MON_DRAGONITE_3] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_HYPER_BEAM, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [853] = {
+ [FRONTIER_MON_DRAGONITE_4] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_HYPER_BEAM, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [854] = {
+ [FRONTIER_MON_DRAGONITE_5] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_OUTRAGE, MOVE_DOUBLE_EDGE, MOVE_THUNDER_WAVE, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [855] = {
+ [FRONTIER_MON_DRAGONITE_6] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_FLAMETHROWER},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [856] = {
+ [FRONTIER_MON_DRAGONITE_7] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_ICE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [857] = {
+ [FRONTIER_MON_DRAGONITE_8] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_DRAGON_CLAW, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_BRICK_BREAK},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [858] = {
+ [FRONTIER_MON_DRAGONITE_9] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_THUNDER, MOVE_SURF, MOVE_RAIN_DANCE, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [859] = {
+ [FRONTIER_MON_DRAGONITE_10] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [860] = {
+ [FRONTIER_MON_TYRANITAR_1] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_THUNDERBOLT, MOVE_SURF},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [861] = {
+ [FRONTIER_MON_TYRANITAR_2] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_THUNDERBOLT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [862] = {
+ [FRONTIER_MON_TYRANITAR_3] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [863] = {
+ [FRONTIER_MON_TYRANITAR_4] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_CRUNCH, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [864] = {
+ [FRONTIER_MON_TYRANITAR_5] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [865] = {
+ [FRONTIER_MON_TYRANITAR_6] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CURSE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [866] = {
+ [FRONTIER_MON_TYRANITAR_7] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_CURSE},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [867] = {
+ [FRONTIER_MON_TYRANITAR_8] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_ROCK_SLIDE, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [868] = {
+ [FRONTIER_MON_TYRANITAR_9] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [869] = {
+ [FRONTIER_MON_TYRANITAR_10] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [870] = {
+ [FRONTIER_MON_ARTICUNO_5] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_AGILITY, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [871] = {
+ [FRONTIER_MON_ARTICUNO_6] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_ICE_BEAM, MOVE_AERIAL_ACE, MOVE_REFLECT, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [872] = {
+ [FRONTIER_MON_ZAPDOS_5] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [873] = {
+ [FRONTIER_MON_ZAPDOS_6] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDER, MOVE_DRILL_PECK, MOVE_RAIN_DANCE, MOVE_DOUBLE_EDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [874] = {
+ [FRONTIER_MON_MOLTRES_5] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_FACADE},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_DOCILE
},
- [875] = {
+ [FRONTIER_MON_MOLTRES_6] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_AERIAL_ACE, MOVE_STEEL_WING},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_DOCILE
},
- [876] = {
+ [FRONTIER_MON_RAIKOU_5] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_DOUBLE_EDGE, MOVE_ROAR, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [877] = {
+ [FRONTIER_MON_RAIKOU_6] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_SUBSTITUTE, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [878] = {
+ [FRONTIER_MON_ENTEI_5] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FIRE_BLAST, MOVE_DOUBLE_EDGE, MOVE_ENDURE, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_DOCILE
},
- [879] = {
+ [FRONTIER_MON_ENTEI_6] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_ROAR, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [880] = {
+ [FRONTIER_MON_SUICUNE_5] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_ICY_WIND},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [881] = {
+ [FRONTIER_MON_SUICUNE_6] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
diff --git a/src/data/battle_frontier/battle_frontier_trainer_mons.h b/src/data/battle_frontier/battle_frontier_trainer_mons.h
index d0e21172b..183964f2d 100644
--- a/src/data/battle_frontier/battle_frontier_trainer_mons.h
+++ b/src/data/battle_frontier/battle_frontier_trainer_mons.h
@@ -1,15229 +1,7369 @@
+// Also used by early Pkmn Breeder, Collector, and Beauty trainers
+#define FRONTIER_MONS_YOUNGSTER_LASS_1 \
+ FRONTIER_MON_SUNKERN, \
+ FRONTIER_MON_AZURILL, \
+ FRONTIER_MON_CATERPIE, \
+ FRONTIER_MON_WEEDLE, \
+ FRONTIER_MON_WURMPLE, \
+ FRONTIER_MON_RALTS, \
+ FRONTIER_MON_MAGIKARP, \
+ FRONTIER_MON_FEEBAS, \
+ FRONTIER_MON_PICHU, \
+ FRONTIER_MON_IGGLYBUFF, \
+ FRONTIER_MON_WOOPER, \
+ FRONTIER_MON_TYROGUE, \
+ FRONTIER_MON_SENTRET, \
+ FRONTIER_MON_CLEFFA, \
+ FRONTIER_MON_SEEDOT, \
+ FRONTIER_MON_LOTAD, \
+ FRONTIER_MON_POOCHYENA, \
+ FRONTIER_MON_SHEDINJA, \
+ FRONTIER_MON_MAKUHITA, \
+ FRONTIER_MON_WHISMUR, \
+ FRONTIER_MON_ZIGZAGOON, \
+ FRONTIER_MON_ZUBAT, \
+ FRONTIER_MON_TOGEPI, \
+ FRONTIER_MON_SPINARAK, \
+ FRONTIER_MON_MARILL, \
+ FRONTIER_MON_HOPPIP, \
+ FRONTIER_MON_SLUGMA, \
+ FRONTIER_MON_SWINUB, \
+ FRONTIER_MON_SMEARGLE, \
+ FRONTIER_MON_PIDGEY, \
+ FRONTIER_MON_RATTATA, \
+ FRONTIER_MON_WYNAUT, \
+ FRONTIER_MON_SKITTY, \
+ FRONTIER_MON_SPEAROW, \
+ FRONTIER_MON_HOOTHOOT, \
+ FRONTIER_MON_DIGLETT, \
+ FRONTIER_MON_LEDYBA, \
+ FRONTIER_MON_NINCADA, \
+ FRONTIER_MON_SURSKIT, \
+ FRONTIER_MON_JIGGLYPUFF, \
+ FRONTIER_MON_TAILLOW, \
+ FRONTIER_MON_WINGULL, \
+ FRONTIER_MON_NIDORAN_M, \
+ FRONTIER_MON_NIDORAN_F, \
+ FRONTIER_MON_KIRLIA, \
+ FRONTIER_MON_MAREEP, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_SLAKOTH, \
+ FRONTIER_MON_PARAS, \
+ FRONTIER_MON_EKANS, \
+ FRONTIER_MON_DITTO, \
+ FRONTIER_MON_BARBOACH, \
+ FRONTIER_MON_MEOWTH, \
+ FRONTIER_MON_PINECO, \
+ FRONTIER_MON_TRAPINCH, \
+ FRONTIER_MON_SPHEAL, \
+ FRONTIER_MON_HORSEA, \
+ FRONTIER_MON_SHROOMISH, \
+ FRONTIER_MON_SHUPPET, \
+ FRONTIER_MON_DUSKULL, \
+ FRONTIER_MON_ELECTRIKE, \
+ FRONTIER_MON_VULPIX, \
+ -1
+
+// Also used by early Pkmn Breeder, Collector, and Beauty trainers
+#define FRONTIER_MONS_SCHOOL_KID_1 \
+ FRONTIER_MON_PIKACHU, \
+ FRONTIER_MON_SANDSHREW, \
+ FRONTIER_MON_POLIWAG, \
+ FRONTIER_MON_BELLSPROUT, \
+ FRONTIER_MON_GEODUDE, \
+ FRONTIER_MON_DRATINI, \
+ FRONTIER_MON_SNUBBULL, \
+ FRONTIER_MON_REMORAID, \
+ FRONTIER_MON_LARVITAR, \
+ FRONTIER_MON_BALTOY, \
+ FRONTIER_MON_SNORUNT, \
+ FRONTIER_MON_BAGON, \
+ FRONTIER_MON_BELDUM, \
+ FRONTIER_MON_GULPIN, \
+ FRONTIER_MON_VENONAT, \
+ FRONTIER_MON_MANKEY, \
+ FRONTIER_MON_MACHOP, \
+ FRONTIER_MON_SHELLDER, \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_NUMEL, \
+ FRONTIER_MON_CARVANHA, \
+ FRONTIER_MON_CORPHISH, \
+ FRONTIER_MON_CHARMANDER, \
+ FRONTIER_MON_CYNDAQUIL, \
+ FRONTIER_MON_ABRA, \
+ FRONTIER_MON_DODUO, \
+ FRONTIER_MON_GASTLY, \
+ FRONTIER_MON_SWABLU, \
+ FRONTIER_MON_TREECKO, \
+ FRONTIER_MON_TORCHIC, \
+ FRONTIER_MON_MUDKIP, \
+ FRONTIER_MON_SQUIRTLE, \
+ FRONTIER_MON_TOTODILE, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_BULBASAUR, \
+ FRONTIER_MON_CHIKORITA, \
+ FRONTIER_MON_ODDISH, \
+ FRONTIER_MON_PSYDUCK, \
+ FRONTIER_MON_CUBONE, \
+ FRONTIER_MON_GOLDEEN, \
+ FRONTIER_MON_NATU, \
+ FRONTIER_MON_CLEFAIRY, \
+ FRONTIER_MON_MAGNEMITE, \
+ FRONTIER_MON_SEEL, \
+ -1
+
+#define FRONTIER_MONS_RICH_BOY_LADY_1 \
+ FRONTIER_MON_RALTS, \
+ FRONTIER_MON_POOCHYENA, \
+ FRONTIER_MON_SHEDINJA, \
+ FRONTIER_MON_ZUBAT, \
+ FRONTIER_MON_SPINARAK, \
+ FRONTIER_MON_WYNAUT, \
+ FRONTIER_MON_NIDORAN_M, \
+ FRONTIER_MON_NIDORAN_F, \
+ FRONTIER_MON_KIRLIA, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_EKANS, \
+ FRONTIER_MON_SHUPPET, \
+ FRONTIER_MON_DUSKULL, \
+ FRONTIER_MON_BELLSPROUT, \
+ FRONTIER_MON_BALTOY, \
+ FRONTIER_MON_BELDUM, \
+ FRONTIER_MON_GULPIN, \
+ FRONTIER_MON_VENONAT, \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_ABRA, \
+ FRONTIER_MON_GASTLY, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_BULBASAUR, \
+ FRONTIER_MON_ODDISH, \
+ FRONTIER_MON_NATU, \
+ FRONTIER_MON_GRIMER, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_DROWZEE, \
+ FRONTIER_MON_HOUNDOUR, \
+ FRONTIER_MON_SPOINK, \
+ FRONTIER_MON_TENTACOOL, \
+ FRONTIER_MON_KOFFING, \
+ FRONTIER_MON_NIDORINA, \
+ FRONTIER_MON_NIDORINO, \
+ FRONTIER_MON_BEEDRILL, \
+ FRONTIER_MON_DUSTOX, \
+ FRONTIER_MON_ARIADOS, \
+ -1
+
+// Also used by early Pkmn Breeder, Collector, and Beauty trainers
+#define FRONTIER_MONS_CAMPER_PICNICKER_1 \
+ FRONTIER_MON_GRIMER, \
+ FRONTIER_MON_KRABBY, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_EEVEE, \
+ FRONTIER_MON_DROWZEE, \
+ FRONTIER_MON_VOLTORB, \
+ FRONTIER_MON_CHINCHOU, \
+ FRONTIER_MON_TEDDIURSA, \
+ FRONTIER_MON_DELIBIRD, \
+ FRONTIER_MON_HOUNDOUR, \
+ FRONTIER_MON_PHANPY, \
+ FRONTIER_MON_SPOINK, \
+ FRONTIER_MON_ARON, \
+ FRONTIER_MON_LUVDISC, \
+ FRONTIER_MON_TENTACOOL, \
+ FRONTIER_MON_CACNEA, \
+ FRONTIER_MON_KOFFING, \
+ FRONTIER_MON_STARYU, \
+ FRONTIER_MON_SKIPLOOM, \
+ FRONTIER_MON_NUZLEAF, \
+ FRONTIER_MON_LOMBRE, \
+ FRONTIER_MON_VIBRAVA, \
+ FRONTIER_MON_RHYHORN, \
+ FRONTIER_MON_CLAMPERL, \
+ FRONTIER_MON_PIDGEOTTO, \
+ FRONTIER_MON_GROWLITHE, \
+ FRONTIER_MON_FARFETCHD, \
+ FRONTIER_MON_OMANYTE, \
+ FRONTIER_MON_KABUTO, \
+ FRONTIER_MON_LILEEP, \
+ FRONTIER_MON_ANORITH, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_ELEKID, \
+ FRONTIER_MON_LOUDRED, \
+ FRONTIER_MON_SPINDA, \
+ FRONTIER_MON_NIDORINA, \
+ FRONTIER_MON_NIDORINO, \
+ FRONTIER_MON_FLAAFFY, \
+ FRONTIER_MON_MAGBY, \
+ FRONTIER_MON_NOSEPASS, \
+ FRONTIER_MON_CORSOLA, \
+ FRONTIER_MON_MAWILE, \
+ FRONTIER_MON_BUTTERFREE, \
+ FRONTIER_MON_BEEDRILL, \
+ FRONTIER_MON_POLIWHIRL, \
+ FRONTIER_MON_ONIX, \
+ FRONTIER_MON_BEAUTIFLY, \
+ FRONTIER_MON_DUSTOX, \
+ FRONTIER_MON_LEDIAN, \
+ FRONTIER_MON_ARIADOS, \
+ FRONTIER_MON_YANMA, \
+ -1
+
+#define FRONTIER_MONS_TUBER_1 \
+ FRONTIER_MON_RALTS, \
+ FRONTIER_MON_MAGIKARP, \
+ FRONTIER_MON_FEEBAS, \
+ FRONTIER_MON_WOOPER, \
+ FRONTIER_MON_LOTAD, \
+ FRONTIER_MON_MARILL, \
+ FRONTIER_MON_WYNAUT, \
+ FRONTIER_MON_SURSKIT, \
+ FRONTIER_MON_WINGULL, \
+ FRONTIER_MON_KIRLIA, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_BARBOACH, \
+ FRONTIER_MON_SPHEAL, \
+ FRONTIER_MON_HORSEA, \
+ FRONTIER_MON_POLIWAG, \
+ FRONTIER_MON_REMORAID, \
+ FRONTIER_MON_SHELLDER, \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_CARVANHA, \
+ FRONTIER_MON_CORPHISH, \
+ FRONTIER_MON_ABRA, \
+ FRONTIER_MON_MUDKIP, \
+ FRONTIER_MON_SQUIRTLE, \
+ FRONTIER_MON_TOTODILE, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_PSYDUCK, \
+ FRONTIER_MON_GOLDEEN, \
+ FRONTIER_MON_NATU, \
+ FRONTIER_MON_SEEL, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_DROWZEE, \
+ FRONTIER_MON_SPOINK, \
+ -1
+
+#define FRONTIER_MONS_SWIMMER_M_1 \
+ FRONTIER_MON_AZURILL, \
+ FRONTIER_MON_IGGLYBUFF, \
+ FRONTIER_MON_TYROGUE, \
+ FRONTIER_MON_SENTRET, \
+ FRONTIER_MON_CLEFFA, \
+ FRONTIER_MON_MAKUHITA, \
+ FRONTIER_MON_WHISMUR, \
+ FRONTIER_MON_ZIGZAGOON, \
+ FRONTIER_MON_TOGEPI, \
+ FRONTIER_MON_SMEARGLE, \
+ FRONTIER_MON_RATTATA, \
+ FRONTIER_MON_SKITTY, \
+ FRONTIER_MON_JIGGLYPUFF, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_SLAKOTH, \
+ FRONTIER_MON_DITTO, \
+ FRONTIER_MON_MEOWTH, \
+ FRONTIER_MON_POLIWAG, \
+ FRONTIER_MON_SNUBBULL, \
+ FRONTIER_MON_REMORAID, \
+ FRONTIER_MON_MANKEY, \
+ FRONTIER_MON_MACHOP, \
+ FRONTIER_MON_SHELLDER, \
+ FRONTIER_MON_CARVANHA, \
+ FRONTIER_MON_CORPHISH, \
+ FRONTIER_MON_MUDKIP, \
+ FRONTIER_MON_SQUIRTLE, \
+ FRONTIER_MON_TOTODILE, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_PSYDUCK, \
+ FRONTIER_MON_GOLDEEN, \
+ FRONTIER_MON_CLEFAIRY, \
+ FRONTIER_MON_SEEL, \
+ FRONTIER_MON_KRABBY, \
+ FRONTIER_MON_EEVEE, \
+ FRONTIER_MON_CHINCHOU, \
+ FRONTIER_MON_TEDDIURSA, \
+ FRONTIER_MON_LUVDISC, \
+ FRONTIER_MON_TENTACOOL, \
+ FRONTIER_MON_STARYU, \
+ FRONTIER_MON_LOMBRE, \
+ FRONTIER_MON_CLAMPERL, \
+ FRONTIER_MON_OMANYTE, \
+ FRONTIER_MON_KABUTO, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_LOUDRED, \
+ FRONTIER_MON_SPINDA, \
+ FRONTIER_MON_CORSOLA, \
+ FRONTIER_MON_MAWILE, \
+ FRONTIER_MON_POLIWHIRL, \
+ -1
+
+#define FRONTIER_MONS_SWIMMER_F_1 \
+ FRONTIER_MON_AZURILL, \
+ FRONTIER_MON_IGGLYBUFF, \
+ FRONTIER_MON_SENTRET, \
+ FRONTIER_MON_CLEFFA, \
+ FRONTIER_MON_WHISMUR, \
+ FRONTIER_MON_ZIGZAGOON, \
+ FRONTIER_MON_TOGEPI, \
+ FRONTIER_MON_SMEARGLE, \
+ FRONTIER_MON_RATTATA, \
+ FRONTIER_MON_SKITTY, \
+ FRONTIER_MON_JIGGLYPUFF, \
+ FRONTIER_MON_SLAKOTH, \
+ FRONTIER_MON_DITTO, \
+ FRONTIER_MON_MEOWTH, \
+ FRONTIER_MON_POLIWAG, \
+ FRONTIER_MON_SNUBBULL, \
+ FRONTIER_MON_REMORAID, \
+ FRONTIER_MON_SNORUNT, \
+ FRONTIER_MON_SHELLDER, \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_CARVANHA, \
+ FRONTIER_MON_CORPHISH, \
+ FRONTIER_MON_MUDKIP, \
+ FRONTIER_MON_SQUIRTLE, \
+ FRONTIER_MON_TOTODILE, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_PSYDUCK, \
+ FRONTIER_MON_GOLDEEN, \
+ FRONTIER_MON_CLEFAIRY, \
+ FRONTIER_MON_SEEL, \
+ FRONTIER_MON_KRABBY, \
+ FRONTIER_MON_EEVEE, \
+ FRONTIER_MON_CHINCHOU, \
+ FRONTIER_MON_TEDDIURSA, \
+ FRONTIER_MON_DELIBIRD, \
+ FRONTIER_MON_LUVDISC, \
+ FRONTIER_MON_TENTACOOL, \
+ FRONTIER_MON_STARYU, \
+ FRONTIER_MON_LOMBRE, \
+ FRONTIER_MON_CLAMPERL, \
+ FRONTIER_MON_OMANYTE, \
+ FRONTIER_MON_KABUTO, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_LOUDRED, \
+ FRONTIER_MON_SPINDA, \
+ FRONTIER_MON_CORSOLA, \
+ FRONTIER_MON_POLIWHIRL, \
+ -1
+
+#define FRONTIER_MONS_POKEFAN_M_1 \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_NUMEL, \
+ FRONTIER_MON_CORPHISH, \
+ FRONTIER_MON_CHARMANDER, \
+ FRONTIER_MON_CYNDAQUIL, \
+ FRONTIER_MON_SWABLU, \
+ FRONTIER_MON_TREECKO, \
+ FRONTIER_MON_TORCHIC, \
+ FRONTIER_MON_MUDKIP, \
+ FRONTIER_MON_SQUIRTLE, \
+ FRONTIER_MON_TOTODILE, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_BULBASAUR, \
+ FRONTIER_MON_CHIKORITA, \
+ FRONTIER_MON_ODDISH, \
+ FRONTIER_MON_PSYDUCK, \
+ FRONTIER_MON_GOLDEEN, \
+ FRONTIER_MON_NATU, \
+ FRONTIER_MON_CLEFAIRY, \
+ FRONTIER_MON_SEEL, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_EEVEE, \
+ FRONTIER_MON_TEDDIURSA, \
+ FRONTIER_MON_PHANPY, \
+ FRONTIER_MON_SPOINK, \
+ FRONTIER_MON_LUVDISC, \
+ FRONTIER_MON_SKIPLOOM, \
+ FRONTIER_MON_CLAMPERL, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_ELEKID, \
+ FRONTIER_MON_SPINDA, \
+ FRONTIER_MON_FLAAFFY, \
+ FRONTIER_MON_MAGBY, \
+ FRONTIER_MON_CORSOLA, \
+ FRONTIER_MON_MAWILE, \
+ FRONTIER_MON_POLIWHIRL, \
+ -1
+
+#define FRONTIER_MONS_POKEFAN_F_1 \
+ FRONTIER_MON_AZURILL, \
+ FRONTIER_MON_RALTS, \
+ FRONTIER_MON_MAGIKARP, \
+ FRONTIER_MON_PICHU, \
+ FRONTIER_MON_IGGLYBUFF, \
+ FRONTIER_MON_WOOPER, \
+ FRONTIER_MON_SENTRET, \
+ FRONTIER_MON_CLEFFA, \
+ FRONTIER_MON_SEEDOT, \
+ FRONTIER_MON_LOTAD, \
+ FRONTIER_MON_POOCHYENA, \
+ FRONTIER_MON_WHISMUR, \
+ FRONTIER_MON_ZIGZAGOON, \
+ FRONTIER_MON_TOGEPI, \
+ FRONTIER_MON_MARILL, \
+ FRONTIER_MON_HOPPIP, \
+ FRONTIER_MON_SWINUB, \
+ FRONTIER_MON_SMEARGLE, \
+ FRONTIER_MON_PIDGEY, \
+ FRONTIER_MON_RATTATA, \
+ FRONTIER_MON_WYNAUT, \
+ FRONTIER_MON_SKITTY, \
+ FRONTIER_MON_SURSKIT, \
+ FRONTIER_MON_JIGGLYPUFF, \
+ FRONTIER_MON_TAILLOW, \
+ FRONTIER_MON_WINGULL, \
+ FRONTIER_MON_NIDORAN_M, \
+ FRONTIER_MON_NIDORAN_F, \
+ FRONTIER_MON_KIRLIA, \
+ FRONTIER_MON_MAREEP, \
+ FRONTIER_MON_DITTO, \
+ FRONTIER_MON_MEOWTH, \
+ FRONTIER_MON_SPHEAL, \
+ FRONTIER_MON_SHROOMISH, \
+ FRONTIER_MON_VULPIX, \
+ FRONTIER_MON_PIKACHU, \
+ FRONTIER_MON_SANDSHREW, \
+ FRONTIER_MON_POLIWAG, \
+ FRONTIER_MON_DRATINI, \
+ FRONTIER_MON_SNUBBULL, \
+ FRONTIER_MON_GULPIN, \
+ -1
+
+#define FRONTIER_MONS_BUG_CATCHER_1 \
+ FRONTIER_MON_CATERPIE, \
+ FRONTIER_MON_WEEDLE, \
+ FRONTIER_MON_WURMPLE, \
+ FRONTIER_MON_SHEDINJA, \
+ FRONTIER_MON_SPINARAK, \
+ FRONTIER_MON_DIGLETT, \
+ FRONTIER_MON_LEDYBA, \
+ FRONTIER_MON_NINCADA, \
+ FRONTIER_MON_SURSKIT, \
+ FRONTIER_MON_PARAS, \
+ FRONTIER_MON_PINECO, \
+ FRONTIER_MON_TRAPINCH, \
+ FRONTIER_MON_VENONAT, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_VIBRAVA, \
+ FRONTIER_MON_ANORITH, \
+ FRONTIER_MON_BUTTERFREE, \
+ FRONTIER_MON_BEEDRILL, \
+ FRONTIER_MON_BEAUTIFLY, \
+ FRONTIER_MON_DUSTOX, \
+ FRONTIER_MON_LEDIAN, \
+ FRONTIER_MON_ARIADOS, \
+ FRONTIER_MON_YANMA, \
+ -1
+
+// Identical to above with 2 additions. Might be possible to merge the two
+#define FRONTIER_MONS_BUG_CATCHER_1_EXTRA(species1, species2) \
+ FRONTIER_MON_CATERPIE, \
+ FRONTIER_MON_WEEDLE, \
+ FRONTIER_MON_WURMPLE, \
+ FRONTIER_MON_##species1, \
+ FRONTIER_MON_##species2, \
+ FRONTIER_MON_SHEDINJA, \
+ FRONTIER_MON_SPINARAK, \
+ FRONTIER_MON_DIGLETT, \
+ FRONTIER_MON_LEDYBA, \
+ FRONTIER_MON_NINCADA, \
+ FRONTIER_MON_SURSKIT, \
+ FRONTIER_MON_PARAS, \
+ FRONTIER_MON_PINECO, \
+ FRONTIER_MON_TRAPINCH, \
+ FRONTIER_MON_VENONAT, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_VIBRAVA, \
+ FRONTIER_MON_ANORITH, \
+ FRONTIER_MON_BUTTERFREE, \
+ FRONTIER_MON_BEEDRILL, \
+ FRONTIER_MON_BEAUTIFLY, \
+ FRONTIER_MON_DUSTOX, \
+ FRONTIER_MON_LEDIAN, \
+ FRONTIER_MON_ARIADOS, \
+ FRONTIER_MON_YANMA, \
+ -1
+
+#define FRONTIER_MONS_NINJA_BOY_1 \
+ FRONTIER_MON_RALTS, \
+ FRONTIER_MON_SHEDINJA, \
+ FRONTIER_MON_ZUBAT, \
+ FRONTIER_MON_SPINARAK, \
+ FRONTIER_MON_WYNAUT, \
+ FRONTIER_MON_DIGLETT, \
+ FRONTIER_MON_LEDYBA, \
+ FRONTIER_MON_NINCADA, \
+ FRONTIER_MON_SURSKIT, \
+ FRONTIER_MON_NIDORAN_M, \
+ FRONTIER_MON_NIDORAN_F, \
+ FRONTIER_MON_KIRLIA, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_PARAS, \
+ FRONTIER_MON_EKANS, \
+ FRONTIER_MON_PINECO, \
+ FRONTIER_MON_TRAPINCH, \
+ FRONTIER_MON_SHUPPET, \
+ FRONTIER_MON_DUSKULL, \
+ FRONTIER_MON_BELLSPROUT, \
+ FRONTIER_MON_BALTOY, \
+ FRONTIER_MON_BELDUM, \
+ FRONTIER_MON_GULPIN, \
+ FRONTIER_MON_VENONAT, \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_ABRA, \
+ FRONTIER_MON_GASTLY, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_BULBASAUR, \
+ FRONTIER_MON_ODDISH, \
+ FRONTIER_MON_NATU, \
+ FRONTIER_MON_GRIMER, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_DROWZEE, \
+ FRONTIER_MON_SPOINK, \
+ FRONTIER_MON_TENTACOOL, \
+ FRONTIER_MON_KOFFING, \
+ FRONTIER_MON_VIBRAVA, \
+ FRONTIER_MON_ANORITH, \
+ FRONTIER_MON_NIDORINA, \
+ FRONTIER_MON_NIDORINO, \
+ FRONTIER_MON_BUTTERFREE, \
+ FRONTIER_MON_BEEDRILL, \
+ FRONTIER_MON_BEAUTIFLY, \
+ FRONTIER_MON_DUSTOX, \
+ FRONTIER_MON_LEDIAN, \
+ FRONTIER_MON_ARIADOS, \
+ FRONTIER_MON_YANMA, \
+ -1
+
+#define FRONTIER_MONS_BUG_MANIAC_1 \
+ FRONTIER_MON_SHEDINJA, \
+ FRONTIER_MON_SPINARAK, \
+ FRONTIER_MON_HOPPIP, \
+ FRONTIER_MON_DIGLETT, \
+ FRONTIER_MON_LEDYBA, \
+ FRONTIER_MON_NINCADA, \
+ FRONTIER_MON_SURSKIT, \
+ FRONTIER_MON_PARAS, \
+ FRONTIER_MON_PINECO, \
+ FRONTIER_MON_TRAPINCH, \
+ FRONTIER_MON_SHROOMISH, \
+ FRONTIER_MON_SHUPPET, \
+ FRONTIER_MON_DUSKULL, \
+ FRONTIER_MON_BELLSPROUT, \
+ FRONTIER_MON_VENONAT, \
+ FRONTIER_MON_GASTLY, \
+ FRONTIER_MON_ODDISH, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_CACNEA, \
+ FRONTIER_MON_SKIPLOOM, \
+ FRONTIER_MON_VIBRAVA, \
+ FRONTIER_MON_LILEEP, \
+ FRONTIER_MON_ANORITH, \
+ FRONTIER_MON_BUTTERFREE, \
+ FRONTIER_MON_BEEDRILL, \
+ FRONTIER_MON_BEAUTIFLY, \
+ FRONTIER_MON_DUSTOX, \
+ FRONTIER_MON_LEDIAN, \
+ FRONTIER_MON_ARIADOS, \
+ FRONTIER_MON_YANMA, \
+ -1
+
+#define FRONTIER_MONS_FISHERMAN_1 \
+ FRONTIER_MON_MAGIKARP, \
+ FRONTIER_MON_FEEBAS, \
+ FRONTIER_MON_BARBOACH, \
+ FRONTIER_MON_HORSEA, \
+ FRONTIER_MON_POLIWAG, \
+ FRONTIER_MON_REMORAID, \
+ FRONTIER_MON_SHELLDER, \
+ FRONTIER_MON_CARVANHA, \
+ FRONTIER_MON_CORPHISH, \
+ FRONTIER_MON_GOLDEEN, \
+ FRONTIER_MON_KRABBY, \
+ FRONTIER_MON_CHINCHOU, \
+ FRONTIER_MON_LUVDISC, \
+ FRONTIER_MON_TENTACOOL, \
+ FRONTIER_MON_STARYU, \
+ FRONTIER_MON_CLAMPERL, \
+ FRONTIER_MON_OMANYTE, \
+ FRONTIER_MON_KABUTO, \
+ FRONTIER_MON_CORSOLA, \
+ -1
+
+#define FRONTIER_MONS_RUIN_MANIAC_1 \
+ FRONTIER_MON_SWINUB, \
+ FRONTIER_MON_DIGLETT, \
+ FRONTIER_MON_TRAPINCH, \
+ FRONTIER_MON_SANDSHREW, \
+ FRONTIER_MON_GEODUDE, \
+ FRONTIER_MON_LARVITAR, \
+ FRONTIER_MON_BALTOY, \
+ FRONTIER_MON_BELDUM, \
+ FRONTIER_MON_NUMEL, \
+ FRONTIER_MON_CUBONE, \
+ FRONTIER_MON_MAGNEMITE, \
+ FRONTIER_MON_PHANPY, \
+ FRONTIER_MON_ARON, \
+ FRONTIER_MON_RHYHORN, \
+ FRONTIER_MON_OMANYTE, \
+ FRONTIER_MON_KABUTO, \
+ FRONTIER_MON_LILEEP, \
+ FRONTIER_MON_ANORITH, \
+ FRONTIER_MON_NOSEPASS, \
+ FRONTIER_MON_CORSOLA, \
+ FRONTIER_MON_MAWILE, \
+ FRONTIER_MON_ONIX, \
+ -1
+
+#define FRONTIER_MONS_PARASOL_LADY_1 \
+ FRONTIER_MON_SUNKERN, \
+ FRONTIER_MON_WOOPER, \
+ FRONTIER_MON_LOTAD, \
+ FRONTIER_MON_MARILL, \
+ FRONTIER_MON_SURSKIT, \
+ FRONTIER_MON_TRAPINCH, \
+ FRONTIER_MON_SPHEAL, \
+ FRONTIER_MON_SANDSHREW, \
+ FRONTIER_MON_POLIWAG, \
+ FRONTIER_MON_NUMEL, \
+ FRONTIER_MON_DELIBIRD, \
+ FRONTIER_MON_PHANPY, \
+ FRONTIER_MON_LUVDISC, \
+ FRONTIER_MON_POLIWHIRL, \
+ FRONTIER_MON_ONIX, \
+ FRONTIER_MON_SUDOWOODO_1, \
+ -1
+
+#define FRONTIER_MONS_AROMA_LADY_1 \
+ FRONTIER_MON_SUNKERN, \
+ FRONTIER_MON_RALTS, \
+ FRONTIER_MON_SEEDOT, \
+ FRONTIER_MON_LOTAD, \
+ FRONTIER_MON_HOPPIP, \
+ FRONTIER_MON_WYNAUT, \
+ FRONTIER_MON_KIRLIA, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_PARAS, \
+ FRONTIER_MON_SHROOMISH, \
+ FRONTIER_MON_BELLSPROUT, \
+ FRONTIER_MON_BALTOY, \
+ FRONTIER_MON_BELDUM, \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_ABRA, \
+ FRONTIER_MON_TREECKO, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_BULBASAUR, \
+ FRONTIER_MON_CHIKORITA, \
+ FRONTIER_MON_ODDISH, \
+ FRONTIER_MON_NATU, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_DROWZEE, \
+ FRONTIER_MON_SPOINK, \
+ FRONTIER_MON_CACNEA, \
+ FRONTIER_MON_SKIPLOOM, \
+ FRONTIER_MON_NUZLEAF, \
+ FRONTIER_MON_LOMBRE, \
+ FRONTIER_MON_LILEEP, \
+ -1
+
+#define FRONTIER_MONS_GUITARIST_1 \
+ FRONTIER_MON_RALTS, \
+ FRONTIER_MON_PICHU, \
+ FRONTIER_MON_POOCHYENA, \
+ FRONTIER_MON_WYNAUT, \
+ FRONTIER_MON_KIRLIA, \
+ FRONTIER_MON_MAREEP, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_SHUPPET, \
+ FRONTIER_MON_DUSKULL, \
+ FRONTIER_MON_ELECTRIKE, \
+ FRONTIER_MON_PIKACHU, \
+ FRONTIER_MON_DRATINI, \
+ FRONTIER_MON_BALTOY, \
+ FRONTIER_MON_BAGON, \
+ FRONTIER_MON_BELDUM, \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_ABRA, \
+ FRONTIER_MON_GASTLY, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_NATU, \
+ FRONTIER_MON_MAGNEMITE, \
+ FRONTIER_MON_EXEGGCUTE, \
+ FRONTIER_MON_DROWZEE, \
+ FRONTIER_MON_VOLTORB, \
+ FRONTIER_MON_CHINCHOU, \
+ FRONTIER_MON_HOUNDOUR, \
+ FRONTIER_MON_SPOINK, \
+ FRONTIER_MON_ARON, \
+ FRONTIER_MON_ELEKID, \
+ FRONTIER_MON_FLAAFFY, \
+ FRONTIER_MON_MAWILE, \
+ -1
+
+#define FRONTIER_MONS_BIRD_KEEPER_1 \
+ FRONTIER_MON_AZURILL, \
+ FRONTIER_MON_IGGLYBUFF, \
+ FRONTIER_MON_SENTRET, \
+ FRONTIER_MON_CLEFFA, \
+ FRONTIER_MON_WHISMUR, \
+ FRONTIER_MON_ZIGZAGOON, \
+ FRONTIER_MON_ZUBAT, \
+ FRONTIER_MON_TOGEPI, \
+ FRONTIER_MON_SMEARGLE, \
+ FRONTIER_MON_PIDGEY, \
+ FRONTIER_MON_RATTATA, \
+ FRONTIER_MON_SKITTY, \
+ FRONTIER_MON_SPEAROW, \
+ FRONTIER_MON_HOOTHOOT, \
+ FRONTIER_MON_JIGGLYPUFF, \
+ FRONTIER_MON_TAILLOW, \
+ FRONTIER_MON_WINGULL, \
+ FRONTIER_MON_SLAKOTH, \
+ FRONTIER_MON_DITTO, \
+ FRONTIER_MON_MEOWTH, \
+ FRONTIER_MON_SNUBBULL, \
+ FRONTIER_MON_DODUO, \
+ FRONTIER_MON_SWABLU, \
+ FRONTIER_MON_TORCHIC, \
+ FRONTIER_MON_NATU, \
+ FRONTIER_MON_CLEFAIRY, \
+ FRONTIER_MON_EEVEE, \
+ FRONTIER_MON_TEDDIURSA, \
+ FRONTIER_MON_DELIBIRD, \
+ FRONTIER_MON_PIDGEOTTO, \
+ FRONTIER_MON_FARFETCHD, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_LOUDRED, \
+ FRONTIER_MON_SPINDA, \
+ -1
+
+#define FRONTIER_MONS_SAILOR_1 \
+ FRONTIER_MON_TYROGUE, \
+ FRONTIER_MON_MAKUHITA, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_SANDSHREW, \
+ FRONTIER_MON_GEODUDE, \
+ FRONTIER_MON_DRATINI, \
+ FRONTIER_MON_LARVITAR, \
+ FRONTIER_MON_BAGON, \
+ FRONTIER_MON_MANKEY, \
+ FRONTIER_MON_MACHOP, \
+ FRONTIER_MON_SHELLDER, \
+ FRONTIER_MON_CARVANHA, \
+ FRONTIER_MON_CORPHISH, \
+ FRONTIER_MON_MUDKIP, \
+ FRONTIER_MON_SQUIRTLE, \
+ FRONTIER_MON_TOTODILE, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_PSYDUCK, \
+ FRONTIER_MON_CUBONE, \
+ FRONTIER_MON_SEEL, \
+ FRONTIER_MON_KRABBY, \
+ FRONTIER_MON_PHANPY, \
+ FRONTIER_MON_TENTACOOL, \
+ FRONTIER_MON_STARYU, \
+ FRONTIER_MON_LOMBRE, \
+ FRONTIER_MON_RHYHORN, \
+ FRONTIER_MON_CLAMPERL, \
+ FRONTIER_MON_OMANYTE, \
+ FRONTIER_MON_KABUTO, \
+ FRONTIER_MON_CORSOLA, \
+ FRONTIER_MON_POLIWHIRL, \
+ FRONTIER_MON_ONIX, \
+ -1
+
+#define FRONTIER_MONS_HIKER_1 \
+ FRONTIER_MON_TYROGUE, \
+ FRONTIER_MON_MAKUHITA, \
+ FRONTIER_MON_SWINUB, \
+ FRONTIER_MON_DIGLETT, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_SLAKOTH, \
+ FRONTIER_MON_TRAPINCH, \
+ FRONTIER_MON_SANDSHREW, \
+ FRONTIER_MON_GEODUDE, \
+ FRONTIER_MON_LARVITAR, \
+ FRONTIER_MON_BALTOY, \
+ FRONTIER_MON_MANKEY, \
+ FRONTIER_MON_MACHOP, \
+ FRONTIER_MON_NUMEL, \
+ FRONTIER_MON_CUBONE, \
+ FRONTIER_MON_PHANPY, \
+ FRONTIER_MON_ARON, \
+ FRONTIER_MON_VIBRAVA, \
+ FRONTIER_MON_RHYHORN, \
+ FRONTIER_MON_OMANYTE, \
+ FRONTIER_MON_KABUTO, \
+ FRONTIER_MON_LILEEP, \
+ FRONTIER_MON_ANORITH, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_LOUDRED, \
+ FRONTIER_MON_NOSEPASS, \
+ FRONTIER_MON_ONIX, \
+ -1
+
+#define FRONTIER_MONS_KINDLER_1 \
+ FRONTIER_MON_SLUGMA, \
+ FRONTIER_MON_SHUPPET, \
+ FRONTIER_MON_DUSKULL, \
+ FRONTIER_MON_VULPIX, \
+ FRONTIER_MON_GEODUDE, \
+ FRONTIER_MON_LARVITAR, \
+ FRONTIER_MON_BAGON, \
+ FRONTIER_MON_BELDUM, \
+ FRONTIER_MON_NUMEL, \
+ FRONTIER_MON_CHARMANDER, \
+ FRONTIER_MON_CYNDAQUIL, \
+ FRONTIER_MON_TORCHIC, \
+ FRONTIER_MON_MAGNEMITE, \
+ FRONTIER_MON_HOUNDOUR, \
+ FRONTIER_MON_ARON, \
+ FRONTIER_MON_RHYHORN, \
+ FRONTIER_MON_GROWLITHE, \
+ FRONTIER_MON_MAGBY, \
+ FRONTIER_MON_NOSEPASS, \
+ FRONTIER_MON_MAWILE, \
+ FRONTIER_MON_ONIX, \
+ -1
+
+#define FRONTIER_MONS_RUNNING_TRIATHLETE_1 \
+ FRONTIER_MON_AZURILL, \
+ FRONTIER_MON_IGGLYBUFF, \
+ FRONTIER_MON_TYROGUE, \
+ FRONTIER_MON_SENTRET, \
+ FRONTIER_MON_CLEFFA, \
+ FRONTIER_MON_MAKUHITA, \
+ FRONTIER_MON_WHISMUR, \
+ FRONTIER_MON_ZIGZAGOON, \
+ FRONTIER_MON_TOGEPI, \
+ FRONTIER_MON_SMEARGLE, \
+ FRONTIER_MON_PIDGEY, \
+ FRONTIER_MON_RATTATA, \
+ FRONTIER_MON_SKITTY, \
+ FRONTIER_MON_SPEAROW, \
+ FRONTIER_MON_HOOTHOOT, \
+ FRONTIER_MON_JIGGLYPUFF, \
+ FRONTIER_MON_TAILLOW, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_SLAKOTH, \
+ FRONTIER_MON_DITTO, \
+ FRONTIER_MON_MEOWTH, \
+ FRONTIER_MON_SANDSHREW, \
+ FRONTIER_MON_GEODUDE, \
+ FRONTIER_MON_SNUBBULL, \
+ FRONTIER_MON_LARVITAR, \
+ FRONTIER_MON_BALTOY, \
+ FRONTIER_MON_MANKEY, \
+ FRONTIER_MON_MACHOP, \
+ FRONTIER_MON_NUMEL, \
+ FRONTIER_MON_DODUO, \
+ FRONTIER_MON_SWABLU, \
+ FRONTIER_MON_CUBONE, \
+ FRONTIER_MON_CLEFAIRY, \
+ FRONTIER_MON_EEVEE, \
+ FRONTIER_MON_TEDDIURSA, \
+ FRONTIER_MON_PHANPY, \
+ FRONTIER_MON_VIBRAVA, \
+ FRONTIER_MON_RHYHORN, \
+ FRONTIER_MON_PIDGEOTTO, \
+ FRONTIER_MON_FARFETCHD, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_LOUDRED, \
+ FRONTIER_MON_SPINDA, \
+ FRONTIER_MON_ONIX, \
+ -1
+
+#define FRONTIER_MONS_SWIMMING_TRIATHLETE_1 \
+ FRONTIER_MON_TYROGUE, \
+ FRONTIER_MON_MAKUHITA, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_DRATINI, \
+ FRONTIER_MON_SNUBBULL, \
+ FRONTIER_MON_SNORUNT, \
+ FRONTIER_MON_BAGON, \
+ FRONTIER_MON_MANKEY, \
+ FRONTIER_MON_MACHOP, \
+ FRONTIER_MON_SHELLDER, \
+ FRONTIER_MON_SMOOCHUM, \
+ FRONTIER_MON_CORPHISH, \
+ FRONTIER_MON_MUDKIP, \
+ FRONTIER_MON_SQUIRTLE, \
+ FRONTIER_MON_TOTODILE, \
+ FRONTIER_MON_SLOWPOKE, \
+ FRONTIER_MON_PSYDUCK, \
+ FRONTIER_MON_CLEFAIRY, \
+ FRONTIER_MON_SEEL, \
+ FRONTIER_MON_KRABBY, \
+ FRONTIER_MON_EEVEE, \
+ FRONTIER_MON_TEDDIURSA, \
+ FRONTIER_MON_DELIBIRD, \
+ FRONTIER_MON_LOMBRE, \
+ FRONTIER_MON_CLAMPERL, \
+ FRONTIER_MON_OMANYTE, \
+ FRONTIER_MON_KABUTO, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_LOUDRED, \
+ FRONTIER_MON_SPINDA, \
+ FRONTIER_MON_CORSOLA, \
+ FRONTIER_MON_POLIWHIRL, \
+ -1
+
+#define FRONTIER_MONS_CYCLING_TRIATHLETE_1 \
+ FRONTIER_MON_PICHU, \
+ FRONTIER_MON_TYROGUE, \
+ FRONTIER_MON_MAKUHITA, \
+ FRONTIER_MON_MAREEP, \
+ FRONTIER_MON_MEDITITE, \
+ FRONTIER_MON_ELECTRIKE, \
+ FRONTIER_MON_PIKACHU, \
+ FRONTIER_MON_DRATINI, \
+ FRONTIER_MON_SNUBBULL, \
+ FRONTIER_MON_BAGON, \
+ FRONTIER_MON_BELDUM, \
+ FRONTIER_MON_MANKEY, \
+ FRONTIER_MON_MACHOP, \
+ FRONTIER_MON_DODUO, \
+ FRONTIER_MON_SWABLU, \
+ FRONTIER_MON_CLEFAIRY, \
+ FRONTIER_MON_MAGNEMITE, \
+ FRONTIER_MON_EEVEE, \
+ FRONTIER_MON_VOLTORB, \
+ FRONTIER_MON_TEDDIURSA, \
+ FRONTIER_MON_ARON, \
+ FRONTIER_MON_PIDGEOTTO, \
+ FRONTIER_MON_FARFETCHD, \
+ FRONTIER_MON_AIPOM, \
+ FRONTIER_MON_ELEKID, \
+ FRONTIER_MON_LOUDRED, \
+ FRONTIER_MON_SPINDA, \
+ FRONTIER_MON_FLAAFFY, \
+ FRONTIER_MON_MAWILE, \
+ -1
+
+#define FRONTIER_MONS_RUNNING_TRIATHLETE_2 \
+ FRONTIER_MON_DELCATTY_1, \
+ FRONTIER_MON_LICKITUNG_1, \
+ FRONTIER_MON_PORYGON_1, \
+ FRONTIER_MON_MACHOKE_1, \
+ FRONTIER_MON_TOGETIC_1, \
+ FRONTIER_MON_MURKROW_1, \
+ FRONTIER_MON_COMBUSKEN_1, \
+ FRONTIER_MON_RATICATE_1, \
+ FRONTIER_MON_FURRET_1, \
+ FRONTIER_MON_DUNSPARCE_1, \
+ FRONTIER_MON_LINOONE_1, \
+ FRONTIER_MON_CASTFORM_1, \
+ FRONTIER_MON_WIGGLYTUFF_1, \
+ FRONTIER_MON_GLIGAR_1, \
+ FRONTIER_MON_PELIPPER_1, \
+ FRONTIER_MON_SWELLOW_1, \
+ FRONTIER_MON_PERSIAN_1, \
+ FRONTIER_MON_KECLEON_1, \
+ FRONTIER_MON_VIGOROTH_1, \
+ FRONTIER_MON_NOCTOWL_1, \
+ FRONTIER_MON_CHANSEY_1, \
+ FRONTIER_MON_GOLBAT_1, \
+ FRONTIER_MON_PRIMEAPE_1, \
+ FRONTIER_MON_HITMONLEE_1, \
+ FRONTIER_MON_HITMONCHAN_1, \
+ FRONTIER_MON_GIRAFARIG_1, \
+ FRONTIER_MON_HITMONTOP_1, \
+ FRONTIER_MON_NINJASK_1, \
+ FRONTIER_MON_ZANGOOSE_1, \
+ FRONTIER_MON_TROPIUS_1, \
+ FRONTIER_MON_MANTINE_1, \
+ FRONTIER_MON_STANTLER_1, \
+ FRONTIER_MON_PIDGEOT_1, \
+ FRONTIER_MON_SCYTHER_1, \
+ -1
+
+#define FRONTIER_MONS_SWIMMING_TRIATHLETE_2 \
+ FRONTIER_MON_WAILMER_1, \
+ FRONTIER_MON_WARTORTLE_1, \
+ FRONTIER_MON_MACHOKE_1, \
+ FRONTIER_MON_CROCONAW_1, \
+ FRONTIER_MON_COMBUSKEN_1, \
+ FRONTIER_MON_MARSHTOMP_1, \
+ FRONTIER_MON_AZUMARILL_1, \
+ FRONTIER_MON_SEALEO_1, \
+ FRONTIER_MON_QWILFISH_1, \
+ FRONTIER_MON_SNEASEL_1, \
+ FRONTIER_MON_PELIPPER_1, \
+ FRONTIER_MON_SEADRA_1, \
+ FRONTIER_MON_SEAKING_1, \
+ FRONTIER_MON_PILOSWINE_1, \
+ FRONTIER_MON_PRIMEAPE_1, \
+ FRONTIER_MON_HITMONLEE_1, \
+ FRONTIER_MON_HITMONCHAN_1, \
+ FRONTIER_MON_HITMONTOP_1, \
+ FRONTIER_MON_SHARPEDO_1, \
+ FRONTIER_MON_MANTINE_1, \
+ FRONTIER_MON_CRAWDAUNT_1, \
+ FRONTIER_MON_KINGLER_1, \
+ FRONTIER_MON_OCTILLERY_1, \
+ FRONTIER_MON_HUNTAIL_1, \
+ FRONTIER_MON_GOREBYSS_1, \
+ FRONTIER_MON_RELICANTH_1, \
+ FRONTIER_MON_OMASTAR_1, \
+ FRONTIER_MON_KABUTOPS_1, \
+ FRONTIER_MON_POLIWRATH_1, \
+ FRONTIER_MON_POLITOED_1, \
+ FRONTIER_MON_CLOYSTER_1, \
+ -1
+
+#define FRONTIER_MONS_CYCLING_TRIATHLETE_2 \
+ FRONTIER_MON_DELCATTY_1, \
+ FRONTIER_MON_LICKITUNG_1, \
+ FRONTIER_MON_PORYGON_1, \
+ FRONTIER_MON_MACHOKE_1, \
+ FRONTIER_MON_TOGETIC_1, \
+ FRONTIER_MON_PLUSLE_1, \
+ FRONTIER_MON_MINUN_1, \
+ FRONTIER_MON_COMBUSKEN_1, \
+ FRONTIER_MON_RATICATE_1, \
+ FRONTIER_MON_FURRET_1, \
+ FRONTIER_MON_DUNSPARCE_1, \
+ FRONTIER_MON_LINOONE_1, \
+ FRONTIER_MON_CASTFORM_1, \
+ FRONTIER_MON_METANG_1, \
+ FRONTIER_MON_WIGGLYTUFF_1, \
+ FRONTIER_MON_SWELLOW_1, \
+ FRONTIER_MON_LAIRON_1, \
+ FRONTIER_MON_PERSIAN_1, \
+ FRONTIER_MON_KECLEON_1, \
+ FRONTIER_MON_VIGOROTH_1, \
+ FRONTIER_MON_NOCTOWL_1, \
+ FRONTIER_MON_CHANSEY_1, \
+ FRONTIER_MON_PRIMEAPE_1, \
+ FRONTIER_MON_HITMONLEE_1, \
+ FRONTIER_MON_HITMONCHAN_1, \
+ FRONTIER_MON_GIRAFARIG_1, \
+ FRONTIER_MON_HITMONTOP_1, \
+ FRONTIER_MON_ZANGOOSE_1, \
+ FRONTIER_MON_MAGNETON_1, \
+ FRONTIER_MON_STANTLER_1, \
+ FRONTIER_MON_PIDGEOT_1, \
+ -1
+
+#define FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1 \
+ FRONTIER_MON_LICKITUNG_1, \
+ FRONTIER_MON_GRAVELER_1, \
+ FRONTIER_MON_CHARMELEON_1, \
+ FRONTIER_MON_MACHOKE_1, \
+ FRONTIER_MON_QUILAVA_1, \
+ FRONTIER_MON_COMBUSKEN_1, \
+ FRONTIER_MON_PONYTA_1, \
+ FRONTIER_MON_SUDOWOODO_1, \
+ FRONTIER_MON_MAGCARGO_1, \
+ FRONTIER_MON_PUPITAR_1, \
+ FRONTIER_MON_RATICATE_1, \
+ FRONTIER_MON_FURRET_1, \
+ FRONTIER_MON_DUNSPARCE_1, \
+ FRONTIER_MON_MIGHTYENA_1, \
+ FRONTIER_MON_LINOONE_1, \
+ FRONTIER_MON_SHELGON_1, \
+ FRONTIER_MON_METANG_1, \
+ FRONTIER_MON_WIGGLYTUFF_1, \
+ FRONTIER_MON_GLIGAR_1, \
+ FRONTIER_MON_LAIRON_1, \
+ FRONTIER_MON_PERSIAN_1, \
+ FRONTIER_MON_KECLEON_1, \
+ FRONTIER_MON_VIGOROTH_1, \
+ FRONTIER_MON_LUNATONE_1, \
+ FRONTIER_MON_SOLROCK_1, \
+ FRONTIER_MON_SANDSLASH_1, \
+ FRONTIER_MON_CHANSEY_1, \
+ FRONTIER_MON_PILOSWINE_1, \
+ FRONTIER_MON_PRIMEAPE_1, \
+ FRONTIER_MON_HITMONLEE_1, \
+ FRONTIER_MON_HITMONCHAN_1, \
+ FRONTIER_MON_GIRAFARIG_1, \
+ FRONTIER_MON_HITMONTOP_1, \
+ FRONTIER_MON_ZANGOOSE_1, \
+ FRONTIER_MON_CAMERUPT_1, \
+ FRONTIER_MON_STANTLER_1, \
+ FRONTIER_MON_ABSOL_1, \
+ FRONTIER_MON_TORKOAL_1, \
+ FRONTIER_MON_CACTURNE_1, \
+ FRONTIER_MON_POLIWRATH_1, \
+ -1
+
+#define FRONTIER_MONS_EXPERT_1A \
+ FRONTIER_MON_DELCATTY_1, \
+ FRONTIER_MON_SABLEYE_1, \
+ FRONTIER_MON_LICKITUNG_1, \
+ FRONTIER_MON_WEEPINBELL_1, \
+ FRONTIER_MON_GRAVELER_1, \
+ FRONTIER_MON_GLOOM_1, \
+ FRONTIER_MON_PORYGON_1, \
+ FRONTIER_MON_KADABRA_1, \
+ FRONTIER_MON_WAILMER_1, \
+ FRONTIER_MON_ROSELIA_1, \
+ FRONTIER_MON_VOLBEAT_1, \
+ FRONTIER_MON_ILLUMISE_1, \
+ FRONTIER_MON_IVYSAUR_1, \
+ FRONTIER_MON_CHARMELEON_1, \
+ FRONTIER_MON_WARTORTLE_1, \
+ FRONTIER_MON_PARASECT_1, \
+ FRONTIER_MON_MACHOKE_1, \
+ FRONTIER_MON_HAUNTER_1, \
+ FRONTIER_MON_BAYLEEF_1, \
+ FRONTIER_MON_QUILAVA_1, \
+ FRONTIER_MON_CROCONAW_1, \
+ FRONTIER_MON_TOGETIC_1, \
+ FRONTIER_MON_MURKROW_1, \
+ FRONTIER_MON_WOBBUFFET_1, \
+ FRONTIER_MON_PLUSLE_1, \
+ FRONTIER_MON_MINUN_1, \
+ FRONTIER_MON_GROVYLE_1, \
+ FRONTIER_MON_COMBUSKEN_1, \
+ FRONTIER_MON_MARSHTOMP_1, \
+ FRONTIER_MON_PONYTA_1, \
+ FRONTIER_MON_AZUMARILL_1, \
+ FRONTIER_MON_SUDOWOODO_1, \
+ FRONTIER_MON_MAGCARGO_1, \
+ FRONTIER_MON_PUPITAR_1, \
+ FRONTIER_MON_SEALEO_1, \
+ FRONTIER_MON_RATICATE_1, \
+ FRONTIER_MON_MASQUERAIN_1, \
+ FRONTIER_MON_FURRET_1, \
+ -1
+
+#define FRONTIER_MONS_EXPERT_1B \
+ FRONTIER_MON_DUNSPARCE_1, \
+ FRONTIER_MON_DRAGONAIR_1, \
+ FRONTIER_MON_MIGHTYENA_1, \
+ FRONTIER_MON_LINOONE_1, \
+ FRONTIER_MON_CASTFORM_1, \
+ FRONTIER_MON_SHELGON_1, \
+ FRONTIER_MON_METANG_1, \
+ FRONTIER_MON_WIGGLYTUFF_1, \
+ FRONTIER_MON_SUNFLORA_1, \
+ FRONTIER_MON_CHIMECHO_1, \
+ FRONTIER_MON_GLIGAR_1, \
+ FRONTIER_MON_QWILFISH_1, \
+ FRONTIER_MON_SNEASEL_1, \
+ FRONTIER_MON_PELIPPER_1, \
+ FRONTIER_MON_SWELLOW_1, \
+ FRONTIER_MON_LAIRON_1, \
+ FRONTIER_MON_TANGELA_1, \
+ FRONTIER_MON_ARBOK_1, \
+ FRONTIER_MON_PERSIAN_1, \
+ FRONTIER_MON_SEADRA_1, \
+ FRONTIER_MON_KECLEON_1, \
+ FRONTIER_MON_VIGOROTH_1, \
+ FRONTIER_MON_LUNATONE_1, \
+ FRONTIER_MON_SOLROCK_1, \
+ FRONTIER_MON_NOCTOWL_1, \
+ FRONTIER_MON_SANDSLASH_1, \
+ FRONTIER_MON_VENOMOTH_1, \
+ FRONTIER_MON_CHANSEY_1, \
+ FRONTIER_MON_SEAKING_1, \
+ FRONTIER_MON_JUMPLUFF_1, \
+ FRONTIER_MON_PILOSWINE_1, \
+ FRONTIER_MON_GOLBAT_1, \
+ FRONTIER_MON_PRIMEAPE_1, \
+ FRONTIER_MON_HITMONLEE_1, \
+ FRONTIER_MON_HITMONCHAN_1, \
+ FRONTIER_MON_GIRAFARIG_1, \
+ FRONTIER_MON_HITMONTOP_1, \
+ -1
+
+#define FRONTIER_MONS_EXPERT_1C \
+ FRONTIER_MON_BANETTE_1, \
+ FRONTIER_MON_NINJASK_1, \
+ FRONTIER_MON_SEVIPER_1, \
+ FRONTIER_MON_ZANGOOSE_1, \
+ FRONTIER_MON_CAMERUPT_1, \
+ FRONTIER_MON_SHARPEDO_1, \
+ FRONTIER_MON_TROPIUS_1, \
+ FRONTIER_MON_MAGNETON_1, \
+ FRONTIER_MON_MANTINE_1, \
+ FRONTIER_MON_STANTLER_1, \
+ FRONTIER_MON_ABSOL_1, \
+ FRONTIER_MON_SWALOT_1, \
+ FRONTIER_MON_CRAWDAUNT_1, \
+ FRONTIER_MON_PIDGEOT_1, \
+ FRONTIER_MON_GRUMPIG_1, \
+ FRONTIER_MON_TORKOAL_1, \
+ FRONTIER_MON_KINGLER_1, \
+ FRONTIER_MON_CACTURNE_1, \
+ FRONTIER_MON_BELLOSSOM_1, \
+ FRONTIER_MON_OCTILLERY_1, \
+ FRONTIER_MON_HUNTAIL_1, \
+ FRONTIER_MON_GOREBYSS_1, \
+ FRONTIER_MON_RELICANTH_1, \
+ FRONTIER_MON_OMASTAR_1, \
+ FRONTIER_MON_KABUTOPS_1, \
+ FRONTIER_MON_POLIWRATH_1, \
+ FRONTIER_MON_SCYTHER_1, \
+ FRONTIER_MON_PINSIR_1, \
+ FRONTIER_MON_POLITOED_1, \
+ FRONTIER_MON_CLOYSTER_1, \
+ -1
+
+#define FRONTIER_MONS_PSYCHIC_1 \
+ FRONTIER_MON_DELCATTY_2, \
+ FRONTIER_MON_SABLEYE_2, \
+ FRONTIER_MON_PORYGON_2, \
+ FRONTIER_MON_KADABRA_2, \
+ FRONTIER_MON_ROSELIA_2, \
+ FRONTIER_MON_HAUNTER_2, \
+ FRONTIER_MON_MURKROW_2, \
+ FRONTIER_MON_WOBBUFFET_2, \
+ FRONTIER_MON_PLUSLE_2, \
+ FRONTIER_MON_MINUN_2, \
+ FRONTIER_MON_MIGHTYENA_2, \
+ FRONTIER_MON_LINOONE_2, \
+ FRONTIER_MON_METANG_2, \
+ FRONTIER_MON_WIGGLYTUFF_2, \
+ FRONTIER_MON_CHIMECHO_2, \
+ FRONTIER_MON_SNEASEL_2, \
+ FRONTIER_MON_KECLEON_2, \
+ FRONTIER_MON_LUNATONE_2, \
+ FRONTIER_MON_SOLROCK_2, \
+ FRONTIER_MON_NOCTOWL_2, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_CHANSEY_2, \
+ FRONTIER_MON_GIRAFARIG_2, \
+ FRONTIER_MON_BANETTE_2, \
+ FRONTIER_MON_SHARPEDO_2, \
+ FRONTIER_MON_MAGNETON_2, \
+ FRONTIER_MON_STANTLER_2, \
+ FRONTIER_MON_ABSOL_2, \
+ FRONTIER_MON_CRAWDAUNT_2, \
+ FRONTIER_MON_GRUMPIG_2, \
+ FRONTIER_MON_CACTURNE_2, \
+ FRONTIER_MON_GOREBYSS_2, \
+ FRONTIER_MON_POLITOED_2, \
+ -1
+
+#define FRONTIER_MONS_HEX_MANIAC_1 \
+ FRONTIER_MON_SABLEYE_2, \
+ FRONTIER_MON_WEEPINBELL_2, \
+ FRONTIER_MON_GLOOM_2, \
+ FRONTIER_MON_KADABRA_2, \
+ FRONTIER_MON_PARASECT_2, \
+ FRONTIER_MON_HAUNTER_2, \
+ FRONTIER_MON_MURKROW_2, \
+ FRONTIER_MON_WOBBUFFET_2, \
+ FRONTIER_MON_MASQUERAIN_2, \
+ FRONTIER_MON_MIGHTYENA_2, \
+ FRONTIER_MON_METANG_2, \
+ FRONTIER_MON_CHIMECHO_2, \
+ FRONTIER_MON_SNEASEL_2, \
+ FRONTIER_MON_ARBOK_2, \
+ FRONTIER_MON_LUNATONE_2, \
+ FRONTIER_MON_SOLROCK_2, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_GOLBAT_2, \
+ FRONTIER_MON_GIRAFARIG_2, \
+ FRONTIER_MON_BANETTE_2, \
+ FRONTIER_MON_SEVIPER_2, \
+ FRONTIER_MON_SHARPEDO_2, \
+ FRONTIER_MON_ABSOL_2, \
+ FRONTIER_MON_SWALOT_2, \
+ FRONTIER_MON_CRAWDAUNT_2, \
+ FRONTIER_MON_GRUMPIG_2, \
+ FRONTIER_MON_CACTURNE_2, \
+ -1
+
+#define FRONTIER_MONS_POKEMANIAC_1 \
+ FRONTIER_MON_LICKITUNG_2, \
+ FRONTIER_MON_GRAVELER_2, \
+ FRONTIER_MON_WAILMER_2, \
+ FRONTIER_MON_IVYSAUR_2, \
+ FRONTIER_MON_CHARMELEON_2, \
+ FRONTIER_MON_WARTORTLE_2, \
+ FRONTIER_MON_MACHOKE_2, \
+ FRONTIER_MON_BAYLEEF_2, \
+ FRONTIER_MON_QUILAVA_2, \
+ FRONTIER_MON_CROCONAW_2, \
+ FRONTIER_MON_GROVYLE_2, \
+ FRONTIER_MON_COMBUSKEN_2, \
+ FRONTIER_MON_MARSHTOMP_2, \
+ FRONTIER_MON_PUPITAR_2, \
+ FRONTIER_MON_RATICATE_2, \
+ FRONTIER_MON_MIGHTYENA_2, \
+ FRONTIER_MON_SHELGON_2, \
+ FRONTIER_MON_METANG_2, \
+ FRONTIER_MON_LAIRON_2, \
+ FRONTIER_MON_ARBOK_2, \
+ FRONTIER_MON_VIGOROTH_2, \
+ FRONTIER_MON_SANDSLASH_2, \
+ FRONTIER_MON_CHANSEY_2, \
+ FRONTIER_MON_PILOSWINE_2, \
+ FRONTIER_MON_SEVIPER_2, \
+ FRONTIER_MON_ZANGOOSE_2, \
+ FRONTIER_MON_CAMERUPT_2, \
+ FRONTIER_MON_TROPIUS_2, \
+ FRONTIER_MON_MANTINE_2, \
+ FRONTIER_MON_SWALOT_2, \
+ FRONTIER_MON_TORKOAL_2, \
+ -1
+
+#define FRONTIER_MONS_GENTLEMAN_1A \
+ FRONTIER_MON_DELCATTY_2, \
+ FRONTIER_MON_SABLEYE_2, \
+ FRONTIER_MON_LICKITUNG_2, \
+ FRONTIER_MON_WEEPINBELL_2, \
+ FRONTIER_MON_GRAVELER_2, \
+ FRONTIER_MON_GLOOM_2, \
+ FRONTIER_MON_PORYGON_2, \
+ FRONTIER_MON_KADABRA_2, \
+ FRONTIER_MON_WAILMER_2, \
+ FRONTIER_MON_ROSELIA_2, \
+ FRONTIER_MON_VOLBEAT_2, \
+ FRONTIER_MON_ILLUMISE_2, \
+ FRONTIER_MON_IVYSAUR_2, \
+ FRONTIER_MON_CHARMELEON_2, \
+ FRONTIER_MON_WARTORTLE_2, \
+ FRONTIER_MON_PARASECT_2, \
+ FRONTIER_MON_MACHOKE_2, \
+ FRONTIER_MON_HAUNTER_2, \
+ FRONTIER_MON_BAYLEEF_2, \
+ FRONTIER_MON_QUILAVA_2, \
+ FRONTIER_MON_CROCONAW_2, \
+ FRONTIER_MON_TOGETIC_2, \
+ FRONTIER_MON_MURKROW_2, \
+ FRONTIER_MON_WOBBUFFET_2, \
+ FRONTIER_MON_PLUSLE_2, \
+ FRONTIER_MON_MINUN_2, \
+ FRONTIER_MON_GROVYLE_2, \
+ FRONTIER_MON_COMBUSKEN_2, \
+ FRONTIER_MON_MARSHTOMP_2, \
+ FRONTIER_MON_PONYTA_2, \
+ FRONTIER_MON_AZUMARILL_2, \
+ FRONTIER_MON_SUDOWOODO_2, \
+ FRONTIER_MON_MAGCARGO_2, \
+ FRONTIER_MON_PUPITAR_2, \
+ FRONTIER_MON_SEALEO_2, \
+ FRONTIER_MON_RATICATE_2, \
+ FRONTIER_MON_MASQUERAIN_2, \
+ FRONTIER_MON_FURRET_2, \
+ -1
+
+#define FRONTIER_MONS_GENTLEMAN_1B \
+ FRONTIER_MON_DUNSPARCE_2, \
+ FRONTIER_MON_DRAGONAIR_2, \
+ FRONTIER_MON_MIGHTYENA_2, \
+ FRONTIER_MON_LINOONE_2, \
+ FRONTIER_MON_CASTFORM_2, \
+ FRONTIER_MON_SHELGON_2, \
+ FRONTIER_MON_METANG_2, \
+ FRONTIER_MON_WIGGLYTUFF_2, \
+ FRONTIER_MON_SUNFLORA_2, \
+ FRONTIER_MON_CHIMECHO_2, \
+ FRONTIER_MON_GLIGAR_2, \
+ FRONTIER_MON_QWILFISH_2, \
+ FRONTIER_MON_SNEASEL_2, \
+ FRONTIER_MON_PELIPPER_2, \
+ FRONTIER_MON_SWELLOW_2, \
+ FRONTIER_MON_LAIRON_2, \
+ FRONTIER_MON_TANGELA_2, \
+ FRONTIER_MON_ARBOK_2, \
+ FRONTIER_MON_PERSIAN_2, \
+ FRONTIER_MON_SEADRA_2, \
+ FRONTIER_MON_KECLEON_2, \
+ FRONTIER_MON_VIGOROTH_2, \
+ FRONTIER_MON_LUNATONE_2, \
+ FRONTIER_MON_SOLROCK_2, \
+ FRONTIER_MON_NOCTOWL_2, \
+ FRONTIER_MON_SANDSLASH_2, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_CHANSEY_2, \
+ FRONTIER_MON_SEAKING_2, \
+ FRONTIER_MON_JUMPLUFF_2, \
+ FRONTIER_MON_PILOSWINE_2, \
+ FRONTIER_MON_GOLBAT_2, \
+ FRONTIER_MON_PRIMEAPE_2, \
+ FRONTIER_MON_HITMONLEE_2, \
+ FRONTIER_MON_HITMONCHAN_2, \
+ FRONTIER_MON_GIRAFARIG_2, \
+ FRONTIER_MON_HITMONTOP_2, \
+ -1
+
+#define FRONTIER_MONS_BUG_MANIAC_2 \
+ FRONTIER_MON_LEDIAN, \
+ FRONTIER_MON_ARIADOS, \
+ FRONTIER_MON_YANMA, \
+ FRONTIER_MON_VOLBEAT_1, \
+ FRONTIER_MON_ILLUMISE_1, \
+ FRONTIER_MON_PARASECT_1, \
+ FRONTIER_MON_MASQUERAIN_1, \
+ FRONTIER_MON_VENOMOTH_1, \
+ FRONTIER_MON_NINJASK_1, \
+ FRONTIER_MON_SCYTHER_1, \
+ FRONTIER_MON_PINSIR_1, \
+ FRONTIER_MON_VOLBEAT_2, \
+ FRONTIER_MON_ILLUMISE_2, \
+ FRONTIER_MON_PARASECT_2, \
+ FRONTIER_MON_MASQUERAIN_2, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_NINJASK_2, \
+ FRONTIER_MON_SCYTHER_2, \
+ FRONTIER_MON_PINSIR_2, \
+ -1
+
+#define FRONTIER_MONS_RUIN_MANIAC_2 \
+ FRONTIER_MON_GRAVELER_2, \
+ FRONTIER_MON_MACHOKE_2, \
+ FRONTIER_MON_COMBUSKEN_2, \
+ FRONTIER_MON_MARSHTOMP_2, \
+ FRONTIER_MON_SUDOWOODO_2, \
+ FRONTIER_MON_MAGCARGO_2, \
+ FRONTIER_MON_PUPITAR_2, \
+ FRONTIER_MON_METANG_2, \
+ FRONTIER_MON_GLIGAR_2, \
+ FRONTIER_MON_LAIRON_2, \
+ FRONTIER_MON_LUNATONE_2, \
+ FRONTIER_MON_SOLROCK_2, \
+ FRONTIER_MON_SANDSLASH_2, \
+ FRONTIER_MON_PILOSWINE_2, \
+ FRONTIER_MON_PRIMEAPE_2, \
+ FRONTIER_MON_HITMONLEE_2, \
+ FRONTIER_MON_HITMONCHAN_2, \
+ FRONTIER_MON_HITMONTOP_2, \
+ FRONTIER_MON_CAMERUPT_2, \
+ FRONTIER_MON_RELICANTH_2, \
+ FRONTIER_MON_OMASTAR_2, \
+ FRONTIER_MON_KABUTOPS_2, \
+ -1
+
+#define FRONTIER_MONS_COLLECTOR_1 \
+ FRONTIER_MON_BANETTE_2, \
+ FRONTIER_MON_NINJASK_2, \
+ FRONTIER_MON_SEVIPER_2, \
+ FRONTIER_MON_ZANGOOSE_2, \
+ FRONTIER_MON_CAMERUPT_2, \
+ FRONTIER_MON_SHARPEDO_2, \
+ FRONTIER_MON_TROPIUS_2, \
+ FRONTIER_MON_MAGNETON_2, \
+ FRONTIER_MON_MANTINE_2, \
+ FRONTIER_MON_STANTLER_2, \
+ FRONTIER_MON_ABSOL_2, \
+ FRONTIER_MON_SWALOT_2, \
+ FRONTIER_MON_CRAWDAUNT_2, \
+ FRONTIER_MON_PIDGEOT_2, \
+ FRONTIER_MON_GRUMPIG_2, \
+ FRONTIER_MON_TORKOAL_2, \
+ FRONTIER_MON_KINGLER_2, \
+ FRONTIER_MON_CACTURNE_2, \
+ FRONTIER_MON_BELLOSSOM_2, \
+ FRONTIER_MON_OCTILLERY_2, \
+ FRONTIER_MON_HUNTAIL_2, \
+ FRONTIER_MON_GOREBYSS_2, \
+ FRONTIER_MON_RELICANTH_2, \
+ FRONTIER_MON_OMASTAR_2, \
+ FRONTIER_MON_KABUTOPS_2, \
+ FRONTIER_MON_POLIWRATH_2, \
+ FRONTIER_MON_SCYTHER_2, \
+ FRONTIER_MON_PINSIR_2, \
+ FRONTIER_MON_POLITOED_2, \
+ FRONTIER_MON_CLOYSTER_2, \
+ -1
+
+#define FRONTIER_MONS_PARASOL_LADY_2 \
+ FRONTIER_MON_GLOOM_2, \
+ FRONTIER_MON_SEALEO_2, \
+ FRONTIER_MON_CASTFORM_2, \
+ FRONTIER_MON_SANDSLASH_2, \
+ FRONTIER_MON_TROPIUS_2, \
+ FRONTIER_MON_MAGNETON_2, \
+ FRONTIER_MON_MANTINE_2, \
+ FRONTIER_MON_CACTURNE_2, \
+ FRONTIER_MON_BELLOSSOM_2, \
+ FRONTIER_MON_HUNTAIL_2, \
+ FRONTIER_MON_GOREBYSS_2, \
+ FRONTIER_MON_OMASTAR_2, \
+ -1
+
+#define FRONTIER_MONS_BEAUTY_1 \
+ FRONTIER_MON_DELCATTY_2, \
+ FRONTIER_MON_LICKITUNG_2, \
+ FRONTIER_MON_WEEPINBELL_2, \
+ FRONTIER_MON_GLOOM_2, \
+ FRONTIER_MON_PORYGON_2, \
+ FRONTIER_MON_ROSELIA_2, \
+ FRONTIER_MON_IVYSAUR_2, \
+ FRONTIER_MON_HAUNTER_2, \
+ FRONTIER_MON_TOGETIC_2, \
+ FRONTIER_MON_RATICATE_2, \
+ FRONTIER_MON_FURRET_2, \
+ FRONTIER_MON_DUNSPARCE_2, \
+ FRONTIER_MON_LINOONE_2, \
+ FRONTIER_MON_CASTFORM_2, \
+ FRONTIER_MON_WIGGLYTUFF_2, \
+ FRONTIER_MON_QWILFISH_2, \
+ FRONTIER_MON_SWELLOW_2, \
+ FRONTIER_MON_ARBOK_2, \
+ FRONTIER_MON_PERSIAN_2, \
+ FRONTIER_MON_KECLEON_2, \
+ FRONTIER_MON_VIGOROTH_2, \
+ FRONTIER_MON_NOCTOWL_2, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_CHANSEY_2, \
+ FRONTIER_MON_GOLBAT_2, \
+ FRONTIER_MON_GIRAFARIG_2, \
+ FRONTIER_MON_SEVIPER_2, \
+ FRONTIER_MON_ZANGOOSE_2, \
+ FRONTIER_MON_STANTLER_2, \
+ FRONTIER_MON_SWALOT_2, \
+ FRONTIER_MON_PIDGEOT_2, \
+ -1
+
+#define FRONTIER_MONS_AROMA_LADY_2 \
+ FRONTIER_MON_WEEPINBELL_2, \
+ FRONTIER_MON_GLOOM_2, \
+ FRONTIER_MON_KADABRA_2, \
+ FRONTIER_MON_ROSELIA_2, \
+ FRONTIER_MON_IVYSAUR_2, \
+ FRONTIER_MON_PARASECT_2, \
+ FRONTIER_MON_BAYLEEF_2, \
+ FRONTIER_MON_WOBBUFFET_2, \
+ FRONTIER_MON_GROVYLE_2, \
+ FRONTIER_MON_SUNFLORA_2, \
+ FRONTIER_MON_CHIMECHO_2, \
+ FRONTIER_MON_TANGELA_2, \
+ FRONTIER_MON_JUMPLUFF_2, \
+ FRONTIER_MON_GIRAFARIG_2, \
+ FRONTIER_MON_TROPIUS_2, \
+ FRONTIER_MON_GRUMPIG_2, \
+ FRONTIER_MON_CACTURNE_2, \
+ FRONTIER_MON_BELLOSSOM_2, \
+ -1
+
+#define FRONTIER_MONS_COOLTRAINER_1A \
+ FRONTIER_MON_DUGTRIO_1, \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_FEAROW_1, \
+ FRONTIER_MON_GRANBULL_1, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_DUSCLOPS_1, \
+ FRONTIER_MON_DODRIO_1, \
+ FRONTIER_MON_MR_MIME_1, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_WHISCASH_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_MAROWAK_1, \
+ FRONTIER_MON_QUAGSIRE_1, \
+ FRONTIER_MON_CLEFABLE_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_RAICHU_1, \
+ FRONTIER_MON_DEWGONG_1, \
+ FRONTIER_MON_MANECTRIC_1, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_VICTREEBEL_1, \
+ FRONTIER_MON_ELECTRODE_1, \
+ FRONTIER_MON_EXPLOUD_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_GLALIE_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_HYPNO_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_ALAKAZAM_1, \
+ -1
+
+#define FRONTIER_MONS_COOLTRAINER_1B \
+ FRONTIER_MON_WEEZING_1, \
+ FRONTIER_MON_KANGASKHAN_1, \
+ FRONTIER_MON_ELECTABUZZ_1, \
+ FRONTIER_MON_TAUROS_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_MILTANK_1, \
+ FRONTIER_MON_ALTARIA_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_MAGMAR_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_GOLDUCK_1, \
+ FRONTIER_MON_RAPIDASH_1, \
+ FRONTIER_MON_MUK_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_DONPHAN_1, \
+ FRONTIER_MON_CLAYDOL_1, \
+ FRONTIER_MON_WAILORD_1, \
+ FRONTIER_MON_NINETALES_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_TENTACRUEL_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_PORYGON2_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ -1
+
+#define FRONTIER_MONS_COOLTRAINER_1C \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_VAPOREON_1, \
+ FRONTIER_MON_JOLTEON_1, \
+ FRONTIER_MON_FLAREON_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_ESPEON_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_TYPHLOSION_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_BLISSEY_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_ARCANINE_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_SLAKING_1, \
+ -1
+
+#define FRONTIER_MONS_PKMN_RANGER_1 \
+ FRONTIER_MON_NINJASK_1, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_NINJASK_2, \
+ FRONTIER_MON_SCYTHER_2, \
+ FRONTIER_MON_PINSIR_2, \
+ FRONTIER_MON_FEAROW_1, \
+ FRONTIER_MON_GRANBULL_1, \
+ FRONTIER_MON_DODRIO_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_CLEFABLE_1, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_VICTREEBEL_1, \
+ FRONTIER_MON_EXPLOUD_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_KANGASKHAN_1, \
+ FRONTIER_MON_TAUROS_1, \
+ FRONTIER_MON_MILTANK_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_PORYGON2_1, \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_BLISSEY_1, \
+ FRONTIER_MON_SLAKING_1, \
+ -1
+
+#define FRONTIER_MONS_DRAGON_TAMER_1 \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_ALTARIA_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_ARCANINE_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ -1
+
+#define FRONTIER_MONS_POKEFAN_2 \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_QUAGSIRE_1, \
+ FRONTIER_MON_CLEFABLE_1, \
+ FRONTIER_MON_RAICHU_1, \
+ FRONTIER_MON_DEWGONG_1, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_MILTANK_1, \
+ FRONTIER_MON_ALTARIA_1, \
+ FRONTIER_MON_RAPIDASH_1, \
+ FRONTIER_MON_NINETALES_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_PORYGON2_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_BLISSEY_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_SLAKING_1, \
+ -1
+
+#define FRONTIER_MONS_PKMN_BREEDER_M_1 \
+ FRONTIER_MON_MUK_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_DONPHAN_1, \
+ FRONTIER_MON_CLAYDOL_1, \
+ FRONTIER_MON_WAILORD_1, \
+ FRONTIER_MON_NINETALES_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_TENTACRUEL_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_PORYGON2_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_VAPOREON_1, \
+ FRONTIER_MON_JOLTEON_1, \
+ FRONTIER_MON_FLAREON_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_ESPEON_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_TYPHLOSION_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_BLISSEY_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_ARCANINE_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_SLAKING_1, \
+ -1
+
+#define FRONTIER_MONS_PKMN_BREEDER_F_1 \
+ FRONTIER_MON_DUGTRIO_1, \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_FEAROW_1, \
+ FRONTIER_MON_GRANBULL_1, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_DUSCLOPS_1, \
+ FRONTIER_MON_DODRIO_1, \
+ FRONTIER_MON_MR_MIME_1, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_WHISCASH_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_MAROWAK_1, \
+ FRONTIER_MON_QUAGSIRE_1, \
+ FRONTIER_MON_CLEFABLE_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_RAICHU_1, \
+ FRONTIER_MON_DEWGONG_1, \
+ FRONTIER_MON_MANECTRIC_1, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_VICTREEBEL_1, \
+ FRONTIER_MON_ELECTRODE_1, \
+ FRONTIER_MON_EXPLOUD_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_GLALIE_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_HYPNO_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_ALAKAZAM_1, \
+ FRONTIER_MON_WEEZING_1, \
+ FRONTIER_MON_KANGASKHAN_1, \
+ FRONTIER_MON_ELECTABUZZ_1, \
+ FRONTIER_MON_TAUROS_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_MILTANK_1, \
+ FRONTIER_MON_ALTARIA_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_MAGMAR_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_GOLDUCK_1, \
+ FRONTIER_MON_RAPIDASH_1, \
+ -1
+
+// Odd, all the other Youngster/Lass trainers of this group have Dugtrio, but one does not
+#define FRONTIER_MONS_YOUNGSTER_LASS_2_NO_DUGTRIO \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_MAROWAK_2, \
+ FRONTIER_MON_QUAGSIRE_2, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_FEAROW_2, \
+ FRONTIER_MON_GRANBULL_2, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_DUSCLOPS_2, \
+ FRONTIER_MON_DODRIO_2, \
+ FRONTIER_MON_MR_MIME_2, \
+ FRONTIER_MON_LANTURN_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_SKARMORY_2, \
+ FRONTIER_MON_WHISCASH_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_CLEFABLE_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_RAICHU_2, \
+ FRONTIER_MON_DEWGONG_2, \
+ FRONTIER_MON_MANECTRIC_2, \
+ FRONTIER_MON_VILEPLUME_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_ELECTRODE_2, \
+ FRONTIER_MON_EXPLOUD_2, \
+ FRONTIER_MON_SHIFTRY_2, \
+ FRONTIER_MON_GLALIE_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_HYPNO_2, \
+ FRONTIER_MON_GOLEM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_ALAKAZAM_2, \
+ -1
+
+#define FRONTIER_MONS_YOUNGSTER_LASS_2 \
+ FRONTIER_MON_DUGTRIO_2, \
+ FRONTIER_MONS_YOUNGSTER_LASS_2_NO_DUGTRIO
+
+#define FRONTIER_MONS_SCHOOL_KID_2 \
+ FRONTIER_MON_WEEZING_2, \
+ FRONTIER_MON_KANGASKHAN_2, \
+ FRONTIER_MON_ELECTABUZZ_2, \
+ FRONTIER_MON_TAUROS_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_MILTANK_2, \
+ FRONTIER_MON_ALTARIA_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_MAGMAR_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_GOLDUCK_2, \
+ FRONTIER_MON_RAPIDASH_2, \
+ FRONTIER_MON_MUK_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_AMPHAROS_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_DONPHAN_2, \
+ FRONTIER_MON_CLAYDOL_2, \
+ FRONTIER_MON_WAILORD_2, \
+ FRONTIER_MON_NINETALES_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_PORYGON2_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ -1
+
+#define FRONTIER_MONS_RICH_BOY_LADY_2 \
+ FRONTIER_MON_EXEGGUTOR_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_FLYGON_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_VAPOREON_2, \
+ FRONTIER_MON_JOLTEON_2, \
+ FRONTIER_MON_FLAREON_2, \
+ FRONTIER_MON_MEGANIUM_2, \
+ FRONTIER_MON_ESPEON_2, \
+ FRONTIER_MON_UMBREON_2, \
+ FRONTIER_MON_BLASTOISE_2, \
+ FRONTIER_MON_FERALIGATR_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_SCEPTILE_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_TYPHLOSION_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_CROBAT_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_KINGDRA_2, \
+ FRONTIER_MON_BLISSEY_2, \
+ FRONTIER_MON_MILOTIC_2, \
+ FRONTIER_MON_ARCANINE_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_SLAKING_2, \
+ -1
+
+#define FRONTIER_MONS_BUG_CATCHER_2 \
+ FRONTIER_MON_NINJASK_2, \
+ FRONTIER_MON_SCYTHER_2, \
+ FRONTIER_MON_PINSIR_2, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_VILEPLUME_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_SHIFTRY_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_EXEGGUTOR_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_MEGANIUM_2, \
+ FRONTIER_MON_SCEPTILE_2, \
+ -1
+
+#define FRONTIER_MONS_NINJA_BOY_2 \
+ FRONTIER_MON_PARASECT_2, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_NINJASK_2, \
+ FRONTIER_MON_SCYTHER_2, \
+ FRONTIER_MON_PINSIR_2, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_DUSCLOPS_2, \
+ FRONTIER_MON_MR_MIME_2, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_VILEPLUME_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_HYPNO_2, \
+ FRONTIER_MON_ALAKAZAM_2, \
+ FRONTIER_MON_WEEZING_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_MUK_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_CLAYDOL_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ FRONTIER_MON_EXEGGUTOR_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_ESPEON_2, \
+ FRONTIER_MON_CROBAT_2, \
+ -1
+
+#define FRONTIER_MONS_TUBER_2 \
+ FRONTIER_MON_QUAGSIRE_2, \
+ FRONTIER_MON_GRANBULL_2, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_LANTURN_2, \
+ FRONTIER_MON_WHISCASH_2, \
+ FRONTIER_MON_CLEFABLE_2, \
+ FRONTIER_MON_DEWGONG_2, \
+ FRONTIER_MON_EXPLOUD_2, \
+ FRONTIER_MON_GLALIE_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_KANGASKHAN_2, \
+ FRONTIER_MON_TAUROS_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_MILTANK_2, \
+ FRONTIER_MON_GOLDUCK_2, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_WAILORD_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_PORYGON2_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_VAPOREON_2, \
+ FRONTIER_MON_BLASTOISE_2, \
+ FRONTIER_MON_FERALIGATR_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_KINGDRA_2, \
+ FRONTIER_MON_BLISSEY_2, \
+ FRONTIER_MON_MILOTIC_2, \
+ FRONTIER_MON_SLAKING_2, \
+ -1
+
+#define FRONTIER_MONS_BUG_MANIAC_3 \
+ FRONTIER_MON_VOLBEAT_2, \
+ FRONTIER_MON_ILLUMISE_2, \
+ FRONTIER_MON_PARASECT_2, \
+ FRONTIER_MON_MASQUERAIN_2, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_NINJASK_2, \
+ FRONTIER_MON_SCYTHER_2, \
+ FRONTIER_MON_PINSIR_2, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_FORRETRESS_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ -1
+
+#define FRONTIER_MONS_FISHERMAN_2 \
+ FRONTIER_MON_QWILFISH_2, \
+ FRONTIER_MON_SEAKING_2, \
+ FRONTIER_MON_SHARPEDO_2, \
+ FRONTIER_MON_MANTINE_2, \
+ FRONTIER_MON_CRAWDAUNT_2, \
+ FRONTIER_MON_KINGLER_2, \
+ FRONTIER_MON_OCTILLERY_2, \
+ FRONTIER_MON_HUNTAIL_2, \
+ FRONTIER_MON_GOREBYSS_2, \
+ FRONTIER_MON_RELICANTH_2, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_WHISCASH_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_STARMIE_3, \
+ -1
+
+#define FRONTIER_MONS_RUIN_MANIAC_3 \
+ FRONTIER_MON_DUGTRIO_3, \
+ FRONTIER_MON_FORRETRESS_3, \
+ FRONTIER_MON_WHISCASH_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_QUAGSIRE_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_DONPHAN_3, \
+ FRONTIER_MON_CLAYDOL_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_FLYGON_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ -1
+
+#define FRONTIER_MONS_COLLECTOR_2 \
+ FRONTIER_MON_DUGTRIO_3, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_MISDREAVUS_3, \
+ FRONTIER_MON_FEAROW_3, \
+ FRONTIER_MON_GRANBULL_3, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_DUSCLOPS_3, \
+ FRONTIER_MON_DODRIO_3, \
+ FRONTIER_MON_MR_MIME_3, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_FORRETRESS_3, \
+ FRONTIER_MON_WHISCASH_3, \
+ FRONTIER_MON_XATU_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_QUAGSIRE_3, \
+ FRONTIER_MON_CLEFABLE_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_RAICHU_3, \
+ FRONTIER_MON_DEWGONG_3, \
+ FRONTIER_MON_MANECTRIC_3, \
+ FRONTIER_MON_VILEPLUME_3, \
+ FRONTIER_MON_VICTREEBEL_3, \
+ FRONTIER_MON_ELECTRODE_3, \
+ FRONTIER_MON_EXPLOUD_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_GLALIE_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_HYPNO_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_ALAKAZAM_3, \
+ FRONTIER_MON_WEEZING_3, \
+ FRONTIER_MON_KANGASKHAN_3, \
+ FRONTIER_MON_ELECTABUZZ_3, \
+ FRONTIER_MON_TAUROS_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_MILTANK_3, \
+ FRONTIER_MON_ALTARIA_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_MAGMAR_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_GOLDUCK_3, \
+ FRONTIER_MON_RAPIDASH_3, \
+ -1
+
+#define FRONTIER_MONS_GUITARIST_2 \
+ FRONTIER_MON_SABLEYE_2, \
+ FRONTIER_MON_MIGHTYENA_2, \
+ FRONTIER_MON_SNEASEL_2, \
+ FRONTIER_MON_MAGNETON_2, \
+ FRONTIER_MON_ABSOL_2, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_RAICHU_3, \
+ FRONTIER_MON_MANECTRIC_3, \
+ FRONTIER_MON_ELECTRODE_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_ELECTABUZZ_3, \
+ FRONTIER_MON_AMPHAROS_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_JOLTEON_3, \
+ FRONTIER_MON_UMBREON_3, \
+ -1
+
+#define FRONTIER_MONS_BIRD_KEEPER_2 \
+ FRONTIER_MON_MURKROW_2, \
+ FRONTIER_MON_PELIPPER_2, \
+ FRONTIER_MON_SWELLOW_2, \
+ FRONTIER_MON_NOCTOWL_2, \
+ FRONTIER_MON_PIDGEOT_2, \
+ FRONTIER_MON_FEAROW_1, \
+ FRONTIER_MON_DODRIO_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_FEAROW_2, \
+ FRONTIER_MON_DODRIO_2, \
+ FRONTIER_MON_SKARMORY_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_CROBAT_2, \
+ FRONTIER_MON_FEAROW_3, \
+ FRONTIER_MON_DODRIO_3, \
+ FRONTIER_MON_XATU_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_CROBAT_3, \
+ -1
+
+#define FRONTIER_MONS_SAILOR_2 \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_WHISCASH_3, \
+ FRONTIER_MON_QUAGSIRE_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_DEWGONG_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_GOLDUCK_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_VAPOREON_3, \
+ FRONTIER_MON_BLASTOISE_3, \
+ FRONTIER_MON_FERALIGATR_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_KINGDRA_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ -1
+
+#define FRONTIER_MONS_HIKER_2 \
+ FRONTIER_MON_DUGTRIO_3, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_DONPHAN_3, \
+ FRONTIER_MON_CLAYDOL_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ -1
+
+#define FRONTIER_MONS_KINDLER_2 \
+ FRONTIER_MON_GRANBULL_3, \
+ FRONTIER_MON_CLEFABLE_3, \
+ FRONTIER_MON_EXPLOUD_3, \
+ FRONTIER_MON_KANGASKHAN_3, \
+ FRONTIER_MON_TAUROS_3, \
+ FRONTIER_MON_MILTANK_3, \
+ FRONTIER_MON_MAGMAR_3, \
+ FRONTIER_MON_RAPIDASH_3, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_NINETALES_3, \
+ FRONTIER_MON_FLAREON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_TYPHLOSION_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_BLISSEY_3, \
+ FRONTIER_MON_ARCANINE_3, \
+ FRONTIER_MON_SLAKING_3, \
+ -1
+
+#define FRONTIER_MONS_GENTLEMAN_2 \
+ FRONTIER_MON_MUK_3, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_AMPHAROS_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_DONPHAN_3, \
+ FRONTIER_MON_CLAYDOL_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_NINETALES_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_PORYGON2_3, \
+ FRONTIER_MON_GARDEVOIR_3, \
+ FRONTIER_MON_EXEGGUTOR_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_FLYGON_3, \
+ FRONTIER_MON_VENUSAUR_3, \
+ FRONTIER_MON_VAPOREON_3, \
+ FRONTIER_MON_JOLTEON_3, \
+ FRONTIER_MON_FLAREON_3, \
+ FRONTIER_MON_MEGANIUM_3, \
+ FRONTIER_MON_ESPEON_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_BLASTOISE_3, \
+ FRONTIER_MON_FERALIGATR_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_SCEPTILE_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_TYPHLOSION_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_CROBAT_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_KINGDRA_3, \
+ FRONTIER_MON_BLISSEY_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ FRONTIER_MON_ARCANINE_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_SLAKING_3, \
+ -1
+
+#define FRONTIER_MONS_YOUNGSTER_LASS_3 \
+ FRONTIER_MON_DUGTRIO_4, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_MISDREAVUS_4, \
+ FRONTIER_MON_FEAROW_4, \
+ FRONTIER_MON_GRANBULL_4, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_DUSCLOPS_4, \
+ FRONTIER_MON_DODRIO_4, \
+ FRONTIER_MON_MR_MIME_4, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_FORRETRESS_4, \
+ FRONTIER_MON_WHISCASH_4, \
+ FRONTIER_MON_XATU_4, \
+ FRONTIER_MON_SKARMORY_4, \
+ FRONTIER_MON_MAROWAK_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_CLEFABLE_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_RAICHU_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_MANECTRIC_4, \
+ FRONTIER_MON_VILEPLUME_4, \
+ FRONTIER_MON_VICTREEBEL_4, \
+ FRONTIER_MON_ELECTRODE_4, \
+ FRONTIER_MON_EXPLOUD_4, \
+ FRONTIER_MON_SHIFTRY_4, \
+ FRONTIER_MON_GLALIE_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_HYPNO_4, \
+ FRONTIER_MON_GOLEM_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_ALAKAZAM_4, \
+ -1
+
+#define FRONTIER_MONS_CAMPER_PICNICKER_2 \
+ FRONTIER_MON_WEEZING_4, \
+ FRONTIER_MON_KANGASKHAN_4, \
+ FRONTIER_MON_ELECTABUZZ_4, \
+ FRONTIER_MON_TAUROS_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_MILTANK_4, \
+ FRONTIER_MON_ALTARIA_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_MAGMAR_4, \
+ FRONTIER_MON_CRADILY_4, \
+ FRONTIER_MON_ARMALDO_4, \
+ FRONTIER_MON_GOLDUCK_4, \
+ FRONTIER_MON_RAPIDASH_4, \
+ FRONTIER_MON_MUK_4, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_AMPHAROS_4, \
+ FRONTIER_MON_SCIZOR_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_DONPHAN_4, \
+ FRONTIER_MON_CLAYDOL_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_NINETALES_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_PORYGON2_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ -1
+
+#define FRONTIER_MONS_SWIMMER_M_2 \
+ FRONTIER_MON_SHARPEDO_2, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_GRANBULL_4, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_WHISCASH_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_CLEFABLE_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_EXPLOUD_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_KANGASKHAN_4, \
+ FRONTIER_MON_TAUROS_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_MILTANK_4, \
+ FRONTIER_MON_GOLDUCK_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_PORYGON2_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_BLISSEY_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_SLAKING_4, \
+ -1
+
+#define FRONTIER_MONS_SWIMMER_F_2 \
+ FRONTIER_MON_GRANBULL_4, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_WHISCASH_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_CLEFABLE_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_EXPLOUD_4, \
+ FRONTIER_MON_GLALIE_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_KANGASKHAN_4, \
+ FRONTIER_MON_TAUROS_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_MILTANK_4, \
+ FRONTIER_MON_GOLDUCK_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_PORYGON2_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_BLISSEY_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_SLAKING_4, \
+ -1
+
+#define FRONTIER_MONS_POKEFAN_3 \
+ FRONTIER_MON_DELCATTY_2, \
+ FRONTIER_MON_PORYGON_2, \
+ FRONTIER_MON_DUNSPARCE_2, \
+ FRONTIER_MON_WIGGLYTUFF_2, \
+ FRONTIER_MON_KECLEON_2, \
+ FRONTIER_MON_CHANSEY_2, \
+ FRONTIER_MON_ABSOL_2, \
+ FRONTIER_MON_MISDREAVUS_4, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_MR_MIME_4, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_WHISCASH_4, \
+ FRONTIER_MON_XATU_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_CLEFABLE_4, \
+ FRONTIER_MON_RAICHU_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_VILEPLUME_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_MILTANK_4, \
+ FRONTIER_MON_ALTARIA_4, \
+ FRONTIER_MON_RAPIDASH_4, \
+ FRONTIER_MON_AMPHAROS_4, \
+ FRONTIER_MON_NINETALES_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ FRONTIER_MON_PORYGON2_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ FRONTIER_MON_FLYGON_4, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_JOLTEON_4, \
+ FRONTIER_MON_FLAREON_4, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_UMBREON_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_BLISSEY_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ -1
+
+#define FRONTIER_MONS_PKMN_BREEDER_2 \
+ FRONTIER_MON_EXEGGUTOR_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_FLYGON_4, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_JOLTEON_4, \
+ FRONTIER_MON_FLAREON_4, \
+ FRONTIER_MON_MEGANIUM_4, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_UMBREON_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_SCEPTILE_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_TYPHLOSION_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_CROBAT_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_BLISSEY_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_ARCANINE_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_SLAKING_4, \
+ -1
+
+#define FRONTIER_MONS_COOLTRAINER_M_2A \
+ FRONTIER_MON_MUK_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_DONPHAN_1, \
+ FRONTIER_MON_CLAYDOL_1, \
+ FRONTIER_MON_WAILORD_1, \
+ FRONTIER_MON_NINETALES_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_TENTACRUEL_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_PORYGON2_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_VAPOREON_1, \
+ FRONTIER_MON_JOLTEON_1, \
+ FRONTIER_MON_MUK_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_AMPHAROS_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_DONPHAN_2, \
+ FRONTIER_MON_CLAYDOL_2, \
+ FRONTIER_MON_WAILORD_2, \
+ FRONTIER_MON_NINETALES_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_PORYGON2_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ FRONTIER_MON_EXEGGUTOR_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_FLYGON_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_VAPOREON_2, \
+ FRONTIER_MON_JOLTEON_2, \
+ FRONTIER_MON_MUK_3, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_AMPHAROS_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_DONPHAN_3, \
+ FRONTIER_MON_CLAYDOL_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_NINETALES_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_PORYGON2_3, \
+ FRONTIER_MON_GARDEVOIR_3, \
+ FRONTIER_MON_EXEGGUTOR_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_FLYGON_3, \
+ FRONTIER_MON_VENUSAUR_3, \
+ FRONTIER_MON_VAPOREON_3, \
+ FRONTIER_MON_JOLTEON_3, \
+ FRONTIER_MON_MUK_4, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_AMPHAROS_4, \
+ FRONTIER_MON_SCIZOR_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_DONPHAN_4, \
+ FRONTIER_MON_CLAYDOL_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_NINETALES_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_PORYGON2_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ FRONTIER_MON_EXEGGUTOR_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_FLYGON_4, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_JOLTEON_4, \
+ -1
+
+#define FRONTIER_MONS_COOLTRAINER_M_2B \
+ FRONTIER_MON_FLAREON_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_ESPEON_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_TYPHLOSION_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_BLISSEY_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_ARCANINE_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_SLAKING_1, \
+ FRONTIER_MON_FLAREON_2, \
+ FRONTIER_MON_MEGANIUM_2, \
+ FRONTIER_MON_ESPEON_2, \
+ FRONTIER_MON_UMBREON_2, \
+ FRONTIER_MON_BLASTOISE_2, \
+ FRONTIER_MON_FERALIGATR_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_SCEPTILE_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_TYPHLOSION_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_CROBAT_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_KINGDRA_2, \
+ FRONTIER_MON_BLISSEY_2, \
+ FRONTIER_MON_MILOTIC_2, \
+ FRONTIER_MON_ARCANINE_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_SLAKING_2, \
+ FRONTIER_MON_FLAREON_3, \
+ FRONTIER_MON_MEGANIUM_3, \
+ FRONTIER_MON_ESPEON_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_BLASTOISE_3, \
+ FRONTIER_MON_FERALIGATR_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_SCEPTILE_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_TYPHLOSION_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_CROBAT_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_KINGDRA_3, \
+ FRONTIER_MON_BLISSEY_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ FRONTIER_MON_ARCANINE_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_SLAKING_3, \
+ FRONTIER_MON_FLAREON_4, \
+ FRONTIER_MON_MEGANIUM_4, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_UMBREON_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_SCEPTILE_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_TYPHLOSION_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_CROBAT_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_BLISSEY_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_ARCANINE_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_SLAKING_4, \
+ -1
+
+// Cooltrainer M uses Latios, Cooltrainer F uses Latias
+#define FRONTIER_MONS_COOLTRAINER_2C(lati) \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_GARDEVOIR_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_##lati##_1, \
+ FRONTIER_MON_##lati##_2, \
+ FRONTIER_MON_##lati##_3, \
+ FRONTIER_MON_##lati##_4, \
+ FRONTIER_MON_GENGAR_5, \
+ FRONTIER_MON_GENGAR_6, \
+ FRONTIER_MON_GENGAR_7, \
+ FRONTIER_MON_GENGAR_8, \
+ FRONTIER_MON_URSARING_5, \
+ FRONTIER_MON_URSARING_6, \
+ FRONTIER_MON_URSARING_7, \
+ FRONTIER_MON_URSARING_8, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ FRONTIER_MON_GARDEVOIR_5, \
+ FRONTIER_MON_GARDEVOIR_6, \
+ FRONTIER_MON_GARDEVOIR_7, \
+ FRONTIER_MON_GARDEVOIR_8, \
+ FRONTIER_MON_STARMIE_5, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_STARMIE_7, \
+ FRONTIER_MON_STARMIE_8, \
+ FRONTIER_MON_LAPRAS_5, \
+ FRONTIER_MON_LAPRAS_6, \
+ FRONTIER_MON_LAPRAS_7, \
+ FRONTIER_MON_LAPRAS_8, \
+ FRONTIER_MON_SNORLAX_5, \
+ FRONTIER_MON_SNORLAX_6, \
+ FRONTIER_MON_SNORLAX_7, \
+ FRONTIER_MON_SNORLAX_8, \
+ FRONTIER_MON_SALAMENCE_5, \
+ FRONTIER_MON_SALAMENCE_6, \
+ FRONTIER_MON_SALAMENCE_7, \
+ FRONTIER_MON_SALAMENCE_8, \
+ FRONTIER_MON_METAGROSS_5, \
+ FRONTIER_MON_METAGROSS_6, \
+ FRONTIER_MON_METAGROSS_7, \
+ FRONTIER_MON_METAGROSS_8, \
+ FRONTIER_MON_##lati##_5, \
+ FRONTIER_MON_##lati##_6, \
+ FRONTIER_MON_##lati##_7, \
+ FRONTIER_MON_##lati##_8, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ -1
+
+// Also used by Pkmn Ranger M/F
+// For both classes, M uses Latios and F uses Latias
+#define FRONTIER_MONS_COOLTRAINER_2D(lati) \
+ FRONTIER_MON_ARTICUNO_1, \
+ FRONTIER_MON_ZAPDOS_1, \
+ FRONTIER_MON_MOLTRES_1, \
+ FRONTIER_MON_RAIKOU_1, \
+ FRONTIER_MON_ENTEI_1, \
+ FRONTIER_MON_SUICUNE_1, \
+ FRONTIER_MON_REGIROCK_1, \
+ FRONTIER_MON_REGICE_1, \
+ FRONTIER_MON_REGISTEEL_1, \
+ FRONTIER_MON_##lati##_1, \
+ FRONTIER_MON_ARTICUNO_2, \
+ FRONTIER_MON_ZAPDOS_2, \
+ FRONTIER_MON_MOLTRES_2, \
+ FRONTIER_MON_RAIKOU_2, \
+ FRONTIER_MON_ENTEI_2, \
+ FRONTIER_MON_SUICUNE_2, \
+ FRONTIER_MON_REGIROCK_2, \
+ FRONTIER_MON_REGICE_2, \
+ FRONTIER_MON_REGISTEEL_2, \
+ FRONTIER_MON_##lati##_2, \
+ FRONTIER_MON_ARTICUNO_3, \
+ FRONTIER_MON_ZAPDOS_3, \
+ FRONTIER_MON_MOLTRES_3, \
+ FRONTIER_MON_RAIKOU_3, \
+ FRONTIER_MON_ENTEI_3, \
+ FRONTIER_MON_SUICUNE_3, \
+ FRONTIER_MON_REGIROCK_3, \
+ FRONTIER_MON_REGICE_3, \
+ FRONTIER_MON_REGISTEEL_3, \
+ FRONTIER_MON_##lati##_3, \
+ FRONTIER_MON_ARTICUNO_4, \
+ FRONTIER_MON_ZAPDOS_4, \
+ FRONTIER_MON_MOLTRES_4, \
+ FRONTIER_MON_RAIKOU_4, \
+ FRONTIER_MON_ENTEI_4, \
+ FRONTIER_MON_SUICUNE_4, \
+ FRONTIER_MON_REGIROCK_4, \
+ FRONTIER_MON_REGICE_4, \
+ FRONTIER_MON_REGISTEEL_4, \
+ FRONTIER_MON_##lati##_4, \
+ FRONTIER_MON_REGIROCK_5, \
+ FRONTIER_MON_REGIROCK_6, \
+ FRONTIER_MON_REGICE_5, \
+ FRONTIER_MON_REGICE_6, \
+ FRONTIER_MON_REGISTEEL_5, \
+ FRONTIER_MON_REGISTEEL_6, \
+ FRONTIER_MON_##lati##_5, \
+ FRONTIER_MON_##lati##_6, \
+ FRONTIER_MON_##lati##_7, \
+ FRONTIER_MON_##lati##_8, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ FRONTIER_MON_ARTICUNO_5, \
+ FRONTIER_MON_ARTICUNO_6, \
+ FRONTIER_MON_ZAPDOS_5, \
+ FRONTIER_MON_ZAPDOS_6, \
+ FRONTIER_MON_MOLTRES_5, \
+ FRONTIER_MON_MOLTRES_6, \
+ FRONTIER_MON_RAIKOU_5, \
+ FRONTIER_MON_RAIKOU_6, \
+ FRONTIER_MON_ENTEI_5, \
+ FRONTIER_MON_ENTEI_6, \
+ FRONTIER_MON_SUICUNE_5, \
+ FRONTIER_MON_SUICUNE_6, \
+ -1
+
+#define FRONTIER_MONS_COOLTRAINER_F_2A \
+ FRONTIER_MON_DUGTRIO_1, \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_FEAROW_1, \
+ FRONTIER_MON_GRANBULL_1, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_DUSCLOPS_1, \
+ FRONTIER_MON_DODRIO_1, \
+ FRONTIER_MON_MR_MIME_1, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_WHISCASH_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_MAROWAK_1, \
+ FRONTIER_MON_QUAGSIRE_1, \
+ FRONTIER_MON_CLEFABLE_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_RAICHU_1, \
+ FRONTIER_MON_DEWGONG_1, \
+ FRONTIER_MON_MANECTRIC_1, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_VICTREEBEL_1, \
+ FRONTIER_MON_DUGTRIO_2, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_MAROWAK_2, \
+ FRONTIER_MON_QUAGSIRE_2, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_FEAROW_2, \
+ FRONTIER_MON_GRANBULL_2, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_DUSCLOPS_2, \
+ FRONTIER_MON_DODRIO_2, \
+ FRONTIER_MON_MR_MIME_2, \
+ FRONTIER_MON_LANTURN_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_SKARMORY_2, \
+ FRONTIER_MON_WHISCASH_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_CLEFABLE_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_RAICHU_2, \
+ FRONTIER_MON_DEWGONG_2, \
+ FRONTIER_MON_MANECTRIC_2, \
+ FRONTIER_MON_VILEPLUME_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_DUGTRIO_3, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_MISDREAVUS_3, \
+ FRONTIER_MON_FEAROW_3, \
+ FRONTIER_MON_GRANBULL_3, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_DUSCLOPS_3, \
+ FRONTIER_MON_DODRIO_3, \
+ FRONTIER_MON_MR_MIME_3, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_FORRETRESS_3, \
+ FRONTIER_MON_WHISCASH_3, \
+ FRONTIER_MON_XATU_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_QUAGSIRE_3, \
+ FRONTIER_MON_CLEFABLE_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_RAICHU_3, \
+ FRONTIER_MON_DEWGONG_3, \
+ FRONTIER_MON_MANECTRIC_3, \
+ FRONTIER_MON_VILEPLUME_3, \
+ FRONTIER_MON_VICTREEBEL_3, \
+ FRONTIER_MON_DUGTRIO_4, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_MISDREAVUS_4, \
+ FRONTIER_MON_FEAROW_4, \
+ FRONTIER_MON_GRANBULL_4, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_DUSCLOPS_4, \
+ FRONTIER_MON_DODRIO_4, \
+ FRONTIER_MON_MR_MIME_4, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_FORRETRESS_4, \
+ FRONTIER_MON_WHISCASH_4, \
+ FRONTIER_MON_XATU_4, \
+ FRONTIER_MON_SKARMORY_4, \
+ FRONTIER_MON_MAROWAK_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_CLEFABLE_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_RAICHU_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_MANECTRIC_4, \
+ FRONTIER_MON_VILEPLUME_4, \
+ FRONTIER_MON_VICTREEBEL_4, \
+ -1
+
+#define FRONTIER_MONS_COOLTRAINER_F_2B \
+ FRONTIER_MON_ELECTRODE_1, \
+ FRONTIER_MON_EXPLOUD_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_GLALIE_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_HYPNO_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_ALAKAZAM_1, \
+ FRONTIER_MON_WEEZING_1, \
+ FRONTIER_MON_KANGASKHAN_1, \
+ FRONTIER_MON_ELECTABUZZ_1, \
+ FRONTIER_MON_TAUROS_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_MILTANK_1, \
+ FRONTIER_MON_ALTARIA_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_MAGMAR_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_GOLDUCK_1, \
+ FRONTIER_MON_RAPIDASH_1, \
+ FRONTIER_MON_ELECTRODE_2, \
+ FRONTIER_MON_EXPLOUD_2, \
+ FRONTIER_MON_SHIFTRY_2, \
+ FRONTIER_MON_GLALIE_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_HYPNO_2, \
+ FRONTIER_MON_GOLEM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_ALAKAZAM_2, \
+ FRONTIER_MON_WEEZING_2, \
+ FRONTIER_MON_KANGASKHAN_2, \
+ FRONTIER_MON_ELECTABUZZ_2, \
+ FRONTIER_MON_TAUROS_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_MILTANK_2, \
+ FRONTIER_MON_ALTARIA_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_MAGMAR_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_GOLDUCK_2, \
+ FRONTIER_MON_RAPIDASH_2, \
+ FRONTIER_MON_ELECTRODE_3, \
+ FRONTIER_MON_EXPLOUD_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_GLALIE_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_HYPNO_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_ALAKAZAM_3, \
+ FRONTIER_MON_WEEZING_3, \
+ FRONTIER_MON_KANGASKHAN_3, \
+ FRONTIER_MON_ELECTABUZZ_3, \
+ FRONTIER_MON_TAUROS_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_MILTANK_3, \
+ FRONTIER_MON_ALTARIA_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_MAGMAR_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_GOLDUCK_3, \
+ FRONTIER_MON_RAPIDASH_3, \
+ FRONTIER_MON_ELECTRODE_4, \
+ FRONTIER_MON_EXPLOUD_4, \
+ FRONTIER_MON_SHIFTRY_4, \
+ FRONTIER_MON_GLALIE_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_HYPNO_4, \
+ FRONTIER_MON_GOLEM_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_ALAKAZAM_4, \
+ FRONTIER_MON_WEEZING_4, \
+ FRONTIER_MON_KANGASKHAN_4, \
+ FRONTIER_MON_ELECTABUZZ_4, \
+ FRONTIER_MON_TAUROS_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_MILTANK_4, \
+ FRONTIER_MON_ALTARIA_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_MAGMAR_4, \
+ FRONTIER_MON_CRADILY_4, \
+ FRONTIER_MON_ARMALDO_4, \
+ FRONTIER_MON_GOLDUCK_4, \
+ FRONTIER_MON_RAPIDASH_4, \
+ -1
+
+// Used by Pkmn Ranger M, Gentleman, Running Triathlete, and Cycling Triathlete
+#define FRONTIER_MONS_GENERAL_A \
+ FRONTIER_MON_DUGTRIO_4, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_MISDREAVUS_4, \
+ FRONTIER_MON_FEAROW_4, \
+ FRONTIER_MON_GRANBULL_4, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_DUSCLOPS_4, \
+ FRONTIER_MON_DODRIO_4, \
+ FRONTIER_MON_MR_MIME_4, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_FORRETRESS_4, \
+ FRONTIER_MON_WHISCASH_4, \
+ FRONTIER_MON_XATU_4, \
+ FRONTIER_MON_SKARMORY_4, \
+ FRONTIER_MON_MAROWAK_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_CLEFABLE_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_RAICHU_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_MANECTRIC_4, \
+ FRONTIER_MON_VILEPLUME_4, \
+ FRONTIER_MON_VICTREEBEL_4, \
+ FRONTIER_MON_ELECTRODE_4, \
+ FRONTIER_MON_EXPLOUD_4, \
+ FRONTIER_MON_SHIFTRY_4, \
+ FRONTIER_MON_GLALIE_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_HYPNO_4, \
+ FRONTIER_MON_GOLEM_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_ALAKAZAM_4, \
+ FRONTIER_MON_WEEZING_4, \
+ FRONTIER_MON_KANGASKHAN_4, \
+ FRONTIER_MON_ELECTABUZZ_4, \
+ FRONTIER_MON_TAUROS_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_MILTANK_4, \
+ FRONTIER_MON_ALTARIA_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_MAGMAR_4, \
+ FRONTIER_MON_CRADILY_4, \
+ FRONTIER_MON_ARMALDO_4, \
+ FRONTIER_MON_GOLDUCK_4, \
+ FRONTIER_MON_RAPIDASH_4, \
+ FRONTIER_MON_MUK_4, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_AMPHAROS_4, \
+ FRONTIER_MON_SCIZOR_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_DONPHAN_4, \
+ FRONTIER_MON_CLAYDOL_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_NINETALES_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_PORYGON2_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ FRONTIER_MON_EXEGGUTOR_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_FLYGON_4, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_JOLTEON_4, \
+ FRONTIER_MON_FLAREON_4, \
+ FRONTIER_MON_MEGANIUM_4, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_UMBREON_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_SCEPTILE_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_TYPHLOSION_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_CROBAT_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_BLISSEY_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_ARCANINE_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_SLAKING_4, \
+ -1
+
+// Identical to FRONTIER_MONS_GENERAL_A but _3
+// Used by Pkmn Ranger, Running Triathlete, and Cycling Triathlete
+#define FRONTIER_MONS_GENERAL_B \
+ FRONTIER_MON_DUGTRIO_3, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_MISDREAVUS_3, \
+ FRONTIER_MON_FEAROW_3, \
+ FRONTIER_MON_GRANBULL_3, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_DUSCLOPS_3, \
+ FRONTIER_MON_DODRIO_3, \
+ FRONTIER_MON_MR_MIME_3, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_FORRETRESS_3, \
+ FRONTIER_MON_WHISCASH_3, \
+ FRONTIER_MON_XATU_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_QUAGSIRE_3, \
+ FRONTIER_MON_CLEFABLE_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_RAICHU_3, \
+ FRONTIER_MON_DEWGONG_3, \
+ FRONTIER_MON_MANECTRIC_3, \
+ FRONTIER_MON_VILEPLUME_3, \
+ FRONTIER_MON_VICTREEBEL_3, \
+ FRONTIER_MON_ELECTRODE_3, \
+ FRONTIER_MON_EXPLOUD_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_GLALIE_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_HYPNO_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_ALAKAZAM_3, \
+ FRONTIER_MON_WEEZING_3, \
+ FRONTIER_MON_KANGASKHAN_3, \
+ FRONTIER_MON_ELECTABUZZ_3, \
+ FRONTIER_MON_TAUROS_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_MILTANK_3, \
+ FRONTIER_MON_ALTARIA_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_MAGMAR_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_GOLDUCK_3, \
+ FRONTIER_MON_RAPIDASH_3, \
+ FRONTIER_MON_MUK_3, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_AMPHAROS_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_DONPHAN_3, \
+ FRONTIER_MON_CLAYDOL_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_NINETALES_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_PORYGON2_3, \
+ FRONTIER_MON_GARDEVOIR_3, \
+ FRONTIER_MON_EXEGGUTOR_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_FLYGON_3, \
+ FRONTIER_MON_VENUSAUR_3, \
+ FRONTIER_MON_VAPOREON_3, \
+ FRONTIER_MON_JOLTEON_3, \
+ FRONTIER_MON_FLAREON_3, \
+ FRONTIER_MON_MEGANIUM_3, \
+ FRONTIER_MON_ESPEON_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_BLASTOISE_3, \
+ FRONTIER_MON_FERALIGATR_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_SCEPTILE_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_TYPHLOSION_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_CROBAT_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_KINGDRA_3, \
+ FRONTIER_MON_BLISSEY_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ FRONTIER_MON_ARCANINE_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_SLAKING_3, \
+ -1
+
+// Similar to FRONTIER_MONS_GENERAL_A/B but _2
+// Used by Pkmn Ranger, Running Triathlete, and Cycling Triathlete
+#define FRONTIER_MONS_GENERAL_C \
+ FRONTIER_MON_DUGTRIO_2, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_MAROWAK_2, \
+ FRONTIER_MON_QUAGSIRE_2, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_FEAROW_2, \
+ FRONTIER_MON_GRANBULL_2, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_DUSCLOPS_2, \
+ FRONTIER_MON_DODRIO_2, \
+ FRONTIER_MON_MR_MIME_2, \
+ FRONTIER_MON_LANTURN_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_SKARMORY_2, \
+ FRONTIER_MON_WHISCASH_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_CLEFABLE_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_RAICHU_2, \
+ FRONTIER_MON_DEWGONG_2, \
+ FRONTIER_MON_MANECTRIC_2, \
+ FRONTIER_MON_VILEPLUME_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_ELECTRODE_2, \
+ FRONTIER_MON_EXPLOUD_2, \
+ FRONTIER_MON_SHIFTRY_2, \
+ FRONTIER_MON_GLALIE_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_HYPNO_2, \
+ FRONTIER_MON_GOLEM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_ALAKAZAM_2, \
+ FRONTIER_MON_WEEZING_2, \
+ FRONTIER_MON_KANGASKHAN_2, \
+ FRONTIER_MON_ELECTABUZZ_2, \
+ FRONTIER_MON_TAUROS_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_MILTANK_2, \
+ FRONTIER_MON_ALTARIA_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_MAGMAR_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_GOLDUCK_2, \
+ FRONTIER_MON_RAPIDASH_2, \
+ FRONTIER_MON_MUK_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_AMPHAROS_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_DONPHAN_2, \
+ FRONTIER_MON_CLAYDOL_2, \
+ FRONTIER_MON_WAILORD_2, \
+ FRONTIER_MON_NINETALES_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_PORYGON2_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ FRONTIER_MON_EXEGGUTOR_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_FLYGON_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_VAPOREON_2, \
+ FRONTIER_MON_JOLTEON_2, \
+ FRONTIER_MON_FLAREON_2, \
+ FRONTIER_MON_MEGANIUM_2, \
+ FRONTIER_MON_ESPEON_2, \
+ FRONTIER_MON_UMBREON_2, \
+ FRONTIER_MON_BLASTOISE_2, \
+ FRONTIER_MON_FERALIGATR_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_SCEPTILE_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_TYPHLOSION_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_CROBAT_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_KINGDRA_2, \
+ FRONTIER_MON_BLISSEY_2, \
+ FRONTIER_MON_MILOTIC_2, \
+ FRONTIER_MON_ARCANINE_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_SLAKING_2, \
+ -1
+
+// Similar to FRONTIER_MONS_GENERAL_C but _1 (would be identical if not for re-ordering)
+// Used by Pkmn Ranger, Running Triathlete, Cycling Triathlete
+#define FRONTIER_MONS_GENERAL_D \
+ FRONTIER_MON_DUGTRIO_1, \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_FEAROW_1, \
+ FRONTIER_MON_GRANBULL_1, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_DUSCLOPS_1, \
+ FRONTIER_MON_DODRIO_1, \
+ FRONTIER_MON_MR_MIME_1, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_WHISCASH_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_MAROWAK_1, \
+ FRONTIER_MON_QUAGSIRE_1, \
+ FRONTIER_MON_CLEFABLE_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_RAICHU_1, \
+ FRONTIER_MON_DEWGONG_1, \
+ FRONTIER_MON_MANECTRIC_1, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_VICTREEBEL_1, \
+ FRONTIER_MON_ELECTRODE_1, \
+ FRONTIER_MON_EXPLOUD_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_GLALIE_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_HYPNO_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_ALAKAZAM_1, \
+ FRONTIER_MON_WEEZING_1, \
+ FRONTIER_MON_KANGASKHAN_1, \
+ FRONTIER_MON_ELECTABUZZ_1, \
+ FRONTIER_MON_TAUROS_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_MILTANK_1, \
+ FRONTIER_MON_ALTARIA_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_MAGMAR_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_GOLDUCK_1, \
+ FRONTIER_MON_RAPIDASH_1, \
+ FRONTIER_MON_MUK_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_DONPHAN_1, \
+ FRONTIER_MON_CLAYDOL_1, \
+ FRONTIER_MON_WAILORD_1, \
+ FRONTIER_MON_NINETALES_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_TENTACRUEL_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_PORYGON2_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_VAPOREON_1, \
+ FRONTIER_MON_JOLTEON_1, \
+ FRONTIER_MON_FLAREON_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_ESPEON_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_TYPHLOSION_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_BLISSEY_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_ARCANINE_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_SLAKING_1, \
+ -1
+
+#define FRONTIER_MONS_DRAGON_TAMER_2 \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_ALTARIA_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_ALTARIA_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_FLYGON_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_KINGDRA_2, \
+ FRONTIER_MON_MILOTIC_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_ALTARIA_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_FLYGON_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_KINGDRA_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_ALTARIA_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_FLYGON_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_LATIAS_1, \
+ FRONTIER_MON_LATIOS_1, \
+ FRONTIER_MON_LATIAS_2, \
+ FRONTIER_MON_LATIOS_2, \
+ FRONTIER_MON_LATIAS_3, \
+ FRONTIER_MON_LATIOS_3, \
+ FRONTIER_MON_LATIAS_4, \
+ FRONTIER_MON_LATIOS_4, \
+ FRONTIER_MON_SALAMENCE_5, \
+ FRONTIER_MON_SALAMENCE_6, \
+ FRONTIER_MON_SALAMENCE_7, \
+ FRONTIER_MON_SALAMENCE_8, \
+ FRONTIER_MON_LATIAS_5, \
+ FRONTIER_MON_LATIAS_6, \
+ FRONTIER_MON_LATIAS_7, \
+ FRONTIER_MON_LATIAS_8, \
+ FRONTIER_MON_LATIOS_5, \
+ FRONTIER_MON_LATIOS_6, \
+ FRONTIER_MON_LATIOS_7, \
+ FRONTIER_MON_LATIOS_8, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ -1
+
+#define FRONTIER_MONS_BLACK_BELT_2A \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_GOLEM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_GOLEM_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_CRADILY_4, \
+ FRONTIER_MON_ARMALDO_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ -1
+
+#define FRONTIER_MONS_BATTLE_GIRL_2A \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_MAROWAK_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_DONPHAN_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_MAROWAK_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_GOLEM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_DONPHAN_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_DONPHAN_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_MAROWAK_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_GOLEM_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_DONPHAN_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ -1
+
+#define FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_MAGMAR_1, \
+ FRONTIER_MON_RAPIDASH_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_NINETALES_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_FLAREON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_TYPHLOSION_1, \
+ FRONTIER_MON_ARCANINE_1, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_MAGMAR_2, \
+ FRONTIER_MON_RAPIDASH_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_NINETALES_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_FLAREON_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_TYPHLOSION_2, \
+ FRONTIER_MON_ARCANINE_2, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_MAGMAR_3, \
+ FRONTIER_MON_RAPIDASH_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_NINETALES_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_FLAREON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_TYPHLOSION_3, \
+ FRONTIER_MON_ARCANINE_3, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_MAGMAR_4, \
+ FRONTIER_MON_RAPIDASH_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_NINETALES_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_FLAREON_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_TYPHLOSION_4, \
+ FRONTIER_MON_ARCANINE_4, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ -1
+
+#define FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_SKARMORY_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_FORRETRESS_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_FORRETRESS_4, \
+ FRONTIER_MON_SKARMORY_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_SCIZOR_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ FRONTIER_MON_METAGROSS_5, \
+ FRONTIER_MON_METAGROSS_6, \
+ FRONTIER_MON_METAGROSS_7, \
+ FRONTIER_MON_METAGROSS_8, \
+ -1
+
+// For this group, Expert M uses Tyranitar, Expert F uses Dragonite
+#define FRONTIER_MONS_EXPERT_2A(lastmon) \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_MAROWAK_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_MAROWAK_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_KINGDRA_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_KINGDRA_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_MAROWAK_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_SCIZOR_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_REGIROCK_1, \
+ FRONTIER_MON_REGICE_1, \
+ FRONTIER_MON_REGISTEEL_1, \
+ FRONTIER_MON_REGIROCK_2, \
+ FRONTIER_MON_REGICE_2, \
+ FRONTIER_MON_REGISTEEL_2, \
+ FRONTIER_MON_REGIROCK_3, \
+ FRONTIER_MON_REGICE_3, \
+ FRONTIER_MON_REGISTEEL_3, \
+ FRONTIER_MON_REGIROCK_4, \
+ FRONTIER_MON_REGICE_4, \
+ FRONTIER_MON_REGISTEEL_4, \
+ FRONTIER_MON_URSARING_5, \
+ FRONTIER_MON_URSARING_6, \
+ FRONTIER_MON_URSARING_7, \
+ FRONTIER_MON_URSARING_8, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ FRONTIER_MON_SALAMENCE_5, \
+ FRONTIER_MON_SALAMENCE_6, \
+ FRONTIER_MON_SALAMENCE_7, \
+ FRONTIER_MON_SALAMENCE_8, \
+ FRONTIER_MON_METAGROSS_5, \
+ FRONTIER_MON_METAGROSS_6, \
+ FRONTIER_MON_METAGROSS_7, \
+ FRONTIER_MON_METAGROSS_8, \
+ FRONTIER_MON_REGIROCK_5, \
+ FRONTIER_MON_REGIROCK_6, \
+ FRONTIER_MON_REGICE_5, \
+ FRONTIER_MON_REGICE_6, \
+ FRONTIER_MON_REGISTEEL_5, \
+ FRONTIER_MON_REGISTEEL_6, \
+ FRONTIER_MON_##lastmon##_1, \
+ FRONTIER_MON_##lastmon##_2, \
+ FRONTIER_MON_##lastmon##_3, \
+ FRONTIER_MON_##lastmon##_4, \
+ FRONTIER_MON_##lastmon##_5, \
+ FRONTIER_MON_##lastmon##_6, \
+ FRONTIER_MON_##lastmon##_7, \
+ FRONTIER_MON_##lastmon##_8, \
+ FRONTIER_MON_##lastmon##_9, \
+ FRONTIER_MON_##lastmon##_10,\
+ -1
+
+// For this group, Expert M uses Latios, Expert F uses Latias
+#define FRONTIER_MONS_EXPERT_2B(lati) \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_ALAKAZAM_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_ESPEON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_ALAKAZAM_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_AMPHAROS_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_ESPEON_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_SCEPTILE_2, \
+ FRONTIER_MON_CROBAT_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_MISDREAVUS_3, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_ALAKAZAM_3, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_AMPHAROS_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_GARDEVOIR_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_ESPEON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_SCEPTILE_3, \
+ FRONTIER_MON_CROBAT_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_MISDREAVUS_4, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_ALAKAZAM_4, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_AMPHAROS_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_SCEPTILE_4, \
+ FRONTIER_MON_CROBAT_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_REGIROCK_1, \
+ FRONTIER_MON_REGICE_1, \
+ FRONTIER_MON_REGISTEEL_1, \
+ FRONTIER_MON_##lati##_1, \
+ FRONTIER_MON_REGIROCK_2, \
+ FRONTIER_MON_REGICE_2, \
+ FRONTIER_MON_REGISTEEL_2, \
+ FRONTIER_MON_##lati##_2, \
+ FRONTIER_MON_REGIROCK_3, \
+ FRONTIER_MON_REGICE_3, \
+ FRONTIER_MON_REGISTEEL_3, \
+ FRONTIER_MON_##lati##_3, \
+ FRONTIER_MON_REGIROCK_4, \
+ FRONTIER_MON_REGICE_4, \
+ FRONTIER_MON_REGISTEEL_4, \
+ FRONTIER_MON_##lati##_4, \
+ FRONTIER_MON_GENGAR_5, \
+ FRONTIER_MON_GENGAR_6, \
+ FRONTIER_MON_GENGAR_7, \
+ FRONTIER_MON_GENGAR_8, \
+ FRONTIER_MON_GARDEVOIR_5, \
+ FRONTIER_MON_GARDEVOIR_6, \
+ FRONTIER_MON_GARDEVOIR_7, \
+ FRONTIER_MON_GARDEVOIR_8, \
+ FRONTIER_MON_STARMIE_5, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_STARMIE_7, \
+ FRONTIER_MON_STARMIE_8, \
+ FRONTIER_MON_REGIROCK_5, \
+ FRONTIER_MON_REGIROCK_6, \
+ FRONTIER_MON_REGICE_5, \
+ FRONTIER_MON_REGICE_6, \
+ FRONTIER_MON_REGISTEEL_5, \
+ FRONTIER_MON_REGISTEEL_6, \
+ FRONTIER_MON_##lati##_5, \
+ FRONTIER_MON_##lati##_6, \
+ FRONTIER_MON_##lati##_7, \
+ FRONTIER_MON_##lati##_8, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ -1
+
+// For this group, Expert M uses Tyranitar, Expert F uses Dragonite
+#define FRONTIER_MONS_EXPERT_2C(lastmon) \
+ FRONTIER_MON_DUSCLOPS_1, \
+ FRONTIER_MON_QUAGSIRE_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_MILTANK_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_WAILORD_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_BLISSEY_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_QUAGSIRE_2, \
+ FRONTIER_MON_DUSCLOPS_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_MILTANK_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_WAILORD_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_EXEGGUTOR_2, \
+ FRONTIER_MON_UMBREON_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_BLISSEY_2, \
+ FRONTIER_MON_MILOTIC_2, \
+ FRONTIER_MON_DUSCLOPS_3, \
+ FRONTIER_MON_QUAGSIRE_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_MILTANK_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_EXEGGUTOR_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_BLISSEY_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ FRONTIER_MON_DUSCLOPS_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_MILTANK_4, \
+ FRONTIER_MON_CRADILY_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ FRONTIER_MON_EXEGGUTOR_4, \
+ FRONTIER_MON_UMBREON_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_BLISSEY_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_REGIROCK_1, \
+ FRONTIER_MON_REGICE_1, \
+ FRONTIER_MON_REGISTEEL_1, \
+ FRONTIER_MON_REGIROCK_2, \
+ FRONTIER_MON_REGICE_2, \
+ FRONTIER_MON_REGISTEEL_2, \
+ FRONTIER_MON_REGIROCK_3, \
+ FRONTIER_MON_REGICE_3, \
+ FRONTIER_MON_REGISTEEL_3, \
+ FRONTIER_MON_REGIROCK_4, \
+ FRONTIER_MON_REGICE_4, \
+ FRONTIER_MON_REGISTEEL_4, \
+ FRONTIER_MON_LAPRAS_5, \
+ FRONTIER_MON_LAPRAS_6, \
+ FRONTIER_MON_LAPRAS_7, \
+ FRONTIER_MON_LAPRAS_8, \
+ FRONTIER_MON_SNORLAX_5, \
+ FRONTIER_MON_SNORLAX_6, \
+ FRONTIER_MON_SNORLAX_7, \
+ FRONTIER_MON_SNORLAX_8, \
+ FRONTIER_MON_REGIROCK_5, \
+ FRONTIER_MON_REGIROCK_6, \
+ FRONTIER_MON_REGICE_5, \
+ FRONTIER_MON_REGICE_6, \
+ FRONTIER_MON_REGISTEEL_5, \
+ FRONTIER_MON_REGISTEEL_6, \
+ FRONTIER_MON_##lastmon##_1, \
+ FRONTIER_MON_##lastmon##_2, \
+ FRONTIER_MON_##lastmon##_3, \
+ FRONTIER_MON_##lastmon##_4, \
+ FRONTIER_MON_##lastmon##_5, \
+ FRONTIER_MON_##lastmon##_6, \
+ FRONTIER_MON_##lastmon##_7, \
+ FRONTIER_MON_##lastmon##_8, \
+ FRONTIER_MON_##lastmon##_9, \
+ FRONTIER_MON_##lastmon##_10,\
+ -1
+
+// The strong Psychic M/F trainers all use the below pokemon
+// Additionally they use 1 of 3 legendary trios, and Latios or Latias depending on gender
+#define FRONTIER_MONS_PSYCHIC_2(lati, legend1, legend2, legend3) \
+ FRONTIER_MON_WOBBUFFET_1, \
+ FRONTIER_MON_WOBBUFFET_2, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_MR_MIME_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_HYPNO_1, \
+ FRONTIER_MON_ALAKAZAM_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_CLAYDOL_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_ESPEON_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_MR_MIME_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_HYPNO_2, \
+ FRONTIER_MON_ALAKAZAM_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_CLAYDOL_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ FRONTIER_MON_EXEGGUTOR_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_ESPEON_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_MR_MIME_3, \
+ FRONTIER_MON_XATU_3, \
+ FRONTIER_MON_HYPNO_3, \
+ FRONTIER_MON_ALAKAZAM_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_CLAYDOL_3, \
+ FRONTIER_MON_GARDEVOIR_3, \
+ FRONTIER_MON_EXEGGUTOR_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_ESPEON_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_MR_MIME_4, \
+ FRONTIER_MON_XATU_4, \
+ FRONTIER_MON_HYPNO_4, \
+ FRONTIER_MON_ALAKAZAM_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_CLAYDOL_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ FRONTIER_MON_EXEGGUTOR_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_##legend1##_1, \
+ FRONTIER_MON_##legend2##_1, \
+ FRONTIER_MON_##legend3##_1, \
+ FRONTIER_MON_##lati##_1, \
+ FRONTIER_MON_##legend1##_2, \
+ FRONTIER_MON_##legend2##_2, \
+ FRONTIER_MON_##legend3##_2, \
+ FRONTIER_MON_##lati##_2, \
+ FRONTIER_MON_##legend1##_3, \
+ FRONTIER_MON_##legend2##_3, \
+ FRONTIER_MON_##legend3##_3, \
+ FRONTIER_MON_##lati##_3, \
+ FRONTIER_MON_##legend1##_4, \
+ FRONTIER_MON_##legend2##_4, \
+ FRONTIER_MON_##legend3##_4, \
+ FRONTIER_MON_##lati##_4, \
+ FRONTIER_MON_GARDEVOIR_5, \
+ FRONTIER_MON_GARDEVOIR_6, \
+ FRONTIER_MON_GARDEVOIR_7, \
+ FRONTIER_MON_GARDEVOIR_8, \
+ FRONTIER_MON_STARMIE_5, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_STARMIE_7, \
+ FRONTIER_MON_STARMIE_8, \
+ FRONTIER_MON_METAGROSS_5, \
+ FRONTIER_MON_METAGROSS_6, \
+ FRONTIER_MON_METAGROSS_7, \
+ FRONTIER_MON_METAGROSS_8,
+
+#define FRONTIER_MONS_PSYCHIC_2A(lati) \
+ FRONTIER_MONS_PSYCHIC_2(lati, ARTICUNO, ZAPDOS, MOLTRES) \
+ FRONTIER_MON_##lati##_5, \
+ FRONTIER_MON_##lati##_6, \
+ FRONTIER_MON_##lati##_7, \
+ FRONTIER_MON_##lati##_8, \
+ FRONTIER_MON_ARTICUNO_5, \
+ FRONTIER_MON_ARTICUNO_6, \
+ FRONTIER_MON_ZAPDOS_5, \
+ FRONTIER_MON_ZAPDOS_6, \
+ FRONTIER_MON_MOLTRES_5, \
+ FRONTIER_MON_MOLTRES_6, \
+ -1
+
+#define FRONTIER_MONS_PSYCHIC_2B(lati) \
+ FRONTIER_MONS_PSYCHIC_2(lati, RAIKOU, ENTEI, SUICUNE) \
+ FRONTIER_MON_##lati##_5, \
+ FRONTIER_MON_##lati##_6, \
+ FRONTIER_MON_##lati##_7, \
+ FRONTIER_MON_##lati##_8, \
+ FRONTIER_MON_RAIKOU_5, \
+ FRONTIER_MON_RAIKOU_6, \
+ FRONTIER_MON_ENTEI_5, \
+ FRONTIER_MON_ENTEI_6, \
+ FRONTIER_MON_SUICUNE_5, \
+ FRONTIER_MON_SUICUNE_6, \
+ -1
+
+// Because the regis/latis are swapped here they cant all be merged into the same macro and match
+#define FRONTIER_MONS_PSYCHIC_2C(lati) \
+ FRONTIER_MONS_PSYCHIC_2(lati, REGIROCK, REGICE, REGISTEEL) \
+ FRONTIER_MON_REGIROCK_5, \
+ FRONTIER_MON_REGIROCK_6, \
+ FRONTIER_MON_REGICE_5, \
+ FRONTIER_MON_REGICE_6, \
+ FRONTIER_MON_REGISTEEL_5, \
+ FRONTIER_MON_REGISTEEL_6, \
+ FRONTIER_MON_##lati##_5, \
+ FRONTIER_MON_##lati##_6, \
+ FRONTIER_MON_##lati##_7, \
+ FRONTIER_MON_##lati##_8, \
+ -1
+
+#define FRONTIER_MONS_HEX_MANIAC_2A \
+ FRONTIER_MON_SHARPEDO_2, \
+ FRONTIER_MON_ABSOL_2, \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_DUSCLOPS_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_DUSCLOPS_2, \
+ FRONTIER_MON_SHIFTRY_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_UMBREON_2, \
+ FRONTIER_MON_MISDREAVUS_3, \
+ FRONTIER_MON_DUSCLOPS_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_MISDREAVUS_4, \
+ FRONTIER_MON_DUSCLOPS_4, \
+ FRONTIER_MON_SHIFTRY_4, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_UMBREON_4, \
+ FRONTIER_MON_GENGAR_5, \
+ FRONTIER_MON_GENGAR_6, \
+ FRONTIER_MON_GENGAR_7, \
+ FRONTIER_MON_GENGAR_8, \
+ -1
+
+#define FRONTIER_MONS_HEX_MANIAC_2B \
+ FRONTIER_MON_SEVIPER_2, \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_DUSCLOPS_1, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_VICTREEBEL_1, \
+ FRONTIER_MON_WEEZING_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_MUK_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_TENTACRUEL_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_DUSCLOPS_2, \
+ FRONTIER_MON_VILEPLUME_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_WEEZING_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_MUK_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_CROBAT_2, \
+ FRONTIER_MON_MISDREAVUS_3, \
+ FRONTIER_MON_DUSCLOPS_3, \
+ FRONTIER_MON_VILEPLUME_3, \
+ FRONTIER_MON_VICTREEBEL_3, \
+ FRONTIER_MON_WEEZING_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_MUK_3, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_VENUSAUR_3, \
+ FRONTIER_MON_CROBAT_3, \
+ FRONTIER_MON_MISDREAVUS_4, \
+ FRONTIER_MON_DUSCLOPS_4, \
+ FRONTIER_MON_VILEPLUME_4, \
+ FRONTIER_MON_VICTREEBEL_4, \
+ FRONTIER_MON_WEEZING_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_MUK_4, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_CROBAT_4, \
+ FRONTIER_MON_GENGAR_5, \
+ FRONTIER_MON_GENGAR_6, \
+ FRONTIER_MON_GENGAR_7, \
+ FRONTIER_MON_GENGAR_8, \
+ -1
+
+#define FRONTIER_MONS_HEX_MANIAC_2C \
+ FRONTIER_MON_SEVIPER_2, \
+ FRONTIER_MON_SHARPEDO_2, \
+ FRONTIER_MON_ABSOL_2, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_VICTREEBEL_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_WEEZING_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_MUK_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_TENTACRUEL_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_VILEPLUME_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_SHIFTRY_2, \
+ FRONTIER_MON_WEEZING_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_MUK_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_UMBREON_2, \
+ FRONTIER_MON_CROBAT_2, \
+ FRONTIER_MON_VILEPLUME_3, \
+ FRONTIER_MON_VICTREEBEL_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_WEEZING_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_MUK_3, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_VENUSAUR_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_CROBAT_3, \
+ FRONTIER_MON_VILEPLUME_4, \
+ FRONTIER_MON_VICTREEBEL_4, \
+ FRONTIER_MON_SHIFTRY_4, \
+ FRONTIER_MON_WEEZING_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_MUK_4, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_UMBREON_4, \
+ FRONTIER_MON_CROBAT_4, \
+ FRONTIER_MON_GENGAR_5, \
+ FRONTIER_MON_GENGAR_6, \
+ FRONTIER_MON_GENGAR_7, \
+ FRONTIER_MON_GENGAR_8, \
+ -1
+
+// For whatever reason FRONTIER_MON_MAROWAK_2 is in a different order than _1 _3 and _4
+// This order change is the only difference btween FRONITER_MONS_POKEMANIAC_2A and FRONTIER_MONS_POKEMANIAC_2B other than the numbered suffixes
+#define FRONTIER_MONS_POKEMANIAC_2A \
+ FRONTIER_MON_ZANGOOSE_2, \
+ FRONTIER_MON_GRANBULL_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_MAROWAK_1, \
+ FRONTIER_MON_EXPLOUD_1, \
+ FRONTIER_MON_GLALIE_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_KANGASKHAN_1, \
+ FRONTIER_MON_TAUROS_1, \
+ FRONTIER_MON_MILTANK_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_DONPHAN_1, \
+ FRONTIER_MON_WAILORD_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_BLISSEY_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_SLAKING_1, \
+ FRONTIER_MON_MAROWAK_2, \
+ FRONTIER_MON_GRANBULL_2, \
+ FRONTIER_MON_SKARMORY_2, \
+ FRONTIER_MON_EXPLOUD_2, \
+ FRONTIER_MON_GLALIE_2, \
+ FRONTIER_MON_GOLEM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_KANGASKHAN_2, \
+ FRONTIER_MON_TAUROS_2, \
+ FRONTIER_MON_MILTANK_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_DONPHAN_2, \
+ FRONTIER_MON_WAILORD_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_FLYGON_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_MEGANIUM_2, \
+ FRONTIER_MON_BLASTOISE_2, \
+ FRONTIER_MON_FERALIGATR_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_BLISSEY_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_SLAKING_2, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ -1
+
+#define FRONTIER_MONS_POKEMANIAC_2B \
+ FRONTIER_MON_ZANGOOSE_2, \
+ FRONTIER_MON_GRANBULL_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_EXPLOUD_3, \
+ FRONTIER_MON_GLALIE_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_KANGASKHAN_3, \
+ FRONTIER_MON_TAUROS_3, \
+ FRONTIER_MON_MILTANK_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_DONPHAN_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_FLYGON_3, \
+ FRONTIER_MON_VENUSAUR_3, \
+ FRONTIER_MON_MEGANIUM_3, \
+ FRONTIER_MON_BLASTOISE_3, \
+ FRONTIER_MON_FERALIGATR_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_BLISSEY_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_SLAKING_3, \
+ FRONTIER_MON_GRANBULL_4, \
+ FRONTIER_MON_SKARMORY_4, \
+ FRONTIER_MON_MAROWAK_4, \
+ FRONTIER_MON_EXPLOUD_4, \
+ FRONTIER_MON_GLALIE_4, \
+ FRONTIER_MON_GOLEM_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_KANGASKHAN_4, \
+ FRONTIER_MON_TAUROS_4, \
+ FRONTIER_MON_MILTANK_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_DONPHAN_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_FLYGON_4, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_MEGANIUM_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_BLISSEY_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_SLAKING_4, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ -1
+
+#define FRONTIER_MONS_POKEMANIAC_2C \
+ FRONTIER_MON_ZANGOOSE_2, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_MEGANIUM_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_MEGANIUM_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_MEGANIUM_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_URSARING_5, \
+ FRONTIER_MON_URSARING_6, \
+ FRONTIER_MON_URSARING_7, \
+ FRONTIER_MON_URSARING_8, \
+ FRONTIER_MON_LAPRAS_5, \
+ FRONTIER_MON_LAPRAS_6, \
+ FRONTIER_MON_LAPRAS_7, \
+ FRONTIER_MON_LAPRAS_8, \
+ FRONTIER_MON_SNORLAX_5, \
+ FRONTIER_MON_SNORLAX_6, \
+ FRONTIER_MON_SNORLAX_7, \
+ FRONTIER_MON_SNORLAX_8, \
+ FRONTIER_MON_SALAMENCE_5, \
+ FRONTIER_MON_SALAMENCE_6, \
+ FRONTIER_MON_SALAMENCE_7, \
+ FRONTIER_MON_SALAMENCE_8, \
+ FRONTIER_MON_METAGROSS_5, \
+ FRONTIER_MON_METAGROSS_6, \
+ FRONTIER_MON_METAGROSS_7, \
+ FRONTIER_MON_METAGROSS_8, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ -1
+
+// Identical to FRONTIER_MONS_COOLTRAINER_2C but with both latias and latios
+#define FRONTIER_MONS_GENTLEMAN_3A \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_URSARING_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_URSARING_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_SNORLAX_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_URSARING_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_GARDEVOIR_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_SNORLAX_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_URSARING_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SNORLAX_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_LATIAS_1, \
+ FRONTIER_MON_LATIOS_1, \
+ FRONTIER_MON_LATIAS_2, \
+ FRONTIER_MON_LATIOS_2, \
+ FRONTIER_MON_LATIAS_3, \
+ FRONTIER_MON_LATIOS_3, \
+ FRONTIER_MON_LATIAS_4, \
+ FRONTIER_MON_LATIOS_4, \
+ FRONTIER_MON_GENGAR_5, \
+ FRONTIER_MON_GENGAR_6, \
+ FRONTIER_MON_GENGAR_7, \
+ FRONTIER_MON_GENGAR_8, \
+ FRONTIER_MON_URSARING_5, \
+ FRONTIER_MON_URSARING_6, \
+ FRONTIER_MON_URSARING_7, \
+ FRONTIER_MON_URSARING_8, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ FRONTIER_MON_GARDEVOIR_5, \
+ FRONTIER_MON_GARDEVOIR_6, \
+ FRONTIER_MON_GARDEVOIR_7, \
+ FRONTIER_MON_GARDEVOIR_8, \
+ FRONTIER_MON_STARMIE_5, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_STARMIE_7, \
+ FRONTIER_MON_STARMIE_8, \
+ FRONTIER_MON_LAPRAS_5, \
+ FRONTIER_MON_LAPRAS_6, \
+ FRONTIER_MON_LAPRAS_7, \
+ FRONTIER_MON_LAPRAS_8, \
+ FRONTIER_MON_SNORLAX_5, \
+ FRONTIER_MON_SNORLAX_6, \
+ FRONTIER_MON_SNORLAX_7, \
+ FRONTIER_MON_SNORLAX_8, \
+ FRONTIER_MON_SALAMENCE_5, \
+ FRONTIER_MON_SALAMENCE_6, \
+ FRONTIER_MON_SALAMENCE_7, \
+ FRONTIER_MON_SALAMENCE_8, \
+ FRONTIER_MON_METAGROSS_5, \
+ FRONTIER_MON_METAGROSS_6, \
+ FRONTIER_MON_METAGROSS_7, \
+ FRONTIER_MON_METAGROSS_8, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ -1
+
+// Identical to FRONTIER_MONS_COOLTRAINER_2D but with both latias and latios
+#define FRONTIER_MONS_GENTLEMAN_3B \
+ FRONTIER_MON_ARTICUNO_1, \
+ FRONTIER_MON_ZAPDOS_1, \
+ FRONTIER_MON_MOLTRES_1, \
+ FRONTIER_MON_RAIKOU_1, \
+ FRONTIER_MON_ENTEI_1, \
+ FRONTIER_MON_SUICUNE_1, \
+ FRONTIER_MON_REGIROCK_1, \
+ FRONTIER_MON_REGICE_1, \
+ FRONTIER_MON_REGISTEEL_1, \
+ FRONTIER_MON_LATIAS_1, \
+ FRONTIER_MON_LATIOS_1, \
+ FRONTIER_MON_ARTICUNO_2, \
+ FRONTIER_MON_ZAPDOS_2, \
+ FRONTIER_MON_MOLTRES_2, \
+ FRONTIER_MON_RAIKOU_2, \
+ FRONTIER_MON_ENTEI_2, \
+ FRONTIER_MON_SUICUNE_2, \
+ FRONTIER_MON_REGIROCK_2, \
+ FRONTIER_MON_REGICE_2, \
+ FRONTIER_MON_REGISTEEL_2, \
+ FRONTIER_MON_LATIAS_2, \
+ FRONTIER_MON_LATIOS_2, \
+ FRONTIER_MON_ARTICUNO_3, \
+ FRONTIER_MON_ZAPDOS_3, \
+ FRONTIER_MON_MOLTRES_3, \
+ FRONTIER_MON_RAIKOU_3, \
+ FRONTIER_MON_ENTEI_3, \
+ FRONTIER_MON_SUICUNE_3, \
+ FRONTIER_MON_REGIROCK_3, \
+ FRONTIER_MON_REGICE_3, \
+ FRONTIER_MON_REGISTEEL_3, \
+ FRONTIER_MON_LATIAS_3, \
+ FRONTIER_MON_LATIOS_3, \
+ FRONTIER_MON_ARTICUNO_4, \
+ FRONTIER_MON_ZAPDOS_4, \
+ FRONTIER_MON_MOLTRES_4, \
+ FRONTIER_MON_RAIKOU_4, \
+ FRONTIER_MON_ENTEI_4, \
+ FRONTIER_MON_SUICUNE_4, \
+ FRONTIER_MON_REGIROCK_4, \
+ FRONTIER_MON_REGICE_4, \
+ FRONTIER_MON_REGISTEEL_4, \
+ FRONTIER_MON_LATIAS_4, \
+ FRONTIER_MON_LATIOS_4, \
+ FRONTIER_MON_REGIROCK_5, \
+ FRONTIER_MON_REGIROCK_6, \
+ FRONTIER_MON_REGICE_5, \
+ FRONTIER_MON_REGICE_6, \
+ FRONTIER_MON_REGISTEEL_5, \
+ FRONTIER_MON_REGISTEEL_6, \
+ FRONTIER_MON_LATIAS_5, \
+ FRONTIER_MON_LATIAS_6, \
+ FRONTIER_MON_LATIAS_7, \
+ FRONTIER_MON_LATIAS_8, \
+ FRONTIER_MON_LATIOS_5, \
+ FRONTIER_MON_LATIOS_6, \
+ FRONTIER_MON_LATIOS_7, \
+ FRONTIER_MON_LATIOS_8, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ FRONTIER_MON_ARTICUNO_5, \
+ FRONTIER_MON_ARTICUNO_6, \
+ FRONTIER_MON_ZAPDOS_5, \
+ FRONTIER_MON_ZAPDOS_6, \
+ FRONTIER_MON_MOLTRES_5, \
+ FRONTIER_MON_MOLTRES_6, \
+ FRONTIER_MON_RAIKOU_5, \
+ FRONTIER_MON_RAIKOU_6, \
+ FRONTIER_MON_ENTEI_5, \
+ FRONTIER_MON_ENTEI_6, \
+ FRONTIER_MON_SUICUNE_5, \
+ FRONTIER_MON_SUICUNE_6, \
+ -1
+
+#define FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3 \
+ FRONTIER_MON_SNEASEL_2, \
+ FRONTIER_MON_CLOYSTER_2, \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_DEWGONG_1, \
+ FRONTIER_MON_GLALIE_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_DEWGONG_2, \
+ FRONTIER_MON_GLALIE_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_WHISCASH_3, \
+ FRONTIER_MON_QUAGSIRE_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_DEWGONG_3, \
+ FRONTIER_MON_GLALIE_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_GOLDUCK_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_VAPOREON_3, \
+ FRONTIER_MON_BLASTOISE_3, \
+ FRONTIER_MON_FERALIGATR_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_KINGDRA_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_WHISCASH_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_GLALIE_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_GOLDUCK_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ FRONTIER_MON_STARMIE_5, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_STARMIE_7, \
+ FRONTIER_MON_STARMIE_8, \
+ FRONTIER_MON_LAPRAS_5, \
+ FRONTIER_MON_LAPRAS_6, \
+ FRONTIER_MON_LAPRAS_7, \
+ FRONTIER_MON_LAPRAS_8, \
+ -1
+
+#define FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3 \
+ FRONTIER_MON_SNEASEL_2, \
+ FRONTIER_MON_CLOYSTER_2, \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_WHISCASH_1, \
+ FRONTIER_MON_QUAGSIRE_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_DEWGONG_1, \
+ FRONTIER_MON_GLALIE_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_GOLDUCK_1, \
+ FRONTIER_MON_WAILORD_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_TENTACRUEL_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_VAPOREON_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_QUAGSIRE_2, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_LANTURN_2, \
+ FRONTIER_MON_WHISCASH_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_DEWGONG_2, \
+ FRONTIER_MON_GLALIE_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_GOLDUCK_2, \
+ FRONTIER_MON_WAILORD_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_VAPOREON_2, \
+ FRONTIER_MON_BLASTOISE_2, \
+ FRONTIER_MON_FERALIGATR_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_KINGDRA_2, \
+ FRONTIER_MON_MILOTIC_2, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_DEWGONG_3, \
+ FRONTIER_MON_GLALIE_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_GLALIE_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ FRONTIER_MON_STARMIE_5, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_STARMIE_7, \
+ FRONTIER_MON_STARMIE_8, \
+ FRONTIER_MON_LAPRAS_5, \
+ FRONTIER_MON_LAPRAS_6, \
+ FRONTIER_MON_LAPRAS_7, \
+ FRONTIER_MON_LAPRAS_8, \
+ -1
+
+#define FRONTIER_MONS_BUG_MANIAC_4 \
+ FRONTIER_MON_SHEDINJA, \
+ FRONTIER_MON_NINJASK_1, \
+ FRONTIER_MON_PARASECT_2, \
+ FRONTIER_MON_MASQUERAIN_2, \
+ FRONTIER_MON_VENOMOTH_2, \
+ FRONTIER_MON_NINJASK_2, \
+ FRONTIER_MON_SCYTHER_2, \
+ FRONTIER_MON_PINSIR_2, \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_HERACROSS_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_FORRETRESS_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_HERACROSS_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_FORRETRESS_4, \
+ FRONTIER_MON_ARMALDO_4, \
+ FRONTIER_MON_SCIZOR_4, \
+ FRONTIER_MON_HERACROSS_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ -1
+
+#define FRONTIER_MONS_FISHERMAN_3 \
+ FRONTIER_MON_SEAKING_2, \
+ FRONTIER_MON_SHARPEDO_2, \
+ FRONTIER_MON_MANTINE_2, \
+ FRONTIER_MON_CRAWDAUNT_2, \
+ FRONTIER_MON_KINGLER_2, \
+ FRONTIER_MON_OCTILLERY_2, \
+ FRONTIER_MON_HUNTAIL_2, \
+ FRONTIER_MON_GOREBYSS_2, \
+ FRONTIER_MON_RELICANTH_2, \
+ FRONTIER_MON_CLOYSTER_2, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_WHISCASH_1, \
+ FRONTIER_MON_WAILORD_1, \
+ FRONTIER_MON_TENTACRUEL_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_LANTURN_2, \
+ FRONTIER_MON_WHISCASH_2, \
+ FRONTIER_MON_WAILORD_2, \
+ FRONTIER_MON_TENTACRUEL_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_WHISCASH_3, \
+ FRONTIER_MON_WAILORD_3, \
+ FRONTIER_MON_TENTACRUEL_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_WHISCASH_4, \
+ FRONTIER_MON_WAILORD_4, \
+ FRONTIER_MON_TENTACRUEL_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_STARMIE_5, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_STARMIE_7, \
+ FRONTIER_MON_STARMIE_8, \
+ -1
+
+#define FRONTIER_MONS_RUIN_MANIAC_4 \
+ FRONTIER_MON_FORRETRESS_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_SCIZOR_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_FORRETRESS_2, \
+ FRONTIER_MON_SKARMORY_2, \
+ FRONTIER_MON_GOLEM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_SCIZOR_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_FORRETRESS_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_SCIZOR_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_FORRETRESS_4, \
+ FRONTIER_MON_SKARMORY_4, \
+ FRONTIER_MON_GOLEM_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_CRADILY_4, \
+ FRONTIER_MON_ARMALDO_4, \
+ FRONTIER_MON_SCIZOR_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_REGIROCK_1, \
+ FRONTIER_MON_REGICE_1, \
+ FRONTIER_MON_REGISTEEL_1, \
+ FRONTIER_MON_REGIROCK_2, \
+ FRONTIER_MON_REGICE_2, \
+ FRONTIER_MON_REGISTEEL_2, \
+ FRONTIER_MON_REGIROCK_3, \
+ FRONTIER_MON_REGICE_3, \
+ FRONTIER_MON_REGISTEEL_3, \
+ FRONTIER_MON_REGIROCK_4, \
+ FRONTIER_MON_REGICE_4, \
+ FRONTIER_MON_REGISTEEL_4, \
+ FRONTIER_MON_METAGROSS_5, \
+ FRONTIER_MON_METAGROSS_6, \
+ FRONTIER_MON_METAGROSS_7, \
+ FRONTIER_MON_METAGROSS_8, \
+ FRONTIER_MON_REGIROCK_5, \
+ FRONTIER_MON_REGIROCK_6, \
+ FRONTIER_MON_REGICE_5, \
+ FRONTIER_MON_REGICE_6, \
+ FRONTIER_MON_REGISTEEL_5, \
+ FRONTIER_MON_REGISTEEL_6, \
+ -1
+
+#define FRONTIER_MONS_COLLECTOR_3 \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_TYPHLOSION_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_MEGANIUM_2, \
+ FRONTIER_MON_BLASTOISE_2, \
+ FRONTIER_MON_FERALIGATR_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_SCEPTILE_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_TYPHLOSION_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_VENUSAUR_3, \
+ FRONTIER_MON_MEGANIUM_3, \
+ FRONTIER_MON_BLASTOISE_3, \
+ FRONTIER_MON_FERALIGATR_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_SCEPTILE_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_TYPHLOSION_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_MEGANIUM_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_SCEPTILE_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_TYPHLOSION_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ -1
+
+#define FRONTIER_MONS_GUITARIST_3A \
+ FRONTIER_MON_ABSOL_2, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_RAICHU_1, \
+ FRONTIER_MON_MANECTRIC_1, \
+ FRONTIER_MON_ELECTRODE_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_ELECTABUZZ_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_JOLTEON_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_LANTURN_2, \
+ FRONTIER_MON_RAICHU_2, \
+ FRONTIER_MON_MANECTRIC_2, \
+ FRONTIER_MON_ELECTRODE_2, \
+ FRONTIER_MON_SHIFTRY_2, \
+ FRONTIER_MON_ELECTABUZZ_2, \
+ FRONTIER_MON_AMPHAROS_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_JOLTEON_2, \
+ FRONTIER_MON_UMBREON_2, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_RAICHU_3, \
+ FRONTIER_MON_MANECTRIC_3, \
+ FRONTIER_MON_ELECTRODE_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_ELECTABUZZ_3, \
+ FRONTIER_MON_AMPHAROS_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_JOLTEON_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_LANTURN_4, \
+ FRONTIER_MON_RAICHU_4, \
+ FRONTIER_MON_MANECTRIC_4, \
+ FRONTIER_MON_ELECTRODE_4, \
+ FRONTIER_MON_SHIFTRY_4, \
+ FRONTIER_MON_ELECTABUZZ_4, \
+ FRONTIER_MON_AMPHAROS_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_JOLTEON_4, \
+ FRONTIER_MON_UMBREON_4, \
+ FRONTIER_MON_ARTICUNO_1, \
+ FRONTIER_MON_ZAPDOS_1, \
+ FRONTIER_MON_MOLTRES_1, \
+ FRONTIER_MON_ARTICUNO_2, \
+ FRONTIER_MON_ZAPDOS_2, \
+ FRONTIER_MON_MOLTRES_2, \
+ FRONTIER_MON_ARTICUNO_3, \
+ FRONTIER_MON_ZAPDOS_3, \
+ FRONTIER_MON_MOLTRES_3, \
+ FRONTIER_MON_ARTICUNO_4, \
+ FRONTIER_MON_ZAPDOS_4, \
+ FRONTIER_MON_MOLTRES_4, \
+ FRONTIER_MON_ARTICUNO_5, \
+ FRONTIER_MON_ARTICUNO_6, \
+ FRONTIER_MON_ZAPDOS_5, \
+ FRONTIER_MON_ZAPDOS_6, \
+ FRONTIER_MON_MOLTRES_5, \
+ FRONTIER_MON_MOLTRES_6, \
+ -1
+
+#define FRONTIER_MONS_GUITARIST_3B \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_GRANBULL_1, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_ALAKAZAM_1, \
+ FRONTIER_MON_ELECTABUZZ_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_JOLTEON_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_ALAKAZAM_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_MILTANK_2, \
+ FRONTIER_MON_AMPHAROS_2, \
+ FRONTIER_MON_PORYGON2_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_MISDREAVUS_3, \
+ FRONTIER_MON_MANECTRIC_3, \
+ FRONTIER_MON_ELECTRODE_3, \
+ FRONTIER_MON_PORYGON2_3, \
+ FRONTIER_MON_JOLTEON_3, \
+ FRONTIER_MON_RAICHU_4, \
+ FRONTIER_MON_MANECTRIC_4, \
+ FRONTIER_MON_ELECTRODE_4, \
+ FRONTIER_MON_AMPHAROS_4, \
+ FRONTIER_MON_JOLTEON_4, \
+ FRONTIER_MON_REGICE_3, \
+ FRONTIER_MON_REGIROCK_4, \
+ FRONTIER_MON_REGICE_4, \
+ FRONTIER_MON_REGISTEEL_4, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_LATIAS_5, \
+ FRONTIER_MON_LATIAS_6, \
+ FRONTIER_MON_LATIOS_5, \
+ FRONTIER_MON_LATIOS_6, \
+ -1
+
+#define FRONTIER_MONS_BIRD_KEEPER_3 \
+ FRONTIER_MON_PIDGEOT_2, \
+ FRONTIER_MON_FEAROW_1, \
+ FRONTIER_MON_DODRIO_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_SKARMORY_1, \
+ FRONTIER_MON_ALTARIA_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_CROBAT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_SALAMENCE_1, \
+ FRONTIER_MON_FEAROW_2, \
+ FRONTIER_MON_DODRIO_2, \
+ FRONTIER_MON_SKARMORY_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_ALTARIA_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_FLYGON_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_CROBAT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_SALAMENCE_2, \
+ FRONTIER_MON_FEAROW_3, \
+ FRONTIER_MON_DODRIO_3, \
+ FRONTIER_MON_XATU_3, \
+ FRONTIER_MON_SKARMORY_3, \
+ FRONTIER_MON_ALTARIA_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_FLYGON_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_CROBAT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_SALAMENCE_3, \
+ FRONTIER_MON_FEAROW_4, \
+ FRONTIER_MON_DODRIO_4, \
+ FRONTIER_MON_XATU_4, \
+ FRONTIER_MON_SKARMORY_4, \
+ FRONTIER_MON_ALTARIA_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_FLYGON_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_CROBAT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_SALAMENCE_4, \
+ FRONTIER_MON_ARTICUNO_1, \
+ FRONTIER_MON_ZAPDOS_1, \
+ FRONTIER_MON_MOLTRES_1, \
+ FRONTIER_MON_ARTICUNO_2, \
+ FRONTIER_MON_ZAPDOS_2, \
+ FRONTIER_MON_MOLTRES_2, \
+ FRONTIER_MON_ARTICUNO_3, \
+ FRONTIER_MON_ZAPDOS_3, \
+ FRONTIER_MON_MOLTRES_3, \
+ FRONTIER_MON_ARTICUNO_4, \
+ FRONTIER_MON_ZAPDOS_4, \
+ FRONTIER_MON_MOLTRES_4, \
+ FRONTIER_MON_SALAMENCE_5, \
+ FRONTIER_MON_SALAMENCE_6, \
+ FRONTIER_MON_SALAMENCE_7, \
+ FRONTIER_MON_SALAMENCE_8, \
+ -1
+
+#define FRONTIER_MONS_SAILOR_3 \
+ FRONTIER_MON_MEDICHAM_1, \
+ FRONTIER_MON_QUAGSIRE_1, \
+ FRONTIER_MON_HARIYAMA_1, \
+ FRONTIER_MON_DEWGONG_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_GOLDUCK_1, \
+ FRONTIER_MON_MACHAMP_1, \
+ FRONTIER_MON_VAPOREON_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SWAMPERT_1, \
+ FRONTIER_MON_GYARADOS_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_MILOTIC_1, \
+ FRONTIER_MON_MEDICHAM_2, \
+ FRONTIER_MON_QUAGSIRE_2, \
+ FRONTIER_MON_HARIYAMA_2, \
+ FRONTIER_MON_DEWGONG_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_GOLDUCK_2, \
+ FRONTIER_MON_MACHAMP_2, \
+ FRONTIER_MON_VAPOREON_2, \
+ FRONTIER_MON_BLASTOISE_2, \
+ FRONTIER_MON_FERALIGATR_2, \
+ FRONTIER_MON_WALREIN_2, \
+ FRONTIER_MON_LAPRAS_2, \
+ FRONTIER_MON_SWAMPERT_2, \
+ FRONTIER_MON_GYARADOS_2, \
+ FRONTIER_MON_KINGDRA_2, \
+ FRONTIER_MON_MILOTIC_2, \
+ FRONTIER_MON_MEDICHAM_3, \
+ FRONTIER_MON_QUAGSIRE_3, \
+ FRONTIER_MON_HARIYAMA_3, \
+ FRONTIER_MON_DEWGONG_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_GOLDUCK_3, \
+ FRONTIER_MON_MACHAMP_3, \
+ FRONTIER_MON_VAPOREON_3, \
+ FRONTIER_MON_BLASTOISE_3, \
+ FRONTIER_MON_FERALIGATR_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_LAPRAS_3, \
+ FRONTIER_MON_SWAMPERT_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_KINGDRA_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ FRONTIER_MON_MEDICHAM_4, \
+ FRONTIER_MON_QUAGSIRE_4, \
+ FRONTIER_MON_HARIYAMA_4, \
+ FRONTIER_MON_DEWGONG_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_GOLDUCK_4, \
+ FRONTIER_MON_MACHAMP_4, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_BLASTOISE_4, \
+ FRONTIER_MON_FERALIGATR_4, \
+ FRONTIER_MON_WALREIN_4, \
+ FRONTIER_MON_LAPRAS_4, \
+ FRONTIER_MON_SWAMPERT_4, \
+ FRONTIER_MON_GYARADOS_4, \
+ FRONTIER_MON_KINGDRA_4, \
+ FRONTIER_MON_MILOTIC_4, \
+ FRONTIER_MON_MACHAMP_5, \
+ FRONTIER_MON_MACHAMP_6, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_MACHAMP_8, \
+ FRONTIER_MON_LAPRAS_5, \
+ FRONTIER_MON_LAPRAS_6, \
+ FRONTIER_MON_LAPRAS_7, \
+ FRONTIER_MON_LAPRAS_8, \
+ -1
+
+#define FRONTIER_MONS_HIKER_3 \
+ FRONTIER_MON_DUGTRIO_1, \
+ FRONTIER_MON_MAROWAK_1, \
+ FRONTIER_MON_GOLEM_1, \
+ FRONTIER_MON_RHYDON_1, \
+ FRONTIER_MON_NIDOQUEEN_1, \
+ FRONTIER_MON_NIDOKING_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_ARMALDO_1, \
+ FRONTIER_MON_DONPHAN_1, \
+ FRONTIER_MON_CLAYDOL_1, \
+ FRONTIER_MON_SHUCKLE_1, \
+ FRONTIER_MON_STEELIX_1, \
+ FRONTIER_MON_AERODACTYL_1, \
+ FRONTIER_MON_FLYGON_1, \
+ FRONTIER_MON_AGGRON_1, \
+ FRONTIER_MON_METAGROSS_1, \
+ FRONTIER_MON_DUGTRIO_2, \
+ FRONTIER_MON_MAROWAK_2, \
+ FRONTIER_MON_GOLEM_2, \
+ FRONTIER_MON_RHYDON_2, \
+ FRONTIER_MON_NIDOQUEEN_2, \
+ FRONTIER_MON_NIDOKING_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_ARMALDO_2, \
+ FRONTIER_MON_DONPHAN_2, \
+ FRONTIER_MON_CLAYDOL_2, \
+ FRONTIER_MON_SHUCKLE_2, \
+ FRONTIER_MON_STEELIX_2, \
+ FRONTIER_MON_AERODACTYL_2, \
+ FRONTIER_MON_FLYGON_2, \
+ FRONTIER_MON_AGGRON_2, \
+ FRONTIER_MON_METAGROSS_2, \
+ FRONTIER_MON_DUGTRIO_3, \
+ FRONTIER_MON_MAROWAK_3, \
+ FRONTIER_MON_GOLEM_3, \
+ FRONTIER_MON_RHYDON_3, \
+ FRONTIER_MON_NIDOQUEEN_3, \
+ FRONTIER_MON_NIDOKING_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_ARMALDO_3, \
+ FRONTIER_MON_DONPHAN_3, \
+ FRONTIER_MON_CLAYDOL_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_STEELIX_3, \
+ FRONTIER_MON_AERODACTYL_3, \
+ FRONTIER_MON_FLYGON_3, \
+ FRONTIER_MON_AGGRON_3, \
+ FRONTIER_MON_METAGROSS_3, \
+ FRONTIER_MON_DUGTRIO_4, \
+ FRONTIER_MON_MAROWAK_4, \
+ FRONTIER_MON_GOLEM_4, \
+ FRONTIER_MON_RHYDON_4, \
+ FRONTIER_MON_NIDOQUEEN_4, \
+ FRONTIER_MON_NIDOKING_4, \
+ FRONTIER_MON_CRADILY_4, \
+ FRONTIER_MON_ARMALDO_4, \
+ FRONTIER_MON_DONPHAN_4, \
+ FRONTIER_MON_CLAYDOL_4, \
+ FRONTIER_MON_SHUCKLE_4, \
+ FRONTIER_MON_STEELIX_4, \
+ FRONTIER_MON_AERODACTYL_4, \
+ FRONTIER_MON_FLYGON_4, \
+ FRONTIER_MON_AGGRON_4, \
+ FRONTIER_MON_METAGROSS_4, \
+ FRONTIER_MON_METAGROSS_5, \
+ FRONTIER_MON_METAGROSS_6, \
+ FRONTIER_MON_METAGROSS_7, \
+ FRONTIER_MON_METAGROSS_8, \
+ FRONTIER_MON_TYRANITAR_1, \
+ FRONTIER_MON_TYRANITAR_2, \
+ FRONTIER_MON_TYRANITAR_3, \
+ FRONTIER_MON_TYRANITAR_4, \
+ FRONTIER_MON_TYRANITAR_5, \
+ FRONTIER_MON_TYRANITAR_6, \
+ FRONTIER_MON_TYRANITAR_7, \
+ FRONTIER_MON_TYRANITAR_8, \
+ FRONTIER_MON_TYRANITAR_9, \
+ FRONTIER_MON_TYRANITAR_10, \
+ -1
+
+#define FRONTIER_MONS_KINDLER_3 \
+ FRONTIER_MON_MISDREAVUS_1, \
+ FRONTIER_MON_DUSCLOPS_1, \
+ FRONTIER_MON_MAGMAR_1, \
+ FRONTIER_MON_RAPIDASH_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_HOUNDOOM_1, \
+ FRONTIER_MON_NINETALES_1, \
+ FRONTIER_MON_FLAREON_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_TYPHLOSION_1, \
+ FRONTIER_MON_ARCANINE_1, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_DUSCLOPS_2, \
+ FRONTIER_MON_MAGMAR_2, \
+ FRONTIER_MON_RAPIDASH_2, \
+ FRONTIER_MON_GENGAR_2, \
+ FRONTIER_MON_HOUNDOOM_2, \
+ FRONTIER_MON_NINETALES_2, \
+ FRONTIER_MON_FLAREON_2, \
+ FRONTIER_MON_BLAZIKEN_2, \
+ FRONTIER_MON_CHARIZARD_2, \
+ FRONTIER_MON_TYPHLOSION_2, \
+ FRONTIER_MON_ARCANINE_2, \
+ FRONTIER_MON_MISDREAVUS_3, \
+ FRONTIER_MON_DUSCLOPS_3, \
+ FRONTIER_MON_MAGMAR_3, \
+ FRONTIER_MON_RAPIDASH_3, \
+ FRONTIER_MON_GENGAR_3, \
+ FRONTIER_MON_HOUNDOOM_3, \
+ FRONTIER_MON_NINETALES_3, \
+ FRONTIER_MON_FLAREON_3, \
+ FRONTIER_MON_BLAZIKEN_3, \
+ FRONTIER_MON_CHARIZARD_3, \
+ FRONTIER_MON_TYPHLOSION_3, \
+ FRONTIER_MON_ARCANINE_3, \
+ FRONTIER_MON_MISDREAVUS_4, \
+ FRONTIER_MON_DUSCLOPS_4, \
+ FRONTIER_MON_MAGMAR_4, \
+ FRONTIER_MON_RAPIDASH_4, \
+ FRONTIER_MON_GENGAR_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_NINETALES_4, \
+ FRONTIER_MON_FLAREON_4, \
+ FRONTIER_MON_BLAZIKEN_4, \
+ FRONTIER_MON_CHARIZARD_4, \
+ FRONTIER_MON_TYPHLOSION_4, \
+ FRONTIER_MON_ARCANINE_4, \
+ FRONTIER_MON_GENGAR_5, \
+ FRONTIER_MON_GENGAR_6, \
+ FRONTIER_MON_GENGAR_7, \
+ FRONTIER_MON_GENGAR_8, \
+ FRONTIER_MON_DRAGONITE_1, \
+ FRONTIER_MON_DRAGONITE_2, \
+ FRONTIER_MON_DRAGONITE_3, \
+ FRONTIER_MON_DRAGONITE_4, \
+ FRONTIER_MON_DRAGONITE_5, \
+ FRONTIER_MON_DRAGONITE_6, \
+ FRONTIER_MON_DRAGONITE_7, \
+ FRONTIER_MON_DRAGONITE_8, \
+ FRONTIER_MON_DRAGONITE_9, \
+ FRONTIER_MON_DRAGONITE_10, \
+ -1
+
+#define FRONTIER_MONS_PARASOL_LADY_3 \
+ FRONTIER_MON_GLALIE_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_BLASTOISE_1, \
+ FRONTIER_MON_FERALIGATR_1, \
+ FRONTIER_MON_BLAZIKEN_1, \
+ FRONTIER_MON_WALREIN_1, \
+ FRONTIER_MON_CHARIZARD_1, \
+ FRONTIER_MON_TYPHLOSION_1, \
+ FRONTIER_MON_MANECTRIC_2, \
+ FRONTIER_MON_ELECTRODE_2, \
+ FRONTIER_MON_EXPLOUD_2, \
+ FRONTIER_MON_ELECTABUZZ_2, \
+ FRONTIER_MON_NINETALES_2, \
+ FRONTIER_MON_PORYGON2_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_FLYGON_2, \
+ FRONTIER_MON_ARCANINE_2, \
+ FRONTIER_MON_LANTURN_3, \
+ FRONTIER_MON_RAICHU_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_RAPIDASH_3, \
+ FRONTIER_MON_CLAYDOL_3, \
+ FRONTIER_MON_GYARADOS_3, \
+ FRONTIER_MON_VILEPLUME_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_HOUNDOOM_4, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_FLAREON_4, \
+ -1
+
+// Only used by one Beauty
+#define FRONTIER_MONS_EEVEELUTIONS \
+ FRONTIER_MON_VAPOREON_1, \
+ FRONTIER_MON_JOLTEON_1, \
+ FRONTIER_MON_FLAREON_1, \
+ FRONTIER_MON_ESPEON_1, \
+ FRONTIER_MON_UMBREON_1, \
+ FRONTIER_MON_VAPOREON_2, \
+ FRONTIER_MON_JOLTEON_2, \
+ FRONTIER_MON_FLAREON_2, \
+ FRONTIER_MON_ESPEON_2, \
+ FRONTIER_MON_UMBREON_2, \
+ FRONTIER_MON_VAPOREON_3, \
+ FRONTIER_MON_JOLTEON_3, \
+ FRONTIER_MON_FLAREON_3, \
+ FRONTIER_MON_ESPEON_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_VAPOREON_4, \
+ FRONTIER_MON_JOLTEON_4, \
+ FRONTIER_MON_FLAREON_4, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_UMBREON_4, \
+ -1
+
+#define FRONTIER_MONS_BEAUTY_2 \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_LANTURN_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_GENGAR_1, \
+ FRONTIER_MON_AMPHAROS_1, \
+ FRONTIER_MON_JOLTEON_1, \
+ FRONTIER_MON_LAPRAS_1, \
+ FRONTIER_MON_SNORLAX_1, \
+ FRONTIER_MON_KINGDRA_1, \
+ FRONTIER_MON_QUAGSIRE_2, \
+ FRONTIER_MON_MISDREAVUS_2, \
+ FRONTIER_MON_FEAROW_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_KANGASKHAN_2, \
+ FRONTIER_MON_ELECTABUZZ_2, \
+ FRONTIER_MON_MILTANK_2, \
+ FRONTIER_MON_ALTARIA_2, \
+ FRONTIER_MON_RAPIDASH_2, \
+ FRONTIER_MON_HERACROSS_2, \
+ FRONTIER_MON_FLAREON_2, \
+ FRONTIER_MON_SCEPTILE_2, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_RAICHU_3, \
+ FRONTIER_MON_VILEPLUME_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_NINETALES_3, \
+ FRONTIER_MON_SHUCKLE_3, \
+ FRONTIER_MON_UMBREON_3, \
+ FRONTIER_MON_WALREIN_3, \
+ FRONTIER_MON_MILOTIC_3, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_URSARING_5, \
+ FRONTIER_MON_MACHAMP_7, \
+ FRONTIER_MON_GARDEVOIR_8, \
+ FRONTIER_MON_LAPRAS_8, \
+ FRONTIER_MON_SALAMENCE_8, \
+ FRONTIER_MON_LATIAS_6, \
+ -1
+
+#define FRONTIER_MONS_AROMA_LADY_3 \
+ FRONTIER_MON_WOBBUFFET_1, \
+ FRONTIER_MON_WOBBUFFET_2, \
+ FRONTIER_MON_SUNFLORA_2, \
+ FRONTIER_MON_JUMPLUFF_2, \
+ FRONTIER_MON_TROPIUS_2, \
+ FRONTIER_MON_CACTURNE_2, \
+ FRONTIER_MON_BELLOSSOM_2, \
+ FRONTIER_MON_JYNX_1, \
+ FRONTIER_MON_MR_MIME_1, \
+ FRONTIER_MON_BRELOOM_1, \
+ FRONTIER_MON_XATU_1, \
+ FRONTIER_MON_VILEPLUME_1, \
+ FRONTIER_MON_VICTREEBEL_1, \
+ FRONTIER_MON_SHIFTRY_1, \
+ FRONTIER_MON_LUDICOLO_1, \
+ FRONTIER_MON_HYPNO_1, \
+ FRONTIER_MON_ALAKAZAM_1, \
+ FRONTIER_MON_SLOWBRO_1, \
+ FRONTIER_MON_SLOWKING_1, \
+ FRONTIER_MON_CRADILY_1, \
+ FRONTIER_MON_GARDEVOIR_1, \
+ FRONTIER_MON_EXEGGUTOR_1, \
+ FRONTIER_MON_STARMIE_1, \
+ FRONTIER_MON_VENUSAUR_1, \
+ FRONTIER_MON_MEGANIUM_1, \
+ FRONTIER_MON_ESPEON_1, \
+ FRONTIER_MON_SCEPTILE_1, \
+ FRONTIER_MON_JYNX_2, \
+ FRONTIER_MON_MR_MIME_2, \
+ FRONTIER_MON_BRELOOM_2, \
+ FRONTIER_MON_XATU_2, \
+ FRONTIER_MON_VILEPLUME_2, \
+ FRONTIER_MON_VICTREEBEL_2, \
+ FRONTIER_MON_SHIFTRY_2, \
+ FRONTIER_MON_LUDICOLO_2, \
+ FRONTIER_MON_HYPNO_2, \
+ FRONTIER_MON_ALAKAZAM_2, \
+ FRONTIER_MON_SLOWBRO_2, \
+ FRONTIER_MON_SLOWKING_2, \
+ FRONTIER_MON_CRADILY_2, \
+ FRONTIER_MON_GARDEVOIR_2, \
+ FRONTIER_MON_EXEGGUTOR_2, \
+ FRONTIER_MON_STARMIE_2, \
+ FRONTIER_MON_VENUSAUR_2, \
+ FRONTIER_MON_MEGANIUM_2, \
+ FRONTIER_MON_ESPEON_2, \
+ FRONTIER_MON_SCEPTILE_2, \
+ FRONTIER_MON_JYNX_3, \
+ FRONTIER_MON_MR_MIME_3, \
+ FRONTIER_MON_BRELOOM_3, \
+ FRONTIER_MON_XATU_3, \
+ FRONTIER_MON_VILEPLUME_3, \
+ FRONTIER_MON_VICTREEBEL_3, \
+ FRONTIER_MON_SHIFTRY_3, \
+ FRONTIER_MON_LUDICOLO_3, \
+ FRONTIER_MON_HYPNO_3, \
+ FRONTIER_MON_ALAKAZAM_3, \
+ FRONTIER_MON_SLOWBRO_3, \
+ FRONTIER_MON_SLOWKING_3, \
+ FRONTIER_MON_CRADILY_3, \
+ FRONTIER_MON_GARDEVOIR_3, \
+ FRONTIER_MON_EXEGGUTOR_3, \
+ FRONTIER_MON_STARMIE_3, \
+ FRONTIER_MON_VENUSAUR_3, \
+ FRONTIER_MON_MEGANIUM_3, \
+ FRONTIER_MON_ESPEON_3, \
+ FRONTIER_MON_SCEPTILE_3, \
+ FRONTIER_MON_JYNX_4, \
+ FRONTIER_MON_MR_MIME_4, \
+ FRONTIER_MON_BRELOOM_4, \
+ FRONTIER_MON_XATU_4, \
+ FRONTIER_MON_VILEPLUME_4, \
+ FRONTIER_MON_VICTREEBEL_4, \
+ FRONTIER_MON_SHIFTRY_4, \
+ FRONTIER_MON_LUDICOLO_4, \
+ FRONTIER_MON_HYPNO_4, \
+ FRONTIER_MON_ALAKAZAM_4, \
+ FRONTIER_MON_SLOWBRO_4, \
+ FRONTIER_MON_SLOWKING_4, \
+ FRONTIER_MON_CRADILY_4, \
+ FRONTIER_MON_GARDEVOIR_4, \
+ FRONTIER_MON_EXEGGUTOR_4, \
+ FRONTIER_MON_STARMIE_4, \
+ FRONTIER_MON_VENUSAUR_4, \
+ FRONTIER_MON_MEGANIUM_4, \
+ FRONTIER_MON_ESPEON_4, \
+ FRONTIER_MON_SCEPTILE_4, \
+ FRONTIER_MON_GARDEVOIR_5, \
+ FRONTIER_MON_GARDEVOIR_6, \
+ FRONTIER_MON_GARDEVOIR_7, \
+ FRONTIER_MON_GARDEVOIR_8, \
+ FRONTIER_MON_STARMIE_5, \
+ FRONTIER_MON_STARMIE_6, \
+ FRONTIER_MON_STARMIE_7, \
+ FRONTIER_MON_STARMIE_8, \
+ -1
+
const u16 gBattleFrontierTrainerMons_Brady[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Conner[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Bradley[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Cybil[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Rodette[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Peggy[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Keith[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Grayson[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Glenn[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Liliana[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Elise[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Zoey[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Manuel[] =
{
- 5,
- 20,
- 21,
- 25,
- 27,
- 35,
- 46,
- 47,
- 48,
- 50,
- 53,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 119,
- 121,
- 124,
- 127,
- 146,
- 147,
- 154,
- 158,
- 160,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_1
};
const u16 gBattleFrontierTrainerMons_Russ[] =
{
- 5,
- 20,
- 21,
- 25,
- 27,
- 35,
- 46,
- 47,
- 48,
- 50,
- 53,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 119,
- 121,
- 124,
- 127,
- 146,
- 147,
- 154,
- 158,
- 160,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_1
};
const u16 gBattleFrontierTrainerMons_Dustin[] =
{
- 5,
- 20,
- 21,
- 25,
- 27,
- 35,
- 46,
- 47,
- 48,
- 50,
- 53,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 119,
- 121,
- 124,
- 127,
- 146,
- 147,
- 154,
- 158,
- 160,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_1
};
const u16 gBattleFrontierTrainerMons_Tina[] =
{
- 5,
- 20,
- 21,
- 25,
- 27,
- 35,
- 46,
- 47,
- 48,
- 50,
- 53,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 119,
- 121,
- 124,
- 127,
- 146,
- 147,
- 154,
- 158,
- 160,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_1
};
const u16 gBattleFrontierTrainerMons_Gillian[] =
{
- 5,
- 20,
- 21,
- 25,
- 27,
- 35,
- 46,
- 47,
- 48,
- 50,
- 53,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 119,
- 121,
- 124,
- 127,
- 146,
- 147,
- 154,
- 158,
- 160,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_1
};
const u16 gBattleFrontierTrainerMons_Zoe[] =
{
- 5,
- 20,
- 21,
- 25,
- 27,
- 35,
- 46,
- 47,
- 48,
- 50,
- 53,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 119,
- 121,
- 124,
- 127,
- 146,
- 147,
- 154,
- 158,
- 160,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_1
};
const u16 gBattleFrontierTrainerMons_Chen[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Al[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Mitch[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Anne[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Alize[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Lauren[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Kipp[] =
{
- 5,
- 6,
- 7,
- 14,
- 19,
- 28,
- 35,
- 42,
- 45,
- 48,
- 50,
- 55,
- 59,
- 60,
- 68,
- 73,
- 83,
- 84,
- 86,
- 87,
- 90,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 106,
- 109,
- 112,
- 114,
- 121,
- -1
+ FRONTIER_MONS_TUBER_1
};
const u16 gBattleFrontierTrainerMons_Jason[] =
{
- 5,
- 6,
- 7,
- 14,
- 19,
- 28,
- 35,
- 42,
- 45,
- 48,
- 50,
- 55,
- 59,
- 60,
- 68,
- 73,
- 83,
- 84,
- 86,
- 87,
- 90,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 106,
- 109,
- 112,
- 114,
- 121,
- -1
+ FRONTIER_MONS_TUBER_1
};
const u16 gBattleFrontierTrainerMons_John[] =
{
- 5,
- 6,
- 7,
- 14,
- 19,
- 28,
- 35,
- 42,
- 45,
- 48,
- 50,
- 55,
- 59,
- 60,
- 68,
- 73,
- 83,
- 84,
- 86,
- 87,
- 90,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 106,
- 109,
- 112,
- 114,
- 121,
- -1
+ FRONTIER_MONS_TUBER_1
};
const u16 gBattleFrontierTrainerMons_Ann[] =
{
- 5,
- 6,
- 7,
- 14,
- 19,
- 28,
- 35,
- 42,
- 45,
- 48,
- 50,
- 55,
- 59,
- 60,
- 68,
- 73,
- 83,
- 84,
- 86,
- 87,
- 90,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 106,
- 109,
- 112,
- 114,
- 121,
- -1
+ FRONTIER_MONS_TUBER_1
};
const u16 gBattleFrontierTrainerMons_Eileen[] =
{
- 5,
- 6,
- 7,
- 14,
- 19,
- 28,
- 35,
- 42,
- 45,
- 48,
- 50,
- 55,
- 59,
- 60,
- 68,
- 73,
- 83,
- 84,
- 86,
- 87,
- 90,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 106,
- 109,
- 112,
- 114,
- 121,
- -1
+ FRONTIER_MONS_TUBER_1
};
const u16 gBattleFrontierTrainerMons_Carlie[] =
{
- 5,
- 6,
- 7,
- 14,
- 19,
- 28,
- 35,
- 42,
- 45,
- 48,
- 50,
- 55,
- 59,
- 60,
- 68,
- 73,
- 83,
- 84,
- 86,
- 87,
- 90,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 106,
- 109,
- 112,
- 114,
- 121,
- -1
+ FRONTIER_MONS_TUBER_1
};
const u16 gBattleFrontierTrainerMons_Gordon[] =
{
- 1,
- 13,
- 15,
- 16,
- 17,
- 22,
- 23,
- 24,
- 26,
- 32,
- 34,
- 36,
- 43,
- 50,
- 51,
- 54,
- 56,
- 68,
- 72,
- 73,
- 81,
- 82,
- 83,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 107,
- 109,
- 111,
- 113,
- 116,
- 117,
- 123,
- 124,
- 128,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 152,
- 155,
- -1
+ FRONTIER_MONS_SWIMMER_M_1
};
const u16 gBattleFrontierTrainerMons_Ayden[] =
{
- 1,
- 13,
- 15,
- 16,
- 17,
- 22,
- 23,
- 24,
- 26,
- 32,
- 34,
- 36,
- 43,
- 50,
- 51,
- 54,
- 56,
- 68,
- 72,
- 73,
- 81,
- 82,
- 83,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 107,
- 109,
- 111,
- 113,
- 116,
- 117,
- 123,
- 124,
- 128,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 152,
- 155,
- -1
+ FRONTIER_MONS_SWIMMER_M_1
};
const u16 gBattleFrontierTrainerMons_Marco[] =
{
- 1,
- 13,
- 15,
- 16,
- 17,
- 22,
- 23,
- 24,
- 26,
- 32,
- 34,
- 36,
- 43,
- 50,
- 51,
- 54,
- 56,
- 68,
- 72,
- 73,
- 81,
- 82,
- 83,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 107,
- 109,
- 111,
- 113,
- 116,
- 117,
- 123,
- 124,
- 128,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 152,
- 155,
- -1
+ FRONTIER_MONS_SWIMMER_M_1
};
const u16 gBattleFrontierTrainerMons_Cierra[] =
{
- 1,
- 13,
- 16,
- 17,
- 23,
- 24,
- 26,
- 32,
- 34,
- 36,
- 43,
- 51,
- 54,
- 56,
- 68,
- 72,
- 73,
- 76,
- 83,
- 84,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 107,
- 109,
- 111,
- 113,
- 116,
- 117,
- 118,
- 123,
- 124,
- 128,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 155,
- -1
+ FRONTIER_MONS_SWIMMER_F_1
};
const u16 gBattleFrontierTrainerMons_Marcy[] =
{
- 1,
- 13,
- 16,
- 17,
- 23,
- 24,
- 26,
- 32,
- 34,
- 36,
- 43,
- 51,
- 54,
- 56,
- 68,
- 72,
- 73,
- 76,
- 83,
- 84,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 107,
- 109,
- 111,
- 113,
- 116,
- 117,
- 118,
- 123,
- 124,
- 128,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 155,
- -1
+ FRONTIER_MONS_SWIMMER_F_1
};
const u16 gBattleFrontierTrainerMons_Kathy[] =
{
- 1,
- 13,
- 16,
- 17,
- 23,
- 24,
- 26,
- 32,
- 34,
- 36,
- 43,
- 51,
- 54,
- 56,
- 68,
- 72,
- 73,
- 76,
- 83,
- 84,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 105,
- 107,
- 109,
- 111,
- 113,
- 116,
- 117,
- 118,
- 123,
- 124,
- 128,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 155,
- -1
+ FRONTIER_MONS_SWIMMER_F_1
};
const u16 gBattleFrontierTrainerMons_Peyton[] =
{
- 84,
- 85,
- 87,
- 88,
- 89,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 105,
- 106,
- 107,
- 109,
- 112,
- 113,
- 117,
- 120,
- 121,
- 123,
- 129,
- 134,
- 142,
- 143,
- 145,
- 148,
- 149,
- 151,
- 152,
- 155,
- -1
+ FRONTIER_MONS_POKEFAN_M_1
};
const u16 gBattleFrontierTrainerMons_Julian[] =
{
- 84,
- 85,
- 87,
- 88,
- 89,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 105,
- 106,
- 107,
- 109,
- 112,
- 113,
- 117,
- 120,
- 121,
- 123,
- 129,
- 134,
- 142,
- 143,
- 145,
- 148,
- 149,
- 151,
- 152,
- 155,
- -1
+ FRONTIER_MONS_POKEFAN_M_1
};
const u16 gBattleFrontierTrainerMons_Quinn[] =
{
- 84,
- 85,
- 87,
- 88,
- 89,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 105,
- 106,
- 107,
- 109,
- 112,
- 113,
- 117,
- 120,
- 121,
- 123,
- 129,
- 134,
- 142,
- 143,
- 145,
- 148,
- 149,
- 151,
- 152,
- 155,
- -1
+ FRONTIER_MONS_POKEFAN_M_1
};
const u16 gBattleFrontierTrainerMons_Haylee[] =
{
- 1,
- 5,
- 6,
- 10,
- 13,
- 14,
- 16,
- 17,
- 18,
- 19,
- 20,
- 23,
- 24,
- 26,
- 28,
- 29,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 54,
- 56,
- 59,
- 61,
- 65,
- 66,
- 67,
- 68,
- 71,
- 72,
- 79,
- -1
+ FRONTIER_MONS_POKEFAN_F_1
};
const u16 gBattleFrontierTrainerMons_Amanda[] =
{
- 1,
- 5,
- 6,
- 10,
- 13,
- 14,
- 16,
- 17,
- 18,
- 19,
- 20,
- 23,
- 24,
- 26,
- 28,
- 29,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 54,
- 56,
- 59,
- 61,
- 65,
- 66,
- 67,
- 68,
- 71,
- 72,
- 79,
- -1
+ FRONTIER_MONS_POKEFAN_F_1
};
const u16 gBattleFrontierTrainerMons_Stacy[] =
{
- 1,
- 5,
- 6,
- 10,
- 13,
- 14,
- 16,
- 17,
- 18,
- 19,
- 20,
- 23,
- 24,
- 26,
- 28,
- 29,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 54,
- 56,
- 59,
- 61,
- 65,
- 66,
- 67,
- 68,
- 71,
- 72,
- 79,
- -1
+ FRONTIER_MONS_POKEFAN_F_1
};
+// The below 6 are the early Pkmn Breeder class trainers, which use groups from other general classes
const u16 gBattleFrontierTrainerMons_Rafael[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Oliver[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Payton[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Pamela[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Eliza[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Marisa[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Lewis[] =
{
- 2,
- 3,
- 4,
- 8,
- 9,
- 21,
- 27,
- 39,
- 40,
- 41,
- 42,
- 52,
- 57,
- 58,
- 80,
- 112,
- 132,
- 141,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_BUG_CATCHER_1_EXTRA(METAPOD, KAKUNA)
};
const u16 gBattleFrontierTrainerMons_Yoshi[] =
{
- 2,
- 3,
- 4,
- 11,
- 12,
- 21,
- 27,
- 39,
- 40,
- 41,
- 42,
- 52,
- 57,
- 58,
- 80,
- 112,
- 132,
- 141,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_BUG_CATCHER_1_EXTRA(SILCOON, CASCOON)
};
const u16 gBattleFrontierTrainerMons_Destin[] =
{
- 2,
- 3,
- 4,
- 21,
- 27,
- 39,
- 40,
- 41,
- 42,
- 52,
- 57,
- 58,
- 80,
- 112,
- 132,
- 141,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_BUG_CATCHER_1
};
const u16 gBattleFrontierTrainerMons_Keon[] =
{
- 5,
- 21,
- 25,
- 27,
- 35,
- 39,
- 40,
- 41,
- 42,
- 46,
- 47,
- 48,
- 50,
- 52,
- 53,
- 57,
- 58,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 121,
- 124,
- 127,
- 132,
- 141,
- 146,
- 147,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_NINJA_BOY_1
};
const u16 gBattleFrontierTrainerMons_Stuart[] =
{
- 5,
- 21,
- 25,
- 27,
- 35,
- 39,
- 40,
- 41,
- 42,
- 46,
- 47,
- 48,
- 50,
- 52,
- 53,
- 57,
- 58,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 121,
- 124,
- 127,
- 132,
- 141,
- 146,
- 147,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_NINJA_BOY_1
};
const u16 gBattleFrontierTrainerMons_Nestor[] =
{
- 5,
- 21,
- 25,
- 27,
- 35,
- 39,
- 40,
- 41,
- 42,
- 46,
- 47,
- 48,
- 50,
- 52,
- 53,
- 57,
- 58,
- 62,
- 63,
- 69,
- 75,
- 78,
- 79,
- 80,
- 84,
- 90,
- 92,
- 99,
- 100,
- 102,
- 106,
- 110,
- 112,
- 114,
- 121,
- 124,
- 127,
- 132,
- 141,
- 146,
- 147,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_NINJA_BOY_1
};
const u16 gBattleFrontierTrainerMons_Derrick[] =
{
- 21,
- 27,
- 29,
- 39,
- 40,
- 41,
- 42,
- 52,
- 57,
- 58,
- 61,
- 62,
- 63,
- 69,
- 80,
- 92,
- 102,
- 112,
- 125,
- 129,
- 132,
- 140,
- 141,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_BUG_MANIAC_1
};
const u16 gBattleFrontierTrainerMons_Bryson[] =
{
- 21,
- 27,
- 29,
- 39,
- 40,
- 41,
- 42,
- 52,
- 57,
- 58,
- 61,
- 62,
- 63,
- 69,
- 80,
- 92,
- 102,
- 112,
- 125,
- 129,
- 132,
- 140,
- 141,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_BUG_MANIAC_1
};
const u16 gBattleFrontierTrainerMons_Clayton[] =
{
- 21,
- 27,
- 29,
- 39,
- 40,
- 41,
- 42,
- 52,
- 57,
- 58,
- 61,
- 62,
- 63,
- 69,
- 80,
- 92,
- 102,
- 112,
- 125,
- 129,
- 132,
- 140,
- 141,
- 153,
- 154,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_BUG_MANIAC_1
};
const u16 gBattleFrontierTrainerMons_Trenton[] =
{
- 6,
- 7,
- 55,
- 60,
- 68,
- 73,
- 83,
- 86,
- 87,
- 105,
- 111,
- 116,
- 123,
- 124,
- 128,
- 134,
- 138,
- 139,
- 151,
- -1
+ FRONTIER_MONS_FISHERMAN_1
};
const u16 gBattleFrontierTrainerMons_Jenson[] =
{
- 6,
- 7,
- 55,
- 60,
- 68,
- 73,
- 83,
- 86,
- 87,
- 105,
- 111,
- 116,
- 123,
- 124,
- 128,
- 134,
- 138,
- 139,
- 151,
- -1
+ FRONTIER_MONS_FISHERMAN_1
};
const u16 gBattleFrontierTrainerMons_Wesley[] =
{
- 6,
- 7,
- 55,
- 60,
- 68,
- 73,
- 83,
- 86,
- 87,
- 105,
- 111,
- 116,
- 123,
- 124,
- 128,
- 134,
- 138,
- 139,
- 151,
- -1
+ FRONTIER_MONS_FISHERMAN_1
};
const u16 gBattleFrontierTrainerMons_Anton[] =
{
- 31,
- 39,
- 58,
- 67,
- 70,
- 74,
- 75,
- 78,
- 85,
- 104,
- 108,
- 120,
- 122,
- 133,
- 138,
- 139,
- 140,
- 141,
- 150,
- 151,
- 152,
- 156,
- -1
+ FRONTIER_MONS_RUIN_MANIAC_1
};
const u16 gBattleFrontierTrainerMons_Lawson[] =
{
- 31,
- 39,
- 58,
- 67,
- 70,
- 74,
- 75,
- 78,
- 85,
- 104,
- 108,
- 120,
- 122,
- 133,
- 138,
- 139,
- 140,
- 141,
- 150,
- 151,
- 152,
- 156,
- -1
+ FRONTIER_MONS_RUIN_MANIAC_1
};
const u16 gBattleFrontierTrainerMons_Sammy[] =
{
- 31,
- 39,
- 58,
- 67,
- 70,
- 74,
- 75,
- 78,
- 85,
- 104,
- 108,
- 120,
- 122,
- 133,
- 138,
- 139,
- 140,
- 141,
- 150,
- 151,
- 152,
- 156,
- -1
+ FRONTIER_MONS_RUIN_MANIAC_1
};
+// The below 3 are the early Collector class trainers, which use groups from other general classes
const u16 gBattleFrontierTrainerMons_Arnie[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Adrian[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Tristan[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Juliana[] =
{
- 0,
- 14,
- 19,
- 28,
- 42,
- 58,
- 59,
- 67,
- 68,
- 85,
- 118,
- 120,
- 123,
- 155,
- 156,
- 193,
- -1
+ FRONTIER_MONS_PARASOL_LADY_1
};
const u16 gBattleFrontierTrainerMons_Rylee[] =
{
- 0,
- 14,
- 19,
- 28,
- 42,
- 58,
- 59,
- 67,
- 68,
- 85,
- 118,
- 120,
- 123,
- 155,
- 156,
- 193,
- -1
+ FRONTIER_MONS_PARASOL_LADY_1
};
const u16 gBattleFrontierTrainerMons_Chelsea[] =
{
- 0,
- 14,
- 19,
- 28,
- 42,
- 58,
- 59,
- 67,
- 68,
- 85,
- 118,
- 120,
- 123,
- 155,
- 156,
- 193,
- -1
+ FRONTIER_MONS_PARASOL_LADY_1
};
+// The below 3 are the early Beauty class trainers, which use groups from other general classes
const u16 gBattleFrontierTrainerMons_Danela[] =
{
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 10,
- 13,
- 14,
- 15,
- 16,
- 17,
- 18,
- 19,
- 20,
- 21,
- 22,
- 23,
- 24,
- 25,
- 26,
- 27,
- 28,
- 29,
- 30,
- 31,
- 32,
- 33,
- 34,
- 35,
- 36,
- 37,
- 38,
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
- 45,
- 46,
- 47,
- 48,
- 49,
- 50,
- 51,
- 52,
- 53,
- 54,
- 55,
- 56,
- 57,
- 58,
- 59,
- 60,
- 61,
- 62,
- 63,
- 64,
- 65,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_1
};
const u16 gBattleFrontierTrainerMons_Lizbeth[] =
{
- 66,
- 67,
- 68,
- 69,
- 70,
- 71,
- 72,
- 73,
- 74,
- 75,
- 76,
- 77,
- 78,
- 79,
- 80,
- 81,
- 82,
- 83,
- 84,
- 85,
- 86,
- 87,
- 88,
- 89,
- 90,
- 91,
- 92,
- 93,
- 94,
- 95,
- 96,
- 97,
- 98,
- 99,
- 100,
- 101,
- 102,
- 103,
- 104,
- 105,
- 106,
- 107,
- 108,
- 109,
- -1
+ FRONTIER_MONS_SCHOOL_KID_1
};
const u16 gBattleFrontierTrainerMons_Amelia[] =
{
- 110,
- 111,
- 112,
- 113,
- 114,
- 115,
- 116,
- 117,
- 118,
- 119,
- 120,
- 121,
- 122,
- 123,
- 124,
- 125,
- 127,
- 128,
- 129,
- 130,
- 131,
- 132,
- 133,
- 134,
- 135,
- 136,
- 137,
- 138,
- 139,
- 140,
- 141,
- 142,
- 143,
- 144,
- 145,
- 146,
- 147,
- 148,
- 149,
- 150,
- 151,
- 152,
- 153,
- 154,
- 155,
- 156,
- 157,
- 158,
- 159,
- 160,
- 161,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_1
};
const u16 gBattleFrontierTrainerMons_Jillian[] =
{
- 0,
- 5,
- 18,
- 19,
- 29,
- 35,
- 48,
- 50,
- 52,
- 61,
- 69,
- 75,
- 78,
- 84,
- 90,
- 94,
- 99,
- 100,
- 101,
- 102,
- 106,
- 112,
- 114,
- 121,
- 125,
- 129,
- 130,
- 131,
- 140,
- -1
+ FRONTIER_MONS_AROMA_LADY_1
};
const u16 gBattleFrontierTrainerMons_Abbie[] =
{
- 0,
- 5,
- 18,
- 19,
- 29,
- 35,
- 48,
- 50,
- 52,
- 61,
- 69,
- 75,
- 78,
- 84,
- 90,
- 94,
- 99,
- 100,
- 101,
- 102,
- 106,
- 112,
- 114,
- 121,
- 125,
- 129,
- 130,
- 131,
- 140,
- -1
+ FRONTIER_MONS_AROMA_LADY_1
};
const u16 gBattleFrontierTrainerMons_Briana[] =
{
- 0,
- 5,
- 18,
- 19,
- 29,
- 35,
- 48,
- 50,
- 52,
- 61,
- 69,
- 75,
- 78,
- 84,
- 90,
- 94,
- 99,
- 100,
- 101,
- 102,
- 106,
- 112,
- 114,
- 121,
- 125,
- 129,
- 130,
- 131,
- 140,
- -1
+ FRONTIER_MONS_AROMA_LADY_1
};
const u16 gBattleFrontierTrainerMons_Antonio[] =
{
- 5,
- 10,
- 20,
- 35,
- 48,
- 49,
- 50,
- 62,
- 63,
- 64,
- 66,
- 71,
- 75,
- 77,
- 78,
- 84,
- 90,
- 92,
- 99,
- 106,
- 108,
- 112,
- 114,
- 115,
- 116,
- 119,
- 121,
- 122,
- 143,
- 148,
- 152,
- -1
+ FRONTIER_MONS_GUITARIST_1
};
const u16 gBattleFrontierTrainerMons_Jaden[] =
{
- 5,
- 10,
- 20,
- 35,
- 48,
- 49,
- 50,
- 62,
- 63,
- 64,
- 66,
- 71,
- 75,
- 77,
- 78,
- 84,
- 90,
- 92,
- 99,
- 106,
- 108,
- 112,
- 114,
- 115,
- 116,
- 119,
- 121,
- 122,
- 143,
- 148,
- 152,
- -1
+ FRONTIER_MONS_GUITARIST_1
};
const u16 gBattleFrontierTrainerMons_Dakota[] =
{
- 5,
- 10,
- 20,
- 35,
- 48,
- 49,
- 50,
- 62,
- 63,
- 64,
- 66,
- 71,
- 75,
- 77,
- 78,
- 84,
- 90,
- 92,
- 99,
- 106,
- 108,
- 112,
- 114,
- 115,
- 116,
- 119,
- 121,
- 122,
- 143,
- 148,
- 152,
- -1
+ FRONTIER_MONS_GUITARIST_1
};
const u16 gBattleFrontierTrainerMons_Brayden[] =
{
- 1,
- 13,
- 16,
- 17,
- 23,
- 24,
- 25,
- 26,
- 32,
- 33,
- 34,
- 36,
- 37,
- 38,
- 43,
- 44,
- 45,
- 51,
- 54,
- 56,
- 72,
- 91,
- 93,
- 95,
- 106,
- 107,
- 113,
- 117,
- 118,
- 135,
- 137,
- 142,
- 144,
- 145,
- -1
+ FRONTIER_MONS_BIRD_KEEPER_1
};
const u16 gBattleFrontierTrainerMons_Corson[] =
{
- 1,
- 13,
- 16,
- 17,
- 23,
- 24,
- 25,
- 26,
- 32,
- 33,
- 34,
- 36,
- 37,
- 38,
- 43,
- 44,
- 45,
- 51,
- 54,
- 56,
- 72,
- 91,
- 93,
- 95,
- 106,
- 107,
- 113,
- 117,
- 118,
- 135,
- 137,
- 142,
- 144,
- 145,
- -1
+ FRONTIER_MONS_BIRD_KEEPER_1
};
const u16 gBattleFrontierTrainerMons_Trevin[] =
{
- 1,
- 13,
- 16,
- 17,
- 23,
- 24,
- 25,
- 26,
- 32,
- 33,
- 34,
- 36,
- 37,
- 38,
- 43,
- 44,
- 45,
- 51,
- 54,
- 56,
- 72,
- 91,
- 93,
- 95,
- 106,
- 107,
- 113,
- 117,
- 118,
- 135,
- 137,
- 142,
- 144,
- 145,
- -1
+ FRONTIER_MONS_BIRD_KEEPER_1
};
const u16 gBattleFrontierTrainerMons_Patrick[] =
{
- 15,
- 22,
- 50,
- 67,
- 70,
- 71,
- 74,
- 77,
- 81,
- 82,
- 83,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 104,
- 109,
- 111,
- 120,
- 124,
- 128,
- 131,
- 133,
- 134,
- 138,
- 139,
- 151,
- 155,
- 156,
- -1
+ FRONTIER_MONS_SAILOR_1
};
const u16 gBattleFrontierTrainerMons_Kaden[] =
{
- 15,
- 22,
- 50,
- 67,
- 70,
- 71,
- 74,
- 77,
- 81,
- 82,
- 83,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 104,
- 109,
- 111,
- 120,
- 124,
- 128,
- 131,
- 133,
- 134,
- 138,
- 139,
- 151,
- 155,
- 156,
- -1
+ FRONTIER_MONS_SAILOR_1
};
const u16 gBattleFrontierTrainerMons_Maxwell[] =
{
- 15,
- 22,
- 50,
- 67,
- 70,
- 71,
- 74,
- 77,
- 81,
- 82,
- 83,
- 86,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 104,
- 109,
- 111,
- 120,
- 124,
- 128,
- 131,
- 133,
- 134,
- 138,
- 139,
- 151,
- 155,
- 156,
- -1
+ FRONTIER_MONS_SAILOR_1
};
const u16 gBattleFrontierTrainerMons_Daryl[] =
{
- 15,
- 22,
- 31,
- 39,
- 50,
- 51,
- 58,
- 67,
- 70,
- 74,
- 75,
- 81,
- 82,
- 85,
- 104,
- 120,
- 122,
- 132,
- 133,
- 138,
- 139,
- 140,
- 141,
- 142,
- 144,
- 150,
- 156,
- -1
+ FRONTIER_MONS_HIKER_1
};
const u16 gBattleFrontierTrainerMons_Kenneth[] =
{
- 15,
- 22,
- 31,
- 39,
- 50,
- 51,
- 58,
- 67,
- 70,
- 74,
- 75,
- 81,
- 82,
- 85,
- 104,
- 120,
- 122,
- 132,
- 133,
- 138,
- 139,
- 140,
- 141,
- 142,
- 144,
- 150,
- 156,
- -1
+ FRONTIER_MONS_HIKER_1
};
const u16 gBattleFrontierTrainerMons_Rich[] =
{
- 15,
- 22,
- 31,
- 39,
- 50,
- 51,
- 58,
- 67,
- 70,
- 74,
- 75,
- 81,
- 82,
- 85,
- 104,
- 120,
- 122,
- 132,
- 133,
- 138,
- 139,
- 140,
- 141,
- 142,
- 144,
- 150,
- 156,
- -1
+ FRONTIER_MONS_HIKER_1
};
const u16 gBattleFrontierTrainerMons_Caden[] =
{
- 30,
- 62,
- 63,
- 65,
- 70,
- 74,
- 77,
- 78,
- 85,
- 88,
- 89,
- 95,
- 108,
- 119,
- 122,
- 133,
- 136,
- 149,
- 150,
- 152,
- 156,
- -1
+ FRONTIER_MONS_KINDLER_1
};
const u16 gBattleFrontierTrainerMons_Marlon[] =
{
- 30,
- 62,
- 63,
- 65,
- 70,
- 74,
- 77,
- 78,
- 85,
- 88,
- 89,
- 95,
- 108,
- 119,
- 122,
- 133,
- 136,
- 149,
- 150,
- 152,
- 156,
- -1
+ FRONTIER_MONS_KINDLER_1
};
const u16 gBattleFrontierTrainerMons_Nash[] =
{
- 30,
- 62,
- 63,
- 65,
- 70,
- 74,
- 77,
- 78,
- 85,
- 88,
- 89,
- 95,
- 108,
- 119,
- 122,
- 133,
- 136,
- 149,
- 150,
- 152,
- 156,
- -1
+ FRONTIER_MONS_KINDLER_1
};
const u16 gBattleFrontierTrainerMons_Robby[] =
{
- 1,
- 13,
- 15,
- 16,
- 17,
- 22,
- 23,
- 24,
- 26,
- 32,
- 33,
- 34,
- 36,
- 37,
- 38,
- 43,
- 44,
- 50,
- 51,
- 54,
- 56,
- 67,
- 70,
- 72,
- 74,
- 75,
- 81,
- 82,
- 85,
- 91,
- 93,
- 104,
- 107,
- 113,
- 117,
- 120,
- 132,
- 133,
- 135,
- 137,
- 142,
- 144,
- 145,
- 156,
- -1
+ FRONTIER_MONS_RUNNING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Reece[] =
{
- 1,
- 13,
- 15,
- 16,
- 17,
- 22,
- 23,
- 24,
- 26,
- 32,
- 33,
- 34,
- 36,
- 37,
- 38,
- 43,
- 44,
- 50,
- 51,
- 54,
- 56,
- 67,
- 70,
- 72,
- 74,
- 75,
- 81,
- 82,
- 85,
- 91,
- 93,
- 104,
- 107,
- 113,
- 117,
- 120,
- 132,
- 133,
- 135,
- 137,
- 142,
- 144,
- 145,
- 156,
- -1
+ FRONTIER_MONS_RUNNING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Kathryn[] =
{
- 1,
- 13,
- 15,
- 16,
- 17,
- 22,
- 23,
- 24,
- 26,
- 32,
- 33,
- 34,
- 36,
- 37,
- 38,
- 43,
- 44,
- 50,
- 51,
- 54,
- 56,
- 67,
- 70,
- 72,
- 74,
- 75,
- 81,
- 82,
- 85,
- 91,
- 93,
- 104,
- 107,
- 113,
- 117,
- 120,
- 132,
- 133,
- 135,
- 137,
- 142,
- 144,
- 145,
- 156,
- -1
+ FRONTIER_MONS_RUNNING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Ellen[] =
{
- 1,
- 13,
- 15,
- 16,
- 17,
- 22,
- 23,
- 24,
- 26,
- 32,
- 33,
- 34,
- 36,
- 37,
- 38,
- 43,
- 44,
- 50,
- 51,
- 54,
- 56,
- 67,
- 70,
- 72,
- 74,
- 75,
- 81,
- 82,
- 85,
- 91,
- 93,
- 104,
- 107,
- 113,
- 117,
- 120,
- 132,
- 133,
- 135,
- 137,
- 142,
- 144,
- 145,
- 156,
- -1
+ FRONTIER_MONS_RUNNING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Ramon[] =
{
- 15,
- 22,
- 50,
- 71,
- 72,
- 76,
- 77,
- 81,
- 82,
- 83,
- 84,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 107,
- 109,
- 111,
- 113,
- 117,
- 118,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 155,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Arthur[] =
{
- 15,
- 22,
- 50,
- 71,
- 72,
- 76,
- 77,
- 81,
- 82,
- 83,
- 84,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 107,
- 109,
- 111,
- 113,
- 117,
- 118,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 155,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Alondra[] =
{
- 15,
- 22,
- 50,
- 71,
- 72,
- 76,
- 77,
- 81,
- 82,
- 83,
- 84,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 107,
- 109,
- 111,
- 113,
- 117,
- 118,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 155,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Adriana[] =
{
- 15,
- 22,
- 50,
- 71,
- 72,
- 76,
- 77,
- 81,
- 82,
- 83,
- 84,
- 87,
- 96,
- 97,
- 98,
- 99,
- 103,
- 107,
- 109,
- 111,
- 113,
- 117,
- 118,
- 131,
- 134,
- 138,
- 139,
- 142,
- 144,
- 145,
- 151,
- 155,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Malik[] =
{
- 10,
- 15,
- 22,
- 49,
- 50,
- 64,
- 66,
- 71,
- 72,
- 77,
- 78,
- 81,
- 82,
- 91,
- 93,
- 107,
- 108,
- 113,
- 115,
- 117,
- 122,
- 135,
- 137,
- 142,
- 143,
- 144,
- 145,
- 148,
- 152,
- -1
+ FRONTIER_MONS_CYCLING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Jill[] =
{
- 10,
- 15,
- 22,
- 49,
- 50,
- 64,
- 66,
- 71,
- 72,
- 77,
- 78,
- 81,
- 82,
- 91,
- 93,
- 107,
- 108,
- 113,
- 115,
- 117,
- 122,
- 135,
- 137,
- 142,
- 143,
- 144,
- 145,
- 148,
- 152,
- -1
+ FRONTIER_MONS_CYCLING_TRIATHLETE_1
};
const u16 gBattleFrontierTrainerMons_Erik[] =
{
- 162,
- 164,
- 168,
- 178,
- 183,
- 184,
- 189,
- 197,
- 199,
- 200,
- 203,
- 204,
- 207,
- 210,
- 213,
- 214,
- 218,
- 220,
- 221,
- 224,
- 227,
- 231,
- 232,
- 233,
- 234,
- 235,
- 236,
- 238,
- 240,
- 243,
- 245,
- 246,
- 250,
- 263,
- -1
+ FRONTIER_MONS_RUNNING_TRIATHLETE_2
};
const u16 gBattleFrontierTrainerMons_Yazmin[] =
{
- 162,
- 164,
- 168,
- 178,
- 183,
- 184,
- 189,
- 197,
- 199,
- 200,
- 203,
- 204,
- 207,
- 210,
- 213,
- 214,
- 218,
- 220,
- 221,
- 224,
- 227,
- 231,
- 232,
- 233,
- 234,
- 235,
- 236,
- 238,
- 240,
- 243,
- 245,
- 246,
- 250,
- 263,
- -1
+ FRONTIER_MONS_RUNNING_TRIATHLETE_2
};
const u16 gBattleFrontierTrainerMons_Jamal[] =
{
- 170,
- 176,
- 178,
- 182,
- 189,
- 190,
- 192,
- 196,
- 211,
- 212,
- 213,
- 219,
- 228,
- 230,
- 232,
- 233,
- 234,
- 236,
- 242,
- 245,
- 249,
- 253,
- 256,
- 257,
- 258,
- 259,
- 260,
- 261,
- 262,
- 265,
- 266,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_2
};
const u16 gBattleFrontierTrainerMons_Leslie[] =
{
- 170,
- 176,
- 178,
- 182,
- 189,
- 190,
- 192,
- 196,
- 211,
- 212,
- 213,
- 219,
- 228,
- 230,
- 232,
- 233,
- 234,
- 236,
- 242,
- 245,
- 249,
- 253,
- 256,
- 257,
- 258,
- 259,
- 260,
- 261,
- 262,
- 265,
- 266,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_2
};
const u16 gBattleFrontierTrainerMons_Dave[] =
{
- 162,
- 164,
- 168,
- 178,
- 183,
- 186,
- 187,
- 189,
- 197,
- 199,
- 200,
- 203,
- 204,
- 206,
- 207,
- 214,
- 215,
- 218,
- 220,
- 221,
- 224,
- 227,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 244,
- 246,
- 250,
- -1
+ FRONTIER_MONS_CYCLING_TRIATHLETE_2
};
const u16 gBattleFrontierTrainerMons_Carlo[] =
{
- 162,
- 164,
- 168,
- 178,
- 183,
- 186,
- 187,
- 189,
- 197,
- 199,
- 200,
- 203,
- 204,
- 206,
- 207,
- 214,
- 215,
- 218,
- 220,
- 221,
- 224,
- 227,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 244,
- 246,
- 250,
- -1
+ FRONTIER_MONS_CYCLING_TRIATHLETE_2
};
const u16 gBattleFrontierTrainerMons_Emilia[] =
{
- 162,
- 164,
- 168,
- 178,
- 183,
- 186,
- 187,
- 189,
- 197,
- 199,
- 200,
- 203,
- 204,
- 206,
- 207,
- 214,
- 215,
- 218,
- 220,
- 221,
- 224,
- 227,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 244,
- 246,
- 250,
- -1
+ FRONTIER_MONS_CYCLING_TRIATHLETE_2
};
const u16 gBattleFrontierTrainerMons_Dalia[] =
{
- 162,
- 164,
- 168,
- 178,
- 183,
- 186,
- 187,
- 189,
- 197,
- 199,
- 200,
- 203,
- 204,
- 206,
- 207,
- 214,
- 215,
- 218,
- 220,
- 221,
- 224,
- 227,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 244,
- 246,
- 250,
- -1
+ FRONTIER_MONS_CYCLING_TRIATHLETE_2
};
const u16 gBattleFrontierTrainerMons_Hitomi[] =
{
- 164,
- 166,
- 175,
- 178,
- 181,
- 189,
- 191,
- 193,
- 194,
- 195,
- 197,
- 199,
- 200,
- 202,
- 203,
- 205,
- 206,
- 207,
- 210,
- 215,
- 218,
- 220,
- 221,
- 222,
- 223,
- 225,
- 227,
- 230,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 241,
- 246,
- 247,
- 252,
- 254,
- 262,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1
};
const u16 gBattleFrontierTrainerMons_Ricardo[] =
{
- 164,
- 166,
- 175,
- 178,
- 181,
- 189,
- 191,
- 193,
- 194,
- 195,
- 197,
- 199,
- 200,
- 202,
- 203,
- 205,
- 206,
- 207,
- 210,
- 215,
- 218,
- 220,
- 221,
- 222,
- 223,
- 225,
- 227,
- 230,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 241,
- 246,
- 247,
- 252,
- 254,
- 262,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1
};
const u16 gBattleFrontierTrainerMons_Shizuka[] =
{
- 164,
- 166,
- 175,
- 178,
- 181,
- 189,
- 191,
- 193,
- 194,
- 195,
- 197,
- 199,
- 200,
- 202,
- 203,
- 205,
- 206,
- 207,
- 210,
- 215,
- 218,
- 220,
- 221,
- 222,
- 223,
- 225,
- 227,
- 230,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 241,
- 246,
- 247,
- 252,
- 254,
- 262,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1
};
const u16 gBattleFrontierTrainerMons_Joana[] =
{
- 164,
- 166,
- 175,
- 178,
- 181,
- 189,
- 191,
- 193,
- 194,
- 195,
- 197,
- 199,
- 200,
- 202,
- 203,
- 205,
- 206,
- 207,
- 210,
- 215,
- 218,
- 220,
- 221,
- 222,
- 223,
- 225,
- 227,
- 230,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 241,
- 246,
- 247,
- 252,
- 254,
- 262,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1
};
const u16 gBattleFrontierTrainerMons_Kelly[] =
{
- 164,
- 166,
- 175,
- 178,
- 181,
- 189,
- 191,
- 193,
- 194,
- 195,
- 197,
- 199,
- 200,
- 202,
- 203,
- 205,
- 206,
- 207,
- 210,
- 215,
- 218,
- 220,
- 221,
- 222,
- 223,
- 225,
- 227,
- 230,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 241,
- 246,
- 247,
- 252,
- 254,
- 262,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1
};
const u16 gBattleFrontierTrainerMons_Rayna[] =
{
- 164,
- 166,
- 175,
- 178,
- 181,
- 189,
- 191,
- 193,
- 194,
- 195,
- 197,
- 199,
- 200,
- 202,
- 203,
- 205,
- 206,
- 207,
- 210,
- 215,
- 218,
- 220,
- 221,
- 222,
- 223,
- 225,
- 227,
- 230,
- 232,
- 233,
- 234,
- 235,
- 236,
- 240,
- 241,
- 246,
- 247,
- 252,
- 254,
- 262,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_1
};
const u16 gBattleFrontierTrainerMons_Evan[] =
{
- 162,
- 163,
- 164,
- 165,
- 166,
- 167,
- 168,
- 169,
- 170,
- 171,
- 172,
- 173,
- 174,
- 175,
- 176,
- 177,
- 178,
- 179,
- 180,
- 181,
- 182,
- 183,
- 184,
- 185,
- 186,
- 187,
- 188,
- 189,
- 190,
- 191,
- 192,
- 193,
- 194,
- 195,
- 196,
- 197,
- 198,
- 199,
- -1
+ FRONTIER_MONS_EXPERT_1A
};
const u16 gBattleFrontierTrainerMons_Jordan[] =
{
- 200,
- 201,
- 202,
- 203,
- 204,
- 205,
- 206,
- 207,
- 208,
- 209,
- 210,
- 211,
- 212,
- 213,
- 214,
- 215,
- 216,
- 217,
- 218,
- 219,
- 220,
- 221,
- 222,
- 223,
- 224,
- 225,
- 226,
- 227,
- 228,
- 229,
- 230,
- 231,
- 232,
- 233,
- 234,
- 235,
- 236,
- -1
+ FRONTIER_MONS_EXPERT_1B
};
const u16 gBattleFrontierTrainerMons_Joel[] =
{
- 237,
- 238,
- 239,
- 240,
- 241,
- 242,
- 243,
- 244,
- 245,
- 246,
- 247,
- 248,
- 249,
- 250,
- 251,
- 252,
- 253,
- 254,
- 255,
- 256,
- 257,
- 258,
- 259,
- 260,
- 261,
- 262,
- 263,
- 264,
- 265,
- 266,
- -1
+ FRONTIER_MONS_EXPERT_1C
};
const u16 gBattleFrontierTrainerMons_Kristen[] =
{
- 162,
- 163,
- 164,
- 165,
- 166,
- 167,
- 168,
- 169,
- 170,
- 171,
- 172,
- 173,
- 174,
- 175,
- 176,
- 177,
- 178,
- 179,
- 180,
- 181,
- 182,
- 183,
- 184,
- 185,
- 186,
- 187,
- 188,
- 189,
- 190,
- 191,
- 192,
- 193,
- 194,
- 195,
- 196,
- 197,
- 198,
- 199,
- -1
+ FRONTIER_MONS_EXPERT_1A
};
const u16 gBattleFrontierTrainerMons_Selphy[] =
{
- 200,
- 201,
- 202,
- 203,
- 204,
- 205,
- 206,
- 207,
- 208,
- 209,
- 210,
- 211,
- 212,
- 213,
- 214,
- 215,
- 216,
- 217,
- 218,
- 219,
- 220,
- 221,
- 222,
- 223,
- 224,
- 225,
- 226,
- 227,
- 228,
- 229,
- 230,
- 231,
- 232,
- 233,
- 234,
- 235,
- 236,
- -1
+ FRONTIER_MONS_EXPERT_1B
};
const u16 gBattleFrontierTrainerMons_Chloe[] =
{
- 237,
- 238,
- 239,
- 240,
- 241,
- 242,
- 243,
- 244,
- 245,
- 246,
- 247,
- 248,
- 249,
- 250,
- 251,
- 252,
- 253,
- 254,
- 255,
- 256,
- 257,
- 258,
- 259,
- 260,
- 261,
- 262,
- 263,
- 264,
- 265,
- 266,
- -1
+ FRONTIER_MONS_EXPERT_1C
};
const u16 gBattleFrontierTrainerMons_Norton[] =
{
- 267,
- 268,
- 273,
- 274,
- 276,
- 284,
- 289,
- 290,
- 291,
- 292,
- 307,
- 308,
- 311,
- 312,
- 314,
- 317,
- 325,
- 327,
- 328,
- 329,
- 331,
- 332,
- 340,
- 342,
- 347,
- 349,
- 351,
- 352,
- 354,
- 356,
- 359,
- 363,
- 370,
- -1
+ FRONTIER_MONS_PSYCHIC_1
};
const u16 gBattleFrontierTrainerMons_Lukas[] =
{
- 267,
- 268,
- 273,
- 274,
- 276,
- 284,
- 289,
- 290,
- 291,
- 292,
- 307,
- 308,
- 311,
- 312,
- 314,
- 317,
- 325,
- 327,
- 328,
- 329,
- 331,
- 332,
- 340,
- 342,
- 347,
- 349,
- 351,
- 352,
- 354,
- 356,
- 359,
- 363,
- 370,
- -1
+ FRONTIER_MONS_PSYCHIC_1
};
const u16 gBattleFrontierTrainerMons_Zach[] =
{
- 267,
- 268,
- 273,
- 274,
- 276,
- 284,
- 289,
- 290,
- 291,
- 292,
- 307,
- 308,
- 311,
- 312,
- 314,
- 317,
- 325,
- 327,
- 328,
- 329,
- 331,
- 332,
- 340,
- 342,
- 347,
- 349,
- 351,
- 352,
- 354,
- 356,
- 359,
- 363,
- 370,
- -1
+ FRONTIER_MONS_PSYCHIC_1
};
const u16 gBattleFrontierTrainerMons_Kaitlyn[] =
{
- 267,
- 268,
- 273,
- 274,
- 276,
- 284,
- 289,
- 290,
- 291,
- 292,
- 307,
- 308,
- 311,
- 312,
- 314,
- 317,
- 325,
- 327,
- 328,
- 329,
- 331,
- 332,
- 340,
- 342,
- 347,
- 349,
- 351,
- 352,
- 354,
- 356,
- 359,
- 363,
- 370,
- -1
+ FRONTIER_MONS_PSYCHIC_1
};
const u16 gBattleFrontierTrainerMons_Breanna[] =
{
- 267,
- 268,
- 273,
- 274,
- 276,
- 284,
- 289,
- 290,
- 291,
- 292,
- 307,
- 308,
- 311,
- 312,
- 314,
- 317,
- 325,
- 327,
- 328,
- 329,
- 331,
- 332,
- 340,
- 342,
- 347,
- 349,
- 351,
- 352,
- 354,
- 356,
- 359,
- 363,
- 370,
- -1
+ FRONTIER_MONS_PSYCHIC_1
};
const u16 gBattleFrontierTrainerMons_Kendra[] =
{
- 267,
- 268,
- 273,
- 274,
- 276,
- 284,
- 289,
- 290,
- 291,
- 292,
- 307,
- 308,
- 311,
- 312,
- 314,
- 317,
- 325,
- 327,
- 328,
- 329,
- 331,
- 332,
- 340,
- 342,
- 347,
- 349,
- 351,
- 352,
- 354,
- 356,
- 359,
- 363,
- 370,
- -1
+ FRONTIER_MONS_PSYCHIC_1
};
const u16 gBattleFrontierTrainerMons_Molly[] =
{
- 268,
- 270,
- 272,
- 274,
- 282,
- 284,
- 289,
- 290,
- 303,
- 307,
- 311,
- 314,
- 317,
- 322,
- 327,
- 328,
- 331,
- 336,
- 340,
- 342,
- 344,
- 347,
- 352,
- 353,
- 354,
- 356,
- 359,
- -1
+ FRONTIER_MONS_HEX_MANIAC_1
};
const u16 gBattleFrontierTrainerMons_Jazmin[] =
{
- 268,
- 270,
- 272,
- 274,
- 282,
- 284,
- 289,
- 290,
- 303,
- 307,
- 311,
- 314,
- 317,
- 322,
- 327,
- 328,
- 331,
- 336,
- 340,
- 342,
- 344,
- 347,
- 352,
- 353,
- 354,
- 356,
- 359,
- -1
+ FRONTIER_MONS_HEX_MANIAC_1
};
const u16 gBattleFrontierTrainerMons_Kelsey[] =
{
- 268,
- 270,
- 272,
- 274,
- 282,
- 284,
- 289,
- 290,
- 303,
- 307,
- 311,
- 314,
- 317,
- 322,
- 327,
- 328,
- 331,
- 336,
- 340,
- 342,
- 344,
- 347,
- 352,
- 353,
- 354,
- 356,
- 359,
- -1
+ FRONTIER_MONS_HEX_MANIAC_1
};
const u16 gBattleFrontierTrainerMons_Jalen[] =
{
- 269,
- 271,
- 275,
- 279,
- 280,
- 281,
- 283,
- 285,
- 286,
- 287,
- 293,
- 294,
- 295,
- 300,
- 302,
- 307,
- 310,
- 311,
- 320,
- 322,
- 326,
- 330,
- 332,
- 335,
- 344,
- 345,
- 346,
- 348,
- 350,
- 353,
- 357,
- -1
+ FRONTIER_MONS_POKEMANIAC_1
};
const u16 gBattleFrontierTrainerMons_Griffen[] =
{
- 269,
- 271,
- 275,
- 279,
- 280,
- 281,
- 283,
- 285,
- 286,
- 287,
- 293,
- 294,
- 295,
- 300,
- 302,
- 307,
- 310,
- 311,
- 320,
- 322,
- 326,
- 330,
- 332,
- 335,
- 344,
- 345,
- 346,
- 348,
- 350,
- 353,
- 357,
- -1
+ FRONTIER_MONS_POKEMANIAC_1
};
const u16 gBattleFrontierTrainerMons_Xander[] =
{
- 269,
- 271,
- 275,
- 279,
- 280,
- 281,
- 283,
- 285,
- 286,
- 287,
- 293,
- 294,
- 295,
- 300,
- 302,
- 307,
- 310,
- 311,
- 320,
- 322,
- 326,
- 330,
- 332,
- 335,
- 344,
- 345,
- 346,
- 348,
- 350,
- 353,
- 357,
- -1
+ FRONTIER_MONS_POKEMANIAC_1
};
const u16 gBattleFrontierTrainerMons_Marvin[] =
{
- 267,
- 268,
- 269,
- 270,
- 271,
- 272,
- 273,
- 274,
- 275,
- 276,
- 277,
- 278,
- 279,
- 280,
- 281,
- 282,
- 283,
- 284,
- 285,
- 286,
- 287,
- 288,
- 289,
- 290,
- 291,
- 292,
- 293,
- 294,
- 295,
- 296,
- 297,
- 298,
- 299,
- 300,
- 301,
- 302,
- 303,
- 304,
- -1
+ FRONTIER_MONS_GENTLEMAN_1A
};
const u16 gBattleFrontierTrainerMons_Brennan[] =
{
- 305,
- 306,
- 307,
- 308,
- 309,
- 310,
- 311,
- 312,
- 313,
- 314,
- 315,
- 316,
- 317,
- 318,
- 319,
- 320,
- 321,
- 322,
- 323,
- 324,
- 325,
- 326,
- 327,
- 328,
- 329,
- 330,
- 331,
- 332,
- 333,
- 334,
- 335,
- 336,
- 337,
- 338,
- 339,
- 340,
- 341,
- -1
+ FRONTIER_MONS_GENTLEMAN_1B
};
const u16 gBattleFrontierTrainerMons_Baley[] =
{
- 159,
- 160,
- 161,
- 172,
- 173,
- 177,
- 198,
- 226,
- 238,
- 263,
- 264,
- 277,
- 278,
- 282,
- 303,
- 331,
- 343,
- 368,
- 369,
- -1
+ FRONTIER_MONS_BUG_MANIAC_2
};
const u16 gBattleFrontierTrainerMons_Zackary[] =
{
- 271,
- 283,
- 294,
- 295,
- 298,
- 299,
- 300,
- 311,
- 315,
- 320,
- 327,
- 328,
- 330,
- 335,
- 337,
- 338,
- 339,
- 341,
- 346,
- 364,
- 365,
- 366,
- -1
+ FRONTIER_MONS_RUIN_MANIAC_2
};
const u16 gBattleFrontierTrainerMons_Gabriel[] =
{
- 342,
- 343,
- 344,
- 345,
- 346,
- 347,
- 348,
- 349,
- 350,
- 351,
- 352,
- 353,
- 354,
- 355,
- 356,
- 357,
- 358,
- 359,
- 360,
- 361,
- 362,
- 363,
- 364,
- 365,
- 366,
- 367,
- 368,
- 369,
- 370,
- 371,
- -1
+ FRONTIER_MONS_COLLECTOR_1
};
const u16 gBattleFrontierTrainerMons_Emily[] =
{
- 272,
- 301,
- 309,
- 330,
- 348,
- 349,
- 350,
- 359,
- 360,
- 362,
- 363,
- 365,
- -1
+ FRONTIER_MONS_PARASOL_LADY_2
};
const u16 gBattleFrontierTrainerMons_Jordyn[] =
{
- 267,
- 269,
- 270,
- 272,
- 273,
- 276,
- 279,
- 284,
- 288,
- 302,
- 304,
- 305,
- 308,
- 309,
- 312,
- 316,
- 319,
- 322,
- 323,
- 325,
- 326,
- 329,
- 331,
- 332,
- 336,
- 340,
- 344,
- 345,
- 351,
- 353,
- 355,
- -1
+ FRONTIER_MONS_BEAUTY_1
};
const u16 gBattleFrontierTrainerMons_Sofia[] =
{
- 270,
- 272,
- 274,
- 276,
- 279,
- 282,
- 285,
- 290,
- 293,
- 313,
- 314,
- 321,
- 334,
- 340,
- 348,
- 356,
- 359,
- 360,
- -1
+ FRONTIER_MONS_AROMA_LADY_2
};
const u16 gBattleFrontierTrainerMons_Braden[] =
{
- 372,
- 373,
- 374,
- 375,
- 376,
- 377,
- 378,
- 379,
- 380,
- 381,
- 382,
- 383,
- 384,
- 385,
- 386,
- 387,
- 388,
- 389,
- 390,
- 391,
- 392,
- 393,
- 394,
- 395,
- 396,
- 397,
- 398,
- 399,
- 400,
- 401,
- 402,
- 403,
- 404,
- -1
+ FRONTIER_MONS_COOLTRAINER_1A
};
const u16 gBattleFrontierTrainerMons_Kayden[] =
{
- 405,
- 406,
- 407,
- 408,
- 409,
- 410,
- 411,
- 412,
- 413,
- 414,
- 415,
- 416,
- 417,
- 418,
- 419,
- 420,
- 421,
- 422,
- 423,
- 424,
- 425,
- 426,
- 427,
- 428,
- 429,
- 430,
- 431,
- 432,
- 433,
- 434,
- 435,
- 436,
- 437,
- -1
+ FRONTIER_MONS_COOLTRAINER_1B
};
const u16 gBattleFrontierTrainerMons_Cooper[] =
{
- 438,
- 439,
- 440,
- 441,
- 442,
- 443,
- 444,
- 445,
- 446,
- 447,
- 448,
- 449,
- 450,
- 451,
- 452,
- 453,
- 454,
- 455,
- 456,
- 457,
- 458,
- 459,
- 460,
- 461,
- 462,
- 463,
- 464,
- 465,
- 466,
- 467,
- -1
+ FRONTIER_MONS_COOLTRAINER_1C
};
const u16 gBattleFrontierTrainerMons_Julia[] =
{
- 372,
- 373,
- 374,
- 375,
- 376,
- 377,
- 378,
- 379,
- 380,
- 381,
- 382,
- 383,
- 384,
- 385,
- 386,
- 387,
- 388,
- 389,
- 390,
- 391,
- 392,
- 393,
- 394,
- 395,
- 396,
- 397,
- 398,
- 399,
- 400,
- 401,
- 402,
- 403,
- 404,
- -1
+ FRONTIER_MONS_COOLTRAINER_1A
};
const u16 gBattleFrontierTrainerMons_Amara[] =
{
- 405,
- 406,
- 407,
- 408,
- 409,
- 410,
- 411,
- 412,
- 413,
- 414,
- 415,
- 416,
- 417,
- 418,
- 419,
- 420,
- 421,
- 422,
- 423,
- 424,
- 425,
- 426,
- 427,
- 428,
- 429,
- 430,
- 431,
- 432,
- 433,
- 434,
- 435,
- 436,
- 437,
- -1
+ FRONTIER_MONS_COOLTRAINER_1B
};
const u16 gBattleFrontierTrainerMons_Lynn[] =
{
- 438,
- 439,
- 440,
- 441,
- 442,
- 443,
- 444,
- 445,
- 446,
- 447,
- 448,
- 449,
- 450,
- 451,
- 452,
- 453,
- 454,
- 455,
- 456,
- 457,
- 458,
- 459,
- 460,
- 461,
- 462,
- 463,
- 464,
- 465,
- 466,
- 467,
- -1
+ FRONTIER_MONS_COOLTRAINER_1C
};
const u16 gBattleFrontierTrainerMons_Jovan[] =
{
- 238,
- 331,
- 343,
- 368,
- 369,
- 375,
- 376,
- 379,
- 382,
- 383,
- 389,
- 394,
- 395,
- 397,
- 398,
- 400,
- 406,
- 408,
- 411,
- 416,
- 417,
- 423,
- 424,
- 425,
- 432,
- 436,
- 438,
- 441,
- 445,
- 453,
- 460,
- 462,
- 467,
- -1
+ FRONTIER_MONS_PKMN_RANGER_1
};
const u16 gBattleFrontierTrainerMons_Dominic[] =
{
- 238,
- 331,
- 343,
- 368,
- 369,
- 375,
- 376,
- 379,
- 382,
- 383,
- 389,
- 394,
- 395,
- 397,
- 398,
- 400,
- 406,
- 408,
- 411,
- 416,
- 417,
- 423,
- 424,
- 425,
- 432,
- 436,
- 438,
- 441,
- 445,
- 453,
- 460,
- 462,
- 467,
- -1
+ FRONTIER_MONS_PKMN_RANGER_1
};
const u16 gBattleFrontierTrainerMons_Nikolas[] =
{
- 238,
- 331,
- 343,
- 368,
- 369,
- 375,
- 376,
- 379,
- 382,
- 383,
- 389,
- 394,
- 395,
- 397,
- 398,
- 400,
- 406,
- 408,
- 411,
- 416,
- 417,
- 423,
- 424,
- 425,
- 432,
- 436,
- 438,
- 441,
- 445,
- 453,
- 460,
- 462,
- 467,
- -1
+ FRONTIER_MONS_PKMN_RANGER_1
};
const u16 gBattleFrontierTrainerMons_Valeria[] =
{
- 238,
- 331,
- 343,
- 368,
- 369,
- 375,
- 376,
- 379,
- 382,
- 383,
- 389,
- 394,
- 395,
- 397,
- 398,
- 400,
- 406,
- 408,
- 411,
- 416,
- 417,
- 423,
- 424,
- 425,
- 432,
- 436,
- 438,
- 441,
- 445,
- 453,
- 460,
- 462,
- 467,
- -1
+ FRONTIER_MONS_PKMN_RANGER_1
};
const u16 gBattleFrontierTrainerMons_Delaney[] =
{
- 238,
- 331,
- 343,
- 368,
- 369,
- 375,
- 376,
- 379,
- 382,
- 383,
- 389,
- 394,
- 395,
- 397,
- 398,
- 400,
- 406,
- 408,
- 411,
- 416,
- 417,
- 423,
- 424,
- 425,
- 432,
- 436,
- 438,
- 441,
- 445,
- 453,
- 460,
- 462,
- 467,
- -1
+ FRONTIER_MONS_PKMN_RANGER_1
};
const u16 gBattleFrontierTrainerMons_Meghan[] =
{
- 238,
- 331,
- 343,
- 368,
- 369,
- 375,
- 376,
- 379,
- 382,
- 383,
- 389,
- 394,
- 395,
- 397,
- 398,
- 400,
- 406,
- 408,
- 411,
- 416,
- 417,
- 423,
- 424,
- 425,
- 432,
- 436,
- 438,
- 441,
- 445,
- 453,
- 460,
- 462,
- 467,
- -1
+ FRONTIER_MONS_PKMN_RANGER_1
};
const u16 gBattleFrontierTrainerMons_Roberto[] =
{
- 386,
- 403,
- 412,
- 413,
- 414,
- 433,
- 435,
- 440,
- 450,
- 453,
- 454,
- 456,
- 459,
- 461,
- 463,
- 464,
- 465,
- -1
+ FRONTIER_MONS_DRAGON_TAMER_1
};
const u16 gBattleFrontierTrainerMons_Damian[] =
{
- 386,
- 403,
- 412,
- 413,
- 414,
- 433,
- 435,
- 440,
- 450,
- 453,
- 454,
- 456,
- 459,
- 461,
- 463,
- 464,
- 465,
- -1
+ FRONTIER_MONS_DRAGON_TAMER_1
};
const u16 gBattleFrontierTrainerMons_Brody[] =
{
- 386,
- 403,
- 412,
- 413,
- 414,
- 433,
- 435,
- 440,
- 450,
- 453,
- 454,
- 456,
- 459,
- 461,
- 463,
- 464,
- 465,
- -1
+ FRONTIER_MONS_DRAGON_TAMER_1
};
const u16 gBattleFrontierTrainerMons_Graham[] =
{
- 386,
- 403,
- 412,
- 413,
- 414,
- 433,
- 435,
- 440,
- 450,
- 453,
- 454,
- 456,
- 459,
- 461,
- 463,
- 464,
- 465,
- -1
+ FRONTIER_MONS_DRAGON_TAMER_1
};
const u16 gBattleFrontierTrainerMons_Tylor[] =
{
- 374,
- 381,
- 382,
- 385,
- 388,
- 389,
- 391,
- 392,
- 394,
- 409,
- 411,
- 412,
- 419,
- 430,
- 432,
- 436,
- 440,
- 456,
- 460,
- 462,
- 463,
- 467,
- -1
+ FRONTIER_MONS_POKEFAN_2
};
const u16 gBattleFrontierTrainerMons_Jaren[] =
{
- 374,
- 381,
- 382,
- 385,
- 388,
- 389,
- 391,
- 392,
- 394,
- 409,
- 411,
- 412,
- 419,
- 430,
- 432,
- 436,
- 440,
- 456,
- 460,
- 462,
- 463,
- 467,
- -1
+ FRONTIER_MONS_POKEFAN_2
};
const u16 gBattleFrontierTrainerMons_Cordell[] =
{
- 420,
- 421,
- 422,
- 423,
- 424,
- 425,
- 426,
- 427,
- 428,
- 429,
- 430,
- 431,
- 432,
- 433,
- 434,
- 435,
- 436,
- 437,
- 438,
- 439,
- 440,
- 441,
- 442,
- 443,
- 444,
- 445,
- 446,
- 447,
- 448,
- 449,
- 450,
- 451,
- 452,
- 453,
- 454,
- 455,
- 456,
- 457,
- 458,
- 459,
- 460,
- 461,
- 462,
- 463,
- 464,
- 465,
- 466,
- 467,
- -1
+ FRONTIER_MONS_PKMN_BREEDER_M_1
};
const u16 gBattleFrontierTrainerMons_Jazlyn[] =
{
- 372,
- 373,
- 374,
- 375,
- 376,
- 377,
- 378,
- 379,
- 380,
- 381,
- 382,
- 383,
- 384,
- 385,
- 386,
- 387,
- 388,
- 389,
- 390,
- 391,
- 392,
- 393,
- 394,
- 395,
- 396,
- 397,
- 398,
- 399,
- 400,
- 401,
- 402,
- 403,
- 404,
- 405,
- 406,
- 407,
- 408,
- 409,
- 410,
- 411,
- 412,
- 413,
- 414,
- 415,
- 416,
- 417,
- 418,
- 419,
- -1
+ FRONTIER_MONS_PKMN_BREEDER_F_1
};
const u16 gBattleFrontierTrainerMons_Zachery[] =
{
- 468,
- 469,
- 470,
- 471,
- 472,
- 473,
- 474,
- 475,
- 476,
- 477,
- 478,
- 479,
- 480,
- 481,
- 482,
- 483,
- 484,
- 485,
- 486,
- 487,
- 488,
- 489,
- 490,
- 491,
- 492,
- 493,
- 494,
- 495,
- 496,
- 497,
- 498,
- 499,
- 500,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_2
};
const u16 gBattleFrontierTrainerMons_Johan[] =
{
- 469,
- 470,
- 471,
- 472,
- 473,
- 474,
- 475,
- 476,
- 477,
- 478,
- 479,
- 480,
- 481,
- 482,
- 483,
- 484,
- 485,
- 486,
- 487,
- 488,
- 489,
- 490,
- 491,
- 492,
- 493,
- 494,
- 495,
- 496,
- 497,
- 498,
- 499,
- 500,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_2_NO_DUGTRIO
};
const u16 gBattleFrontierTrainerMons_Shea[] =
{
- 468,
- 469,
- 470,
- 471,
- 472,
- 473,
- 474,
- 475,
- 476,
- 477,
- 478,
- 479,
- 480,
- 481,
- 482,
- 483,
- 484,
- 485,
- 486,
- 487,
- 488,
- 489,
- 490,
- 491,
- 492,
- 493,
- 494,
- 495,
- 496,
- 497,
- 498,
- 499,
- 500,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_2
};
const u16 gBattleFrontierTrainerMons_Kaila[] =
{
- 468,
- 469,
- 470,
- 471,
- 472,
- 473,
- 474,
- 475,
- 476,
- 477,
- 478,
- 479,
- 480,
- 481,
- 482,
- 483,
- 484,
- 485,
- 486,
- 487,
- 488,
- 489,
- 490,
- 491,
- 492,
- 493,
- 494,
- 495,
- 496,
- 497,
- 498,
- 499,
- 500,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_2
};
const u16 gBattleFrontierTrainerMons_Isiah[] =
{
- 501,
- 502,
- 503,
- 504,
- 505,
- 506,
- 507,
- 508,
- 509,
- 510,
- 511,
- 512,
- 513,
- 514,
- 515,
- 516,
- 517,
- 518,
- 519,
- 520,
- 521,
- 522,
- 523,
- 524,
- 525,
- 526,
- 527,
- 528,
- 529,
- 530,
- 531,
- 532,
- 533,
- -1
+ FRONTIER_MONS_SCHOOL_KID_2
};
const u16 gBattleFrontierTrainerMons_Garrett[] =
{
- 501,
- 502,
- 503,
- 504,
- 505,
- 506,
- 507,
- 508,
- 509,
- 510,
- 511,
- 512,
- 513,
- 514,
- 515,
- 516,
- 517,
- 518,
- 519,
- 520,
- 521,
- 522,
- 523,
- 524,
- 525,
- 526,
- 527,
- 528,
- 529,
- 530,
- 531,
- 532,
- 533,
- -1
+ FRONTIER_MONS_SCHOOL_KID_2
};
const u16 gBattleFrontierTrainerMons_Haylie[] =
{
- 501,
- 502,
- 503,
- 504,
- 505,
- 506,
- 507,
- 508,
- 509,
- 510,
- 511,
- 512,
- 513,
- 514,
- 515,
- 516,
- 517,
- 518,
- 519,
- 520,
- 521,
- 522,
- 523,
- 524,
- 525,
- 526,
- 527,
- 528,
- 529,
- 530,
- 531,
- 532,
- 533,
- -1
+ FRONTIER_MONS_SCHOOL_KID_2
};
const u16 gBattleFrontierTrainerMons_Megan[] =
{
- 501,
- 502,
- 503,
- 504,
- 505,
- 506,
- 507,
- 508,
- 509,
- 510,
- 511,
- 512,
- 513,
- 514,
- 515,
- 516,
- 517,
- 518,
- 519,
- 520,
- 521,
- 522,
- 523,
- 524,
- 525,
- 526,
- 527,
- 528,
- 529,
- 530,
- 531,
- 532,
- 533,
- -1
+ FRONTIER_MONS_SCHOOL_KID_2
};
const u16 gBattleFrontierTrainerMons_Issac[] =
{
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 540,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562,
- 563,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_2
};
const u16 gBattleFrontierTrainerMons_Quinton[] =
{
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 540,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562,
- 563,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_2
};
const u16 gBattleFrontierTrainerMons_Salma[] =
{
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 540,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562,
- 563,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_2
};
const u16 gBattleFrontierTrainerMons_Ansley[] =
{
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 540,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562,
- 563,
- -1
+ FRONTIER_MONS_RICH_BOY_LADY_2
};
const u16 gBattleFrontierTrainerMons_Holden[] =
{
- 343,
- 368,
- 369,
- 383,
- 417,
- 423,
- 424,
- 432,
- 480,
- 481,
- 490,
- 491,
- 494,
- 496,
- 512,
- 513,
- 519,
- 520,
- 528,
- 534,
- 537,
- 541,
- 549,
- -1
+ FRONTIER_MONS_BUG_CATCHER_2
};
const u16 gBattleFrontierTrainerMons_Luca[] =
{
- 343,
- 368,
- 369,
- 383,
- 417,
- 423,
- 424,
- 432,
- 480,
- 481,
- 490,
- 491,
- 494,
- 496,
- 512,
- 513,
- 519,
- 520,
- 528,
- 534,
- 537,
- 541,
- 549,
- -1
+ FRONTIER_MONS_BUG_CATCHER_2
};
const u16 gBattleFrontierTrainerMons_Jamison[] =
{
- 282,
- 331,
- 343,
- 368,
- 369,
- 469,
- 472,
- 475,
- 476,
- 478,
- 481,
- 484,
- 490,
- 491,
- 497,
- 500,
- 501,
- 509,
- 510,
- 513,
- 516,
- 517,
- 519,
- 520,
- 524,
- 528,
- 530,
- 533,
- 534,
- 537,
- 542,
- 553,
- -1
+ FRONTIER_MONS_NINJA_BOY_2
};
const u16 gBattleFrontierTrainerMons_Gunnar[] =
{
- 282,
- 331,
- 343,
- 368,
- 369,
- 469,
- 472,
- 475,
- 476,
- 478,
- 481,
- 484,
- 490,
- 491,
- 497,
- 500,
- 501,
- 509,
- 510,
- 513,
- 516,
- 517,
- 519,
- 520,
- 524,
- 528,
- 530,
- 533,
- 534,
- 537,
- 542,
- 553,
- -1
+ FRONTIER_MONS_NINJA_BOY_2
};
const u16 gBattleFrontierTrainerMons_Craig[] =
{
- 471,
- 474,
- 475,
- 479,
- 483,
- 485,
- 488,
- 493,
- 495,
- 496,
- 502,
- 504,
- 505,
- 506,
- 507,
- 514,
- 521,
- 525,
- 530,
- 532,
- 535,
- 538,
- 544,
- 545,
- 548,
- 552,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 563,
- -1
+ FRONTIER_MONS_TUBER_2
};
const u16 gBattleFrontierTrainerMons_Pierce[] =
{
- 471,
- 474,
- 475,
- 479,
- 483,
- 485,
- 488,
- 493,
- 495,
- 496,
- 502,
- 504,
- 505,
- 506,
- 507,
- 514,
- 521,
- 525,
- 530,
- 532,
- 535,
- 538,
- 544,
- 545,
- 548,
- 552,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 563,
- -1
+ FRONTIER_MONS_TUBER_2
};
const u16 gBattleFrontierTrainerMons_Regina[] =
{
- 471,
- 474,
- 475,
- 479,
- 483,
- 485,
- 488,
- 493,
- 495,
- 496,
- 502,
- 504,
- 505,
- 506,
- 507,
- 514,
- 521,
- 525,
- 530,
- 532,
- 535,
- 538,
- 544,
- 545,
- 548,
- 552,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 563,
- -1
+ FRONTIER_MONS_TUBER_2
};
const u16 gBattleFrontierTrainerMons_Alison[] =
{
- 471,
- 474,
- 475,
- 479,
- 483,
- 485,
- 488,
- 493,
- 495,
- 496,
- 502,
- 504,
- 505,
- 506,
- 507,
- 514,
- 521,
- 525,
- 530,
- 532,
- 535,
- 538,
- 544,
- 545,
- 548,
- 552,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 563,
- -1
+ FRONTIER_MONS_TUBER_2
};
const u16 gBattleFrontierTrainerMons_Hank[] =
{
- 277,
- 278,
- 282,
- 303,
- 331,
- 343,
- 368,
- 369,
- 383,
- 417,
- 423,
- 424,
- 432,
- 481,
- 513,
- 519,
- 520,
- 528,
- 575,
- 609,
- 615,
- 616,
- 624,
- -1
+ FRONTIER_MONS_BUG_MANIAC_3
};
const u16 gBattleFrontierTrainerMons_Earl[] =
{
- 277,
- 278,
- 282,
- 303,
- 331,
- 343,
- 368,
- 369,
- 383,
- 417,
- 423,
- 424,
- 432,
- 481,
- 513,
- 519,
- 520,
- 528,
- 575,
- 609,
- 615,
- 616,
- 624,
- -1
+ FRONTIER_MONS_BUG_MANIAC_3
};
const u16 gBattleFrontierTrainerMons_Ramiro[] =
{
- 316,
- 333,
- 347,
- 350,
- 354,
- 358,
- 361,
- 362,
- 363,
- 364,
- 573,
- 576,
- 621,
- 626,
- 631,
- -1
+ FRONTIER_MONS_FISHERMAN_2
};
const u16 gBattleFrontierTrainerMons_Hunter[] =
{
- 316,
- 333,
- 347,
- 350,
- 354,
- 358,
- 361,
- 362,
- 363,
- 364,
- 573,
- 576,
- 621,
- 626,
- 631,
- -1
+ FRONTIER_MONS_FISHERMAN_2
};
const u16 gBattleFrontierTrainerMons_Aiden[] =
{
- 564,
- 575,
- 576,
- 578,
- 579,
- 580,
- 594,
- 595,
- 605,
- 606,
- 608,
- 609,
- 615,
- 619,
- 620,
- 624,
- 625,
- 627,
- 632,
- 642,
- 650,
- 658,
- -1
+ FRONTIER_MONS_RUIN_MANIAC_3
};
const u16 gBattleFrontierTrainerMons_Xavier[] =
{
- 564,
- 575,
- 576,
- 578,
- 579,
- 580,
- 594,
- 595,
- 605,
- 606,
- 608,
- 609,
- 615,
- 619,
- 620,
- 624,
- 625,
- 627,
- 632,
- 642,
- 650,
- 658,
- -1
+ FRONTIER_MONS_RUIN_MANIAC_3
};
const u16 gBattleFrontierTrainerMons_Clinton[] =
{
- 564,
- 565,
- 566,
- 567,
- 568,
- 569,
- 570,
- 571,
- 572,
- 573,
- 574,
- 575,
- 576,
- 577,
- 578,
- 579,
- 580,
- 581,
- 582,
- 583,
- 584,
- 585,
- 586,
- 587,
- 588,
- 589,
- 590,
- 591,
- 592,
- 593,
- 594,
- 595,
- 596,
- 597,
- 598,
- 599,
- 600,
- 601,
- 602,
- 603,
- 604,
- 605,
- 606,
- 607,
- 608,
- 609,
- 610,
- 611,
- -1
+ FRONTIER_MONS_COLLECTOR_2
};
const u16 gBattleFrontierTrainerMons_Jesse[] =
{
- 564,
- 565,
- 566,
- 567,
- 568,
- 569,
- 570,
- 571,
- 572,
- 573,
- 574,
- 575,
- 576,
- 577,
- 578,
- 579,
- 580,
- 581,
- 582,
- 583,
- 584,
- 585,
- 586,
- 587,
- 588,
- 589,
- 590,
- 591,
- 592,
- 593,
- 594,
- 595,
- 596,
- 597,
- 598,
- 599,
- 600,
- 601,
- 602,
- 603,
- 604,
- 605,
- 606,
- 607,
- 608,
- 609,
- 610,
- 611,
- -1
+ FRONTIER_MONS_COLLECTOR_2
};
const u16 gBattleFrontierTrainerMons_Eduardo[] =
{
- 268,
- 307,
- 317,
- 349,
- 352,
- 573,
- 583,
- 585,
- 588,
- 590,
- 599,
- 614,
- 618,
- 635,
- 639,
- -1
+ FRONTIER_MONS_GUITARIST_2
};
const u16 gBattleFrontierTrainerMons_Hal[] =
{
- 268,
- 307,
- 317,
- 349,
- 352,
- 573,
- 583,
- 585,
- 588,
- 590,
- 599,
- 614,
- 618,
- 635,
- 639,
- -1
+ FRONTIER_MONS_GUITARIST_2
};
const u16 gBattleFrontierTrainerMons_Gage[] =
{
- 289,
- 318,
- 319,
- 329,
- 355,
- 375,
- 379,
- 385,
- 386,
- 457,
- 473,
- 477,
- 482,
- 484,
- 553,
- 567,
- 571,
- 577,
- 578,
- 649,
- -1
+ FRONTIER_MONS_BIRD_KEEPER_2
};
const u16 gBattleFrontierTrainerMons_Arnold[] =
{
- 289,
- 318,
- 319,
- 329,
- 355,
- 375,
- 379,
- 385,
- 386,
- 457,
- 473,
- 477,
- 482,
- 484,
- 553,
- 567,
- 571,
- 577,
- 578,
- 649,
- -1
+ FRONTIER_MONS_BIRD_KEEPER_2
};
const u16 gBattleFrontierTrainerMons_Jarrett[] =
{
- 565,
- 573,
- 576,
- 580,
- 582,
- 584,
- 592,
- 601,
- 602,
- 610,
- 621,
- 623,
- 626,
- 631,
- 634,
- 640,
- 641,
- 644,
- 648,
- 650,
- 651,
- 653,
- 655,
- -1
+ FRONTIER_MONS_SAILOR_2
};
const u16 gBattleFrontierTrainerMons_Garett[] =
{
- 565,
- 573,
- 576,
- 580,
- 582,
- 584,
- 592,
- 601,
- 602,
- 610,
- 621,
- 623,
- 626,
- 631,
- 634,
- 640,
- 641,
- 644,
- 648,
- 650,
- 651,
- 653,
- 655,
- -1
+ FRONTIER_MONS_SAILOR_2
};
const u16 gBattleFrontierTrainerMons_Emanuel[] =
{
- 564,
- 565,
- 574,
- 579,
- 582,
- 594,
- 595,
- 605,
- 606,
- 608,
- 609,
- 616,
- 619,
- 620,
- 623,
- 624,
- 625,
- 627,
- 642,
- 643,
- -1
+ FRONTIER_MONS_HIKER_2
};
const u16 gBattleFrontierTrainerMons_Gustavo[] =
{
- 564,
- 565,
- 574,
- 579,
- 582,
- 594,
- 595,
- 605,
- 606,
- 608,
- 609,
- 616,
- 619,
- 620,
- 623,
- 624,
- 625,
- 627,
- 642,
- 643,
- -1
+ FRONTIER_MONS_HIKER_2
};
const u16 gBattleFrontierTrainerMons_Kameron[] =
{
- 568,
- 581,
- 589,
- 598,
- 600,
- 603,
- 607,
- 611,
- 617,
- 618,
- 622,
- 636,
- 643,
- 646,
- 647,
- 652,
- 654,
- 656,
- 659,
- -1
+ FRONTIER_MONS_KINDLER_2
};
const u16 gBattleFrontierTrainerMons_Alfredo[] =
{
- 568,
- 581,
- 589,
- 598,
- 600,
- 603,
- 607,
- 611,
- 617,
- 618,
- 622,
- 636,
- 643,
- 646,
- 647,
- 652,
- 654,
- 656,
- 659,
- -1
+ FRONTIER_MONS_KINDLER_2
};
const u16 gBattleFrontierTrainerMons_Ruben[] =
{
- 612,
- 613,
- 614,
- 615,
- 616,
- 617,
- 618,
- 619,
- 620,
- 621,
- 622,
- 623,
- 624,
- 625,
- 626,
- 627,
- 628,
- 629,
- 630,
- 631,
- 632,
- 633,
- 634,
- 635,
- 636,
- 637,
- 638,
- 639,
- 640,
- 641,
- 642,
- 643,
- 644,
- 645,
- 646,
- 647,
- 648,
- 649,
- 650,
- 651,
- 652,
- 653,
- 654,
- 655,
- 656,
- 657,
- 658,
- 659,
- -1
+ FRONTIER_MONS_GENTLEMAN_2
};
const u16 gBattleFrontierTrainerMons_Lamar[] =
{
- 612,
- 613,
- 614,
- 615,
- 616,
- 617,
- 618,
- 619,
- 620,
- 621,
- 622,
- 623,
- 624,
- 625,
- 626,
- 627,
- 628,
- 629,
- 630,
- 631,
- 632,
- 633,
- 634,
- 635,
- 636,
- 637,
- 638,
- 639,
- 640,
- 641,
- 642,
- 643,
- 644,
- 645,
- 646,
- 647,
- 648,
- 649,
- 650,
- 651,
- 652,
- 653,
- 654,
- 655,
- 656,
- 657,
- 658,
- 659,
- -1
+ FRONTIER_MONS_GENTLEMAN_2
};
const u16 gBattleFrontierTrainerMons_Jaxon[] =
{
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_3
};
const u16 gBattleFrontierTrainerMons_Logan[] =
{
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_3
};
const u16 gBattleFrontierTrainerMons_Emilee[] =
{
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_3
};
const u16 gBattleFrontierTrainerMons_Josie[] =
{
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- -1
+ FRONTIER_MONS_YOUNGSTER_LASS_3
};
const u16 gBattleFrontierTrainerMons_Armando[] =
{
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_2
};
const u16 gBattleFrontierTrainerMons_Skyler[] =
{
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_2
};
const u16 gBattleFrontierTrainerMons_Ruth[] =
{
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_2
};
const u16 gBattleFrontierTrainerMons_Melody[] =
{
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- -1
+ FRONTIER_MONS_CAMPER_PICNICKER_2
};
const u16 gBattleFrontierTrainerMons_Pedro[] =
{
- 347,
- 661,
- 664,
- 669,
- 672,
- 676,
- 677,
- 678,
- 680,
- 685,
- 688,
- 694,
- 696,
- 697,
- 698,
- 699,
- 706,
- 713,
- 717,
- 719,
- 722,
- 724,
- 727,
- 730,
- 736,
- 737,
- 740,
- 744,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 755,
- -1
+ FRONTIER_MONS_SWIMMER_M_2
};
const u16 gBattleFrontierTrainerMons_Erick[] =
{
- 347,
- 661,
- 664,
- 669,
- 672,
- 676,
- 677,
- 678,
- 680,
- 685,
- 688,
- 694,
- 696,
- 697,
- 698,
- 699,
- 706,
- 713,
- 717,
- 719,
- 722,
- 724,
- 727,
- 730,
- 736,
- 737,
- 740,
- 744,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 755,
- -1
+ FRONTIER_MONS_SWIMMER_M_2
};
const u16 gBattleFrontierTrainerMons_Elaine[] =
{
- 664,
- 665,
- 669,
- 672,
- 676,
- 677,
- 680,
- 685,
- 687,
- 688,
- 694,
- 696,
- 697,
- 698,
- 699,
- 706,
- 713,
- 717,
- 722,
- 724,
- 727,
- 730,
- 736,
- 737,
- 740,
- 744,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 755,
- -1
+ FRONTIER_MONS_SWIMMER_F_2
};
const u16 gBattleFrontierTrainerMons_Joyce[] =
{
- 664,
- 665,
- 669,
- 672,
- 676,
- 677,
- 680,
- 685,
- 687,
- 688,
- 694,
- 696,
- 697,
- 698,
- 699,
- 706,
- 713,
- 717,
- 722,
- 724,
- 727,
- 730,
- 736,
- 737,
- 740,
- 744,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 755,
- -1
+ FRONTIER_MONS_SWIMMER_F_2
};
const u16 gBattleFrontierTrainerMons_Todd[] =
{
- 267,
- 273,
- 305,
- 312,
- 325,
- 332,
- 352,
- 662,
- 665,
- 668,
- 669,
- 670,
- 672,
- 673,
- 676,
- 677,
- 679,
- 680,
- 682,
- 688,
- 697,
- 698,
- 699,
- 700,
- 707,
- 710,
- 718,
- 720,
- 724,
- 725,
- 728,
- 730,
- 731,
- 732,
- 734,
- 735,
- 744,
- 748,
- 750,
- 751,
- -1
+ FRONTIER_MONS_POKEFAN_3
};
const u16 gBattleFrontierTrainerMons_Gavin[] =
{
- 267,
- 273,
- 305,
- 312,
- 325,
- 332,
- 352,
- 662,
- 665,
- 668,
- 669,
- 670,
- 672,
- 673,
- 676,
- 677,
- 679,
- 680,
- 682,
- 688,
- 697,
- 698,
- 699,
- 700,
- 707,
- 710,
- 718,
- 720,
- 724,
- 725,
- 728,
- 730,
- 731,
- 732,
- 734,
- 735,
- 744,
- 748,
- 750,
- 751,
- -1
+ FRONTIER_MONS_POKEFAN_3
};
const u16 gBattleFrontierTrainerMons_Malory[] =
{
- 267,
- 273,
- 305,
- 312,
- 325,
- 332,
- 352,
- 662,
- 665,
- 668,
- 669,
- 670,
- 672,
- 673,
- 676,
- 677,
- 679,
- 680,
- 682,
- 688,
- 697,
- 698,
- 699,
- 700,
- 707,
- 710,
- 718,
- 720,
- 724,
- 725,
- 728,
- 730,
- 731,
- 732,
- 734,
- 735,
- 744,
- 748,
- 750,
- 751,
- -1
+ FRONTIER_MONS_POKEFAN_3
};
const u16 gBattleFrontierTrainerMons_Esther[] =
{
- 267,
- 273,
- 305,
- 312,
- 325,
- 332,
- 352,
- 662,
- 665,
- 668,
- 669,
- 670,
- 672,
- 673,
- 676,
- 677,
- 679,
- 680,
- 682,
- 688,
- 697,
- 698,
- 699,
- 700,
- 707,
- 710,
- 718,
- 720,
- 724,
- 725,
- 728,
- 730,
- 731,
- 732,
- 734,
- 735,
- 744,
- 748,
- 750,
- 751,
- -1
+ FRONTIER_MONS_POKEFAN_3
};
const u16 gBattleFrontierTrainerMons_Oscar[] =
{
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_PKMN_BREEDER_2
};
const u16 gBattleFrontierTrainerMons_Wilson[] =
{
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_PKMN_BREEDER_2
};
const u16 gBattleFrontierTrainerMons_Clare[] =
{
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_PKMN_BREEDER_2
};
const u16 gBattleFrontierTrainerMons_Tess[] =
{
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_PKMN_BREEDER_2
};
const u16 gBattleFrontierTrainerMons_Leon[] =
{
- 420,
- 421,
- 422,
- 423,
- 424,
- 425,
- 426,
- 427,
- 428,
- 429,
- 430,
- 431,
- 432,
- 433,
- 434,
- 435,
- 436,
- 437,
- 438,
- 439,
- 440,
- 441,
- 442,
- 443,
- 516,
- 517,
- 518,
- 519,
- 520,
- 521,
- 522,
- 523,
- 524,
- 525,
- 526,
- 527,
- 528,
- 529,
- 530,
- 531,
- 532,
- 533,
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 612,
- 613,
- 614,
- 615,
- 616,
- 617,
- 618,
- 619,
- 620,
- 621,
- 622,
- 623,
- 624,
- 625,
- 626,
- 627,
- 628,
- 629,
- 630,
- 631,
- 632,
- 633,
- 634,
- 635,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- -1
+ FRONTIER_MONS_COOLTRAINER_M_2A
};
const u16 gBattleFrontierTrainerMons_Alonzo[] =
{
- 444,
- 445,
- 446,
- 447,
- 448,
- 449,
- 450,
- 451,
- 452,
- 453,
- 454,
- 455,
- 456,
- 457,
- 458,
- 459,
- 460,
- 461,
- 462,
- 463,
- 464,
- 465,
- 466,
- 467,
- 540,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562,
- 563,
- 636,
- 637,
- 638,
- 639,
- 640,
- 641,
- 642,
- 643,
- 644,
- 645,
- 646,
- 647,
- 648,
- 649,
- 650,
- 651,
- 652,
- 653,
- 654,
- 655,
- 656,
- 657,
- 658,
- 659,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_COOLTRAINER_M_2B
};
const u16 gBattleFrontierTrainerMons_Vince[] =
{
- 421,
- 425,
- 431,
- 437,
- 439,
- 456,
- 460,
- 465,
- 466,
- 517,
- 521,
- 527,
- 533,
- 535,
- 552,
- 556,
- 561,
- 562,
- 613,
- 617,
- 623,
- 629,
- 631,
- 648,
- 652,
- 657,
- 658,
- 709,
- 713,
- 719,
- 725,
- 727,
- 744,
- 748,
- 753,
- 754,
- 766,
- 777,
- 788,
- 799,
- 800,
- 801,
- 802,
- 803,
- 804,
- 805,
- 806,
- 807,
- 808,
- 809,
- 810,
- 811,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 820,
- 821,
- 822,
- 823,
- 824,
- 825,
- 826,
- 827,
- 828,
- 829,
- 830,
- 831,
- 832,
- 833,
- 834,
- 835,
- 846,
- 847,
- 848,
- 849,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_COOLTRAINER_2C(LATIOS)
};
const u16 gBattleFrontierTrainerMons_Bryon[] =
{
- 756,
- 757,
- 758,
- 759,
- 760,
- 761,
- 762,
- 763,
- 764,
- 766,
- 767,
- 768,
- 769,
- 770,
- 771,
- 772,
- 773,
- 774,
- 775,
- 777,
- 778,
- 779,
- 780,
- 781,
- 782,
- 783,
- 784,
- 785,
- 786,
- 788,
- 789,
- 790,
- 791,
- 792,
- 793,
- 794,
- 795,
- 796,
- 797,
- 799,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 846,
- 847,
- 848,
- 849,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- 870,
- 871,
- 872,
- 873,
- 874,
- 875,
- 876,
- 877,
- 878,
- 879,
- 880,
- 881,
- -1
+ FRONTIER_MONS_COOLTRAINER_2D(LATIOS)
};
const u16 gBattleFrontierTrainerMons_Ava[] =
{
- 372,
- 373,
- 374,
- 375,
- 376,
- 377,
- 378,
- 379,
- 380,
- 381,
- 382,
- 383,
- 384,
- 385,
- 386,
- 387,
- 388,
- 389,
- 390,
- 391,
- 392,
- 393,
- 394,
- 395,
- 468,
- 469,
- 470,
- 471,
- 472,
- 473,
- 474,
- 475,
- 476,
- 477,
- 478,
- 479,
- 480,
- 481,
- 482,
- 483,
- 484,
- 485,
- 486,
- 487,
- 488,
- 489,
- 490,
- 491,
- 564,
- 565,
- 566,
- 567,
- 568,
- 569,
- 570,
- 571,
- 572,
- 573,
- 574,
- 575,
- 576,
- 577,
- 578,
- 579,
- 580,
- 581,
- 582,
- 583,
- 584,
- 585,
- 586,
- 587,
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- -1
+ FRONTIER_MONS_COOLTRAINER_F_2A
};
const u16 gBattleFrontierTrainerMons_Miriam[] =
{
- 396,
- 397,
- 398,
- 399,
- 400,
- 401,
- 402,
- 403,
- 404,
- 405,
- 406,
- 407,
- 408,
- 409,
- 410,
- 411,
- 412,
- 413,
- 414,
- 415,
- 416,
- 417,
- 418,
- 419,
- 492,
- 493,
- 494,
- 495,
- 496,
- 497,
- 498,
- 499,
- 500,
- 501,
- 502,
- 503,
- 504,
- 505,
- 506,
- 507,
- 508,
- 509,
- 510,
- 511,
- 512,
- 513,
- 514,
- 515,
- 588,
- 589,
- 590,
- 591,
- 592,
- 593,
- 594,
- 595,
- 596,
- 597,
- 598,
- 599,
- 600,
- 601,
- 602,
- 603,
- 604,
- 605,
- 606,
- 607,
- 608,
- 609,
- 610,
- 611,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- -1
+ FRONTIER_MONS_COOLTRAINER_F_2B
};
const u16 gBattleFrontierTrainerMons_Carrie[] =
{
- 421,
- 425,
- 431,
- 437,
- 439,
- 456,
- 460,
- 465,
- 466,
- 517,
- 521,
- 527,
- 533,
- 535,
- 552,
- 556,
- 561,
- 562,
- 613,
- 617,
- 623,
- 629,
- 631,
- 648,
- 652,
- 657,
- 658,
- 709,
- 713,
- 719,
- 725,
- 727,
- 744,
- 748,
- 753,
- 754,
- 765,
- 776,
- 787,
- 798,
- 800,
- 801,
- 802,
- 803,
- 804,
- 805,
- 806,
- 807,
- 808,
- 809,
- 810,
- 811,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 820,
- 821,
- 822,
- 823,
- 824,
- 825,
- 826,
- 827,
- 828,
- 829,
- 830,
- 831,
- 832,
- 833,
- 834,
- 835,
- 842,
- 843,
- 844,
- 845,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_COOLTRAINER_2C(LATIAS)
};
const u16 gBattleFrontierTrainerMons_Gillian2[] =
{
- 756,
- 757,
- 758,
- 759,
- 760,
- 761,
- 762,
- 763,
- 764,
- 765,
- 767,
- 768,
- 769,
- 770,
- 771,
- 772,
- 773,
- 774,
- 775,
- 776,
- 778,
- 779,
- 780,
- 781,
- 782,
- 783,
- 784,
- 785,
- 786,
- 787,
- 789,
- 790,
- 791,
- 792,
- 793,
- 794,
- 795,
- 796,
- 797,
- 798,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 842,
- 843,
- 844,
- 845,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- 870,
- 871,
- 872,
- 873,
- 874,
- 875,
- 876,
- 877,
- 878,
- 879,
- 880,
- 881,
- -1
+ FRONTIER_MONS_COOLTRAINER_2D(LATIAS)
};
const u16 gBattleFrontierTrainerMons_Tyler[] =
{
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_GENERAL_A
};
const u16 gBattleFrontierTrainerMons_Chaz[] =
{
- 564,
- 565,
- 566,
- 567,
- 568,
- 569,
- 570,
- 571,
- 572,
- 573,
- 574,
- 575,
- 576,
- 577,
- 578,
- 579,
- 580,
- 581,
- 582,
- 583,
- 584,
- 585,
- 586,
- 587,
- 588,
- 589,
- 590,
- 591,
- 592,
- 593,
- 594,
- 595,
- 596,
- 597,
- 598,
- 599,
- 600,
- 601,
- 602,
- 603,
- 604,
- 605,
- 606,
- 607,
- 608,
- 609,
- 610,
- 611,
- 612,
- 613,
- 614,
- 615,
- 616,
- 617,
- 618,
- 619,
- 620,
- 621,
- 622,
- 623,
- 624,
- 625,
- 626,
- 627,
- 628,
- 629,
- 630,
- 631,
- 632,
- 633,
- 634,
- 635,
- 636,
- 637,
- 638,
- 639,
- 640,
- 641,
- 642,
- 643,
- 644,
- 645,
- 646,
- 647,
- 648,
- 649,
- 650,
- 651,
- 652,
- 653,
- 654,
- 655,
- 656,
- 657,
- 658,
- 659,
- -1
+ FRONTIER_MONS_GENERAL_B
};
const u16 gBattleFrontierTrainerMons_Nelson[] =
{
- 756,
- 757,
- 758,
- 759,
- 760,
- 761,
- 762,
- 763,
- 764,
- 766,
- 767,
- 768,
- 769,
- 770,
- 771,
- 772,
- 773,
- 774,
- 775,
- 777,
- 778,
- 779,
- 780,
- 781,
- 782,
- 783,
- 784,
- 785,
- 786,
- 788,
- 789,
- 790,
- 791,
- 792,
- 793,
- 794,
- 795,
- 796,
- 797,
- 799,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 846,
- 847,
- 848,
- 849,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- 870,
- 871,
- 872,
- 873,
- 874,
- 875,
- 876,
- 877,
- 878,
- 879,
- 880,
- 881,
- -1
+ FRONTIER_MONS_COOLTRAINER_2D(LATIOS)
};
const u16 gBattleFrontierTrainerMons_Shania[] =
{
- 468,
- 469,
- 470,
- 471,
- 472,
- 473,
- 474,
- 475,
- 476,
- 477,
- 478,
- 479,
- 480,
- 481,
- 482,
- 483,
- 484,
- 485,
- 486,
- 487,
- 488,
- 489,
- 490,
- 491,
- 492,
- 493,
- 494,
- 495,
- 496,
- 497,
- 498,
- 499,
- 500,
- 501,
- 502,
- 503,
- 504,
- 505,
- 506,
- 507,
- 508,
- 509,
- 510,
- 511,
- 512,
- 513,
- 514,
- 515,
- 516,
- 517,
- 518,
- 519,
- 520,
- 521,
- 522,
- 523,
- 524,
- 525,
- 526,
- 527,
- 528,
- 529,
- 530,
- 531,
- 532,
- 533,
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 540,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562,
- 563,
- -1
+ FRONTIER_MONS_GENERAL_C
};
const u16 gBattleFrontierTrainerMons_Stella[] =
{
- 372,
- 373,
- 374,
- 375,
- 376,
- 377,
- 378,
- 379,
- 380,
- 381,
- 382,
- 383,
- 384,
- 385,
- 386,
- 387,
- 388,
- 389,
- 390,
- 391,
- 392,
- 393,
- 394,
- 395,
- 396,
- 397,
- 398,
- 399,
- 400,
- 401,
- 402,
- 403,
- 404,
- 405,
- 406,
- 407,
- 408,
- 409,
- 410,
- 411,
- 412,
- 413,
- 414,
- 415,
- 416,
- 417,
- 418,
- 419,
- 420,
- 421,
- 422,
- 423,
- 424,
- 425,
- 426,
- 427,
- 428,
- 429,
- 430,
- 431,
- 432,
- 433,
- 434,
- 435,
- 436,
- 437,
- 438,
- 439,
- 440,
- 441,
- 442,
- 443,
- 444,
- 445,
- 446,
- 447,
- 448,
- 449,
- 450,
- 451,
- 452,
- 453,
- 454,
- 455,
- 456,
- 457,
- 458,
- 459,
- 460,
- 461,
- 462,
- 463,
- 464,
- 465,
- 466,
- 467,
- -1
+ FRONTIER_MONS_GENERAL_D
};
const u16 gBattleFrontierTrainerMons_Dorine[] =
{
- 756,
- 757,
- 758,
- 759,
- 760,
- 761,
- 762,
- 763,
- 764,
- 765,
- 767,
- 768,
- 769,
- 770,
- 771,
- 772,
- 773,
- 774,
- 775,
- 776,
- 778,
- 779,
- 780,
- 781,
- 782,
- 783,
- 784,
- 785,
- 786,
- 787,
- 789,
- 790,
- 791,
- 792,
- 793,
- 794,
- 795,
- 796,
- 797,
- 798,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 842,
- 843,
- 844,
- 845,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- 870,
- 871,
- 872,
- 873,
- 874,
- 875,
- 876,
- 877,
- 878,
- 879,
- 880,
- 881,
- -1
+ FRONTIER_MONS_COOLTRAINER_2D(LATIAS)
};
const u16 gBattleFrontierTrainerMons_Maddox[] =
{
- 403,
- 412,
- 413,
- 414,
- 433,
- 435,
- 440,
- 450,
- 454,
- 456,
- 459,
- 461,
- 463,
- 465,
- 499,
- 508,
- 509,
- 510,
- 529,
- 531,
- 536,
- 546,
- 550,
- 552,
- 555,
- 557,
- 559,
- 561,
- 595,
- 604,
- 605,
- 606,
- 625,
- 627,
- 632,
- 642,
- 646,
- 648,
- 651,
- 653,
- 655,
- 657,
- 691,
- 700,
- 701,
- 702,
- 721,
- 723,
- 728,
- 738,
- 742,
- 744,
- 747,
- 749,
- 751,
- 753,
- 765,
- 766,
- 776,
- 777,
- 787,
- 788,
- 798,
- 799,
- 828,
- 829,
- 830,
- 831,
- 842,
- 843,
- 844,
- 845,
- 846,
- 847,
- 848,
- 849,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_DRAGON_TAMER_2
};
const u16 gBattleFrontierTrainerMons_Davin[] =
{
- 403,
- 412,
- 413,
- 414,
- 433,
- 435,
- 440,
- 450,
- 454,
- 456,
- 459,
- 461,
- 463,
- 465,
- 499,
- 508,
- 509,
- 510,
- 529,
- 531,
- 536,
- 546,
- 550,
- 552,
- 555,
- 557,
- 559,
- 561,
- 595,
- 604,
- 605,
- 606,
- 625,
- 627,
- 632,
- 642,
- 646,
- 648,
- 651,
- 653,
- 655,
- 657,
- 691,
- 700,
- 701,
- 702,
- 721,
- 723,
- 728,
- 738,
- 742,
- 744,
- 747,
- 749,
- 751,
- 753,
- 765,
- 766,
- 776,
- 777,
- 787,
- 788,
- 798,
- 799,
- 828,
- 829,
- 830,
- 831,
- 842,
- 843,
- 844,
- 845,
- 846,
- 847,
- 848,
- 849,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_DRAGON_TAMER_2
};
const u16 gBattleFrontierTrainerMons_Trevon[] =
{
- 403,
- 412,
- 413,
- 414,
- 433,
- 435,
- 440,
- 450,
- 454,
- 456,
- 459,
- 461,
- 463,
- 465,
- 499,
- 508,
- 509,
- 510,
- 529,
- 531,
- 536,
- 546,
- 550,
- 552,
- 555,
- 557,
- 559,
- 561,
- 595,
- 604,
- 605,
- 606,
- 625,
- 627,
- 632,
- 642,
- 646,
- 648,
- 651,
- 653,
- 655,
- 657,
- 691,
- 700,
- 701,
- 702,
- 721,
- 723,
- 728,
- 738,
- 742,
- 744,
- 747,
- 749,
- 751,
- 753,
- 765,
- 766,
- 776,
- 777,
- 787,
- 788,
- 798,
- 799,
- 828,
- 829,
- 830,
- 831,
- 842,
- 843,
- 844,
- 845,
- 846,
- 847,
- 848,
- 849,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_DRAGON_TAMER_2
};
const u16 gBattleFrontierTrainerMons_Mateo[] =
{
- 373,
- 382,
- 390,
- 402,
- 403,
- 416,
- 417,
- 424,
- 431,
- 432,
- 435,
- 450,
- 451,
- 469,
- 480,
- 486,
- 498,
- 499,
- 512,
- 513,
- 520,
- 527,
- 528,
- 531,
- 546,
- 547,
- 565,
- 574,
- 582,
- 594,
- 595,
- 608,
- 609,
- 616,
- 623,
- 624,
- 627,
- 642,
- 643,
- 661,
- 670,
- 678,
- 690,
- 691,
- 704,
- 705,
- 712,
- 719,
- 720,
- 723,
- 738,
- 739,
- 808,
- 809,
- 810,
- 811,
- -1
+ FRONTIER_MONS_BLACK_BELT_2A
};
const u16 gBattleFrontierTrainerMons_Bret[] =
{
- 373,
- 382,
- 390,
- 415,
- 419,
- 424,
- 426,
- 430,
- 431,
- 444,
- 451,
- 454,
- 455,
- 464,
- 469,
- 480,
- 486,
- 511,
- 515,
- 520,
- 522,
- 526,
- 527,
- 540,
- 547,
- 550,
- 551,
- 560,
- 565,
- 574,
- 582,
- 607,
- 611,
- 616,
- 618,
- 622,
- 623,
- 636,
- 643,
- 646,
- 647,
- 656,
- 661,
- 670,
- 678,
- 703,
- 707,
- 712,
- 714,
- 718,
- 719,
- 732,
- 739,
- 742,
- 743,
- 752,
- 808,
- 809,
- 810,
- 811,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B
};
const u16 gBattleFrontierTrainerMons_Raul[] =
{
- 373,
- 382,
- 383,
- 386,
- 390,
- 423,
- 424,
- 431,
- 433,
- 450,
- 451,
- 466,
- 469,
- 480,
- 481,
- 482,
- 486,
- 519,
- 520,
- 527,
- 529,
- 546,
- 547,
- 562,
- 565,
- 574,
- 575,
- 578,
- 582,
- 615,
- 616,
- 623,
- 625,
- 642,
- 643,
- 658,
- 661,
- 670,
- 671,
- 674,
- 678,
- 711,
- 712,
- 719,
- 721,
- 738,
- 739,
- 754,
- 808,
- 809,
- 810,
- 811,
- 832,
- 833,
- 834,
- 835,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C
};
const u16 gBattleFrontierTrainerMons_Kay[] =
{
- 373,
- 382,
- 387,
- 390,
- 402,
- 403,
- 413,
- 414,
- 424,
- 427,
- 431,
- 433,
- 451,
- 469,
- 470,
- 480,
- 486,
- 498,
- 499,
- 509,
- 510,
- 520,
- 523,
- 527,
- 529,
- 547,
- 565,
- 574,
- 579,
- 582,
- 594,
- 595,
- 605,
- 606,
- 616,
- 619,
- 623,
- 625,
- 643,
- 661,
- 670,
- 675,
- 678,
- 690,
- 691,
- 701,
- 702,
- 712,
- 715,
- 719,
- 721,
- 739,
- 808,
- 809,
- 810,
- 811,
- -1
+ FRONTIER_MONS_BATTLE_GIRL_2A
};
const u16 gBattleFrontierTrainerMons_Elena[] =
{
- 373,
- 382,
- 390,
- 415,
- 419,
- 424,
- 426,
- 430,
- 431,
- 444,
- 451,
- 454,
- 455,
- 464,
- 469,
- 480,
- 486,
- 511,
- 515,
- 520,
- 522,
- 526,
- 527,
- 540,
- 547,
- 550,
- 551,
- 560,
- 565,
- 574,
- 582,
- 607,
- 611,
- 616,
- 618,
- 622,
- 623,
- 636,
- 643,
- 646,
- 647,
- 656,
- 661,
- 670,
- 678,
- 703,
- 707,
- 712,
- 714,
- 718,
- 719,
- 732,
- 739,
- 742,
- 743,
- 752,
- 808,
- 809,
- 810,
- 811,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2B
};
const u16 gBattleFrontierTrainerMons_Alana[] =
{
- 373,
- 382,
- 383,
- 386,
- 390,
- 423,
- 424,
- 431,
- 433,
- 450,
- 451,
- 466,
- 469,
- 480,
- 481,
- 482,
- 486,
- 519,
- 520,
- 527,
- 529,
- 546,
- 547,
- 562,
- 565,
- 574,
- 575,
- 578,
- 582,
- 615,
- 616,
- 623,
- 625,
- 642,
- 643,
- 658,
- 661,
- 670,
- 671,
- 674,
- 678,
- 711,
- 712,
- 719,
- 721,
- 738,
- 739,
- 754,
- 808,
- 809,
- 810,
- 811,
- 832,
- 833,
- 834,
- 835,
- -1
+ FRONTIER_MONS_BLACK_BELT_BATTLE_GIRL_2C
};
const u16 gBattleFrontierTrainerMons_Alexas[] =
{
- 382,
- 387,
- 403,
- 423,
- 424,
- 425,
- 431,
- 433,
- 435,
- 450,
- 459,
- 461,
- 465,
- 466,
- 470,
- 480,
- 499,
- 519,
- 520,
- 521,
- 527,
- 529,
- 531,
- 546,
- 555,
- 557,
- 561,
- 562,
- 574,
- 579,
- 595,
- 615,
- 616,
- 617,
- 623,
- 625,
- 627,
- 642,
- 651,
- 653,
- 657,
- 658,
- 670,
- 675,
- 691,
- 711,
- 712,
- 713,
- 719,
- 721,
- 723,
- 738,
- 747,
- 749,
- 753,
- 754,
- 762,
- 763,
- 764,
- 773,
- 774,
- 775,
- 784,
- 785,
- 786,
- 795,
- 796,
- 797,
- 804,
- 805,
- 806,
- 807,
- 808,
- 809,
- 810,
- 811,
- 828,
- 829,
- 830,
- 831,
- 832,
- 833,
- 834,
- 835,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_EXPERT_2A(TYRANITAR)
};
const u16 gBattleFrontierTrainerMons_Weston[] =
{
- 374,
- 377,
- 404,
- 421,
- 422,
- 426,
- 437,
- 439,
- 446,
- 451,
- 453,
- 457,
- 458,
- 472,
- 475,
- 500,
- 517,
- 518,
- 522,
- 533,
- 535,
- 542,
- 547,
- 549,
- 553,
- 554,
- 566,
- 569,
- 596,
- 613,
- 614,
- 618,
- 629,
- 631,
- 638,
- 643,
- 645,
- 649,
- 650,
- 662,
- 665,
- 692,
- 709,
- 710,
- 714,
- 725,
- 727,
- 734,
- 739,
- 741,
- 745,
- 746,
- 762,
- 763,
- 764,
- 766,
- 773,
- 774,
- 775,
- 777,
- 784,
- 785,
- 786,
- 788,
- 795,
- 796,
- 797,
- 799,
- 800,
- 801,
- 802,
- 803,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 846,
- 847,
- 848,
- 849,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_EXPERT_2B(LATIOS)
};
const u16 gBattleFrontierTrainerMons_Jasper[] =
{
- 378,
- 388,
- 400,
- 409,
- 410,
- 411,
- 416,
- 429,
- 432,
- 438,
- 447,
- 452,
- 456,
- 460,
- 462,
- 463,
- 471,
- 476,
- 496,
- 505,
- 506,
- 507,
- 512,
- 525,
- 528,
- 534,
- 543,
- 548,
- 552,
- 556,
- 558,
- 559,
- 570,
- 580,
- 592,
- 601,
- 602,
- 603,
- 608,
- 621,
- 624,
- 630,
- 639,
- 644,
- 648,
- 652,
- 654,
- 655,
- 666,
- 676,
- 688,
- 697,
- 698,
- 699,
- 704,
- 717,
- 720,
- 726,
- 735,
- 740,
- 744,
- 748,
- 750,
- 751,
- 762,
- 763,
- 764,
- 773,
- 774,
- 775,
- 784,
- 785,
- 786,
- 795,
- 796,
- 797,
- 820,
- 821,
- 822,
- 823,
- 824,
- 825,
- 826,
- 827,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_EXPERT_2C(TYRANITAR)
};
const u16 gBattleFrontierTrainerMons_Nadia[] =
{
- 382,
- 387,
- 403,
- 423,
- 424,
- 425,
- 431,
- 433,
- 435,
- 450,
- 459,
- 461,
- 465,
- 466,
- 470,
- 480,
- 499,
- 519,
- 520,
- 521,
- 527,
- 529,
- 531,
- 546,
- 555,
- 557,
- 561,
- 562,
- 574,
- 579,
- 595,
- 615,
- 616,
- 617,
- 623,
- 625,
- 627,
- 642,
- 651,
- 653,
- 657,
- 658,
- 670,
- 675,
- 691,
- 711,
- 712,
- 713,
- 719,
- 721,
- 723,
- 738,
- 747,
- 749,
- 753,
- 754,
- 762,
- 763,
- 764,
- 773,
- 774,
- 775,
- 784,
- 785,
- 786,
- 795,
- 796,
- 797,
- 804,
- 805,
- 806,
- 807,
- 808,
- 809,
- 810,
- 811,
- 828,
- 829,
- 830,
- 831,
- 832,
- 833,
- 834,
- 835,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- -1
+ FRONTIER_MONS_EXPERT_2A(DRAGONITE)
};
const u16 gBattleFrontierTrainerMons_Miranda[] =
{
- 374,
- 377,
- 404,
- 421,
- 422,
- 426,
- 437,
- 439,
- 446,
- 451,
- 453,
- 457,
- 458,
- 472,
- 475,
- 500,
- 517,
- 518,
- 522,
- 533,
- 535,
- 542,
- 547,
- 549,
- 553,
- 554,
- 566,
- 569,
- 596,
- 613,
- 614,
- 618,
- 629,
- 631,
- 638,
- 643,
- 645,
- 649,
- 650,
- 662,
- 665,
- 692,
- 709,
- 710,
- 714,
- 725,
- 727,
- 734,
- 739,
- 741,
- 745,
- 746,
- 762,
- 763,
- 764,
- 765,
- 773,
- 774,
- 775,
- 776,
- 784,
- 785,
- 786,
- 787,
- 795,
- 796,
- 797,
- 798,
- 800,
- 801,
- 802,
- 803,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 842,
- 843,
- 844,
- 845,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_EXPERT_2B(LATIAS)
};
const u16 gBattleFrontierTrainerMons_Emma[] =
{
- 378,
- 388,
- 400,
- 409,
- 410,
- 411,
- 416,
- 429,
- 432,
- 438,
- 447,
- 452,
- 456,
- 460,
- 462,
- 463,
- 471,
- 476,
- 496,
- 505,
- 506,
- 507,
- 512,
- 525,
- 528,
- 534,
- 543,
- 548,
- 552,
- 556,
- 558,
- 559,
- 570,
- 580,
- 592,
- 601,
- 602,
- 603,
- 608,
- 621,
- 624,
- 630,
- 639,
- 644,
- 648,
- 652,
- 654,
- 655,
- 666,
- 676,
- 688,
- 697,
- 698,
- 699,
- 704,
- 717,
- 720,
- 726,
- 735,
- 740,
- 744,
- 748,
- 750,
- 751,
- 762,
- 763,
- 764,
- 773,
- 774,
- 775,
- 784,
- 785,
- 786,
- 795,
- 796,
- 797,
- 820,
- 821,
- 822,
- 823,
- 824,
- 825,
- 826,
- 827,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- -1
+ FRONTIER_MONS_EXPERT_2C(DRAGONITE)
};
const u16 gBattleFrontierTrainerMons_Rolando[] =
{
- 185,
- 290,
- 377,
- 380,
- 385,
- 401,
- 404,
- 409,
- 410,
- 428,
- 437,
- 438,
- 439,
- 446,
- 466,
- 475,
- 478,
- 484,
- 497,
- 500,
- 505,
- 506,
- 524,
- 533,
- 534,
- 535,
- 542,
- 562,
- 569,
- 572,
- 577,
- 593,
- 596,
- 601,
- 602,
- 620,
- 629,
- 630,
- 631,
- 638,
- 658,
- 665,
- 668,
- 673,
- 689,
- 692,
- 697,
- 698,
- 716,
- 725,
- 726,
- 727,
- 734,
- 754,
- 756,
- 757,
- 758,
- 766,
- 767,
- 768,
- 769,
- 777,
- 778,
- 779,
- 780,
- 788,
- 789,
- 790,
- 791,
- 799,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 832,
- 833,
- 834,
- 835,
- 846,
- 847,
- 848,
- 849,
- 870,
- 871,
- 872,
- 873,
- 874,
- 875,
- -1
+ FRONTIER_MONS_PSYCHIC_2A(LATIOS)
};
const u16 gBattleFrontierTrainerMons_Stanly[] =
{
- 185,
- 290,
- 377,
- 380,
- 385,
- 401,
- 404,
- 409,
- 410,
- 428,
- 437,
- 438,
- 439,
- 446,
- 466,
- 475,
- 478,
- 484,
- 497,
- 500,
- 505,
- 506,
- 524,
- 533,
- 534,
- 535,
- 542,
- 562,
- 569,
- 572,
- 577,
- 593,
- 596,
- 601,
- 602,
- 620,
- 629,
- 630,
- 631,
- 638,
- 658,
- 665,
- 668,
- 673,
- 689,
- 692,
- 697,
- 698,
- 716,
- 725,
- 726,
- 727,
- 734,
- 754,
- 759,
- 760,
- 761,
- 766,
- 770,
- 771,
- 772,
- 777,
- 781,
- 782,
- 783,
- 788,
- 792,
- 793,
- 794,
- 799,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 832,
- 833,
- 834,
- 835,
- 846,
- 847,
- 848,
- 849,
- 876,
- 877,
- 878,
- 879,
- 880,
- 881,
- -1
+ FRONTIER_MONS_PSYCHIC_2B(LATIOS)
};
const u16 gBattleFrontierTrainerMons_Dario[] =
{
- 185,
- 290,
- 377,
- 380,
- 385,
- 401,
- 404,
- 409,
- 410,
- 428,
- 437,
- 438,
- 439,
- 446,
- 466,
- 475,
- 478,
- 484,
- 497,
- 500,
- 505,
- 506,
- 524,
- 533,
- 534,
- 535,
- 542,
- 562,
- 569,
- 572,
- 577,
- 593,
- 596,
- 601,
- 602,
- 620,
- 629,
- 630,
- 631,
- 638,
- 658,
- 665,
- 668,
- 673,
- 689,
- 692,
- 697,
- 698,
- 716,
- 725,
- 726,
- 727,
- 734,
- 754,
- 762,
- 763,
- 764,
- 766,
- 773,
- 774,
- 775,
- 777,
- 784,
- 785,
- 786,
- 788,
- 795,
- 796,
- 797,
- 799,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 832,
- 833,
- 834,
- 835,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 846,
- 847,
- 848,
- 849,
- -1
+ FRONTIER_MONS_PSYCHIC_2C(LATIOS)
};
const u16 gBattleFrontierTrainerMons_Karlee[] =
{
- 185,
- 290,
- 377,
- 380,
- 385,
- 401,
- 404,
- 409,
- 410,
- 428,
- 437,
- 438,
- 439,
- 446,
- 466,
- 475,
- 478,
- 484,
- 497,
- 500,
- 505,
- 506,
- 524,
- 533,
- 534,
- 535,
- 542,
- 562,
- 569,
- 572,
- 577,
- 593,
- 596,
- 601,
- 602,
- 620,
- 629,
- 630,
- 631,
- 638,
- 658,
- 665,
- 668,
- 673,
- 689,
- 692,
- 697,
- 698,
- 716,
- 725,
- 726,
- 727,
- 734,
- 754,
- 756,
- 757,
- 758,
- 765,
- 767,
- 768,
- 769,
- 776,
- 778,
- 779,
- 780,
- 787,
- 789,
- 790,
- 791,
- 798,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 832,
- 833,
- 834,
- 835,
- 842,
- 843,
- 844,
- 845,
- 870,
- 871,
- 872,
- 873,
- 874,
- 875,
- -1
+ FRONTIER_MONS_PSYCHIC_2A(LATIAS)
};
const u16 gBattleFrontierTrainerMons_Jaylin[] =
{
- 185,
- 290,
- 377,
- 380,
- 385,
- 401,
- 404,
- 409,
- 410,
- 428,
- 437,
- 438,
- 439,
- 446,
- 466,
- 475,
- 478,
- 484,
- 497,
- 500,
- 505,
- 506,
- 524,
- 533,
- 534,
- 535,
- 542,
- 562,
- 569,
- 572,
- 577,
- 593,
- 596,
- 601,
- 602,
- 620,
- 629,
- 630,
- 631,
- 638,
- 658,
- 665,
- 668,
- 673,
- 689,
- 692,
- 697,
- 698,
- 716,
- 725,
- 726,
- 727,
- 734,
- 754,
- 759,
- 760,
- 761,
- 765,
- 770,
- 771,
- 772,
- 776,
- 781,
- 782,
- 783,
- 787,
- 792,
- 793,
- 794,
- 798,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 832,
- 833,
- 834,
- 835,
- 842,
- 843,
- 844,
- 845,
- 876,
- 877,
- 878,
- 879,
- 880,
- 881,
- -1
+ FRONTIER_MONS_PSYCHIC_2B(LATIAS)
};
const u16 gBattleFrontierTrainerMons_Ingrid[] =
{
- 185,
- 290,
- 377,
- 380,
- 385,
- 401,
- 404,
- 409,
- 410,
- 428,
- 437,
- 438,
- 439,
- 446,
- 466,
- 475,
- 478,
- 484,
- 497,
- 500,
- 505,
- 506,
- 524,
- 533,
- 534,
- 535,
- 542,
- 562,
- 569,
- 572,
- 577,
- 593,
- 596,
- 601,
- 602,
- 620,
- 629,
- 630,
- 631,
- 638,
- 658,
- 665,
- 668,
- 673,
- 689,
- 692,
- 697,
- 698,
- 716,
- 725,
- 726,
- 727,
- 734,
- 754,
- 762,
- 763,
- 764,
- 765,
- 773,
- 774,
- 775,
- 776,
- 784,
- 785,
- 786,
- 787,
- 795,
- 796,
- 797,
- 798,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 832,
- 833,
- 834,
- 835,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 842,
- 843,
- 844,
- 845,
- -1
+ FRONTIER_MONS_PSYCHIC_2C(LATIAS)
};
const u16 gBattleFrontierTrainerMons_Delilah[] =
{
- 347,
- 352,
- 374,
- 378,
- 398,
- 421,
- 426,
- 447,
- 472,
- 476,
- 494,
- 517,
- 522,
- 543,
- 566,
- 570,
- 590,
- 613,
- 618,
- 639,
- 662,
- 666,
- 686,
- 709,
- 714,
- 735,
- 800,
- 801,
- 802,
- 803,
- -1
+ FRONTIER_MONS_HEX_MANIAC_2A
};
const u16 gBattleFrontierTrainerMons_Carly[] =
{
- 344,
- 374,
- 378,
- 394,
- 395,
- 405,
- 413,
- 414,
- 420,
- 421,
- 434,
- 441,
- 457,
- 472,
- 476,
- 490,
- 491,
- 501,
- 509,
- 510,
- 516,
- 517,
- 530,
- 537,
- 553,
- 566,
- 570,
- 586,
- 587,
- 597,
- 605,
- 606,
- 612,
- 613,
- 626,
- 633,
- 649,
- 662,
- 666,
- 682,
- 683,
- 693,
- 701,
- 702,
- 708,
- 709,
- 722,
- 729,
- 745,
- 800,
- 801,
- 802,
- 803,
- -1
+ FRONTIER_MONS_HEX_MANIAC_2B
};
const u16 gBattleFrontierTrainerMons_Lexie[] =
{
- 344,
- 347,
- 352,
- 394,
- 395,
- 398,
- 405,
- 413,
- 414,
- 420,
- 421,
- 426,
- 434,
- 441,
- 447,
- 457,
- 490,
- 491,
- 494,
- 501,
- 509,
- 510,
- 516,
- 517,
- 522,
- 530,
- 537,
- 543,
- 553,
- 586,
- 587,
- 590,
- 597,
- 605,
- 606,
- 612,
- 613,
- 618,
- 626,
- 633,
- 639,
- 649,
- 682,
- 683,
- 686,
- 693,
- 701,
- 702,
- 708,
- 709,
- 714,
- 722,
- 729,
- 735,
- 745,
- 800,
- 801,
- 802,
- 803,
- -1
+ FRONTIER_MONS_HEX_MANIAC_2C
};
const u16 gBattleFrontierTrainerMons_Miller[] =
{
- 345,
- 376,
- 386,
- 387,
- 397,
- 399,
- 402,
- 403,
- 406,
- 408,
- 411,
- 413,
- 414,
- 425,
- 427,
- 429,
- 433,
- 435,
- 440,
- 441,
- 445,
- 448,
- 449,
- 450,
- 452,
- 454,
- 456,
- 458,
- 459,
- 460,
- 462,
- 465,
- 466,
- 467,
- 470,
- 474,
- 482,
- 493,
- 495,
- 498,
- 499,
- 502,
- 504,
- 507,
- 509,
- 510,
- 521,
- 523,
- 525,
- 529,
- 531,
- 536,
- 537,
- 541,
- 544,
- 545,
- 546,
- 548,
- 550,
- 552,
- 554,
- 555,
- 556,
- 558,
- 561,
- 562,
- 563,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_POKEMANIAC_2A
};
const u16 gBattleFrontierTrainerMons_Marv[] =
{
- 345,
- 568,
- 578,
- 579,
- 589,
- 591,
- 594,
- 595,
- 598,
- 600,
- 603,
- 605,
- 606,
- 617,
- 619,
- 621,
- 625,
- 627,
- 632,
- 633,
- 637,
- 640,
- 641,
- 642,
- 644,
- 646,
- 648,
- 650,
- 651,
- 652,
- 654,
- 657,
- 658,
- 659,
- 664,
- 674,
- 675,
- 685,
- 687,
- 690,
- 691,
- 694,
- 696,
- 699,
- 701,
- 702,
- 713,
- 715,
- 717,
- 721,
- 723,
- 728,
- 729,
- 733,
- 736,
- 737,
- 738,
- 740,
- 742,
- 744,
- 746,
- 747,
- 748,
- 750,
- 753,
- 754,
- 755,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_POKEMANIAC_2B
};
const u16 gBattleFrontierTrainerMons_Layton[] =
{
- 345,
- 425,
- 433,
- 435,
- 445,
- 450,
- 454,
- 456,
- 458,
- 459,
- 460,
- 465,
- 466,
- 521,
- 529,
- 531,
- 541,
- 546,
- 550,
- 552,
- 554,
- 555,
- 556,
- 561,
- 562,
- 617,
- 625,
- 627,
- 637,
- 642,
- 646,
- 648,
- 650,
- 651,
- 652,
- 657,
- 658,
- 713,
- 721,
- 723,
- 733,
- 738,
- 742,
- 744,
- 746,
- 747,
- 748,
- 753,
- 754,
- 804,
- 805,
- 806,
- 807,
- 820,
- 821,
- 822,
- 823,
- 824,
- 825,
- 826,
- 827,
- 828,
- 829,
- 830,
- 831,
- 832,
- 833,
- 834,
- 835,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_POKEMANIAC_2C
};
const u16 gBattleFrontierTrainerMons_Brooks[] =
{
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_GENERAL_A
};
const u16 gBattleFrontierTrainerMons_Gregory[] =
{
- 421,
- 425,
- 431,
- 437,
- 439,
- 456,
- 460,
- 465,
- 466,
- 517,
- 521,
- 527,
- 533,
- 535,
- 552,
- 556,
- 561,
- 562,
- 613,
- 617,
- 623,
- 629,
- 631,
- 648,
- 652,
- 657,
- 658,
- 709,
- 713,
- 719,
- 725,
- 727,
- 744,
- 748,
- 753,
- 754,
- 765,
- 766,
- 776,
- 777,
- 787,
- 788,
- 798,
- 799,
- 800,
- 801,
- 802,
- 803,
- 804,
- 805,
- 806,
- 807,
- 808,
- 809,
- 810,
- 811,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- 820,
- 821,
- 822,
- 823,
- 824,
- 825,
- 826,
- 827,
- 828,
- 829,
- 830,
- 831,
- 832,
- 833,
- 834,
- 835,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_GENTLEMAN_3A
};
const u16 gBattleFrontierTrainerMons_Reese[] =
{
- 756,
- 757,
- 758,
- 759,
- 760,
- 761,
- 762,
- 763,
- 764,
- 765,
- 766,
- 767,
- 768,
- 769,
- 770,
- 771,
- 772,
- 773,
- 774,
- 775,
- 776,
- 777,
- 778,
- 779,
- 780,
- 781,
- 782,
- 783,
- 784,
- 785,
- 786,
- 787,
- 788,
- 789,
- 790,
- 791,
- 792,
- 793,
- 794,
- 795,
- 796,
- 797,
- 798,
- 799,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- 842,
- 843,
- 844,
- 845,
- 846,
- 847,
- 848,
- 849,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- 870,
- 871,
- 872,
- 873,
- 874,
- 875,
- 876,
- 877,
- 878,
- 879,
- 880,
- 881,
- -1
+ FRONTIER_MONS_GENTLEMAN_3B
};
const u16 gBattleFrontierTrainerMons_Mason[] =
{
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_GENERAL_A
};
const u16 gBattleFrontierTrainerMons_Toby[] =
{
- 564,
- 565,
- 566,
- 567,
- 568,
- 569,
- 570,
- 571,
- 572,
- 573,
- 574,
- 575,
- 576,
- 577,
- 578,
- 579,
- 580,
- 581,
- 582,
- 583,
- 584,
- 585,
- 586,
- 587,
- 588,
- 589,
- 590,
- 591,
- 592,
- 593,
- 594,
- 595,
- 596,
- 597,
- 598,
- 599,
- 600,
- 601,
- 602,
- 603,
- 604,
- 605,
- 606,
- 607,
- 608,
- 609,
- 610,
- 611,
- 612,
- 613,
- 614,
- 615,
- 616,
- 617,
- 618,
- 619,
- 620,
- 621,
- 622,
- 623,
- 624,
- 625,
- 626,
- 627,
- 628,
- 629,
- 630,
- 631,
- 632,
- 633,
- 634,
- 635,
- 636,
- 637,
- 638,
- 639,
- 640,
- 641,
- 642,
- 643,
- 644,
- 645,
- 646,
- 647,
- 648,
- 649,
- 650,
- 651,
- 652,
- 653,
- 654,
- 655,
- 656,
- 657,
- 658,
- 659,
- -1
+ FRONTIER_MONS_GENERAL_B
};
const u16 gBattleFrontierTrainerMons_Dorothy[] =
{
- 468,
- 469,
- 470,
- 471,
- 472,
- 473,
- 474,
- 475,
- 476,
- 477,
- 478,
- 479,
- 480,
- 481,
- 482,
- 483,
- 484,
- 485,
- 486,
- 487,
- 488,
- 489,
- 490,
- 491,
- 492,
- 493,
- 494,
- 495,
- 496,
- 497,
- 498,
- 499,
- 500,
- 501,
- 502,
- 503,
- 504,
- 505,
- 506,
- 507,
- 508,
- 509,
- 510,
- 511,
- 512,
- 513,
- 514,
- 515,
- 516,
- 517,
- 518,
- 519,
- 520,
- 521,
- 522,
- 523,
- 524,
- 525,
- 526,
- 527,
- 528,
- 529,
- 530,
- 531,
- 532,
- 533,
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 540,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562,
- 563,
- -1
+ FRONTIER_MONS_GENERAL_C
};
const u16 gBattleFrontierTrainerMons_Piper[] =
{
- 372,
- 373,
- 374,
- 375,
- 376,
- 377,
- 378,
- 379,
- 380,
- 381,
- 382,
- 383,
- 384,
- 385,
- 386,
- 387,
- 388,
- 389,
- 390,
- 391,
- 392,
- 393,
- 394,
- 395,
- 396,
- 397,
- 398,
- 399,
- 400,
- 401,
- 402,
- 403,
- 404,
- 405,
- 406,
- 407,
- 408,
- 409,
- 410,
- 411,
- 412,
- 413,
- 414,
- 415,
- 416,
- 417,
- 418,
- 419,
- 420,
- 421,
- 422,
- 423,
- 424,
- 425,
- 426,
- 427,
- 428,
- 429,
- 430,
- 431,
- 432,
- 433,
- 434,
- 435,
- 436,
- 437,
- 438,
- 439,
- 440,
- 441,
- 442,
- 443,
- 444,
- 445,
- 446,
- 447,
- 448,
- 449,
- 450,
- 451,
- 452,
- 453,
- 454,
- 455,
- 456,
- 457,
- 458,
- 459,
- 460,
- 461,
- 462,
- 463,
- 464,
- 465,
- 466,
- 467,
- -1
+ FRONTIER_MONS_GENERAL_D
};
const u16 gBattleFrontierTrainerMons_Finn[] =
{
- 317,
- 371,
- 373,
- 377,
- 390,
- 392,
- 399,
- 431,
- 452,
- 456,
- 469,
- 475,
- 486,
- 488,
- 495,
- 527,
- 548,
- 552,
- 565,
- 569,
- 573,
- 576,
- 580,
- 582,
- 584,
- 591,
- 592,
- 601,
- 602,
- 610,
- 621,
- 623,
- 626,
- 631,
- 634,
- 640,
- 641,
- 644,
- 648,
- 650,
- 651,
- 653,
- 655,
- 661,
- 665,
- 669,
- 672,
- 676,
- 678,
- 680,
- 687,
- 688,
- 697,
- 698,
- 706,
- 717,
- 719,
- 722,
- 727,
- 730,
- 736,
- 737,
- 740,
- 744,
- 746,
- 747,
- 749,
- 751,
- 808,
- 809,
- 810,
- 811,
- 816,
- 817,
- 818,
- 819,
- 820,
- 821,
- 822,
- 823,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3
};
const u16 gBattleFrontierTrainerMons_Samir[] =
{
- 317,
- 371,
- 373,
- 377,
- 390,
- 392,
- 399,
- 431,
- 452,
- 456,
- 469,
- 475,
- 486,
- 488,
- 495,
- 527,
- 548,
- 552,
- 565,
- 569,
- 573,
- 576,
- 580,
- 582,
- 584,
- 591,
- 592,
- 601,
- 602,
- 610,
- 621,
- 623,
- 626,
- 631,
- 634,
- 640,
- 641,
- 644,
- 648,
- 650,
- 651,
- 653,
- 655,
- 661,
- 665,
- 669,
- 672,
- 676,
- 678,
- 680,
- 687,
- 688,
- 697,
- 698,
- 706,
- 717,
- 719,
- 722,
- 727,
- 730,
- 736,
- 737,
- 740,
- 744,
- 746,
- 747,
- 749,
- 751,
- 808,
- 809,
- 810,
- 811,
- 816,
- 817,
- 818,
- 819,
- 820,
- 821,
- 822,
- 823,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_M_3
};
const u16 gBattleFrontierTrainerMons_Fiona[] =
{
- 317,
- 371,
- 373,
- 377,
- 381,
- 384,
- 388,
- 390,
- 392,
- 399,
- 400,
- 409,
- 410,
- 418,
- 429,
- 431,
- 434,
- 439,
- 442,
- 448,
- 449,
- 452,
- 456,
- 458,
- 459,
- 461,
- 463,
- 469,
- 471,
- 475,
- 479,
- 483,
- 486,
- 488,
- 495,
- 496,
- 505,
- 506,
- 514,
- 525,
- 527,
- 530,
- 535,
- 538,
- 544,
- 545,
- 548,
- 552,
- 554,
- 555,
- 557,
- 559,
- 565,
- 569,
- 582,
- 584,
- 591,
- 623,
- 644,
- 648,
- 661,
- 665,
- 678,
- 680,
- 687,
- 719,
- 740,
- 744,
- 808,
- 809,
- 810,
- 811,
- 816,
- 817,
- 818,
- 819,
- 820,
- 821,
- 822,
- 823,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3
};
const u16 gBattleFrontierTrainerMons_Gloria[] =
{
- 317,
- 371,
- 373,
- 377,
- 381,
- 384,
- 388,
- 390,
- 392,
- 399,
- 400,
- 409,
- 410,
- 418,
- 429,
- 431,
- 434,
- 439,
- 442,
- 448,
- 449,
- 452,
- 456,
- 458,
- 459,
- 461,
- 463,
- 469,
- 471,
- 475,
- 479,
- 483,
- 486,
- 488,
- 495,
- 496,
- 505,
- 506,
- 514,
- 525,
- 527,
- 530,
- 535,
- 538,
- 544,
- 545,
- 548,
- 552,
- 554,
- 555,
- 557,
- 559,
- 565,
- 569,
- 582,
- 584,
- 591,
- 623,
- 644,
- 648,
- 661,
- 665,
- 678,
- 680,
- 687,
- 719,
- 740,
- 744,
- 808,
- 809,
- 810,
- 811,
- 816,
- 817,
- 818,
- 819,
- 820,
- 821,
- 822,
- 823,
- -1
+ FRONTIER_MONS_SWIMMING_TRIATHLETE_F_3
};
const u16 gBattleFrontierTrainerMons_Nico[] =
{
- 660,
- 661,
- 662,
- 663,
- 664,
- 665,
- 666,
- 667,
- 668,
- 669,
- 670,
- 671,
- 672,
- 673,
- 674,
- 675,
- 676,
- 677,
- 678,
- 679,
- 680,
- 681,
- 682,
- 683,
- 684,
- 685,
- 686,
- 687,
- 688,
- 689,
- 690,
- 691,
- 692,
- 693,
- 694,
- 695,
- 696,
- 697,
- 698,
- 699,
- 700,
- 701,
- 702,
- 703,
- 704,
- 705,
- 706,
- 707,
- 708,
- 709,
- 710,
- 711,
- 712,
- 713,
- 714,
- 715,
- 716,
- 717,
- 718,
- 719,
- 720,
- 721,
- 722,
- 723,
- 724,
- 725,
- 726,
- 727,
- 728,
- 729,
- 730,
- 731,
- 732,
- 733,
- 734,
- 735,
- 736,
- 737,
- 738,
- 739,
- 740,
- 741,
- 742,
- 743,
- 744,
- 745,
- 746,
- 747,
- 748,
- 749,
- 750,
- 751,
- 752,
- 753,
- 754,
- 755,
- -1
+ FRONTIER_MONS_GENERAL_A
};
const u16 gBattleFrontierTrainerMons_Jeremy[] =
{
- 564,
- 565,
- 566,
- 567,
- 568,
- 569,
- 570,
- 571,
- 572,
- 573,
- 574,
- 575,
- 576,
- 577,
- 578,
- 579,
- 580,
- 581,
- 582,
- 583,
- 584,
- 585,
- 586,
- 587,
- 588,
- 589,
- 590,
- 591,
- 592,
- 593,
- 594,
- 595,
- 596,
- 597,
- 598,
- 599,
- 600,
- 601,
- 602,
- 603,
- 604,
- 605,
- 606,
- 607,
- 608,
- 609,
- 610,
- 611,
- 612,
- 613,
- 614,
- 615,
- 616,
- 617,
- 618,
- 619,
- 620,
- 621,
- 622,
- 623,
- 624,
- 625,
- 626,
- 627,
- 628,
- 629,
- 630,
- 631,
- 632,
- 633,
- 634,
- 635,
- 636,
- 637,
- 638,
- 639,
- 640,
- 641,
- 642,
- 643,
- 644,
- 645,
- 646,
- 647,
- 648,
- 649,
- 650,
- 651,
- 652,
- 653,
- 654,
- 655,
- 656,
- 657,
- 658,
- 659,
- -1
+ FRONTIER_MONS_GENERAL_B
};
const u16 gBattleFrontierTrainerMons_Caitlin[] =
{
- 468,
- 469,
- 470,
- 471,
- 472,
- 473,
- 474,
- 475,
- 476,
- 477,
- 478,
- 479,
- 480,
- 481,
- 482,
- 483,
- 484,
- 485,
- 486,
- 487,
- 488,
- 489,
- 490,
- 491,
- 492,
- 493,
- 494,
- 495,
- 496,
- 497,
- 498,
- 499,
- 500,
- 501,
- 502,
- 503,
- 504,
- 505,
- 506,
- 507,
- 508,
- 509,
- 510,
- 511,
- 512,
- 513,
- 514,
- 515,
- 516,
- 517,
- 518,
- 519,
- 520,
- 521,
- 522,
- 523,
- 524,
- 525,
- 526,
- 527,
- 528,
- 529,
- 530,
- 531,
- 532,
- 533,
- 534,
- 535,
- 536,
- 537,
- 538,
- 539,
- 540,
- 541,
- 542,
- 543,
- 544,
- 545,
- 546,
- 547,
- 548,
- 549,
- 550,
- 551,
- 552,
- 553,
- 554,
- 555,
- 556,
- 557,
- 558,
- 559,
- 560,
- 561,
- 562,
- 563,
- -1
+ FRONTIER_MONS_GENERAL_C
};
const u16 gBattleFrontierTrainerMons_Reena[] =
{
- 372,
- 373,
- 374,
- 375,
- 376,
- 377,
- 378,
- 379,
- 380,
- 381,
- 382,
- 383,
- 384,
- 385,
- 386,
- 387,
- 388,
- 389,
- 390,
- 391,
- 392,
- 393,
- 394,
- 395,
- 396,
- 397,
- 398,
- 399,
- 400,
- 401,
- 402,
- 403,
- 404,
- 405,
- 406,
- 407,
- 408,
- 409,
- 410,
- 411,
- 412,
- 413,
- 414,
- 415,
- 416,
- 417,
- 418,
- 419,
- 420,
- 421,
- 422,
- 423,
- 424,
- 425,
- 426,
- 427,
- 428,
- 429,
- 430,
- 431,
- 432,
- 433,
- 434,
- 435,
- 436,
- 437,
- 438,
- 439,
- 440,
- 441,
- 442,
- 443,
- 444,
- 445,
- 446,
- 447,
- 448,
- 449,
- 450,
- 451,
- 452,
- 453,
- 454,
- 455,
- 456,
- 457,
- 458,
- 459,
- 460,
- 461,
- 462,
- 463,
- 464,
- 465,
- 466,
- 467,
- -1
+ FRONTIER_MONS_GENERAL_D
};
const u16 gBattleFrontierTrainerMons_Avery[] =
{
- 21,
- 238,
- 282,
- 303,
- 331,
- 343,
- 368,
- 369,
- 383,
- 417,
- 423,
- 424,
- 432,
- 481,
- 513,
- 519,
- 520,
- 528,
- 575,
- 609,
- 615,
- 616,
- 624,
- 671,
- 705,
- 711,
- 712,
- 720,
- -1
+ FRONTIER_MONS_BUG_MANIAC_4
};
const u16 gBattleFrontierTrainerMons_Liam[] =
{
- 21,
- 238,
- 282,
- 303,
- 331,
- 343,
- 368,
- 369,
- 383,
- 417,
- 423,
- 424,
- 432,
- 481,
- 513,
- 519,
- 520,
- 528,
- 575,
- 609,
- 615,
- 616,
- 624,
- 671,
- 705,
- 711,
- 712,
- 720,
- -1
+ FRONTIER_MONS_BUG_MANIAC_4
};
const u16 gBattleFrontierTrainerMons_Theo[] =
{
- 333,
- 347,
- 350,
- 354,
- 358,
- 361,
- 362,
- 363,
- 364,
- 371,
- 381,
- 384,
- 429,
- 434,
- 439,
- 479,
- 483,
- 525,
- 530,
- 535,
- 573,
- 576,
- 621,
- 626,
- 631,
- 669,
- 672,
- 717,
- 722,
- 727,
- 816,
- 817,
- 818,
- 819,
- -1
+ FRONTIER_MONS_FISHERMAN_3
};
const u16 gBattleFrontierTrainerMons_Bailey[] =
{
- 333,
- 347,
- 350,
- 354,
- 358,
- 361,
- 362,
- 363,
- 364,
- 371,
- 381,
- 384,
- 429,
- 434,
- 439,
- 479,
- 483,
- 525,
- 530,
- 535,
- 573,
- 576,
- 621,
- 626,
- 631,
- 669,
- 672,
- 717,
- 722,
- 727,
- 816,
- 817,
- 818,
- 819,
- -1
+ FRONTIER_MONS_FISHERMAN_3
};
const u16 gBattleFrontierTrainerMons_Hugo[] =
{
- 383,
- 386,
- 402,
- 403,
- 416,
- 417,
- 423,
- 432,
- 433,
- 435,
- 450,
- 466,
- 481,
- 482,
- 498,
- 499,
- 512,
- 513,
- 519,
- 528,
- 529,
- 531,
- 546,
- 562,
- 575,
- 578,
- 594,
- 595,
- 608,
- 609,
- 615,
- 624,
- 625,
- 627,
- 642,
- 658,
- 671,
- 674,
- 690,
- 691,
- 704,
- 705,
- 711,
- 720,
- 721,
- 723,
- 738,
- 754,
- 762,
- 763,
- 764,
- 773,
- 774,
- 775,
- 784,
- 785,
- 786,
- 795,
- 796,
- 797,
- 832,
- 833,
- 834,
- 835,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- -1
+ FRONTIER_MONS_RUIN_MANIAC_4
};
const u16 gBattleFrontierTrainerMons_Bryce[] =
{
- 383,
- 386,
- 402,
- 403,
- 416,
- 417,
- 423,
- 432,
- 433,
- 435,
- 450,
- 466,
- 481,
- 482,
- 498,
- 499,
- 512,
- 513,
- 519,
- 528,
- 529,
- 531,
- 546,
- 562,
- 575,
- 578,
- 594,
- 595,
- 608,
- 609,
- 615,
- 624,
- 625,
- 627,
- 642,
- 658,
- 671,
- 674,
- 690,
- 691,
- 704,
- 705,
- 711,
- 720,
- 721,
- 723,
- 738,
- 754,
- 762,
- 763,
- 764,
- 773,
- 774,
- 775,
- 784,
- 785,
- 786,
- 795,
- 796,
- 797,
- 832,
- 833,
- 834,
- 835,
- 836,
- 837,
- 838,
- 839,
- 840,
- 841,
- -1
+ FRONTIER_MONS_RUIN_MANIAC_4
};
const u16 gBattleFrontierTrainerMons_Gideon[] =
{
- 441,
- 445,
- 448,
- 449,
- 451,
- 453,
- 454,
- 455,
- 458,
- 537,
- 541,
- 544,
- 545,
- 547,
- 549,
- 550,
- 551,
- 554,
- 633,
- 637,
- 640,
- 641,
- 643,
- 645,
- 646,
- 647,
- 650,
- 729,
- 733,
- 736,
- 737,
- 739,
- 741,
- 742,
- 743,
- 746,
- -1
+ FRONTIER_MONS_COLLECTOR_3
};
const u16 gBattleFrontierTrainerMons_Triston[] =
{
- 441,
- 445,
- 448,
- 449,
- 451,
- 453,
- 454,
- 455,
- 458,
- 537,
- 541,
- 544,
- 545,
- 547,
- 549,
- 550,
- 551,
- 554,
- 633,
- 637,
- 640,
- 641,
- 643,
- 645,
- 646,
- 647,
- 650,
- 729,
- 733,
- 736,
- 737,
- 739,
- 741,
- 742,
- 743,
- 746,
- -1
+ FRONTIER_MONS_COLLECTOR_3
};
const u16 gBattleFrontierTrainerMons_Charles[] =
{
- 352,
- 381,
- 391,
- 393,
- 396,
- 398,
- 407,
- 422,
- 426,
- 443,
- 447,
- 479,
- 487,
- 489,
- 492,
- 494,
- 503,
- 518,
- 522,
- 539,
- 543,
- 573,
- 583,
- 585,
- 588,
- 590,
- 599,
- 614,
- 618,
- 635,
- 639,
- 669,
- 679,
- 681,
- 684,
- 686,
- 695,
- 710,
- 714,
- 731,
- 735,
- 756,
- 757,
- 758,
- 767,
- 768,
- 769,
- 778,
- 779,
- 780,
- 789,
- 790,
- 791,
- 870,
- 871,
- 872,
- 873,
- 874,
- 875,
- -1
+ FRONTIER_MONS_GUITARIST_3A
};
const u16 gBattleFrontierTrainerMons_Raymond[] =
{
- 374,
- 376,
- 381,
- 404,
- 407,
- 422,
- 439,
- 443,
- 459,
- 472,
- 500,
- 506,
- 507,
- 518,
- 532,
- 546,
- 566,
- 585,
- 588,
- 628,
- 635,
- 679,
- 681,
- 684,
- 710,
- 731,
- 785,
- 795,
- 796,
- 797,
- 817,
- 842,
- 843,
- 846,
- 847,
- -1
+ FRONTIER_MONS_GUITARIST_3B
};
const u16 gBattleFrontierTrainerMons_Dirk[] =
{
- 355,
- 375,
- 379,
- 385,
- 386,
- 412,
- 435,
- 440,
- 454,
- 457,
- 459,
- 465,
- 473,
- 477,
- 482,
- 484,
- 508,
- 531,
- 536,
- 550,
- 553,
- 555,
- 561,
- 567,
- 571,
- 577,
- 578,
- 604,
- 627,
- 632,
- 646,
- 649,
- 651,
- 657,
- 663,
- 667,
- 673,
- 674,
- 700,
- 723,
- 728,
- 742,
- 745,
- 747,
- 753,
- 756,
- 757,
- 758,
- 767,
- 768,
- 769,
- 778,
- 779,
- 780,
- 789,
- 790,
- 791,
- 828,
- 829,
- 830,
- 831,
- -1
+ FRONTIER_MONS_BIRD_KEEPER_3
};
const u16 gBattleFrontierTrainerMons_Harold[] =
{
- 355,
- 375,
- 379,
- 385,
- 386,
- 412,
- 435,
- 440,
- 454,
- 457,
- 459,
- 465,
- 473,
- 477,
- 482,
- 484,
- 508,
- 531,
- 536,
- 550,
- 553,
- 555,
- 561,
- 567,
- 571,
- 577,
- 578,
- 604,
- 627,
- 632,
- 646,
- 649,
- 651,
- 657,
- 663,
- 667,
- 673,
- 674,
- 700,
- 723,
- 728,
- 742,
- 745,
- 747,
- 753,
- 756,
- 757,
- 758,
- 767,
- 768,
- 769,
- 778,
- 779,
- 780,
- 789,
- 790,
- 791,
- 828,
- 829,
- 830,
- 831,
- -1
+ FRONTIER_MONS_BIRD_KEEPER_3
};
const u16 gBattleFrontierTrainerMons_Omar[] =
{
- 373,
- 388,
- 390,
- 392,
- 400,
- 409,
- 410,
- 418,
- 431,
- 442,
- 448,
- 449,
- 452,
- 456,
- 458,
- 459,
- 461,
- 463,
- 469,
- 471,
- 486,
- 488,
- 496,
- 505,
- 506,
- 514,
- 527,
- 538,
- 544,
- 545,
- 548,
- 552,
- 554,
- 555,
- 557,
- 559,
- 565,
- 580,
- 582,
- 584,
- 592,
- 601,
- 602,
- 610,
- 623,
- 634,
- 640,
- 641,
- 644,
- 648,
- 650,
- 651,
- 653,
- 655,
- 661,
- 676,
- 678,
- 680,
- 688,
- 697,
- 698,
- 706,
- 719,
- 730,
- 736,
- 737,
- 740,
- 744,
- 746,
- 747,
- 749,
- 751,
- 808,
- 809,
- 810,
- 811,
- 820,
- 821,
- 822,
- 823,
- -1
+ FRONTIER_MONS_SAILOR_3
};
const u16 gBattleFrontierTrainerMons_Peter[] =
{
- 373,
- 388,
- 390,
- 392,
- 400,
- 409,
- 410,
- 418,
- 431,
- 442,
- 448,
- 449,
- 452,
- 456,
- 458,
- 459,
- 461,
- 463,
- 469,
- 471,
- 486,
- 488,
- 496,
- 505,
- 506,
- 514,
- 527,
- 538,
- 544,
- 545,
- 548,
- 552,
- 554,
- 555,
- 557,
- 559,
- 565,
- 580,
- 582,
- 584,
- 592,
- 601,
- 602,
- 610,
- 623,
- 634,
- 640,
- 641,
- 644,
- 648,
- 650,
- 651,
- 653,
- 655,
- 661,
- 676,
- 678,
- 680,
- 688,
- 697,
- 698,
- 706,
- 719,
- 730,
- 736,
- 737,
- 740,
- 744,
- 746,
- 747,
- 749,
- 751,
- 808,
- 809,
- 810,
- 811,
- 820,
- 821,
- 822,
- 823,
- -1
+ FRONTIER_MONS_SAILOR_3
};
const u16 gBattleFrontierTrainerMons_Dev[] =
{
- 372,
- 387,
- 402,
- 403,
- 413,
- 414,
- 416,
- 417,
- 427,
- 428,
- 432,
- 433,
- 435,
- 440,
- 450,
- 466,
- 468,
- 470,
- 498,
- 499,
- 509,
- 510,
- 512,
- 513,
- 523,
- 524,
- 528,
- 529,
- 531,
- 536,
- 546,
- 562,
- 564,
- 579,
- 594,
- 595,
- 605,
- 606,
- 608,
- 609,
- 619,
- 620,
- 624,
- 625,
- 627,
- 632,
- 642,
- 658,
- 660,
- 675,
- 690,
- 691,
- 701,
- 702,
- 704,
- 705,
- 715,
- 716,
- 720,
- 721,
- 723,
- 728,
- 738,
- 754,
- 832,
- 833,
- 834,
- 835,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_HIKER_3
};
const u16 gBattleFrontierTrainerMons_Corey[] =
{
- 372,
- 387,
- 402,
- 403,
- 413,
- 414,
- 416,
- 417,
- 427,
- 428,
- 432,
- 433,
- 435,
- 440,
- 450,
- 466,
- 468,
- 470,
- 498,
- 499,
- 509,
- 510,
- 512,
- 513,
- 523,
- 524,
- 528,
- 529,
- 531,
- 536,
- 546,
- 562,
- 564,
- 579,
- 594,
- 595,
- 605,
- 606,
- 608,
- 609,
- 619,
- 620,
- 624,
- 625,
- 627,
- 632,
- 642,
- 658,
- 660,
- 675,
- 690,
- 691,
- 701,
- 702,
- 704,
- 705,
- 715,
- 716,
- 720,
- 721,
- 723,
- 728,
- 738,
- 754,
- 832,
- 833,
- 834,
- 835,
- 860,
- 861,
- 862,
- 863,
- 864,
- 865,
- 866,
- 867,
- 868,
- 869,
- -1
+ FRONTIER_MONS_HIKER_3
};
const u16 gBattleFrontierTrainerMons_Andre[] =
{
- 374,
- 378,
- 415,
- 419,
- 421,
- 426,
- 430,
- 444,
- 451,
- 454,
- 455,
- 464,
- 472,
- 476,
- 511,
- 515,
- 517,
- 522,
- 526,
- 540,
- 547,
- 550,
- 551,
- 560,
- 566,
- 570,
- 607,
- 611,
- 613,
- 618,
- 622,
- 636,
- 643,
- 646,
- 647,
- 656,
- 662,
- 666,
- 703,
- 707,
- 709,
- 714,
- 718,
- 732,
- 739,
- 742,
- 743,
- 752,
- 800,
- 801,
- 802,
- 803,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- -1
+ FRONTIER_MONS_KINDLER_3
};
const u16 gBattleFrontierTrainerMons_Ferris[] =
{
- 374,
- 378,
- 415,
- 419,
- 421,
- 426,
- 430,
- 444,
- 451,
- 454,
- 455,
- 464,
- 472,
- 476,
- 511,
- 515,
- 517,
- 522,
- 526,
- 540,
- 547,
- 550,
- 551,
- 560,
- 566,
- 570,
- 607,
- 611,
- 613,
- 618,
- 622,
- 636,
- 643,
- 646,
- 647,
- 656,
- 662,
- 666,
- 703,
- 707,
- 709,
- 714,
- 718,
- 732,
- 739,
- 742,
- 743,
- 752,
- 800,
- 801,
- 802,
- 803,
- 850,
- 851,
- 852,
- 853,
- 854,
- 855,
- 856,
- 857,
- 858,
- 859,
- -1
+ FRONTIER_MONS_KINDLER_3
};
const u16 gBattleFrontierTrainerMons_Alivia[] =
{
- 399,
- 400,
- 409,
- 422,
- 438,
- 441,
- 445,
- 448,
- 449,
- 451,
- 452,
- 454,
- 455,
- 489,
- 492,
- 493,
- 503,
- 526,
- 532,
- 535,
- 536,
- 560,
- 573,
- 583,
- 590,
- 592,
- 608,
- 611,
- 620,
- 651,
- 682,
- 688,
- 714,
- 729,
- 732,
- -1
+ FRONTIER_MONS_PARASOL_LADY_3
};
const u16 gBattleFrontierTrainerMons_Paige[] =
{
- 399,
- 400,
- 409,
- 422,
- 438,
- 441,
- 445,
- 448,
- 449,
- 451,
- 452,
- 454,
- 455,
- 489,
- 492,
- 493,
- 503,
- 526,
- 532,
- 535,
- 536,
- 560,
- 573,
- 583,
- 590,
- 592,
- 608,
- 611,
- 620,
- 651,
- 682,
- 688,
- 714,
- 729,
- 732,
- -1
+ FRONTIER_MONS_PARASOL_LADY_3
};
const u16 gBattleFrontierTrainerMons_Anya[] =
{
- 442,
- 443,
- 444,
- 446,
- 447,
- 538,
- 539,
- 540,
- 542,
- 543,
- 634,
- 635,
- 636,
- 638,
- 639,
- 730,
- 731,
- 732,
- 734,
- 735,
- -1
+ FRONTIER_MONS_EEVEELUTIONS
};
const u16 gBattleFrontierTrainerMons_Dawn[] =
{
- 377,
- 381,
- 410,
- 421,
- 422,
- 443,
- 456,
- 460,
- 461,
- 471,
- 472,
- 473,
- 484,
- 491,
- 502,
- 503,
- 507,
- 508,
- 515,
- 520,
- 540,
- 549,
- 569,
- 574,
- 583,
- 586,
- 601,
- 622,
- 624,
- 639,
- 644,
- 655,
- 734,
- 804,
- 810,
- 815,
- 823,
- 831,
- 843,
- -1
+ FRONTIER_MONS_BEAUTY_2
};
const u16 gBattleFrontierTrainerMons_Abby[] =
{
- 185,
- 290,
- 313,
- 334,
- 348,
- 359,
- 360,
- 377,
- 380,
- 382,
- 385,
- 394,
- 395,
- 398,
- 400,
- 401,
- 404,
- 409,
- 410,
- 416,
- 437,
- 438,
- 439,
- 441,
- 445,
- 446,
- 453,
- 475,
- 478,
- 480,
- 484,
- 490,
- 491,
- 494,
- 496,
- 497,
- 500,
- 505,
- 506,
- 512,
- 533,
- 534,
- 535,
- 537,
- 541,
- 542,
- 549,
- 569,
- 572,
- 574,
- 577,
- 586,
- 587,
- 590,
- 592,
- 593,
- 596,
- 601,
- 602,
- 608,
- 629,
- 630,
- 631,
- 633,
- 637,
- 638,
- 645,
- 665,
- 668,
- 670,
- 673,
- 682,
- 683,
- 686,
- 688,
- 689,
- 692,
- 697,
- 698,
- 704,
- 725,
- 726,
- 727,
- 729,
- 733,
- 734,
- 741,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- -1
+ FRONTIER_MONS_AROMA_LADY_3
};
const u16 gBattleFrontierTrainerMons_Gretel[] =
{
- 185,
- 290,
- 313,
- 334,
- 348,
- 359,
- 360,
- 377,
- 380,
- 382,
- 385,
- 394,
- 395,
- 398,
- 400,
- 401,
- 404,
- 409,
- 410,
- 416,
- 437,
- 438,
- 439,
- 441,
- 445,
- 446,
- 453,
- 475,
- 478,
- 480,
- 484,
- 490,
- 491,
- 494,
- 496,
- 497,
- 500,
- 505,
- 506,
- 512,
- 533,
- 534,
- 535,
- 537,
- 541,
- 542,
- 549,
- 569,
- 572,
- 574,
- 577,
- 586,
- 587,
- 590,
- 592,
- 593,
- 596,
- 601,
- 602,
- 608,
- 629,
- 630,
- 631,
- 633,
- 637,
- 638,
- 645,
- 665,
- 668,
- 670,
- 673,
- 682,
- 683,
- 686,
- 688,
- 689,
- 692,
- 697,
- 698,
- 704,
- 725,
- 726,
- 727,
- 729,
- 733,
- 734,
- 741,
- 812,
- 813,
- 814,
- 815,
- 816,
- 817,
- 818,
- 819,
- -1
+ FRONTIER_MONS_AROMA_LADY_3
};
diff --git a/src/data/battle_frontier/battle_frontier_trainers.h b/src/data/battle_frontier/battle_frontier_trainers.h
index faef40656..bbd88d76f 100644
--- a/src/data/battle_frontier/battle_frontier_trainers.h
+++ b/src/data/battle_frontier/battle_frontier_trainers.h
@@ -1,2403 +1,2403 @@
-const struct BattleFrontierTrainer gBattleFrontierTrainers[] =
+const struct BattleFrontierTrainer gBattleFrontierTrainers[FRONTIER_TRAINERS_COUNT] =
{
- [0] = {
+ [FRONTIER_TRAINER_BRADY] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("BRADY"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NEVER, EC_WORD_GOING, EC_WORD_TO, EC_WORD_LOSE, EC_WORD_EXCL},
.speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, 0xFFFF},
.speechLose = {EC_WORD_WHAT, EC_WORD_QUES, 0xFFFF, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Brady
+ .monSet = gBattleFrontierTrainerMons_Brady
},
- [1] = {
+ [FRONTIER_TRAINER_CONNER] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("CONNER"),
.speechBefore = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_BUG, EC_WORD_ME, 0xFFFF, 0xFFFF},
.speechWin = {EC_WORD_A, EC_WORD_WIN, EC_WORD_IS, EC_WORD_JUST, EC_WORD_AWESOME, 0xFFFF},
.speechLose = {EC_WORD_DARN, EC_WORD_ELLIPSIS, EC_WORD_LOSING, EC_WORD_DOES, EC_WORD_BUG, EC_WORD_ME},
- .monSets = gBattleFrontierTrainerMons_Conner
+ .monSet = gBattleFrontierTrainerMons_Conner
},
- [2] = {
+ [FRONTIER_TRAINER_BRADLEY] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("BRADLEY"),
.speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_MY, EC_WORD_OPPONENT, EC_WORD_TODAY},
.speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL, 0xFFFF, EC_WORD_SEE_YA, EC_WORD_LATER, EC_WORD_EXCL},
.speechLose = {EC_WORD_TOMORROW, EC_WORD_IS, EC_WORD_WHEN, EC_WORD_WE, EC_WORD_REALLY, EC_WORD_BATTLE},
- .monSets = gBattleFrontierTrainerMons_Bradley
+ .monSet = gBattleFrontierTrainerMons_Bradley
},
- [3] = {
+ [FRONTIER_TRAINER_CYBIL] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("CYBIL"),
.speechBefore = {EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_NOT_VERY, EC_WORD_SCARY, EC_WORD_AT, EC_WORD_ALL},
.speechWin = {EC_WORD_IT_S, EC_WORD_SAD, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOU, EC_MOVE2(STRUGGLE)},
.speechLose = {EC_WORD_THIS, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_HAPPENING, EC_WORD_TO_ME, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Cybil
+ .monSet = gBattleFrontierTrainerMons_Cybil
},
- [4] = {
+ [FRONTIER_TRAINER_RODETTE] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("RODETTE"),
.speechBefore = {EC_WORD_OH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL},
.speechWin = {EC_WORD_IT_S, EC_WORD_INCREDIBLE, EC_WORD_HOW, EC_WORD_STRONG, EC_WORD_I_AM, EC_WORD_EXCL},
.speechLose = {EC_WORD_OH_DEAR, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_JUST, EC_WORD_NO, EC_WORD_GOOD},
- .monSets = gBattleFrontierTrainerMons_Rodette
+ .monSet = gBattleFrontierTrainerMons_Rodette
},
- [5] = {
+ [FRONTIER_TRAINER_PEGGY] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("PEGGY"),
.speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_TO, EC_WORD_BE, EC_WORD_DESTROYED, EC_WORD_EXCL},
.speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_LOLLING, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_SAD, EC_WORD_THANKS, EC_WORD_TO, EC_WORD_YOU},
- .monSets = gBattleFrontierTrainerMons_Peggy
+ .monSet = gBattleFrontierTrainerMons_Peggy
},
- [6] = {
+ [FRONTIER_TRAINER_KEITH] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("KEITH"),
.speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_JUST, EC_WORD_STUDY, EC_WORD_YOU, EC_WORD_KNOW},
.speechWin = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_STUDY, EC_WORD_ENOUGH, EC_WORD_ELLIPSIS, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Keith
+ .monSet = gBattleFrontierTrainerMons_Keith
},
- [7] = {
+ [FRONTIER_TRAINER_GRAYSON] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("GRAYSON"),
.speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_BATTLE, EC_WORD_ISN_T, EC_WORD_CHILD_S_PLAY, EC_WORD_EXCL},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_DONE, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
.speechLose = {EC_WORD_WE, EC_WORD_WERE, EC_WORD_LIKE, EC_WORD_TOYS, EC_WORD_TO, EC_WORD_YOU},
- .monSets = gBattleFrontierTrainerMons_Grayson
+ .monSet = gBattleFrontierTrainerMons_Grayson
},
- [8] = {
+ [FRONTIER_TRAINER_GLENN] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("GLENN"),
.speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_COOL, EC_WORD_IF_I_WIN, 0xFFFF},
.speechWin = {EC_WORD_COOL, EC_WORD_EXCL, 0xFFFF, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM},
.speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_COOL},
- .monSets = gBattleFrontierTrainerMons_Glenn
+ .monSet = gBattleFrontierTrainerMons_Glenn
},
- [9] = {
+ [FRONTIER_TRAINER_LILIANA] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("LILIANA"),
.speechBefore = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_GIVE_UP, EC_WORD_UNTIL, EC_WORD_I, EC_WORD_WIN},
.speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_WORD_SURRENDER, EC_WORD_IN, EC_WORD_ME},
.speechLose = {EC_WORD_THAT_S, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_GIVE_UP, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Liliana
+ .monSet = gBattleFrontierTrainerMons_Liliana
},
- [10] = {
+ [FRONTIER_TRAINER_ELISE] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("ELISE"),
.speechBefore = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_IS, EC_WORD_FROM, EC_WORD_MY, EC_WORD_FATHER},
.speechWin = {EC_WORD_I, EC_WORD_WIN, EC_WORD_EXCL, EC_WORD_FATHER, EC_WORD_I_VE, EC_WORD_WON},
.speechLose = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_FATHER, EC_WORD_FOR, EC_WORD_I_VE, EC_WORD_LOST},
- .monSets = gBattleFrontierTrainerMons_Elise
+ .monSet = gBattleFrontierTrainerMons_Elise
},
- [11] = {
+ [FRONTIER_TRAINER_ZOEY] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("ZOEY"),
.speechBefore = {EC_WORD_PLEASE, EC_WORD_BATTLE, EC_WORD_LIKE, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_IT},
.speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
.speechLose = {EC_WORD_WERE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_BEING, EC_WORD_SERIOUS, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Zoey
+ .monSet = gBattleFrontierTrainerMons_Zoey
},
- [12] = {
+ [FRONTIER_TRAINER_MANUEL] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("MANUEL"),
.speechBefore = {EC_WORD_ME, EC_WORD_LOSE, EC_WORD_QUES, EC_WORD_THAT_S, EC_WORD_PREPOSTEROUS, EC_WORD_EXCL},
.speechWin = {EC_WORD_NATURALLY, EC_WORD_I, EC_WORD_WIN, 0xFFFF, 0xFFFF, 0xFFFF},
.speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_LOST, EC_WORD_MOTHER},
- .monSets = gBattleFrontierTrainerMons_Manuel
+ .monSet = gBattleFrontierTrainerMons_Manuel
},
- [13] = {
+ [FRONTIER_TRAINER_RUSS] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("RUSS"),
.speechBefore = {EC_WORD_THEY, EC_WORD_ALL, EC_WORD_WANT, EC_WORD_MY, EC_WORD_FABULOUS, EC_WORD_POKEMON},
.speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_HAVE, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_PARTY},
.speechLose = {EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_DO, EC_WORD_THAT, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Russ
+ .monSet = gBattleFrontierTrainerMons_Russ
},
- [14] = {
+ [FRONTIER_TRAINER_DUSTIN] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("DUSTIN"),
.speechBefore = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_COOL, EC_WORD_POKEMON, 0xFFFF},
.speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_WHEN_I_WIN, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_IF_I_LOSE, EC_WORD_TOO, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Dustin
+ .monSet = gBattleFrontierTrainerMons_Dustin
},
- [15] = {
+ [FRONTIER_TRAINER_TINA] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("TINA"),
.speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_YOU, EC_WORD_CAN, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(SWEET_KISS)},
.speechWin = {EC_WORD_HERE_IT_IS, EC_WORD_YOUR, EC_MOVE2(SWEET_KISS), EC_WORD_FROM, EC_WORD_MY, EC_POKEMON2(JYNX)},
.speechLose = {EC_WORD_YOU, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SWIFT), EC_MOVE2(MEGA_KICK), EC_WORD_INSTEAD},
- .monSets = gBattleFrontierTrainerMons_Tina
+ .monSet = gBattleFrontierTrainerMons_Tina
},
- [16] = {
+ [FRONTIER_TRAINER_GILLIAN1] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("GILLIAN"),
.speechBefore = {EC_WORD_THE, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_IS, EC_WORD_SO, EC_WORD_YESTERDAY},
.speechWin = {EC_WORD_POKEMON, EC_WORD_NEVER, EC_WORD_GO, EC_WORD_OUT, EC_WORD_OF, EC_WORD_FASHION},
.speechLose = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_DISAPPOINT, EC_WORD_ME, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Gillian
+ .monSet = gBattleFrontierTrainerMons_Gillian
},
- [17] = {
+ [FRONTIER_TRAINER_ZOE] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("ZOE"),
.speechBefore = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_A, EC_WORD_WORRY, EC_WORD_AT, EC_WORD_ALL},
.speechWin = {EC_WORD_LIFE, EC_WORD_IS, EC_WORD_ALWAYS, EC_WORD_GOOD, EC_WORD_TO_ME, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_WORRY, EC_WORD_ABOUT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SKILL},
- .monSets = gBattleFrontierTrainerMons_Zoe
+ .monSet = gBattleFrontierTrainerMons_Zoe
},
- [18] = {
+ [FRONTIER_TRAINER_CHEN] = {
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("CHEN"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_TOTALLY, EC_WORD_READY, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_TODAY},
.speechWin = {EC_WORD_I_AM, EC_WORD_READY, EC_WORD_TO, EC_WORD_GO, EC_WORD_ON, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_MOVE(FOCUS_ENERGY), EC_WORD_AND, EC_WORD_TOUGHNESS},
- .monSets = gBattleFrontierTrainerMons_Chen
+ .monSet = gBattleFrontierTrainerMons_Chen
},
- [19] = {
+ [FRONTIER_TRAINER_AL] = {
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("AL"),
.speechBefore = {EC_WORD_YOUR, EC_WORD_LOOK, EC_WORD_SAYS, EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_TOUGH},
.speechWin = {EC_WORD_IT_S, EC_WORD_ME, EC_WORD_WHO_IS, EC_WORD_REALLY, EC_WORD_TOUGH, 0xFFFF},
.speechLose = {EC_WORD_I_AM, EC_WORD_RIGHT, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_TOUGH},
- .monSets = gBattleFrontierTrainerMons_Al
+ .monSet = gBattleFrontierTrainerMons_Al
},
- [20] = {
+ [FRONTIER_TRAINER_MITCH] = {
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("MITCH"),
.speechBefore = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_IS, EC_WORD_MY, EC_WORD_ALLY, EC_WORD_EXCL},
.speechWin = {EC_WORD_WAS, EC_WORD_THAT, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_YOU, EC_WORD_QUES},
.speechLose = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_DIDN_T, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Mitch
+ .monSet = gBattleFrontierTrainerMons_Mitch
},
- [21] = {
+ [FRONTIER_TRAINER_ANNE] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("ANNE"),
.speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_LET_S, EC_WORD_BATTLE, EC_WORD_NOW},
.speechWin = {EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Anne
+ .monSet = gBattleFrontierTrainerMons_Anne
},
- [22] = {
+ [FRONTIER_TRAINER_ALIZE] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("ALIZE"),
.speechBefore = {EC_WORD_CUTE, EC_WORD_AND, EC_WORD_AWFULLY, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_ME},
.speechWin = {EC_WORD_YUP, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_AND, EC_WORD_AWFULLY, EC_WORD_STRONG},
.speechLose = {EC_WORD_I_AM, EC_WORD_WEAK, EC_WORD_ELLIPSIS, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_CUTE},
- .monSets = gBattleFrontierTrainerMons_Alize
+ .monSet = gBattleFrontierTrainerMons_Alize
},
- [23] = {
+ [FRONTIER_TRAINER_LAUREN] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("LAUREN"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_OLD, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_ALSO, EC_WORD_GOOD},
.speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_I_WAS, EC_WORD_OLD, EC_WORD_BUT, EC_WORD_GOOD},
.speechLose = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_WEIRD, EC_WORD_DREAM, EC_WORD_THAT_WAS, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Lauren
+ .monSet = gBattleFrontierTrainerMons_Lauren
},
- [24] = {
+ [FRONTIER_TRAINER_KIPP] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("KIPP"),
.speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_GO, EC_MOVE2(SURF)},
.speechWin = {EC_WORD_YEAH, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_OFF, EC_WORD_TO, EC_MOVE2(SURF)},
.speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_EXCL, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Kipp
+ .monSet = gBattleFrontierTrainerMons_Kipp
},
- [25] = {
+ [FRONTIER_TRAINER_JASON] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("JASON"),
.speechBefore = {EC_WORD_TEACH, EC_WORD_ME, EC_WORD_A, EC_WORD_GOOD, EC_WORD_STRATEGY, 0xFFFF},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_YOUR, EC_WORD_GOOD, EC_WORD_STRATEGY, EC_WORD_QUES_EXCL, 0xFFFF},
.speechLose = {EC_WORD_WOW, EC_WORD_THAT, EC_WORD_IS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_STRATEGY},
- .monSets = gBattleFrontierTrainerMons_Jason
+ .monSet = gBattleFrontierTrainerMons_Jason
},
- [26] = {
+ [FRONTIER_TRAINER_JOHN] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("JOHN"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_PRETTY, EC_WORD_NEW, EC_WORD_TRAINER, 0xFFFF},
.speechWin = {EC_WORD_I_AM, EC_WORD_NEW, EC_WORD_BUT, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_NEW, EC_WORD_SO, EC_WORD_WHAT, EC_WORD_IF_I_LOSE, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_John
+ .monSet = gBattleFrontierTrainerMons_John
},
- [27] = {
+ [FRONTIER_TRAINER_ANN] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("ANN"),
.speechBefore = {EC_WORD_IT_S, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_IT, EC_WORD_REALLY, EC_WORD_IS},
.speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_CAN, EC_WORD_CRY},
.speechLose = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_WILL, EC_WORD_CRY},
- .monSets = gBattleFrontierTrainerMons_Ann
+ .monSet = gBattleFrontierTrainerMons_Ann
},
- [28] = {
+ [FRONTIER_TRAINER_EILEEN] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("EILEEN"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_OK_QUES},
.speechWin = {EC_WORD_SO, EC_WORD_THIS, EC_WORD_IS, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_FEELING},
.speechLose = {EC_WORD_AN, EC_WORD_ADULT, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_YOU, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Eileen
+ .monSet = gBattleFrontierTrainerMons_Eileen
},
- [29] = {
+ [FRONTIER_TRAINER_CARLIE] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("CARLIE"),
.speechBefore = {EC_WORD_MY, EC_WORD_SUMMER, EC_WORD_VACATION, EC_WORD_IS, EC_WORD_FOR, EC_WORD_POKEMON},
.speechWin = {EC_WORD_MY, EC_WORD_SUMMER, EC_WORD_VACATION, EC_WORD_WILL, EC_WORD_BE, EC_WORD_AWESOME},
.speechLose = {EC_WORD_I, EC_WORD_CAN_T_WIN, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Carlie
+ .monSet = gBattleFrontierTrainerMons_Carlie
},
- [30] = {
+ [FRONTIER_TRAINER_GORDON] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("GORDON"),
.speechBefore = {EC_WORD_VICTORY, EC_WORD_WILL, EC_WORD_COME, EC_WORD_TO_ME, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_OH_YEAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_REALLY, EC_WORD_WON},
.speechLose = {EC_WORD_NOTHING, EC_WORD_IS, EC_WORD_WORKING, EC_WORD_OUT, EC_WORD_FOR, EC_WORD_ME},
- .monSets = gBattleFrontierTrainerMons_Gordon
+ .monSet = gBattleFrontierTrainerMons_Gordon
},
- [31] = {
+ [FRONTIER_TRAINER_AYDEN] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("AYDEN"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_HOT, EC_WORD_BATTLE},
.speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_WATER, EC_WORD_TO, EC_WORD_COOL, EC_WORD_DOWN},
.speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_ICE, EC_WORD_COLD},
- .monSets = gBattleFrontierTrainerMons_Ayden
+ .monSet = gBattleFrontierTrainerMons_Ayden
},
- [32] = {
+ [FRONTIER_TRAINER_MARCO] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("MARCO"),
.speechBefore = {EC_WORD_I, EC_MOVE2(SURF), EC_WORD_IN, EC_WORD_THE, EC_WORD_WINTER, EC_WORD_TOO},
.speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_MOVE2(SURF), EC_WORD_RIGHT, EC_WORD_NOW},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(BEAT_UP), EC_WORD_MY, EC_MOVE2(SURF), EC_WORD_BOARD},
- .monSets = gBattleFrontierTrainerMons_Marco
+ .monSet = gBattleFrontierTrainerMons_Marco
},
- [33] = {
+ [FRONTIER_TRAINER_CIERRA] = {
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("CIERRA"),
.speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_SYNCHRONIZE, EC_WORD_MY, EC_WORD_SWIFT_SWIM},
.speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SYNCHRONIZE, EC_WORD_WITH, EC_WORD_ME, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_SYNCHRONIZE, EC_WORD_BETTER, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Cierra
+ .monSet = gBattleFrontierTrainerMons_Cierra
},
- [34] = {
+ [FRONTIER_TRAINER_MARCY] = {
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("MARCY"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_KNOCKOUT, EC_WORD_YOU, EC_WORD_CAN_T_WIN, EC_WORD_EXCL},
.speechWin = {EC_WORD_AFTER, EC_WORD_ALL, EC_WORD_I_AM, EC_WORD_A, EC_WORD_KNOCKOUT, EC_WORD_EXCL},
.speechLose = {EC_WORD_THAT_S, EC_WORD_NOT, EC_WORD_THE, EC_WORD_KNOCKOUT, EC_WORD_I, EC_WORD_MEAN},
- .monSets = gBattleFrontierTrainerMons_Marcy
+ .monSet = gBattleFrontierTrainerMons_Marcy
},
- [35] = {
+ [FRONTIER_TRAINER_KATHY] = {
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("KATHY"),
.speechBefore = {EC_WORD_I_VE, EC_WORD_WON, EC_WORD_EVERY, EC_WORD_MATCH, EC_WORD_TODAY, EC_WORD_EXCL},
.speechWin = {EC_WORD_IT_S, EC_WORD_SO, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_WIN, EC_WORD_EXCL},
.speechLose = {EC_WORD_HUH_QUES, EC_WORD_I, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_HAVE, EC_WORD_LOST},
- .monSets = gBattleFrontierTrainerMons_Kathy
+ .monSet = gBattleFrontierTrainerMons_Kathy
},
- [36] = {
+ [FRONTIER_TRAINER_PEYTON] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("PEYTON"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NEVER, EC_WORD_DISAPPOINTED, EC_WORD_WITH, EC_WORD_MY, EC_WORD_POKEMON},
.speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_IF, EC_WORD_WE, EC_WORD_WIN, EC_WORD_TOGETHER},
.speechLose = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_MORE, EC_WORD_IF_I_LOSE},
- .monSets = gBattleFrontierTrainerMons_Peyton
+ .monSet = gBattleFrontierTrainerMons_Peyton
},
- [37] = {
+ [FRONTIER_TRAINER_JULIAN] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("JULIAN"),
.speechBefore = {EC_WORD_YOU, EC_WORD_ADORE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_RIGHT, EC_WORD_QUES},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_TOTALLY, EC_WORD_OUT, EC_WORD_OF, EC_WORD_THE, EC_WORD_QUESTION},
.speechLose = {EC_WORD_YOU, EC_WORD_DO, EC_WORD_ADORE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Julian
+ .monSet = gBattleFrontierTrainerMons_Julian
},
- [38] = {
+ [FRONTIER_TRAINER_QUINN] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("QUINN"),
.speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_BUT, EC_WORD_A, EC_WORD_DREAM},
.speechWin = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_BEAUTIFUL, EC_WORD_DREAM, EC_WORD_EXCL},
.speechLose = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_AN, EC_WORD_AWFUL, EC_MOVE(NIGHTMARE), EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Quinn
+ .monSet = gBattleFrontierTrainerMons_Quinn
},
- [39] = {
+ [FRONTIER_TRAINER_HAYLEE] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("HAYLEE"),
.speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_I_AM, EC_WORD_FEELING},
.speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_OVERWHELMING, EC_WORD_JOY, EC_WORD_OVER, EC_WORD_THIS},
.speechLose = {EC_WORD_DESTROYED, EC_WORD_IS, EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_FEELING},
- .monSets = gBattleFrontierTrainerMons_Haylee
+ .monSet = gBattleFrontierTrainerMons_Haylee
},
- [40] = {
+ [FRONTIER_TRAINER_AMANDA] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("AMANDA"),
.speechBefore = {EC_WORD_I, EC_WORD_COME, EC_WORD_FROM, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_FAMILY},
.speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_TREASURE, EC_WORD_THIS, EC_WORD_WIN, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_RIGHT, EC_WORD_NOW},
- .monSets = gBattleFrontierTrainerMons_Amanda
+ .monSet = gBattleFrontierTrainerMons_Amanda
},
- [41] = {
+ [FRONTIER_TRAINER_STACY] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("STACY"),
.speechBefore = {EC_WORD_ALL, EC_WORD_POKEMON, EC_WORD_HAVE, EC_WORD_THEIR, EC_WORD_OWN, EC_WORD_CUTE_CHARM},
.speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_WHAT, EC_WORD_I, EC_WORD_MEAN, EC_WORD_QUES},
.speechLose = {EC_WORD_SHOULD, EC_WORD_I, EC_WORD_NOT, EC_WORD_ADORE, EC_WORD_POKEMON, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Stacy
+ .monSet = gBattleFrontierTrainerMons_Stacy
},
- [42] = {
+ [FRONTIER_TRAINER_RAFAEL] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("RAFAEL"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_EXCL, EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_SOME, EC_WORD_SPIRIT},
.speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_SPIRIT, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_WELL, EC_WORD_SO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_OUR, EC_WORD_SPIRIT},
- .monSets = gBattleFrontierTrainerMons_Rafael
+ .monSet = gBattleFrontierTrainerMons_Rafael
},
- [43] = {
+ [FRONTIER_TRAINER_OLIVER] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("OLIVER"),
.speechBefore = {EC_WORD_A, EC_WORD_GENIUS, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL},
.speechWin = {EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_WORKS, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_THAN, EC_WORD_I_AM},
- .monSets = gBattleFrontierTrainerMons_Oliver
+ .monSet = gBattleFrontierTrainerMons_Oliver
},
- [44] = {
+ [FRONTIER_TRAINER_PAYTON] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("PAYTON"),
.speechBefore = {EC_WORD_I, EC_WORD_TRAIN, EC_WORD_FROM, EC_WORD_THE, EC_WORD_EGG, EC_WORD_UP},
.speechWin = {EC_WORD_WELL, EC_WORD_DONE, EC_WORD_EXCL, 0xFFFF, 0xFFFF, 0xFFFF},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_A, EC_MOVE2(SOFT_BOILED), EC_WORD_LOSS, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Payton
+ .monSet = gBattleFrontierTrainerMons_Payton
},
- [45] = {
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ [FRONTIER_TRAINER_PAMELA] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.trainerName = _("PAMELA"),
.speechBefore = {EC_WORD_ALL, EC_WORD_POKEMON, EC_WORD_ADORE, EC_WORD_A, EC_WORD_KIND, EC_WORD_TRAINER},
.speechWin = {EC_WORD_IT_S, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_LOST, 0xFFFF},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_KIND, EC_WORD_AND, EC_WORD_YOU_RE, EC_WORD_ALSO, EC_WORD_STRONG},
- .monSets = gBattleFrontierTrainerMons_Pamela
+ .monSet = gBattleFrontierTrainerMons_Pamela
},
- [46] = {
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ [FRONTIER_TRAINER_ELIZA] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.trainerName = _("ELIZA"),
.speechBefore = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_POKEMON, EC_WORD_LIKE, EC_WORD_MY, EC_WORD_CHILDREN},
.speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON},
.speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, EC_WORD_ABOUT, EC_WORD_THIS},
- .monSets = gBattleFrontierTrainerMons_Eliza
+ .monSet = gBattleFrontierTrainerMons_Eliza
},
- [47] = {
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ [FRONTIER_TRAINER_MARISA] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.trainerName = _("MARISA"),
.speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_BATTLE, EC_WORD_SERIOUSLY, 0xFFFF},
.speechWin = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_YOU, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BETTER},
.speechLose = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_PLEASE, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Marisa
+ .monSet = gBattleFrontierTrainerMons_Marisa
},
- [48] = {
+ [FRONTIER_TRAINER_LEWIS] = {
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
.trainerName = _("LEWIS"),
.speechBefore = {EC_WORD_A_LITTLE, EC_WORD_BUG, EC_WORD_IS, EC_WORD_SCARY, EC_WORD_QUES, EC_WORD_HAHAHA},
.speechWin = {EC_WORD_LOOK, EC_WORD_LOOK, EC_WORD_EXCL, EC_WORD_A, EC_WORD_SCARY, EC_WORD_BUG},
.speechLose = {EC_WORD_OH, EC_WORD_A, EC_WORD_BUG, EC_WORD_ISN_T, EC_WORD_SCARY, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Lewis
+ .monSet = gBattleFrontierTrainerMons_Lewis
},
- [49] = {
+ [FRONTIER_TRAINER_YOSHI] = {
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
.trainerName = _("YOSHI"),
.speechBefore = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_LOVEY_DOVEY},
.speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_THE, EC_WORD_BEST, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_IGNORANT, EC_WORD_ABOUT, EC_WORD_BUG, EC_WORD_POKEMON, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Yoshi
+ .monSet = gBattleFrontierTrainerMons_Yoshi
},
- [50] = {
+ [FRONTIER_TRAINER_DESTIN] = {
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
.trainerName = _("DESTIN"),
.speechBefore = {EC_WORD_IT_S, EC_WORD_WAY, EC_WORD_TOO, EC_WORD_HOT, EC_WORD_HERE, 0xFFFF},
.speechWin = {EC_WORD_I_AM, EC_WORD_ABOUT, EC_WORD_TO, EC_MOVE(OVERHEAT), 0xFFFF, 0xFFFF},
.speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_SOME, EC_WORD_WATER, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Destin
+ .monSet = gBattleFrontierTrainerMons_Destin
},
- [51] = {
+ [FRONTIER_TRAINER_KEON] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("KEON"),
.speechBefore = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_BUT, EC_WORD_HERE_I_COME, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_FOR, EC_WORD_MY, EC_WORD_OVERWHELMING, EC_WORD_POWER},
.speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Keon
+ .monSet = gBattleFrontierTrainerMons_Keon
},
- [52] = {
+ [FRONTIER_TRAINER_STUART] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("STUART"),
.speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_YOU, EC_WORD_A, EC_WORD_HOT, EC_WORD_BATTLE},
.speechWin = {EC_WORD_THE, EC_WORD_MASTER, EC_WORD_OF, EC_WORD_COOL, EC_WORD_THAT_S, EC_WORD_ME},
.speechLose = {EC_WORD_I, EC_WORD_SEE, EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_SO, EC_WORD_COOL},
- .monSets = gBattleFrontierTrainerMons_Stuart
+ .monSet = gBattleFrontierTrainerMons_Stuart
},
- [53] = {
+ [FRONTIER_TRAINER_NESTOR] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("NESTOR"),
.speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_A, EC_WORD_REALLY, EC_WORD_SMOOTH, EC_WORD_MOVE},
.speechWin = {EC_WORD_THERE, EC_WORD_WAS, EC_WORD_NOTHING, EC_WORD_SMOOTH, EC_WORD_ABOUT, EC_WORD_THAT},
.speechLose = {EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_ARE, EC_WORD_SMOOTH, EC_WORD_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Nestor
+ .monSet = gBattleFrontierTrainerMons_Nestor
},
- [54] = {
+ [FRONTIER_TRAINER_DERRICK] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("DERRICK"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_YOU, EC_MOVE2(MEDITATE), EC_WORD_LIKE, EC_WORD_ME},
.speechWin = {EC_WORD_HOW, EC_WORD_I, EC_MOVE2(MEDITATE), EC_WORD_IS, EC_WORD_JUST, EC_WORD_BEAUTIFUL},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(MEDITATE), EC_WORD_FOR, EC_WORD_A, EC_MOVE2(CALM_MIND)},
- .monSets = gBattleFrontierTrainerMons_Derrick
+ .monSet = gBattleFrontierTrainerMons_Derrick
},
- [55] = {
+ [FRONTIER_TRAINER_BRYSON] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("BRYSON"),
.speechBefore = {EC_MOVE2(POISON_POWDER), EC_WORD_IS, EC_WORD_IN, EC_WORD_OUR, EC_MOVE2(COTTON_SPORE), EC_WORD_MOVE},
.speechWin = {EC_WORD_HOW_DO, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_OUR, EC_MOVE2(POISON_POWDER), EC_WORD_QUES},
.speechLose = {EC_WORD_MY, EC_MOVE2(COTTON_SPORE), EC_WORD_WAS, EC_WORD_USELESS, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Bryson
+ .monSet = gBattleFrontierTrainerMons_Bryson
},
- [56] = {
+ [FRONTIER_TRAINER_CLAYTON] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("CLAYTON"),
.speechBefore = {EC_WORD_HUH_QUES, 0xFFFF, 0xFFFF, EC_WORD_WHERE, EC_WORD_IS_IT_QUES, 0xFFFF},
.speechWin = {EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_WORD_POKENAV},
.speechLose = {EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_WORD_SENSE},
- .monSets = gBattleFrontierTrainerMons_Clayton
+ .monSet = gBattleFrontierTrainerMons_Clayton
},
- [57] = {
+ [FRONTIER_TRAINER_TRENTON] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("TRENTON"),
.speechBefore = {EC_WORD_COME_OVER, EC_WORD_FOR, EC_WORD_SOME, EC_WORD_TASTY, EC_WORD_WATER, 0xFFFF},
.speechWin = {EC_WORD_MMM, EC_WORD_DO, EC_WORD_YOU, EC_WORD_WANT, EC_WORD_SOME, EC_WORD_QUES},
.speechLose = {EC_WORD_I, EC_WORD_GOT, EC_WORD_THIS, EC_WORD_TASTY, EC_WORD_WATER, EC_WORD_SHOPPING},
- .monSets = gBattleFrontierTrainerMons_Trenton
+ .monSet = gBattleFrontierTrainerMons_Trenton
},
- [58] = {
+ [FRONTIER_TRAINER_JENSON] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("JENSON"),
.speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_DOWNCAST},
.speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_DON_T, EC_WORD_MAKE, EC_WORD_THE, EC_MOVE(CUT)},
.speechLose = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_TRAINER, EC_WORD_WHO_IS, EC_WORD_FEELING, EC_WORD_DOWNCAST},
- .monSets = gBattleFrontierTrainerMons_Jenson
+ .monSet = gBattleFrontierTrainerMons_Jenson
},
- [59] = {
+ [FRONTIER_TRAINER_WESLEY] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("WESLEY"),
.speechBefore = {EC_POKEMON2(MEW), EC_POKEMON2(MEW), EC_WORD_IS, EC_WORD_HOW, EC_WORD_I, EC_WORD_CRY},
.speechWin = {EC_WORD_YES, EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_EXCL},
.speechLose = {EC_POKEMON2(MEW), EC_POKEMON2(MEW), EC_WORD_EXCL, EC_POKEMON2(MEW), EC_WORD_EXCL_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Wesley
+ .monSet = gBattleFrontierTrainerMons_Wesley
},
- [60] = {
+ [FRONTIER_TRAINER_ANTON] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("ANTON"),
.speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_ME, EC_WORD_TO, EC_MOVE(THRASH)},
.speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_WORD_SORRY, EC_WORD_ABOUT, EC_WORD_THAT, EC_WORD_EXCL},
.speechLose = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_TOUGH, EC_WORD_LOSS, EC_WORD_TO, EC_MOVE2(SWALLOW)},
- .monSets = gBattleFrontierTrainerMons_Anton
+ .monSet = gBattleFrontierTrainerMons_Anton
},
- [61] = {
+ [FRONTIER_TRAINER_LAWSON] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("LAWSON"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AT, EC_WORD_HEART, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_NOT, EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_NOT, EC_WORD_AT, EC_WORD_ALL},
.speechLose = {EC_WORD_I_AM, EC_WORD_OLD, EC_WORD_AND, EC_WORD_FEELING, EC_WORD_SHAKY, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Lawson
+ .monSet = gBattleFrontierTrainerMons_Lawson
},
- [62] = {
+ [FRONTIER_TRAINER_SAMMY] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("SAMMY"),
.speechBefore = {EC_WORD_MY, EC_WORD_PARTY, EC_WORD_IS, EC_WORD_READY, EC_WORD_TO, EC_WORD_ROCK},
.speechWin = {EC_WORD_MY, EC_WORD_PARTY, EC_WORD_IS, EC_WORD_JUST, EC_WORD_INCREDIBLE, EC_WORD_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_CRY, EC_WORD_FOR, EC_WORD_MY, EC_WORD_PARTY, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Sammy
+ .monSet = gBattleFrontierTrainerMons_Sammy
},
- [63] = {
+ [FRONTIER_TRAINER_ARNIE] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("ARNIE"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_I, EC_WORD_HAVE, EC_WORD_NO, EC_WORD_RIVAL},
.speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE},
.speechLose = {EC_WORD_NO, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WON_T, EC_WORD_ACCEPT, EC_WORD_THIS},
- .monSets = gBattleFrontierTrainerMons_Arnie
+ .monSet = gBattleFrontierTrainerMons_Arnie
},
- [64] = {
+ [FRONTIER_TRAINER_ADRIAN] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("ADRIAN"),
.speechBefore = {EC_WORD_YAHOO, EC_WORD_EXCL, 0xFFFF, EC_WORD_YAHOO, EC_WORD_EXCL_EXCL, 0xFFFF},
.speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, 0xFFFF},
.speechLose = {EC_WORD_GOOD_BYE, EC_WORD_EXCL, 0xFFFF, EC_WORD_GOOD_BYE, EC_WORD_EXCL_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Adrian
+ .monSet = gBattleFrontierTrainerMons_Adrian
},
- [65] = {
+ [FRONTIER_TRAINER_TRISTAN] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("TRISTAN"),
.speechBefore = {EC_WORD_CONFUSED, EC_WORD_QUES, 0xFFFF, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS},
.speechWin = {EC_WORD_SEE, EC_WORD_QUES, 0xFFFF, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS},
.speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_IN, EC_WORD_BATTLE},
- .monSets = gBattleFrontierTrainerMons_Tristan
+ .monSet = gBattleFrontierTrainerMons_Tristan
},
- [66] = {
+ [FRONTIER_TRAINER_JULIANA] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("JULIANA"),
.speechBefore = {EC_WORD_I, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_SHOPPING, EC_WORD_TOO, EC_WORD_MUCH},
.speechWin = {EC_WORD_BUT, EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_PLUSH_DOLL},
.speechLose = {EC_WORD_I, EC_WORD_SO, EC_WORD_WANT, EC_WORD_ANOTHER, EC_WORD_POKEMON, EC_WORD_PLUSH_DOLL},
- .monSets = gBattleFrontierTrainerMons_Juliana
+ .monSet = gBattleFrontierTrainerMons_Juliana
},
- [67] = {
+ [FRONTIER_TRAINER_RYLEE] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("RYLEE"),
.speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GUTS},
.speechWin = {EC_WORD_BYE_BYE, EC_WORD_EXCL, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_NO, EC_WORD_GUTS},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_GUTSY, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_QUITE, EC_WORD_SUPER},
- .monSets = gBattleFrontierTrainerMons_Rylee
+ .monSet = gBattleFrontierTrainerMons_Rylee
},
- [68] = {
+ [FRONTIER_TRAINER_CHELSEA] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("CHELSEA"),
.speechBefore = {EC_WORD_I, EC_WORD_SERIOUSLY, EC_WORD_MEAN, EC_WORD_TO, EC_WORD_WIN, EC_WORD_EXCL},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_WORD_WILL, EC_WORD_TO, EC_WORD_WIN, 0xFFFF},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_FAR, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Chelsea
+ .monSet = gBattleFrontierTrainerMons_Chelsea
},
- [69] = {
+ [FRONTIER_TRAINER_DANELA] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("DANELA"),
.speechBefore = {EC_WORD_YOU, EC_WORD_MUST_BE, EC_WORD_MY, EC_WORD_OPPONENT, EC_WORD_NOW, EC_WORD_EXCL},
.speechWin = {EC_WORD_OH_DEAR, EC_WORD_TOO_WEAK, EC_WORD_EXCL, EC_WORD_DON_T, EC_WORD_GIVE_UP, EC_WORD_EXCL},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_GOOD, EC_WORD_AND, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE},
- .monSets = gBattleFrontierTrainerMons_Danela
+ .monSet = gBattleFrontierTrainerMons_Danela
},
- [70] = {
+ [FRONTIER_TRAINER_LIZBETH] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("LIZBETH"),
.speechBefore = {EC_WORD_IF_I_LOSE, EC_WORD_YOU, EC_WORD_CAN, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(PRESENT)},
.speechWin = {EC_WORD_HERE_IT_IS, EC_WORD_A_LITTLE, EC_WORD_PRAISE, EC_WORD_AS, EC_WORD_YOUR, EC_MOVE2(PRESENT)},
.speechLose = {EC_WORD_YOUR, EC_MOVE2(PRESENT), EC_WORD_QUES_EXCL, EC_WORD_HERE_IT_IS, EC_WORD_A, EC_MOVE(DOUBLE_SLAP)},
- .monSets = gBattleFrontierTrainerMons_Lizbeth
+ .monSet = gBattleFrontierTrainerMons_Lizbeth
},
- [71] = {
+ [FRONTIER_TRAINER_AMELIA] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("AMELIA"),
.speechBefore = {EC_WORD_I, EC_WORD_BELIEVE, EC_WORD_IN, EC_WORD_CUTE, EC_WORD_FASHION, EC_WORD_APPEAL},
.speechWin = {EC_WORD_YOUR, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_A, EC_WORD_DISASTER},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_AWFUL, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_HOME},
- .monSets = gBattleFrontierTrainerMons_Amelia
+ .monSet = gBattleFrontierTrainerMons_Amelia
},
- [72] = {
+ [FRONTIER_TRAINER_JILLIAN] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("JILLIAN"),
.speechBefore = {EC_WORD_WHAT, EC_WORD_IS, EC_WORD_THAT, EC_WORD_I, EC_WORD_SMELL, EC_WORD_QUES},
.speechWin = {EC_WORD_IT_S, EC_WORD_THE, EC_MOVE(SWEET_SCENT), EC_WORD_OF, EC_WORD_TASTY, EC_WORD_WATER},
.speechLose = {EC_WORD_IT_S, EC_WORD_YOUR, EC_WORD_OFFENSIVE, EC_WORD_STENCH, EC_WORD_THAT_S, EC_WORD_WHAT},
- .monSets = gBattleFrontierTrainerMons_Jillian
+ .monSet = gBattleFrontierTrainerMons_Jillian
},
- [73] = {
+ [FRONTIER_TRAINER_ABBIE] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("ABBIE"),
.speechBefore = {EC_WORD_YOU, EC_WORD_TRY, EC_WORD_MY, EC_WORD_SECRET, EC_MOVE(AROMATHERAPY), EC_WORD_OK_QUES},
.speechWin = {EC_WORD_MY, EC_MOVE(AROMATHERAPY), EC_WORD_IS, EC_WORD_TERRIBLE, EC_WORD_FOR, EC_WORD_YOU},
.speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SMELL, EC_WORD_A, EC_WORD_THING, EC_WORD_QUES_EXCL},
- .monSets = gBattleFrontierTrainerMons_Abbie
+ .monSet = gBattleFrontierTrainerMons_Abbie
},
- [74] = {
+ [FRONTIER_TRAINER_BRIANA] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("BRIANA"),
.speechBefore = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_WORKS, EC_WORD_TOO, EC_WORD_MUCH},
.speechWin = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_MISS, EC_WORD_HIM, EC_WORD_MORE, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_LONESOME, EC_WORD_WITHOUT, EC_WORD_HIM, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Briana
+ .monSet = gBattleFrontierTrainerMons_Briana
},
- [75] = {
+ [FRONTIER_TRAINER_ANTONIO] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("ANTONIO"),
.speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_TO, EC_WORD_GO, EC_WORD_GO},
.speechWin = {EC_WORD_BUT, EC_WORD_I, EC_WORD_DON_T, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_DANCE},
.speechLose = {EC_WORD_GO, EC_WORD_GO, EC_WORD_ELLIPSIS, EC_WORD_JUST, EC_MOVE(FLAIL), EC_WORD_ABOUT},
- .monSets = gBattleFrontierTrainerMons_Antonio
+ .monSet = gBattleFrontierTrainerMons_Antonio
},
- [76] = {
+ [FRONTIER_TRAINER_JADEN] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("JADEN"),
.speechBefore = {EC_WORD_HELLO, EC_WORD_I, EC_WORD_THINK, EC_WORD_I, EC_WORD_ADORE, EC_WORD_YOU},
.speechWin = {EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_ME, EC_MOVE(THRASH), EC_WORD_IN, EC_MOVE2(FRUSTRATION)},
.speechLose = {EC_WORD_THIS_IS_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_GOOD_BYE, EC_WORD_FOREVER, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Jaden
+ .monSet = gBattleFrontierTrainerMons_Jaden
},
- [77] = {
+ [FRONTIER_TRAINER_DAKOTA] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("DAKOTA"),
.speechBefore = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_DANCE, EC_WORD_WITH, EC_WORD_POWER},
.speechWin = {EC_WORD_GOT, EC_WORD_IT, EC_WORD_QUES, EC_WORD_DANCE, EC_WORD_WITH, EC_WORD_POWER},
.speechLose = {EC_WORD_OKAY, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_ALL_RIGHT, EC_WORD_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Dakota
+ .monSet = gBattleFrontierTrainerMons_Dakota
},
- [78] = {
+ [FRONTIER_TRAINER_BRAYDEN] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("BRAYDEN"),
.speechBefore = {EC_WORD_COLOR_CHANGE, EC_WORD_VERSION, EC_WORD_TOYS, EC_WORD_ARE, EC_WORD_USELESS, EC_WORD_EXCL},
.speechWin = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_COLLECT, EC_WORD_NORMAL, EC_WORD_VERSION, EC_WORD_TOYS},
.speechLose = {EC_WORD_I, EC_MOVE2(ATTRACT), EC_WORD_COLOR_CHANGE, EC_WORD_VERSION, EC_WORD_TOYS, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Brayden
+ .monSet = gBattleFrontierTrainerMons_Brayden
},
- [79] = {
+ [FRONTIER_TRAINER_CORSON] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("CORSON"),
.speechBefore = {EC_WORD_I, EC_WORD_GET, EC_WORD_TO, EC_MOVE2(BEAT_UP), EC_WORD_ON, EC_WORD_YOU},
.speechWin = {EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_COOL},
.speechLose = {EC_WORD_WHY, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_I, EC_MOVE2(CURSE), EC_WORD_YOU},
- .monSets = gBattleFrontierTrainerMons_Corson
+ .monSet = gBattleFrontierTrainerMons_Corson
},
- [80] = {
+ [FRONTIER_TRAINER_TREVIN] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("TREVIN"),
.speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NONE, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_ME},
.speechWin = {EC_WORD_YES_SIR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_I_AM, EC_WORD_THE, EC_WORD_BEST},
.speechLose = {EC_WORD_SERIOUS, EC_WORD_QUES_EXCL, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Trevin
+ .monSet = gBattleFrontierTrainerMons_Trevin
},
- [81] = {
+ [FRONTIER_TRAINER_PATRICK] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("PATRICK"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_EXCL, EC_WORD_GIVE_UP, EC_WORD_NOW, 0xFFFF},
.speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_DISAPPOINTED, EC_WORD_I_AM, EC_WORD_PERFECT, 0xFFFF},
.speechLose = {EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Patrick
+ .monSet = gBattleFrontierTrainerMons_Patrick
},
- [82] = {
+ [FRONTIER_TRAINER_KADEN] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("KADEN"),
.speechBefore = {EC_WORD_WHAT, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_UP, EC_WORD_TO, EC_WORD_QUES},
.speechWin = {EC_WORD_YOU, EC_WORD_WERE, EC_WORD_A, EC_WORD_SURPRISE, EC_WORD_TO_ME, EC_WORD_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_WHO, EC_WORD_I_AM, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Kaden
+ .monSet = gBattleFrontierTrainerMons_Kaden
},
- [83] = {
+ [FRONTIER_TRAINER_MAXWELL] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("MAXWELL"),
.speechBefore = {EC_WORD_HEY_THERE, EC_WORD_WHO_IS, EC_WORD_YOUR, EC_WORD_RIVAL, EC_WORD_QUES, 0xFFFF},
.speechWin = {EC_WORD_MY, EC_WORD_RIVAL, EC_WORD_IS, EC_WORD_MY, EC_WORD_GIRL, EC_WORD_FRIEND},
.speechLose = {EC_WORD_I_AM, EC_WORD_MAKING, EC_WORD_YOU, EC_WORD_MY, EC_WORD_RIVAL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Maxwell
+ .monSet = gBattleFrontierTrainerMons_Maxwell
},
- [84] = {
+ [FRONTIER_TRAINER_DARYL] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("DARYL"),
.speechBefore = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_TO, EC_MOVE(CHARGE)},
.speechWin = {EC_WORD_AM, EC_WORD_I, EC_WORD_OVERWHELMING, EC_WORD_OR, EC_WORD_WHAT, EC_WORD_QUES},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_A, EC_WORD_LEGEND, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Daryl
+ .monSet = gBattleFrontierTrainerMons_Daryl
},
- [85] = {
+ [FRONTIER_TRAINER_KENNETH] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("KENNETH"),
.speechBefore = {EC_WORD_YOU, EC_WORD_BETTER, EC_WORD_NOT, EC_MOVE2(SLACK_OFF), EC_WORD_WITH, EC_WORD_ME},
.speechWin = {EC_WORD_DID, EC_WORD_MY, EC_MOVE2(TAUNT), EC_WORD_INTIMIDATE, EC_WORD_YOU, EC_WORD_QUES},
.speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Kenneth
+ .monSet = gBattleFrontierTrainerMons_Kenneth
},
- [86] = {
+ [FRONTIER_TRAINER_RICH] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("RICH"),
.speechBefore = {EC_WORD_YOUR, EC_MOVE(FACADE), EC_WORD_DOESN_T, EC_MOVE2(TRICK), EC_WORD_ME, 0xFFFF},
.speechWin = {EC_WORD_SERIOUSLY, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_OK_QUES, 0xFFFF},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_REALLY, EC_WORD_TOUGH, EC_WORD_ON, EC_WORD_ME, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Rich
+ .monSet = gBattleFrontierTrainerMons_Rich
},
- [87] = {
+ [FRONTIER_TRAINER_CADEN] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("CADEN"),
.speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_DEFEATED, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_FIRE, EC_WORD_EXCL, 0xFFFF, EC_WORD_FIRE, EC_WORD_EXCL_EXCL, 0xFFFF},
.speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_SO, EC_WORD_HOT},
- .monSets = gBattleFrontierTrainerMons_Caden
+ .monSet = gBattleFrontierTrainerMons_Caden
},
- [88] = {
+ [FRONTIER_TRAINER_MARLON] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("MARLON"),
.speechBefore = {EC_WORD_A, EC_WORD_POKEDEX, EC_WORD_IS, EC_WORD_A_LITTLE, EC_WORD_RADIO, EC_WORD_QUES},
.speechWin = {EC_WORD_A_LITTLE, EC_WORD_RADIO, EC_WORD_HUH_QUES, EC_WORD_THAT_S, EC_WORD_TOTALLY, EC_WORD_COOL},
.speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_QUES, EC_WORD_IS, EC_WORD_POKENAV, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Marlon
+ .monSet = gBattleFrontierTrainerMons_Marlon
},
- [89] = {
+ [FRONTIER_TRAINER_NASH] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("NASH"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_BABY, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_I, EC_WORD_LEFT, EC_WORD_YOU, EC_WORD_JUST, EC_WORD_AN, EC_MOVE2(EMBER)},
.speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_WATER, EC_WORD_PLEASE},
- .monSets = gBattleFrontierTrainerMons_Nash
+ .monSet = gBattleFrontierTrainerMons_Nash
},
- [90] = {
+ [FRONTIER_TRAINER_ROBBY] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.trainerName = _("ROBBY"),
.speechBefore = {EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_HAPPY, EC_WORD_TO, EC_WORD_MEET_YOU, EC_WORD_EXCL},
.speechWin = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_LEADER, EC_WORD_WITH, EC_WORD_REFRESHING, EC_WORD_SERENE_GRACE},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(THRASH), EC_WORD_MY, EC_WORD_TOYS, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Robby
+ .monSet = gBattleFrontierTrainerMons_Robby
},
- [91] = {
+ [FRONTIER_TRAINER_REECE] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.trainerName = _("REECE"),
.speechBefore = {EC_WORD_MY, EC_MOVE2(QUICK_ATTACK), EC_WORD_CAN, EC_WORD_BEAT, EC_WORD_A, EC_MOVE2(TELEPORT)},
.speechWin = {EC_WORD_LIKE, EC_WORD_I, EC_WORD_SAID, EC_WORD_I_AM, EC_WORD_DARN, EC_WORD_FAST},
.speechLose = {EC_WORD_I_WAS, EC_WORD_KIDDING, EC_WORD_ABOUT, EC_WORD_THAT, EC_MOVE2(TELEPORT), EC_WORD_THING},
- .monSets = gBattleFrontierTrainerMons_Reece
+ .monSet = gBattleFrontierTrainerMons_Reece
},
- [92] = {
+ [FRONTIER_TRAINER_KATHRYN] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
.trainerName = _("KATHRYN"),
.speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_TRAIN, EC_WORD_GOOD, EC_WORD_ENOUGH, EC_WORD_QUES},
.speechWin = {EC_WORD_DON_T, EC_MOVE2(TAUNT), EC_WORD_ME, EC_WORD_LIKE, EC_WORD_THAT, EC_WORD_OK_QUES},
.speechLose = {EC_WORD_WHY, EC_WORD_COULDN_T, EC_WORD_I, EC_WORD_WIN, EC_WORD_THIS, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Kathryn
+ .monSet = gBattleFrontierTrainerMons_Kathryn
},
- [93] = {
+ [FRONTIER_TRAINER_ELLEN] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
.trainerName = _("ELLEN"),
.speechBefore = {EC_WORD_CRUSH, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_EGG, EC_WORD_EXCL},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_A, EC_WORD_TASTY, EC_WORD_VICTORY, EC_WORD_FOR, EC_WORD_ME},
.speechLose = {EC_WORD_TOO, EC_WORD_TOUGH, EC_WORD_TO, EC_WORD_CRUSH, EC_WORD_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Ellen
+ .monSet = gBattleFrontierTrainerMons_Ellen
},
- [94] = {
+ [FRONTIER_TRAINER_RAMON] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
.trainerName = _("RAMON"),
.speechBefore = {EC_WORD_OKAY, EC_WORD_EXCL, 0xFFFF, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PERFECTION},
.speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_THAT, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
.speechLose = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_SECRET, EC_WORD_WHY, EC_WORD_I_AM, EC_WORD_HAPPY},
- .monSets = gBattleFrontierTrainerMons_Ramon
+ .monSet = gBattleFrontierTrainerMons_Ramon
},
- [95] = {
+ [FRONTIER_TRAINER_ARTHUR] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
.trainerName = _("ARTHUR"),
.speechBefore = {EC_WORD_HERE_I_COME, EC_WORD_FEELING, EC_WORD_READY, EC_WORD_FOR, EC_WORD_IT, EC_WORD_ALL},
.speechWin = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_THAT_WAS, EC_WORD_FABULOUS, EC_WORD_EXCL},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_WHAT, EC_WORD_I, EC_WORD_NEED, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Arthur
+ .monSet = gBattleFrontierTrainerMons_Arthur
},
- [96] = {
+ [FRONTIER_TRAINER_ALONDRA] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
.trainerName = _("ALONDRA"),
.speechBefore = {EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_IS, EC_WORD_A, EC_WORD_GREAT, EC_WORD_DAY},
.speechWin = {EC_WORD_MY, EC_MOVE2(DIVE), EC_WORD_WILL, EC_WORD_BE, EC_WORD_A, EC_WORD_LEGEND},
.speechLose = {EC_WORD_MY, EC_MOVE2(DIVE), EC_WORD_LEFT, EC_WORD_ME, EC_WORD_COLD, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Alondra
+ .monSet = gBattleFrontierTrainerMons_Alondra
},
- [97] = {
+ [FRONTIER_TRAINER_ADRIANA] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
.trainerName = _("ADRIANA"),
.speechBefore = {EC_WORD_COME, EC_WORD_SEE, EC_WORD_AN, EC_WORD_INCREDIBLE, EC_WORD_SWIFT_SWIM, EC_WORD_EXCL},
.speechWin = {EC_WORD_I, EC_WORD_MAKE, EC_WORD_IT, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_EASY},
.speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_TIRED, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Adriana
+ .monSet = gBattleFrontierTrainerMons_Adriana
},
- [98] = {
+ [FRONTIER_TRAINER_MALIK] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
.trainerName = _("MALIK"),
.speechBefore = {EC_WORD_OH, EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_PLEASE, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_WON, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_TIRED},
.speechLose = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_LOST, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_TIRED},
- .monSets = gBattleFrontierTrainerMons_Malik
+ .monSet = gBattleFrontierTrainerMons_Malik
},
- [99] = {
+ [FRONTIER_TRAINER_JILL] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
.trainerName = _("JILL"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_WINS, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_GIVES, EC_WORD_UP, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Jill
+ .monSet = gBattleFrontierTrainerMons_Jill
},
- [100] = {
+ [FRONTIER_TRAINER_ERIK] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.trainerName = _("ERIK"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_THANK_YOU, EC_WORD_FROM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL},
.speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL},
- .monSets = gBattleFrontierTrainerMons_Erik
+ .monSet = gBattleFrontierTrainerMons_Erik
},
- [101] = {
+ [FRONTIER_TRAINER_YAZMIN] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
.trainerName = _("YAZMIN"),
.speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_RATHER, EC_WORD_RUN, EC_WORD_THAN, EC_WORD_BIKE},
.speechWin = {EC_WORD_YES, EC_WORD_I, EC_WORD_WOULD, EC_WORD_MUCH, EC_WORD_RATHER, EC_WORD_RUN},
.speechLose = {EC_WORD_BYE_BYE, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_RUN_AWAY},
- .monSets = gBattleFrontierTrainerMons_Yazmin
+ .monSet = gBattleFrontierTrainerMons_Yazmin
},
- [102] = {
+ [FRONTIER_TRAINER_JAMAL] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
.trainerName = _("JAMAL"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_A, EC_WORD_FATHER},
.speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_FOR, EC_WORD_MY, EC_WORD_BABY},
.speechLose = {EC_WORD_MY, EC_WORD_BABY, EC_WORD_WILL, EC_WORD_BE, EC_WORD_TOTALLY, EC_WORD_AWESOME},
- .monSets = gBattleFrontierTrainerMons_Jamal
+ .monSet = gBattleFrontierTrainerMons_Jamal
},
- [103] = {
+ [FRONTIER_TRAINER_LESLIE] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
.trainerName = _("LESLIE"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_A, EC_WORD_MOTHER},
.speechWin = {EC_WORD_A, EC_WORD_BABY, EC_WORD_WILL, EC_WORD_BE, EC_WORD_A_LITTLE, EC_WORD_CHALLENGE},
.speechLose = {EC_WORD_I_AM, EC_WORD_TOO, EC_WORD_HAPPY, EC_WORD_TO, EC_WORD_BE, EC_WORD_ANGRY},
- .monSets = gBattleFrontierTrainerMons_Leslie
+ .monSet = gBattleFrontierTrainerMons_Leslie
},
- [104] = {
+ [FRONTIER_TRAINER_DAVE] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
.trainerName = _("DAVE"),
.speechBefore = {EC_WORD_WHAT, EC_WORD_SHOULD, EC_WORD_I, EC_WORD_DO, EC_WORD_TODAY, EC_WORD_QUES},
.speechWin = {EC_WORD_I, EC_WORD_SHOULD, EC_WORD_ENJOY, EC_WORD_SOME, EC_WORD_SPORTS, EC_WORD_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_WORD_PLAY, EC_WORD_A, EC_WORD_GAME},
- .monSets = gBattleFrontierTrainerMons_Dave
+ .monSet = gBattleFrontierTrainerMons_Dave
},
- [105] = {
+ [FRONTIER_TRAINER_CARLO] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
.trainerName = _("CARLO"),
.speechBefore = {EC_WORD_HAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF},
.speechWin = {EC_WORD_I, EC_WORD_DO, EC_WORD_THINGS, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_LOST, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Carlo
+ .monSet = gBattleFrontierTrainerMons_Carlo
},
- [106] = {
+ [FRONTIER_TRAINER_EMILIA] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
.trainerName = _("EMILIA"),
.speechBefore = {EC_WORD_ME, EC_WORD_WORRY, EC_WORD_QUES, EC_WORD_I, EC_WORD_HAVE, EC_WORD_NONE},
.speechWin = {EC_WORD_AHAHA, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_THAT_WAS, EC_WORD_FANTASTIC, EC_WORD_EXCL},
.speechLose = {EC_WORD_AHAHA, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_THAT_WAS, EC_WORD_ENTERTAINING, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Emilia
+ .monSet = gBattleFrontierTrainerMons_Emilia
},
- [107] = {
+ [FRONTIER_TRAINER_DALIA] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
.trainerName = _("DALIA"),
.speechBefore = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_VERY, EC_WORD_EXPENSIVE, 0xFFFF},
.speechWin = {EC_WORD_DON_T, EC_WORD_COME, EC_WORD_NEAR, EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL},
.speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_MY, EC_WORD_BEST, EC_WORD_FRIEND},
- .monSets = gBattleFrontierTrainerMons_Dalia
+ .monSet = gBattleFrontierTrainerMons_Dalia
},
- [108] = {
+ [FRONTIER_TRAINER_HITOMI] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("HITOMI"),
.speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_HAH, EC_WORD_EXCL_EXCL, 0xFFFF},
.speechWin = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL},
.speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_EXCL_EXCL},
- .monSets = gBattleFrontierTrainerMons_Hitomi
+ .monSet = gBattleFrontierTrainerMons_Hitomi
},
- [109] = {
+ [FRONTIER_TRAINER_RICARDO] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("RICARDO"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_EXCL, EC_WORD_PLAY, EC_WORD_TIME, EC_WORD_IS, EC_WORD_OVER},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_OUT, EC_WORD_OF, EC_WORD_HERE, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_HIT, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Ricardo
+ .monSet = gBattleFrontierTrainerMons_Ricardo
},
- [110] = {
+ [FRONTIER_TRAINER_SHIZUKA] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("SHIZUKA"),
.speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU_RE, EC_WORD_SERIOUS, EC_WORD_EXCL},
.speechWin = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_FORGET, EC_WORD_ABOUT, EC_WORD_YOU, 0xFFFF},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_PERFECT, EC_WORD_IN, EC_WORD_EVERY, EC_WORD_WAY, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Shizuka
+ .monSet = gBattleFrontierTrainerMons_Shizuka
},
- [111] = {
+ [FRONTIER_TRAINER_JOANA] = {
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("JOANA"),
.speechBefore = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_LOSE, EC_WORD_RIGHT, EC_WORD_AWAY},
.speechWin = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_WINNER, EC_WORD_HEAR, EC_WORD_ME, EC_MOVE2(ROAR)},
.speechLose = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_ACCEPT, EC_WORD_THAT, EC_MOVE(OUTRAGE)},
- .monSets = gBattleFrontierTrainerMons_Joana
+ .monSet = gBattleFrontierTrainerMons_Joana
},
- [112] = {
+ [FRONTIER_TRAINER_KELLY] = {
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("KELLY"),
.speechBefore = {EC_WORD_MY, EC_WORD_NIGHT, EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_REALLY, EC_WORD_SCARY},
.speechWin = {EC_WORD_A, EC_WORD_LADY, EC_WORD_GHOST, EC_WORD_APPEARS, EC_WORD_THERE, 0xFFFF},
.speechLose = {EC_WORD_THE, EC_WORD_HOME, EC_WORD_WORK, EC_WORD_IS, EC_WORD_AWFULLY, EC_WORD_SCARY},
- .monSets = gBattleFrontierTrainerMons_Kelly
+ .monSet = gBattleFrontierTrainerMons_Kelly
},
- [113] = {
+ [FRONTIER_TRAINER_RAYNA] = {
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("RAYNA"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_WHEN, EC_WORD_IT_S, EC_WORD_ABOUT, EC_WORD_POWER},
.speechWin = {EC_WORD_UNDERSTAND, EC_WORD_MY, EC_WORD_POWER, EC_WORD_NOW, EC_WORD_QUES, 0xFFFF},
.speechLose = {EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Rayna
+ .monSet = gBattleFrontierTrainerMons_Rayna
},
- [114] = {
+ [FRONTIER_TRAINER_EVAN] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("EVAN"),
.speechBefore = {EC_WORD_EVERY, EC_WORD_BATTLE, EC_WORD_HAS, EC_WORD_A, EC_WORD_SMELL, 0xFFFF},
.speechWin = {EC_WORD_OH, EC_WORD_EXCL, EC_WORD_THE, EC_MOVE(SWEET_SCENT), EC_WORD_OF, EC_WORD_VICTORY},
.speechLose = {EC_WORD_THE, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_OF, EC_WORD_A, EC_WORD_LOSS},
- .monSets = gBattleFrontierTrainerMons_Evan
+ .monSet = gBattleFrontierTrainerMons_Evan
},
- [115] = {
+ [FRONTIER_TRAINER_JORDAN] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("JORDAN"),
.speechBefore = {EC_WORD_GOOD, EC_WORD_EXCL, 0xFFFF, EC_WORD_COME_ON, EC_WORD_EXCL_EXCL, 0xFFFF},
.speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Jordan
+ .monSet = gBattleFrontierTrainerMons_Jordan
},
- [116] = {
+ [FRONTIER_TRAINER_JOEL] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("JOEL"),
.speechBefore = {EC_WORD_FUFUFU, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
.speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
.speechLose = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Joel
+ .monSet = gBattleFrontierTrainerMons_Joel
},
- [117] = {
+ [FRONTIER_TRAINER_KRISTEN] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("KRISTEN"),
.speechBefore = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_A, EC_WORD_KID, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_JUST, EC_WORD_A_LITTLE, EC_WORD_KID, EC_WORD_AFTER, EC_WORD_ALL, EC_WORD_EXCL},
.speechLose = {EC_WORD_A, EC_WORD_TOUGH, EC_WORD_KID, EC_WORD_HUH_QUES, EC_WORD_HUMPH, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Kristen
+ .monSet = gBattleFrontierTrainerMons_Kristen
},
- [118] = {
+ [FRONTIER_TRAINER_SELPHY] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("SELPHY"),
.speechBefore = {EC_WORD_HUH_QUES, EC_WORD_WHAT, EC_WORD_IS_IT_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
.speechWin = {EC_WORD_OH, EC_WORD_YES, EC_WORD_EXCL, EC_WORD_WHY, EC_WORD_NOT, EC_WORD_QUES},
.speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_EXCL, EC_WORD_WHY, EC_WORD_NOT, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Selphy
+ .monSet = gBattleFrontierTrainerMons_Selphy
},
- [119] = {
+ [FRONTIER_TRAINER_CHLOE] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("CHLOE"),
.speechBefore = {EC_WORD_COME, EC_WORD_WE, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BATTLE, EC_WORD_NOW},
.speechWin = {EC_WORD_MORE, EC_WORD_EXCL, 0xFFFF, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_EXCL},
.speechLose = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_STRONG, EC_WORD_YOU, EC_WORD_ARE},
- .monSets = gBattleFrontierTrainerMons_Chloe
+ .monSet = gBattleFrontierTrainerMons_Chloe
},
- [120] = {
+ [FRONTIER_TRAINER_NORTON] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("NORTON"),
.speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_ONLY, EC_WORD_YOU, 0xFFFF, 0xFFFF},
.speechWin = {EC_WORD_EXCUSE_ME, EC_WORD_BUT, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_PUSHOVER, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_SOME, EC_WORD_KIND, EC_WORD_OF, EC_WORD_AWESOME, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Norton
+ .monSet = gBattleFrontierTrainerMons_Norton
},
- [121] = {
+ [FRONTIER_TRAINER_LUKAS] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("LUKAS"),
.speechBefore = {EC_WORD_MY, EC_WORD_JOKING, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_EXISTS, EC_WORD_TO, EC_WORD_SHINE, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_COME, EC_WORD_TO, EC_WORD_SHINE, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Lukas
+ .monSet = gBattleFrontierTrainerMons_Lukas
},
- [122] = {
+ [FRONTIER_TRAINER_ZACH] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("ZACH"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_EXCELLENT, EC_MOVE2(MIMIC), EC_WORD_OF, EC_WORD_POKEMON},
.speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_LIKE, EC_WORD_A_LITTLE, EC_POKEMON2(TOGEPI), EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_LIKE, EC_WORD_A, EC_POKEMON2(MANKEY), EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Zach
+ .monSet = gBattleFrontierTrainerMons_Zach
},
- [123] = {
+ [FRONTIER_TRAINER_KAITLYN] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_F,
.trainerName = _("KAITLYN"),
.speechBefore = {EC_WORD_I, EC_WORD_CRUSH, EC_WORD_THINGS, EC_WORD_WITH, EC_WORD_PSYCHIC, EC_WORD_POWER},
.speechWin = {EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_THE, EC_WORD_NEWS},
.speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THIS, EC_WORD_WON_T, EC_WORD_DO},
- .monSets = gBattleFrontierTrainerMons_Kaitlyn
+ .monSet = gBattleFrontierTrainerMons_Kaitlyn
},
- [124] = {
+ [FRONTIER_TRAINER_BREANNA] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_F,
.trainerName = _("BREANNA"),
.speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_WILL, EC_WORD_CRUSH, EC_WORD_YOU, EC_WORD_EXCL},
.speechWin = {EC_WORD_HAVE, EC_WORD_SOME, EC_WORD_MORE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GUTS, EC_WORD_AND, EC_WORD_SKILL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Breanna
+ .monSet = gBattleFrontierTrainerMons_Breanna
},
- [125] = {
+ [FRONTIER_TRAINER_KENDRA] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_F,
.trainerName = _("KENDRA"),
.speechBefore = {EC_WORD_IF, EC_WORD_YOU_RE, EC_WORD_SMART, EC_WORD_STOP, EC_WORD_RIGHT, EC_WORD_NOW},
.speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_STOP},
.speechLose = {EC_WORD_WHY, EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_STOP, EC_WORD_QUES, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Kendra
+ .monSet = gBattleFrontierTrainerMons_Kendra
},
- [126] = {
+ [FRONTIER_TRAINER_MOLLY] = {
.facilityClass = FACILITY_CLASS_HEX_MANIAC,
.trainerName = _("MOLLY"),
.speechBefore = {EC_WORD_WILL, EC_WORD_MY, EC_WORD_CUTE_CHARM, EC_MOVE2(ATTRACT), EC_WORD_YOU, EC_WORD_QUES},
.speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_MY, EC_WORD_TOYS, EC_WORD_NOW},
.speechLose = {EC_WORD_OH, EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Molly
+ .monSet = gBattleFrontierTrainerMons_Molly
},
- [127] = {
+ [FRONTIER_TRAINER_JAZMIN] = {
.facilityClass = FACILITY_CLASS_HEX_MANIAC,
.trainerName = _("JAZMIN"),
.speechBefore = {EC_WORD_I, EC_WORD_FORECAST, EC_WORD_TERRIBLE, EC_WORD_THINGS, EC_WORD_FOR, EC_WORD_YOU},
.speechWin = {EC_WORD_THERE, EC_WORD_WASN_T, EC_WORD_MY, EC_WORD_FORECAST, EC_WORD_RIGHT, EC_WORD_QUES},
.speechLose = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_DIDN_T, EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THIS},
- .monSets = gBattleFrontierTrainerMons_Jazmin
+ .monSet = gBattleFrontierTrainerMons_Jazmin
},
- [128] = {
+ [FRONTIER_TRAINER_KELSEY] = {
.facilityClass = FACILITY_CLASS_HEX_MANIAC,
.trainerName = _("KELSEY"),
.speechBefore = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_SLEPT, EC_WORD_IN, EC_WORD_DAYS, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_MY, EC_WORD_SLEEP, EC_WORD_WILL, EC_WORD_BE, EC_WORD_EXCELLENT, EC_WORD_NOW},
.speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_DESTROYED, EC_WORD_MY, EC_WORD_SLEEP, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Kelsey
+ .monSet = gBattleFrontierTrainerMons_Kelsey
},
- [129] = {
+ [FRONTIER_TRAINER_JALEN] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("JALEN"),
.speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_ALLOW, EC_WORD_POKEMON, EC_WORD_TO, EC_MOVE(THRASH)},
.speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_ANGRY, EC_WORD_QUES},
.speechLose = {EC_WORD_WHY, EC_WORD_IS, EC_WORD_THIS, EC_WORD_SO, EC_WORD_HARD, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Jalen
+ .monSet = gBattleFrontierTrainerMons_Jalen
},
- [130] = {
+ [FRONTIER_TRAINER_GRIFFEN] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("GRIFFEN"),
.speechBefore = {EC_WORD_I, EC_MOVE2(SWALLOW), EC_MOVE2(SLUDGE), EC_WORD_TO, EC_MOVE2(TRANSFORM), EC_WORD_MYSELF},
.speechWin = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GROWTH), EC_WORD_OF, EC_MOVE2(ACID_ARMOR)},
.speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GROWTH), EC_WORD_OF, EC_WORD_SUCTION_CUPS},
- .monSets = gBattleFrontierTrainerMons_Griffen
+ .monSet = gBattleFrontierTrainerMons_Griffen
},
- [131] = {
+ [FRONTIER_TRAINER_XANDER] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("XANDER"),
.speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_RENTAL},
.speechWin = {EC_WORD_IT_S, EC_WORD_INCREDIBLE, EC_WORD_MY, EC_WORD_RENTAL, EC_WORD_POKEMON, EC_WORD_WON},
.speechLose = {EC_WORD_RENTAL, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_UP, EC_WORD_TO, EC_MOVE2(SCRATCH)},
- .monSets = gBattleFrontierTrainerMons_Xander
+ .monSet = gBattleFrontierTrainerMons_Xander
},
- [132] = {
+ [FRONTIER_TRAINER_MARVIN] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("MARVIN"),
.speechBefore = {EC_WORD_YOU_RE, EC_WORD_UP, EC_WORD_TO, EC_WORD_THE, EC_WORD_CHALLENGE, EC_WORD_QUES},
.speechWin = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_THINK, EC_WORD_YOU_RE, EC_WORD_GOOD, EC_WORD_ENOUGH},
.speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_PERFECT, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
- .monSets = gBattleFrontierTrainerMons_Marvin
+ .monSet = gBattleFrontierTrainerMons_Marvin
},
- [133] = {
+ [FRONTIER_TRAINER_BRENNAN] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("BRENNAN"),
.speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_TO, EC_WORD_SEE, EC_WORD_THE, EC_WORD_NEWS},
.speechWin = {EC_WORD_COMICS, EC_WORD_GET, EC_WORD_DAMP, EC_WORD_FROM, EC_WORD_DRIZZLE, EC_WORD_QUES},
.speechLose = {EC_WORD_THE, EC_WORD_TIGHT, EC_WORD_MONEY, EC_WORD_LIVING, EC_WORD_CHANNEL, EC_WORD_QUES_EXCL},
- .monSets = gBattleFrontierTrainerMons_Brennan
+ .monSet = gBattleFrontierTrainerMons_Brennan
},
- [134] = {
+ [FRONTIER_TRAINER_BALEY] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("BALEY"),
.speechBefore = {EC_MOVE(SCREECH), EC_WORD_IS, EC_WORD_LIKE, EC_WORD_MUSIC, EC_WORD_TO_ME, EC_WORD_EXCL},
.speechWin = {EC_WORD_MY, EC_MOVE(SCREECH), EC_WORD_STRATEGY, EC_WORD_IS, EC_WORD_THE, EC_WORD_BEST},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_SOUNDPROOF, EC_WORD_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Baley
+ .monSet = gBattleFrontierTrainerMons_Baley
},
- [135] = {
+ [FRONTIER_TRAINER_ZACKARY] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("ZACKARY"),
.speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_MOVE(DIG), EC_WORD_IT, EC_WORD_YO, EC_WORD_QUES},
.speechWin = {EC_MOVE2(TAKE_DOWN), EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(DIVE), EC_WORD_YO, EC_WORD_YO},
.speechLose = {EC_WORD_BREAK, EC_WORD_DOWN, EC_MOVE2(DIVE), EC_WORD_TIME, EC_WORD_FOR, EC_WORD_ME},
- .monSets = gBattleFrontierTrainerMons_Zackary
+ .monSet = gBattleFrontierTrainerMons_Zackary
},
- [136] = {
+ [FRONTIER_TRAINER_GABRIEL] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("GABRIEL"),
.speechBefore = {EC_MOVE2(POUND), EC_WORD_THE, EC_WORD_THICK_FAT, EC_WORD_ON, EC_WORD_MY, EC_MOVE2(BELLY_DRUM)},
.speechWin = {EC_MOVE2(POUND), EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_MOVE2(POUND), EC_WORD_MY, EC_MOVE2(BELLY_DRUM)},
.speechLose = {EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_WORD_WAS, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Gabriel
+ .monSet = gBattleFrontierTrainerMons_Gabriel
},
- [137] = {
+ [FRONTIER_TRAINER_EMILY] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("EMILY"),
.speechBefore = {EC_WORD_HOW, EC_WORD_ABOUT, EC_WORD_A_TINY_BIT, EC_WORD_OF, EC_MOVE(HYPNOSIS), EC_WORD_QUES},
.speechWin = {EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION},
.speechLose = {EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_STRATEGY, EC_WORD_WENT, EC_WORD_BADLY, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Emily
+ .monSet = gBattleFrontierTrainerMons_Emily
},
- [138] = {
+ [FRONTIER_TRAINER_JORDYN] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("JORDYN"),
.speechBefore = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_MY, EC_WORD_SECRET, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_AS, EC_WORD_I, EC_WORD_APPEAR, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_BUT, EC_WORD_HOW, EC_WORD_DID, EC_WORD_YOU, EC_WORD_KNOW, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Jordyn
+ .monSet = gBattleFrontierTrainerMons_Jordyn
},
- [139] = {
+ [FRONTIER_TRAINER_SOFIA] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("SOFIA"),
.speechBefore = {EC_POKEMON(LOUDRED), EC_WORD_PROBABLY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), 0xFFFF},
.speechWin = {EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_FEELING, EC_WORD_THAT, EC_WORD_I, EC_WORD_GET},
.speechLose = {EC_WORD_I, EC_WORD_WORK, EC_WORD_AT, EC_WORD_THE, EC_WORD_DEPT_STORE, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Sofia
+ .monSet = gBattleFrontierTrainerMons_Sofia
},
- [140] = {
+ [FRONTIER_TRAINER_BRADEN] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("BRADEN"),
.speechBefore = {EC_WORD_I_CHOOSE_YOU, EC_WORD_EXCL, 0xFFFF, EC_WORD_THIS_IS_IT_EXCL, 0xFFFF, 0xFFFF},
.speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_PRETTY, EC_WORD_AWESOME, EC_WORD_ABOUT, EC_WORD_MYSELF},
.speechLose = {EC_WORD_ALL_RIGHT, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Braden
+ .monSet = gBattleFrontierTrainerMons_Braden
},
- [141] = {
+ [FRONTIER_TRAINER_KAYDEN] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("KAYDEN"),
.speechBefore = {EC_WORD_THEY, EC_WORD_OVERDO, EC_WORD_THAT, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_THAT, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_ISN_T, EC_WORD_FOR, EC_WORD_ME},
.speechLose = {EC_WORD_HEY, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TASTY, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Kayden
+ .monSet = gBattleFrontierTrainerMons_Kayden
},
- [142] = {
+ [FRONTIER_TRAINER_COOPER] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("COOPER"),
.speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_ABSOLUTELY, EC_WORD_BE, EC_WORD_A, EC_WORD_PUSHOVER},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_TOO, EC_WORD_EXCITING, EC_WORD_FOR, EC_WORD_ME, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_PLEASE, EC_WORD_EXCL, 0xFFFF, EC_WORD_SORRY, EC_WORD_I_AM, EC_WORD_SORRY},
- .monSets = gBattleFrontierTrainerMons_Cooper
+ .monSet = gBattleFrontierTrainerMons_Cooper
},
- [143] = {
+ [FRONTIER_TRAINER_JULIA] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("JULIA"),
.speechBefore = {EC_WORD_SPIRIT, EC_WORD_ALONE, EC_WORD_WON_T, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_WIN},
.speechWin = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_ACCEPT, EC_WORD_THIS, EC_WORD_WITH, EC_WORD_SERENE_GRACE},
.speechLose = {EC_WORD_FOR_NOW, EC_WORD_GOOD_BYE, EC_WORD_BUT, EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_OVER},
- .monSets = gBattleFrontierTrainerMons_Julia
+ .monSet = gBattleFrontierTrainerMons_Julia
},
- [144] = {
+ [FRONTIER_TRAINER_AMARA] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("AMARA"),
.speechBefore = {EC_WORD_WROOOAAR_EXCL, EC_WORD_EXCL_EXCL, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_READY, EC_WORD_EXCL_EXCL},
.speechWin = {EC_WORD_I, EC_WORD_LOSE, EC_WORD_MYSELF, EC_WORD_IF, EC_WORD_IT_S, EC_WORD_EXCITING},
.speechLose = {EC_WORD_THAT_S, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_MOVE2(TACKLE), EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Amara
+ .monSet = gBattleFrontierTrainerMons_Amara
},
- [145] = {
+ [FRONTIER_TRAINER_LYNN] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("LYNN"),
.speechBefore = {EC_WORD_YOUR, EC_WORD_SECRET, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_HIDDEN, EC_WORD_FOREVER},
.speechWin = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_YOUR, EC_WORD_SECRET, EC_WORD_NOW, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_MOVE(SAFEGUARD), EC_WORD_YOUR, EC_WORD_OWN, EC_WORD_SECRET},
- .monSets = gBattleFrontierTrainerMons_Lynn
+ .monSet = gBattleFrontierTrainerMons_Lynn
},
- [146] = {
+ [FRONTIER_TRAINER_JOVAN] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("JOVAN"),
.speechBefore = {EC_WORD_YOUR, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_SADLY, EC_WORD_LACKING},
.speechWin = {EC_WORD_MY, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES},
.speechLose = {EC_WORD_I_WAS, EC_WORD_MINUS, EC_WORD_MY, EC_WORD_NORMAL, EC_WORD_POWER, EC_WORD_TODAY},
- .monSets = gBattleFrontierTrainerMons_Jovan
+ .monSet = gBattleFrontierTrainerMons_Jovan
},
- [147] = {
+ [FRONTIER_TRAINER_DOMINIC] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("DOMINIC"),
.speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_THIS, EC_WORD_EXCELLENT, EC_WORD_CAMERA, 0xFFFF},
.speechWin = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_WAS, EC_WORD_AWFULLY, EC_WORD_EXPENSIVE, 0xFFFF},
.speechLose = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_DOESN_T, EC_WORD_MISS, EC_WORD_A, EC_WORD_THING},
- .monSets = gBattleFrontierTrainerMons_Dominic
+ .monSet = gBattleFrontierTrainerMons_Dominic
},
- [148] = {
+ [FRONTIER_TRAINER_NIKOLAS] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("NIKOLAS"),
.speechBefore = {EC_WORD_I, EC_MOVE2(MIMIC), EC_WORD_POKEMON, EC_WORD_AFTER, EC_WORD_EVERY, EC_WORD_BATTLE},
.speechWin = {EC_WORD_IF_I_WIN, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON2(TAUROS)},
.speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON2(MILTANK)},
- .monSets = gBattleFrontierTrainerMons_Nikolas
+ .monSet = gBattleFrontierTrainerMons_Nikolas
},
- [149] = {
+ [FRONTIER_TRAINER_VALERIA] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.trainerName = _("VALERIA"),
.speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_YOU, EC_WORD_WOULD, EC_WORD_NOT, EC_MOVE2(GLARE)},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_MEAN, EC_WORD_EXCL, EC_WORD_I, EC_WORD_MEAN, EC_WORD_REALLY},
.speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_A, EC_WORD_REALLY, EC_MOVE(SCARY_FACE), EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Valeria
+ .monSet = gBattleFrontierTrainerMons_Valeria
},
- [150] = {
+ [FRONTIER_TRAINER_DELANEY] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.trainerName = _("DELANEY"),
.speechBefore = {EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_OVER, EC_WORD_TIME, EC_WORD_TO, EC_WORD_PLAY},
.speechWin = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_IS, EC_WORD_FROM, EC_WORD_SCHOOL},
.speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_WORK, EC_WORD_NEXT, EC_WORD_WEEK},
- .monSets = gBattleFrontierTrainerMons_Delaney
+ .monSet = gBattleFrontierTrainerMons_Delaney
},
- [151] = {
+ [FRONTIER_TRAINER_MEGHAN] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.trainerName = _("MEGHAN"),
.speechBefore = {EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_OUT, EC_WORD_TIME, EC_WORD_TO, EC_WORD_PLAY},
.speechWin = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_LIKES, EC_WORD_COMICS, 0xFFFF},
.speechLose = {EC_WORD_IT_S, EC_WORD_BACK, EC_WORD_TO, EC_WORD_SCHOOL, EC_WORD_SOON, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Meghan
+ .monSet = gBattleFrontierTrainerMons_Meghan
},
- [152] = {
+ [FRONTIER_TRAINER_ROBERTO] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("ROBERTO"),
.speechBefore = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_INVINCIBLE, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_YOU, EC_WORD_WEREN_T, EC_WORD_BAD, EC_WORD_I_WAS, EC_WORD_JUST, EC_WORD_BETTER},
.speechLose = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_SATISFIED, EC_WORD_YET, EC_WORD_QUES, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Roberto
+ .monSet = gBattleFrontierTrainerMons_Roberto
},
- [153] = {
+ [FRONTIER_TRAINER_DAMIAN] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("DAMIAN"),
.speechBefore = {EC_WORD_MY, EC_WORD_PURE_POWER, EC_WORD_IS, EC_WORD_MACHINE, EC_WORD_LIKE, EC_WORD_EXCL},
.speechWin = {EC_WORD_MY, EC_MOVE2(MACH_PUNCH), EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_A, EC_MOVE(BRICK_BREAK)},
.speechLose = {EC_WORD_ARRGH, EC_WORD_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_EXCL_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Damian
+ .monSet = gBattleFrontierTrainerMons_Damian
},
- [154] = {
+ [FRONTIER_TRAINER_BRODY] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("BRODY"),
.speechBefore = {EC_WORD_MY, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_SEEMS, EC_POKEMON(ODDISH), EC_WORD_QUES},
.speechWin = {EC_WORD_IT_S, EC_WORD_MY, EC_WORD_FAMILY, EC_WORD_STAY_AT_HOME, EC_WORD_LOOK, EC_WORD_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_QUESTION, EC_WORD_YOUR, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_SERIOUSLY},
- .monSets = gBattleFrontierTrainerMons_Brody
+ .monSet = gBattleFrontierTrainerMons_Brody
},
- [155] = {
+ [FRONTIER_TRAINER_GRAHAM] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("GRAHAM"),
.speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF},
.speechWin = {EC_WORD_WAHAHAHA, EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_WORD_WAHAHAHA, EC_WORD_WAHAHAHA, EC_WORD_EXCL_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_MY, EC_WORD_BAD},
- .monSets = gBattleFrontierTrainerMons_Graham
+ .monSet = gBattleFrontierTrainerMons_Graham
},
- [156] = {
+ [FRONTIER_TRAINER_TYLOR] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("TYLOR"),
.speechBefore = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_MY, EC_MOVE2(HEAT_WAVE), EC_WORD_QUES},
.speechWin = {EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_BUT, EC_WORD_I_WAS, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_FOR, EC_WORD_YOU},
- .monSets = gBattleFrontierTrainerMons_Tylor
+ .monSet = gBattleFrontierTrainerMons_Tylor
},
- [157] = {
+ [FRONTIER_TRAINER_JAREN] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("JAREN"),
.speechBefore = {EC_WORD_FIGHTING, EC_WORD_SPIRIT, EC_WORD_QUES, EC_WORD_ME, EC_WORD_QUES, 0xFFFF},
.speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MORE, EC_WORD_CUTE, EC_WORD_POKEMON, 0xFFFF},
.speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_QUITE, EC_WORD_CUTE, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Jaren
+ .monSet = gBattleFrontierTrainerMons_Jaren
},
- [158] = {
+ [FRONTIER_TRAINER_CORDELL] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("CORDELL"),
.speechBefore = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_DECIDED, EC_WORD_ON, EC_WORD_SPIRIT},
.speechWin = {EC_WORD_CAN_T, EC_WORD_YOU, EC_WORD_ACCEPT, EC_WORD_THAT, EC_WORD_QUES, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_BE, EC_WORD_ON, EC_WORD_MY, EC_WORD_WAY},
- .monSets = gBattleFrontierTrainerMons_Cordell
+ .monSet = gBattleFrontierTrainerMons_Cordell
},
- [159] = {
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ [FRONTIER_TRAINER_JAZLYN] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.trainerName = _("JAZLYN"),
.speechBefore = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_POKEDEX, EC_WORD_REALLY, EC_WORD_AWESOME, EC_WORD_QUES},
.speechWin = {EC_WORD_OH_YEAH, EC_WORD_WOW, EC_WORD_YOUR, EC_WORD_POKEDEX, EC_WORD_IS, EC_WORD_SUPER},
.speechLose = {EC_WORD_AN, EC_WORD_AVANT_GARDE, EC_WORD_POKEDEX, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_AWESOME},
- .monSets = gBattleFrontierTrainerMons_Jazlyn
+ .monSet = gBattleFrontierTrainerMons_Jazlyn
},
- [160] = {
+ [FRONTIER_TRAINER_ZACHERY] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("ZACHERY"),
.speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_MY, EC_WORD_OWN, EC_WORD_PLACE, EC_WORD_YEEHAW_EXCL},
.speechWin = {EC_WORD_IT_S, EC_WORD_AN, EC_WORD_EXCITING, EC_WORD_TIME, EC_WORD_FOR, EC_WORD_ME},
.speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_FLATTEN, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Zachery
+ .monSet = gBattleFrontierTrainerMons_Zachery
},
- [161] = {
+ [FRONTIER_TRAINER_JOHAN] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("JOHAN"),
.speechBefore = {EC_WORD_WINTER, EC_WORD_WILL, EC_WORD_SOON, EC_WORD_BE, EC_WORD_HERE, 0xFFFF},
.speechWin = {EC_WORD_MY, EC_WORD_ALLOWANCE, EC_WORD_COULD, EC_WORD_USE, EC_WORD_A, EC_MOVE2(HELPING_HAND)},
.speechLose = {EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_USE, EC_WORD_MY, EC_WORD_ALLOWANCE, EC_WORD_UP},
- .monSets = gBattleFrontierTrainerMons_Johan
+ .monSet = gBattleFrontierTrainerMons_Johan
},
- [162] = {
+ [FRONTIER_TRAINER_SHEA] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("SHEA"),
.speechBefore = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_BATTLE, EC_WORD_WITH, EC_WORD_BEAUTY, EC_WORD_QUES},
.speechWin = {EC_WORD_YOU, EC_WORD_BATTLE, EC_WORD_IN, EC_WORD_AN, EC_WORD_UGLY, EC_WORD_WAY},
.speechLose = {EC_WORD_WHAT, EC_WORD_IS, EC_WORD_BEAUTY, EC_WORD_TO, EC_WORD_YOU, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Shea
+ .monSet = gBattleFrontierTrainerMons_Shea
},
- [163] = {
+ [FRONTIER_TRAINER_KAILA] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("KAILA"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_THIRSTY, EC_WORD_RIGHT, EC_WORD_NOW, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_I, EC_WORD_COULD, EC_WORD_USE, EC_WORD_A, EC_WORD_COLD, EC_WORD_DRINK},
.speechLose = {EC_WORD_THAT, EC_WORD_LOSS, EC_WORD_IS, EC_WORD_HARD, EC_WORD_TO, EC_MOVE2(SWALLOW)},
- .monSets = gBattleFrontierTrainerMons_Kaila
+ .monSet = gBattleFrontierTrainerMons_Kaila
},
- [164] = {
+ [FRONTIER_TRAINER_ISIAH] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("ISIAH"),
.speechBefore = {EC_WORD_I, EC_WORD_PRETEND, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_A_LOT, 0xFFFF},
.speechWin = {EC_WORD_I, EC_MOVE2(TRICK), EC_WORD_MOTHER, EC_WORD_FOR, EC_WORD_MY, EC_WORD_ALLOWANCE},
.speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_WANT, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE},
- .monSets = gBattleFrontierTrainerMons_Isiah
+ .monSet = gBattleFrontierTrainerMons_Isiah
},
- [165] = {
+ [FRONTIER_TRAINER_GARRETT] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
.trainerName = _("GARRETT"),
.speechBefore = {EC_WORD_I, EC_WORD_ENJOY, EC_WORD_COMICS, EC_WORD_AND, EC_WORD_THIS, EC_WORD_GAME},
.speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_MUSIC, EC_WORD_IDOL, EC_WORD_TOO},
.speechLose = {EC_WORD_BUT, EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE},
- .monSets = gBattleFrontierTrainerMons_Garrett
+ .monSet = gBattleFrontierTrainerMons_Garrett
},
- [166] = {
+ [FRONTIER_TRAINER_HAYLIE] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("HAYLIE"),
.speechBefore = {EC_WORD_I, EC_WORD_WORRY, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_SLEEP},
.speechWin = {EC_WORD_A, EC_WORD_WIN, EC_WORD_GIVES, EC_WORD_ME, EC_WORD_A, EC_MOVE2(CALM_MIND)},
.speechLose = {EC_WORD_MY, EC_WORD_INSOMNIA, EC_WORD_WILL, EC_WORD_GET, EC_WORD_BAD, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Haylie
+ .monSet = gBattleFrontierTrainerMons_Haylie
},
- [167] = {
+ [FRONTIER_TRAINER_MEGAN] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("MEGAN"),
.speechBefore = {EC_WORD_I, EC_WORD_BELIEVE, EC_WORD_IN, EC_WORD_AN, EC_MOVE(AROMATHERAPY), EC_WORD_BATH},
.speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_HEALTHY, EC_WORD_CLEAR_BODY, 0xFFFF},
.speechLose = {EC_WORD_IF, EC_WORD_ONLY, EC_MOVE(AROMATHERAPY), EC_WORD_WERE, EC_WORD_LESS, EC_WORD_EXPENSIVE},
- .monSets = gBattleFrontierTrainerMons_Megan
+ .monSet = gBattleFrontierTrainerMons_Megan
},
- [168] = {
+ [FRONTIER_TRAINER_ISSAC] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("ISSAC"),
.speechBefore = {EC_WORD_MY, EC_WORD_HOBBY, EC_WORD_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
.speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_ANY, EC_WORD_KIND, EC_WORD_OF, EC_MOVE2(WATER_SPORT)},
.speechLose = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_ANY, EC_WORD_KIND, EC_WORD_OF, EC_MOVE2(MUD_SPORT)},
- .monSets = gBattleFrontierTrainerMons_Issac
+ .monSet = gBattleFrontierTrainerMons_Issac
},
- [169] = {
+ [FRONTIER_TRAINER_QUINTON] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("QUINTON"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_CAUSE, EC_WORD_I_AM, EC_WORD_TOO_WEAK, 0xFFFF},
.speechWin = {EC_WORD_YOU, EC_WORD_AREN_T, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, 0xFFFF},
.speechLose = {EC_WORD_HEY, EC_WORD_WHAT, EC_WORD_DID, EC_WORD_I, EC_WORD_DO, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Quinton
+ .monSet = gBattleFrontierTrainerMons_Quinton
},
- [170] = {
+ [FRONTIER_TRAINER_SALMA] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("SALMA"),
.speechBefore = {EC_WORD_YOU_VE, EC_WORD_GOT, EC_WORD_YOUR, EC_WORD_HUSTLE, EC_WORD_ON, EC_WORD_EXCL},
.speechWin = {EC_WORD_I, EC_WORD_WIN, EC_WORD_YOU, EC_WORD_HUSTLE, EC_WORD_ON, EC_WORD_OUT},
.speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_HOW, EC_WORD_I, EC_WORD_LOST},
- .monSets = gBattleFrontierTrainerMons_Salma
+ .monSet = gBattleFrontierTrainerMons_Salma
},
- [171] = {
+ [FRONTIER_TRAINER_ANSLEY] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("ANSLEY"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_BORED, EC_WORD_ELLIPSIS, EC_WORD_DANCE, EC_WORD_FOR, EC_WORD_ME},
.speechWin = {EC_WORD_YOU_VE, EC_WORD_BORED, EC_WORD_ME, EC_WORD_SOME, EC_WORD_MORE, 0xFFFF},
.speechLose = {EC_WORD_TAKE, EC_WORD_YOUR, EC_MOVE2(FRUSTRATION), EC_WORD_SOME, EC_WORD_OTHER, EC_WORD_PLACE},
- .monSets = gBattleFrontierTrainerMons_Ansley
+ .monSet = gBattleFrontierTrainerMons_Ansley
},
- [172] = {
+ [FRONTIER_TRAINER_HOLDEN] = {
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
.trainerName = _("HOLDEN"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_COMMEMORATE, EC_WORD_MY, EC_WORD_COOLNESS, EC_WORD_IN, EC_WORD_BATTLE},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_PRAISE, 0xFFFF},
.speechLose = {EC_WORD_YOUR, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_AMUSING, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Holden
+ .monSet = gBattleFrontierTrainerMons_Holden
},
- [173] = {
+ [FRONTIER_TRAINER_LUCA] = {
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
.trainerName = _("LUCA"),
.speechBefore = {EC_WORD_WE, EC_WORD_WILL, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_BATTLE},
.speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_IN, EC_WORD_A, EC_WORD_COOL, EC_WORD_WAY},
.speechLose = {EC_WORD_HELLO, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_JUST, EC_WORD_A, EC_WORD_KID},
- .monSets = gBattleFrontierTrainerMons_Luca
+ .monSet = gBattleFrontierTrainerMons_Luca
},
- [174] = {
+ [FRONTIER_TRAINER_JAMISON] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("JAMISON"),
.speechBefore = {EC_WORD_MY, EC_MOVE2(SECRET_POWER), EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_TO, EC_WORD_POKEMON},
.speechWin = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_USE, EC_MOVE(SMOKESCREEN), EC_WORD_TO, EC_WORD_ESCAPE},
- .monSets = gBattleFrontierTrainerMons_Jamison
+ .monSet = gBattleFrontierTrainerMons_Jamison
},
- [175] = {
+ [FRONTIER_TRAINER_GUNNAR] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("GUNNAR"),
.speechBefore = {EC_WORD_I, EC_MOVE(CUT), EC_WORD_DOWN, EC_WORD_EVERY, EC_WORD_OPPONENT, 0xFFFF},
.speechWin = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_FOR, EC_WORD_YOUR, EC_WORD_LOSS},
.speechLose = {EC_WORD_PLEASE, EC_WORD_LOSE, EC_WORD_THAT, EC_MOVE(SCARY_FACE), EC_WORD_OF, EC_WORD_YOURS},
- .monSets = gBattleFrontierTrainerMons_Gunnar
+ .monSet = gBattleFrontierTrainerMons_Gunnar
},
- [176] = {
+ [FRONTIER_TRAINER_CRAIG] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("CRAIG"),
.speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_FOR, EC_WORD_MY, EC_WORD_TRAIN},
.speechWin = {EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_ISN_T, EC_WORD_HERE, EC_WORD_YET, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_HERE_IT_IS, EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_SEE_YA, EC_WORD_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Craig
+ .monSet = gBattleFrontierTrainerMons_Craig
},
- [177] = {
+ [FRONTIER_TRAINER_PIERCE] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("PIERCE"),
.speechBefore = {EC_WORD_THERE, EC_WORD_WAS, EC_WORD_A, EC_MOVE2(HEAT_WAVE), EC_WORD_LAST, EC_WORD_WEEK},
.speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(HEAT_WAVE), 0xFFFF},
.speechLose = {EC_WORD_DIDN_T, EC_WORD_IT, EC_MOVE(HAIL), EC_WORD_TOO, EC_WORD_QUES, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Pierce
+ .monSet = gBattleFrontierTrainerMons_Pierce
},
- [178] = {
+ [FRONTIER_TRAINER_REGINA] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("REGINA"),
.speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_PLAY, EC_WORD_IN, EC_WORD_WATER},
.speechWin = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_COME, EC_WORD_OUT, 0xFFFF},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_NOT, EC_WORD_MUCH, EC_WORD_GOOD, EC_WORD_IN, EC_WORD_WATER},
- .monSets = gBattleFrontierTrainerMons_Regina
+ .monSet = gBattleFrontierTrainerMons_Regina
},
- [179] = {
+ [FRONTIER_TRAINER_ALISON] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("ALISON"),
.speechBefore = {EC_WORD_THIS, EC_WORD_KINDERGARTEN, EC_WORD_MAGAZINE, EC_WORD_IS, EC_WORD_TOO, EC_WORD_MUCH},
.speechWin = {EC_WORD_HOW, EC_WORD_TO, EC_WORD_BUG, EC_WORD_YOUR, EC_WORD_TEACHER, EC_WORD_QUES},
.speechLose = {EC_WORD_ENJOY, EC_WORD_A, EC_WORD_TASTY, EC_WORD_SCHOOL, EC_WORD_DIET, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Alison
+ .monSet = gBattleFrontierTrainerMons_Alison
},
- [180] = {
+ [FRONTIER_TRAINER_HANK] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("HANK"),
.speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_A, EC_WORD_BUG, EC_WORD_EVENT, EC_WORD_SOON},
.speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_BUG, EC_WORD_FASHION, EC_WORD_SHOW, EC_WORD_EXCL},
.speechLose = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Hank
+ .monSet = gBattleFrontierTrainerMons_Hank
},
- [181] = {
+ [FRONTIER_TRAINER_EARL] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("EARL"),
.speechBefore = {EC_WORD_THE, EC_WORD_INVINCIBLE, EC_WORD_BUG, EC_WORD_TRAINER, EC_WORD_IS, EC_WORD_HERE},
.speechWin = {EC_WORD_THE, EC_WORD_INVINCIBLE, EC_WORD_BUG, EC_WORD_TRAINER, EC_WORD_AM, EC_WORD_I},
.speechLose = {EC_WORD_SEE, EC_WORD_HOW, EC_WORD_FAST, EC_WORD_I, EC_WORD_RUN_AWAY, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Earl
+ .monSet = gBattleFrontierTrainerMons_Earl
},
- [182] = {
+ [FRONTIER_TRAINER_RAMIRO] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("RAMIRO"),
.speechBefore = {EC_WORD_I, EC_WORD_WENT, EC_WORD_TO, EC_WORD_A, EC_WORD_FISHING, EC_WORD_SCHOOL},
.speechWin = {EC_WORD_SERIOUSLY, EC_WORD_I_AM, EC_WORD_IN, EC_WORD_THE, EC_WORD_FISHING, EC_WORD_HALL_OF_FAME},
.speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_BACK, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Ramiro
+ .monSet = gBattleFrontierTrainerMons_Ramiro
},
- [183] = {
+ [FRONTIER_TRAINER_HUNTER] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("HUNTER"),
.speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_A, EC_WORD_TOTALLY, EC_WORD_COOL, EC_MOVE(CROSS_CHOP)},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_TO, EC_WORD_DO, EC_WORD_A, EC_MOVE(CROSS_CHOP)},
.speechLose = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_A, EC_WORD_MISTAKE, EC_WORD_QUES, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Hunter
+ .monSet = gBattleFrontierTrainerMons_Hunter
},
- [184] = {
+ [FRONTIER_TRAINER_AIDEN] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("AIDEN"),
.speechBefore = {EC_WORD_MY, EC_WORD_WORK, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_ME, EC_WORD_HEALTHY},
.speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_HEALTHY, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_HEALTHY, EC_WORD_THAN, EC_WORD_I_AM, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Aiden
+ .monSet = gBattleFrontierTrainerMons_Aiden
},
- [185] = {
+ [FRONTIER_TRAINER_XAVIER] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("XAVIER"),
.speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, 0xFFFF, EC_WORD_LOOK, EC_WORD_LOOK, EC_WORD_EXCL_EXCL},
.speechWin = {EC_WORD_GOOD_BYE, EC_WORD_AND, EC_WORD_THANK_YOU, EC_WORD_THAT_WAS, EC_WORD_FUNNY, 0xFFFF},
.speechLose = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL},
- .monSets = gBattleFrontierTrainerMons_Xavier
+ .monSet = gBattleFrontierTrainerMons_Xavier
},
- [186] = {
+ [FRONTIER_TRAINER_CLINTON] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("CLINTON"),
.speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_QUES},
.speechWin = {EC_WORD_YOUR, EC_MOVE2(FURY_SWIPES), EC_WORD_YOUR, EC_MOVE(STRENGTH), EC_WORD_YOUNG, EC_WORD_TRAINER},
.speechLose = {EC_WORD_TCH, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Clinton
+ .monSet = gBattleFrontierTrainerMons_Clinton
},
- [187] = {
+ [FRONTIER_TRAINER_JESSE] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("JESSE"),
.speechBefore = {EC_WORD_THIS, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_FOR, EC_WORD_MY, EC_WORD_MOTHER},
.speechWin = {EC_WORD_MOTHER, EC_WORD_WILL, EC_WORD_BE, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_ME},
.speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MY, EC_WORD_MOTHER, EC_WORD_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Jesse
+ .monSet = gBattleFrontierTrainerMons_Jesse
},
- [188] = {
+ [FRONTIER_TRAINER_EDUARDO] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("EDUARDO"),
.speechBefore = {EC_WORD_OUR, EC_WORD_MUSIC, EC_WORD_WILL, EC_WORD_PLAY, EC_WORD_ALL, EC_WORD_NIGHT},
.speechWin = {EC_WORD_NIGHTTIME, EC_WORD_IS, EC_WORD_WHEN, EC_WORD_I, EC_WORD_PLAY, EC_WORD_BEST},
.speechLose = {EC_WORD_LET_S, EC_WORD_PARTY, EC_WORD_UNTIL, EC_WORD_THE, EC_MOVE(MORNING_SUN), EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Eduardo
+ .monSet = gBattleFrontierTrainerMons_Eduardo
},
- [189] = {
+ [FRONTIER_TRAINER_HAL] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("HAL"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_TRENDY, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, 0xFFFF},
.speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_HIP_AND, EC_WORD_HAPPENING, EC_WORD_OH_YEAH, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_ALWAYS, EC_WORD_TRENDY, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH},
- .monSets = gBattleFrontierTrainerMons_Hal
+ .monSet = gBattleFrontierTrainerMons_Hal
},
- [190] = {
+ [FRONTIER_TRAINER_GAGE] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("GAGE"),
.speechBefore = {EC_WORD_HERE_IT_IS, EC_WORD_A, EC_WORD_FLYING, EC_WORD_TYPE, EC_WORD_HIDDEN, EC_WORD_MOVE},
.speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_FLYING, EC_WORD_TYPE, EC_WORD_VICTORY, EC_WORD_EXCL},
.speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_JUST, EC_MOVE(FLY), EC_WORD_AWAY, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Gage
+ .monSet = gBattleFrontierTrainerMons_Gage
},
- [191] = {
+ [FRONTIER_TRAINER_ARNOLD] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("ARNOLD"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_WEIRD, EC_WORD_FROM, EC_WORD_A, EC_WORD_DREAM},
.speechWin = {EC_WORD_YOUR, EC_MOVE(SCARY_FACE), EC_WORD_WAS, EC_WORD_IN, EC_WORD_MY, EC_WORD_DREAM},
.speechLose = {EC_WORD_MY, EC_WORD_INCREDIBLE, EC_WORD_DREAM, EC_WORD_WAS, EC_WORD_SO, EC_WORD_WEIRD},
- .monSets = gBattleFrontierTrainerMons_Arnold
+ .monSet = gBattleFrontierTrainerMons_Arnold
},
- [192] = {
+ [FRONTIER_TRAINER_JARRETT] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("JARRETT"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_LET_S, EC_WORD_DANCE, EC_WORD_LIKE, EC_WORD_IT_S, EC_WORD_YESTERDAY},
.speechWin = {EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_HOW, EC_WORD_I, EC_WORD_DANCE, EC_WORD_QUES},
.speechLose = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_APPRECIATE, EC_WORD_HOW, EC_WORD_I, EC_WORD_DANCE},
- .monSets = gBattleFrontierTrainerMons_Jarrett
+ .monSet = gBattleFrontierTrainerMons_Jarrett
},
- [193] = {
+ [FRONTIER_TRAINER_GARETT] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("GARETT"),
.speechBefore = {EC_WORD_MY, EC_WORD_GIRL, EC_WORD_GIVES, EC_WORD_ME, EC_WORD_A_LITTLE, EC_MOVE2(SWEET_KISS)},
.speechWin = {EC_WORD_MY, EC_WORD_GIRL, EC_WORD_FRIEND, EC_WORD_IS, EC_WORD_MY, EC_WORD_TREASURE},
.speechLose = {EC_WORD_A, EC_WORD_TREASURE, EC_WORD_ISN_T, EC_WORD_ALWAYS, EC_WORD_ABOUT, EC_WORD_MONEY},
- .monSets = gBattleFrontierTrainerMons_Garett
+ .monSet = gBattleFrontierTrainerMons_Garett
},
- [194] = {
+ [FRONTIER_TRAINER_EMANUEL] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("EMANUEL"),
.speechBefore = {EC_WORD_SMARTNESS, EC_WORD_ALONE, EC_WORD_WON_T, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_WIN},
.speechWin = {EC_WORD_I_AM, EC_WORD_NOT_VERY, EC_WORD_SMART, EC_WORD_BUT, EC_WORD_I, EC_WORD_WON},
.speechLose = {EC_WORD_HOW, EC_WORD_DID, EC_WORD_YOU, EC_MOVE2(FAKE_OUT), EC_WORD_ME, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Emanuel
+ .monSet = gBattleFrontierTrainerMons_Emanuel
},
- [195] = {
+ [FRONTIER_TRAINER_GUSTAVO] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("GUSTAVO"),
.speechBefore = {EC_MOVE(CHARGE), EC_WORD_EXCL, 0xFFFF, EC_MOVE(CHARGE), EC_WORD_EXCL_EXCL, 0xFFFF},
.speechWin = {EC_WORD_SURRENDER, EC_WORD_QUES, 0xFFFF, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES},
.speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_SURRENDER, EC_WORD_YET},
- .monSets = gBattleFrontierTrainerMons_Gustavo
+ .monSet = gBattleFrontierTrainerMons_Gustavo
},
- [196] = {
+ [FRONTIER_TRAINER_KAMERON] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("KAMERON"),
.speechBefore = {EC_WORD_TAKE_THAT, EC_WORD_EXCL, EC_WORD_IT_S, EC_WORD_MY, EC_WORD_FIERY, EC_MOVE2(TRICK)},
.speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_FIERY, EC_MOVE2(TRICK), EC_MOVE(ASTONISH), EC_WORD_QUES},
.speechLose = {EC_WORD_YOU, EC_WORD_DIDN_T, EC_WORD_FALL, EC_WORD_FOR, EC_WORD_MY, EC_MOVE2(TRICK)},
- .monSets = gBattleFrontierTrainerMons_Kameron
+ .monSet = gBattleFrontierTrainerMons_Kameron
},
- [197] = {
+ [FRONTIER_TRAINER_ALFREDO] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("ALFREDO"),
.speechBefore = {EC_WORD_A, EC_WORD_FIERY, EC_WORD_GOURMET, EC_WORD_AM, EC_WORD_I, EC_WORD_EXCL},
.speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_TASTY, EC_WORD_GOURMET, EC_WORD_VICTORY, EC_WORD_EXCL},
.speechLose = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_DISASTER, EC_WORD_THAT_WAS, EC_WORD_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Alfredo
+ .monSet = gBattleFrontierTrainerMons_Alfredo
},
- [198] = {
+ [FRONTIER_TRAINER_RUBEN] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("RUBEN"),
.speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING},
.speechWin = {EC_WORD_GET, EC_WORD_GOING, EC_WORD_EXCL, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE},
.speechLose = {EC_WORD_I_VE, EC_WORD_GOT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Ruben
+ .monSet = gBattleFrontierTrainerMons_Ruben
},
- [199] = {
+ [FRONTIER_TRAINER_LAMAR] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("LAMAR"),
.speechBefore = {EC_WORD_A, EC_MOVE2(PRESENT), EC_WORD_FOR, EC_WORD_ME, EC_WORD_QUES, 0xFFFF},
.speechWin = {EC_WORD_MMM, EC_WORD_THIS, EC_WORD_IS, EC_WORD_QUITE, EC_WORD_TASTY, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_OH, EC_WORD_IT_S, EC_WORD_A, EC_WORD_GAME, EC_WORD_IS_IT_QUES, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Lamar
+ .monSet = gBattleFrontierTrainerMons_Lamar
},
- [200] = {
+ [FRONTIER_TRAINER_JAXON] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("JAXON"),
.speechBefore = {EC_WORD_A, EC_WORD_SHELL_ARMOR, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_I, EC_WORD_WANT},
.speechWin = {EC_WORD_MY, EC_WORD_FATHER, EC_WORD_AND, EC_WORD_MOTHER, EC_WORD_WON_T, EC_WORD_ACCEPT},
.speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_SHELL_ARMOR, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Jaxon
+ .monSet = gBattleFrontierTrainerMons_Jaxon
},
- [201] = {
+ [FRONTIER_TRAINER_LOGAN] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("LOGAN"),
.speechBefore = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_WILL, EC_WORD_STUDY, EC_WORD_FOR, EC_WORD_SCHOOL},
.speechWin = {EC_WORD_ME, EC_WORD_STUDY, EC_WORD_QUES, EC_WORD_NOT_VERY, EC_WORD_LIKELY_TO, EC_WORD_SEE},
.speechLose = {EC_WORD_NO, EC_WORD_THANKS, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_SLEEP},
- .monSets = gBattleFrontierTrainerMons_Logan
+ .monSet = gBattleFrontierTrainerMons_Logan
},
- [202] = {
+ [FRONTIER_TRAINER_EMILEE] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("EMILEE"),
.speechBefore = {EC_WORD_IS, EC_WORD_THIS, EC_WORD_KIND, EC_WORD_OF, EC_WORD_BATTLE, EC_WORD_OK_QUES},
.speechWin = {EC_WORD_LET_S, EC_WORD_GO, EC_WORD_FOR, EC_WORD_AN, EC_MOVE(ICY_WIND), EC_MOVE2(SURF)},
.speechLose = {EC_WORD_HOW, EC_WORD_ABOUT, EC_WORD_A, EC_MOVE(ROCK_SLIDE), EC_WORD_SHOW, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Emilee
+ .monSet = gBattleFrontierTrainerMons_Emilee
},
- [203] = {
+ [FRONTIER_TRAINER_JOSIE] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("JOSIE"),
.speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_FASHION, EC_WORD_CONTEST, EC_WORD_IS, EC_WORD_PRETTY},
.speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_MODE, EC_WORD_FASHION, EC_WORD_THINGS},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_TOTALLY, EC_WORD_LACKING, EC_WORD_IN, EC_WORD_FASHION, EC_WORD_SENSE},
- .monSets = gBattleFrontierTrainerMons_Josie
+ .monSet = gBattleFrontierTrainerMons_Josie
},
- [204] = {
+ [FRONTIER_TRAINER_ARMANDO] = {
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("ARMANDO"),
.speechBefore = {EC_WORD_I, EC_WORD_NEED, EC_WORD_MORE, EC_WORD_GRASS, EC_WORD_TYPE, EC_WORD_POKEMON},
.speechWin = {EC_WORD_TRADE, EC_WORD_ME, EC_WORD_A, EC_WORD_GRASS, EC_WORD_POKEMON, EC_WORD_PLEASE},
.speechLose = {EC_WORD_THERE, EC_WORD_AREN_T, EC_WORD_ENOUGH, EC_WORD_GRASS, EC_WORD_TYPE, EC_WORD_POKEMON},
- .monSets = gBattleFrontierTrainerMons_Armando
+ .monSet = gBattleFrontierTrainerMons_Armando
},
- [205] = {
+ [FRONTIER_TRAINER_SKYLER] = {
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("SKYLER"),
.speechBefore = {EC_MOVE2(INGRAIN), EC_WORD_IS, EC_WORD_MY, EC_WORD_CHOICE, EC_WORD_BATTLE, EC_WORD_MOVE},
.speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MOVE, EC_WORD_ME, EC_WORD_NOW, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU, EC_MOVE(CUT), EC_WORD_ME, EC_WORD_DOWN, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Skyler
+ .monSet = gBattleFrontierTrainerMons_Skyler
},
- [206] = {
+ [FRONTIER_TRAINER_RUTH] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("RUTH"),
.speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_BATTLE},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_MUCH, EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_PLEASE, EC_WORD_STOP, EC_WORD_I, EC_WORD_DON_T, EC_WORD_ENJOY, EC_WORD_THIS},
- .monSets = gBattleFrontierTrainerMons_Ruth
+ .monSet = gBattleFrontierTrainerMons_Ruth
},
- [207] = {
+ [FRONTIER_TRAINER_MELODY] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("MELODY"),
.speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_SUNDAY, EC_WORD_IS, EC_WORD_A, EC_MOVE2(SUNNY_DAY)},
.speechWin = {EC_WORD_SUNDAY, EC_WORD_SEEMS, EC_WORD_FOREVER, EC_WORD_TO, EC_WORD_COME, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_THE, EC_WORD_FORECAST, EC_WORD_SAYS, EC_WORD_IT, EC_WORD_WILL, EC_MOVE(HAIL)},
- .monSets = gBattleFrontierTrainerMons_Melody
+ .monSet = gBattleFrontierTrainerMons_Melody
},
- [208] = {
+ [FRONTIER_TRAINER_PEDRO] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("PEDRO"),
.speechBefore = {EC_WORD_A, EC_WORD_SWIFT_SWIM, EC_WORD_WILL, EC_WORD_DO, EC_WORD_YOU, EC_WORD_GOOD},
.speechWin = {EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_I, EC_WORD_SINK, EC_WORD_AN, EC_WORD_OPPONENT},
.speechLose = {EC_WORD_UH_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Pedro
+ .monSet = gBattleFrontierTrainerMons_Pedro
},
- [209] = {
+ [FRONTIER_TRAINER_ERICK] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("ERICK"),
.speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(TACKLE), EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_EXCL},
.speechWin = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_RUN_AWAY, EC_WORD_YOU, EC_WORD_LOSER, EC_WORD_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_THINK, EC_WORD_YOU, EC_WORD_WOULD, EC_MOVE(COUNTER)},
- .monSets = gBattleFrontierTrainerMons_Erick
+ .monSet = gBattleFrontierTrainerMons_Erick
},
- [210] = {
+ [FRONTIER_TRAINER_ELAINE] = {
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("ELAINE"),
.speechBefore = {EC_WORD_MY, EC_WORD_HEROINE, EC_WORD_ADVENTURE, EC_WORD_ISN_T, EC_WORD_GOING, EC_WORD_WELL},
.speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I, EC_WORD_NEED},
.speechLose = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_HEROINE},
- .monSets = gBattleFrontierTrainerMons_Elaine
+ .monSet = gBattleFrontierTrainerMons_Elaine
},
- [211] = {
+ [FRONTIER_TRAINER_JOYCE] = {
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("JOYCE"),
.speechBefore = {EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_GO, EC_WORD_AHAHA, EC_WORD_EXCL},
.speechWin = {EC_WORD_LALALA, EC_WORD_NO, EC_WORD_LOSING, EC_WORD_FOR, EC_WORD_ME, EC_WORD_EXCL},
.speechLose = {EC_WORD_LALALA, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_HUH_QUES, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Joyce
+ .monSet = gBattleFrontierTrainerMons_Joyce
},
- [212] = {
+ [FRONTIER_TRAINER_TODD] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("TODD"),
.speechBefore = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_LIGHTNINGROD, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POWER},
.speechWin = {EC_WORD_THAT_S, EC_WORD_ALL, EC_WORD_YOU, EC_WORD_COULD, EC_MOVE(ABSORB), EC_WORD_QUES},
.speechLose = {EC_WORD_YOU, EC_MOVE2(REFLECT), EC_WORD_MY, EC_WORD_POWER, EC_WORD_BACK, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Todd
+ .monSet = gBattleFrontierTrainerMons_Todd
},
- [213] = {
+ [FRONTIER_TRAINER_GAVIN] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("GAVIN"),
.speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(BIDE), EC_WORD_MY, EC_WORD_TIME, 0xFFFF},
.speechWin = {EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES, 0xFFFF},
.speechLose = {EC_WORD_MY, EC_WORD_MISTAKE, EC_WORD_WAS, EC_WORD_TOO, EC_WORD_EXPENSIVE, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Gavin
+ .monSet = gBattleFrontierTrainerMons_Gavin
},
- [214] = {
+ [FRONTIER_TRAINER_MALORY] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("MALORY"),
.speechBefore = {EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_SHOW, EC_WORD_ME, EC_WORD_CUTE, EC_WORD_POKEMON},
.speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
.speechLose = {EC_WORD_TCH, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_VERY, EC_WORD_NICE},
- .monSets = gBattleFrontierTrainerMons_Malory
+ .monSet = gBattleFrontierTrainerMons_Malory
},
- [215] = {
+ [FRONTIER_TRAINER_ESTHER] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("ESTHER"),
.speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_NICE, EC_MOVE2(PRESENT), EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_PLEASE, EC_WORD_GET, EC_WORD_ME, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_GAME},
.speechLose = {EC_WORD_MESSAGE, EC_WORD_CARDS, EC_WORD_MAKE, EC_WORD_A, EC_WORD_WEAK, EC_MOVE2(PRESENT)},
- .monSets = gBattleFrontierTrainerMons_Esther
+ .monSet = gBattleFrontierTrainerMons_Esther
},
- [216] = {
+ [FRONTIER_TRAINER_OSCAR] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("OSCAR"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_YOUR, EC_WORD_POWER, EC_WORD_IN, EC_WORD_FULL},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_YOUR, EC_WORD_FULL, EC_WORD_POWER, EC_WORD_EXCL},
.speechLose = {EC_WORD_NOT, EC_WORD_FUNNY, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_TOO_STRONG, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Oscar
+ .monSet = gBattleFrontierTrainerMons_Oscar
},
- [217] = {
+ [FRONTIER_TRAINER_WILSON] = {
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
.trainerName = _("WILSON"),
.speechBefore = {EC_WORD_WORK, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_ME, EC_WORD_AN, EC_WORD_EARLY_BIRD},
.speechWin = {EC_WORD_ALL, EC_WORD_WORK, EC_WORD_AND, EC_WORD_NO, EC_WORD_PLAY, EC_WORD_ELLIPSIS},
.speechLose = {EC_MOVE(ENDURE), EC_WORD_IS, EC_WORD_ALL, EC_WORD_I, EC_WORD_CAN, EC_WORD_DO},
- .monSets = gBattleFrontierTrainerMons_Wilson
+ .monSet = gBattleFrontierTrainerMons_Wilson
},
- [218] = {
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ [FRONTIER_TRAINER_CLARE] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.trainerName = _("CLARE"),
.speechBefore = {EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_A, EC_WORD_TOUGH, EC_WORD_TRAINER, EC_WORD_EXCL},
.speechWin = {EC_WORD_AWW, EC_WORD_EXCL, EC_WORD_A, EC_WORD_WIMPY, EC_WORD_TRAINER, EC_WORD_EXCL},
.speechLose = {EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_TRAINER, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Clare
+ .monSet = gBattleFrontierTrainerMons_Clare
},
- [219] = {
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ [FRONTIER_TRAINER_TESS] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.trainerName = _("TESS"),
.speechBefore = {EC_WORD_WANT, EC_WORD_SOME, EC_POKEMON(GULPIN), EC_WORD_DESIGN, EC_WORD_SWEETS, EC_WORD_QUES},
.speechWin = {EC_WORD_THEY_RE, EC_WORD_A, EC_WORD_SECRET, EC_WORD_POKEMON, EC_WORD_GOURMET, EC_WORD_ITEM},
.speechLose = {EC_WORD_THEY_RE, EC_WORD_TASTY, EC_WORD_EXCL, EC_WORD_REFRESHING, EC_WORD_TOO, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Tess
+ .monSet = gBattleFrontierTrainerMons_Tess
},
- [220] = {
+ [FRONTIER_TRAINER_LEON] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("LEON"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_ANY, EC_WORD_OTHER, EC_WORD_TRAINER},
.speechWin = {EC_WORD_I, EC_WORD_DID, EC_WORD_IT, EC_MOVE2(JUMP_KICK), EC_WORD_FOR, EC_WORD_JOY},
.speechLose = {EC_WORD_BACK, EC_WORD_HOME, EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Leon
+ .monSet = gBattleFrontierTrainerMons_Leon
},
- [221] = {
+ [FRONTIER_TRAINER_ALONZO] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("ALONZO"),
.speechBefore = {EC_WORD_I_VE, EC_WORD_NOT, EC_WORD_LOST, EC_WORD_ONCE, EC_WORD_YET, EC_WORD_EXCL},
.speechWin = {EC_WORD_YOUR, EC_WORD_SAD, EC_WORD_LOOK, EC_WORD_BECOMES, EC_WORD_YOU, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_BELIEVE, EC_WORD_THIS, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Alonzo
+ .monSet = gBattleFrontierTrainerMons_Alonzo
},
- [222] = {
+ [FRONTIER_TRAINER_VINCE] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("VINCE"),
.speechBefore = {EC_WORD_THE, EC_WORD_TOP, EC_WORD_TRAINER, EC_WORD_THAT_S, EC_WORD_ME, EC_WORD_EXCL},
.speechWin = {EC_WORD_THE, EC_WORD_TOP, EC_WORD_RANK, EC_WORD_BELONGS_TO, EC_WORD_ME, EC_WORD_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_APPEAL, EC_WORD_THIS, EC_MOVE(OUTRAGE), EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Vince
+ .monSet = gBattleFrontierTrainerMons_Vince
},
- [223] = {
+ [FRONTIER_TRAINER_BRYON] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("BRYON"),
.speechBefore = {EC_WORD_MY, EC_MOVE2(BARRAGE), EC_WORD_WILL, EC_MOVE2(SLAM), EC_WORD_YOU, EC_WORD_EXCL},
.speechWin = {EC_WORD_YOU, EC_WORD_DIDN_T, EC_WORD_COUNT_ON, EC_WORD_ANY, EC_WORD_LESS, EC_WORD_QUES},
.speechLose = {EC_WORD_I, EC_WORD_JUST, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_IT, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Bryon
+ .monSet = gBattleFrontierTrainerMons_Bryon
},
- [224] = {
+ [FRONTIER_TRAINER_AVA] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("AVA"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_TREASURE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_WORLD},
.speechWin = {EC_WORD_MY, EC_WORD_WORLD, EC_WORD_IS, EC_WORD_FULL, EC_WORD_OF, EC_WORD_WONDER},
.speechLose = {EC_WORD_WHY, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_SO, EC_WORD_TERRIBLE, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Ava
+ .monSet = gBattleFrontierTrainerMons_Ava
},
- [225] = {
+ [FRONTIER_TRAINER_MIRIAM] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("MIRIAM"),
.speechBefore = {EC_WORD_OH, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_WITH, EC_WORD_A, EC_MOVE(SCARY_FACE)},
.speechWin = {EC_WORD_AHAHA, EC_WORD_YOU, EC_WORD_ONLY, EC_WORD_LOOK, EC_WORD_SCARY, EC_WORD_EXCL},
.speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_ARE, EC_WORD_SCARY},
- .monSets = gBattleFrontierTrainerMons_Miriam
+ .monSet = gBattleFrontierTrainerMons_Miriam
},
- [226] = {
+ [FRONTIER_TRAINER_CARRIE] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("CARRIE"),
.speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_SHOW, EC_WORD_YOU, EC_WORD_GUTSY, EC_WORD_EXCL},
.speechWin = {EC_WORD_IT_S, EC_WORD_ALL, EC_WORD_ABOUT, EC_WORD_GUTS, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_MOVE(SELF_DESTRUCT), EC_WORD_MODE, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Carrie
+ .monSet = gBattleFrontierTrainerMons_Carrie
},
- [227] = {
+ [FRONTIER_TRAINER_GILLIAN2] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("GILLIAN"),
.speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_A, EC_WORD_TRULY, EC_WORD_GREAT, EC_WORD_BATTLE},
.speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_A_LOT, EC_WORD_BETTER, EC_WORD_BATTLE, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_A_LITTLE, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_TAKE},
- .monSets = gBattleFrontierTrainerMons_Gillian2
+ .monSet = gBattleFrontierTrainerMons_Gillian2
},
- [228] = {
+ [FRONTIER_TRAINER_TYLER] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("TYLER"),
.speechBefore = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_LET_S, EC_WORD_GO, EC_WORD_EXCL_EXCL},
.speechWin = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_WON, EC_WORD_YO},
.speechLose = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_LOST, EC_WORD_YO},
- .monSets = gBattleFrontierTrainerMons_Tyler
+ .monSet = gBattleFrontierTrainerMons_Tyler
},
- [229] = {
+ [FRONTIER_TRAINER_CHAZ] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("CHAZ"),
.speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_HAVE, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_POWER},
.speechWin = {EC_WORD_THEY, EC_WORD_HAVE, EC_WORD_MORE, EC_WORD_POWER, EC_WORD_NOW, EC_WORD_EXCL},
.speechLose = {EC_WORD_YEAH, EC_MOVE2(TAKE_DOWN), EC_WORD_THEIR, EC_WORD_POWER, EC_WORD_A_TINY_BIT, EC_WORD_PLEASE},
- .monSets = gBattleFrontierTrainerMons_Chaz
+ .monSet = gBattleFrontierTrainerMons_Chaz
},
- [230] = {
+ [FRONTIER_TRAINER_NELSON] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
.trainerName = _("NELSON"),
.speechBefore = {EC_WORD_WELL_THEN, EC_WORD_WILL, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_WORK, EC_WORD_QUES},
.speechWin = {EC_WORD_I, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_IT, EC_WORD_WAS, EC_WORD_TOO_STRONG},
.speechLose = {EC_WORD_IT, EC_WORD_DIDN_T, EC_WORD_MATCH_UP, EC_WORD_WELL, EC_WORD_I, EC_WORD_THINK},
- .monSets = gBattleFrontierTrainerMons_Nelson
+ .monSet = gBattleFrontierTrainerMons_Nelson
},
- [231] = {
+ [FRONTIER_TRAINER_SHANIA] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.trainerName = _("SHANIA"),
.speechBefore = {EC_WORD_ALL, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ABSOLUTELY, EC_WORD_ADORE, EC_WORD_ME},
.speechWin = {EC_WORD_HAPPINESS, EC_WORD_IS, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_WITH, EC_WORD_CUTE_CHARM},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_SO, EC_WORD_MEAN, EC_WORD_TO, EC_WORD_CUTE, EC_WORD_POKEMON},
- .monSets = gBattleFrontierTrainerMons_Shania
+ .monSet = gBattleFrontierTrainerMons_Shania
},
- [232] = {
+ [FRONTIER_TRAINER_STELLA] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.trainerName = _("STELLA"),
.speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOUR, EC_WORD_POKEMON},
.speechWin = {EC_WORD_WELL, EC_WORD_AREN_T, EC_WORD_THEY, EC_WORD_BORING, EC_WORD_QUES, EC_WORD_AHAHA},
.speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_SOMETHING, EC_WORD_ELSE, EC_WORD_ALL_RIGHT},
- .monSets = gBattleFrontierTrainerMons_Stella
+ .monSet = gBattleFrontierTrainerMons_Stella
},
- [233] = {
+ [FRONTIER_TRAINER_DORINE] = {
.facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
.trainerName = _("DORINE"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AND, EC_WORD_STRONG, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_SEE, EC_WORD_QUES, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_GOOD, EC_WORD_QUES},
.speechLose = {EC_WORD_THIS, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_OUT, EC_WORD_AT, EC_WORD_ALL},
- .monSets = gBattleFrontierTrainerMons_Dorine
+ .monSet = gBattleFrontierTrainerMons_Dorine
},
- [234] = {
+ [FRONTIER_TRAINER_MADDOX] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("MADDOX"),
.speechBefore = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_MY, EC_WORD_NO_1, EC_WORD_CHOICE},
.speechWin = {EC_WORD_IT_S, EC_WORD_NO, EC_WORD_SECRET, EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_WIN},
.speechLose = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_LOSE, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Maddox
+ .monSet = gBattleFrontierTrainerMons_Maddox
},
- [235] = {
+ [FRONTIER_TRAINER_DAVIN] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("DAVIN"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_HEAR, EC_WORD_YOU, EC_MOVE2(ROAR), EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_WROOOAAR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_VICTORY, EC_WORD_EXCL_EXCL, 0xFFFF},
.speechLose = {EC_WORD_WROOOAAR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_WHY, EC_WORD_QUES_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Davin
+ .monSet = gBattleFrontierTrainerMons_Davin
},
- [236] = {
+ [FRONTIER_TRAINER_TREVON] = {
.facilityClass = FACILITY_CLASS_DRAGON_TAMER,
.trainerName = _("TREVON"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_LIVING, EC_WORD_ONLY, EC_WORD_WITH, EC_WORD_DRAGON, EC_WORD_POKEMON},
.speechWin = {EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_LIVING, EC_WORD_IS, EC_WORD_PERFECT},
.speechLose = {EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_LIVING},
- .monSets = gBattleFrontierTrainerMons_Trevon
+ .monSet = gBattleFrontierTrainerMons_Trevon
},
- [237] = {
+ [FRONTIER_TRAINER_MATEO] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("MATEO"),
.speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_OVER, EC_WORD_SOON, EC_WORD_ENOUGH},
.speechWin = {EC_WORD_WELL, EC_WORD_THAT, EC_WORD_DIDN_T, EC_WORD_TAKE, EC_WORD_VERY, EC_WORD_MUCH},
.speechLose = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_SO, EC_WORD_SOON, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Mateo
+ .monSet = gBattleFrontierTrainerMons_Mateo
},
- [238] = {
+ [FRONTIER_TRAINER_BRET] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("BRET"),
.speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_ROCK_SOLID, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST},
.speechWin = {EC_WORD_TOUGHNESS, EC_WORD_IS, EC_WORD_THE, EC_WORD_WAY, EC_WORD_TO, EC_WORD_GO},
.speechLose = {EC_WORD_I, EC_WORD_ALSO, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PLUSH_DOLL, EC_WORD_COLLECTION},
- .monSets = gBattleFrontierTrainerMons_Bret
+ .monSet = gBattleFrontierTrainerMons_Bret
},
- [239] = {
+ [FRONTIER_TRAINER_RAUL] = {
.facilityClass = FACILITY_CLASS_BLACK_BELT,
.trainerName = _("RAUL"),
.speechBefore = {EC_WORD_I, EC_WORD_REJECT, EC_WORD_EVERY, EC_WORD_WEAK, EC_WORD_TRAINER, 0xFFFF},
.speechWin = {EC_WORD_HUMPH, EC_WORD_EXCL, EC_WORD_ANOTHER, EC_WORD_WEAK, EC_WORD_TRAINER, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NOTHING, EC_WORD_WEAK, EC_WORD_ABOUT, EC_WORD_YOU},
- .monSets = gBattleFrontierTrainerMons_Raul
+ .monSet = gBattleFrontierTrainerMons_Raul
},
- [240] = {
+ [FRONTIER_TRAINER_KAY] = {
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("KAY"),
.speechBefore = {EC_WORD_AND, EC_WORD_YET, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_QUES, 0xFFFF},
.speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_GOOD, EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_AT, EC_WORD_LAST, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Kay
+ .monSet = gBattleFrontierTrainerMons_Kay
},
- [241] = {
+ [FRONTIER_TRAINER_ELENA] = {
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("ELENA"),
.speechBefore = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_THAT_S, EC_WORD_ME, EC_WORD_EXCL},
.speechWin = {EC_WORD_ISN_T, EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_AWESOME, EC_WORD_QUES},
.speechLose = {EC_WORD_YOU, EC_WORD_DISLIKE, EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Elena
+ .monSet = gBattleFrontierTrainerMons_Elena
},
- [242] = {
+ [FRONTIER_TRAINER_ALANA] = {
.facilityClass = FACILITY_CLASS_BATTLE_GIRL,
.trainerName = _("ALANA"),
.speechBefore = {EC_WORD_EAT, EC_WORD_MY, EC_WORD_INVINCIBLE, EC_WORD_ATTACK, EC_WORD_YOU, EC_WORD_EXCL},
.speechWin = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_LEARN, 0xFFFF},
.speechLose = {EC_WORD_SO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_MY, EC_WORD_INVINCIBLE, EC_WORD_ATTACK},
- .monSets = gBattleFrontierTrainerMons_Alana
+ .monSet = gBattleFrontierTrainerMons_Alana
},
- [243] = {
+ [FRONTIER_TRAINER_ALEXAS] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("ALEXAS"),
.speechBefore = {EC_WORD_GOOD, EC_WORD_TO, EC_WORD_MEET_YOU, EC_WORD_YOUNG, EC_WORD_TRAINER, EC_WORD_EXCL},
.speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, 0xFFFF, EC_WORD_GIVE, EC_WORD_IT, EC_WORD_UP},
.speechLose = {EC_WORD_YOU, EC_WORD_ARE, EC_WORD_A, EC_WORD_STRONG, EC_WORD_TRAINER, EC_WORD_KID},
- .monSets = gBattleFrontierTrainerMons_Alexas
+ .monSet = gBattleFrontierTrainerMons_Alexas
},
- [244] = {
+ [FRONTIER_TRAINER_WESTON] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("WESTON"),
.speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_PLAY, EC_WORD_DOWN, EC_WORD_ALL_RIGHT, EC_WORD_QUES},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_FAR, EC_WORD_TOO, EC_WORD_EASY, EC_WORD_TO, EC_WORD_ATTACK},
.speechLose = {EC_WORD_WELL, EC_WORD_WELL, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Weston
+ .monSet = gBattleFrontierTrainerMons_Weston
},
- [245] = {
+ [FRONTIER_TRAINER_JASPER] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("JASPER"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_OLD, EC_WORD_I_AM, EC_WORD_SKILLED, EC_WORD_EXCL},
.speechWin = {EC_WORD_SKILLED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_I_AM, EC_WORD_SHOCKED, EC_WORD_EXCL, EC_WORD_DOWN, EC_WORD_I, EC_WORD_GO},
- .monSets = gBattleFrontierTrainerMons_Jasper
+ .monSet = gBattleFrontierTrainerMons_Jasper
},
- [246] = {
+ [FRONTIER_TRAINER_NADIA] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("NADIA"),
.speechBefore = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_DOWN, EC_WORD_EXCL},
.speechWin = {EC_WORD_HAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_BEAT, EC_WORD_YOU},
.speechLose = {EC_WORD_I_AM, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_DOWNCAST, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Nadia
+ .monSet = gBattleFrontierTrainerMons_Nadia
},
- [247] = {
+ [FRONTIER_TRAINER_MIRANDA] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("MIRANDA"),
.speechBefore = {EC_WORD_WELL, EC_WORD_WELL, 0xFFFF, EC_WORD_LET_S, EC_WORD_START, 0xFFFF},
.speechWin = {EC_WORD_WHAT, EC_WORD_QUES, EC_WORD_DONE, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES},
.speechLose = {EC_WORD_WELL, EC_WORD_I, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_I_AM, EC_WORD_TOO_WEAK},
- .monSets = gBattleFrontierTrainerMons_Miranda
+ .monSet = gBattleFrontierTrainerMons_Miranda
},
- [248] = {
+ [FRONTIER_TRAINER_EMMA] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("EMMA"),
.speechBefore = {EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_ABOUT, EC_WORD_YOU, 0xFFFF},
.speechWin = {EC_WORD_I, EC_WORD_THINK, EC_WORD_I_VE, EC_WORD_MISHEARD, EC_WORD_THINGS, 0xFFFF},
.speechLose = {EC_WORD_WHAT, EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_IS, EC_WORD_RIGHT},
- .monSets = gBattleFrontierTrainerMons_Emma
+ .monSet = gBattleFrontierTrainerMons_Emma
},
- [249] = {
+ [FRONTIER_TRAINER_ROLANDO] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("ROLANDO"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_SUPER, EC_WORD_POKEMON, EC_WORD_HERO, EC_WORD_EXCL},
.speechWin = {EC_WORD_WAS, EC_WORD_THAT, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_YOU, EC_WORD_QUES},
.speechLose = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_BEAT, EC_WORD_A, EC_WORD_HERO},
- .monSets = gBattleFrontierTrainerMons_Rolando
+ .monSet = gBattleFrontierTrainerMons_Rolando
},
- [250] = {
+ [FRONTIER_TRAINER_STANLY] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("STANLY"),
.speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_AN, EC_WORD_EASY, EC_WORD_MATCH},
.speechWin = {EC_WORD_IT, EC_WORD_REALLY, EC_WORD_WAS, EC_WORD_EASY, 0xFFFF, 0xFFFF},
.speechLose = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_HAPPY, EC_WORD_NOW, EC_WORD_QUES, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Stanly
+ .monSet = gBattleFrontierTrainerMons_Stanly
},
- [251] = {
+ [FRONTIER_TRAINER_DARIO] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_M,
.trainerName = _("DARIO"),
.speechBefore = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_SAYS, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN},
.speechWin = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_HAS, EC_WORD_BEEN, EC_WORD_PERFECT, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_SEE, EC_WORD_THIS, EC_MOVE(REVERSAL), EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Dario
+ .monSet = gBattleFrontierTrainerMons_Dario
},
- [252] = {
+ [FRONTIER_TRAINER_KARLEE] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_F,
.trainerName = _("KARLEE"),
.speechBefore = {EC_WORD_SOMETHING, EC_WORD_GOOD, EC_WORD_WILL, EC_WORD_COME, EC_WORD_OF, EC_WORD_THIS},
.speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_FANTASTIC, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_THAT, EC_WORD_SOMETHING, EC_WORD_GOOD, EC_WORD_WENT, EC_WORD_TO, EC_WORD_YOU},
- .monSets = gBattleFrontierTrainerMons_Karlee
+ .monSet = gBattleFrontierTrainerMons_Karlee
},
- [253] = {
+ [FRONTIER_TRAINER_JAYLIN] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_F,
.trainerName = _("JAYLIN"),
.speechBefore = {EC_WORD_EVERY, EC_WORD_TRAINER, EC_WORD_HAS, EC_WORD_BEEN, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_IT_S, EC_WORD_MAKING, EC_WORD_ME, EC_MOVE(YAWN), EC_WORD_THAT, EC_WORD_BATTLE},
.speechLose = {EC_WORD_I, EC_WORD_SLEPT, EC_WORD_AND, EC_WORD_SO, EC_WORD_I, EC_WORD_LOST},
- .monSets = gBattleFrontierTrainerMons_Jaylin
+ .monSet = gBattleFrontierTrainerMons_Jaylin
},
- [254] = {
+ [FRONTIER_TRAINER_INGRID] = {
.facilityClass = FACILITY_CLASS_PSYCHIC_F,
.trainerName = _("INGRID"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_VERY, EC_WORD_MEAN, EC_WORD_TRAINER},
.speechWin = {EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_A, EC_WORD_GOOD, EC_WORD_MATCH, EC_WORD_QUES},
.speechLose = {EC_WORD_I, EC_WORD_LOST, EC_WORD_CAUSE, EC_WORD_YOU_RE, EC_WORD_MEAN, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Ingrid
+ .monSet = gBattleFrontierTrainerMons_Ingrid
},
- [255] = {
+ [FRONTIER_TRAINER_DELILAH] = {
.facilityClass = FACILITY_CLASS_HEX_MANIAC,
.trainerName = _("DELILAH"),
.speechBefore = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_IF_I_WIN, EC_WORD_OK_QUES, 0xFFFF},
.speechWin = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOU, EC_WORD_ANGRY},
.speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GRUDGE), EC_WORD_WITH, EC_WORD_YOU},
- .monSets = gBattleFrontierTrainerMons_Delilah
+ .monSet = gBattleFrontierTrainerMons_Delilah
},
- [256] = {
+ [FRONTIER_TRAINER_CARLY] = {
.facilityClass = FACILITY_CLASS_HEX_MANIAC,
.trainerName = _("CARLY"),
.speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_SCATTER, EC_WORD_SOME, EC_MOVE2(POISON_POWDER), EC_WORD_ABOUT},
.speechWin = {EC_WORD_IT_S, EC_WORD_SCARY, EC_WORD_HOW, EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS},
.speechLose = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_YOU, EC_WORD_AND, EC_WORD_YOUR, EC_WORD_POKEMON},
- .monSets = gBattleFrontierTrainerMons_Carly
+ .monSet = gBattleFrontierTrainerMons_Carly
},
- [257] = {
+ [FRONTIER_TRAINER_LEXIE] = {
.facilityClass = FACILITY_CLASS_HEX_MANIAC,
.trainerName = _("LEXIE"),
.speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_SCARY, EC_WORD_POKEMON, EC_WORD_QUES},
.speechWin = {EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_SCARY, EC_WORD_EH_QUES, 0xFFFF, 0xFFFF},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_SCARY, EC_WORD_THAN, EC_WORD_MY, EC_WORD_POKEMON},
- .monSets = gBattleFrontierTrainerMons_Lexie
+ .monSet = gBattleFrontierTrainerMons_Lexie
},
- [258] = {
+ [FRONTIER_TRAINER_MILLER] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("MILLER"),
.speechBefore = {EC_WORD_HELLO, EC_WORD_QUES, 0xFFFF, EC_WORD_HELLO, EC_WORD_QUES_EXCL, 0xFFFF},
.speechWin = {EC_WORD_HELLO, EC_WORD_MOTHER, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
.speechLose = {EC_WORD_MY, EC_WORD_PHONE, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Miller
+ .monSet = gBattleFrontierTrainerMons_Miller
},
- [259] = {
+ [FRONTIER_TRAINER_MARV] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("MARV"),
.speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_LOSE, EC_WORD_YOUR, EC_MOVE(SWAGGER), EC_WORD_NOW},
.speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_MOVE(SWAGGER), EC_WORD_LEFT, EC_WORD_EH_QUES},
.speechLose = {EC_WORD_GO, EC_WORD_ON, EC_MOVE(SWAGGER), EC_WORD_ALL, EC_WORD_YOU, EC_WORD_WANT},
- .monSets = gBattleFrontierTrainerMons_Marv
+ .monSet = gBattleFrontierTrainerMons_Marv
},
- [260] = {
+ [FRONTIER_TRAINER_LAYTON] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("LAYTON"),
.speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_TOTALLY, EC_WORD_COOL, EC_WORD_EXCL},
.speechWin = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_LOOK, EC_WORD_UP, EC_WORD_TO, EC_WORD_ME},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_NO, EC_WORD_REALLY, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Layton
+ .monSet = gBattleFrontierTrainerMons_Layton
},
- [261] = {
+ [FRONTIER_TRAINER_BROOKS] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("BROOKS"),
.speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_HIGH, EC_WORD_LEVEL, EC_WORD_BATTLE},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_HIGH, EC_WORD_LEVEL, EC_WORD_AND, EC_WORD_EXCITING, EC_WORD_TOO},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_TOO, EC_WORD_HIGH, EC_WORD_IN, EC_WORD_LEVEL, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Brooks
+ .monSet = gBattleFrontierTrainerMons_Brooks
},
- [262] = {
+ [FRONTIER_TRAINER_GREGORY] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("GREGORY"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD, EC_WORD_YET, 0xFFFF},
.speechWin = {EC_WORD_WHO, EC_WORD_SAYS, EC_WORD_I_AM, EC_WORD_TOO, EC_WORD_OLD, EC_WORD_QUES},
.speechLose = {EC_WORD_PLEASE, EC_WORD_I_AM, EC_WORD_REALLY, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD},
- .monSets = gBattleFrontierTrainerMons_Gregory
+ .monSet = gBattleFrontierTrainerMons_Gregory
},
- [263] = {
+ [FRONTIER_TRAINER_REESE] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("REESE"),
.speechBefore = {EC_WORD_I_VE, EC_WORD_A, EC_WORD_COUPLE, EC_WORD_THINGS, 0xFFFF, 0xFFFF},
.speechWin = {EC_WORD_DON_T, EC_WORD_DIET, EC_WORD_PLAY, EC_WORD_SPORTS, EC_WORD_INSTEAD, 0xFFFF},
.speechLose = {EC_WORD_INSTEAD, EC_WORD_OF, EC_WORD_TELEVISION, EC_WORD_GET, EC_WORD_A, EC_WORD_BOOK},
- .monSets = gBattleFrontierTrainerMons_Reese
+ .monSet = gBattleFrontierTrainerMons_Reese
},
- [264] = {
+ [FRONTIER_TRAINER_MASON] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.trainerName = _("MASON"),
.speechBefore = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_MAKE, EC_WORD_THIS, EC_WORD_SCARY, 0xFFFF},
.speechWin = {EC_WORD_THANK_YOU, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_NOW},
.speechLose = {EC_WORD_I_AM, EC_WORD_DISAPPOINTED, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Mason
+ .monSet = gBattleFrontierTrainerMons_Mason
},
- [265] = {
+ [FRONTIER_TRAINER_TOBY] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
.trainerName = _("TOBY"),
.speechBefore = {EC_WORD_LISTEN, EC_WORD_UP, 0xFFFF, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_WIN},
.speechWin = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_OR, EC_WORD_WHAT, EC_WORD_QUES},
.speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BEAT, EC_WORD_YOU, EC_WORD_AT, EC_WORD_SMARTNESS},
- .monSets = gBattleFrontierTrainerMons_Toby
+ .monSet = gBattleFrontierTrainerMons_Toby
},
- [266] = {
+ [FRONTIER_TRAINER_DOROTHY] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
.trainerName = _("DOROTHY"),
.speechBefore = {EC_WORD_THE, EC_WORD_SPORTS, EC_WORD_WORLD, EC_WORD_SHOULD, EC_WORD_ACCEPT, EC_WORD_POKEMON},
.speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT, EC_WORD_WIN, EC_WORD_WAS, EC_WORD_REFRESHING},
.speechLose = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT, EC_WORD_LOSS, EC_WORD_WAS, EC_WORD_REFRESHING},
- .monSets = gBattleFrontierTrainerMons_Dorothy
+ .monSet = gBattleFrontierTrainerMons_Dorothy
},
- [267] = {
+ [FRONTIER_TRAINER_PIPER] = {
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
.trainerName = _("PIPER"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_YOU, EC_WORD_NEED, EC_WORD_A, EC_WORD_SPEED_BOOST, EC_WORD_QUES},
.speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_SHOW, EC_WORD_MORE, EC_WORD_GUTS},
.speechLose = {EC_WORD_OH, EC_WORD_YOU, EC_WORD_EXCL, 0xFFFF, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Piper
+ .monSet = gBattleFrontierTrainerMons_Piper
},
- [268] = {
+ [FRONTIER_TRAINER_FINN] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
.trainerName = _("FINN"),
.speechBefore = {EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_TRAINER, EC_WORD_BATTLE, EC_WORD_ELLIPSIS, 0xFFFF},
.speechWin = {EC_WORD_WON_T, EC_WORD_THIS, EC_WORD_EVER, EC_WORD_END, EC_WORD_QUES, 0xFFFF},
.speechLose = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_GET, EC_WORD_TO, EC_MOVE2(REST), EC_WORD_A_LITTLE},
- .monSets = gBattleFrontierTrainerMons_Finn
+ .monSet = gBattleFrontierTrainerMons_Finn
},
- [269] = {
+ [FRONTIER_TRAINER_SAMIR] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
.trainerName = _("SAMIR"),
.speechBefore = {EC_WORD_I, EC_MOVE2(DIVE), EC_WORD_BELOW, EC_WORD_THE, EC_MOVE2(SURF), EC_WORD_EXCL},
.speechWin = {EC_WORD_YAHOO, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(DIVE), EC_WORD_YOU, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_SINK, EC_WORD_ELLIPSIS, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Samir
+ .monSet = gBattleFrontierTrainerMons_Samir
},
- [270] = {
+ [FRONTIER_TRAINER_FIONA] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
.trainerName = _("FIONA"),
.speechBefore = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_LIMBER, EC_WORD_UP, EC_WORD_BEFORE, EC_WORD_QUES},
.speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_BE, EC_WORD_MORE, EC_WORD_READY},
.speechLose = {EC_WORD_BEING, EC_WORD_LIMBER, EC_WORD_DIDN_T, EC_WORD_WORK, EC_WORD_FOR, EC_WORD_ME},
- .monSets = gBattleFrontierTrainerMons_Fiona
+ .monSet = gBattleFrontierTrainerMons_Fiona
},
- [271] = {
+ [FRONTIER_TRAINER_GLORIA] = {
.facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
.trainerName = _("GLORIA"),
.speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ATTACK, EC_WORD_WITH, EC_WORD_SUCTION_CUPS},
.speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_FOR, EC_WORD_YOU},
.speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_HOW, EC_WORD_SUCTION_CUPS, EC_WORD_WORK},
- .monSets = gBattleFrontierTrainerMons_Gloria
+ .monSet = gBattleFrontierTrainerMons_Gloria
},
- [272] = {
+ [FRONTIER_TRAINER_NICO] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
.trainerName = _("NICO"),
.speechBefore = {EC_WORD_LIKE, EC_WORD_A, EC_MOVE(SONIC_BOOM), EC_WORD_I_VE_ARRIVED, 0xFFFF, 0xFFFF},
.speechWin = {EC_WORD_SORRY, EC_WORD_TO, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SO, EC_WORD_DOWNCAST},
.speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_WITH, EC_WORD_A, EC_MOVE2(SUPERSONIC), EC_WORD_SPEED_BOOST},
- .monSets = gBattleFrontierTrainerMons_Nico
+ .monSet = gBattleFrontierTrainerMons_Nico
},
- [273] = {
+ [FRONTIER_TRAINER_JEREMY] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
.trainerName = _("JEREMY"),
.speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_MASTER, EC_WORD_THAT_S, EC_WORD_MY, EC_WORD_DREAM},
.speechWin = {EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ISN_T, EC_WORD_FAR, EC_WORD_OFF, EC_WORD_EXCL},
.speechLose = {EC_WORD_WHAT, EC_WORD_I, EC_WORD_DREAM, EC_WORD_ISN_T, EC_WORD_HAPPENING, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Jeremy
+ .monSet = gBattleFrontierTrainerMons_Jeremy
},
- [274] = {
+ [FRONTIER_TRAINER_CAITLIN] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
.trainerName = _("CAITLIN"),
.speechBefore = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_QUES},
.speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_MORE, EC_WORD_TO_ME, EC_WORD_THAN, EC_WORD_CUTENESS},
.speechLose = {EC_WORD_MY, EC_WORD_CUTE_CHARM, EC_WORD_DOESN_T, EC_MOVE2(ATTRACT), EC_WORD_YOU, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Caitlin
+ .monSet = gBattleFrontierTrainerMons_Caitlin
},
- [275] = {
+ [FRONTIER_TRAINER_REENA] = {
.facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
.trainerName = _("REENA"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_ALWAYS, EC_WORD_HAPPY, EC_WORD_HAPPY, EC_WORD_HAPPY, EC_WORD_EXCL},
.speechWin = {EC_WORD_OH, EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_YAHOO, EC_WORD_FOR, EC_WORD_ME},
.speechLose = {EC_WORD_YAHOO, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_YOU},
- .monSets = gBattleFrontierTrainerMons_Reena
+ .monSet = gBattleFrontierTrainerMons_Reena
},
- [276] = {
+ [FRONTIER_TRAINER_AVERY] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("AVERY"),
.speechBefore = {EC_WORD_I_VE, EC_WORD_GOT, EC_WORD_A_LOT, EC_WORD_OF, EC_WORD_BUG, EC_WORD_POKEMON},
.speechWin = {EC_WORD_MY, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ALL, EC_WORD_UNBELIEVABLE},
.speechLose = {EC_WORD_MY, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ALL, EC_WORD_UPSIDE_DOWN},
- .monSets = gBattleFrontierTrainerMons_Avery
+ .monSet = gBattleFrontierTrainerMons_Avery
},
- [277] = {
+ [FRONTIER_TRAINER_LIAM] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("LIAM"),
.speechBefore = {EC_WORD_WE, EC_WORD_REALLY, EC_WORD_DISLIKE, EC_WORD_FIRE, EC_WORD_AND, EC_WORD_FLYING},
.speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_BAD, EC_WORD_HEY_QUES, 0xFFFF},
.speechLose = {EC_WORD_YOU, EC_WORD_KNOW, EC_WORD_WHAT, EC_WORD_WE, EC_WORD_DISLIKE, EC_WORD_HEY_QUES},
- .monSets = gBattleFrontierTrainerMons_Liam
+ .monSet = gBattleFrontierTrainerMons_Liam
},
- [278] = {
+ [FRONTIER_TRAINER_THEO] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("THEO"),
.speechBefore = {EC_WORD_FISHING, EC_WORD_IS, EC_WORD_MY, EC_WORD_CHOICE, EC_WORD_IN, EC_WORD_LIFE},
.speechWin = {EC_WORD_WATER, EC_WORD_POKEMON, EC_MOVE2(ATTRACT), EC_WORD_ME, EC_WORD_WITHOUT, EC_WORD_END},
.speechLose = {EC_WORD_DON_T, EC_WORD_COUNT_ON, EC_WORD_THAT, EC_WORD_HAPPENING, EC_WORD_ANOTHER, EC_WORD_TIME},
- .monSets = gBattleFrontierTrainerMons_Theo
+ .monSet = gBattleFrontierTrainerMons_Theo
},
- [279] = {
+ [FRONTIER_TRAINER_BAILEY] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("BAILEY"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_WORD_BATTLE, EC_WORD_EASY},
.speechWin = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_MOVE2(SWALLOW), EC_WORD_JOY},
.speechLose = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_MOVE2(SWALLOW), EC_MOVE2(FRUSTRATION)},
- .monSets = gBattleFrontierTrainerMons_Bailey
+ .monSet = gBattleFrontierTrainerMons_Bailey
},
- [280] = {
+ [FRONTIER_TRAINER_HUGO] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("HUGO"),
.speechBefore = {EC_WORD_I, EC_WORD_TRY, EC_WORD_THE, EC_WORD_BEST, EC_WORD_I, EC_WORD_CAN},
.speechWin = {EC_WORD_I, EC_WORD_CAN_WIN, EC_WORD_IF, EC_WORD_I, EC_WORD_TRY, EC_WORD_ENOUGH},
.speechLose = {EC_WORD_I, EC_WORD_DID, EC_WORD_TRY, EC_WORD_DIDN_T, EC_WORD_I, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Hugo
+ .monSet = gBattleFrontierTrainerMons_Hugo
},
- [281] = {
+ [FRONTIER_TRAINER_BRYCE] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("BRYCE"),
.speechBefore = {EC_WORD_I_WAS, EC_WORD_ON, EC_WORD_VACATION, EC_WORD_UNTIL, EC_WORD_ONLY, EC_WORD_YESTERDAY},
.speechWin = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_LOST, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_YET},
.speechLose = {EC_WORD_THAT_S, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_NEED, EC_WORD_SLEEP},
- .monSets = gBattleFrontierTrainerMons_Bryce
+ .monSet = gBattleFrontierTrainerMons_Bryce
},
- [282] = {
+ [FRONTIER_TRAINER_GIDEON] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("GIDEON"),
.speechBefore = {EC_WORD_WHAT_S_UP_QUES, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_SCARY, EC_WORD_QUES},
.speechWin = {EC_WORD_I_AM, EC_WORD_COOL, EC_WORD_BUT, EC_WORD_NOT, EC_WORD_SCARY, EC_WORD_EXCL},
.speechLose = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_WORD_FABULOUS, EC_WORD_FASHION, EC_WORD_SENSE},
- .monSets = gBattleFrontierTrainerMons_Gideon
+ .monSet = gBattleFrontierTrainerMons_Gideon
},
- [283] = {
+ [FRONTIER_TRAINER_TRISTON] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("TRISTON"),
.speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_RATHER, EC_WORD_LOOK, EC_WORD_AT, EC_WORD_POKEMON},
.speechWin = {EC_WORD_HUH_QUES, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL},
.speechLose = {EC_WORD_SEE, EC_WORD_QUES, 0xFFFF, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_LOSE},
- .monSets = gBattleFrontierTrainerMons_Triston
+ .monSet = gBattleFrontierTrainerMons_Triston
},
- [284] = {
+ [FRONTIER_TRAINER_CHARLES] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("CHARLES"),
.speechBefore = {EC_WORD_IT_S, EC_WORD_HOPELESS, EC_WORD_TO, EC_MOVE2(STRUGGLE), EC_WORD_WITH, EC_WORD_ME},
.speechWin = {EC_MOVE(SUBMISSION), EC_WORD_WAS, EC_WORD_YOUR, EC_WORD_ONLY, EC_WORD_CHOICE, 0xFFFF},
.speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_DOWN, EC_WORD_DOWN, EC_WORD_DOWN, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Charles
+ .monSet = gBattleFrontierTrainerMons_Charles
},
- [285] = {
+ [FRONTIER_TRAINER_RAYMOND] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("RAYMOND"),
.speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_HEAR, EC_WORD_MY, EC_WORD_SONG, EC_WORD_QUES},
.speechWin = {EC_WORD_SATISFIED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_SATISFIED, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE},
- .monSets = gBattleFrontierTrainerMons_Raymond
+ .monSet = gBattleFrontierTrainerMons_Raymond
},
- [286] = {
+ [FRONTIER_TRAINER_DIRK] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("DIRK"),
.speechBefore = {EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ABOVE, EC_WORD_THE, EC_MOVE2(REST)},
.speechWin = {EC_WORD_YOU, EC_WORD_CAN_T_WIN, EC_WORD_EXCL, EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_RULE},
.speechLose = {EC_WORD_AREN_T, EC_WORD_THERE, EC_WORD_MORE, EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Dirk
+ .monSet = gBattleFrontierTrainerMons_Dirk
},
- [287] = {
+ [FRONTIER_TRAINER_HAROLD] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("HAROLD"),
.speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_APPEAL, EC_WORD_TO, EC_WORD_YOU, EC_WORD_QUES},
.speechWin = {EC_WORD_YOU, EC_WORD_DO, EC_WORD_LIKE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_QUES},
.speechLose = {EC_WORD_SO, EC_WORD_YOU, EC_WORD_DISLIKE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Harold
+ .monSet = gBattleFrontierTrainerMons_Harold
},
- [288] = {
+ [FRONTIER_TRAINER_OMAR] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("OMAR"),
.speechBefore = {EC_WORD_LET_ME_WIN, EC_WORD_IN, EC_MOVE(RETURN), EC_WORD_FOR, EC_WORD_A, EC_MOVE2(PRESENT)},
.speechWin = {EC_WORD_HERE, EC_WORD_YOU, EC_WORD_ARE, EC_WORD_SOME, EC_MOVE2(TOXIC), EC_WORD_SWEETS},
.speechLose = {EC_WORD_YOUR, EC_MOVE2(PRESENT), EC_WORD_QUES, EC_WORD_WHAT, EC_WORD_FOR, EC_WORD_QUES_EXCL},
- .monSets = gBattleFrontierTrainerMons_Omar
+ .monSet = gBattleFrontierTrainerMons_Omar
},
- [289] = {
+ [FRONTIER_TRAINER_PETER] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("PETER"),
.speechBefore = {EC_WORD_I, EC_WORD_BRAG, EC_WORD_ABOUT, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_OK_QUES},
.speechWin = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_LISTEN, EC_WORD_TO_ME, EC_WORD_BRAG},
.speechLose = {EC_WORD_I_AM, EC_WORD_DISAPPOINTED, EC_WORD_YOU, EC_WORD_WON_T, EC_WORD_LISTEN, EC_WORD_TO_ME},
- .monSets = gBattleFrontierTrainerMons_Peter
+ .monSet = gBattleFrontierTrainerMons_Peter
},
- [290] = {
+ [FRONTIER_TRAINER_DEV] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("DEV"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_LET_S, EC_WORD_GET, EC_WORD_A, EC_WORD_MOVE, EC_WORD_ON},
.speechWin = {EC_WORD_I, EC_WORD_GET, EC_WORD_TO, EC_WORD_NAP, EC_WORD_AFTER, EC_WORD_THAT},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_NAP, EC_WORD_AFTER, EC_WORD_THAT},
- .monSets = gBattleFrontierTrainerMons_Dev
+ .monSet = gBattleFrontierTrainerMons_Dev
},
- [291] = {
+ [FRONTIER_TRAINER_COREY] = {
.facilityClass = FACILITY_CLASS_HIKER,
.trainerName = _("COREY"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_TEACH, EC_WORD_YOU, EC_WORD_HOW, EC_WORD_TOUGH, EC_WORD_I_AM},
.speechWin = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_ME, EC_WORD_MAKE, EC_WORD_A, EC_MOVE(BRICK_BREAK)},
.speechLose = {EC_WORD_MY, EC_MOVE2(FRUSTRATION), EC_WORD_IS, EC_WORD_CLOSE, EC_WORD_TO, EC_MOVE2(ERUPTION)},
- .monSets = gBattleFrontierTrainerMons_Corey
+ .monSet = gBattleFrontierTrainerMons_Corey
},
- [292] = {
+ [FRONTIER_TRAINER_ANDRE] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("ANDRE"),
.speechBefore = {EC_WORD_NOW, EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_PERFECT, EC_WORD_FLAME_BODY},
.speechWin = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_WORD_FIERY, EC_WORD_DANCE, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU, EC_WORD_WANT, EC_WORD_AN, EC_MOVE2(EXPLOSION), EC_WORD_HERE, EC_WORD_QUES},
- .monSets = gBattleFrontierTrainerMons_Andre
+ .monSet = gBattleFrontierTrainerMons_Andre
},
- [293] = {
+ [FRONTIER_TRAINER_FERRIS] = {
.facilityClass = FACILITY_CLASS_KINDLER,
.trainerName = _("FERRIS"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_IN, EC_WORD_THE, EC_WORD_OLD, EC_WORD_CLASS},
.speechWin = {EC_WORD_NO_1, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NO_1, EC_WORD_ANY, EC_WORD_MORE, EC_WORD_ELLIPSIS},
- .monSets = gBattleFrontierTrainerMons_Ferris
+ .monSet = gBattleFrontierTrainerMons_Ferris
},
- [294] = {
+ [FRONTIER_TRAINER_ALIVIA] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("ALIVIA"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_GIDDY, EC_WORD_SO, EC_WORD_SHOULD, EC_WORD_YOU},
.speechWin = {EC_WORD_IT, EC_WORD_WAS, EC_WORD_ALL, EC_WORD_TOGETHER, EC_WORD_TOO, EC_WORD_EASY},
.speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GIDDY, EC_WORD_UP, EC_WORD_AND, EC_WORD_AWAY},
- .monSets = gBattleFrontierTrainerMons_Alivia
+ .monSet = gBattleFrontierTrainerMons_Alivia
},
- [295] = {
+ [FRONTIER_TRAINER_PAIGE] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("PAIGE"),
.speechBefore = {EC_WORD_LET_S, EC_WORD_ENJOY, EC_WORD_OUR, EC_WORD_BATTLE, EC_WORD_TOGETHER, 0xFFFF},
.speechWin = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH},
.speechLose = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_DO, EC_WORD_GO, EC_WORD_ON},
- .monSets = gBattleFrontierTrainerMons_Paige
+ .monSet = gBattleFrontierTrainerMons_Paige
},
- [296] = {
+ [FRONTIER_TRAINER_ANYA] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("ANYA"),
.speechBefore = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_OH, EC_WORD_SO, EC_WORD_PRETTY, EC_WORD_FASHION},
.speechWin = {EC_WORD_FASHION, EC_WORD_SHOULD, EC_WORD_MATCH, EC_WORD_THE, EC_WORD_PERSON, 0xFFFF},
.speechLose = {EC_WORD_PRETTY, EC_WORD_COULD, EC_WORD_BE, EC_WORD_GOOD, 0xFFFF, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Anya
+ .monSet = gBattleFrontierTrainerMons_Anya
},
- [297] = {
+ [FRONTIER_TRAINER_DAWN] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("DAWN"),
.speechBefore = {EC_WORD_I, EC_WORD_GO, EC_WORD_ALL, EC_WORD_OUT, EC_WORD_EXCL, 0xFFFF},
.speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_A, EC_WORD_BABY, EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_YOU, EC_WORD_WON, EC_WORD_EXCL, EC_WORD_MOVE, EC_WORD_ON, EC_WORD_EXCL},
- .monSets = gBattleFrontierTrainerMons_Dawn
+ .monSet = gBattleFrontierTrainerMons_Dawn
},
- [298] = {
+ [FRONTIER_TRAINER_ABBY] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("ABBY"),
.speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_THAT_S, EC_WORD_REFRESHING},
.speechWin = {EC_WORD_VICTORY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), EC_WORD_EXCL, 0xFFFF},
.speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_EXCL, 0xFFFF},
- .monSets = gBattleFrontierTrainerMons_Abby
+ .monSet = gBattleFrontierTrainerMons_Abby
},
- [299] = {
+ [FRONTIER_TRAINER_GRETEL] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("GRETEL"),
.speechBefore = {EC_WORD_I, EC_WORD_CAUSE, EC_MOVE(OUTRAGE), EC_WORD_AS, EC_WORD_A, EC_WORD_TRAINER},
.speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_SEE_YA, EC_WORD_BYE_BYE, EC_WORD_EXCL},
.speechLose = {EC_WORD_IT_S, EC_WORD_HARD, EC_WORD_TO, EC_WORD_BELIEVE, EC_WORD_BUT, EC_WORD_CONGRATS},
- .monSets = gBattleFrontierTrainerMons_Gretel
+ .monSet = gBattleFrontierTrainerMons_Gretel
}
};
diff --git a/src/data/battle_frontier/battle_tent.h b/src/data/battle_frontier/battle_tent.h
index 946ca0187..bf89c5bc3 100644
--- a/src/data/battle_frontier/battle_tent.h
+++ b/src/data/battle_frontier/battle_tent.h
@@ -1,1242 +1,1242 @@
// Slateport Battle Tent.
const u16 gSlateportBattleTentTrainerMons_Jolie[] =
{
- 9,
- 10,
- 13,
- 27,
- 35,
- 37,
- 42,
- 44,
- 45,
- 46,
- 63,
+ SLATEPORT_TENT_MON_CACNEA_1,
+ SLATEPORT_TENT_MON_LOMBRE_1,
+ SLATEPORT_TENT_MON_NUZLEAF,
+ SLATEPORT_TENT_MON_CACNEA_2,
+ SLATEPORT_TENT_MON_MAKUHITA,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_SOLROCK,
+ SLATEPORT_TENT_MON_KECLEON_2,
+ SLATEPORT_TENT_MON_SHROOMISH_1,
+ SLATEPORT_TENT_MON_SHROOMISH_2,
+ SLATEPORT_TENT_MON_BRELOOM,
-1
};
const u16 gSlateportBattleTentTrainerMons_Malachi[] =
{
- 9,
- 16,
- 17,
- 27,
- 36,
- 39,
- 42,
- 45,
- 48,
- 49,
- 53,
+ SLATEPORT_TENT_MON_CACNEA_1,
+ SLATEPORT_TENT_MON_GRAVELER,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_CACNEA_2,
+ SLATEPORT_TENT_MON_NUMEL_1,
+ SLATEPORT_TENT_MON_VIGOROTH,
+ SLATEPORT_TENT_MON_SOLROCK,
+ SLATEPORT_TENT_MON_SHROOMISH_1,
+ SLATEPORT_TENT_MON_NUMEL_2,
+ SLATEPORT_TENT_MON_TRAPINCH_2,
+ SLATEPORT_TENT_MON_SKITTY,
-1
};
const u16 gSlateportBattleTentTrainerMons_Kelsie[] =
{
- 4,
- 5,
- 6,
- 11,
- 28,
- 34,
- 35,
- 37,
- 43,
- 51,
- 53,
+ SLATEPORT_TENT_MON_WAILMER_1,
+ SLATEPORT_TENT_MON_WAILMER_2,
+ SLATEPORT_TENT_MON_MARILL_1,
+ SLATEPORT_TENT_MON_LOTAD,
+ SLATEPORT_TENT_MON_TAILLOW,
+ SLATEPORT_TENT_MON_WHISMUR,
+ SLATEPORT_TENT_MON_MAKUHITA,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_KECLEON_1,
+ SLATEPORT_TENT_MON_WINGULL_2,
+ SLATEPORT_TENT_MON_SKITTY,
-1
};
const u16 gSlateportBattleTentTrainerMons_Davon[] =
{
- 4,
- 5,
- 6,
- 12,
- 26,
- 36,
- 37,
- 38,
- 40,
- 44,
- 46,
- 50,
+ SLATEPORT_TENT_MON_WAILMER_1,
+ SLATEPORT_TENT_MON_WAILMER_2,
+ SLATEPORT_TENT_MON_MARILL_1,
+ SLATEPORT_TENT_MON_SEEDOT,
+ SLATEPORT_TENT_MON_TRAPINCH_1,
+ SLATEPORT_TENT_MON_NUMEL_1,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_TENTACOOL,
+ SLATEPORT_TENT_MON_MAGIKARP,
+ SLATEPORT_TENT_MON_KECLEON_2,
+ SLATEPORT_TENT_MON_SHROOMISH_2,
+ SLATEPORT_TENT_MON_PELIPPER_2,
-1
};
const u16 gSlateportBattleTentTrainerMons_Glenda[] =
{
- 0,
- 1,
- 17,
- 18,
- 19,
- 22,
- 23,
- 33,
- 42,
- 61,
- 64,
- 65,
- 66,
+ SLATEPORT_TENT_MON_ZIGZAGOON_1,
+ SLATEPORT_TENT_MON_ZIGZAGOON_2,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_MIGHTYENA_1,
+ SLATEPORT_TENT_MON_MIGHTYENA_2,
+ SLATEPORT_TENT_MON_ELECTRIKE_1,
+ SLATEPORT_TENT_MON_VOLTORB,
+ SLATEPORT_TENT_MON_MAGNEMITE,
+ SLATEPORT_TENT_MON_SOLROCK,
+ SLATEPORT_TENT_MON_KADABRA,
+ SLATEPORT_TENT_MON_PLUSLE_1,
+ SLATEPORT_TENT_MON_PLUSLE_2,
+ SLATEPORT_TENT_MON_ELECTRIKE_2,
-1
};
const u16 gSlateportBattleTentTrainerMons_Helena[] =
{
- 18,
- 19,
- 21,
- 38,
- 39,
- 41,
- 42,
- 52,
- 54,
- 58,
- 63,
+ SLATEPORT_TENT_MON_MIGHTYENA_1,
+ SLATEPORT_TENT_MON_MIGHTYENA_2,
+ SLATEPORT_TENT_MON_GOLDEEN,
+ SLATEPORT_TENT_MON_TENTACOOL,
+ SLATEPORT_TENT_MON_VIGOROTH,
+ SLATEPORT_TENT_MON_SEVIPER_1,
+ SLATEPORT_TENT_MON_SOLROCK,
+ SLATEPORT_TENT_MON_MARILL_2,
+ SLATEPORT_TENT_MON_SEVIPER_2,
+ SLATEPORT_TENT_MON_SWALOT,
+ SLATEPORT_TENT_MON_BRELOOM,
-1
};
const u16 gSlateportBattleTentTrainerMons_Rodolfo[] =
{
- 0,
- 1,
- 4,
- 5,
- 7,
- 8,
- 18,
- 20,
- 21,
- 37,
- 38,
- 40,
- 62,
+ SLATEPORT_TENT_MON_ZIGZAGOON_1,
+ SLATEPORT_TENT_MON_ZIGZAGOON_2,
+ SLATEPORT_TENT_MON_WAILMER_1,
+ SLATEPORT_TENT_MON_WAILMER_2,
+ SLATEPORT_TENT_MON_WINGULL_1,
+ SLATEPORT_TENT_MON_PELIPPER_1,
+ SLATEPORT_TENT_MON_MIGHTYENA_1,
+ SLATEPORT_TENT_MON_LINOONE,
+ SLATEPORT_TENT_MON_GOLDEEN,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_TENTACOOL,
+ SLATEPORT_TENT_MON_MAGIKARP,
+ SLATEPORT_TENT_MON_KIRLIA,
-1
};
const u16 gSlateportBattleTentTrainerMons_Davion[] =
{
- 17,
- 23,
- 24,
- 25,
- 31,
- 32,
- 33,
- 34,
- 39,
- 43,
- 44,
- 49,
- 57,
- 69,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_VOLTORB,
+ SLATEPORT_TENT_MON_ARON_1,
+ SLATEPORT_TENT_MON_ARON_2,
+ SLATEPORT_TENT_MON_LOUDRED,
+ SLATEPORT_TENT_MON_SPINDA,
+ SLATEPORT_TENT_MON_MAGNEMITE,
+ SLATEPORT_TENT_MON_WHISMUR,
+ SLATEPORT_TENT_MON_VIGOROTH,
+ SLATEPORT_TENT_MON_KECLEON_1,
+ SLATEPORT_TENT_MON_KECLEON_2,
+ SLATEPORT_TENT_MON_TRAPINCH_2,
+ SLATEPORT_TENT_MON_SANDSHREW,
+ SLATEPORT_TENT_MON_MACHOKE,
-1
};
const u16 gSlateportBattleTentTrainerMons_Kendall[] =
{
- 4,
- 7,
- 8,
- 9,
- 11,
- 12,
- 13,
- 27,
- 38,
- 40,
- 45,
- 46,
- 47,
- 63,
+ SLATEPORT_TENT_MON_WAILMER_1,
+ SLATEPORT_TENT_MON_WINGULL_1,
+ SLATEPORT_TENT_MON_PELIPPER_1,
+ SLATEPORT_TENT_MON_CACNEA_1,
+ SLATEPORT_TENT_MON_LOTAD,
+ SLATEPORT_TENT_MON_SEEDOT,
+ SLATEPORT_TENT_MON_NUZLEAF,
+ SLATEPORT_TENT_MON_CACNEA_2,
+ SLATEPORT_TENT_MON_TENTACOOL,
+ SLATEPORT_TENT_MON_MAGIKARP,
+ SLATEPORT_TENT_MON_SHROOMISH_1,
+ SLATEPORT_TENT_MON_SHROOMISH_2,
+ SLATEPORT_TENT_MON_LOMBRE_2,
+ SLATEPORT_TENT_MON_BRELOOM,
-1
};
const u16 gSlateportBattleTentTrainerMons_Colten[] =
{
- 0,
- 2,
- 12,
- 22,
- 28,
- 30,
- 35,
- 38,
- 43,
- 44,
- 56,
- 57,
+ SLATEPORT_TENT_MON_ZIGZAGOON_1,
+ SLATEPORT_TENT_MON_BEAUTIFLY,
+ SLATEPORT_TENT_MON_SEEDOT,
+ SLATEPORT_TENT_MON_ELECTRIKE_1,
+ SLATEPORT_TENT_MON_TAILLOW,
+ SLATEPORT_TENT_MON_GOLBAT_1,
+ SLATEPORT_TENT_MON_MAKUHITA,
+ SLATEPORT_TENT_MON_TENTACOOL,
+ SLATEPORT_TENT_MON_KECLEON_1,
+ SLATEPORT_TENT_MON_KECLEON_2,
+ SLATEPORT_TENT_MON_RALTS,
+ SLATEPORT_TENT_MON_SANDSHREW,
-1
};
const u16 gSlateportBattleTentTrainerMons_Irvin[] =
{
- 0,
- 1,
- 2,
- 3,
- 14,
- 15,
- 24,
- 25,
- 32,
- 34,
- 39,
- 59,
- 60,
+ SLATEPORT_TENT_MON_ZIGZAGOON_1,
+ SLATEPORT_TENT_MON_ZIGZAGOON_2,
+ SLATEPORT_TENT_MON_BEAUTIFLY,
+ SLATEPORT_TENT_MON_DUSTOX,
+ SLATEPORT_TENT_MON_NINJASK_1,
+ SLATEPORT_TENT_MON_NINJASK_2,
+ SLATEPORT_TENT_MON_ARON_1,
+ SLATEPORT_TENT_MON_ARON_2,
+ SLATEPORT_TENT_MON_SPINDA,
+ SLATEPORT_TENT_MON_WHISMUR,
+ SLATEPORT_TENT_MON_VIGOROTH,
+ SLATEPORT_TENT_MON_VOLBEAT,
+ SLATEPORT_TENT_MON_ILLUMISE,
-1
};
const u16 gSlateportBattleTentTrainerMons_Shaun[] =
{
- 17,
- 18,
- 19,
- 22,
- 29,
- 36,
- 42,
- 48,
- 61,
- 62,
- 66,
- 68,
- 69,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_MIGHTYENA_1,
+ SLATEPORT_TENT_MON_MIGHTYENA_2,
+ SLATEPORT_TENT_MON_ELECTRIKE_1,
+ SLATEPORT_TENT_MON_SWELLOW,
+ SLATEPORT_TENT_MON_NUMEL_1,
+ SLATEPORT_TENT_MON_SOLROCK,
+ SLATEPORT_TENT_MON_NUMEL_2,
+ SLATEPORT_TENT_MON_KADABRA,
+ SLATEPORT_TENT_MON_KIRLIA,
+ SLATEPORT_TENT_MON_ELECTRIKE_2,
+ SLATEPORT_TENT_MON_MACHOP,
+ SLATEPORT_TENT_MON_MACHOKE,
-1
};
const u16 gSlateportBattleTentTrainerMons_Kyler[] =
{
- 22,
- 23,
- 28,
- 29,
- 31,
- 32,
- 34,
- 39,
- 55,
- 64,
- 65,
- 67,
+ SLATEPORT_TENT_MON_ELECTRIKE_1,
+ SLATEPORT_TENT_MON_VOLTORB,
+ SLATEPORT_TENT_MON_TAILLOW,
+ SLATEPORT_TENT_MON_SWELLOW,
+ SLATEPORT_TENT_MON_LOUDRED,
+ SLATEPORT_TENT_MON_SPINDA,
+ SLATEPORT_TENT_MON_WHISMUR,
+ SLATEPORT_TENT_MON_VIGOROTH,
+ SLATEPORT_TENT_MON_GOLBAT_2,
+ SLATEPORT_TENT_MON_PLUSLE_1,
+ SLATEPORT_TENT_MON_PLUSLE_2,
+ SLATEPORT_TENT_MON_SWABLU,
-1
};
const u16 gSlateportBattleTentTrainerMons_Maggie[] =
{
- 10,
- 13,
- 17,
- 27,
- 45,
- 46,
- 53,
- 56,
- 61,
- 62,
- 63,
+ SLATEPORT_TENT_MON_LOMBRE_1,
+ SLATEPORT_TENT_MON_NUZLEAF,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_CACNEA_2,
+ SLATEPORT_TENT_MON_SHROOMISH_1,
+ SLATEPORT_TENT_MON_SHROOMISH_2,
+ SLATEPORT_TENT_MON_SKITTY,
+ SLATEPORT_TENT_MON_RALTS,
+ SLATEPORT_TENT_MON_KADABRA,
+ SLATEPORT_TENT_MON_KIRLIA,
+ SLATEPORT_TENT_MON_BRELOOM,
-1
};
const u16 gSlateportBattleTentTrainerMons_Stephon[] =
{
- 8,
- 10,
- 16,
- 23,
- 29,
- 43,
- 44,
- 60,
- 62,
- 63,
- 68,
+ SLATEPORT_TENT_MON_PELIPPER_1,
+ SLATEPORT_TENT_MON_LOMBRE_1,
+ SLATEPORT_TENT_MON_GRAVELER,
+ SLATEPORT_TENT_MON_VOLTORB,
+ SLATEPORT_TENT_MON_SWELLOW,
+ SLATEPORT_TENT_MON_KECLEON_1,
+ SLATEPORT_TENT_MON_KECLEON_2,
+ SLATEPORT_TENT_MON_ILLUMISE,
+ SLATEPORT_TENT_MON_KIRLIA,
+ SLATEPORT_TENT_MON_BRELOOM,
+ SLATEPORT_TENT_MON_MACHOP,
-1
};
const u16 gSlateportBattleTentTrainerMons_Rebecca[] =
{
- 8,
- 13,
- 21,
- 29,
- 33,
- 41,
- 48,
- 54,
- 59,
- 61,
- 68,
+ SLATEPORT_TENT_MON_PELIPPER_1,
+ SLATEPORT_TENT_MON_NUZLEAF,
+ SLATEPORT_TENT_MON_GOLDEEN,
+ SLATEPORT_TENT_MON_SWELLOW,
+ SLATEPORT_TENT_MON_MAGNEMITE,
+ SLATEPORT_TENT_MON_SEVIPER_1,
+ SLATEPORT_TENT_MON_NUMEL_2,
+ SLATEPORT_TENT_MON_SEVIPER_2,
+ SLATEPORT_TENT_MON_VOLBEAT,
+ SLATEPORT_TENT_MON_KADABRA,
+ SLATEPORT_TENT_MON_MACHOP,
-1
};
const u16 gSlateportBattleTentTrainerMons_Reggie[] =
{
- 6,
- 7,
- 17,
- 23,
- 24,
- 26,
- 32,
- 36,
- 52,
- 53,
- 57,
- 65,
+ SLATEPORT_TENT_MON_MARILL_1,
+ SLATEPORT_TENT_MON_WINGULL_1,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_VOLTORB,
+ SLATEPORT_TENT_MON_ARON_1,
+ SLATEPORT_TENT_MON_TRAPINCH_1,
+ SLATEPORT_TENT_MON_SPINDA,
+ SLATEPORT_TENT_MON_NUMEL_1,
+ SLATEPORT_TENT_MON_MARILL_2,
+ SLATEPORT_TENT_MON_SKITTY,
+ SLATEPORT_TENT_MON_SANDSHREW,
+ SLATEPORT_TENT_MON_PLUSLE_2,
-1
};
const u16 gSlateportBattleTentTrainerMons_Janae[] =
{
- 0,
- 1,
- 27,
- 28,
- 32,
- 34,
- 36,
- 37,
- 52,
- 53,
- 57,
- 65,
+ SLATEPORT_TENT_MON_ZIGZAGOON_1,
+ SLATEPORT_TENT_MON_ZIGZAGOON_2,
+ SLATEPORT_TENT_MON_CACNEA_2,
+ SLATEPORT_TENT_MON_TAILLOW,
+ SLATEPORT_TENT_MON_SPINDA,
+ SLATEPORT_TENT_MON_WHISMUR,
+ SLATEPORT_TENT_MON_NUMEL_1,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_MARILL_2,
+ SLATEPORT_TENT_MON_SKITTY,
+ SLATEPORT_TENT_MON_SANDSHREW,
+ SLATEPORT_TENT_MON_PLUSLE_2,
-1
};
const u16 gSlateportBattleTentTrainerMons_Caiden[] =
{
- 10,
- 14,
- 15,
- 16,
- 20,
- 21,
- 25,
- 30,
- 35,
- 47,
- 48,
- 50,
- 69,
+ SLATEPORT_TENT_MON_LOMBRE_1,
+ SLATEPORT_TENT_MON_NINJASK_1,
+ SLATEPORT_TENT_MON_NINJASK_2,
+ SLATEPORT_TENT_MON_GRAVELER,
+ SLATEPORT_TENT_MON_LINOONE,
+ SLATEPORT_TENT_MON_GOLDEEN,
+ SLATEPORT_TENT_MON_ARON_2,
+ SLATEPORT_TENT_MON_GOLBAT_1,
+ SLATEPORT_TENT_MON_MAKUHITA,
+ SLATEPORT_TENT_MON_LOMBRE_2,
+ SLATEPORT_TENT_MON_NUMEL_2,
+ SLATEPORT_TENT_MON_PELIPPER_2,
+ SLATEPORT_TENT_MON_MACHOKE,
-1
};
const u16 gSlateportBattleTentTrainerMons_Kirsten[] =
{
- 10,
- 16,
- 18,
- 19,
- 20,
- 21,
- 25,
- 30,
- 35,
- 39,
- 41,
- 48,
- 69,
+ SLATEPORT_TENT_MON_LOMBRE_1,
+ SLATEPORT_TENT_MON_GRAVELER,
+ SLATEPORT_TENT_MON_MIGHTYENA_1,
+ SLATEPORT_TENT_MON_MIGHTYENA_2,
+ SLATEPORT_TENT_MON_LINOONE,
+ SLATEPORT_TENT_MON_GOLDEEN,
+ SLATEPORT_TENT_MON_ARON_2,
+ SLATEPORT_TENT_MON_GOLBAT_1,
+ SLATEPORT_TENT_MON_MAKUHITA,
+ SLATEPORT_TENT_MON_VIGOROTH,
+ SLATEPORT_TENT_MON_SEVIPER_1,
+ SLATEPORT_TENT_MON_NUMEL_2,
+ SLATEPORT_TENT_MON_MACHOKE,
-1
};
const u16 gSlateportBattleTentTrainerMons_Kurtis[] =
{
- 0,
- 1,
- 36,
- 37,
- 40,
- 46,
- 49,
- 51,
- 64,
- 67,
- 68,
+ SLATEPORT_TENT_MON_ZIGZAGOON_1,
+ SLATEPORT_TENT_MON_ZIGZAGOON_2,
+ SLATEPORT_TENT_MON_NUMEL_1,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_MAGIKARP,
+ SLATEPORT_TENT_MON_SHROOMISH_2,
+ SLATEPORT_TENT_MON_TRAPINCH_2,
+ SLATEPORT_TENT_MON_WINGULL_2,
+ SLATEPORT_TENT_MON_PLUSLE_1,
+ SLATEPORT_TENT_MON_SWABLU,
+ SLATEPORT_TENT_MON_MACHOP,
-1
};
const u16 gSlateportBattleTentTrainerMons_Stefan[] =
{
- 4,
- 5,
- 21,
- 33,
- 37,
- 38,
- 40,
- 51,
- 52,
- 64,
- 65,
+ SLATEPORT_TENT_MON_WAILMER_1,
+ SLATEPORT_TENT_MON_WAILMER_2,
+ SLATEPORT_TENT_MON_GOLDEEN,
+ SLATEPORT_TENT_MON_MAGNEMITE,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_TENTACOOL,
+ SLATEPORT_TENT_MON_MAGIKARP,
+ SLATEPORT_TENT_MON_WINGULL_2,
+ SLATEPORT_TENT_MON_MARILL_2,
+ SLATEPORT_TENT_MON_PLUSLE_1,
+ SLATEPORT_TENT_MON_PLUSLE_2,
-1
};
const u16 gSlateportBattleTentTrainerMons_Avery[] =
{
- 2,
- 3,
- 7,
- 8,
- 22,
- 23,
- 28,
- 29,
- 30,
- 51,
- 67,
+ SLATEPORT_TENT_MON_BEAUTIFLY,
+ SLATEPORT_TENT_MON_DUSTOX,
+ SLATEPORT_TENT_MON_WINGULL_1,
+ SLATEPORT_TENT_MON_PELIPPER_1,
+ SLATEPORT_TENT_MON_ELECTRIKE_1,
+ SLATEPORT_TENT_MON_VOLTORB,
+ SLATEPORT_TENT_MON_TAILLOW,
+ SLATEPORT_TENT_MON_SWELLOW,
+ SLATEPORT_TENT_MON_GOLBAT_1,
+ SLATEPORT_TENT_MON_WINGULL_2,
+ SLATEPORT_TENT_MON_SWABLU,
-1
};
const u16 gSlateportBattleTentTrainerMons_Dwane[] =
{
- 14,
- 15,
- 30,
- 43,
- 44,
- 45,
- 46,
- 55,
- 58,
- 59,
- 63,
+ SLATEPORT_TENT_MON_NINJASK_1,
+ SLATEPORT_TENT_MON_NINJASK_2,
+ SLATEPORT_TENT_MON_GOLBAT_1,
+ SLATEPORT_TENT_MON_KECLEON_1,
+ SLATEPORT_TENT_MON_KECLEON_2,
+ SLATEPORT_TENT_MON_SHROOMISH_1,
+ SLATEPORT_TENT_MON_SHROOMISH_2,
+ SLATEPORT_TENT_MON_GOLBAT_2,
+ SLATEPORT_TENT_MON_SWALOT,
+ SLATEPORT_TENT_MON_VOLBEAT,
+ SLATEPORT_TENT_MON_BRELOOM,
-1
};
const u16 gSlateportBattleTentTrainerMons_Mckenna[] =
{
- 27,
- 29,
- 30,
- 32,
- 36,
- 48,
- 51,
- 52,
- 53,
- 57,
- 67,
+ SLATEPORT_TENT_MON_CACNEA_2,
+ SLATEPORT_TENT_MON_SWELLOW,
+ SLATEPORT_TENT_MON_GOLBAT_1,
+ SLATEPORT_TENT_MON_SPINDA,
+ SLATEPORT_TENT_MON_NUMEL_1,
+ SLATEPORT_TENT_MON_NUMEL_2,
+ SLATEPORT_TENT_MON_WINGULL_2,
+ SLATEPORT_TENT_MON_MARILL_2,
+ SLATEPORT_TENT_MON_SKITTY,
+ SLATEPORT_TENT_MON_SANDSHREW,
+ SLATEPORT_TENT_MON_SWABLU,
-1
};
const u16 gSlateportBattleTentTrainerMons_Camryn[] =
{
- 5,
- 6,
- 7,
- 8,
- 10,
- 16,
- 17,
- 20,
- 21,
- 37,
- 43,
- 44,
+ SLATEPORT_TENT_MON_WAILMER_2,
+ SLATEPORT_TENT_MON_MARILL_1,
+ SLATEPORT_TENT_MON_WINGULL_1,
+ SLATEPORT_TENT_MON_PELIPPER_1,
+ SLATEPORT_TENT_MON_LOMBRE_1,
+ SLATEPORT_TENT_MON_GRAVELER,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_LINOONE,
+ SLATEPORT_TENT_MON_GOLDEEN,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_KECLEON_1,
+ SLATEPORT_TENT_MON_KECLEON_2,
-1
};
const u16 gSlateportBattleTentTrainerMons_Natasha[] =
{
- 1,
- 3,
- 4,
- 5,
- 9,
- 11,
- 12,
- 20,
- 21,
- 22,
- 51,
+ SLATEPORT_TENT_MON_ZIGZAGOON_2,
+ SLATEPORT_TENT_MON_DUSTOX,
+ SLATEPORT_TENT_MON_WAILMER_1,
+ SLATEPORT_TENT_MON_WAILMER_2,
+ SLATEPORT_TENT_MON_CACNEA_1,
+ SLATEPORT_TENT_MON_LOTAD,
+ SLATEPORT_TENT_MON_SEEDOT,
+ SLATEPORT_TENT_MON_LINOONE,
+ SLATEPORT_TENT_MON_GOLDEEN,
+ SLATEPORT_TENT_MON_ELECTRIKE_1,
+ SLATEPORT_TENT_MON_WINGULL_2,
-1
};
const u16 gSlateportBattleTentTrainerMons_Austyn[] =
{
- 25,
- 31,
- 35,
- 37,
- 38,
- 39,
- 50,
- 51,
- 52,
- 58,
- 68,
- 69,
+ SLATEPORT_TENT_MON_ARON_2,
+ SLATEPORT_TENT_MON_LOUDRED,
+ SLATEPORT_TENT_MON_MAKUHITA,
+ SLATEPORT_TENT_MON_BARBOACH,
+ SLATEPORT_TENT_MON_TENTACOOL,
+ SLATEPORT_TENT_MON_VIGOROTH,
+ SLATEPORT_TENT_MON_PELIPPER_2,
+ SLATEPORT_TENT_MON_WINGULL_2,
+ SLATEPORT_TENT_MON_MARILL_2,
+ SLATEPORT_TENT_MON_SWALOT,
+ SLATEPORT_TENT_MON_MACHOP,
+ SLATEPORT_TENT_MON_MACHOKE,
-1
};
const u16 gSlateportBattleTentTrainerMons_Donovan[] =
{
- 10,
- 16,
- 17,
- 24,
- 25,
- 43,
- 44,
- 47,
- 49,
- 53,
- 59,
- 60,
- 64,
- 65,
+ SLATEPORT_TENT_MON_LOMBRE_1,
+ SLATEPORT_TENT_MON_GRAVELER,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_ARON_1,
+ SLATEPORT_TENT_MON_ARON_2,
+ SLATEPORT_TENT_MON_KECLEON_1,
+ SLATEPORT_TENT_MON_KECLEON_2,
+ SLATEPORT_TENT_MON_LOMBRE_2,
+ SLATEPORT_TENT_MON_TRAPINCH_2,
+ SLATEPORT_TENT_MON_SKITTY,
+ SLATEPORT_TENT_MON_VOLBEAT,
+ SLATEPORT_TENT_MON_ILLUMISE,
+ SLATEPORT_TENT_MON_PLUSLE_1,
+ SLATEPORT_TENT_MON_PLUSLE_2,
-1
};
const u16 gSlateportBattleTentTrainerMons_Tamia[] =
{
- 2,
- 6,
- 9,
- 13,
- 17,
- 19,
- 20,
- 24,
- 27,
- 29,
- 30,
+ SLATEPORT_TENT_MON_BEAUTIFLY,
+ SLATEPORT_TENT_MON_MARILL_1,
+ SLATEPORT_TENT_MON_CACNEA_1,
+ SLATEPORT_TENT_MON_NUZLEAF,
+ SLATEPORT_TENT_MON_BALTOY,
+ SLATEPORT_TENT_MON_MIGHTYENA_2,
+ SLATEPORT_TENT_MON_LINOONE,
+ SLATEPORT_TENT_MON_ARON_1,
+ SLATEPORT_TENT_MON_CACNEA_2,
+ SLATEPORT_TENT_MON_SWELLOW,
+ SLATEPORT_TENT_MON_GOLBAT_1,
-1
};
-const struct BattleFrontierTrainer gSlateportBattleTentTrainers[] =
+const struct BattleFrontierTrainer gSlateportBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] =
{
- [0] = {
+ [SLATEPORT_TENT_TRAINER_JOLIE] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("JOLIE"),
.speechBefore = {EC_WORD_WHAT, EC_WORD_WILL, EC_WORD_I, EC_WORD_BE, EC_WORD_TOMORROW, EC_WORD_QUES},
.speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LIKE, EC_WORD_IT_S, EC_WORD_FRIDAY, EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LIKE, EC_WORD_IT_S, EC_WORD_MONDAY, EC_WORD_ELLIPSIS},
- .monSets = gSlateportBattleTentTrainerMons_Jolie
+ .monSet = gSlateportBattleTentTrainerMons_Jolie
},
- [1] = {
+ [SLATEPORT_TENT_TRAINER_MALACHI] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("MALACHI"),
.speechBefore = {EC_WORD_BAD, EC_WORD_NEWS, EC_WORD_EXCL, EC_WORD_IT_S, EC_WORD_A, EC_MOVE(SAND_TOMB)},
.speechWin = {EC_WORD_YEEHAW_EXCL, -1, -1, EC_WORD_I_VE, EC_WORD_DONE, EC_WORD_IT},
.speechLose = {EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_IN, EC_WORD_THIS, EC_MOVE(SAND_TOMB), EC_WORD_ELLIPSIS},
- .monSets = gSlateportBattleTentTrainerMons_Malachi
+ .monSet = gSlateportBattleTentTrainerMons_Malachi
},
- [2] = {
+ [SLATEPORT_TENT_TRAINER_KELSIE] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("KELSIE"),
.speechBefore = {EC_WORD_GO, EC_WORD_EXCL_EXCL, EC_WORD_MY, EC_WORD_BATH, EC_WORD_POKEMON, EC_WORD_EXCL_EXCL},
.speechWin = {EC_WORD_YAHOO, EC_WORD_EXCL_EXCL, EC_WORD_MY, EC_WORD_BATH, EC_WORD_POKEMON, EC_WORD_EXCL_EXCL},
.speechLose = {EC_WORD_GWAH, EC_WORD_EXCL_EXCL, EC_WORD_MY, EC_WORD_BATH, EC_WORD_POKEMON, EC_WORD_EXCL_EXCL},
- .monSets = gSlateportBattleTentTrainerMons_Kelsie
+ .monSet = gSlateportBattleTentTrainerMons_Kelsie
},
- [3] = {
+ [SLATEPORT_TENT_TRAINER_DAVON] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("DAVON"),
.speechBefore = {EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL, -1, EC_WORD_GREAT, EC_MOVE(WHIRLPOOL), EC_WORD_ISN_T_IT_QUES},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL},
.speechLose = {EC_WORD_DON_T, EC_WORD_GET, EC_MOVE2(BEAT_UP), EC_WORD_IN, EC_WORD_THAT, EC_MOVE(WHIRLPOOL)},
- .monSets = gSlateportBattleTentTrainerMons_Davon
+ .monSet = gSlateportBattleTentTrainerMons_Davon
},
- [4] = {
+ [SLATEPORT_TENT_TRAINER_GLENDA] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("GLENDA"),
.speechBefore = {EC_WORD_CONVERSATION, EC_WORD_CAN, EC_WORD_WAIT, EC_WORD_UNTIL, EC_WORD_I, EC_WORD_WIN},
.speechWin = {EC_WORD_FABULOUS, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_ROCK},
.speechLose = {EC_WORD_NO, EC_WORD_EXCL, -1, EC_WORD_I, EC_WORD_WASN_T, EC_WORD_SERIOUS},
- .monSets = gSlateportBattleTentTrainerMons_Glenda
+ .monSet = gSlateportBattleTentTrainerMons_Glenda
},
- [5] = {
+ [SLATEPORT_TENT_TRAINER_HELENA] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("HELENA"),
.speechBefore = {EC_WORD_DOES, EC_WORD_MY, EC_WORD_BEAUTY, EC_WORD_INTIMIDATE, EC_WORD_YOU, EC_WORD_QUES},
.speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, EC_WORD_BUT, EC_WORD_YOU_RE, EC_WORD_BORING},
.speechLose = {EC_WORD_I, EC_WORD_DO, EC_WORD_SO, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_EXCL},
- .monSets = gSlateportBattleTentTrainerMons_Helena
+ .monSet = gSlateportBattleTentTrainerMons_Helena
},
- [6] = {
+ [SLATEPORT_TENT_TRAINER_RODOLFO] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("RODOLFO"),
.speechBefore = {EC_WORD_GO, EC_WORD_GET, EC_WORD_A, EC_POKEMON(WHISCASH), EC_WORD_FOR, EC_WORD_ME},
.speechWin = {EC_WORD_AWW, EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_HAVE, EC_WORD_A, EC_POKEMON(WHISCASH)},
.speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_POKEMON(WHISCASH), EC_WORD_BADLY},
- .monSets = gSlateportBattleTentTrainerMons_Rodolfo
+ .monSet = gSlateportBattleTentTrainerMons_Rodolfo
},
- [7] = {
+ [SLATEPORT_TENT_TRAINER_DAVION] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("DAVION"),
.speechBefore = {EC_WORD_GRAAAH, EC_WORD_GRAAAH, EC_WORD_EXCL_EXCL, EC_WORD_GRAAAH, EC_WORD_GRAAAH, EC_WORD_EXCL_EXCL},
.speechWin = {EC_MOVE2(ROAR), EC_WORD_EXCL, -1, EC_MOVE2(ROAR), EC_WORD_EXCL_EXCL, -1},
.speechLose = {EC_WORD_URGH, EC_WORD_WAAAH, EC_WORD_EXCL_EXCL, -1, -1, -1},
- .monSets = gSlateportBattleTentTrainerMons_Davion
+ .monSet = gSlateportBattleTentTrainerMons_Davion
},
- [8] = {
+ [SLATEPORT_TENT_TRAINER_KENDALL] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("KENDALL"),
.speechBefore = {EC_WORD_A_LITTLE, EC_MOVE2(PETAL_DANCE), EC_WORD_TO, EC_WORD_PLEASE, EC_WORD_YOU, EC_WORD_EXCL},
.speechWin = {EC_WORD_I, EC_WORD_DO, EC_WORD_THIS, EC_WORD_ONLY, EC_WORD_FOR, EC_WORD_WORK},
.speechLose = {EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_MOVE2(POUND), EC_WORD_ME, EC_WORD_QUES},
- .monSets = gSlateportBattleTentTrainerMons_Kendall
+ .monSet = gSlateportBattleTentTrainerMons_Kendall
},
- [9] = {
+ [SLATEPORT_TENT_TRAINER_COLTEN] = {
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("COLTEN"),
.speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_RUN, EC_WORD_AROUND},
.speechWin = {EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_WANT, EC_WORD_TO, EC_WORD_RUN, EC_WORD_QUES},
.speechLose = {EC_WORD_A, EC_WORD_SWIFT_SWIM, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_GOOD, EC_WORD_TOO},
- .monSets = gSlateportBattleTentTrainerMons_Colten
+ .monSet = gSlateportBattleTentTrainerMons_Colten
},
- [10] = {
+ [SLATEPORT_TENT_TRAINER_IRVIN] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("IRVIN"),
.speechBefore = {EC_WORD_HAVE, EC_WORD_A, EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_MOVE(CONFUSE_RAY)},
.speechWin = {EC_WORD_YAHOO, EC_WORD_MY, EC_MOVE(CONFUSE_RAY), EC_WORD_IS, EC_WORD_THE, EC_WORD_BEST},
.speechLose = {EC_WORD_GWAH, EC_WORD_EXCL_EXCL, -1, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_EXCL},
- .monSets = gSlateportBattleTentTrainerMons_Irvin
+ .monSet = gSlateportBattleTentTrainerMons_Irvin
},
- [11] = {
+ [SLATEPORT_TENT_TRAINER_SHAUN] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("SHAUN"),
.speechBefore = {EC_WORD_LISTEN, EC_WORD_ELLIPSIS, EC_WORD_YOU, EC_WORD_AREN_T, EC_WORD_VERY, EC_WORD_GOOD},
.speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_I, EC_WORD_WAS, EC_WORD_RIGHT},
.speechLose = {EC_WORD_YES, EC_WORD_YES, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_QUITE, EC_WORD_SOMETHING},
- .monSets = gSlateportBattleTentTrainerMons_Shaun
+ .monSet = gSlateportBattleTentTrainerMons_Shaun
},
- [12] = {
+ [SLATEPORT_TENT_TRAINER_KYLER] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("KYLER"),
.speechBefore = {EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_QUES},
.speechWin = {EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_YAY},
.speechLose = {EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_WOW},
- .monSets = gSlateportBattleTentTrainerMons_Kyler
+ .monSet = gSlateportBattleTentTrainerMons_Kyler
},
- [13] = {
+ [SLATEPORT_TENT_TRAINER_MAGGIE] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("MAGGIE"),
.speechBefore = {EC_POKEMON(VULPIX), EC_POKEMON(XATU), EC_POKEMON2(UMBREON), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_WORD_ELLIPSIS},
.speechWin = {EC_POKEMON(NOSEPASS), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_POKEMON(SEVIPER), EC_WORD_EXCL, -1},
.speechLose = {EC_POKEMON(NOSEPASS), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_POKEMON2(SNORLAX), EC_WORD_ELLIPSIS, EC_WORD_UH_OH},
- .monSets = gSlateportBattleTentTrainerMons_Maggie
+ .monSet = gSlateportBattleTentTrainerMons_Maggie
},
- [14] = {
+ [SLATEPORT_TENT_TRAINER_STEPHON] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("STEPHON"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_ENJOY, EC_WORD_AN, EC_WORD_EGG},
.speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_TASTY, EC_WORD_VICTORY},
.speechLose = {EC_WORD_AWFUL, EC_WORD_EXCL_EXCL, -1, EC_WORD_JUST, EC_WORD_AWFUL, EC_WORD_EXCL_EXCL},
- .monSets = gSlateportBattleTentTrainerMons_Stephon
+ .monSet = gSlateportBattleTentTrainerMons_Stephon
},
- [15] = {
+ [SLATEPORT_TENT_TRAINER_REBECCA] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("REBECCA"),
.speechBefore = {EC_WORD_THAT, EC_WORD_EGG, EC_WORD_HAS, EC_WORD_A, EC_WORD_TASTY, EC_WORD_SHINE},
.speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_EXCL, EC_WORD_SMELL, EC_WORD_THAT, EC_WORD_STENCH},
.speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_STOP, EC_WORD_ELLIPSIS},
- .monSets = gSlateportBattleTentTrainerMons_Rebecca
+ .monSet = gSlateportBattleTentTrainerMons_Rebecca
},
- [16] = {
+ [SLATEPORT_TENT_TRAINER_REGGIE] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("REGGIE"),
.speechBefore = {EC_WORD_POKEMON, EC_WORD_COME, EC_WORD_BEFORE, EC_WORD_MONEY, EC_WORD_OR, EC_WORD_FAMILY},
.speechWin = {EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_ME, EC_WORD_STRONG},
.speechLose = {EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_THICK, EC_WORD_ELLIPSIS},
- .monSets = gSlateportBattleTentTrainerMons_Reggie
+ .monSet = gSlateportBattleTentTrainerMons_Reggie
},
- [17] = {
+ [SLATEPORT_TENT_TRAINER_JANAE] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("JANAE"),
.speechBefore = {EC_WORD_I, EC_WORD_JUST, EC_WORD_ADORE, EC_WORD_YOUR, EC_WORD_TOUGH, EC_WORD_LOOK},
.speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_HOW, EC_WORD_YOU, EC_MOVE2(STRUGGLE), -1},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_AND, EC_WORD_AWFUL, EC_WORD_TRAINER},
- .monSets = gSlateportBattleTentTrainerMons_Janae
+ .monSet = gSlateportBattleTentTrainerMons_Janae
},
- [18] = {
+ [SLATEPORT_TENT_TRAINER_CAIDEN] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("CAIDEN"),
.speechBefore = {EC_WORD_MY, EC_MOVE2(CURSE), EC_WORD_WILL, EC_WORD_BREAK, EC_WORD_YOUR, EC_WORD_SPIRIT},
.speechWin = {EC_MOVE2(CURSE), EC_WORD_QUES, EC_WORD_IT_S, EC_WORD_A, EC_WORD_LIE, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_MY, EC_MOVE2(CURSE), EC_WORD_WILL, EC_WORD_LAST, EC_WORD_FOREVER, -1},
- .monSets = gSlateportBattleTentTrainerMons_Caiden
+ .monSet = gSlateportBattleTentTrainerMons_Caiden
},
- [19] = {
+ [SLATEPORT_TENT_TRAINER_KIRSTEN] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("KIRSTEN"),
.speechBefore = {EC_WORD_HUH_QUES, EC_WORD_A, EC_WORD_BATTLE, EC_WORD_YOU, EC_WORD_SAID, EC_WORD_QUES},
.speechWin = {EC_WORD_HUH_QUES, EC_WORD_STRONG, EC_WORD_BUT, EC_WORD_NOT, EC_WORD_STRONG, EC_WORD_ENOUGH},
.speechLose = {EC_WORD_HUH_QUES, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_TO, EC_WORD_YOUR, EC_MOVE(STRENGTH)},
- .monSets = gSlateportBattleTentTrainerMons_Kirsten
+ .monSet = gSlateportBattleTentTrainerMons_Kirsten
},
- [20] = {
+ [SLATEPORT_TENT_TRAINER_KURTIS] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("KURTIS"),
.speechBefore = {EC_WORD_SORRY, EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_GET, EC_MOVE2(BEAT_UP)},
.speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_WE, EC_WORD_WOULD, EC_MOVE2(POUND), EC_WORD_YOU},
.speechLose = {EC_WORD_HOW, EC_WORD_DID, EC_WORD_I, EC_WORD_GET, EC_MOVE2(BEAT_UP), EC_WORD_QUES},
- .monSets = gSlateportBattleTentTrainerMons_Kurtis
+ .monSet = gSlateportBattleTentTrainerMons_Kurtis
},
- [21] = {
+ [SLATEPORT_TENT_TRAINER_STEFAN] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("STEFAN"),
.speechBefore = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_WANT, EC_WORD_CUTE, EC_WORD_POKEMON, -1},
.speechWin = {EC_WORD_WHAT, EC_WORD_IS, EC_WORD_IT, EC_WORD_TO, EC_WORD_YOU, EC_WORD_QUES},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_KIND, EC_WORD_OF, EC_WORD_AWESOME, EC_WORD_ELLIPSIS, -1},
- .monSets = gSlateportBattleTentTrainerMons_Stefan
+ .monSet = gSlateportBattleTentTrainerMons_Stefan
},
- [22] = {
+ [SLATEPORT_TENT_TRAINER_AVERY] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("AVERY"),
.speechBefore = {EC_WORD_TOYS, EC_WORD_EXCL, EC_WORD_I, EC_WORD_NEED, EC_WORD_MORE, EC_WORD_TOYS},
.speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_SOME, EC_WORD_EASY, EC_WORD_MONEY, EC_WORD_FAST},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_WORK, EC_WORD_FOR, EC_WORD_MONEY},
- .monSets = gSlateportBattleTentTrainerMons_Avery
+ .monSet = gSlateportBattleTentTrainerMons_Avery
},
- [23] = {
+ [SLATEPORT_TENT_TRAINER_DWANE] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("DWANE"),
.speechBefore = {EC_WORD_MMM, EC_WORD_TASTY, EC_WORD_ELLIPSIS, EC_WORD_WONDER, EC_WORD_WHAT, EC_WORD_QUES},
.speechWin = {EC_WORD_MMM, EC_WORD_MMM, EC_WORD_ELLIPSIS, EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_KNOW},
.speechLose = {EC_WORD_MMM, EC_WORD_MMM, EC_WORD_ELLIPSIS, EC_WORD_OH_YEAH, EC_WORD_THIS_IS_IT_EXCL, -1},
- .monSets = gSlateportBattleTentTrainerMons_Dwane
+ .monSet = gSlateportBattleTentTrainerMons_Dwane
},
- [24] = {
+ [SLATEPORT_TENT_TRAINER_MCKENNA] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("MCKENNA"),
.speechBefore = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_SMALL, EC_WORD_TALK, EC_WORD_LET_S, EC_WORD_GO},
.speechWin = {EC_WORD_YUP, EC_WORD_THAT_S, EC_WORD_THAT, -1, -1, -1},
.speechLose = {EC_WORD_KTHX_BYE, -1, -1, -1, -1, -1},
- .monSets = gSlateportBattleTentTrainerMons_Mckenna
+ .monSet = gSlateportBattleTentTrainerMons_Mckenna
},
- [25] = {
+ [SLATEPORT_TENT_TRAINER_CAMRYN] = {
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("CAMRYN"),
.speechBefore = {EC_WORD_MR, EC_WORD_JUDGE, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_OUR, EC_WORD_TRUST},
.speechWin = {EC_WORD_YES_SIR_EXCL, EC_WORD_WE_RE, EC_WORD_NO_1, EC_WORD_IN, EC_WORD_THIS, EC_WORD_CONTEST},
.speechLose = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_GIVE_UP, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_DREAM},
- .monSets = gSlateportBattleTentTrainerMons_Camryn
+ .monSet = gSlateportBattleTentTrainerMons_Camryn
},
- [26] = {
+ [SLATEPORT_TENT_TRAINER_NATASHA] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("NATASHA"),
.speechBefore = {EC_WORD_COME_OVER, EC_WORD_TO, EC_WORD_MY, EC_WORD_PLACE, EC_WORD_OK_QUES, -1},
.speechWin = {EC_WORD_COME_ON, EC_WORD_OVER, EC_WORD_IT, EC_WORD_WILL, EC_WORD_BE, EC_WORD_GREAT},
.speechLose = {EC_WORD_AWW, EC_WORD_WON_T, EC_WORD_YOU, EC_WORD_COME_OVER, EC_WORD_QUES, -1},
- .monSets = gSlateportBattleTentTrainerMons_Natasha
+ .monSet = gSlateportBattleTentTrainerMons_Natasha
},
- [27] = {
+ [SLATEPORT_TENT_TRAINER_AUSTYN] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("AUSTYN"),
.speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_CARE, EC_WORD_HOW, EC_WORD_WE, EC_WORD_MATCH_UP},
.speechWin = {EC_WORD_HAH, EC_WORD_BACK, EC_WORD_TO, EC_WORD_SCHOOL, EC_WORD_FOR, EC_WORD_YOU},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MY, EC_WORD_LESSONS},
- .monSets = gSlateportBattleTentTrainerMons_Austyn
+ .monSet = gSlateportBattleTentTrainerMons_Austyn
},
- [28] = {
+ [SLATEPORT_TENT_TRAINER_DONOVAN] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("DONOVAN"),
.speechBefore = {EC_WORD_OH, EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_SLIMY, EC_WORD_ALL, EC_WORD_OVER},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_DOWN, EC_WORD_THE, EC_MOVE2(MEGA_DRAIN), EC_WORD_HAHAHA},
.speechLose = {EC_WORD_I_AM, EC_WORD_NATURALLY, EC_WORD_SLIMY, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM},
- .monSets = gSlateportBattleTentTrainerMons_Donovan
+ .monSet = gSlateportBattleTentTrainerMons_Donovan
},
- [29] = {
+ [SLATEPORT_TENT_TRAINER_TAMIA] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("TAMIA"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_WITH, EC_WORD_MY, EC_WORD_FATHER, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_DISLIKE, EC_WORD_MY, EC_WORD_FATHER, EC_WORD_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_JUST, EC_WORD_SO, EC_WORD_ADORE, EC_WORD_MY, EC_WORD_FATHER},
- .monSets = gSlateportBattleTentTrainerMons_Tamia
+ .monSet = gSlateportBattleTentTrainerMons_Tamia
}
};
-const struct FacilityMon gSlateportBattleTentMons[] =
+const struct FacilityMon gSlateportBattleTentMons[NUM_SLATEPORT_TENT_MONS] =
{
- [0] = {
+ [SLATEPORT_TENT_MON_ZIGZAGOON_1] = {
.species = SPECIES_ZIGZAGOON,
.moves = {MOVE_TACKLE, MOVE_CHARM, MOVE_ODOR_SLEUTH, MOVE_PIN_MISSILE},
.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [1] = {
+ [SLATEPORT_TENT_MON_ZIGZAGOON_2] = {
.species = SPECIES_ZIGZAGOON,
.moves = {MOVE_DIG, MOVE_MUD_SPORT, MOVE_TAIL_WHIP, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [2] = {
+ [SLATEPORT_TENT_MON_BEAUTIFLY] = {
.species = SPECIES_BEAUTIFLY,
.moves = {MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, MOVE_GUST, MOVE_HARDEN},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [3] = {
+ [SLATEPORT_TENT_MON_DUSTOX] = {
.species = SPECIES_DUSTOX,
.moves = {MOVE_POISON_STING, MOVE_MOONLIGHT, MOVE_PROTECT, MOVE_GUST},
.itemTableId = BATTLE_FRONTIER_ITEM_ORAN_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [4] = {
+ [SLATEPORT_TENT_MON_WAILMER_1] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_ROLLOUT, MOVE_CURSE, MOVE_GROWL, MOVE_WHIRLPOOL},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [5] = {
+ [SLATEPORT_TENT_MON_WAILMER_2] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_ROLLOUT, MOVE_GROWL, MOVE_WHIRLPOOL, MOVE_WATER_PULSE},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [6] = {
+ [SLATEPORT_TENT_MON_MARILL_1] = {
.species = SPECIES_MARILL,
.moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_BUBBLE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [7] = {
+ [SLATEPORT_TENT_MON_WINGULL_1] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_SUPERSONIC, MOVE_GROWL, MOVE_WING_ATTACK, MOVE_STEEL_WING},
.itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAIVE
},
- [8] = {
+ [SLATEPORT_TENT_MON_PELIPPER_1] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_TWISTER, MOVE_WATER_SPORT, MOVE_GROWL, MOVE_WING_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [9] = {
+ [SLATEPORT_TENT_MON_CACNEA_1] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_SANDSTORM, MOVE_LEER, MOVE_LEECH_SEED, MOVE_PIN_MISSILE},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SPEED,
.nature = NATURE_JOLLY
},
- [10] = {
+ [SLATEPORT_TENT_MON_LOMBRE_1] = {
.species = SPECIES_LOMBRE,
.moves = {MOVE_ASTONISH, MOVE_WATER_GUN, MOVE_FAKE_OUT, MOVE_ABSORB},
.itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [11] = {
+ [SLATEPORT_TENT_MON_LOTAD] = {
.species = SPECIES_LOTAD,
.moves = {MOVE_SYNTHESIS, MOVE_NATURE_POWER, MOVE_RAIN_DANCE, MOVE_MEGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_DOCILE
},
- [12] = {
+ [SLATEPORT_TENT_MON_SEEDOT] = {
.species = SPECIES_SEEDOT,
.moves = {MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_LEECH_SEED, MOVE_BIDE},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_TIMID
},
- [13] = {
+ [SLATEPORT_TENT_MON_NUZLEAF] = {
.species = SPECIES_NUZLEAF,
.moves = {MOVE_FAKE_OUT, MOVE_NATURE_POWER, MOVE_HARDEN, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [14] = {
+ [SLATEPORT_TENT_MON_NINJASK_1] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_FURY_CUTTER, MOVE_SCREECH, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [15] = {
+ [SLATEPORT_TENT_MON_NINJASK_2] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_FURY_CUTTER, MOVE_DOUBLE_TEAM, MOVE_SCREECH, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [16] = {
+ [SLATEPORT_TENT_MON_GRAVELER] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_MUD_SPORT, MOVE_BLOCK, MOVE_ROCK_TOMB, MOVE_MAGNITUDE},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [17] = {
+ [SLATEPORT_TENT_MON_BALTOY] = {
.species = SPECIES_BALTOY,
.moves = {MOVE_SELF_DESTRUCT, MOVE_ANCIENT_POWER, MOVE_PSYBEAM, MOVE_REFLECT},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAIVE
},
- [18] = {
+ [SLATEPORT_TENT_MON_MIGHTYENA_1] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_BITE, MOVE_ROAR, MOVE_SWAGGER, MOVE_TACKLE},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [19] = {
+ [SLATEPORT_TENT_MON_MIGHTYENA_2] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_ODOR_SLEUTH, MOVE_HOWL, MOVE_SAND_ATTACK, MOVE_POISON_FANG},
.itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [20] = {
+ [SLATEPORT_TENT_MON_LINOONE] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_HEADBUTT, MOVE_TICKLE, MOVE_TAIL_WHIP, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_JOLLY
},
- [21] = {
+ [SLATEPORT_TENT_MON_GOLDEEN] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_WATER_SPORT, MOVE_HORN_ATTACK, MOVE_WATERFALL, MOVE_SUPERSONIC},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_CALM
},
- [22] = {
+ [SLATEPORT_TENT_MON_ELECTRIKE_1] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_BITE, MOVE_SPARK, MOVE_ROAR, MOVE_FLASH},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_MODEST
},
- [23] = {
+ [SLATEPORT_TENT_MON_VOLTORB] = {
.species = SPECIES_VOLTORB,
.moves = {MOVE_SPARK, MOVE_ROLLOUT, MOVE_CHARGE, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
.nature = NATURE_MILD
},
- [24] = {
+ [SLATEPORT_TENT_MON_ARON_1] = {
.species = SPECIES_ARON,
.moves = {MOVE_DIG, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_ENDEAVOR},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [25] = {
+ [SLATEPORT_TENT_MON_ARON_2] = {
.species = SPECIES_ARON,
.moves = {MOVE_MUD_SLAP, MOVE_IRON_TAIL, MOVE_HARDEN, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [26] = {
+ [SLATEPORT_TENT_MON_TRAPINCH_1] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_BODY_SLAM, MOVE_FOCUS_ENERGY, MOVE_SAND_TOMB, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [27] = {
+ [SLATEPORT_TENT_MON_CACNEA_2] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_INGRAIN, MOVE_SANDSTORM, MOVE_POISON_STING, MOVE_DESTINY_BOND},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_TIMID
},
- [28] = {
+ [SLATEPORT_TENT_MON_TAILLOW] = {
.species = SPECIES_TAILLOW,
.moves = {MOVE_GROWL, MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_ENDEAVOR},
.itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [29] = {
+ [SLATEPORT_TENT_MON_SWELLOW] = {
.species = SPECIES_SWELLOW,
.moves = {MOVE_SUPERSONIC, MOVE_GROWL, MOVE_FOCUS_ENERGY, MOVE_PECK},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [30] = {
+ [SLATEPORT_TENT_MON_GOLBAT_1] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_ASTONISH, MOVE_GUST, MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY},
.itemTableId = BATTLE_FRONTIER_ITEM_SPELL_TAG,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
.nature = NATURE_TIMID
},
- [31] = {
+ [SLATEPORT_TENT_MON_LOUDRED] = {
.species = SPECIES_LOUDRED,
.moves = {MOVE_ASTONISH, MOVE_SCREECH, MOVE_UPROAR, MOVE_SUPERSONIC},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [32] = {
+ [SLATEPORT_TENT_MON_SPINDA] = {
.species = SPECIES_SPINDA,
.moves = {MOVE_DIZZY_PUNCH, MOVE_FAINT_ATTACK, MOVE_HYPNOSIS, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [33] = {
+ [SLATEPORT_TENT_MON_MAGNEMITE] = {
.species = SPECIES_MAGNEMITE,
.moves = {MOVE_METAL_SOUND, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SPARK},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_SERIOUS
},
- [34] = {
+ [SLATEPORT_TENT_MON_WHISMUR] = {
.species = SPECIES_WHISMUR,
.moves = {MOVE_REST, MOVE_SLEEP_TALK, MOVE_HOWL, MOVE_BODY_SLAM},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [35] = {
+ [SLATEPORT_TENT_MON_MAKUHITA] = {
.species = SPECIES_MAKUHITA,
.moves = {MOVE_SAND_ATTACK, MOVE_KNOCK_OFF, MOVE_ARM_THRUST, MOVE_BELLY_DRUM},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [36] = {
+ [SLATEPORT_TENT_MON_NUMEL_1] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_GROWL, MOVE_FOCUS_ENERGY},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_MODEST
},
- [37] = {
+ [SLATEPORT_TENT_MON_BARBOACH] = {
.species = SPECIES_BARBOACH,
.moves = {MOVE_MAGNITUDE, MOVE_MUD_SPORT, MOVE_WATER_SPORT, MOVE_WATER_GUN},
.itemTableId = BATTLE_FRONTIER_ITEM_SEA_INCENSE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_JOLLY
},
- [38] = {
+ [SLATEPORT_TENT_MON_TENTACOOL] = {
.species = SPECIES_TENTACOOL,
.moves = {MOVE_SCREECH, MOVE_BUBBLE_BEAM, MOVE_ACID, MOVE_BARRIER},
.itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [39] = {
+ [SLATEPORT_TENT_MON_VIGOROTH] = {
.species = SPECIES_VIGOROTH,
.moves = {MOVE_FOCUS_ENERGY, MOVE_FURY_SWIPES, MOVE_ENDURE, MOVE_YAWN},
.itemTableId = BATTLE_FRONTIER_ITEM_AGUAV_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [40] = {
+ [SLATEPORT_TENT_MON_MAGIKARP] = {
.species = SPECIES_MAGIKARP,
.moves = {MOVE_TACKLE, MOVE_FLAIL, MOVE_SPLASH, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_SCALE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [41] = {
+ [SLATEPORT_TENT_MON_SEVIPER_1] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_LICK, MOVE_POISON_FANG, MOVE_GLARE, MOVE_WRAP},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [42] = {
+ [SLATEPORT_TENT_MON_SOLROCK] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_ROCK_THROW, MOVE_HARDEN, MOVE_PSYWAVE, MOVE_TACKLE},
.itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [43] = {
+ [SLATEPORT_TENT_MON_KECLEON_1] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_PSYBEAM, MOVE_SUBSTITUTE, MOVE_THIEF, MOVE_TAIL_WHIP},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [44] = {
+ [SLATEPORT_TENT_MON_KECLEON_2] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_FAINT_ATTACK, MOVE_ASTONISH, MOVE_LICK, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_IAPAPA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [45] = {
+ [SLATEPORT_TENT_MON_SHROOMISH_1] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_STUN_SPORE, MOVE_TACKLE, MOVE_LEECH_SEED, MOVE_MEGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [46] = {
+ [SLATEPORT_TENT_MON_SHROOMISH_2] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_ABSORB, MOVE_STUN_SPORE, MOVE_SPORE, MOVE_LEECH_SEED},
.itemTableId = BATTLE_FRONTIER_ITEM_FIGY_BERRY,
.evSpread = F_EV_SPREAD_ATTACK,
.nature = NATURE_BRAVE
},
- [47] = {
+ [SLATEPORT_TENT_MON_LOMBRE_2] = {
.species = SPECIES_LOMBRE,
.moves = {MOVE_NATURE_POWER, MOVE_ASTONISH, MOVE_GROWL, MOVE_ABSORB},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_LONELY
},
- [48] = {
+ [SLATEPORT_TENT_MON_NUMEL_2] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_EMBER, MOVE_GROWL, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY},
.itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [49] = {
+ [SLATEPORT_TENT_MON_TRAPINCH_2] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_FAINT_ATTACK, MOVE_DIG, MOVE_BITE, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [50] = {
+ [SLATEPORT_TENT_MON_PELIPPER_2] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_WING_ATTACK, MOVE_SUPERSONIC, MOVE_MIST, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_WIKI_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [51] = {
+ [SLATEPORT_TENT_MON_WINGULL_2] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_GROWL, MOVE_ICY_WIND},
.itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [52] = {
+ [SLATEPORT_TENT_MON_MARILL_2] = {
.species = SPECIES_MARILL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_RAIN_DANCE, MOVE_TAIL_WHIP, MOVE_WATER_GUN},
.itemTableId = BATTLE_FRONTIER_ITEM_GANLON_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [53] = {
+ [SLATEPORT_TENT_MON_SKITTY] = {
.species = SPECIES_SKITTY,
.moves = {MOVE_ASSIST, MOVE_ATTRACT, MOVE_SING, MOVE_CHARM},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [54] = {
+ [SLATEPORT_TENT_MON_SEVIPER_2] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_SWAGGER, MOVE_WRAP, MOVE_POISON_TAIL, MOVE_HAZE},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
.nature = NATURE_BRAVE
},
- [55] = {
+ [SLATEPORT_TENT_MON_GOLBAT_2] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_BITE, MOVE_TORMENT, MOVE_SCREECH, MOVE_POISON_FANG},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_HARDY
},
- [56] = {
+ [SLATEPORT_TENT_MON_RALTS] = {
.species = SPECIES_RALTS,
.moves = {MOVE_HYPNOSIS, MOVE_IMPRISON, MOVE_PSYCHIC, MOVE_DREAM_EATER},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGO_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_TIMID
},
- [57] = {
+ [SLATEPORT_TENT_MON_SANDSHREW] = {
.species = SPECIES_SANDSHREW,
.moves = {MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_SAND_TOMB, MOVE_DEFENSE_CURL},
.itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
.evSpread = 0,
.nature = NATURE_HARDY
},
- [58] = {
+ [SLATEPORT_TENT_MON_SWALOT] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_YAWN, MOVE_SLUDGE, MOVE_ENCORE, MOVE_POUND},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_IMPISH
},
- [59] = {
+ [SLATEPORT_TENT_MON_VOLBEAT] = {
.species = SPECIES_VOLBEAT,
.moves = {MOVE_TACKLE, MOVE_CONFUSE_RAY, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [60] = {
+ [SLATEPORT_TENT_MON_ILLUMISE] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_CHARM, MOVE_TACKLE, MOVE_ENCORE, MOVE_MOONLIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [61] = {
+ [SLATEPORT_TENT_MON_KADABRA] = {
.species = SPECIES_KADABRA,
.moves = {MOVE_DISABLE, MOVE_CONFUSION, MOVE_REFLECT, MOVE_RECOVER},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [62] = {
+ [SLATEPORT_TENT_MON_KIRLIA] = {
.species = SPECIES_KIRLIA,
.moves = {MOVE_CALM_MIND, MOVE_CONFUSION, MOVE_DOUBLE_TEAM, MOVE_GROWL},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [63] = {
+ [SLATEPORT_TENT_MON_BRELOOM] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_ABSORB, MOVE_TACKLE, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAIVE
},
- [64] = {
+ [SLATEPORT_TENT_MON_PLUSLE_1] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_SPARK, MOVE_ENCORE, MOVE_THUNDER_WAVE, MOVE_GROWL},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_LONELY
},
- [65] = {
+ [SLATEPORT_TENT_MON_PLUSLE_2] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_SPARK, MOVE_FAKE_TEARS, MOVE_SUBSTITUTE, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MILD
},
- [66] = {
+ [SLATEPORT_TENT_MON_ELECTRIKE_2] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_SPARK, MOVE_CHARGE, MOVE_ROAR, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_APICOT_BERRY,
.evSpread = F_EV_SPREAD_SPEED,
.nature = NATURE_TIMID
},
- [67] = {
+ [SLATEPORT_TENT_MON_SWABLU] = {
.species = SPECIES_SWABLU,
.moves = {MOVE_SING, MOVE_PECK, MOVE_STEEL_WING, MOVE_SAFEGUARD},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [68] = {
+ [SLATEPORT_TENT_MON_MACHOP] = {
.species = SPECIES_MACHOP,
.moves = {MOVE_FOCUS_ENERGY, MOVE_VITAL_THROW, MOVE_SEISMIC_TOSS, MOVE_FORESIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [69] = {
+ [SLATEPORT_TENT_MON_MACHOKE] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_FOCUS_ENERGY, MOVE_LEER, MOVE_KARATE_CHOP, MOVE_FORESIGHT},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
@@ -1248,873 +1248,873 @@ const struct FacilityMon gSlateportBattleTentMons[] =
// Verdanturf Battle Tent.
const u16 gVerdanturfBattleTentTrainerMons_Brenna[] =
{
- 4,
- 11,
- 13,
- 18,
- 26,
+ VERDANTURF_TENT_MON_SHROOMISH,
+ VERDANTURF_TENT_MON_SWALOT,
+ VERDANTURF_TENT_MON_BALTOY,
+ VERDANTURF_TENT_MON_LOTAD,
+ VERDANTURF_TENT_MON_NUZLEAF,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Dilan[] =
{
- 30,
- 37,
- 13,
- 29,
- 42,
+ VERDANTURF_TENT_MON_GRAVELER,
+ VERDANTURF_TENT_MON_TRAPINCH,
+ VERDANTURF_TENT_MON_BALTOY,
+ VERDANTURF_TENT_MON_SOLROCK,
+ VERDANTURF_TENT_MON_MACHOKE,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Eliana[] =
{
- 6,
- 7,
- 17,
- 18,
- 40,
+ VERDANTURF_TENT_MON_MAGIKARP,
+ VERDANTURF_TENT_MON_BARBOACH,
+ VERDANTURF_TENT_MON_GOLDEEN_1,
+ VERDANTURF_TENT_MON_LOTAD,
+ VERDANTURF_TENT_MON_WAILMER,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Markus[] =
{
- 6,
- 7,
- 18,
- 24,
- 38,
+ VERDANTURF_TENT_MON_MAGIKARP,
+ VERDANTURF_TENT_MON_BARBOACH,
+ VERDANTURF_TENT_MON_LOTAD,
+ VERDANTURF_TENT_MON_GOLDEEN_2,
+ VERDANTURF_TENT_MON_TENTACOOL,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Caitlyn[] =
{
- 0,
- 12,
- 25,
- 28,
- 22,
- 44,
+ VERDANTURF_TENT_MON_POOCHYENA,
+ VERDANTURF_TENT_MON_KECLEON,
+ VERDANTURF_TENT_MON_ELECTRIKE,
+ VERDANTURF_TENT_MON_MIGHTYENA,
+ VERDANTURF_TENT_MON_SKARMORY,
+ VERDANTURF_TENT_MON_CACNEA,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Desiree[] =
{
- 8,
- 12,
- 21,
- 22,
- 31,
+ VERDANTURF_TENT_MON_WINGULL,
+ VERDANTURF_TENT_MON_KECLEON,
+ VERDANTURF_TENT_MON_SEVIPER,
+ VERDANTURF_TENT_MON_SKARMORY,
+ VERDANTURF_TENT_MON_KADABRA,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Ronald[] =
{
- 1,
- 20,
- 23,
- 25,
- 32,
+ VERDANTURF_TENT_MON_ZIGZAGOON,
+ VERDANTURF_TENT_MON_LINOONE,
+ VERDANTURF_TENT_MON_SWELLOW,
+ VERDANTURF_TENT_MON_ELECTRIKE,
+ VERDANTURF_TENT_MON_VOLTORB,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Ashten[] =
{
- 9,
- 12,
- 27,
- 37,
- 43,
+ VERDANTURF_TENT_MON_ARON_1,
+ VERDANTURF_TENT_MON_KECLEON,
+ VERDANTURF_TENT_MON_ARON_2,
+ VERDANTURF_TENT_MON_TRAPINCH,
+ VERDANTURF_TENT_MON_WHISMUR,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Gerard[] =
{
- 36,
- 7,
- 34,
- 6,
- 40,
+ VERDANTURF_TENT_MON_MARILL,
+ VERDANTURF_TENT_MON_BARBOACH,
+ VERDANTURF_TENT_MON_PELIPPER,
+ VERDANTURF_TENT_MON_MAGIKARP,
+ VERDANTURF_TENT_MON_WAILMER,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Bradly[] =
{
- 26,
- 3,
- 0,
- 2,
- 17,
+ VERDANTURF_TENT_MON_NUZLEAF,
+ VERDANTURF_TENT_MON_TAILLOW,
+ VERDANTURF_TENT_MON_POOCHYENA,
+ VERDANTURF_TENT_MON_DUSTOX,
+ VERDANTURF_TENT_MON_GOLDEEN_1,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Dennis[] =
{
- 14,
- 37,
- 2,
- 38,
- 27,
+ VERDANTURF_TENT_MON_NINJASK,
+ VERDANTURF_TENT_MON_TRAPINCH,
+ VERDANTURF_TENT_MON_DUSTOX,
+ VERDANTURF_TENT_MON_TENTACOOL,
+ VERDANTURF_TENT_MON_ARON_2,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Prestin[] =
{
- 31,
- 28,
- 22,
- 25,
- 44,
- 43,
- 41,
+ VERDANTURF_TENT_MON_KADABRA,
+ VERDANTURF_TENT_MON_MIGHTYENA,
+ VERDANTURF_TENT_MON_SKARMORY,
+ VERDANTURF_TENT_MON_ELECTRIKE,
+ VERDANTURF_TENT_MON_CACNEA,
+ VERDANTURF_TENT_MON_WHISMUR,
+ VERDANTURF_TENT_MON_ILLUMISE,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Ernesto[] =
{
- 33,
- 32,
- 25,
- 35,
- 34,
+ VERDANTURF_TENT_MON_MAGNEMITE,
+ VERDANTURF_TENT_MON_VOLTORB,
+ VERDANTURF_TENT_MON_ELECTRIKE,
+ VERDANTURF_TENT_MON_LOUDRED,
+ VERDANTURF_TENT_MON_PELIPPER,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Nala[] =
{
- 1,
- 4,
- 8,
- 11,
- 17,
- 40,
- 34,
+ VERDANTURF_TENT_MON_ZIGZAGOON,
+ VERDANTURF_TENT_MON_SHROOMISH,
+ VERDANTURF_TENT_MON_WINGULL,
+ VERDANTURF_TENT_MON_SWALOT,
+ VERDANTURF_TENT_MON_GOLDEEN_1,
+ VERDANTURF_TENT_MON_WAILMER,
+ VERDANTURF_TENT_MON_PELIPPER,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Darnell[] =
{
- 0,
- 29,
- 35,
- 37,
- 39,
- 43,
+ VERDANTURF_TENT_MON_POOCHYENA,
+ VERDANTURF_TENT_MON_SOLROCK,
+ VERDANTURF_TENT_MON_LOUDRED,
+ VERDANTURF_TENT_MON_TRAPINCH,
+ VERDANTURF_TENT_MON_VIGOROTH,
+ VERDANTURF_TENT_MON_WHISMUR,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Ashlyn[] =
{
- 29,
- 36,
- 32,
- 30,
- 17,
- 6,
- 44,
+ VERDANTURF_TENT_MON_SOLROCK,
+ VERDANTURF_TENT_MON_MARILL,
+ VERDANTURF_TENT_MON_VOLTORB,
+ VERDANTURF_TENT_MON_GRAVELER,
+ VERDANTURF_TENT_MON_GOLDEEN_1,
+ VERDANTURF_TENT_MON_MAGIKARP,
+ VERDANTURF_TENT_MON_CACNEA,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Addison[] =
{
- 0,
- 1,
- 16,
- 31,
- 6,
+ VERDANTURF_TENT_MON_POOCHYENA,
+ VERDANTURF_TENT_MON_ZIGZAGOON,
+ VERDANTURF_TENT_MON_SWABLU,
+ VERDANTURF_TENT_MON_KADABRA,
+ VERDANTURF_TENT_MON_MAGIKARP,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Justine[] =
{
- 0,
- 1,
- 16,
- 36,
- 18,
+ VERDANTURF_TENT_MON_POOCHYENA,
+ VERDANTURF_TENT_MON_ZIGZAGOON,
+ VERDANTURF_TENT_MON_SWABLU,
+ VERDANTURF_TENT_MON_MARILL,
+ VERDANTURF_TENT_MON_LOTAD,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Tyson[] =
{
- 5,
- 15,
- 22,
- 30,
- 16,
- 39,
- 43,
+ VERDANTURF_TENT_MON_MACHOP,
+ VERDANTURF_TENT_MON_MAKUHITA,
+ VERDANTURF_TENT_MON_SKARMORY,
+ VERDANTURF_TENT_MON_GRAVELER,
+ VERDANTURF_TENT_MON_SWABLU,
+ VERDANTURF_TENT_MON_VIGOROTH,
+ VERDANTURF_TENT_MON_WHISMUR,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Laila[] =
{
- 5,
- 15,
- 19,
- 24,
- 41,
- 43,
+ VERDANTURF_TENT_MON_MACHOP,
+ VERDANTURF_TENT_MON_MAKUHITA,
+ VERDANTURF_TENT_MON_NUMEL_2,
+ VERDANTURF_TENT_MON_GOLDEEN_2,
+ VERDANTURF_TENT_MON_ILLUMISE,
+ VERDANTURF_TENT_MON_WHISMUR,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Waren[] =
{
- 0,
- 9,
- 10,
- 11,
- 23,
+ VERDANTURF_TENT_MON_POOCHYENA,
+ VERDANTURF_TENT_MON_ARON_1,
+ VERDANTURF_TENT_MON_NUMEL_1,
+ VERDANTURF_TENT_MON_SWALOT,
+ VERDANTURF_TENT_MON_SWELLOW,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Tobias[] =
{
- 6,
- 7,
- 24,
- 38,
- 40,
+ VERDANTURF_TENT_MON_MAGIKARP,
+ VERDANTURF_TENT_MON_BARBOACH,
+ VERDANTURF_TENT_MON_GOLDEEN_2,
+ VERDANTURF_TENT_MON_TENTACOOL,
+ VERDANTURF_TENT_MON_WAILMER,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Josiah[] =
{
- 8,
- 16,
- 23,
- 34,
- 3,
+ VERDANTURF_TENT_MON_WINGULL,
+ VERDANTURF_TENT_MON_SWABLU,
+ VERDANTURF_TENT_MON_SWELLOW,
+ VERDANTURF_TENT_MON_PELIPPER,
+ VERDANTURF_TENT_MON_TAILLOW,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Dion[] =
{
- 14,
- 2,
- 11,
- 39,
- 21,
- 38,
+ VERDANTURF_TENT_MON_NINJASK,
+ VERDANTURF_TENT_MON_DUSTOX,
+ VERDANTURF_TENT_MON_SWALOT,
+ VERDANTURF_TENT_MON_VIGOROTH,
+ VERDANTURF_TENT_MON_SEVIPER,
+ VERDANTURF_TENT_MON_TENTACOOL,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Kenzie[] =
{
- 18,
- 10,
- 16,
- 26,
- 25,
- 27,
+ VERDANTURF_TENT_MON_LOTAD,
+ VERDANTURF_TENT_MON_NUMEL_1,
+ VERDANTURF_TENT_MON_SWABLU,
+ VERDANTURF_TENT_MON_NUZLEAF,
+ VERDANTURF_TENT_MON_ELECTRIKE,
+ VERDANTURF_TENT_MON_ARON_2,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Lillian[] =
{
- 24,
- 34,
- 36,
- 38,
- 5,
+ VERDANTURF_TENT_MON_GOLDEEN_2,
+ VERDANTURF_TENT_MON_PELIPPER,
+ VERDANTURF_TENT_MON_MARILL,
+ VERDANTURF_TENT_MON_TENTACOOL,
+ VERDANTURF_TENT_MON_MACHOP,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Lesley[] =
{
- 26,
- 0,
- 18,
- 13,
- 25,
+ VERDANTURF_TENT_MON_NUZLEAF,
+ VERDANTURF_TENT_MON_POOCHYENA,
+ VERDANTURF_TENT_MON_LOTAD,
+ VERDANTURF_TENT_MON_BALTOY,
+ VERDANTURF_TENT_MON_ELECTRIKE,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Marquis[] =
{
- 24,
- 34,
- 5,
- 15,
- 7,
- 42,
+ VERDANTURF_TENT_MON_GOLDEEN_2,
+ VERDANTURF_TENT_MON_PELIPPER,
+ VERDANTURF_TENT_MON_MACHOP,
+ VERDANTURF_TENT_MON_MAKUHITA,
+ VERDANTURF_TENT_MON_BARBOACH,
+ VERDANTURF_TENT_MON_MACHOKE,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Freddy[] =
{
- 18,
- 21,
- 26,
- 29,
- 41,
+ VERDANTURF_TENT_MON_LOTAD,
+ VERDANTURF_TENT_MON_SEVIPER,
+ VERDANTURF_TENT_MON_NUZLEAF,
+ VERDANTURF_TENT_MON_SOLROCK,
+ VERDANTURF_TENT_MON_ILLUMISE,
-1
};
const u16 gVerdanturfBattleTentTrainerMons_Cecilia[] =
{
- 23,
- 26,
- 27,
- 28,
- 31,
+ VERDANTURF_TENT_MON_SWELLOW,
+ VERDANTURF_TENT_MON_NUZLEAF,
+ VERDANTURF_TENT_MON_ARON_2,
+ VERDANTURF_TENT_MON_MIGHTYENA,
+ VERDANTURF_TENT_MON_KADABRA,
-1
};
-const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[] =
+const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] =
{
- [0] = {
+ [VERDANTURF_TENT_TRAINER_BRENNA] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("BRENNA"),
.speechBefore = {EC_WORD_NO, EC_WORD_DAYS, EC_WORD_GO, EC_WORD_WITHOUT, EC_WORD_MY, EC_MOVE(FAKE_TEARS)},
.speechWin = {EC_WORD_OH, EC_WORD_THAT_WAS, EC_WORD_SO, EC_WORD_REFRESHING, EC_WORD_EXCL, -1},
.speechLose = {EC_WORD_ALL, EC_WORD_I, EC_WORD_EVER, EC_WORD_GET, EC_WORD_IS, EC_MOVE(TORMENT)},
- .monSets = gVerdanturfBattleTentTrainerMons_Brenna
+ .monSet = gVerdanturfBattleTentTrainerMons_Brenna
},
- [1] = {
+ [VERDANTURF_TENT_TRAINER_DILAN] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("DILAN"),
.speechBefore = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_BORED, EC_WORD_I_AM},
.speechWin = {EC_WORD_LOSING, EC_WORD_ISN_T, EC_WORD_EXCITING, EC_WORD_AT, EC_WORD_ALL, EC_WORD_ELLIPSIS},
.speechLose = {EC_WORD_EXCITING, EC_WORD_EXCL_EXCL, EC_WORD_BYE_BYE, EC_WORD_TO, EC_WORD_BEING, EC_WORD_BORED},
- .monSets = gVerdanturfBattleTentTrainerMons_Dilan
+ .monSet = gVerdanturfBattleTentTrainerMons_Dilan
},
- [2] = {
+ [VERDANTURF_TENT_TRAINER_ELIANA] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("ELIANA"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_ON, EC_WORD_A, EC_WORD_VACATION, EC_WORD_SOON},
.speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_GET, EC_WORD_SOME, EC_WORD_MONEY},
.speechLose = {EC_WORD_NO, EC_WORD_SLEEP, EC_WORD_UNTIL, EC_WORD_I, EC_WORD_GET, EC_WORD_HOME},
- .monSets = gVerdanturfBattleTentTrainerMons_Eliana
+ .monSet = gVerdanturfBattleTentTrainerMons_Eliana
},
- [3] = {
+ [VERDANTURF_TENT_TRAINER_MARKUS] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("MARKUS"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_SMART, EC_WORD_EXCL, EC_WORD_IF_I_LOSE, EC_WORD_I, EC_MOVE(SELF_DESTRUCT)},
.speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_NON_STOP, EC_MOVE2(EXPLOSION), EC_WORD_OF, EC_WORD_JOY},
.speechLose = {EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_ELLIPSIS, EC_WORD_TIME, EC_WORD_TO, EC_MOVE(SELF_DESTRUCT)},
- .monSets = gVerdanturfBattleTentTrainerMons_Markus
+ .monSet = gVerdanturfBattleTentTrainerMons_Markus
},
- [4] = {
+ [VERDANTURF_TENT_TRAINER_CAITLYN] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("CAITLYN"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_BORED, EC_WORD_OF, EC_WORD_BEING, EC_WORD_AN, EC_WORD_IDOL},
.speechWin = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_BEST, EC_WORD_FOR, EC_WORD_HAPPINESS},
.speechLose = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_BUG, EC_WORD_ME, EC_WORD_AT, EC_WORD_ALL},
- .monSets = gVerdanturfBattleTentTrainerMons_Caitlyn
+ .monSet = gVerdanturfBattleTentTrainerMons_Caitlyn
},
- [5] = {
+ [VERDANTURF_TENT_TRAINER_DESIREE] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("DESIREE"),
.speechBefore = {EC_WORD_DOESN_T, EC_WORD_MY, EC_WORD_BEAUTY, EC_MOVE(ASTONISH), EC_WORD_YOU, EC_WORD_QUES},
.speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_INTIMIDATE, EC_WORD_YOU, EC_WORD_QUES, -1},
.speechLose = {EC_WORD_MY, EC_WORD_BEAUTY, EC_WORD_DID, EC_WORD_NOTHING, EC_WORD_FOR, EC_WORD_YOU},
- .monSets = gVerdanturfBattleTentTrainerMons_Desiree
+ .monSet = gVerdanturfBattleTentTrainerMons_Desiree
},
- [6] = {
+ [VERDANTURF_TENT_TRAINER_RONALD] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("RONALD"),
.speechBefore = {EC_WORD_COME_ON, EC_WORD_I, EC_WORD_WILL, EC_WORD_BATTLE, EC_WORD_SERIOUSLY, -1},
.speechWin = {EC_WORD_GIVE_UP, EC_WORD_QUES, -1, EC_WORD_THAT_S, EC_WORD_REALLY, EC_WORD_WEAK},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_DO, EC_WORD_A, EC_MOVE2(BATON_PASS)},
- .monSets = gVerdanturfBattleTentTrainerMons_Ronald
+ .monSet = gVerdanturfBattleTentTrainerMons_Ronald
},
- [7] = {
+ [VERDANTURF_TENT_TRAINER_ASHTEN] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("ASHTEN"),
.speechBefore = {EC_WORD_OH_YEAH, EC_WORD_ANOTHER, EC_WORD_EXCITING, EC_WORD_BATTLE, EC_WORD_EXCL, -1},
.speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_WIMPY, EC_WORD_AND, EC_WORD_BORING},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_AN, EC_WORD_EXCITING, EC_WORD_LOSS, EC_WORD_WOW, EC_WORD_EXCL},
- .monSets = gVerdanturfBattleTentTrainerMons_Ashten
+ .monSet = gVerdanturfBattleTentTrainerMons_Ashten
},
- [8] = {
+ [VERDANTURF_TENT_TRAINER_GERARD] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("GERARD"),
.speechBefore = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_WORD_SUPER, EC_MOVE2(TEETER_DANCE), EC_WORD_EXCL},
.speechWin = {EC_WORD_THAT_WAS, EC_WORD_HARD, EC_WORD_ELLIPSIS, EC_WORD_AM, EC_WORD_I, EC_WORD_OK_QUES},
.speechLose = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_FORGIVE, EC_WORD_YOU, EC_WORD_FOR, EC_WORD_THAT},
- .monSets = gVerdanturfBattleTentTrainerMons_Gerard
+ .monSet = gVerdanturfBattleTentTrainerMons_Gerard
},
- [9] = {
+ [VERDANTURF_TENT_TRAINER_BRADLY] = {
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("BRADLY"),
.speechBefore = {EC_WORD_IT_S, EC_WORD_LONESOME, EC_WORD_BUT, EC_WORD_I, EC_WORD_VACATION, EC_WORD_ALONE},
.speechWin = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(WITHDRAW), EC_WORD_INSIDE, EC_WORD_MY, EC_WORD_SHELL_ARMOR},
.speechLose = {EC_WORD_OH, EC_WORD_ELLIPSIS, -1, EC_WORD_ALONE, EC_WORD_AS, EC_WORD_ALWAYS},
- .monSets = gVerdanturfBattleTentTrainerMons_Bradly
+ .monSet = gVerdanturfBattleTentTrainerMons_Bradly
},
- [10] = {
+ [VERDANTURF_TENT_TRAINER_DENNIS] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("DENNIS"),
.speechBefore = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_STRONG, EC_WORD_QUES, -1},
.speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, -1, EC_WORD_WAHAHAHA, EC_WORD_EXCL_EXCL, -1},
.speechLose = {EC_WORD_NICE, EC_WORD_GOING, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WAS, EC_WORD_CHILD_S_PLAY},
- .monSets = gVerdanturfBattleTentTrainerMons_Dennis
+ .monSet = gVerdanturfBattleTentTrainerMons_Dennis
},
- [11] = {
+ [VERDANTURF_TENT_TRAINER_PRESTIN] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("PRESTIN"),
.speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_FOR, EC_WORD_YOU},
.speechWin = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_A, EC_WORD_DREAM},
.speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_WAKE_UP, EC_WORD_FROM, EC_WORD_THIS},
- .monSets = gVerdanturfBattleTentTrainerMons_Prestin
+ .monSet = gVerdanturfBattleTentTrainerMons_Prestin
},
- [12] = {
+ [VERDANTURF_TENT_TRAINER_ERNESTO] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("ERNESTO"),
.speechBefore = {EC_WORD_THIS, EC_WORD_PARTY, EC_WORD_GOES, EC_WORD_ON, EC_WORD_FOREVER, EC_WORD_EXCL},
.speechWin = {EC_WORD_THE, EC_WORD_MUSIC, EC_WORD_PLAYS, EC_WORD_ON, EC_WORD_WITHOUT, EC_WORD_END},
.speechLose = {EC_WORD_NO, EC_WORD_EXCL, EC_WORD_THE, EC_WORD_MUSIC, EC_WORD_CAN_T, EC_WORD_STOP},
- .monSets = gVerdanturfBattleTentTrainerMons_Ernesto
+ .monSet = gVerdanturfBattleTentTrainerMons_Ernesto
},
- [13] = {
+ [VERDANTURF_TENT_TRAINER_NALA] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("NALA"),
.speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_THE, EC_WORD_WORLD, EC_WORD_MOVIE, EC_WORD_COLLECTION},
.speechWin = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_LIKE, EC_WORD_RADIO, EC_WORD_VERY, EC_WORD_MUCH},
.speechLose = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_BELIEVE, EC_WORD_THIS, EC_WORD_EXCL},
- .monSets = gVerdanturfBattleTentTrainerMons_Nala
+ .monSet = gVerdanturfBattleTentTrainerMons_Nala
},
- [14] = {
+ [VERDANTURF_TENT_TRAINER_DARNELL] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("DARNELL"),
.speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GO_EASY, EC_WORD_ON, EC_WORD_YOU, -1},
.speechWin = {EC_WORD_YOUR, EC_MOVE2(FRUSTRATION), EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_HIDDEN, EC_WORD_AWAY},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_TAKE, EC_WORD_ELLIPSIS},
- .monSets = gVerdanturfBattleTentTrainerMons_Darnell
+ .monSet = gVerdanturfBattleTentTrainerMons_Darnell
},
- [15] = {
+ [VERDANTURF_TENT_TRAINER_ASHLYN] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("ASHLYN"),
.speechBefore = {EC_WORD_I, EC_WORD_LOOK, EC_WORD_TOUGH, EC_WORD_DO, EC_WORD_I, EC_WORD_QUES},
.speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_OVER, EC_WORD_YOUR, EC_MOVE2(TAUNT), EC_WORD_YET},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_MEAN, EC_WORD_EXCL_EXCL, -1, -1, -1},
- .monSets = gVerdanturfBattleTentTrainerMons_Ashlyn
+ .monSet = gVerdanturfBattleTentTrainerMons_Ashlyn
},
- [16] = {
+ [VERDANTURF_TENT_TRAINER_ADDISON] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("ADDISON"),
.speechBefore = {EC_WORD_YES, EC_WORD_EXCL, -1, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_EXCL},
.speechWin = {EC_WORD_WELL, EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_EASY, EC_WORD_QUES, -1},
.speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, -1, EC_WORD_BUT, EC_WORD_WHY, EC_WORD_QUES},
- .monSets = gVerdanturfBattleTentTrainerMons_Addison
+ .monSet = gVerdanturfBattleTentTrainerMons_Addison
},
- [17] = {
+ [VERDANTURF_TENT_TRAINER_JUSTINE] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("JUSTINE"),
.speechBefore = {EC_WORD_YES, EC_WORD_EXCL, -1, EC_WORD_COME_ON, EC_WORD_I_AM, EC_WORD_READY},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_JUST, EC_WORD_NOT, EC_WORD_GOOD, EC_WORD_ENOUGH, EC_WORD_EXCL},
.speechLose = {EC_WORD_WOWEE, EC_WORD_EXCL_EXCL, -1, -1, -1, -1},
- .monSets = gVerdanturfBattleTentTrainerMons_Justine
+ .monSet = gVerdanturfBattleTentTrainerMons_Justine
},
- [18] = {
+ [VERDANTURF_TENT_TRAINER_TYSON] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("TYSON"),
.speechBefore = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_PRESSURE, EC_WORD_ME, EC_WORD_QUES},
.speechWin = {EC_WORD_WHAT, EC_WORD_QUES, EC_WORD_YOU_RE, EC_WORD_MUCH, EC_WORD_TOO_WEAK, EC_WORD_EXCL},
.speechLose = {EC_WORD_THIS, EC_WORD_DOESN_T, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_HAPPY, EC_WORD_EXCL},
- .monSets = gVerdanturfBattleTentTrainerMons_Tyson
+ .monSet = gVerdanturfBattleTentTrainerMons_Tyson
},
- [19] = {
+ [VERDANTURF_TENT_TRAINER_LAILA] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("LAILA"),
.speechBefore = {EC_WORD_A, EC_MOVE2(STRUGGLE), EC_WORD_ISN_T, EC_WORD_VERY, EC_WORD_COOL, -1},
.speechWin = {EC_WORD_NOPE, EC_WORD_NOT_VERY, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_BUT, EC_WORD_YOU, EC_WORD_WON},
- .monSets = gVerdanturfBattleTentTrainerMons_Laila
+ .monSet = gVerdanturfBattleTentTrainerMons_Laila
},
- [20] = {
+ [VERDANTURF_TENT_TRAINER_WAREN] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("WAREN"),
.speechBefore = {EC_WORD_DANGER, EC_WORD_EXCL, -1, EC_WORD_I, EC_WORD_SENSE, EC_WORD_DANGER},
.speechWin = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_BELIEVE, EC_WORD_MY, EC_WORD_LIE, EC_WORD_QUES_EXCL},
.speechLose = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_DID, EC_WORD_SENSE, EC_WORD_DANGER, EC_WORD_ELLIPSIS},
- .monSets = gVerdanturfBattleTentTrainerMons_Waren
+ .monSet = gVerdanturfBattleTentTrainerMons_Waren
},
- [21] = {
+ [VERDANTURF_TENT_TRAINER_TOBIAS] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("TOBIAS"),
.speechBefore = {EC_MOVE2(BARRIER), EC_WORD_EXCL_EXCL, -1, EC_WORD_NOW, EC_WORD_COME_ON, EC_WORD_EXCL},
.speechWin = {EC_WORD_HUH_QUES, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES},
.speechLose = {EC_WORD_I, EC_WORD_SHOULD, EC_WORD_KNOW, EC_WORD_THAT, EC_WORD_IT_S, EC_WORD_HOPELESS},
- .monSets = gVerdanturfBattleTentTrainerMons_Tobias
+ .monSet = gVerdanturfBattleTentTrainerMons_Tobias
},
- [22] = {
+ [VERDANTURF_TENT_TRAINER_JOSIAH] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("JOSIAH"),
.speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_MOVE(FLY), EC_WORD_IF_I_LOSE, -1},
.speechWin = {EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS, -1, EC_WORD_YOU, EC_MOVE(FLY), EC_WORD_INSTEAD},
.speechLose = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_MOVE(FLY), EC_WORD_SOMETIME, EC_WORD_SOON},
- .monSets = gVerdanturfBattleTentTrainerMons_Josiah
+ .monSet = gVerdanturfBattleTentTrainerMons_Josiah
},
- [23] = {
+ [VERDANTURF_TENT_TRAINER_DION] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("DION"),
.speechBefore = {EC_WORD_IT_S, EC_WORD_TRENDY, EC_WORD_UM, EC_WORD_BATTLE, EC_WORD_SOMETHING, -1},
.speechWin = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_BATTLE, EC_WORD_DATE, EC_WORD_QUES},
.speechLose = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_BATTLE, EC_WORD_GOURMET, EC_WORD_QUES},
- .monSets = gVerdanturfBattleTentTrainerMons_Dion
+ .monSet = gVerdanturfBattleTentTrainerMons_Dion
},
- [24] = {
+ [VERDANTURF_TENT_TRAINER_KENZIE] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("KENZIE"),
.speechBefore = {EC_WORD_THE, EC_MOVE(MORNING_SUN), EC_WORD_GIVES, EC_WORD_ME, EC_MOVE(STRENGTH), -1},
.speechWin = {EC_WORD_BUT, EC_WORD_I, EC_WORD_LIKE, EC_MOVE2(MOONLIGHT), EC_WORD_TOO, -1},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_WORD_TERRIBLE, EC_MOVE(SANDSTORM), EC_WORD_ELLIPSIS},
- .monSets = gVerdanturfBattleTentTrainerMons_Kenzie
+ .monSet = gVerdanturfBattleTentTrainerMons_Kenzie
},
- [25] = {
+ [VERDANTURF_TENT_TRAINER_LILLIAN] = {
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("LILLIAN"),
.speechBefore = {EC_WORD_I, EC_WORD_DO, EC_WORD_THINGS, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO},
.speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_QUES, EC_WORD_WHAT, EC_WORD_A, EC_WORD_SURPRISE},
.speechLose = {EC_WORD_AWW, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_NAP},
- .monSets = gVerdanturfBattleTentTrainerMons_Lillian
+ .monSet = gVerdanturfBattleTentTrainerMons_Lillian
},
- [26] = {
+ [VERDANTURF_TENT_TRAINER_LESLEY] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("LESLEY"),
.speechBefore = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_BE, EC_WORD_LOLLING, EC_WORD_ABOUT},
.speechWin = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_GET, EC_WORD_UP, EC_WORD_EARLIER, -1},
.speechLose = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_BE, EC_WORD_HAPPENING, EC_WORD_EXCL},
- .monSets = gVerdanturfBattleTentTrainerMons_Lesley
+ .monSet = gVerdanturfBattleTentTrainerMons_Lesley
},
- [27] = {
+ [VERDANTURF_TENT_TRAINER_MARQUIS] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("MARQUIS"),
.speechBefore = {EC_WORD_NONE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_SENSE},
.speechWin = {EC_WORD_SEE, EC_WORD_QUES, EC_WORD_THIS, EC_WORD_JUST, EC_WORD_ISN_T, EC_WORD_NORMAL},
.speechLose = {EC_WORD_SHOULD, EC_WORD_I, EC_WORD_CAUSE, EC_WORD_AN, EC_MOVE(UPROAR), EC_WORD_QUES},
- .monSets = gVerdanturfBattleTentTrainerMons_Marquis
+ .monSet = gVerdanturfBattleTentTrainerMons_Marquis
},
- [28] = {
+ [VERDANTURF_TENT_TRAINER_FREDDY] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("FREDDY"),
.speechBefore = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_THIS, EC_WORD_CUTE, EC_WORD_TELEVISION, EC_WORD_IDOL},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_SO, EC_WORD_FUNNY, EC_WORD_WHEN, EC_WORD_YOU_RE, EC_WORD_ANGRY},
.speechLose = {EC_WORD_LATE, EC_WORD_NIGHT, EC_WORD_TELEVISION, EC_WORD_IS, EC_WORD_MY, EC_WORD_LIFE},
- .monSets = gVerdanturfBattleTentTrainerMons_Freddy
+ .monSet = gVerdanturfBattleTentTrainerMons_Freddy
},
- [29] = {
+ [VERDANTURF_TENT_TRAINER_CECILIA] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("CECILIA"),
.speechBefore = {EC_WORD_MY, EC_WORD_FABULOUS, EC_WORD_CUTENESS, EC_WORD_IS, EC_WORD_IN, EC_WORD_FASHION},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_NO, EC_WORD_MATCH, EC_WORD_FOR, EC_WORD_MY, EC_WORD_CUTE_CHARM},
.speechLose = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_QUES},
- .monSets = gVerdanturfBattleTentTrainerMons_Cecilia
+ .monSet = gVerdanturfBattleTentTrainerMons_Cecilia
}
};
-const struct FacilityMon gVerdanturfBattleTentMons[] =
+const struct FacilityMon gVerdanturfBattleTentMons[NUM_VERDANTURF_TENT_MONS] =
{
- [0] = {
+ [VERDANTURF_TENT_MON_POOCHYENA] = {
.species = SPECIES_POOCHYENA,
.moves = {MOVE_ROAR, MOVE_THIEF, MOVE_BITE, MOVE_HOWL},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [1] = {
+ [VERDANTURF_TENT_MON_ZIGZAGOON] = {
.species = SPECIES_ZIGZAGOON,
.moves = {MOVE_COVET, MOVE_GROWL, MOVE_PIN_MISSILE, MOVE_MUD_SPORT},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [2] = {
+ [VERDANTURF_TENT_MON_DUSTOX] = {
.species = SPECIES_DUSTOX,
.moves = {MOVE_CONFUSION, MOVE_MOONLIGHT, MOVE_PROTECT, MOVE_FLASH},
.itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
.nature = NATURE_MODEST
},
- [3] = {
+ [VERDANTURF_TENT_MON_TAILLOW] = {
.species = SPECIES_TAILLOW,
.moves = {MOVE_AGILITY, MOVE_DOUBLE_TEAM, MOVE_WING_ATTACK, MOVE_GROWL},
.itemTableId = BATTLE_FRONTIER_ITEM_ORAN_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [4] = {
+ [VERDANTURF_TENT_MON_SHROOMISH] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_HEADBUTT, MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_FLASH},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_RASH
},
- [5] = {
+ [VERDANTURF_TENT_MON_MACHOP] = {
.species = SPECIES_MACHOP,
.moves = {MOVE_LOW_KICK, MOVE_LEER, MOVE_FOCUS_ENERGY, MOVE_ENCORE},
.itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_LONELY
},
- [6] = {
+ [VERDANTURF_TENT_MON_MAGIKARP] = {
.species = SPECIES_MAGIKARP,
.moves = {MOVE_SPLASH, MOVE_FLAIL, MOVE_TACKLE, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [7] = {
+ [VERDANTURF_TENT_MON_BARBOACH] = {
.species = SPECIES_BARBOACH,
.moves = {MOVE_MUD_SLAP, MOVE_WATER_GUN, MOVE_RAIN_DANCE, MOVE_SPARK},
.itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
.evSpread = F_EV_SPREAD_SPEED,
.nature = NATURE_HASTY
},
- [8] = {
+ [VERDANTURF_TENT_MON_WINGULL] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_ATTRACT, MOVE_TWISTER, MOVE_WING_ATTACK, MOVE_SUPERSONIC},
.itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_IMPISH
},
- [9] = {
+ [VERDANTURF_TENT_MON_ARON_1] = {
.species = SPECIES_ARON,
.moves = {MOVE_ENDEAVOR, MOVE_METAL_CLAW, MOVE_TACKLE, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_HARDY
},
- [10] = {
+ [VERDANTURF_TENT_MON_NUMEL_1] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_EMBER, MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_GROWL},
.itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_SASSY
},
- [11] = {
+ [VERDANTURF_TENT_MON_SWALOT] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_YAWN, MOVE_SLUDGE, MOVE_ACID_ARMOR, MOVE_AMNESIA},
.itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [12] = {
+ [VERDANTURF_TENT_MON_KECLEON] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_SUBSTITUTE, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_BIND},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIET
},
- [13] = {
+ [VERDANTURF_TENT_MON_BALTOY] = {
.species = SPECIES_BALTOY,
.moves = {MOVE_SANDSTORM, MOVE_FLASH, MOVE_SELF_DESTRUCT, MOVE_HARDEN},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [14] = {
+ [VERDANTURF_TENT_MON_NINJASK] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_DIG, MOVE_SCREECH, MOVE_SWORDS_DANCE, MOVE_LEECH_LIFE},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [15] = {
+ [VERDANTURF_TENT_MON_MAKUHITA] = {
.species = SPECIES_MAKUHITA,
.moves = {MOVE_BULK_UP, MOVE_ARM_THRUST, MOVE_SMELLING_SALT, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [16] = {
+ [VERDANTURF_TENT_MON_SWABLU] = {
.species = SPECIES_SWABLU,
.moves = {MOVE_REFRESH, MOVE_SAFEGUARD, MOVE_ATTRACT, MOVE_MIRROR_MOVE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MILD
},
- [17] = {
+ [VERDANTURF_TENT_MON_GOLDEEN_1] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_WATERFALL, MOVE_MUD_SPORT, MOVE_SUPERSONIC, MOVE_DOUBLE_TEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_GENTLE
},
- [18] = {
+ [VERDANTURF_TENT_MON_LOTAD] = {
.species = SPECIES_LOTAD,
.moves = {MOVE_GROWL, MOVE_WATER_GUN, MOVE_MEGA_DRAIN, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_IAPAPA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [19] = {
+ [VERDANTURF_TENT_MON_NUMEL_2] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_MAGNITUDE, MOVE_EMBER, MOVE_GROWL, MOVE_DEFENSE_CURL},
.itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_RELAXED
},
- [20] = {
+ [VERDANTURF_TENT_MON_LINOONE] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_HEADBUTT, MOVE_TICKLE, MOVE_PROTECT, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [21] = {
+ [VERDANTURF_TENT_MON_SEVIPER] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_WRAP, MOVE_GLARE, MOVE_POISON_FANG, MOVE_SWAGGER},
.itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [22] = {
+ [VERDANTURF_TENT_MON_SKARMORY] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_AIR_CUTTER, MOVE_SANDSTORM, MOVE_LEER, MOVE_AGILITY},
.itemTableId = BATTLE_FRONTIER_ITEM_MACHO_BRACE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_BASHFUL
},
- [23] = {
+ [VERDANTURF_TENT_MON_SWELLOW] = {
.species = SPECIES_SWELLOW,
.moves = {MOVE_AGILITY, MOVE_WING_ATTACK, MOVE_DOUBLE_TEAM, MOVE_SUPERSONIC},
.itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [24] = {
+ [VERDANTURF_TENT_MON_GOLDEEN_2] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_PECK, MOVE_SUPERSONIC, MOVE_PSYBEAM, MOVE_RAIN_DANCE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_GENTLE
},
- [25] = {
+ [VERDANTURF_TENT_MON_ELECTRIKE] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_SHOCK_WAVE, MOVE_TACKLE, MOVE_CHARGE, MOVE_THUNDER_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_MILD
},
- [26] = {
+ [VERDANTURF_TENT_MON_NUZLEAF] = {
.species = SPECIES_NUZLEAF,
.moves = {MOVE_SUNNY_DAY, MOVE_TORMENT, MOVE_FAKE_OUT, MOVE_THIEF},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [27] = {
+ [VERDANTURF_TENT_MON_ARON_2] = {
.species = SPECIES_ARON,
.moves = {MOVE_TAKE_DOWN, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [28] = {
+ [VERDANTURF_TENT_MON_MIGHTYENA] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_HOWL, MOVE_TAKE_DOWN, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [29] = {
+ [VERDANTURF_TENT_MON_SOLROCK] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_HARDEN, MOVE_FIRE_SPIN, MOVE_MIMIC, MOVE_PSYWAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [30] = {
+ [VERDANTURF_TENT_MON_GRAVELER] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_ROLLOUT, MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_BLOCK},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_IMPISH
},
- [31] = {
+ [VERDANTURF_TENT_MON_KADABRA] = {
.species = SPECIES_KADABRA,
.moves = {MOVE_ENCORE, MOVE_PSYBEAM, MOVE_DISABLE, MOVE_KINESIS},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [32] = {
+ [VERDANTURF_TENT_MON_VOLTORB] = {
.species = SPECIES_VOLTORB,
.moves = {MOVE_PROTECT, MOVE_SELF_DESTRUCT, MOVE_SPARK, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_BASHFUL
},
- [33] = {
+ [VERDANTURF_TENT_MON_MAGNEMITE] = {
.species = SPECIES_MAGNEMITE,
.moves = {MOVE_METAL_SOUND, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_SERIOUS
},
- [34] = {
+ [VERDANTURF_TENT_MON_PELIPPER] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_WING_ATTACK, MOVE_MIST, MOVE_AGILITY, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_FIGY_BERRY,
.evSpread = 0,
.nature = NATURE_BRAVE
},
- [35] = {
+ [VERDANTURF_TENT_MON_LOUDRED] = {
.species = SPECIES_LOUDRED,
.moves = {MOVE_HOWL, MOVE_UPROAR, MOVE_REST, MOVE_SCREECH},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CALM
},
- [36] = {
+ [VERDANTURF_TENT_MON_MARILL] = {
.species = SPECIES_MARILL,
.moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_BUBBLE_BEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_JOLLY
},
- [37] = {
+ [VERDANTURF_TENT_MON_TRAPINCH] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_DIG, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_FAINT_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_NONE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_NAUGHTY
},
- [38] = {
+ [VERDANTURF_TENT_MON_TENTACOOL] = {
.species = SPECIES_TENTACOOL,
.moves = {MOVE_SCREECH, MOVE_CONFUSE_RAY, MOVE_WRAP, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [39] = {
+ [VERDANTURF_TENT_MON_VIGOROTH] = {
.species = SPECIES_VIGOROTH,
.moves = {MOVE_ENCORE, MOVE_SLACK_OFF, MOVE_YAWN, MOVE_SECRET_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [40] = {
+ [VERDANTURF_TENT_MON_WAILMER] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_WATER_PULSE, MOVE_ROLLOUT, MOVE_CURSE, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
.evSpread = F_EV_SPREAD_HP,
.nature = NATURE_RELAXED
},
- [41] = {
+ [VERDANTURF_TENT_MON_ILLUMISE] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_TACKLE, MOVE_SWEET_SCENT, MOVE_WISH, MOVE_ENCORE},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [42] = {
+ [VERDANTURF_TENT_MON_MACHOKE] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_LEER, MOVE_KARATE_CHOP, MOVE_BULK_UP, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_CALM
},
- [43] = {
+ [VERDANTURF_TENT_MON_WHISMUR] = {
.species = SPECIES_WHISMUR,
.moves = {MOVE_SECRET_POWER, MOVE_SUPERSONIC, MOVE_STOMP, MOVE_ROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_QUIRKY
},
- [44] = {
+ [VERDANTURF_TENT_MON_CACNEA] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_INGRAIN, MOVE_LEECH_SEED, MOVE_NEEDLE_ARM, MOVE_GROWTH},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
@@ -2126,876 +2126,876 @@ const struct FacilityMon gVerdanturfBattleTentMons[] =
// Fallarbor Battle Tent.
const u16 gFallarborBattleTentTrainerMons_Amber[] =
{
- 39,
- 40,
- 41,
- 42,
- 43,
- 44,
+ FALLARBOR_TENT_MON_SWALOT,
+ FALLARBOR_TENT_MON_SHROOMISH,
+ FALLARBOR_TENT_MON_KIRLIA,
+ FALLARBOR_TENT_MON_LOMBRE,
+ FALLARBOR_TENT_MON_NUZLEAF,
+ FALLARBOR_TENT_MON_CACNEA,
-1
};
const u16 gFallarborBattleTentTrainerMons_Javier[] =
{
- 6,
- 35,
- 36,
- 37,
- 38,
- 44,
+ FALLARBOR_TENT_MON_SOLROCK,
+ FALLARBOR_TENT_MON_TRAPINCH,
+ FALLARBOR_TENT_MON_BALTOY,
+ FALLARBOR_TENT_MON_GRAVELER,
+ FALLARBOR_TENT_MON_SANDSHREW,
+ FALLARBOR_TENT_MON_CACNEA,
-1
};
const u16 gFallarborBattleTentTrainerMons_Natalie[] =
{
- 5,
- 29,
- 30,
- 32,
- 34,
+ FALLARBOR_TENT_MON_MAGIKARP,
+ FALLARBOR_TENT_MON_PELIPPER,
+ FALLARBOR_TENT_MON_BARBOACH,
+ FALLARBOR_TENT_MON_MARILL,
+ FALLARBOR_TENT_MON_GOLDEEN_2,
-1
};
const u16 gFallarborBattleTentTrainerMons_Treve[] =
{
- 28,
- 29,
- 30,
- 32,
- 33,
+ FALLARBOR_TENT_MON_WINGULL,
+ FALLARBOR_TENT_MON_PELIPPER,
+ FALLARBOR_TENT_MON_BARBOACH,
+ FALLARBOR_TENT_MON_MARILL,
+ FALLARBOR_TENT_MON_GOLDEEN_1,
-1
};
const u16 gFallarborBattleTentTrainerMons_Arianna[] =
{
- 18,
- 23,
- 24,
- 27,
- 44,
+ FALLARBOR_TENT_MON_ELECTRIKE,
+ FALLARBOR_TENT_MON_LINOONE_2,
+ FALLARBOR_TENT_MON_MIGHTYENA,
+ FALLARBOR_TENT_MON_GOLBAT,
+ FALLARBOR_TENT_MON_CACNEA,
-1
};
const u16 gFallarborBattleTentTrainerMons_Jadyn[] =
{
- 0,
- 22,
- 24,
- 27,
- 32,
- 39,
+ FALLARBOR_TENT_MON_NUMEL,
+ FALLARBOR_TENT_MON_LOUDRED,
+ FALLARBOR_TENT_MON_MIGHTYENA,
+ FALLARBOR_TENT_MON_GOLBAT,
+ FALLARBOR_TENT_MON_MARILL,
+ FALLARBOR_TENT_MON_SWALOT,
-1
};
const u16 gFallarborBattleTentTrainerMons_Gerardo[] =
{
- 6,
- 18,
- 23,
- 24,
- 29,
+ FALLARBOR_TENT_MON_SOLROCK,
+ FALLARBOR_TENT_MON_ELECTRIKE,
+ FALLARBOR_TENT_MON_LINOONE_2,
+ FALLARBOR_TENT_MON_MIGHTYENA,
+ FALLARBOR_TENT_MON_PELIPPER,
-1
};
const u16 gFallarborBattleTentTrainerMons_Jonn[] =
{
- 16,
- 17,
- 21,
- 22,
- 37,
+ FALLARBOR_TENT_MON_ARON_1,
+ FALLARBOR_TENT_MON_ARON_2,
+ FALLARBOR_TENT_MON_WHISMUR,
+ FALLARBOR_TENT_MON_LOUDRED,
+ FALLARBOR_TENT_MON_GRAVELER,
-1
};
const u16 gFallarborBattleTentTrainerMons_Esteban[] =
{
- 5,
- 28,
- 30,
- 33,
- 42,
+ FALLARBOR_TENT_MON_MAGIKARP,
+ FALLARBOR_TENT_MON_WINGULL,
+ FALLARBOR_TENT_MON_BARBOACH,
+ FALLARBOR_TENT_MON_GOLDEEN_1,
+ FALLARBOR_TENT_MON_LOMBRE,
-1
};
const u16 gFallarborBattleTentTrainerMons_Jameson[] =
{
- 1,
- 2,
- 3,
- 5,
- 9,
+ FALLARBOR_TENT_MON_LINOONE_1,
+ FALLARBOR_TENT_MON_PLUSLE,
+ FALLARBOR_TENT_MON_POOCHYENA,
+ FALLARBOR_TENT_MON_MAGIKARP,
+ FALLARBOR_TENT_MON_NINCADA,
-1
};
const u16 gFallarborBattleTentTrainerMons_Alanzo[] =
{
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15,
+ FALLARBOR_TENT_MON_NINCADA,
+ FALLARBOR_TENT_MON_BEAUTIFLY,
+ FALLARBOR_TENT_MON_DUSTOX,
+ FALLARBOR_TENT_MON_ILLUMISE,
+ FALLARBOR_TENT_MON_VOLBEAT,
+ FALLARBOR_TENT_MON_NINJASK_1,
+ FALLARBOR_TENT_MON_NINJASK_2,
-1
};
const u16 gFallarborBattleTentTrainerMons_Howard[] =
{
- 18,
- 23,
- 31,
- 38,
- 43,
+ FALLARBOR_TENT_MON_ELECTRIKE,
+ FALLARBOR_TENT_MON_LINOONE_2,
+ FALLARBOR_TENT_MON_WAILMER,
+ FALLARBOR_TENT_MON_SANDSHREW,
+ FALLARBOR_TENT_MON_NUZLEAF,
-1
};
const u16 gFallarborBattleTentTrainerMons_Conrad[] =
{
- 18,
- 19,
- 20,
- 21,
- 22,
+ FALLARBOR_TENT_MON_ELECTRIKE,
+ FALLARBOR_TENT_MON_MAGNEMITE,
+ FALLARBOR_TENT_MON_VOLTORB,
+ FALLARBOR_TENT_MON_WHISMUR,
+ FALLARBOR_TENT_MON_LOUDRED,
-1
};
const u16 gFallarborBattleTentTrainerMons_Makenna[] =
{
- 4,
- 21,
- 25,
- 36,
- 40,
+ FALLARBOR_TENT_MON_KECLEON,
+ FALLARBOR_TENT_MON_WHISMUR,
+ FALLARBOR_TENT_MON_SWABLU,
+ FALLARBOR_TENT_MON_BALTOY,
+ FALLARBOR_TENT_MON_SHROOMISH,
-1
};
const u16 gFallarborBattleTentTrainerMons_Brayan[] =
{
- 0,
- 4,
- 6,
- 12,
- 19,
- 23,
- 28,
+ FALLARBOR_TENT_MON_NUMEL,
+ FALLARBOR_TENT_MON_KECLEON,
+ FALLARBOR_TENT_MON_SOLROCK,
+ FALLARBOR_TENT_MON_ILLUMISE,
+ FALLARBOR_TENT_MON_MAGNEMITE,
+ FALLARBOR_TENT_MON_LINOONE_2,
+ FALLARBOR_TENT_MON_WINGULL,
-1
};
const u16 gFallarborBattleTentTrainerMons_Mariana[] =
{
- 0,
- 4,
- 13,
- 19,
- 28,
- 30,
- 37,
+ FALLARBOR_TENT_MON_NUMEL,
+ FALLARBOR_TENT_MON_KECLEON,
+ FALLARBOR_TENT_MON_VOLBEAT,
+ FALLARBOR_TENT_MON_MAGNEMITE,
+ FALLARBOR_TENT_MON_WINGULL,
+ FALLARBOR_TENT_MON_BARBOACH,
+ FALLARBOR_TENT_MON_GRAVELER,
-1
};
const u16 gFallarborBattleTentTrainerMons_Sheldon[] =
{
- 2,
- 3,
- 21,
- 31,
- 39,
+ FALLARBOR_TENT_MON_PLUSLE,
+ FALLARBOR_TENT_MON_POOCHYENA,
+ FALLARBOR_TENT_MON_WHISMUR,
+ FALLARBOR_TENT_MON_WAILMER,
+ FALLARBOR_TENT_MON_SWALOT,
-1
};
const u16 gFallarborBattleTentTrainerMons_Gianna[] =
{
- 1,
- 2,
- 30,
- 32,
- 41,
+ FALLARBOR_TENT_MON_LINOONE_1,
+ FALLARBOR_TENT_MON_PLUSLE,
+ FALLARBOR_TENT_MON_BARBOACH,
+ FALLARBOR_TENT_MON_MARILL,
+ FALLARBOR_TENT_MON_KIRLIA,
-1
};
const u16 gFallarborBattleTentTrainerMons_Yahir[] =
{
- 4,
- 8,
- 15,
- 17,
- 22,
- 24,
+ FALLARBOR_TENT_MON_KECLEON,
+ FALLARBOR_TENT_MON_MACHOKE,
+ FALLARBOR_TENT_MON_NINJASK_2,
+ FALLARBOR_TENT_MON_ARON_2,
+ FALLARBOR_TENT_MON_LOUDRED,
+ FALLARBOR_TENT_MON_MIGHTYENA,
-1
};
const u16 gFallarborBattleTentTrainerMons_Britney[] =
{
- 4,
- 7,
- 14,
- 20,
- 23,
- 43,
+ FALLARBOR_TENT_MON_KECLEON,
+ FALLARBOR_TENT_MON_MAKUHITA,
+ FALLARBOR_TENT_MON_NINJASK_1,
+ FALLARBOR_TENT_MON_VOLTORB,
+ FALLARBOR_TENT_MON_LINOONE_2,
+ FALLARBOR_TENT_MON_NUZLEAF,
-1
};
const u16 gFallarborBattleTentTrainerMons_Hecter[] =
{
- 0,
- 1,
- 2,
- 5,
- 9,
- 35,
+ FALLARBOR_TENT_MON_NUMEL,
+ FALLARBOR_TENT_MON_LINOONE_1,
+ FALLARBOR_TENT_MON_PLUSLE,
+ FALLARBOR_TENT_MON_MAGIKARP,
+ FALLARBOR_TENT_MON_NINCADA,
+ FALLARBOR_TENT_MON_TRAPINCH,
-1
};
const u16 gFallarborBattleTentTrainerMons_Tannor[] =
{
- 5,
- 30,
- 31,
- 33,
- 34,
+ FALLARBOR_TENT_MON_MAGIKARP,
+ FALLARBOR_TENT_MON_BARBOACH,
+ FALLARBOR_TENT_MON_WAILMER,
+ FALLARBOR_TENT_MON_GOLDEEN_1,
+ FALLARBOR_TENT_MON_GOLDEEN_2,
-1
};
const u16 gFallarborBattleTentTrainerMons_Benji[] =
{
- 25,
- 26,
- 27,
- 28,
- 29,
+ FALLARBOR_TENT_MON_SWABLU,
+ FALLARBOR_TENT_MON_SKARMORY,
+ FALLARBOR_TENT_MON_GOLBAT,
+ FALLARBOR_TENT_MON_WINGULL,
+ FALLARBOR_TENT_MON_PELIPPER,
-1
};
const u16 gFallarborBattleTentTrainerMons_Rory[] =
{
- 9,
- 11,
- 14,
- 15,
- 27,
- 39,
+ FALLARBOR_TENT_MON_NINCADA,
+ FALLARBOR_TENT_MON_DUSTOX,
+ FALLARBOR_TENT_MON_NINJASK_1,
+ FALLARBOR_TENT_MON_NINJASK_2,
+ FALLARBOR_TENT_MON_GOLBAT,
+ FALLARBOR_TENT_MON_SWALOT,
-1
};
const u16 gFallarborBattleTentTrainerMons_Eleanor[] =
{
- 23,
- 28,
- 31,
- 36,
- 38,
- 42,
- 44,
+ FALLARBOR_TENT_MON_LINOONE_2,
+ FALLARBOR_TENT_MON_WINGULL,
+ FALLARBOR_TENT_MON_WAILMER,
+ FALLARBOR_TENT_MON_BALTOY,
+ FALLARBOR_TENT_MON_SANDSHREW,
+ FALLARBOR_TENT_MON_LOMBRE,
+ FALLARBOR_TENT_MON_CACNEA,
-1
};
const u16 gFallarborBattleTentTrainerMons_Evelyn[] =
{
- 29,
- 31,
- 32,
- 33,
- 34,
+ FALLARBOR_TENT_MON_PELIPPER,
+ FALLARBOR_TENT_MON_WAILMER,
+ FALLARBOR_TENT_MON_MARILL,
+ FALLARBOR_TENT_MON_GOLDEEN_1,
+ FALLARBOR_TENT_MON_GOLDEEN_2,
-1
};
const u16 gFallarborBattleTentTrainerMons_Arielle[] =
{
- 1,
- 3,
- 38,
- 39,
- 41,
+ FALLARBOR_TENT_MON_LINOONE_1,
+ FALLARBOR_TENT_MON_POOCHYENA,
+ FALLARBOR_TENT_MON_SANDSHREW,
+ FALLARBOR_TENT_MON_SWALOT,
+ FALLARBOR_TENT_MON_KIRLIA,
-1
};
const u16 gFallarborBattleTentTrainerMons_Connar[] =
{
- 7,
- 8,
- 28,
- 29,
- 31,
- 32,
+ FALLARBOR_TENT_MON_MAKUHITA,
+ FALLARBOR_TENT_MON_MACHOKE,
+ FALLARBOR_TENT_MON_WINGULL,
+ FALLARBOR_TENT_MON_PELIPPER,
+ FALLARBOR_TENT_MON_WAILMER,
+ FALLARBOR_TENT_MON_MARILL,
-1
};
const u16 gFallarborBattleTentTrainerMons_Maurice[] =
{
- 4,
- 5,
- 6,
- 12,
- 13,
+ FALLARBOR_TENT_MON_KECLEON,
+ FALLARBOR_TENT_MON_MAGIKARP,
+ FALLARBOR_TENT_MON_SOLROCK,
+ FALLARBOR_TENT_MON_ILLUMISE,
+ FALLARBOR_TENT_MON_VOLBEAT,
-1
};
const u16 gFallarborBattleTentTrainerMons_Kianna[] =
{
- 22,
- 24,
- 26,
- 27,
- 34,
- 37,
+ FALLARBOR_TENT_MON_LOUDRED,
+ FALLARBOR_TENT_MON_MIGHTYENA,
+ FALLARBOR_TENT_MON_SKARMORY,
+ FALLARBOR_TENT_MON_GOLBAT,
+ FALLARBOR_TENT_MON_GOLDEEN_2,
+ FALLARBOR_TENT_MON_GRAVELER,
-1
};
-const struct BattleFrontierTrainer gFallarborBattleTentTrainers[] =
+const struct BattleFrontierTrainer gFallarborBattleTentTrainers[NUM_BATTLE_TENT_TRAINERS] =
{
- [0] = {
+ [FALLARBOR_TENT_TRAINER_AMBER] = {
.facilityClass = FACILITY_CLASS_AROMA_LADY,
.trainerName = _("AMBER"),
.speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_DIET, EC_WORD_EVERY, EC_WORD_DAY},
.speechWin = {EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_OF, EC_WORD_SWEETS, EC_WORD_SHOCKED, EC_WORD_ME},
.speechLose = {EC_WORD_IF, EC_WORD_YOU, EC_WORD_GIVE_UP, EC_WORD_YOU, EC_WORD_WILL, EC_WORD_LOSE},
- .monSets = gFallarborBattleTentTrainerMons_Amber
+ .monSet = gFallarborBattleTentTrainerMons_Amber
},
- [1] = {
+ [FALLARBOR_TENT_TRAINER_JAVIER] = {
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
.trainerName = _("JAVIER"),
.speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_EVER, EC_WORD_HAVE, EC_WORD_ENOUGH, EC_WORD_MONEY},
.speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_BUT, EC_WORD_I, EC_WORD_NEED, EC_WORD_MONEY},
.speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_MONEY, EC_WORD_FOR, EC_WORD_A, EC_WORD_BIKE},
- .monSets = gFallarborBattleTentTrainerMons_Javier
+ .monSet = gFallarborBattleTentTrainerMons_Javier
},
- [2] = {
+ [FALLARBOR_TENT_TRAINER_NATALIA] = {
.facilityClass = FACILITY_CLASS_TUBER_F,
.trainerName = _("NATALIE"),
.speechBefore = {EC_WORD_THE, EC_WORD_WAY, EC_WORD_I, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_WEIRD},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_MUCH, EC_WORD_TOO_WEAK, EC_WORD_FOR, EC_WORD_THIS, EC_WORD_PLACE},
.speechLose = {EC_WORD_GIVE_ME, EC_WORD_AN, EC_WORD_EASY, EC_WORD_MATCH, EC_WORD_NEXT, EC_WORD_TIME},
- .monSets = gFallarborBattleTentTrainerMons_Natalie
+ .monSet = gFallarborBattleTentTrainerMons_Natalie
},
- [3] = {
+ [FALLARBOR_TENT_TRAINER_TREVE] = {
.facilityClass = FACILITY_CLASS_TUBER_M,
.trainerName = _("TREVE"),
.speechBefore = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_MOVE2(METRONOME), EC_WORD_AND, EC_WORD_SLEEP},
.speechWin = {EC_WORD_YEAH, EC_WORD_EXCL, EC_MOVE(HYPNOSIS), EC_WORD_IS, EC_WORD_TOTALLY, EC_WORD_GREAT},
.speechLose = {EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_DIDN_T, EC_WORD_WORK, EC_WORD_ELLIPSIS, -1},
- .monSets = gFallarborBattleTentTrainerMons_Treve
+ .monSet = gFallarborBattleTentTrainerMons_Treve
},
- [4] = {
+ [FALLARBOR_TENT_TRAINER_ARIANNA] = {
.facilityClass = FACILITY_CLASS_LADY,
.trainerName = _("ARIANNA"),
.speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_GIVE_ME, EC_WORD_POKEMON, EC_WORD_FOR, EC_WORD_MY, EC_WORD_COLLECTION},
.speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_TOO_WEAK, EC_WORD_TO, EC_WORD_COLLECT},
.speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_SOMETHING, EC_WORD_ELSE, EC_WORD_ELLIPSIS},
- .monSets = gFallarborBattleTentTrainerMons_Arianna
+ .monSet = gFallarborBattleTentTrainerMons_Arianna
},
- [5] = {
+ [FALLARBOR_TENT_TRAINER_JADYN] = {
.facilityClass = FACILITY_CLASS_BEAUTY,
.trainerName = _("JADYN"),
.speechBefore = {EC_WORD_MY, EC_WORD_NAME, EC_WORD_IS, EC_WORD_REALLY, EC_WORD_A, EC_WORD_MYSTERY},
.speechWin = {EC_WORD_MY, EC_WORD_NAME, EC_WORD_GOES, EC_WORD_ON, EC_WORD_A, EC_WORD_MYSTERY},
.speechLose = {EC_WORD_MY, EC_WORD_NAME, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_YOUR, EC_WORD_MOTHER},
- .monSets = gFallarborBattleTentTrainerMons_Jadyn
+ .monSet = gFallarborBattleTentTrainerMons_Jadyn
},
- [6] = {
+ [FALLARBOR_TENT_TRAINER_GERARDO] = {
.facilityClass = FACILITY_CLASS_RICH_BOY,
.trainerName = _("GERARDO"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_BEST, EC_WORD_HERO, EC_WORD_EVER, EC_WORD_EXCL},
.speechWin = {EC_WORD_SEE, EC_WORD_WHAT, EC_WORD_I, EC_WORD_MEAN, EC_WORD_QUES, -1},
.speechLose = {EC_WORD_HUH_QUES, EC_WORD_YOU, EC_WORD_WERE, EC_WORD_RIGHT, EC_WORD_QUES, -1},
- .monSets = gFallarborBattleTentTrainerMons_Gerardo
+ .monSet = gFallarborBattleTentTrainerMons_Gerardo
},
- [7] = {
+ [FALLARBOR_TENT_TRAINER_JONN] = {
.facilityClass = FACILITY_CLASS_POKEMANIAC,
.trainerName = _("JONN"),
.speechBefore = {EC_WORD_THE, EC_WORD_WORLD, EC_MOVE2(SUPERPOWER), EC_MOVE2(STOMP), EC_WORD_CONTEST, EC_WORD_EXCL_EXCL},
.speechWin = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_EXCL_EXCL, EC_WORD_HEAR, EC_WORD_ME, EC_MOVE2(ROAR)},
.speechLose = {EC_WORD_I, EC_WORD_GIVE_UP, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_NO_1, EC_WORD_EXCL},
- .monSets = gFallarborBattleTentTrainerMons_Jonn
+ .monSet = gFallarborBattleTentTrainerMons_Jonn
},
- [8] = {
+ [FALLARBOR_TENT_TRAINER_ESTEBAN] = {
.facilityClass = FACILITY_CLASS_SWIMMER_M,
.trainerName = _("ESTEBAN"),
.speechBefore = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_GOOD, EC_WORD_TRAINER, EC_WORD_QUES, EC_WORD_UNBELIEVABLE},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_SOME, EC_WORD_PUSHOVER, EC_WORD_OF, EC_WORD_A, EC_WORD_TRAINER},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_MUCH, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_ME},
- .monSets = gFallarborBattleTentTrainerMons_Esteban
+ .monSet = gFallarborBattleTentTrainerMons_Esteban
},
- [9] = {
+ [FALLARBOR_TENT_TRAINER_JAMESON] = {
.facilityClass = FACILITY_CLASS_CAMPER,
.trainerName = _("JAMESON"),
.speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_SILKY, EC_WORD_SMOOTH, EC_WORD_EXCL},
.speechWin = {EC_WORD_MY, EC_WORD_SILKY, EC_WORD_SMOOTH, EC_WORD_POKEMON, EC_WORD_RULE, EC_WORD_EXCL},
.speechLose = {EC_WORD_MY, EC_WORD_POKEMON, EC_MOVE2(STRUGGLE), EC_WORD_IN, EC_WORD_YOUR, EC_WORD_STICKY_HOLD},
- .monSets = gFallarborBattleTentTrainerMons_Jameson
+ .monSet = gFallarborBattleTentTrainerMons_Jameson
},
- [10] = {
+ [FALLARBOR_TENT_TRAINER_ALANZO] = {
.facilityClass = FACILITY_CLASS_BUG_MANIAC,
.trainerName = _("ALANZO"),
.speechBefore = {EC_MOVE2(FORESIGHT), EC_WORD_IS, EC_WORD_A, EC_WORD_POWER, EC_WORD_I, EC_WORD_HAVE},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_OBLIVIOUS, EC_WORD_ABOUT, EC_MOVE2(FORESIGHT), EC_WORD_EXCL, -1},
.speechLose = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_IS, EC_WORD_ALWAYS, EC_WORD_RIGHT, EC_WORD_EXCL},
- .monSets = gFallarborBattleTentTrainerMons_Alanzo
+ .monSet = gFallarborBattleTentTrainerMons_Alanzo
},
- [11] = {
+ [FALLARBOR_TENT_TRAINER_HOWARD] = {
.facilityClass = FACILITY_CLASS_GENTLEMAN,
.trainerName = _("HOWARD"),
.speechBefore = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, -1},
.speechWin = {EC_WORD_YOU, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_QUES},
.speechLose = {EC_WORD_YOU, EC_WORD_WOULD, EC_WORD_GO, EC_WORD_ALL, EC_WORD_OUT, EC_WORD_ELLIPSIS},
- .monSets = gFallarborBattleTentTrainerMons_Howard
+ .monSet = gFallarborBattleTentTrainerMons_Howard
},
- [12] = {
+ [FALLARBOR_TENT_TRAINER_CONRAD] = {
.facilityClass = FACILITY_CLASS_GUITARIST,
.trainerName = _("CONRAD"),
.speechBefore = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_PRETTY, EC_WORD_WILD, EC_WORD_EXCL},
.speechWin = {EC_WORD_WHOAH, EC_WORD_EXCL_EXCL, -1, EC_WORD_LET_S, EC_WORD_DANCE, EC_WORD_EXCL},
.speechLose = {EC_WORD_MY, EC_WORD_MUSIC, EC_WORD_WILL, EC_WORD_PLAY, EC_WORD_ON, EC_WORD_ELLIPSIS},
- .monSets = gFallarborBattleTentTrainerMons_Conrad
+ .monSet = gFallarborBattleTentTrainerMons_Conrad
},
- [13] = {
+ [FALLARBOR_TENT_TRAINER_MAKENNA] = {
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
.trainerName = _("MAKENNA"),
.speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_IT},
.speechWin = {EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY},
.speechLose = {EC_WORD_AWW, EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO},
- .monSets = gFallarborBattleTentTrainerMons_Makenna
+ .monSet = gFallarborBattleTentTrainerMons_Makenna
},
- [14] = {
+ [FALLARBOR_TENT_TRAINER_BRAYAN] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_M,
.trainerName = _("BRAYAN"),
.speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_POWER, EC_WORD_QUES},
.speechWin = {EC_WORD_HOW, EC_WORD_BORING, EC_WORD_ELLIPSIS, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE},
.speechLose = {EC_WORD_AM, EC_WORD_I, EC_WORD_THE, EC_WORD_WEAK, EC_WORD_TRAINER, EC_WORD_QUES},
- .monSets = gFallarborBattleTentTrainerMons_Brayan
+ .monSet = gFallarborBattleTentTrainerMons_Brayan
},
- [15] = {
+ [FALLARBOR_TENT_TRAINER_MARIANA] = {
.facilityClass = FACILITY_CLASS_COOLTRAINER_F,
.trainerName = _("MARIANA"),
.speechBefore = {EC_WORD_A, EC_WORD_LIE, EC_WORD_CAN, EC_WORD_BE, EC_WORD_KIND, EC_WORD_ELLIPSIS},
.speechWin = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_LIKE, EC_WORD_THE, EC_WORD_SUNDAY, EC_WORD_COMICS},
.speechLose = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_LIKE, EC_WORD_FROM, EC_WORD_A, EC_WORD_MOVIE},
- .monSets = gFallarborBattleTentTrainerMons_Mariana
+ .monSet = gFallarborBattleTentTrainerMons_Mariana
},
- [16] = {
+ [FALLARBOR_TENT_TRAINER_SHELDON] = {
.facilityClass = FACILITY_CLASS_POKEFAN_M,
.trainerName = _("SHELDON"),
.speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_TEACHER, EC_WORD_GETS, EC_WORD_NO, EC_MOVE2(REST)},
.speechWin = {EC_WORD_MY, EC_WORD_SMARTNESS, EC_WORD_GETS, EC_WORD_ME, EC_WORD_EASY, EC_WORD_WINS},
.speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_GO, EC_WORD_WORK, EC_WORD_BYE_BYE},
- .monSets = gFallarborBattleTentTrainerMons_Sheldon
+ .monSet = gFallarborBattleTentTrainerMons_Sheldon
},
- [17] = {
+ [FALLARBOR_TENT_TRAINER_GIANNA] = {
.facilityClass = FACILITY_CLASS_POKEFAN_F,
.trainerName = _("GIANNA"),
.speechBefore = {EC_WORD_AHAHA, EC_WORD_YES, EC_WORD_EXCL, EC_WORD_LOVEY_DOVEY, EC_WORD_POKEMON, EC_WORD_WORLD},
.speechWin = {EC_WORD_MY, EC_WORD_SHINE, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_THINGS, EC_WORD_BETTER},
.speechLose = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_DISLIKE, EC_WORD_POKEMON, EC_WORD_QUES, -1},
- .monSets = gFallarborBattleTentTrainerMons_Gianna
+ .monSet = gFallarborBattleTentTrainerMons_Gianna
},
- [18] = {
+ [FALLARBOR_TENT_TRAINER_YAHIR] = {
.facilityClass = FACILITY_CLASS_EXPERT_M,
.trainerName = _("YAHIR"),
.speechBefore = {EC_WORD_YOU, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_COME_ON, EC_WORD_EXCL},
.speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_TRAIN, EC_WORD_A_LOT, EC_WORD_MORE},
.speechLose = {EC_WORD_NOT, EC_WORD_ENOUGH, EC_WORD_ELLIPSIS, EC_WORD_JUST, EC_WORD_NOT, EC_WORD_ENOUGH},
- .monSets = gFallarborBattleTentTrainerMons_Yahir
+ .monSet = gFallarborBattleTentTrainerMons_Yahir
},
- [19] = {
+ [FALLARBOR_TENT_TRAINER_BRITNEY] = {
.facilityClass = FACILITY_CLASS_EXPERT_F,
.trainerName = _("BRITNEY"),
.speechBefore = {EC_WORD_IT, EC_WORD_SEEMS, EC_WORD_THAT, EC_WORD_YOU_RE, EC_WORD_QUITE, EC_WORD_GOOD},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_LUKEWARM, EC_WORD_TALENT, EC_WORD_AT, EC_WORD_BEST},
.speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_COOL, EC_WORD_HERO, EC_WORD_AT, EC_WORD_THIS},
- .monSets = gFallarborBattleTentTrainerMons_Britney
+ .monSet = gFallarborBattleTentTrainerMons_Britney
},
- [20] = {
+ [FALLARBOR_TENT_TRAINER_HECTER] = {
.facilityClass = FACILITY_CLASS_YOUNGSTER,
.trainerName = _("HECTER"),
.speechBefore = {EC_WORD_MY, EC_MOVE2(HIDDEN_POWER), EC_WORD_IS, EC_WORD_EXCITING, EC_WORD_ME, EC_WORD_EXCL},
.speechWin = {EC_WORD_YEEHAW_EXCL, EC_WORD_LET_S, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(HIDDEN_POWER), EC_WORD_PARTY},
.speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_DON_T, EC_WORD_YOU, EC_MOVE2(MIMIC), EC_WORD_ME},
- .monSets = gFallarborBattleTentTrainerMons_Hecter
+ .monSet = gFallarborBattleTentTrainerMons_Hecter
},
- [21] = {
+ [FALLARBOR_TENT_TRAINER_TANNOR] = {
.facilityClass = FACILITY_CLASS_FISHERMAN,
.trainerName = _("TANNOR"),
.speechBefore = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GOT, EC_WORD_TO, EC_WORD_BE, EC_WORD_JOKING},
.speechWin = {EC_WORD_YOU_RE, EC_WORD_THE, EC_WORD_BEST, EC_WORD_AT, EC_WORD_BEING, EC_WORD_FUNNY},
.speechLose = {EC_WORD_YOU, EC_WORD_WEREN_T, EC_WORD_BEING, EC_WORD_FUNNY, EC_WORD_AT, EC_WORD_ALL},
- .monSets = gFallarborBattleTentTrainerMons_Tannor
+ .monSet = gFallarborBattleTentTrainerMons_Tannor
},
- [22] = {
+ [FALLARBOR_TENT_TRAINER_BENJI] = {
.facilityClass = FACILITY_CLASS_BIRD_KEEPER,
.trainerName = _("BENJI"),
.speechBefore = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_THINK, EC_WORD_VERY, EC_WORD_FAST, EC_WORD_HUH_QUES},
.speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_MEAN, EC_WORD_YOU},
.speechLose = {EC_WORD_YOU, EC_WORD_LEFT, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SAD, EC_WORD_ELLIPSIS},
- .monSets = gFallarborBattleTentTrainerMons_Benji
+ .monSet = gFallarborBattleTentTrainerMons_Benji
},
- [23] = {
+ [FALLARBOR_TENT_TRAINER_RORY] = {
.facilityClass = FACILITY_CLASS_NINJA_BOY,
.trainerName = _("RORY"),
.speechBefore = {EC_WORD_DON_T, EC_WORD_CAUSE, EC_WORD_AN, EC_MOVE(UPROAR), EC_WORD_YOU, EC_WORD_EXCL},
.speechWin = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_AN, EC_MOVE(UPROAR), EC_WORD_EXCL},
.speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_CAUSE, EC_WORD_AN, EC_MOVE(UPROAR)},
- .monSets = gFallarborBattleTentTrainerMons_Rory
+ .monSet = gFallarborBattleTentTrainerMons_Rory
},
- [24] = {
+ [FALLARBOR_TENT_TRAINER_ELEANOR] = {
.facilityClass = FACILITY_CLASS_PARASOL_LADY,
.trainerName = _("ELEANOR"),
.speechBefore = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_WANT, EC_WORD_TO, EC_WORD_PARTY, -1},
.speechWin = {EC_WORD_A, EC_WORD_TRENDY, EC_WORD_PARTY, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_REFRESHING},
.speechLose = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_PARTY, EC_WORD_QUES},
- .monSets = gFallarborBattleTentTrainerMons_Eleanor
+ .monSet = gFallarborBattleTentTrainerMons_Eleanor
},
- [25] = {
+ [FALLARBOR_TENT_TRAINER_EVELYN] = {
.facilityClass = FACILITY_CLASS_SWIMMER_F,
.trainerName = _("EVELYN"),
.speechBefore = {EC_WORD_MY, EC_WORD_PC, EC_WORD_IS, EC_WORD_MY, EC_WORD_SECRET_BASE, EC_WORD_EXCL},
.speechWin = {EC_WORD_IT_S, EC_WORD_ALL, EC_WORD_SECRET, EC_WORD_ON, EC_WORD_MY, EC_WORD_PC},
.speechLose = {EC_WORD_NO, EC_WORD_EXCL, -1, EC_WORD_I, EC_WORD_REJECT, EC_WORD_THIS},
- .monSets = gFallarborBattleTentTrainerMons_Evelyn
+ .monSet = gFallarborBattleTentTrainerMons_Evelyn
},
- [26] = {
+ [FALLARBOR_TENT_TRAINER_ARIELLE] = {
.facilityClass = FACILITY_CLASS_PICNICKER,
.trainerName = _("ARIELLE"),
.speechBefore = {EC_WORD_IT_S, EC_WORD_NOT_VERY, EC_WORD_PRETTY, EC_WORD_BUT, EC_WORD_I, EC_WORD_TRY},
.speechWin = {EC_WORD_WE_RE, EC_WORD_NOT_VERY, EC_WORD_PRETTY, EC_WORD_BUT, EC_WORD_WE_RE, EC_WORD_GREAT},
.speechLose = {EC_WORD_THAT_WAS, EC_WORD_PRETTY, EC_WORD_MEAN, EC_WORD_OF, EC_WORD_YOU, EC_WORD_EXCL},
- .monSets = gFallarborBattleTentTrainerMons_Arielle
+ .monSet = gFallarborBattleTentTrainerMons_Arielle
},
- [27] = {
+ [FALLARBOR_TENT_TRAINER_CONNAR] = {
.facilityClass = FACILITY_CLASS_SAILOR,
.trainerName = _("CONNAR"),
.speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_STRONG, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_THIS},
.speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_YOU_RE, EC_WORD_OK_QUES, -1},
.speechLose = {EC_WORD_GOOD_BYE, EC_WORD_AND, EC_WORD_THANK_YOU, -1, -1, -1},
- .monSets = gFallarborBattleTentTrainerMons_Connar
+ .monSet = gFallarborBattleTentTrainerMons_Connar
},
- [28] = {
+ [FALLARBOR_TENT_TRAINER_MAURICE] = {
.facilityClass = FACILITY_CLASS_COLLECTOR,
.trainerName = _("MAURICE"),
.speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_WORD_RADIO, EC_WORD_OR, EC_WORD_TELEVISION},
.speechWin = {EC_WORD_BUT, EC_WORD_THERE, EC_WORD_IS, EC_WORD_A_LOT, EC_WORD_OF, EC_WORD_POKEMON},
.speechLose = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_ENJOY, EC_WORD_MYSELF, EC_WORD_WITHOUT, EC_WORD_MONEY},
- .monSets = gFallarborBattleTentTrainerMons_Maurice
+ .monSet = gFallarborBattleTentTrainerMons_Maurice
},
- [29] = {
+ [FALLARBOR_TENT_TRAINER_KIANNA] = {
.facilityClass = FACILITY_CLASS_LASS,
.trainerName = _("KIANNA"),
.speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_DEPT_STORE, EC_WORD_SHOPPING},
.speechWin = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_SHOPPING, EC_WORD_ALONE, -1, -1},
.speechLose = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_SHOPPING, EC_WORD_TOGETHER, EC_WORD_QUES},
- .monSets = gFallarborBattleTentTrainerMons_Kianna
+ .monSet = gFallarborBattleTentTrainerMons_Kianna
}
};
-const struct FacilityMon gFallarborBattleTentMons[] =
+const struct FacilityMon gFallarborBattleTentMons[NUM_FALLARBOR_TENT_MONS] =
{
- [0] = {
+ [FALLARBOR_TENT_MON_NUMEL] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_GROWL, MOVE_FLAMETHROWER, MOVE_TACKLE, MOVE_SUNNY_DAY},
.itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [1] = {
+ [FALLARBOR_TENT_MON_LINOONE_1] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_ODOR_SLEUTH, MOVE_COVET, MOVE_ROCK_SMASH, MOVE_CHARM},
.itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
.nature = NATURE_SASSY
},
- [2] = {
+ [FALLARBOR_TENT_MON_PLUSLE] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_SPARK, MOVE_GROWL, MOVE_QUICK_ATTACK, MOVE_FAKE_TEARS},
.itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [3] = {
+ [FALLARBOR_TENT_MON_POOCHYENA] = {
.species = SPECIES_POOCHYENA,
.moves = {MOVE_YAWN, MOVE_ODOR_SLEUTH, MOVE_HOWL, MOVE_FRUSTRATION},
.itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAUGHTY
},
- [4] = {
+ [FALLARBOR_TENT_MON_KECLEON] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_LICK, MOVE_SLASH, MOVE_FAINT_ATTACK, MOVE_PSYBEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_WIKI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_MODEST
},
- [5] = {
+ [FALLARBOR_TENT_MON_MAGIKARP] = {
.species = SPECIES_MAGIKARP,
.moves = {MOVE_SPLASH, MOVE_TACKLE, MOVE_FLAIL, MOVE_NONE},
.itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_SCALE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [6] = {
+ [FALLARBOR_TENT_MON_SOLROCK] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_ROCK_THROW, MOVE_FLASH, MOVE_SANDSTORM, MOVE_PSYWAVE},
.itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_SASSY
},
- [7] = {
+ [FALLARBOR_TENT_MON_MAKUHITA] = {
.species = SPECIES_MAKUHITA,
.moves = {MOVE_DETECT, MOVE_ARM_THRUST, MOVE_FAKE_OUT, MOVE_SMELLING_SALT},
.itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [8] = {
+ [FALLARBOR_TENT_MON_MACHOKE] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_COUNTER, MOVE_REVENGE, MOVE_BULK_UP, MOVE_FOCUS_ENERGY},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_NAIVE
},
- [9] = {
+ [FALLARBOR_TENT_MON_NINCADA] = {
.species = SPECIES_NINCADA,
.moves = {MOVE_FURY_SWIPES, MOVE_ENDURE, MOVE_MUD_SLAP, MOVE_DIG},
.itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_SERIOUS
},
- [10] = {
+ [FALLARBOR_TENT_MON_BEAUTIFLY] = {
.species = SPECIES_BEAUTIFLY,
.moves = {MOVE_FLASH, MOVE_MORNING_SUN, MOVE_HARDEN, MOVE_MEGA_DRAIN},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIRKY
},
- [11] = {
+ [FALLARBOR_TENT_MON_DUSTOX] = {
.species = SPECIES_DUSTOX,
.moves = {MOVE_MOONLIGHT, MOVE_HARDEN, MOVE_POISON_STING, MOVE_PSYBEAM},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
.nature = NATURE_DOCILE
},
- [12] = {
+ [FALLARBOR_TENT_MON_ILLUMISE] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_METRONOME, MOVE_FLATTER, MOVE_WISH, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
.evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [13] = {
+ [FALLARBOR_TENT_MON_VOLBEAT] = {
.species = SPECIES_VOLBEAT,
.moves = {MOVE_TACKLE, MOVE_MOONLIGHT, MOVE_SIGNAL_BEAM, MOVE_TAIL_GLOW},
.itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [14] = {
+ [FALLARBOR_TENT_MON_NINJASK_1] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_DIG, MOVE_SAND_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_TIMID
},
- [15] = {
+ [FALLARBOR_TENT_MON_NINJASK_2] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_SWORDS_DANCE, MOVE_CUT, MOVE_FURY_CUTTER, MOVE_LEECH_LIFE},
.itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [16] = {
+ [FALLARBOR_TENT_MON_ARON_1] = {
.species = SPECIES_ARON,
.moves = {MOVE_METAL_CLAW, MOVE_PROTECT, MOVE_SHOCK_WAVE, MOVE_METAL_SOUND},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_LONELY
},
- [17] = {
+ [FALLARBOR_TENT_MON_ARON_2] = {
.species = SPECIES_ARON,
.moves = {MOVE_SECRET_POWER, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_MUD_SLAP},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_GENTLE
},
- [18] = {
+ [FALLARBOR_TENT_MON_ELECTRIKE] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_CRUNCH, MOVE_THUNDER_WAVE, MOVE_HOWL, MOVE_QUICK_ATTACK},
.itemTableId = BATTLE_FRONTIER_ITEM_SEA_INCENSE,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_HASTY
},
- [19] = {
+ [FALLARBOR_TENT_MON_MAGNEMITE] = {
.species = SPECIES_MAGNEMITE,
.moves = {MOVE_THUNDER_WAVE, MOVE_SUPERSONIC, MOVE_ENDURE, MOVE_SPARK},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_QUIET
},
- [20] = {
+ [FALLARBOR_TENT_MON_VOLTORB] = {
.species = SPECIES_VOLTORB,
.moves = {MOVE_CHARGE, MOVE_SPARK, MOVE_SCREECH, MOVE_SONIC_BOOM},
.itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [21] = {
+ [FALLARBOR_TENT_MON_WHISMUR] = {
.species = SPECIES_WHISMUR,
.moves = {MOVE_REST, MOVE_SLEEP_TALK, MOVE_HYPER_VOICE, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [22] = {
+ [FALLARBOR_TENT_MON_LOUDRED] = {
.species = SPECIES_LOUDRED,
.moves = {MOVE_STOMP, MOVE_REST, MOVE_SCREECH, MOVE_UPROAR},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [23] = {
+ [FALLARBOR_TENT_MON_LINOONE_2] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_SHOCK_WAVE, MOVE_GROWL},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [24] = {
+ [FALLARBOR_TENT_MON_MIGHTYENA] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_SAND_ATTACK, MOVE_HOWL, MOVE_SWAGGER, MOVE_SECRET_POWER},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_JOLLY
},
- [25] = {
+ [FALLARBOR_TENT_MON_SWABLU] = {
.species = SPECIES_SWABLU,
.moves = {MOVE_TAKE_DOWN, MOVE_SING, MOVE_GROWL, MOVE_SAFEGUARD},
.itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_QUIRKY
},
- [26] = {
+ [FALLARBOR_TENT_MON_SKARMORY] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_AGILITY, MOVE_STEEL_WING, MOVE_SAND_ATTACK, MOVE_TORMENT},
.itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [27] = {
+ [FALLARBOR_TENT_MON_GOLBAT] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_CONFUSE_RAY, MOVE_BITE, MOVE_DOUBLE_TEAM, MOVE_SUBSTITUTE},
.itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BOLD
},
- [28] = {
+ [FALLARBOR_TENT_MON_WINGULL] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_WING_ATTACK, MOVE_HAIL, MOVE_DOUBLE_TEAM, MOVE_SUPERSONIC},
.itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
.nature = NATURE_MODEST
},
- [29] = {
+ [FALLARBOR_TENT_MON_PELIPPER] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_TWISTER, MOVE_ICY_WIND, MOVE_DOUBLE_TEAM, MOVE_WATER_GUN},
.itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [30] = {
+ [FALLARBOR_TENT_MON_BARBOACH] = {
.species = SPECIES_BARBOACH,
.moves = {MOVE_SPARK, MOVE_WATER_GUN, MOVE_EARTHQUAKE, MOVE_WATER_SPORT},
.itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_MODEST
},
- [31] = {
+ [FALLARBOR_TENT_MON_WAILMER] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_WATER_PULSE, MOVE_RAIN_DANCE, MOVE_SPLASH, MOVE_CURSE},
.itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_QUIET
},
- [32] = {
+ [FALLARBOR_TENT_MON_MARILL] = {
.species = SPECIES_MARILL,
.moves = {MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_ATTRACT},
.itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [33] = {
+ [FALLARBOR_TENT_MON_GOLDEEN_1] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_WATERFALL, MOVE_RAIN_DANCE, MOVE_FLAIL, MOVE_PROTECT},
.itemTableId = BATTLE_FRONTIER_ITEM_GANLON_BERRY,
.evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
.nature = NATURE_HASTY
},
- [34] = {
+ [FALLARBOR_TENT_MON_GOLDEEN_2] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_SLEEP_TALK, MOVE_HORN_DRILL, MOVE_REST, MOVE_SUPERSONIC},
.itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_CAREFUL
},
- [35] = {
+ [FALLARBOR_TENT_MON_TRAPINCH] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_RETURN, MOVE_SAND_ATTACK, MOVE_ATTRACT, MOVE_STRENGTH},
.itemTableId = BATTLE_FRONTIER_ITEM_MAGO_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [36] = {
+ [FALLARBOR_TENT_MON_BALTOY] = {
.species = SPECIES_BALTOY,
.moves = {MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, MOVE_RAPID_SPIN, MOVE_MIMIC},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [37] = {
+ [FALLARBOR_TENT_MON_GRAVELER] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_ROCK_BLAST, MOVE_DEFENSE_CURL, MOVE_MAGNITUDE, MOVE_MUD_SPORT},
.itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_ADAMANT
},
- [38] = {
+ [FALLARBOR_TENT_MON_SANDSHREW] = {
.species = SPECIES_SANDSHREW,
.moves = {MOVE_SAND_TOMB, MOVE_SANDSTORM, MOVE_DOUBLE_TEAM, MOVE_FOCUS_PUNCH},
.itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_JOLLY
},
- [39] = {
+ [FALLARBOR_TENT_MON_SWALOT] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_YAWN, MOVE_ENCORE, MOVE_BULLET_SEED, MOVE_SLUDGE},
.itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
.evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
.nature = NATURE_BRAVE
},
- [40] = {
+ [FALLARBOR_TENT_MON_SHROOMISH] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_HEADBUTT, MOVE_SPORE, MOVE_SWAGGER, MOVE_LEECH_SEED},
.itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_IMPISH
},
- [41] = {
+ [FALLARBOR_TENT_MON_KIRLIA] = {
.species = SPECIES_KIRLIA,
.moves = {MOVE_HYPNOSIS, MOVE_GROWL, MOVE_ATTRACT, MOVE_DREAM_EATER},
.itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [42] = {
+ [FALLARBOR_TENT_MON_LOMBRE] = {
.species = SPECIES_LOMBRE,
.moves = {MOVE_NATURE_POWER, MOVE_WATER_GUN, MOVE_RAIN_DANCE, MOVE_FLASH},
.itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
.evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
.nature = NATURE_BASHFUL
},
- [43] = {
+ [FALLARBOR_TENT_MON_NUZLEAF] = {
.species = SPECIES_NUZLEAF,
.moves = {MOVE_NATURE_POWER, MOVE_TORMENT, MOVE_SWAGGER, MOVE_REST},
.itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
.nature = NATURE_ADAMANT
},
- [44] = {
+ [FALLARBOR_TENT_MON_CACNEA] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_SANDSTORM, MOVE_NEEDLE_ARM, MOVE_TEETER_DANCE, MOVE_LEECH_SEED},
.itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h
index 54d49422a..cfd5dd994 100644
--- a/src/data/battle_frontier/trainer_hill.h
+++ b/src/data/battle_frontier/trainer_hill.h
@@ -1,16 +1,17 @@
#define TRAINER_HILL_OTID 0x10000000
-static const struct TrHillTag gUnknown_0862609C = {
- .unkField_0 = 4,
+static const struct TrHillTag sDataTagJPDefault = {
+ .numTrainers = NUM_TRAINER_HILL_TRAINERS_JP,
.unused1 = 1,
- .numFloors = 2,
+ .numFloors = NUM_TRAINER_HILL_FLOORS_JP,
.checksum = 0x0
};
-static const struct TrHillFloor gUnknown_0862609C_floors[] = {
+
+static const struct TrHillFloor sDataTagJPDefault_Floors[] = {
[0] = {
- .unk0 = 0,
- .unk1 = 0,
+ .trainerNum1 = 0,
+ .trainerNum2 = 0,
.trainers = {
[0] = {
.name = __("シゲノブ$$$$ "),
@@ -33,7 +34,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 100,
.spAttackEV = 0,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -57,7 +58,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 150,
.spDefenseEV = 120,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -81,7 +82,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 0,
.spDefenseEV = 200,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -122,7 +123,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 100,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -146,7 +147,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 100,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -170,7 +171,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 100,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -194,8 +195,8 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
}
},
[1] = {
- .unk0 = 0,
- .unk1 = 0,
+ .trainerNum1 = 0,
+ .trainerNum2 = 0,
.trainers = {
[0] = {
.name = __("シゲゾウ$$$$ "),
@@ -218,7 +219,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 120,
.spAttackEV = 150,
.spDefenseEV = 0,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -242,7 +243,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 100,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -266,7 +267,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 110,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -307,7 +308,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 0,
.spAttackEV = 110,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -331,7 +332,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 100,
.spAttackEV = 110,
.spDefenseEV = 100,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -355,7 +356,7 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
.speedEV = 80,
.spAttackEV = 80,
.spDefenseEV = 80,
- .otId = 0x10000000,
+ .otId = TRAINER_HILL_OTID,
.hpIV = 5,
.attackIV = 5,
.defenseIV = 5,
@@ -382,18 +383,18 @@ static const struct TrHillFloor gUnknown_0862609C_floors[] = {
static const struct TrHillTag sDataTagNormal =
{
- .unkField_0 = 8,
+ .numTrainers = NUM_TRAINER_HILL_TRAINERS,
.unused1 = 2,
- .numFloors = 4,
+ .numFloors = NUM_TRAINER_HILL_FLOORS,
.checksum = 0x00051E05
};
-static const struct TrHillFloor sDataTagNormal_floors[] =
+static const struct TrHillFloor sDataTagNormal_Floors[] =
{
[0] =
{
- .unk0 = 0x11,
- .unk1 = 0x12,
+ .trainerNum1 = 17,
+ .trainerNum2 = 18,
.trainers =
{
[0] =
@@ -694,8 +695,8 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
},
[1] =
{
- .unk0 = 0x13,
- .unk1 = 0x14,
+ .trainerNum1 = 19,
+ .trainerNum2 = 20,
.trainers =
{
[0] =
@@ -846,7 +847,7 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
[1] =
{
.name = _("JAYDEN"),
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.unused = 0,
.speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE},
.speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF},
@@ -999,8 +1000,8 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
},
[2] =
{
- .unk0 = 0x15,
- .unk1 = 0x16,
+ .trainerNum1 = 21,
+ .trainerNum2 = 22,
.trainers =
{
[0] =
@@ -1151,7 +1152,7 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
[1] =
{
.name = _("VERONICA"),
- .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
.unused = 0,
.speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE},
.speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF},
@@ -1303,8 +1304,8 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
},
[3] =
{
- .unk0 = 0x17,
- .unk1 = 0x18,
+ .trainerNum1 = 23,
+ .trainerNum2 = 24,
.trainers =
{
[0] =
@@ -1602,17 +1603,17 @@ static const struct TrHillFloor sDataTagNormal_floors[] =
static const struct TrHillTag sDataTagVariety =
{
- .unkField_0 = 8,
+ .numTrainers = NUM_TRAINER_HILL_TRAINERS,
.unused1 = 1,
- .numFloors = 4,
+ .numFloors = NUM_TRAINER_HILL_FLOORS,
.checksum = 0x00054C15
};
-static const struct TrHillFloor sDataTagVariety_floors[] = {
+static const struct TrHillFloor sDataTagVariety_Floors[] = {
[0] =
{
- .unk0 = 0x29,
- .unk1 = 0x2A,
+ .trainerNum1 = 41,
+ .trainerNum2 = 42,
.trainers =
{
[0] =
@@ -1904,8 +1905,8 @@ static const struct TrHillFloor sDataTagVariety_floors[] = {
},
[1] =
{
- .unk0 = 0x2B,
- .unk1 = 0x2C,
+ .trainerNum1 = 43,
+ .trainerNum2 = 44,
.trainers =
{
[0] =
@@ -2227,8 +2228,8 @@ static const struct TrHillFloor sDataTagVariety_floors[] = {
},
[2] =
{
- .unk0 = 0x2D,
- .unk1 = 0x2E,
+ .trainerNum1 = 45,
+ .trainerNum2 = 46,
.trainers =
{
[0] =
@@ -2531,8 +2532,8 @@ static const struct TrHillFloor sDataTagVariety_floors[] = {
},
[3] =
{
- .unk0 = 0x2F,
- .unk1 = 0x30,
+ .trainerNum1 = 47,
+ .trainerNum2 = 48,
.trainers =
{
[0] =
@@ -2828,17 +2829,17 @@ static const struct TrHillFloor sDataTagVariety_floors[] = {
static const struct TrHillTag sDataTagUnique =
{
- .unkField_0 = 8,
+ .numTrainers = NUM_TRAINER_HILL_TRAINERS,
.unused1 = 3,
- .numFloors = 4,
+ .numFloors = NUM_TRAINER_HILL_FLOORS,
.checksum = 0x000652F3
};
-static const struct TrHillFloor sDataTagUnique_floors[] = {
+static const struct TrHillFloor sDataTagUnique_Floors[] = {
[0] =
{
- .unk0 = 0x31,
- .unk1 = 0x32,
+ .trainerNum1 = 49,
+ .trainerNum2 = 50,
.trainers =
{
[0] =
@@ -3135,8 +3136,8 @@ static const struct TrHillFloor sDataTagUnique_floors[] = {
},
[1] =
{
- .unk0 = 0x33,
- .unk1 = 0x34,
+ .trainerNum1 = 51,
+ .trainerNum2 = 52,
.trainers =
{
[0] =
@@ -3439,8 +3440,8 @@ static const struct TrHillFloor sDataTagUnique_floors[] = {
},
[2] =
{
- .unk0 = 0x35,
- .unk1 = 0x36,
+ .trainerNum1 = 53,
+ .trainerNum2 = 54,
.trainers =
{
[0] =
@@ -3743,8 +3744,8 @@ static const struct TrHillFloor sDataTagUnique_floors[] = {
},
[3] =
{
- .unk0 = 0x38,
- .unk1 = 0x37,
+ .trainerNum1 = 56,
+ .trainerNum2 = 55,
.trainers =
{
[0] =
@@ -4039,17 +4040,17 @@ static const struct TrHillFloor sDataTagUnique_floors[] = {
static const struct TrHillTag sDataTagExpert =
{
- .unkField_0 = 8,
+ .numTrainers = NUM_TRAINER_HILL_TRAINERS,
.unused1 = 1,
- .numFloors = 4,
+ .numFloors = NUM_TRAINER_HILL_FLOORS,
.checksum = 0x00061F3F
};
-static const struct TrHillFloor sDataTagExpert_floors[] = {
+static const struct TrHillFloor sDataTagExpert_Floors[] = {
[0] =
{
- .unk0 = 0x39,
- .unk1 = 0x3A,
+ .trainerNum1 = 57,
+ .trainerNum2 = 58,
.trainers =
{
[0] =
@@ -4353,8 +4354,8 @@ static const struct TrHillFloor sDataTagExpert_floors[] = {
},
[1] =
{
- .unk0 = 0x3B,
- .unk1 = 0x3C,
+ .trainerNum1 = 59,
+ .trainerNum2 = 60,
.trainers =
{
[0] =
@@ -4658,8 +4659,8 @@ static const struct TrHillFloor sDataTagExpert_floors[] = {
},
[2] =
{
- .unk0 = 0x3D,
- .unk1 = 0x3E,
+ .trainerNum1 = 61,
+ .trainerNum2 = 62,
.trainers =
{
[0] =
@@ -4963,8 +4964,8 @@ static const struct TrHillFloor sDataTagExpert_floors[] = {
},
[3] =
{
- .unk0 = 0x3F,
- .unk1 = 0x40,
+ .trainerNum1 = 63,
+ .trainerNum2 = 64,
.trainers =
{
[0] =
diff --git a/src/data/contest_text_tables.h b/src/data/contest_text_tables.h
index 8375520d1..f893bc66a 100644
--- a/src/data/contest_text_tables.h
+++ b/src/data/contest_text_tables.h
@@ -1,414 +1,439 @@
#include "global.h"
-extern const u8 gContestEffect00hDescription[];
-extern const u8 gContestEffect01hDescription[];
-extern const u8 gContestEffect02hDescription[];
-extern const u8 gContestEffect03hDescription[];
-extern const u8 gContestEffect04hDescription[];
-extern const u8 gContestEffect05hDescription[];
-extern const u8 gContestEffect06hDescription[];
-extern const u8 gContestEffect07hDescription[];
-extern const u8 gContestEffect08hDescription[];
-extern const u8 gContestEffect09hDescription[];
-extern const u8 gContestEffect0AhDescription[];
-extern const u8 gContestEffect0BhDescription[];
-extern const u8 gContestEffect0ChDescription[];
-extern const u8 gContestEffect0DhDescription[];
-extern const u8 gContestEffect0EhDescription[];
-extern const u8 gContestEffect0FhDescription[];
-extern const u8 gContestEffect10hDescription[];
-extern const u8 gContestEffect11hDescription[];
-extern const u8 gContestEffect12hDescription[];
-extern const u8 gContestEffect13hDescription[];
-extern const u8 gContestEffect14hDescription[];
-extern const u8 gContestEffect15hDescription[];
-extern const u8 gContestEffect16hDescription[];
-extern const u8 gContestEffect17hDescription[];
-extern const u8 gContestEffect18hDescription[];
-extern const u8 gContestEffect19hDescription[];
-extern const u8 gContestEffect1AhDescription[];
-extern const u8 gContestEffect1BhDescription[];
-extern const u8 gContestEffect1ChDescription[];
-extern const u8 gContestEffect1DhDescription[];
-extern const u8 gContestEffect1EhDescription[];
-extern const u8 gContestEffect1FhDescription[];
-extern const u8 gContestEffect20hDescription[];
-extern const u8 gContestEffect21hDescription[];
-extern const u8 gContestEffect22hDescription[];
-extern const u8 gContestEffect23hDescription[];
-extern const u8 gContestEffect24hDescription[];
-extern const u8 gContestEffect25hDescription[];
-extern const u8 gContestEffect26hDescription[];
-extern const u8 gContestEffect27hDescription[];
-extern const u8 gContestEffect28hDescription[];
-extern const u8 gContestEffect29hDescription[];
-extern const u8 gContestEffect2AhDescription[];
-extern const u8 gContestEffect2BhDescription[];
-extern const u8 gContestEffect2ChDescription[];
-extern const u8 gContestEffect2DhDescription[];
-extern const u8 gContestEffect2EhDescription[];
-extern const u8 gContestEffect2FhDescription[];
+// gContestEffectDescriptionPointers
+extern const u8 gText_HighlyAppealingMove[];
+extern const u8 gText_UserMoreEasilyStartled[];
+extern const u8 gText_GreatAppealButNoMoreToEnd[];
+extern const u8 gText_UsedRepeatedlyWithoutBoringJudge[];
+extern const u8 gText_AvoidStartledByOthersOnce[];
+extern const u8 gText_AvoidStartledByOthers[];
+extern const u8 gText_AvoidStartledByOthersLittle[];
+extern const u8 gText_UserLessLikelyStartled[];
+extern const u8 gText_SlightlyStartleFrontMon[];
+extern const u8 gText_SlightlyStartleAppealed[];
+extern const u8 gText_StartleAppealedBeforeUser[];
+extern const u8 gText_StartleAllAppealed[];
+extern const u8 gText_BadlyStartleFrontMon[];
+extern const u8 gText_BadlyStartleAppealed[];
+extern const u8 gText_StartleAppealedBeforeUser2[];
+extern const u8 gText_StartleAllAppealed2[];
+extern const u8 gText_ShiftJudgesAttentionFromOthers[];
+extern const u8 gText_StartleMonHasJudgesAttention[];
+extern const u8 gText_JamOthersMissesTurn[];
+extern const u8 gText_StartleMonsMadeSameTypeAppeal[];
+extern const u8 gText_BadlyStartleCoolAppeals[];
+extern const u8 gText_BadlyStartleBeautyAppeals[];
+extern const u8 gText_BadlyStartleCuteAppeals[];
+extern const u8 gText_BadlyStartleSmartAppeals[];
+extern const u8 gText_BadlyStartleToughAppeals[];
+extern const u8 gText_MakeMonAfterUserNervous[];
+extern const u8 gText_MakeAllMonsAfterUserNervous[];
+extern const u8 gText_WorsenConditionOfThoseMadeAppeals[];
+extern const u8 gText_BadlyStartleMonsGoodCondition[];
+extern const u8 gText_AppealGreatIfPerformedFirst[];
+extern const u8 gText_AppealGreatIfPerformedLast[];
+extern const u8 gText_AppealAsGoodAsThoseBeforeIt[];
+extern const u8 gText_AppealAsGoodAsOneBeforeIt[];
+extern const u8 gText_AppealBetterLaterItsPerformed[];
+extern const u8 gText_AppealVariesDependingOnTiming[];
+extern const u8 gText_WorksWellIfSameTypeAsBefore[];
+extern const u8 gText_WorksWellIfDifferentTypeAsBefore[];
+extern const u8 gText_AffectedByAppealInFront[];
+extern const u8 gText_UpsConditionHelpsPreventNervousness[];
+extern const u8 gText_AppealWorksWellIfConditionGood[];
+extern const u8 gText_NextAppealMadeEarlier[];
+extern const u8 gText_NextAppealMadeLater[];
+extern const u8 gText_TurnOrderMoreEasilyScrambled[];
+extern const u8 gText_ScrambleOrderOfNextAppeals[];
+extern const u8 gText_AppealExcitesAudienceInAnyContest[];
+extern const u8 gText_BadlyStartlesMonsGoodAppeals[];
+extern const u8 gText_AppealBestMoreCrowdExcited[];
+extern const u8 gText_TemporarilyStopCrowdExcited[];
-extern const u8 gUnusedContestMoveName0[];
-extern const u8 gUnusedContestMoveName1[];
-extern const u8 gUnusedContestMoveName2[];
-extern const u8 gUnusedContestMoveName3[];
-extern const u8 gUnusedContestMoveName4[];
-extern const u8 gUnusedContestMoveName5[];
-extern const u8 gUnusedContestMoveName6[];
-extern const u8 gUnusedContestMoveName7[];
-extern const u8 gUnusedContestMoveName8[];
-extern const u8 gUnusedContestMoveName9[];
-extern const u8 gUnusedContestMoveName10[];
-extern const u8 gUnusedContestMoveName11[];
-extern const u8 gUnusedContestMoveName12[];
+// sUnusedComboMoveNameTexts
+extern const u8 gText_RainDance[];
+extern const u8 gText_Rage[];
+extern const u8 gText_FocusEnergy[];
+extern const u8 gText_Hypnosis[];
+extern const u8 gText_Softboiled[];
+extern const u8 gText_HornAttack[];
+extern const u8 gText_SwordsDance[];
+extern const u8 gText_Conversion[];
+extern const u8 gText_SunnyDay[];
+extern const u8 gText_Rest2[];
+extern const u8 gText_Vicegrip[];
+extern const u8 gText_DefenseCurl[];
+extern const u8 gText_LockOn[];
+// gContestMoveTypeTextPointers
extern const u8 gContestMoveTypeCoolText[];
extern const u8 gContestMoveTypeBeautyText[];
extern const u8 gContestMoveTypeCuteText[];
extern const u8 gContestMoveTypeSmartText[];
extern const u8 gContestMoveTypeToughText[];
-extern const u8 gText_0827D5C1[];
-extern const u8 gText_0827D5DC[];
-extern const u8 gText_0827D600[];
-extern const u8 gText_0827D612[];
-extern const u8 gText_0827D612[];
-extern const u8 gText_0827D62D[];
-extern const u8 gText_0827D654[];
-extern const u8 gText_0827D67E[];
-extern const u8 gText_0827D69C[];
-extern const u8 gText_0827D6BA[];
-extern const u8 gText_0827D6E5[];
-extern const u8 gText_0827D706[];
-extern const u8 gText_0827D71D[];
+// sUnusedAppealResultTexts
+extern const u8 gText_ButAppealWasJammed[];
+extern const u8 gText_FollowedAnotherMonsLead[];
+extern const u8 gText_ButItMessedUp[];
+extern const u8 gText_WentBetterThanUsual[];
+extern const u8 gText_JudgeLookedAwayForSomeReason[];
+extern const u8 gText_WorkedHardToBuildOnPastMistakes[];
+extern const u8 gText_CantMakeAnyMoreMoves[];
+extern const u8 gText_WorkedFrighteninglyWell[];
+extern const u8 gText_WorkedHardAsStandoutMon[];
+extern const u8 gText_JudgedLookedOnExpectantly[];
+extern const u8 gText_WorkedRatherWell[];
+extern const u8 gText_WorkedLittleBetterThanUsual[];
-extern const u8 gText_0827D743[];
-extern const u8 gText_0827D764[];
-extern const u8 gText_0827D785[];
-extern const u8 gText_0827D7A5[];
-extern const u8 gText_0827D7C8[];
-extern const u8 gText_0827D7E8[];
-extern const u8 gText_0827D831[];
-extern const u8 gText_0827D855[];
-extern const u8 gText_0827D830[];
-extern const u8 gText_0827D872[];
-extern const u8 gText_0827D88F[];
-extern const u8 gText_0827D8B5[];
-extern const u8 gText_0827D8E4[];
-extern const u8 gText_0827D8FE[];
-extern const u8 gText_0827D926[];
-extern const u8 gText_0827D947[];
-extern const u8 gText_0827D961[];
-extern const u8 gText_0827D986[];
-extern const u8 gText_0827D9B1[];
-extern const u8 gText_0827D9D9[];
-extern const u8 gText_0827DA03[];
-extern const u8 gText_0827DA31[];
-extern const u8 gText_0827DA5B[];
-extern const u8 gText_0827DA85[];
-extern const u8 gText_0827DAB2[];
-extern const u8 gText_0827DADA[];
-extern const u8 gText_0827DB03[];
-extern const u8 gText_0827D830[];
-extern const u8 gText_0827D830[];
-extern const u8 gText_0827D830[];
-extern const u8 gText_0827DB1F[];
-extern const u8 gText_0827DB4E[];
+// sRoundResultTexts
+extern const u8 gText_MonFailedToStandOutAtAll[];
+extern const u8 gText_MonDidntStandOutVeryMuch[];
+extern const u8 gText_MonCaughtALittleAttention[];
+extern const u8 gText_MonAttractedALotOfAttention[];
+extern const u8 gText_MonCommandedTotalAttention[];
+extern const u8 gText_MonHasntMadeItsAppeal[];
+extern const u8 gText_JudgesViewsOnMonHeldFirm[];
+extern const u8 gText_MonsXChangedPerceptions[];
+extern const u8 gText_EmptyContestString[];
+extern const u8 gText_MonsAppealEffectWoreOff[];
+extern const u8 gText_SpecialAppealsEffectWoreOff[];
+extern const u8 gText_EveryonesAppealsMadeToLookSame[];
+extern const u8 gText_CheapenedMonsAppeal[];
+extern const u8 gText_CheapenedMonsAppeal2[];
+extern const u8 gText_CheapenedAppealOfThoseAhead[];
+extern const u8 gText_CheapenedAppealOfThoseAhead2[];
+extern const u8 gText_StoleAttentionAwayFromMon[];
+extern const u8 gText_SeverelyCheapenedOtherAppeals[];
+extern const u8 gText_AnticipationSwelledForMonsAppealNext[];
+extern const u8 gText_CheapenedJudgesFavoriteAppeal[];
+extern const u8 gText_AppealsOfOthersCheapenedByHalf[];
+extern const u8 gText_StoodOutToMakeUpForBeingJammed[];
+extern const u8 gText_CantParticipateInAppealsAnyMore[];
+extern const u8 gText_TouchedJudgeForFantasticAppeal[];
+extern const u8 gText_AnticipationRoseForUpcomingAppeals[];
+extern const u8 gText_StoodOutAsMuchAsSpecialAppeals[];
+extern const u8 gText_StoodOutAsMuchAsMon[];
+extern const u8 gText_JammedAppealsMadeEvenLessNoticeable[];
+extern const u8 gText_EveryonesAppealsMadeSame[];
-extern const u8 gText_827DB75[];
-extern const u8 gText_827DBB0[];
-extern const u8 gText_827DBE0[];
-extern const u8 gText_827DC0F[];
-extern const u8 gText_827DC45[];
-extern const u8 gText_827DC7C[];
-extern const u8 gText_827DCB4[];
-extern const u8 gText_827DCE7[];
-extern const u8 gText_827DD12[];
-extern const u8 gText_827DD3D[];
-extern const u8 gText_827DD6F[];
-extern const u8 gText_827DD8E[];
-extern const u8 gText_827DDC7[];
-extern const u8 gText_827DDF2[];
-extern const u8 gText_827DE14[];
-extern const u8 gText_827DE44[];
-extern const u8 gText_827DE73[];
-extern const u8 gText_827DEA5[];
-extern const u8 gText_827DED9[];
-extern const u8 gText_827DF02[];
-extern const u8 gText_827DF3A[];
-extern const u8 gText_827DF63[];
-extern const u8 gText_827DF8C[];
-extern const u8 gText_827DFB8[];
-extern const u8 gText_827DFE2[];
-extern const u8 gText_827E00C[];
-extern const u8 gText_827E02F[];
-extern const u8 gText_827E05F[];
-extern const u8 gText_827E08B[];
-extern const u8 gText_827E0B5[];
-extern const u8 gText_827E0DD[];
-extern const u8 gText_827E107[];
-extern const u8 gText_827E143[];
-extern const u8 gText_827E17F[];
-extern const u8 gText_827E1BB[];
-extern const u8 gText_827E1F3[];
-extern const u8 gText_827E220[];
-extern const u8 gText_827E254[];
-extern const u8 gText_827E289[];
-extern const u8 gText_827E2C5[];
-extern const u8 gText_0827E2FE[];
-extern const u8 gText_0827E32E[];
-extern const u8 gText_0827E35B[];
-extern const u8 gText_0827E38D[];
-extern const u8 gText_0827E3C1[];
-extern const u8 gText_0827E3EB[];
-extern const u8 gText_0827E416[];
-extern const u8 gText_0827E448[];
-extern const u8 gText_0827E473[];
-extern const u8 gText_0827E4A6[];
-extern const u8 gText_0827E4D5[];
-extern const u8 gText_0827E504[];
-extern const u8 gText_0827E531[];
-extern const u8 gText_0827E55A[];
-extern const u8 gText_0827E5B2[];
-extern const u8 gText_0827E5D0[];
-extern const u8 gText_0827E606[];
-extern const u8 gText_0827E638[];
-extern const u8 gText_0827E658[];
-extern const u8 gText_0827E68B[];
-extern const u8 gText_0827E6C4[];
-extern const u8 gText_0827E7BA[];
+// sAppealResultTexts
+extern const u8 gText_BecameMoreConsciousOfOtherMons[];
+extern const u8 gText_MonCantMakeAnAppealAfterThis[];
+extern const u8 gText_SettledDownJustLittleBit[];
+extern const u8 gText_BecameObliviousToOtherMons[];
+extern const u8 gText_BecameLessAwareOfOtherMons[];
+extern const u8 gText_StoppedCaringAboutOtherMons[];
+extern const u8 gText_TriedToStartleOtherMons[];
+extern const u8 gText_TriedToDazzleOthers[];
+extern const u8 gText_JudgeLookedAwayFromMon[];
+extern const u8 gText_TriedToUnnerveNextMon[];
+extern const u8 gText_MonBecameNervous[];
+extern const u8 gText_AppealTriedToUnnerveWaitingMons[];
+extern const u8 gText_TauntedMonsDoingWell[];
+extern const u8 gText_MonRegainedItsForm[];
+extern const u8 gText_TriedToJamMonDoingWell[];
+extern const u8 gText_StandoutMonHustledEvenMore[];
+extern const u8 gText_LargelyUnnoticedMonWorkedHard[];
+extern const u8 gText_WorkedAsMuchAsMonBefore[];
+extern const u8 gText_WorkedAsMuchAsPrecedingMon[];
+extern const u8 gText_MonsAppealWasDud[];
+extern const u8 gText_MonsAppealDidNotGoWell[];
+extern const u8 gText_MonsAppealDidNotGoWell2[];
+extern const u8 gText_MonsAppealDidNotGoWell3[];
+extern const u8 gText_MonsAppealDidNotWorkVeryWell[];
+extern const u8 gText_MonsAppealWentSlightlyWell[];
+extern const u8 gText_MonsAppealWentSlightlyWell2[];
+extern const u8 gText_MonsAppealWentPrettyWell[];
+extern const u8 gText_MonsAppealWentPrettyWell2[];
+extern const u8 gText_MonsAppealWentVeryWell[];
+extern const u8 gText_MonsAppealWentExcellently[];
+extern const u8 gText_MonsAppealWentExcellently2[];
+extern const u8 gText_SameTypeAsOneBeforeGood[];
+extern const u8 gText_NotSameTypeAsOneBeforeGood[];
+extern const u8 gText_StoodOutMuchMoreThanMonBefore[];
+extern const u8 gText_DidntDoAsWellAsMonBefore[];
+extern const u8 gText_MonsConditionRoseAboveUsual[];
+extern const u8 gText_MonsHotStatusMadeGreatAppeal[];
+extern const u8 gText_MovedUpInLineForNextAppeal[];
+extern const u8 gText_MovedBackInLineForNextAppeal[];
+extern const u8 gText_ScrambledUpOrderForNextTurn[];
+extern const u8 gText_JudgeLookedAtMonExpectantly[];
+extern const u8 gText_AppealComboWentOverWell[];
+extern const u8 gText_AppealComboWentOverVeryWell[];
+extern const u8 gText_AppealComboWentOverExcellently[];
+extern const u8 gText_MonManagedToAvertGaze[];
+extern const u8 gText_MonManagedToAvoidSeeingIt[];
+extern const u8 gText_MonIsntFazedByThatSortOfThing[];
+extern const u8 gText_MonBecameALittleDistracted[];
+extern const u8 gText_TriedToStartleOtherPokemon[];
+extern const u8 gText_MonLookedDownOutOfDistraction[];
+extern const u8 gText_MonTurnedBackOutOfDistraction[];
+extern const u8 gText_MonCouldntHelpUtteringCry[];
+extern const u8 gText_MonCouldntHelpLeapingUp[];
+extern const u8 gText_MonTrippedOutOfDistraction[];
+extern const u8 gText_ButItMessedUp2[];
+extern const u8 gText_ButItFailedToMakeTargetNervous[];
+extern const u8 gText_ButItFailedToMakeAnyoneNervous[];
+extern const u8 gText_ButItWasIgnored[];
+extern const u8 gText_CouldntImproveItsCondition[];
+extern const u8 gText_BadConditionResultedInWeakAppeal[];
+extern const u8 gText_MonWasUnaffected[];
+extern const u8 gText_AttractedCrowdsAttention[];
+
+// sContestConditions
+extern const u8 gText_Contest_Coolness[];
+extern const u8 gText_Contest_Beauty[];
+extern const u8 gText_Contest_Cuteness[];
+extern const u8 gText_Contest_Smartness[];
+extern const u8 gText_Contest_Toughness[];
-extern const u8 gText_0827E85F[];
-extern const u8 gText_0827E868[];
-extern const u8 gText_0827E86F[];
-extern const u8 gText_0827E878[];
-extern const u8 gText_0827E882[];
+// sInvalidContestMoveNames
+extern const u8 gText_CoolMove[];
+extern const u8 gText_BeautyMove[];
+extern const u8 gText_CuteMove[];
+extern const u8 gText_SmartMove[];
+extern const u8 gText_ToughMove[];
+extern const u8 gText_3QuestionMarks[];
-extern const u8 gText_0827E894[];
-extern const u8 gText_0827E89E[];
-extern const u8 gText_0827E8AA[];
-extern const u8 gText_0827E8B4[];
-extern const u8 gText_0827E8BF[];
-extern const u8 gText_0827E8CA[];
+// Misc, used directly
+extern const u8 gText_MonAppealedWithMove[];
+extern const u8 gText_MonCantAppealNextTurn[];
+extern const u8 gText_RepeatedAppeal[];
+extern const u8 gText_MonsXDidntGoOverWell[];
+extern const u8 gText_MonsXWentOverGreat[];
+extern const u8 gText_MonsXGotTheCrowdGoing[];
+extern const u8 gText_CrowdContinuesToWatchMon[];
+extern const u8 gText_MonsMoveIsIgnored[];
+extern const u8 gText_MonWasTooNervousToMove[];
+extern const u8 gText_MonWasWatchingOthers[];
+extern const u8 gText_AllOutOfAppealTime[];
+extern const u8 gText_Contest_Shyness[];
+extern const u8 gText_Contest_Anxiety[];
+extern const u8 gText_Contest_Laziness[];
+extern const u8 gText_Contest_Hesitancy[];
+extern const u8 gText_Contest_Fear[];
+extern const u8 gText_AppealNumWhichMoveWillBePlayed[];
+extern const u8 gText_AppealNumButItCantParticipate[];
const u8 *const gContestEffectDescriptionPointers[] =
{
- gContestEffect00hDescription,
- gContestEffect01hDescription,
- gContestEffect02hDescription,
- gContestEffect03hDescription,
- gContestEffect04hDescription,
- gContestEffect05hDescription,
- gContestEffect06hDescription,
- gContestEffect07hDescription,
- gContestEffect08hDescription,
- gContestEffect09hDescription,
- gContestEffect0AhDescription,
- gContestEffect0BhDescription,
- gContestEffect0ChDescription,
- gContestEffect0DhDescription,
- gContestEffect0EhDescription,
- gContestEffect0FhDescription,
- gContestEffect10hDescription,
- gContestEffect11hDescription,
- gContestEffect12hDescription,
- gContestEffect13hDescription,
- gContestEffect14hDescription,
- gContestEffect15hDescription,
- gContestEffect16hDescription,
- gContestEffect17hDescription,
- gContestEffect18hDescription,
- gContestEffect19hDescription,
- gContestEffect1AhDescription,
- gContestEffect1BhDescription,
- gContestEffect1ChDescription,
- gContestEffect1DhDescription,
- gContestEffect1EhDescription,
- gContestEffect1FhDescription,
- gContestEffect20hDescription,
- gContestEffect21hDescription,
- gContestEffect22hDescription,
- gContestEffect23hDescription,
- gContestEffect24hDescription,
- gContestEffect25hDescription,
- gContestEffect26hDescription,
- gContestEffect27hDescription,
- gContestEffect28hDescription,
- gContestEffect29hDescription,
- gContestEffect2AhDescription,
- gContestEffect2BhDescription,
- gContestEffect2ChDescription,
- gContestEffect2DhDescription,
- gContestEffect2EhDescription,
- gContestEffect2FhDescription
+ [CONTEST_EFFECT_HIGHLY_APPEALING] = gText_HighlyAppealingMove,
+ [CONTEST_EFFECT_USER_MORE_EASILY_STARTLED] = gText_UserMoreEasilyStartled,
+ [CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES] = gText_GreatAppealButNoMoreToEnd,
+ [CONTEST_EFFECT_REPETITION_NOT_BORING] = gText_UsedRepeatedlyWithoutBoringJudge,
+ [CONTEST_EFFECT_AVOID_STARTLE_ONCE] = gText_AvoidStartledByOthersOnce,
+ [CONTEST_EFFECT_AVOID_STARTLE] = gText_AvoidStartledByOthers,
+ [CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY] = gText_AvoidStartledByOthersLittle,
+ [CONTEST_EFFECT_USER_LESS_EASILY_STARTLED] = gText_UserLessLikelyStartled,
+ [CONTEST_EFFECT_STARTLE_FRONT_MON] = gText_SlightlyStartleFrontMon,
+ [CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS] = gText_SlightlyStartleAppealed,
+ [CONTEST_EFFECT_STARTLE_PREV_MON] = gText_StartleAppealedBeforeUser,
+ [CONTEST_EFFECT_STARTLE_PREV_MONS] = gText_StartleAllAppealed,
+ [CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON] = gText_BadlyStartleFrontMon,
+ [CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS] = gText_BadlyStartleAppealed,
+ [CONTEST_EFFECT_STARTLE_PREV_MON_2] = gText_StartleAppealedBeforeUser2,
+ [CONTEST_EFFECT_STARTLE_PREV_MONS_2] = gText_StartleAllAppealed2,
+ [CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION] = gText_ShiftJudgesAttentionFromOthers,
+ [CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION] = gText_StartleMonHasJudgesAttention,
+ [CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN] = gText_JamOthersMissesTurn,
+ [CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL] = gText_StartleMonsMadeSameTypeAppeal,
+ [CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL] = gText_BadlyStartleCoolAppeals,
+ [CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL] = gText_BadlyStartleBeautyAppeals,
+ [CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL] = gText_BadlyStartleCuteAppeals,
+ [CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL] = gText_BadlyStartleSmartAppeals,
+ [CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL] = gText_BadlyStartleToughAppeals,
+ [CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS] = gText_MakeMonAfterUserNervous,
+ [CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS] = gText_MakeAllMonsAfterUserNervous,
+ [CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS] = gText_WorsenConditionOfThoseMadeAppeals,
+ [CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION] = gText_BadlyStartleMonsGoodCondition,
+ [CONTEST_EFFECT_BETTER_IF_FIRST] = gText_AppealGreatIfPerformedFirst,
+ [CONTEST_EFFECT_BETTER_IF_LAST] = gText_AppealGreatIfPerformedLast,
+ [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES] = gText_AppealAsGoodAsThoseBeforeIt,
+ [CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE] = gText_AppealAsGoodAsOneBeforeIt,
+ [CONTEST_EFFECT_BETTER_WHEN_LATER] = gText_AppealBetterLaterItsPerformed,
+ [CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING] = gText_AppealVariesDependingOnTiming,
+ [CONTEST_EFFECT_BETTER_IF_SAME_TYPE] = gText_WorksWellIfSameTypeAsBefore,
+ [CONTEST_EFFECT_BETTER_IF_DIFF_TYPE] = gText_WorksWellIfDifferentTypeAsBefore,
+ [CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL] = gText_AffectedByAppealInFront,
+ [CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS] = gText_UpsConditionHelpsPreventNervousness,
+ [CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION] = gText_AppealWorksWellIfConditionGood,
+ [CONTEST_EFFECT_NEXT_APPEAL_EARLIER] = gText_NextAppealMadeEarlier,
+ [CONTEST_EFFECT_NEXT_APPEAL_LATER] = gText_NextAppealMadeLater,
+ [CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER] = gText_TurnOrderMoreEasilyScrambled,
+ [CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER] = gText_ScrambleOrderOfNextAppeals,
+ [CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST] = gText_AppealExcitesAudienceInAnyContest,
+ [CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS] = gText_BadlyStartlesMonsGoodAppeals,
+ [CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED] = gText_AppealBestMoreCrowdExcited,
+ [CONTEST_EFFECT_DONT_EXCITE_AUDIENCE] = gText_TemporarilyStopCrowdExcited
};
// Unreferenced array of pointers to move names.
// All of the moves except Conversion are combo starters, so this may have
// been an early list of combo starters.
-const u8 *const gUnknown_8587D10[] =
+static const u8 *const sUnusedComboMoveNameTexts[] =
{
- gUnusedContestMoveName0,
- gUnusedContestMoveName0,
- gUnusedContestMoveName1,
- gUnusedContestMoveName2,
- gUnusedContestMoveName3,
- gUnusedContestMoveName4,
- gUnusedContestMoveName5,
- gUnusedContestMoveName6,
- gUnusedContestMoveName7,
- gUnusedContestMoveName8,
- gUnusedContestMoveName9,
- gUnusedContestMoveName10,
- gUnusedContestMoveName11,
- gUnusedContestMoveName12
+ gText_RainDance,
+ gText_RainDance,
+ gText_Rage,
+ gText_FocusEnergy,
+ gText_Hypnosis,
+ gText_Softboiled,
+ gText_HornAttack,
+ gText_SwordsDance,
+ gText_Conversion,
+ gText_SunnyDay,
+ gText_Rest2,
+ gText_Vicegrip,
+ gText_DefenseCurl,
+ gText_LockOn
};
const u8 *const gContestMoveTypeTextPointers[] =
{
- gContestMoveTypeCoolText,
- gContestMoveTypeBeautyText,
- gContestMoveTypeCuteText,
- gContestMoveTypeSmartText,
- gContestMoveTypeToughText
+ [CONTEST_CATEGORY_COOL] = gContestMoveTypeCoolText,
+ [CONTEST_CATEGORY_BEAUTY] = gContestMoveTypeBeautyText,
+ [CONTEST_CATEGORY_CUTE] = gContestMoveTypeCuteText,
+ [CONTEST_CATEGORY_SMART] = gContestMoveTypeSmartText,
+ [CONTEST_CATEGORY_TOUGH] = gContestMoveTypeToughText
};
-const u8 *const gUnknown_08587D5C[] =
+static const u8 *const sUnusedAppealResultTexts[] =
{
- gText_0827D5C1,
- gText_0827D5DC,
- gText_0827D600,
- gText_0827D612,
- gText_0827D612,
- gText_0827D62D,
- gText_0827D654,
- gText_0827D67E,
- gText_0827D69C,
- gText_0827D6BA,
- gText_0827D6E5,
- gText_0827D706,
- gText_0827D71D
+ gText_ButAppealWasJammed,
+ gText_FollowedAnotherMonsLead,
+ gText_ButItMessedUp,
+ gText_WentBetterThanUsual,
+ gText_WentBetterThanUsual,
+ gText_JudgeLookedAwayForSomeReason,
+ gText_WorkedHardToBuildOnPastMistakes,
+ gText_CantMakeAnyMoreMoves,
+ gText_WorkedFrighteninglyWell,
+ gText_WorkedHardAsStandoutMon,
+ gText_JudgedLookedOnExpectantly,
+ gText_WorkedRatherWell,
+ gText_WorkedLittleBetterThanUsual
};
-const u8 *const gUnknown_08587D90[] =
+// Takes the .attentionLevel of a contestant as an index. Only 0-5 are used
+static const u8 *const sRoundResultTexts[] =
{
- gText_0827D743,
- gText_0827D764,
- gText_0827D785,
- gText_0827D7A5,
- gText_0827D7C8,
- gText_0827D7E8,
- gText_0827D831,
- gText_0827D855,
- gText_0827D830,
- gText_0827D872,
- gText_0827D88F,
- gText_0827D8B5,
- gText_0827D8E4,
- gText_0827D8FE,
- gText_0827D926,
- gText_0827D947,
- gText_0827D961,
- gText_0827D986,
- gText_0827D9B1,
- gText_0827D9D9,
- gText_0827DA03,
- gText_0827DA31,
- gText_0827DA5B,
- gText_0827DA85,
- gText_0827DAB2,
- gText_0827DADA,
- gText_0827DB03,
- gText_0827D830,
- gText_0827D830,
- gText_0827D830,
- gText_0827DB1F,
- gText_0827DB4E
+ gText_MonFailedToStandOutAtAll,
+ gText_MonDidntStandOutVeryMuch,
+ gText_MonCaughtALittleAttention,
+ gText_MonAttractedALotOfAttention,
+ gText_MonCommandedTotalAttention,
+ gText_MonHasntMadeItsAppeal,
+ gText_JudgesViewsOnMonHeldFirm, // here below unused
+ gText_MonsXChangedPerceptions,
+ gText_EmptyContestString,
+ gText_MonsAppealEffectWoreOff,
+ gText_SpecialAppealsEffectWoreOff,
+ gText_EveryonesAppealsMadeToLookSame,
+ gText_CheapenedMonsAppeal,
+ gText_CheapenedAppealOfThoseAhead,
+ gText_StoleAttentionAwayFromMon,
+ gText_CheapenedMonsAppeal2,
+ gText_SeverelyCheapenedOtherAppeals,
+ gText_AnticipationSwelledForMonsAppealNext,
+ gText_CheapenedAppealOfThoseAhead2,
+ gText_CheapenedJudgesFavoriteAppeal,
+ gText_AppealsOfOthersCheapenedByHalf,
+ gText_StoodOutToMakeUpForBeingJammed,
+ gText_CantParticipateInAppealsAnyMore,
+ gText_TouchedJudgeForFantasticAppeal,
+ gText_AnticipationRoseForUpcomingAppeals,
+ gText_StoodOutAsMuchAsSpecialAppeals,
+ gText_StoodOutAsMuchAsMon,
+ gText_EmptyContestString,
+ gText_EmptyContestString,
+ gText_EmptyContestString,
+ gText_JammedAppealsMadeEvenLessNoticeable,
+ gText_EveryonesAppealsMadeSame
};
-const u8 *const gUnknown_08587E10[] =
+static const u8 *const sAppealResultTexts[] =
{
- gText_827DB75,
- gText_827DBB0,
- gText_827DBE0,
- gText_827DC0F,
- gText_827DC45,
- gText_827DC7C,
- gText_827DCB4,
- gText_827DCE7,
- gText_827DD12,
- gText_827DD3D,
- gText_827DD6F,
- gText_827DD8E,
- gText_827DDC7,
- gText_827DDF2,
- gText_827DE14,
- gText_827DE44,
- gText_827DE73,
- gText_827DEA5,
- gText_827DED9,
- gText_827DF02,
- gText_827DF3A,
- gText_827DF63,
- gText_827DF8C,
- gText_827DFB8,
- gText_827DFE2,
- gText_827E00C,
- gText_827E02F,
- gText_827E05F,
- gText_827E08B,
- gText_827E0B5,
- gText_827E0DD,
- gText_827E107,
- gText_827E143,
- gText_827E17F,
- gText_827E1BB,
- gText_827E1F3,
- gText_827E220,
- gText_827E254,
- gText_827E289,
- gText_827E2C5,
- gText_0827E2FE,
- gText_0827E32E,
- gText_0827E35B,
- gText_0827E38D,
- gText_0827E3C1,
- gText_0827E3EB,
- gText_0827E416,
- gText_0827E448,
- gText_0827E473,
- gText_0827E4A6,
- gText_0827E4D5,
- gText_0827E504,
- gText_0827E531,
- gText_0827E55A,
- gText_0827E5B2,
- gText_0827E5D0,
- gText_0827E606,
- gText_0827E638,
- gText_0827E658,
- gText_0827E68B,
- gText_0827E6C4,
- gText_0827E7BA
+ [CONTEST_STRING_MORE_CONSCIOUS] = gText_BecameMoreConsciousOfOtherMons,
+ [CONTEST_STRING_NO_APPEAL] = gText_MonCantMakeAnAppealAfterThis,
+ [CONTEST_STRING_SETTLE_DOWN] = gText_SettledDownJustLittleBit,
+ [CONTEST_STRING_OBLIVIOUS_TO_OTHERS] = gText_BecameObliviousToOtherMons,
+ [CONTEST_STRING_LESS_AWARE] = gText_BecameLessAwareOfOtherMons,
+ [CONTEST_STRING_STOPPED_CARING] = gText_StoppedCaringAboutOtherMons,
+ [CONTEST_STRING_STARTLE_ATTEMPT] = gText_TriedToStartleOtherMons,
+ [CONTEST_STRING_DAZZLE_ATTEMPT] = gText_TriedToDazzleOthers,
+ [CONTEST_STRING_JUDGE_LOOK_AWAY2] = gText_JudgeLookedAwayFromMon,
+ [CONTEST_STRING_UNNERVE_ATTEMPT] = gText_TriedToUnnerveNextMon,
+ [CONTEST_STRING_NERVOUS] = gText_MonBecameNervous,
+ [CONTEST_STRING_UNNERVE_WAITING] = gText_AppealTriedToUnnerveWaitingMons,
+ [CONTEST_STRING_TAUNT_WELL] = gText_TauntedMonsDoingWell,
+ [CONTEST_STRING_REGAINED_FORM] = gText_MonRegainedItsForm,
+ [CONTEST_STRING_JAM_WELL] = gText_TriedToJamMonDoingWell,
+ [CONTEST_STRING_HUSTLE_STANDOUT] = gText_StandoutMonHustledEvenMore,
+ [CONTEST_STRING_WORK_HARD_UNNOTICED] = gText_LargelyUnnoticedMonWorkedHard,
+ [CONTEST_STRING_WORK_BEFORE] = gText_WorkedAsMuchAsMonBefore,
+ [CONTEST_STRING_APPEAL_NOT_WELL] = gText_MonsAppealDidNotGoWell,
+ [CONTEST_STRING_WORK_PRECEDING] = gText_WorkedAsMuchAsPrecedingMon,
+ [CONTEST_STRING_APPEAL_NOT_WELL2] = gText_MonsAppealDidNotGoWell2,
+ [CONTEST_STRING_APPEAL_NOT_SHOWN_WELL] = gText_MonsAppealDidNotGoWell3,
+ [CONTEST_STRING_APPEAL_SLIGHTLY_WELL] = gText_MonsAppealWentSlightlyWell,
+ [CONTEST_STRING_APPEAL_PRETTY_WELL] = gText_MonsAppealWentPrettyWell,
+ [CONTEST_STRING_APPEAL_EXCELLENTLY] = gText_MonsAppealWentExcellently,
+ [CONTEST_STRING_APPEAL_DUD] = gText_MonsAppealWasDud,
+ [CONTEST_STRING_APPEAL_NOT_VERY_WELL] = gText_MonsAppealDidNotWorkVeryWell,
+ [CONTEST_STRING_APPEAL_SLIGHTLY_WELL2] = gText_MonsAppealWentSlightlyWell2,
+ [CONTEST_STRING_APPEAL_PRETTY_WELL2] = gText_MonsAppealWentPrettyWell2,
+ [CONTEST_STRING_APPEAL_VERY_WELL] = gText_MonsAppealWentVeryWell,
+ [CONTEST_STRING_APPEAL_EXCELLENTLY2] = gText_MonsAppealWentExcellently2,
+ [CONTEST_STRING_SAME_TYPE_GOOD] = gText_SameTypeAsOneBeforeGood,
+ [CONTEST_STRING_DIFF_TYPE_GOOD] = gText_NotSameTypeAsOneBeforeGood,
+ [CONTEST_STRING_STOOD_OUT_AS_MUCH] = gText_StoodOutMuchMoreThanMonBefore,
+ [CONTEST_STRING_NOT_AS_WELL] = gText_DidntDoAsWellAsMonBefore,
+ [CONTEST_STRING_CONDITION_ROSE] = gText_MonsConditionRoseAboveUsual,
+ [CONTEST_STRING_HOT_STATUS] = gText_MonsHotStatusMadeGreatAppeal,
+ [CONTEST_STRING_MOVE_UP_LINE] = gText_MovedUpInLineForNextAppeal,
+ [CONTEST_STRING_MOVE_BACK_LINE] = gText_MovedBackInLineForNextAppeal,
+ [CONTEST_STRING_SCRAMBLE_ORDER] = gText_ScrambledUpOrderForNextTurn,
+ [CONTEST_STRING_JUDGE_EXPECTANTLY2] = gText_JudgeLookedAtMonExpectantly,
+ [CONTEST_STRING_WENT_OVER_WELL] = gText_AppealComboWentOverWell,
+ [CONTEST_STRING_WENT_OVER_VERY_WELL] = gText_AppealComboWentOverVeryWell,
+ [CONTEST_STRING_APPEAL_COMBO_EXCELLENTLY] = gText_AppealComboWentOverExcellently,
+ [CONTEST_STRING_AVERT_GAZE] = gText_MonManagedToAvertGaze,
+ [CONTEST_STRING_AVOID_SEEING] = gText_MonManagedToAvoidSeeingIt,
+ [CONTEST_STRING_NOT_FAZED] = gText_MonIsntFazedByThatSortOfThing,
+ [CONTEST_STRING_LITTLE_DISTRACTED] = gText_MonBecameALittleDistracted,
+ [CONTEST_STRING_ATTEMPT_STARTLE] = gText_TriedToStartleOtherPokemon,
+ [CONTEST_STRING_LOOKED_DOWN] = gText_MonLookedDownOutOfDistraction,
+ [CONTEST_STRING_TURNED_BACK] = gText_MonTurnedBackOutOfDistraction,
+ [CONTEST_STRING_UTTER_CRY] = gText_MonCouldntHelpUtteringCry,
+ [CONTEST_STRING_LEAPT_UP] = gText_MonCouldntHelpLeapingUp,
+ [CONTEST_STRING_TRIPPED_OVER] = gText_MonTrippedOutOfDistraction,
+ [CONTEST_STRING_MESSED_UP2] = gText_ButItMessedUp2,
+ [CONTEST_STRING_FAILED_TARGET_NERVOUS] = gText_ButItFailedToMakeTargetNervous,
+ [CONTEST_STRING_FAILED_ANYONE_NERVOUS] = gText_ButItFailedToMakeAnyoneNervous,
+ [CONTEST_STRING_IGNORED] = gText_ButItWasIgnored,
+ [CONTEST_STRING_NO_CONDITION_IMPROVE] = gText_CouldntImproveItsCondition,
+ [CONTEST_STRING_BAD_CONDITION_WEAK_APPEAL] = gText_BadConditionResultedInWeakAppeal,
+ [CONTEST_STRING_UNAFFECTED] = gText_MonWasUnaffected,
+ [CONTEST_STRING_ATTRACTED_ATTENTION] = gText_AttractedCrowdsAttention
};
-const u8 *const gUnknown_08587F08[] =
+static const u8 *const sContestConditions[] =
{
- gText_0827E85F,
- gText_0827E868,
- gText_0827E86F,
- gText_0827E878,
- gText_0827E882
+ [CONTEST_CATEGORY_COOL] = gText_Contest_Coolness,
+ [CONTEST_CATEGORY_BEAUTY] = gText_Contest_Beauty,
+ [CONTEST_CATEGORY_CUTE] = gText_Contest_Cuteness,
+ [CONTEST_CATEGORY_SMART] = gText_Contest_Smartness,
+ [CONTEST_CATEGORY_TOUGH] = gText_Contest_Toughness
};
-const u8 *const gUnknown_08587F1C[] =
+static const u8 *const sInvalidContestMoveNames[] =
{
- gText_0827E894,
- gText_0827E89E,
- gText_0827E8AA,
- gText_0827E8B4,
- gText_0827E8BF,
- gText_0827E8CA
+ [CONTEST_CATEGORY_COOL] = gText_CoolMove,
+ [CONTEST_CATEGORY_BEAUTY] = gText_BeautyMove,
+ [CONTEST_CATEGORY_CUTE] = gText_CuteMove,
+ [CONTEST_CATEGORY_SMART] = gText_SmartMove,
+ [CONTEST_CATEGORY_TOUGH] = gText_ToughMove,
+ [CONTEST_CATEGORIES_COUNT] = gText_3QuestionMarks
};
diff --git a/src/data/decoration/icon.h b/src/data/decoration/icon.h
index 58d9cea7b..b29dab20f 100644
--- a/src/data/decoration/icon.h
+++ b/src/data/decoration/icon.h
@@ -1,123 +1,124 @@
-const u32 *const gUnknown_085A6BE8[][2] = {
- {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB7AA0, gUnknown_08DB7B34},
- {gUnknown_08DB7B5C, gUnknown_08DB7BEC},
- {gUnknown_08DB7C08, gUnknown_08DB7CE8},
- {gUnknown_08DB7D08, gUnknown_08DB7DCC},
- {gUnknown_08DB7DF4, gUnknown_08DB7EA0},
- {gUnknown_08DB7EC4, gUnknown_08DB7F60},
- {gUnknown_08DB7F7C, gUnknown_08DB8070},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB808C, gUnknown_08DB8138},
- {gUnknown_08DB8160, gUnknown_08DB8218},
- {gUnknown_08DB823C, gUnknown_08DB8300},
- {gUnknown_08DB8328, gUnknown_08DB8430},
- {gUnknown_08DB8458, gUnknown_08DB8528},
- {gUnknown_08DB854C, gUnknown_08DB862C},
- {gUnknown_08DB8654, gUnknown_08DB86C4},
- {gUnknown_08DB86E0, gUnknown_08DB8750},
- {gUnknown_08DB876C, gUnknown_08DB87DC},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB87F8, gUnknown_08DB88D8},
- {gUnknown_08DB8900, gUnknown_08DB89E0},
- {gUnknown_08DB8A08, gUnknown_08DB8A68},
- {gUnknown_08DB8A84, gUnknown_08DB8B40},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB8B68, gUnknown_08DB8C40},
- {gUnknown_08DB8C5C, gUnknown_08DB8CF4},
- {NULL, NULL},
- {gUnknown_08DB8D18, gUnknown_08DB8DB0},
- {gUnknown_08DB8DD4, gUnknown_08DB8E80},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB8EA0, gUnknown_08DB8F58},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB8F7C, gUnknown_08DB9038},
- {gUnknown_08DB9058, gUnknown_08DB9130},
- {gUnknown_08DB9154, gUnknown_08DB9218},
- {gUnknown_08DB9234, gUnknown_08DB92FC},
- {gUnknown_08DB931C, gUnknown_08DB93E8},
- {gUnknown_08DB940C, gUnknown_08DB94CC},
- {gUnknown_08DB94E8, gUnknown_08DB95AC},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {NULL, NULL},
- {gUnknown_08DB95D0, gUnknown_08DB96C4},
- {gUnknown_08DB96EC, gUnknown_08DB97F4},
- {gUnknown_08DB981C, gUnknown_08DB9908},
- {gUnknown_08DB9930, gUnknown_08DB9A54},
- {gUnknown_08DB9A7C, gUnknown_08DB9B7C},
- {gUnknown_08DB9BA4, gUnknown_08DB9CB0},
- {gUnknown_08DB9CD8, gUnknown_08DB9DAC},
- {gUnknown_08DB9F08, gUnknown_08DB9FFC},
- {gUnknown_08DB9DD4, gUnknown_08DB9EE4},
- {gUnknown_08DBA020, gUnknown_08DBA12C}
+const u32 *const gDecorIconTable[][2] =
+{
+ [DECOR_NONE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
+ [DECOR_SMALL_DESK] = {NULL, NULL},
+ [DECOR_POKEMON_DESK] = {NULL, NULL},
+ [DECOR_HEAVY_DESK] = {gDecorIcon_HeavyDesk, gDecorIconPalette_HeavyDesk},
+ [DECOR_RAGGED_DESK] = {gDecorIcon_RaggedDesk, gDecorIconPalette_RaggedDesk},
+ [DECOR_COMFORT_DESK] = {gDecorIcon_ComfortDesk, gDecorIconPalette_ComfortDesk},
+ [DECOR_PRETTY_DESK] = {gDecorIcon_PrettyDesk, gDecorIconPalette_PrettyDesk},
+ [DECOR_BRICK_DESK] = {gDecorIcon_BrickDesk, gDecorIconPalette_BrickDesk},
+ [DECOR_CAMP_DESK] = {gDecorIcon_CampDesk, gDecorIconPalette_CampDesk},
+ [DECOR_HARD_DESK] = {gDecorIcon_HardDesk, gDecorIconPalette_HardDesk},
+ [DECOR_SMALL_CHAIR] = {NULL, NULL},
+ [DECOR_POKEMON_CHAIR] = {NULL, NULL},
+ [DECOR_HEAVY_CHAIR] = {NULL, NULL},
+ [DECOR_PRETTY_CHAIR] = {NULL, NULL},
+ [DECOR_COMFORT_CHAIR] = {NULL, NULL},
+ [DECOR_RAGGED_CHAIR] = {NULL, NULL},
+ [DECOR_BRICK_CHAIR] = {NULL, NULL},
+ [DECOR_CAMP_CHAIR] = {NULL, NULL},
+ [DECOR_HARD_CHAIR] = {NULL, NULL},
+ [DECOR_RED_PLANT] = {gDecorIcon_RedPlant, gDecorIconPalette_RedPlant},
+ [DECOR_TROPICAL_PLANT] = {gDecorIcon_TropicalPlant, gDecorIconPalette_TropicalPlant},
+ [DECOR_PRETTY_FLOWERS] = {gDecorIcon_PrettyFlowers, gDecorIconPalette_PrettyFlowers},
+ [DECOR_COLORFUL_PLANT] = {gDecorIcon_ColorfulPlant, gDecorIconPalette_ColorfulPlant},
+ [DECOR_BIG_PLANT] = {gDecorIcon_BigPlant, gDecorIconPalette_BigPlant},
+ [DECOR_GORGEOUS_PLANT] = {gDecorIcon_GorgeousPlant, gDecorIconPalette_GorgeousPlant},
+ [DECOR_RED_BRICK] = {gDecorIcon_RedBrick, gDecorIconPalette_RedBrick},
+ [DECOR_YELLOW_BRICK] = {gDecorIcon_YellowBrick, gDecorIconPalette_YellowBrick},
+ [DECOR_BLUE_BRICK] = {gDecorIcon_BlueBrick, gDecorIconPalette_BlueBrick},
+ [DECOR_RED_BALLOON] = {NULL, NULL},
+ [DECOR_BLUE_BALLOON] = {NULL, NULL},
+ [DECOR_YELLOW_BALLOON] = {NULL, NULL},
+ [DECOR_RED_TENT] = {gDecorIcon_RedTent, gDecorIconPalette_RedTent},
+ [DECOR_BLUE_TENT] = {gDecorIcon_BlueTent, gDecorIconPalette_BlueTent},
+ [DECOR_SOLID_BOARD] = {gDecorIcon_SolidBoard, gDecorIconPalette_SolidBoard},
+ [DECOR_SLIDE] = {gDecorIcon_Slide, gDecorIconPalette_Slide},
+ [DECOR_FENCE_LENGTH] = {NULL, NULL},
+ [DECOR_FENCE_WIDTH] = {NULL, NULL},
+ [DECOR_TIRE] = {gDecorIcon_Tire, gDecorIconPalette_Tire},
+ [DECOR_STAND] = {gDecorIcon_Stand, gDecorIconPalette_Stand},
+ [DECOR_MUD_BALL] = {NULL, NULL},
+ [DECOR_BREAKABLE_DOOR] = {gDecorIcon_BreakableDoor, gDecorIconPalette_BreakableDoor},
+ [DECOR_SAND_ORNAMENT] = {gDecorIcon_SandOrnament, gDecorIconPalette_SandOrnament},
+ [DECOR_SILVER_SHIELD] = {NULL, NULL},
+ [DECOR_GOLD_SHIELD] = {NULL, NULL},
+ [DECOR_GLASS_ORNAMENT] = {gDecorIcon_GlassOrnament, gDecorIconPalette_GlassOrnament},
+ [DECOR_TV] = {NULL, NULL},
+ [DECOR_ROUND_TV] = {NULL, NULL},
+ [DECOR_CUTE_TV] = {NULL, NULL},
+ [DECOR_GLITTER_MAT] = {NULL, NULL},
+ [DECOR_JUMP_MAT] = {NULL, NULL},
+ [DECOR_SPIN_MAT] = {NULL, NULL},
+ [DECOR_C_LOW_NOTE_MAT] = {NULL, NULL},
+ [DECOR_D_NOTE_MAT] = {NULL, NULL},
+ [DECOR_E_NOTE_MAT] = {NULL, NULL},
+ [DECOR_F_NOTE_MAT] = {NULL, NULL},
+ [DECOR_G_NOTE_MAT] = {NULL, NULL},
+ [DECOR_A_NOTE_MAT] = {NULL, NULL},
+ [DECOR_B_NOTE_MAT] = {NULL, NULL},
+ [DECOR_C_HIGH_NOTE_MAT] = {NULL, NULL},
+ [DECOR_SURF_MAT] = {gDecorIcon_SurfMat, gDecorIconPalette_SurfMat},
+ [DECOR_THUNDER_MAT] = {gDecorIcon_ThunderMat, gDecorIconPalette_ThunderMat},
+ [DECOR_FIRE_BLAST_MAT] = {gDecorIcon_FireBlastMat, gDecorIconPalette_FireBlastMat},
+ [DECOR_POWDER_SNOW_MAT] = {gDecorIcon_PowderSnowMat, gDecorIconPalette_PowderSnowMat},
+ [DECOR_ATTRACT_MAT] = {gDecorIcon_AttractMat, gDecorIconPalette_AttractMat},
+ [DECOR_FISSURE_MAT] = {gDecorIcon_FissureMat, gDecorIconPalette_FissureMat},
+ [DECOR_SPIKES_MAT] = {gDecorIcon_SpikesMat, gDecorIconPalette_SpikesMat},
+ [DECOR_BALL_POSTER] = {NULL, NULL},
+ [DECOR_GREEN_POSTER] = {NULL, NULL},
+ [DECOR_RED_POSTER] = {NULL, NULL},
+ [DECOR_BLUE_POSTER] = {NULL, NULL},
+ [DECOR_CUTE_POSTER] = {NULL, NULL},
+ [DECOR_PIKA_POSTER] = {NULL, NULL},
+ [DECOR_LONG_POSTER] = {NULL, NULL},
+ [DECOR_SEA_POSTER] = {NULL, NULL},
+ [DECOR_SKY_POSTER] = {NULL, NULL},
+ [DECOR_KISS_POSTER] = {NULL, NULL},
+ [DECOR_PICHU_DOLL] = {NULL, NULL},
+ [DECOR_PIKACHU_DOLL] = {NULL, NULL},
+ [DECOR_MARILL_DOLL] = {NULL, NULL},
+ [DECOR_TOGEPI_DOLL] = {NULL, NULL},
+ [DECOR_CYNDAQUIL_DOLL] = {NULL, NULL},
+ [DECOR_CHIKORITA_DOLL] = {NULL, NULL},
+ [DECOR_TOTODILE_DOLL] = {NULL, NULL},
+ [DECOR_JIGGLYPUFF_DOLL] = {NULL, NULL},
+ [DECOR_MEOWTH_DOLL] = {NULL, NULL},
+ [DECOR_CLEFAIRY_DOLL] = {NULL, NULL},
+ [DECOR_DITTO_DOLL] = {NULL, NULL},
+ [DECOR_SMOOCHUM_DOLL] = {NULL, NULL},
+ [DECOR_TREECKO_DOLL] = {NULL, NULL},
+ [DECOR_TORCHIC_DOLL] = {NULL, NULL},
+ [DECOR_MUDKIP_DOLL] = {NULL, NULL},
+ [DECOR_DUSKULL_DOLL] = {NULL, NULL},
+ [DECOR_WYNAUT_DOLL] = {NULL, NULL},
+ [DECOR_BALTOY_DOLL] = {NULL, NULL},
+ [DECOR_KECLEON_DOLL] = {NULL, NULL},
+ [DECOR_AZURILL_DOLL] = {NULL, NULL},
+ [DECOR_SKITTY_DOLL] = {NULL, NULL},
+ [DECOR_SWABLU_DOLL] = {NULL, NULL},
+ [DECOR_GULPIN_DOLL] = {NULL, NULL},
+ [DECOR_LOTAD_DOLL] = {NULL, NULL},
+ [DECOR_SEEDOT_DOLL] = {NULL, NULL},
+ [DECOR_PIKA_CUSHION] = {NULL, NULL},
+ [DECOR_ROUND_CUSHION] = {NULL, NULL},
+ [DECOR_KISS_CUSHION] = {NULL, NULL},
+ [DECOR_ZIGZAG_CUSHION] = {NULL, NULL},
+ [DECOR_SPIN_CUSHION] = {NULL, NULL},
+ [DECOR_DIAMOND_CUSHION] = {NULL, NULL},
+ [DECOR_BALL_CUSHION] = {NULL, NULL},
+ [DECOR_GRASS_CUSHION] = {NULL, NULL},
+ [DECOR_FIRE_CUSHION] = {NULL, NULL},
+ [DECOR_WATER_CUSHION] = {NULL, NULL},
+ [DECOR_SNORLAX_DOLL] = {gDecorIcon_SnorlaxDoll, gDecorIconPalette_SnorlaxDoll},
+ [DECOR_RHYDON_DOLL] = {gDecorIcon_RhydonDoll, gDecorIconPalette_RhydonDoll},
+ [DECOR_LAPRAS_DOLL] = {gDecorIcon_LaprasDoll, gDecorIconPalette_LaprasDoll},
+ [DECOR_VENUSAUR_DOLL] = {gDecorIcon_VenusaurDoll, gDecorIconPalette_VenusaurDoll},
+ [DECOR_CHARIZARD_DOLL] = {gDecorIcon_CharizardDoll, gDecorIconPalette_CharizardDoll},
+ [DECOR_BLASTOISE_DOLL] = {gDecorIcon_BlastoiseDoll, gDecorIconPalette_BlastoiseDoll},
+ [DECOR_WAILMER_DOLL] = {gDecorIcon_WailmerDoll, gDecorIconPalette_WailmerDoll},
+ [DECOR_REGIROCK_DOLL] = {gDecorIcon_RegirockDoll, gDecorIconPalette_RegirockDoll},
+ [DECOR_REGICE_DOLL] = {gDecorIcon_RegiceDoll, gDecorIconPalette_RegiceDoll},
+ [DECOR_REGISTEEL_DOLL] = {gDecorIcon_RegisteelDoll, gDecorIconPalette_RegisteelDoll}
};
diff --git a/src/data/field_event_obj/event_object_graphics.h b/src/data/field_event_obj/event_object_graphics.h
index f7f1f33ba..1702392ca 100755
--- a/src/data/field_event_obj/event_object_graphics.h
+++ b/src/data/field_event_obj/event_object_graphics.h
@@ -326,7 +326,7 @@ const u32 gFieldEffectObjectPic_SandDisguisePlaceholder[] = INCBIN_U32("graphics
const u32 gFieldEffectObjectPic_HotSpringsWater[] = INCBIN_U32("graphics/event_objects/pics/effects/hot_springs_water.4bpp");
const u16 gFieldEffectObjectPalette2[] = INCBIN_U16("graphics/event_objects/palettes/field_effect_object_palette_02.gbapal");
const u32 gFieldEffectObjectPic_JumpOutOfAsh[] = INCBIN_U32("graphics/event_objects/pics/effects/jump_out_of_ash.4bpp");
-const u32 gFieldEffectObjectPic_Unknown33[] = INCBIN_U32("graphics/event_objects/pics/effects/unknown_33.4bpp");
+const u32 gFieldEffectObjectPic_LavaridgeGymWarp[] = INCBIN_U32("graphics/event_objects/pics/effects/lavaridge_gym_warp.4bpp");
const u32 gFieldEffectObjectPic_Bubbles[] = INCBIN_U32("graphics/event_objects/pics/effects/bubbles.4bpp");
const u32 gFieldEffectObjectPic_Unknown35[] = INCBIN_U32("graphics/event_objects/pics/effects/unknown_35.4bpp");
const u16 gFieldEffectObjectPalette3[] = INCBIN_U16("graphics/event_objects/palettes/field_effect_object_palette_03.gbapal");
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/event_object_subsprites.h b/src/data/field_event_obj/event_object_subsprites.h
index 5da262731..0b4a80f72 100755
--- a/src/data/field_event_obj/event_object_subsprites.h
+++ b/src/data/field_event_obj/event_object_subsprites.h
@@ -1,24 +1,80 @@
const struct Subsprite gEventObjectSpriteOamTable_16x16_0[] = {
- { -8, -8, 0, 1, 0, 2}
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_16x16_1[] = {
- { -8, -8, 0, 1, 0, 1}
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 1
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_16x16_2[] = {
- { -8, -8, 1, 0, 0, 2},
- { -8, 0, 1, 0, 2, 3}
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 2,
+ .priority = 3
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_16x16_3[] = {
- { -8, -8, 0, 1, 0, 2},
- { -8, -8, 0, 1, 0, 3}
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 3
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_16x16_4[] = {
- { -8, -8, 0, 1, 0, 1},
- { -8, -8, 0, 1, 0, 3}
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 3
+ }
};
const struct SubspriteTable gEventObjectSpriteOamTables_16x16[] = {
@@ -31,27 +87,90 @@ const struct SubspriteTable gEventObjectSpriteOamTables_16x16[] = {
};
const struct Subsprite gEventObjectSpriteOamTable_16x32_0[] = {
- { -8, -16, 2, 2, 0, 2}
+ {
+ .x = -8,
+ .y = -16,
+ .shape = SPRITE_SHAPE(16x32),
+ .size = SPRITE_SIZE(16x32),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_16x32_1[] = {
- { -8, -16, 2, 2, 0, 1}
+ {
+ .x = -8,
+ .y = -16,
+ .shape = SPRITE_SHAPE(16x32),
+ .size = SPRITE_SIZE(16x32),
+ .tileOffset = 0,
+ .priority = 1
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_16x32_2[] = {
- { -8, -16, 0, 1, 0, 2},
- { -8, 0, 1, 0, 4, 2},
- { -8, 8, 1, 0, 6, 3}
+ {
+ .x = -8,
+ .y = -16,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = -8,
+ .y = 8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 6,
+ .priority = 3
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_16x32_3[] = {
- { -8, -16, 0, 1, 0, 2},
- { -8, 0, 0, 1, 4, 3}
+ {
+ .x = -8,
+ .y = -16,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 4,
+ .priority = 3
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_16x32_4[] = {
- { -8, -16, 0, 1, 0, 1},
- { -8, 0, 0, 1, 4, 3}
+ {
+ .x = -8,
+ .y = -16,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .tileOffset = 4,
+ .priority = 3
+ }
};
const struct SubspriteTable gEventObjectSpriteOamTables_16x32[] = {
@@ -64,27 +183,90 @@ const struct SubspriteTable gEventObjectSpriteOamTables_16x32[] = {
};
const struct Subsprite gEventObjectSpriteOamTable_32x32_0[] = {
- {-16, -16, 0, 2, 0, 2}
+ {
+ .x = -16,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_32x32_1[] = {
- {-16, -16, 0, 2, 0, 1}
+ {
+ .x = -16,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x32),
+ .size = SPRITE_SIZE(32x32),
+ .tileOffset = 0,
+ .priority = 1
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_32x32_2[] = {
- {-16, -16, 1, 2, 0, 2},
- {-16, 0, 1, 1, 8, 2},
- {-16, 8, 1, 1, 12, 3}
+ {
+ .x = -16,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 3
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_32x32_3[] = {
- {-16, -16, 1, 2, 0, 2},
- {-16, 0, 1, 2, 8, 3}
+ {
+ .x = -16,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .tileOffset = 8,
+ .priority = 3
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_32x32_4[] = {
- {-16, -16, 1, 2, 0, 1},
- {-16, 0, 1, 2, 8, 3}
+ {
+ .x = -16,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
+ .tileOffset = 8,
+ .priority = 3
+ }
};
const struct SubspriteTable gEventObjectSpriteOamTables_32x32[] = {
@@ -97,18 +279,102 @@ const struct SubspriteTable gEventObjectSpriteOamTables_32x32[] = {
};
const struct Subsprite gEventObjectSpriteOamTable_Truck_0[] = {
- {-24, -24, 1, 1, 0, 2},
- { 8, -24, 1, 0, 4, 2},
- {-24, -16, 1, 1, 6, 2},
- { 8, -16, 1, 0, 10, 2},
- {-24, -8, 1, 1, 12, 2},
- { 8, -8, 1, 0, 16, 2},
- {-24, 0, 1, 1, 18, 2},
- { 8, 0, 1, 0, 22, 2},
- {-24, 8, 1, 1, 24, 2},
- { 8, 8, 1, 0, 28, 2},
- {-24, 16, 1, 1, 30, 2},
- { 8, 16, 1, 0, 34, 2}
+ {
+ .x = -24,
+ .y = -24,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -24,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 6,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -16,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 10,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 16,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 18,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 22,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 24,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 28,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 30,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 16,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 34,
+ .priority = 2
+ }
};
const struct SubspriteTable gEventObjectSpriteOamTables_Truck[] = {
@@ -121,19 +387,47 @@ const struct SubspriteTable gEventObjectSpriteOamTables_Truck[] = {
};
const struct Subsprite gEventObjectSpriteOamTable_Unused_0[] = {
- {-32, -16, 1, 3, 0, 2}
+ {
+ .x = -32,
+ .y = -16,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_Unused_1[] = {
- {-32, -16, 1, 3, 0, 1}
+ {
+ .x = -32,
+ .y = -16,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 1
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_Unused_2[] = {
- {-32, -16, 1, 3, 0, 2}
+ {
+ .x = -32,
+ .y = -16,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_Unused_3[] = {
- {-32, -16, 1, 3, 0, 2}
+ {
+ .x = -32,
+ .y = -16,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct SubspriteTable gEventObjectSpriteOamTables_Unused[] = {
@@ -146,19 +440,47 @@ const struct SubspriteTable gEventObjectSpriteOamTables_Unused[] = {
};
const struct Subsprite gEventObjectSpriteOamTable_64x64_0[] = {
- {-32, -32, 0, 3, 0, 2}
+ {
+ .x = -32,
+ .y = -32,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_64x64_1[] = {
- {-32, -32, 0, 3, 0, 1}
+ {
+ .x = -32,
+ .y = -32,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 1
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_64x64_2[] = {
- {-32, -32, 0, 3, 0, 2}
+ {
+ .x = -32,
+ .y = -32,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_64x64_3[] = {
- {-32, -32, 0, 3, 0, 2}
+ {
+ .x = -32,
+ .y = -32,
+ .shape = SPRITE_SHAPE(64x64),
+ .size = SPRITE_SIZE(64x64),
+ .tileOffset = 0,
+ .priority = 2
+ }
};
const struct SubspriteTable gEventObjectSpriteOamTables_64x64[] = {
@@ -171,75 +493,495 @@ const struct SubspriteTable gEventObjectSpriteOamTables_64x64[] = {
};
const struct Subsprite gEventObjectSpriteOamTable_SSTidal_0[] = {
- {-48, -20, 1, 1, 0, 2},
- {-16, -20, 1, 1, 4, 2},
- { 16, -20, 1, 1, 8, 2},
- {-48, -12, 1, 1, 12, 2},
- {-16, -12, 1, 1, 16, 2},
- { 16, -12, 1, 1, 20, 2},
- {-48, -4, 1, 1, 24, 2},
- {-16, -4, 1, 1, 28, 2},
- { 16, -4, 1, 1, 32, 2},
- {-48, 4, 1, 1, 36, 2},
- {-16, 4, 1, 1, 40, 2},
- { 16, 4, 1, 1, 44, 2},
- {-48, 12, 1, 1, 48, 2},
- {-16, 12, 1, 1, 52, 2},
- { 16, 12, 1, 1, 56, 2}
+ {
+ .x = -48,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 16,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 20,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 24,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 28,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 32,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 36,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 40,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 44,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 48,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 52,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 56,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_SSTidal_1[] = {
- {-48, -20, 1, 1, 0, 1},
- {-16, -20, 1, 1, 4, 1},
- { 16, -20, 1, 1, 8, 1},
- {-48, -12, 1, 1, 12, 1},
- {-16, -12, 1, 1, 16, 1},
- { 16, -12, 1, 1, 20, 1},
- {-48, -4, 1, 1, 24, 1},
- {-16, -4, 1, 1, 28, 1},
- { 16, -4, 1, 1, 32, 1},
- {-48, 4, 1, 1, 36, 1},
- {-16, 4, 1, 1, 40, 1},
- { 16, 4, 1, 1, 44, 1},
- {-48, 12, 1, 1, 48, 1},
- {-16, 12, 1, 1, 52, 1},
- { 16, 12, 1, 1, 56, 1}
+ {
+ .x = -48,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 16,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 20,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 24,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 28,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 32,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 36,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 40,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 44,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 48,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 52,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 56,
+ .priority = 1
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_SSTidal_2[] = {
- {-48, -20, 1, 1, 0, 2},
- {-16, -20, 1, 1, 4, 2},
- { 16, -20, 1, 1, 8, 2},
- {-48, -12, 1, 1, 12, 2},
- {-16, -12, 1, 1, 16, 2},
- { 16, -12, 1, 1, 20, 2},
- {-48, -4, 1, 1, 24, 2},
- {-16, -4, 1, 1, 28, 2},
- { 16, -4, 1, 1, 32, 2},
- {-48, 4, 1, 1, 36, 2},
- {-16, 4, 1, 1, 40, 2},
- { 16, 4, 1, 1, 44, 2},
- {-48, 12, 1, 1, 48, 2},
- {-16, 12, 1, 1, 52, 2},
- { 16, 12, 1, 1, 56, 2}
+ {
+ .x = -48,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 16,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 20,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 24,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 28,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 32,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 36,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 40,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 44,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 48,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 52,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 56,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_SSTidal_3[] = {
- {-48, -20, 1, 1, 0, 1},
- {-16, -20, 1, 1, 4, 1},
- { 16, -20, 1, 1, 8, 1},
- {-48, -12, 1, 1, 12, 1},
- {-16, -12, 1, 1, 16, 1},
- { 16, -12, 1, 1, 20, 1},
- {-48, -4, 1, 1, 24, 2},
- {-16, -4, 1, 1, 28, 2},
- { 16, -4, 1, 1, 32, 2},
- {-48, 4, 1, 1, 36, 2},
- {-16, 4, 1, 1, 40, 2},
- { 16, 4, 1, 1, 44, 2},
- {-48, 12, 1, 1, 48, 2},
- {-16, 12, 1, 1, 52, 2},
- { 16, 12, 1, 1, 56, 2}
+ {
+ .x = -48,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 16,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 20,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 24,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 28,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 32,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 36,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 40,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 44,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 48,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 52,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 56,
+ .priority = 2
+ }
};
const struct SubspriteTable gEventObjectSpriteOamTables_SSTidal[] = {
@@ -252,79 +994,527 @@ const struct SubspriteTable gEventObjectSpriteOamTables_SSTidal[] = {
};
const struct Subsprite gEventObjectSpriteOamTable_SubmarineShadow_0[] = {
- {-48, -20, 1, 1, 0, 2},
- {-16, -20, 1, 1, 4, 2},
- { 16, -20, 1, 0, 8, 2},
- { 32, -20, 0, 0, 10, 2},
- {-48, -12, 1, 1, 11, 2},
- {-16, -12, 1, 1, 15, 2},
- { 16, -12, 1, 0, 19, 2},
- { 32, -12, 0, 0, 21, 2},
- {-48, -4, 1, 1, 22, 2},
- {-16, -4, 1, 1, 26, 2},
- { 16, -4, 1, 0, 30, 2},
- { 32, -4, 0, 0, 32, 2},
- {-48, 4, 1, 1, 33, 2},
- {-16, 4, 1, 1, 37, 2},
- { 16, 4, 1, 0, 41, 2},
- { 32, 4, 0, 0, 43, 2}
+ {
+ .x = -48,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = -20,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 10,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 11,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 15,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 19,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 21,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 22,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 26,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 30,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 32,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 33,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 37,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 41,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 43,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_SubmarineShadow_1[] = {
- {-48, -20, 1, 1, 0, 1},
- {-16, -20, 1, 1, 4, 1},
- { 16, -20, 1, 0, 8, 1},
- { 32, -20, 0, 0, 10, 1},
- {-48, -12, 1, 1, 11, 1},
- {-16, -12, 1, 1, 15, 1},
- { 16, -12, 1, 0, 19, 1},
- { 32, -12, 0, 0, 21, 1},
- {-48, -4, 1, 1, 22, 1},
- {-16, -4, 1, 1, 26, 1},
- { 16, -4, 1, 0, 30, 1},
- { 32, -4, 0, 0, 32, 1},
- {-48, 4, 1, 1, 33, 1},
- {-16, 4, 1, 1, 37, 1},
- { 16, 4, 1, 0, 41, 1},
- { 32, 4, 0, 0, 43, 1}
+ {
+ .x = -48,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = 32,
+ .y = -20,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 10,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 11,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 15,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 19,
+ .priority = 1
+ },
+ {
+ .x = 32,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 21,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 22,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 26,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 30,
+ .priority = 1
+ },
+ {
+ .x = 32,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 32,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 33,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 37,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 41,
+ .priority = 1
+ },
+ {
+ .x = 32,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 43,
+ .priority = 1
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_SubmarineShadow_2[] = {
- {-48, -20, 1, 1, 0, 2},
- {-16, -20, 1, 1, 4, 2},
- { 16, -20, 1, 0, 8, 2},
- { 32, -20, 0, 0, 10, 2},
- {-48, -12, 1, 1, 11, 2},
- {-16, -12, 1, 1, 15, 2},
- { 16, -12, 1, 0, 19, 2},
- { 32, -12, 0, 0, 21, 2},
- {-48, -4, 1, 1, 22, 2},
- {-16, -4, 1, 1, 26, 2},
- { 16, -4, 1, 0, 30, 2},
- { 32, -4, 0, 0, 32, 2},
- {-48, 4, 1, 1, 33, 2},
- {-16, 4, 1, 1, 37, 2},
- { 16, 4, 1, 0, 41, 2},
- { 32, 4, 0, 0, 43, 2}
+ {
+ .x = -48,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = -20,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 10,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 11,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 15,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 19,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 21,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 22,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 26,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 30,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 32,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 33,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 37,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 41,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 43,
+ .priority = 2
+ }
};
const struct Subsprite gEventObjectSpriteOamTable_SubmarineShadow_3[] = {
- {-48, -20, 1, 1, 0, 1},
- {-16, -20, 1, 1, 4, 1},
- { 16, -20, 1, 0, 8, 1},
- { 32, -20, 0, 0, 10, 1},
- {-48, -12, 1, 1, 11, 1},
- {-16, -12, 1, 1, 15, 1},
- { 16, -12, 1, 0, 19, 1},
- { 32, -12, 0, 0, 21, 1},
- {-48, -4, 1, 1, 22, 2},
- {-16, -4, 1, 1, 26, 2},
- { 16, -4, 1, 0, 30, 2},
- { 32, -4, 0, 0, 32, 2},
- {-48, 4, 1, 1, 33, 2},
- {-16, 4, 1, 1, 37, 2},
- { 16, 4, 1, 0, 41, 2},
- { 32, 4, 0, 0, 43, 2}
+ {
+ .x = -48,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -20,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = 32,
+ .y = -20,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 10,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 11,
+ .priority = 1
+ },
+ {
+ .x = -16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 15,
+ .priority = 1
+ },
+ {
+ .x = 16,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 19,
+ .priority = 1
+ },
+ {
+ .x = 32,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 21,
+ .priority = 1
+ },
+ {
+ .x = -48,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 22,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 26,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 30,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 32,
+ .priority = 2
+ },
+ {
+ .x = -48,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 33,
+ .priority = 2
+ },
+ {
+ .x = -16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 37,
+ .priority = 2
+ },
+ {
+ .x = 16,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 41,
+ .priority = 2
+ },
+ {
+ .x = 32,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 43,
+ .priority = 2
+ }
};
const struct SubspriteTable gEventObjectSpriteOamTables_SubmarineShadow[] = {
diff --git a/src/data/field_event_obj/field_effect_object_template_pointers.h b/src/data/field_event_obj/field_effect_object_template_pointers.h
index 32d2b069a..de39e6db3 100755
--- a/src/data/field_event_obj/field_effect_object_template_pointers.h
+++ b/src/data/field_event_obj/field_effect_object_template_pointers.h
@@ -31,7 +31,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown29;
const struct SpriteTemplate gFieldEffectObjectTemplate_ShortGrass;
const struct SpriteTemplate gFieldEffectObjectTemplate_HotSpringsWater;
const struct SpriteTemplate gFieldEffectObjectTemplate_JumpOutOfAsh;
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown33;
+const struct SpriteTemplate gFieldEffectObjectTemplate_LavaridgeGymWarp;
const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles;
const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown35;
const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza;
@@ -70,7 +70,7 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
&gFieldEffectObjectTemplate_ShortGrass,
&gFieldEffectObjectTemplate_HotSpringsWater,
&gFieldEffectObjectTemplate_JumpOutOfAsh,
- &gFieldEffectObjectTemplate_Unknown33,
+ &gFieldEffectObjectTemplate_LavaridgeGymWarp,
&gFieldEffectObjectTemplate_Bubbles,
&gFieldEffectObjectTemplate_Unknown35,
&gFieldEffectObjectTemplate_Rayquaza,
diff --git a/src/data/field_event_obj/field_effect_objects.h b/src/data/field_event_obj/field_effect_objects.h
index a3944de36..d28357765 100755
--- a/src/data/field_event_obj/field_effect_objects.h
+++ b/src/data/field_event_obj/field_effect_objects.h
@@ -892,19 +892,28 @@ const union AnimCmd *const gFieldEffectObjectImageAnimTable_JumpOutOfAsh[] =
gFieldEffectObjectImageAnim_850D54C,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_JumpOutOfAsh = {0xFFFF, 0x100D, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_JumpOutOfAsh, gFieldEffectObjectPicTable_JumpOutOfAsh, gDummySpriteAffineAnimTable, sub_80B7CAC};
+const struct SpriteTemplate gFieldEffectObjectTemplate_JumpOutOfAsh =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x100D,
+ .oam = &gEventObjectBaseOam_16x16,
+ .anims = gFieldEffectObjectImageAnimTable_JumpOutOfAsh,
+ .images = gFieldEffectObjectPicTable_JumpOutOfAsh,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PopOutOfAsh
+};
const struct SpritePalette gFieldEffectObjectPaletteInfo2 = {gFieldEffectObjectPalette2, 0x100D};
-const struct SpriteFrameImage gFieldEffectObjectPicTable_Unknown33[] = {
- overworld_frame(gFieldEffectObjectPic_Unknown33, 2, 2, 0),
- overworld_frame(gFieldEffectObjectPic_Unknown33, 2, 2, 1),
- overworld_frame(gFieldEffectObjectPic_Unknown33, 2, 2, 2),
- overworld_frame(gFieldEffectObjectPic_Unknown33, 2, 2, 3),
- overworld_frame(gFieldEffectObjectPic_Unknown33, 2, 2, 4),
+const struct SpriteFrameImage gFieldEffectObjectPicTable_LavaridgeGymWarp[] = {
+ overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 0),
+ overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 1),
+ overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 2),
+ overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 3),
+ overworld_frame(gFieldEffectObjectPic_LavaridgeGymWarp, 2, 2, 4),
};
-const union AnimCmd gFieldEffectObjectImageAnim_850D5B0[] =
+const union AnimCmd gFieldEffectObjectImageAnim_LavaridgeGymWarp[] =
{
ANIMCMD_FRAME(0, 6),
ANIMCMD_FRAME(1, 6),
@@ -914,12 +923,21 @@ const union AnimCmd gFieldEffectObjectImageAnim_850D5B0[] =
ANIMCMD_END,
};
-const union AnimCmd *const gFieldEffectObjectImageAnimTable_Unknown33[] =
+const union AnimCmd *const gFieldEffectObjectImageAnimTable_LavaridgeGymWarp[] =
{
- gFieldEffectObjectImageAnim_850D5B0,
+ gFieldEffectObjectImageAnim_LavaridgeGymWarp,
};
-const struct SpriteTemplate gFieldEffectObjectTemplate_Unknown33 = {0xFFFF, 0x100D, &gEventObjectBaseOam_16x16, gFieldEffectObjectImageAnimTable_Unknown33, gFieldEffectObjectPicTable_Unknown33, gDummySpriteAffineAnimTable, sub_80B7A58};
+const struct SpriteTemplate gFieldEffectObjectTemplate_LavaridgeGymWarp =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x100D,
+ .oam = &gEventObjectBaseOam_16x16,
+ .anims = gFieldEffectObjectImageAnimTable_LavaridgeGymWarp,
+ .images = gFieldEffectObjectPicTable_LavaridgeGymWarp,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_LavaridgeGymWarp
+};
const struct SpriteFrameImage gFieldEffectObjectPicTable_Bubbles[] = {
overworld_frame(gFieldEffectObjectPic_Bubbles, 2, 4, 0),
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/graphics/decorations.h b/src/data/graphics/decorations.h
index 62d86d48e..d8b865fcf 100644
--- a/src/data/graphics/decorations.h
+++ b/src/data/graphics/decorations.h
@@ -1,125 +1,125 @@
-const u32 gUnknown_08DB7AA0[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.4bpp.lz");
-const u32 gUnknown_08DB7B34[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.gbapal.lz");
+const u32 gDecorIcon_HeavyDesk[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.4bpp.lz");
+const u32 gDecorIconPalette_HeavyDesk[] = INCBIN_U32("graphics/decorations/decor_heavy_desk.gbapal.lz");
-const u32 gUnknown_08DB7B5C[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.4bpp.lz");
-const u32 gUnknown_08DB7BEC[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.gbapal.lz");
+const u32 gDecorIcon_RaggedDesk[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.4bpp.lz");
+const u32 gDecorIconPalette_RaggedDesk[] = INCBIN_U32("graphics/decorations/decor_ragged_desk.gbapal.lz");
-const u32 gUnknown_08DB7C08[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.4bpp.lz");
-const u32 gUnknown_08DB7CE8[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.gbapal.lz");
+const u32 gDecorIcon_ComfortDesk[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.4bpp.lz");
+const u32 gDecorIconPalette_ComfortDesk[] = INCBIN_U32("graphics/decorations/decor_comfort_desk.gbapal.lz");
-const u32 gUnknown_08DB7D08[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.4bpp.lz");
-const u32 gUnknown_08DB7DCC[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.gbapal.lz");
+const u32 gDecorIcon_PrettyDesk[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.4bpp.lz");
+const u32 gDecorIconPalette_PrettyDesk[] = INCBIN_U32("graphics/decorations/decor_pretty_desk.gbapal.lz");
-const u32 gUnknown_08DB7DF4[] = INCBIN_U32("graphics/decorations/decor_brick_desk.4bpp.lz");
-const u32 gUnknown_08DB7EA0[] = INCBIN_U32("graphics/decorations/decor_brick_desk.gbapal.lz");
+const u32 gDecorIcon_BrickDesk[] = INCBIN_U32("graphics/decorations/decor_brick_desk.4bpp.lz");
+const u32 gDecorIconPalette_BrickDesk[] = INCBIN_U32("graphics/decorations/decor_brick_desk.gbapal.lz");
-const u32 gUnknown_08DB7EC4[] = INCBIN_U32("graphics/decorations/decor_camp_desk.4bpp.lz");
-const u32 gUnknown_08DB7F60[] = INCBIN_U32("graphics/decorations/decor_camp_desk.gbapal.lz");
+const u32 gDecorIcon_CampDesk[] = INCBIN_U32("graphics/decorations/decor_camp_desk.4bpp.lz");
+const u32 gDecorIconPalette_CampDesk[] = INCBIN_U32("graphics/decorations/decor_camp_desk.gbapal.lz");
-const u32 gUnknown_08DB7F7C[] = INCBIN_U32("graphics/decorations/decor_hard_desk.4bpp.lz");
-const u32 gUnknown_08DB8070[] = INCBIN_U32("graphics/decorations/decor_hard_desk.gbapal.lz");
+const u32 gDecorIcon_HardDesk[] = INCBIN_U32("graphics/decorations/decor_hard_desk.4bpp.lz");
+const u32 gDecorIconPalette_HardDesk[] = INCBIN_U32("graphics/decorations/decor_hard_desk.gbapal.lz");
-const u32 gUnknown_08DB808C[] = INCBIN_U32("graphics/decorations/decor_red_plant.4bpp.lz");
-const u32 gUnknown_08DB8138[] = INCBIN_U32("graphics/decorations/decor_red_plant.gbapal.lz");
+const u32 gDecorIcon_RedPlant[] = INCBIN_U32("graphics/decorations/decor_red_plant.4bpp.lz");
+const u32 gDecorIconPalette_RedPlant[] = INCBIN_U32("graphics/decorations/decor_red_plant.gbapal.lz");
-const u32 gUnknown_08DB8160[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.4bpp.lz");
-const u32 gUnknown_08DB8218[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.gbapal.lz");
+const u32 gDecorIcon_TropicalPlant[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.4bpp.lz");
+const u32 gDecorIconPalette_TropicalPlant[] = INCBIN_U32("graphics/decorations/decor_tropical_plant.gbapal.lz");
-const u32 gUnknown_08DB823C[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.4bpp.lz");
-const u32 gUnknown_08DB8300[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.gbapal.lz");
+const u32 gDecorIcon_PrettyFlowers[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.4bpp.lz");
+const u32 gDecorIconPalette_PrettyFlowers[] = INCBIN_U32("graphics/decorations/decor_pretty_flowers.gbapal.lz");
-const u32 gUnknown_08DB8328[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.4bpp.lz");
-const u32 gUnknown_08DB8430[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.gbapal.lz");
+const u32 gDecorIcon_ColorfulPlant[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.4bpp.lz");
+const u32 gDecorIconPalette_ColorfulPlant[] = INCBIN_U32("graphics/decorations/decor_colorful_plant.gbapal.lz");
-const u32 gUnknown_08DB8458[] = INCBIN_U32("graphics/decorations/decor_big_plant.4bpp.lz");
-const u32 gUnknown_08DB8528[] = INCBIN_U32("graphics/decorations/decor_big_plant.gbapal.lz");
+const u32 gDecorIcon_BigPlant[] = INCBIN_U32("graphics/decorations/decor_big_plant.4bpp.lz");
+const u32 gDecorIconPalette_BigPlant[] = INCBIN_U32("graphics/decorations/decor_big_plant.gbapal.lz");
-const u32 gUnknown_08DB854C[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.4bpp.lz");
-const u32 gUnknown_08DB862C[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.gbapal.lz");
+const u32 gDecorIcon_GorgeousPlant[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.4bpp.lz");
+const u32 gDecorIconPalette_GorgeousPlant[] = INCBIN_U32("graphics/decorations/decor_gorgeous_plant.gbapal.lz");
-const u32 gUnknown_08DB8654[] = INCBIN_U32("graphics/decorations/decor_red_brick.4bpp.lz");
-const u32 gUnknown_08DB86C4[] = INCBIN_U32("graphics/decorations/decor_red_brick.gbapal.lz");
+const u32 gDecorIcon_RedBrick[] = INCBIN_U32("graphics/decorations/decor_red_brick.4bpp.lz");
+const u32 gDecorIconPalette_RedBrick[] = INCBIN_U32("graphics/decorations/decor_red_brick.gbapal.lz");
-const u32 gUnknown_08DB86E0[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.4bpp.lz");
-const u32 gUnknown_08DB8750[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.gbapal.lz");
+const u32 gDecorIcon_YellowBrick[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.4bpp.lz");
+const u32 gDecorIconPalette_YellowBrick[] = INCBIN_U32("graphics/decorations/decor_yellow_brick.gbapal.lz");
-const u32 gUnknown_08DB876C[] = INCBIN_U32("graphics/decorations/decor_blue_brick.4bpp.lz");
-const u32 gUnknown_08DB87DC[] = INCBIN_U32("graphics/decorations/decor_blue_brick.gbapal.lz");
+const u32 gDecorIcon_BlueBrick[] = INCBIN_U32("graphics/decorations/decor_blue_brick.4bpp.lz");
+const u32 gDecorIconPalette_BlueBrick[] = INCBIN_U32("graphics/decorations/decor_blue_brick.gbapal.lz");
-const u32 gUnknown_08DB87F8[] = INCBIN_U32("graphics/decorations/decor_red_tent.4bpp.lz");
-const u32 gUnknown_08DB88D8[] = INCBIN_U32("graphics/decorations/decor_red_tent.gbapal.lz");
+const u32 gDecorIcon_RedTent[] = INCBIN_U32("graphics/decorations/decor_red_tent.4bpp.lz");
+const u32 gDecorIconPalette_RedTent[] = INCBIN_U32("graphics/decorations/decor_red_tent.gbapal.lz");
-const u32 gUnknown_08DB8900[] = INCBIN_U32("graphics/decorations/decor_blue_tent.4bpp.lz");
-const u32 gUnknown_08DB89E0[] = INCBIN_U32("graphics/decorations/decor_blue_tent.gbapal.lz");
+const u32 gDecorIcon_BlueTent[] = INCBIN_U32("graphics/decorations/decor_blue_tent.4bpp.lz");
+const u32 gDecorIconPalette_BlueTent[] = INCBIN_U32("graphics/decorations/decor_blue_tent.gbapal.lz");
-const u32 gUnknown_08DB8A08[] = INCBIN_U32("graphics/decorations/decor_solid_board.4bpp.lz");
-const u32 gUnknown_08DB8A68[] = INCBIN_U32("graphics/decorations/decor_solid_board.gbapal.lz");
+const u32 gDecorIcon_SolidBoard[] = INCBIN_U32("graphics/decorations/decor_solid_board.4bpp.lz");
+const u32 gDecorIconPalette_SolidBoard[] = INCBIN_U32("graphics/decorations/decor_solid_board.gbapal.lz");
-const u32 gUnknown_08DB8A84[] = INCBIN_U32("graphics/decorations/decor_slide.4bpp.lz");
-const u32 gUnknown_08DB8B40[] = INCBIN_U32("graphics/decorations/decor_slide.gbapal.lz");
+const u32 gDecorIcon_Slide[] = INCBIN_U32("graphics/decorations/decor_slide.4bpp.lz");
+const u32 gDecorIconPalette_Slide[] = INCBIN_U32("graphics/decorations/decor_slide.gbapal.lz");
-const u32 gUnknown_08DB8B68[] = INCBIN_U32("graphics/decorations/decor_tire.4bpp.lz");
-const u32 gUnknown_08DB8C40[] = INCBIN_U32("graphics/decorations/decor_tire.gbapal.lz");
+const u32 gDecorIcon_Tire[] = INCBIN_U32("graphics/decorations/decor_tire.4bpp.lz");
+const u32 gDecorIconPalette_Tire[] = INCBIN_U32("graphics/decorations/decor_tire.gbapal.lz");
-const u32 gUnknown_08DB8C5C[] = INCBIN_U32("graphics/decorations/decor_stand.4bpp.lz");
-const u32 gUnknown_08DB8CF4[] = INCBIN_U32("graphics/decorations/decor_stand.gbapal.lz");
+const u32 gDecorIcon_Stand[] = INCBIN_U32("graphics/decorations/decor_stand.4bpp.lz");
+const u32 gDecorIconPalette_Stand[] = INCBIN_U32("graphics/decorations/decor_stand.gbapal.lz");
-const u32 gUnknown_08DB8D18[] = INCBIN_U32("graphics/decorations/decor_breakable_door.4bpp.lz");
-const u32 gUnknown_08DB8DB0[] = INCBIN_U32("graphics/decorations/decor_breakable_door.gbapal.lz");
+const u32 gDecorIcon_BreakableDoor[] = INCBIN_U32("graphics/decorations/decor_breakable_door.4bpp.lz");
+const u32 gDecorIconPalette_BreakableDoor[] = INCBIN_U32("graphics/decorations/decor_breakable_door.gbapal.lz");
-const u32 gUnknown_08DB8DD4[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.4bpp.lz");
-const u32 gUnknown_08DB8E80[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.gbapal.lz");
+const u32 gDecorIcon_SandOrnament[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.4bpp.lz");
+const u32 gDecorIconPalette_SandOrnament[] = INCBIN_U32("graphics/decorations/decor_sand_ornament.gbapal.lz");
-const u32 gUnknown_08DB8EA0[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.4bpp.lz");
-const u32 gUnknown_08DB8F58[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.gbapal.lz");
+const u32 gDecorIcon_GlassOrnament[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.4bpp.lz");
+const u32 gDecorIconPalette_GlassOrnament[] = INCBIN_U32("graphics/decorations/decor_glass_ornament.gbapal.lz");
-const u32 gUnknown_08DB8F7C[] = INCBIN_U32("graphics/decorations/decor_surf_mat.4bpp.lz");
-const u32 gUnknown_08DB9038[] = INCBIN_U32("graphics/decorations/decor_surf_mat.gbapal.lz");
+const u32 gDecorIcon_SurfMat[] = INCBIN_U32("graphics/decorations/decor_surf_mat.4bpp.lz");
+const u32 gDecorIconPalette_SurfMat[] = INCBIN_U32("graphics/decorations/decor_surf_mat.gbapal.lz");
-const u32 gUnknown_08DB9058[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.4bpp.lz");
-const u32 gUnknown_08DB9130[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.gbapal.lz");
+const u32 gDecorIcon_ThunderMat[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.4bpp.lz");
+const u32 gDecorIconPalette_ThunderMat[] = INCBIN_U32("graphics/decorations/decor_thunder_mat.gbapal.lz");
-const u32 gUnknown_08DB9154[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.4bpp.lz");
-const u32 gUnknown_08DB9218[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.gbapal.lz");
+const u32 gDecorIcon_FireBlastMat[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.4bpp.lz");
+const u32 gDecorIconPalette_FireBlastMat[] = INCBIN_U32("graphics/decorations/decor_fire_blast_mat.gbapal.lz");
-const u32 gUnknown_08DB9234[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.4bpp.lz");
-const u32 gUnknown_08DB92FC[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.gbapal.lz");
+const u32 gDecorIcon_PowderSnowMat[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.4bpp.lz");
+const u32 gDecorIconPalette_PowderSnowMat[] = INCBIN_U32("graphics/decorations/decor_powder_snow_mat.gbapal.lz");
-const u32 gUnknown_08DB931C[] = INCBIN_U32("graphics/decorations/decor_attract_mat.4bpp.lz");
-const u32 gUnknown_08DB93E8[] = INCBIN_U32("graphics/decorations/decor_attract_mat.gbapal.lz");
+const u32 gDecorIcon_AttractMat[] = INCBIN_U32("graphics/decorations/decor_attract_mat.4bpp.lz");
+const u32 gDecorIconPalette_AttractMat[] = INCBIN_U32("graphics/decorations/decor_attract_mat.gbapal.lz");
-const u32 gUnknown_08DB940C[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.4bpp.lz");
-const u32 gUnknown_08DB94CC[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.gbapal.lz");
+const u32 gDecorIcon_FissureMat[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.4bpp.lz");
+const u32 gDecorIconPalette_FissureMat[] = INCBIN_U32("graphics/decorations/decor_fissure_mat.gbapal.lz");
-const u32 gUnknown_08DB94E8[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.4bpp.lz");
-const u32 gUnknown_08DB95AC[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.gbapal.lz");
+const u32 gDecorIcon_SpikesMat[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.4bpp.lz");
+const u32 gDecorIconPalette_SpikesMat[] = INCBIN_U32("graphics/decorations/decor_spikes_mat.gbapal.lz");
-const u32 gUnknown_08DB95D0[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.4bpp.lz");
-const u32 gUnknown_08DB96C4[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.gbapal.lz");
+const u32 gDecorIcon_SnorlaxDoll[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.4bpp.lz");
+const u32 gDecorIconPalette_SnorlaxDoll[] = INCBIN_U32("graphics/decorations/decor_snorlax_doll.gbapal.lz");
-const u32 gUnknown_08DB96EC[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.4bpp.lz");
-const u32 gUnknown_08DB97F4[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.gbapal.lz");
+const u32 gDecorIcon_RhydonDoll[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.4bpp.lz");
+const u32 gDecorIconPalette_RhydonDoll[] = INCBIN_U32("graphics/decorations/decor_rhydon_doll.gbapal.lz");
-const u32 gUnknown_08DB981C[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.4bpp.lz");
-const u32 gUnknown_08DB9908[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.gbapal.lz");
+const u32 gDecorIcon_LaprasDoll[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.4bpp.lz");
+const u32 gDecorIconPalette_LaprasDoll[] = INCBIN_U32("graphics/decorations/decor_lapras_doll.gbapal.lz");
-const u32 gUnknown_08DB9930[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.4bpp.lz");
-const u32 gUnknown_08DB9A54[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.gbapal.lz");
+const u32 gDecorIcon_VenusaurDoll[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.4bpp.lz");
+const u32 gDecorIconPalette_VenusaurDoll[] = INCBIN_U32("graphics/decorations/decor_venusaur_doll.gbapal.lz");
-const u32 gUnknown_08DB9A7C[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.4bpp.lz");
-const u32 gUnknown_08DB9B7C[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.gbapal.lz");
+const u32 gDecorIcon_CharizardDoll[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.4bpp.lz");
+const u32 gDecorIconPalette_CharizardDoll[] = INCBIN_U32("graphics/decorations/decor_charizard_doll.gbapal.lz");
-const u32 gUnknown_08DB9BA4[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.4bpp.lz");
-const u32 gUnknown_08DB9CB0[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.gbapal.lz");
+const u32 gDecorIcon_BlastoiseDoll[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.4bpp.lz");
+const u32 gDecorIconPalette_BlastoiseDoll[] = INCBIN_U32("graphics/decorations/decor_blastoise_doll.gbapal.lz");
-const u32 gUnknown_08DB9CD8[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.4bpp.lz");
-const u32 gUnknown_08DB9DAC[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.gbapal.lz");
+const u32 gDecorIcon_WailmerDoll[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.4bpp.lz");
+const u32 gDecorIconPalette_WailmerDoll[] = INCBIN_U32("graphics/decorations/decor_wailmer_doll.gbapal.lz");
-const u32 gUnknown_08DB9DD4[] = INCBIN_U32("graphics/decorations/decor_regice_doll.4bpp.lz");
-const u32 gUnknown_08DB9EE4[] = INCBIN_U32("graphics/decorations/decor_regice_doll.gbapal.lz");
+const u32 gDecorIcon_RegiceDoll[] = INCBIN_U32("graphics/decorations/decor_regice_doll.4bpp.lz");
+const u32 gDecorIconPalette_RegiceDoll[] = INCBIN_U32("graphics/decorations/decor_regice_doll.gbapal.lz");
-const u32 gUnknown_08DB9F08[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.4bpp.lz");
-const u32 gUnknown_08DB9FFC[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.gbapal.lz");
+const u32 gDecorIcon_RegirockDoll[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.4bpp.lz");
+const u32 gDecorIconPalette_RegirockDoll[] = INCBIN_U32("graphics/decorations/decor_regirock_doll.gbapal.lz");
-const u32 gUnknown_08DBA020[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.4bpp.lz");
-const u32 gUnknown_08DBA12C[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.gbapal.lz");
+const u32 gDecorIcon_RegisteelDoll[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.4bpp.lz");
+const u32 gDecorIconPalette_RegisteelDoll[] = INCBIN_U32("graphics/decorations/decor_registeel_doll.gbapal.lz");
diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h
index 07415949d..45e34030f 100644
--- a/src/data/graphics/pokemon.h
+++ b/src/data/graphics/pokemon.h
@@ -572,12 +572,12 @@ const u32 gMonShinyPalette_Magneton[] = INCBIN_U32("graphics/pokemon/magneton/sh
const u8 gMonIcon_Magneton[] = INCBIN_U8("graphics/pokemon/magneton/icon.4bpp");
const u8 gMonFootprint_Magneton[] = INCBIN_U8("graphics/pokemon/magneton/footprint.1bpp");
-const u32 gMonStillFrontPic_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetch_d/front.4bpp.lz");
-const u32 gMonPalette_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetch_d/normal.gbapal.lz");
-const u32 gMonBackPic_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetch_d/back.4bpp.lz");
-const u32 gMonShinyPalette_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetch_d/shiny.gbapal.lz");
-const u8 gMonIcon_Farfetchd[] = INCBIN_U8("graphics/pokemon/farfetch_d/icon.4bpp");
-const u8 gMonFootprint_Farfetchd[] = INCBIN_U8("graphics/pokemon/farfetch_d/footprint.1bpp");
+const u32 gMonStillFrontPic_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetchd/front.4bpp.lz");
+const u32 gMonPalette_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetchd/normal.gbapal.lz");
+const u32 gMonBackPic_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetchd/back.4bpp.lz");
+const u32 gMonShinyPalette_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetchd/shiny.gbapal.lz");
+const u8 gMonIcon_Farfetchd[] = INCBIN_U8("graphics/pokemon/farfetchd/icon.4bpp");
+const u8 gMonFootprint_Farfetchd[] = INCBIN_U8("graphics/pokemon/farfetchd/footprint.1bpp");
const u32 gMonStillFrontPic_Doduo[] = INCBIN_U32("graphics/pokemon/doduo/front.4bpp.lz");
const u32 gMonPalette_Doduo[] = INCBIN_U32("graphics/pokemon/doduo/normal.gbapal.lz");
diff --git a/src/data/party_menu.h b/src/data/party_menu.h
new file mode 100644
index 000000000..3c3a3e1ce
--- /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 = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .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 = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .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 = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .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 = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .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/pokemon/item_effects.h b/src/data/pokemon/item_effects.h
index 1697a1e7e..698d97a43 100644
--- a/src/data/pokemon/item_effects.h
+++ b/src/data/pokemon/item_effects.h
@@ -236,7 +236,7 @@ const u8 gItemEffect_PPMax[9] = {
};
const u8 gItemEffect_GuardSpec[8] = {
- [3] = ITEM3_MIST,
+ [3] = ITEM3_GUARD_SPEC,
[5] = ITEM5_FRIENDSHIP_LOW | ITEM5_FRIENDSHIP_MID,
[6] = 1,
[7] = 1,
@@ -377,7 +377,7 @@ const u8 gItemEffect_QualotBerry[10] = {
[9] = 2,
};
-const u8 gItemEffect_HondrewBerry[10] = {
+const u8 gItemEffect_HondewBerry[10] = {
[5] = ITEM5_EV_SPATK | ITEM5_FRIENDSHIP_ALL,
[6] = -10,
[7] = 10,
@@ -469,7 +469,7 @@ const u8 *const gItemEffectTable[] =
[ITEM_POMEG_BERRY - ITEM_POTION] = gItemEffect_PomegBerry,
[ITEM_KELPSY_BERRY - ITEM_POTION] = gItemEffect_KelpsyBerry,
[ITEM_QUALOT_BERRY - ITEM_POTION] = gItemEffect_QualotBerry,
- [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondrewBerry,
+ [ITEM_HONDEW_BERRY - ITEM_POTION] = gItemEffect_HondewBerry,
[ITEM_GREPA_BERRY - ITEM_POTION] = gItemEffect_GrepaBerry,
[ITEM_TAMATO_BERRY - ITEM_POTION] = gItemEffect_TamatoBerry,
[LAST_BERRY_INDEX - ITEM_POTION] = NULL
diff --git a/src/data/pokemon/level_up_learnsets.h b/src/data/pokemon/level_up_learnsets.h
index 727cc0959..c78b9ef0a 100644
--- a/src/data/pokemon/level_up_learnsets.h
+++ b/src/data/pokemon/level_up_learnsets.h
@@ -1,5 +1,4 @@
#define LEVEL_UP_MOVE(lvl, move) ((lvl << 9) | move)
-#define LEVEL_UP_END 0xffff
static const u16 sBulbasaurLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h
index 0f2b53a18..2edefb274 100644
--- a/src/data/pokemon/trainer_class_lookups.h
+++ b/src/data/pokemon/trainer_class_lookups.h
@@ -2,7 +2,7 @@ const u8 gFacilityClassToPicIndex[] =
{
[FACILITY_CLASS_HIKER] = TRAINER_PIC_HIKER,
[FACILITY_CLASS_AQUA_GRUNT_M] = TRAINER_PIC_AQUA_GRUNT_M,
- [FACILITY_CLASS_POKEMON_BREEDER_F] = TRAINER_PIC_POKEMON_BREEDER_F,
+ [FACILITY_CLASS_PKMN_BREEDER_F] = TRAINER_PIC_POKEMON_BREEDER_F,
[FACILITY_CLASS_COOLTRAINER_M] = TRAINER_PIC_COOLTRAINER_M,
[FACILITY_CLASS_BIRD_KEEPER] = TRAINER_PIC_BIRD_KEEPER,
[FACILITY_CLASS_COLLECTOR] = TRAINER_PIC_COLLECTOR,
@@ -88,7 +88,7 @@ const u8 gFacilityClassToTrainerClass[] =
{
[FACILITY_CLASS_HIKER] = TRAINER_CLASS_HIKER,
[FACILITY_CLASS_AQUA_GRUNT_M] = TRAINER_CLASS_TEAM_AQUA,
- [FACILITY_CLASS_POKEMON_BREEDER_F] = TRAINER_CLASS_PKMN_BREEDER,
+ [FACILITY_CLASS_PKMN_BREEDER_F] = TRAINER_CLASS_PKMN_BREEDER,
[FACILITY_CLASS_COOLTRAINER_M] = TRAINER_CLASS_COOLTRAINER,
[FACILITY_CLASS_BIRD_KEEPER] = TRAINER_CLASS_BIRD_KEEPER,
[FACILITY_CLASS_COLLECTOR] = TRAINER_CLASS_COLLECTOR,
diff --git a/src/data/pokemon/tutor_learnsets.h b/src/data/pokemon/tutor_learnsets.h
index 0a930e993..2c8c3b362 100644
--- a/src/data/pokemon/tutor_learnsets.h
+++ b/src/data/pokemon/tutor_learnsets.h
@@ -1,35 +1,4 @@
-#define TUTOR_MOVE_MEGA_PUNCH 0
-#define TUTOR_MOVE_SWORDS_DANCE 1
-#define TUTOR_MOVE_MEGA_KICK 2
-#define TUTOR_MOVE_BODY_SLAM 3
-#define TUTOR_MOVE_DOUBLE_EDGE 4
-#define TUTOR_MOVE_COUNTER 5
-#define TUTOR_MOVE_SEISMIC_TOSS 6
-#define TUTOR_MOVE_MIMIC 7
-#define TUTOR_MOVE_METRONOME 8
-#define TUTOR_MOVE_SOFT_BOILED 9
-#define TUTOR_MOVE_DREAM_EATER 10
-#define TUTOR_MOVE_THUNDER_WAVE 11
-#define TUTOR_MOVE_EXPLOSION 12
-#define TUTOR_MOVE_ROCK_SLIDE 13
-#define TUTOR_MOVE_SUBSTITUTE 14
-#define TUTOR_MOVE_DYNAMIC_PUNCH 15
-#define TUTOR_MOVE_ROLLOUT 16
-#define TUTOR_MOVE_PSYCH_UP 17
-#define TUTOR_MOVE_SNORE 18
-#define TUTOR_MOVE_ICY_WIND 19
-#define TUTOR_MOVE_ENDURE 20
-#define TUTOR_MOVE_MUD_SLAP 21
-#define TUTOR_MOVE_ICE_PUNCH 22
-#define TUTOR_MOVE_SWAGGER 23
-#define TUTOR_MOVE_SLEEP_TALK 24
-#define TUTOR_MOVE_SWIFT 25
-#define TUTOR_MOVE_DEFENSE_CURL 26
-#define TUTOR_MOVE_THUNDER_PUNCH 27
-#define TUTOR_MOVE_FIRE_PUNCH 28
-#define TUTOR_MOVE_FURY_CUTTER 29
-
-const u16 gTutorMoves[] =
+const u16 gTutorMoves[TUTOR_MOVE_COUNT] =
{
[TUTOR_MOVE_MEGA_PUNCH] = MOVE_MEGA_PUNCH,
[TUTOR_MOVE_SWORDS_DANCE] = MOVE_SWORDS_DANCE,
diff --git a/src/data/script_menu.h b/src/data/script_menu.h
new file mode 100644
index 000000000..3880c3c0c
--- /dev/null
+++ b/src/data/script_menu.h
@@ -0,0 +1,1006 @@
+// multichoice lists
+static const struct MenuAction MultichoiceList_BrineyOnDewford[] =
+{
+ {gText_Petalburg},
+ {gText_Slateport},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_EnterInfo[] =
+{
+ {gText_Enter2},
+ {gText_Info2},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ContestInfo[] =
+{
+ {gText_WhatsAContest},
+ {gText_TypesOfContests},
+ {gText_Ranks},
+ {gText_Cancel2},
+};
+
+static const struct MenuAction MultichoiceList_ContestType[] =
+{
+ {gText_CoolnessContest},
+ {gText_BeautyContest},
+ {gText_CutenessContest},
+ {gText_SmartnessContest},
+ {gText_ToughnessContest},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BasePCWithRegistry[] =
+{
+ {gText_Decoration2},
+ {gText_PackUp},
+ {gText_Registry},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BasePCNoRegistry[] =
+{
+ {gText_Decoration2},
+ {gText_PackUp},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_RegisterMenu[] =
+{
+ {gMenuText_Register},
+ {gText_Registry},
+ {gText_Information},
+ {gText_Cancel2},
+};
+
+static const struct MenuAction MultichoiceList_Bike[] =
+{
+ {gText_Mach},
+ {gText_Acro},
+};
+
+static const struct MenuAction MultichoiceList_StatusInfo[] =
+{
+ {gText_Psn},
+ {gText_Par},
+ {gText_Slp},
+ {gText_Brn},
+ {gText_Frz},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BrineyOffDewford[] =
+{
+ {gText_Dewford},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ViewedPaintings[] =
+{
+ {gText_SawIt},
+ {gText_NotYet},
+};
+
+static const struct MenuAction MultichoiceList_YesNoInfo2[] =
+{
+ {gText_Yes},
+ {gText_No},
+ {gText_Info2},
+};
+
+static const struct MenuAction MultichoiceList_ChallengeInfo[] =
+{
+ {gText_Challenge},
+ {gText_Info3},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LevelMode[] =
+{
+ {gText_Lv50},
+ {gText_OpenLevel},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll1_Q1[] =
+{
+ {gTrickHouse_Mechadoll_Oddish},
+ {gTrickHouse_Mechadoll_Poochyena},
+ {gTrickHouse_Mechadoll_Taillow},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll1_Q2[] =
+{
+ {gTrickHouse_Mechadoll_Azurill},
+ {gTrickHouse_Mechadoll_Lotad},
+ {gTrickHouse_Mechadoll_Wingull},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll1_Q3[] =
+{
+ {gTrickHouse_Mechadoll_Dustox},
+ {gTrickHouse_Mechadoll_Zubat},
+ {gTrickHouse_Mechadoll_Nincada},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll2_Q1[] =
+{
+ {gTrickHouse_Mechadoll_Ralts},
+ {gTrickHouse_Mechadoll_Zigzagoon},
+ {gTrickHouse_Mechadoll_Slakoth},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll2_Q2[] =
+{
+ {gTrickHouse_Mechadoll_Poochyena2},
+ {gTrickHouse_Mechadoll_Shroomish},
+ {gTrickHouse_Mechadoll_Zigzagoon2},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll2_Q3[] =
+{
+ {gTrickHouse_Mechadoll_Poochyena3},
+ {gTrickHouse_Mechadoll_Zubat2},
+ {gTrickHouse_Mechadoll_Carvanha},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll3_Q1[] =
+{
+ {gTrickHouse_Mechadoll_BurnHeal},
+ {gTrickHouse_Mechadoll_HarborMail},
+ {gTrickHouse_Mechadoll_SamePrice},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll3_Q2[] =
+{
+ {gTrickHouse_Mechadoll_60Yen},
+ {gTrickHouse_Mechadoll_55Yen},
+ {gTrickHouse_Mechadoll_Nothing},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll3_Q3[] =
+{
+ {gTrickHouse_Mechadoll_CostMore},
+ {gTrickHouse_Mechadoll_CostLess},
+ {gTrickHouse_Mechadoll_SamePrice2},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll4_Q1[] =
+{
+ {gTrickHouse_Mechadoll_Male},
+ {gTrickHouse_Mechadoll_Female},
+ {gTrickHouse_Mechadoll_Neither},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll4_Q2[] =
+{
+ {gTrickHouse_Mechadoll_ElderlyMen},
+ {gTrickHouse_Mechadoll_ElderlyLadies},
+ {gTrickHouse_Mechadoll_SameNumber},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll4_Q3[] =
+{
+ {gTrickHouse_Mechadoll_None},
+ {gTrickHouse_Mechadoll_One},
+ {gTrickHouse_Mechadoll_Two},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll5_Q1[] =
+{
+ {gTrickHouse_Mechadoll_Two2},
+ {gTrickHouse_Mechadoll_Three},
+ {gTrickHouse_Mechadoll_Four},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll5_Q2[] =
+{
+ {gTrickHouse_Mechadoll_Six},
+ {gTrickHouse_Mechadoll_Seven},
+ {gTrickHouse_Mechadoll_Eight},
+};
+
+static const struct MenuAction MultichoiceList_Mechadoll5_Q3[] =
+{
+ {gTrickHouse_Mechadoll_Six2},
+ {gTrickHouse_Mechadoll_Seven2},
+ {gTrickHouse_Mechadoll_Eight2},
+};
+
+static const struct MenuAction MultichoiceList_VendingMachine[] =
+{
+ {gText_FreshWaterAndPrice},
+ {gText_SodaPopAndPrice},
+ {gText_LemonadeAndPrice},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_MachBikeInfo[] =
+{
+ {gText_HowToRide},
+ {gText_HowToTurn},
+ {gText_SandySlopes},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_AcroBikeInfo[] =
+{
+ {gText_Wheelies},
+ {gText_BunnyHops},
+ {gText_Jump},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Satisfaction[] =
+{
+ {gText_Satisfied},
+ {gText_Dissatisfied},
+};
+
+static const struct MenuAction MultichoiceList_SternDeepSea[] =
+{
+ {gText_DeepSeaTooth},
+ {gText_DeepSeaScale},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedAshVendor[] =
+{
+ {gText_BlueFlute2},
+ {gText_YellowFlute2},
+ {gText_RedFlute2},
+ {gText_WhiteFlute2},
+ {gText_BlackFlute2},
+ {gText_GlassChair},
+ {gText_GlassDesk},
+ {gText_Cancel2},
+};
+
+static const struct MenuAction MultichoiceList_GameCornerDolls[] =
+{
+ {gText_TreeckoDollAndPrice},
+ {gText_TorchicDollAndPrice},
+ {gText_MudkipDollAndPrice},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_GameCornerTMs[] =
+{
+ {gText_TM32AndPrice},
+ {gText_TM29AndPrice},
+ {gText_TM35AndPrice},
+ {gText_TM24AndPrice},
+ {gText_TM13AndPrice},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_GameCornerCoins[] =
+{
+ {gText_50CoinsAndPrice},
+ {gText_500CoinsAndPrice},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_HowsFishing[] =
+{
+ {gText_Excellent2},
+ {gText_NotSoGood},
+};
+
+static const struct MenuAction MultichoiceList_SSTidalSlateportWithBF[] =
+{
+ {gText_LilycoveCity},
+ {gText_BattleFrontier},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_SSTidalBattleFrontier[] =
+{
+ {gText_SlateportCity},
+ {gText_LilycoveCity},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_RightLeft[] =
+{
+ {gText_Right},
+ {gText_Left},
+};
+
+static const struct MenuAction MultichoiceList_SSTidalSlateportNoBF[] =
+{
+ {gText_LilycoveCity},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Floors[] =
+{
+ {gText_5F},
+ {gText_4F},
+ {gText_3F},
+ {gText_2F},
+ {gText_1F},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsR[] =
+{
+ {gText_RedShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsY[] =
+{
+ {gText_YellowShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRY[] =
+{
+ {gText_RedShard},
+ {gText_YellowShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsB[] =
+{
+ {gText_BlueShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRB[] =
+{
+ {gText_RedShard},
+ {gText_BlueShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsYB[] =
+{
+ {gText_YellowShard},
+ {gText_BlueShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRYB[] =
+{
+ {gText_RedShard},
+ {gText_YellowShard},
+ {gText_BlueShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsG[] =
+{
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRG[] =
+{
+ {gText_RedShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsYG[] =
+{
+ {gText_YellowShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRYG[] =
+{
+ {gText_RedShard},
+ {gText_YellowShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsBG[] =
+{
+ {gText_BlueShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRBG[] =
+{
+ {gText_RedShard},
+ {gText_BlueShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsYBG[] =
+{
+ {gText_YellowShard},
+ {gText_BlueShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ShardsRYBG[] =
+{
+ {gText_RedShard},
+ {gText_YellowShard},
+ {gText_BlueShard},
+ {gText_GreenShard},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_TourneyWithRecord[] =
+{
+ {gText_Opponent},
+ {gText_Tourney_Tree},
+ {gText_ReadyToStart},
+ {gText_Record2},
+ {gText_Rest},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_TourneyNoRecord[] =
+{
+ {gText_Opponent},
+ {gText_Tourney_Tree},
+ {gText_ReadyToStart},
+ {gText_Rest},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_Tent[] =
+{
+ {gText_RedTent},
+ {gText_BlueTent},
+};
+
+static const struct MenuAction MultichoiceList_LinkServicesNoBerry[] =
+{
+ {gText_TradeCenter},
+ {gText_Colosseum},
+ {gText_RecordCorner},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_YesNoInfo[] =
+{
+ {gText_Yes},
+ {gText_No},
+ {gText_Info2},
+};
+
+static const struct MenuAction MultichoiceList_BattleMode[] =
+{
+ {gText_SingleBattle},
+ {gText_DoubleBattle},
+ {gText_MultiBattle},
+ {gText_Info2},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkServicesNoRecord[] =
+{
+ {gText_TradeCenter},
+ {gText_Colosseum},
+ {gText_BerryCrush3},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkServicesAll[] =
+{
+ {gText_TradeCenter},
+ {gText_Colosseum},
+ {gText_RecordCorner},
+ {gText_BerryCrush3},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkServicesNoRecordBerry[] =
+{
+ {gText_TradeCenter},
+ {gText_Colosseum},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_WirelessMinigame[] =
+{
+ {gText_PokemonJump},
+ {gText_DodrioBerryPicking},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkLeader[] =
+{
+ {gText_JoinGroup},
+ {gText_BecomeLeader},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ContestRank[] =
+{
+ {gText_NormalRank},
+ {gText_SuperRank},
+ {gText_HyperRank},
+ {gText_MasterRank},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_FrontierItemChoose[] =
+{
+ {gText_BattleBag},
+ {gText_HeldItem},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_LinkContestInfo[] =
+{
+ {gText_LinkContest},
+ {gText_AboutE_Mode},
+ {gText_AboutG_Mode},
+ {gText_Cancel2},
+};
+
+static const struct MenuAction MultichoiceList_LinkContestMode[] =
+{
+ {gText_E_Mode},
+ {gText_G_Mode},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_ForcedStartMenu[] =
+{
+ {gText_MenuOptionPokedex},
+ {gText_MenuOptionPokemon},
+ {gText_MenuOptionBag},
+ {gText_MenuOptionPokenav},
+ {gText_Blank}, // blank because it's filled by the player's name
+ {gText_MenuOptionSave},
+ {gText_MenuOptionOption},
+ {gText_MenuOptionExit},
+};
+
+static const struct MenuAction MultichoiceList_FrontierGamblerBet[] =
+{
+ {gText_5BP},
+ {gText_10BP},
+ {gText_15BP},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedSSTidal1[] =
+{
+ {gText_SouthernIsland},
+ {gText_BirthIsland},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedSSTidal2[] =
+{
+ {gText_SouthernIsland},
+ {gText_FarawayIsland},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedSSTidal3[] =
+{
+ {gText_BirthIsland},
+ {gText_FarawayIsland},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_UnusedSSTidal4[] =
+{
+ {gText_SouthernIsland},
+ {gText_BirthIsland},
+ {gText_FarawayIsland},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Fossil[] =
+{
+ {gText_ClawFossil},
+ {gText_RootFossil},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_YesNo[] =
+{
+ {gText_Yes},
+ {gText_No4},
+};
+
+static const struct MenuAction MultichoiceList_FrontierRules[] =
+{
+ {gText_TwoStyles},
+ {gText_Lv50_3},
+ {gText_OpenLevel2},
+ {gText_MonTypeAndNo},
+ {gText_HoldItems},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_FrontierPassInfo[] =
+{
+ {gText_Symbols2},
+ {gText_Record3},
+ {gText_BattlePts},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattleArenaRules[] =
+{
+ {gText_BattleRules},
+ {gText_JudgeMind},
+ {gText_JudgeSkill},
+ {gText_JudgeBody},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattleTowerRules[] =
+{
+ {gText_TowerInfo},
+ {gText_BattleMon},
+ {gText_BattleSalon},
+ {gText_MultiLink2},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattleDomeRules[] =
+{
+ {gText_Matchup},
+ {gText_TourneyTree},
+ {gText_DoubleKO},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattleFactoryRules[] =
+{
+ {gText_BasicRules},
+ {gText_SwapPartners},
+ {gText_SwapNumber},
+ {gText_SwapNotes},
+ {gText_OpenLevel3},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattlePalaceRules[] =
+{
+ {gText_BattleBasics},
+ {gText_PokemonNature},
+ {gText_PokemonMoves},
+ {gText_Underpowered},
+ {gText_WhenInDanger},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattlePyramidRules[] =
+{
+ {gText_PyramidPokemon},
+ {gText_PyramidTrainers},
+ {gText_PyramidMaze},
+ {gText_BattleBag2},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_BattlePikeRules[] =
+{
+ {gText_PokenavAndBag},
+ {gText_HeldItems},
+ {gText_PokemonOrder},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_GoOnRecordRestRetire[] =
+{
+ {gText_GoOn},
+ {gText_Record2},
+ {gText_Rest},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_GoOnRestRetire[] =
+{
+ {gText_GoOn},
+ {gText_Rest},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_GoOnRecordRetire[] =
+{
+ {gText_GoOn},
+ {gText_Record2},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_GoOnRetire[] =
+{
+ {gText_GoOn},
+ {gText_Retire},
+};
+
+static const struct MenuAction MultichoiceList_TVLati[] =
+{
+ {gText_Red},
+ {gText_Blue},
+};
+
+static const struct MenuAction MultichoiceList_BattleTowerFeelings[] =
+{
+ {gText_IllBattleNow},
+ {gText_IWon},
+ {gText_ILost},
+ {gText_IWontTell},
+};
+
+static const struct MenuAction MultichoiceList_WheresRayquaza[] =
+{
+ {gText_CaveOfOrigin},
+ {gText_MtPyre},
+ {gText_SkyPillar},
+ {gText_DontRemember},
+};
+
+static const struct MenuAction MultichoiceList_SlateportTentRules[] =
+{
+ {gText_BasicRules},
+ {gText_SwapPartners},
+ {gText_SwapNumber},
+ {gText_SwapNotes},
+ {gText_BattlePokemon},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_FallarborTentRules[] =
+{
+ {gText_BattleTrainers},
+ {gText_BattleRules},
+ {gText_JudgeMind},
+ {gText_JudgeSkill},
+ {gText_JudgeBody},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_TagMatchType[] =
+{
+ {gText_NormalTagMatch},
+ {gText_VarietyTagMatch},
+ {gText_UniqueTagMatch},
+ {gText_ExpertTagMatch},
+ {gText_Exit},
+};
+
+static const struct MenuAction MultichoiceList_Exit[] =
+{
+ {gText_Exit},
+};
+
+struct MultichoiceListStruct
+{
+ const struct MenuAction *list;
+ u8 count;
+};
+
+static const struct MultichoiceListStruct sMultichoiceLists[] =
+{
+ [MULTI_BRINEY_ON_DEWFORD] = MULTICHOICE(MultichoiceList_BrineyOnDewford),
+ [MULTI_PC] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_ENTERINFO] = MULTICHOICE(MultichoiceList_EnterInfo),
+ [MULTI_CONTEST_INFO] = MULTICHOICE(MultichoiceList_ContestInfo),
+ [MULTI_CONTEST_TYPE] = MULTICHOICE(MultichoiceList_ContestType),
+ [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),
+ [MULTI_UNUSED_10] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_FRONTIER_PASS_INFO] = MULTICHOICE(MultichoiceList_FrontierPassInfo),
+ [MULTI_BIKE] = MULTICHOICE(MultichoiceList_Bike),
+ [MULTI_STATUS_INFO] = MULTICHOICE(MultichoiceList_StatusInfo),
+ [MULTI_BRINEY_OFF_DEWFORD] = MULTICHOICE(MultichoiceList_BrineyOffDewford),
+ [MULTI_UNUSED_15] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_VIEWED_PAINTINGS] = MULTICHOICE(MultichoiceList_ViewedPaintings),
+ [MULTI_YESNOINFO] = MULTICHOICE(MultichoiceList_YesNoInfo),
+ [MULTI_BATTLE_MODE] = MULTICHOICE(MultichoiceList_BattleMode),
+ [MULTI_UNUSED_19] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_YESNOINFO_2] = MULTICHOICE(MultichoiceList_YesNoInfo2),
+ [MULTI_UNUSED_21] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_UNUSED_22] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_CHALLENGEINFO] = MULTICHOICE(MultichoiceList_ChallengeInfo),
+ [MULTI_LEVEL_MODE] = MULTICHOICE(MultichoiceList_LevelMode),
+ [MULTI_MECHADOLL1_Q1] = MULTICHOICE(MultichoiceList_Mechadoll1_Q1),
+ [MULTI_MECHADOLL1_Q2] = MULTICHOICE(MultichoiceList_Mechadoll1_Q2),
+ [MULTI_MECHADOLL1_Q3] = MULTICHOICE(MultichoiceList_Mechadoll1_Q3),
+ [MULTI_MECHADOLL2_Q1] = MULTICHOICE(MultichoiceList_Mechadoll2_Q1),
+ [MULTI_MECHADOLL2_Q2] = MULTICHOICE(MultichoiceList_Mechadoll2_Q2),
+ [MULTI_MECHADOLL2_Q3] = MULTICHOICE(MultichoiceList_Mechadoll2_Q3),
+ [MULTI_MECHADOLL3_Q1] = MULTICHOICE(MultichoiceList_Mechadoll3_Q1),
+ [MULTI_MECHADOLL3_Q2] = MULTICHOICE(MultichoiceList_Mechadoll3_Q2),
+ [MULTI_MECHADOLL3_Q3] = MULTICHOICE(MultichoiceList_Mechadoll3_Q3),
+ [MULTI_MECHADOLL4_Q1] = MULTICHOICE(MultichoiceList_Mechadoll4_Q1),
+ [MULTI_MECHADOLL4_Q2] = MULTICHOICE(MultichoiceList_Mechadoll4_Q2),
+ [MULTI_MECHADOLL4_Q3] = MULTICHOICE(MultichoiceList_Mechadoll4_Q3),
+ [MULTI_MECHADOLL5_Q1] = MULTICHOICE(MultichoiceList_Mechadoll5_Q1),
+ [MULTI_MECHADOLL5_Q2] = MULTICHOICE(MultichoiceList_Mechadoll5_Q2),
+ [MULTI_MECHADOLL5_Q3] = MULTICHOICE(MultichoiceList_Mechadoll5_Q3),
+ [MULTI_UNUSED_40] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_UNUSED_41] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_VENDING_MACHINE] = MULTICHOICE(MultichoiceList_VendingMachine),
+ [MULTI_MACH_BIKE_INFO] = MULTICHOICE(MultichoiceList_MachBikeInfo),
+ [MULTI_ACRO_BIKE_INFO] = MULTICHOICE(MultichoiceList_AcroBikeInfo),
+ [MULTI_SATISFACTION] = MULTICHOICE(MultichoiceList_Satisfaction),
+ [MULTI_STERN_DEEPSEA] = MULTICHOICE(MultichoiceList_SternDeepSea),
+ [MULTI_UNUSED_ASH_VENDOR] = MULTICHOICE(MultichoiceList_UnusedAshVendor),
+ [MULTI_GAME_CORNER_DOLLS] = MULTICHOICE(MultichoiceList_GameCornerDolls),
+ [MULTI_GAME_CORNER_COINS] = MULTICHOICE(MultichoiceList_GameCornerCoins),
+ [MULTI_HOWS_FISHING] = MULTICHOICE(MultichoiceList_HowsFishing),
+ [MULTI_UNUSED_51] = MULTICHOICE(MultichoiceList_Exit),
+ [MULTI_SSTIDAL_SLATEPORT_WITH_BF] = MULTICHOICE(MultichoiceList_SSTidalSlateportWithBF),
+ [MULTI_SSTIDAL_BATTLE_FRONTIER] = MULTICHOICE(MultichoiceList_SSTidalBattleFrontier),
+ [MULTI_RIGHTLEFT] = MULTICHOICE(MultichoiceList_RightLeft),
+ [MULTI_GAME_CORNER_TMS] = MULTICHOICE(MultichoiceList_GameCornerTMs),
+ [MULTI_SSTIDAL_SLATEPORT_NO_BF] = MULTICHOICE(MultichoiceList_SSTidalSlateportNoBF),
+ [MULTI_FLOORS] = MULTICHOICE(MultichoiceList_Floors),
+ [MULTI_SHARDS_R] = MULTICHOICE(MultichoiceList_ShardsR),
+ [MULTI_SHARDS_Y] = MULTICHOICE(MultichoiceList_ShardsY),
+ [MULTI_SHARDS_RY] = MULTICHOICE(MultichoiceList_ShardsRY),
+ [MULTI_SHARDS_B] = MULTICHOICE(MultichoiceList_ShardsB),
+ [MULTI_SHARDS_RB] = MULTICHOICE(MultichoiceList_ShardsRB),
+ [MULTI_SHARDS_YB] = MULTICHOICE(MultichoiceList_ShardsYB),
+ [MULTI_SHARDS_RYB] = MULTICHOICE(MultichoiceList_ShardsRYB),
+ [MULTI_SHARDS_G] = MULTICHOICE(MultichoiceList_ShardsG),
+ [MULTI_SHARDS_RG] = MULTICHOICE(MultichoiceList_ShardsRG),
+ [MULTI_SHARDS_YG] = MULTICHOICE(MultichoiceList_ShardsYG),
+ [MULTI_SHARDS_RYG] = MULTICHOICE(MultichoiceList_ShardsRYG),
+ [MULTI_SHARDS_BG] = MULTICHOICE(MultichoiceList_ShardsBG),
+ [MULTI_SHARDS_RBG] = MULTICHOICE(MultichoiceList_ShardsRBG),
+ [MULTI_SHARDS_YBG] = MULTICHOICE(MultichoiceList_ShardsYBG),
+ [MULTI_SHARDS_RYBG] = MULTICHOICE(MultichoiceList_ShardsRYBG),
+ [MULTI_TOURNEY_WITH_RECORD] = MULTICHOICE(MultichoiceList_TourneyWithRecord),
+ [MULTI_CABLE_CLUB_NO_RECORD_MIX] = MULTICHOICE(MultichoiceList_LinkServicesNoRecordBerry),
+ [MULTI_WIRELESS_NO_RECORD_BERRY] = MULTICHOICE(MultichoiceList_LinkServicesNoRecordBerry),
+ [MULTI_CABLE_CLUB_WITH_RECORD_MIX] = MULTICHOICE(MultichoiceList_LinkServicesNoBerry),
+ [MULTI_WIRELESS_NO_BERRY] = MULTICHOICE(MultichoiceList_LinkServicesNoBerry),
+ [MULTI_WIRELESS_NO_RECORD] = MULTICHOICE(MultichoiceList_LinkServicesNoRecord),
+ [MULTI_WIRELESS_ALL_SERVICES] = MULTICHOICE(MultichoiceList_LinkServicesAll),
+ [MULTI_WIRELESS_MINIGAME] = MULTICHOICE(MultichoiceList_WirelessMinigame),
+ [MULTI_LINK_LEADER] = MULTICHOICE(MultichoiceList_LinkLeader),
+ [MULTI_CONTEST_RANK] = MULTICHOICE(MultichoiceList_ContestRank),
+ [MULTI_FRONTIER_ITEM_CHOOSE] = MULTICHOICE(MultichoiceList_FrontierItemChoose),
+ [MULTI_LINK_CONTEST_INFO] = MULTICHOICE(MultichoiceList_LinkContestInfo),
+ [MULTI_LINK_CONTEST_MODE] = MULTICHOICE(MultichoiceList_LinkContestMode),
+ [MULTI_FORCED_START_MENU] = MULTICHOICE(MultichoiceList_ForcedStartMenu),
+ [MULTI_FRONTIER_GAMBLER_BET] = MULTICHOICE(MultichoiceList_FrontierGamblerBet),
+ [MULTI_TENT] = MULTICHOICE(MultichoiceList_Tent),
+ [MULTI_UNUSED_SSTIDAL_1] = MULTICHOICE(MultichoiceList_UnusedSSTidal1),
+ [MULTI_UNUSED_SSTIDAL_2] = MULTICHOICE(MultichoiceList_UnusedSSTidal2),
+ [MULTI_UNUSED_SSTIDAL_3] = MULTICHOICE(MultichoiceList_UnusedSSTidal3),
+ [MULTI_UNUSED_SSTIDAL_4] = MULTICHOICE(MultichoiceList_UnusedSSTidal4),
+ [MULTI_FOSSIL] = MULTICHOICE(MultichoiceList_Fossil),
+ [MULTI_YESNO] = MULTICHOICE(MultichoiceList_YesNo),
+ [MULTI_FRONTIER_RULES] = MULTICHOICE(MultichoiceList_FrontierRules),
+ [MULTI_BATTLE_ARENA_RULES] = MULTICHOICE(MultichoiceList_BattleArenaRules),
+ [MULTI_BATTLE_TOWER_RULES] = MULTICHOICE(MultichoiceList_BattleTowerRules),
+ [MULTI_BATTLE_DOME_RULES] = MULTICHOICE(MultichoiceList_BattleDomeRules),
+ [MULTI_BATTLE_FACTORY_RULES] = MULTICHOICE(MultichoiceList_BattleFactoryRules),
+ [MULTI_BATTLE_PALACE_RULES] = MULTICHOICE(MultichoiceList_BattlePalaceRules),
+ [MULTI_BATTLE_PYRAMID_RULES] = MULTICHOICE(MultichoiceList_BattlePyramidRules),
+ [MULTI_BATTLE_PIKE_RULES] = MULTICHOICE(MultichoiceList_BattlePikeRules),
+ [MULTI_GO_ON_RECORD_REST_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRecordRestRetire),
+ [MULTI_GO_ON_REST_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRestRetire),
+ [MULTI_GO_ON_RECORD_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRecordRetire),
+ [MULTI_GO_ON_RETIRE] = MULTICHOICE(MultichoiceList_GoOnRetire),
+ [MULTI_TOURNEY_NO_RECORD] = MULTICHOICE(MultichoiceList_TourneyNoRecord),
+ [MULTI_TV_LATI] = MULTICHOICE(MultichoiceList_TVLati),
+ [MULTI_BATTLE_TOWER_FEELINGS] = MULTICHOICE(MultichoiceList_BattleTowerFeelings),
+ [MULTI_WHERES_RAYQUAZA] = MULTICHOICE(MultichoiceList_WheresRayquaza),
+ [MULTI_SLATEPORT_TENT_RULES] = MULTICHOICE(MultichoiceList_SlateportTentRules),
+ [MULTI_FALLARBOR_TENT_RULES] = MULTICHOICE(MultichoiceList_FallarborTentRules),
+ [MULTI_TAG_MATCH_TYPE] = MULTICHOICE(MultichoiceList_TagMatchType),
+};
+
+const u8 *const gStdStrings[] =
+{
+ [STDSTRING_COOL] = gText_Cool,
+ [STDSTRING_BEAUTY] = gText_Beauty,
+ [STDSTRING_CUTE] = gText_Cute,
+ [STDSTRING_SMART] = gText_Smart,
+ [STDSTRING_TOUGH] = gText_Tough,
+ [STDSTRING_NORMAL] = gText_Normal,
+ [STDSTRING_SUPER] = gText_Super,
+ [STDSTRING_HYPER] = gText_Hyper,
+ [STDSTRING_MASTER] = gText_Master,
+ [STDSTRING_COOL2] = gText_Cool2,
+ [STDSTRING_BEAUTY2] = gText_Beauty2,
+ [STDSTRING_CUTE2] = gText_Cute2,
+ [STDSTRING_SMART2] = gText_Smart2,
+ [STDSTRING_TOUGH2] = gText_Tough2,
+ [STDSTRING_ITEMS] = gText_Items,
+ [STDSTRING_KEYITEMS] = gText_Key_Items,
+ [STDSTRING_POKEBALLS] = gText_Poke_Balls,
+ [STDSTRING_TMHMS] = gText_TMs_Hms,
+ [STDSTRING_BERRIES] = gText_Berries2,
+ [STDSTRING_SINGLE] = gText_Single2,
+ [STDSTRING_DOUBLE] = gText_Double2,
+ [STDSTRING_MULTI] = gText_Multi,
+ [STDSTRING_MULTI_LINK] = gText_MultiLink,
+ [STDSTRING_BATTLE_TOWER] = gText_BattleTower2,
+ [STDSTRING_BATTLE_DOME] = gText_BattleDome,
+ [STDSTRING_BATTLE_FACTORY] = gText_BattleFactory,
+ [STDSTRING_BATTLE_PALACE] = gText_BattlePalace,
+ [STDSTRING_BATTLE_ARENA] = gText_BattleArena,
+ [STDSTRING_BATTLE_PIKE] = gText_BattlePike,
+ [STDSTRING_BATTLE_PYRAMID] = gText_BattlePyramid,
+};
+
+static const u8 sLinkServicesMultichoiceIds[] =
+{
+ MULTI_CABLE_CLUB_NO_RECORD_MIX,
+ MULTI_WIRELESS_NO_RECORD_BERRY,
+ MULTI_CABLE_CLUB_WITH_RECORD_MIX,
+ MULTI_WIRELESS_NO_BERRY,
+ MULTI_WIRELESS_NO_RECORD,
+ MULTI_WIRELESS_ALL_SERVICES
+};
+
+static const u8 *const sPCNameStrings[] =
+{
+ gText_SomeonesPC,
+ gText_LanettesPC,
+ gText_PlayersPC,
+ gText_LogOff,
+};
+
+static const u8 *const sLilycoveSSTidalDestinations[SSTIDAL_SELECTION_COUNT] =
+{
+ [SSTIDAL_SELECTION_SLATEPORT] = gText_SlateportCity,
+ [SSTIDAL_SELECTION_BATTLE_FRONTIER] = gText_BattleFrontier,
+ [SSTIDAL_SELECTION_SOUTHERN_ISLAND] = gText_SouthernIsland,
+ [SSTIDAL_SELECTION_NAVEL_ROCK] = gText_NavelRock,
+ [SSTIDAL_SELECTION_BIRTH_ISLAND] = gText_BirthIsland,
+ [SSTIDAL_SELECTION_FARAWAY_ISLAND] = gText_FarawayIsland,
+ [SSTIDAL_SELECTION_EXIT] = gText_Exit,
+};
+
+static const u8 *const sCableClubOptions_WithRecordMix[] =
+{
+ CableClub_Text_TradeUsingLinkCable,
+ CableClub_Text_BattleUsingLinkCable,
+ CableClub_Text_RecordCornerUsingLinkCable,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sWirelessOptionsNoBerryCrush[] =
+{
+ CableClub_Text_YouMayTradeHere,
+ CableClub_Text_YouMayBattleHere,
+ CableClub_Text_CanMixRecords,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sWirelessOptions_NoRecordMix[] =
+{
+ CableClub_Text_YouMayTradeHere,
+ CableClub_Text_YouMayBattleHere,
+ CableClub_Text_CanMakeBerryPowder,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sWirelessOptions_AllServices[] =
+{
+ CableClub_Text_YouMayTradeHere,
+ CableClub_Text_YouMayBattleHere,
+ CableClub_Text_CanMixRecords,
+ CableClub_Text_CanMakeBerryPowder,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sCableClubOptions_NoRecordMix[] =
+{
+ CableClub_Text_TradeUsingLinkCable,
+ CableClub_Text_BattleUsingLinkCable,
+ CableClub_Text_CancelSelectedItem,
+};
+static const u8 *const sWirelessOptions_NoRecordMixBerryCrush[] =
+{
+ CableClub_Text_YouMayTradeHere,
+ CableClub_Text_YouMayBattleHere,
+ CableClub_Text_CancelSelectedItem,
+};
diff --git a/src/data/text/match_call_messages.h b/src/data/text/match_call_messages.h
index c3015b5a7..6ea3b549f 100644
--- a/src/data/text/match_call_messages.h
+++ b/src/data/text/match_call_messages.h
@@ -1,399 +1,394 @@
-#define MCFLAVOR(name) {gMatchCallFlavorText_##name##_Strategy, \
- gMatchCallFlavorText_##name##_Pokemon, \
- gMatchCallFlavorText_##name##_Intro1, \
- gMatchCallFlavorText_##name##_Intro2}
-
-const u8 gMatchCallFlavorText_AromaLady_Rose_Strategy[] = _("Becalm fighting emotions.");
-const u8 gMatchCallFlavorText_AromaLady_Rose_Pokemon[] = _("Fragrant GRASS POKéMON.");
-const u8 gMatchCallFlavorText_AromaLady_Rose_Intro1[] = _("Soothing aromas make the");
-const u8 gMatchCallFlavorText_AromaLady_Rose_Intro2[] = _("body and mind healthy.");
-
-const u8 gMatchCallFlavorText_RuinManiac_Andres_Strategy[] = _("I'm not very good at this.");
-const u8 gMatchCallFlavorText_RuinManiac_Andres_Pokemon[] = _("Ruin-exploration partners.");
-const u8 gMatchCallFlavorText_RuinManiac_Andres_Intro1[] = _("I am searching for undersea");
-const u8 gMatchCallFlavorText_RuinManiac_Andres_Intro2[] = _("ruins and relics.");
-
-const u8 gMatchCallFlavorText_RuinManiac_Dusty_Strategy[] = _("Overwhelm with power!");
-const u8 gMatchCallFlavorText_RuinManiac_Dusty_Pokemon[] = _("Craggy ROCK POKéMON.");
-const u8 gMatchCallFlavorText_RuinManiac_Dusty_Intro1[] = _("In search of ancient lore,");
-const u8 gMatchCallFlavorText_RuinManiac_Dusty_Intro2[] = _("I travel the world.");
-
-const u8 gMatchCallFlavorText_Tuber_Lola_Strategy[] = _("I'm going to try hard!");
-const u8 gMatchCallFlavorText_Tuber_Lola_Pokemon[] = _("Good swimmer POKéMON.");
-const u8 gMatchCallFlavorText_Tuber_Lola_Intro1[] = _("I wish I could swim without");
-const u8 gMatchCallFlavorText_Tuber_Lola_Intro2[] = _("using an inner tube.");
-
-const u8 gMatchCallFlavorText_Tuber_Ricky_Strategy[] = _("I don't know. I'll try hard.");
-const u8 gMatchCallFlavorText_Tuber_Ricky_Pokemon[] = _("WATER POKéMON are buddies.");
-const u8 gMatchCallFlavorText_Tuber_Ricky_Intro1[] = _("It's not like I can't swim.");
-const u8 gMatchCallFlavorText_Tuber_Ricky_Intro2[] = _("I just like my inner tube.");
-
-const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Strategy[] = _("We split our duties.");
-const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Pokemon[] = _("We like friendly POKéMON.");
-const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Intro1[] = _("We enjoy POKéMON together");
-const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Intro2[] = _("as sister and brother.");
-
-const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Strategy[] = _("I finish with power moves!");
-const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Pokemon[] = _("A mix of different types.");
-const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Intro1[] = _("I aim to become the ultimate");
-const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Intro2[] = _("TRAINER!");
-
-const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Strategy[] = _("Exploit the foe's weakness.");
-const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Pokemon[] = _("Balance is crucial.");
-const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Intro1[] = _("My goal is to become the");
-const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Intro2[] = _("POKéMON CHAMPION.");
-
-const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Strategy[] = _("Upset the opponent.");
-const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Pokemon[] = _("Type doesn't matter.");
-const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Intro1[] = _("I'm a top student at the");
-const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Intro2[] = _("TRAINER'S SCHOOL.");
-
-const u8 gMatchCallFlavorText_HexManiac_Valerie_Strategy[] = _("Slow, steady suffering.");
-const u8 gMatchCallFlavorText_HexManiac_Valerie_Pokemon[] = _("Scary to meet at night.");
-const u8 gMatchCallFlavorText_HexManiac_Valerie_Intro1[] = _("I see things that others");
-const u8 gMatchCallFlavorText_HexManiac_Valerie_Intro2[] = _("can't see...");
-
-const u8 gMatchCallFlavorText_Lady_Cindy_Strategy[] = _("Anything to win.");
-const u8 gMatchCallFlavorText_Lady_Cindy_Pokemon[] = _("Gorgeous type!");
-const u8 gMatchCallFlavorText_Lady_Cindy_Intro1[] = _("I have a pool specially for");
-const u8 gMatchCallFlavorText_Lady_Cindy_Intro2[] = _("my POKéMON at home.");
-
-const u8 gMatchCallFlavorText_Beauty_Thalia_Strategy[] = _("You'll fall under my spell!");
-const u8 gMatchCallFlavorText_Beauty_Thalia_Pokemon[] = _("Mature WATER type.");
-const u8 gMatchCallFlavorText_Beauty_Thalia_Intro1[] = _("I dream of cruising around");
-const u8 gMatchCallFlavorText_Beauty_Thalia_Intro2[] = _("the world on a luxury liner.");
-
-const u8 gMatchCallFlavorText_Beauty_Jessica_Strategy[] = _("I'll lead you astray.");
-const u8 gMatchCallFlavorText_Beauty_Jessica_Pokemon[] = _("Cute, of course.");
-const u8 gMatchCallFlavorText_Beauty_Jessica_Intro1[] = _("I love the SAFARI ZONE.");
-const u8 gMatchCallFlavorText_Beauty_Jessica_Intro2[] = _("I seem to end up there.");
-
-const u8 gMatchCallFlavorText_RichBoy_Winston_Strategy[] = _("Strategy? Who needs it?");
-const u8 gMatchCallFlavorText_RichBoy_Winston_Pokemon[] = _("I spent big money on it!");
-const u8 gMatchCallFlavorText_RichBoy_Winston_Intro1[] = _("I, being rich, sleep in a");
-const u8 gMatchCallFlavorText_RichBoy_Winston_Intro2[] = _("custom POKéMON bed.");
-
-const u8 gMatchCallFlavorText_PokeManiac_Steve_Strategy[] = _("Wrestle down with power.");
-const u8 gMatchCallFlavorText_PokeManiac_Steve_Pokemon[] = _("Took all night to catch.");
-const u8 gMatchCallFlavorText_PokeManiac_Steve_Intro1[] = _("Big, burly, and buff");
-const u8 gMatchCallFlavorText_PokeManiac_Steve_Intro2[] = _("POKéMON are the best...");
-
-const u8 gMatchCallFlavorText_Swimmer_Tony_Strategy[] = _("Ram at full speed!");
-const u8 gMatchCallFlavorText_Swimmer_Tony_Pokemon[] = _("Funky WATER type!");
-const u8 gMatchCallFlavorText_Swimmer_Tony_Intro1[] = _("If I can't be out swimming,");
-const u8 gMatchCallFlavorText_Swimmer_Tony_Intro2[] = _("I'll be pumping weights.");
-
-const u8 gMatchCallFlavorText_BlackBelt_Nob_Strategy[] = _("Grand slam pummeling!");
-const u8 gMatchCallFlavorText_BlackBelt_Nob_Pokemon[] = _("FIGHTING type.");
-const u8 gMatchCallFlavorText_BlackBelt_Nob_Intro1[] = _("Not to brag, but I can bust");
-const u8 gMatchCallFlavorText_BlackBelt_Nob_Intro2[] = _("ten roof tiles!");
-
-const u8 gMatchCallFlavorText_BlackBelt_Koji_Strategy[] = _("Witness karate power!");
-const u8 gMatchCallFlavorText_BlackBelt_Koji_Pokemon[] = _("My partners in training!");
-const u8 gMatchCallFlavorText_BlackBelt_Koji_Intro1[] = _("Let us discuss matters of");
-const u8 gMatchCallFlavorText_BlackBelt_Koji_Intro2[] = _("the world with bare fists!");
-
-const u8 gMatchCallFlavorText_Guitarist_Fernando_Strategy[] = _("Rock to stunning sounds!");
-const u8 gMatchCallFlavorText_Guitarist_Fernando_Pokemon[] = _("Electric-and-sound combo!");
-const u8 gMatchCallFlavorText_Guitarist_Fernando_Intro1[] = _("My compositions will shock");
-const u8 gMatchCallFlavorText_Guitarist_Fernando_Intro2[] = _("you and stun you!");
-
-const u8 gMatchCallFlavorText_Guitarist_Dalton_Strategy[] = _("I'll electrify you!");
-const u8 gMatchCallFlavorText_Guitarist_Dalton_Pokemon[] = _("They're ELECTRIC!");
-const u8 gMatchCallFlavorText_Guitarist_Dalton_Intro1[] = _("I want to make people cry");
-const u8 gMatchCallFlavorText_Guitarist_Dalton_Intro2[] = _("with songs from my heart.");
-
-const u8 gMatchCallFlavorText_Kindler_Bernie_Strategy[] = _("Burn it all down!");
-const u8 gMatchCallFlavorText_Kindler_Bernie_Pokemon[] = _("Burn-inducing POKéMON.");
-const u8 gMatchCallFlavorText_Kindler_Bernie_Intro1[] = _("When you light a campfire,");
-const u8 gMatchCallFlavorText_Kindler_Bernie_Intro2[] = _("be sure there's some water.");
-
-const u8 gMatchCallFlavorText_Camper_Ethan_Strategy[] = _("Hang in and be tenacious!");
-const u8 gMatchCallFlavorText_Camper_Ethan_Pokemon[] = _("I'll raise any POKéMON.");
-const u8 gMatchCallFlavorText_Camper_Ethan_Intro1[] = _("POKéMON raised in the wild");
-const u8 gMatchCallFlavorText_Camper_Ethan_Intro2[] = _("grow strong!");
-
-const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Strategy[] = _("Our love lets us prevail.");
-const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Pokemon[] = _("We've had them for years.");
-const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Intro1[] = _("Married 50 years, we've");
-const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Intro2[] = _("devotedly raised POKéMON.");
-
-const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Strategy[] = _("Attack in waves!");
-const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Pokemon[] = _("BUG POKéMON are cool.");
-const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Intro1[] = _("I go into the forest every");
-const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Intro2[] = _("day to catch BUG POKéMON.");
-
-const u8 gMatchCallFlavorText_Psychic_Cameron_Strategy[] = _("Daze and confuse!");
-const u8 gMatchCallFlavorText_Psychic_Cameron_Pokemon[] = _("Ones with weird powers.");
-const u8 gMatchCallFlavorText_Psychic_Cameron_Intro1[] = _("I can see through exactly");
-const u8 gMatchCallFlavorText_Psychic_Cameron_Intro2[] = _("what you're thinking!");
-
-const u8 gMatchCallFlavorText_Psychic_Jacki_Strategy[] = _("Battle at full power.");
-const u8 gMatchCallFlavorText_Psychic_Jacki_Pokemon[] = _("POKéMON of many mysteries.");
-const u8 gMatchCallFlavorText_Psychic_Jacki_Intro1[] = _("When we spoke, I was really");
-const u8 gMatchCallFlavorText_Psychic_Jacki_Intro2[] = _("using telepathy.");
-
-const u8 gMatchCallFlavorText_Gentleman_Walter_Strategy[] = _("Calm and collected.");
-const u8 gMatchCallFlavorText_Gentleman_Walter_Pokemon[] = _("POKéMON of distinction.");
-const u8 gMatchCallFlavorText_Gentleman_Walter_Intro1[] = _("We enjoy a spot of tea");
-const u8 gMatchCallFlavorText_Gentleman_Walter_Intro2[] = _("every day. It's imported.");
-
-const u8 gMatchCallFlavorText_SchoolKid_Karen_Strategy[] = _("I use my head to battle.");
-const u8 gMatchCallFlavorText_SchoolKid_Karen_Pokemon[] = _("I love any kind of POKéMON!");
-const u8 gMatchCallFlavorText_SchoolKid_Karen_Intro1[] = _("My daddy gives me spending");
-const u8 gMatchCallFlavorText_SchoolKid_Karen_Intro2[] = _("money if I ace a test.");
-
-const u8 gMatchCallFlavorText_SchoolKid_Jerry_Strategy[] = _("My knowledge rules!");
-const u8 gMatchCallFlavorText_SchoolKid_Jerry_Pokemon[] = _("Any smart POKéMON!");
-const u8 gMatchCallFlavorText_SchoolKid_Jerry_Intro1[] = _("I want to be a POKéMON");
-const u8 gMatchCallFlavorText_SchoolKid_Jerry_Intro2[] = _("researcher in the future.");
-
-const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Strategy[] = _("We talk it over first.");
-const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Pokemon[] = _("POKéMON that we both like.");
-const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Intro1[] = _("We're senior and junior");
-const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Intro2[] = _("students into POKéMON!");
-
-const u8 gMatchCallFlavorText_Pokefan_Isabel_Strategy[] = _("Go for it, my dears!");
-const u8 gMatchCallFlavorText_Pokefan_Isabel_Pokemon[] = _("I have no likes or dislikes.");
-const u8 gMatchCallFlavorText_Pokefan_Isabel_Intro1[] = _("While out shopping for");
-const u8 gMatchCallFlavorText_Pokefan_Isabel_Intro2[] = _("supper, I battle too.");
-
-const u8 gMatchCallFlavorText_Pokefan_Miguel_Strategy[] = _("I battle with love!");
-const u8 gMatchCallFlavorText_Pokefan_Miguel_Pokemon[] = _("A POKéMON raised with love!");
-const u8 gMatchCallFlavorText_Pokefan_Miguel_Intro1[] = _("It's important to build");
-const u8 gMatchCallFlavorText_Pokefan_Miguel_Intro2[] = _("trust with your POKéMON.");
-
-const u8 gMatchCallFlavorText_Expert_Timothy_Strategy[] = _("I see through your moves!");
-const u8 gMatchCallFlavorText_Expert_Timothy_Pokemon[] = _("The essence of FIGHTING.");
-const u8 gMatchCallFlavorText_Expert_Timothy_Intro1[] = _("I'm not ready to give way");
-const u8 gMatchCallFlavorText_Expert_Timothy_Intro2[] = _("to the young yet!");
-
-const u8 gMatchCallFlavorText_Expert_Shelby_Strategy[] = _("Attack while defending.");
-const u8 gMatchCallFlavorText_Expert_Shelby_Pokemon[] = _("The FIGHTING type.");
-const u8 gMatchCallFlavorText_Expert_Shelby_Intro1[] = _("Being old, I have my own");
-const u8 gMatchCallFlavorText_Expert_Shelby_Intro2[] = _("style of battling.");
-
-const u8 gMatchCallFlavorText_Youngster_Calvin_Strategy[] = _("I do what I can.");
-const u8 gMatchCallFlavorText_Youngster_Calvin_Pokemon[] = _("I use different types.");
-const u8 gMatchCallFlavorText_Youngster_Calvin_Intro1[] = _("I'm going to keep working");
-const u8 gMatchCallFlavorText_Youngster_Calvin_Intro2[] = _("until I beat a GYM LEADER.");
-
-const u8 gMatchCallFlavorText_Fisherman_Elliot_Strategy[] = _("I battle patiently.");
-const u8 gMatchCallFlavorText_Fisherman_Elliot_Pokemon[] = _("WATER POKéMON to battle!");
-const u8 gMatchCallFlavorText_Fisherman_Elliot_Intro1[] = _("I'm the world's only guy to");
-const u8 gMatchCallFlavorText_Fisherman_Elliot_Intro2[] = _("catch a huge POKéMON!");
-
-const u8 gMatchCallFlavorText_Triathlete_Isaiah_Strategy[] = _("Exploit the environment!");
-const u8 gMatchCallFlavorText_Triathlete_Isaiah_Pokemon[] = _("All hail the WATER type!");
-const u8 gMatchCallFlavorText_Triathlete_Isaiah_Intro1[] = _("I won't be beaten by some");
-const u8 gMatchCallFlavorText_Triathlete_Isaiah_Intro2[] = _("beach bum SWIMMER!");
-
-const u8 gMatchCallFlavorText_Triathlete_Maria_Strategy[] = _("Speed above all!");
-const u8 gMatchCallFlavorText_Triathlete_Maria_Pokemon[] = _("I use a speedy POKéMON.");
-const u8 gMatchCallFlavorText_Triathlete_Maria_Intro1[] = _("A marathon is a challenge");
-const u8 gMatchCallFlavorText_Triathlete_Maria_Intro2[] = _("against your own self.");
-
-const u8 gMatchCallFlavorText_Triathlete_Abigail_Strategy[] = _("Defense is crucial.");
-const u8 gMatchCallFlavorText_Triathlete_Abigail_Pokemon[] = _("My POKéMON is solid.");
-const u8 gMatchCallFlavorText_Triathlete_Abigail_Intro1[] = _("I started this for dieting,");
-const u8 gMatchCallFlavorText_Triathlete_Abigail_Intro2[] = _("but I got right into it.");
-
-const u8 gMatchCallFlavorText_Triathlete_Dylan_Strategy[] = _("Strike before stricken!");
-const u8 gMatchCallFlavorText_Triathlete_Dylan_Pokemon[] = _("A fast-running POKéMON!");
-const u8 gMatchCallFlavorText_Triathlete_Dylan_Intro1[] = _("If you ran and ran, you'd");
-const u8 gMatchCallFlavorText_Triathlete_Dylan_Intro2[] = _("become one with the wind.");
-
-const u8 gMatchCallFlavorText_Triathlete_Katelyn_Strategy[] = _("All-out offensive!");
-const u8 gMatchCallFlavorText_Triathlete_Katelyn_Pokemon[] = _("WATER POKéMON rule!");
-const u8 gMatchCallFlavorText_Triathlete_Katelyn_Intro1[] = _("I must swim over 6 miles");
-const u8 gMatchCallFlavorText_Triathlete_Katelyn_Intro2[] = _("every day.");
-
-const u8 gMatchCallFlavorText_Triathlete_Benjamin_Strategy[] = _("Push and push again!");
-const u8 gMatchCallFlavorText_Triathlete_Benjamin_Pokemon[] = _("The strength of STEEL.");
-const u8 gMatchCallFlavorText_Triathlete_Benjamin_Intro1[] = _("If you're sweating, get");
-const u8 gMatchCallFlavorText_Triathlete_Benjamin_Intro2[] = _("fluids into you regularly.");
-
-const u8 gMatchCallFlavorText_Triathlete_Pablo_Strategy[] = _("Draw the power of WATER.");
-const u8 gMatchCallFlavorText_Triathlete_Pablo_Pokemon[] = _("Toughened WATER POKéMON.");
-const u8 gMatchCallFlavorText_Triathlete_Pablo_Intro1[] = _("Training POKéMON is good,");
-const u8 gMatchCallFlavorText_Triathlete_Pablo_Intro2[] = _("but don't neglect yourself.");
-
-const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Strategy[] = _("It's about POKéMON power!");
-const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Pokemon[] = _("See the power of DRAGONS!");
-const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Intro1[] = _("I'll become legendary as the");
-const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Intro2[] = _("strongest one day!");
-
-const u8 gMatchCallFlavorText_BirdKeeper_Robert_Strategy[] = _("I'll show you my technique!");
-const u8 gMatchCallFlavorText_BirdKeeper_Robert_Pokemon[] = _("Elegantly wheeling BIRDS.");
-const u8 gMatchCallFlavorText_BirdKeeper_Robert_Intro1[] = _("My BIRD POKéMON, deliver my");
-const u8 gMatchCallFlavorText_BirdKeeper_Robert_Intro2[] = _("love to that girl!");
-
-const u8 gMatchCallFlavorText_NinjaBoy_Lao_Strategy[] = _("You'll suffer from poison!");
-const u8 gMatchCallFlavorText_NinjaBoy_Lao_Pokemon[] = _("Poisonous POKéMON.");
-const u8 gMatchCallFlavorText_NinjaBoy_Lao_Intro1[] = _("I undertake training so");
-const u8 gMatchCallFlavorText_NinjaBoy_Lao_Intro2[] = _("that I may become a ninja.");
-
-const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Strategy[] = _("The first strike wins!");
-const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Pokemon[] = _("Speedy FIGHTING type.");
-const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Intro1[] = _("If my POKéMON lose,");
-const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Intro2[] = _("I'll carry on the fight!");
-
-const u8 gMatchCallFlavorText_ParasolLady_Madeline_Strategy[] = _("Go, go, my POKéMON!");
-const u8 gMatchCallFlavorText_ParasolLady_Madeline_Pokemon[] = _("I'll raise anything.");
-const u8 gMatchCallFlavorText_ParasolLady_Madeline_Intro1[] = _("UV rays are your skin's");
-const u8 gMatchCallFlavorText_ParasolLady_Madeline_Intro2[] = _("enemy. Get protected.");
-
-const u8 gMatchCallFlavorText_Swimmer_Jenny_Strategy[] = _("No mercy!");
-const u8 gMatchCallFlavorText_Swimmer_Jenny_Pokemon[] = _("Cute WATER POKéMON.");
-const u8 gMatchCallFlavorText_Swimmer_Jenny_Intro1[] = _("I have too many fans.");
-const u8 gMatchCallFlavorText_Swimmer_Jenny_Intro2[] = _("I was interviewed on TV.");
-
-const u8 gMatchCallFlavorText_Picnicker_Diana_Strategy[] = _("I think about this & that.");
-const u8 gMatchCallFlavorText_Picnicker_Diana_Pokemon[] = _("I like all POKéMON.");
-const u8 gMatchCallFlavorText_Picnicker_Diana_Intro1[] = _("What lies beyond that");
-const u8 gMatchCallFlavorText_Picnicker_Diana_Intro2[] = _("yonder hill?");
-
-const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Strategy[] = _("We battle together!");
-const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Pokemon[] = _("We train together!");
-const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Intro1[] = _("We like the same POKéMON,");
-const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Intro2[] = _("but different desserts.");
-
-const u8 gMatchCallFlavorText_Sailor_Ernest_Strategy[] = _("I force things with power!");
-const u8 gMatchCallFlavorText_Sailor_Ernest_Pokemon[] = _("WATER and FIGHTING types.");
-const u8 gMatchCallFlavorText_Sailor_Ernest_Intro1[] = _("Seamen are rough spirits!");
-const u8 gMatchCallFlavorText_Sailor_Ernest_Intro2[] = _("Any complaints?");
-
-const u8 gMatchCallFlavorText_Sailor_Cory_Strategy[] = _("Up for a fight anytime!");
-const u8 gMatchCallFlavorText_Sailor_Cory_Pokemon[] = _("WATER POKéMON are my faves!");
-const u8 gMatchCallFlavorText_Sailor_Cory_Intro1[] = _("If you want to shout loud,");
-const u8 gMatchCallFlavorText_Sailor_Cory_Intro2[] = _("suck in air with your belly!");
-
-const u8 gMatchCallFlavorText_Collector_Edwin_Strategy[] = _("Protect POKéMON from harm.");
-const u8 gMatchCallFlavorText_Collector_Edwin_Pokemon[] = _("I love rare POKéMON.");
-const u8 gMatchCallFlavorText_Collector_Edwin_Intro1[] = _("I want to collect all the");
-const u8 gMatchCallFlavorText_Collector_Edwin_Intro2[] = _("world's rare POKéMON.");
-
-const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Strategy[] = _("I count on power.");
-const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Pokemon[] = _("POKéMON are my children.");
-const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Intro1[] = _("It takes knowledge and");
-const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Intro2[] = _("love to raise POKéMON.");
-
-const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Strategy[] = _("Full-on attack!");
-const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Pokemon[] = _("Anything. I'll raise it.");
-const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Intro1[] = _("I give them {POKEBLOCK}S for");
-const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Intro2[] = _("going after CONTEST titles.");
-
-const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Strategy[] = _("I raise POKéMON with care.");
-const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Pokemon[] = _("Fun-to-raise POKéMON.");
-const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Intro1[] = _("Treat every POKéMON you");
-const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Intro2[] = _("meet with respect.");
-
-const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Strategy[] = _("I believe in my POKéMON.");
-const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Pokemon[] = _("I like strong POKéMON.");
-const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Intro1[] = _("I'm training for rescue");
-const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Intro2[] = _("work with my POKéMON.");
-
-const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Strategy[] = _("Attack in waves!");
-const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Pokemon[] = _("I use different types.");
-const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Intro1[] = _("Those who destroy nature");
-const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Intro2[] = _("must never be forgiven!");
-
-const u8 gMatchCallFlavorText_Lass_Haley_Strategy[] = _("I'll show you some guts!");
-const u8 gMatchCallFlavorText_Lass_Haley_Pokemon[] = _("Cute POKéMON are my faves!");
-const u8 gMatchCallFlavorText_Lass_Haley_Intro1[] = _("After a battle, I always");
-const u8 gMatchCallFlavorText_Lass_Haley_Intro2[] = _("bathe with my POKéMON.");
-
-const u8 gMatchCallFlavorText_BugCatcher_James_Strategy[] = _("Lightning-fast attack!");
-const u8 gMatchCallFlavorText_BugCatcher_James_Pokemon[] = _("BUG POKéMON are number 1!");
-const u8 gMatchCallFlavorText_BugCatcher_James_Intro1[] = _("If you want to catch BUG");
-const u8 gMatchCallFlavorText_BugCatcher_James_Intro2[] = _("POKéMON, wake up early.");
-
-const u8 gMatchCallFlavorText_Hiker_Trent_Strategy[] = _("I battle with power.");
-const u8 gMatchCallFlavorText_Hiker_Trent_Pokemon[] = _("Hard-bodied POKéMON.");
-const u8 gMatchCallFlavorText_Hiker_Trent_Intro1[] = _("I've been planning a month");
-const u8 gMatchCallFlavorText_Hiker_Trent_Intro2[] = _("for today's hike.");
-
-const u8 gMatchCallFlavorText_Hiker_Sawyer_Strategy[] = _("I like it hot!");
-const u8 gMatchCallFlavorText_Hiker_Sawyer_Pokemon[] = _("Hot POKéMON!");
-const u8 gMatchCallFlavorText_Hiker_Sawyer_Intro1[] = _("As much as I love POKéMON,");
-const u8 gMatchCallFlavorText_Hiker_Sawyer_Intro2[] = _("I surely like hiking!");
-
-const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Strategy[] = _("Lovey-dovey strategy!");
-const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Pokemon[] = _("Lovey-dovey POKéMON!");
-const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Intro1[] = _("We're lovey-dovey!");
-const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Intro2[] = _("Forever lovey-dovey!");
-
-const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Strategy[] = _("We let it all hang out.");
-const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Pokemon[] = _("The 1st POKéMON I caught.");
-const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Intro1[] = _("POKéMON and I have grown");
-const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Intro2[] = _("stronger together.");
-
-const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Strategy[] = _("ROCK-type power attack.");
-const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Pokemon[] = _("I prefer rock-hard POKéMON.");
-const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Intro1[] = _("A LEADER of a big GYM bears");
-const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Intro2[] = _("a lot of responsibility.");
-
-const u8 gMatchCallFlavorText_TheBigHit_Brawly_Strategy[] = _("Direct physical action!");
-const u8 gMatchCallFlavorText_TheBigHit_Brawly_Pokemon[] = _("FIGHTING POKéMON rule!");
-const u8 gMatchCallFlavorText_TheBigHit_Brawly_Intro1[] = _("The world awaits me as the");
-const u8 gMatchCallFlavorText_TheBigHit_Brawly_Intro2[] = _("next big wave!");
-
-const u8 gMatchCallFlavorText_SwellShock_Wattson_Strategy[] = _("I choose to electrify.");
-const u8 gMatchCallFlavorText_SwellShock_Wattson_Pokemon[] = _("Get shocked by electricity!");
-const u8 gMatchCallFlavorText_SwellShock_Wattson_Intro1[] = _("One must never throw a");
-const u8 gMatchCallFlavorText_SwellShock_Wattson_Intro2[] = _("match. Even I must not.");
-
-const u8 gMatchCallFlavorText_PassionBurn_Flannery_Strategy[] = _("Battle aggressively.");
-const u8 gMatchCallFlavorText_PassionBurn_Flannery_Pokemon[] = _("Burn with passion!");
-const u8 gMatchCallFlavorText_PassionBurn_Flannery_Intro1[] = _("Completely wash away daily");
-const u8 gMatchCallFlavorText_PassionBurn_Flannery_Intro2[] = _("fatigue in hot springs!");
-
-const u8 gMatchCallFlavorText_ReliableOne_Dad_Strategy[] = _("I flexibly adapt my style.");
-const u8 gMatchCallFlavorText_ReliableOne_Dad_Pokemon[] = _("Grown in a balanced manner.");
-const u8 gMatchCallFlavorText_ReliableOne_Dad_Intro1[] = _("I walk the 30 minutes from");
-const u8 gMatchCallFlavorText_ReliableOne_Dad_Intro2[] = _("home to here every day.");
-
-const u8 gMatchCallFlavorText_SkyTamer_Winona_Strategy[] = _("I take advantage of speed.");
-const u8 gMatchCallFlavorText_SkyTamer_Winona_Pokemon[] = _("Graceful sky dancers.");
-const u8 gMatchCallFlavorText_SkyTamer_Winona_Intro1[] = _("The ultimate would be to");
-const u8 gMatchCallFlavorText_SkyTamer_Winona_Intro2[] = _("live as one with nature.");
-
-const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Strategy[] = _("We battle in cooperation.");
-const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Pokemon[] = _("Always friendly POKéMON.");
-const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Intro1[] = _("Papa has trouble telling");
-const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Intro2[] = _("the two of us apart!");
-
-const u8 gMatchCallFlavorText_DandyCharm_Juan_Strategy[] = _("I use splendid waterpower.");
-const u8 gMatchCallFlavorText_DandyCharm_Juan_Pokemon[] = _("POKéMON of elegance!");
-const u8 gMatchCallFlavorText_DandyCharm_Juan_Intro1[] = _("The adulation of beautiful");
-const u8 gMatchCallFlavorText_DandyCharm_Juan_Intro2[] = _("ladies fills me with energy!");
-
-const u8 gMatchCallFlavorText_EliteFour_Sidney_Strategy[] = _("Offense over defense!");
-const u8 gMatchCallFlavorText_EliteFour_Sidney_Pokemon[] = _("The DARK side's beauties.");
-const u8 gMatchCallFlavorText_EliteFour_Sidney_Intro1[] = _("They said I was a punk, but");
-const u8 gMatchCallFlavorText_EliteFour_Sidney_Intro2[] = _("I'm one of the ELITE FOUR!");
-
-const u8 gMatchCallFlavorText_EliteFour_Phoebe_Strategy[] = _("Confuse and confound.");
-const u8 gMatchCallFlavorText_EliteFour_Phoebe_Pokemon[] = _("There's nothing definite.");
-const u8 gMatchCallFlavorText_EliteFour_Phoebe_Intro1[] = _("I wonder how my grandma at");
-const u8 gMatchCallFlavorText_EliteFour_Phoebe_Intro2[] = _("MT. PYRE is doing?");
-
-const u8 gMatchCallFlavorText_EliteFour_Glacia_Strategy[] = _("I use items for help.");
-const u8 gMatchCallFlavorText_EliteFour_Glacia_Pokemon[] = _("Flaming passion in icy cold!");
-const u8 gMatchCallFlavorText_EliteFour_Glacia_Intro1[] = _("The ICE type can be better");
-const u8 gMatchCallFlavorText_EliteFour_Glacia_Intro2[] = _("trained in this hot land.");
-
-const u8 gMatchCallFlavorText_EliteFour_Drake_Strategy[] = _("Harness strong abilities.");
-const u8 gMatchCallFlavorText_EliteFour_Drake_Pokemon[] = _("The raw power of DRAGONS!");
-const u8 gMatchCallFlavorText_EliteFour_Drake_Intro1[] = _("I dedicate myself to the");
-const u8 gMatchCallFlavorText_EliteFour_Drake_Intro2[] = _("POKéMON that saved me.");
-
-const u8 gMatchCallFlavorText_Champion_Wallace_Strategy[] = _("Dignity and respect.");
-const u8 gMatchCallFlavorText_Champion_Wallace_Pokemon[] = _("I prefer POKéMON of grace.");
-const u8 gMatchCallFlavorText_Champion_Wallace_Intro1[] = _("I represent beauty as");
-const u8 gMatchCallFlavorText_Champion_Wallace_Intro2[] = _("well as intelligence.");
-
-const u8 *const gMatchCallMessages[][4] =
+const u8 gText_MatchCallAromaLady_Rose_Strategy[] = _("Becalm fighting emotions.");
+const u8 gText_MatchCallAromaLady_Rose_Pokemon[] = _("Fragrant GRASS POKéMON.");
+const u8 gText_MatchCallAromaLady_Rose_Intro1[] = _("Soothing aromas make the");
+const u8 gText_MatchCallAromaLady_Rose_Intro2[] = _("body and mind healthy.");
+
+const u8 gText_MatchCallRuinManiac_Andres_Strategy[] = _("I'm not very good at this.");
+const u8 gText_MatchCallRuinManiac_Andres_Pokemon[] = _("Ruin-exploration partners.");
+const u8 gText_MatchCallRuinManiac_Andres_Intro1[] = _("I am searching for undersea");
+const u8 gText_MatchCallRuinManiac_Andres_Intro2[] = _("ruins and relics.");
+
+const u8 gText_MatchCallRuinManiac_Dusty_Strategy[] = _("Overwhelm with power!");
+const u8 gText_MatchCallRuinManiac_Dusty_Pokemon[] = _("Craggy ROCK POKéMON.");
+const u8 gText_MatchCallRuinManiac_Dusty_Intro1[] = _("In search of ancient lore,");
+const u8 gText_MatchCallRuinManiac_Dusty_Intro2[] = _("I travel the world.");
+
+const u8 gText_MatchCallTuber_Lola_Strategy[] = _("I'm going to try hard!");
+const u8 gText_MatchCallTuber_Lola_Pokemon[] = _("Good swimmer POKéMON.");
+const u8 gText_MatchCallTuber_Lola_Intro1[] = _("I wish I could swim without");
+const u8 gText_MatchCallTuber_Lola_Intro2[] = _("using an inner tube.");
+
+const u8 gText_MatchCallTuber_Ricky_Strategy[] = _("I don't know. I'll try hard.");
+const u8 gText_MatchCallTuber_Ricky_Pokemon[] = _("WATER POKéMON are buddies.");
+const u8 gText_MatchCallTuber_Ricky_Intro1[] = _("It's not like I can't swim.");
+const u8 gText_MatchCallTuber_Ricky_Intro2[] = _("I just like my inner tube.");
+
+const u8 gText_MatchCallSisAndBro_LilaAndRoy_Strategy[] = _("We split our duties.");
+const u8 gText_MatchCallSisAndBro_LilaAndRoy_Pokemon[] = _("We like friendly POKéMON.");
+const u8 gText_MatchCallSisAndBro_LilaAndRoy_Intro1[] = _("We enjoy POKéMON together");
+const u8 gText_MatchCallSisAndBro_LilaAndRoy_Intro2[] = _("as sister and brother.");
+
+const u8 gText_MatchCallCooltrainer_Cristin_Strategy[] = _("I finish with power moves!");
+const u8 gText_MatchCallCooltrainer_Cristin_Pokemon[] = _("A mix of different types.");
+const u8 gText_MatchCallCooltrainer_Cristin_Intro1[] = _("I aim to become the ultimate");
+const u8 gText_MatchCallCooltrainer_Cristin_Intro2[] = _("TRAINER!");
+
+const u8 gText_MatchCallCooltrainer_Brooke_Strategy[] = _("Exploit the foe's weakness.");
+const u8 gText_MatchCallCooltrainer_Brooke_Pokemon[] = _("Balance is crucial.");
+const u8 gText_MatchCallCooltrainer_Brooke_Intro1[] = _("My goal is to become the");
+const u8 gText_MatchCallCooltrainer_Brooke_Intro2[] = _("POKéMON CHAMPION.");
+
+const u8 gText_MatchCallCooltrainer_Wilton_Strategy[] = _("Upset the opponent.");
+const u8 gText_MatchCallCooltrainer_Wilton_Pokemon[] = _("Type doesn't matter.");
+const u8 gText_MatchCallCooltrainer_Wilton_Intro1[] = _("I'm a top student at the");
+const u8 gText_MatchCallCooltrainer_Wilton_Intro2[] = _("TRAINER'S SCHOOL.");
+
+const u8 gText_MatchCallHexManiac_Valerie_Strategy[] = _("Slow, steady suffering.");
+const u8 gText_MatchCallHexManiac_Valerie_Pokemon[] = _("Scary to meet at night.");
+const u8 gText_MatchCallHexManiac_Valerie_Intro1[] = _("I see things that others");
+const u8 gText_MatchCallHexManiac_Valerie_Intro2[] = _("can't see...");
+
+const u8 gText_MatchCallLady_Cindy_Strategy[] = _("Anything to win.");
+const u8 gText_MatchCallLady_Cindy_Pokemon[] = _("Gorgeous type!");
+const u8 gText_MatchCallLady_Cindy_Intro1[] = _("I have a pool specially for");
+const u8 gText_MatchCallLady_Cindy_Intro2[] = _("my POKéMON at home.");
+
+const u8 gText_MatchCallBeauty_Thalia_Strategy[] = _("You'll fall under my spell!");
+const u8 gText_MatchCallBeauty_Thalia_Pokemon[] = _("Mature WATER type.");
+const u8 gText_MatchCallBeauty_Thalia_Intro1[] = _("I dream of cruising around");
+const u8 gText_MatchCallBeauty_Thalia_Intro2[] = _("the world on a luxury liner.");
+
+const u8 gText_MatchCallBeauty_Jessica_Strategy[] = _("I'll lead you astray.");
+const u8 gText_MatchCallBeauty_Jessica_Pokemon[] = _("Cute, of course.");
+const u8 gText_MatchCallBeauty_Jessica_Intro1[] = _("I love the SAFARI ZONE.");
+const u8 gText_MatchCallBeauty_Jessica_Intro2[] = _("I seem to end up there.");
+
+const u8 gText_MatchCallRichBoy_Winston_Strategy[] = _("Strategy? Who needs it?");
+const u8 gText_MatchCallRichBoy_Winston_Pokemon[] = _("I spent big money on it!");
+const u8 gText_MatchCallRichBoy_Winston_Intro1[] = _("I, being rich, sleep in a");
+const u8 gText_MatchCallRichBoy_Winston_Intro2[] = _("custom POKéMON bed.");
+
+const u8 gText_MatchCallPokeManiac_Steve_Strategy[] = _("Wrestle down with power.");
+const u8 gText_MatchCallPokeManiac_Steve_Pokemon[] = _("Took all night to catch.");
+const u8 gText_MatchCallPokeManiac_Steve_Intro1[] = _("Big, burly, and buff");
+const u8 gText_MatchCallPokeManiac_Steve_Intro2[] = _("POKéMON are the best...");
+
+const u8 gText_MatchCallSwimmer_Tony_Strategy[] = _("Ram at full speed!");
+const u8 gText_MatchCallSwimmer_Tony_Pokemon[] = _("Funky WATER type!");
+const u8 gText_MatchCallSwimmer_Tony_Intro1[] = _("If I can't be out swimming,");
+const u8 gText_MatchCallSwimmer_Tony_Intro2[] = _("I'll be pumping weights.");
+
+const u8 gText_MatchCallBlackBelt_Nob_Strategy[] = _("Grand slam pummeling!");
+const u8 gText_MatchCallBlackBelt_Nob_Pokemon[] = _("FIGHTING type.");
+const u8 gText_MatchCallBlackBelt_Nob_Intro1[] = _("Not to brag, but I can bust");
+const u8 gText_MatchCallBlackBelt_Nob_Intro2[] = _("ten roof tiles!");
+
+const u8 gText_MatchCallBlackBelt_Koji_Strategy[] = _("Witness karate power!");
+const u8 gText_MatchCallBlackBelt_Koji_Pokemon[] = _("My partners in training!");
+const u8 gText_MatchCallBlackBelt_Koji_Intro1[] = _("Let us discuss matters of");
+const u8 gText_MatchCallBlackBelt_Koji_Intro2[] = _("the world with bare fists!");
+
+const u8 gText_MatchCallGuitarist_Fernando_Strategy[] = _("Rock to stunning sounds!");
+const u8 gText_MatchCallGuitarist_Fernando_Pokemon[] = _("Electric-and-sound combo!");
+const u8 gText_MatchCallGuitarist_Fernando_Intro1[] = _("My compositions will shock");
+const u8 gText_MatchCallGuitarist_Fernando_Intro2[] = _("you and stun you!");
+
+const u8 gText_MatchCallGuitarist_Dalton_Strategy[] = _("I'll electrify you!");
+const u8 gText_MatchCallGuitarist_Dalton_Pokemon[] = _("They're ELECTRIC!");
+const u8 gText_MatchCallGuitarist_Dalton_Intro1[] = _("I want to make people cry");
+const u8 gText_MatchCallGuitarist_Dalton_Intro2[] = _("with songs from my heart.");
+
+const u8 gText_MatchCallKindler_Bernie_Strategy[] = _("Burn it all down!");
+const u8 gText_MatchCallKindler_Bernie_Pokemon[] = _("Burn-inducing POKéMON.");
+const u8 gText_MatchCallKindler_Bernie_Intro1[] = _("When you light a campfire,");
+const u8 gText_MatchCallKindler_Bernie_Intro2[] = _("be sure there's some water.");
+
+const u8 gText_MatchCallCamper_Ethan_Strategy[] = _("Hang in and be tenacious!");
+const u8 gText_MatchCallCamper_Ethan_Pokemon[] = _("I'll raise any POKéMON.");
+const u8 gText_MatchCallCamper_Ethan_Intro1[] = _("POKéMON raised in the wild");
+const u8 gText_MatchCallCamper_Ethan_Intro2[] = _("grow strong!");
+
+const u8 gText_MatchCallOldCouple_JohnAndJay_Strategy[] = _("Our love lets us prevail.");
+const u8 gText_MatchCallOldCouple_JohnAndJay_Pokemon[] = _("We've had them for years.");
+const u8 gText_MatchCallOldCouple_JohnAndJay_Intro1[] = _("Married 50 years, we've");
+const u8 gText_MatchCallOldCouple_JohnAndJay_Intro2[] = _("devotedly raised POKéMON.");
+
+const u8 gText_MatchCallBugManiac_Jeffrey_Strategy[] = _("Attack in waves!");
+const u8 gText_MatchCallBugManiac_Jeffrey_Pokemon[] = _("BUG POKéMON are cool.");
+const u8 gText_MatchCallBugManiac_Jeffrey_Intro1[] = _("I go into the forest every");
+const u8 gText_MatchCallBugManiac_Jeffrey_Intro2[] = _("day to catch BUG POKéMON.");
+
+const u8 gText_MatchCallPsychic_Cameron_Strategy[] = _("Daze and confuse!");
+const u8 gText_MatchCallPsychic_Cameron_Pokemon[] = _("Ones with weird powers.");
+const u8 gText_MatchCallPsychic_Cameron_Intro1[] = _("I can see through exactly");
+const u8 gText_MatchCallPsychic_Cameron_Intro2[] = _("what you're thinking!");
+
+const u8 gText_MatchCallPsychic_Jacki_Strategy[] = _("Battle at full power.");
+const u8 gText_MatchCallPsychic_Jacki_Pokemon[] = _("POKéMON of many mysteries.");
+const u8 gText_MatchCallPsychic_Jacki_Intro1[] = _("When we spoke, I was really");
+const u8 gText_MatchCallPsychic_Jacki_Intro2[] = _("using telepathy.");
+
+const u8 gText_MatchCallGentleman_Walter_Strategy[] = _("Calm and collected.");
+const u8 gText_MatchCallGentleman_Walter_Pokemon[] = _("POKéMON of distinction.");
+const u8 gText_MatchCallGentleman_Walter_Intro1[] = _("We enjoy a spot of tea");
+const u8 gText_MatchCallGentleman_Walter_Intro2[] = _("every day. It's imported.");
+
+const u8 gText_MatchCallSchoolKid_Karen_Strategy[] = _("I use my head to battle.");
+const u8 gText_MatchCallSchoolKid_Karen_Pokemon[] = _("I love any kind of POKéMON!");
+const u8 gText_MatchCallSchoolKid_Karen_Intro1[] = _("My daddy gives me spending");
+const u8 gText_MatchCallSchoolKid_Karen_Intro2[] = _("money if I ace a test.");
+
+const u8 gText_MatchCallSchoolKid_Jerry_Strategy[] = _("My knowledge rules!");
+const u8 gText_MatchCallSchoolKid_Jerry_Pokemon[] = _("Any smart POKéMON!");
+const u8 gText_MatchCallSchoolKid_Jerry_Intro1[] = _("I want to be a POKéMON");
+const u8 gText_MatchCallSchoolKid_Jerry_Intro2[] = _("researcher in the future.");
+
+const u8 gText_MatchCallSrAndJr_AnnaAndMeg_Strategy[] = _("We talk it over first.");
+const u8 gText_MatchCallSrAndJr_AnnaAndMeg_Pokemon[] = _("POKéMON that we both like.");
+const u8 gText_MatchCallSrAndJr_AnnaAndMeg_Intro1[] = _("We're senior and junior");
+const u8 gText_MatchCallSrAndJr_AnnaAndMeg_Intro2[] = _("students into POKéMON!");
+
+const u8 gText_MatchCallPokefan_Isabel_Strategy[] = _("Go for it, my dears!");
+const u8 gText_MatchCallPokefan_Isabel_Pokemon[] = _("I have no likes or dislikes.");
+const u8 gText_MatchCallPokefan_Isabel_Intro1[] = _("While out shopping for");
+const u8 gText_MatchCallPokefan_Isabel_Intro2[] = _("supper, I battle too.");
+
+const u8 gText_MatchCallPokefan_Miguel_Strategy[] = _("I battle with love!");
+const u8 gText_MatchCallPokefan_Miguel_Pokemon[] = _("A POKéMON raised with love!");
+const u8 gText_MatchCallPokefan_Miguel_Intro1[] = _("It's important to build");
+const u8 gText_MatchCallPokefan_Miguel_Intro2[] = _("trust with your POKéMON.");
+
+const u8 gText_MatchCallExpert_Timothy_Strategy[] = _("I see through your moves!");
+const u8 gText_MatchCallExpert_Timothy_Pokemon[] = _("The essence of FIGHTING.");
+const u8 gText_MatchCallExpert_Timothy_Intro1[] = _("I'm not ready to give way");
+const u8 gText_MatchCallExpert_Timothy_Intro2[] = _("to the young yet!");
+
+const u8 gText_MatchCallExpert_Shelby_Strategy[] = _("Attack while defending.");
+const u8 gText_MatchCallExpert_Shelby_Pokemon[] = _("The FIGHTING type.");
+const u8 gText_MatchCallExpert_Shelby_Intro1[] = _("Being old, I have my own");
+const u8 gText_MatchCallExpert_Shelby_Intro2[] = _("style of battling.");
+
+const u8 gText_MatchCallYoungster_Calvin_Strategy[] = _("I do what I can.");
+const u8 gText_MatchCallYoungster_Calvin_Pokemon[] = _("I use different types.");
+const u8 gText_MatchCallYoungster_Calvin_Intro1[] = _("I'm going to keep working");
+const u8 gText_MatchCallYoungster_Calvin_Intro2[] = _("until I beat a GYM LEADER.");
+
+const u8 gText_MatchCallFisherman_Elliot_Strategy[] = _("I battle patiently.");
+const u8 gText_MatchCallFisherman_Elliot_Pokemon[] = _("WATER POKéMON to battle!");
+const u8 gText_MatchCallFisherman_Elliot_Intro1[] = _("I'm the world's only guy to");
+const u8 gText_MatchCallFisherman_Elliot_Intro2[] = _("catch a huge POKéMON!");
+
+const u8 gText_MatchCallTriathlete_Isaiah_Strategy[] = _("Exploit the environment!");
+const u8 gText_MatchCallTriathlete_Isaiah_Pokemon[] = _("All hail the WATER type!");
+const u8 gText_MatchCallTriathlete_Isaiah_Intro1[] = _("I won't be beaten by some");
+const u8 gText_MatchCallTriathlete_Isaiah_Intro2[] = _("beach bum SWIMMER!");
+
+const u8 gText_MatchCallTriathlete_Maria_Strategy[] = _("Speed above all!");
+const u8 gText_MatchCallTriathlete_Maria_Pokemon[] = _("I use a speedy POKéMON.");
+const u8 gText_MatchCallTriathlete_Maria_Intro1[] = _("A marathon is a challenge");
+const u8 gText_MatchCallTriathlete_Maria_Intro2[] = _("against your own self.");
+
+const u8 gText_MatchCallTriathlete_Abigail_Strategy[] = _("Defense is crucial.");
+const u8 gText_MatchCallTriathlete_Abigail_Pokemon[] = _("My POKéMON is solid.");
+const u8 gText_MatchCallTriathlete_Abigail_Intro1[] = _("I started this for dieting,");
+const u8 gText_MatchCallTriathlete_Abigail_Intro2[] = _("but I got right into it.");
+
+const u8 gText_MatchCallTriathlete_Dylan_Strategy[] = _("Strike before stricken!");
+const u8 gText_MatchCallTriathlete_Dylan_Pokemon[] = _("A fast-running POKéMON!");
+const u8 gText_MatchCallTriathlete_Dylan_Intro1[] = _("If you ran and ran, you'd");
+const u8 gText_MatchCallTriathlete_Dylan_Intro2[] = _("become one with the wind.");
+
+const u8 gText_MatchCallTriathlete_Katelyn_Strategy[] = _("All-out offensive!");
+const u8 gText_MatchCallTriathlete_Katelyn_Pokemon[] = _("WATER POKéMON rule!");
+const u8 gText_MatchCallTriathlete_Katelyn_Intro1[] = _("I must swim over 6 miles");
+const u8 gText_MatchCallTriathlete_Katelyn_Intro2[] = _("every day.");
+
+const u8 gText_MatchCallTriathlete_Benjamin_Strategy[] = _("Push and push again!");
+const u8 gText_MatchCallTriathlete_Benjamin_Pokemon[] = _("The strength of STEEL.");
+const u8 gText_MatchCallTriathlete_Benjamin_Intro1[] = _("If you're sweating, get");
+const u8 gText_MatchCallTriathlete_Benjamin_Intro2[] = _("fluids into you regularly.");
+
+const u8 gText_MatchCallTriathlete_Pablo_Strategy[] = _("Draw the power of WATER.");
+const u8 gText_MatchCallTriathlete_Pablo_Pokemon[] = _("Toughened WATER POKéMON.");
+const u8 gText_MatchCallTriathlete_Pablo_Intro1[] = _("Training POKéMON is good,");
+const u8 gText_MatchCallTriathlete_Pablo_Intro2[] = _("but don't neglect yourself.");
+
+const u8 gText_MatchCallDragonTamer_Nicolas_Strategy[] = _("It's about POKéMON power!");
+const u8 gText_MatchCallDragonTamer_Nicolas_Pokemon[] = _("See the power of DRAGONS!");
+const u8 gText_MatchCallDragonTamer_Nicolas_Intro1[] = _("I'll become legendary as the");
+const u8 gText_MatchCallDragonTamer_Nicolas_Intro2[] = _("strongest one day!");
+
+const u8 gText_MatchCallBirdKeeper_Robert_Strategy[] = _("I'll show you my technique!");
+const u8 gText_MatchCallBirdKeeper_Robert_Pokemon[] = _("Elegantly wheeling BIRDS.");
+const u8 gText_MatchCallBirdKeeper_Robert_Intro1[] = _("My BIRD POKéMON, deliver my");
+const u8 gText_MatchCallBirdKeeper_Robert_Intro2[] = _("love to that girl!");
+
+const u8 gText_MatchCallNinjaBoy_Lao_Strategy[] = _("You'll suffer from poison!");
+const u8 gText_MatchCallNinjaBoy_Lao_Pokemon[] = _("Poisonous POKéMON.");
+const u8 gText_MatchCallNinjaBoy_Lao_Intro1[] = _("I undertake training so");
+const u8 gText_MatchCallNinjaBoy_Lao_Intro2[] = _("that I may become a ninja.");
+
+const u8 gText_MatchCallBattleGirl_Cyndy_Strategy[] = _("The first strike wins!");
+const u8 gText_MatchCallBattleGirl_Cyndy_Pokemon[] = _("Speedy FIGHTING type.");
+const u8 gText_MatchCallBattleGirl_Cyndy_Intro1[] = _("If my POKéMON lose,");
+const u8 gText_MatchCallBattleGirl_Cyndy_Intro2[] = _("I'll carry on the fight!");
+
+const u8 gText_MatchCallParasolLady_Madeline_Strategy[] = _("Go, go, my POKéMON!");
+const u8 gText_MatchCallParasolLady_Madeline_Pokemon[] = _("I'll raise anything.");
+const u8 gText_MatchCallParasolLady_Madeline_Intro1[] = _("UV rays are your skin's");
+const u8 gText_MatchCallParasolLady_Madeline_Intro2[] = _("enemy. Get protected.");
+
+const u8 gText_MatchCallSwimmer_Jenny_Strategy[] = _("No mercy!");
+const u8 gText_MatchCallSwimmer_Jenny_Pokemon[] = _("Cute WATER POKéMON.");
+const u8 gText_MatchCallSwimmer_Jenny_Intro1[] = _("I have too many fans.");
+const u8 gText_MatchCallSwimmer_Jenny_Intro2[] = _("I was interviewed on TV.");
+
+const u8 gText_MatchCallPicnicker_Diana_Strategy[] = _("I think about this & that.");
+const u8 gText_MatchCallPicnicker_Diana_Pokemon[] = _("I like all POKéMON.");
+const u8 gText_MatchCallPicnicker_Diana_Intro1[] = _("What lies beyond that");
+const u8 gText_MatchCallPicnicker_Diana_Intro2[] = _("yonder hill?");
+
+const u8 gText_MatchCallTwins_AmyAndLiv_Strategy[] = _("We battle together!");
+const u8 gText_MatchCallTwins_AmyAndLiv_Pokemon[] = _("We train together!");
+const u8 gText_MatchCallTwins_AmyAndLiv_Intro1[] = _("We like the same POKéMON,");
+const u8 gText_MatchCallTwins_AmyAndLiv_Intro2[] = _("but different desserts.");
+
+const u8 gText_MatchCallSailor_Ernest_Strategy[] = _("I force things with power!");
+const u8 gText_MatchCallSailor_Ernest_Pokemon[] = _("WATER and FIGHTING types.");
+const u8 gText_MatchCallSailor_Ernest_Intro1[] = _("Seamen are rough spirits!");
+const u8 gText_MatchCallSailor_Ernest_Intro2[] = _("Any complaints?");
+
+const u8 gText_MatchCallSailor_Cory_Strategy[] = _("Up for a fight anytime!");
+const u8 gText_MatchCallSailor_Cory_Pokemon[] = _("WATER POKéMON are my faves!");
+const u8 gText_MatchCallSailor_Cory_Intro1[] = _("If you want to shout loud,");
+const u8 gText_MatchCallSailor_Cory_Intro2[] = _("suck in air with your belly!");
+
+const u8 gText_MatchCallCollector_Edwin_Strategy[] = _("Protect POKéMON from harm.");
+const u8 gText_MatchCallCollector_Edwin_Pokemon[] = _("I love rare POKéMON.");
+const u8 gText_MatchCallCollector_Edwin_Intro1[] = _("I want to collect all the");
+const u8 gText_MatchCallCollector_Edwin_Intro2[] = _("world's rare POKéMON.");
+
+const u8 gText_MatchCallPkmnBreeder_Lydia_Strategy[] = _("I count on power.");
+const u8 gText_MatchCallPkmnBreeder_Lydia_Pokemon[] = _("POKéMON are my children.");
+const u8 gText_MatchCallPkmnBreeder_Lydia_Intro1[] = _("It takes knowledge and");
+const u8 gText_MatchCallPkmnBreeder_Lydia_Intro2[] = _("love to raise POKéMON.");
+
+const u8 gText_MatchCallPkmnBreeder_Isaac_Strategy[] = _("Full-on attack!");
+const u8 gText_MatchCallPkmnBreeder_Isaac_Pokemon[] = _("Anything. I'll raise it.");
+const u8 gText_MatchCallPkmnBreeder_Isaac_Intro1[] = _("I give them {POKEBLOCK}S for");
+const u8 gText_MatchCallPkmnBreeder_Isaac_Intro2[] = _("going after CONTEST titles.");
+
+const u8 gText_MatchCallPkmnBreeder_Gabrielle_Strategy[] = _("I raise POKéMON with care.");
+const u8 gText_MatchCallPkmnBreeder_Gabrielle_Pokemon[] = _("Fun-to-raise POKéMON.");
+const u8 gText_MatchCallPkmnBreeder_Gabrielle_Intro1[] = _("Treat every POKéMON you");
+const u8 gText_MatchCallPkmnBreeder_Gabrielle_Intro2[] = _("meet with respect.");
+
+const u8 gText_MatchCallPkmnRanger_Catherine_Strategy[] = _("I believe in my POKéMON.");
+const u8 gText_MatchCallPkmnRanger_Catherine_Pokemon[] = _("I like strong POKéMON.");
+const u8 gText_MatchCallPkmnRanger_Catherine_Intro1[] = _("I'm training for rescue");
+const u8 gText_MatchCallPkmnRanger_Catherine_Intro2[] = _("work with my POKéMON.");
+
+const u8 gText_MatchCallPkmnRanger_Jackson_Strategy[] = _("Attack in waves!");
+const u8 gText_MatchCallPkmnRanger_Jackson_Pokemon[] = _("I use different types.");
+const u8 gText_MatchCallPkmnRanger_Jackson_Intro1[] = _("Those who destroy nature");
+const u8 gText_MatchCallPkmnRanger_Jackson_Intro2[] = _("must never be forgiven!");
+
+const u8 gText_MatchCallLass_Haley_Strategy[] = _("I'll show you some guts!");
+const u8 gText_MatchCallLass_Haley_Pokemon[] = _("Cute POKéMON are my faves!");
+const u8 gText_MatchCallLass_Haley_Intro1[] = _("After a battle, I always");
+const u8 gText_MatchCallLass_Haley_Intro2[] = _("bathe with my POKéMON.");
+
+const u8 gText_MatchCallBugCatcher_James_Strategy[] = _("Lightning-fast attack!");
+const u8 gText_MatchCallBugCatcher_James_Pokemon[] = _("BUG POKéMON are number 1!");
+const u8 gText_MatchCallBugCatcher_James_Intro1[] = _("If you want to catch BUG");
+const u8 gText_MatchCallBugCatcher_James_Intro2[] = _("POKéMON, wake up early.");
+
+const u8 gText_MatchCallHiker_Trent_Strategy[] = _("I battle with power.");
+const u8 gText_MatchCallHiker_Trent_Pokemon[] = _("Hard-bodied POKéMON.");
+const u8 gText_MatchCallHiker_Trent_Intro1[] = _("I've been planning a month");
+const u8 gText_MatchCallHiker_Trent_Intro2[] = _("for today's hike.");
+
+const u8 gText_MatchCallHiker_Sawyer_Strategy[] = _("I like it hot!");
+const u8 gText_MatchCallHiker_Sawyer_Pokemon[] = _("Hot POKéMON!");
+const u8 gText_MatchCallHiker_Sawyer_Intro1[] = _("As much as I love POKéMON,");
+const u8 gText_MatchCallHiker_Sawyer_Intro2[] = _("I surely like hiking!");
+
+const u8 gText_MatchCallYoungCouple_LoisAndHal_Strategy[] = _("Lovey-dovey strategy!");
+const u8 gText_MatchCallYoungCouple_LoisAndHal_Pokemon[] = _("Lovey-dovey POKéMON!");
+const u8 gText_MatchCallYoungCouple_LoisAndHal_Intro1[] = _("We're lovey-dovey!");
+const u8 gText_MatchCallYoungCouple_LoisAndHal_Intro2[] = _("Forever lovey-dovey!");
+
+const u8 gText_MatchCallPkmnTrainer_Wally_Strategy[] = _("We let it all hang out.");
+const u8 gText_MatchCallPkmnTrainer_Wally_Pokemon[] = _("The 1st POKéMON I caught.");
+const u8 gText_MatchCallPkmnTrainer_Wally_Intro1[] = _("POKéMON and I have grown");
+const u8 gText_MatchCallPkmnTrainer_Wally_Intro2[] = _("stronger together.");
+
+const u8 gText_MatchCallRockinWhiz_Roxanne_Strategy[] = _("ROCK-type power attack.");
+const u8 gText_MatchCallRockinWhiz_Roxanne_Pokemon[] = _("I prefer rock-hard POKéMON.");
+const u8 gText_MatchCallRockinWhiz_Roxanne_Intro1[] = _("A LEADER of a big GYM bears");
+const u8 gText_MatchCallRockinWhiz_Roxanne_Intro2[] = _("a lot of responsibility.");
+
+const u8 gText_MatchCallTheBigHit_Brawly_Strategy[] = _("Direct physical action!");
+const u8 gText_MatchCallTheBigHit_Brawly_Pokemon[] = _("FIGHTING POKéMON rule!");
+const u8 gText_MatchCallTheBigHit_Brawly_Intro1[] = _("The world awaits me as the");
+const u8 gText_MatchCallTheBigHit_Brawly_Intro2[] = _("next big wave!");
+
+const u8 gText_MatchCallSwellShock_Wattson_Strategy[] = _("I choose to electrify.");
+const u8 gText_MatchCallSwellShock_Wattson_Pokemon[] = _("Get shocked by electricity!");
+const u8 gText_MatchCallSwellShock_Wattson_Intro1[] = _("One must never throw a");
+const u8 gText_MatchCallSwellShock_Wattson_Intro2[] = _("match. Even I must not.");
+
+const u8 gText_MatchCallPassionBurn_Flannery_Strategy[] = _("Battle aggressively.");
+const u8 gText_MatchCallPassionBurn_Flannery_Pokemon[] = _("Burn with passion!");
+const u8 gText_MatchCallPassionBurn_Flannery_Intro1[] = _("Completely wash away daily");
+const u8 gText_MatchCallPassionBurn_Flannery_Intro2[] = _("fatigue in hot springs!");
+
+const u8 gText_MatchCallReliableOne_Dad_Strategy[] = _("I flexibly adapt my style.");
+const u8 gText_MatchCallReliableOne_Dad_Pokemon[] = _("Grown in a balanced manner.");
+const u8 gText_MatchCallReliableOne_Dad_Intro1[] = _("I walk the 30 minutes from");
+const u8 gText_MatchCallReliableOne_Dad_Intro2[] = _("home to here every day.");
+
+const u8 gText_MatchCallSkyTamer_Winona_Strategy[] = _("I take advantage of speed.");
+const u8 gText_MatchCallSkyTamer_Winona_Pokemon[] = _("Graceful sky dancers.");
+const u8 gText_MatchCallSkyTamer_Winona_Intro1[] = _("The ultimate would be to");
+const u8 gText_MatchCallSkyTamer_Winona_Intro2[] = _("live as one with nature.");
+
+const u8 gText_MatchCallMysticDuo_TateAndLiza_Strategy[] = _("We battle in cooperation.");
+const u8 gText_MatchCallMysticDuo_TateAndLiza_Pokemon[] = _("Always friendly POKéMON.");
+const u8 gText_MatchCallMysticDuo_TateAndLiza_Intro1[] = _("Papa has trouble telling");
+const u8 gText_MatchCallMysticDuo_TateAndLiza_Intro2[] = _("the two of us apart!");
+
+const u8 gText_MatchCallDandyCharm_Juan_Strategy[] = _("I use splendid waterpower.");
+const u8 gText_MatchCallDandyCharm_Juan_Pokemon[] = _("POKéMON of elegance!");
+const u8 gText_MatchCallDandyCharm_Juan_Intro1[] = _("The adulation of beautiful");
+const u8 gText_MatchCallDandyCharm_Juan_Intro2[] = _("ladies fills me with energy!");
+
+const u8 gText_MatchCallEliteFour_Sidney_Strategy[] = _("Offense over defense!");
+const u8 gText_MatchCallEliteFour_Sidney_Pokemon[] = _("The DARK side's beauties.");
+const u8 gText_MatchCallEliteFour_Sidney_Intro1[] = _("They said I was a punk, but");
+const u8 gText_MatchCallEliteFour_Sidney_Intro2[] = _("I'm one of the ELITE FOUR!");
+
+const u8 gText_MatchCallEliteFour_Phoebe_Strategy[] = _("Confuse and confound.");
+const u8 gText_MatchCallEliteFour_Phoebe_Pokemon[] = _("There's nothing definite.");
+const u8 gText_MatchCallEliteFour_Phoebe_Intro1[] = _("I wonder how my grandma at");
+const u8 gText_MatchCallEliteFour_Phoebe_Intro2[] = _("MT. PYRE is doing?");
+
+const u8 gText_MatchCallEliteFour_Glacia_Strategy[] = _("I use items for help.");
+const u8 gText_MatchCallEliteFour_Glacia_Pokemon[] = _("Flaming passion in icy cold!");
+const u8 gText_MatchCallEliteFour_Glacia_Intro1[] = _("The ICE type can be better");
+const u8 gText_MatchCallEliteFour_Glacia_Intro2[] = _("trained in this hot land.");
+
+const u8 gText_MatchCallEliteFour_Drake_Strategy[] = _("Harness strong abilities.");
+const u8 gText_MatchCallEliteFour_Drake_Pokemon[] = _("The raw power of DRAGONS!");
+const u8 gText_MatchCallEliteFour_Drake_Intro1[] = _("I dedicate myself to the");
+const u8 gText_MatchCallEliteFour_Drake_Intro2[] = _("POKéMON that saved me.");
+
+const u8 gText_MatchCallChampion_Wallace_Strategy[] = _("Dignity and respect.");
+const u8 gText_MatchCallChampion_Wallace_Pokemon[] = _("I prefer POKéMON of grace.");
+const u8 gText_MatchCallChampion_Wallace_Intro1[] = _("I represent beauty as");
+const u8 gText_MatchCallChampion_Wallace_Intro2[] = _("well as intelligence.");
+
+const u8 *const gMatchCallFlavorTexts[REMATCH_TABLE_ENTRIES][CHECK_PAGE_ENTRY_COUNT] =
{
[REMATCH_ROSE] = MCFLAVOR(AromaLady_Rose),
[REMATCH_ANDRES] = MCFLAVOR(RuinManiac_Andres),
diff --git a/src/data/trade.h b/src/data/trade.h
new file mode 100644
index 000000000..8601af2a8
--- /dev/null
+++ b/src/data/trade.h
@@ -0,0 +1,1214 @@
+// 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[][2][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[][2][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 = ST_OAM_AFFINE_NORMAL,
+ .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 = ST_OAM_AFFINE_NORMAL,
+ .objMode = ST_OAM_OBJ_BLEND,
+ .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/trainer_parties.h b/src/data/trainer_parties.h
index 252eed760..824a49dc3 100644
--- a/src/data/trainer_parties.h
+++ b/src/data/trainer_parties.h
@@ -6,7 +6,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Sawyer1[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt1[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout1[] = {
{
.iv = 0,
.lvl = 32,
@@ -14,7 +14,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt1[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt2[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout2[] = {
{
.iv = 0,
.lvl = 31,
@@ -27,7 +27,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt2[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt3[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout3[] = {
{
.iv = 0,
.lvl = 32,
@@ -35,7 +35,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt3[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt4[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout4[] = {
{
.iv = 0,
.lvl = 32,
@@ -43,7 +43,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt4[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt5[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern1[] = {
{
.iv = 0,
.lvl = 36,
@@ -51,7 +51,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt5[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt6[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern2[] = {
{
.iv = 0,
.lvl = 36,
@@ -59,7 +59,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt6[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt7[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern3[] = {
{
.iv = 0,
.lvl = 36,
@@ -100,7 +100,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Gabrielle1[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt8[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntPetalburgWoods[] = {
{
.iv = 0,
.lvl = 9,
@@ -147,7 +147,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Ed[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt9[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern4[] = {
{
.iv = 0,
.lvl = 36,
@@ -163,7 +163,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Declan[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt10[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntRusturfTunnel[] = {
{
.iv = 0,
.lvl = 11,
@@ -171,7 +171,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt10[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt11[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst1[] = {
{
.iv = 0,
.lvl = 27,
@@ -184,7 +184,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt11[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt12[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst2[] = {
{
.iv = 0,
.lvl = 27,
@@ -197,7 +197,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt12[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt13[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst3[] = {
{
.iv = 0,
.lvl = 26,
@@ -215,7 +215,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt13[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt14[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMuseum1[] = {
{
.iv = 0,
.lvl = 15,
@@ -223,7 +223,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt14[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt15[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMuseum2[] = {
{
.iv = 0,
.lvl = 14,
@@ -236,7 +236,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt15[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt16[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter1[] = {
{
.iv = 0,
.lvl = 32,
@@ -244,7 +244,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt16[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt17[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtPyre1[] = {
{
.iv = 0,
.lvl = 32,
@@ -252,7 +252,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt17[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt18[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtPyre2[] = {
{
.iv = 0,
.lvl = 32,
@@ -260,7 +260,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt18[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt19[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtPyre3[] = {
{
.iv = 0,
.lvl = 30,
@@ -273,7 +273,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt19[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt20[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst4[] = {
{
.iv = 0,
.lvl = 28,
@@ -281,7 +281,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt20[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt21[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout5[] = {
{
.iv = 0,
.lvl = 32,
@@ -289,7 +289,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt21[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt22[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout6[] = {
{
.iv = 0,
.lvl = 32,
@@ -331,7 +331,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Zander[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Shelly1[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_ShellyWeatherInstitute[] = {
{
.iv = 50,
.lvl = 28,
@@ -344,7 +344,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Shelly1[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Shelly2[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_ShellySeafloorCavern[] = {
{
.iv = 100,
.lvl = 37,
@@ -419,13 +419,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Felix[] = {
.iv = 0,
.lvl = 43,
.species = SPECIES_MEDICHAM,
- .moves = MOVE_PSYCHIC, MOVE_NONE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_PSYCHIC, MOVE_NONE, MOVE_NONE, MOVE_NONE}
},
{
.iv = 0,
.lvl = 43,
.species = SPECIES_CLAYDOL,
- .moves = MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE}
}
};
@@ -514,7 +514,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Dusty1[] = {
.iv = 50,
.lvl = 23,
.species = SPECIES_SANDSLASH,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
}
};
@@ -523,19 +523,19 @@ static const struct TrainerMonNoItemCustomMoves sParty_Chip[] = {
.iv = 50,
.lvl = 27,
.species = SPECIES_BALTOY,
- .moves = MOVE_PSYBEAM, MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, MOVE_ANCIENT_POWER
+ .moves = {MOVE_PSYBEAM, MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, MOVE_ANCIENT_POWER}
},
{
.iv = 50,
.lvl = 27,
.species = SPECIES_SANDSHREW,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
},
{
.iv = 50,
.lvl = 27,
.species = SPECIES_SANDSLASH,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
}
};
@@ -544,13 +544,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Foster[] = {
.iv = 100,
.lvl = 25,
.species = SPECIES_SANDSHREW,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
},
{
.iv = 100,
.lvl = 25,
.species = SPECIES_SANDSLASH,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
}
};
@@ -559,7 +559,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Dusty2[] = {
.iv = 60,
.lvl = 27,
.species = SPECIES_SANDSLASH,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
}
};
@@ -568,7 +568,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Dusty3[] = {
.iv = 70,
.lvl = 30,
.species = SPECIES_SANDSLASH,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
}
};
@@ -577,7 +577,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Dusty4[] = {
.iv = 80,
.lvl = 33,
.species = SPECIES_SANDSLASH,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
}
};
@@ -586,7 +586,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Dusty5[] = {
.iv = 90,
.lvl = 36,
.species = SPECIES_SANDSLASH,
- .moves = MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING
+ .moves = {MOVE_DIG, MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_POISON_STING}
}
};
@@ -660,13 +660,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_GabbyAndTy6[] = {
.iv = 250,
.lvl = 39,
.species = SPECIES_MAGNETON,
- .moves = MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND, MOVE_THUNDERBOLT
+ .moves = {MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND, MOVE_THUNDERBOLT}
},
{
.iv = 250,
.lvl = 39,
.species = SPECIES_EXPLOUD,
- .moves = MOVE_ASTONISH, MOVE_STOMP, MOVE_SUPERSONIC, MOVE_HYPER_VOICE
+ .moves = {MOVE_ASTONISH, MOVE_STOMP, MOVE_SUPERSONIC, MOVE_HYPER_VOICE}
}
};
@@ -756,7 +756,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Ricky1[] = {
.iv = 10,
.lvl = 13,
.species = SPECIES_ZIGZAGOON,
- .moves = MOVE_SAND_ATTACK, MOVE_HEADBUTT, MOVE_TAIL_WHIP, MOVE_SURF
+ .moves = {MOVE_SAND_ATTACK, MOVE_HEADBUTT, MOVE_TAIL_WHIP, MOVE_SURF}
}
};
@@ -786,7 +786,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Ricky2[] = {
.iv = 10,
.lvl = 27,
.species = SPECIES_LINOONE,
- .moves = MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF
+ .moves = {MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF}
}
};
@@ -795,7 +795,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Ricky3[] = {
.iv = 20,
.lvl = 30,
.species = SPECIES_LINOONE,
- .moves = MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF
+ .moves = {MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF}
}
};
@@ -804,7 +804,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Ricky4[] = {
.iv = 30,
.lvl = 33,
.species = SPECIES_LINOONE,
- .moves = MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF
+ .moves = {MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF}
}
};
@@ -813,7 +813,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Ricky5[] = {
.iv = 40,
.lvl = 36,
.species = SPECIES_LINOONE,
- .moves = MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF
+ .moves = {MOVE_SAND_ATTACK, MOVE_PIN_MISSILE, MOVE_TAIL_WHIP, MOVE_SURF}
}
};
@@ -823,7 +823,7 @@ static const struct TrainerMonItemCustomMoves sParty_Randall[] = {
.lvl = 26,
.species = SPECIES_SWELLOW,
.heldItem = ITEM_NONE,
- .moves = MOVE_QUICK_ATTACK, MOVE_AGILITY, MOVE_WING_ATTACK, MOVE_NONE
+ .moves = {MOVE_QUICK_ATTACK, MOVE_AGILITY, MOVE_WING_ATTACK, MOVE_NONE}
}
};
@@ -833,7 +833,7 @@ static const struct TrainerMonItemCustomMoves sParty_Parker[] = {
.lvl = 26,
.species = SPECIES_SPINDA,
.heldItem = ITEM_NONE,
- .moves = MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_FOCUS_PUNCH, MOVE_NONE
+ .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_FOCUS_PUNCH, MOVE_NONE}
}
};
@@ -843,7 +843,7 @@ static const struct TrainerMonItemCustomMoves sParty_George[] = {
.lvl = 26,
.species = SPECIES_SLAKOTH,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SLACK_OFF, MOVE_COUNTER, MOVE_SHADOW_BALL, MOVE_NONE
+ .moves = {MOVE_SLACK_OFF, MOVE_COUNTER, MOVE_SHADOW_BALL, MOVE_NONE}
}
};
@@ -853,7 +853,7 @@ static const struct TrainerMonItemCustomMoves sParty_Berke[] = {
.lvl = 26,
.species = SPECIES_VIGOROTH,
.heldItem = ITEM_NONE,
- .moves = MOVE_FOCUS_ENERGY, MOVE_SLASH, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_FOCUS_ENERGY, MOVE_SLASH, MOVE_NONE, MOVE_NONE}
}
};
@@ -862,31 +862,31 @@ static const struct TrainerMonNoItemCustomMoves sParty_Braxton[] = {
.iv = 100,
.lvl = 28,
.species = SPECIES_SWELLOW,
- .moves = MOVE_FOCUS_ENERGY, MOVE_QUICK_ATTACK, MOVE_WING_ATTACK, MOVE_ENDEAVOR
+ .moves = {MOVE_FOCUS_ENERGY, MOVE_QUICK_ATTACK, MOVE_WING_ATTACK, MOVE_ENDEAVOR}
},
{
.iv = 100,
.lvl = 28,
.species = SPECIES_TRAPINCH,
- .moves = MOVE_BITE, MOVE_DIG, MOVE_FAINT_ATTACK, MOVE_SAND_TOMB
+ .moves = {MOVE_BITE, MOVE_DIG, MOVE_FAINT_ATTACK, MOVE_SAND_TOMB}
},
{
.iv = 100,
.lvl = 28,
.species = SPECIES_WAILMER,
- .moves = MOVE_ROLLOUT, MOVE_WHIRLPOOL, MOVE_ASTONISH, MOVE_WATER_PULSE
+ .moves = {MOVE_ROLLOUT, MOVE_WHIRLPOOL, MOVE_ASTONISH, MOVE_WATER_PULSE}
},
{
.iv = 100,
.lvl = 28,
.species = SPECIES_MAGNETON,
- .moves = MOVE_THUNDERBOLT, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SONIC_BOOM
+ .moves = {MOVE_THUNDERBOLT, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SONIC_BOOM}
},
{
.iv = 100,
.lvl = 28,
.species = SPECIES_SHIFTRY,
- .moves = MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_SWAGGER
+ .moves = {MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_SWAGGER}
}
};
@@ -1115,7 +1115,7 @@ static const struct TrainerMonItemCustomMoves sParty_Mary[] = {
.lvl = 26,
.species = SPECIES_DELCATTY,
.heldItem = ITEM_NONE,
- .moves = MOVE_FAINT_ATTACK, MOVE_SHOCK_WAVE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_FAINT_ATTACK, MOVE_SHOCK_WAVE, MOVE_NONE, MOVE_NONE}
}
};
@@ -1125,7 +1125,7 @@ static const struct TrainerMonItemCustomMoves sParty_Alexia[] = {
.lvl = 26,
.species = SPECIES_WIGGLYTUFF,
.heldItem = ITEM_NONE,
- .moves = MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_NONE
+ .moves = {MOVE_DEFENSE_CURL, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_NONE}
}
};
@@ -1135,7 +1135,7 @@ static const struct TrainerMonItemCustomMoves sParty_Jody[] = {
.lvl = 26,
.species = SPECIES_ZANGOOSE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_NONE, MOVE_NONE}
}
};
@@ -1144,19 +1144,19 @@ static const struct TrainerMonNoItemCustomMoves sParty_Wendy[] = {
.iv = 100,
.lvl = 29,
.species = SPECIES_MAWILE,
- .moves = MOVE_BATON_PASS, MOVE_FAINT_ATTACK, MOVE_FAKE_TEARS, MOVE_BITE
+ .moves = {MOVE_BATON_PASS, MOVE_FAINT_ATTACK, MOVE_FAKE_TEARS, MOVE_BITE}
},
{
.iv = 100,
.lvl = 29,
.species = SPECIES_ROSELIA,
- .moves = MOVE_MEGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, MOVE_LEECH_SEED
+ .moves = {MOVE_MEGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_GRASS_WHISTLE, MOVE_LEECH_SEED}
},
{
.iv = 100,
.lvl = 29,
.species = SPECIES_PELIPPER,
- .moves = MOVE_FLY, MOVE_WATER_GUN, MOVE_MIST, MOVE_PROTECT
+ .moves = {MOVE_FLY, MOVE_WATER_GUN, MOVE_MIST, MOVE_PROTECT}
}
};
@@ -1463,18 +1463,18 @@ static const struct TrainerMonItemCustomMoves sParty_Daphne[] = {
.lvl = 39,
.species = SPECIES_LUVDISC,
.heldItem = ITEM_NUGGET,
- .moves = MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL, MOVE_WATER_PULSE
+ .moves = {MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL, MOVE_WATER_PULSE}
},
{
.iv = 100,
.lvl = 39,
.species = SPECIES_LUVDISC,
.heldItem = ITEM_NUGGET,
- .moves = MOVE_ATTRACT, MOVE_SAFEGUARD, MOVE_TAKE_DOWN, MOVE_WATER_PULSE
+ .moves = {MOVE_ATTRACT, MOVE_SAFEGUARD, MOVE_TAKE_DOWN, MOVE_WATER_PULSE}
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt23[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter2[] = {
{
.iv = 0,
.lvl = 26,
@@ -1498,7 +1498,7 @@ static const struct TrainerMonItemCustomMoves sParty_Cindy2[] = {
.lvl = 11,
.species = SPECIES_ZIGZAGOON,
.heldItem = ITEM_NUGGET,
- .moves = MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_NONE, MOVE_NONE}
}
};
@@ -1553,7 +1553,7 @@ static const struct TrainerMonItemCustomMoves sParty_Cindy6[] = {
.lvl = 36,
.species = SPECIES_LINOONE,
.heldItem = ITEM_NUGGET,
- .moves = MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK
+ .moves = {MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK}
}
};
@@ -1586,13 +1586,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica1[] = {
.iv = 0,
.lvl = 29,
.species = SPECIES_KECLEON,
- .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK}
},
{
.iv = 0,
.lvl = 29,
.species = SPECIES_SEVIPER,
- .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH}
}
};
@@ -1617,19 +1617,19 @@ static const struct TrainerMonNoItemCustomMoves sParty_Olivia[] = {
.iv = 100,
.lvl = 35,
.species = SPECIES_CLAMPERL,
- .moves = MOVE_IRON_DEFENSE, MOVE_WHIRLPOOL, MOVE_RAIN_DANCE, MOVE_WATER_PULSE
+ .moves = {MOVE_IRON_DEFENSE, MOVE_WHIRLPOOL, MOVE_RAIN_DANCE, MOVE_WATER_PULSE}
},
{
.iv = 100,
.lvl = 37,
.species = SPECIES_CORPHISH,
- .moves = MOVE_TAUNT, MOVE_CRABHAMMER, MOVE_WATER_PULSE, MOVE_NONE
+ .moves = {MOVE_TAUNT, MOVE_CRABHAMMER, MOVE_WATER_PULSE, MOVE_NONE}
},
{
.iv = 100,
.lvl = 39,
.species = SPECIES_LOMBRE,
- .moves = MOVE_UPROAR, MOVE_FURY_SWIPES, MOVE_FAKE_OUT, MOVE_WATER_PULSE
+ .moves = {MOVE_UPROAR, MOVE_FURY_SWIPES, MOVE_FAKE_OUT, MOVE_WATER_PULSE}
}
};
@@ -1651,13 +1651,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica2[] = {
.iv = 10,
.lvl = 35,
.species = SPECIES_KECLEON,
- .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK}
},
{
.iv = 10,
.lvl = 35,
.species = SPECIES_SEVIPER,
- .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH}
}
};
@@ -1666,13 +1666,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica3[] = {
.iv = 20,
.lvl = 38,
.species = SPECIES_KECLEON,
- .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK}
},
{
.iv = 20,
.lvl = 38,
.species = SPECIES_SEVIPER,
- .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH}
}
};
@@ -1681,13 +1681,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica4[] = {
.iv = 30,
.lvl = 41,
.species = SPECIES_KECLEON,
- .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK}
},
{
.iv = 30,
.lvl = 41,
.species = SPECIES_SEVIPER,
- .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH}
}
};
@@ -1696,13 +1696,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jessica5[] = {
.iv = 40,
.lvl = 44,
.species = SPECIES_KECLEON,
- .moves = MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK
+ .moves = {MOVE_BIND, MOVE_LICK, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK}
},
{
.iv = 40,
.lvl = 44,
.species = SPECIES_SEVIPER,
- .moves = MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH
+ .moves = {MOVE_POISON_TAIL, MOVE_SCREECH, MOVE_GLARE, MOVE_CRUNCH}
}
};
@@ -1770,7 +1770,7 @@ static const struct TrainerMonItemCustomMoves sParty_Winston5[] = {
.lvl = 36,
.species = SPECIES_LINOONE,
.heldItem = ITEM_NUGGET,
- .moves = MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK
+ .moves = {MOVE_FURY_SWIPES, MOVE_MUD_SPORT, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK}
}
};
@@ -1803,7 +1803,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Mark[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt24[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtChimney1[] = {
{
.iv = 0,
.lvl = 20,
@@ -2302,17 +2302,17 @@ static const struct TrainerMonNoItemCustomMoves sParty_Kirk[] = {
.iv = 100,
.lvl = 17,
.species = SPECIES_ELECTRIKE,
- .moves = MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SPARK, MOVE_LEER
+ .moves = {MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SPARK, MOVE_LEER}
},
{
.iv = 100,
.lvl = 17,
.species = SPECIES_VOLTORB,
- .moves = MOVE_CHARGE, MOVE_SHOCK_WAVE, MOVE_SCREECH, MOVE_NONE
+ .moves = {MOVE_CHARGE, MOVE_SHOCK_WAVE, MOVE_SCREECH, MOVE_NONE}
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt25[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout7[] = {
{
.iv = 0,
.lvl = 31,
@@ -2325,7 +2325,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt25[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt26[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntAquaHideout8[] = {
{
.iv = 0,
.lvl = 32,
@@ -2559,7 +2559,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Drew[] = {
.iv = 0,
.lvl = 23,
.species = SPECIES_SANDSHREW,
- .moves = MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH
+ .moves = {MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH}
}
};
@@ -2568,19 +2568,19 @@ static const struct TrainerMonNoItemCustomMoves sParty_Beau[] = {
.iv = 0,
.lvl = 21,
.species = SPECIES_BALTOY,
- .moves = MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB
+ .moves = {MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB}
},
{
.iv = 0,
.lvl = 21,
.species = SPECIES_SANDSHREW,
- .moves = MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SCRATCH, MOVE_DIG
+ .moves = {MOVE_POISON_STING, MOVE_SAND_ATTACK, MOVE_SCRATCH, MOVE_DIG}
},
{
.iv = 0,
.lvl = 21,
.species = SPECIES_BALTOY,
- .moves = MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB
+ .moves = {MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB}
}
};
@@ -2876,7 +2876,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Edward[] = {
.iv = 0,
.lvl = 15,
.species = SPECIES_ABRA,
- .moves = MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}
}
};
@@ -3000,7 +3000,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jaclyn[] = {
.iv = 0,
.lvl = 16,
.species = SPECIES_ABRA,
- .moves = MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}
}
};
@@ -3166,13 +3166,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Walter3[] = {
.iv = 20,
.lvl = 36,
.species = SPECIES_LINOONE,
- .moves = MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES
+ .moves = {MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES}
},
{
.iv = 20,
.lvl = 36,
.species = SPECIES_MANECTRIC,
- .moves = MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_ROAR
+ .moves = {MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_ROAR}
}
};
@@ -3181,13 +3181,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Walter4[] = {
.iv = 30,
.lvl = 39,
.species = SPECIES_LINOONE,
- .moves = MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES
+ .moves = {MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES}
},
{
.iv = 30,
.lvl = 39,
.species = SPECIES_MANECTRIC,
- .moves = MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_NONE
+ .moves = {MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_NONE}
}
};
@@ -3196,19 +3196,19 @@ static const struct TrainerMonNoItemCustomMoves sParty_Walter5[] = {
.iv = 40,
.lvl = 41,
.species = SPECIES_LINOONE,
- .moves = MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES
+ .moves = {MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_ODOR_SLEUTH, MOVE_FURY_SWIPES}
},
{
.iv = 40,
.lvl = 41,
.species = SPECIES_GOLDUCK,
- .moves = MOVE_FURY_SWIPES, MOVE_DISABLE, MOVE_CONFUSION, MOVE_PSYCH_UP
+ .moves = {MOVE_FURY_SWIPES, MOVE_DISABLE, MOVE_CONFUSION, MOVE_PSYCH_UP}
},
{
.iv = 40,
.lvl = 41,
.species = SPECIES_MANECTRIC,
- .moves = MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_ROAR
+ .moves = {MOVE_QUICK_ATTACK, MOVE_SPARK, MOVE_ODOR_SLEUTH, MOVE_ROAR}
}
};
@@ -3218,35 +3218,35 @@ static const struct TrainerMonItemCustomMoves sParty_Sidney[] = {
.lvl = 46,
.species = SPECIES_MIGHTYENA,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROAR, MOVE_DOUBLE_EDGE, MOVE_SAND_ATTACK, MOVE_CRUNCH
+ .moves = {MOVE_ROAR, MOVE_DOUBLE_EDGE, MOVE_SAND_ATTACK, MOVE_CRUNCH}
},
{
.iv = 250,
.lvl = 48,
.species = SPECIES_SHIFTRY,
.heldItem = ITEM_NONE,
- .moves = MOVE_TORMENT, MOVE_DOUBLE_TEAM, MOVE_SWAGGER, MOVE_EXTRASENSORY
+ .moves = {MOVE_TORMENT, MOVE_DOUBLE_TEAM, MOVE_SWAGGER, MOVE_EXTRASENSORY}
},
{
.iv = 250,
.lvl = 46,
.species = SPECIES_CACTURNE,
.heldItem = ITEM_NONE,
- .moves = MOVE_LEECH_SEED, MOVE_FAINT_ATTACK, MOVE_NEEDLE_ARM, MOVE_COTTON_SPORE
+ .moves = {MOVE_LEECH_SEED, MOVE_FAINT_ATTACK, MOVE_NEEDLE_ARM, MOVE_COTTON_SPORE}
},
{
.iv = 250,
.lvl = 48,
.species = SPECIES_CRAWDAUNT,
.heldItem = ITEM_NONE,
- .moves = MOVE_SURF, MOVE_SWORDS_DANCE, MOVE_STRENGTH, MOVE_FACADE
+ .moves = {MOVE_SURF, MOVE_SWORDS_DANCE, MOVE_STRENGTH, MOVE_FACADE}
},
{
.iv = 255,
.lvl = 49,
.species = SPECIES_ABSOL,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_SLASH
+ .moves = {MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_SLASH}
}
};
@@ -3256,35 +3256,35 @@ static const struct TrainerMonItemCustomMoves sParty_Phoebe[] = {
.lvl = 48,
.species = SPECIES_DUSCLOPS,
.heldItem = ITEM_NONE,
- .moves = MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_CURSE, MOVE_PROTECT
+ .moves = {MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_CURSE, MOVE_PROTECT}
},
{
.iv = 250,
.lvl = 49,
.species = SPECIES_BANETTE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SHADOW_BALL, MOVE_GRUDGE, MOVE_WILL_O_WISP, MOVE_FAINT_ATTACK
+ .moves = {MOVE_SHADOW_BALL, MOVE_GRUDGE, MOVE_WILL_O_WISP, MOVE_FAINT_ATTACK}
},
{
.iv = 250,
.lvl = 50,
.species = SPECIES_SABLEYE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_NIGHT_SHADE, MOVE_FAINT_ATTACK
+ .moves = {MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_NIGHT_SHADE, MOVE_FAINT_ATTACK}
},
{
.iv = 250,
.lvl = 49,
.species = SPECIES_BANETTE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FACADE
+ .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FACADE}
},
{
.iv = 255,
.lvl = 51,
.species = SPECIES_DUSCLOPS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SHADOW_BALL, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE
+ .moves = {MOVE_SHADOW_BALL, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE}
}
};
@@ -3294,35 +3294,35 @@ static const struct TrainerMonItemCustomMoves sParty_Glacia[] = {
.lvl = 50,
.species = SPECIES_SEALEO,
.heldItem = ITEM_NONE,
- .moves = MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_HAIL, MOVE_ICE_BALL
+ .moves = {MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_HAIL, MOVE_ICE_BALL}
},
{
.iv = 250,
.lvl = 50,
.species = SPECIES_GLALIE,
.heldItem = ITEM_NONE,
- .moves = MOVE_LIGHT_SCREEN, MOVE_CRUNCH, MOVE_ICY_WIND, MOVE_ICE_BEAM
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_CRUNCH, MOVE_ICY_WIND, MOVE_ICE_BEAM}
},
{
.iv = 250,
.lvl = 52,
.species = SPECIES_SEALEO,
.heldItem = ITEM_NONE,
- .moves = MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_HAIL, MOVE_BLIZZARD
+ .moves = {MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_HAIL, MOVE_BLIZZARD}
},
{
.iv = 250,
.lvl = 52,
.species = SPECIES_GLALIE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SHADOW_BALL, MOVE_EXPLOSION, MOVE_HAIL, MOVE_ICE_BEAM
+ .moves = {MOVE_SHADOW_BALL, MOVE_EXPLOSION, MOVE_HAIL, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_WALREIN,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SURF, MOVE_BODY_SLAM, MOVE_ICE_BEAM, MOVE_SHEER_COLD
+ .moves = {MOVE_SURF, MOVE_BODY_SLAM, MOVE_ICE_BEAM, MOVE_SHEER_COLD}
}
};
@@ -3332,35 +3332,35 @@ static const struct TrainerMonItemCustomMoves sParty_Drake[] = {
.lvl = 52,
.species = SPECIES_SHELGON,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROCK_TOMB, MOVE_DRAGON_CLAW, MOVE_PROTECT, MOVE_DOUBLE_EDGE
+ .moves = {MOVE_ROCK_TOMB, MOVE_DRAGON_CLAW, MOVE_PROTECT, MOVE_DOUBLE_EDGE}
},
{
.iv = 250,
.lvl = 54,
.species = SPECIES_ALTARIA,
.heldItem = ITEM_NONE,
- .moves = MOVE_DOUBLE_EDGE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE}
},
{
.iv = 250,
.lvl = 53,
.species = SPECIES_KINGDRA,
.heldItem = ITEM_NONE,
- .moves = MOVE_SMOKESCREEN, MOVE_DRAGON_DANCE, MOVE_SURF, MOVE_BODY_SLAM
+ .moves = {MOVE_SMOKESCREEN, MOVE_DRAGON_DANCE, MOVE_SURF, MOVE_BODY_SLAM}
},
{
.iv = 250,
.lvl = 53,
.species = SPECIES_FLYGON,
.heldItem = ITEM_NONE,
- .moves = MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_DRAGON_BREATH, MOVE_EARTHQUAKE
+ .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_DRAGON_BREATH, MOVE_EARTHQUAKE}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_SALAMENCE,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_ROCK_SLIDE, MOVE_CRUNCH
+ .moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_ROCK_SLIDE, MOVE_CRUNCH}
}
};
@@ -3370,21 +3370,21 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne1[] = {
.lvl = 12,
.species = SPECIES_GEODUDE,
.heldItem = ITEM_NONE,
- .moves = MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, MOVE_ROCK_TOMB
+ .moves = {MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, MOVE_ROCK_TOMB}
},
{
.iv = 100,
.lvl = 12,
.species = SPECIES_GEODUDE,
.heldItem = ITEM_NONE,
- .moves = MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, MOVE_ROCK_TOMB
+ .moves = {MOVE_TACKLE, MOVE_DEFENSE_CURL, MOVE_ROCK_THROW, MOVE_ROCK_TOMB}
},
{
.iv = 200,
.lvl = 15,
.species = SPECIES_NOSEPASS,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_BLOCK, MOVE_HARDEN, MOVE_TACKLE, MOVE_ROCK_TOMB
+ .moves = {MOVE_BLOCK, MOVE_HARDEN, MOVE_TACKLE, MOVE_ROCK_TOMB}
}
};
@@ -3394,21 +3394,21 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly1[] = {
.lvl = 16,
.species = SPECIES_MACHOP,
.heldItem = ITEM_NONE,
- .moves = MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SEISMIC_TOSS, MOVE_BULK_UP
+ .moves = {MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SEISMIC_TOSS, MOVE_BULK_UP}
},
{
.iv = 100,
.lvl = 16,
.species = SPECIES_MEDITITE,
.heldItem = ITEM_NONE,
- .moves = MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_BULK_UP
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_BULK_UP}
},
{
.iv = 200,
.lvl = 19,
.species = SPECIES_MAKUHITA,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_ARM_THRUST, MOVE_VITAL_THROW, MOVE_REVERSAL, MOVE_BULK_UP
+ .moves = {MOVE_ARM_THRUST, MOVE_VITAL_THROW, MOVE_REVERSAL, MOVE_BULK_UP}
}
};
@@ -3418,28 +3418,28 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson1[] = {
.lvl = 20,
.species = SPECIES_VOLTORB,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROLLOUT, MOVE_SPARK, MOVE_SELF_DESTRUCT, MOVE_SHOCK_WAVE
+ .moves = {MOVE_ROLLOUT, MOVE_SPARK, MOVE_SELF_DESTRUCT, MOVE_SHOCK_WAVE}
},
{
.iv = 200,
.lvl = 20,
.species = SPECIES_ELECTRIKE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SHOCK_WAVE, MOVE_LEER, MOVE_QUICK_ATTACK, MOVE_HOWL
+ .moves = {MOVE_SHOCK_WAVE, MOVE_LEER, MOVE_QUICK_ATTACK, MOVE_HOWL}
},
{
.iv = 220,
.lvl = 22,
.species = SPECIES_MAGNETON,
.heldItem = ITEM_NONE,
- .moves = MOVE_SUPERSONIC, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_SONIC_BOOM
+ .moves = {MOVE_SUPERSONIC, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_SONIC_BOOM}
},
{
.iv = 250,
.lvl = 24,
.species = SPECIES_MANECTRIC,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE, MOVE_HOWL
+ .moves = {MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE, MOVE_HOWL}
}
};
@@ -3449,28 +3449,28 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery1[] = {
.lvl = 24,
.species = SPECIES_NUMEL,
.heldItem = ITEM_NONE,
- .moves = MOVE_OVERHEAT, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ .moves = {MOVE_OVERHEAT, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY}
},
{
.iv = 200,
.lvl = 24,
.species = SPECIES_SLUGMA,
.heldItem = ITEM_NONE,
- .moves = MOVE_OVERHEAT, MOVE_SMOG, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY
+ .moves = {MOVE_OVERHEAT, MOVE_SMOG, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY}
},
{
.iv = 250,
.lvl = 26,
.species = SPECIES_CAMERUPT,
.heldItem = ITEM_NONE,
- .moves = MOVE_OVERHEAT, MOVE_TACKLE, MOVE_SUNNY_DAY, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_TACKLE, MOVE_SUNNY_DAY, MOVE_ATTRACT}
},
{
.iv = 250,
.lvl = 29,
.species = SPECIES_TORKOAL,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_BODY_SLAM, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_BODY_SLAM, MOVE_ATTRACT}
}
};
@@ -3480,28 +3480,28 @@ static const struct TrainerMonItemCustomMoves sParty_Norman1[] = {
.lvl = 27,
.species = SPECIES_SPINDA,
.heldItem = ITEM_NONE,
- .moves = MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FACADE, MOVE_ENCORE
+ .moves = {MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FACADE, MOVE_ENCORE}
},
{
.iv = 200,
.lvl = 27,
.species = SPECIES_VIGOROTH,
.heldItem = ITEM_NONE,
- .moves = MOVE_SLASH, MOVE_FACADE, MOVE_ENCORE, MOVE_FAINT_ATTACK
+ .moves = {MOVE_SLASH, MOVE_FACADE, MOVE_ENCORE, MOVE_FAINT_ATTACK}
},
{
.iv = 200,
.lvl = 29,
.species = SPECIES_LINOONE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SLASH, MOVE_BELLY_DRUM, MOVE_FACADE, MOVE_HEADBUTT
+ .moves = {MOVE_SLASH, MOVE_BELLY_DRUM, MOVE_FACADE, MOVE_HEADBUTT}
},
{
.iv = 250,
.lvl = 31,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_COUNTER, MOVE_YAWN, MOVE_FACADE, MOVE_FAINT_ATTACK
+ .moves = {MOVE_COUNTER, MOVE_YAWN, MOVE_FACADE, MOVE_FAINT_ATTACK}
}
};
@@ -3511,35 +3511,35 @@ static const struct TrainerMonItemCustomMoves sParty_Winona1[] = {
.lvl = 29,
.species = SPECIES_SWABLU,
.heldItem = ITEM_NONE,
- .moves = MOVE_PERISH_SONG, MOVE_MIRROR_MOVE, MOVE_SAFEGUARD, MOVE_AERIAL_ACE
+ .moves = {MOVE_PERISH_SONG, MOVE_MIRROR_MOVE, MOVE_SAFEGUARD, MOVE_AERIAL_ACE}
},
{
.iv = 210,
.lvl = 29,
.species = SPECIES_TROPIUS,
.heldItem = ITEM_NONE,
- .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_SYNTHESIS
+ .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_SYNTHESIS}
},
{
.iv = 210,
.lvl = 30,
.species = SPECIES_PELIPPER,
.heldItem = ITEM_NONE,
- .moves = MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ .moves = {MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE}
},
{
.iv = 220,
.lvl = 31,
.species = SPECIES_SKARMORY,
.heldItem = ITEM_NONE,
- .moves = MOVE_SAND_ATTACK, MOVE_FURY_ATTACK, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ .moves = {MOVE_SAND_ATTACK, MOVE_FURY_ATTACK, MOVE_STEEL_WING, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 33,
.species = SPECIES_ALTARIA,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE
+ .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE}
}
};
@@ -3549,28 +3549,28 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza1[] = {
.lvl = 41,
.species = SPECIES_CLAYDOL,
.heldItem = ITEM_NONE,
- .moves = MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN}
},
{
.iv = 250,
.lvl = 41,
.species = SPECIES_XATU,
.heldItem = ITEM_NONE,
- .moves = MOVE_PSYCHIC, MOVE_SUNNY_DAY, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ .moves = {MOVE_PSYCHIC, MOVE_SUNNY_DAY, MOVE_CONFUSE_RAY, MOVE_CALM_MIND}
},
{
.iv = 250,
.lvl = 42,
.species = SPECIES_LUNATONE,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_CALM_MIND
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_CALM_MIND}
},
{
.iv = 250,
.lvl = 42,
.species = SPECIES_SOLROCK,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER}
}
};
@@ -3580,35 +3580,35 @@ static const struct TrainerMonItemCustomMoves sParty_Juan1[] = {
.lvl = 41,
.species = SPECIES_LUVDISC,
.heldItem = ITEM_NONE,
- .moves = MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL
+ .moves = {MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SWEET_KISS, MOVE_FLAIL}
},
{
.iv = 200,
.lvl = 41,
.species = SPECIES_WHISCASH,
.heldItem = ITEM_NONE,
- .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_AMNESIA, MOVE_EARTHQUAKE
+ .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_AMNESIA, MOVE_EARTHQUAKE}
},
{
.iv = 200,
.lvl = 43,
.species = SPECIES_SEALEO,
.heldItem = ITEM_NONE,
- .moves = MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_AURORA_BEAM, MOVE_WATER_PULSE
+ .moves = {MOVE_ENCORE, MOVE_BODY_SLAM, MOVE_AURORA_BEAM, MOVE_WATER_PULSE}
},
{
.iv = 200,
.lvl = 43,
.species = SPECIES_CRAWDAUNT,
.heldItem = ITEM_NONE,
- .moves = MOVE_WATER_PULSE, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_LEER
+ .moves = {MOVE_WATER_PULSE, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_LEER}
},
{
.iv = 250,
.lvl = 46,
.species = SPECIES_KINGDRA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ .moves = {MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST}
}
};
@@ -3781,13 +3781,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_KateAndJoy[] = {
.iv = 0,
.lvl = 30,
.species = SPECIES_SPINDA,
- .moves = MOVE_HYPNOSIS, MOVE_PSYBEAM, MOVE_DIZZY_PUNCH, MOVE_TEETER_DANCE
+ .moves = {MOVE_HYPNOSIS, MOVE_PSYBEAM, MOVE_DIZZY_PUNCH, MOVE_TEETER_DANCE}
},
{
.iv = 0,
.lvl = 32,
.species = SPECIES_SLAKING,
- .moves = MOVE_FOCUS_PUNCH, MOVE_YAWN, MOVE_SLACK_OFF, MOVE_FAINT_ATTACK
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_YAWN, MOVE_SLACK_OFF, MOVE_FAINT_ATTACK}
}
};
@@ -3796,13 +3796,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg1[] = {
.iv = 0,
.lvl = 15,
.species = SPECIES_ZIGZAGOON,
- .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH}
},
{
.iv = 0,
.lvl = 17,
.species = SPECIES_MAKUHITA,
- .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE}
}
};
@@ -3811,13 +3811,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg2[] = {
.iv = 10,
.lvl = 28,
.species = SPECIES_ZIGZAGOON,
- .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH}
},
{
.iv = 10,
.lvl = 30,
.species = SPECIES_MAKUHITA,
- .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE}
}
};
@@ -3826,13 +3826,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg3[] = {
.iv = 20,
.lvl = 31,
.species = SPECIES_ZIGZAGOON,
- .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH}
},
{
.iv = 20,
.lvl = 33,
.species = SPECIES_MAKUHITA,
- .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE}
}
};
@@ -3841,13 +3841,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg4[] = {
.iv = 30,
.lvl = 34,
.species = SPECIES_LINOONE,
- .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH}
},
{
.iv = 30,
.lvl = 36,
.species = SPECIES_MAKUHITA,
- .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE}
}
};
@@ -3856,13 +3856,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_AnnaAndMeg5[] = {
.iv = 40,
.lvl = 36,
.species = SPECIES_LINOONE,
- .moves = MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH
+ .moves = {MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_HEADBUTT, MOVE_ODOR_SLEUTH}
},
{
.iv = 40,
.lvl = 38,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_FOCUS_ENERGY, MOVE_ARM_THRUST, MOVE_NONE}
}
};
@@ -3896,42 +3896,42 @@ static const struct TrainerMonItemCustomMoves sParty_Colton[] = {
.lvl = 22,
.species = SPECIES_SKITTY,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL}
},
{
.iv = 0,
.lvl = 36,
.species = SPECIES_SKITTY,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL}
},
{
.iv = 0,
.lvl = 40,
.species = SPECIES_SKITTY,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL}
},
{
.iv = 0,
.lvl = 12,
.species = SPECIES_SKITTY,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL}
},
{
.iv = 0,
.lvl = 30,
.species = SPECIES_SKITTY,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL}
},
{
.iv = 0,
.lvl = 42,
.species = SPECIES_DELCATTY,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL
+ .moves = {MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK, MOVE_HEAL_BELL}
}
};
@@ -4098,7 +4098,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Timothy2[] = {
.iv = 210,
.lvl = 33,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, MOVE_DIG
+ .moves = {MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, MOVE_DIG}
}
};
@@ -4107,7 +4107,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Timothy3[] = {
.iv = 220,
.lvl = 36,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, MOVE_DIG
+ .moves = {MOVE_ARM_THRUST, MOVE_KNOCK_OFF, MOVE_SAND_ATTACK, MOVE_DIG}
}
};
@@ -4116,7 +4116,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Timothy4[] = {
.iv = 230,
.lvl = 39,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, MOVE_DIG
+ .moves = {MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, MOVE_DIG}
}
};
@@ -4125,7 +4125,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Timothy5[] = {
.iv = 240,
.lvl = 42,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, MOVE_DIG
+ .moves = {MOVE_ARM_THRUST, MOVE_BELLY_DRUM, MOVE_SAND_ATTACK, MOVE_DIG}
}
};
@@ -4134,7 +4134,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Vicky[] = {
.iv = 200,
.lvl = 18,
.species = SPECIES_MEDITITE,
- .moves = MOVE_HI_JUMP_KICK, MOVE_MEDITATE, MOVE_CONFUSION, MOVE_DETECT
+ .moves = {MOVE_HI_JUMP_KICK, MOVE_MEDITATE, MOVE_CONFUSION, MOVE_DETECT}
}
};
@@ -4229,7 +4229,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Josh[] = {
.iv = 100,
.lvl = 10,
.species = SPECIES_GEODUDE,
- .moves = MOVE_TACKLE, MOVE_NONE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_NONE, MOVE_NONE, MOVE_NONE}
}
};
@@ -4259,13 +4259,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Ben[] = {
.iv = 150,
.lvl = 17,
.species = SPECIES_ZIGZAGOON,
- .moves = MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_GROWL, MOVE_THUNDERBOLT
+ .moves = {MOVE_HEADBUTT, MOVE_SAND_ATTACK, MOVE_GROWL, MOVE_THUNDERBOLT}
},
{
.iv = 150,
.lvl = 17,
.species = SPECIES_GULPIN,
- .moves = MOVE_AMNESIA, MOVE_SLUDGE, MOVE_YAWN, MOVE_POUND
+ .moves = {MOVE_AMNESIA, MOVE_SLUDGE, MOVE_YAWN, MOVE_POUND}
}
};
@@ -4274,13 +4274,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Quincy[] = {
.iv = 100,
.lvl = 43,
.species = SPECIES_SLAKING,
- .moves = MOVE_ATTRACT, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER
+ .moves = {MOVE_ATTRACT, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER}
},
{
.iv = 100,
.lvl = 43,
.species = SPECIES_DUSCLOPS,
- .moves = MOVE_SKILL_SWAP, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_TOXIC
+ .moves = {MOVE_SKILL_SWAP, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_TOXIC}
}
};
@@ -4289,13 +4289,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Katelynn[] = {
.iv = 100,
.lvl = 43,
.species = SPECIES_GARDEVOIR,
- .moves = MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CALM_MIND
+ .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CALM_MIND}
},
{
.iv = 100,
.lvl = 43,
.species = SPECIES_SLAKING,
- .moves = MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK
+ .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK}
}
};
@@ -4417,42 +4417,42 @@ static const struct TrainerMonItemCustomMoves sParty_Wallace[] = {
.lvl = 57,
.species = SPECIES_WAILORD,
.heldItem = ITEM_NONE,
- .moves = MOVE_RAIN_DANCE, MOVE_WATER_SPOUT, MOVE_DOUBLE_EDGE, MOVE_BLIZZARD
+ .moves = {MOVE_RAIN_DANCE, MOVE_WATER_SPOUT, MOVE_DOUBLE_EDGE, MOVE_BLIZZARD}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_TENTACRUEL,
.heldItem = ITEM_NONE,
- .moves = MOVE_TOXIC, MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_ICE_BEAM
+ .moves = {MOVE_TOXIC, MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 56,
.species = SPECIES_LUDICOLO,
.heldItem = ITEM_NONE,
- .moves = MOVE_GIGA_DRAIN, MOVE_SURF, MOVE_LEECH_SEED, MOVE_DOUBLE_TEAM
+ .moves = {MOVE_GIGA_DRAIN, MOVE_SURF, MOVE_LEECH_SEED, MOVE_DOUBLE_TEAM}
},
{
.iv = 255,
.lvl = 56,
.species = SPECIES_WHISCASH,
.heldItem = ITEM_NONE,
- .moves = MOVE_EARTHQUAKE, MOVE_SURF, MOVE_AMNESIA, MOVE_HYPER_BEAM
+ .moves = {MOVE_EARTHQUAKE, MOVE_SURF, MOVE_AMNESIA, MOVE_HYPER_BEAM}
},
{
.iv = 255,
.lvl = 56,
.species = SPECIES_GYARADOS,
.heldItem = ITEM_NONE,
- .moves = MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, MOVE_SURF
+ .moves = {MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, MOVE_SURF}
},
{
.iv = 255,
.lvl = 58,
.species = SPECIES_MILOTIC,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_RECOVER, MOVE_SURF, MOVE_ICE_BEAM, MOVE_TOXIC
+ .moves = {MOVE_RECOVER, MOVE_SURF, MOVE_ICE_BEAM, MOVE_TOXIC}
}
};
@@ -5187,7 +5187,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Aaron[] = {
.iv = 255,
.lvl = 34,
.species = SPECIES_BAGON,
- .moves = MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_FOCUS_ENERGY, MOVE_EMBER
+ .moves = {MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_FOCUS_ENERGY, MOVE_EMBER}
}
};
@@ -5424,14 +5424,14 @@ static const struct TrainerMonItemCustomMoves sParty_Dianne[] = {
.lvl = 43,
.species = SPECIES_CLAYDOL,
.heldItem = ITEM_NONE,
- .moves = MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_SKILL_SWAP, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE}
},
{
.iv = 0,
.lvl = 43,
.species = SPECIES_LANTURN,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE}
}
};
@@ -5448,19 +5448,19 @@ static const struct TrainerMonNoItemCustomMoves sParty_Lao1[] = {
.iv = 0,
.lvl = 17,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, MOVE_SELF_DESTRUCT}
},
{
.iv = 0,
.lvl = 17,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SMOG, MOVE_SELF_DESTRUCT}
},
{
.iv = 0,
.lvl = 17,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT}
}
};
@@ -5482,25 +5482,25 @@ static const struct TrainerMonNoItemCustomMoves sParty_Lao2[] = {
.iv = 0,
.lvl = 24,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT}
},
{
.iv = 0,
.lvl = 24,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE}
},
{
.iv = 0,
.lvl = 24,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT}
},
{
.iv = 0,
.lvl = 26,
.species = SPECIES_KOFFING,
- .moves = MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE}
}
};
@@ -5509,25 +5509,25 @@ static const struct TrainerMonNoItemCustomMoves sParty_Lao3[] = {
.iv = 20,
.lvl = 27,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT}
},
{
.iv = 20,
.lvl = 27,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT}
},
{
.iv = 20,
.lvl = 27,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE}
},
{
.iv = 20,
.lvl = 29,
.species = SPECIES_KOFFING,
- .moves = MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE}
}
};
@@ -5536,25 +5536,25 @@ static const struct TrainerMonNoItemCustomMoves sParty_Lao4[] = {
.iv = 30,
.lvl = 30,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE}
},
{
.iv = 30,
.lvl = 30,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE}
},
{
.iv = 30,
.lvl = 30,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE}
},
{
.iv = 30,
.lvl = 32,
.species = SPECIES_KOFFING,
- .moves = MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE}
}
};
@@ -5564,28 +5564,28 @@ static const struct TrainerMonItemCustomMoves sParty_Lao5[] = {
.lvl = 33,
.species = SPECIES_KOFFING,
.heldItem = ITEM_NONE,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE}
},
{
.iv = 40,
.lvl = 33,
.species = SPECIES_KOFFING,
.heldItem = ITEM_NONE,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT}
},
{
.iv = 40,
.lvl = 33,
.species = SPECIES_KOFFING,
.heldItem = ITEM_NONE,
- .moves = MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT
+ .moves = {MOVE_POISON_GAS, MOVE_TACKLE, MOVE_SLUDGE, MOVE_SELF_DESTRUCT}
},
{
.iv = 40,
.lvl = 35,
.species = SPECIES_WEEZING,
.heldItem = ITEM_SMOKE_BALL,
- .moves = MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_TACKLE, MOVE_SLUDGE, MOVE_NONE, MOVE_NONE}
}
};
@@ -5691,7 +5691,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Madeline1[] = {
.iv = 0,
.lvl = 19,
.species = SPECIES_NUMEL,
- .moves = MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ .moves = {MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, MOVE_SUNNY_DAY}
}
};
@@ -5713,7 +5713,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Angelica[] = {
.iv = 50,
.lvl = 30,
.species = SPECIES_CASTFORM,
- .moves = MOVE_RAIN_DANCE, MOVE_WEATHER_BALL, MOVE_THUNDER, MOVE_WATER_PULSE
+ .moves = {MOVE_RAIN_DANCE, MOVE_WEATHER_BALL, MOVE_THUNDER, MOVE_WATER_PULSE}
}
};
@@ -5722,7 +5722,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Madeline2[] = {
.iv = 10,
.lvl = 29,
.species = SPECIES_NUMEL,
- .moves = MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ .moves = {MOVE_EMBER, MOVE_TACKLE, MOVE_MAGNITUDE, MOVE_SUNNY_DAY}
}
};
@@ -5731,7 +5731,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Madeline3[] = {
.iv = 20,
.lvl = 32,
.species = SPECIES_NUMEL,
- .moves = MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ .moves = {MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY}
}
};
@@ -5740,13 +5740,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Madeline4[] = {
.iv = 30,
.lvl = 34,
.species = SPECIES_ROSELIA,
- .moves = MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_SUNNY_DAY
+ .moves = {MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_SUNNY_DAY}
},
{
.iv = 30,
.lvl = 34,
.species = SPECIES_NUMEL,
- .moves = MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY
+ .moves = {MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_MAGNITUDE, MOVE_SUNNY_DAY}
}
};
@@ -5755,13 +5755,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Madeline5[] = {
.iv = 40,
.lvl = 37,
.species = SPECIES_ROSELIA,
- .moves = MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY
+ .moves = {MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY}
},
{
.iv = 40,
.lvl = 37,
.species = SPECIES_CAMERUPT,
- .moves = MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY
+ .moves = {MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY}
}
};
@@ -6064,13 +6064,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Heidi[] = {
.iv = 0,
.lvl = 22,
.species = SPECIES_SANDSHREW,
- .moves = MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH
+ .moves = {MOVE_DIG, MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH}
},
{
.iv = 0,
.lvl = 22,
.species = SPECIES_BALTOY,
- .moves = MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB
+ .moves = {MOVE_RAPID_SPIN, MOVE_MUD_SLAP, MOVE_PSYBEAM, MOVE_ROCK_TOMB}
}
};
@@ -6079,13 +6079,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Becky[] = {
.iv = 0,
.lvl = 22,
.species = SPECIES_SANDSHREW,
- .moves = MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH, MOVE_DIG
+ .moves = {MOVE_SAND_ATTACK, MOVE_POISON_STING, MOVE_SLASH, MOVE_DIG}
},
{
.iv = 0,
.lvl = 22,
.species = SPECIES_MARILL,
- .moves = MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_TAIL_WHIP, MOVE_DEFENSE_CURL
+ .moves = {MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_TAIL_WHIP, MOVE_DEFENSE_CURL}
}
};
@@ -6151,7 +6151,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Cedric[] = {
.iv = 0,
.lvl = 32,
.species = SPECIES_WOBBUFFET,
- .moves = MOVE_DESTINY_BOND, MOVE_SAFEGUARD, MOVE_COUNTER, MOVE_MIRROR_COAT
+ .moves = {MOVE_DESTINY_BOND, MOVE_SAFEGUARD, MOVE_COUNTER, MOVE_MIRROR_COAT}
}
};
@@ -6310,13 +6310,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_GinaAndMia2[] = {
.iv = 0,
.lvl = 10,
.species = SPECIES_DUSKULL,
- .moves = MOVE_NIGHT_SHADE, MOVE_DISABLE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_NIGHT_SHADE, MOVE_DISABLE, MOVE_NONE, MOVE_NONE}
},
{
.iv = 0,
.lvl = 10,
.species = SPECIES_SHROOMISH,
- .moves = MOVE_ABSORB, MOVE_LEECH_SEED, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_ABSORB, MOVE_LEECH_SEED, MOVE_NONE, MOVE_NONE}
}
};
@@ -6338,13 +6338,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_AmyAndLiv5[] = {
.iv = 30,
.lvl = 33,
.species = SPECIES_PLUSLE,
- .moves = MOVE_SPARK, MOVE_CHARGE, MOVE_FAKE_TEARS, MOVE_HELPING_HAND
+ .moves = {MOVE_SPARK, MOVE_CHARGE, MOVE_FAKE_TEARS, MOVE_HELPING_HAND}
},
{
.iv = 30,
.lvl = 33,
.species = SPECIES_MINUN,
- .moves = MOVE_SPARK, MOVE_CHARGE, MOVE_CHARM, MOVE_HELPING_HAND
+ .moves = {MOVE_SPARK, MOVE_CHARGE, MOVE_CHARM, MOVE_HELPING_HAND}
}
};
@@ -6353,13 +6353,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_AmyAndLiv6[] = {
.iv = 40,
.lvl = 36,
.species = SPECIES_PLUSLE,
- .moves = MOVE_THUNDER, MOVE_CHARGE, MOVE_FAKE_TEARS, MOVE_HELPING_HAND
+ .moves = {MOVE_THUNDER, MOVE_CHARGE, MOVE_FAKE_TEARS, MOVE_HELPING_HAND}
},
{
.iv = 40,
.lvl = 36,
.species = SPECIES_MINUN,
- .moves = MOVE_THUNDER, MOVE_CHARGE, MOVE_CHARM, MOVE_HELPING_HAND
+ .moves = {MOVE_THUNDER, MOVE_CHARGE, MOVE_CHARM, MOVE_HELPING_HAND}
}
};
@@ -6545,14 +6545,14 @@ static const struct TrainerMonItemCustomMoves sParty_Annika[] = {
.lvl = 39,
.species = SPECIES_FEEBAS,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, MOVE_ATTRACT
+ .moves = {MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, MOVE_ATTRACT}
},
{
.iv = 100,
.lvl = 39,
.species = SPECIES_FEEBAS,
.heldItem = ITEM_ORAN_BERRY,
- .moves = MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, MOVE_ATTRACT
+ .moves = {MOVE_FLAIL, MOVE_WATER_PULSE, MOVE_RETURN, MOVE_ATTRACT}
}
};
@@ -6569,7 +6569,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Jonas[] = {
.iv = 0,
.lvl = 31,
.species = SPECIES_KOFFING,
- .moves = MOVE_TOXIC, MOVE_THUNDER, MOVE_SELF_DESTRUCT, MOVE_SLUDGE_BOMB
+ .moves = {MOVE_TOXIC, MOVE_THUNDER, MOVE_SELF_DESTRUCT, MOVE_SLUDGE_BOMB}
}
};
@@ -6578,7 +6578,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Kayley[] = {
.iv = 0,
.lvl = 31,
.species = SPECIES_CASTFORM,
- .moves = MOVE_SUNNY_DAY, MOVE_WEATHER_BALL, MOVE_FLAMETHROWER, MOVE_SOLAR_BEAM
+ .moves = {MOVE_SUNNY_DAY, MOVE_WEATHER_BALL, MOVE_FLAMETHROWER, MOVE_SOLAR_BEAM}
}
};
@@ -6614,7 +6614,7 @@ static const struct TrainerMonItemCustomMoves sParty_Marley[] = {
.lvl = 34,
.species = SPECIES_MANECTRIC,
.heldItem = ITEM_NONE,
- .moves = MOVE_BITE, MOVE_ROAR, MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT
+ .moves = {MOVE_BITE, MOVE_ROAR, MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT}
}
};
@@ -6678,7 +6678,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Hector[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Tabitha1[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_TabithaMossdeep[] = {
{
.iv = 100,
.lvl = 36,
@@ -6748,40 +6748,40 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Edwin5[] = {
}
};
-static const struct TrainerMonNoItemCustomMoves sParty_Wally1[] = {
+static const struct TrainerMonNoItemCustomMoves sParty_WallyVR1[] = {
{
.iv = 150,
.lvl = 44,
.species = SPECIES_ALTARIA,
- .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE}
},
{
.iv = 150,
.lvl = 43,
.species = SPECIES_DELCATTY,
- .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK}
},
{
.iv = 150,
.lvl = 44,
.species = SPECIES_ROSELIA,
- .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC}
},
{
.iv = 150,
.lvl = 41,
.species = SPECIES_MAGNETON,
- .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH}
},
{
.iv = 250,
.lvl = 45,
.species = SPECIES_GARDEVOIR,
- .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT}
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan1[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Mudkip[] = {
{
.iv = 0,
.lvl = 5,
@@ -6789,7 +6789,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan1[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan2[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute110Mudkip[] = {
{
.iv = 50,
.lvl = 18,
@@ -6807,7 +6807,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan2[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan3[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute119Mudkip[] = {
{
.iv = 100,
.lvl = 29,
@@ -6825,7 +6825,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan3[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan4[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Treecko[] = {
{
.iv = 0,
.lvl = 5,
@@ -6833,7 +6833,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan4[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan5[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute110Treecko[] = {
{
.iv = 50,
.lvl = 18,
@@ -6851,7 +6851,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan5[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan6[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute119Treecko[] = {
{
.iv = 100,
.lvl = 29,
@@ -6869,7 +6869,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan6[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan7[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute103Torchic[] = {
{
.iv = 0,
.lvl = 5,
@@ -6877,7 +6877,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan7[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan8[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute110Torchic[] = {
{
.iv = 50,
.lvl = 18,
@@ -6895,7 +6895,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan8[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan9[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRoute119Torchic[] = {
{
.iv = 100,
.lvl = 29,
@@ -6913,7 +6913,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan9[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May1[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute103Mudkip[] = {
{
.iv = 0,
.lvl = 5,
@@ -6921,7 +6921,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May1[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May2[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute110Mudkip[] = {
{
.iv = 50,
.lvl = 18,
@@ -6939,7 +6939,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May2[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May3[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute119Mudkip[] = {
{
.iv = 100,
.lvl = 29,
@@ -6957,7 +6957,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May3[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May4[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute103Treecko[] = {
{
.iv = 0,
.lvl = 5,
@@ -6965,7 +6965,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May4[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May5[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute110Treecko[] = {
{
.iv = 50,
.lvl = 18,
@@ -6983,7 +6983,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May5[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May6[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute119Treecko[] = {
{
.iv = 100,
.lvl = 29,
@@ -7001,7 +7001,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May6[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May7[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute103Torchic[] = {
{
.iv = 0,
.lvl = 5,
@@ -7009,7 +7009,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May7[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May8[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute110Torchic[] = {
{
.iv = 50,
.lvl = 18,
@@ -7027,7 +7027,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May8[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May9[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRoute119Torchic[] = {
{
.iv = 100,
.lvl = 29,
@@ -7091,13 +7091,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Mitchell[] = {
.iv = 0,
.lvl = 43,
.species = SPECIES_LUNATONE,
- .moves = MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC
+ .moves = {MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC}
},
{
.iv = 0,
.lvl = 43,
.species = SPECIES_SOLROCK,
- .moves = MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_SHADOW_BALL
+ .moves = {MOVE_EXPLOSION, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_SHADOW_BALL}
}
};
@@ -7594,7 +7594,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Julio[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt27[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSeafloorCavern5[] = {
{
.iv = 50,
.lvl = 35,
@@ -7607,7 +7607,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt27[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt28[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntUnused[] = {
{
.iv = 0,
.lvl = 31,
@@ -7620,7 +7620,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt28[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt29[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtPyre4[] = {
{
.iv = 0,
.lvl = 30,
@@ -7633,7 +7633,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt29[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt30[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntJaggedPass[] = {
{
.iv = 50,
.lvl = 22,
@@ -7705,14 +7705,14 @@ static const struct TrainerMonItemCustomMoves sParty_Athena[] = {
.lvl = 32,
.species = SPECIES_MANECTRIC,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_NONE
+ .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_NONE}
},
{
.iv = 100,
.lvl = 32,
.species = SPECIES_LINOONE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SURF, MOVE_THIEF, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_SURF, MOVE_THIEF, MOVE_NONE, MOVE_NONE}
}
};
@@ -7724,7 +7724,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Harrison[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt31[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMtChimney2[] = {
{
.iv = 0,
.lvl = 20,
@@ -7780,7 +7780,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Nicholas[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt32[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter3[] = {
{
.iv = 0,
.lvl = 31,
@@ -7793,7 +7793,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt32[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt33[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter4[] = {
{
.iv = 0,
.lvl = 32,
@@ -7801,7 +7801,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt33[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt34[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter5[] = {
{
.iv = 0,
.lvl = 32,
@@ -7809,7 +7809,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt34[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt35[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter6[] = {
{
.iv = 0,
.lvl = 32,
@@ -7817,7 +7817,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt35[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt36[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntSpaceCenter7[] = {
{
.iv = 0,
.lvl = 32,
@@ -7833,7 +7833,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Macey[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan10[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRustboroTreecko[] = {
{
.iv = 25,
.lvl = 13,
@@ -7846,7 +7846,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan10[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan11[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRustboroMudkip[] = {
{
.iv = 25,
.lvl = 13,
@@ -7880,7 +7880,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Isabella[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt37[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntWeatherInst5[] = {
{
.iv = 0,
.lvl = 27,
@@ -7893,7 +7893,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt37[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Tabitha2[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_TabithaMtChimney[] = {
{
.iv = 50,
.lvl = 18,
@@ -7929,7 +7929,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Jonathan[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan12[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanRustboroTorchic[] = {
{
.iv = 25,
.lvl = 13,
@@ -7942,7 +7942,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan12[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May10[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroMudkip[] = {
{
.iv = 25,
.lvl = 13,
@@ -7955,7 +7955,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May10[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Maxie1[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MaxieMagmaHideout[] = {
{
.iv = 150,
.lvl = 37,
@@ -7973,7 +7973,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Maxie1[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Maxie2[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MaxieMtChimney[] = {
{
.iv = 150,
.lvl = 24,
@@ -8406,7 +8406,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Lucas2[] = {
.iv = 0,
.lvl = 9,
.species = SPECIES_WAILMER,
- .moves = MOVE_SPLASH, MOVE_WATER_GUN, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_SPLASH, MOVE_WATER_GUN, MOVE_NONE, MOVE_NONE}
}
};
@@ -8415,13 +8415,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Mike1[] = {
.iv = 0,
.lvl = 10,
.species = SPECIES_PELIPPER,
- .moves = MOVE_GUST, MOVE_GROWL, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_GUST, MOVE_GROWL, MOVE_NONE, MOVE_NONE}
},
{
.iv = 0,
.lvl = 10,
.species = SPECIES_POOCHYENA,
- .moves = MOVE_BITE, MOVE_SCARY_FACE, MOVE_NONE, MOVE_NONE
+ .moves = {MOVE_BITE, MOVE_SCARY_FACE, MOVE_NONE, MOVE_NONE}
}
};
@@ -8639,7 +8639,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Gerald[] = {
.iv = 100,
.lvl = 23,
.species = SPECIES_KECLEON,
- .moves = MOVE_FLAMETHROWER, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK, MOVE_BIND
+ .moves = {MOVE_FLAMETHROWER, MOVE_FURY_SWIPES, MOVE_FAINT_ATTACK, MOVE_BIND}
}
};
@@ -8648,13 +8648,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Vivian[] = {
.iv = 100,
.lvl = 17,
.species = SPECIES_MEDITITE,
- .moves = MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, MOVE_THUNDER_PUNCH
+ .moves = {MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, MOVE_THUNDER_PUNCH}
},
{
.iv = 100,
.lvl = 17,
.species = SPECIES_MEDITITE,
- .moves = MOVE_THUNDER_PUNCH, MOVE_DETECT, MOVE_CONFUSION, MOVE_MEDITATE
+ .moves = {MOVE_THUNDER_PUNCH, MOVE_DETECT, MOVE_CONFUSION, MOVE_MEDITATE}
}
};
@@ -8663,7 +8663,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Danielle[] = {
.iv = 100,
.lvl = 23,
.species = SPECIES_MEDITITE,
- .moves = MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, MOVE_FIRE_PUNCH
+ .moves = {MOVE_BIDE, MOVE_DETECT, MOVE_CONFUSION, MOVE_FIRE_PUNCH}
}
};
@@ -8672,13 +8672,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Hideo[] = {
.iv = 0,
.lvl = 25,
.species = SPECIES_KOFFING,
- .moves = MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN
+ .moves = {MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN}
},
{
.iv = 0,
.lvl = 25,
.species = SPECIES_KOFFING,
- .moves = MOVE_TACKLE, MOVE_POISON_GAS, MOVE_SLUDGE, MOVE_SMOKESCREEN
+ .moves = {MOVE_TACKLE, MOVE_POISON_GAS, MOVE_SLUDGE, MOVE_SMOKESCREEN}
}
};
@@ -8687,13 +8687,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Keigo[] = {
.iv = 0,
.lvl = 28,
.species = SPECIES_KOFFING,
- .moves = MOVE_POISON_GAS, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN
+ .moves = {MOVE_POISON_GAS, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN}
},
{
.iv = 0,
.lvl = 28,
.species = SPECIES_NINJASK,
- .moves = MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM, MOVE_FURY_CUTTER, MOVE_SWORDS_DANCE
+ .moves = {MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM, MOVE_FURY_CUTTER, MOVE_SWORDS_DANCE}
}
};
@@ -8702,13 +8702,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_Riley[] = {
.iv = 0,
.lvl = 28,
.species = SPECIES_NINCADA,
- .moves = MOVE_LEECH_LIFE, MOVE_FURY_SWIPES, MOVE_MIND_READER, MOVE_DIG
+ .moves = {MOVE_LEECH_LIFE, MOVE_FURY_SWIPES, MOVE_MIND_READER, MOVE_DIG}
},
{
.iv = 0,
.lvl = 28,
.species = SPECIES_KOFFING,
- .moves = MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN
+ .moves = {MOVE_TACKLE, MOVE_SELF_DESTRUCT, MOVE_SLUDGE, MOVE_SMOKESCREEN}
}
};
@@ -8743,7 +8743,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Ashley[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Wally2[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_WallyMauville[] = {
{
.iv = 30,
.lvl = 16,
@@ -8751,139 +8751,139 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Wally2[] = {
}
};
-static const struct TrainerMonNoItemCustomMoves sParty_Wally3[] = {
+static const struct TrainerMonNoItemCustomMoves sParty_WallyVR2[] = {
{
.iv = 150,
.lvl = 47,
.species = SPECIES_ALTARIA,
- .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE}
},
{
.iv = 150,
.lvl = 46,
.species = SPECIES_DELCATTY,
- .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK}
},
{
.iv = 150,
.lvl = 47,
.species = SPECIES_ROSELIA,
- .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC}
},
{
.iv = 150,
.lvl = 44,
.species = SPECIES_MAGNETON,
- .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH}
},
{
.iv = 250,
.lvl = 48,
.species = SPECIES_GARDEVOIR,
- .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT}
}
};
-static const struct TrainerMonNoItemCustomMoves sParty_Wally4[] = {
+static const struct TrainerMonNoItemCustomMoves sParty_WallyVR3[] = {
{
.iv = 150,
.lvl = 50,
.species = SPECIES_ALTARIA,
- .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE}
},
{
.iv = 150,
.lvl = 49,
.species = SPECIES_DELCATTY,
- .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK}
},
{
.iv = 150,
.lvl = 50,
.species = SPECIES_ROSELIA,
- .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC}
},
{
.iv = 150,
.lvl = 47,
.species = SPECIES_MAGNETON,
- .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH}
},
{
.iv = 250,
.lvl = 51,
.species = SPECIES_GARDEVOIR,
- .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT}
}
};
-static const struct TrainerMonNoItemCustomMoves sParty_Wally5[] = {
+static const struct TrainerMonNoItemCustomMoves sParty_WallyVR4[] = {
{
.iv = 150,
.lvl = 53,
.species = SPECIES_ALTARIA,
- .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE}
},
{
.iv = 150,
.lvl = 52,
.species = SPECIES_DELCATTY,
- .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK}
},
{
.iv = 150,
.lvl = 53,
.species = SPECIES_ROSELIA,
- .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC}
},
{
.iv = 150,
.lvl = 50,
.species = SPECIES_MAGNETON,
- .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH}
},
{
.iv = 250,
.lvl = 54,
.species = SPECIES_GARDEVOIR,
- .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT}
}
};
-static const struct TrainerMonNoItemCustomMoves sParty_Wally6[] = {
+static const struct TrainerMonNoItemCustomMoves sParty_WallyVR5[] = {
{
.iv = 150,
.lvl = 56,
.species = SPECIES_ALTARIA,
- .moves = MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE
+ .moves = {MOVE_AERIAL_ACE, MOVE_SAFEGUARD, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE}
},
{
.iv = 150,
.lvl = 55,
.species = SPECIES_DELCATTY,
- .moves = MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK
+ .moves = {MOVE_SING, MOVE_ASSIST, MOVE_CHARM, MOVE_FAINT_ATTACK}
},
{
.iv = 150,
.lvl = 56,
.species = SPECIES_ROSELIA,
- .moves = MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC
+ .moves = {MOVE_MAGICAL_LEAF, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC}
},
{
.iv = 150,
.lvl = 53,
.species = SPECIES_MAGNETON,
- .moves = MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH
+ .moves = {MOVE_SUPERSONIC, MOVE_THUNDERBOLT, MOVE_TRI_ATTACK, MOVE_SCREECH}
},
{
.iv = 250,
.lvl = 57,
.species = SPECIES_GARDEVOIR,
- .moves = MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_PSYCHIC, MOVE_FUTURE_SIGHT}
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan13[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanLilycoveMudkip[] = {
{
.iv = 150,
.lvl = 31,
@@ -8906,7 +8906,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan13[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan14[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanLilycoveTreecko[] = {
{
.iv = 150,
.lvl = 31,
@@ -8929,7 +8929,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan14[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan15[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanLilycoveTorchic[] = {
{
.iv = 150,
.lvl = 31,
@@ -8952,7 +8952,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan15[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May11[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayLilycoveMudkip[] = {
{
.iv = 150,
.lvl = 31,
@@ -8975,7 +8975,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May11[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May12[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayLilycoveTreecko[] = {
{
.iv = 150,
.lvl = 31,
@@ -8998,7 +8998,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May12[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May13[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayLilycoveTorchic[] = {
{
.iv = 150,
.lvl = 31,
@@ -9174,13 +9174,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_KimAndIris[] = {
.iv = 0,
.lvl = 32,
.species = SPECIES_SWABLU,
- .moves = MOVE_SING, MOVE_FURY_ATTACK, MOVE_SAFEGUARD, MOVE_AERIAL_ACE
+ .moves = {MOVE_SING, MOVE_FURY_ATTACK, MOVE_SAFEGUARD, MOVE_AERIAL_ACE}
},
{
.iv = 0,
.lvl = 35,
.species = SPECIES_NUMEL,
- .moves = MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_REST, MOVE_EARTHQUAKE
+ .moves = {MOVE_FLAMETHROWER, MOVE_TAKE_DOWN, MOVE_REST, MOVE_EARTHQUAKE}
}
};
@@ -9189,13 +9189,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_TyraAndIvy[] = {
.iv = 0,
.lvl = 18,
.species = SPECIES_ROSELIA,
- .moves = MOVE_GROWTH, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, MOVE_LEECH_SEED
+ .moves = {MOVE_GROWTH, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, MOVE_LEECH_SEED}
},
{
.iv = 0,
.lvl = 20,
.species = SPECIES_GRAVELER,
- .moves = MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_MUD_SPORT, MOVE_ROCK_THROW
+ .moves = {MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_MUD_SPORT, MOVE_ROCK_THROW}
}
};
@@ -9204,13 +9204,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_MelAndPaul[] = {
.iv = 0,
.lvl = 27,
.species = SPECIES_DUSTOX,
- .moves = MOVE_GUST, MOVE_PSYBEAM, MOVE_TOXIC, MOVE_PROTECT
+ .moves = {MOVE_GUST, MOVE_PSYBEAM, MOVE_TOXIC, MOVE_PROTECT}
},
{
.iv = 0,
.lvl = 27,
.species = SPECIES_BEAUTIFLY,
- .moves = MOVE_GUST, MOVE_MEGA_DRAIN, MOVE_ATTRACT, MOVE_STUN_SPORE
+ .moves = {MOVE_GUST, MOVE_MEGA_DRAIN, MOVE_ATTRACT, MOVE_STUN_SPORE}
}
};
@@ -9219,13 +9219,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay1[] = {
.iv = 200,
.lvl = 39,
.species = SPECIES_MEDICHAM,
- .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT}
},
{
.iv = 200,
.lvl = 39,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM}
}
};
@@ -9234,13 +9234,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay2[] = {
.iv = 210,
.lvl = 43,
.species = SPECIES_MEDICHAM,
- .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT}
},
{
.iv = 210,
.lvl = 43,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM}
}
};
@@ -9249,13 +9249,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay3[] = {
.iv = 220,
.lvl = 46,
.species = SPECIES_MEDICHAM,
- .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT}
},
{
.iv = 220,
.lvl = 46,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM}
}
};
@@ -9264,13 +9264,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay4[] = {
.iv = 230,
.lvl = 49,
.species = SPECIES_MEDICHAM,
- .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT}
},
{
.iv = 230,
.lvl = 49,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM}
}
};
@@ -9279,13 +9279,13 @@ static const struct TrainerMonNoItemCustomMoves sParty_JohnAndJay5[] = {
.iv = 240,
.lvl = 52,
.species = SPECIES_MEDICHAM,
- .moves = MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT
+ .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_PSYCH_UP, MOVE_PROTECT}
},
{
.iv = 240,
.lvl = 52,
.species = SPECIES_HARIYAMA,
- .moves = MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_REST, MOVE_BELLY_DRUM}
}
};
@@ -9645,7 +9645,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Deandre[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt38[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout1[] = {
{
.iv = 0,
.lvl = 29,
@@ -9653,7 +9653,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt38[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt39[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout2[] = {
{
.iv = 0,
.lvl = 29,
@@ -9661,7 +9661,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt39[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt40[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout3[] = {
{
.iv = 0,
.lvl = 29,
@@ -9669,7 +9669,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt40[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt41[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout4[] = {
{
.iv = 0,
.lvl = 28,
@@ -9682,7 +9682,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt41[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt42[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout5[] = {
{
.iv = 0,
.lvl = 28,
@@ -9695,7 +9695,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt42[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt43[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout6[] = {
{
.iv = 0,
.lvl = 29,
@@ -9703,7 +9703,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt43[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt44[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout7[] = {
{
.iv = 0,
.lvl = 29,
@@ -9711,7 +9711,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt44[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt45[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout8[] = {
{
.iv = 0,
.lvl = 29,
@@ -9719,7 +9719,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt45[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt46[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout9[] = {
{
.iv = 0,
.lvl = 29,
@@ -9727,7 +9727,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt46[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt47[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout10[] = {
{
.iv = 0,
.lvl = 29,
@@ -9735,7 +9735,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt47[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt48[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout11[] = {
{
.iv = 0,
.lvl = 29,
@@ -9743,7 +9743,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt48[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt49[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout12[] = {
{
.iv = 0,
.lvl = 29,
@@ -9751,7 +9751,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt49[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt50[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout13[] = {
{
.iv = 0,
.lvl = 29,
@@ -9759,7 +9759,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt50[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt51[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout14[] = {
{
.iv = 0,
.lvl = 29,
@@ -9767,7 +9767,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt51[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt52[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout15[] = {
{
.iv = 0,
.lvl = 29,
@@ -9775,7 +9775,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt52[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Grunt53[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_GruntMagmaHideout16[] = {
{
.iv = 0,
.lvl = 29,
@@ -9783,7 +9783,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Grunt53[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Tabitha3[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_TabithaMagmaHideout[] = {
{
.iv = 75,
.lvl = 26,
@@ -9819,7 +9819,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Darcy[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Maxie3[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MaxieMossdeep[] = {
{
.iv = 150,
.lvl = 42,
@@ -10163,7 +10163,7 @@ static const struct TrainerMonNoItemCustomMoves sParty_Leonel[] = {
.iv = 100,
.lvl = 30,
.species = SPECIES_MANECTRIC,
- .moves = MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_NONE
+ .moves = {MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_NONE}
}
};
@@ -10272,7 +10272,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Cristin1[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May14[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroTreecko[] = {
{
.iv = 25,
.lvl = 13,
@@ -10285,7 +10285,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_May14[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May15[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayRustboroTorchic[] = {
{
.iv = 25,
.lvl = 13,
@@ -10304,28 +10304,28 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne2[] = {
.lvl = 32,
.species = SPECIES_GOLEM,
.heldItem = ITEM_NONE,
- .moves = MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION
+ .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION}
},
{
.iv = 255,
.lvl = 35,
.species = SPECIES_KABUTO,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE
+ .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 35,
.species = SPECIES_ONIX,
.heldItem = ITEM_NONE,
- .moves = MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE
+ .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 37,
.species = SPECIES_NOSEPASS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE}
}
};
@@ -10335,35 +10335,35 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne3[] = {
.lvl = 37,
.species = SPECIES_OMANYTE,
.heldItem = ITEM_NONE,
- .moves = MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF
+ .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF}
},
{
.iv = 255,
.lvl = 37,
.species = SPECIES_GOLEM,
.heldItem = ITEM_NONE,
- .moves = MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION
+ .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_MAGNITUDE, MOVE_EXPLOSION}
},
{
.iv = 255,
.lvl = 40,
.species = SPECIES_KABUTOPS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE
+ .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 40,
.species = SPECIES_ONIX,
.heldItem = ITEM_NONE,
- .moves = MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE
+ .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 42,
.species = SPECIES_NOSEPASS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE}
}
};
@@ -10373,35 +10373,35 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne4[] = {
.lvl = 42,
.species = SPECIES_OMASTAR,
.heldItem = ITEM_NONE,
- .moves = MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF
+ .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF}
},
{
.iv = 255,
.lvl = 42,
.species = SPECIES_GOLEM,
.heldItem = ITEM_NONE,
- .moves = MOVE_PROTECT, MOVE_ROLLOUT, MOVE_EARTHQUAKE, MOVE_EXPLOSION
+ .moves = {MOVE_PROTECT, MOVE_ROLLOUT, MOVE_EARTHQUAKE, MOVE_EXPLOSION}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_KABUTOPS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE
+ .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_ONIX,
.heldItem = ITEM_NONE,
- .moves = MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE
+ .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 47,
.species = SPECIES_NOSEPASS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE}
}
};
@@ -10411,42 +10411,42 @@ static const struct TrainerMonItemCustomMoves sParty_Roxanne5[] = {
.lvl = 47,
.species = SPECIES_AERODACTYL,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROCK_SLIDE, MOVE_HYPER_BEAM, MOVE_SUPERSONIC, MOVE_PROTECT
+ .moves = {MOVE_ROCK_SLIDE, MOVE_HYPER_BEAM, MOVE_SUPERSONIC, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 47,
.species = SPECIES_GOLEM,
.heldItem = ITEM_NONE,
- .moves = MOVE_FOCUS_PUNCH, MOVE_ROLLOUT, MOVE_EARTHQUAKE, MOVE_EXPLOSION
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_ROLLOUT, MOVE_EARTHQUAKE, MOVE_EXPLOSION}
},
{
.iv = 255,
.lvl = 47,
.species = SPECIES_OMASTAR,
.heldItem = ITEM_NONE,
- .moves = MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF
+ .moves = {MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_SURF}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_KABUTOPS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE
+ .moves = {MOVE_SWORDS_DANCE, MOVE_ICE_BEAM, MOVE_SURF, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_STEELIX,
.heldItem = ITEM_NONE,
- .moves = MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE
+ .moves = {MOVE_IRON_TAIL, MOVE_EXPLOSION, MOVE_ROAR, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 52,
.species = SPECIES_NOSEPASS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_EXPLOSION, MOVE_PROTECT, MOVE_ROCK_SLIDE}
}
};
@@ -10456,28 +10456,28 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly2[] = {
.lvl = 33,
.species = SPECIES_MACHAMP,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP
+ .moves = {MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP}
},
{
.iv = 255,
.lvl = 33,
.species = SPECIES_MEDITITE,
.heldItem = ITEM_NONE,
- .moves = MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOCUS_PUNCH
+ .moves = {MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOCUS_PUNCH}
},
{
.iv = 255,
.lvl = 35,
.species = SPECIES_HITMONTOP,
.heldItem = ITEM_NONE,
- .moves = MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK
+ .moves = {MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK}
},
{
.iv = 255,
.lvl = 37,
.species = SPECIES_HARIYAMA,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE
+ .moves = {MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE}
}
};
@@ -10487,28 +10487,28 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly3[] = {
.lvl = 38,
.species = SPECIES_MACHAMP,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP
+ .moves = {MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP}
},
{
.iv = 255,
.lvl = 38,
.species = SPECIES_MEDICHAM,
.heldItem = ITEM_NONE,
- .moves = MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOCUS_PUNCH
+ .moves = {MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOCUS_PUNCH}
},
{
.iv = 255,
.lvl = 40,
.species = SPECIES_HITMONTOP,
.heldItem = ITEM_NONE,
- .moves = MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK
+ .moves = {MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK}
},
{
.iv = 255,
.lvl = 42,
.species = SPECIES_HARIYAMA,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE
+ .moves = {MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE}
}
};
@@ -10518,35 +10518,35 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly4[] = {
.lvl = 40,
.species = SPECIES_HITMONCHAN,
.heldItem = ITEM_NONE,
- .moves = MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH
+ .moves = {MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}
},
{
.iv = 255,
.lvl = 43,
.species = SPECIES_MACHAMP,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP
+ .moves = {MOVE_KARATE_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP}
},
{
.iv = 255,
.lvl = 43,
.species = SPECIES_MEDICHAM,
.heldItem = ITEM_NONE,
- .moves = MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_PSYCHIC
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_PSYCHIC}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_HITMONTOP,
.heldItem = ITEM_NONE,
- .moves = MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK
+ .moves = {MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK}
},
{
.iv = 255,
.lvl = 47,
.species = SPECIES_HARIYAMA,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE
+ .moves = {MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE}
}
};
@@ -10556,42 +10556,42 @@ static const struct TrainerMonItemCustomMoves sParty_Brawly5[] = {
.lvl = 46,
.species = SPECIES_HITMONLEE,
.heldItem = ITEM_NONE,
- .moves = MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, MOVE_BULK_UP
+ .moves = {MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, MOVE_BULK_UP}
},
{
.iv = 255,
.lvl = 46,
.species = SPECIES_HITMONCHAN,
.heldItem = ITEM_NONE,
- .moves = MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH
+ .moves = {MOVE_SKY_UPPERCUT, MOVE_PROTECT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_MACHAMP,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP
+ .moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_BULK_UP}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_MEDICHAM,
.heldItem = ITEM_NONE,
- .moves = MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_PSYCHIC
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_PSYCHIC}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_HITMONTOP,
.heldItem = ITEM_NONE,
- .moves = MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK
+ .moves = {MOVE_PURSUIT, MOVE_COUNTER, MOVE_PROTECT, MOVE_TRIPLE_KICK}
},
{
.iv = 255,
.lvl = 52,
.species = SPECIES_HARIYAMA,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE
+ .moves = {MOVE_FAKE_OUT, MOVE_FOCUS_PUNCH, MOVE_BELLY_DRUM, MOVE_EARTHQUAKE}
}
};
@@ -10601,28 +10601,28 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson2[] = {
.lvl = 36,
.species = SPECIES_MAREEP,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 36,
.species = SPECIES_ELECTRODE,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE
+ .moves = {MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE}
},
{
.iv = 255,
.lvl = 38,
.species = SPECIES_MAGNETON,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE
+ .moves = {MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE}
},
{
.iv = 255,
.lvl = 40,
.species = SPECIES_MANECTRIC,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT
+ .moves = {MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT}
}
};
@@ -10632,35 +10632,35 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson3[] = {
.lvl = 39,
.species = SPECIES_PIKACHU,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_SHOCK_WAVE
+ .moves = {MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_SHOCK_WAVE}
},
{
.iv = 255,
.lvl = 41,
.species = SPECIES_FLAAFFY,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 41,
.species = SPECIES_ELECTRODE,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE
+ .moves = {MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE}
},
{
.iv = 255,
.lvl = 43,
.species = SPECIES_MAGNETON,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE
+ .moves = {MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_MANECTRIC,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT
+ .moves = {MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT}
}
};
@@ -10670,35 +10670,35 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson4[] = {
.lvl = 44,
.species = SPECIES_RAICHU,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_PROTECT
+ .moves = {MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 46,
.species = SPECIES_AMPHAROS,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 46,
.species = SPECIES_ELECTRODE,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE
+ .moves = {MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_MAGNETON,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE
+ .moves = {MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_MANECTRIC,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT
+ .moves = {MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT}
}
};
@@ -10708,42 +10708,42 @@ static const struct TrainerMonItemCustomMoves sParty_Wattson5[] = {
.lvl = 50,
.species = SPECIES_ELECTABUZZ,
.heldItem = ITEM_NONE,
- .moves = MOVE_SWIFT, MOVE_FOCUS_PUNCH, MOVE_THUNDER_PUNCH, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_SWIFT, MOVE_FOCUS_PUNCH, MOVE_THUNDER_PUNCH, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 51,
.species = SPECIES_RAICHU,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_PROTECT
+ .moves = {MOVE_THUNDER, MOVE_SLAM, MOVE_RAIN_DANCE, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 51,
.species = SPECIES_AMPHAROS,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_ELECTRODE,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE
+ .moves = {MOVE_ROLLOUT, MOVE_THUNDER, MOVE_EXPLOSION, MOVE_RAIN_DANCE}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_MAGNETON,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE
+ .moves = {MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_THUNDER, MOVE_RAIN_DANCE}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_MANECTRIC,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT
+ .moves = {MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PROTECT}
}
};
@@ -10753,28 +10753,28 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery2[] = {
.lvl = 38,
.species = SPECIES_MAGCARGO,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE
+ .moves = {MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 36,
.species = SPECIES_PONYTA,
.heldItem = ITEM_NONE,
- .moves = MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE
+ .moves = {MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE}
},
{
.iv = 255,
.lvl = 38,
.species = SPECIES_CAMERUPT,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT}
},
{
.iv = 255,
.lvl = 40,
.species = SPECIES_TORKOAL,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT}
}
};
@@ -10784,35 +10784,35 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery3[] = {
.lvl = 41,
.species = SPECIES_GROWLITHE,
.heldItem = ITEM_NONE,
- .moves = MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_SUNNY_DAY
+ .moves = {MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_SUNNY_DAY}
},
{
.iv = 255,
.lvl = 43,
.species = SPECIES_MAGCARGO,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE
+ .moves = {MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 41,
.species = SPECIES_PONYTA,
.heldItem = ITEM_NONE,
- .moves = MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE
+ .moves = {MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE}
},
{
.iv = 255,
.lvl = 43,
.species = SPECIES_CAMERUPT,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_TORKOAL,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT}
}
};
@@ -10822,42 +10822,42 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery4[] = {
.lvl = 46,
.species = SPECIES_HOUNDOUR,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, MOVE_SUNNY_DAY
+ .moves = {MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, MOVE_SUNNY_DAY}
},
{
.iv = 255,
.lvl = 46,
.species = SPECIES_GROWLITHE,
.heldItem = ITEM_NONE,
- .moves = MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_ROAR
+ .moves = {MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_ROAR}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_MAGCARGO,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE
+ .moves = {MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 46,
.species = SPECIES_RAPIDASH,
.heldItem = ITEM_NONE,
- .moves = MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE
+ .moves = {MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_CAMERUPT,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_TORKOAL,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT}
}
};
@@ -10867,42 +10867,42 @@ static const struct TrainerMonItemCustomMoves sParty_Flannery5[] = {
.lvl = 51,
.species = SPECIES_ARCANINE,
.heldItem = ITEM_NONE,
- .moves = MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_ROAR
+ .moves = {MOVE_HELPING_HAND, MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_ROAR}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_MAGCARGO,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE
+ .moves = {MOVE_OVERHEAT, MOVE_ATTRACT, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE}
},
{
.iv = 255,
.lvl = 51,
.species = SPECIES_HOUNDOOM,
.heldItem = ITEM_NONE,
- .moves = MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, MOVE_SUNNY_DAY
+ .moves = {MOVE_ROAR, MOVE_SOLAR_BEAM, MOVE_TAUNT, MOVE_SUNNY_DAY}
},
{
.iv = 255,
.lvl = 51,
.species = SPECIES_RAPIDASH,
.heldItem = ITEM_NONE,
- .moves = MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE
+ .moves = {MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_SOLAR_BEAM, MOVE_BOUNCE}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_CAMERUPT,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_ATTRACT}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_TORKOAL,
.heldItem = ITEM_WHITE_HERB,
- .moves = MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_ATTRACT}
}
};
@@ -10912,28 +10912,28 @@ static const struct TrainerMonItemCustomMoves sParty_Norman2[] = {
.lvl = 42,
.species = SPECIES_CHANSEY,
.heldItem = ITEM_NONE,
- .moves = MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH}
},
{
.iv = 255,
.lvl = 42,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST
+ .moves = {MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST}
},
{
.iv = 255,
.lvl = 43,
.species = SPECIES_SPINDA,
.heldItem = ITEM_NONE,
- .moves = MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS
+ .moves = {MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL
+ .moves = {MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL}
}
};
@@ -10943,35 +10943,35 @@ static const struct TrainerMonItemCustomMoves sParty_Norman3[] = {
.lvl = 47,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST
+ .moves = {MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST}
},
{
.iv = 255,
.lvl = 47,
.species = SPECIES_CHANSEY,
.heldItem = ITEM_NONE,
- .moves = MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_KANGASKHAN,
.heldItem = ITEM_NONE,
- .moves = MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL
+ .moves = {MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_SPINDA,
.heldItem = ITEM_NONE,
- .moves = MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS
+ .moves = {MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL
+ .moves = {MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL}
}
};
@@ -10981,35 +10981,35 @@ static const struct TrainerMonItemCustomMoves sParty_Norman4[] = {
.lvl = 52,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST
+ .moves = {MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST}
},
{
.iv = 255,
.lvl = 52,
.species = SPECIES_BLISSEY,
.heldItem = ITEM_NONE,
- .moves = MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_KANGASKHAN,
.heldItem = ITEM_NONE,
- .moves = MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL
+ .moves = {MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_SPINDA,
.heldItem = ITEM_NONE,
- .moves = MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS
+ .moves = {MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL
+ .moves = {MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL}
}
};
@@ -11019,42 +11019,42 @@ static const struct TrainerMonItemCustomMoves sParty_Norman5[] = {
.lvl = 57,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST
+ .moves = {MOVE_BLIZZARD, MOVE_SHADOW_BALL, MOVE_DOUBLE_EDGE, MOVE_FIRE_BLAST}
},
{
.iv = 255,
.lvl = 57,
.species = SPECIES_BLISSEY,
.heldItem = ITEM_NONE,
- .moves = MOVE_PROTECT, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH
+ .moves = {MOVE_PROTECT, MOVE_SING, MOVE_SKILL_SWAP, MOVE_FOCUS_PUNCH}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_KANGASKHAN,
.heldItem = ITEM_NONE,
- .moves = MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL
+ .moves = {MOVE_FAKE_OUT, MOVE_DIZZY_PUNCH, MOVE_ENDURE, MOVE_REVERSAL}
},
{
.iv = 255,
.lvl = 57,
.species = SPECIES_TAUROS,
.heldItem = ITEM_NONE,
- .moves = MOVE_TAKE_DOWN, MOVE_PROTECT, MOVE_FIRE_BLAST, MOVE_EARTHQUAKE
+ .moves = {MOVE_TAKE_DOWN, MOVE_PROTECT, MOVE_FIRE_BLAST, MOVE_EARTHQUAKE}
},
{
.iv = 255,
.lvl = 58,
.species = SPECIES_SPINDA,
.heldItem = ITEM_NONE,
- .moves = MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS
+ .moves = {MOVE_TEETER_DANCE, MOVE_SKILL_SWAP, MOVE_FACADE, MOVE_HYPNOSIS}
},
{
.iv = 255,
.lvl = 60,
.species = SPECIES_SLAKING,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL
+ .moves = {MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_BALL}
}
};
@@ -11064,35 +11064,35 @@ static const struct TrainerMonItemCustomMoves sParty_Winona2[] = {
.lvl = 40,
.species = SPECIES_DRATINI,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM
+ .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 38,
.species = SPECIES_TROPIUS,
.heldItem = ITEM_NONE,
- .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE
+ .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE}
},
{
.iv = 255,
.lvl = 41,
.species = SPECIES_PELIPPER,
.heldItem = ITEM_NONE,
- .moves = MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ .moves = {MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 43,
.species = SPECIES_SKARMORY,
.heldItem = ITEM_NONE,
- .moves = MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ .moves = {MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_ALTARIA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE
+ .moves = {MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE}
}
};
@@ -11102,42 +11102,42 @@ static const struct TrainerMonItemCustomMoves sParty_Winona3[] = {
.lvl = 43,
.species = SPECIES_HOOTHOOT,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER
+ .moves = {MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER}
},
{
.iv = 255,
.lvl = 43,
.species = SPECIES_TROPIUS,
.heldItem = ITEM_NONE,
- .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE
+ .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE}
},
{
.iv = 255,
.lvl = 45,
.species = SPECIES_DRAGONAIR,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM
+ .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 46,
.species = SPECIES_PELIPPER,
.heldItem = ITEM_NONE,
- .moves = MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ .moves = {MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_SKARMORY,
.heldItem = ITEM_NONE,
- .moves = MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ .moves = {MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_ALTARIA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE
+ .moves = {MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE}
}
};
@@ -11147,42 +11147,42 @@ static const struct TrainerMonItemCustomMoves sParty_Winona4[] = {
.lvl = 48,
.species = SPECIES_NOCTOWL,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER
+ .moves = {MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER}
},
{
.iv = 255,
.lvl = 49,
.species = SPECIES_TROPIUS,
.heldItem = ITEM_NONE,
- .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE
+ .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_DRAGONAIR,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM
+ .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 51,
.species = SPECIES_PELIPPER,
.heldItem = ITEM_NONE,
- .moves = MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ .moves = {MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_SKARMORY,
.heldItem = ITEM_NONE,
- .moves = MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ .moves = {MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_ALTARIA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE
+ .moves = {MOVE_AERIAL_ACE, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE}
}
};
@@ -11192,42 +11192,42 @@ static const struct TrainerMonItemCustomMoves sParty_Winona5[] = {
.lvl = 53,
.species = SPECIES_NOCTOWL,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER
+ .moves = {MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_DREAM_EATER}
},
{
.iv = 255,
.lvl = 54,
.species = SPECIES_TROPIUS,
.heldItem = ITEM_NONE,
- .moves = MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE
+ .moves = {MOVE_SUNNY_DAY, MOVE_AERIAL_ACE, MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_PELIPPER,
.heldItem = ITEM_NONE,
- .moves = MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE
+ .moves = {MOVE_SURF, MOVE_SUPERSONIC, MOVE_PROTECT, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_DRAGONITE,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM
+ .moves = {MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 58,
.species = SPECIES_SKARMORY,
.heldItem = ITEM_NONE,
- .moves = MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE
+ .moves = {MOVE_WHIRLWIND, MOVE_SPIKES, MOVE_STEEL_WING, MOVE_AERIAL_ACE}
},
{
.iv = 255,
.lvl = 60,
.species = SPECIES_ALTARIA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_SKY_ATTACK, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE
+ .moves = {MOVE_SKY_ATTACK, MOVE_REST, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE}
}
};
@@ -11237,35 +11237,35 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza2[] = {
.lvl = 48,
.species = SPECIES_SLOWPOKE,
.heldItem = ITEM_NONE,
- .moves = MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT
+ .moves = {MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 49,
.species = SPECIES_CLAYDOL,
.heldItem = ITEM_NONE,
- .moves = MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 49,
.species = SPECIES_XATU,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ .moves = {MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_LUNATONE,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND
+ .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND}
},
{
.iv = 255,
.lvl = 50,
.species = SPECIES_SOLROCK,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER}
}
};
@@ -11275,42 +11275,42 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza3[] = {
.lvl = 53,
.species = SPECIES_DROWZEE,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT
+ .moves = {MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_SLOWPOKE,
.heldItem = ITEM_NONE,
- .moves = MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT
+ .moves = {MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 54,
.species = SPECIES_CLAYDOL,
.heldItem = ITEM_NONE,
- .moves = MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 54,
.species = SPECIES_XATU,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ .moves = {MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_LUNATONE,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND
+ .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND}
},
{
.iv = 255,
.lvl = 55,
.species = SPECIES_SOLROCK,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER}
}
};
@@ -11320,42 +11320,42 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza4[] = {
.lvl = 58,
.species = SPECIES_HYPNO,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT
+ .moves = {MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 59,
.species = SPECIES_CLAYDOL,
.heldItem = ITEM_NONE,
- .moves = MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 58,
.species = SPECIES_SLOWPOKE,
.heldItem = ITEM_NONE,
- .moves = MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT
+ .moves = {MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 59,
.species = SPECIES_XATU,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ .moves = {MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND}
},
{
.iv = 255,
.lvl = 60,
.species = SPECIES_LUNATONE,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND
+ .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND}
},
{
.iv = 255,
.lvl = 60,
.species = SPECIES_SOLROCK,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER}
}
};
@@ -11365,42 +11365,42 @@ static const struct TrainerMonItemCustomMoves sParty_TateAndLiza5[] = {
.lvl = 63,
.species = SPECIES_HYPNO,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT
+ .moves = {MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEADBUTT, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 64,
.species = SPECIES_CLAYDOL,
.heldItem = ITEM_NONE,
- .moves = MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN
+ .moves = {MOVE_EARTHQUAKE, MOVE_EXPLOSION, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN}
},
{
.iv = 255,
.lvl = 63,
.species = SPECIES_SLOWKING,
.heldItem = ITEM_NONE,
- .moves = MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT
+ .moves = {MOVE_YAWN, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_PROTECT}
},
{
.iv = 255,
.lvl = 64,
.species = SPECIES_XATU,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND
+ .moves = {MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_CALM_MIND}
},
{
.iv = 255,
.lvl = 65,
.species = SPECIES_LUNATONE,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND
+ .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_REST, MOVE_CALM_MIND}
},
{
.iv = 255,
.lvl = 65,
.species = SPECIES_SOLROCK,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER
+ .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_PSYCHIC, MOVE_FLAMETHROWER}
}
};
@@ -11410,35 +11410,35 @@ static const struct TrainerMonItemCustomMoves sParty_Juan2[] = {
.lvl = 46,
.species = SPECIES_POLIWAG,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP
+ .moves = {MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP}
},
{
.iv = 255,
.lvl = 46,
.species = SPECIES_WHISCASH,
.heldItem = ITEM_NONE,
- .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE
+ .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_WALREIN,
.heldItem = ITEM_NONE,
- .moves = MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM
+ .moves = {MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 48,
.species = SPECIES_CRAWDAUNT,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_REST, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_DOUBLE_TEAM
+ .moves = {MOVE_REST, MOVE_CRABHAMMER, MOVE_TAUNT, MOVE_DOUBLE_TEAM}
},
{
.iv = 255,
.lvl = 51,
.species = SPECIES_KINGDRA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ .moves = {MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST}
}
};
@@ -11448,35 +11448,35 @@ static const struct TrainerMonItemCustomMoves sParty_Juan3[] = {
.lvl = 50,
.species = SPECIES_POLIWHIRL,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP
+ .moves = {MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP}
},
{
.iv = 255,
.lvl = 51,
.species = SPECIES_WHISCASH,
.heldItem = ITEM_NONE,
- .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE
+ .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_WALREIN,
.heldItem = ITEM_NONE,
- .moves = MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM
+ .moves = {MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 53,
.species = SPECIES_CRAWDAUNT,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM
+ .moves = {MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM}
},
{
.iv = 255,
.lvl = 56,
.species = SPECIES_KINGDRA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ .moves = {MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST}
}
};
@@ -11486,42 +11486,42 @@ static const struct TrainerMonItemCustomMoves sParty_Juan4[] = {
.lvl = 56,
.species = SPECIES_LAPRAS,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY
+ .moves = {MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY}
},
{
.iv = 255,
.lvl = 58,
.species = SPECIES_WHISCASH,
.heldItem = ITEM_NONE,
- .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE
+ .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE}
},
{
.iv = 255,
.lvl = 56,
.species = SPECIES_POLIWHIRL,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP
+ .moves = {MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_HYDRO_PUMP}
},
{
.iv = 255,
.lvl = 58,
.species = SPECIES_WALREIN,
.heldItem = ITEM_NONE,
- .moves = MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM
+ .moves = {MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_ICE_BEAM}
},
{
.iv = 255,
.lvl = 58,
.species = SPECIES_CRAWDAUNT,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM
+ .moves = {MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM}
},
{
.iv = 255,
.lvl = 61,
.species = SPECIES_KINGDRA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ .moves = {MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST}
}
};
@@ -11531,42 +11531,42 @@ static const struct TrainerMonItemCustomMoves sParty_Juan5[] = {
.lvl = 61,
.species = SPECIES_LAPRAS,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY
+ .moves = {MOVE_HYDRO_PUMP, MOVE_PERISH_SONG, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY}
},
{
.iv = 255,
.lvl = 63,
.species = SPECIES_WHISCASH,
.heldItem = ITEM_NONE,
- .moves = MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE
+ .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_FISSURE}
},
{
.iv = 255,
.lvl = 61,
.species = SPECIES_POLITOED,
.heldItem = ITEM_NONE,
- .moves = MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_HYDRO_PUMP, MOVE_PERISH_SONG
+ .moves = {MOVE_HYPNOSIS, MOVE_RAIN_DANCE, MOVE_HYDRO_PUMP, MOVE_PERISH_SONG}
},
{
.iv = 255,
.lvl = 63,
.species = SPECIES_WALREIN,
.heldItem = ITEM_NONE,
- .moves = MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_SHEER_COLD
+ .moves = {MOVE_WATER_PULSE, MOVE_BODY_SLAM, MOVE_PROTECT, MOVE_SHEER_COLD}
},
{
.iv = 255,
.lvl = 63,
.species = SPECIES_CRAWDAUNT,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM
+ .moves = {MOVE_REST, MOVE_GUILLOTINE, MOVE_TAUNT, MOVE_DOUBLE_TEAM}
},
{
.iv = 255,
.lvl = 66,
.species = SPECIES_KINGDRA,
.heldItem = ITEM_CHESTO_BERRY,
- .moves = MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST
+ .moves = {MOVE_WATER_PULSE, MOVE_DOUBLE_TEAM, MOVE_ICE_BEAM, MOVE_REST}
}
};
@@ -11576,14 +11576,14 @@ static const struct TrainerMonItemCustomMoves sParty_Angelo[] = {
.lvl = 17,
.species = SPECIES_ILLUMISE,
.heldItem = ITEM_NONE,
- .moves = MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CHARM, MOVE_NONE
+ .moves = {MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CHARM, MOVE_NONE}
},
{
.iv = 100,
.lvl = 17,
.species = SPECIES_VOLBEAT,
.heldItem = ITEM_NONE,
- .moves = MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CONFUSE_RAY, MOVE_NONE
+ .moves = {MOVE_SHOCK_WAVE, MOVE_QUICK_ATTACK, MOVE_CONFUSE_RAY, MOVE_NONE}
}
};
@@ -11601,42 +11601,42 @@ static const struct TrainerMonItemCustomMoves sParty_Steven[] = {
.lvl = 77,
.species = SPECIES_SKARMORY,
.heldItem = ITEM_NONE,
- .moves = MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_SPIKES, MOVE_STEEL_WING
+ .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_SPIKES, MOVE_STEEL_WING}
},
{
.iv = 255,
.lvl = 75,
.species = SPECIES_CLAYDOL,
.heldItem = ITEM_NONE,
- .moves = MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_ANCIENT_POWER, MOVE_EARTHQUAKE
+ .moves = {MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_ANCIENT_POWER, MOVE_EARTHQUAKE}
},
{
.iv = 255,
.lvl = 76,
.species = SPECIES_AGGRON,
.heldItem = ITEM_NONE,
- .moves = MOVE_THUNDER, MOVE_EARTHQUAKE, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW
+ .moves = {MOVE_THUNDER, MOVE_EARTHQUAKE, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}
},
{
.iv = 255,
.lvl = 76,
.species = SPECIES_CRADILY,
.heldItem = ITEM_NONE,
- .moves = MOVE_GIGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_INGRAIN, MOVE_CONFUSE_RAY
+ .moves = {MOVE_GIGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_INGRAIN, MOVE_CONFUSE_RAY}
},
{
.iv = 255,
.lvl = 76,
.species = SPECIES_ARMALDO,
.heldItem = ITEM_NONE,
- .moves = MOVE_WATER_PULSE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, MOVE_SLASH
+ .moves = {MOVE_WATER_PULSE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, MOVE_SLASH}
},
{
.iv = 255,
.lvl = 78,
.species = SPECIES_METAGROSS,
.heldItem = ITEM_SITRUS_BERRY,
- .moves = MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_SHADOW_BALL
+ .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_SHADOW_BALL}
}
};
@@ -12419,7 +12419,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Leaf[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_Brendan16[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_BrendanLinkPlaceholder[] = {
{
.iv = 0,
.lvl = 5,
@@ -12427,7 +12427,7 @@ static const struct TrainerMonNoItemDefaultMoves sParty_Brendan16[] = {
}
};
-static const struct TrainerMonNoItemDefaultMoves sParty_May16[] = {
+static const struct TrainerMonNoItemDefaultMoves sParty_MayLinkPlaceholder[] = {
{
.iv = 0,
.lvl = 5,
diff --git a/src/data/trainers.h b/src/data/trainers.h
index c30d21afd..163a8296d 100644
--- a/src/data/trainers.h
+++ b/src/data/trainers.h
@@ -27,7 +27,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Sawyer1},
},
- [TRAINER_GRUNT_1] =
+ [TRAINER_GRUNT_AQUA_HIDEOUT_1] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -37,11 +37,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt1),
- .party = {.NoItemDefaultMoves = sParty_Grunt1},
+ .partySize = ARRAY_COUNT(sParty_GruntAquaHideout1),
+ .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout1},
},
- [TRAINER_GRUNT_2] =
+ [TRAINER_GRUNT_AQUA_HIDEOUT_2] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -51,11 +51,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt2),
- .party = {.NoItemDefaultMoves = sParty_Grunt2},
+ .partySize = ARRAY_COUNT(sParty_GruntAquaHideout2),
+ .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout2},
},
- [TRAINER_GRUNT_3] =
+ [TRAINER_GRUNT_AQUA_HIDEOUT_3] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -65,11 +65,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt3),
- .party = {.NoItemDefaultMoves = sParty_Grunt3},
+ .partySize = ARRAY_COUNT(sParty_GruntAquaHideout3),
+ .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout3},
},
- [TRAINER_GRUNT_4] =
+ [TRAINER_GRUNT_AQUA_HIDEOUT_4] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -79,11 +79,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt4),
- .party = {.NoItemDefaultMoves = sParty_Grunt4},
+ .partySize = ARRAY_COUNT(sParty_GruntAquaHideout4),
+ .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout4},
},
- [TRAINER_GRUNT_5] =
+ [TRAINER_GRUNT_SEAFLOOR_CAVERN_1] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -93,11 +93,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt5),
- .party = {.NoItemDefaultMoves = sParty_Grunt5},
+ .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern1),
+ .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern1},
},
- [TRAINER_GRUNT_6] =
+ [TRAINER_GRUNT_SEAFLOOR_CAVERN_2] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -107,11 +107,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt6),
- .party = {.NoItemDefaultMoves = sParty_Grunt6},
+ .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern2),
+ .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern2},
},
- [TRAINER_GRUNT_7] =
+ [TRAINER_GRUNT_SEAFLOOR_CAVERN_3] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -121,8 +121,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt7),
- .party = {.NoItemDefaultMoves = sParty_Grunt7},
+ .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern3),
+ .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern3},
},
[TRAINER_GABRIELLE_1] =
@@ -139,7 +139,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Gabrielle1},
},
- [TRAINER_GRUNT_8] =
+ [TRAINER_GRUNT_PETALBURG_WOODS] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -149,8 +149,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt8),
- .party = {.NoItemDefaultMoves = sParty_Grunt8},
+ .partySize = ARRAY_COUNT(sParty_GruntPetalburgWoods),
+ .party = {.NoItemDefaultMoves = sParty_GruntPetalburgWoods},
},
[TRAINER_MARCEL] =
@@ -195,7 +195,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Ed},
},
- [TRAINER_GRUNT_9] =
+ [TRAINER_GRUNT_SEAFLOOR_CAVERN_4] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -205,8 +205,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt9),
- .party = {.NoItemDefaultMoves = sParty_Grunt9},
+ .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern4),
+ .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern4},
},
[TRAINER_DECLAN] =
@@ -223,7 +223,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Declan},
},
- [TRAINER_GRUNT_10] =
+ [TRAINER_GRUNT_RUSTURF_TUNNEL] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -233,11 +233,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt10),
- .party = {.NoItemDefaultMoves = sParty_Grunt10},
+ .partySize = ARRAY_COUNT(sParty_GruntRusturfTunnel),
+ .party = {.NoItemDefaultMoves = sParty_GruntRusturfTunnel},
},
- [TRAINER_GRUNT_11] =
+ [TRAINER_GRUNT_WEATHER_INST_1] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -247,11 +247,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt11),
- .party = {.NoItemDefaultMoves = sParty_Grunt11},
+ .partySize = ARRAY_COUNT(sParty_GruntWeatherInst1),
+ .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst1},
},
- [TRAINER_GRUNT_12] =
+ [TRAINER_GRUNT_WEATHER_INST_2] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -261,11 +261,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt12),
- .party = {.NoItemDefaultMoves = sParty_Grunt12},
+ .partySize = ARRAY_COUNT(sParty_GruntWeatherInst2),
+ .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst2},
},
- [TRAINER_GRUNT_13] =
+ [TRAINER_GRUNT_WEATHER_INST_3] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -275,11 +275,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt13),
- .party = {.NoItemDefaultMoves = sParty_Grunt13},
+ .partySize = ARRAY_COUNT(sParty_GruntWeatherInst3),
+ .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst3},
},
- [TRAINER_GRUNT_14] =
+ [TRAINER_GRUNT_MUSEUM_1] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -289,11 +289,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt14),
- .party = {.NoItemDefaultMoves = sParty_Grunt14},
+ .partySize = ARRAY_COUNT(sParty_GruntMuseum1),
+ .party = {.NoItemDefaultMoves = sParty_GruntMuseum1},
},
- [TRAINER_GRUNT_15] =
+ [TRAINER_GRUNT_MUSEUM_2] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -303,11 +303,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt15),
- .party = {.NoItemDefaultMoves = sParty_Grunt15},
+ .partySize = ARRAY_COUNT(sParty_GruntMuseum2),
+ .party = {.NoItemDefaultMoves = sParty_GruntMuseum2},
},
- [TRAINER_GRUNT_16] =
+ [TRAINER_GRUNT_SPACE_CENTER_1] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -317,11 +317,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt16),
- .party = {.NoItemDefaultMoves = sParty_Grunt16},
+ .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter1),
+ .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter1},
},
- [TRAINER_GRUNT_17] =
+ [TRAINER_GRUNT_MT_PYRE_1] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -331,11 +331,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt17),
- .party = {.NoItemDefaultMoves = sParty_Grunt17},
+ .partySize = ARRAY_COUNT(sParty_GruntMtPyre1),
+ .party = {.NoItemDefaultMoves = sParty_GruntMtPyre1},
},
- [TRAINER_GRUNT_18] =
+ [TRAINER_GRUNT_MT_PYRE_2] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -345,11 +345,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt18),
- .party = {.NoItemDefaultMoves = sParty_Grunt18},
+ .partySize = ARRAY_COUNT(sParty_GruntMtPyre2),
+ .party = {.NoItemDefaultMoves = sParty_GruntMtPyre2},
},
- [TRAINER_GRUNT_19] =
+ [TRAINER_GRUNT_MT_PYRE_3] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -359,11 +359,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt19),
- .party = {.NoItemDefaultMoves = sParty_Grunt19},
+ .partySize = ARRAY_COUNT(sParty_GruntMtPyre3),
+ .party = {.NoItemDefaultMoves = sParty_GruntMtPyre3},
},
- [TRAINER_GRUNT_20] =
+ [TRAINER_GRUNT_WEATHER_INST_4] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -373,11 +373,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt20),
- .party = {.NoItemDefaultMoves = sParty_Grunt20},
+ .partySize = ARRAY_COUNT(sParty_GruntWeatherInst4),
+ .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst4},
},
- [TRAINER_GRUNT_21] =
+ [TRAINER_GRUNT_AQUA_HIDEOUT_5] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -387,11 +387,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt21),
- .party = {.NoItemDefaultMoves = sParty_Grunt21},
+ .partySize = ARRAY_COUNT(sParty_GruntAquaHideout5),
+ .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout5},
},
- [TRAINER_GRUNT_22] =
+ [TRAINER_GRUNT_AQUA_HIDEOUT_6] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -401,8 +401,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt22),
- .party = {.NoItemDefaultMoves = sParty_Grunt22},
+ .partySize = ARRAY_COUNT(sParty_GruntAquaHideout6),
+ .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout6},
},
[TRAINER_FREDRICK] =
@@ -447,7 +447,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Zander},
},
- [TRAINER_SHELLY_1] =
+ [TRAINER_SHELLY_WEATHER_INSTITUTE] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_AQUA_ADMIN,
@@ -457,11 +457,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Shelly1),
- .party = {.NoItemDefaultMoves = sParty_Shelly1},
+ .partySize = ARRAY_COUNT(sParty_ShellyWeatherInstitute),
+ .party = {.NoItemDefaultMoves = sParty_ShellyWeatherInstitute},
},
- [TRAINER_SHELLY_2] =
+ [TRAINER_SHELLY_SEAFLOOR_CAVERN] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_AQUA_ADMIN,
@@ -471,8 +471,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Shelly2),
- .party = {.NoItemDefaultMoves = sParty_Shelly2},
+ .partySize = ARRAY_COUNT(sParty_ShellySeafloorCavern),
+ .party = {.NoItemDefaultMoves = sParty_ShellySeafloorCavern},
},
[TRAINER_ARCHIE] =
@@ -1623,7 +1623,7 @@ const struct Trainer gTrainers[] = {
.party = {.ItemCustomMoves = sParty_Daphne},
},
- [TRAINER_GRUNT_23] =
+ [TRAINER_GRUNT_SPACE_CENTER_2] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -1633,8 +1633,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt23),
- .party = {.NoItemDefaultMoves = sParty_Grunt23},
+ .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter2),
+ .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter2},
},
[TRAINER_CINDY_2] =
@@ -2043,7 +2043,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Mark},
},
- [TRAINER_GRUNT_24] =
+ [TRAINER_GRUNT_MT_CHIMNEY_1] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -2053,8 +2053,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt24),
- .party = {.NoItemDefaultMoves = sParty_Grunt24},
+ .partySize = ARRAY_COUNT(sParty_GruntMtChimney1),
+ .party = {.NoItemDefaultMoves = sParty_GruntMtChimney1},
},
[TRAINER_STEVE_2] =
@@ -2687,7 +2687,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemCustomMoves = sParty_Kirk},
},
- [TRAINER_GRUNT_25] =
+ [TRAINER_GRUNT_AQUA_HIDEOUT_7] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -2697,11 +2697,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt25),
- .party = {.NoItemDefaultMoves = sParty_Grunt25},
+ .partySize = ARRAY_COUNT(sParty_GruntAquaHideout7),
+ .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout7},
},
- [TRAINER_GRUNT_26] =
+ [TRAINER_GRUNT_AQUA_HIDEOUT_8] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -2711,8 +2711,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt26),
- .party = {.NoItemDefaultMoves = sParty_Grunt26},
+ .partySize = ARRAY_COUNT(sParty_GruntAquaHideout8),
+ .party = {.NoItemDefaultMoves = sParty_GruntAquaHideout8},
},
[TRAINER_SHAWN] =
@@ -7195,7 +7195,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Hector},
},
- [TRAINER_TABITHA_1] =
+ [TRAINER_TABITHA_MOSSDEEP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
@@ -7205,8 +7205,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tabitha1),
- .party = {.NoItemDefaultMoves = sParty_Tabitha1},
+ .partySize = ARRAY_COUNT(sParty_TabithaMossdeep),
+ .party = {.NoItemDefaultMoves = sParty_TabithaMossdeep},
},
[TRAINER_EDWIN_2] =
@@ -7265,7 +7265,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Edwin5},
},
- [TRAINER_WALLY_1] =
+ [TRAINER_WALLY_VR_1] =
{
.partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7275,11 +7275,11 @@ const struct Trainer gTrainers[] = {
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wally1),
- .party = {.NoItemCustomMoves = sParty_Wally1},
+ .partySize = ARRAY_COUNT(sParty_WallyVR1),
+ .party = {.NoItemCustomMoves = sParty_WallyVR1},
},
- [TRAINER_BRENDAN_1] =
+ [TRAINER_BRENDAN_ROUTE_103_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7289,11 +7289,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan1),
- .party = {.NoItemDefaultMoves = sParty_Brendan1},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute103Mudkip),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Mudkip},
},
- [TRAINER_BRENDAN_2] =
+ [TRAINER_BRENDAN_ROUTE_110_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7303,11 +7303,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan2),
- .party = {.NoItemDefaultMoves = sParty_Brendan2},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute110Mudkip),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Mudkip},
},
- [TRAINER_BRENDAN_3] =
+ [TRAINER_BRENDAN_ROUTE_119_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7317,11 +7317,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan3),
- .party = {.NoItemDefaultMoves = sParty_Brendan3},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute119Mudkip),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Mudkip},
},
- [TRAINER_BRENDAN_4] =
+ [TRAINER_BRENDAN_ROUTE_103_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7331,11 +7331,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_Brendan4),
- .party = {.NoItemDefaultMoves = sParty_Brendan4},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute103Treecko),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Treecko},
},
- [TRAINER_BRENDAN_5] =
+ [TRAINER_BRENDAN_ROUTE_110_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7345,11 +7345,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan5),
- .party = {.NoItemDefaultMoves = sParty_Brendan5},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute110Treecko),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Treecko},
},
- [TRAINER_BRENDAN_6] =
+ [TRAINER_BRENDAN_ROUTE_119_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7359,11 +7359,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan6),
- .party = {.NoItemDefaultMoves = sParty_Brendan6},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute119Treecko),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Treecko},
},
- [TRAINER_BRENDAN_7] =
+ [TRAINER_BRENDAN_ROUTE_103_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7373,11 +7373,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan7),
- .party = {.NoItemDefaultMoves = sParty_Brendan7},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute103Torchic),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute103Torchic},
},
- [TRAINER_BRENDAN_8] =
+ [TRAINER_BRENDAN_ROUTE_110_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7387,11 +7387,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan8),
- .party = {.NoItemDefaultMoves = sParty_Brendan8},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute110Torchic),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute110Torchic},
},
- [TRAINER_BRENDAN_9] =
+ [TRAINER_BRENDAN_ROUTE_119_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7401,11 +7401,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan9),
- .party = {.NoItemDefaultMoves = sParty_Brendan9},
+ .partySize = ARRAY_COUNT(sParty_BrendanRoute119Torchic),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRoute119Torchic},
},
- [TRAINER_MAY_1] =
+ [TRAINER_MAY_ROUTE_103_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7415,11 +7415,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May1),
- .party = {.NoItemDefaultMoves = sParty_May1},
+ .partySize = ARRAY_COUNT(sParty_MayRoute103Mudkip),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute103Mudkip},
},
- [TRAINER_MAY_2] =
+ [TRAINER_MAY_ROUTE_110_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7429,11 +7429,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May2),
- .party = {.NoItemDefaultMoves = sParty_May2},
+ .partySize = ARRAY_COUNT(sParty_MayRoute110Mudkip),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute110Mudkip},
},
- [TRAINER_MAY_3] =
+ [TRAINER_MAY_ROUTE_119_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7443,11 +7443,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May3),
- .party = {.NoItemDefaultMoves = sParty_May3},
+ .partySize = ARRAY_COUNT(sParty_MayRoute119Mudkip),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute119Mudkip},
},
- [TRAINER_MAY_4] =
+ [TRAINER_MAY_ROUTE_103_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7457,11 +7457,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May4),
- .party = {.NoItemDefaultMoves = sParty_May4},
+ .partySize = ARRAY_COUNT(sParty_MayRoute103Treecko),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute103Treecko},
},
- [TRAINER_MAY_5] =
+ [TRAINER_MAY_ROUTE_110_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7471,11 +7471,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May5),
- .party = {.NoItemDefaultMoves = sParty_May5},
+ .partySize = ARRAY_COUNT(sParty_MayRoute110Treecko),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute110Treecko},
},
- [TRAINER_MAY_6] =
+ [TRAINER_MAY_ROUTE_119_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7485,11 +7485,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May6),
- .party = {.NoItemDefaultMoves = sParty_May6},
+ .partySize = ARRAY_COUNT(sParty_MayRoute119Treecko),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute119Treecko},
},
- [TRAINER_MAY_7] =
+ [TRAINER_MAY_ROUTE_103_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7499,11 +7499,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May7),
- .party = {.NoItemDefaultMoves = sParty_May7},
+ .partySize = ARRAY_COUNT(sParty_MayRoute103Torchic),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute103Torchic},
},
- [TRAINER_MAY_8] =
+ [TRAINER_MAY_ROUTE_110_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7513,11 +7513,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May8),
- .party = {.NoItemDefaultMoves = sParty_May8},
+ .partySize = ARRAY_COUNT(sParty_MayRoute110Torchic),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute110Torchic},
},
- [TRAINER_MAY_9] =
+ [TRAINER_MAY_ROUTE_119_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -7527,8 +7527,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May9),
- .party = {.NoItemDefaultMoves = sParty_May9},
+ .partySize = ARRAY_COUNT(sParty_MayRoute119Torchic),
+ .party = {.NoItemDefaultMoves = sParty_MayRoute119Torchic},
},
[TRAINER_ISAAC_1] =
@@ -7937,7 +7937,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Julio},
},
- [TRAINER_GRUNT_27] =
+ [TRAINER_GRUNT_SEAFLOOR_CAVERN_5] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -7947,11 +7947,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt27),
- .party = {.NoItemDefaultMoves = sParty_Grunt27},
+ .partySize = ARRAY_COUNT(sParty_GruntSeafloorCavern5),
+ .party = {.NoItemDefaultMoves = sParty_GruntSeafloorCavern5},
},
- [TRAINER_GRUNT_28] =
+ [TRAINER_GRUNT_UNUSED] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -7961,11 +7961,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt28),
- .party = {.NoItemDefaultMoves = sParty_Grunt28},
+ .partySize = ARRAY_COUNT(sParty_GruntUnused),
+ .party = {.NoItemDefaultMoves = sParty_GruntUnused},
},
- [TRAINER_GRUNT_29] =
+ [TRAINER_GRUNT_MT_PYRE_4] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -7975,11 +7975,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt29),
- .party = {.NoItemDefaultMoves = sParty_Grunt29},
+ .partySize = ARRAY_COUNT(sParty_GruntMtPyre4),
+ .party = {.NoItemDefaultMoves = sParty_GruntMtPyre4},
},
- [TRAINER_GRUNT_30] =
+ [TRAINER_GRUNT_JAGGED_PASS] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -7989,8 +7989,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt30),
- .party = {.NoItemDefaultMoves = sParty_Grunt30},
+ .partySize = ARRAY_COUNT(sParty_GruntJaggedPass),
+ .party = {.NoItemDefaultMoves = sParty_GruntJaggedPass},
},
[TRAINER_MARC] =
@@ -8105,7 +8105,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Harrison},
},
- [TRAINER_GRUNT_31] =
+ [TRAINER_GRUNT_MT_CHIMNEY_2] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -8115,8 +8115,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt31),
- .party = {.NoItemDefaultMoves = sParty_Grunt31},
+ .partySize = ARRAY_COUNT(sParty_GruntMtChimney2),
+ .party = {.NoItemDefaultMoves = sParty_GruntMtChimney2},
},
[TRAINER_CLARENCE] =
@@ -8203,7 +8203,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Nicholas},
},
- [TRAINER_GRUNT_32] =
+ [TRAINER_GRUNT_SPACE_CENTER_3] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -8213,11 +8213,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt32),
- .party = {.NoItemDefaultMoves = sParty_Grunt32},
+ .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter3),
+ .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter3},
},
- [TRAINER_GRUNT_33] =
+ [TRAINER_GRUNT_SPACE_CENTER_4] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -8227,11 +8227,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt33),
- .party = {.NoItemDefaultMoves = sParty_Grunt33},
+ .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter4),
+ .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter4},
},
- [TRAINER_GRUNT_34] =
+ [TRAINER_GRUNT_SPACE_CENTER_5] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -8241,11 +8241,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt34),
- .party = {.NoItemDefaultMoves = sParty_Grunt34},
+ .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter5),
+ .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter5},
},
- [TRAINER_GRUNT_35] =
+ [TRAINER_GRUNT_SPACE_CENTER_6] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -8255,11 +8255,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt35),
- .party = {.NoItemDefaultMoves = sParty_Grunt35},
+ .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter6),
+ .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter6},
},
- [TRAINER_GRUNT_36] =
+ [TRAINER_GRUNT_SPACE_CENTER_7] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -8269,8 +8269,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt36),
- .party = {.NoItemDefaultMoves = sParty_Grunt36},
+ .partySize = ARRAY_COUNT(sParty_GruntSpaceCenter7),
+ .party = {.NoItemDefaultMoves = sParty_GruntSpaceCenter7},
},
[TRAINER_MACEY] =
@@ -8287,7 +8287,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Macey},
},
- [TRAINER_BRENDAN_10] =
+ [TRAINER_BRENDAN_RUSTBORO_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -8297,11 +8297,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Brendan10),
- .party = {.NoItemDefaultMoves = sParty_Brendan10},
+ .partySize = ARRAY_COUNT(sParty_BrendanRustboroTreecko),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRustboroTreecko},
},
- [TRAINER_BRENDAN_11] =
+ [TRAINER_BRENDAN_RUSTBORO_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -8311,8 +8311,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Brendan11),
- .party = {.NoItemDefaultMoves = sParty_Brendan11},
+ .partySize = ARRAY_COUNT(sParty_BrendanRustboroMudkip),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRustboroMudkip},
},
[TRAINER_PAXTON] =
@@ -8343,7 +8343,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Isabella},
},
- [TRAINER_GRUNT_37] =
+ [TRAINER_GRUNT_WEATHER_INST_5] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_AQUA,
@@ -8353,11 +8353,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt37),
- .party = {.NoItemDefaultMoves = sParty_Grunt37},
+ .partySize = ARRAY_COUNT(sParty_GruntWeatherInst5),
+ .party = {.NoItemDefaultMoves = sParty_GruntWeatherInst5},
},
- [TRAINER_TABITHA_2] =
+ [TRAINER_TABITHA_MT_CHIMNEY] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
@@ -8367,8 +8367,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Tabitha2),
- .party = {.NoItemDefaultMoves = sParty_Tabitha2},
+ .partySize = ARRAY_COUNT(sParty_TabithaMtChimney),
+ .party = {.NoItemDefaultMoves = sParty_TabithaMtChimney},
},
[TRAINER_JONATHAN] =
@@ -8385,7 +8385,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Jonathan},
},
- [TRAINER_BRENDAN_12] =
+ [TRAINER_BRENDAN_RUSTBORO_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -8395,11 +8395,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan12),
- .party = {.NoItemDefaultMoves = sParty_Brendan12},
+ .partySize = ARRAY_COUNT(sParty_BrendanRustboroTorchic),
+ .party = {.NoItemDefaultMoves = sParty_BrendanRustboroTorchic},
},
- [TRAINER_MAY_10] =
+ [TRAINER_MAY_RUSTBORO_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -8409,11 +8409,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN,
- .partySize = ARRAY_COUNT(sParty_May10),
- .party = {.NoItemDefaultMoves = sParty_May10},
+ .partySize = ARRAY_COUNT(sParty_MayRustboroMudkip),
+ .party = {.NoItemDefaultMoves = sParty_MayRustboroMudkip},
},
- [TRAINER_MAXIE_1] =
+ [TRAINER_MAXIE_MAGMA_HIDEOUT] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_LEADER,
@@ -8423,11 +8423,11 @@ const struct Trainer gTrainers[] = {
.items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Maxie1),
- .party = {.NoItemDefaultMoves = sParty_Maxie1},
+ .partySize = ARRAY_COUNT(sParty_MaxieMagmaHideout),
+ .party = {.NoItemDefaultMoves = sParty_MaxieMagmaHideout},
},
- [TRAINER_MAXIE_2] =
+ [TRAINER_MAXIE_MT_CHIMNEY] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_LEADER,
@@ -8437,8 +8437,8 @@ const struct Trainer gTrainers[] = {
.items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Maxie2),
- .party = {.NoItemDefaultMoves = sParty_Maxie2},
+ .partySize = ARRAY_COUNT(sParty_MaxieMtChimney),
+ .party = {.NoItemDefaultMoves = sParty_MaxieMtChimney},
},
[TRAINER_TIANA] =
@@ -9183,7 +9183,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Ashley},
},
- [TRAINER_WALLY_2] =
+ [TRAINER_WALLY_MAUVILLE] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9193,11 +9193,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wally2),
- .party = {.NoItemDefaultMoves = sParty_Wally2},
+ .partySize = ARRAY_COUNT(sParty_WallyMauville),
+ .party = {.NoItemDefaultMoves = sParty_WallyMauville},
},
- [TRAINER_WALLY_3] =
+ [TRAINER_WALLY_VR_2] =
{
.partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9207,11 +9207,11 @@ const struct Trainer gTrainers[] = {
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wally3),
- .party = {.NoItemCustomMoves = sParty_Wally3},
+ .partySize = ARRAY_COUNT(sParty_WallyVR2),
+ .party = {.NoItemCustomMoves = sParty_WallyVR2},
},
- [TRAINER_WALLY_4] =
+ [TRAINER_WALLY_VR_3] =
{
.partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9221,11 +9221,11 @@ const struct Trainer gTrainers[] = {
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wally4),
- .party = {.NoItemCustomMoves = sParty_Wally4},
+ .partySize = ARRAY_COUNT(sParty_WallyVR3),
+ .party = {.NoItemCustomMoves = sParty_WallyVR3},
},
- [TRAINER_WALLY_5] =
+ [TRAINER_WALLY_VR_4] =
{
.partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9235,11 +9235,11 @@ const struct Trainer gTrainers[] = {
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wally5),
- .party = {.NoItemCustomMoves = sParty_Wally5},
+ .partySize = ARRAY_COUNT(sParty_WallyVR4),
+ .party = {.NoItemCustomMoves = sParty_WallyVR4},
},
- [TRAINER_WALLY_6] =
+ [TRAINER_WALLY_VR_5] =
{
.partyFlags = F_TRAINER_PARTY_CUSTOM_MOVESET,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9249,11 +9249,11 @@ const struct Trainer gTrainers[] = {
.items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Wally6),
- .party = {.NoItemCustomMoves = sParty_Wally6},
+ .partySize = ARRAY_COUNT(sParty_WallyVR5),
+ .party = {.NoItemCustomMoves = sParty_WallyVR5},
},
- [TRAINER_BRENDAN_13] =
+ [TRAINER_BRENDAN_LILYCOVE_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9263,11 +9263,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan13),
- .party = {.NoItemDefaultMoves = sParty_Brendan13},
+ .partySize = ARRAY_COUNT(sParty_BrendanLilycoveMudkip),
+ .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveMudkip},
},
- [TRAINER_BRENDAN_14] =
+ [TRAINER_BRENDAN_LILYCOVE_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9277,11 +9277,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan14),
- .party = {.NoItemDefaultMoves = sParty_Brendan14},
+ .partySize = ARRAY_COUNT(sParty_BrendanLilycoveTreecko),
+ .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveTreecko},
},
- [TRAINER_BRENDAN_15] =
+ [TRAINER_BRENDAN_LILYCOVE_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9291,11 +9291,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Brendan15),
- .party = {.NoItemDefaultMoves = sParty_Brendan15},
+ .partySize = ARRAY_COUNT(sParty_BrendanLilycoveTorchic),
+ .party = {.NoItemDefaultMoves = sParty_BrendanLilycoveTorchic},
},
- [TRAINER_MAY_11] =
+ [TRAINER_MAY_LILYCOVE_MUDKIP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9305,11 +9305,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May11),
- .party = {.NoItemDefaultMoves = sParty_May11},
+ .partySize = ARRAY_COUNT(sParty_MayLilycoveMudkip),
+ .party = {.NoItemDefaultMoves = sParty_MayLilycoveMudkip},
},
- [TRAINER_MAY_12] =
+ [TRAINER_MAY_LILYCOVE_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9319,11 +9319,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May12),
- .party = {.NoItemDefaultMoves = sParty_May12},
+ .partySize = ARRAY_COUNT(sParty_MayLilycoveTreecko),
+ .party = {.NoItemDefaultMoves = sParty_MayLilycoveTreecko},
},
- [TRAINER_MAY_13] =
+ [TRAINER_MAY_LILYCOVE_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -9333,8 +9333,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May13),
- .party = {.NoItemDefaultMoves = sParty_May13},
+ .partySize = ARRAY_COUNT(sParty_MayLilycoveTorchic),
+ .party = {.NoItemDefaultMoves = sParty_MayLilycoveTorchic},
},
[TRAINER_JONAH] =
@@ -10023,7 +10023,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Deandre},
},
- [TRAINER_GRUNT_38] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_1] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10033,11 +10033,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt38),
- .party = {.NoItemDefaultMoves = sParty_Grunt38},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout1),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout1},
},
- [TRAINER_GRUNT_39] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_2] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10047,11 +10047,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt39),
- .party = {.NoItemDefaultMoves = sParty_Grunt39},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout2),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout2},
},
- [TRAINER_GRUNT_40] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_3] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10061,11 +10061,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt40),
- .party = {.NoItemDefaultMoves = sParty_Grunt40},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout3),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout3},
},
- [TRAINER_GRUNT_41] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_4] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10075,11 +10075,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt41),
- .party = {.NoItemDefaultMoves = sParty_Grunt41},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout4),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout4},
},
- [TRAINER_GRUNT_42] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_5] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10089,11 +10089,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt42),
- .party = {.NoItemDefaultMoves = sParty_Grunt42},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout5),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout5},
},
- [TRAINER_GRUNT_43] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_6] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10103,11 +10103,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt43),
- .party = {.NoItemDefaultMoves = sParty_Grunt43},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout6),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout6},
},
- [TRAINER_GRUNT_44] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_7] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10117,11 +10117,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt44),
- .party = {.NoItemDefaultMoves = sParty_Grunt44},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout7),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout7},
},
- [TRAINER_GRUNT_45] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_8] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10131,11 +10131,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt45),
- .party = {.NoItemDefaultMoves = sParty_Grunt45},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout8),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout8},
},
- [TRAINER_GRUNT_46] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_9] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10145,11 +10145,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt46),
- .party = {.NoItemDefaultMoves = sParty_Grunt46},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout9),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout9},
},
- [TRAINER_GRUNT_47] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_10] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10159,11 +10159,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt47),
- .party = {.NoItemDefaultMoves = sParty_Grunt47},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout10),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout10},
},
- [TRAINER_GRUNT_48] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_11] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10173,11 +10173,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt48),
- .party = {.NoItemDefaultMoves = sParty_Grunt48},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout11),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout11},
},
- [TRAINER_GRUNT_49] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_12] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10187,11 +10187,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt49),
- .party = {.NoItemDefaultMoves = sParty_Grunt49},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout12),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout12},
},
- [TRAINER_GRUNT_50] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_13] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10201,11 +10201,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt50),
- .party = {.NoItemDefaultMoves = sParty_Grunt50},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout13),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout13},
},
- [TRAINER_GRUNT_51] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_14] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10215,11 +10215,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt51),
- .party = {.NoItemDefaultMoves = sParty_Grunt51},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout14),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout14},
},
- [TRAINER_GRUNT_52] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_15] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10229,11 +10229,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt52),
- .party = {.NoItemDefaultMoves = sParty_Grunt52},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout15),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout15},
},
- [TRAINER_GRUNT_53] =
+ [TRAINER_GRUNT_MAGMA_HIDEOUT_16] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_TEAM_MAGMA,
@@ -10243,11 +10243,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Grunt53),
- .party = {.NoItemDefaultMoves = sParty_Grunt53},
+ .partySize = ARRAY_COUNT(sParty_GruntMagmaHideout16),
+ .party = {.NoItemDefaultMoves = sParty_GruntMagmaHideout16},
},
- [TRAINER_TABITHA_3] =
+ [TRAINER_TABITHA_MAGMA_HIDEOUT] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_ADMIN,
@@ -10257,8 +10257,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE,
- .partySize = ARRAY_COUNT(sParty_Tabitha3),
- .party = {.NoItemDefaultMoves = sParty_Tabitha3},
+ .partySize = ARRAY_COUNT(sParty_TabithaMagmaHideout),
+ .party = {.NoItemDefaultMoves = sParty_TabithaMagmaHideout},
},
[TRAINER_DARCY] =
@@ -10275,7 +10275,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Darcy},
},
- [TRAINER_MAXIE_3] =
+ [TRAINER_MAXIE_MOSSDEEP] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_MAGMA_LEADER,
@@ -10285,8 +10285,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_Maxie3),
- .party = {.NoItemDefaultMoves = sParty_Maxie3},
+ .partySize = ARRAY_COUNT(sParty_MaxieMossdeep),
+ .party = {.NoItemDefaultMoves = sParty_MaxieMossdeep},
},
[TRAINER_PETE] =
@@ -10751,7 +10751,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Cristin1},
},
- [TRAINER_MAY_14] =
+ [TRAINER_MAY_RUSTBORO_TREECKO] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -10761,11 +10761,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May14),
- .party = {.NoItemDefaultMoves = sParty_May14},
+ .partySize = ARRAY_COUNT(sParty_MayRustboroTreecko),
+ .party = {.NoItemDefaultMoves = sParty_MayRustboroTreecko},
},
- [TRAINER_MAY_15] =
+ [TRAINER_MAY_RUSTBORO_TORCHIC] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_3,
@@ -10775,8 +10775,8 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY,
- .partySize = ARRAY_COUNT(sParty_May15),
- .party = {.NoItemDefaultMoves = sParty_May15},
+ .partySize = ARRAY_COUNT(sParty_MayRustboroTorchic),
+ .party = {.NoItemDefaultMoves = sParty_MayRustboroTorchic},
},
[TRAINER_ROXANNE_2] =
@@ -11941,7 +11941,7 @@ const struct Trainer gTrainers[] = {
.party = {.NoItemDefaultMoves = sParty_Leaf},
},
- [TRAINER_BRENDAN_16] =
+ [TRAINER_BRENDAN_PLACEHOLDER] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_RS_PROTAG,
@@ -11951,11 +11951,11 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_Brendan16),
- .party = {.NoItemDefaultMoves = sParty_Brendan16},
+ .partySize = ARRAY_COUNT(sParty_BrendanLinkPlaceholder),
+ .party = {.NoItemDefaultMoves = sParty_BrendanLinkPlaceholder},
},
- [TRAINER_MAY_16] =
+ [TRAINER_MAY_PLACEHOLDER] =
{
.partyFlags = 0,
.trainerClass = TRAINER_CLASS_RS_PROTAG,
@@ -11965,7 +11965,7 @@ const struct Trainer gTrainers[] = {
.items = {},
.doubleBattle = FALSE,
.aiFlags = 0,
- .partySize = ARRAY_COUNT(sParty_May16),
- .party = {.NoItemDefaultMoves = sParty_May16},
+ .partySize = ARRAY_COUNT(sParty_MayLinkPlaceholder),
+ .party = {.NoItemDefaultMoves = sParty_MayLinkPlaceholder},
},
};
diff --git a/src/data/union_room.h b/src/data/union_room.h
new file mode 100644
index 000000000..8cb0bc8aa
--- /dev/null
+++ b/src/data/union_room.h
@@ -0,0 +1,1061 @@
+// const rom data
+
+ALIGNED(4) static const u8 sText_EmptyString[] = _("");
+ALIGNED(4) const u8 sText_Colon[] = _(":");
+ALIGNED(4) const u8 sText_ID[] = _("{ID}");
+ALIGNED(4) const u8 sText_PleaseStartOver[] = _("Please start over from the beginning.");
+ALIGNED(4) const u8 sText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled.");
+ALIGNED(4) const u8 sText_AwaitingCommunucation2[] = _("Awaiting communication\nfrom another player."); // Unused
+ALIGNED(4) const u8 sText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player.");
+ALIGNED(4) const u8 sText_AwaitingLinkPressStart[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready.");
+ALIGNED(4) const u8 sJPText_SingleBattle[] = _("シングルバトルを かいさいする");
+ALIGNED(4) const u8 sJPText_DoubleBattle[] = _("ダブルバトルを かいさいする");
+ALIGNED(4) const u8 sJPText_MultiBattle[] = _("マルチバトルを かいさいする");
+ALIGNED(4) const u8 sJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする");
+ALIGNED(4) const u8 sJPText_Chat[] = _("チャットを かいさいする");
+ALIGNED(4) const u8 sJPText_DistWonderCard[] = _("ふしぎなカードをくばる");
+ALIGNED(4) const u8 sJPText_DistWonderNews[] = _("ふしぎなニュースをくばる");
+ALIGNED(4) const u8 sJPText_DistMysteryEvent[] = _("ふしぎなできごとを かいさいする"); // Unused
+ALIGNED(4) const u8 sJPText_HoldPokemonJump[] = _("なわとびを かいさいする");
+ALIGNED(4) const u8 sJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする");
+ALIGNED(4) const u8 sJPText_HoldBerryPicking[] = _("きのみどりを かいさいする");
+ALIGNED(4) const u8 sJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする");
+ALIGNED(4) const u8 sJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする");
+
+// Unused
+const u8 *const sJPLinkGroupActionTexts[] = {
+ sJPText_SingleBattle,
+ sJPText_DoubleBattle,
+ sJPText_MultiBattle,
+ sJPText_TradePokemon,
+ sJPText_Chat,
+ sJPText_DistWonderCard,
+ sJPText_DistWonderNews,
+ sJPText_DistWonderCard,
+ sJPText_HoldPokemonJump,
+ sJPText_HoldBerryCrush,
+ sJPText_HoldBerryPicking,
+ sJPText_HoldBerryPicking,
+ sJPText_HoldSpinTrade,
+ sJPText_HoldSpinShop
+};
+
+const u8 sText_1PlayerNeeded[] = _("1 player\nneeded.");
+const u8 sText_2PlayersNeeded[] = _("2 players\nneeded.");
+const u8 sText_3PlayersNeeded[] = _("3 players\nneeded.");
+const u8 sText_4PlayersNeeded[] = _("4 players\nneeded.");
+const u8 sText_2PlayerMode[] = _("2-PLAYER\nMODE");
+const u8 sText_3PlayerMode[] = _("3-PLAYER\nMODE");
+const u8 sText_4PlayerMode[] = _("4-PLAYER\nMODE");
+const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE");
+
+static const u8 *const sPlayersNeededOrModeTexts[][5] = {
+ {
+ sText_1PlayerNeeded,
+ sText_2PlayerMode
+ }, {
+ sText_3PlayersNeeded,
+ sText_2PlayersNeeded,
+ sText_1PlayerNeeded,
+ sText_4PlayerMode
+ }, {
+ sText_1PlayerNeeded,
+ sText_2PlayerMode,
+ sText_3PlayerMode,
+ sText_4PlayerMode,
+ sText_5PlayerMode
+ }, {
+ sText_2PlayersNeeded,
+ sText_1PlayerNeeded,
+ sText_3PlayerMode,
+ sText_4PlayerMode,
+ sText_5PlayerMode
+ }, {
+ sText_1PlayerNeeded,
+ sText_2PlayerMode,
+ sText_3PlayerMode,
+ sText_4PlayerMode
+ }
+};
+
+ALIGNED(4) const u8 sText_BButtonCancel[] = _("{B_BUTTON}CANCEL");
+ALIGNED(4) const u8 sJPText_SearchingForParticipants[] = _("ため\nさんかしゃ ぼしゅうちゅう です!"); // Unused, may have been cut off
+ALIGNED(4) const u8 sText_PlayerContactedYouForXAccept[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?");
+ALIGNED(4) const u8 sText_PlayerContactedYouShareX[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?");
+ALIGNED(4) const u8 sText_PlayerContactedYouAddToMembers[] = _("{STR_VAR_2} contacted you.\nAdd to the members?");
+ALIGNED(4) const u8 sText_AreTheseMembersOK[] = _("{STR_VAR_1}!\nAre these members OK?");
+ALIGNED(4) const u8 sText_CancelModeWithTheseMembers[] = _("Cancel {STR_VAR_1} MODE\nwith these members?");
+ALIGNED(4) const u8 sText_AnOKWasSentToPlayer[] = _("An “OK” was sent\nto {STR_VAR_1}.");
+ALIGNED(4) const u8 sText_OtherTrainerUnavailableNow[] = _("The other TRAINER doesn't appear\nto be available now…\p");
+ALIGNED(4) const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p");
+ALIGNED(4) const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p");
+
+const u8 *const sCantTransmitToTrainerTexts[] = {
+ sText_CantTransmitTrainerTooFar,
+ sText_TrainersNotReadyYet
+};
+
+ALIGNED(4) const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}");
+ALIGNED(4) const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p");
+
+const u8 *const sPlayerUnavailableTexts[] = {
+ sText_OtherTrainerUnavailableNow,
+ sText_MemberNoLongerAvailable
+};
+
+ALIGNED(4) const u8 sText_TrainerAppearsUnavailable[] = _("The other TRAINER appears\nunavailable…\p");
+ALIGNED(4) const u8 sText_PlayerSentBackOK[] = _("{STR_VAR_1} sent back an “OK”!");
+ALIGNED(4) const u8 sText_PlayerOKdRegistration[] = _("{STR_VAR_1} OK'd your registration as\na member.");
+ALIGNED(4) const u8 sText_PlayerRepliedNo[] = _("{STR_VAR_1} replied, “No…”\p");
+ALIGNED(4) const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\nAwaiting other members!");
+ALIGNED(4) const u8 sText_QuitBeingMember[] = _("Quit being a member?");
+ALIGNED(4) const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p");
+
+const u8 *const sPlayerDisconnectedTexts[] = {
+ NULL,
+ sText_MemberNoLongerAvailable,
+ sText_TrainerAppearsUnavailable,
+ NULL,
+ NULL,
+ NULL,
+ sText_PlayerRepliedNo,
+ NULL,
+ NULL,
+ sText_StoppedBeingMember
+};
+
+ALIGNED(4) const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established.");
+ALIGNED(4) const u8 sText_WirelessLinkDropped[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…");
+ALIGNED(4) const u8 sText_LinkWithFriendDropped[] = _("The link with your friend has been\ndropped…");
+ALIGNED(4) const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”");
+
+const u8 *const sLinkDroppedTexts[] = {
+ NULL,
+ sText_LinkWithFriendDropped,
+ sText_LinkWithFriendDropped,
+ NULL,
+ NULL,
+ NULL,
+ sText_PlayerRepliedNo2,
+ NULL,
+ NULL,
+ NULL
+};
+
+ALIGNED(4) const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?");
+ALIGNED(4) const u8 sText_DoYouWantXMode2[] = _("Do you want the {STR_VAR_2}\nMODE?");
+
+// Unused
+static const u8 *const sDoYouWantModeTexts[] = {
+ sText_DoYouWantXMode,
+ sText_DoYouWantXMode2
+};
+
+ALIGNED(4) const u8 sText_CommunicatingPleaseWait[] = _("Communicating…\nPlease wait."); // Unused
+ALIGNED(4) const u8 sText_AwaitingPlayersResponseAboutTrade[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…");
+ALIGNED(4) const u8 sText_Communicating[] = _("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 sText_CommunicatingWithPlayer[] = _("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 sText_PleaseWaitAWhile[] = _("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}.");
+
+static const u8 *const sCommunicatingWaitTexts[] = {
+ sText_Communicating,
+ sText_CommunicatingWithPlayer,
+ sText_PleaseWaitAWhile
+};
+
+ALIGNED(4) const u8 sText_HiDoSomethingMale[] = _("Hiya! Is there something that you\nwanted to do?");
+ALIGNED(4) const u8 sText_HiDoSomethingFemale[] = _("Hello!\nWould you like to do something?");
+ALIGNED(4) const u8 sText_HiDoSomethingAgainMale[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?");
+ALIGNED(4) const u8 sText_HiDoSomethingAgainFemale[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?");
+
+static const u8 *const sHiDoSomethingTexts[][GENDER_COUNT] = {
+ {
+ sText_HiDoSomethingMale,
+ sText_HiDoSomethingFemale
+ }, {
+ sText_HiDoSomethingAgainMale,
+ sText_HiDoSomethingAgainFemale
+ }
+};
+
+ALIGNED(4) const u8 sText_DoSomethingMale[] = _("Want to do something?");
+ALIGNED(4) const u8 sText_DoSomethingFemale[] = _("Would you like to do something?");
+ALIGNED(4) const u8 sText_DoSomethingAgainMale[] = _("{STR_VAR_1}: What would you like to\ndo now?");
+ALIGNED(4) const u8 sText_DoSomethingAgainFemale[] = _("{STR_VAR_1}: Want to do anything else?"); // Unused
+
+// Unused
+static const u8 *const sDoSomethingTexts[][GENDER_COUNT] = {
+ {
+ sText_DoSomethingMale,
+ sText_DoSomethingFemale
+ }, {
+ sText_DoSomethingAgainMale,
+ sText_DoSomethingAgainMale // was probably supposed to be sText_DoSomethingAgainFemale
+ }
+};
+
+ALIGNED(4) const u8 sText_SomebodyHasContactedYou[] = _("Somebody has contacted you.{PAUSE 60}");
+ALIGNED(4) const u8 sText_PlayerHasContactedYou[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}");
+
+static const u8 *const sPlayerContactedYouTexts[] = {
+ sText_SomebodyHasContactedYou,
+ sText_PlayerHasContactedYou
+};
+
+ALIGNED(4) const u8 sText_AwaitingResponseFromTrainer[] = _("Awaiting a response from\nthe other TRAINER…");
+ALIGNED(4) const u8 sText_AwaitingResponseFromPlayer[] = _("Awaiting a response from\n{STR_VAR_1}…");
+
+static const u8 *const sAwaitingResponseTexts[] = {
+ sText_AwaitingResponseFromTrainer,
+ sText_AwaitingResponseFromPlayer
+};
+
+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 sInvitationTexts[] = {
+ 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?");
+
+static const u8 *const sJoinChatTexts[][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 sText_WaitForBattleMale[] = _("A battle, huh?\nAll right, just give me some time.");
+ALIGNED(4) const u8 sText_WaitForChatMale[] = _("You want to chat, huh?\nSure, just wait a little.");
+ALIGNED(4) const u8 sText_ShowTrainerCardMale[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD.");
+ALIGNED(4) const u8 sText_WaitForBattleFemale[] = _("A battle? Of course, but I need\ntime to get ready.");
+ALIGNED(4) const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment.");
+ALIGNED(4) const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD.");
+
+const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = {
+ {
+ sText_WaitForBattleMale,
+ sText_WaitForChatMale,
+ NULL,
+ sText_ShowTrainerCardMale
+ }, {
+ sText_WaitForBattleFemale,
+ sText_WaitForChatFemale,
+ NULL,
+ sText_ShowTrainerCardFemale
+ }
+};
+
+ALIGNED(4) const u8 sText_WaitForChatMale2[] = _("You want to chat, huh?\nSure, just wait a little."); // Unused
+ALIGNED(4) const u8 sText_DoneWaitingBattleMale[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}");
+ALIGNED(4) const u8 sText_DoneWaitingChatMale[] = _("All right!\nLet's chat!{PAUSE 60}");
+ALIGNED(4) const u8 sText_DoneWaitingBattleFemale[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}");
+ALIGNED(4) const u8 sText_DoneWaitingChatFemale[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}");
+ALIGNED(4) const u8 sText_TradeWillBeStarted[] = _("The trade will be started.{PAUSE 60}");
+ALIGNED(4) const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}");
+ALIGNED(4) const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}");
+
+const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = {
+ {
+ {
+ sText_BattleWillBeStarted,
+ sText_EnteringChat,
+ sText_TradeWillBeStarted
+ }, {
+ sText_BattleWillBeStarted,
+ sText_EnteringChat,
+ sText_TradeWillBeStarted
+ }
+ }, {
+ {
+ sText_DoneWaitingBattleMale,
+ sText_DoneWaitingChatMale,
+ sText_TradeWillBeStarted
+ }, {
+ sText_DoneWaitingBattleFemale,
+ sText_DoneWaitingChatFemale,
+ sText_TradeWillBeStarted
+ }
+ }
+};
+
+ALIGNED(4) const u8 sText_BattleDeclinedMale[] = _("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 sText_BattleDeclinedFemale[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p");
+
+const u8 *const sBattleDeclinedTexts[GENDER_COUNT] = {
+ sText_BattleDeclinedMale,
+ sText_BattleDeclinedFemale
+};
+
+ALIGNED(4) const u8 sText_ShowTrainerCardDeclinedMale[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p");
+ALIGNED(4) const u8 sText_ShowTrainerCardDeclinedFemale[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p");
+
+const u8 *const sShowTrainerCardDeclinedTexts[GENDER_COUNT] = {
+ sText_ShowTrainerCardDeclinedMale,
+ sText_ShowTrainerCardDeclinedFemale
+};
+
+ALIGNED(4) const u8 sText_IfYouWantToDoSomethingMale[] = _("If you want to do something with\nme, just give me a shout!\p");
+ALIGNED(4) const u8 sText_IfYouWantToDoSomethingFemale[] = _("If you want to do something with\nme, don't be shy.\p");
+
+const u8 *const sIfYouWantToDoSomethingTexts[GENDER_COUNT] = {
+ sText_IfYouWantToDoSomethingMale,
+ sText_IfYouWantToDoSomethingFemale
+};
+
+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");
+
+static const u8 *const sDeclineBattleTexts[GENDER_COUNT] = {
+ sText_DeclineBattleMale,
+ stext_DeclineBattleFemale
+};
+
+ALIGNED(4) const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p");
+ALIGNED(4) const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p");
+
+const u8 *const sChatDeclinedTexts[GENDER_COUNT] = {
+ sText_ChatDeclinedMale,
+ sText_ChatDeclinedFemale
+};
+
+ALIGNED(4) const u8 sText_YoureToughMale[] = _("Whoa!\nI can tell you're pretty tough!\p");
+ALIGNED(4) const u8 sText_UsedGoodMoveMale[] = _("You used that move?\nThat's good strategy!\p");
+ALIGNED(4) const u8 sText_BattleSurpriseMale[] = _("Way to go!\nThat was an eye-opener!\p");
+ALIGNED(4) const u8 sText_SwitchedMonsMale[] = _("Oh! How could you use that\nPOKéMON in that situation?\p");
+ALIGNED(4) const u8 sText_YoureToughFemale[] = _("That POKéMON…\nIt's been raised really well!\p");
+ALIGNED(4) const u8 sText_UsedGoodMoveFemale[] = _("That's it!\nThis is the right move now!\p");
+ALIGNED(4) const u8 sText_BattleSurpriseFemale[] = _("That's awesome!\nYou can battle that way?\p");
+ALIGNED(4) const u8 sText_SwitchedMonsFemale[] = _("You have exquisite timing for\nswitching POKéMON!\p");
+
+const u8 *const sBattleReactionTexts[GENDER_COUNT][4] = {
+ {
+ sText_YoureToughMale,
+ sText_UsedGoodMoveMale,
+ sText_BattleSurpriseMale,
+ sText_SwitchedMonsMale
+ },
+ {
+ sText_YoureToughFemale,
+ sText_UsedGoodMoveFemale,
+ sText_BattleSurpriseFemale,
+ sText_SwitchedMonsFemale
+ }
+};
+
+ALIGNED(4) const u8 sText_LearnedSomethingMale[] = _("Oh, I see!\nThis is educational!\p");
+ALIGNED(4) const u8 sText_ThatsFunnyMale[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p");
+ALIGNED(4) const u8 sText_RandomChatMale1[] = _("Oh?\nSomething like that happened.\p");
+ALIGNED(4) const u8 sText_RandomChatMale2[] = _("Hmhm… What?\nSo is this what you're saying?\p");
+ALIGNED(4) const u8 sText_LearnedSomethingFemale[] = _("Is that right?\nI didn't know that.\p");
+ALIGNED(4) const u8 sText_ThatsFunnyFemale[] = _("Ahaha!\nWhat is that about?\p");
+ALIGNED(4) const u8 sText_RandomChatFemale1[] = _("Yes, that's exactly it!\nThat's what I meant.\p");
+ALIGNED(4) const u8 sText_RandomChatFemale2[] = _("In other words…\nYes! That's right!\p");
+
+const u8 *const sChatReactionTexts[GENDER_COUNT][4] = {
+ {
+ sText_LearnedSomethingMale,
+ sText_ThatsFunnyMale,
+ sText_RandomChatMale1,
+ sText_RandomChatMale2
+ },
+ {
+ sText_LearnedSomethingFemale,
+ sText_ThatsFunnyFemale,
+ sText_RandomChatFemale1,
+ sText_RandomChatFemale2
+ }
+};
+
+ALIGNED(4) const u8 sText_ShowedTrainerCardMale1[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p");
+ALIGNED(4) const u8 sText_ShowedTrainerCardMale2[] = _("I hope I get to know you better!\p");
+ALIGNED(4) const u8 sText_ShowedTrainerCardFemale1[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p");
+ALIGNED(4) const u8 sText_ShowedTrainerCardFemale2[] = _("Glad to meet you.\nPlease don't be a stranger!\p");
+
+const u8 *const sTrainerCardReactionTexts[GENDER_COUNT][2] = {
+ {
+ sText_ShowedTrainerCardMale1,
+ sText_ShowedTrainerCardMale2
+ },
+ {
+ sText_ShowedTrainerCardFemale1,
+ sText_ShowedTrainerCardFemale2
+ }
+};
+
+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 sTradeReactionTexts[GENDER_COUNT][4] = {
+ {
+ sText_MaleTraded1,
+ sText_MaleTraded2
+ },
+ {
+ 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_ChooseTrainerToTradeWith2[] = _("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_AwaitingResponseFromTrainer2[] = _("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_PlayerCantTradeForYourMon[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p");
+ALIGNED(4) const u8 sText_CantTradeForPartnersMon[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p");
+
+// Unused
+const u8 *const sCantTradeMonTexts[] = {
+ sText_PlayerCantTradeForYourMon,
+ sText_CantTradeForPartnersMon
+};
+
+ALIGNED(4) const u8 sText_TradeOfferRejected[] = _("Your trade offer was rejected.\p");
+ALIGNED(4) const u8 sText_EggTrade[] = _("EGG TRADE");
+ALIGNED(4) const u8 sText_ChooseJoinCancel[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL");
+ALIGNED(4) const u8 sText_ChooseTrainer[] = _("Please choose a TRAINER.");
+ALIGNED(4) const u8 sText_ChooseTrainerSingleBattle[] = _("Please choose a TRAINER for\na SINGLE BATTLE.");
+ALIGNED(4) const u8 sText_ChooseTrainerDoubleBattle[] = _("Please choose a TRAINER for\na DOUBLE BATTLE.");
+ALIGNED(4) const u8 sText_ChooseLeaderMultiBattle[] = _("Please choose the LEADER\nfor a MULTI BATTLE.");
+ALIGNED(4) const u8 sText_ChooseTrainerToTradeWith[] = _("Please choose the TRAINER to\ntrade with.");
+ALIGNED(4) const u8 sText_ChooseTrainerToShareWonderCards[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS.");
+ALIGNED(4) const u8 sText_ChooseTrainerToShareWonderNews[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS.");
+ALIGNED(4) const u8 sText_ChooseLeaderPokemonJump[] = _("Jump with mini POKéMON!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderBerryCrush[] = _("BERRY CRUSH!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderBerryPicking[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderBerryBlender[] = _("BERRY BLENDER!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderRecordCorner[] = _("RECORD CORNER!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderCoolContest[] = _("COOLNESS CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderBeautyContest[] = _("BEAUTY CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderCuteContest[] = _("CUTENESS CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderSmartContest[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderToughContest[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderBattleTowerLv50[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER.");
+ALIGNED(4) const u8 sText_ChooseLeaderBattleTowerOpenLv[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER.");
+
+static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] =
+{
+ [LINK_GROUP_SINGLE_BATTLE] = sText_ChooseTrainerSingleBattle,
+ [LINK_GROUP_DOUBLE_BATTLE] = sText_ChooseTrainerDoubleBattle,
+ [LINK_GROUP_MULTI_BATTLE] = sText_ChooseLeaderMultiBattle,
+ [LINK_GROUP_TRADE] = sText_ChooseTrainerToTradeWith,
+ [LINK_GROUP_POKEMON_JUMP] = sText_ChooseLeaderPokemonJump,
+ [LINK_GROUP_BERRY_CRUSH] = sText_ChooseLeaderBerryCrush,
+ [LINK_GROUP_BERRY_PICKING] = sText_ChooseLeaderBerryPicking,
+ [LINK_GROUP_WONDER_CARD] = sText_ChooseTrainerToShareWonderCards,
+ [LINK_GROUP_WONDER_NEWS] = sText_ChooseTrainerToShareWonderNews,
+ [LINK_GROUP_UNK_9] = NULL,
+ [LINK_GROUP_UNK_10] = NULL,
+ [LINK_GROUP_UNK_11] = NULL,
+ [LINK_GROUP_RECORD_CORNER] = sText_ChooseLeaderRecordCorner,
+ [LINK_GROUP_BERRY_BLENDER] = sText_ChooseLeaderBerryBlender,
+ [LINK_GROUP_UNK_14] = NULL,
+ [LINK_GROUP_COOL_CONTEST] = sText_ChooseLeaderCoolContest,
+ [LINK_GROUP_BEAUTY_CONTEST] = sText_ChooseLeaderBeautyContest,
+ [LINK_GROUP_CUTE_CONTEST] = sText_ChooseLeaderCuteContest,
+ [LINK_GROUP_SMART_CONTEST] = sText_ChooseLeaderSmartContest,
+ [LINK_GROUP_TOUGH_CONTEST] = sText_ChooseLeaderToughContest,
+ [LINK_GROUP_BATTLE_TOWER] = sText_ChooseLeaderBattleTowerLv50,
+ [LINK_GROUP_BATTLE_TOWER_OPEN] = sText_ChooseLeaderBattleTowerOpenLv
+};
+
+ALIGNED(4) const u8 sText_SearchingForWirelessSystemWait[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait...");
+ALIGNED(4) const u8 sText_MustHaveTwoMonsForDoubleBattle[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p"); // Unused
+ALIGNED(4) const u8 sText_AwaitingPlayersResponse[] = _("Awaiting {STR_VAR_1}'s response…");
+ALIGNED(4) const u8 sText_PlayerHasBeenAskedToRegisterYouPleaseWait[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait.");
+ALIGNED(4) const u8 sText_AwaitingResponseFromWirelessSystem[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM.");
+ALIGNED(4) const u8 sText_PleaseWaitForOtherTrainersToGather[] = _("Please wait for other TRAINERS to\ngather and get ready."); // Unused
+ALIGNED(4) const u8 sText_NoCardsSharedRightNow[] = _("No CARDS appear to be shared \nright now.");
+ALIGNED(4) const u8 sText_NoNewsSharedRightNow[] = _("No NEWS appears to be shared\nright now.");
+
+const u8 *const sNoWonderSharedTexts[] = {
+ sText_NoCardsSharedRightNow,
+ sText_NoNewsSharedRightNow
+};
+
+ALIGNED(4) const u8 sText_Battle[] = _("BATTLE");
+ALIGNED(4) const u8 sText_Chat2[] = _("CHAT");
+ALIGNED(4) const u8 sText_Greetings[] = _("GREETINGS");
+ALIGNED(4) const u8 sText_Exit[] = _("EXIT");
+ALIGNED(4) const u8 sText_Exit2[] = _("EXIT");
+ALIGNED(4) const u8 sText_Info[] = _("INFO");
+ALIGNED(4) const u8 sText_NameWantedOfferLv[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV.");
+ALIGNED(4) const u8 sText_SingleBattle[] = _("SINGLE BATTLE");
+ALIGNED(4) const u8 sText_DoubleBattle[] = _("DOUBLE BATTLE");
+ALIGNED(4) const u8 sText_MultiBattle[] = _("MULTI BATTLE");
+ALIGNED(4) const u8 sText_PokemonTrades[] = _("POKéMON TRADES");
+ALIGNED(4) const u8 sText_Chat[] = _("CHAT");
+ALIGNED(4) const u8 sText_Cards[] = _("CARDS");
+ALIGNED(4) const u8 sText_WonderCards[] = _("WONDER CARDS");
+ALIGNED(4) const u8 sText_WonderNews[] = _("WONDER NEWS");
+ALIGNED(4) const u8 sText_PokemonJump[] = _("POKéMON JUMP");
+ALIGNED(4) const u8 sText_BerryCrush[] = _("BERRY CRUSH");
+ALIGNED(4) const u8 sText_BerryPicking[] = _("BERRY-PICKING");
+ALIGNED(4) const u8 sText_Search[] = _("SEARCH");
+ALIGNED(4) const u8 sText_BerryBlender[] = _("BERRY BLENDER");
+ALIGNED(4) const u8 sText_RecordCorner[] = _("RECORD CORNER");
+ALIGNED(4) const u8 sText_CoolContest[] = _("COOL CONTEST");
+ALIGNED(4) const u8 sText_BeautyContest[] = _("BEAUTY CONTEST");
+ALIGNED(4) const u8 sText_CuteContest[] = _("CUTE CONTEST");
+ALIGNED(4) const u8 sText_SmartContest[] = _("SMART CONTEST");
+ALIGNED(4) const u8 sText_ToughContest[] = _("TOUGH CONTEST");
+ALIGNED(4) const u8 sText_BattleTowerLv50[] = _("BATTLE TOWER LV. 50");
+ALIGNED(4) const u8 sText_BattleTowerOpenLv[] = _("BATTLE TOWER OPEN LEVEL");
+ALIGNED(4) const u8 sText_ItsNormalCard[] = _("It's a NORMAL CARD.");
+ALIGNED(4) const u8 sText_ItsBronzeCard[] = _("It's a BRONZE CARD!");
+ALIGNED(4) const u8 sText_ItsCopperCard[] = _("It's a COPPER CARD!");
+ALIGNED(4) const u8 sText_ItsSilverCard[] = _("It's a SILVER CARD!");
+ALIGNED(4) const u8 sText_ItsGoldCard[] = _("It's a GOLD CARD!");
+
+static const u8 *const sCardColorTexts[] = {
+ sText_ItsNormalCard,
+ sText_ItsBronzeCard,
+ sText_ItsCopperCard,
+ sText_ItsSilverCard,
+ sText_ItsGoldCard
+};
+
+ALIGNED(4) const u8 sText_TrainerCardInfoPage1[] = _("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 sText_TrainerCardInfoPage2[] = _("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 sText_GladToMeetYouMale[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}");
+ALIGNED(4) const u8 sText_GladToMeetYouFemale[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}");
+
+const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = {
+ sText_GladToMeetYouMale,
+ sText_GladToMeetYouFemale
+};
+
+ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}");
+
+const u8 *const sLinkGroupActivityTexts[] = {
+ sText_EmptyString,
+ sText_SingleBattle,
+ sText_DoubleBattle,
+ sText_MultiBattle,
+ sText_PokemonTrades,
+ sText_Chat,
+ sText_WonderCards,
+ sText_WonderNews,
+ sText_Cards,
+ sText_PokemonJump,
+ sText_BerryCrush,
+ sText_BerryPicking,
+ sText_Search,
+ sText_EmptyString,
+ sText_BattleTowerOpenLv,
+ sText_RecordCorner,
+ sText_BerryBlender,
+ sText_EmptyString,
+ sText_EmptyString,
+ sText_EmptyString,
+ sText_EmptyString,
+ sText_WonderCards,
+ sText_WonderNews,
+ sText_CoolContest,
+ sText_BeautyContest,
+ sText_CuteContest,
+ sText_SmartContest,
+ sText_ToughContest,
+ sText_BattleTowerLv50
+};
+
+const struct WindowTemplate gUnknown_082F00BC = {
+ .bg = 0x00,
+ .tilemapLeft = 0x00,
+ .tilemapTop = 0x00,
+ .width = 0x1E,
+ .height = 0x02,
+ .paletteNum = 0x0F,
+ .baseBlock = 0x0008
+};
+
+const u32 gUnknown_082F00C4[NUM_LINK_GROUP_TYPES] = {
+ 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[] = {
+ { sText_EmptyString, 0 },
+ { sText_EmptyString, 1 },
+ { sText_EmptyString, 2 },
+ { sText_EmptyString, 3 },
+ { sText_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[] = {
+ { sText_EmptyString, 0 },
+ { sText_EmptyString, 1 },
+ { sText_EmptyString, 2 },
+ { sText_EmptyString, 3 },
+ { sText_EmptyString, 4 },
+ { sText_EmptyString, 5 },
+ { sText_EmptyString, 6 },
+ { sText_EmptyString, 7 },
+ { sText_EmptyString, 8 },
+ { sText_EmptyString, 9 },
+ { sText_EmptyString, 10 },
+ { sText_EmptyString, 11 },
+ { sText_EmptyString, 12 },
+ { sText_EmptyString, 13 },
+ { sText_EmptyString, 14 },
+ { sText_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[] = {
+ { sText_Greetings, 0x208 },
+ { sText_Battle, 0x241 },
+ { sText_Chat2, 0x245 },
+ { sText_Exit, 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 },
+ { sText_Info, 2 },
+ { sText_Exit, 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 },
+ { sText_Exit, 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[] = {
+ { sText_EmptyString, -3 },
+ { sText_EmptyString, 0 },
+ { sText_EmptyString, 1 },
+ { sText_EmptyString, 2 },
+ { sText_EmptyString, 3 },
+ { sText_EmptyString, 4 },
+ { sText_EmptyString, 5 },
+ { sText_EmptyString, 6 },
+ { sText_EmptyString, 7 },
+ { sText_Exit2, 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[] = {
+ { sText_EmptyString, 0 },
+ { sText_EmptyString, 1 },
+ { sText_EmptyString, 2 },
+ { sText_EmptyString, 3 },
+ { sText_EmptyString, 4 },
+ { sText_EmptyString, 5 },
+ { sText_EmptyString, 6 },
+ { sText_EmptyString, 7 },
+ { sText_EmptyString, 8 },
+ { sText_EmptyString, 9 },
+ { sText_EmptyString, 10 },
+ { sText_EmptyString, 11 },
+ { sText_EmptyString, 12 },
+ { sText_EmptyString, 13 },
+ { sText_EmptyString, 14 },
+ { sText_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[NUM_LINK_GROUP_TYPES] = {
+ 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
+};
+
+// Link group type to ID for gUnknown_02022C2C
+const u8 gUnknown_082F0530[NUM_LINK_GROUP_TYPES + 2] =
+{
+ 0x01,
+ 0x02,
+ 0x03,
+ 0x04,
+ 0x09,
+ 0x0a,
+ 0x0b,
+ 0x15,
+ 0x16,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x0f,
+ 0x10,
+ 0x00,
+ 0x17,
+ 0x18,
+ 0x19,
+ 0x1a,
+ 0x1b,
+ 0x1c,
+ 0x0e
+};
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 2d05035d7..dcbadeba8 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -3,14 +3,11 @@
#include "battle.h"
#include "daycare.h"
#include "string_util.h"
-#include "constants/species.h"
-#include "constants/items.h"
#include "mail.h"
#include "pokemon_storage_system.h"
#include "event_data.h"
#include "random.h"
#include "main.h"
-#include "constants/moves.h"
#include "egg_hatch.h"
#include "text.h"
#include "menu.h"
@@ -22,9 +19,10 @@
#include "party_menu.h"
#include "list_menu.h"
#include "overworld.h"
-
-#define EGG_MOVES_ARRAY_COUNT 10
-#define EGG_LVL_UP_MOVES_ARRAY_COUNT 50
+#include "constants/items.h"
+#include "constants/moves.h"
+#include "constants/region_map_sections.h"
+#include "constants/species.h"
// this file's functions
static void ClearDaycareMonMail(struct DayCareMail *mail);
@@ -34,10 +32,10 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y);
// RAM buffers used to assist with BuildEggMoveset()
EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
-EWRAM_DATA static u16 sHatchedEggFatherMoves[4] = {0};
-EWRAM_DATA static u16 sHatchedEggFinalMoves[4] = {0};
+EWRAM_DATA static u16 sHatchedEggFatherMoves[MAX_MON_MOVES] = {0};
+EWRAM_DATA static u16 sHatchedEggFinalMoves[MAX_MON_MOVES] = {0};
EWRAM_DATA static u16 sHatchedEggEggMoves[EGG_MOVES_ARRAY_COUNT] = {0};
-EWRAM_DATA static u16 sHatchedEggMotherMoves[4] = {0};
+EWRAM_DATA static u16 sHatchedEggMotherMoves[MAX_MON_MOVES] = {0};
#include "data/pokemon/egg_moves.h"
@@ -52,11 +50,13 @@ static const struct WindowTemplate sDaycareLevelMenuWindowTemplate =
.baseBlock = 8
};
+// Indices here are assigned by Task_HandleDaycareLevelMenuInput to VAR_RESULT,
+// which is copied to VAR_0x8004 and used as an index for GetDaycareCost
static const struct ListMenuItem sLevelMenuItems[] =
{
- {gExpandedPlaceholder_Empty, 0},
- {gExpandedPlaceholder_Empty, 1},
- {gText_Exit, 5}
+ {gText_ExpandedPlaceholder_Empty, 0},
+ {gText_ExpandedPlaceholder_Empty, 1},
+ {gText_Exit, DAYCARE_LEVEL_MENU_EXIT}
};
static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
@@ -91,7 +91,7 @@ static const u8 *const sCompatibilityMessages[] =
static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in Japanese)
-u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
+u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest)
{
u8 nickname[POKEMON_NAME_LENGTH * 2];
@@ -99,7 +99,7 @@ u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
return StringCopy10(dest, nickname);
}
-u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
+u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest)
{
u8 nickname[POKEMON_NAME_LENGTH * 2];
@@ -169,7 +169,7 @@ static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycar
u8 mailId;
StringCopy(daycareMon->mail.OT_name, gSaveBlock2Ptr->playerName);
- GetMonNick(mon, daycareMon->mail.monName);
+ GetMonNickname2(mon, daycareMon->mail.monName);
StripExtCtrlCodes(daycareMon->mail.monName);
daycareMon->mail.gameLanguage = LANGUAGE_ENGLISH;
daycareMon->mail.monLanguage = GetMonData(mon, MON_DATA_LANGUAGE);
@@ -202,8 +202,8 @@ void StoreSelectedPokemonInDaycare(void)
static void ShiftDaycareSlots(struct DayCare *daycare)
{
// This condition is only satisfied when the player takes out the first pokemon from the daycare.
- if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0
- && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == 0)
+ if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != SPECIES_NONE
+ && GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) == SPECIES_NONE)
{
daycare->mons[0].mon = daycare->mons[1].mon;
ZeroBoxMonData(&daycare->mons[1].mon);
@@ -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
@@ -254,7 +251,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DaycareMon *daycareMon)
u32 experience;
struct Pokemon pokemon;
- GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ GetBoxMonNickname(&daycareMon->mon, gStringVar1);
species = GetBoxMonData(&daycareMon->mon, MON_DATA_SPECIES);
BoxMonToMon(&daycareMon->mon, &pokemon);
@@ -314,7 +311,7 @@ static u8 GetNumLevelsGainedForDaycareMon(struct DaycareMon *daycareMon)
{
u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon);
ConvertIntToDecimalStringN(gStringVar2, numLevelsGained, STR_CONV_MODE_LEFT_ALIGN, 2);
- GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ GetBoxMonNickname(&daycareMon->mon, gStringVar1);
return numLevelsGained;
}
@@ -323,7 +320,7 @@ static u32 GetDaycareCostForSelectedMon(struct DaycareMon *daycareMon)
u32 cost;
u8 numLevelsGained = GetNumLevelsGainedFromSteps(daycareMon);
- GetBoxMonNick(&daycareMon->mon, gStringVar1);
+ GetBoxMonNickname(&daycareMon->mon, gStringVar1);
cost = 100 + 100 * numLevelsGained;
ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5);
return cost;
@@ -419,18 +416,18 @@ static u16 GetEggSpecies(u16 species)
return species;
}
-static s32 GetSlotToInheritNature(struct DayCare *daycare)
+static s32 GetParentToInheritNature(struct DayCare *daycare)
{
u32 species[DAYCARE_MON_COUNT];
s32 i;
s32 dittoCount;
- s32 slot = -1;
+ s32 parent = -1;
// search for female gender
for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
if (GetBoxMonGender(&daycare->mons[i].mon) == MON_FEMALE)
- slot = i;
+ parent = i;
}
// search for ditto
@@ -438,50 +435,52 @@ static s32 GetSlotToInheritNature(struct DayCare *daycare)
{
species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
if (species[i] == SPECIES_DITTO)
- dittoCount++, slot = i;
+ dittoCount++, parent = i;
}
// coin flip on ...two Dittos
- if (dittoCount == 2)
+ if (dittoCount == DAYCARE_MON_COUNT)
{
if (Random() >= USHRT_MAX / 2)
- slot = 0;
+ parent = 0;
else
- slot = 1;
+ parent = 1;
}
- // nature inheritance only if holds everstone
- if (GetBoxMonData(&daycare->mons[slot].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE
+ // Don't inherit nature if not holding Everstone
+ if (GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_HELD_ITEM) != ITEM_EVERSTONE
|| Random() >= USHRT_MAX / 2)
{
return -1;
}
- return slot;
+ return parent;
}
static void _TriggerPendingDaycareEgg(struct DayCare *daycare)
{
- s32 natureSlot;
+ s32 parent;
s32 natureTries = 0;
SeedRng2(gMain.vblankCounter2);
- natureSlot = GetSlotToInheritNature(daycare);
+ parent = GetParentToInheritNature(daycare);
- if (natureSlot < 0)
+ // don't inherit nature
+ if (parent < 0)
{
- daycare->offspringPersonality = (Random2() << 0x10) | ((Random() % 0xfffe) + 1);
+ daycare->offspringPersonality = (Random2() << 16) | ((Random() % 0xfffe) + 1);
}
+ // inherit nature
else
{
- u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[natureSlot].mon, MON_DATA_PERSONALITY, NULL));
+ u8 wantedNature = GetNatureFromPersonality(GetBoxMonData(&daycare->mons[parent].mon, MON_DATA_PERSONALITY, NULL));
u32 personality;
do
{
- personality = (Random2() << 0x10) | (Random());
+ personality = (Random2() << 16) | (Random());
if (wantedNature == GetNatureFromPersonality(personality) && personality != 0)
- break; // we found a personality with the same nature
+ break; // found a personality with the same nature
natureTries++;
} while (natureTries <= 2400);
@@ -492,9 +491,10 @@ static void _TriggerPendingDaycareEgg(struct DayCare *daycare)
FlagSet(FLAG_PENDING_DAYCARE_EGG);
}
+// Functionally unused
static void _TriggerPendingDaycareMaleEgg(struct DayCare *daycare)
{
- daycare->offspringPersonality = (Random()) | (0x8000);
+ daycare->offspringPersonality = (Random()) | (EGG_GENDER_MALE);
FlagSet(FLAG_PENDING_DAYCARE_EGG);
}
@@ -503,6 +503,7 @@ void TriggerPendingDaycareEgg(void)
_TriggerPendingDaycareEgg(&gSaveBlock1Ptr->daycare);
}
+// Unused
static void TriggerPendingDaycareMaleEgg(void)
{
_TriggerPendingDaycareMaleEgg(&gSaveBlock1Ptr->daycare);
@@ -532,9 +533,9 @@ static void RemoveIVIndexFromList(u8 *ivs, u8 selectedIv)
static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
{
u8 i;
- u8 selectedIvs[3];
+ u8 selectedIvs[INHERITED_IV_COUNT];
u8 availableIVs[NUM_STATS];
- u8 whichParent[ARRAY_COUNT(selectedIvs)];
+ u8 whichParents[INHERITED_IV_COUNT];
u8 iv;
// Initialize a list of IV indices.
@@ -544,48 +545,46 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
}
// Select the 3 IVs that will be inherited.
- for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ for (i = 0; i < INHERITED_IV_COUNT; i++)
{
- // Randomly pick an IV from the available list.
+ // Randomly pick an IV from the available list and stop from being chosen again.
selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)];
-
- // Remove the selected IV index from the available IV indices.
RemoveIVIndexFromList(availableIVs, i);
}
// Determine which parent each of the selected IVs should inherit from.
- for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ for (i = 0; i < INHERITED_IV_COUNT; i++)
{
- whichParent[i] = Random() % 2;
+ whichParents[i] = Random() % DAYCARE_MON_COUNT;
}
// Set each of inherited IVs on the egg mon.
- for (i = 0; i < ARRAY_COUNT(selectedIvs); i++)
+ for (i = 0; i < INHERITED_IV_COUNT; i++)
{
switch (selectedIvs[i])
{
case 0:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_HP_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_HP_IV);
SetMonData(egg, MON_DATA_HP_IV, &iv);
break;
case 1:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_ATK_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_ATK_IV);
SetMonData(egg, MON_DATA_ATK_IV, &iv);
break;
case 2:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_DEF_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_DEF_IV);
SetMonData(egg, MON_DATA_DEF_IV, &iv);
break;
case 3:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPEED_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPEED_IV);
SetMonData(egg, MON_DATA_SPEED_IV, &iv);
break;
case 4:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPATK_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPATK_IV);
SetMonData(egg, MON_DATA_SPATK_IV, &iv);
break;
case 5:
- iv = GetBoxMonData(&daycare->mons[whichParent[i]].mon, MON_DATA_SPDEF_IV);
+ iv = GetBoxMonData(&daycare->mons[whichParents[i]].mon, MON_DATA_SPDEF_IV);
SetMonData(egg, MON_DATA_SPDEF_IV, &iv);
break;
}
@@ -638,14 +637,14 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru
numSharedParentMoves = 0;
for (i = 0; i < MAX_MON_MOVES; i++)
{
- sHatchedEggMotherMoves[i] = 0;
- sHatchedEggFatherMoves[i] = 0;
- sHatchedEggFinalMoves[i] = 0;
+ sHatchedEggMotherMoves[i] = MOVE_NONE;
+ sHatchedEggFatherMoves[i] = MOVE_NONE;
+ sHatchedEggFinalMoves[i] = MOVE_NONE;
}
for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++)
- sHatchedEggEggMoves[i] = 0;
+ sHatchedEggEggMoves[i] = MOVE_NONE;
for (i = 0; i < EGG_LVL_UP_MOVES_ARRAY_COUNT; i++)
- sHatchedEggLevelUpMoves[i] = 0;
+ sHatchedEggLevelUpMoves[i] = MOVE_NONE;
numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), sHatchedEggLevelUpMoves);
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -664,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;
}
@@ -683,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]);
}
}
@@ -708,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;
}
@@ -753,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);
}
}
@@ -761,13 +760,10 @@ static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *dayca
static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parentSlots)
{
u16 i;
- u16 species[2];
+ u16 species[DAYCARE_MON_COUNT];
u16 eggSpecies;
- // Determine which of the daycare mons is the mother and father of the egg.
- // The 0th index of the parentSlots array is considered the mother slot, and the
- // 1st index is the father slot.
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
species[i] = GetBoxMonData(&daycare->mons[i].mon, MON_DATA_SPECIES);
if (species[i] == SPECIES_DITTO)
@@ -783,11 +779,11 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent
}
eggSpecies = GetEggSpecies(species[parentSlots[0]]);
- if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & 0x8000)
+ if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE)
{
eggSpecies = SPECIES_NIDORAN_M;
}
- if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & 0x8000)
+ if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE)
{
eggSpecies = SPECIES_VOLBEAT;
}
@@ -795,19 +791,19 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent
// Make Ditto the "mother" slot if the other daycare mon is male.
if (species[parentSlots[1]] == SPECIES_DITTO && GetBoxMonGender(&daycare->mons[parentSlots[0]].mon) != MON_FEMALE)
{
- u8 temp = parentSlots[1];
+ u8 ditto = parentSlots[1];
parentSlots[1] = parentSlots[0];
- parentSlots[0] = temp;
+ parentSlots[0] = ditto;
}
return eggSpecies;
}
-static void _GiveEggFromDaycare(struct DayCare *daycare) // give_egg
+static void _GiveEggFromDaycare(struct DayCare *daycare)
{
struct Pokemon egg;
u16 species;
- u8 parentSlots[2]; // 0th index is "mother" daycare slot, 1st is "father"
+ u8 parentSlots[DAYCARE_MON_COUNT];
bool8 isEgg;
species = DetermineEggSpeciesAndParentSlots(daycare, parentSlots);
@@ -835,7 +831,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation)
u8 metLocation;
u8 isEgg;
- CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0);
+ CreateMon(mon, species, EGG_HATCH_LEVEL, 32, FALSE, 0, OT_ID_PLAYER_ID, 0);
metLevel = 0;
ball = ITEM_POKE_BALL;
language = LANGUAGE_JAPANESE;
@@ -846,7 +842,7 @@ void CreateEgg(struct Pokemon *mon, u16 species, bool8 setHotSpringsLocation)
SetMonData(mon, MON_DATA_LANGUAGE, &language);
if (setHotSpringsLocation)
{
- metLocation = 253; // hot springs; see PokemonSummaryScreen_PrintEggTrainerMemo
+ metLocation = METLOC_SPECIAL_EGG;
SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation);
}
@@ -862,7 +858,7 @@ static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *
u8 language;
personality = daycare->offspringPersonality;
- CreateMon(mon, species, EGG_HATCH_LEVEL, 0x20, TRUE, personality, OT_ID_PLAYER_ID, 0);
+ CreateMon(mon, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0);
metLevel = 0;
ball = ITEM_POKE_BALL;
language = LANGUAGE_JAPANESE;
@@ -878,7 +874,7 @@ void GiveEggFromDaycare(void)
_GiveEggFromDaycare(&gSaveBlock1Ptr->daycare);
}
-static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
+static bool8 TryProduceOrHatchEgg(struct DayCare *daycare)
{
u32 i, validEggs = 0;
@@ -888,15 +884,16 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
daycare->mons[i].steps++, validEggs++;
}
- // try to trigger poke sex
- if (daycare->offspringPersonality == 0 && validEggs == 2 && (daycare->mons[1].steps & 0xFF) == 0xFF)
+ // Check if an egg should be produced
+ if (daycare->offspringPersonality == 0 && validEggs == DAYCARE_MON_COUNT && (daycare->mons[1].steps & 0xFF) == 0xFF)
{
- u8 loveScore = GetDaycareCompatibilityScore(daycare);
- if (loveScore > (Random() * 100u) / USHRT_MAX)
+ u8 compatability = GetDaycareCompatibilityScore(daycare);
+ if (compatability > (Random() * 100u) / USHRT_MAX)
TriggerPendingDaycareEgg();
}
- if (++daycare->stepCounter == 255) // hatch an egg
+ // Hatch Egg
+ if (++daycare->stepCounter == 255)
{
u32 steps;
u8 toSub = GetEggStepsToSubtract();
@@ -909,7 +906,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
continue;
steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP);
- if (steps != 0) // subtract needed steps
+ if (steps != 0)
{
if (steps >= toSub)
steps -= toSub;
@@ -918,7 +915,7 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps);
}
- else // hatch the egg
+ else
{
gSpecialVar_0x8004 = i;
return TRUE;
@@ -926,12 +923,12 @@ static bool8 _DoEggActions_CheckHatch(struct DayCare *daycare)
}
}
- return FALSE; // no hatching
+ return FALSE;
}
bool8 ShouldEggHatch(void)
{
- return _DoEggActions_CheckHatch(&gSaveBlock1Ptr->daycare);
+ return TryProduceOrHatchEgg(&gSaveBlock1Ptr->daycare);
}
static bool8 IsEggPending(struct DayCare *daycare)
@@ -947,20 +944,20 @@ static void _GetDaycareMonNicknames(struct DayCare *daycare)
u8 text[12];
if (GetBoxMonData(&daycare->mons[0].mon, MON_DATA_SPECIES) != 0)
{
- GetBoxMonNick(&daycare->mons[0].mon, gStringVar1);
+ GetBoxMonNickname(&daycare->mons[0].mon, gStringVar1);
GetBoxMonData(&daycare->mons[0].mon, MON_DATA_OT_NAME, text);
StringCopy(gStringVar3, text);
}
if (GetBoxMonData(&daycare->mons[1].mon, MON_DATA_SPECIES) != 0)
{
- GetBoxMonNick(&daycare->mons[1].mon, gStringVar2);
+ GetBoxMonNickname(&daycare->mons[1].mon, gStringVar2);
}
}
-u16 GetSelectedMonNickAndSpecies(void)
+u16 GetSelectedMonNicknameAndSpecies(void)
{
- GetBoxMonNick(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1);
+ GetBoxMonNickname(&gPlayerParty[GetCursorSelectionMonId()].box, gStringVar1);
return GetBoxMonData(&gPlayerParty[GetCursorSelectionMonId()].box, MON_DATA_SPECIES);
}
@@ -971,26 +968,19 @@ void GetDaycareMonNicknames(void)
u8 GetDaycareState(void)
{
- // The daycare can be in 4 possible states:
- // 0: default state--no deposited mons, no egg
- // 1: there is an egg waiting for the player to pick it up
- // 2: there is a single pokemon in the daycare
- // 3: there are two pokemon in the daycare, no egg
-
u8 numMons;
if (IsEggPending(&gSaveBlock1Ptr->daycare))
{
- // There is an Egg waiting for the player.
- return 1;
+ return DAYCARE_EGG_WAITING;
}
numMons = CountPokemonInDaycare(&gSaveBlock1Ptr->daycare);
if (numMons != 0)
{
- return numMons + 1;
+ return numMons + 1; // DAYCARE_ONE_MON or DAYCARE_TWO_MONS
}
- return 0;
+ return DAYCARE_NO_MONS;
}
static u8 GetDaycarePokemonCount(void)
@@ -1002,15 +992,15 @@ static u8 GetDaycarePokemonCount(void)
return 0;
}
+// Determine if the two given egg group lists contain any of the
+// same egg groups.
static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2)
{
- // Determine if the two given egg group lists contain any of the
- // same egg groups.
s32 i, j;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < EGG_GROUPS_PER_MON; i++)
{
- for (j = 0; j < 2; j++)
+ for (j = 0; j < EGG_GROUPS_PER_MON; j++)
{
if (eggGroups1[i] == eggGroups2[j])
return TRUE;
@@ -1023,12 +1013,12 @@ static bool8 EggGroupsOverlap(u16 *eggGroups1, u16 *eggGroups2)
static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
{
u32 i;
- u16 eggGroups[2][2];
- u16 species[2];
- u32 trainerIds[2];
- u32 genders[2];
+ u16 eggGroups[DAYCARE_MON_COUNT][EGG_GROUPS_PER_MON];
+ u16 species[DAYCARE_MON_COUNT];
+ u32 trainerIds[DAYCARE_MON_COUNT];
+ u32 genders[DAYCARE_MON_COUNT];
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
u32 personality;
@@ -1042,41 +1032,42 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
// check unbreedable egg group
if (eggGroups[0][0] == EGG_GROUP_UNDISCOVERED || eggGroups[1][0] == EGG_GROUP_UNDISCOVERED)
- return 0;
+ return PARENTS_INCOMPATIBLE;
// two Ditto can't breed
if (eggGroups[0][0] == EGG_GROUP_DITTO && eggGroups[1][0] == EGG_GROUP_DITTO)
- return 0;
+ return PARENTS_INCOMPATIBLE;
- // now that we checked, one ditto can breed with any other mon
+ // one parent is Ditto
if (eggGroups[0][0] == EGG_GROUP_DITTO || eggGroups[1][0] == EGG_GROUP_DITTO)
{
- if (trainerIds[0] == trainerIds[1]) // same trainer
- return 20;
+ if (trainerIds[0] == trainerIds[1])
+ return PARENTS_LOW_COMPATIBILITY;
- return 50; // different trainers, more chance of poke sex
+ return PARENTS_MED_COMPATABILITY;
}
+ // neither parent is Ditto
else
{
- if (genders[0] == genders[1]) // no homo
- return 0;
+ if (genders[0] == genders[1])
+ return PARENTS_INCOMPATIBLE;
if (genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS)
- return 0;
- if (!EggGroupsOverlap(eggGroups[0], eggGroups[1])) // not compatible with each other
- return 0;
+ return PARENTS_INCOMPATIBLE;
+ if (!EggGroupsOverlap(eggGroups[0], eggGroups[1]))
+ return PARENTS_INCOMPATIBLE;
- if (species[0] == species[1]) // same species
+ if (species[0] == species[1])
{
- if (trainerIds[0] == trainerIds[1]) // same species and trainer
- return 50;
+ if (trainerIds[0] == trainerIds[1])
+ return PARENTS_MED_COMPATABILITY; // same species, same trainer
- return 70; // different trainers, same species
+ return PARENTS_MAX_COMPATABILITY; // same species, different trainers
}
else
{
- if (trainerIds[0] != trainerIds[1]) // different trainers, different species
- return 50;
+ if (trainerIds[0] != trainerIds[1])
+ return PARENTS_MED_COMPATABILITY; // different species, different trainers
- return 20; // different species, same trainer
+ return PARENTS_LOW_COMPATIBILITY; // different species, same trainer
}
}
}
@@ -1093,13 +1084,13 @@ void SetDaycareCompatibilityString(void)
relationshipScore = GetDaycareCompatibilityScoreFromSave();
whichString = 0;
- if (relationshipScore == 0)
+ if (relationshipScore == PARENTS_INCOMPATIBLE)
whichString = 3;
- if (relationshipScore == 20)
+ if (relationshipScore == PARENTS_LOW_COMPATIBILITY)
whichString = 2;
- if (relationshipScore == 50)
+ if (relationshipScore == PARENTS_MED_COMPATABILITY)
whichString = 1;
- if (relationshipScore == 70)
+ if (relationshipScore == PARENTS_MAX_COMPATABILITY)
whichString = 0;
StringCopy(gStringVar4, sCompatibilityMessages[whichString]);
@@ -1108,20 +1099,20 @@ void SetDaycareCompatibilityString(void)
bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
{
u8 i;
- u8 symbolsCount[2]; // male, female
- symbolsCount[0] = symbolsCount[1] = 0;
+ u8 symbolsCount[GENDER_COUNT];
+ symbolsCount[MALE] = symbolsCount[FEMALE] = 0;
for (i = 0; name[i] != EOS; i++)
{
if (name[i] == CHAR_MALE)
- symbolsCount[0]++;
+ symbolsCount[MALE]++;
if (name[i] == CHAR_FEMALE)
- symbolsCount[1]++;
+ symbolsCount[FEMALE]++;
}
- if (genderRatio == MON_MALE && symbolsCount[0] != 0 && symbolsCount[1] == 0)
+ if (genderRatio == MON_MALE && symbolsCount[MALE] != 0 && symbolsCount[FEMALE] == 0)
return TRUE;
- if (genderRatio == MON_FEMALE && symbolsCount[1] != 0 && symbolsCount[0] == 0)
+ if (genderRatio == MON_FEMALE && symbolsCount[FEMALE] != 0 && symbolsCount[MALE] == 0)
return TRUE;
return FALSE;
@@ -1150,13 +1141,13 @@ static u8 *AppendMonGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
static void GetDaycareLevelMenuText(struct DayCare *daycare, u8 *dest)
{
- u8 monNames[2][20];
+ u8 monNames[DAYCARE_MON_COUNT][20];
u8 i;
*dest = EOS;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
- GetBoxMonNick(&daycare->mons[i].mon, monNames[i]);
+ GetBoxMonNickname(&daycare->mons[i].mon, monNames[i]);
AppendMonGenderSymbol(monNames[i], &daycare->mons[i].mon);
}
@@ -1174,7 +1165,7 @@ static void GetDaycareLevelMenuLevelText(struct DayCare *daycare, u8 *dest)
u8 text[20];
*dest = EOS;
- for (i = 0; i < 2; i++)
+ for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
StringAppend(dest, gText_Lv);
level = GetLevelAfterDaycareSteps(&daycare->mons[i].mon, daycare->mons[i].steps);
@@ -1206,13 +1197,13 @@ static void DaycareAddTextPrinter(u8 windowId, const u8 *text, u32 x, u32 y)
AddTextPrinter(&printer, 0xFF, NULL);
}
-static void DaycarePrintMonNick(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
+static void DaycarePrintMonNickname(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
{
- u8 nick[POKEMON_NAME_LENGTH * 2];
+ u8 nickname[POKEMON_NAME_LENGTH * 2];
- GetBoxMonNick(&daycare->mons[daycareSlotId].mon, nick);
- AppendMonGenderSymbol(nick, &daycare->mons[daycareSlotId].mon);
- DaycareAddTextPrinter(windowId, nick, 8, y);
+ GetBoxMonNickname(&daycare->mons[daycareSlotId].mon, nickname);
+ AppendMonGenderSymbol(nickname, &daycare->mons[daycareSlotId].mon);
+ DaycareAddTextPrinter(windowId, nickname, 8, y);
}
static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycareSlotId, u32 y)
@@ -1234,7 +1225,7 @@ static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y)
{
if (daycareSlotId < (unsigned) DAYCARE_MON_COUNT)
{
- DaycarePrintMonNick(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y);
+ DaycarePrintMonNickname(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y);
DaycarePrintMonLvl(&gSaveBlock1Ptr->daycare, windowId, daycareSlotId, y);
}
}
@@ -1254,8 +1245,8 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
case 1:
gSpecialVar_Result = input;
break;
- case 5:
- gSpecialVar_Result = 2;
+ case DAYCARE_LEVEL_MENU_EXIT:
+ gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU;
break;
}
DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
@@ -1266,7 +1257,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
}
else if (gMain.newKeys & B_BUTTON)
{
- gSpecialVar_Result = 2;
+ gSpecialVar_Result = DAYCARE_EXITED_LEVEL_MENU;
DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
@@ -1301,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 974859c88..2a8fe973d 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"
@@ -14,6 +14,7 @@
#include "graphics.h"
#include "international_string_util.h"
#include "item_icon.h"
+#include "item_menu.h"
#include "list_menu.h"
#include "main.h"
#include "menu.h"
@@ -40,6 +41,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 +71,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 +88,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 +130,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 +165,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 +346,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 +392,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 +460,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,
};
@@ -607,7 +609,7 @@ static void DecorationMenuAction_PutAway(u8 taskId)
{
RemoveDecorationWindow(0);
ClearDialogWindowAndFrame(0, 0);
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_8129ABC;
}
@@ -633,7 +635,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 +1237,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)
{
@@ -1291,7 +1293,7 @@ void sub_8127F68(u8 taskId)
{
if (sub_8127F38() == TRUE)
{
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_8128060;
}
@@ -1331,7 +1333,7 @@ void sub_8128060(u8 taskId)
ConfigureCameraObjectForPlacingDecoration(&sPlaceDecorationGraphicsDataBuffer, gCurDecorationItems[gCurDecorationIndex]);
sub_812826C(taskId);
SetUpPlacingDecorationPlayerAvatar(taskId, &sPlaceDecorationGraphicsDataBuffer);
- pal_fill_black();
+ FadeInFromBlack();
gPaletteFade.bufferTransferDisabled = FALSE;
gTasks[taskId].data[2] = 2;
break;
@@ -1339,7 +1341,7 @@ void sub_8128060(u8 taskId)
if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].data[12] = 0;
- sub_8128FD8(taskId);
+ ContinueDecorating(taskId);
}
break;
}
@@ -1427,7 +1429,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 +1439,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 +1474,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 +1588,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 +1621,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 +1647,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 +1658,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 +1669,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);
@@ -1681,7 +1683,7 @@ void sub_8128BA0(u8 taskId)
void sub_8128BBC(u8 taskId)
{
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = c1_overworld_prev_quest;
}
@@ -1718,7 +1720,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:
@@ -1737,7 +1739,7 @@ void sub_8128CD4(void)
u8 taskId;
ScriptContext2_Enable();
- pal_fill_black();
+ FadeInFromBlack();
taskId = CreateTask(sub_8128C64, 8);
sub_8127580(taskId);
gTasks[taskId].data[2] = 0;
@@ -1857,7 +1859,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 +1867,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)
@@ -2043,7 +2045,7 @@ const u32 *GetDecorationIconPicOrPalette(u16 decor, u8 mode)
if (decor > NUM_DECORATIONS)
decor = DECOR_NONE;
- return gUnknown_085A6BE8[decor][mode];
+ return gDecorIconTable[decor][mode];
}
u8 AddDecorationIconObjectFromEventObject(u16 tilesTag, u16 paletteTag, u8 decor)
@@ -2095,7 +2097,7 @@ u8 AddDecorationIconObject(u8 decor, s16 x, s16 y, u8 priority, u16 tilesTag, u1
gSprites[spriteId].pos2.x = x + 4;
gSprites[spriteId].pos2.y = y + 4;
}
- else if (gUnknown_085A6BE8[decor][0] == NULL)
+ else if (gDecorIconTable[decor][0] == NULL)
{
spriteId = AddDecorationIconObjectFromEventObject(tilesTag, paletteTag, decor);
if (spriteId == MAX_SPRITES)
@@ -2152,7 +2154,8 @@ void sub_8129708(void)
}
}
-void sub_81297AC(void)
+// Unused
+void GetEventObjectLocalIdByFlag(void)
{
u8 i;
@@ -2206,7 +2209,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;
}
@@ -2214,14 +2217,14 @@ void sub_81298EC(u8 taskId)
case 2:
ScriptContext2_Enable();
IdentifyOwnedDecorationsCurrentlyInUseInternal(taskId);
- pal_fill_black();
+ FadeInFromBlack();
gTasks[taskId].data[2] = 3;
break;
case 3:
if (IsWeatherNotFadingIn() == TRUE)
{
StringExpandPlaceholders(gStringVar4, gText_DecorationReturnedToPC);
- DisplayItemMessageOnField(taskId, gStringVar4, sub_8129D64);
+ DisplayItemMessageOnField(taskId, gStringVar4, ContinuePuttingAwayDecorationsPrompt);
if (gMapHeader.regionMapSectionId == MAPSEC_SECRET_BASE)
TV_PutSecretBaseVisitOnTheAir();
}
@@ -2277,20 +2280,20 @@ void sub_8129ABC(u8 taskId)
break;
case 1:
SetUpPuttingAwayDecorationPlayerAvatar();
- pal_fill_black();
+ FadeInFromBlack();
data[2] = 2;
break;
case 2:
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 +2319,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 +2331,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 +2342,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 +2545,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);
+ FadeScreen(FADE_TO_BLACK, 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);
@@ -2569,7 +2572,7 @@ void sub_812A210(u8 taskId)
void sub_812A22C(u8 taskId)
{
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].data[2] = 0;
gTasks[taskId].func = sub_812A25C;
}
@@ -2604,7 +2607,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:
@@ -2622,7 +2625,7 @@ void sub_812A334(void)
{
u8 taskId;
- pal_fill_black();
+ FadeInFromBlack();
DrawDialogueFrame(0, 1);
InitDecorationActionsWindow();
taskId = CreateTask(sub_812A2C4, 8);
@@ -2658,7 +2661,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 +2670,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..9c5e69d99 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"
@@ -25,12 +25,12 @@ void InitDewfordTrend(void)
for (i = 0; i < 5; i++)
{
- gSaveBlock1Ptr->easyChatPairs[i].words[0] = sub_811EE38(EC_GROUP_CONDITIONS);
+ gSaveBlock1Ptr->easyChatPairs[i].words[0] = GetRandomEasyChatWordFromGroup(EC_GROUP_CONDITIONS);
if (Random() & 1)
- gSaveBlock1Ptr->easyChatPairs[i].words[1] = sub_811EE38(EC_GROUP_LIFESTYLE);
+ gSaveBlock1Ptr->easyChatPairs[i].words[1] = GetRandomEasyChatWordFromGroup(EC_GROUP_LIFESTYLE);
else
- gSaveBlock1Ptr->easyChatPairs[i].words[1] = sub_811EE38(EC_GROUP_HOBBIES);
+ gSaveBlock1Ptr->easyChatPairs[i].words[1] = GetRandomEasyChatWordFromGroup(EC_GROUP_HOBBIES);
gSaveBlock1Ptr->easyChatPairs[i].unk1_6 = Random() & 1;
sub_8122B28(&(gSaveBlock1Ptr->easyChatPairs[i]));
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..958922067 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;
@@ -2704,17 +2704,17 @@ static const u16 gUnknown_082F7B50[][4] =
{9999, 9999, 9999, 0},
};
-static const u8 gUnknown_082F7B78[] = _("あいうえおかき");
-static const u8 gUnknown_082F7B80[] = _("ABCDEFG");
-static const u8 gUnknown_082F7B88[] = _("0123456");
+static const u8 sJPText_Vowels[] = _("あいうえおかき");
+static const u8 sText_ABCDEFG[] = _("ABCDEFG");
+static const u8 sText_0123456[] = _("0123456");
-static const u8 *const gUnknown_082F7B90[] =
+static const u8 *const sPlaceholderPlayerNames[] =
{
- gUnknown_082F7B78,
- gUnknown_082F7B78,
- gUnknown_082F7B78,
- gUnknown_082F7B80,
- gUnknown_082F7B88
+ sJPText_Vowels,
+ sJPText_Vowels,
+ sJPText_Vowels,
+ sText_ABCDEFG,
+ sText_0123456
};
static void sub_8027D20(void)
@@ -2726,8 +2726,8 @@ static void sub_8027D38(void)
{
u8 i, playerId;
- for (playerId = gUnknown_02022C98->unk24; playerId < 5; playerId++)
- StringCopy(gLinkPlayers[playerId].name, gUnknown_082F7B90[playerId]);
+ for (playerId = gUnknown_02022C98->unk24; playerId < ARRAY_COUNT(sPlaceholderPlayerNames); playerId++)
+ StringCopy(gLinkPlayers[playerId].name, sPlaceholderPlayerNames[playerId]);
gUnknown_02022C98->unk24 = 5;
for (i = 0; i < 4; i++)
@@ -3555,14 +3555,14 @@ static const u32 gDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/
static const struct OamData sOamData_82FB1E0 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
- .size = 3,
+ .size = SPRITE_SIZE(64x64),
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
@@ -3572,14 +3572,14 @@ static const struct OamData sOamData_82FB1E0 =
static const struct OamData sOamData_82FB1E8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
- .size = 1,
+ .size = SPRITE_SIZE(16x16),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
@@ -3589,14 +3589,14 @@ static const struct OamData sOamData_82FB1E8 =
static const struct OamData sOamData_82FB1F0 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
- .size = 1,
+ .size = SPRITE_SIZE(16x16),
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
@@ -3606,14 +3606,14 @@ static const struct OamData sOamData_82FB1F0 =
static const struct OamData sOamData_82FB1F8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 1,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
- .size = 3,
+ .size = SPRITE_SIZE(64x32),
.tileNum = 0,
.priority = 3,
.paletteNum = 0,
@@ -4386,12 +4386,12 @@ struct WinCoords
u8 top;
};
-static const u8 gUnknown_082FB380[][3] =
+static const u8 sTextColorTable[][3] =
{
- {1, 2, 3},
- {1, 4, 5},
- {1, 8, 9},
- {1, 6, 7},
+ {TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY},
+ {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED},
+ {TEXT_COLOR_WHITE, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_BLUE},
+ {TEXT_COLOR_WHITE, TEXT_COLOR_GREEN, TEXT_COLOR_LIGHT_GREEN},
};
static const struct WinCoords gUnknown_082FB38C[] = {{12, 6}};
@@ -4525,7 +4525,7 @@ static void sub_8029440(void)
if (id == GetMultiplayerId())
colorsId = 2;
name = sub_8027660(id);
- AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[i], 1, left, 1, gUnknown_082FB380[colorsId], -1, name);
+ AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[i], 1, left, 1, sTextColorTable[colorsId], -1, name);
CopyWindowToVram(gUnknown_02022CF8->unk3008[i], 2);
window.baseBlock += 0xE;
sub_8029174(&window);
@@ -4609,7 +4609,7 @@ static void sub_80296A8(u8 playersCount_)
if (id == GetMultiplayerId())
colorsId = 2;
name = sub_8027660(id);
- AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, 28, gUnknown_082FB402[i], gUnknown_082FB380[colorsId], -1, name);
+ AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, 28, gUnknown_082FB402[i], sTextColorTable[colorsId], -1, name);
ConvertIntToDecimalStringN(numString, points, STR_CONV_MODE_LEFT_ALIGN, 7);
numWidth = GetStringWidth(1, numString, -1);
AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, numString, x - numWidth, gUnknown_082FB402[i], -1, NULL);
@@ -4653,7 +4653,7 @@ static void sub_802988C(void)
colorsId = 2;
name = sub_8027660(i);
- AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, 0, gUnknown_082FB3F8[i], gUnknown_082FB380[colorsId], -1, name);
+ AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, 0, gUnknown_082FB3F8[i], sTextColorTable[colorsId], -1, name);
for (j = 0; j < 4; j++)
{
u32 width;
@@ -4663,7 +4663,7 @@ static void sub_802988C(void)
ConvertIntToDecimalStringN(gStringVar4, result1, STR_CONV_MODE_LEFT_ALIGN, 4);
width = GetStringWidth(1, gStringVar4, -1);
if (result2 == result1 && result2 != 0)
- AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, gUnknown_082FB3F0[j] - width, gUnknown_082FB3F8[i], gUnknown_082FB380[1], -1, gStringVar4);
+ AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, gUnknown_082FB3F0[j] - width, gUnknown_082FB3F8[i], sTextColorTable[1], -1, gStringVar4);
else
AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gStringVar4, gUnknown_082FB3F0[j] - width, gUnknown_082FB3F8[i], -1, NULL);
}
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..86349cbd6 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,8 +221,8 @@ 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 u16 sub_811F108(void);
+static bool8 EasyChatIsNationalPokedexEnabled(void);
+static u16 GetRandomUnlockedEasyChatPokemon(void);
static void sub_811F2D4(void);
static void sub_811F46C(void);
static u8 *CopyEasyChatWordPadded(u8 *, u16, u16);
@@ -531,11 +532,11 @@ static const u16 sMysteryGiftPhrase[] = {
};
static const u16 sBerryMasterWifePhrases[][2] = {
- {EC_WORD_GREAT, EC_WORD_BATTLE},
- {EC_WORD_CHALLENGE, EC_WORD_CONTEST},
- {EC_WORD_OVERWHELMING, EC_POKEMON(LATIAS)},
- {EC_WORD_COOL, EC_POKEMON(LATIOS)},
- {EC_WORD_SUPER, EC_WORD_HUSTLE},
+ [PHRASE_GREAT_BATTLE - 1] = {EC_WORD_GREAT, EC_WORD_BATTLE},
+ [PHRASE_CHALLENGE_CONTEST - 1] = {EC_WORD_CHALLENGE, EC_WORD_CONTEST},
+ [PHRASE_OVERWHELMING_LATIAS - 1] = {EC_WORD_OVERWHELMING, EC_POKEMON(LATIAS)},
+ [PHRASE_COOL_LATIOS - 1] = {EC_WORD_COOL, EC_POKEMON(LATIOS)},
+ [PHRASE_SUPER_HUSTLE - 1] = {EC_WORD_SUPER, EC_WORD_HUSTLE},
};
static const u16 sEasyChatTriangleCursorPalette[] = INCBIN_U16("graphics/easy_chat/triangle_cursor.gbapal");
@@ -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;
@@ -1318,7 +1320,7 @@ void ShowEasyChatScreen(void)
words = &gSaveBlock1Ptr->lilycoveLady.quiz.correctAnswer;
break;
case EASY_CHAT_TYPE_APPRENTICE:
- words = gSaveBlock2Ptr->apprentices[0].easyChatWords;
+ words = gSaveBlock2Ptr->apprentices[0].speechWon;
break;
case EASY_CHAT_TYPE_QUESTIONNAIRE:
words = sub_801B058();
@@ -1339,7 +1341,7 @@ static void CB2_QuizLadyQuestion(void)
switch (gMain.state)
{
case 0:
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
break;
case 1:
if (!gPaletteFade.active)
@@ -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;
}
@@ -3701,7 +3703,7 @@ static void sub_811CFCC(void)
xOffset = GetStringCenterAlignXOffset(1, titleText, 144);
FillWindowPixelBuffer(0, PIXEL_FILL(0));
- sub_811D058(0, 1, titleText, xOffset, 1, 0xFF, 0, 2, 3);
+ sub_811D058(0, 1, titleText, xOffset, 1, 0xFF, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
PutWindowTilemap(0);
CopyWindowToVram(0, 3);
}
@@ -3711,12 +3713,12 @@ void sub_811D028(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, vo
AddTextPrinterParameterized(windowId, fontId, str, x, y, speed, callback);
}
-static void sub_811D058(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 red, u8 green, u8 blue)
+static void sub_811D058(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 speed, u8 bg, u8 fg, u8 shadow)
{
u8 color[3];
- color[0] = red;
- color[1] = green;
- color[2] = blue;
+ color[0] = bg;
+ color[1] = fg;
+ color[2] = shadow;
AddTextPrinterParameterized3(windowId, fontId, left, top, color, speed, str);
}
@@ -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)
@@ -4087,7 +4089,7 @@ static void sub_811D864(u8 arg0, u8 arg1)
if (!sub_811BF88(easyChatWord))
sub_811D028(2, 1, sUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, NULL);
else
- sub_811D058(2, 1, sUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, 1, 5, 3);
+ sub_811D058(2, 1, sUnknown_0203A11C->unkCC, (j * 13 + 3) * 8, y, 0xFF, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_LIGHT_GREY);
}
}
@@ -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;
@@ -5037,24 +5039,24 @@ static u16 GetEasyChatWordStringLength(u16 easyChatWord)
}
}
-bool8 sub_811EDC4(const u16 *easyChatWords, u8 arg1, u8 arg2, u16 arg3)
+static bool8 CanPhraseFitInXRowsYCols(const u16 *easyChatWords, u8 numRows, u8 numColumns, u16 maxLength)
{
u8 i, j;
- for (i = 0; i < arg2; i++)
+ for (i = 0; i < numColumns; i++)
{
- u16 totalLength = arg1 - 1;
- for (j = 0; j < arg1; j++)
+ u16 totalLength = numRows - 1;
+ for (j = 0; j < numRows; j++)
totalLength += GetEasyChatWordStringLength(*(easyChatWords++));
- if (totalLength > arg3)
+ if (totalLength > maxLength)
return TRUE;
}
return FALSE;
}
-u16 sub_811EE38(u16 groupId)
+u16 GetRandomEasyChatWordFromGroup(u16 groupId)
{
u16 index = Random() % gEasyChatGroups[groupId].numWords;
if (groupId == EC_GROUP_POKEMON
@@ -5068,18 +5070,18 @@ u16 sub_811EE38(u16 groupId)
return EC_WORD(groupId, index);
}
-u16 sub_811EE90(u16 groupId)
+u16 GetRandomEasyChatWordFromUnlockedGroup(u16 groupId)
{
- if (!sub_811EA28(groupId))
+ if (!IsEasyChatGroupUnlocked(groupId))
return 0xFFFF;
if (groupId == EC_GROUP_POKEMON)
- return sub_811F108();
+ return GetRandomUnlockedEasyChatPokemon();
- return sub_811EE38(groupId);
+ return GetRandomEasyChatWordFromGroup(groupId);
}
-void sub_811EECC(void)
+void ShowEasyChatProfile(void)
{
u16 *easyChatWords;
int columns, rows;
@@ -5092,7 +5094,7 @@ void sub_811EECC(void)
break;
case 1:
easyChatWords = gSaveBlock1Ptr->easyChatBattleStart;
- if (sub_811EDC4(gSaveBlock1Ptr->easyChatBattleStart, 3, 2, 18))
+ if (CanPhraseFitInXRowsYCols(gSaveBlock1Ptr->easyChatBattleStart, 3, 2, 18))
{
columns = 2;
rows = 3;
@@ -5121,23 +5123,24 @@ void sub_811EECC(void)
ShowFieldAutoScrollMessage(gStringVar4);
}
-void sub_811EF6C(void)
+// The phrase that a man in Dewford Hall suggests has a "deep link" to the current trendy phrase
+void BufferDeepLinkPhrase(void)
{
int groupId = Random() & 1 ? EC_GROUP_HOBBIES : EC_GROUP_LIFESTYLE;
- u16 easyChatWord = sub_811EE90(groupId);
+ u16 easyChatWord = GetRandomEasyChatWordFromUnlockedGroup(groupId);
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 +5148,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 +5181,7 @@ u16 sub_811F01C(void)
}
else
{
- sub_811EFC0(i);
+ UnlockAdditionalPhrase(i);
return EC_WORD(EC_GROUP_TRENDY_SAYING, i);
}
}
@@ -5187,17 +5190,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,12 +5213,12 @@ u16 sub_811F090(void)
return 0xFFFF;
}
-static bool8 sub_811F0F8(void)
+static bool8 EasyChatIsNationalPokedexEnabled(void)
{
return IsNationalPokedexEnabled();
}
-static u16 sub_811F108(void)
+static u16 GetRandomUnlockedEasyChatPokemon(void)
{
u16 i;
u16 numWords;
@@ -5496,7 +5500,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 +5548,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 5e16f1479..032ae6733 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"
@@ -56,7 +56,7 @@ struct EggHatchData
extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
extern const u8 gText_HatchedFromEgg[];
-extern const u8 gText_NickHatchPrompt[];
+extern const u8 gText_NicknameHatchPrompt[];
static void Task_EggHatch(u8 taskID);
static void CB2_EggHatch_0(void);
@@ -83,10 +83,10 @@ static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
static const struct OamData sOamData_EggHatch =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -163,10 +163,10 @@ static const struct SpriteTemplate sSpriteTemplate_EggHatch =
static const struct OamData sOamData_EggShard =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -298,13 +298,13 @@ static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
u16 species;
u32 personality, pokerus;
u8 i, friendship, language, gameMet, markings, obedience;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u32 ivs[NUM_STATS];
species = GetMonData(egg, MON_DATA_SPECIES);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i);
}
@@ -324,7 +324,7 @@ static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
CreateMon(temp, species, EGG_HATCH_LEVEL, 32, TRUE, personality, OT_ID_PLAYER_ID, 0);
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_MON_MOVES; i++)
{
SetMonData(temp, MON_DATA_MOVE1 + i, &moves[i]);
}
@@ -368,7 +368,7 @@ static void AddHatchedMonToParty(u8 id)
GetSetPokedexFlag(pokeNum, FLAG_SET_SEEN);
GetSetPokedexFlag(pokeNum, FLAG_SET_CAUGHT);
- GetMonNick(mon, gStringVar1);
+ GetMonNickname2(mon, gStringVar1);
ball = ITEM_POKE_BALL;
SetMonData(mon, MON_DATA_POKEBALL, &ball);
@@ -388,17 +388,17 @@ void ScriptHatchMon(void)
AddHatchedMonToParty(gSpecialVar_0x8004);
}
-static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId)
+static bool8 _CheckDaycareMonReceivedMail(struct DayCare *daycare, u8 daycareId)
{
- u8 nick[0x20];
+ u8 nickname[32];
struct DaycareMon *daycareMon = &daycare->mons[daycareId];
- GetBoxMonNick(&daycareMon->mon, nick);
- if (daycareMon->mail.message.itemId != 0
- && (StringCompareWithoutExtCtrlCodes(nick, daycareMon->mail.monName) != 0
+ GetBoxMonNickname(&daycareMon->mon, nickname);
+ if (daycareMon->mail.message.itemId != ITEM_NONE
+ && (StringCompareWithoutExtCtrlCodes(nickname, daycareMon->mail.monName) != 0
|| StringCompareWithoutExtCtrlCodes(gSaveBlock2Ptr->playerName, daycareMon->mail.OT_name) != 0))
{
- StringCopy(gStringVar1, nick);
+ StringCopy(gStringVar1, nickname);
TVShowConvertInternationalString(gStringVar2, daycareMon->mail.OT_name, daycareMon->mail.gameLanguage);
TVShowConvertInternationalString(gStringVar3, daycareMon->mail.monName, daycareMon->mail.monLanguage);
return TRUE;
@@ -406,9 +406,9 @@ static bool8 sub_807158C(struct DayCare *daycare, u8 daycareId)
return FALSE;
}
-bool8 sub_8071614(void)
+bool8 CheckDaycareMonReceivedMail(void)
{
- return sub_807158C(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
+ return _CheckDaycareMonReceivedMail(&gSaveBlock1Ptr->daycare, gSpecialVar_0x8004);
}
static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID, u16* speciesLoc)
@@ -461,7 +461,7 @@ void EggHatch(void)
{
ScriptContext2_Enable();
CreateTask(Task_EggHatch, 10);
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
}
static void Task_EggHatch(u8 taskID)
@@ -470,7 +470,7 @@ static void Task_EggHatch(u8 taskID)
{
CleanupOverworldWindowsAndTilemaps();
SetMainCallback2(CB2_EggHatch_0);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyTask(taskID);
}
}
@@ -634,7 +634,7 @@ static void CB2_EggHatch_1(void)
}
break;
case 5:
- GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, 0xFF);
PlayFanfare(MUS_FANFA5);
@@ -651,8 +651,8 @@ static void CB2_EggHatch_1(void)
sEggHatchData->CB2_state++;
break;
case 8:
- GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
- StringExpandPlaceholders(gStringVar4, gText_NickHatchPrompt);
+ GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_NicknameHatchPrompt);
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1);
sEggHatchData->CB2_state++;
break;
@@ -668,7 +668,7 @@ static void CB2_EggHatch_1(void)
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0:
- GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
+ GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3);
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES);
gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]);
personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
@@ -880,9 +880,9 @@ u8 GetEggStepsToSubtract(void)
return 1;
}
-u16 sub_80722E0(void)
+u16 CountPartyAliveNonEggMons(void)
{
u16 aliveNonEggMonsCount = CountStorageNonEggMons();
- aliveNonEggMonsCount += CountPartyAliveNonEggMonsExcept(6);
+ aliveNonEggMonsCount += CountPartyAliveNonEggMonsExcept(PARTY_SIZE);
return aliveNonEggMonsCount;
}
diff --git a/src/electric.c b/src/electric.c
index 4b93119dc..3344db7bf 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,
@@ -757,13 +757,13 @@ static void sub_810A9DC(struct Sprite *sprite)
{
if (!sprite->data[0])
{
- sprite->oam.shape = 2;
- sprite->oam.size = 0;
+ sprite->oam.shape = SPRITE_SHAPE(8x16);
+ sprite->oam.size = SPRITE_SIZE(8x16);
}
else
{
- sprite->oam.shape = 0;
- sprite->oam.size = 1;
+ sprite->oam.shape = SPRITE_SHAPE(16x16);
+ sprite->oam.size = SPRITE_SIZE(16x16);
}
if (++sprite->data[1] == 15)
DestroySprite(sprite);
diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c
index f184dea82..bdfbebf6b 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"
@@ -448,7 +448,7 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct
AGB_ASSERT_EX(ttdata->id == 0, "cereader_tool.c", 452);
memset(buffer2, 0, 0x1000);
- buffer2->unkField_0 = ttdata->count;
+ buffer2->numTrainers = ttdata->count;
buffer2->unused1 = sub_81D38D4();
buffer2->numFloors = (ttdata->count + 1) / 2;
@@ -456,13 +456,13 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct
{
if (!(i & 1))
{
- buffer2->floors[i / 2].unk0 = ttdata->unk_8[i].unk0;
+ buffer2->floors[i / 2].trainerNum1 = ttdata->unk_8[i].unk0;
buffer2->floors[i / 2].display = ttdata->unk_8[i].unk14C;
buffer2->floors[i / 2].trainers[0] = ttdata->unk_8[i].unk4;
}
else
{
- buffer2->floors[i / 2].unk1 = ttdata->unk_8[i].unk0;
+ buffer2->floors[i / 2].trainerNum2 = ttdata->unk_8[i].unk0;
buffer2->floors[i / 2].trainers[1] = ttdata->unk_8[i].unk4;
}
}
@@ -473,7 +473,7 @@ static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *ttdata, struct
}
buffer2->checksum = CalcByteArraySum((u8 *)buffer2->floors, 4 * sizeof(struct TrHillFloor));
- if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != 1)
+ if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != SAVE_STATUS_OK)
return FALSE;
return TRUE;
@@ -487,13 +487,13 @@ bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0)
return result;
}
-static bool32 TryReadTrainerHill_r(struct EReaderTrainerHillSet *arg0, u8 *arg1)
+static bool32 TryReadTrainerHill_r(struct EReaderTrainerHillSet *dst, u8 *buffer)
{
- if (TryReadSpecialSaveSection(SECTOR_ID_TRAINER_HILL, arg1) != 1)
+ if (TryReadSpecialSaveSection(SECTOR_ID_TRAINER_HILL, buffer) != SAVE_STATUS_OK)
return FALSE;
- memcpy(arg0, arg1, sizeof(struct EReaderTrainerHillSet));
- if (!TrainerHill_VerifyChecksum(arg0))
+ memcpy(dst, buffer, sizeof(struct EReaderTrainerHillSet));
+ if (!TrainerHill_VerifyChecksum(dst))
return FALSE;
return TRUE;
diff --git a/src/ereader_screen.c b/src/ereader_screen.c
index 13e964224..754bbe445 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);
}
@@ -251,7 +251,7 @@ static void sub_81D5084(u8 taskId)
switch (data->unk8)
{
case 0:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EDFD6))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_ReceiveMysteryGiftWithEReader))
data->unk8 = 1;
break;
case 1:
@@ -275,9 +275,9 @@ static void sub_81D5084(u8 taskId)
}
break;
case 4:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EDFF5))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_SelectConnectFromEReaderMenu))
{
- AddTextPrinterToWindow1(gUnknown_085EE014);
+ AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA);
sub_81D505C(&data->unk0);
data->unk8 = 5;
}
@@ -324,11 +324,11 @@ static void sub_81D5084(u8 taskId)
}
break;
case 7:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EE05C))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_LinkIsIncorrect))
data->unk8 = 4;
break;
case 8:
- AddTextPrinterToWindow1(gUnknown_085EE097);
+ AddTextPrinterToWindow1(gJPText_Connecting);
// XXX: This (u32*) cast is discarding the const qualifier from gUnknown_089A3470
sub_81D4D50(&gUnknown_03006370, gMultiBootProgram_BerryGlitchFix_Start - gUnknown_089A3470, (u32*)gUnknown_089A3470);
data->unk8 = 9;
@@ -347,7 +347,7 @@ static void sub_81D5084(u8 taskId)
else if (data->unkE == 1)
{
sub_81D505C(&data->unk0);
- AddTextPrinterToWindow1(gUnknown_085EE120);
+ AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment);
data->unk8 = 11;
}
else
@@ -361,7 +361,7 @@ static void sub_81D5084(u8 taskId)
break;
case 12:
sub_81D4E30();
- AddTextPrinterToWindow1(gUnknown_085EE0DC);
+ AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
data->unk8 = 13;
break;
case 13:
@@ -370,7 +370,7 @@ static void sub_81D5084(u8 taskId)
case 0:
break;
case 2:
- AddTextPrinterToWindow1(gUnknown_085EE097);
+ AddTextPrinterToWindow1(gJPText_Connecting);
data->unk8 = 14;
break;
case 1:
@@ -418,7 +418,7 @@ static void sub_81D5084(u8 taskId)
case 17:
if (TryWriteTrainerHill((struct EReaderTrainerHillSet *)&gDecompressionBuffer))
{
- AddTextPrinterToWindow1(gUnknown_085EE0FA);
+ AddTextPrinterToWindow1(gJPText_ConnectionComplete);
sub_81D505C(&data->unk0);
data->unk8 = 18;
}
@@ -430,7 +430,7 @@ static void sub_81D5084(u8 taskId)
case 18:
if (sub_81D5064(&data->unk0, 120))
{
- AddTextPrinterToWindow1(gUnknown_085EE107);
+ AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToHoenn);
PlayFanfare(MUS_FANFA4);
data->unk8 = 19;
}
@@ -440,19 +440,19 @@ static void sub_81D5084(u8 taskId)
data->unk8 = 26;
break;
case 23:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9,gUnknown_085EE06B))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_CardReadingHasBeenHalted))
data->unk8 = 26;
break;
case 20:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EE0A3))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_ConnectionErrorCheckLink))
data->unk8 = 0;
break;
case 21:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EE0BF))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_ConnectionErrorTryAgain))
data->unk8 = 0;
break;
case 22:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EE12D))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gJPText_WriteErrorUnableToSaveData))
data->unk8 = 0;
break;
case 26:
diff --git a/src/event_data.c b/src/event_data.c
index 50628f984..15ca47f7c 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -2,9 +2,15 @@
#include "event_data.h"
#include "pokedex.h"
-#define TEMP_FLAGS_SIZE 0x4
-#define DAILY_FLAGS_SIZE 0x8
-#define TEMP_VARS_SIZE 0x20
+#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1)
+#define NUM_TEMP_FLAGS (TEMP_FLAGS_END - TEMP_FLAGS_START + 1)
+#define NUM_DAILY_FLAGS (DAILY_FLAGS_END - DAILY_FLAGS_START + 1)
+#define NUM_TEMP_VARS (TEMP_VARS_END - TEMP_VARS_START + 1)
+
+#define SPECIAL_FLAGS_SIZE (NUM_SPECIAL_FLAGS / 8) // 8 flags per byte
+#define TEMP_FLAGS_SIZE (NUM_TEMP_FLAGS / 8)
+#define DAILY_FLAGS_SIZE (NUM_DAILY_FLAGS / 8)
+#define TEMP_VARS_SIZE (NUM_TEMP_VARS * 2) // 1/2 var per byte
EWRAM_DATA u16 gSpecialVar_0x8000 = 0;
EWRAM_DATA u16 gSpecialVar_0x8001 = 0;
@@ -24,7 +30,7 @@ EWRAM_DATA u16 gSpecialVar_Facing = 0;
EWRAM_DATA u16 gSpecialVar_MonBoxId = 0;
EWRAM_DATA u16 gSpecialVar_MonBoxPos = 0;
EWRAM_DATA u16 gSpecialVar_Unused_0x8014 = 0;
-EWRAM_DATA static u8 gSpecialFlags[16] = {0};
+EWRAM_DATA static u8 gSpecialFlags[SPECIAL_FLAGS_SIZE] = {0};
extern u16 *const gSpecialVars[];
@@ -37,8 +43,8 @@ void InitEventData(void)
void ClearTempFieldEventData(void)
{
- memset(gSaveBlock1Ptr->flags, 0, TEMP_FLAGS_SIZE);
- memset(gSaveBlock1Ptr->vars, 0, TEMP_VARS_SIZE);
+ memset(gSaveBlock1Ptr->flags + (TEMP_FLAGS_START / 8), 0, TEMP_FLAGS_SIZE);
+ memset(gSaveBlock1Ptr->vars + ((TEMP_VARS_START - VARS_START) * 2), 0, TEMP_VARS_SIZE);
FlagClear(FLAG_SYS_ENC_UP_ITEM);
FlagClear(FLAG_SYS_ENC_DOWN_ITEM);
FlagClear(FLAG_SYS_USE_STRENGTH);
@@ -48,7 +54,7 @@ void ClearTempFieldEventData(void)
void ClearDailyFlags(void)
{
- memset(gSaveBlock1Ptr->flags + 0x124, 0, DAILY_FLAGS_SIZE);
+ memset(gSaveBlock1Ptr->flags + (DAILY_FLAGS_START / 8), 0, DAILY_FLAGS_SIZE);
}
void DisableNationalPokedex(void)
@@ -108,7 +114,7 @@ bool32 IsMysteryGiftEnabled(void)
return FlagGet(FLAG_SYS_MYSTERY_GIFT_ENABLE);
}
-void sub_809D4D8(void)
+void ClearMysteryEventFlags(void)
{
FlagClear(FLAG_MYSTERY_EVENT_DONE);
FlagClear(FLAG_MYSTERY_EVENT_1);
@@ -128,7 +134,7 @@ void sub_809D4D8(void)
FlagClear(FLAG_MYSTERY_EVENT_15);
}
-void sub_809D570(void)
+void ClearMysteryEventVars(void)
{
VarSet(VAR_EVENT_PICHU_SLOT, 0);
VarSet(VAR_NEVER_READ_0x40DE, 0);
diff --git a/src/event_obj_lock.c b/src/event_obj_lock.c
index 566b4931d..817276694 100644
--- a/src/event_obj_lock.c
+++ b/src/event_obj_lock.c
@@ -8,7 +8,7 @@
#include "trainer_see.h"
#include "constants/event_objects.h"
-bool8 walkrun_is_standing_still(void)
+bool8 IsPlayerStandingStill(void)
{
if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION)
return FALSE;
@@ -18,7 +18,7 @@ bool8 walkrun_is_standing_still(void)
static void sub_80983A4(u8 taskId)
{
- if (walkrun_is_standing_still())
+ if (IsPlayerStandingStill())
{
sub_808B864();
DestroyTask(taskId);
@@ -49,7 +49,7 @@ static void sub_8098400(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- if (!task->data[0] && walkrun_is_standing_still() == TRUE)
+ if (!task->data[0] && IsPlayerStandingStill() == TRUE)
{
sub_808B864();
task->data[0] = 1;
@@ -92,7 +92,7 @@ void ScriptUnfreezeEventObjects(void)
{
u8 playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
}
@@ -104,16 +104,16 @@ void sub_8098524(void)
EventObjectClearHeldMovementIfFinished(&gEventObjects[gSelectedEventObject]);
playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
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]);
}
@@ -123,7 +123,7 @@ static void sub_80985BC(u8 taskId)
struct Task *task = &gTasks[taskId];
u8 eventObjectId = task->data[2];
- if (!task->data[0] && walkrun_is_standing_still() == TRUE)
+ if (!task->data[0] && IsPlayerStandingStill() == TRUE)
{
sub_808B864();
task->data[0] = 1;
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 75f758a12..f84a7bedb 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
@@ -1120,13 +1121,13 @@ void ResetEventObjects(void)
static void CreateReflectionEffectSprites(void)
{
u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
InitSpriteAffineAnim(&gSprites[spriteId]);
StartSpriteAffineAnim(&gSprites[spriteId], 0);
gSprites[spriteId].invisible = TRUE;
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 31);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
InitSpriteAffineAnim(&gSprites[spriteId]);
StartSpriteAffineAnim(&gSprites[spriteId], 1);
gSprites[spriteId].invisible = TRUE;
@@ -1198,8 +1199,6 @@ static u8 GetEventObjectIdByLocalId(u8 localId)
return EVENT_OBJECTS_COUNT;
}
-// This function has the same nonmatching quirk as in Ruby/Sapphire.
-#ifdef NONMATCHING
static u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *template, u8 mapNum, u8 mapGroup)
{
struct EventObject *eventObject;
@@ -1207,11 +1206,8 @@ static u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *template,
s16 x;
s16 y;
- // mapNum and mapGroup are in the wrong registers (r7/r6 instead of r6/r7)
if (GetAvailableEventObjectId(template->localId, mapNum, mapGroup, &eventObjectId))
- {
return EVENT_OBJECTS_COUNT;
- }
eventObject = &gEventObjects[eventObjectId];
ClearEventObject(eventObject);
x = template->x + 7;
@@ -1222,6 +1218,7 @@ static u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *template,
eventObject->movementType = template->movementType;
eventObject->localId = template->localId;
eventObject->mapNum = mapNum;
+ eventObject++; eventObject--;
eventObject->mapGroup = mapGroup;
eventObject->initialCoords.x = x;
eventObject->initialCoords.y = y;
@@ -1231,7 +1228,6 @@ static u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *template,
eventObject->previousCoords.y = y;
eventObject->currentElevation = template->elevation;
eventObject->previousElevation = template->elevation;
- // For some reason, 0x0F is placed in r9, to be used later
eventObject->range.as_nybbles.x = template->movementRangeX;
eventObject->range.as_nybbles.y = template->movementRangeY;
eventObject->trainerType = template->trainerType;
@@ -1239,177 +1235,22 @@ static u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *template,
eventObject->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType];
SetEventObjectDirection(eventObject, eventObject->previousMovementDirection);
SetEventObjectDynamicGraphicsId(eventObject);
-
+#ifndef NONMATCHING
+ asm("":::"r5", "r6");
+#endif
if (gRangedMovementTypes[eventObject->movementType])
{
- if ((eventObject->range.as_nybbles.x) == 0)
+ if (eventObject->range.as_nybbles.x == 0)
{
- // r9 is invoked here
eventObject->range.as_nybbles.x++;
}
- if ((eventObject->range.as_nybbles.y) == 0)
+ if (eventObject->range.as_nybbles.y == 0)
{
eventObject->range.as_nybbles.y++;
}
}
return eventObjectId;
}
-#else
-static NAKED u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *template, u8 mapId, u8 mapGroupId)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r9\n"
- "\tmov r6, r8\n"
- "\tpush {r6,r7}\n"
- "\tsub sp, 0x4\n"
- "\tadds r5, r0, 0\n"
- "\tlsls r1, 24\n"
- "\tlsrs r6, r1, 24\n"
- "\tlsls r2, 24\n"
- "\tlsrs r7, r2, 24\n"
- "\tldrb r0, [r5]\n"
- "\tadds r1, r6, 0\n"
- "\tadds r2, r7, 0\n"
- "\tmov r3, sp\n"
- "\tbl GetAvailableEventObjectId\n"
- "\tlsls r0, 24\n"
- "\tcmp r0, 0\n"
- "\tbeq _0808D66E\n"
- "\tmovs r0, 0x10\n"
- "\tb _0808D762\n"
- "_0808D66E:\n"
- "\tmov r0, sp\n"
- "\tldrb r1, [r0]\n"
- "\tlsls r0, r1, 3\n"
- "\tadds r0, r1\n"
- "\tlsls r0, 2\n"
- "\tldr r1, =gEventObjects\n"
- "\tadds r4, r0, r1\n"
- "\tadds r0, r4, 0\n"
- "\tbl ClearEventObject\n"
- "\tldrh r3, [r5, 0x4]\n"
- "\tadds r3, 0x7\n"
- "\tlsls r3, 16\n"
- "\tlsrs r3, 16\n"
- "\tldrh r2, [r5, 0x6]\n"
- "\tadds r2, 0x7\n"
- "\tlsls r2, 16\n"
- "\tlsrs r2, 16\n"
- "\tldrb r0, [r4]\n"
- "\tmovs r1, 0x1\n"
- "\torrs r0, r1\n"
- "\tmovs r1, 0x4\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4]\n"
- "\tldrb r0, [r5, 0x1]\n"
- "\tstrb r0, [r4, 0x5]\n"
- "\tldrb r0, [r5, 0x9]\n"
- "\tstrb r0, [r4, 0x6]\n"
- "\tldrb r0, [r5]\n"
- "\tstrb r0, [r4, 0x8]\n"
- "\tstrb r6, [r4, 0x9]\n"
- "\tstrb r7, [r4, 0xA]\n"
- "\tstrh r3, [r4, 0xC]\n"
- "\tstrh r2, [r4, 0xE]\n"
- "\tstrh r3, [r4, 0x10]\n"
- "\tstrh r2, [r4, 0x12]\n"
- "\tstrh r3, [r4, 0x14]\n"
- "\tstrh r2, [r4, 0x16]\n"
- "\tldrb r0, [r5, 0x8]\n"
- "\tmovs r7, 0xF\n"
- "\tadds r1, r7, 0\n"
- "\tands r1, r0\n"
- "\tldrb r2, [r4, 0xB]\n"
- "\tmovs r0, 0x10\n"
- "\tnegs r0, r0\n"
- "\tmov r8, r0\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4, 0xB]\n"
- "\tldrb r1, [r5, 0x8]\n"
- "\tlsls r1, 4\n"
- "\tands r0, r7\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4, 0xB]\n"
- "\tldrb r1, [r5, 0xA]\n"
- "\tlsls r1, 28\n"
- "\tmovs r0, 0xF\n"
- "\tmov r9, r0\n"
- "\tlsrs r1, 28\n"
- "\tldrb r2, [r4, 0x19]\n"
- "\tmov r0, r8\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4, 0x19]\n"
- "\tldrb r1, [r5, 0xA]\n"
- "\tlsrs r1, 4\n"
- "\tlsls r1, 4\n"
- "\tands r0, r7\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4, 0x19]\n"
- "\tldrh r0, [r5, 0xC]\n"
- "\tstrb r0, [r4, 0x7]\n"
- "\tldrh r0, [r5, 0xE]\n"
- "\tstrb r0, [r4, 0x1D]\n"
- "\tldr r1, =gInitialMovementTypeFacingDirections\n"
- "\tldrb r0, [r5, 0x9]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tadds r0, r4, 0\n"
- "\tadds r0, 0x20\n"
- "\tstrb r1, [r0]\n"
- "\tldrb r1, [r0]\n"
- "\tadds r0, r4, 0\n"
- "\tbl SetEventObjectDirection\n"
- "\tadds r0, r4, 0\n"
- "\tbl SetEventObjectDynamicGraphicsId\n"
- "\tldr r1, =gRangedMovementTypes\n"
- "\tldrb r0, [r4, 0x6]\n"
- "\tadds r0, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _0808D75E\n"
- "\tldrb r2, [r4, 0x19]\n"
- "\tadds r0, r7, 0\n"
- "\tands r0, r2\n"
- "\tcmp r0, 0\n"
- "\tbne _0808D746\n"
- "\tlsls r0, r2, 28\n"
- "\tlsrs r0, 28\n"
- "\tadds r0, 0x1\n"
- "\tmov r1, r9\n"
- "\tands r0, r1\n"
- "\tmov r1, r8\n"
- "\tands r1, r2\n"
- "\torrs r1, r0\n"
- "\tstrb r1, [r4, 0x19]\n"
- "_0808D746:\n"
- "\tldrb r2, [r4, 0x19]\n"
- "\tmovs r0, 0xF0\n"
- "\tands r0, r2\n"
- "\tcmp r0, 0\n"
- "\tbne _0808D75E\n"
- "\tlsrs r1, r2, 4\n"
- "\tadds r1, 0x1\n"
- "\tlsls r1, 4\n"
- "\tadds r0, r7, 0\n"
- "\tands r0, r2\n"
- "\torrs r0, r1\n"
- "\tstrb r0, [r4, 0x19]\n"
- "_0808D75E:\n"
- "\tmov r0, sp\n"
- "\tldrb r0, [r0]\n"
- "_0808D762:\n"
- "\tadd sp, 0x4\n"
- "\tpop {r3,r4}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1\n"
- ".pool");
-}
-#endif
u8 Unref_TryInitLocalEventObject(u8 localId)
{
@@ -1675,7 +1516,7 @@ u8 AddPseudoEventObject(u16 graphicsId, void (*callback)(struct Sprite *), s16 x
{
sprite = &gSprites[spriteId];
SetSubspriteTables(sprite, subspriteTables);
- sprite->subspriteMode = 2;
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
}
return spriteId;
}
@@ -1720,7 +1561,7 @@ u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
if (subspriteTables != NULL)
{
SetSubspriteTables(sprite, subspriteTables);
- sprite->subspriteMode = 2;
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
}
InitObjectPriorityByZCoord(sprite, z);
SetObjectSubpriorityByZCoord(z, sprite, 1);
@@ -2723,9 +2564,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 +2933,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 +3002,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 +3790,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 +3798,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 +3836,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;
@@ -4589,7 +4426,7 @@ void MovementType_Hidden(struct Sprite *sprite)
if (!sprite->data[7])
{
gEventObjects[sprite->data[0]].fixedPriority = TRUE;
- sprite->subspriteMode = 2;
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
sprite->oam.priority = 3;
sprite->data[7]++;
}
@@ -4868,22 +4705,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)
@@ -6819,7 +6654,7 @@ bool8 MovementAction_InitAffineAnim_Step0(struct EventObject *eventObject, struc
sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
InitSpriteAffineAnim(sprite);
sprite->affineAnimPaused = TRUE;
- sprite->subspriteMode = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
return TRUE;
}
@@ -6831,15 +6666,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;
}
@@ -8849,12 +8684,12 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
{
sprite->subspriteTables = NULL;
sprite->subspriteTableNum = 0;
- sprite->subspriteMode = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
}
else
{
SetSubspriteTables(sprite, graphicsInfo->subspriteTables);
- sprite->subspriteMode = 2;
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
}
StartSpriteAnim(sprite, 0);
}
diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c
index 816929f8b..849c676b3 100644
--- a/src/evolution_graphics.c
+++ b/src/evolution_graphics.c
@@ -50,10 +50,10 @@ static const struct SpritePalette sEvoSparkleSpritePals[] =
static const struct OamData sOamData_EvoSparkle =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -141,7 +141,7 @@ static void CreatePreEvoSparkleSet1(u8 arg0)
gSprites[spriteID].data[5] = 48;
gSprites[spriteID].data[6] = arg0;
gSprites[spriteID].data[7] = 0;
- gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteID].oam.matrixNum = 31;
gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet1;
}
@@ -169,7 +169,7 @@ static void CreatePreEvoSparkleSet2(u8 arg0)
gSprites[spriteID].data[5] = 8;
gSprites[spriteID].data[6] = arg0;
gSprites[spriteID].data[7] = 0;
- gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteID].oam.matrixNum = 25;
gSprites[spriteID].subpriority = 1;
gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet2;
@@ -198,7 +198,7 @@ static void CreatePostEvoSparkleSet1(u8 arg0, u8 arg1)
gSprites[spriteID].data[5] = 120;
gSprites[spriteID].data[6] = arg0;
gSprites[spriteID].data[7] = 0;
- gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteID].oam.matrixNum = 31;
gSprites[spriteID].subpriority = 1;
gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet1;
@@ -243,7 +243,7 @@ static void CreatePostEvoSparkleSet2(u8 arg0)
gSprites[spriteID].data[3] = 3 - (Random() % 7);
gSprites[spriteID].data[5] = 48 + (Random() & 0x3F);
gSprites[spriteID].data[7] = 0;
- gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteID].oam.matrixNum = 31;
gSprites[spriteID].subpriority = 20;
gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet2;
@@ -497,13 +497,13 @@ u8 sub_817C3A0(u8 preEvoSpriteID, u8 postEvoSpriteID)
SetOamMatrix(31, toDiv / gTasks[taskID].data[4], 0, 0, toDiv / gTasks[taskID].data[4]);
gSprites[preEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB;
- gSprites[preEvoSpriteID].oam.affineMode = 1;
+ gSprites[preEvoSpriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[preEvoSpriteID].oam.matrixNum = 30;
gSprites[preEvoSpriteID].invisible = FALSE;
CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteID].oam.paletteNum * 16)], 16);
gSprites[postEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB;
- gSprites[postEvoSpriteID].oam.affineMode = 1;
+ gSprites[postEvoSpriteID].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[postEvoSpriteID].oam.matrixNum = 31;
gSprites[postEvoSpriteID].invisible = FALSE;
CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteID].oam.paletteNum * 16)], 16);
@@ -587,11 +587,11 @@ static void sub_817C560(u8 taskID)
static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskID)
{
- gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0;
+ gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0;
gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = TRUE;
- gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0;
+ gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0;
gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = FALSE;
@@ -600,11 +600,11 @@ static void PreEvoInvisible_PostEvoVisible_KillTask(u8 taskID)
static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID)
{
- gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0;
+ gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0;
gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = FALSE;
- gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0;
+ gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = ST_OAM_AFFINE_OFF;
gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0;
gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = TRUE;
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index 96ca2ed1c..019d48416 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"
@@ -235,7 +235,7 @@ void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo,
gBattleTerrain = BATTLE_TERRAIN_PLAIN;
- sub_80356D0();
+ InitBattleBgsVideo();
LoadBattleTextboxAndBackground();
ResetSpriteData();
ScanlineEffect_Stop();
@@ -341,7 +341,7 @@ static void CB2_EvolutionSceneLoadGraphics(void)
gBattleTerrain = BATTLE_TERRAIN_PLAIN;
- sub_80356D0();
+ InitBattleBgsVideo();
LoadBattleTextboxAndBackground();
ResetSpriteData();
FreeAllSpritePalettes();
@@ -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..4af42ca2f 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -30,9 +30,11 @@
#include "wild_encounter.h"
#include "constants/bg_event_constants.h"
#include "constants/event_objects.h"
+#include "constants/field_poison.h"
#include "constants/map_types.h"
#include "constants/maps.h"
#include "constants/songs.h"
+#include "constants/trainer_hill.h"
static EWRAM_DATA u8 sWildEncounterImmunitySteps = 0;
static EWRAM_DATA u16 sPreviousPlayerMetatileBehavior = 0;
@@ -223,10 +225,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 +357,7 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position
{
gSpecialVar_0x8004 = bgEvent->bgUnion.secretBaseId;
if (TrySetCurSecretBase())
- return EventScript_2759F1;
+ return SecretBase_EventScript_CheckEntrance;
}
return NULL;
}
@@ -373,14 +375,14 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me
return EventScript_PC;
if (MetatileBehavior_IsClosedSootopolisDoor(metatileBehavior) == TRUE)
return EventScript_ClosedSootopolisDoor;
- if (MetatileBehavior_IsUnknownClosedDoor(metatileBehavior) == TRUE)
- return SkyPillar_Outside_EventScript_2393F9;
+ if (MetatileBehavior_IsSkyPillarClosedDoor(metatileBehavior) == TRUE)
+ return SkyPillar_Outside_EventScript_ClosedDoor;
if (MetatileBehavior_IsCableBoxResults1(metatileBehavior) == TRUE)
return EventScript_CableBoxResults;
if (MetatileBehavior_IsPokeblockFeeder(metatileBehavior) == TRUE)
return EventScript_PokeBlockFeeder;
if (MetatileBehavior_IsTrickHousePuzzleDoor(metatileBehavior) == TRUE)
- return Route110_TrickHouseEntrance_EventScript_26A22A;
+ return Route110_TrickHousePuzzle_EventScript_Door;
if (MetatileBehavior_IsRegionMap(metatileBehavior) == TRUE)
return EventScript_RegionMap;
if (MetatileBehavior_IsRunningShoesManual(metatileBehavior) == TRUE)
@@ -412,32 +414,32 @@ 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();
+ CheckInteractedWithFriendsFurnitureBottom();
return NULL;
}
if (MetatileBehavior_HoldsLargeDecoration(metatileBehavior) == TRUE)
{
- SetSecretBaseSecretsTvFlags_LargeDecorationSpot();
+ CheckInteractedWithFriendsFurnitureMiddle();
return NULL;
}
if (MetatileBehavior_HoldsSmallDecoration(metatileBehavior) == TRUE)
{
- SetSecretBaseSecretsTvFlags_SmallDecorationSpot();
+ CheckInteractedWithFriendsFurnitureTop();
return NULL;
}
}
else if (MetatileBehavior_IsSecretBasePoster(metatileBehavior) == TRUE)
{
- SetSecretBaseSecretsTvFlags_Poster();
+ CheckInteractedWithFriendsPosterDecor();
return NULL;
}
@@ -515,7 +517,7 @@ static bool8 TryStartMiscWalkingScripts(u16 metatileBehavior)
}
else if (MetatileBehavior_IsBattlePyramidWarp(metatileBehavior))
{
- ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252BE8);
+ ScriptContext1_SetupScript(BattlePyramid_WarpToNextFloor);
return TRUE;
}
else if (MetatileBehavior_IsSecretBaseGlitterMat(metatileBehavior) == TRUE)
@@ -547,7 +549,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
{
if (UpdatePoisonStepCounter() == TRUE)
{
- ScriptContext1_SetupScript(EventScript_Poison);
+ ScriptContext1_SetupScript(EventScript_FieldPoison);
return TRUE;
}
if (ShouldEggHatch())
@@ -556,39 +558,39 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
ScriptContext1_SetupScript(EventScript_EggHatch);
return TRUE;
}
- if (UnusualWeatherHasExpired() == TRUE)
+ if (AbnormalWeatherHasExpired() == TRUE)
{
- ScriptContext1_SetupScript(UnusualWeather_EventScript_EndEventAndCleanup_1);
+ ScriptContext1_SetupScript(AbnormalWeather_EventScript_EndEventAndCleanup_1);
return TRUE;
}
if (ShouldDoBrailleRegicePuzzle() == TRUE)
{
- ScriptContext1_SetupScript(IslandCave_EventScript_238EAF);
+ ScriptContext1_SetupScript(IslandCave_EventScript_OpenRegiEntrance);
return TRUE;
}
if (ShouldDoWallyCall() == TRUE)
{
- ScriptContext1_SetupScript(MauvilleCity_EventScript_1DF7BA);
+ ScriptContext1_SetupScript(MauvilleCity_EventScript_RegisterWallyCall);
return TRUE;
}
- if (ShouldDoWinonaCall() == TRUE)
+ if (ShouldDoScottFortreeCall() == TRUE)
{
- ScriptContext1_SetupScript(Route119_EventScript_1F49EC);
+ ScriptContext1_SetupScript(Route119_EventScript_ScottWonAtFortreeGymCall);
return TRUE;
}
- if (ShouldDoScottCall() == TRUE)
+ if (ShouldDoScottBattleFrontierCall() == TRUE)
{
- ScriptContext1_SetupScript(LittlerootTown_ProfessorBirchsLab_EventScript_1FA4D6);
+ ScriptContext1_SetupScript(LittlerootTown_ProfessorBirchsLab_EventScript_ScottAboardSSTidalCall);
return TRUE;
}
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;
}
}
@@ -597,7 +599,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
return TRUE;
if (CountSSTidalStep(1) == TRUE)
{
- ScriptContext1_SetupScript(SSTidalCorridor_EventScript_23C050);
+ ScriptContext1_SetupScript(SSTidalCorridor_EventScript_ReachedStepCount);
return TRUE;
}
if (TryStartMatchCall())
@@ -646,11 +648,11 @@ static bool8 UpdatePoisonStepCounter(void)
{
switch (DoPoisonFieldEffect())
{
- case 0:
+ case FLDPSN_NONE:
return FALSE;
- case 1:
+ case FLDPSN_PSN:
return FALSE;
- case 2:
+ case FLDPSN_FNT:
return TRUE;
}
}
@@ -708,22 +710,22 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB
SetupWarp(&gMapHeader, warpEventId, position);
if (MetatileBehavior_IsEscalator(metatileBehavior) == TRUE)
{
- sub_80AF80C(metatileBehavior);
+ DoEscalatorWarp(metatileBehavior);
return TRUE;
}
if (MetatileBehavior_IsLavaridgeB1FWarp(metatileBehavior) == TRUE)
{
- sub_80AF828();
+ DoLavaridgeGymB1FWarp();
return TRUE;
}
if (MetatileBehavior_IsLavaridge1FWarp(metatileBehavior) == TRUE)
{
- sub_80AF838();
+ DoLavaridgeGym1FWarp();
return TRUE;
}
if (MetatileBehavior_IsAquaHideoutWarp(metatileBehavior) == TRUE)
{
- sub_80AF848();
+ DoTeleportWarp();
return TRUE;
}
if (MetatileBehavior_IsWarpOrBridge(metatileBehavior) == TRUE)
@@ -733,12 +735,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();
@@ -792,20 +794,16 @@ static void SetupWarp(struct MapHeader *unused, s8 warpEventId, struct MapPositi
if (trainerHillMapId)
{
- if (trainerHillMapId == sub_81D6490())
+ if (trainerHillMapId == GetNumFloorsInTrainerHillChallenge())
{
if (warpEventId == 0)
- {
warpEvent = &gMapHeader.events->warps[0];
- }
else
- {
- warpEvent = sub_81D6120();
- }
+ warpEvent = SetWarpDestinationTrainerHill4F();
}
- else if (trainerHillMapId == 5)
+ else if (trainerHillMapId == TRAINER_HILL_ROOF)
{
- warpEvent = sub_81D6134(warpEventId);
+ warpEvent = SetWarpDestinationTrainerHillFinalFloor(warpEventId);
}
else
{
diff --git a/src/field_door.c b/src/field_door.c
index c197aca14..8fb5cb948 100644
--- a/src/field_door.c
+++ b/src/field_door.c
@@ -9,7 +9,7 @@
#include "constants/maps.h"
#include "constants/songs.h"
-bool8 sub_808A964(void);
+static bool8 ShouldUseMultiCorridorDoor(void);
const u8 DoorAnimTiles_04[][0x100] =
{
@@ -698,14 +698,14 @@ static void DrawDoor(const struct DoorGraphics *gfx, const struct DoorAnimFrame
if (frame->offset == 0xFFFF)
{
DrawClosedDoorTiles(gfx, x, y);
- if (sub_808A964())
+ if (ShouldUseMultiCorridorDoor())
DrawClosedDoorTiles(gfx, gSpecialVar_0x8004 + 7, gSpecialVar_0x8005 + 7);
}
else
{
CopyDoorTilesToVram(gfx, frame);
DrawCurrentDoorAnimFrame(gfx, x, y, gfx->palette);
- if (sub_808A964())
+ if (ShouldUseMultiCorridorDoor())
DrawCurrentDoorAnimFrame(gfx, gSpecialVar_0x8004 + 7, gSpecialVar_0x8005 + 7, gfx->palette);
}
}
@@ -885,11 +885,13 @@ u32 GetDoorSoundEffect(u32 x, u32 y)
return SE_DOOR;
}
-bool8 sub_808A964(void)
+// Opens the Battle Tower multi partner's door in sync with the player's door
+static bool8 ShouldUseMultiCorridorDoor(void)
{
- if (FlagGet(FLAG_SPECIAL_FLAG_0x4002))
+ if (FlagGet(FLAG_ENABLE_MULTI_CORRIDOR_DOOR))
{
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR2) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR2))
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR))
{
return TRUE;
}
diff --git a/src/field_effect.c b/src/field_effect.c
index 7569bdc75..6bbd1df3c 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -28,6 +28,7 @@
#include "util.h"
#include "constants/field_effects.h"
#include "constants/event_object_movement_constants.h"
+#include "constants/metatile_behaviors.h"
#include "constants/rgb.h"
#include "constants/songs.h"
@@ -63,27 +64,27 @@ 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);
-static void sub_80B6B94(u8);
-static bool8 sub_80B6BCC(struct Task *);
-static bool8 sub_80B6C74(struct Task *);
-static bool8 sub_80B6C90(struct Task *);
-static bool8 sub_80B6D04(struct Task *);
-static bool8 sub_80B6DBC(struct Task *);
-static bool8 sub_80B6DD8(struct Task *);
-static bool8 sub_80B6E18(struct Task *);
-
-static void sub_80B6E88(u8);
-static bool8 sub_80B6EC0(struct Task *);
-static bool8 sub_80B6EE0(struct Task *);
-static bool8 sub_80B6F50(struct Task *);
-static bool8 sub_80B6F74(struct Task *);
-static bool8 sub_80B6F84(struct Task *);
-static bool8 sub_80B6FA8(struct Task *);
+static void Task_FallWarpFieldEffect(u8);
+static bool8 FallWarpEffect_1(struct Task *);
+static bool8 FallWarpEffect_2(struct Task *);
+static bool8 FallWarpEffect_3(struct Task *);
+static bool8 FallWarpEffect_4(struct Task *);
+static bool8 FallWarpEffect_5(struct Task *);
+static bool8 FallWarpEffect_6(struct Task *);
+static bool8 FallWarpEffect_7(struct Task *);
+
+static void Task_EscalatorWarpFieldEffect(u8);
+static bool8 EscalatorWarpEffect_1(struct Task *);
+static bool8 EscalatorWarpEffect_2(struct Task *);
+static bool8 EscalatorWarpEffect_3(struct Task *);
+static bool8 EscalatorWarpEffect_4(struct Task *);
+static bool8 EscalatorWarpEffect_5(struct Task *);
+static bool8 EscalatorWarpEffect_6(struct Task *);
static void sub_80B6FB8(struct Task *);
static void sub_80B7004(struct Task *);
@@ -112,29 +113,27 @@ static bool8 dive_1_lock(struct Task *);
static bool8 dive_2_unknown(struct Task *);
static bool8 dive_3_unknown(struct Task *);
-static void sub_80B75F0(u8);
-static bool8 sub_80B764C(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B7684(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B76B8(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B7704(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B77F8(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B7814(struct Task *, struct EventObject *, struct Sprite *);
-
-static void mapldr_080851BC(void);
-static void sub_80B7890(u8);
-
-static bool8 sub_80B78EC(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B791C(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B7968(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B79BC(struct Task *, struct EventObject *, struct Sprite *);
-
-static void sub_80B7A8C(u8);
-
-static bool8 sub_80B7AE8(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B7B18(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B7B94(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B7BCC(struct Task *, struct EventObject *, struct Sprite *);
-static bool8 sub_80B7BF4(struct Task *, struct EventObject *, struct Sprite *);
+static void Task_LavaridgeGymB1FWarp(u8);
+static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpEffect_6(struct Task *, struct EventObject *, struct Sprite *);
+
+static void FieldCB_LavaridgeGymB1FWarpExit(void);
+static void Task_LavaridgeGymB1FWarpExit(u8);
+static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *, struct EventObject *, struct Sprite *);
+
+static void Task_LavaridgeGym1FWarp(u8);
+static bool8 LavaridgeGym1FWarpEffect_1(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGym1FWarpEffect_2(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGym1FWarpEffect_3(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGym1FWarpEffect_4(struct Task *, struct EventObject *, struct Sprite *);
+static bool8 LavaridgeGym1FWarpEffect_5(struct Task *, struct EventObject *, struct Sprite *);
static void DoEscapeRopeFieldEffect(u8);
static void EscapeRopeFieldEffect_Step0(struct Task *);
@@ -406,20 +405,76 @@ const struct SpriteFrameImage gSpriteImageTable_855C294[] =
const struct Subsprite gSubspriteTable_855C29C[] =
{
- {.x = -12, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 0},
- {.x = 4, .y = -8, .priority = 2, .tileOffset = 2, .shape = 0, .size = 0},
- {.x = -12, .y = 0, .priority = 2, .tileOffset = 3, .shape = 1, .size = 0},
- {.x = 4, .y = 0, .priority = 2, .tileOffset = 5, .shape = 0, .size = 0}
+ {
+ .x = -12,
+ .y = -8,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4,
+ .y = -8,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12,
+ .y = 0,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 3,
+ .priority = 2
+ },
+ {
+ .x = 4,
+ .y = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 5,
+ .priority = 2
+ }
};
const struct SubspriteTable gUnknown_0855C2AC = subsprite_table(gSubspriteTable_855C29C);
const struct Subsprite gSubspriteTable_855C2B4[] =
{
- {.x = -32, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 1},
- {.x = 0, .y = -8, .priority = 2, .tileOffset = 4, .shape = 1, .size = 1},
- {.x = -32, .y = 0, .priority = 2, .tileOffset = 8, .shape = 1, .size = 1},
- {.x = 0, .y = 0, .priority = 2, .tileOffset = 12, .shape = 1, .size = 1}
+ {
+ .x = -32,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 0,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+ {
+ .x = 0,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 12,
+ .priority = 2
+ }
};
const struct SubspriteTable gUnknown_0855C2C4 = subsprite_table(gSubspriteTable_855C2B4);
@@ -540,25 +595,25 @@ const u8 gUnknown_0855C3BC[] = {16, 12, 8, 0};
const u8 gUnknown_0855C3C0[] = {16, 12, 8, 0};
const u8 gUnknown_0855C3C4[] = { 0, 0, 0, 0};
-bool8 (*const gUnknown_0855C3C8[])(struct Task *) =
+bool8 (*const sFallWarpFieldEffectFuncs[])(struct Task *) =
{
- sub_80B6BCC,
- sub_80B6C74,
- sub_80B6C90,
- sub_80B6D04,
- sub_80B6DBC,
- sub_80B6DD8,
- sub_80B6E18,
+ FallWarpEffect_1,
+ FallWarpEffect_2,
+ FallWarpEffect_3,
+ FallWarpEffect_4,
+ FallWarpEffect_5,
+ FallWarpEffect_6,
+ FallWarpEffect_7,
};
-bool8 (*const gUnknown_0855C3E4[])(struct Task *) =
+bool8 (*const sEscalatorWarpFieldEffectFuncs[])(struct Task *) =
{
- sub_80B6EC0,
- sub_80B6EE0,
- sub_80B6F50,
- sub_80B6F74,
- sub_80B6F84,
- sub_80B6FA8,
+ EscalatorWarpEffect_1,
+ EscalatorWarpEffect_2,
+ EscalatorWarpEffect_3,
+ EscalatorWarpEffect_4,
+ EscalatorWarpEffect_5,
+ EscalatorWarpEffect_6,
};
bool8 (*const gUnknown_0855C3FC[])(struct Task *) =
@@ -588,31 +643,31 @@ bool8 (*const gUnknown_0855C42C[])(struct Task *) =
dive_3_unknown,
};
-bool8 (*const gUnknown_0855C438[])(struct Task *, struct EventObject *, struct Sprite *) =
+bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task *, struct EventObject *, struct Sprite *) =
{
- sub_80B764C,
- sub_80B7684,
- sub_80B76B8,
- sub_80B7704,
- sub_80B77F8,
- sub_80B7814,
+ LavaridgeGymB1FWarpEffect_1,
+ LavaridgeGymB1FWarpEffect_2,
+ LavaridgeGymB1FWarpEffect_3,
+ LavaridgeGymB1FWarpEffect_4,
+ LavaridgeGymB1FWarpEffect_5,
+ LavaridgeGymB1FWarpEffect_6,
};
-bool8 (*const gUnknown_0855C450[])(struct Task *, struct EventObject *, struct Sprite *) =
+bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task *, struct EventObject *, struct Sprite *) =
{
- sub_80B78EC,
- sub_80B791C,
- sub_80B7968,
- sub_80B79BC,
+ LavaridgeGymB1FWarpExitEffect_1,
+ LavaridgeGymB1FWarpExitEffect_2,
+ LavaridgeGymB1FWarpExitEffect_3,
+ LavaridgeGymB1FWarpExitEffect_4,
};
-bool8 (*const gUnknown_0855C460[])(struct Task *, struct EventObject *, struct Sprite *) =
+bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *, struct EventObject *, struct Sprite *) =
{
- sub_80B7AE8,
- sub_80B7B18,
- sub_80B7B94,
- sub_80B7BCC,
- sub_80B7BF4,
+ LavaridgeGym1FWarpEffect_1,
+ LavaridgeGym1FWarpEffect_2,
+ LavaridgeGym1FWarpEffect_3,
+ LavaridgeGym1FWarpEffect_4,
+ LavaridgeGym1FWarpEffect_5,
};
void (*const gEscapeRopeFieldEffectFuncs[])(struct Task *) =
@@ -870,7 +925,7 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio
void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId)
{
ResetPreservedPalettesInWeather();
- if (sprite->oam.affineMode != 0)
+ if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF)
{
FreeOamMatrix(sprite->oam.matrixNum);
}
@@ -1364,15 +1419,15 @@ 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();
+ FadeInFromBlack();
CreateTask(task00_8084310, 0);
ScriptContext2_Enable();
FreezeEventObjects();
@@ -1410,7 +1465,7 @@ static void task00_8084310(u8 taskId)
static void mapldr_08084390(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_black();
+ FadeInFromBlack();
CreateTask(c3_080843F8, 0);
gEventObjects[gPlayerAvatar.eventObjectId].invisible = TRUE;
if (gPlayerAvatar.flags & 0x08)
@@ -1443,24 +1498,24 @@ static void c3_080843F8(u8 taskId)
}
}
-void sub_80B6B68(void)
+void FieldCB_FallWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
ScriptContext2_Enable();
FreezeEventObjects();
- CreateTask(sub_80B6B94, 0);
+ CreateTask(Task_FallWarpFieldEffect, 0);
gFieldCallback = NULL;
}
-static void sub_80B6B94(u8 taskId)
+static void Task_FallWarpFieldEffect(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
- while (gUnknown_0855C3C8[task->data[0]](task)); // return code signifies whether to continue blocking here
+ while (sFallWarpFieldEffectFuncs[task->data[0]](task)); // return code signifies whether to continue blocking here
}
-static bool8 sub_80B6BCC(struct Task *task) // gUnknown_0855C3C8[0]
+static bool8 FallWarpEffect_1(struct Task *task)
{
struct EventObject *playerObject;
struct Sprite *playerSprite;
@@ -1473,12 +1528,12 @@ static bool8 sub_80B6BCC(struct Task *task) // gUnknown_0855C3C8[0]
task->data[4] = playerSprite->subspriteMode;
playerObject->fixedPriority = 1;
playerSprite->oam.priority = 1;
- playerSprite->subspriteMode = 2;
+ playerSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
task->data[0]++;
return TRUE;
}
-static bool8 sub_80B6C74(struct Task *task) // gUnknown_0855C3C8[1]
+static bool8 FallWarpEffect_2(struct Task *task)
{
if (IsWeatherNotFadingIn())
{
@@ -1487,7 +1542,7 @@ static bool8 sub_80B6C74(struct Task *task) // gUnknown_0855C3C8[1]
return FALSE;
}
-static bool8 sub_80B6C90(struct Task *task) // gUnknown_0855C3C8[2]
+static bool8 FallWarpEffect_3(struct Task *task)
{
struct Sprite *sprite;
s16 centerToCornerVecY;
@@ -1502,7 +1557,7 @@ static bool8 sub_80B6C90(struct Task *task) // gUnknown_0855C3C8[2]
return FALSE;
}
-static bool8 sub_80B6D04(struct Task *task)
+static bool8 FallWarpEffect_4(struct Task *task)
{
struct EventObject *eventObject;
struct Sprite *sprite;
@@ -1536,7 +1591,7 @@ static bool8 sub_80B6D04(struct Task *task)
return FALSE;
}
-static bool8 sub_80B6DBC(struct Task *task)
+static bool8 FallWarpEffect_5(struct Task *task)
{
task->data[0]++;
task->data[1] = 4;
@@ -1545,7 +1600,7 @@ static bool8 sub_80B6DBC(struct Task *task)
return TRUE;
}
-static bool8 sub_80B6DD8(struct Task *task)
+static bool8 FallWarpEffect_6(struct Task *task)
{
SetCameraPanning(0, task->data[1]);
task->data[1] = -task->data[1];
@@ -1561,36 +1616,36 @@ static bool8 sub_80B6DD8(struct Task *task)
return FALSE;
}
-static bool8 sub_80B6E18(struct Task *task)
+static bool8 FallWarpEffect_7(struct Task *task)
{
gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
CameraObjectReset1();
UnfreezeEventObjects();
InstallCameraPanAheadCallback();
- DestroyTask(FindTaskIdByFunc(sub_80B6B94));
+ DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect));
return FALSE;
}
-void sub_80B6E4C(u8 a0, u8 priority)
+void StartEscalatorWarp(u8 metatileBehavior, u8 priority)
{
u8 taskId;
- taskId = CreateTask(sub_80B6E88, priority);
+ taskId = CreateTask(Task_EscalatorWarpFieldEffect, priority);
gTasks[taskId].data[1] = 0;
- if (a0 == 0x6a)
+ if (metatileBehavior == MB_UP_ESCALATOR)
{
gTasks[taskId].data[1] = 1;
}
}
-static void sub_80B6E88(u8 taskId)
+static void Task_EscalatorWarpFieldEffect(u8 taskId)
{
struct Task *task;
task = &gTasks[taskId];
- while (gUnknown_0855C3E4[task->data[0]](task));
+ while (sEscalatorWarpFieldEffectFuncs[task->data[0]](task));
}
-static bool8 sub_80B6EC0(struct Task *task)
+static bool8 EscalatorWarpEffect_1(struct Task *task)
{
FreezeEventObjects();
CameraObjectReset2();
@@ -1599,7 +1654,7 @@ static bool8 sub_80B6EC0(struct Task *task)
return FALSE;
}
-static bool8 sub_80B6EE0(struct Task *task)
+static bool8 EscalatorWarpEffect_2(struct Task *task)
{
struct EventObject *eventObject;
eventObject = &gEventObjects[gPlayerAvatar.eventObjectId];
@@ -1618,7 +1673,7 @@ static bool8 sub_80B6EE0(struct Task *task)
return FALSE;
}
-static bool8 sub_80B6F50(struct Task *task)
+static bool8 EscalatorWarpEffect_3(struct Task *task)
{
sub_80B6FB8(task);
if (task->data[2] > 3)
@@ -1629,14 +1684,14 @@ static bool8 sub_80B6F50(struct Task *task)
return FALSE;
}
-static bool8 sub_80B6F74(struct Task *task)
+static bool8 EscalatorWarpEffect_4(struct Task *task)
{
sub_80B6FB8(task);
sub_80B7060();
return FALSE;
}
-static bool8 sub_80B6F84(struct Task *task)
+static bool8 EscalatorWarpEffect_5(struct Task *task)
{
sub_80B7004(task);
if (task->data[2] > 3)
@@ -1647,7 +1702,7 @@ static bool8 sub_80B6F84(struct Task *task)
return FALSE;
}
-static bool8 sub_80B6FA8(struct Task *task)
+static bool8 EscalatorWarpEffect_6(struct Task *task)
{
sub_80B7004(task);
sub_80B7060();
@@ -1683,7 +1738,7 @@ static void sub_80B7004(struct Task *task)
static void sub_80B7050(void)
{
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
}
static void sub_80B7060(void)
@@ -1694,14 +1749,14 @@ static void sub_80B7060(void)
WarpIntoMap();
gFieldCallback = sub_80B70B4;
SetMainCallback2(CB2_LoadMap);
- DestroyTask(FindTaskIdByFunc(sub_80B6E88));
+ DestroyTask(FindTaskIdByFunc(Task_EscalatorWarpFieldEffect));
}
}
static void sub_80B70B4(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
ScriptContext2_Enable();
CreateTask(sub_80B70DC, 0);
gFieldCallback = NULL;
@@ -1938,17 +1993,17 @@ static bool8 dive_3_unknown(struct Task *task)
return FALSE;
}
-void sub_80B75D8(u8 priority)
+void StartLavaridgeGymB1FWarp(u8 priority)
{
- CreateTask(sub_80B75F0, priority);
+ CreateTask(Task_LavaridgeGymB1FWarp, priority);
}
-static void sub_80B75F0(u8 taskId)
+static void Task_LavaridgeGymB1FWarp(u8 taskId)
{
- while (gUnknown_0855C438[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId]));
+ while (sLavaridgeGymB1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId]));
}
-static bool8 sub_80B764C(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_1(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
FreezeEventObjects();
CameraObjectReset2();
@@ -1960,7 +2015,7 @@ static bool8 sub_80B764C(struct Task *task, struct EventObject *eventObject, str
return TRUE;
}
-static bool8 sub_80B7684(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_2(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
SetCameraPanning(0, task->data[1]);
task->data[1] = -task->data[1];
@@ -1973,7 +2028,7 @@ static bool8 sub_80B7684(struct Task *task, struct EventObject *eventObject, str
return FALSE;
}
-static bool8 sub_80B76B8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_3(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
sprite->pos2.y = 0;
task->data[3] = 1;
@@ -1987,7 +2042,7 @@ static bool8 sub_80B76B8(struct Task *task, struct EventObject *eventObject, str
return TRUE;
}
-static bool8 sub_80B7704(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_4(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
s16 centerToCornerVecY;
SetCameraPanning(0, task->data[1]);
@@ -2021,7 +2076,7 @@ static bool8 sub_80B7704(struct Task *task, struct EventObject *eventObject, str
task->data[5]++;
eventObject->fixedPriority = 1;
sprite->oam.priority = 1;
- sprite->subspriteMode = 2;
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
}
if (task->data[1] == 0 && task->data[4] != 0)
{
@@ -2030,41 +2085,41 @@ static bool8 sub_80B7704(struct Task *task, struct EventObject *eventObject, str
return FALSE;
}
-static bool8 sub_80B77F8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_5(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
task->data[0]++;
return FALSE;
}
-static bool8 sub_80B7814(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpEffect_6(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
if (!gPaletteFade.active && BGMusicStopped() == TRUE)
{
WarpIntoMap();
- gFieldCallback = mapldr_080851BC;
+ gFieldCallback = FieldCB_LavaridgeGymB1FWarpExit;
SetMainCallback2(CB2_LoadMap);
- DestroyTask(FindTaskIdByFunc(sub_80B75F0));
+ DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarp));
}
return FALSE;
}
-static void mapldr_080851BC(void)
+static void FieldCB_LavaridgeGymB1FWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
ScriptContext2_Enable();
gFieldCallback = NULL;
- CreateTask(sub_80B7890, 0);
+ CreateTask(Task_LavaridgeGymB1FWarpExit, 0);
}
-static void sub_80B7890(u8 taskId)
+static void Task_LavaridgeGymB1FWarpExit(u8 taskId)
{
- while (gUnknown_0855C450[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId]));
+ while (sLavaridgeGymB1FWarpExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId]));
}
-static bool8 sub_80B78EC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
CameraObjectReset2();
FreezeEventObjects();
@@ -2074,7 +2129,7 @@ static bool8 sub_80B78EC(struct Task *task, struct EventObject *eventObject, str
return FALSE;
}
-static bool8 sub_80B791C(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
if (IsWeatherNotFadingIn())
{
@@ -2088,7 +2143,7 @@ static bool8 sub_80B791C(struct Task *task, struct EventObject *eventObject, str
return FALSE;
}
-static bool8 sub_80B7968(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
sprite = &gSprites[task->data[1]];
if (sprite->animCmdIndex > 1)
@@ -2102,18 +2157,19 @@ static bool8 sub_80B7968(struct Task *task, struct EventObject *eventObject, str
return FALSE;
}
-static bool8 sub_80B79BC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
if (EventObjectClearHeldMovementIfFinished(eventObject))
{
gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable();
UnfreezeEventObjects();
- DestroyTask(FindTaskIdByFunc(sub_80B7890));
+ DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarpExit));
}
return FALSE;
}
+// For the ash puff effect when warping off the B1F ash tiles
u8 FldEff_LavaridgeGymWarp(void)
{
u8 spriteId;
@@ -2124,7 +2180,7 @@ u8 FldEff_LavaridgeGymWarp(void)
return spriteId;
}
-void sub_80B7A58(struct Sprite *sprite)
+void SpriteCB_LavaridgeGymWarp(struct Sprite *sprite)
{
if (sprite->animEnded)
{
@@ -2132,17 +2188,17 @@ void sub_80B7A58(struct Sprite *sprite)
}
}
-void sub_80B7A74(u8 priority)
+void StartLavaridgeGym1FWarp(u8 priority)
{
- CreateTask(sub_80B7A8C, priority);
+ CreateTask(Task_LavaridgeGym1FWarp, priority);
}
-static void sub_80B7A8C(u8 taskId)
+static void Task_LavaridgeGym1FWarp(u8 taskId)
{
- while(gUnknown_0855C460[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId]));
+ while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gEventObjects[gPlayerAvatar.eventObjectId], &gSprites[gPlayerAvatar.spriteId]));
}
-static bool8 sub_80B7AE8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
FreezeEventObjects();
CameraObjectReset2();
@@ -2152,7 +2208,7 @@ static bool8 sub_80B7AE8(struct Task *task, struct EventObject *eventObject, str
return FALSE;
}
-static bool8 sub_80B7B18(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
if (EventObjectClearHeldMovementIfFinished(eventObject))
{
@@ -2174,7 +2230,7 @@ static bool8 sub_80B7B18(struct Task *task, struct EventObject *eventObject, str
return FALSE;
}
-static bool8 sub_80B7B94(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
if (gSprites[task->data[1]].animCmdIndex == 2)
{
@@ -2184,25 +2240,25 @@ static bool8 sub_80B7B94(struct Task *task, struct EventObject *eventObject, str
return FALSE;
}
-static bool8 sub_80B7BCC(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
{
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
task->data[0]++;
}
return FALSE;
}
-static bool8 sub_80B7BF4(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
+static bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
if (!gPaletteFade.active && BGMusicStopped() == TRUE)
{
WarpIntoMap();
- gFieldCallback = sub_80B6B68;
+ gFieldCallback = FieldCB_FallWarpExit;
SetMainCallback2(CB2_LoadMap);
- DestroyTask(FindTaskIdByFunc(sub_80B7A8C));
+ DestroyTask(FindTaskIdByFunc(Task_LavaridgeGym1FWarp));
}
return FALSE;
}
@@ -2217,7 +2273,7 @@ u8 FldEff_PopOutOfAsh(void)
return spriteId;
}
-void sub_80B7CAC(struct Sprite *sprite)
+void SpriteCB_PopOutOfAsh(struct Sprite *sprite)
{
if (sprite->animEnded)
{
@@ -2251,7 +2307,7 @@ static void EscapeRopeFieldEffect_Step1(struct Task *task)
if (task->data[14] != 0 && (--task->data[14]) == 0)
{
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
}
eventObject = &gEventObjects[gPlayerAvatar.eventObjectId];
if (!EventObjectIsMovementOverridden(eventObject) || EventObjectClearHeldMovementIfFinished(eventObject))
@@ -2284,7 +2340,7 @@ void (*const gUnknown_0855C484[])(struct Task *) = {
static void mapldr_080859D4(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
ScriptContext2_Enable();
FreezeEventObjects();
gFieldCallback = NULL;
@@ -2396,15 +2452,15 @@ static void TeleportFieldEffectTask3(struct Task *task)
{
task->data[3] <<= 1;
}
- if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != 0))
+ if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != SUBSPRITES_OFF))
{
- sprite->subspriteMode = 2;
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
}
if (task->data[4] >= 0xa8)
{
task->data[0]++;
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
}
}
@@ -2432,7 +2488,7 @@ static void TeleportFieldEffectTask4(struct Task *task)
static void mapldr_08085D88(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
ScriptContext2_Enable();
FreezeEventObjects();
gFieldCallback = NULL;
@@ -2487,9 +2543,9 @@ static void sub_80B830C(struct Task *task)
} else
{
sprite->oam.priority = 1;
- if (sprite->subspriteMode != 0)
+ if (sprite->subspriteMode != SUBSPRITES_OFF)
{
- sprite->subspriteMode = 2;
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
}
}
if (sprite->pos2.y >= -0x30 && task->data[1] > 1 && !(sprite->pos2.y & 1))
@@ -3212,7 +3268,7 @@ static void sub_80B9474(struct Task *task)
{
if (sub_80B9508(task->data[1]))
{
- WarpFadeScreen();
+ WarpFadeOutScreen();
task->data[0]++;
}
}
@@ -3284,7 +3340,7 @@ static void sub_80B957C(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
- sprite->oam.affineMode = 3;
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
sprite->affineAnims = gSpriteAffineAnimTable_0855C548;
InitSpriteAffineAnim(sprite);
StartSpriteAffineAnim(sprite, 0);
@@ -3304,9 +3360,9 @@ static void sub_80B957C(struct Sprite *sprite)
if (sprite->data[1] > 0x81)
{
sprite->data[7]++;
- sprite->oam.affineMode = 0;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
FreeOamMatrix(sprite->oam.matrixNum);
- CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0);
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
}
}
}
@@ -3337,7 +3393,7 @@ void sub_80B96B0(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
- sprite->oam.affineMode = 3;
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
sprite->affineAnims = gSpriteAffineAnimTable_0855C548;
InitSpriteAffineAnim(sprite);
StartSpriteAffineAnim(sprite, 1);
@@ -3368,7 +3424,7 @@ void sub_80B96B0(struct Sprite *sprite)
if (sprite->data[3] >= 60)
{
sprite->data[7]++;
- sprite->oam.affineMode = 0;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
FreeOamMatrix(sprite->oam.matrixNum);
sprite->invisible = TRUE;
}
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index fb883b105..547a2851b 100755
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -129,7 +129,7 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[mainSprite->oam.paletteNum];
reflectionSprite->oam.shape = mainSprite->oam.shape;
reflectionSprite->oam.size = mainSprite->oam.size;
- reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | 0x10;
+ reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | ST_OAM_VFLIP;
reflectionSprite->oam.tileNum = mainSprite->oam.tileNum;
reflectionSprite->subspriteTables = mainSprite->subspriteTables;
reflectionSprite->subspriteTableNum = mainSprite->subspriteTableNum;
@@ -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.
@@ -153,7 +153,7 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
// matrix based on whether or not the main sprite is horizontally flipped.
// If the sprite is facing to the east, then it is flipped, and its matrixNum is 8.
reflectionSprite->oam.matrixNum = 0;
- if (mainSprite->oam.matrixNum & 0x8)
+ if (mainSprite->oam.matrixNum & ST_OAM_HFLIP)
reflectionSprite->oam.matrixNum = 1;
}
}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 6d62cdc4a..3b89c185d 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
@@ -1397,11 +1396,11 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_5 | PLAYER_AVATAR_FLAG_ON_FOOT);
}
-void sub_808C0A8(u8 a)
+void SetPlayerInvisibility(bool8 invisible)
{
- gEventObjects[gPlayerAvatar.eventObjectId].invisible = a;
+ gEventObjects[gPlayerAvatar.eventObjectId].invisible = invisible;
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
- gSprites[gEventObjects[gPlayerAvatar.eventObjectId].fieldEffectSpriteId].invisible = a;
+ gSprites[gEventObjects[gPlayerAvatar.eventObjectId].fieldEffectSpriteId].invisible = invisible;
}
void sub_808C114(void)
@@ -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];
@@ -2095,7 +2092,7 @@ static void sub_808D094(u8 taskId)
object->fixedPriority = TRUE;
sprite->oam.priority = 0;
sprite->subpriority = 0;
- sprite->subspriteMode = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
data[0]++;
case 1:
sub_808D38C(object, &data[1]);
@@ -2159,7 +2156,7 @@ static void sub_808D1FC(u8 taskId)
object->fixedPriority = TRUE;
sprite->oam.priority = 1;
sprite->subpriority = 0;
- sprite->subspriteMode = 0;
+ sprite->subspriteMode = SUBSPRITES_OFF;
data[0]++;
case 1:
sub_808D38C(object, &data[1]);
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..292152b11 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -28,31 +28,32 @@
#include "task.h"
#include "text.h"
#include "constants/event_object_movement_constants.h"
+#include "constants/event_objects.h"
#include "constants/songs.h"
#include "constants/rgb.h"
#include "trainer_hill.h"
#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);
-static void task_map_chg_seq_0807E20C(u8);
-static void task_map_chg_seq_0807E2CC(u8);
+static void Task_ExitNonAnimDoor(u8);
+static void Task_ExitNonDoor(u8);
static void task0A_fade_n_map_maybe(u8);
static void sub_808115C(u8);
-static void palette_bg_faded_fill_white(void);
-static void sub_80AF438(u8);
+static void FillPalBufferWhite(void);
+static void Task_ExitDoor(u8);
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_WarpAndLoadMap(u8 taskId);
+static void Task_DoDoorWarp(u8 taskId);
+static void Task_EnableScriptAfterMusicFade(u8 taskId);
// const
-const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 };
-const s32 gMaxFlashLevel = 8;
+static const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 };
+const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelPixelRadii) - 1;
const struct ScanlineEffectParams sFlashEffectParams =
{
@@ -62,44 +63,44 @@ const struct ScanlineEffectParams sFlashEffectParams =
};
// code
-static void palette_bg_faded_fill_white(void)
+static void FillPalBufferWhite(void)
{
CpuFastFill16(RGB_WHITE, gPlttBufferFaded, PLTT_SIZE);
}
-static void palette_bg_faded_fill_black(void)
+static void FillPalBufferBlack(void)
{
CpuFastFill16(RGB_BLACK, gPlttBufferFaded, PLTT_SIZE);
}
-void pal_fill_for_maplights(void)
+void WarpFadeInScreen(void)
{
u8 previousMapType = GetLastUsedWarpMapType();
switch (GetMapPairFadeFromType(previousMapType, GetCurrentMapType()))
{
case 0:
- palette_bg_faded_fill_black();
+ FillPalBufferBlack();
FadeScreen(FADE_FROM_BLACK, 0);
break;
case 1:
- palette_bg_faded_fill_white();
+ FillPalBufferWhite();
FadeScreen(FADE_FROM_WHITE, 0);
}
}
-static void sub_80AF08C(void)
+void FadeInFromWhite(void)
{
- palette_bg_faded_fill_white();
+ FillPalBufferWhite();
FadeScreen(FADE_FROM_WHITE, 8);
}
-void pal_fill_black(void)
+void FadeInFromBlack(void)
{
- palette_bg_faded_fill_black();
+ FillPalBufferBlack();
FadeScreen(FADE_FROM_BLACK, 0);
}
-void WarpFadeScreen(void)
+void WarpFadeOutScreen(void)
{
u8 currentMapType = GetCurrentMapType();
switch (GetMapPairFadeToType(currentMapType, GetDestinationWarpMapHeader()->mapType))
@@ -112,26 +113,26 @@ void WarpFadeScreen(void)
}
}
-static void sub_80AF0F4(u8 arg)
+static void SetPlayerVisibility(bool8 visible)
{
- sub_808C0A8(!arg);
+ SetPlayerInvisibility(!visible);
}
-static void task0A_nop_for_a_while(u8 taskId)
+static void Task_WaitForUnionRoomFade(u8 taskId)
{
if (WaitForWeatherFadeIn() == TRUE)
DestroyTask(taskId);
}
-void sub_80AF128(void)
+void FieldCB_ContinueScriptUnionRoom(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- pal_fill_black();
- CreateTask(task0A_nop_for_a_while, 10);
+ FadeInFromBlack();
+ CreateTask(Task_WaitForUnionRoomFade, 10);
}
-static void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskID)
+static void Task_WaitForFadeAndEnableScriptCtx(u8 taskID)
{
if (WaitForWeatherFadeIn() == TRUE)
{
@@ -140,22 +141,22 @@ static void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskID)
}
}
-void FieldCallback_ReturnToEventScript2(void)
+void FieldCB_ContinueScriptHandleMusic(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- pal_fill_black();
- CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
+ FadeInFromBlack();
+ CreateTask(Task_WaitForFadeAndEnableScriptCtx, 10);
}
-void sub_80AF188(void)
+void FieldCB_ContinueScript(void)
{
ScriptContext2_Enable();
- pal_fill_black();
- CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
+ FadeInFromBlack();
+ CreateTask(Task_WaitForFadeAndEnableScriptCtx, 10);
}
-static void task_mpl_807DD60(u8 taskId)
+static void Task_ReturnToFieldCableLink(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -168,7 +169,7 @@ static void task_mpl_807DD60(u8 taskId)
case 1:
if (gTasks[task->data[1]].isActive != TRUE)
{
- pal_fill_for_maplights();
+ WarpFadeInScreen();
task->data[0]++;
}
break;
@@ -182,15 +183,15 @@ static void task_mpl_807DD60(u8 taskId)
}
}
-void sub_80AF214(void)
+void FieldCB_ReturnToFieldCableLink(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- palette_bg_faded_fill_black();
- CreateTask(task_mpl_807DD60, 10);
+ FillPalBufferBlack();
+ CreateTask(Task_ReturnToFieldCableLink, 10);
}
-static void sub_80AF234(u8 taskId)
+static void Task_ReturnToFieldWirelessLink(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -208,7 +209,7 @@ static void sub_80AF234(u8 taskId)
}
else
{
- pal_fill_for_maplights();
+ WarpFadeInScreen();
task->data[0]++;
}
break;
@@ -223,7 +224,7 @@ static void sub_80AF234(u8 taskId)
}
}
-void sub_80AF2B4(u8 taskId)
+void Task_ReturnToFieldRecordMixing(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -248,15 +249,15 @@ void sub_80AF2B4(u8 taskId)
}
}
-void sub_80AF314(void)
+void FieldCB_ReturnToFieldWirelessLink(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- palette_bg_faded_fill_black();
- CreateTask(sub_80AF234, 10);
+ FillPalBufferBlack();
+ CreateTask(Task_ReturnToFieldWirelessLink, 10);
}
-static void sub_80AF334(void)
+static void SetUpWarpExitTask(void)
{
s16 x, y;
u8 behavior;
@@ -265,59 +266,59 @@ static void sub_80AF334(void)
PlayerGetDestCoords(&x, &y);
behavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsDoor(behavior) == TRUE)
- func = sub_80AF438;
+ func = Task_ExitDoor;
else if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE)
- func = task_map_chg_seq_0807E20C;
+ func = Task_ExitNonAnimDoor;
else
- func = task_map_chg_seq_0807E2CC;
+ func = Task_ExitNonDoor;
CreateTask(func, 10);
}
-void mapldr_default(void)
+void FieldCB_DefaultWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
- sub_80AF334();
+ WarpFadeInScreen();
+ SetUpWarpExitTask();
ScriptContext2_Enable();
}
-void sub_80AF3B0(void)
+void FieldCB_WarpExitFadeFromWhite(void)
{
Overworld_PlaySpecialMapMusic();
- sub_80AF08C();
- sub_80AF334();
+ FadeInFromWhite();
+ SetUpWarpExitTask();
ScriptContext2_Enable();
}
-void sub_80AF3C8(void)
+void FieldCB_WarpExitFadeFromBlack(void)
{
- if (!sub_81D6534())
+ if (!sub_81D6534()) // sub_81D6534 always returns false
Overworld_PlaySpecialMapMusic();
- pal_fill_black();
- sub_80AF334();
+ FadeInFromBlack();
+ SetUpWarpExitTask();
ScriptContext2_Enable();
}
-void sub_80AF3E8(void)
+static void FieldCB_TeleportWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
PlaySE(SE_TK_WARPOUT);
CreateTask(task0A_mpl_807E31C, 10);
ScriptContext2_Enable();
}
-void sub_80AF40C(void)
+static void FieldCB_MossdeepGymWarpExit(void)
{
Overworld_PlaySpecialMapMusic();
- pal_fill_for_maplights();
+ WarpFadeInScreen();
PlaySE(SE_TK_WARPOUT);
- CreateTask(task_map_chg_seq_0807E2CC, 10);
+ CreateTask(Task_ExitNonDoor, 10);
ScriptContext2_Enable();
sub_8085540(0xE);
}
-static void sub_80AF438(u8 taskId)
+static void Task_ExitDoor(u8 taskId)
{
struct Task *task = &gTasks[taskId];
s16 *x = &task->data[2];
@@ -326,7 +327,7 @@ static void sub_80AF438(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_80AF0F4(0);
+ SetPlayerVisibility(FALSE);
FreezeEventObjects();
PlayerGetDestCoords(x, y);
FieldSetDoorOpened(*x, *y);
@@ -336,18 +337,18 @@ static void sub_80AF438(u8 taskId)
if (WaitForWeatherFadeIn())
{
u8 eventObjId;
- sub_80AF0F4(1);
- eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ SetPlayerVisibility(TRUE);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectSetHeldMovement(&gEventObjects[eventObjId], MOVEMENT_ACTION_WALK_NORMAL_DOWN);
task->data[0] = 2;
}
break;
case 2:
- if (walkrun_is_standing_still())
+ if (IsPlayerStandingStill())
{
u8 eventObjId;
task->data[1] = FieldAnimateDoorClose(*x, *y);
- eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[eventObjId]);
task->data[0] = 3;
}
@@ -366,7 +367,7 @@ static void sub_80AF438(u8 taskId)
}
}
-static void task_map_chg_seq_0807E20C(u8 taskId)
+static void Task_ExitNonAnimDoor(u8 taskId)
{
struct Task *task = &gTasks[taskId];
s16 *x = &task->data[2];
@@ -375,7 +376,7 @@ static void task_map_chg_seq_0807E20C(u8 taskId)
switch (task->data[0])
{
case 0:
- sub_80AF0F4(0);
+ SetPlayerVisibility(FALSE);
FreezeEventObjects();
PlayerGetDestCoords(x, y);
task->data[0] = 1;
@@ -384,14 +385,14 @@ static void task_map_chg_seq_0807E20C(u8 taskId)
if (WaitForWeatherFadeIn())
{
u8 eventObjId;
- sub_80AF0F4(1);
- eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ SetPlayerVisibility(TRUE);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectSetHeldMovement(&gEventObjects[eventObjId], GetWalkNormalMovementAction(GetPlayerFacingDirection()));
task->data[0] = 2;
}
break;
case 2:
- if (walkrun_is_standing_still())
+ if (IsPlayerStandingStill())
{
UnfreezeEventObjects();
task->data[0] = 3;
@@ -404,7 +405,7 @@ static void task_map_chg_seq_0807E20C(u8 taskId)
}
}
-static void task_map_chg_seq_0807E2CC(u8 taskId)
+static void Task_ExitNonDoor(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -424,25 +425,25 @@ static void task_map_chg_seq_0807E2CC(u8 taskId)
}
}
-static void sub_80AF660(u8 taskId)
+static void Task_WaitForFadeShowStartMenu(u8 taskId)
{
if (WaitForWeatherFadeIn() == TRUE)
{
DestroyTask(taskId);
- CreateTask(sub_809FA34, 80);
+ CreateTask(Task_ShowStartMenu, 80);
}
}
-void sub_80AF688(void)
+void ReturnToFieldOpenStartMenu(void)
{
- pal_fill_black();
- CreateTask(sub_80AF660, 0x50);
+ FadeInFromBlack();
+ CreateTask(Task_WaitForFadeShowStartMenu, 0x50);
ScriptContext2_Enable();
}
-bool8 sub_80AF6A4(void)
+bool8 FieldCB_ReturnToFieldOpenStartMenu(void)
{
- sub_809FA18();
+ ShowReturnToFieldStartMenu();
return FALSE;
}
@@ -459,7 +460,7 @@ static void task_mpl_807E3C8(u8 taskId)
void sub_80AF6D4(void)
{
ScriptContext2_Enable();
- pal_fill_black();
+ FadeInFromBlack();
CreateTask(task_mpl_807E3C8, 10);
}
@@ -467,7 +468,7 @@ void sub_80AF6F0(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- pal_fill_black();
+ FadeInFromBlack();
CreateTask(task_mpl_807E3C8, 10);
}
@@ -488,92 +489,92 @@ void DoWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gFieldCallback = mapldr_default;
- CreateTask(sub_80AFA0C, 10);
+ gFieldCallback = FieldCB_DefaultWarpExit;
+ CreateTask(Task_WarpAndLoadMap, 10);
}
void DoDiveWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
- gFieldCallback = mapldr_default;
- CreateTask(sub_80AFA0C, 10);
+ gFieldCallback = FieldCB_DefaultWarpExit;
+ CreateTask(Task_WarpAndLoadMap, 10);
}
-void sub_80AF79C(void)
+void DoSootopolisLegendWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
FadeScreen(FADE_TO_WHITE, 8);
PlayRainStoppingSoundEffect();
- gFieldCallback = sub_80AF3B0;
- CreateTask(sub_80AFA0C, 10);
+ gFieldCallback = FieldCB_WarpExitFadeFromWhite;
+ CreateTask(Task_WarpAndLoadMap, 10);
}
void DoDoorWarp(void)
{
ScriptContext2_Enable();
- gFieldCallback = mapldr_default;
- CreateTask(sub_80AFA88, 10);
+ gFieldCallback = FieldCB_DefaultWarpExit;
+ CreateTask(Task_DoDoorWarp, 10);
}
void DoFallWarp(void)
{
DoDiveWarp();
- gFieldCallback = sub_80B6B68;
+ gFieldCallback = FieldCB_FallWarpExit;
}
-void sub_80AF80C(u8 metatileBehavior)
+void DoEscalatorWarp(u8 metatileBehavior)
{
ScriptContext2_Enable();
- sub_80B6E4C(metatileBehavior, 10);
+ StartEscalatorWarp(metatileBehavior, 10);
}
-void sub_80AF828(void)
+void DoLavaridgeGymB1FWarp(void)
{
ScriptContext2_Enable();
- sub_80B75D8(10);
+ StartLavaridgeGymB1FWarp(10);
}
-void sub_80AF838(void)
+void DoLavaridgeGym1FWarp(void)
{
ScriptContext2_Enable();
- sub_80B7A74(10);
+ StartLavaridgeGym1FWarp(10);
}
-void sub_80AF848(void)
+void DoTeleportWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
PlaySE(SE_TK_WARPIN);
- CreateTask(sub_80AFA0C, 10);
- gFieldCallback = sub_80AF3E8;
+ CreateTask(Task_WarpAndLoadMap, 10);
+ gFieldCallback = FieldCB_TeleportWarpExit;
}
-void sub_80AF87C(void)
+void DoMossdeepGymWarp(void)
{
sub_8085540(1);
ScriptContext2_Enable();
SaveEventObjects();
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
PlaySE(SE_TK_WARPIN);
- CreateTask(sub_80AFA0C, 10);
- gFieldCallback = sub_80AF40C;
+ CreateTask(Task_WarpAndLoadMap, 10);
+ gFieldCallback = FieldCB_MossdeepGymWarpExit;
}
-void sub_80AF8B8(void)
+void DoPortholeWarp(void)
{
ScriptContext2_Enable();
- WarpFadeScreen();
- CreateTask(sub_80AFA0C, 10);
- gFieldCallback = sub_80FB768;
+ WarpFadeOutScreen();
+ CreateTask(Task_WarpAndLoadMap, 10);
+ gFieldCallback = FieldCB_ShowPortholeView;
}
static void sub_80AF8E0(u8 taskId)
@@ -592,17 +593,17 @@ static void sub_80AF8E0(u8 taskId)
break;
case 2:
WarpIntoMap();
- SetMainCallback2(sub_8086074);
+ SetMainCallback2(CB2_ReturnToFieldCableClub);
DestroyTask(taskId);
break;
}
}
-void sub_80AF948(void)
+void DoCableClubWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
PlaySE(SE_KAIDAN);
CreateTask(sub_80AF8E0, 10);
}
@@ -638,12 +639,12 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
}
}
-void sub_80AF9F8(void)
+void ReturnFromLinkRoom(void)
{
CreateTask(Task_ReturnToWorldFromLinkRoom, 10);
}
-static void sub_80AFA0C(u8 taskId)
+static void Task_WarpAndLoadMap(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -674,7 +675,7 @@ static void sub_80AFA0C(u8 taskId)
}
}
-static void sub_80AFA88(u8 taskId)
+static void Task_DoDoorWarp(u8 taskId)
{
struct Task *task = &gTasks[taskId];
s16 *x = &task->data[2];
@@ -693,21 +694,21 @@ static void sub_80AFA88(u8 taskId)
if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE)
{
u8 eventObjId;
- eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfActive(&gEventObjects[eventObjId]);
- eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectSetHeldMovement(&gEventObjects[eventObjId], MOVEMENT_ACTION_WALK_NORMAL_UP);
task->data[0] = 2;
}
break;
case 2:
- if (walkrun_is_standing_still())
+ if (IsPlayerStandingStill())
{
u8 eventObjId;
task->data[1] = FieldAnimateDoorClose(*x, *y - 1);
- eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[eventObjId]);
- sub_80AF0F4(0);
+ SetPlayerVisibility(FALSE);
task->data[0] = 3;
}
break;
@@ -719,10 +720,10 @@ static void sub_80AFA88(u8 taskId)
break;
case 4:
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
task->data[0] = 0;
- task->func = sub_80AFA0C;
+ task->func = Task_WarpAndLoadMap;
break;
}
}
@@ -752,14 +753,14 @@ static void task0A_fade_n_map_maybe(u8 taskId)
}
}
-void sub_80AFC60(void)
+void DoContestHallWarp(void)
{
ScriptContext2_Enable();
TryFadeOutOldMapMusic();
- WarpFadeScreen();
+ WarpFadeOutScreen();
PlayRainStoppingSoundEffect();
PlaySE(SE_KAIDAN);
- gFieldCallback = sub_80AF3C8;
+ gFieldCallback = FieldCB_WarpExitFadeFromBlack;
CreateTask(task0A_fade_n_map_maybe, 10);
}
@@ -800,7 +801,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 +817,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 +879,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 +949,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 +971,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;
@@ -1033,7 +1034,7 @@ static void sub_80B01BC(u8 taskId)
case 1:
if (!sub_808D1E8())
{
- WarpFadeScreen();
+ WarpFadeOutScreen();
task->data[0]++;
}
break;
@@ -1052,23 +1053,23 @@ static void sub_80B01BC(u8 taskId)
void sub_80B0244(void)
{
ScriptContext2_Enable();
- CreateTask(sub_80AFA0C, 10);
- gFieldCallback = sub_80AF3E8;
+ CreateTask(Task_WarpAndLoadMap, 10);
+ gFieldCallback = FieldCB_TeleportWarpExit;
}
void sub_80B0268(void)
{
ScriptContext2_Enable();
- gFieldCallback = mapldr_default;
+ gFieldCallback = FieldCB_DefaultWarpExit;
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 +1080,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 +1108,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 +1179,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..267198f79 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -14,6 +14,8 @@
#include "sprite.h"
#include "task.h"
#include "constants/event_objects.h"
+#include "constants/event_object_movement_constants.h"
+#include "constants/field_specials.h"
#include "constants/songs.h"
#include "constants/vars.h"
#include "constants/metatile_labels.h"
@@ -31,8 +33,18 @@ enum
//. rodata
static const s8 gTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0};
-const u8 gUnknown_0858E8AB[] = {0x18, 0xFE};
-const u8 gUnknown_0858E8AD[] = {0x17, 0xFE};
+
+static const u8 sSSTidalSailEastMovementScript[] =
+{
+ MOVEMENT_ACTION_WALK_FAST_RIGHT,
+ MOVEMENT_ACTION_STEP_END
+};
+
+static const u8 sSSTidalSailWestMovementScript[] =
+{
+ MOVEMENT_ACTION_WALK_FAST_LEFT,
+ MOVEMENT_ACTION_STEP_END
+};
// .text
static void Task_Truck3(u8);
@@ -167,7 +179,7 @@ void Task_HandleTruckSequence(u8 taskId)
data[1]++;
if (data[1] == SECONDS(2.5))
{
- pal_fill_black();
+ FadeInFromBlack();
data[1] = 0;
data[0] = 2;
}
@@ -237,12 +249,12 @@ void EndTruckSequence(u8 taskId)
}
}
-bool8 sub_80FB59C(void)
+bool8 TrySetPortholeWarpDestination(void)
{
s8 mapGroup, mapNum;
s16 x, y;
- if (GetSSTidalLocation(&mapGroup, &mapNum, &x, &y))
+ if (GetSSTidalLocation(&mapGroup, &mapNum, &x, &y) != SS_TIDAL_LOCATION_CURRENTS)
{
return FALSE;
}
@@ -256,7 +268,7 @@ bool8 sub_80FB59C(void)
void Task_HandlePorthole(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- u16 *var = GetVarPointer(VAR_PORTHOLE_STATE);
+ u16 *cruiseState = GetVarPointer(VAR_SS_TIDAL_STATE);
struct WarpData *location = &gSaveBlock1Ptr->location;
switch (data[0])
@@ -268,41 +280,42 @@ void Task_HandlePorthole(u8 taskId)
data[0] = EXECUTE_MOVEMENT; // execute movement before checking if should be exited. strange?
}
break;
- case IDLE_CHECK: // idle and move.
+ case IDLE_CHECK:
if (gMain.newKeys & A_BUTTON)
data[1] = 1;
- if (!ScriptMovement_IsObjectMovementFinished(0xFF, location->mapNum, location->mapGroup))
+ if (!ScriptMovement_IsObjectMovementFinished(EVENT_OBJ_ID_PLAYER, location->mapNum, location->mapGroup))
return;
if (CountSSTidalStep(1) == TRUE)
{
- if (*var == 2)
- *var = 9;
+ if (*cruiseState == SS_TIDAL_DEPART_SLATEPORT)
+ *cruiseState = SS_TIDAL_EXIT_CURRENTS_RIGHT;
else
- *var = 10;
- data[0] = 3;
+ *cruiseState = SS_TIDAL_EXIT_CURRENTS_LEFT;
+ data[0] = EXIT_PORTHOLE;
return;
}
- data[0] = 2;
- case EXECUTE_MOVEMENT: // execute movement.
+ data[0] = EXECUTE_MOVEMENT;
+ //fallthrough
+ case EXECUTE_MOVEMENT:
if (data[1])
{
- data[0] = EXIT_PORTHOLE; // exit porthole.
+ data[0] = EXIT_PORTHOLE;
return;
}
- // run this once.
- if (*var == 2) // which direction?
+
+ if (*cruiseState == SS_TIDAL_DEPART_SLATEPORT)
{
- ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_0858E8AB);
- data[0] = IDLE_CHECK; // run case 1.
+ ScriptMovement_StartObjectMovementScript(EVENT_OBJ_ID_PLAYER, location->mapNum, location->mapGroup, sSSTidalSailEastMovementScript);
+ data[0] = IDLE_CHECK;
}
else
{
- ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_0858E8AD);
- data[0] = IDLE_CHECK; // run case 1.
+ ScriptMovement_StartObjectMovementScript(EVENT_OBJ_ID_PLAYER, location->mapNum, location->mapGroup, sSSTidalSailWestMovementScript);
+ data[0] = IDLE_CHECK;
}
break;
- case EXIT_PORTHOLE: // exit porthole.
- FlagClear(FLAG_SPECIAL_FLAG_0x4001);
+ case EXIT_PORTHOLE:
+ FlagClear(FLAG_DONT_TRANSITION_MUSIC);
FlagClear(FLAG_HIDE_MAP_NAME_POPUP);
SetWarpDestinationToDynamicWarp(0);
DoDiveWarp();
@@ -311,37 +324,33 @@ void Task_HandlePorthole(u8 taskId)
}
}
-void sub_80FB6EC(void)
+static void ShowSSTidalWhileSailing(void)
{
u8 spriteId = AddPseudoEventObject(EVENT_OBJ_GFX_SS_TIDAL, SpriteCallbackDummy, 112, 80, 0);
gSprites[spriteId].coordOffsetEnabled = FALSE;
- if (VarGet(VAR_PORTHOLE_STATE) == 2)
- {
- StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(4));
- }
+ if (VarGet(VAR_SS_TIDAL_STATE) == SS_TIDAL_DEPART_SLATEPORT)
+ StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(DIR_EAST));
else
- {
- StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(3));
- }
+ StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(DIR_WEST));
}
-void sub_80FB768(void)
+void FieldCB_ShowPortholeView(void)
{
- sub_80FB6EC();
+ ShowSSTidalWhileSailing();
gEventObjects[gPlayerAvatar.eventObjectId].invisible = TRUE;
- pal_fill_black();
+ FadeInFromBlack();
CreateTask(Task_HandlePorthole, 80);
ScriptContext2_Enable();
}
-void sub_80FB7A4(void)
+void LookThroughPorthole(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();
- sub_80AF8B8();
+ TrySetPortholeWarpDestination();
+ DoPortholeWarp();
}
diff --git a/src/field_specials.c b/src/field_specials.c
index 99e8e93a9..ce3ccce95 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"
@@ -35,6 +35,7 @@
#include "rtc.h"
#include "script.h"
#include "script_menu.h"
+#include "slot_machine.h"
#include "sound.h"
#include "starter_choose.h"
#include "string_util.h"
@@ -44,14 +45,24 @@
#include "tv.h"
#include "wallclock.h"
#include "window.h"
+#include "constants/battle_frontier.h"
+#include "constants/battle_tower.h"
+#include "constants/decorations.h"
#include "constants/event_objects.h"
+#include "constants/event_object_movement_constants.h"
#include "constants/field_effects.h"
+#include "constants/field_specials.h"
#include "constants/items.h"
+#include "constants/heal_locations.h"
#include "constants/map_types.h"
#include "constants/maps.h"
+#include "constants/mevent.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"
@@ -60,72 +71,71 @@
EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE;
EWRAM_DATA u8 gBikeCollisions = 0;
-static EWRAM_DATA u32 gBikeCyclingTimer = 0;
-static EWRAM_DATA u8 gUnknown_0203AB5C = 0;
-static EWRAM_DATA u8 sPetalburgGymSlidingDoorFrameCounter = 0;
-static EWRAM_DATA u8 gUnknown_0203AB5E = 0;
-static EWRAM_DATA u16 gUnknown_0203AB60 = 0;
-static EWRAM_DATA u16 gUnknown_0203AB62 = 0;
-static EWRAM_DATA struct ListMenuItem *gUnknown_0203AB64 = NULL;
-static EWRAM_DATA u16 gUnknown_0203AB68 = 0;
-static EWRAM_DATA u16 gUnknown_0203AB6A = 0;
-static EWRAM_DATA u8 gUnknown_0203AB6C = 0;
-static EWRAM_DATA u8 gUnknown_0203AB6D = 0;
-static EWRAM_DATA u8 gUnknown_0203AB6E = 0;
-static EWRAM_DATA u8 gUnknown_0203AB6F = 0;
-static EWRAM_DATA u32 gUnknown_0203AB70 = 0;
-
-struct ListMenuTemplate gUnknown_030061D0;
+static EWRAM_DATA u32 sBikeCyclingTimer = 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;
+static EWRAM_DATA struct ListMenuItem *sScrollableMultichoice_ListMenuItem = NULL;
+static EWRAM_DATA u16 sScrollableMultichoice_ScrollOffset = 0;
+static EWRAM_DATA u16 sFrontierExchangeCorner_NeverRead = 0;
+static EWRAM_DATA u8 sScrollableMultichoice_ItemSpriteId = 0;
+static EWRAM_DATA u8 sBattlePointsWindowId = 0;
+static EWRAM_DATA u8 sFrontierExchangeCorner_ItemIconWindowId = 0;
+static EWRAM_DATA u8 sPCBoxToSendMon = 0;
+static EWRAM_DATA u32 sBattleTowerMultiBattleTypeFlags = 0;
+
+struct ListMenuTemplate gScrollableMultichoice_ListMenuTemplate;
extern const u16 gEventObjectPalette8[];
extern const u16 gEventObjectPalette17[];
extern const u16 gEventObjectPalette33[];
extern const u16 gEventObjectPalette34[];
-
-void UpdateMovedLilycoveFanClubMembers(void);
-void sub_813BF60(void);
-u16 GetNumMovedLilycoveFanClubMembers(void);
+void TryLoseFansFromPlayTime(void);
+void SetPlayerGotFirstFans(void);
+u16 GetNumFansOfPlayerInTrainerFanClub(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 sub_8139AF4(u8 taskId);
-static void sub_8139C2C(u16 a1, u8 a2);
-static void MoveElevatorWindowLights(u8 taskId);
-static void sub_813A2DC(u8 taskId);
-static void sub_813AA60(u16 a0, u16 a1);
-static void sub_813ACE8(u8 a0, u16 a1);
-static void sub_813A42C(void);
-static void sub_813A4EC(u8 taskId);
-static void sub_813A694(u8 taskId);
-static void sub_813A46C(s32 itemIndex, bool8 onInit, struct ListMenu *list);
-static void sub_813AC44(u16 a0, u16 a1);
-static void sub_813AD34(u8 a0, u16 a1);
-static void sub_813A570(u8 taskId);
-static void sub_813A738(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);
+static void Task_ShowScrollableMultichoice(u8 taskId);
+static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection);
+static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection);
+static void InitScrollableMultichoice(void);
+static void ScrollableMultichoice_ProcessInput(u8 taskId);
+static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId);
+static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list);
+static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused);
+static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection);
+static void CloseScrollableMultichoice(u8 taskId);
+static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId);
static void sub_813A600(u8 taskId);
static void sub_813A664(u8 taskId);
-static void sub_813ABD4(u16 a0);
+static void ShowFrontierExchangeCornerItemIcon(u16 item);
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 u8 sub_813BF44(void);
-static void sub_813BD84(void);
-static u16 sub_813BB74(void);
-static void sub_813BE30(struct LinkBattleRecords *linkRecords, u8 a, u8 b);
+static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId);
+static void Task_LoopWingFlapSE(u8 taskId);
+static void Task_CloseBattlePikeCurtain(u8 taskId);
+static u8 DidPlayerGetFirstFans(void);
+static void SetInitialFansOfPlayer(void);
+static u16 PlayerGainRandomTrainerFan(void);
+static void BufferFanClubTrainerName_(struct LinkBattleRecords *linkRecords, u8 a, u8 b);
void Special_ShowDiploma(void)
{
@@ -144,14 +154,14 @@ void ResetCyclingRoadChallengeData(void)
{
gBikeCyclingChallenge = FALSE;
gBikeCollisions = 0;
- gBikeCyclingTimer = 0;
+ sBikeCyclingTimer = 0;
}
void Special_BeginCyclingRoadChallenge(void)
{
gBikeCyclingChallenge = TRUE;
gBikeCollisions = 0;
- gBikeCyclingTimer = gMain.vblankCounter1;
+ sBikeCyclingTimer = gMain.vblankCounter1;
}
u16 GetPlayerAvatarBike(void)
@@ -237,7 +247,7 @@ static void DetermineCyclingRoadResults(u32 numFrames, u8 numBikeCollisions)
}
void FinishCyclingRoadChallenge(void) {
- const u32 numFrames = gMain.vblankCounter1 - gBikeCyclingTimer;
+ const u32 numFrames = gMain.vblankCounter1 - sBikeCyclingTimer;
DetermineCyclingRoadResults(numFrames, gBikeCollisions);
RecordCyclingRoadResults(numFrames, gBikeCollisions);
@@ -294,9 +304,10 @@ void ResetSSTidalFlag(void)
FlagClear(FLAG_SYS_CRUISE_MODE);
}
+// Returns TRUE if the Cruise is over
bool32 CountSSTidalStep(u16 delta)
{
- if (!FlagGet(FLAG_SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) <= 0xcc)
+ if (!FlagGet(FLAG_SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) < SS_TIDAL_MAX_STEPS)
{
return FALSE;
}
@@ -306,21 +317,21 @@ bool32 CountSSTidalStep(u16 delta)
u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y)
{
u16 *varCruiseStepCount = GetVarPointer(VAR_CRUISE_STEP_COUNT);
- switch (*GetVarPointer(VAR_PORTHOLE_STATE))
- {
- case 1:
- case 8:
- return 1;
- case 3:
- case 9:
- return 4;
- case 4:
- case 5:
- return 2;
- case 6:
- case 10:
- return 3;
- case 2:
+ switch (*GetVarPointer(VAR_SS_TIDAL_STATE))
+ {
+ case SS_TIDAL_BOARD_SLATEPORT:
+ case SS_TIDAL_LAND_SLATEPORT:
+ return SS_TIDAL_LOCATION_SLATEPORT;
+ case SS_TIDAL_HALFWAY_LILYCOVE:
+ case SS_TIDAL_EXIT_CURRENTS_RIGHT:
+ return SS_TIDAL_LOCATION_ROUTE131;
+ case SS_TIDAL_LAND_LILYCOVE:
+ case SS_TIDAL_BOARD_LILYCOVE:
+ return SS_TIDAL_LOCATION_LILYCOVE;
+ case SS_TIDAL_DEPART_LILYCOVE:
+ case SS_TIDAL_EXIT_CURRENTS_LEFT:
+ return SS_TIDAL_LOCATION_ROUTE124;
+ case SS_TIDAL_DEPART_SLATEPORT:
if (*varCruiseStepCount < 60)
{
*mapNum = MAP_NUM(ROUTE134);
@@ -337,7 +348,7 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y)
*x = *varCruiseStepCount - 140;
}
break;
- case 7:
+ case SS_TIDAL_HALFWAY_SLATEPORT:
if (*varCruiseStepCount < 66)
{
*mapNum = MAP_NUM(ROUTE132);
@@ -356,7 +367,7 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y)
}
*mapGroup = MAP_GROUP(ROUTE132);
*y = 20;
- return 0;
+ return SS_TIDAL_LOCATION_CURRENTS;
}
bool32 ShouldDoWallyCall(void)
@@ -386,9 +397,9 @@ bool32 ShouldDoWallyCall(void)
return TRUE;
}
-bool32 ShouldDoWinonaCall(void)
+bool32 ShouldDoScottFortreeCall(void)
{
- if (FlagGet(FLAG_REGISTER_WINONA_POKENAV))
+ if (FlagGet(FLAG_SCOTT_CALL_FORTREE_GYM))
{
switch (gMapHeader.mapType)
{
@@ -396,7 +407,7 @@ bool32 ShouldDoWinonaCall(void)
case MAP_TYPE_CITY:
case MAP_TYPE_ROUTE:
case MAP_TYPE_OCEAN_ROUTE:
- if (++(*GetVarPointer(VAR_WINONA_CALL_STEP_COUNTER)) < 10)
+ if (++(*GetVarPointer(VAR_SCOTT_FORTREE_CALL_STEP_COUNTER)) < 10)
{
return FALSE;
}
@@ -413,17 +424,17 @@ bool32 ShouldDoWinonaCall(void)
return TRUE;
}
-bool32 ShouldDoScottCall(void)
+bool32 ShouldDoScottBattleFrontierCall(void)
{
- if (FlagGet(FLAG_SCOTT_CALL_NATIONAL_DEX))
+ if (FlagGet(FLAG_SCOTT_CALL_BATTLE_FRONTIER))
{
switch (gMapHeader.mapType)
{
- case 1:
- case 2:
- case 3:
- case 6:
- if (++(*GetVarPointer(VAR_SCOTT_CALL_STEP_COUNTER)) < 10)
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
+ case MAP_TYPE_OCEAN_ROUTE:
+ if (++(*GetVarPointer(VAR_SCOTT_BF_CALL_STEP_COUNTER)) < 10)
{
return FALSE;
}
@@ -446,10 +457,10 @@ bool32 ShouldDoRoxanneCall(void)
{
switch (gMapHeader.mapType)
{
- case 1:
- case 2:
- case 3:
- case 6:
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
+ case MAP_TYPE_OCEAN_ROUTE:
if (++(*GetVarPointer(VAR_ROXANNE_CALL_STEP_COUNTER)) < 250)
{
return FALSE;
@@ -473,10 +484,10 @@ bool32 ShouldDoRivalRayquazaCall(void)
{
switch (gMapHeader.mapType)
{
- case 1:
- case 2:
- case 3:
- case 6:
+ case MAP_TYPE_TOWN:
+ case MAP_TYPE_CITY:
+ case MAP_TYPE_ROUTE:
+ case MAP_TYPE_OCEAN_ROUTE:
if (++(*GetVarPointer(VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER)) < 250)
{
return FALSE;
@@ -516,8 +527,13 @@ void SpawnLinkPartnerEventObject(void)
u8 j = 0;
s16 x = 0;
s16 y = 0;
- u8 gUnknown_085B2B5C[] = {7, 9, 8, 10};
- s8 gUnknown_085B2B60[][2] = {
+ u8 movementTypes[] = {
+ MOVEMENT_TYPE_FACE_UP,
+ MOVEMENT_TYPE_FACE_LEFT,
+ MOVEMENT_TYPE_FACE_DOWN,
+ MOVEMENT_TYPE_FACE_RIGHT
+ };
+ s8 coordOffsets[][2] = {
{ 0, 1},
{ 1, 0},
{ 0, -1},
@@ -577,10 +593,10 @@ void SpawnLinkPartnerEventObject(void)
linkSpriteId = EVENT_OBJ_GFX_RIVAL_MAY_NORMAL;
break;
}
- SpawnSpecialEventObjectParameterized(linkSpriteId, gUnknown_085B2B5C[j], 0xf0 - i, gUnknown_085B2B60[j][0] + x + 7, gUnknown_085B2B60[j][1] + y + 7, 0);
- LoadLinkPartnerEventObjectSpritePalette(linkSpriteId, 0xf0 - i, i);
+ SpawnSpecialEventObjectParameterized(linkSpriteId, movementTypes[j], 240 - i, coordOffsets[j][0] + x + 7, coordOffsets[j][1] + y + 7, 0);
+ LoadLinkPartnerEventObjectSpritePalette(linkSpriteId, 240 - i, i);
j++;
- if (j == 4)
+ if (j == MAX_LINK_PLAYERS)
{
j = 0;
}
@@ -624,33 +640,33 @@ static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEvent
}
}
-static const struct UCoords8 sMauvilleGymSwitchCoords[] = {
+// NOTE: Coordinates are +7, +7 from actual in-map coordinates
+static const struct UCoords8 sMauvilleGymSwitchCoords[] =
+{
{ 7, 22},
{11, 19},
{10, 16},
{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++)
@@ -722,13 +738,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);
@@ -745,7 +757,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;
@@ -802,7 +814,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),
@@ -812,21 +824,21 @@ static const u16 sPetalburgGymSlidingDoorMetatiles[] = {
METATILE_ID(PetalburgGym, SlidingDoor_Frame4),
};
-void PetalburgGymSpecial1(void)
+void PetalburgGymSlideOpenRoomDoors(void)
{
- gUnknown_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] == gUnknown_0203AB5C)
+ if (sSlidingDoorNextFrameDelay[sSlidingDoorFrame] == sSlidingDoorNextFrameCounter)
{
- PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sPetalburgGymSlidingDoorFrameCounter]);
- gUnknown_0203AB5C = 0;
- if ((++sPetalburgGymSlidingDoorFrameCounter) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles))
+ PetalburgGymSetDoorMetatiles(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sSlidingDoorFrame]);
+ sSlidingDoorNextFrameCounter = 0;
+ if ((++sSlidingDoorFrame) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles))
{
DestroyTask(taskId);
EnableBothScriptContexts();
@@ -834,11 +846,11 @@ static void Task_PetalburgGym(u8 taskId)
}
else
{
- gUnknown_0203AB5C++;
+ sSlidingDoorNextFrameCounter++;
}
}
-static void PetalburgGymFunc(u8 roomNumber, u16 metatileId)
+static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId)
{
u16 doorCoordsX[4];
u16 doorCoordsY[4];
@@ -903,9 +915,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)
@@ -965,7 +977,7 @@ void CableCarWarp(void)
}
}
-void SetFlagInVar(void)
+void SetHiddenItemFlag(void)
{
FlagSet(gSpecialVar_0x8004);
}
@@ -983,7 +995,7 @@ u16 GetWeekCount(void)
u8 GetLeadMonFriendshipScore(void)
{
struct Pokemon *pokemon = &gPlayerParty[GetLeadMonIndex()];
- if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) == 255)
+ if (GetMonData(pokemon, MON_DATA_FRIENDSHIP) == MAX_FRIENDSHIP)
{
return 6;
}
@@ -1077,36 +1089,35 @@ static void PCTurnOnEffect_0(struct Task *task)
task->data[3]++;
}
-// enum pc location,
-static void PCTurnOnEffect_1(s16 flag, s8 dx, s8 dy)
+static void PCTurnOnEffect_1(s16 isPcTurnedOn, s8 dx, s8 dy)
{
u16 tileId = 0;
- if (flag != 0)
+ if (isPcTurnedOn)
{
- if (gSpecialVar_0x8004 == 0)
+ if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
{
tileId = METATILE_ID(Building, PC_Off);
}
- else if (gSpecialVar_0x8004 == 1)
+ else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
{
tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off);
}
- else if (gSpecialVar_0x8004 == 2)
+ else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
{
tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off);
}
}
else
{
- if (gSpecialVar_0x8004 == 0)
+ if (gSpecialVar_0x8004 == PC_LOCATION_OTHER)
{
tileId = METATILE_ID(Building, PC_On);
}
- else if (gSpecialVar_0x8004 == 1)
+ else if (gSpecialVar_0x8004 == PC_LOCATION_BRENDANS_HOUSE)
{
tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_On);
}
- else if (gSpecialVar_0x8004 == 2)
+ else if (gSpecialVar_0x8004 == PC_LOCATION_MAYS_HOUSE)
{
tileId = METATILE_ID(BrendansMaysHouse, MayPC_On);
}
@@ -1210,18 +1221,18 @@ void EndLotteryCornerComputerEffect(void)
DrawWholeMapView();
}
-void SetTrickHouseEndRoomFlag(void)
+void SetTrickHouseNuggetFlag(void)
{
u16 *specVar = &gSpecialVar_0x8004;
- u16 flag = FLAG_TRICK_HOUSE_END_ROOM;
+ u16 flag = FLAG_HIDDEN_ITEM_TRICK_HOUSE_NUGGET;
*specVar = flag;
FlagSet(flag);
}
-void ResetTrickHouseEndRoomFlag(void)
+void ResetTrickHouseNuggetFlag(void)
{
u16 *specVar = &gSpecialVar_0x8004;
- u16 flag = FLAG_TRICK_HOUSE_END_ROOM;
+ u16 flag = FLAG_HIDDEN_ITEM_TRICK_HOUSE_NUGGET;
*specVar = flag;
FlagClear(flag);
}
@@ -1294,7 +1305,7 @@ void IsGrassTypeInParty(void)
void SpawnCameraObject(void)
{
- u8 obj = SpawnSpecialEventObjectParameterized(EVENT_OBJ_GFX_BOY_1, 8, EVENT_OBJ_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
+ u8 obj = SpawnSpecialEventObjectParameterized(EVENT_OBJ_GFX_BOY_1, MOVEMENT_TYPE_FACE_DOWN, EVENT_OBJ_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
gEventObjects[obj].invisible = TRUE;
CameraObjectSetFollowedObjectId(gEventObjects[obj].spriteId);
}
@@ -1327,16 +1338,16 @@ void BufferEReaderTrainerName(void)
u16 GetSlotMachineId(void)
{
- static const u8 gUnknown_085B2B88[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6};
- static const u8 gUnknown_085B2B94[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5};
- static const u8 gUnknown_085B2BA0[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5};
+ static const u8 sSlotMachineRandomSeeds[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6};
+ static const u8 sSlotMachineIds[] = {0, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 5};
+ static const u8 sSlotMachineServiceDayIds[] = {3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5};
- u32 v0 = gSaveBlock1Ptr->easyChatPairs[0].unk0_0 + gSaveBlock1Ptr->easyChatPairs[0].unk2 + gUnknown_085B2B88[gSpecialVar_0x8004];
- if (GetPriceReduction(2))
+ u32 rnd = gSaveBlock1Ptr->easyChatPairs[0].unk0_0 + gSaveBlock1Ptr->easyChatPairs[0].unk2 + sSlotMachineRandomSeeds[gSpecialVar_0x8004];
+ if (GetPriceReduction(POKENEWS_GAME_CORNER))
{
- return gUnknown_085B2BA0[v0 % 12];
+ return sSlotMachineServiceDayIds[rnd % SLOT_MACHINE_COUNT];
}
- return gUnknown_085B2B94[v0 % 12];
+ return sSlotMachineIds[rnd % SLOT_MACHINE_COUNT];
}
bool8 FoundAbandonedShipRoom1Key(void)
@@ -1401,9 +1412,9 @@ void GiveLeadMonEffortRibbon(void)
ribbonSet = TRUE;
leadMon = &gPlayerParty[GetLeadMonIndex()];
SetMonData(leadMon, MON_DATA_EFFORT_RIBBON, &ribbonSet);
- if (GetRibbonCount(leadMon) > 4)
+ if (GetRibbonCount(leadMon) > NUM_CUTIES_RIBBONS)
{
- sub_80EE4DC(leadMon, 0x47);
+ TryPutSpotTheCutiesOnAir(leadMon, 0x47);
}
}
@@ -1418,7 +1429,9 @@ bool8 Special_AreLeadMonEVsMaxedOut(void)
u8 TryUpdateRusturfTunnelState(void)
{
- if (!FlagGet(FLAG_RUSTURF_TUNNEL_OPENED) && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(RUSTURF_TUNNEL))
+ if (!FlagGet(FLAG_RUSTURF_TUNNEL_OPENED)
+ && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(RUSTURF_TUNNEL)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(RUSTURF_TUNNEL))
{
if (FlagGet(FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1))
{
@@ -1434,7 +1447,7 @@ u8 TryUpdateRusturfTunnelState(void)
return FALSE;
}
-void SetShoalItemFlag(u16 v0)
+void SetShoalItemFlag(u16 unused)
{
FlagSet(FLAG_SYS_SHOAL_ITEM);
}
@@ -1442,7 +1455,7 @@ void SetShoalItemFlag(u16 v0)
void PutZigzagoonInPlayerParty(void)
{
u16 monData;
- CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0);
+ CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 32, FALSE, 0, OT_ID_PLAYER_ID, 0);
monData = TRUE;
SetMonData(&gPlayerParty[0], MON_DATA_ABILITY_NUM, &monData);
monData = MOVE_TACKLE;
@@ -1482,44 +1495,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);
@@ -1529,7 +1554,7 @@ void SetRoute119Weather(void)
{
if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE)
{
- SetSav1Weather(20);
+ SetSav1Weather(WEATHER_ROUTE119_CYCLE);
}
}
@@ -1537,7 +1562,7 @@ void SetRoute123Weather(void)
{
if (IsMapTypeOutdoors(GetLastUsedWarpMapType()) != TRUE)
{
- SetSav1Weather(21);
+ SetSav1Weather(WEATHER_ROUTE123_CYCLE);
}
}
@@ -1560,9 +1585,10 @@ u16 ScriptGetPartyMonSpecies(void)
return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES2, NULL);
}
-void nullsub_54(void)
+// Removed for Emerald
+void TryInitBattleTowerAwardManEventObject(void)
{
-
+ //TryInitLocalEventObject(6);
}
u16 GetDaysUntilPacifidlogTMAvailable(void)
@@ -1585,18 +1611,16 @@ u16 SetPacifidlogTMReceivedDay(void)
return gLocalTime.days;
}
-bool8 MonOTNameMatchesPlayer(void)
+bool8 MonOTNameNotPlayer(void)
{
if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_LANGUAGE) != GAME_LANGUAGE)
- {
- return TRUE; // huh?
- }
+ return TRUE;
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_OT_NAME, gStringVar1);
+
if (!StringCompare(gSaveBlock2Ptr->playerName, gStringVar1))
- {
return FALSE;
- }
+
return TRUE;
}
@@ -1609,20 +1633,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
{
@@ -1630,30 +1654,30 @@ 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));
}
}
-u16 sub_813986C(void)
+u16 GetMysteryEventCardVal(void)
{
switch (gSpecialVar_Result)
{
- case 0:
- return mevent_081445C0(3);
- case 1:
- return mevent_081445C0(4);
- case 2:
- return mevent_081445C0(0);
- case 3:
+ case GET_NUM_STAMPS:
+ return mevent_081445C0(GET_NUM_STAMPS_INTERNAL);
+ case GET_MAX_STAMPS:
+ return mevent_081445C0(GET_MAX_STAMPS_INTERNAL);
+ case GET_CARD_BATTLES_WON:
+ return mevent_081445C0(GET_CARD_BATTLES_WON_INTERNAL);
+ case 3: // Never occurs
return mevent_081445C0(1);
- case 4:
+ case 4: // Never occurs
return mevent_081445C0(2);
default:
return 0;
}
}
-bool8 sub_81398C0(void)
+bool8 BufferTMHMMoveName(void)
{
if (gSpecialVar_0x8004 >= ITEM_TM01 && gSpecialVar_0x8004 <= ITEM_HM08)
{
@@ -1664,36 +1688,37 @@ bool8 sub_81398C0(void)
return FALSE;
}
-bool8 sub_813990C(void)
+bool8 IsBadEggInParty(void)
{
u8 partyCount = CalculatePlayerPartyCount();
u8 i;
for (i = 0; i < partyCount; i++)
{
- if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG) == 1)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_IS_BAD_EGG) == TRUE)
return TRUE;
}
return FALSE;
}
-bool8 InMultiBattleRoom(void)
+bool8 InMultiPartnerRoom(void)
{
- if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM)
- && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM) &&
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM) &&
VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_MULTIS)
return TRUE;
return FALSE;
}
-void sub_8139980(void)
+void OffsetCameraForBattle(void)
{
SetCameraPanningCallback(NULL);
SetCameraPanning(8, 0);
}
-const struct WindowTemplate gUnknown_085B2BAC = {
+const struct WindowTemplate gElevatorFloor_WindowTemplate =
+{
.bg = 0,
.tilemapLeft = 21,
.tilemapTop = 1,
@@ -1703,23 +1728,24 @@ const struct WindowTemplate gUnknown_085B2BAC = {
.baseBlock = 8,
};
-const u8 *const gElevatorFloorsTable[] = {
- gText_B4F,
- gText_B3F,
- gText_B2F,
- gText_B1F,
- gText_1F,
- gText_2F,
- gText_3F,
- gText_4F,
- gText_5F,
- gText_6F,
- gText_7F,
- gText_8F,
- gText_9F,
- gText_10F,
- gText_11F,
- gText_Rooftop
+const u8 *const gDeptStoreFloorNames[] =
+{
+ [DEPT_STORE_FLOORNUM_B4F] = gText_B4F,
+ [DEPT_STORE_FLOORNUM_B3F] = gText_B3F,
+ [DEPT_STORE_FLOORNUM_B2F] = gText_B2F,
+ [DEPT_STORE_FLOORNUM_B1F] = gText_B1F,
+ [DEPT_STORE_FLOORNUM_1F] = gText_1F,
+ [DEPT_STORE_FLOORNUM_2F] = gText_2F,
+ [DEPT_STORE_FLOORNUM_3F] = gText_3F,
+ [DEPT_STORE_FLOORNUM_4F] = gText_4F,
+ [DEPT_STORE_FLOORNUM_5F] = gText_5F,
+ [DEPT_STORE_FLOORNUM_6F] = gText_6F,
+ [DEPT_STORE_FLOORNUM_7F] = gText_7F,
+ [DEPT_STORE_FLOORNUM_8F] = gText_8F,
+ [DEPT_STORE_FLOORNUM_9F] = gText_9F,
+ [DEPT_STORE_FLOORNUM_10F] = gText_10F,
+ [DEPT_STORE_FLOORNUM_11F] = gText_11F,
+ [DEPT_STORE_FLOORNUM_ROOFTOP] = gText_Rooftop
};
static const u16 sElevatorWindowTiles_Ascending[][3] =
@@ -1760,104 +1786,105 @@ static const u16 sElevatorWindowTiles_Descending[][3] =
},
};
-void SetDepartmentStoreFloorVar(void)
+void SetDeptStoreFloor(void)
{
u8 deptStoreFloor;
switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F):
- deptStoreFloor = 4;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_1F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F):
- deptStoreFloor = 5;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_2F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F):
- deptStoreFloor = 6;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_3F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F):
- deptStoreFloor = 7;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_4F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F):
- deptStoreFloor = 8;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_5F;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP):
- deptStoreFloor = 15;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_ROOFTOP;
break;
default:
- deptStoreFloor = 4;
+ deptStoreFloor = DEPT_STORE_FLOORNUM_1F;
break;
}
VarSet(VAR_DEPT_STORE_FLOOR, deptStoreFloor);
}
-u16 sub_81399F4(void)
+u16 GetDeptStoreDefaultFloorChoice(void)
{
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 0;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 0;
if (gSaveBlock1Ptr->dynamicWarp.mapGroup == MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_1F))
{
switch (gSaveBlock1Ptr->dynamicWarp.mapNum)
{
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_5F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 0;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 0;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_4F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 1;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 1;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_3F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 2;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 2;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_2F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 3;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 3;
break;
case MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_1F):
- gUnknown_0203AB60 = 0;
- gUnknown_0203AB62 = 4;
+ sLilycoveDeptStore_NeverRead = 0;
+ sLilycoveDeptStore_DefaultFloorChoice = 4;
break;
}
}
- return gUnknown_0203AB62;
+ return sLilycoveDeptStore_DefaultFloorChoice;
}
-void ShakeScreenInElevator(void)
+void MoveElevator(void)
{
- static const u8 gUnknown_085B2C18[] = { 0x08, 0x10, 0x18, 0x20, 0x26, 0x2e, 0x34, 0x38, 0x39 };
+ static const u8 sElevatorTripLength[] = { 8, 16, 24, 32, 38, 46, 52, 56, 57 };
- s16 *data = gTasks[CreateTask(sub_8139AF4, 9)].data;
+ s16 *data = gTasks[CreateTask(Task_MoveElevator, 9)].data;
u16 floorDelta;
data[1] = 0;
data[2] = 0;
data[4] = 1;
+ // descending
if (gSpecialVar_0x8005 > gSpecialVar_0x8006)
{
floorDelta = gSpecialVar_0x8005 - gSpecialVar_0x8006;
- data[6] = 1;
+ data[6] = TRUE;
}
else
{
floorDelta = gSpecialVar_0x8006 - gSpecialVar_0x8005;
- data[6] = 0;
+ data[6] = FALSE;
}
if (floorDelta > 8)
floorDelta = 8;
- data[5] = gUnknown_085B2C18[floorDelta];
+ data[5] = sElevatorTripLength[floorDelta];
SetCameraPanningCallback(NULL);
- sub_8139C2C(floorDelta, data[6]);
+ MoveElevatorWindowLights(floorDelta, data[6]);
PlaySE(SE_ELEBETA);
}
-static void sub_8139AF4(u8 taskId)
+static void Task_MoveElevator(u8 taskId)
{
s16 *data = gTasks[taskId].data;
data[1]++;
@@ -1867,6 +1894,8 @@ static void sub_8139AF4(u8 taskId)
data[2]++;
data[4] = -data[4];
SetCameraPanning(0, data[4]);
+
+ // arrived at floor
if (data[2] == data[5])
{
PlaySE(SE_PINPON);
@@ -1877,44 +1906,44 @@ static void sub_8139AF4(u8 taskId)
}
}
-void sub_8139B60(void)
+void ShowDeptStoreElevatorFloorSelect(void)
{
int xPos;
- gUnknown_0203AB5E = AddWindow(&gUnknown_085B2BAC);
- SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0);
+ sTutorMoveAndElevatorWindowId = AddWindow(&gElevatorFloor_WindowTemplate);
+ SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0);
xPos = GetStringCenterAlignXOffset(1, gText_ElevatorNowOn, 64);
- AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL);
- xPos = GetStringCenterAlignXOffset(1, gElevatorFloorsTable[gSpecialVar_0x8005], 64);
- AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gElevatorFloorsTable[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL);
+ xPos = GetStringCenterAlignXOffset(1, gDeptStoreFloorNames[gSpecialVar_0x8005], 64);
+ AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, gDeptStoreFloorNames[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL);
- PutWindowTilemap(gUnknown_0203AB5E);
- CopyWindowToVram(gUnknown_0203AB5E, 3);
+ PutWindowTilemap(sTutorMoveAndElevatorWindowId);
+ CopyWindowToVram(sTutorMoveAndElevatorWindowId, 3);
}
-void sub_8139C10(void)
+void CloseDeptStoreElevatorWindow(void)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_0203AB5E, TRUE);
- RemoveWindow(gUnknown_0203AB5E);
+ ClearStdWindowAndFrameToTransparent(sTutorMoveAndElevatorWindowId, TRUE);
+ RemoveWindow(sTutorMoveAndElevatorWindowId);
}
-static void sub_8139C2C(u16 a1, bool8 descending)
+static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending)
{
- static const u8 gUnknown_085B2C21[] = { 0x03, 0x06, 0x09, 0x0c, 0x0f, 0x12, 0x15, 0x18, 0x1b };
+ static const u8 sElevatorLightCycles[] = { 3, 6, 9, 12, 15, 18, 21, 24, 27 };
- if (FuncIsActiveTask(MoveElevatorWindowLights) != TRUE)
+ if (FuncIsActiveTask(Task_MoveElevatorWindowLights) != TRUE)
{
- u8 taskId = CreateTask(MoveElevatorWindowLights, 8);
+ u8 taskId = CreateTask(Task_MoveElevatorWindowLights, 8);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = descending;
- gTasks[taskId].data[3] = gUnknown_085B2C21[a1];
+ gTasks[taskId].data[3] = sElevatorLightCycles[floorDelta];
}
}
-static void MoveElevatorWindowLights(u8 taskId)
+static void Task_MoveElevatorWindowLights(u8 taskId)
{
u8 x, y;
s16 *data = gTasks[taskId].data;
@@ -1922,6 +1951,8 @@ static void MoveElevatorWindowLights(u8 taskId)
if (data[1] == 6)
{
data[0]++;
+
+ // ascending
if (data[2] == FALSE)
{
for (y = 0; y < 3; y++)
@@ -1932,6 +1963,7 @@ static void MoveElevatorWindowLights(u8 taskId)
}
}
}
+ // descending
else
{
for (y = 0; y < 3; y++)
@@ -1952,7 +1984,7 @@ static void MoveElevatorWindowLights(u8 taskId)
data[1]++;
}
-void sub_8139D98(void)
+void BufferVarsForIVRater(void)
{
u8 i;
u32 ivStorage[NUM_STATS];
@@ -1993,23 +2025,44 @@ void sub_8139D98(void)
}
}
-bool8 warp0_in_pokecenter(void)
-{
- static const u16 gUnknown_085B2C2A[] = { 0x0202, 0x0301, 0x0405, 0x0504, 0x0604, 0x0700, 0x0804, 0x090b, 0x0a05, 0x0b05, 0x0c02, 0x0d06, 0x0e03, 0x0f02, 0x100c, 0x100a, 0x1a35, 0x193c, 0xFFFF };
+bool8 UsedPokemonCenterWarp(void)
+{
+ static const u16 sPokemonCenters[] =
+ {
+ MAP_OLDALE_TOWN_POKEMON_CENTER_1F,
+ MAP_DEWFORD_TOWN_POKEMON_CENTER_1F,
+ MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F,
+ MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F,
+ MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F,
+ MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F,
+ MAP_PETALBURG_CITY_POKEMON_CENTER_1F,
+ MAP_SLATEPORT_CITY_POKEMON_CENTER_1F,
+ MAP_MAUVILLE_CITY_POKEMON_CENTER_1F,
+ MAP_RUSTBORO_CITY_POKEMON_CENTER_1F,
+ MAP_FORTREE_CITY_POKEMON_CENTER_1F,
+ MAP_LILYCOVE_CITY_POKEMON_CENTER_1F,
+ MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F,
+ MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F,
+ MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F,
+ MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F,
+ MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F,
+ MAP_UNION_ROOM,
+ 0xFFFF
+ };
int i;
u16 map = (gLastUsedWarp.mapGroup << 8) + gLastUsedWarp.mapNum;
- for (i = 0; gUnknown_085B2C2A[i] != 0xFFFF; i++)
+ for (i = 0; sPokemonCenters[i] != 0xFFFF; i++)
{
- if (gUnknown_085B2C2A[i] == map)
+ if (sPokemonCenters[i] == map)
return TRUE;
}
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))
{
@@ -2018,130 +2071,191 @@ bool32 sub_8139ED0(void)
return TRUE;
}
-void UpdateFrontierManiac(u16 a0)
+void UpdateFrontierManiac(u16 daysSince)
{
u16 *var = GetVarPointer(VAR_FRONTIER_MANIAC_FACILITY);
- *var += a0;
- *var %= 10;
-}
-
-void sub_8139F20(void)
-{
- static const u8 *const gUnknown_085B2C50[][3] = {
- { BattleFrontier_Lounge2_Text_260971, BattleFrontier_Lounge2_Text_260A1E, BattleFrontier_Lounge2_Text_260AE7 },
- { BattleFrontier_Lounge2_Text_2619AC, BattleFrontier_Lounge2_Text_261A91, BattleFrontier_Lounge2_Text_261B0C },
- { BattleFrontier_Lounge2_Text_261B95, BattleFrontier_Lounge2_Text_261B95, BattleFrontier_Lounge2_Text_261B95 },
- { BattleFrontier_Lounge2_Text_261C1A, BattleFrontier_Lounge2_Text_261C1A, BattleFrontier_Lounge2_Text_261C1A },
- { BattleFrontier_Lounge2_Text_260BC4, BattleFrontier_Lounge2_Text_260C6D, BattleFrontier_Lounge2_Text_260D3A },
- { BattleFrontier_Lounge2_Text_260E1E, BattleFrontier_Lounge2_Text_260EC7, BattleFrontier_Lounge2_Text_260F74 },
- { BattleFrontier_Lounge2_Text_2614E6, BattleFrontier_Lounge2_Text_261591, BattleFrontier_Lounge2_Text_26166F },
- { BattleFrontier_Lounge2_Text_261282, BattleFrontier_Lounge2_Text_261329, BattleFrontier_Lounge2_Text_261403 },
- { BattleFrontier_Lounge2_Text_261026, BattleFrontier_Lounge2_Text_2610CC, BattleFrontier_Lounge2_Text_261194 },
- { BattleFrontier_Lounge2_Text_26174D, BattleFrontier_Lounge2_Text_2617F9, BattleFrontier_Lounge2_Text_2618C4 },
+ *var += daysSince;
+ *var %= FRONTIER_MANIAC_FACILITY_COUNT;
+}
+
+void ShowFrontierManiacMessage(void)
+{
+ static const u8 *const sFrontierManiacMessages[][FRONTIER_MANIAC_MESSAGE_COUNT] =
+ {
+ [FRONTIER_MANIAC_BATTLE_TOWER_SINGLES] =
+ {
+ BattleFrontier_Lounge2_Text_SalonMaidenIsThere,
+ BattleFrontier_Lounge2_Text_SalonMaidenSilverMons,
+ BattleFrontier_Lounge2_Text_SalonMaidenGoldMons
+ },
+ [FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES] =
+ {
+ BattleFrontier_Lounge2_Text_DoubleBattleAdvice1,
+ BattleFrontier_Lounge2_Text_DoubleBattleAdvice2,
+ BattleFrontier_Lounge2_Text_DoubleBattleAdvice3
+ },
+ [FRONTIER_MANIAC_BATTLE_TOWER_MULTIS] =
+ {
+ BattleFrontier_Lounge2_Text_MultiBattleAdvice,
+ BattleFrontier_Lounge2_Text_MultiBattleAdvice,
+ BattleFrontier_Lounge2_Text_MultiBattleAdvice
+ },
+ [FRONTIER_MANIAC_BATTLE_TOWER_LINK] =
+ {
+ BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice,
+ BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice,
+ BattleFrontier_Lounge2_Text_LinkMultiBattleAdvice
+ },
+ [FRONTIER_MANIAC_BATTLE_DOME] =
+ {
+ BattleFrontier_Lounge2_Text_DomeAceIsThere,
+ BattleFrontier_Lounge2_Text_DomeAceSilverMons,
+ BattleFrontier_Lounge2_Text_DomeAceGoldMons
+ },
+ [FRONTIER_MANIAC_BATTLE_FACTORY] =
+ {
+ BattleFrontier_Lounge2_Text_FactoryHeadIsThere,
+ BattleFrontier_Lounge2_Text_FactoryHeadSilverMons,
+ BattleFrontier_Lounge2_Text_FactoryHeadGoldMons
+ },
+ [FRONTIER_MANIAC_BATTLE_PALACE] =
+ {
+ BattleFrontier_Lounge2_Text_PalaceMavenIsThere,
+ BattleFrontier_Lounge2_Text_PalaceMavenSilverMons,
+ BattleFrontier_Lounge2_Text_PalaceMavenGoldMons
+ },
+ [FRONTIER_MANIAC_BATTLE_ARENA] =
+ {
+ BattleFrontier_Lounge2_Text_ArenaTycoonIsThere,
+ BattleFrontier_Lounge2_Text_ArenaTycoonSilverMons,
+ BattleFrontier_Lounge2_Text_ArenaTycoonGoldMons
+ },
+ [FRONTIER_MANIAC_BATTLE_PIKE] =
+ {
+ BattleFrontier_Lounge2_Text_PikeQueenIsThere,
+ BattleFrontier_Lounge2_Text_PikeQueenSilverMons,
+ BattleFrontier_Lounge2_Text_PikeQueenGoldMons
+ },
+ [FRONTIER_MANIAC_BATTLE_PYRAMID] =
+ {
+ BattleFrontier_Lounge2_Text_PyramidKingIsThere,
+ BattleFrontier_Lounge2_Text_PyramidKingSilverMons,
+ BattleFrontier_Lounge2_Text_PyramidKingGoldMons
+ },
};
- static const u8 gUnknown_085B2CC8[][2] = {
- { 0x15, 0x38 },
- { 0x15, 0x23 },
- { 0xff, 0xff },
- { 0xff, 0xff },
- { 0x02, 0x04 },
- { 0x07, 0x15 },
- { 0x07, 0x15 },
- { 0x0e, 0x1c },
- { 0x0d, 0x70 },
- { 0x07, 0x38 }
+ static const u8 sFrontierManiacStreakThresholds[][FRONTIER_MANIAC_MESSAGE_COUNT - 1] =
+ {
+ [FRONTIER_MANIAC_BATTLE_TOWER_SINGLES] = { 21, 56 },
+ [FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES] = { 21, 35 },
+ [FRONTIER_MANIAC_BATTLE_TOWER_MULTIS] = { 255, 255 },
+ [FRONTIER_MANIAC_BATTLE_TOWER_LINK] = { 255, 255 },
+ [FRONTIER_MANIAC_BATTLE_DOME] = { 2, 4 },
+ [FRONTIER_MANIAC_BATTLE_FACTORY] = { 7, 21 },
+ [FRONTIER_MANIAC_BATTLE_PALACE] = { 7, 21 },
+ [FRONTIER_MANIAC_BATTLE_ARENA] = { 14, 28 },
+ [FRONTIER_MANIAC_BATTLE_PIKE] = { 13, 112 }, //BUG: 112 (0x70) is probably a mistake; the Pike Queen is battled twice well before that
+ [FRONTIER_MANIAC_BATTLE_PYRAMID] = { 7, 56 }
};
u8 i;
- u16 unk = 0;
- u16 var = VarGet(VAR_FRONTIER_MANIAC_FACILITY);
- switch (var)
+ u16 winStreak = 0;
+ u16 facility = VarGet(VAR_FRONTIER_MANIAC_FACILITY);
+
+ switch (facility)
{
- case 0:
- case 1:
- case 2:
- case 3:
- if (gSaveBlock2Ptr->frontier.towerWinStreaks[var][0] >= gSaveBlock2Ptr->frontier.towerWinStreaks[var][1])
+ case FRONTIER_MANIAC_BATTLE_TOWER_SINGLES:
+ case FRONTIER_MANIAC_BATTLE_TOWER_DOUBLES:
+ case FRONTIER_MANIAC_BATTLE_TOWER_MULTIS:
+ case FRONTIER_MANIAC_BATTLE_TOWER_LINK:
+ if (gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.towerWinStreaks[var][0];
+ winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.towerWinStreaks[var][1];
+ winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[facility][FRONTIER_LVL_OPEN];
}
break;
- case 4:
- if (gSaveBlock2Ptr->frontier.domeWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.domeWinStreaks[0][1])
+ case FRONTIER_MANIAC_BATTLE_DOME:
+ if (gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.domeWinStreaks[0][0];
+ winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.domeWinStreaks[0][1];
+ winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN];
}
break;
- case 5:
- if (gSaveBlock2Ptr->frontier.factoryWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.factoryWinStreaks[0][1])
+ case FRONTIER_MANIAC_BATTLE_FACTORY:
+ if (gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.factoryWinStreaks[0][0];
+ winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.factoryWinStreaks[0][1];
+ winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN];
}
break;
- case 6:
- if (gSaveBlock2Ptr->frontier.palaceWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.palaceWinStreaks[0][1])
+ case FRONTIER_MANIAC_BATTLE_PALACE:
+ if (gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.palaceWinStreaks[0][0];
+ winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.palaceWinStreaks[0][1];
+ winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[FRONTIER_MODE_SINGLES][FRONTIER_LVL_OPEN];
}
break;
- case 7:
- if (gSaveBlock2Ptr->frontier.arenaWinStreaks[0] >= gSaveBlock2Ptr->frontier.arenaWinStreaks[1])
+ case FRONTIER_MANIAC_BATTLE_ARENA:
+ if (gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.arenaWinStreaks[0];
+ winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.arenaWinStreaks[1];
+ winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[FRONTIER_LVL_OPEN];
}
break;
- case 8:
- if (gSaveBlock2Ptr->frontier.pikeWinStreaks[0] >= gSaveBlock2Ptr->frontier.pikeWinStreaks[1])
+ case FRONTIER_MANIAC_BATTLE_PIKE:
+ if (gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.pikeWinStreaks[0];
+ winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.pikeWinStreaks[1];
+ winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[FRONTIER_LVL_OPEN];
}
break;
- case 9:
- if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[0] >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[1])
+ case FRONTIER_MANIAC_BATTLE_PYRAMID:
+ if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50]
+ >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN])
{
- unk = gSaveBlock2Ptr->frontier.pyramidWinStreaks[0];
+ winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50];
}
else
{
- unk = gSaveBlock2Ptr->frontier.pyramidWinStreaks[1];
+ winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN];
}
break;
}
- for (i = 0; i < 2 && gUnknown_085B2CC8[var][i] < unk; i++);
+ for (i = 0; i < FRONTIER_MANIAC_MESSAGE_COUNT - 1 && sFrontierManiacStreakThresholds[facility][i] < winStreak; i++);
- ShowFieldMessage(gUnknown_085B2C50[var][i]);
+ ShowFieldMessage(sFrontierManiacMessages[facility][i]);
}
-void sub_813A080(void)
+// gSpecialVar_0x8005 and 0x8006 here are used by MoveElevator
+void BufferBattleTowerElevatorFloors(void)
{
- static const u16 gUnknown_085B2CDC[] = {
- 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x0031, 0x003f, 0x004d, 0x005b, 0x0000
+ static const u16 sBattleTowerStreakThresholds[] = {
+ 7, 14, 21, 28, 35, 49, 63, 77, 91, 0
};
u8 i;
@@ -2155,9 +2269,9 @@ void sub_813A080(void)
return;
}
- for (i = 0; i < 9; i++)
+ for (i = 0; i < ARRAY_COUNT(sBattleTowerStreakThresholds) - 1; i++)
{
- if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode])
+ if (sBattleTowerStreakThresholds[i] > gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode])
{
gSpecialVar_0x8005 = 4;
gSpecialVar_0x8006 = i + 5;
@@ -2169,161 +2283,166 @@ void sub_813A080(void)
gSpecialVar_0x8006 = 12;
}
-void sub_813A128(void)
-{
- u8 taskId = CreateTask(sub_813A2DC, 8);
+// Scrollable Multichoice task data defines
+#define tMaxItemsOnScreen data[0]
+#define tNumItems data[1]
+#define tLeft data[2]
+#define tTop data[3]
+#define tWidth data[4]
+#define tHeight data[5]
+#define tKeepOpenAfterSelect data[6]
+#define tScrollOffset data[7]
+#define tSelectedRow data[8]
+#define tScrollMultiId data[11]
+#define tScrollArrowId data[12]
+#define tWindowId data[13]
+#define tListTaskId data[14]
+#define tTaskId data[15]
+// data[9] and [10] unused
+
+void ShowScrollableMultichoice(void)
+{
+ u8 taskId = CreateTask(Task_ShowScrollableMultichoice, 8);
struct Task *task = &gTasks[taskId];
- task->data[11] = gSpecialVar_0x8004;
+ task->tScrollMultiId = gSpecialVar_0x8004;
switch (gSpecialVar_0x8004)
{
- case 0:
- task->data[0] = 1;
- task->data[1] = 1;
- task->data[2] = 1;
- task->data[3] = 1;
- task->data[4] = 1;
- task->data[5] = 1;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_NONE:
+ task->tMaxItemsOnScreen = 1;
+ task->tNumItems = 1;
+ task->tLeft = 1;
+ task->tTop = 1;
+ task->tWidth = 1;
+ task->tHeight = 1;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 1:
- task->data[0] = 5;
- task->data[1] = 8;
- task->data[2] = 1;
- task->data[3] = 1;
- task->data[4] = 9;
- task->data[5] = 10;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_GLASS_WORKSHOP_VENDOR:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN - 1;
+ task->tNumItems = 8;
+ task->tLeft = 1;
+ task->tTop = 1;
+ task->tWidth = 9;
+ task->tHeight = 10;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 2:
- task->data[0] = 6;
- task->data[1] = 12;
- task->data[2] = 1;
- task->data[3] = 1;
- task->data[4] = 7;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_POKEMON_FAN_CLUB_RATER:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 12;
+ task->tLeft = 1;
+ task->tTop = 1;
+ task->tWidth = 7;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 3:
- task->data[0] = 6;
- task->data[1] = 11;
- task->data[2] = 14;
- task->data[3] = 1;
- task->data[4] = 15;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 11;
+ task->tLeft = 14;
+ task->tTop = 1;
+ task->tWidth = 15;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 4:
- task->data[0] = 6;
- task->data[1] = 6;
- task->data[2] = 14;
- task->data[3] = 1;
- task->data[4] = 15;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 6;
+ task->tLeft = 14;
+ task->tTop = 1;
+ task->tWidth = 15;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 5:
- task->data[0] = 6;
- task->data[1] = 7;
- task->data[2] = 14;
- task->data[3] = 1;
- task->data[4] = 15;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 7;
+ task->tLeft = 14;
+ task->tTop = 1;
+ task->tWidth = 15;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 6:
- task->data[0] = 6;
- task->data[1] = 10;
- task->data[2] = 14;
- task->data[3] = 1;
- task->data[4] = 15;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 10;
+ task->tLeft = 14;
+ task->tTop = 1;
+ task->tWidth = 15;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 7:
- task->data[0] = 6;
- task->data[1] = 12;
- task->data[2] = 15;
- task->data[3] = 1;
- task->data[4] = 14;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BERRY_POWDER_VENDOR:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 12;
+ task->tLeft = 15;
+ task->tTop = 1;
+ task->tWidth = 14;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 8:
- task->data[0] = 6;
- task->data[1] = 10;
- task->data[2] = 17;
- task->data[3] = 1;
- task->data[4] = 11;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_RECEPTIONIST:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 10;
+ task->tLeft = 17;
+ task->tTop = 1;
+ task->tWidth = 11;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 9:
- case 10:
- task->data[0] = 6;
- task->data[1] = 11;
- task->data[2] = 15;
- task->data[3] = 1;
- task->data[4] = 14;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BF_MOVE_TUTOR_1:
+ case SCROLL_MULTI_BF_MOVE_TUTOR_2:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 11;
+ task->tLeft = 15;
+ task->tTop = 1;
+ task->tWidth = 14;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 11:
- task->data[0] = 6;
- task->data[1] = 7;
- task->data[2] = 19;
- task->data[3] = 1;
- task->data[4] = 10;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_SS_TIDAL_DESTINATION:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 7;
+ task->tLeft = 19;
+ task->tTop = 1;
+ task->tWidth = 10;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
- case 12:
- task->data[0] = 6;
- task->data[1] = 7;
- task->data[2] = 17;
- task->data[3] = 1;
- task->data[4] = 12;
- task->data[5] = 12;
- task->data[6] = 0;
- task->data[15] = taskId;
+ case SCROLL_MULTI_BATTLE_TENT_RULES:
+ task->tMaxItemsOnScreen = MAX_SCROLL_MULTI_ON_SCREEN;
+ task->tNumItems = 7;
+ task->tLeft = 17;
+ task->tTop = 1;
+ task->tWidth = 12;
+ task->tHeight = 12;
+ task->tKeepOpenAfterSelect = FALSE;
+ task->tTaskId = taskId;
break;
default:
- gSpecialVar_Result = 0x7F;
+ gSpecialVar_Result = MULTI_B_PRESSED;
DestroyTask(taskId);
break;
}
}
-static const u8 *const gUnknown_085B2CF0[][16] = {
+static const u8 *const sScrollableMultichoiceOptions[][MAX_SCROLL_MULTI_LENGTH] =
+{
+ [SCROLL_MULTI_NONE] =
{
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_GLASS_WORKSHOP_VENDOR] =
{
gText_BlueFlute,
gText_YellowFlute,
@@ -2332,16 +2451,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_BlackFlute,
gText_PrettyChair,
gText_PrettyDesk,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_POKEMON_FAN_CLUB_RATER] =
{
gText_0Pts,
gText_10Pts,
@@ -2354,12 +2466,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_80Pts,
gText_90Pts,
gText_100Pts,
- gText_QuestionMark,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_QuestionMark
},
+ [SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1] =
{
gText_KissPoster16BP,
gText_KissCushion32BP,
@@ -2371,31 +2480,18 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_CyndaquilDoll80BP,
gText_ChikoritaDoll80BP,
gText_TotodileDoll80BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2] =
{
gText_LaprasDoll128BP,
gText_SnorlaxDoll128BP,
gText_VenusaurDoll256BP,
gText_CharizardDoll256BP,
gText_BlastoiseDoll256BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR] =
{
gText_Protein1BP,
gText_Calcium1BP,
@@ -2403,17 +2499,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_Zinc1BP,
gText_Carbos1BP,
gText_HpUp1BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR] =
{
gText_Leftovers48BP,
gText_WhiteHerb48BP,
@@ -2424,14 +2512,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_KingsRock64BP,
gText_FocusBand64BP,
gText_ScopeLens64BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BERRY_POWDER_VENDOR] =
{
gText_EnergyPowder50,
gText_EnergyRoot80,
@@ -2444,12 +2527,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_Zinc1000,
gText_HPUp1000,
gText_PPUp3000,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_RECEPTIONIST] =
{
gText_BattleTower2,
gText_BattleDome,
@@ -2460,14 +2540,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_BattlePyramid,
gText_RankingHall,
gText_ExchangeService,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_MOVE_TUTOR_1] =
{
gText_Softboiled16BP,
gText_SeismicToss24BP,
@@ -2479,13 +2554,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_Counter48BP,
gText_ThunderWave48BP,
gText_SwordsDance48BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BF_MOVE_TUTOR_2] =
{
gText_DefenseCurl16BP,
gText_Snore24BP,
@@ -2497,13 +2568,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_IcePunch48BP,
gText_ThunderPunch48BP,
gText_FirePunch48BP,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_SS_TIDAL_DESTINATION] =
{
gText_SlateportCity,
gText_BattleFrontier,
@@ -2511,17 +2578,9 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_NavelRock,
gText_BirthIsland,
gText_FarawayIsland,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
},
+ [SCROLL_MULTI_BATTLE_TENT_RULES] =
{
gText_BattleTrainers,
gText_BattleBasics,
@@ -2529,142 +2588,134 @@ static const u8 *const gUnknown_085B2CF0[][16] = {
gText_PokemonMoves,
gText_Underpowered,
gText_WhenInDanger,
- gText_Exit,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL
+ gText_Exit
}
};
-static void sub_813A2DC(u8 taskId)
+static void Task_ShowScrollableMultichoice(u8 taskId)
{
- u32 unk1;
+ u32 width;
u8 i, windowId;
struct WindowTemplate template;
struct Task *task = &gTasks[taskId];
ScriptContext2_Enable();
- gUnknown_0203AB68 = 0;
- gUnknown_0203AB6C = 0x40;
- sub_813AA60(task->data[11], 0);
- sub_813ACE8(task->data[11], 0);
- gUnknown_0203AB64 = AllocZeroed(task->data[1] * 8);
- gUnknown_0203AB6A = 0;
- sub_813A42C();
+ sScrollableMultichoice_ScrollOffset = 0;
+ sScrollableMultichoice_ItemSpriteId = MAX_SPRITES;
+ FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, 0);
+ ShowBattleFrontierTutorWindow(task->tScrollMultiId, 0);
+ sScrollableMultichoice_ListMenuItem = AllocZeroed(task->tNumItems * 8);
+ sFrontierExchangeCorner_NeverRead = 0;
+ InitScrollableMultichoice();
- for (unk1 = 0, i = 0; i < task->data[1]; i++)
+ for (width = 0, i = 0; i < task->tNumItems; i++)
{
- const u8 *text = gUnknown_085B2CF0[gSpecialVar_0x8004][i];
- gUnknown_0203AB64[i].name = text;
- gUnknown_0203AB64[i].id = i;
- unk1 = display_text_and_get_width(text, unk1);
+ const u8 *text = sScrollableMultichoiceOptions[gSpecialVar_0x8004][i];
+ sScrollableMultichoice_ListMenuItem[i].name = text;
+ sScrollableMultichoice_ListMenuItem[i].id = i;
+ width = DisplayTextAndGetWidth(text, width);
}
- task->data[4] = convert_pixel_width_to_tile_width(unk1);
+ task->tWidth = ConvertPixelWidthToTileWidth(width);
- if (task->data[2] + task->data[4] > 0x1D)
+ if (task->tLeft + task->tWidth > MAX_MULTICHOICE_WIDTH + 1)
{
- int unk2 = 0x1D - task->data[4];
- if (unk2 < 0)
+ int adjustedLeft = MAX_MULTICHOICE_WIDTH + 1 - task->tWidth;
+ if (adjustedLeft < 0)
{
- task->data[2] = 0;
+ task->tLeft = 0;
}
else
{
- task->data[2] = unk2;
+ task->tLeft = adjustedLeft;
}
}
- template = CreateWindowTemplate(0, task->data[2], task->data[3], task->data[4], task->data[5], 0xF, 0x64);
+ template = CreateWindowTemplate(0, task->tLeft, task->tTop, task->tWidth, task->tHeight, 0xF, 0x64);
windowId = AddWindow(&template);
- task->data[13] = windowId;
+ task->tWindowId = windowId;
SetStandardWindowBorderStyle(windowId, 0);
- gUnknown_030061D0.totalItems = task->data[1];
- gUnknown_030061D0.maxShowed = task->data[0];
- gUnknown_030061D0.windowId = task->data[13];
+ gScrollableMultichoice_ListMenuTemplate.totalItems = task->tNumItems;
+ gScrollableMultichoice_ListMenuTemplate.maxShowed = task->tMaxItemsOnScreen;
+ gScrollableMultichoice_ListMenuTemplate.windowId = task->tWindowId;
- sub_813A694(taskId);
- task->data[14] = ListMenuInit(&gUnknown_030061D0, task->data[7], task->data[8]);
+ ScrollableMultichoice_UpdateScrollArrows(taskId);
+ task->tListTaskId = ListMenuInit(&gScrollableMultichoice_ListMenuTemplate, task->tScrollOffset, task->tSelectedRow);
schedule_bg_copy_tilemap_to_vram(0);
- gTasks[taskId].func = sub_813A4EC;
+ gTasks[taskId].func = ScrollableMultichoice_ProcessInput;
}
-static void sub_813A42C(void)
+static void InitScrollableMultichoice(void)
{
- gUnknown_030061D0.items = gUnknown_0203AB64;
- gUnknown_030061D0.moveCursorFunc = sub_813A46C;
- gUnknown_030061D0.itemPrintFunc = NULL;
- gUnknown_030061D0.totalItems = 1;
- gUnknown_030061D0.maxShowed = 1;
- gUnknown_030061D0.windowId = 0;
- gUnknown_030061D0.header_X = 0;
- gUnknown_030061D0.item_X = 8;
- gUnknown_030061D0.cursor_X = 0;
- gUnknown_030061D0.upText_Y = 1;
- gUnknown_030061D0.cursorPal = 2;
- gUnknown_030061D0.fillValue = 1;
- gUnknown_030061D0.cursorShadowPal = 3;
- gUnknown_030061D0.lettersSpacing = 0;
- gUnknown_030061D0.itemVerticalPadding = 0;
- gUnknown_030061D0.scrollMultiple = 0;
- gUnknown_030061D0.fontId = 1;
- gUnknown_030061D0.cursorKind = 0;
+ gScrollableMultichoice_ListMenuTemplate.items = sScrollableMultichoice_ListMenuItem;
+ gScrollableMultichoice_ListMenuTemplate.moveCursorFunc = ScrollableMultichoice_MoveCursor;
+ gScrollableMultichoice_ListMenuTemplate.itemPrintFunc = NULL;
+ gScrollableMultichoice_ListMenuTemplate.totalItems = 1;
+ gScrollableMultichoice_ListMenuTemplate.maxShowed = 1;
+ gScrollableMultichoice_ListMenuTemplate.windowId = 0;
+ gScrollableMultichoice_ListMenuTemplate.header_X = 0;
+ gScrollableMultichoice_ListMenuTemplate.item_X = 8;
+ gScrollableMultichoice_ListMenuTemplate.cursor_X = 0;
+ gScrollableMultichoice_ListMenuTemplate.upText_Y = 1;
+ gScrollableMultichoice_ListMenuTemplate.cursorPal = 2;
+ gScrollableMultichoice_ListMenuTemplate.fillValue = 1;
+ gScrollableMultichoice_ListMenuTemplate.cursorShadowPal = 3;
+ gScrollableMultichoice_ListMenuTemplate.lettersSpacing = 0;
+ gScrollableMultichoice_ListMenuTemplate.itemVerticalPadding = 0;
+ gScrollableMultichoice_ListMenuTemplate.scrollMultiple = 0;
+ gScrollableMultichoice_ListMenuTemplate.fontId = 1;
+ gScrollableMultichoice_ListMenuTemplate.cursorKind = 0;
}
-static void sub_813A46C(s32 itemIndex, bool8 onInit, struct ListMenu *list)
+static void ScrollableMultichoice_MoveCursor(s32 itemIndex, bool8 onInit, struct ListMenu *list)
{
u8 taskId;
PlaySE(SE_SELECT);
- taskId = FindTaskIdByFunc(sub_813A4EC);
+ taskId = FindTaskIdByFunc(ScrollableMultichoice_ProcessInput);
if (taskId != 0xFF)
{
- u16 misc;
+ u16 selection;
struct Task *task = &gTasks[taskId];
- ListMenuGetScrollAndRow(task->data[14], &misc, NULL);
- gUnknown_0203AB68 = misc;
- ListMenuGetCurrentItemArrayId(task->data[14], &misc);
- sub_813AC44(task->data[11], gUnknown_0203AB6A);
- sub_813AA60(task->data[11], misc);
- sub_813AD34(task->data[11], misc);
- gUnknown_0203AB6A = misc;
+ ListMenuGetScrollAndRow(task->tListTaskId, &selection, NULL);
+ sScrollableMultichoice_ScrollOffset = selection;
+ ListMenuGetCurrentItemArrayId(task->tListTaskId, &selection);
+ HideFrontierExchangeCornerItemIcon(task->tScrollMultiId, sFrontierExchangeCorner_NeverRead);
+ FillFrontierExchangeCornerWindowAndItemIcon(task->tScrollMultiId, selection);
+ ShowBattleFrontierTutorMoveDescription(task->tScrollMultiId, selection);
+ sFrontierExchangeCorner_NeverRead = selection;
}
}
-static void sub_813A4EC(u8 taskId)
+static void ScrollableMultichoice_ProcessInput(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- s32 input = ListMenu_ProcessInput(task->data[14]);
+ s32 input = ListMenu_ProcessInput(task->tListTaskId);
switch (input)
{
case LIST_NOTHING_CHOSEN:
break;
case LIST_CANCEL:
- gSpecialVar_Result = 0x7F;
+ gSpecialVar_Result = MULTI_B_PRESSED;
PlaySE(SE_SELECT);
- sub_813A570(taskId);
+ CloseScrollableMultichoice(taskId);
break;
default:
gSpecialVar_Result = input;
PlaySE(SE_SELECT);
- if (!task->data[6])
+ if (!task->tKeepOpenAfterSelect)
{
- sub_813A570(taskId);
+ CloseScrollableMultichoice(taskId);
}
- else if (input == task->data[1] - 1)
+ // if selected option was the last one (Exit)
+ else if (input == task->tNumItems - 1)
{
- sub_813A570(taskId);
+ CloseScrollableMultichoice(taskId);
}
else
{
- sub_813A738(taskId);
+ ScrollableMultichoice_RemoveScrollArrows(taskId);
task->func = sub_813A600;
EnableBothScriptContexts();
}
@@ -2672,37 +2723,39 @@ static void sub_813A4EC(u8 taskId)
}
}
-static void sub_813A570(u8 taskId)
+static void CloseScrollableMultichoice(u8 taskId)
{
- u16 array;
+ u16 selection;
struct Task *task = &gTasks[taskId];
- ListMenuGetCurrentItemArrayId(task->data[14], &array);
- sub_813AC44(task->data[11], array);
- sub_813A738(taskId);
- DestroyListMenuTask(task->data[14], NULL, NULL);
- Free(gUnknown_0203AB64);
- ClearStdWindowAndFrameToTransparent(task->data[13], 1);
- FillWindowPixelBuffer(task->data[13], PIXEL_FILL(0));
- CopyWindowToVram(task->data[13], 2);
- RemoveWindow(task->data[13]);
+ ListMenuGetCurrentItemArrayId(task->tListTaskId, &selection);
+ HideFrontierExchangeCornerItemIcon(task->tScrollMultiId, selection);
+ ScrollableMultichoice_RemoveScrollArrows(taskId);
+ DestroyListMenuTask(task->tListTaskId, NULL, NULL);
+ Free(sScrollableMultichoice_ListMenuItem);
+ ClearStdWindowAndFrameToTransparent(task->tWindowId, 1);
+ FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0));
+ CopyWindowToVram(task->tWindowId, 2);
+ RemoveWindow(task->tWindowId);
DestroyTask(taskId);
EnableBothScriptContexts();
}
+// Functionally unused; tKeepOpenAfterSelect is only != 0 in unused functions
static void sub_813A600(u8 taskId)
{
- switch (gTasks[taskId].data[6])
+ switch (gTasks[taskId].tKeepOpenAfterSelect)
{
case 1:
default:
break;
case 2:
- gTasks[taskId].data[6] = 1;
+ gTasks[taskId].tKeepOpenAfterSelect = 1;
gTasks[taskId].func = sub_813A664;
break;
}
}
+// Never called
void sub_813A630(void)
{
u8 taskId = FindTaskIdByFunc(sub_813A600);
@@ -2712,20 +2765,20 @@ void sub_813A630(void)
}
else
{
- gTasks[taskId].data[6]++;
+ gTasks[taskId].tKeepOpenAfterSelect++;
}
}
static void sub_813A664(u8 taskId)
{
ScriptContext2_Enable();
- sub_813A694(taskId);
- gTasks[taskId].func = sub_813A4EC;
+ ScrollableMultichoice_UpdateScrollArrows(taskId);
+ gTasks[taskId].func = ScrollableMultichoice_ProcessInput;
}
-static void sub_813A694(u8 taskId)
+static void ScrollableMultichoice_UpdateScrollArrows(u8 taskId)
{
- static const struct ScrollArrowsTemplate gUnknown_085B3030 = {
+ static const struct ScrollArrowsTemplate sScrollableMultichoice_ScrollArrowsTemplate = {
.firstArrowType = SCROLL_ARROW_UP,
.firstX = 0,
.firstY = 0,
@@ -2740,34 +2793,51 @@ static void sub_813A694(u8 taskId)
};
struct Task *task = &gTasks[taskId];
- struct ScrollArrowsTemplate template = gUnknown_085B3030;
- if (task->data[0] != task->data[1])
+ struct ScrollArrowsTemplate template = sScrollableMultichoice_ScrollArrowsTemplate;
+ if (task->tMaxItemsOnScreen != task->data[1])
{
- template.firstX = (task->data[4] / 2) * 8 + 12 + (task->data[2] - 1) * 8;
+ template.firstX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8;
template.firstY = 8;
- template.secondX = (task->data[4] / 2) * 8 + 12 + (task->data[2] - 1) * 8;
- template.secondY = task->data[5] * 8 + 10;
+ template.secondX = (task->tWidth / 2) * 8 + 12 + (task->tLeft - 1) * 8;
+ template.secondY = task->tHeight * 8 + 10;
template.fullyUpThreshold = 0;
- template.fullyDownThreshold = task->data[1] - task->data[0];
- task->data[12] = AddScrollIndicatorArrowPair(&template, &gUnknown_0203AB68);
+ template.fullyDownThreshold = task->data[1] - task->tMaxItemsOnScreen;
+ task->tScrollArrowId = AddScrollIndicatorArrowPair(&template, &sScrollableMultichoice_ScrollOffset);
}
}
-static void sub_813A738(u8 taskId)
+static void ScrollableMultichoice_RemoveScrollArrows(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- if (task->data[0] != task->data[1])
+ if (task->tMaxItemsOnScreen != task->data[1])
{
- RemoveScrollIndicatorArrowPair(task->data[12]);
+ RemoveScrollIndicatorArrowPair(task->tScrollArrowId);
}
}
-void nullsub_55(void)
+// Removed for Emerald (replaced by ShowScrollableMultichoice)
+void ShowGlassWorkshopMenu(void)
{
-
+ /*
+ u8 i;
+ ScriptContext2_Enable();
+ Menu_DrawStdWindowFrame(0, 0, 10, 11);
+ InitMenu(0, 1, 1, 5, 0, 9);
+ gUnknown_0203925C = 0;
+ ClearVerticalScrollIndicatorPalettes();
+ LoadScrollIndicatorPalette();
+ sub_810F2B4();
+ for (i = 0; i < 5; i++)
+ {
+ Menu_PrintText(gUnknown_083F83C0[i], 1, 2 * i + 1);
+ }
+ gUnknown_0203925B = 0;
+ gUnknown_0203925A = ARRAY_COUNT(gUnknown_083F83C0);
+ CreateTask(sub_810F118, 8);
+ */
}
-void sub_813A76C(void)
+void SetBattleTowerLinkPlayerGfx(void)
{
u8 i;
for (i = 0; i < 2; i++)
@@ -2783,34 +2853,34 @@ void sub_813A76C(void)
}
}
-void sub_813A7B8(void)
-{
- static const u8 *const gUnknown_085B3040[] = {
- BattleFrontier_Lounge5_Text_26468D,
- BattleFrontier_Lounge5_Text_2646E5,
- BattleFrontier_Lounge5_Text_264741,
- BattleFrontier_Lounge5_Text_2647A4,
- BattleFrontier_Lounge5_Text_2647FC,
- BattleFrontier_Lounge5_Text_264858,
- BattleFrontier_Lounge5_Text_2648BE,
- BattleFrontier_Lounge5_Text_264916,
- BattleFrontier_Lounge5_Text_264972,
- BattleFrontier_Lounge5_Text_2649D5,
- BattleFrontier_Lounge5_Text_264A3F,
- BattleFrontier_Lounge5_Text_264A9B,
- BattleFrontier_Lounge5_Text_264AF3,
- BattleFrontier_Lounge5_Text_264B5D,
- BattleFrontier_Lounge5_Text_2648BE,
- BattleFrontier_Lounge5_Text_264BC3,
- BattleFrontier_Lounge5_Text_264C36,
- BattleFrontier_Lounge5_Text_2648BE,
- BattleFrontier_Lounge5_Text_264C95,
- BattleFrontier_Lounge5_Text_264D01,
- BattleFrontier_Lounge5_Text_264D6B,
- BattleFrontier_Lounge5_Text_264DD7,
- BattleFrontier_Lounge5_Text_264E33,
- BattleFrontier_Lounge5_Text_264E8F,
- BattleFrontier_Lounge5_Text_2648BE,
+void ShowNatureGirlMessage(void)
+{
+ static const u8 *const sNatureGirlMessages[] = {
+ [NATURE_HARDY] = BattleFrontier_Lounge5_Text_NatureGirlHardy,
+ [NATURE_LONELY] = BattleFrontier_Lounge5_Text_NatureGirlLonely,
+ [NATURE_BRAVE] = BattleFrontier_Lounge5_Text_NatureGirlBrave,
+ [NATURE_ADAMANT] = BattleFrontier_Lounge5_Text_NatureGirlAdamant,
+ [NATURE_NAUGHTY] = BattleFrontier_Lounge5_Text_NatureGirlNaughty,
+ [NATURE_BOLD] = BattleFrontier_Lounge5_Text_NatureGirlBold,
+ [NATURE_DOCILE] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ [NATURE_RELAXED] = BattleFrontier_Lounge5_Text_NatureGirlRelaxed,
+ [NATURE_IMPISH] = BattleFrontier_Lounge5_Text_NatureGirlImpish,
+ [NATURE_LAX] = BattleFrontier_Lounge5_Text_NatureGirlLax,
+ [NATURE_TIMID] = BattleFrontier_Lounge5_Text_NatureGirlTimid,
+ [NATURE_HASTY] = BattleFrontier_Lounge5_Text_NatureGirlHasty,
+ [NATURE_SERIOUS] = BattleFrontier_Lounge5_Text_NatureGirlSerious,
+ [NATURE_JOLLY] = BattleFrontier_Lounge5_Text_NatureGirlJolly,
+ [NATURE_NAIVE] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ [NATURE_MODEST] = BattleFrontier_Lounge5_Text_NatureGirlModest,
+ [NATURE_MILD] = BattleFrontier_Lounge5_Text_NatureGirlMild,
+ [NATURE_QUIET] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ [NATURE_BASHFUL] = BattleFrontier_Lounge5_Text_NatureGirlBashful,
+ [NATURE_RASH] = BattleFrontier_Lounge5_Text_NatureGirlRash,
+ [NATURE_CALM] = BattleFrontier_Lounge5_Text_NatureGirlCalm,
+ [NATURE_GENTLE] = BattleFrontier_Lounge5_Text_NatureGirlGentle,
+ [NATURE_SASSY] = BattleFrontier_Lounge5_Text_NatureGirlSassy,
+ [NATURE_CAREFUL] = BattleFrontier_Lounge5_Text_NatureGirlCareful,
+ [NATURE_QUIRKY] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
};
u8 nature;
@@ -2821,94 +2891,110 @@ void sub_813A7B8(void)
}
nature = GetNature(&gPlayerParty[gSpecialVar_0x8004]);
- ShowFieldMessage(gUnknown_085B3040[nature]);
+ ShowFieldMessage(sNatureGirlMessages[nature]);
}
-void UpdateFrontierGambler(u16 a0)
+void UpdateFrontierGambler(u16 daysSince)
{
- u16 *var = GetVarPointer(VAR_FRONTIER_GAMBLER_FACILITY);
- *var += a0;
- *var %= 12;
+ u16 *var = GetVarPointer(VAR_FRONTIER_GAMBLER_CHALLENGE);
+ *var += daysSince;
+ *var %= FRONTIER_GAMBLER_CHALLENGE_COUNT;
}
-void sub_813A820(void)
+void ShowFrontierGamblerLookingMessage(void)
{
- static const u8 *const gUnknown_085B30A4[] = {
- BattleFrontier_Lounge3_Text_262261,
- BattleFrontier_Lounge3_Text_26230D,
- BattleFrontier_Lounge3_Text_2623B9,
- BattleFrontier_Lounge3_Text_262464,
- BattleFrontier_Lounge3_Text_26250E,
- BattleFrontier_Lounge3_Text_2625B8,
- BattleFrontier_Lounge3_Text_26266A,
- BattleFrontier_Lounge3_Text_26271C,
- BattleFrontier_Lounge3_Text_2627C9,
- BattleFrontier_Lounge3_Text_262876,
- BattleFrontier_Lounge3_Text_26291A,
- BattleFrontier_Lounge3_Text_2629BC,
+ static const u8 *const sFrontierGamblerLookingMessages[] =
+ {
+ BattleFrontier_Lounge3_Text_ChallengeBattleTowerSingle,
+ BattleFrontier_Lounge3_Text_ChallengeBattleTowerDouble,
+ BattleFrontier_Lounge3_Text_ChallengeBattleTowerMulti,
+ BattleFrontier_Lounge3_Text_ChallengeBattleDomeSingle,
+ BattleFrontier_Lounge3_Text_ChallengeBattleDomeDouble,
+ BattleFrontier_Lounge3_Text_ChallengeBattleFactorySingle,
+ BattleFrontier_Lounge3_Text_ChallengeBattleFactoryDouble,
+ BattleFrontier_Lounge3_Text_ChallengeBattlePalaceSingle,
+ BattleFrontier_Lounge3_Text_ChallengeBattlePalaceDouble,
+ BattleFrontier_Lounge3_Text_ChallengeBattleArena,
+ BattleFrontier_Lounge3_Text_ChallengeBattlePike,
+ BattleFrontier_Lounge3_Text_ChallengeBattlePyramid,
};
- u16 var = VarGet(VAR_FRONTIER_GAMBLER_FACILITY);
- ShowFieldMessage(gUnknown_085B30A4[var]);
- VarSet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F, var);
-}
-
-void sub_813A854(void)
-{
- static const u8 *const gUnknown_085B30D4[] = {
- BattleFrontier_Lounge3_Text_262C04,
- BattleFrontier_Lounge3_Text_262C90,
- BattleFrontier_Lounge3_Text_262D1C,
- BattleFrontier_Lounge3_Text_262DA7,
- BattleFrontier_Lounge3_Text_262E34,
- BattleFrontier_Lounge3_Text_262EC1,
- BattleFrontier_Lounge3_Text_262F56,
- BattleFrontier_Lounge3_Text_262FEB,
- BattleFrontier_Lounge3_Text_263078,
- BattleFrontier_Lounge3_Text_263105,
- BattleFrontier_Lounge3_Text_26318C,
- BattleFrontier_Lounge3_Text_263211,
+ u16 challenge = VarGet(VAR_FRONTIER_GAMBLER_CHALLENGE);
+ ShowFieldMessage(sFrontierGamblerLookingMessages[challenge]);
+ VarSet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE, challenge);
+}
+
+void ShowFrontierGamblerGoMessage(void)
+{
+ static const u8 *const sFrontierGamblerGoMessages[] =
+ {
+ BattleFrontier_Lounge3_Text_GetToBattleTowerSingle,
+ BattleFrontier_Lounge3_Text_GetToBattleTowerDouble,
+ BattleFrontier_Lounge3_Text_GetToBattleTowerMulti,
+ BattleFrontier_Lounge3_Text_GetToBattleDomeSingle,
+ BattleFrontier_Lounge3_Text_GetToBattleDomeDouble,
+ BattleFrontier_Lounge3_Text_GetToBattleFactorySingle,
+ BattleFrontier_Lounge3_Text_GetToBattleFactoryDouble,
+ BattleFrontier_Lounge3_Text_GetToBattlePalaceSingle,
+ BattleFrontier_Lounge3_Text_GetToBattlePalaceDouble,
+ BattleFrontier_Lounge3_Text_GetToBattleArena,
+ BattleFrontier_Lounge3_Text_GetToBattlePike,
+ BattleFrontier_Lounge3_Text_GetToBattlePyramid,
};
- ShowFieldMessage(gUnknown_085B30D4[VarGet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F)]);
+ ShowFieldMessage(sFrontierGamblerGoMessages[VarGet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE)]);
}
-void sub_813A878(u8 a0)
+void FrontierGamblerSetWonOrLost(bool8 won)
{
- static const u16 gUnknown_085B3104[] = {0x0000, 0x0001, 0x0002, 0x0100, 0x0101, 0x0400, 0x0401, 0x0200, 0x0201, 0x0300, 0x0500, 0x0600};
+ static const u16 sFrontierChallenges[] =
+ {
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_DOUBLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_TOWER, FRONTIER_MODE_MULTIS),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_DOME, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_DOME, FRONTIER_MODE_DOUBLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_DOUBLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_PALACE, FRONTIER_MODE_DOUBLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_ARENA, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_PIKE, FRONTIER_MODE_SINGLES),
+ FRONTIER_CHALLENGE(FRONTIER_FACILITY_PYRAMID, FRONTIER_MODE_SINGLES)
+ };
u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- u16 var2 = VarGet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F);
+ u16 challenge = VarGet(VAR_FRONTIER_GAMBLER_SET_CHALLENGE);
u16 frontierFacilityId = VarGet(VAR_FRONTIER_FACILITY);
- if (VarGet(VAR_FRONTIER_GAMBLER_PLACED_BET_F) == 1)
+ if (VarGet(VAR_FRONTIER_GAMBLER_STATE) == FRONTIER_GAMBLER_PLACED_BET)
{
- if (gUnknown_085B3104[var2] == (frontierFacilityId << 8) + battleMode)
+ if (sFrontierChallenges[challenge] == FRONTIER_CHALLENGE(frontierFacilityId, battleMode))
{
- if (a0 != 0)
+ if (won)
{
- VarSet(VAR_FRONTIER_GAMBLER_PLACED_BET_F, 2);
+ VarSet(VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_WON);
}
else
{
- VarSet(VAR_FRONTIER_GAMBLER_PLACED_BET_F, 3);
+ VarSet(VAR_FRONTIER_GAMBLER_STATE, FRONTIER_GAMBLER_LOST);
}
}
}
}
-void sub_813A8FC(void)
+void UpdateBattlePointsWindow(void)
{
u8 string[32];
u32 x;
StringCopy(ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->frontier.battlePoints, STR_CONV_MODE_RIGHT_ALIGN, 4), gText_BP);
x = GetStringRightAlignXOffset(1, string, 48);
- AddTextPrinterParameterized(gUnknown_0203AB6D, 1, string, x, 1, 0, NULL);
+ AddTextPrinterParameterized(sBattlePointsWindowId, 1, string, x, 1, 0, NULL);
}
-void sub_813A958(void)
+void ShowBattlePointsWindow(void)
{
- static const struct WindowTemplate gUnknown_085B311C = {
+ static const struct WindowTemplate sBattlePoints_WindowTemplate = {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 1,
@@ -2918,19 +3004,19 @@ void sub_813A958(void)
.baseBlock = 8,
};
- gUnknown_0203AB6D = AddWindow(&gUnknown_085B311C);
- SetStandardWindowBorderStyle(gUnknown_0203AB6D, 0);
- sub_813A8FC();
- CopyWindowToVram(gUnknown_0203AB6D, 2);
+ sBattlePointsWindowId = AddWindow(&sBattlePoints_WindowTemplate);
+ SetStandardWindowBorderStyle(sBattlePointsWindowId, 0);
+ UpdateBattlePointsWindow();
+ CopyWindowToVram(sBattlePointsWindowId, 2);
}
-void sub_813A988(void)
+void CloseBattlePointsWindow(void)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_0203AB6D, TRUE);
- RemoveWindow(gUnknown_0203AB6D);
+ ClearStdWindowAndFrameToTransparent(sBattlePointsWindowId, TRUE);
+ RemoveWindow(sBattlePointsWindowId);
}
-void sub_813A9A4(void)
+void TakeFrontierBattlePoints(void)
{
if (gSaveBlock2Ptr->frontier.battlePoints < gSpecialVar_0x8004)
{
@@ -2942,11 +3028,11 @@ void sub_813A9A4(void)
}
}
-void sub_813A9D0(void)
+void GiveFrontierBattlePoints(void)
{
- if (gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004 > 9999)
+ if (gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004 > MAX_BATTLE_FRONTIER_POINTS)
{
- gSaveBlock2Ptr->frontier.battlePoints = 9999;
+ gSaveBlock2Ptr->frontier.battlePoints = MAX_BATTLE_FRONTIER_POINTS;
}
else
{
@@ -2954,14 +3040,14 @@ void sub_813A9D0(void)
}
}
-u16 sub_813AA04(void)
+u16 GetFrontierBattlePoints(void)
{
return gSaveBlock2Ptr->frontier.battlePoints;
}
-void sub_813AA18(void)
+void ShowFrontierExchangeCornerItemIconWindow(void)
{
- static const struct WindowTemplate gUnknown_085B3124 = {
+ static const struct WindowTemplate sFrontierExchangeCorner_ItemIconWindowTemplate = {
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 9,
@@ -2971,159 +3057,139 @@ void sub_813AA18(void)
.baseBlock = 20,
};
- gUnknown_0203AB6E = AddWindow(&gUnknown_085B3124);
- SetStandardWindowBorderStyle(gUnknown_0203AB6E, 0);
- CopyWindowToVram(gUnknown_0203AB6E, 2);
+ sFrontierExchangeCorner_ItemIconWindowId = AddWindow(&sFrontierExchangeCorner_ItemIconWindowTemplate);
+ SetStandardWindowBorderStyle(sFrontierExchangeCorner_ItemIconWindowId, 0);
+ CopyWindowToVram(sFrontierExchangeCorner_ItemIconWindowId, 2);
}
-void sub_813AA44(void)
+void CloseFrontierExchangeCornerItemIconWindow(void)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_0203AB6E, TRUE);
- RemoveWindow(gUnknown_0203AB6E);
+ ClearStdWindowAndFrameToTransparent(sFrontierExchangeCorner_ItemIconWindowId, TRUE);
+ RemoveWindow(sFrontierExchangeCorner_ItemIconWindowId);
}
-static void sub_813AA60(u16 a0, u16 a1)
+static void FillFrontierExchangeCornerWindowAndItemIcon(u16 menu, u16 selection)
{
- static const u16 gUnknown_085B312C[] = { 0x004b, 0x0067, 0x0057, 0x004f, 0x0054, 0x0055, 0x0056, 0x0050, 0x0051, 0x0052, 0xFFFF };
- static const u16 gUnknown_085B3142[] = { 0x0071, 0x006f, 0x0072, 0x0073, 0x0074, 0xFFFF };
- static const u16 gUnknown_085B314E[] = { 0x0040, 0x0043, 0x0041, 0x0046, 0x0042, 0x003f, 0xFFFF };
- static const u16 gUnknown_085B315C[] = { 0x00c8, 0x00b4, 0x00b7, 0x00b9, 0x00b3, 0x00ba, 0x00bb, 0x00c4, 0x00c6, 0xFFFF };
+ #include "data/battle_frontier/battle_frontier_exchange_corner.h"
- static const u8 *const gUnknown_085B3170[] = {
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2601AA,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2601D0,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260201,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26022F,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26025B,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260287,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2602B5,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2602E0,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26030F,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26033E,
- gText_Exit,
- };
-
- static const u8 *const gUnknown_085B319C[] = {
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26036C,
- gText_Exit
- };
-
- static const u8 *const gUnknown_085B31B4[] = {
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260397,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2603BE,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2603E6,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26040E,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260436,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26045C,
- gText_Exit
- };
-
- static const u8 *const gUnknown_085B31D0[] = {
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26047A,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2604AC,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2604D8,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_26050F,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260542,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260575,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2605A8,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_2605E2,
- BattleFrontier_BattlePointExchangeServiceCorner_Text_260613,
- gText_Exit
- };
-
- if (a0 > 2 && a0 < 7)
+ if (menu >= SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1 && menu <= SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR)
{
FillWindowPixelRect(0, PIXEL_FILL(1), 0, 0, 216, 32);
- switch (a0)
+ switch (menu)
{
- case 3:
- AddTextPrinterParameterized2(0, 1, gUnknown_085B3170[a1], 0, NULL, 2, 1, 3);
- if (gUnknown_085B312C[a1] == 0xFFFF)
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1:
+ AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_Decor1Descriptions[selection], 0, NULL, 2, 1, 3);
+ if (sFrontierExchangeCorner_Decor1[selection] == 0xFFFF)
{
- sub_813ABD4(gUnknown_085B312C[a1]);
+ ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor1[selection]);
}
else
{
FreeSpriteTilesByTag(5500);
FreeSpritePaletteByTag(5500);
- gUnknown_0203AB6C = AddDecorationIconObject(gUnknown_085B312C[a1], 33, 88, 0, 5500, 5500);
+ sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor1[selection], 33, 88, 0, 5500, 5500);
}
break;
- case 4:
- AddTextPrinterParameterized2(0, 1, gUnknown_085B319C[a1], 0, NULL, 2, 1, 3);
- if (gUnknown_085B3142[a1] == 0xFFFF)
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
+ AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_Decor2Descriptions[selection], 0, NULL, 2, 1, 3);
+ if (sFrontierExchangeCorner_Decor2[selection] == 0xFFFF)
{
- sub_813ABD4(gUnknown_085B3142[a1]);
+ ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Decor2[selection]);
}
else
{
FreeSpriteTilesByTag(5500);
FreeSpritePaletteByTag(5500);
- gUnknown_0203AB6C = AddDecorationIconObject(gUnknown_085B3142[a1], 33, 88, 0, 5500, 5500);
+ sScrollableMultichoice_ItemSpriteId = AddDecorationIconObject(sFrontierExchangeCorner_Decor2[selection], 33, 88, 0, 5500, 5500);
}
break;
- case 5:
- AddTextPrinterParameterized2(0, 1, gUnknown_085B31B4[a1], 0, NULL, 2, 1, 3);
- sub_813ABD4(gUnknown_085B314E[a1]);
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
+ AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_VitaminsDescriptions[selection], 0, NULL, 2, 1, 3);
+ ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_Vitamins[selection]);
break;
- case 6:
- AddTextPrinterParameterized2(0, 1, gUnknown_085B31D0[a1], 0, NULL, 2, 1, 3);
- sub_813ABD4(gUnknown_085B315C[a1]);
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR:
+ AddTextPrinterParameterized2(0, 1, sFrontierExchangeCorner_HoldItemsDescriptions[selection], 0, NULL, 2, 1, 3);
+ ShowFrontierExchangeCornerItemIcon(sFrontierExchangeCorner_HoldItems[selection]);
break;
}
}
}
-static void sub_813ABD4(u16 a0)
+static void ShowFrontierExchangeCornerItemIcon(u16 item)
{
FreeSpriteTilesByTag(5500);
FreeSpritePaletteByTag(5500);
- gUnknown_0203AB6C = AddItemIconSprite(5500, 5500, a0);
+ sScrollableMultichoice_ItemSpriteId = AddItemIconSprite(5500, 5500, item);
- if (gUnknown_0203AB6C != MAX_SPRITES)
+ if (sScrollableMultichoice_ItemSpriteId != MAX_SPRITES)
{
- gSprites[gUnknown_0203AB6C].oam.priority = 0;
- gSprites[gUnknown_0203AB6C].pos1.x = 36;
- gSprites[gUnknown_0203AB6C].pos1.y = 92;
+ gSprites[sScrollableMultichoice_ItemSpriteId].oam.priority = 0;
+ gSprites[sScrollableMultichoice_ItemSpriteId].pos1.x = 36;
+ gSprites[sScrollableMultichoice_ItemSpriteId].pos1.y = 92;
}
}
-static void sub_813AC44(u16 a0, u16 unused)
+static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused)
{
- if (gUnknown_0203AB6C != MAX_SPRITES)
+ if (sScrollableMultichoice_ItemSpriteId != MAX_SPRITES)
{
- switch (a0)
+ switch (menu)
{
- case 3 ... 6:
- DestroySpriteAndFreeResources(&gSprites[gUnknown_0203AB6C]);
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_1:
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
+ case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR:
+ DestroySpriteAndFreeResources(&gSprites[sScrollableMultichoice_ItemSpriteId]);
break;
}
- gUnknown_0203AB6C = MAX_SPRITES;
- }
-}
+ sScrollableMultichoice_ItemSpriteId = MAX_SPRITES;
+ }
+}
+
+static const u16 sBattleFrontier_TutorMoves1[] =
+{
+ MOVE_SOFT_BOILED,
+ MOVE_SEISMIC_TOSS,
+ MOVE_DREAM_EATER,
+ MOVE_MEGA_PUNCH,
+ MOVE_MEGA_KICK,
+ MOVE_BODY_SLAM,
+ MOVE_ROCK_SLIDE,
+ MOVE_COUNTER,
+ MOVE_THUNDER_WAVE,
+ MOVE_SWORDS_DANCE
+};
-static const u16 gUnknown_085B31F8[] = { 0x0087, 0x0045, 0x008a, 0x0005, 0x0019, 0x0022, 0x009d, 0x0044, 0x0056, 0x000e };
-static const u16 gUnknown_085B320C[] = { 0x006f, 0x00ad, 0x00bd, 0x0081, 0x00c4, 0x00cb, 0x00f4, 0x0008, 0x0009, 0x0007 };
+static const u16 sBattleFrontier_TutorMoves2[] =
+{
+ MOVE_DEFENSE_CURL,
+ MOVE_SNORE,
+ MOVE_MUD_SLAP,
+ MOVE_SWIFT,
+ MOVE_ICY_WIND,
+ MOVE_ENDURE,
+ MOVE_PSYCH_UP,
+ MOVE_ICE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_FIRE_PUNCH
+};
-void sub_813AC7C(void)
+void BufferBattleFrontierTutorMoveName(void)
{
if (gSpecialVar_0x8005 != 0)
{
- StringCopy(gStringVar1, gMoveNames[gUnknown_085B320C[gSpecialVar_0x8004]]);
+ StringCopy(gStringVar1, gMoveNames[sBattleFrontier_TutorMoves2[gSpecialVar_0x8004]]);
}
else
{
- StringCopy(gStringVar1, gMoveNames[gUnknown_085B31F8[gSpecialVar_0x8004]]);
+ StringCopy(gStringVar1, gMoveNames[sBattleFrontier_TutorMoves1[gSpecialVar_0x8004]]);
}
}
-static void sub_813ACE8(u8 a0, u16 a1)
+static void ShowBattleFrontierTutorWindow(u8 menu, u16 selection)
{
- static const struct WindowTemplate gUnknown_085B3220 = {
+ static const struct WindowTemplate sBattleFrontierTutor_WindowTemplate =
+ {
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 7,
@@ -3133,67 +3199,70 @@ static void sub_813ACE8(u8 a0, u16 a1)
.baseBlock = 28,
};
- if (a0 == 9 || a0 == 10)
+ if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_1 || menu == SCROLL_MULTI_BF_MOVE_TUTOR_2)
{
if (gSpecialVar_0x8006 == 0)
{
- gUnknown_0203AB5E = AddWindow(&gUnknown_085B3220);
- SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0);
+ sTutorMoveAndElevatorWindowId = AddWindow(&sBattleFrontierTutor_WindowTemplate);
+ SetStandardWindowBorderStyle(sTutorMoveAndElevatorWindowId, 0);
}
- sub_813AD34(a0, a1);
+ ShowBattleFrontierTutorMoveDescription(menu, selection);
}
}
-static void sub_813AD34(u8 a0, u16 a1)
+static void ShowBattleFrontierTutorMoveDescription(u8 menu, u16 selection)
{
- static const u8 *const gUnknown_085B3228[] = {
- BattleFrontier_Lounge7_Text_265E30,
- BattleFrontier_Lounge7_Text_265E5B,
- BattleFrontier_Lounge7_Text_265E8A,
- BattleFrontier_Lounge7_Text_265EC0,
- BattleFrontier_Lounge7_Text_265EED,
- BattleFrontier_Lounge7_Text_265F1C,
- BattleFrontier_Lounge7_Text_265F47,
- BattleFrontier_Lounge7_Text_265F77,
- BattleFrontier_Lounge7_Text_265FAA,
- BattleFrontier_Lounge7_Text_265FDD,
+ static const u8 *const sBattleFrontier_TutorMoveDescriptions1[] =
+ {
+ BattleFrontier_Lounge7_Text_SoftboiledDesc,
+ BattleFrontier_Lounge7_Text_SeismicTossDesc,
+ BattleFrontier_Lounge7_Text_DreamEaterDesc,
+ BattleFrontier_Lounge7_Text_MegaPunchDesc,
+ BattleFrontier_Lounge7_Text_MegaKickDesc,
+ BattleFrontier_Lounge7_Text_BodySlamDesc,
+ BattleFrontier_Lounge7_Text_RockSlideDesc,
+ BattleFrontier_Lounge7_Text_CounterDesc,
+ BattleFrontier_Lounge7_Text_ThunderWaveDesc,
+ BattleFrontier_Lounge7_Text_SwordsDanceDesc,
gText_Exit,
};
- static const u8 *const gUnknown_085B3254[] = {
- BattleFrontier_Lounge7_Text_26600A,
- BattleFrontier_Lounge7_Text_26603E,
- BattleFrontier_Lounge7_Text_266070,
- BattleFrontier_Lounge7_Text_2660A6,
- BattleFrontier_Lounge7_Text_2660D0,
- BattleFrontier_Lounge7_Text_2660FF,
- BattleFrontier_Lounge7_Text_26612D,
- BattleFrontier_Lounge7_Text_26615F,
- BattleFrontier_Lounge7_Text_266185,
- BattleFrontier_Lounge7_Text_2661B5,
+ static const u8 *const sBattleFrontier_TutorMoveDescriptions2[] =
+ {
+ BattleFrontier_Lounge7_Text_DefenseCurlDesc,
+ BattleFrontier_Lounge7_Text_SnoreDesc,
+ BattleFrontier_Lounge7_Text_MudSlapDesc,
+ BattleFrontier_Lounge7_Text_SwiftDesc,
+ BattleFrontier_Lounge7_Text_IcyWindDesc,
+ BattleFrontier_Lounge7_Text_EndureDesc,
+ BattleFrontier_Lounge7_Text_PsychUpDesc,
+ BattleFrontier_Lounge7_Text_IcePunchDesc,
+ BattleFrontier_Lounge7_Text_ThunderPunchDesc,
+ BattleFrontier_Lounge7_Text_FirePunchDesc,
gText_Exit,
};
- if (a0 == 9 || a0 == 10)
+ if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_1 || menu == SCROLL_MULTI_BF_MOVE_TUTOR_2)
{
- FillWindowPixelRect(gUnknown_0203AB5E, PIXEL_FILL(1), 0, 0, 96, 48);
- if (a0 == 10)
+ FillWindowPixelRect(sTutorMoveAndElevatorWindowId, PIXEL_FILL(1), 0, 0, 96, 48);
+ if (menu == SCROLL_MULTI_BF_MOVE_TUTOR_2)
{
- AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gUnknown_085B3254[a1], 0, 1, 0, NULL);
+ AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, sBattleFrontier_TutorMoveDescriptions2[selection], 0, 1, 0, NULL);
}
else
{
- AddTextPrinterParameterized(gUnknown_0203AB5E, 1, gUnknown_085B3228[a1], 0, 1, 0, NULL);
+ AddTextPrinterParameterized(sTutorMoveAndElevatorWindowId, 1, sBattleFrontier_TutorMoveDescriptions1[selection], 0, 1, 0, NULL);
}
}
}
-void sub_813ADB8(void)
+void CloseBattleFrontierTutorWindow(void)
{
- ClearStdWindowAndFrameToTransparent(gUnknown_0203AB5E, TRUE);
- RemoveWindow(gUnknown_0203AB5E);
+ ClearStdWindowAndFrameToTransparent(sTutorMoveAndElevatorWindowId, TRUE);
+ RemoveWindow(sTutorMoveAndElevatorWindowId);
}
+// Never called
void sub_813ADD4(void)
{
u16 scrollOffset, selectedRow;
@@ -3202,75 +3271,92 @@ void sub_813ADD4(void)
if (taskId != 0xFF)
{
struct Task *task = &gTasks[taskId];
- ListMenuGetScrollAndRow(task->data[14], &scrollOffset, &selectedRow);
- SetStandardWindowBorderStyle(task->data[13], 0);
+ ListMenuGetScrollAndRow(task->tListTaskId, &scrollOffset, &selectedRow);
+ SetStandardWindowBorderStyle(task->tWindowId, 0);
- for (i = 0; i < 6; i++)
+ for (i = 0; i < MAX_SCROLL_MULTI_ON_SCREEN; i++)
{
- AddTextPrinterParameterized5(task->data[13], 1, gUnknown_085B2CF0[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0);
+ AddTextPrinterParameterized5(task->tWindowId, 1, sScrollableMultichoiceOptions[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0);
}
- AddTextPrinterParameterized(task->data[13], 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL);
- PutWindowTilemap(task->data[13]);
- CopyWindowToVram(task->data[13], 3);
+ AddTextPrinterParameterized(task->tWindowId, 1, gText_SelectorArrow, 0, selectedRow * 16, TEXT_SPEED_FF, NULL);
+ PutWindowTilemap(task->tWindowId);
+ CopyWindowToVram(task->tWindowId, 3);
}
}
-void sub_813AEB4(void)
+void GetBattleFrontierTutorMoveIndex(void)
{
u8 i;
- u16 temp1 = 0;
- u16 temp2 = 0;
+ u16 moveTutor = 0;
+ u16 moveIndex = 0;
gSpecialVar_0x8005 = 0;
- temp1 = VarGet(VAR_TEMP_E);
- temp2 = VarGet(VAR_TEMP_D);
+ moveTutor = VarGet(VAR_TEMP_E);
+ moveIndex = VarGet(VAR_TEMP_D);
- if (temp1 != 0)
+ if (moveTutor != 0)
{
i = 0;
do
{
- if (gTutorMoves[i] == gUnknown_085B320C[temp2])
+ if (gTutorMoves[i] == sBattleFrontier_TutorMoves2[moveIndex])
{
gSpecialVar_0x8005 = i;
break;
}
i++;
- } while (i < 30);
+ } while (i < TUTOR_MOVE_COUNT);
}
else
{
i = 0;
do
{
- if (gTutorMoves[i] == gUnknown_085B31F8[temp2])
+ if (gTutorMoves[i] == sBattleFrontier_TutorMoves1[moveIndex])
{
gSpecialVar_0x8005 = i;
break;
}
i++;
- } while (i < 30);
+ } while (i < TUTOR_MOVE_COUNT);
}
}
+// Never called
void sub_813AF48(void)
{
u8 taskId = FindTaskIdByFunc(sub_813A600);
if (taskId != 0xFF)
{
struct Task *task = &gTasks[taskId];
- DestroyListMenuTask(task->data[14], NULL, NULL);
- Free(gUnknown_0203AB64);
- ClearStdWindowAndFrameToTransparent(task->data[13], TRUE);
- FillWindowPixelBuffer(task->data[13], PIXEL_FILL(0));
- ClearWindowTilemap(task->data[13]);
- CopyWindowToVram(task->data[13], 2);
- RemoveWindow(task->data[13]);
+ DestroyListMenuTask(task->tListTaskId, NULL, NULL);
+ Free(sScrollableMultichoice_ListMenuItem);
+ ClearStdWindowAndFrameToTransparent(task->tWindowId, TRUE);
+ FillWindowPixelBuffer(task->tWindowId, PIXEL_FILL(0));
+ ClearWindowTilemap(task->tWindowId);
+ CopyWindowToVram(task->tWindowId, 2);
+ RemoveWindow(task->tWindowId);
DestroyTask(taskId);
}
}
+// Undefine Scrollable Multichoice task data macros
+#undef tMaxItemsOnScreen
+#undef tNumItems
+#undef tLeft
+#undef tTop
+#undef tWidth
+#undef tHeight
+#undef tKeepOpenAfterSelect
+#undef tScrollOffset
+#undef tSelectedRow
+#undef tScrollMultiId
+#undef tScrollArrowId
+#undef tWindowId
+#undef tListTaskId
+#undef tTaskId
+
void DoDeoxysRockInteraction(void)
{
CreateTask(Task_DeoxysRockInteraction, 8);
@@ -3399,53 +3485,53 @@ void IncrementBirthIslandRockStepCount(void)
}
}
-void sub_813B1D0(void)
+void SetDeoxysRockPalette(void)
{
LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], 0x1A0, 8);
BlendPalettes(0x04000000, 16, 0);
}
-void set_unknown_box_id(u8 id)
+void SetPCBoxToSendMon(u8 boxId)
{
- gUnknown_0203AB6F = id;
+ sPCBoxToSendMon = boxId;
}
-u16 get_unknown_box_id(void)
+u16 GetPCBoxToSendMon(void)
{
- return gUnknown_0203AB6F;
+ return sPCBoxToSendMon;
}
-bool8 sub_813B21C(void)
+bool8 ShouldShowBoxWasFullMessage(void)
{
- if (FlagGet(FLAG_SYS_STORAGE_UNKNOWN_FLAG) == FALSE)
+ if (!FlagGet(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE))
{
- if (StorageGetCurrentBox() != VarGet(VAR_STORAGE_UNKNOWN))
+ if (StorageGetCurrentBox() != VarGet(VAR_PC_BOX_TO_SEND_MON))
{
- FlagSet(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
+ FlagSet(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
return TRUE;
}
}
return FALSE;
}
-bool8 sub_813B260(void)
+bool8 IsDestinationBoxFull(void)
{
int box;
int i;
- set_unknown_box_id(VarGet(VAR_STORAGE_UNKNOWN));
+ SetPCBoxToSendMon(VarGet(VAR_PC_BOX_TO_SEND_MON));
box = StorageGetCurrentBox();
do
{
for (i = 0; i < IN_BOX_COUNT; i++)
{
- if (GetBoxMonData(GetBoxedMonPtr(box, i), MON_DATA_SPECIES, 0) == 0)
+ if (GetBoxMonData(GetBoxedMonPtr(box, i), MON_DATA_SPECIES, 0) == SPECIES_NONE)
{
- if (get_unknown_box_id() != box)
+ if (GetPCBoxToSendMon() != box)
{
- FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
}
- VarSet(VAR_STORAGE_UNKNOWN, box);
- return sub_813B21C();
+ VarSet(VAR_PC_BOX_TO_SEND_MON, box);
+ return ShouldShowBoxWasFullMessage();
}
}
@@ -3457,36 +3543,36 @@ bool8 sub_813B260(void)
return FALSE;
}
-void CreateUnusualWeatherEvent(void)
+void CreateAbnormalWeatherEvent(void)
{
u16 randomValue = Random();
- VarSet(VAR_UNUSUAL_WEATHER_STEP_COUNTER, 0);
+ VarSet(VAR_ABNORMAL_WEATHER_STEP_COUNTER, 0);
if (FlagGet(FLAG_DEFEATED_KYOGRE) == TRUE)
{
- VarSet(VAR_UNUSUAL_WEATHER_LOCATION, (randomValue % UNUSUAL_WEATHER_COUNT_PER_LEGENDARY) + UNUSUAL_WEATHER_GROUDON_LOCATIONS_START);
+ VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % ABNORMAL_WEATHER_COUNT_PER_LEGENDARY) + ABNORMAL_WEATHER_GROUDON_LOCATIONS_START);
}
else if (FlagGet(FLAG_DEFEATED_GROUDON) == TRUE)
{
- VarSet(VAR_UNUSUAL_WEATHER_LOCATION, (randomValue % UNUSUAL_WEATHER_COUNT_PER_LEGENDARY) + UNUSUAL_WEATHER_KYOGRE_LOCATIONS_START);
+ VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % ABNORMAL_WEATHER_COUNT_PER_LEGENDARY) + ABNORMAL_WEATHER_KYOGRE_LOCATIONS_START);
}
else if ((randomValue & 1) == 0)
{
randomValue = Random();
- VarSet(VAR_UNUSUAL_WEATHER_LOCATION, (randomValue % UNUSUAL_WEATHER_COUNT_PER_LEGENDARY) + UNUSUAL_WEATHER_GROUDON_LOCATIONS_START);
+ VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % ABNORMAL_WEATHER_COUNT_PER_LEGENDARY) + ABNORMAL_WEATHER_GROUDON_LOCATIONS_START);
}
else
{
randomValue = Random();
- VarSet(VAR_UNUSUAL_WEATHER_LOCATION, (randomValue % UNUSUAL_WEATHER_COUNT_PER_LEGENDARY) + UNUSUAL_WEATHER_KYOGRE_LOCATIONS_START);
+ VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % ABNORMAL_WEATHER_COUNT_PER_LEGENDARY) + ABNORMAL_WEATHER_KYOGRE_LOCATIONS_START);
}
}
-// Saves the map name for the current unusual weather location in gStringVar1, then
+// Saves the map name for the current abnormal weather location in gStringVar1, then
// returns TRUE if the weather is for Kyogre, and FALSE if it's for Groudon.
-bool32 GetUnusualWeatherMapNameAndType(void)
+bool32 GetAbnormalWeatherMapNameAndType(void)
{
- static const u8 sUnusualWeatherMapNumbers[] = {
+ static const u8 sAbnormalWeatherMapNumbers[] = {
MAP_NUM(ROUTE114),
MAP_NUM(ROUTE114),
MAP_NUM(ROUTE115),
@@ -3505,11 +3591,11 @@ bool32 GetUnusualWeatherMapNameAndType(void)
MAP_NUM(ROUTE129)
};
- u16 unusualWeather = VarGet(VAR_UNUSUAL_WEATHER_LOCATION);
+ u16 abnormalWeather = VarGet(VAR_ABNORMAL_WEATHER_LOCATION);
- GetMapName(gStringVar1, sUnusualWeatherMapNumbers[unusualWeather - 1], 0);
+ GetMapName(gStringVar1, sAbnormalWeatherMapNumbers[abnormalWeather - 1], 0);
- if (unusualWeather < UNUSUAL_WEATHER_KYOGRE_LOCATIONS_START)
+ if (abnormalWeather < ABNORMAL_WEATHER_KYOGRE_LOCATIONS_START)
{
return FALSE;
}
@@ -3519,10 +3605,10 @@ bool32 GetUnusualWeatherMapNameAndType(void)
}
}
-bool8 UnusualWeatherHasExpired(void)
+bool8 AbnormalWeatherHasExpired(void)
{
// Duplicate array.
- static const u8 sUnusualWeatherMapNumbers_2[] = {
+ static const u8 sAbnormalWeatherMapNumbers[] = {
MAP_NUM(ROUTE114),
MAP_NUM(ROUTE114),
MAP_NUM(ROUTE115),
@@ -3541,17 +3627,17 @@ bool8 UnusualWeatherHasExpired(void)
MAP_NUM(ROUTE129)
};
- u16 steps = VarGet(VAR_UNUSUAL_WEATHER_STEP_COUNTER);
- u16 unusualWeather = VarGet(VAR_UNUSUAL_WEATHER_LOCATION);
+ u16 steps = VarGet(VAR_ABNORMAL_WEATHER_STEP_COUNTER);
+ u16 abnormalWeather = VarGet(VAR_ABNORMAL_WEATHER_LOCATION);
- if (unusualWeather == UNUSUAL_WEATHER_NONE)
+ if (abnormalWeather == ABNORMAL_WEATHER_NONE)
{
return FALSE;
}
if (++steps > 999)
{
- VarSet(VAR_UNUSUAL_WEATHER_STEP_COUNTER, 0);
+ VarSet(VAR_ABNORMAL_WEATHER_STEP_COUNTER, 0);
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNDERWATER_MARINE_CAVE))
{
switch (gSaveBlock1Ptr->location.mapNum)
@@ -3561,7 +3647,7 @@ bool8 UnusualWeatherHasExpired(void)
case MAP_NUM(MARINE_CAVE_END):
case MAP_NUM(TERRA_CAVE_ENTRANCE):
case MAP_NUM(TERRA_CAVE_END):
- VarSet(VAR_SHOULD_END_UNUSUAL_WEATHER, 1);
+ VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 1);
return FALSE;
default:
break;
@@ -3576,27 +3662,27 @@ bool8 UnusualWeatherHasExpired(void)
case MAP_NUM(UNDERWATER5):
case MAP_NUM(UNDERWATER6):
case MAP_NUM(UNDERWATER7):
- VarSet(VAR_SHOULD_END_UNUSUAL_WEATHER, 1);
+ VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 1);
return FALSE;
default:
break;
}
}
- if (gSaveBlock1Ptr->location.mapNum == sUnusualWeatherMapNumbers_2[unusualWeather - 1] &&
+ if (gSaveBlock1Ptr->location.mapNum == sAbnormalWeatherMapNumbers[abnormalWeather - 1] &&
gSaveBlock1Ptr->location.mapGroup == 0)
{
return TRUE;
}
else
{
- VarSet(VAR_UNUSUAL_WEATHER_LOCATION, UNUSUAL_WEATHER_NONE);
+ VarSet(VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_NONE);
return FALSE;
}
}
else
{
- VarSet(VAR_UNUSUAL_WEATHER_STEP_COUNTER, steps);
+ VarSet(VAR_ABNORMAL_WEATHER_STEP_COUNTER, steps);
return FALSE;
}
}
@@ -3606,38 +3692,40 @@ void Unused_SetWeatherSunny(void)
SetCurrentAndNextWeather(WEATHER_SUNNY);
}
-bool32 sub_813B490(void)
-{
- static const u8 gUnknown_085B3420[][3] = {
- { 0x02, 0x04, 0x01 },
- { 0x04, 0x04, 0x01 },
- { 0x05, 0x00, 0x01 },
- { 0x06, 0x03, 0x01 },
- { 0x08, 0x06, 0x01 },
- { 0x09, 0x0d, 0x01 },
- { 0x0a, 0x07, 0x01 },
- { 0x0b, 0x07, 0x01 },
- { 0x0c, 0x04, 0x01 },
- { 0x0e, 0x05, 0x01 },
- { 0x0f, 0x04, 0x01 },
- { 0x1a, 0x37, 0x01 }
+// Always returns 1
+u32 GetMartEmployeeObjectEventId(void)
+{
+ static const u8 sPokeMarts[][3] =
+ {
+ { MAP_GROUP(OLDALE_TOWN_MART), MAP_NUM(OLDALE_TOWN_MART), 1 },
+ { MAP_GROUP(LAVARIDGE_TOWN_MART), MAP_NUM(LAVARIDGE_TOWN_MART), 1 },
+ { MAP_GROUP(FALLARBOR_TOWN_MART), MAP_NUM(FALLARBOR_TOWN_MART), 1 },
+ { MAP_GROUP(VERDANTURF_TOWN_MART), MAP_NUM(VERDANTURF_TOWN_MART), 1 },
+ { MAP_GROUP(PETALBURG_CITY_MART), MAP_NUM(PETALBURG_CITY_MART), 1 },
+ { MAP_GROUP(SLATEPORT_CITY_MART), MAP_NUM(SLATEPORT_CITY_MART), 1 },
+ { MAP_GROUP(MAUVILLE_CITY_MART), MAP_NUM(MAUVILLE_CITY_MART), 1 },
+ { MAP_GROUP(RUSTBORO_CITY_MART), MAP_NUM(RUSTBORO_CITY_MART), 1 },
+ { MAP_GROUP(FORTREE_CITY_MART), MAP_NUM(FORTREE_CITY_MART), 1 },
+ { MAP_GROUP(MOSSDEEP_CITY_MART), MAP_NUM(MOSSDEEP_CITY_MART), 1 },
+ { MAP_GROUP(SOOTOPOLIS_CITY_MART), MAP_NUM(SOOTOPOLIS_CITY_MART), 1 },
+ { MAP_GROUP(BATTLE_FRONTIER_MART), MAP_NUM(BATTLE_FRONTIER_MART), 1 }
};
u8 i;
- for (i = 0; i < 12; i++)
+ for (i = 0; i < ARRAY_COUNT(sPokeMarts); i++)
{
- if (gSaveBlock1Ptr->location.mapGroup == gUnknown_085B3420[i][0])
+ if (gSaveBlock1Ptr->location.mapGroup == sPokeMarts[i][0])
{
- if (gSaveBlock1Ptr->location.mapNum == gUnknown_085B3420[i][1])
+ if (gSaveBlock1Ptr->location.mapNum == sPokeMarts[i][1])
{
- return gUnknown_085B3420[i][2];
+ return sPokeMarts[i][2];
}
}
}
- return TRUE;
+ return 1;
}
-bool32 sub_813B4E0(void)
+bool32 IsTrainerRegistered(void)
{
int index = GetRematchIdxByTrainerIdx(gSpecialVar_0x8004);
if (index >= 0)
@@ -3648,18 +3736,18 @@ bool32 sub_813B4E0(void)
return FALSE;
}
-bool32 sub_813B514(void)
+// Always returns FALSE
+bool32 ShouldDistributeEonTicket(void)
{
- if (!VarGet(VAR_ALWAYS_ZERO_0x403F))
- {
+ if (!VarGet(VAR_DISTRIBUTE_EON_TICKET))
return FALSE;
- }
+
return TRUE;
}
void sub_813B534(void)
{
- gUnknown_0203AB70 = gBattleTypeFlags;
+ sBattleTowerMultiBattleTypeFlags = gBattleTypeFlags;
gBattleTypeFlags = 0;
if (!gReceivedRemoteLinkPlayers)
{
@@ -3667,12 +3755,12 @@ void sub_813B534(void)
}
}
-void sub_813B568(void)
+void LinkRetireStatusWithBattleTowerPartner(void)
{
- CreateTask(sub_813B57C, 5);
+ CreateTask(Task_LinkRetireStatusWithBattleTowerPartner, 5);
}
-static void sub_813B57C(u8 taskId)
+static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -3703,21 +3791,24 @@ static void sub_813B57C(u8 taskId)
{
gSpecialVar_0x8005 = gBlockRecvBuffer[1][0];
ResetBlockReceivedFlag(1);
- if (gSpecialVar_0x8004 == 1 && gSpecialVar_0x8005 == 1)
+ if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_RETIRE
+ && gSpecialVar_0x8005 == BATTLE_TOWER_LINK_RETIRE)
{
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = BATTLE_TOWER_LINKSTAT_BOTH_RETIRE;
}
- else if (gSpecialVar_0x8004 == 0 && gSpecialVar_0x8005 == 1)
+ else if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_CONTINUE
+ && gSpecialVar_0x8005 == BATTLE_TOWER_LINK_RETIRE)
{
- gSpecialVar_Result = 2;
+ gSpecialVar_Result = BATTLE_TOWER_LINKSTAT_PARTNER_RETIRE;
}
- else if (gSpecialVar_0x8004 == 1 && gSpecialVar_0x8005 == 0)
+ else if (gSpecialVar_0x8004 == BATTLE_TOWER_LINK_RETIRE
+ && gSpecialVar_0x8005 == BATTLE_TOWER_LINK_CONTINUE)
{
- gSpecialVar_Result = 3;
+ gSpecialVar_Result = BATTLE_TOWER_LINKSTAT_PLAYER_RETIRE;
}
else
{
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = BATTLE_TOWER_LINKSTAT_CONTINUE;
}
}
gTasks[taskId].data[0]++;
@@ -3755,14 +3846,14 @@ static void sub_813B57C(u8 taskId)
case 5:
if (GetMultiplayerId() == 0)
{
- if (gSpecialVar_Result == 2)
+ if (gSpecialVar_Result == BATTLE_TOWER_LINKSTAT_PARTNER_RETIRE)
{
ShowFieldAutoScrollMessage(gText_YourPartnerHasRetired);
}
}
else
{
- if (gSpecialVar_Result == 3)
+ if (gSpecialVar_Result == BATTLE_TOWER_LINKSTAT_PLAYER_RETIRE)
{
ShowFieldAutoScrollMessage(gText_YourPartnerHasRetired);
}
@@ -3793,14 +3884,14 @@ static void sub_813B57C(u8 taskId)
{
sub_800AC34();
}
- gBattleTypeFlags = gUnknown_0203AB70;
+ gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags;
EnableBothScriptContexts();
DestroyTask(taskId);
break;
}
}
-void sub_813B7D8(void)
+void Script_DoRayquazaScene(void)
{
if (gSpecialVar_0x8004 == 0)
{
@@ -3812,40 +3903,46 @@ void sub_813B7D8(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;
@@ -3857,7 +3954,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();
@@ -3870,23 +3967,25 @@ static void _fwalk(u8 taskId)
}
}
-void sub_813B968(void)
+void GetBattlePyramidHint(void)
{
gSpecialVar_Result = gSpecialVar_0x8004 / 7;
gSpecialVar_Result -= (gSpecialVar_Result / 20) * 20;
}
-void sub_813B9A0(void)
+// Used to avoid a potential softlock if the player respawns on Dewford with no way off
+void ResetHealLocationFromDewford(void)
{
if (gSaveBlock1Ptr->lastHealLocation.mapGroup == MAP_GROUP(DEWFORD_TOWN) && gSaveBlock1Ptr->lastHealLocation.mapNum == MAP_NUM(DEWFORD_TOWN))
{
- SetLastHealLocationWarp(3);
+ SetLastHealLocationWarp(HEAL_LOCATION_PETALBURG_CITY);
}
}
-bool8 sub_813B9C0(void)
+bool8 InPokemonCenter(void)
{
- static const u16 gUnknown_085B3444[] = {
+ static const u16 sPokemonCenters[] =
+ {
MAP_OLDALE_TOWN_POKEMON_CENTER_1F,
MAP_DEWFORD_TOWN_POKEMON_CENTER_1F,
MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F,
@@ -3904,19 +4003,19 @@ bool8 sub_813B9C0(void)
MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F,
MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F,
MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F,
- MAP_SINGLE_BATTLE_COLOSSEUM,
+ MAP_BATTLE_COLOSSEUM_2P,
MAP_TRADE_CENTER,
MAP_RECORD_CORNER,
- MAP_DOUBLE_BATTLE_COLOSSEUM,
+ MAP_BATTLE_COLOSSEUM_4P,
0xFFFF
};
int i;
u16 map = (gSaveBlock1Ptr->location.mapGroup << 8) + gSaveBlock1Ptr->location.mapNum;
- for (i = 0; gUnknown_085B3444[i] != 0xFFFF; i++)
+ for (i = 0; sPokemonCenters[i] != 0xFFFF; i++)
{
- if (gUnknown_085B3444[i] == map)
+ if (sPokemonCenters[i] == map)
{
return TRUE;
}
@@ -3924,28 +4023,72 @@ bool8 sub_813B9C0(void)
return FALSE;
}
+/* Summary of the Lilycove Trainer Fan Club, because it's a little messy
+
+ ## The Fan Club room itself
+ There are initially 4 members of the Fan Club (+ an interviewer), none of whom are fans of the player
+ After becoming the champion there will be 8 members of the Fan Club, 3 of whom are automatically fans of the player
+ After this point, if a club member is a fan of the player they will sit at the front table and comment on the player
+ If they are not fans of the player, they will sit at the far table and can make comments about a different trainer (see BufferFanClubTrainerName)
+
+ ## Gaining/losing fans
+ After every link battle the player will gain a fan if they won, or lose a fan if they lost
+ If the player has at least 3 fans, this is the only way to gain fans
+ If the player has fewer than 3 fans, they may also gain fans by completing certain tasks enough times (see TryGainNewFanFromCounter)
+ If the player has at least 5 fans, they can lose a fan every 12 real-time hours, or more often if the timer variable is reset (see TryLoseFansFromPlayTime)
+ If the player has only 1 fan left it cannot be lost
+
+ ## Variables
+ VAR_FANCLUB_FAN_COUNTER, a bitfield for tracking the fans
+ Bits 1-7: Counter for when to add new fans
+ Bit 8: Flag set after receiving the initial 3 fans
+ Bits 9-16: Flags for each of the 8 club members, set to 1 when theyre a fan of the player and 0 when theyre not
+
+ VAR_FANCLUB_LOSE_FAN_TIMER, a timer for when to lose fans
+ Compared against playTimeHours. When theyre equal, a fan is ready to be lost
+ For every fan thats lost this way 12 hours are added to the timer
+
+ VAR_LILYCOVE_FAN_CLUB_STATE
+ 0: Player is not the champion yet
+ 1: Player is the champion, ready to meet their initial fans
+ 2: Player has met their initial fans
+*/
+
+#define FANCLUB_BITFIELD (gSaveBlock1Ptr->vars[VAR_FANCLUB_FAN_COUNTER - VARS_START])
+#define FANCLUB_COUNTER 0x007F
+#define FANCLUB_FAN_FLAGS 0xFF80
+
+#define GET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD >> (flag) & 1)
+#define SET_TRAINER_FAN_CLUB_FLAG(flag) (FANCLUB_BITFIELD |= 1 << (flag))
+#define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(FANCLUB_BITFIELD ^= 1 << (flag))
+
+#define GET_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD & FANCLUB_COUNTER)
+#define SET_TRAINER_FAN_CLUB_COUNTER(count) (FANCLUB_BITFIELD = (FANCLUB_BITFIELD & FANCLUB_FAN_FLAGS) | (count))
+#define INCR_TRAINER_FAN_CLUB_COUNTER(count)(FANCLUB_BITFIELD += (count))
+#define CLEAR_TRAINER_FAN_CLUB_COUNTER (FANCLUB_BITFIELD &= ~(FANCLUB_COUNTER))
+
void ResetFanClub(void)
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] = 0;
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] = 0;
+ gSaveBlock1Ptr->vars[VAR_FANCLUB_FAN_COUNTER - VARS_START] = 0;
+ gSaveBlock1Ptr->vars[VAR_FANCLUB_LOSE_FAN_TIMER - VARS_START] = 0;
}
-void sub_813BA30(void)
+void TryLoseFansFromPlayTimeAfterLinkBattle(void)
{
- if (sub_813BF44() != 0)
+ if (DidPlayerGetFirstFans())
{
- UpdateMovedLilycoveFanClubMembers();
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] = gSaveBlock2Ptr->playTimeHours;
+ TryLoseFansFromPlayTime();
+ gSaveBlock1Ptr->vars[VAR_FANCLUB_LOSE_FAN_TIMER - VARS_START] = gSaveBlock2Ptr->playTimeHours;
}
}
-void sub_813BA60(void)
+void UpdateTrainerFanClubGameClear(void)
{
- if (!((gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> 7) & 1))
+ if (!GET_TRAINER_FAN_CLUB_FLAG(FANCLUB_GOT_FIRST_FANS))
{
- sub_813BF60();
- sub_813BD84();
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] = gSaveBlock2Ptr->playTimeHours;
+ SetPlayerGotFirstFans();
+ SetInitialFansOfPlayer();
+ gSaveBlock1Ptr->vars[VAR_FANCLUB_LOSE_FAN_TIMER - VARS_START] = gSaveBlock2Ptr->playTimeHours;
FlagClear(FLAG_HIDE_FANCLUB_OLD_LADY);
FlagClear(FLAG_HIDE_FANCLUB_BOY);
FlagClear(FLAG_HIDE_FANCLUB_LITTLE_BOY);
@@ -3955,186 +4098,216 @@ void sub_813BA60(void)
}
}
-u8 sub_813BADC(u8 a0)
+// If the player has < 3 fans, gain a new fan whenever the counter reaches 20+
+// Defeating Drake or participating in a Link Contest increments the counter by 2
+// Participating at Battle Tower or in a Secret Base battle increments the counter by 1
+u8 TryGainNewFanFromCounter(u8 incrementId)
{
- static const u8 gUnknown_085B3470[] = { 0x02, 0x01, 0x02, 0x01 };
+ static const u8 sCounterIncrements[] = { 2, 1, 2, 1 };
if (VarGet(VAR_LILYCOVE_FAN_CLUB_STATE) == 2)
{
- if ((gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] & 0x7F) + gUnknown_085B3470[a0] > 19)
+ if (GET_TRAINER_FAN_CLUB_COUNTER + sCounterIncrements[incrementId] > 19)
{
- if (GetNumMovedLilycoveFanClubMembers() < 3)
+ if (GetNumFansOfPlayerInTrainerFanClub() < 3)
{
- sub_813BB74();
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] &= 0xFF80;
+ PlayerGainRandomTrainerFan();
+ CLEAR_TRAINER_FAN_CLUB_COUNTER;
}
else
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] = (gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] & 0xFF80) | 0x14;
+ SET_TRAINER_FAN_CLUB_COUNTER(20);
}
}
else
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] += gUnknown_085B3470[a0];
+ INCR_TRAINER_FAN_CLUB_COUNTER(sCounterIncrements[incrementId]);
}
}
- return gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] & 0x7F;
+ return GET_TRAINER_FAN_CLUB_COUNTER;
}
-static u16 sub_813BB74(void)
+
+// Loop through the fan club members, and if theyre not a fan of the player there is a 50% chance for them to become a fan
+// Stops when a fan is gained
+// If no new fan was gained while looping, the last non-fan in the list becomes a fan
+// If all the members are already fans of the player then this redundantly sets the first fan in the list to be a fan
+static u16 PlayerGainRandomTrainerFan(void)
{
- static const u8 gUnknown_085B3474[] = { 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
+ static const u8 sFanClubMemberIds[NUM_TRAINER_FAN_CLUB_MEMBERS] =
+ {
+ FANCLUB_MEMBER1,
+ FANCLUB_MEMBER2,
+ FANCLUB_MEMBER3,
+ FANCLUB_MEMBER4,
+ FANCLUB_MEMBER5,
+ FANCLUB_MEMBER6,
+ FANCLUB_MEMBER7,
+ FANCLUB_MEMBER8
+ };
u8 i;
- u8 retVal = 0;
+ u8 idx = 0;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(sFanClubMemberIds); i++)
{
- if (!((gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gUnknown_085B3474[i]) & 1))
+ if (!GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]))
{
- retVal = i;
- if ((Random() & 1) != 0)
+ idx = i;
+ if (Random() & 1)
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 1 << gUnknown_085B3474[retVal];
- return retVal;
+ SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
+ return idx;
}
}
}
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 1 << gUnknown_085B3474[retVal];
- return retVal;
-}
-
-static u16 sub_813BC00(void)
-{
- static const u8 gUnknown_085B347C[] = { 0x08, 0x0d, 0x0e, 0x0b, 0x0a, 0x0c, 0x0f, 0x09 };
+ SET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
+ return idx;
+}
+
+// Loops through the fan club members, and if theyre a fan of the player there is a 50% chance for them to stop being a fan
+// Stops if a fan is removed, or if the player has only one fan left
+// If no fan was lost while looping, the last current fan in the list will stop being a fan
+static u16 PlayerLoseRandomTrainerFan(void)
+{
+ static const u8 sFanClubMemberIds[NUM_TRAINER_FAN_CLUB_MEMBERS] =
+ {
+ FANCLUB_MEMBER1,
+ FANCLUB_MEMBER6,
+ FANCLUB_MEMBER7,
+ FANCLUB_MEMBER4,
+ FANCLUB_MEMBER3,
+ FANCLUB_MEMBER5,
+ FANCLUB_MEMBER8,
+ FANCLUB_MEMBER2
+ };
u8 i;
- u8 retVal = 0;
+ u8 idx = 0;
- if (GetNumMovedLilycoveFanClubMembers() == 1)
+ if (GetNumFansOfPlayerInTrainerFanClub() == 1)
{
return 0;
}
- for (i = 0; i < 8; i++)
+ for (i = 0; i < ARRAY_COUNT(sFanClubMemberIds); i++)
{
- if (((gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gUnknown_085B347C[i]) & 1) != 0)
+ if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[i]))
{
- retVal = i;
- if ((Random() & 1) != 0)
+ idx = i;
+ if (Random() & 1)
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] ^= 1 << gUnknown_085B347C[retVal];
- return retVal;
+ FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
+ return idx;
}
}
}
- if (((gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gUnknown_085B347C[retVal]) & 1))
+ if (GET_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]))
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] ^= 1 << gUnknown_085B347C[retVal];
+ FLIP_TRAINER_FAN_CLUB_FLAG(sFanClubMemberIds[idx]);
}
- return retVal;
+ return idx;
}
-u16 GetNumMovedLilycoveFanClubMembers(void)
+u16 GetNumFansOfPlayerInTrainerFanClub(void)
{
u8 i;
- u8 retVal = 0;
+ u8 numFans = 0;
- for (i = 0; i < 8; i++)
+ for (i = 0; i < NUM_TRAINER_FAN_CLUB_MEMBERS; i++)
{
- if (((gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> (i + 8)) & 1) != 0)
- {
- retVal++;
- }
+ if (GET_TRAINER_FAN_CLUB_FLAG(i + FANCLUB_MEMBER1))
+ numFans++;
}
- return retVal;
+ return numFans;
}
-void UpdateMovedLilycoveFanClubMembers(void)
+// If the player has > 5 fans in the Trainer Fan Club, then lose 1 fan for every 12 hours since the last fan loss / timer reset
+void TryLoseFansFromPlayTime(void)
{
u8 i = 0;
if (gSaveBlock2Ptr->playTimeHours < 999)
{
while (TRUE)
{
- if (GetNumMovedLilycoveFanClubMembers() < 5)
+ if (GetNumFansOfPlayerInTrainerFanClub() < 5)
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] = gSaveBlock2Ptr->playTimeHours;
+ gSaveBlock1Ptr->vars[VAR_FANCLUB_LOSE_FAN_TIMER - VARS_START] = gSaveBlock2Ptr->playTimeHours;
break;
}
- else if (i == 8)
+ else if (i == NUM_TRAINER_FAN_CLUB_MEMBERS)
{
break;
}
- else if (gSaveBlock2Ptr->playTimeHours - gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] < 12)
+ else if (gSaveBlock2Ptr->playTimeHours - gSaveBlock1Ptr->vars[VAR_FANCLUB_LOSE_FAN_TIMER - VARS_START] < 12)
{
return;
}
- sub_813BC00();
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_2 - VARS_START] += 12;
+ PlayerLoseRandomTrainerFan();
+ gSaveBlock1Ptr->vars[VAR_FANCLUB_LOSE_FAN_TIMER - VARS_START] += 12;
i++;
}
}
}
-bool8 ShouldMoveLilycoveFanClubMember(void)
+bool8 IsFanClubMemberFanOfPlayer(void)
{
- return (gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gSpecialVar_0x8004) & 1;
+ return GET_TRAINER_FAN_CLUB_FLAG(gSpecialVar_0x8004);
}
-static void sub_813BD84(void)
+static void SetInitialFansOfPlayer(void)
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 0x2000;
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 0x100;
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 0x400;
+ SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER6);
+ SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER1);
+ SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_MEMBER3);
}
-void BufferStreakTrainerText(void)
+void BufferFanClubTrainerName(void)
{
- u8 a = 0;
- u8 b = 0;
+ u8 whichLinkTrainer = 0;
+ u8 whichNPCTrainer = 0;
switch (gSpecialVar_0x8004)
{
- case 8:
+ case FANCLUB_MEMBER1:
break;
- case 9:
+ case FANCLUB_MEMBER2:
break;
- case 10:
- a = 0;
- b = 3;
+ case FANCLUB_MEMBER3:
+ whichLinkTrainer = 0;
+ whichNPCTrainer = 3;
break;
- case 11:
- a = 0;
- b = 1;
+ case FANCLUB_MEMBER4:
+ whichLinkTrainer = 0;
+ whichNPCTrainer = 1;
break;
- case 12:
- a = 1;
- b = 0;
+ case FANCLUB_MEMBER5:
+ whichLinkTrainer = 1;
+ whichNPCTrainer = 0;
break;
- case 13:
- a = 0;
- b = 4;
+ case FANCLUB_MEMBER6:
+ whichLinkTrainer = 0;
+ whichNPCTrainer = 4;
break;
- case 14:
- a = 1;
- b = 5;
+ case FANCLUB_MEMBER7:
+ whichLinkTrainer = 1;
+ whichNPCTrainer = 5;
break;
- case 15:
+ case FANCLUB_MEMBER8:
break;
}
- sub_813BE30(&gSaveBlock1Ptr->linkBattleRecords, a, b);
+ BufferFanClubTrainerName_(&gSaveBlock1Ptr->linkBattleRecords, whichLinkTrainer, whichNPCTrainer);
}
-static void sub_813BE30(struct LinkBattleRecords *linkRecords, u8 a, u8 b)
+static void BufferFanClubTrainerName_(struct LinkBattleRecords *linkRecords, u8 whichLinkTrainer, u8 whichNPCTrainer)
{
- struct LinkBattleRecord *record = &linkRecords->entries[a];
+ struct LinkBattleRecord *record = &linkRecords->entries[whichLinkTrainer];
if (record->name[0] == EOS)
{
- switch (b)
+ switch (whichNPCTrainer)
{
case 0:
StringCopy(gStringVar1, gText_Wallace);
@@ -4161,39 +4334,36 @@ static void sub_813BE30(struct LinkBattleRecords *linkRecords, u8 a, u8 b)
}
else
{
- StringCopyN(gStringVar1, record->name, 7);
- gStringVar1[7] = EOS;
- ConvertInternationalString(gStringVar1, linkRecords->languages[a]);
+ StringCopyN(gStringVar1, record->name, PLAYER_NAME_LENGTH);
+ gStringVar1[PLAYER_NAME_LENGTH] = EOS;
+ ConvertInternationalString(gStringVar1, linkRecords->languages[whichLinkTrainer]);
}
}
-void sub_813BF10(void)
+void UpdateTrainerFansAfterLinkBattle(void)
{
if (VarGet(VAR_LILYCOVE_FAN_CLUB_STATE) == 2)
{
- sub_813BA30();
- if (gBattleOutcome == 1)
- {
- sub_813BB74();
- }
+ TryLoseFansFromPlayTimeAfterLinkBattle();
+ if (gBattleOutcome == B_OUTCOME_WON)
+ PlayerGainRandomTrainerFan();
else
- {
- sub_813BC00();
- }
+ PlayerLoseRandomTrainerFan();
}
}
-static bool8 sub_813BF44(void)
+static bool8 DidPlayerGetFirstFans(void)
{
- return (gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> 7) & 1;
+ return GET_TRAINER_FAN_CLUB_FLAG(FANCLUB_GOT_FIRST_FANS);
}
-void sub_813BF60(void)
+void SetPlayerGotFirstFans(void)
{
- gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] |= 0x80;
+ SET_TRAINER_FAN_CLUB_FLAG(FANCLUB_GOT_FIRST_FANS);
}
-u8 sub_813BF7C(void)
+// return value is always ignored
+u8 Script_TryGainNewFanFromCounter(void)
{
- return sub_813BADC(gSpecialVar_0x8004);
+ return TryGainNewFanFromCounter(gSpecialVar_0x8004);
}
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.c b/src/field_weather.c
index 024b6631f..684a86479 100644
--- a/src/field_weather.c
+++ b/src/field_weather.c
@@ -56,7 +56,7 @@ static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 bl
static void ApplyFogBlend(u8 blendCoeff, u16 blendColor);
static bool8 FadeInScreen_RainShowShade(void);
static bool8 FadeInScreen_Drought(void);
-static bool8 FadeInScreen_Fog1(void);
+static bool8 FadeInScreen_FogHorizontal(void);
static void FadeInScreenWithWeather(void);
static void DoNothing(void);
static void Task_WeatherInit(u8 taskId);
@@ -89,29 +89,29 @@ struct Weather *const gWeatherPtr = &gWeather;
static const struct WeatherCallbacks sWeatherFuncs[] =
{
- {None_Init, None_Main, None_Init, None_Finish},
- {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
- {Sunny_InitVars, Sunny_Main, Sunny_InitAll, Sunny_Finish},
- {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish},
- {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish},
- {MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish},
- {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
- {Ash_InitVars, Ash_Main, Ash_InitAll, Ash_Finish},
- {Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish},
- {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish},
- {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
- {Shade_InitVars, Shade_Main, Shade_InitAll, Shade_Finish},
- {Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish},
- {HeavyRain_InitVars, Rain_Main, HeavyRain_InitAll, Rain_Finish},
- {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish},
+ [WEATHER_NONE] = {None_Init, None_Main, None_Init, None_Finish},
+ [WEATHER_SUNNY_CLOUDS] = {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
+ [WEATHER_SUNNY] = {Sunny_InitVars, Sunny_Main, Sunny_InitAll, Sunny_Finish},
+ [WEATHER_RAIN] = {Rain_InitVars, Rain_Main, Rain_InitAll, Rain_Finish},
+ [WEATHER_SNOW] = {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish},
+ [WEATHER_RAIN_THUNDERSTORM] = {Thunderstorm_InitVars, Thunderstorm_Main, Thunderstorm_InitAll, Thunderstorm_Finish},
+ [WEATHER_FOG_HORIZONTAL] = {FogHorizontal_InitVars, FogHorizontal_Main, FogHorizontal_InitAll, FogHorizontal_Finish},
+ [WEATHER_VOLCANIC_ASH] = {Ash_InitVars, Ash_Main, Ash_InitAll, Ash_Finish},
+ [WEATHER_SANDSTORM] = {Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish},
+ [WEATHER_FOG_DIAGONAL] = {FogDiagonal_InitVars, FogDiagonal_Main, FogDiagonal_InitAll, FogDiagonal_Finish},
+ [WEATHER_UNDERWATER] = {FogHorizontal_InitVars, FogHorizontal_Main, FogHorizontal_InitAll, FogHorizontal_Finish},
+ [WEATHER_SHADE] = {Shade_InitVars, Shade_Main, Shade_InitAll, Shade_Finish},
+ [WEATHER_DROUGHT] = {Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish},
+ [WEATHER_DOWNPOUR] = {Downpour_InitVars, Thunderstorm_Main, Downpour_InitAll, Thunderstorm_Finish},
+ [WEATHER_UNDERWATER_BUBBLES] = {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish},
};
void (*const gWeatherPalStateFuncs[])(void) =
{
- UpdateWeatherGammaShift, // WEATHER_PAL_STATE_CHANGING_WEATHER
- FadeInScreenWithWeather, // WEATHER_PAL_STATE_SCREEN_FADING_IN
- DoNothing, // WEATHER_PAL_STATE_SCREEN_FADING_OUT
- DoNothing, // WEATHER_PAL_STATE_IDLE
+ [WEATHER_PAL_STATE_CHANGING_WEATHER] = UpdateWeatherGammaShift,
+ [WEATHER_PAL_STATE_SCREEN_FADING_IN] = FadeInScreenWithWeather,
+ [WEATHER_PAL_STATE_SCREEN_FADING_OUT] = DoNothing,
+ [WEATHER_PAL_STATE_IDLE] = DoNothing,
};
// This table specifies which of the gamma shift tables should be
@@ -171,8 +171,8 @@ void StartWeather(void)
gWeatherPtr->cloudSpritesCreated = 0;
gWeatherPtr->snowflakeSpriteCount = 0;
gWeatherPtr->ashSpritesCreated = 0;
- gWeatherPtr->fog1SpritesCreated = 0;
- gWeatherPtr->fog2SpritesCreated = 0;
+ gWeatherPtr->fogHSpritesCreated = 0;
+ gWeatherPtr->fogDSpritesCreated = 0;
gWeatherPtr->sandstormSpritesCreated = 0;
gWeatherPtr->sandstormSwirlSpritesCreated = 0;
gWeatherPtr->bubblesSpritesCreated = 0;
@@ -188,7 +188,7 @@ void StartWeather(void)
void SetNextWeather(u8 weather)
{
- if (weather != WEATHER_RAIN_LIGHT && weather != WEATHER_RAIN_MED && weather != WEATHER_RAIN_HEAVY)
+ if (weather != WEATHER_RAIN && weather != WEATHER_RAIN_THUNDERSTORM && weather != WEATHER_DOWNPOUR)
{
PlayRainStoppingSoundEffect();
}
@@ -371,9 +371,9 @@ static void FadeInScreenWithWeather(void)
switch (gWeatherPtr->currWeather)
{
- case WEATHER_RAIN_LIGHT:
- case WEATHER_RAIN_MED:
- case WEATHER_RAIN_HEAVY:
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
case WEATHER_SNOW:
case WEATHER_SHADE:
if (FadeInScreen_RainShowShade() == FALSE)
@@ -389,17 +389,17 @@ static void FadeInScreenWithWeather(void)
gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
- case WEATHER_FOG_1:
- if (FadeInScreen_Fog1() == FALSE)
+ case WEATHER_FOG_HORIZONTAL:
+ if (FadeInScreen_FogHorizontal() == FALSE)
{
gWeatherPtr->gammaIndex = 0;
gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
}
break;
- case WEATHER_ASH:
+ case WEATHER_VOLCANIC_ASH:
case WEATHER_SANDSTORM:
- case WEATHER_FOG_2:
- case WEATHER_FOG_3:
+ case WEATHER_FOG_DIAGONAL:
+ case WEATHER_UNDERWATER:
default:
if (!gPaletteFade.active)
{
@@ -442,7 +442,7 @@ static bool8 FadeInScreen_Drought(void)
return TRUE;
}
-static bool8 FadeInScreen_Fog1(void)
+static bool8 FadeInScreen_FogHorizontal(void)
{
if (gWeatherPtr->fadeScreenCounter == 16)
return FALSE;
@@ -763,11 +763,11 @@ void FadeScreen(u8 mode, s8 delay)
switch (gWeatherPtr->currWeather)
{
- case WEATHER_RAIN_LIGHT:
- case WEATHER_RAIN_MED:
- case WEATHER_RAIN_HEAVY:
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
case WEATHER_SNOW:
- case WEATHER_FOG_1:
+ case WEATHER_FOG_HORIZONTAL:
case WEATHER_SHADE:
case WEATHER_DROUGHT:
useWeatherPal = TRUE;
@@ -816,7 +816,7 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex)
case WEATHER_PAL_STATE_SCREEN_FADING_IN:
if (gWeatherPtr->unknown_6CA != 0)
{
- if (gWeatherPtr->currWeather == WEATHER_FOG_1)
+ if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL)
MarkFogSpritePalToLighten(paletteIndex);
paletteIndex *= 16;
for (i = 0; i < 16; i++)
@@ -831,7 +831,7 @@ void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex)
// WEATHER_PAL_STATE_CHANGING_WEATHER
// WEATHER_PAL_STATE_CHANGING_IDLE
default:
- if (gWeatherPtr->currWeather != WEATHER_FOG_1)
+ if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL)
{
ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
}
@@ -995,28 +995,28 @@ void sub_80AC274(u8 a)
switch (a)
{
case 1:
- SetWeather(WEATHER_CLOUDS);
+ SetWeather(WEATHER_SUNNY_CLOUDS);
break;
case 2:
SetWeather(WEATHER_SUNNY);
break;
case 3:
- SetWeather(WEATHER_RAIN_LIGHT);
+ SetWeather(WEATHER_RAIN);
break;
case 4:
SetWeather(WEATHER_SNOW);
break;
case 5:
- SetWeather(WEATHER_RAIN_MED);
+ SetWeather(WEATHER_RAIN_THUNDERSTORM);
break;
case 6:
- SetWeather(WEATHER_FOG_1);
+ SetWeather(WEATHER_FOG_HORIZONTAL);
break;
case 7:
- SetWeather(WEATHER_FOG_2);
+ SetWeather(WEATHER_FOG_DIAGONAL);
break;
case 8:
- SetWeather(WEATHER_ASH);
+ SetWeather(WEATHER_VOLCANIC_ASH);
break;
case 9:
SetWeather(WEATHER_SANDSTORM);
diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c
index 8fca02707..5a48f3434 100644
--- a/src/field_weather_effect.c
+++ b/src/field_weather_effect.c
@@ -14,14 +14,14 @@
#include "gpu_regs.h"
// EWRAM
-EWRAM_DATA static u8 gCurrentAlternatingWeather = 0;
+EWRAM_DATA static u8 gCurrentAbnormalWeather = 0;
EWRAM_DATA static u16 gUnusedWeatherRelated = 0;
// CONST
const u16 gCloudsWeatherPalette[] = INCBIN_U16("graphics/weather/cloud.gbapal");
const u16 gSandstormWeatherPalette[] = INCBIN_U16("graphics/weather/sandstorm.gbapal");
-const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp");
-const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp");
+const u8 gWeatherFogDiagonalTiles[] = INCBIN_U8("graphics/weather/fog_diagonal.4bpp");
+const u8 gWeatherFogHorizontalTiles[] = INCBIN_U8("graphics/weather/fog_horizontal.4bpp");
const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp");
const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp");
const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp");
@@ -31,7 +31,7 @@ const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp");
const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp");
//------------------------------------------------------------------------------
-// Clouds
+// WEATHER_SUNNY_CLOUDS
//------------------------------------------------------------------------------
static void CreateCloudSprites(void);
@@ -57,10 +57,10 @@ static const struct SpriteSheet sCloudSpriteSheet =
static const struct OamData sCloudSpriteOamData =
{
.y = 0,
- .affineMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_BLEND,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -227,7 +227,7 @@ static void UpdateCloudSprite(struct Sprite *sprite)
}
//------------------------------------------------------------------------------
-// Drought
+// WEATHER_DROUGHT
//------------------------------------------------------------------------------
static void UpdateDroughtBlend(u8);
@@ -352,7 +352,7 @@ static void UpdateDroughtBlend(u8 taskId)
#undef tWinRange
//------------------------------------------------------------------------------
-// Light Rain
+// WEATHER_RAIN
//------------------------------------------------------------------------------
static void LoadRainSpriteSheet(void);
@@ -392,10 +392,10 @@ static const struct Coords16 sRainSpriteCoords[] =
static const struct OamData sRainSpriteOamData =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x32),
.x = 0,
.matrixNum = 0,
@@ -469,27 +469,27 @@ static const struct SpriteSheet sRainSpriteSheet =
.tag = 0x1206,
};
-void LightRain_InitVars(void)
+void Rain_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
gWeatherPtr->rainSpriteVisibleCounter = 0;
gWeatherPtr->rainSpriteVisibleDelay = 8;
- gWeatherPtr->isHeavyRain = 0;
+ gWeatherPtr->isDownpour = FALSE;
gWeatherPtr->targetRainSpriteCount = 10;
gWeatherPtr->gammaTargetIndex = 3;
gWeatherPtr->gammaStepDelay = 20;
SetRainStrengthFromSoundEffect(SE_T_KOAME);
}
-void LightRain_InitAll(void)
+void Rain_InitAll(void)
{
- LightRain_InitVars();
+ Rain_InitVars();
while (!gWeatherPtr->weatherGfxLoaded)
- LightRain_Main();
+ Rain_Main();
}
-void LightRain_Main(void)
+void Rain_Main(void)
{
switch (gWeatherPtr->initStep)
{
@@ -511,14 +511,14 @@ void LightRain_Main(void)
}
}
-bool8 LightRain_Finish(void)
+bool8 Rain_Finish(void)
{
switch (gWeatherPtr->finishStep)
{
case 0:
- if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT
- || gWeatherPtr->nextWeather == WEATHER_RAIN_MED
- || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY)
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_THUNDERSTORM
+ || gWeatherPtr->nextWeather == WEATHER_DOWNPOUR)
{
gWeatherPtr->finishStep = 0xFF;
return FALSE;
@@ -563,7 +563,7 @@ static void StartRainSpriteFall(struct Sprite *sprite)
rand = sprite->tRandom * 1103515245 + 12345;
sprite->tRandom = ((rand & 0x7FFF0000) >> 16) % 600;
- numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isHeavyRain][0];
+ numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isDownpour][0];
tileX = sprite->tRandom % 30;
sprite->tPosX = tileX * 8; // Useless assignment, leftover from before fixed-point values were used
@@ -578,8 +578,8 @@ static void StartRainSpriteFall(struct Sprite *sprite)
sprite->tPosY <<= 7; // This is tileX * 8, using a fixed-point value with 4 decimal places
// "Rewind" the rain sprites, from their ending position.
- sprite->tPosX -= sRainSpriteMovement[gWeatherPtr->isHeavyRain][0] * numFallingFrames;
- sprite->tPosY -= sRainSpriteMovement[gWeatherPtr->isHeavyRain][1] * numFallingFrames;
+ sprite->tPosX -= sRainSpriteMovement[gWeatherPtr->isDownpour][0] * numFallingFrames;
+ sprite->tPosY -= sRainSpriteMovement[gWeatherPtr->isDownpour][1] * numFallingFrames;
StartSpriteAnim(sprite, 0);
sprite->tState = 0;
@@ -592,8 +592,8 @@ static void UpdateRainSprite(struct Sprite *sprite)
if (sprite->tState == 0)
{
// Raindrop is in its "falling" motion.
- sprite->tPosX += sRainSpriteMovement[gWeatherPtr->isHeavyRain][0];
- sprite->tPosY += sRainSpriteMovement[gWeatherPtr->isHeavyRain][1];
+ sprite->tPosX += sRainSpriteMovement[gWeatherPtr->isDownpour][0];
+ sprite->tPosY += sRainSpriteMovement[gWeatherPtr->isDownpour][1];
sprite->pos1.x = sprite->tPosX >> 4;
sprite->pos1.y = sprite->tPosY >> 4;
@@ -607,7 +607,7 @@ static void UpdateRainSprite(struct Sprite *sprite)
if (--sprite->tCounter == 0)
{
// Make raindrop splash on the ground
- StartSpriteAnim(sprite, gWeatherPtr->isHeavyRain + 1);
+ StartSpriteAnim(sprite, gWeatherPtr->isDownpour + 1);
sprite->tState = 1;
sprite->pos1.x -= gSpriteCoordOffsetX;
sprite->pos1.y -= gSpriteCoordOffsetY;
@@ -637,9 +637,9 @@ static void WaitRainSprite(struct Sprite *sprite)
static void InitRainSpriteMovement(struct Sprite *sprite, u16 val)
{
- u16 numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isHeavyRain][0];
- u16 numAdvanceRng = val / (sRainSpriteFallingDurations[gWeatherPtr->isHeavyRain][1] + numFallingFrames);
- u16 frameVal = val % (sRainSpriteFallingDurations[gWeatherPtr->isHeavyRain][1] + numFallingFrames);
+ u16 numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isDownpour][0];
+ u16 numAdvanceRng = val / (sRainSpriteFallingDurations[gWeatherPtr->isDownpour][1] + numFallingFrames);
+ u16 frameVal = val % (sRainSpriteFallingDurations[gWeatherPtr->isDownpour][1] + numFallingFrames);
while (--numAdvanceRng != 0xFFFF)
StartRainSpriteFall(sprite);
@@ -839,10 +839,10 @@ static bool8 UpdateVisibleSnowflakeSprites(void)
static const struct OamData sSnowflakeSpriteOamData =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -1009,16 +1009,16 @@ static void UpdateSnowflakeSprite(struct Sprite *sprite)
#undef tDeltaY2
//------------------------------------------------------------------------------
-// Medium Rain
+// WEATHER_RAIN_THUNDERSTORM
//------------------------------------------------------------------------------
-void MedRain_InitVars(void)
+void Thunderstorm_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
gWeatherPtr->rainSpriteVisibleCounter = 0;
gWeatherPtr->rainSpriteVisibleDelay = 4;
- gWeatherPtr->isHeavyRain = 0;
+ gWeatherPtr->isDownpour = FALSE;
gWeatherPtr->targetRainSpriteCount = 16;
gWeatherPtr->gammaTargetIndex = 3;
gWeatherPtr->gammaStepDelay = 20;
@@ -1027,27 +1027,27 @@ void MedRain_InitVars(void)
SetRainStrengthFromSoundEffect(SE_T_AME);
}
-void MedRain_InitAll(void)
+void Thunderstorm_InitAll(void)
{
- MedRain_InitVars();
+ Thunderstorm_InitVars();
while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Rain_Main();
+ Thunderstorm_Main();
}
//------------------------------------------------------------------------------
-// Heavy Rain
+// WEATHER_DOWNPOUR
//------------------------------------------------------------------------------
static void UpdateThunderSound(void);
static void SetThunderCounter(u16);
-void HeavyRain_InitVars(void)
+void Downpour_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
gWeatherPtr->rainSpriteVisibleCounter = 0;
gWeatherPtr->rainSpriteVisibleDelay = 4;
- gWeatherPtr->isHeavyRain = 1;
+ gWeatherPtr->isDownpour = TRUE;
gWeatherPtr->targetRainSpriteCount = 24;
gWeatherPtr->gammaTargetIndex = 3;
gWeatherPtr->gammaStepDelay = 20;
@@ -1055,14 +1055,14 @@ void HeavyRain_InitVars(void)
SetRainStrengthFromSoundEffect(SE_T_OOAME);
}
-void HeavyRain_InitAll(void)
+void Downpour_InitAll(void)
{
- HeavyRain_InitVars();
+ Downpour_InitVars();
while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Rain_Main();
+ Thunderstorm_Main();
}
-void Rain_Main(void)
+void Thunderstorm_Main(void)
{
UpdateThunderSound();
switch (gWeatherPtr->initStep)
@@ -1166,7 +1166,7 @@ void Rain_Main(void)
}
}
-bool8 Rain_Finish(void)
+bool8 Thunderstorm_Finish(void)
{
switch (gWeatherPtr->finishStep)
{
@@ -1175,12 +1175,12 @@ bool8 Rain_Finish(void)
gWeatherPtr->finishStep++;
// fall through
case 1:
- Rain_Main();
+ Thunderstorm_Main();
if (gWeatherPtr->unknown_6EA)
{
- if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT
- || gWeatherPtr->nextWeather == WEATHER_RAIN_MED
- || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY)
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_THUNDERSTORM
+ || gWeatherPtr->nextWeather == WEATHER_DOWNPOUR)
return FALSE;
gWeatherPtr->targetRainSpriteCount = 0;
@@ -1235,7 +1235,7 @@ static void UpdateThunderSound(void)
}
//------------------------------------------------------------------------------
-// Fog 1
+// WEATHER_FOG_HORIZONTAL and WEATHER_UNDERWATER
//------------------------------------------------------------------------------
// unused data
@@ -1244,10 +1244,10 @@ static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300};
static const struct OamData gOamData_839AB2C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 1,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_BLEND,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -1315,8 +1315,8 @@ static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] =
gSpriteAffineAnim_839AB7C,
};
-static void Fog1SpriteCallback(struct Sprite *);
-static const struct SpriteTemplate sFog1SpriteTemplate =
+static void FogHorizontalSpriteCallback(struct Sprite *);
+static const struct SpriteTemplate sFogHorizontalSpriteTemplate =
{
.tileTag = 0x1201,
.paletteTag = 0x1200,
@@ -1324,48 +1324,48 @@ static const struct SpriteTemplate sFog1SpriteTemplate =
.anims = gSpriteAnimTable_839AB64,
.images = NULL,
.affineAnims = gSpriteAffineAnimTable_839AB8C,
- .callback = Fog1SpriteCallback,
+ .callback = FogHorizontalSpriteCallback,
};
-void Fog1_Main(void);
-static void CreateFog1Sprites(void);
-static void DestroyFog1Sprites(void);
+void FogHorizontal_Main(void);
+static void CreateFogHorizontalSprites(void);
+static void DestroyFogHorizontalSprites(void);
-void Fog1_InitVars(void)
+void FogHorizontal_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = FALSE;
gWeatherPtr->gammaTargetIndex = 0;
gWeatherPtr->gammaStepDelay = 20;
- if (gWeatherPtr->fog1SpritesCreated == 0)
+ if (gWeatherPtr->fogHSpritesCreated == 0)
{
- gWeatherPtr->fog1ScrollCounter = 0;
- gWeatherPtr->fog1ScrollOffset = 0;
- gWeatherPtr->fog1ScrollPosX = 0;
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset = 0;
+ gWeatherPtr->fogHScrollPosX = 0;
Weather_SetBlendCoeffs(0, 16);
}
}
-void Fog1_InitAll(void)
+void FogHorizontal_InitAll(void)
{
- Fog1_InitVars();
+ FogHorizontal_InitVars();
while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Fog1_Main();
+ FogHorizontal_Main();
}
-void Fog1_Main(void)
+void FogHorizontal_Main(void)
{
- gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fog1ScrollOffset) & 0xFF;
- if (++gWeatherPtr->fog1ScrollCounter > 3)
+ gWeatherPtr->fogHScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fogHScrollOffset) & 0xFF;
+ if (++gWeatherPtr->fogHScrollCounter > 3)
{
- gWeatherPtr->fog1ScrollCounter = 0;
- gWeatherPtr->fog1ScrollOffset++;
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset++;
}
switch (gWeatherPtr->initStep)
{
case 0:
- CreateFog1Sprites();
- if (gWeatherPtr->currWeather == WEATHER_FOG_1)
+ CreateFogHorizontalSprites();
+ if (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL)
Weather_SetTargetBlendCoeffs(12, 8, 3);
else
Weather_SetTargetBlendCoeffs(4, 16, 0);
@@ -1381,13 +1381,13 @@ void Fog1_Main(void)
}
}
-bool8 Fog1_Finish(void)
+bool8 FogHorizontal_Finish(void)
{
- gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fog1ScrollOffset) & 0xFF;
- if (++gWeatherPtr->fog1ScrollCounter > 3)
+ gWeatherPtr->fogHScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fogHScrollOffset) & 0xFF;
+ if (++gWeatherPtr->fogHScrollCounter > 3)
{
- gWeatherPtr->fog1ScrollCounter = 0;
- gWeatherPtr->fog1ScrollOffset++;
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset++;
}
switch (gWeatherPtr->finishStep)
@@ -1401,7 +1401,7 @@ bool8 Fog1_Finish(void)
gWeatherPtr->finishStep++;
break;
case 2:
- DestroyFog1Sprites();
+ DestroyFogHorizontalSprites();
gWeatherPtr->finishStep++;
break;
default:
@@ -1412,73 +1412,73 @@ bool8 Fog1_Finish(void)
#define tSpriteColumn data[0]
-static void Fog1SpriteCallback(struct Sprite *sprite)
+static void FogHorizontalSpriteCallback(struct Sprite *sprite)
{
sprite->pos2.y = (u8)gSpriteCoordOffsetY;
- sprite->pos1.x = gWeatherPtr->fog1ScrollPosX + 32 + sprite->tSpriteColumn * 64;
+ sprite->pos1.x = gWeatherPtr->fogHScrollPosX + 32 + sprite->tSpriteColumn * 64;
if (sprite->pos1.x > 271)
{
- sprite->pos1.x = 480 + gWeatherPtr->fog1ScrollPosX - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x = 480 + gWeatherPtr->fogHScrollPosX - (4 - sprite->tSpriteColumn) * 64;
sprite->pos1.x &= 0x1FF;
}
}
-static void CreateFog1Sprites(void)
+static void CreateFogHorizontalSprites(void)
{
u16 i;
u8 spriteId;
struct Sprite *sprite;
- if (!gWeatherPtr->fog1SpritesCreated)
+ if (!gWeatherPtr->fogHSpritesCreated)
{
- struct SpriteSheet fog1SpriteSheet = {
- .data = gWeatherFog1Tiles,
- .size = sizeof(gWeatherFog1Tiles),
+ struct SpriteSheet fogHorizontalSpriteSheet = {
+ .data = gWeatherFogHorizontalTiles,
+ .size = sizeof(gWeatherFogHorizontalTiles),
.tag = 0x1201,
};
- LoadSpriteSheet(&fog1SpriteSheet);
- for (i = 0; i < NUM_FOG1_SPRITES; i++)
+ LoadSpriteSheet(&fogHorizontalSpriteSheet);
+ for (i = 0; i < NUM_FOG_HORIZONTAL_SPRITES; i++)
{
- spriteId = CreateSpriteAtEnd(&sFog1SpriteTemplate, 0, 0, 0xFF);
+ spriteId = CreateSpriteAtEnd(&sFogHorizontalSpriteTemplate, 0, 0, 0xFF);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->tSpriteColumn = i % 5;
sprite->pos1.x = (i % 5) * 64 + 32;
sprite->pos1.y = (i / 5) * 64 + 32;
- gWeatherPtr->sprites.s2.fog1Sprites[i] = sprite;
+ gWeatherPtr->sprites.s2.fogHSprites[i] = sprite;
}
else
{
- gWeatherPtr->sprites.s2.fog1Sprites[i] = NULL;
+ gWeatherPtr->sprites.s2.fogHSprites[i] = NULL;
}
}
- gWeatherPtr->fog1SpritesCreated = TRUE;
+ gWeatherPtr->fogHSpritesCreated = TRUE;
}
}
-static void DestroyFog1Sprites(void)
+static void DestroyFogHorizontalSprites(void)
{
u16 i;
- if (gWeatherPtr->fog1SpritesCreated)
+ if (gWeatherPtr->fogHSpritesCreated)
{
- for (i = 0; i < NUM_FOG1_SPRITES; i++)
+ for (i = 0; i < NUM_FOG_HORIZONTAL_SPRITES; i++)
{
- if (gWeatherPtr->sprites.s2.fog1Sprites[i] != NULL)
- DestroySprite(gWeatherPtr->sprites.s2.fog1Sprites[i]);
+ if (gWeatherPtr->sprites.s2.fogHSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.fogHSprites[i]);
}
FreeSpriteTilesByTag(0x1201);
- gWeatherPtr->fog1SpritesCreated = 0;
+ gWeatherPtr->fogHSpritesCreated = 0;
}
}
#undef tSpriteColumn
//------------------------------------------------------------------------------
-// Volcanic ash
+// WEATHER_VOLCANIC_ASH
//------------------------------------------------------------------------------
static void LoadAshSpriteSheet(void);
@@ -1688,48 +1688,48 @@ static void UpdateAshSprite(struct Sprite *sprite)
#undef tSpriteRow
//------------------------------------------------------------------------------
-// Fog 2
+// WEATHER_FOG_DIAGONAL
//------------------------------------------------------------------------------
-static void UpdateFog2Movement(void);
-static void CreateFog2Sprites(void);
-static void DestroyFog2Sprites(void);
-static void UpdateFog2Sprite(struct Sprite *);
+static void UpdateFogDiagonalMovement(void);
+static void CreateFogDiagonalSprites(void);
+static void DestroyFogDiagonalSprites(void);
+static void UpdateFogDiagonalSprite(struct Sprite *);
-void Fog2_InitVars(void)
+void FogDiagonal_InitVars(void)
{
gWeatherPtr->initStep = 0;
gWeatherPtr->weatherGfxLoaded = 0;
gWeatherPtr->gammaTargetIndex = 0;
gWeatherPtr->gammaStepDelay = 20;
- gWeatherPtr->fog1ScrollCounter = 0;
- gWeatherPtr->fog1ScrollOffset = 1;
- if (!gWeatherPtr->fog2SpritesCreated)
- {
- gWeatherPtr->fog2ScrollXCounter = 0;
- gWeatherPtr->fog2ScrollYCounter = 0;
- gWeatherPtr->fog2XOffset = 0;
- gWeatherPtr->fog2YOffset = 0;
- gWeatherPtr->fog2BaseSpritesX = 0;
- gWeatherPtr->fog2PosY = 0;
+ gWeatherPtr->fogHScrollCounter = 0;
+ gWeatherPtr->fogHScrollOffset = 1;
+ if (!gWeatherPtr->fogDSpritesCreated)
+ {
+ gWeatherPtr->fogDScrollXCounter = 0;
+ gWeatherPtr->fogDScrollYCounter = 0;
+ gWeatherPtr->fogDXOffset = 0;
+ gWeatherPtr->fogDYOffset = 0;
+ gWeatherPtr->fogDBaseSpritesX = 0;
+ gWeatherPtr->fogDPosY = 0;
Weather_SetBlendCoeffs(0, 16);
}
}
-void Fog2_InitAll(void)
+void FogDiagonal_InitAll(void)
{
- Fog2_InitVars();
+ FogDiagonal_InitVars();
while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Fog2_Main();
+ FogDiagonal_Main();
}
-void Fog2_Main(void)
+void FogDiagonal_Main(void)
{
- UpdateFog2Movement();
+ UpdateFogDiagonalMovement();
switch (gWeatherPtr->initStep)
{
case 0:
- CreateFog2Sprites();
+ CreateFogDiagonalSprites();
gWeatherPtr->initStep++;
break;
case 1:
@@ -1745,9 +1745,9 @@ void Fog2_Main(void)
}
}
-bool8 Fog2_Finish(void)
+bool8 FogDiagonal_Finish(void)
{
- UpdateFog2Movement();
+ UpdateFogDiagonalMovement();
switch (gWeatherPtr->finishStep)
{
case 0:
@@ -1760,7 +1760,7 @@ bool8 Fog2_Finish(void)
gWeatherPtr->finishStep++;
break;
case 2:
- DestroyFog2Sprites();
+ DestroyFogDiagonalSprites();
gWeatherPtr->finishStep++;
break;
default:
@@ -1769,32 +1769,32 @@ bool8 Fog2_Finish(void)
return TRUE;
}
-static void UpdateFog2Movement(void)
+static void UpdateFogDiagonalMovement(void)
{
- if (++gWeatherPtr->fog2ScrollXCounter > 2)
+ if (++gWeatherPtr->fogDScrollXCounter > 2)
{
- gWeatherPtr->fog2XOffset++;
- gWeatherPtr->fog2ScrollXCounter = 0;
+ gWeatherPtr->fogDXOffset++;
+ gWeatherPtr->fogDScrollXCounter = 0;
}
- if (++gWeatherPtr->fog2ScrollYCounter > 4)
+ if (++gWeatherPtr->fogDScrollYCounter > 4)
{
- gWeatherPtr->fog2YOffset++;
- gWeatherPtr->fog2ScrollYCounter = 0;
+ gWeatherPtr->fogDYOffset++;
+ gWeatherPtr->fogDScrollYCounter = 0;
}
- gWeatherPtr->fog2BaseSpritesX = (gSpriteCoordOffsetX - gWeatherPtr->fog2XOffset) & 0xFF;
- gWeatherPtr->fog2PosY = gSpriteCoordOffsetY + gWeatherPtr->fog2YOffset;
+ gWeatherPtr->fogDBaseSpritesX = (gSpriteCoordOffsetX - gWeatherPtr->fogDXOffset) & 0xFF;
+ gWeatherPtr->fogDPosY = gSpriteCoordOffsetY + gWeatherPtr->fogDYOffset;
}
-static const struct SpriteSheet gFog2SpriteSheet =
+static const struct SpriteSheet gFogDiagonalSpriteSheet =
{
- .data = gWeatherFog2Tiles,
- .size = sizeof(gWeatherFog2Tiles),
+ .data = gWeatherFogDiagonalTiles,
+ .size = sizeof(gWeatherFogDiagonalTiles),
.tag = 0x1203,
};
-static const struct OamData sFog2SpriteOamData =
+static const struct OamData sFogDiagonalSpriteOamData =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -1808,86 +1808,86 @@ static const struct OamData sFog2SpriteOamData =
.paletteNum = 0,
};
-static const union AnimCmd sFog2SpriteAnimCmd0[] =
+static const union AnimCmd sFogDiagonalSpriteAnimCmd0[] =
{
ANIMCMD_FRAME(0, 16),
ANIMCMD_END,
};
-static const union AnimCmd *const sFog2SpriteAnimCmds[] =
+static const union AnimCmd *const sFogDiagonalSpriteAnimCmds[] =
{
- sFog2SpriteAnimCmd0,
+ sFogDiagonalSpriteAnimCmd0,
};
-static const struct SpriteTemplate sFog2SpriteTemplate =
+static const struct SpriteTemplate sFogDiagonalSpriteTemplate =
{
.tileTag = 0x1203,
.paletteTag = 0x1200,
- .oam = &sFog2SpriteOamData,
- .anims = sFog2SpriteAnimCmds,
+ .oam = &sFogDiagonalSpriteOamData,
+ .anims = sFogDiagonalSpriteAnimCmds,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = UpdateFog2Sprite,
+ .callback = UpdateFogDiagonalSprite,
};
#define tSpriteColumn data[0]
#define tSpriteRow data[1]
-static void CreateFog2Sprites(void)
+static void CreateFogDiagonalSprites(void)
{
u16 i;
- struct SpriteSheet fog2SpriteSheet;
+ struct SpriteSheet fogDiagonalSpriteSheet;
u8 spriteId;
struct Sprite *sprite;
- if (!gWeatherPtr->fog2SpritesCreated)
+ if (!gWeatherPtr->fogDSpritesCreated)
{
- fog2SpriteSheet = gFog2SpriteSheet;
- LoadSpriteSheet(&fog2SpriteSheet);
- for (i = 0; i < NUM_FOG2_SPRITES; i++)
+ fogDiagonalSpriteSheet = gFogDiagonalSpriteSheet;
+ LoadSpriteSheet(&fogDiagonalSpriteSheet);
+ for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++)
{
- spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, (i / 5) * 64, 0xFF);
+ spriteId = CreateSpriteAtEnd(&sFogDiagonalSpriteTemplate, 0, (i / 5) * 64, 0xFF);
if (spriteId != MAX_SPRITES)
{
sprite = &gSprites[spriteId];
sprite->tSpriteColumn = i % 5;
sprite->tSpriteRow = i / 5;
- gWeatherPtr->sprites.s2.fog2Sprites[i] = sprite;
+ gWeatherPtr->sprites.s2.fogDSprites[i] = sprite;
}
else
{
- gWeatherPtr->sprites.s2.fog2Sprites[i] = NULL;
+ gWeatherPtr->sprites.s2.fogDSprites[i] = NULL;
}
}
- gWeatherPtr->fog2SpritesCreated = TRUE;
+ gWeatherPtr->fogDSpritesCreated = TRUE;
}
}
-static void DestroyFog2Sprites(void)
+static void DestroyFogDiagonalSprites(void)
{
u16 i;
- if (gWeatherPtr->fog2SpritesCreated)
+ if (gWeatherPtr->fogDSpritesCreated)
{
- for (i = 0; i < NUM_FOG2_SPRITES; i++)
+ for (i = 0; i < NUM_FOG_DIAGONAL_SPRITES; i++)
{
- if (gWeatherPtr->sprites.s2.fog2Sprites[i])
- DestroySprite(gWeatherPtr->sprites.s2.fog2Sprites[i]);
+ if (gWeatherPtr->sprites.s2.fogDSprites[i])
+ DestroySprite(gWeatherPtr->sprites.s2.fogDSprites[i]);
}
FreeSpriteTilesByTag(0x1203);
- gWeatherPtr->fog2SpritesCreated = FALSE;
+ gWeatherPtr->fogDSpritesCreated = FALSE;
}
}
-static void UpdateFog2Sprite(struct Sprite *sprite)
+static void UpdateFogDiagonalSprite(struct Sprite *sprite)
{
- sprite->pos2.y = gWeatherPtr->fog2PosY;
- sprite->pos1.x = gWeatherPtr->fog2BaseSpritesX + 32 + sprite->tSpriteColumn * 64;
+ sprite->pos2.y = gWeatherPtr->fogDPosY;
+ sprite->pos1.x = gWeatherPtr->fogDBaseSpritesX + 32 + sprite->tSpriteColumn * 64;
if (sprite->pos1.x > 271)
{
- sprite->pos1.x = gWeatherPtr->fog2BaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64;
+ sprite->pos1.x = gWeatherPtr->fogDBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64;
sprite->pos1.x &= 0x1FF;
}
}
@@ -1896,7 +1896,7 @@ static void UpdateFog2Sprite(struct Sprite *sprite)
#undef tSpriteRow
//------------------------------------------------------------------------------
-// Sandstorm
+// WEATHER_SANDSTORM
//------------------------------------------------------------------------------
static void UpdateSandstormWaveIndex(void);
@@ -2137,14 +2137,14 @@ static void CreateSwirlSandstormSprites(void)
if (spriteId != MAX_SPRITES)
{
gWeatherPtr->sprites.s2.sandstormSprites2[i] = &gSprites[spriteId];
- gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = 2;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = ST_OAM_SIZE_2;
gWeatherPtr->sprites.s2.sandstormSprites2[i]->tSpriteRow = i * 51;
gWeatherPtr->sprites.s2.sandstormSprites2[i]->tRadius = 8;
gWeatherPtr->sprites.s2.sandstormSprites2[i]->tRadiusCounter = 0;
gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730; // unused value
gWeatherPtr->sprites.s2.sandstormSprites2[i]->tEntranceDelay = sSwirlEntranceDelays[i];
StartSpriteAnim(gWeatherPtr->sprites.s2.sandstormSprites2[i], 1);
- CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], 0, 2, 0);
+ CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), ST_OAM_AFFINE_OFF);
gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = WaitSandSwirlSpriteEntrance;
}
else
@@ -2205,7 +2205,7 @@ static void UpdateSandstormSwirlSprite(struct Sprite *sprite)
#undef tEntranceDelay
//------------------------------------------------------------------------------
-// Shade
+// WEATHER_SHADE
//------------------------------------------------------------------------------
void Shade_InitVars(void)
@@ -2230,7 +2230,7 @@ bool8 Shade_Finish(void)
}
//------------------------------------------------------------------------------
-// Bubbles
+// WEATHER_UNDERWATER_BUBBLES
//------------------------------------------------------------------------------
static void CreateBubbleSprite(u16);
@@ -2265,7 +2265,7 @@ static const s16 sBubbleStartCoords[][2] =
void Bubbles_InitVars(void)
{
- Fog1_InitVars();
+ FogHorizontal_InitVars();
if (!gWeatherPtr->bubblesSpritesCreated)
{
LoadSpriteSheet(&sWeatherBubbleSpriteSheet);
@@ -2285,7 +2285,7 @@ void Bubbles_InitAll(void)
void Bubbles_Main(void)
{
- Fog1_Main();
+ FogHorizontal_Main();
if (++gWeatherPtr->bubblesDelayCounter > sBubbleStartDelays[gWeatherPtr->bubblesDelayIndex])
{
gWeatherPtr->bubblesDelayCounter = 0;
@@ -2300,7 +2300,7 @@ void Bubbles_Main(void)
bool8 Bubbles_Finish(void)
{
- if (!Fog1_Finish())
+ if (!FogHorizontal_Finish())
{
DestroyBubbleSprites();
return FALSE;
@@ -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,
@@ -2399,13 +2399,13 @@ static void UpdateBubbleSprite(struct Sprite *sprite)
//------------------------------------------------------------------------------
// Unused function.
-static void UnusedSetCurrentAlternatingWeather(u32 a0, u32 a1)
+static void UnusedSetCurrentAbnormalWeather(u32 a0, u32 a1)
{
- gCurrentAlternatingWeather = a0;
+ gCurrentAbnormalWeather = a0;
gUnusedWeatherRelated = a1;
}
-static void Task_DoAlternatingWeather(u8 taskId)
+static void Task_DoAbnormalWeather(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -2415,7 +2415,7 @@ static void Task_DoAlternatingWeather(u8 taskId)
if (data[15]-- <= 0)
{
SetNextWeather(data[1]);
- gCurrentAlternatingWeather = data[1];
+ gCurrentAbnormalWeather = data[1];
data[15] = 600;
data[0]++;
}
@@ -2424,7 +2424,7 @@ static void Task_DoAlternatingWeather(u8 taskId)
if (data[15]-- <= 0)
{
SetNextWeather(data[2]);
- gCurrentAlternatingWeather = data[2];
+ gCurrentAbnormalWeather = data[2];
data[15] = 600;
data[0] = 0;
}
@@ -2432,27 +2432,27 @@ static void Task_DoAlternatingWeather(u8 taskId)
}
}
-static void CreateAlternatingWeatherTask(void)
+static void CreateAbnormalWeatherTask(void)
{
- u8 taskId = CreateTask(Task_DoAlternatingWeather, 0);
+ u8 taskId = CreateTask(Task_DoAbnormalWeather, 0);
s16 *data = gTasks[taskId].data;
data[15] = 600;
- if (gCurrentAlternatingWeather == WEATHER_RAIN_HEAVY)
+ if (gCurrentAbnormalWeather == WEATHER_DOWNPOUR)
{
data[1] = WEATHER_DROUGHT;
- data[2] = WEATHER_RAIN_HEAVY;
+ data[2] = WEATHER_DOWNPOUR;
}
- else if (gCurrentAlternatingWeather == WEATHER_DROUGHT)
+ else if (gCurrentAbnormalWeather == WEATHER_DROUGHT)
{
- data[1] = WEATHER_RAIN_HEAVY;
+ data[1] = WEATHER_DOWNPOUR;
data[2] = WEATHER_DROUGHT;
}
else
{
- gCurrentAlternatingWeather = WEATHER_RAIN_HEAVY;
+ gCurrentAbnormalWeather = WEATHER_DOWNPOUR;
data[1] = WEATHER_DROUGHT;
- data[2] = WEATHER_RAIN_HEAVY;
+ data[2] = WEATHER_DOWNPOUR;
}
}
@@ -2494,17 +2494,17 @@ void DoCurrentWeather(void)
{
u8 weather = GetSav1Weather();
- if (weather == WEATHER_ALTERNATING)
+ if (weather == WEATHER_ABNORMAL)
{
- if (!FuncIsActiveTask(Task_DoAlternatingWeather))
- CreateAlternatingWeatherTask();
- weather = gCurrentAlternatingWeather;
+ if (!FuncIsActiveTask(Task_DoAbnormalWeather))
+ CreateAbnormalWeatherTask();
+ weather = gCurrentAbnormalWeather;
}
else
{
- if (FuncIsActiveTask(Task_DoAlternatingWeather))
- DestroyTask(FindTaskIdByFunc(Task_DoAlternatingWeather));
- gCurrentAlternatingWeather = WEATHER_RAIN_HEAVY;
+ if (FuncIsActiveTask(Task_DoAbnormalWeather))
+ DestroyTask(FindTaskIdByFunc(Task_DoAbnormalWeather));
+ gCurrentAbnormalWeather = WEATHER_DOWNPOUR;
}
SetNextWeather(weather);
}
@@ -2513,17 +2513,17 @@ void ResumePausedWeather(void)
{
u8 weather = GetSav1Weather();
- if (weather == WEATHER_ALTERNATING)
+ if (weather == WEATHER_ABNORMAL)
{
- if (!FuncIsActiveTask(Task_DoAlternatingWeather))
- CreateAlternatingWeatherTask();
- weather = gCurrentAlternatingWeather;
+ if (!FuncIsActiveTask(Task_DoAbnormalWeather))
+ CreateAbnormalWeatherTask();
+ weather = gCurrentAbnormalWeather;
}
else
{
- if (FuncIsActiveTask(Task_DoAlternatingWeather))
- DestroyTask(FindTaskIdByFunc(Task_DoAlternatingWeather));
- gCurrentAlternatingWeather = WEATHER_RAIN_HEAVY;
+ if (FuncIsActiveTask(Task_DoAbnormalWeather))
+ DestroyTask(FindTaskIdByFunc(Task_DoAbnormalWeather));
+ gCurrentAbnormalWeather = WEATHER_DOWNPOUR;
}
SetCurrentAndNextWeather(weather);
}
@@ -2531,15 +2531,15 @@ void ResumePausedWeather(void)
static const u8 sWeatherCycleRoute119[] =
{
WEATHER_SUNNY,
- WEATHER_RAIN_LIGHT,
- WEATHER_RAIN_MED,
- WEATHER_RAIN_LIGHT,
+ WEATHER_RAIN,
+ WEATHER_RAIN_THUNDERSTORM,
+ WEATHER_RAIN,
};
static const u8 sWeatherCycleRoute123[] =
{
WEATHER_SUNNY,
WEATHER_SUNNY,
- WEATHER_RAIN_LIGHT,
+ WEATHER_RAIN,
WEATHER_SUNNY,
};
@@ -2547,25 +2547,25 @@ static u8 TranslateWeatherNum(u8 weather)
{
switch (weather)
{
- case WEATHER_NONE: return WEATHER_NONE;
- case WEATHER_CLOUDS: return WEATHER_CLOUDS;
- case WEATHER_SUNNY: return WEATHER_SUNNY;
- case WEATHER_RAIN_LIGHT: return WEATHER_RAIN_LIGHT;
- case WEATHER_SNOW: return WEATHER_SNOW;
- case WEATHER_RAIN_MED: return WEATHER_RAIN_MED;
- case WEATHER_FOG_1: return WEATHER_FOG_1;
- case WEATHER_ASH: return WEATHER_ASH;
- case WEATHER_SANDSTORM: return WEATHER_SANDSTORM;
- case WEATHER_FOG_2: return WEATHER_FOG_2;
- case WEATHER_FOG_3: return WEATHER_FOG_3;
- case WEATHER_SHADE: return WEATHER_SHADE;
- case WEATHER_DROUGHT: return WEATHER_DROUGHT;
- case WEATHER_RAIN_HEAVY: return WEATHER_RAIN_HEAVY;
- case WEATHER_BUBBLES: return WEATHER_BUBBLES;
- case WEATHER_ALTERNATING: return WEATHER_ALTERNATING;
- case WEATHER_ROUTE119_CYCLE: return sWeatherCycleRoute119[gSaveBlock1Ptr->weatherCycleStage];
- case WEATHER_ROUTE123_CYCLE: return sWeatherCycleRoute123[gSaveBlock1Ptr->weatherCycleStage];
- default: return WEATHER_NONE;
+ case WEATHER_NONE: return WEATHER_NONE;
+ case WEATHER_SUNNY_CLOUDS: return WEATHER_SUNNY_CLOUDS;
+ case WEATHER_SUNNY: return WEATHER_SUNNY;
+ case WEATHER_RAIN: return WEATHER_RAIN;
+ case WEATHER_SNOW: return WEATHER_SNOW;
+ case WEATHER_RAIN_THUNDERSTORM: return WEATHER_RAIN_THUNDERSTORM;
+ case WEATHER_FOG_HORIZONTAL: return WEATHER_FOG_HORIZONTAL;
+ case WEATHER_VOLCANIC_ASH: return WEATHER_VOLCANIC_ASH;
+ case WEATHER_SANDSTORM: return WEATHER_SANDSTORM;
+ case WEATHER_FOG_DIAGONAL: return WEATHER_FOG_DIAGONAL;
+ case WEATHER_UNDERWATER: return WEATHER_UNDERWATER;
+ case WEATHER_SHADE: return WEATHER_SHADE;
+ case WEATHER_DROUGHT: return WEATHER_DROUGHT;
+ case WEATHER_DOWNPOUR: return WEATHER_DOWNPOUR;
+ case WEATHER_UNDERWATER_BUBBLES: return WEATHER_UNDERWATER_BUBBLES;
+ case WEATHER_ABNORMAL: return WEATHER_ABNORMAL;
+ case WEATHER_ROUTE119_CYCLE: return sWeatherCycleRoute119[gSaveBlock1Ptr->weatherCycleStage];
+ case WEATHER_ROUTE123_CYCLE: return sWeatherCycleRoute123[gSaveBlock1Ptr->weatherCycleStage];
+ default: return WEATHER_NONE;
}
}
@@ -2579,7 +2579,7 @@ void UpdateWeatherPerDay(u16 increment)
static void UpdateRainCounter(u8 newWeather, u8 oldWeather)
{
if (newWeather != oldWeather
- && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED))
+ && (newWeather == WEATHER_RAIN || newWeather == WEATHER_RAIN_THUNDERSTORM))
IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
}
diff --git a/src/fieldmap.c b/src/fieldmap.c
index b2b80a2df..21bbaa8f8 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -75,7 +75,7 @@ void InitBattlePyramidMap(bool8 setPlayerPosition)
void InitTrainerHillMap(void)
{
CpuFastFill(0x03ff03ff, gBackupMapData, sizeof(gBackupMapData));
- sub_81D5FB4(gBackupMapData);
+ GenerateTrainerHillFloorLayout(gBackupMapData);
}
static void InitMapLayoutData(struct MapHeader *mapHeader)
@@ -859,7 +859,7 @@ int sub_8088A4C(struct MapConnection *connection, int x, int y)
return FALSE;
}
-struct MapConnection *sub_8088A8C(s16 x, s16 y)
+struct MapConnection *GetConnectionAtCoords(s16 x, s16 y)
{
int count;
struct MapConnection *connection;
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..a0160344e 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[];
@@ -92,10 +92,10 @@ static const struct HyperCutterUnk sHyperCutStruct[] =
static const struct OamData sOamData_CutGrass =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -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_dig.c b/src/fldeff_dig.c
index b39d25182..7f10e126e 100644
--- a/src/fldeff_dig.c
+++ b/src/fldeff_dig.c
@@ -57,7 +57,7 @@ static void sub_8135780(void)
}
else
{
- taskId = CreateTask(task08_080A1C44, 8);
+ taskId = CreateTask(Task_UseDigEscapeRopeOnField, 8);
gTasks[taskId].data[0] = 0;
}
}
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index 46b1da6d8..5f3dabd03 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -27,8 +27,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 TryDoMapTransition(void);
static void DoExitCaveTransition(void);
static void Task_ExitCaveTransition1(u8 taskId);
@@ -87,26 +87,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 CB2_ChangeMapMain(void)
diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c
index c68a95d41..05fa43338 100644
--- a/src/fldeff_misc.c
+++ b/src/fldeff_misc.c
@@ -20,9 +20,11 @@
#include "string_util.h"
#include "constants/field_effects.h"
#include "constants/metatile_behaviors.h"
+#include "constants/metatile_labels.h"
#include "constants/songs.h"
+#include "constants/tv.h"
#include "constants/vars.h"
-#include "constants/metatile_labels.h"
+
EWRAM_DATA struct MapPosition gPlayerFacingPosition = {0};
@@ -583,7 +585,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 +645,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 +719,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)
@@ -801,16 +803,16 @@ static void Task_SecretBasePCTurnOn(u8 taskId)
{
case 4:
case 12:
- MapGridSetMetatileIdAt(data[0], data[1], 0x224);
+ MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC_On);
CurrentMapDrawMetatileAt(data[0], data[1]);
break;
case 8:
case 16:
- MapGridSetMetatileIdAt(data[0], data[1], 0x220);
+ MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC);
CurrentMapDrawMetatileAt(data[0], data[1]);
break;
case 20:
- MapGridSetMetatileIdAt(data[0], data[1], 0x224);
+ MapGridSetMetatileIdAt(data[0], data[1], METATILE_SecretBase_PC_On);
CurrentMapDrawMetatileAt(data[0], data[1]);
FieldEffectActiveListRemove(FLDEFF_PCTURN_ON);
EnableBothScriptContexts();
@@ -829,9 +831,9 @@ void DoSecretBasePCTurnOffEffect(void)
PlaySE(SE_PC_OFF);
if (!VarGet(VAR_CURRENT_SECRET_BASE))
- MapGridSetMetatileIdAt(x, y, 0x220 | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | METATILE_COLLISION_MASK);
else
- MapGridSetMetatileIdAt(x, y, 0x221 | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_RegisterPC | METATILE_COLLISION_MASK);
CurrentMapDrawMetatileAt(x, y);
}
@@ -875,16 +877,16 @@ static void DoBalloonSoundEffect(s16 metatileId)
{
switch (metatileId)
{
- case 824:
+ case METATILE_SecretBase_RedBalloon:
PlaySE(SE_FUUSEN1);
break;
- case 828:
+ case METATILE_SecretBase_BlueBalloon:
PlaySE(SE_FUUSEN2);
break;
- case 832:
+ case METATILE_SecretBase_YellowBalloon:
PlaySE(SE_FUUSEN3);
break;
- case 552:
+ case METATILE_SecretBase_MudBall:
PlaySE(SE_TOY_DANGO);
break;
}
@@ -903,8 +905,8 @@ bool8 FldEff_NopA700(void)
static void DoSecretBaseBreakableDoorEffect(s16 x, s16 y)
{
PlaySE(SE_TOY_KABE);
- MapGridSetMetatileIdAt(x, y, 0x276);
- MapGridSetMetatileIdAt(x, y - 1, 0x26E);
+ MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_BreakableDoor_BottomOpen);
+ MapGridSetMetatileIdAt(x, y - 1, METATILE_SecretBase_BreakableDoor_TopOpen);
CurrentMapDrawMetatileAt(x, y);
CurrentMapDrawMetatileAt(x, y - 1);
}
@@ -946,28 +948,28 @@ static void Task_SecretBaseMusicNoteMatSound(u8 taskId)
{
switch (gTasks[taskId].tMetatileID)
{
- case 632:
+ case METATILE_SecretBase_NoteMat_C:
PlaySE(SE_TOY_C);
break;
- case 633:
+ case METATILE_SecretBase_NoteMat_D:
PlaySE(SE_TOY_D);
break;
- case 634:
+ case METATILE_SecretBase_NoteMat_E:
PlaySE(SE_TOY_E);
break;
- case 635:
+ case METATILE_SecretBase_NoteMat_F:
PlaySE(SE_TOY_F);
break;
- case 636:
+ case METATILE_SecretBase_NoteMat_G:
PlaySE(SE_TOY_G);
break;
- case 637:
+ case METATILE_SecretBase_NoteMat_A:
PlaySE(SE_TOY_A);
break;
- case 638:
+ case METATILE_SecretBase_NoteMat_B:
PlaySE(SE_TOY_B);
break;
- case 691:
+ case METATILE_SecretBase_NoteMat_C_Sharp:
PlaySE(SE_TOY_C1);
break;
}
@@ -1071,12 +1073,12 @@ static void SpriteCB_SandPillar_0(struct Sprite *sprite)
{
PlaySE(SE_W088);
- if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == 646)
- MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 3586);
+ if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == METATILE_SecretBase_SandOrnament_TopWall)
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_Wall_TopMid | METATILE_COLLISION_MASK);
else
- MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 644);
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, METATILE_SecretBase_SandOrnament_BrokenTop);
- MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 522);
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_Ground);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
@@ -1092,7 +1094,7 @@ static void SpriteCB_SandPillar_1(struct Sprite *sprite)
}
else
{
- MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 3724);
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], METATILE_SecretBase_SandOrnament_BrokenBase | METATILE_COLLISION_MASK);
CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
sprite->data[0] = 0;
sprite->callback = SpriteCB_SandPillar_2;
@@ -1105,7 +1107,7 @@ static void SpriteCB_SandPillar_2(struct Sprite *sprite)
EnableBothScriptContexts();
}
-void GetShieldToyTVDecorationInfo(void)
+void InteractWithShieldOrTVDecoration(void)
{
s16 x, y;
s32 metatileId;
@@ -1116,7 +1118,7 @@ void GetShieldToyTVDecorationInfo(void)
switch (metatileId)
{
- case 822:
+ case METATILE_SecretBase_GoldShield_Base1:
ConvertIntToDecimalStringN(gStringVar1, 100, STR_CONV_MODE_LEFT_ALIGN, 3);
StringCopy(gStringVar2, gText_Gold);
@@ -1125,9 +1127,9 @@ void GetShieldToyTVDecorationInfo(void)
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x10);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_GOLD_SHIELD);
break;
- case 734:
+ case METATILE_SecretBase_SilverShield_Base1:
ConvertIntToDecimalStringN(gStringVar1, 50, STR_CONV_MODE_LEFT_ALIGN, 2);
StringCopy(gStringVar2, gText_Silver);
@@ -1136,31 +1138,31 @@ void GetShieldToyTVDecorationInfo(void)
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x20);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_SILVER_SHIELD);
break;
- case 756:
+ case METATILE_SecretBase_TV:
gSpecialVar_Result = 1;
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x80);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TV);
break;
- case 757:
+ case METATILE_SecretBase_RoundTV:
gSpecialVar_Result = 2;
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x80);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TV);
break;
- case 758:
+ case METATILE_SecretBase_CuteTV:
gSpecialVar_Result = 3;
if (!VarGet(VAR_CURRENT_SECRET_BASE))
return;
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x80);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TV);
break;
}
}
@@ -1172,16 +1174,16 @@ bool8 sub_80FADE4(u16 metatileId, u8 arg1)
if (!arg1)
{
- if (metatileId == 0x285 || metatileId == 0x286)
+ if (metatileId == METATILE_SecretBase_SandOrnament_Top || metatileId == METATILE_SecretBase_SandOrnament_TopWall)
return TRUE;
- if (metatileId == 0x237)
+ if (metatileId == METATILE_SecretBase_BreakableDoor_TopClosed)
return TRUE;
}
else
{
- if (metatileId == 0x28d)
+ if (metatileId == METATILE_SecretBase_SandOrnament_Base1)
return TRUE;
- if (metatileId == 0x23F)
+ if (metatileId == METATILE_SecretBase_BreakableDoor_BottomClosed)
return TRUE;
}
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..774018f0f 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,
@@ -540,7 +540,7 @@ void sub_810E2C8(struct Sprite *sprite)
if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)
{
FreeOamMatrix(sprite->oam.matrixNum);
- sprite->oam.affineMode = 0;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
}
DestroySprite(sprite);
@@ -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..42a518ed6 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"
@@ -288,9 +288,9 @@ static const struct WindowTemplate sMapWindowTemplates[] =
static const u8 sTextColors[][3] =
{
- {0, 2, 3},
- {0, 1, 9},
- {0, 4, 5},
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY},
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_BLUE},
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED},
};
struct
@@ -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,
@@ -483,21 +483,21 @@ static const struct SpriteTemplate sSpriteTemplate_Head =
static const u8 *const sPassAreaDescriptions[] =
{
- gUnknown_085EDA96,
- gUnknown_085ED932,
- gUnknown_085ED94D,
- gUnknown_085ED961,
- gUnknown_085ED977,
- gUnknown_085ED993,
- gUnknown_085ED9AF,
- gUnknown_085ED9C7,
- gUnknown_085ED9E5,
- gUnknown_085EDA02,
- gUnknown_085EDA21,
- gUnknown_085EDA3C,
- gUnknown_085EDA5E,
- gUnknown_085EDA78,
- gUnknown_085ED931,
+ gText_ThereIsNoBattleRecord,
+ gText_CheckFrontierMap,
+ gText_CheckTrainerCard,
+ gText_ViewRecordedBattle,
+ gText_PutAwayFrontierPass,
+ gText_CurrentBattlePoints,
+ gText_CollectedSymbols,
+ gText_BattleTowerAbilitySymbol,
+ gText_BattleDomeTacticsSymbol,
+ gText_BattlePalaceSpiritsSymbol,
+ gText_BattleArenaGutsSymbol,
+ gText_BattleFactoryKnowledgeSymbol,
+ gText_BattlePikeLuckSymbol,
+ gText_BattlePyramidBraveSymbol,
+ gText_EmptyString7,
};
struct
@@ -509,13 +509,13 @@ struct
u8 animNum;
} static const sMapLandmarks[] =
{
- {gUnknown_085EDAB1, gUnknown_085EDB0F, 0x59, 0x28, 1},
- {gUnknown_085EDABE, gUnknown_085EDB4E, 0x21, 0x2A, 1},
- {gUnknown_085EDACA, gUnknown_085EDB8B, 0x78, 0x56, 0},
- {gUnknown_085EDAD8, gUnknown_085EDBC2, 0x72, 0x3B, 0},
- {gUnknown_085EDAE5, gUnknown_085EDC00, 0x19, 0x43, 0},
- {gUnknown_085EDAF4, gUnknown_085EDC45, 0x39, 0x39, 1},
- {gUnknown_085EDB00, gUnknown_085EDC84, 0x86, 0x29, 1},
+ {gText_BattleTower3, gText_BattleTowerDesc, 0x59, 0x28, 1},
+ {gText_BattleDome2, gText_BattleDomeDesc, 0x21, 0x2A, 1},
+ {gText_BattlePalace2, gText_BattlePalaceDesc, 0x78, 0x56, 0},
+ {gText_BattleArena2, gText_BattleArenaDesc, 0x72, 0x3B, 0},
+ {gText_BattleFactory2, gText_BattleFactoryDesc, 0x19, 0x43, 0},
+ {gText_BattlePike2, gText_BattlePikeDesc, 0x39, 0x39, 1},
+ {gText_BattlePyramid2, gText_BattlePyramidDesc, 0x86, 0x29, 1},
};
// code
@@ -1531,7 +1531,7 @@ static void Task_HandleFrontierMap(u8 taskId)
static u8 MapNumToFrontierFacilityId(u16 mapNum) // id + 1, zero means not a frontier map number
{
if ((mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_LOBBY) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM))
- || (mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM2)))
+ || (mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM)))
return FRONTIER_FACILITY_TOWER + 1;
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_LOBBY)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR)
@@ -1553,12 +1553,12 @@ static u8 MapNumToFrontierFacilityId(u16 mapNum) // id + 1, zero means not a fro
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_LOBBY)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM)
- || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1)
- || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM2)
- || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3))
+ || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL)
+ || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL)
+ || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS))
return FRONTIER_FACILITY_PIKE + 1;
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY)
- || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_TOP))
return FRONTIER_FACILITY_PYRAMID + 1;
else
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 536e23e30..3efbf57f9 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -24,11 +24,12 @@
#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"
#include "constants/battle_frontier.h"
+#include "constants/frontier_util.h"
#include "constants/trainers.h"
#include "constants/species.h"
#include "constants/game_stat.h"
@@ -44,33 +45,33 @@ struct FrontierBrainMon
u8 fixedIV;
u8 nature;
u8 evs[NUM_STATS];
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
};
// This file's functions.
-static void sub_81A17A0(void);
-static void sub_81A1830(void);
-static void sub_81A1968(void);
-static void sub_81A1AD4(void);
+static void GetChallengeStatus(void);
+static void GetFrontierData(void);
+static void SetFrontierData(void);
+static void SetSelectedPartyOrder(void);
static void DoSoftReset_(void);
-static void sub_81A1B28(void);
-static void sub_81A1B38(void);
+static void SetFrontierTrainers(void);
+static void SaveSelectedParty(void);
static void ShowFacilityResultsWindow(void);
-static void sub_81A31FC(void);
-static void sub_81A35EC(void);
-static void sub_81A3B00(void);
-static void sub_81A3B64(void);
-static void sub_81A3D30(void);
-static void sub_81A3D58(void);
-static void sub_81A3DA0(void);
-static void sub_81A3FD4(void);
-static void sub_81A4224(void);
-static void sub_81A4230(void);
-static void sub_81A43A8(void);
-static void sub_81A4410(void);
-static void sub_81A443C(void);
-static void sub_81A447C(void);
-static void sub_81A457C(void);
+static void CheckPutFrontierTVShowOnAir(void);
+static void Script_GetFrontierBrainStatus(void);
+static void IsTrainerFrontierBrain(void);
+static void GiveBattlePoints(void);
+static void GetFacilitySymbolCount(void);
+static void GiveFacilitySymbol(void);
+static void CheckBattleTypeFlag(void);
+static void CheckPartyIneligibility(void);
+static void ValidateVisitingTrainer(void);
+static void IncrementWinStreak(void);
+static void RestoreHeldItems(void);
+static void SaveRecordBattle(void);
+static void BufferFrontierTrainerName(void);
+static void ResetSketchedMoves(void);
+static void SetFacilityBrainEventObject(void);
static void ShowTowerResultsWindow(u8);
static void ShowDomeResultsWindow(u8);
static void ShowPalaceResultsWindow(u8);
@@ -82,15 +83,15 @@ static void ShowLinkContestResultsWindow(void);
static void CopyFrontierBrainText(bool8 playerWonText);
// const rom data
-static const u8 gUnknown_08611550[][4] =
-{
- [FRONTIER_FACILITY_TOWER] = {0x23, 0x46, 0x23, 0x01},
- [FRONTIER_FACILITY_DOME] = {0x04, 0x09, 0x05, 0x00},
- [FRONTIER_FACILITY_PALACE] = {0x15, 0x2a, 0x15, 0x01},
- [FRONTIER_FACILITY_ARENA] = {0x1c, 0x38, 0x1c, 0x01},
- [FRONTIER_FACILITY_FACTORY] = {0x15, 0x2a, 0x15, 0x01},
- [FRONTIER_FACILITY_PIKE] = {0x1c, 0x8c, 0x38, 0x01},
- [FRONTIER_FACILITY_PYRAMID] = {0x15, 0x46, 0x23, 0x00},
+static const u8 sFrontierBrainStreakAppearances[NUM_FRONTIER_FACILITIES][4] =
+{
+ [FRONTIER_FACILITY_TOWER] = {35, 70, 35, 1},
+ [FRONTIER_FACILITY_DOME] = { 4, 9, 5, 0},
+ [FRONTIER_FACILITY_PALACE] = {21, 42, 21, 1},
+ [FRONTIER_FACILITY_ARENA] = {28, 56, 28, 1},
+ [FRONTIER_FACILITY_FACTORY] = {21, 42, 21, 1},
+ [FRONTIER_FACILITY_PIKE] = {28, 140, 56, 1},
+ [FRONTIER_FACILITY_PYRAMID] = {21, 70, 35, 0},
};
static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
@@ -103,7 +104,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_ALAKAZAM,
.heldItem = ITEM_BRIGHT_POWDER,
.fixedIV = 24,
- .nature = 15,
+ .nature = NATURE_MODEST,
.evs = {106, 0, 152, 152, 100, 0},
.moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DISABLE},
},
@@ -111,7 +112,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_ENTEI,
.heldItem = ITEM_LUM_BERRY,
.fixedIV = 24,
- .nature = 1,
+ .nature = NATURE_LONELY,
.evs = {100, 152, 152, 0, 100, 6},
.moves = {MOVE_FIRE_BLAST, MOVE_CALM_MIND, MOVE_RETURN, MOVE_ROAR},
},
@@ -119,7 +120,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SNORLAX,
.heldItem = ITEM_QUICK_CLAW,
.fixedIV = 24,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {152, 152, 0, 0, 106, 100},
.moves = {MOVE_BODY_SLAM, MOVE_BELLY_DRUM, MOVE_YAWN, MOVE_SHADOW_BALL},
},
@@ -130,7 +131,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_RAIKOU,
.heldItem = ITEM_LUM_BERRY,
.fixedIV = 31,
- .nature = 15,
+ .nature = NATURE_MODEST,
.evs = {158, 0, 252, 100, 0, 0},
.moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_REFLECT, MOVE_REST},
},
@@ -138,7 +139,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_LATIOS,
.heldItem = ITEM_BRIGHT_POWDER,
.fixedIV = 31,
- .nature = 15,
+ .nature = NATURE_MODEST,
.evs = {252, 0, 252, 6, 0, 0},
.moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_RECOVER, MOVE_DRAGON_CLAW},
},
@@ -146,7 +147,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SNORLAX,
.heldItem = ITEM_CHESTO_BERRY,
.fixedIV = 31,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {252, 252, 0, 0, 6, 0},
.moves = {MOVE_CURSE, MOVE_RETURN, MOVE_REST, MOVE_SHADOW_BALL},
},
@@ -160,7 +161,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SWAMPERT,
.heldItem = ITEM_FOCUS_BAND,
.fixedIV = 20,
- .nature = 2,
+ .nature = NATURE_BRAVE,
.evs = {152, 152, 106, 0, 100, 0},
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
},
@@ -168,7 +169,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SALAMENCE,
.heldItem = ITEM_LUM_BERRY,
.fixedIV = 20,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {152, 152, 106, 100, 0, 0},
.moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE},
},
@@ -176,7 +177,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_CHARIZARD,
.heldItem = ITEM_WHITE_HERB,
.fixedIV = 20,
- .nature = 17,
+ .nature = NATURE_QUIET,
.evs = {100, 152, 106, 152, 0, 0},
.moves = {MOVE_OVERHEAT, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_EARTHQUAKE},
},
@@ -187,7 +188,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SWAMPERT,
.heldItem = ITEM_LEFTOVERS,
.fixedIV = 31,
- .nature = 2,
+ .nature = NATURE_BRAVE,
.evs = {252, 252, 6, 0, 0, 0},
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
},
@@ -195,7 +196,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_METAGROSS,
.heldItem = ITEM_QUICK_CLAW,
.fixedIV = 31,
- .nature = 2,
+ .nature = NATURE_BRAVE,
.evs = {252, 252, 6, 0, 0, 0},
.moves = {MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_PROTECT},
},
@@ -203,7 +204,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_LATIAS,
.heldItem = ITEM_CHESTO_BERRY,
.fixedIV = 31,
- .nature = 15,
+ .nature = NATURE_MODEST,
.evs = {252, 0, 252, 6, 0, 0},
.moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_REST},
},
@@ -217,7 +218,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_CROBAT,
.heldItem = ITEM_BRIGHT_POWDER,
.fixedIV = 16,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {152, 0, 0, 152, 100, 106},
.moves = {MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_FLY},
},
@@ -225,7 +226,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SLAKING,
.heldItem = ITEM_SCOPE_LENS,
.fixedIV = 16,
- .nature = 0,
+ .nature = NATURE_HARDY,
.evs = {152, 152, 0, 106, 100, 0},
.moves = {MOVE_EARTHQUAKE, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK},
},
@@ -233,7 +234,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_LAPRAS,
.heldItem = ITEM_QUICK_CLAW,
.fixedIV = 16,
- .nature = 17,
+ .nature = NATURE_QUIET,
.evs = {0, 0, 252, 0, 106, 152},
.moves = {MOVE_ICE_BEAM, MOVE_HORN_DRILL, MOVE_CONFUSE_RAY, MOVE_PROTECT},
},
@@ -244,7 +245,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_ARCANINE,
.heldItem = ITEM_WHITE_HERB,
.fixedIV = 31,
- .nature = 11,
+ .nature = NATURE_HASTY,
.evs = {6, 252, 252, 0, 0, 0},
.moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_ROAR, MOVE_PROTECT},
},
@@ -252,7 +253,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SLAKING,
.heldItem = ITEM_SCOPE_LENS,
.fixedIV = 31,
- .nature = 0,
+ .nature = NATURE_HARDY,
.evs = {6, 252, 0, 252, 0, 0},
.moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_YAWN},
},
@@ -260,7 +261,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SUICUNE,
.heldItem = ITEM_KINGS_ROCK,
.fixedIV = 31,
- .nature = 11,
+ .nature = NATURE_HASTY,
.evs = {252, 0, 252, 6, 0, 0},
.moves = {MOVE_BLIZZARD, MOVE_SURF, MOVE_BITE, MOVE_CALM_MIND},
},
@@ -274,7 +275,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_HERACROSS,
.heldItem = ITEM_SALAC_BERRY,
.fixedIV = 20,
- .nature = 13,
+ .nature = NATURE_JOLLY,
.evs = {106, 152, 0, 152, 0, 100},
.moves = {MOVE_MEGAHORN, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL},
},
@@ -282,7 +283,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_UMBREON,
.heldItem = ITEM_LEFTOVERS,
.fixedIV = 20,
- .nature = 20,
+ .nature = NATURE_CALM,
.evs = {152, 0, 100, 0, 152, 106},
.moves = {MOVE_BODY_SLAM, MOVE_CONFUSE_RAY, MOVE_PSYCHIC, MOVE_FAINT_ATTACK},
},
@@ -290,7 +291,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SHEDINJA,
.heldItem = ITEM_BRIGHT_POWDER,
.fixedIV = 20,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {0, 252, 6, 252, 0, 0},
.moves = {MOVE_SHADOW_BALL, MOVE_RETURN, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE},
},
@@ -301,7 +302,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_UMBREON,
.heldItem = ITEM_CHESTO_BERRY,
.fixedIV = 31,
- .nature = 20,
+ .nature = NATURE_CALM,
.evs = {252, 0, 0, 0, 252, 6},
.moves = {MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_REST, MOVE_PSYCHIC},
},
@@ -309,7 +310,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_GENGAR,
.heldItem = ITEM_LEFTOVERS,
.fixedIV = 31,
- .nature = 15,
+ .nature = NATURE_MODEST,
.evs = {252, 0, 252, 0, 6, 0},
.moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_DESTINY_BOND},
},
@@ -317,7 +318,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_BRELOOM,
.heldItem = ITEM_LUM_BERRY,
.fixedIV = 31,
- .nature = 13,
+ .nature = NATURE_JOLLY,
.evs = {6, 252, 0, 252, 0, 0},
.moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HEADBUTT},
},
@@ -332,7 +333,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_METANG,
.heldItem = ITEM_SITRUS_BERRY,
.fixedIV = 31,
- .nature = 2,
+ .nature = NATURE_BRAVE,
.evs = {0, 252, 252, 0, 6, 0},
.moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
},
@@ -340,7 +341,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SKARMORY,
.heldItem = ITEM_SITRUS_BERRY,
.fixedIV = 31,
- .nature = 8,
+ .nature = NATURE_IMPISH,
.evs = {252, 0, 0, 0, 6, 252},
.moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
},
@@ -348,7 +349,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_AGGRON,
.heldItem = ITEM_SITRUS_BERRY,
.fixedIV = 31,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {0, 252, 0, 0, 252, 6},
.moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
},
@@ -358,7 +359,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_METANG,
.heldItem = ITEM_SITRUS_BERRY,
.fixedIV = 31,
- .nature = 2,
+ .nature = NATURE_BRAVE,
.evs = {0, 252, 252, 0, 6, 0},
.moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
},
@@ -366,7 +367,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SKARMORY,
.heldItem = ITEM_SITRUS_BERRY,
.fixedIV = 31,
- .nature = 8,
+ .nature = NATURE_IMPISH,
.evs = {252, 0, 0, 0, 6, 252},
.moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
},
@@ -374,7 +375,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_AGGRON,
.heldItem = ITEM_SITRUS_BERRY,
.fixedIV = 31,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {0, 252, 0, 0, 252, 6},
.moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
},
@@ -388,7 +389,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SEVIPER,
.heldItem = ITEM_QUICK_CLAW,
.fixedIV = 16,
- .nature = 2,
+ .nature = NATURE_BRAVE,
.evs = {252, 0, 252, 0, 6, 0},
.moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_POISON_FANG, MOVE_GIGA_DRAIN},
},
@@ -396,7 +397,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SHUCKLE,
.heldItem = ITEM_CHESTO_BERRY,
.fixedIV = 16,
- .nature = 5,
+ .nature = NATURE_BOLD,
.evs = {252, 0, 0, 0, 106, 252},
.moves = {MOVE_TOXIC, MOVE_SANDSTORM, MOVE_PROTECT, MOVE_REST},
},
@@ -404,7 +405,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_MILOTIC,
.heldItem = ITEM_LEFTOVERS,
.fixedIV = 16,
- .nature = 15,
+ .nature = NATURE_MODEST,
.evs = {152, 0, 100, 0, 152, 106},
.moves = {MOVE_ICE_BEAM, MOVE_MIRROR_COAT, MOVE_SURF, MOVE_RECOVER},
},
@@ -415,7 +416,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_SEVIPER,
.heldItem = ITEM_FOCUS_BAND,
.fixedIV = 31,
- .nature = 5,
+ .nature = NATURE_BOLD,
.evs = {252, 0, 0, 0, 252, 6},
.moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
},
@@ -423,7 +424,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_STEELIX,
.heldItem = ITEM_BRIGHT_POWDER,
.fixedIV = 31,
- .nature = 2,
+ .nature = NATURE_BRAVE,
.evs = {252, 0, 0, 0, 6, 252},
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION, MOVE_SCREECH},
},
@@ -431,7 +432,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_GYARADOS,
.heldItem = ITEM_CHESTO_BERRY,
.fixedIV = 31,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {252, 6, 0, 0, 0, 252},
.moves = {MOVE_DRAGON_DANCE, MOVE_RETURN, MOVE_ROAR, MOVE_REST},
},
@@ -445,7 +446,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_REGIROCK,
.heldItem = ITEM_QUICK_CLAW,
.fixedIV = 16,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {152, 152, 0, 0, 106, 100},
.moves = {MOVE_EXPLOSION, MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER},
},
@@ -453,7 +454,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_REGISTEEL,
.heldItem = ITEM_LEFTOVERS,
.fixedIV = 16,
- .nature = 3,
+ .nature = NATURE_ADAMANT,
.evs = {152, 152, 0, 0, 6, 200},
.moves = {MOVE_EARTHQUAKE, MOVE_METAL_CLAW, MOVE_TOXIC, MOVE_IRON_DEFENSE},
},
@@ -461,7 +462,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_REGICE,
.heldItem = ITEM_CHESTO_BERRY,
.fixedIV = 16,
- .nature = 15,
+ .nature = NATURE_MODEST,
.evs = {106, 0, 152, 0, 100, 152},
.moves = {MOVE_ICE_BEAM, MOVE_AMNESIA, MOVE_THUNDER, MOVE_REST},
},
@@ -472,7 +473,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_ARTICUNO,
.heldItem = ITEM_SCOPE_LENS,
.fixedIV = 31,
- .nature = 16,
+ .nature = NATURE_MILD,
.evs = {6, 0, 252, 252, 0, 0},
.moves = {MOVE_BLIZZARD, MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_REFLECT},
},
@@ -480,7 +481,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_ZAPDOS,
.heldItem = ITEM_LUM_BERRY,
.fixedIV = 31,
- .nature = 16,
+ .nature = NATURE_MILD,
.evs = {6, 0, 252, 252, 0, 0},
.moves = {MOVE_THUNDER, MOVE_DETECT, MOVE_DRILL_PECK, MOVE_LIGHT_SCREEN},
},
@@ -488,7 +489,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
.species = SPECIES_MOLTRES,
.heldItem = ITEM_BRIGHT_POWDER,
.fixedIV = 31,
- .nature = 16,
+ .nature = NATURE_MILD,
.evs = {6, 0, 252, 252, 0, 0},
.moves = {MOVE_FIRE_BLAST, MOVE_HYPER_BEAM, MOVE_AERIAL_ACE, MOVE_SAFEGUARD},
},
@@ -496,7 +497,7 @@ static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] =
},
};
-static const u8 gUnknown_086118B4[][7][4] =
+static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUNT] =
{
{
{1, 2, 3, 3}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0}
@@ -590,7 +591,9 @@ static const u8 gUnknown_086118B4[][7][4] =
},
};
-static const u16 gUnknown_08611BFC[][2] =
+// Flags to change the conversation when the Frontier Brain is encountered for a battle
+// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol)
+static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] =
{
[FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002},
[FRONTIER_FACILITY_DOME] = {0x0004, 0x0008},
@@ -603,32 +606,32 @@ static const u16 gUnknown_08611BFC[][2] =
static void (* const sFrontierUtilFuncs[])(void) =
{
- sub_81A17A0,
- sub_81A1830,
- sub_81A1968,
- sub_81A1AD4,
- DoSoftReset_,
- sub_81A1B28,
- sub_81A1B38,
- ShowFacilityResultsWindow,
- sub_81A31FC,
- sub_81A35EC,
- sub_81A3B00,
- sub_81A3B64,
- sub_81A3D30,
- sub_81A3D58,
- sub_81A3DA0,
- sub_81A3FD4,
- sub_81A4224,
- sub_81A4230,
- sub_81A43A8,
- sub_81A4410,
- sub_81A443C,
- sub_81A447C,
- sub_81A457C,
+ [FRONTIER_UTIL_FUNC_GET_STATUS] = GetChallengeStatus,
+ [FRONTIER_UTIL_FUNC_GET_DATA] = GetFrontierData,
+ [FRONTIER_UTIL_FUNC_SET_DATA] = SetFrontierData,
+ [FRONTIER_UTIL_FUNC_SET_PARTY_ORDER] = SetSelectedPartyOrder,
+ [FRONTIER_UTIL_FUNC_SOFT_RESET] = DoSoftReset_,
+ [FRONTIER_UTIL_FUNC_SET_TRAINERS] = SetFrontierTrainers,
+ [FRONTIER_UTIL_FUNC_SAVE_PARTY] = SaveSelectedParty,
+ [FRONTIER_UTIL_FUNC_RESULTS_WINDOW] = ShowFacilityResultsWindow,
+ [FRONTIER_UTIL_FUNC_CHECK_AIR_TV_SHOW] = CheckPutFrontierTVShowOnAir,
+ [FRONTIER_UTIL_FUNC_GET_BRAIN_STATUS] = Script_GetFrontierBrainStatus,
+ [FRONTIER_UTIL_FUNC_IS_BRAIN] = IsTrainerFrontierBrain,
+ [FRONTIER_UTIL_FUNC_GIVE_BATTLE_POINTS] = GiveBattlePoints,
+ [FRONTIER_UTIL_FUNC_GET_FACILITY_SYMBOLS] = GetFacilitySymbolCount,
+ [FRONTIER_UTIL_FUNC_GIVE_FACILITY_SYMBOL] = GiveFacilitySymbol,
+ [FRONTIER_UTIL_FUNC_CHECK_BATTLE_TYPE] = CheckBattleTypeFlag,
+ [FRONTIER_UTIL_FUNC_CHECK_INELIGIBLE] = CheckPartyIneligibility,
+ [FRONTIER_UTIL_FUNC_CHECK_VISIT_TRAINER] = ValidateVisitingTrainer,
+ [FRONTIER_UTIL_FUNC_INCREMENT_STREAK] = IncrementWinStreak,
+ [FRONTIER_UTIL_FUNC_RESTORE_HELD_ITEMS] = RestoreHeldItems,
+ [FRONTIER_UTIL_FUNC_SAVE_BATTLE] = SaveRecordBattle,
+ [FRONTIER_UTIL_FUNC_BUFFER_TRAINER_NAME] = BufferFrontierTrainerName,
+ [FRONTIER_UTIL_FUNC_RESET_SKETCH_MOVES] = ResetSketchedMoves,
+ [FRONTIER_UTIL_FUNC_SET_BRAIN_OBJECT] = SetFacilityBrainEventObject,
};
-static const struct WindowTemplate gUnknown_08611C74 =
+static const struct WindowTemplate sFrontierResultsWindowTemplate =
{
.bg = 0,
.tilemapLeft = 1,
@@ -639,7 +642,7 @@ static const struct WindowTemplate gUnknown_08611C74 =
.baseBlock = 1
};
-static const struct WindowTemplate gUnknown_08611C7C =
+static const struct WindowTemplate sLinkContestResultsWindowTemplate =
{
.bg = 0,
.tilemapLeft = 2,
@@ -650,7 +653,7 @@ static const struct WindowTemplate gUnknown_08611C7C =
.baseBlock = 1
};
-static const struct WindowTemplate gUnknown_08611C84 =
+static const struct WindowTemplate sRankingHallRecordsWindowTemplate =
{
.bg = 0,
.tilemapLeft = 2,
@@ -662,7 +665,7 @@ static const struct WindowTemplate gUnknown_08611C84 =
};
// Second field - whether the character is female.
-static const u8 sFacilityToBrainEventObjGfx[][2] =
+static const u8 sFrontierBrainObjEventGfx[NUM_FRONTIER_FACILITIES][2] =
{
[FRONTIER_FACILITY_TOWER] = {EVENT_OBJ_GFX_ANABEL, TRUE},
[FRONTIER_FACILITY_DOME] = {EVENT_OBJ_GFX_TUCKER, FALSE},
@@ -679,41 +682,41 @@ const u16 gFrontierBannedSpecies[] =
SPECIES_KYOGRE, SPECIES_GROUDON, SPECIES_RAYQUAZA, SPECIES_JIRACHI, SPECIES_DEOXYS, 0xFFFF
};
-static const u8 *const gUnknown_08611CB0[][2] =
-{
- {gText_BattleTower2, gUnknown_085ED164},
- {gText_BattleTower2, gUnknown_085ED170},
- {gText_BattleTower2, gUnknown_085ED17C},
- {gText_BattleDome, gUnknown_085ED164},
- {gText_BattlePalace, gUnknown_085ED164},
- {gText_BattleArena, gUnknown_085ED190},
- {gText_BattleFactory, gUnknown_085ED164},
- {gText_BattlePike, gUnknown_085ED190},
- {gText_BattlePyramid, gUnknown_085ED190},
- {gText_BattleTower2, gUnknown_085ED188},
+static const u8 *const sRecordsWindowChallengeTexts[][2] =
+{
+ [RANKING_HALL_BATTLE_TOWER_SINGLES] = {gText_BattleTower2, gText_FacilitySingle},
+ [RANKING_HALL_BATTLE_TOWER_DOUBLES] = {gText_BattleTower2, gText_FacilityDouble},
+ [RANKING_HALL_BATTLE_TOWER_MULTIS] = {gText_BattleTower2, gText_FacilityMulti},
+ [RANKING_HALL_BATTLE_DOME] = {gText_BattleDome, gText_FacilitySingle},
+ [RANKING_HALL_BATTLE_PALACE] = {gText_BattlePalace, gText_FacilitySingle},
+ [RANKING_HALL_BATTLE_ARENA] = {gText_BattleArena, gText_Facility},
+ [RANKING_HALL_BATTLE_FACTORY] = {gText_BattleFactory, gText_FacilitySingle},
+ [RANKING_HALL_BATTLE_PIKE] = {gText_BattlePike, gText_Facility},
+ [RANKING_HALL_BATTLE_PYRAMID] = {gText_BattlePyramid, gText_Facility},
+ [RANKING_HALL_BATTLE_TOWER_LINK] = {gText_BattleTower2, gText_FacilityLink},
};
-static const u8 *const gLevelModeText[] =
+static const u8 *const sLevelModeText[] =
{
gText_RecordsLv50,
gText_RecordsOpenLevel,
};
-static const u8 *const gHallFacilityToRecordsText[] =
-{
- gText_FrontierFacilityWinStreak,
- gText_FrontierFacilityWinStreak,
- gText_FrontierFacilityWinStreak,
- gText_FrontierFacilityClearStreak,
- gText_FrontierFacilityWinStreak,
- gText_FrontierFacilityKOsStreak,
- gText_FrontierFacilityWinStreak,
- gText_FrontierFacilityRoomsCleared,
- gText_FrontierFacilityFloorsCleared,
- gText_FrontierFacilityWinStreak,
+static const u8 *const sHallFacilityToRecordsText[] =
+{
+ [RANKING_HALL_BATTLE_TOWER_SINGLES] = gText_FrontierFacilityWinStreak,
+ [RANKING_HALL_BATTLE_TOWER_DOUBLES] = gText_FrontierFacilityWinStreak,
+ [RANKING_HALL_BATTLE_TOWER_MULTIS] = gText_FrontierFacilityWinStreak,
+ [RANKING_HALL_BATTLE_DOME] = gText_FrontierFacilityClearStreak,
+ [RANKING_HALL_BATTLE_PALACE] = gText_FrontierFacilityWinStreak,
+ [RANKING_HALL_BATTLE_ARENA] = gText_FrontierFacilityKOsStreak,
+ [RANKING_HALL_BATTLE_FACTORY] = gText_FrontierFacilityWinStreak,
+ [RANKING_HALL_BATTLE_PIKE] = gText_FrontierFacilityRoomsCleared,
+ [RANKING_HALL_BATTLE_PYRAMID] = gText_FrontierFacilityFloorsCleared,
+ [RANKING_HALL_BATTLE_TOWER_LINK] = gText_FrontierFacilityWinStreak,
};
-static const u16 gFacilityToBrainTrainerId[] =
+static const u16 sFrontierBrainTrainerIds[NUM_FRONTIER_FACILITIES] =
{
[FRONTIER_FACILITY_TOWER] = TRAINER_ANABEL,
[FRONTIER_FACILITY_DOME] = TRAINER_TUCKER,
@@ -724,60 +727,60 @@ static const u16 gFacilityToBrainTrainerId[] =
[FRONTIER_FACILITY_PYRAMID] = TRAINER_BRANDON,
};
-static const u8 *const gUnknown_08611D40[] =
+static const u8 *const sFrontierBrainPlayerLostSilverTexts[NUM_FRONTIER_FACILITIES] =
{
- gText_082C843F,
- gText_082C848B,
- gText_082C8628,
- gText_082C85B4,
- gText_082C8512,
- gText_082C859D,
- gText_082C86C3,
+ [FRONTIER_FACILITY_TOWER] = gText_AnabelWonSilver,
+ [FRONTIER_FACILITY_DOME] = gText_TuckerWonSilver,
+ [FRONTIER_FACILITY_PALACE] = gText_SpenserWonSilver,
+ [FRONTIER_FACILITY_ARENA] = gText_GretaWonSilver,
+ [FRONTIER_FACILITY_FACTORY] = gText_NolandWonSilver,
+ [FRONTIER_FACILITY_PIKE] = gText_LucyWonSilver,
+ [FRONTIER_FACILITY_PYRAMID] = gText_BrandonWonSilver,
};
-static const u8 *const gUnknown_08611D5C[] =
+static const u8 *const sFrontierBrainPlayerWonSilverTexts[NUM_FRONTIER_FACILITIES] =
{
- gText_082C8458,
- gText_082C84C1,
- gText_082C8662,
- gText_082C85E3,
- gText_082C853B,
- gText_082C85A4,
- gText_082C86FE,
+ [FRONTIER_FACILITY_TOWER] = gText_AnabelDefeatSilver,
+ [FRONTIER_FACILITY_DOME] = gText_TuckerDefeatSilver,
+ [FRONTIER_FACILITY_PALACE] = gText_SpenserDefeatSilver,
+ [FRONTIER_FACILITY_ARENA] = gText_GretaDefeatSilver,
+ [FRONTIER_FACILITY_FACTORY] = gText_NolandDefeatSilver,
+ [FRONTIER_FACILITY_PIKE] = gText_LucyDefeatSilver,
+ [FRONTIER_FACILITY_PYRAMID] = gText_BrandonDefeatSilver,
};
-static const u8 *const gUnknown_08611D78[] =
+static const u8 *const sFrontierBrainPlayerLostGoldTexts[NUM_FRONTIER_FACILITIES] =
{
- gText_082C846C,
- gText_082C84D0,
- gText_082C8682,
- gText_082C85F5,
- gText_082C8561,
- gText_082C85A9,
- gText_082C8739,
+ [FRONTIER_FACILITY_TOWER] = gText_AnabelWonGold,
+ [FRONTIER_FACILITY_DOME] = gText_TuckerWonGold,
+ [FRONTIER_FACILITY_PALACE] = gText_SpenserWonGold,
+ [FRONTIER_FACILITY_ARENA] = gText_GretaWonGold,
+ [FRONTIER_FACILITY_FACTORY] = gText_NolandWonGold,
+ [FRONTIER_FACILITY_PIKE] = gText_LucyWonGold,
+ [FRONTIER_FACILITY_PYRAMID] = gText_BrandonWonGold,
};
-static const u8 *const gUnknown_08611D94[] =
+static const u8 *const sFrontierBrainPlayerWonGoldTexts[NUM_FRONTIER_FACILITIES] =
{
- gText_082C8480,
- gText_082C84F7,
- gText_082C86B3,
- gText_082C8611,
- gText_082C8589,
- gText_082C85AE,
- gText_082C877B,
+ [FRONTIER_FACILITY_TOWER] = gText_AnabelDefeatGold,
+ [FRONTIER_FACILITY_DOME] = gText_TuckerDefeatGold,
+ [FRONTIER_FACILITY_PALACE] = gText_SpenserDefeatGold,
+ [FRONTIER_FACILITY_ARENA] = gText_GretaDefeatGold,
+ [FRONTIER_FACILITY_FACTORY] = gText_NolandDefeatGold,
+ [FRONTIER_FACILITY_PIKE] = gText_LucyDefeatGold,
+ [FRONTIER_FACILITY_PYRAMID] = gText_BrandonDefeatGold,
};
-static const u8 *const *const gUnknown_08611DB0[] =
+static const u8 *const *const sFrontierBrainPlayerLostTexts[] =
{
- gUnknown_08611D40,
- gUnknown_08611D78,
+ sFrontierBrainPlayerLostSilverTexts,
+ sFrontierBrainPlayerLostGoldTexts,
};
-static const u8 *const *const gUnknown_08611DB8[] =
+static const u8 *const *const sFrontierBrainPlayerWonTexts[] =
{
- gUnknown_08611D5C,
- gUnknown_08611D94,
+ sFrontierBrainPlayerWonSilverTexts,
+ sFrontierBrainPlayerWonGoldTexts,
};
// code
@@ -786,105 +789,106 @@ void CallFrontierUtilFunc(void)
sFrontierUtilFuncs[gSpecialVar_0x8004]();
}
-static void sub_81A17A0(void)
+// Buffers into VAR_TEMP_0 specifically because this is used to react to the status in OnFrame map scripts
+static void GetChallengeStatus(void)
{
VarSet(VAR_TEMP_0, 0xFF);
- switch (gSaveBlock2Ptr->frontier.field_CA8)
+ switch (gSaveBlock2Ptr->frontier.challengeStatus)
{
case 0:
break;
- case 1:
- sub_813A878(0);
- VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
+ case CHALLENGE_STATUS_SAVING:
+ FrontierGamblerSetWonOrLost(FALSE);
+ VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
break;
- case 4:
- sub_813A878(0);
- VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
+ case CHALLENGE_STATUS_LOST:
+ FrontierGamblerSetWonOrLost(FALSE);
+ VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
break;
- case 3:
- sub_813A878(1);
- VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
+ case CHALLENGE_STATUS_WON:
+ FrontierGamblerSetWonOrLost(TRUE);
+ VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
break;
- case 2:
- VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8);
+ case CHALLENGE_STATUS_PAUSED:
+ VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
break;
}
}
-static void sub_81A1830(void)
+static void GetFrontierData(void)
{
u8 facility = VarGet(VAR_FRONTIER_FACILITY);
- u8 currSymbol = GetPlayerSymbolCountForFacility(facility);
- if (currSymbol == 2)
- currSymbol = 1;
+ u8 hasSymbol = GetPlayerSymbolCountForFacility(facility);
+ if (hasSymbol == 2)
+ hasSymbol = 1;
switch (gSpecialVar_0x8005)
{
- case 0:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA8;
+ case FRONTIER_DATA_CHALLENGE_STATUS:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.challengeStatus;
break;
- case 1:
+ case FRONTIER_DATA_LVL_MODE:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.lvlMode;
break;
- case 2:
+ case FRONTIER_DATA_BATTLE_NUM:
gSpecialVar_Result = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
break;
- case 3:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_a;
+ case FRONTIER_DATA_PAUSED:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.challengePaused;
break;
- case 5:
+ case FRONTIER_DATA_BATTLE_OUTCOME:
gSpecialVar_Result = gBattleOutcome;
gBattleOutcome = 0;
break;
- case 6:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_b;
+ case FRONTIER_DATA_RECORD_DISABLED:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.disableRecordBattle;
break;
- case 7:
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D00 & gUnknown_08611BFC[facility][currSymbol];
+ case FRONTIER_DATA_HEARD_BRAIN_SPEECH:
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & sBattledBrainBitFlags[facility][hasSymbol];
break;
}
}
-static void sub_81A1968(void)
+static void SetFrontierData(void)
{
s32 i;
u8 facility = VarGet(VAR_FRONTIER_FACILITY);
- u8 currSymbol = GetPlayerSymbolCountForFacility(facility);
- if (currSymbol == 2)
- currSymbol = 1;
+ u8 hasSymbol = GetPlayerSymbolCountForFacility(facility);
+ if (hasSymbol == 2)
+ hasSymbol = 1;
switch (gSpecialVar_0x8005)
{
- case 0:
- gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8006;
+ case FRONTIER_DATA_CHALLENGE_STATUS:
+ gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8006;
break;
- case 1:
+ case FRONTIER_DATA_LVL_MODE:
gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_0x8006;
break;
- case 2:
+ case FRONTIER_DATA_BATTLE_NUM:
gSaveBlock2Ptr->frontier.curChallengeBattleNum = gSpecialVar_0x8006;
break;
- case 3:
- gSaveBlock2Ptr->frontier.field_CA9_a = gSpecialVar_0x8006;
+ case FRONTIER_DATA_PAUSED:
+ gSaveBlock2Ptr->frontier.challengePaused = gSpecialVar_0x8006;
break;
- case 4:
- for (i = 0; i < 4; i++)
+ case FRONTIER_DATA_SELECTED_MON_ORDER:
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gSelectedOrderFromParty[i];
break;
- case 6:
- gSaveBlock2Ptr->frontier.field_CA9_b = gSpecialVar_0x8006;
+ case FRONTIER_DATA_RECORD_DISABLED:
+ gSaveBlock2Ptr->frontier.disableRecordBattle = gSpecialVar_0x8006;
break;
- case 7:
- gSaveBlock2Ptr->frontier.field_D00 |= gUnknown_08611BFC[facility][currSymbol];
+ case FRONTIER_DATA_HEARD_BRAIN_SPEECH:
+ gSaveBlock2Ptr->frontier.battledBrainFlags |= sBattledBrainBitFlags[facility][hasSymbol];
break;
}
}
-static void sub_81A1AD4(void)
+static void SetSelectedPartyOrder(void)
{
s32 i;
- sub_81B8558();
+ ClearSelectedPartyOrder();
for (i = 0; i < gSpecialVar_0x8005; i++)
gSelectedOrderFromParty[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i];
ReducePlayerPartyToSelectedMons();
@@ -895,16 +899,16 @@ static void DoSoftReset_(void)
DoSoftReset();
}
-static void sub_81A1B28(void)
+static void SetFrontierTrainers(void)
{
gFacilityTrainers = gBattleFrontierTrainers;
}
-static void sub_81A1B38(void)
+static void SaveSelectedParty(void)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
{
u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
if (monId < PARTY_SIZE)
@@ -914,7 +918,7 @@ static void sub_81A1B38(void)
static void ShowFacilityResultsWindow(void)
{
- if (gSpecialVar_0x8006 > 3)
+ if (gSpecialVar_0x8006 >= FRONTIER_MODE_COUNT)
gSpecialVar_0x8006 = 0;
switch (gSpecialVar_0x8005)
{
@@ -939,15 +943,15 @@ static void ShowFacilityResultsWindow(void)
case FRONTIER_FACILITY_PYRAMID:
ShowPyramidResultsWindow();
break;
- case RESULTS_LINK_CONTEST:
+ case FACILITY_LINK_CONTEST:
ShowLinkContestResultsWindow();
break;
}
}
-static bool8 sub_81A1C24(u32 flags)
+static bool8 IsWinStreakActive(u32 challenge)
{
- if (gSaveBlock2Ptr->frontier.field_CDC & flags)
+ if (gSaveBlock2Ptr->frontier.winStreakActiveFlags & challenge)
return TRUE;
else
return FALSE;
@@ -977,8 +981,8 @@ static void PrintHyphens(s32 y)
static void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y)
{
AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL);
- if (num > 9999)
- num = 9999;
+ if (num > MAX_STREAK)
+ num = MAX_STREAK;
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gText_WinStreak);
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
@@ -993,8 +997,8 @@ static void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y
static u16 TowerGetWinStreak(u8 battleMode, u8 lvlMode)
{
u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
- if (winStreak > 9999)
- return 9999;
+ if (winStreak > MAX_STREAK)
+ return MAX_STREAK;
else
return winStreak;
}
@@ -1008,27 +1012,27 @@ static void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x
default:
case FRONTIER_MODE_SINGLES:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(2);
+ isCurrent = IsWinStreakActive(STREAK_TOWER_SINGLES_OPEN);
else
- isCurrent = sub_81A1C24(1);
+ isCurrent = IsWinStreakActive(STREAK_TOWER_SINGLES_50);
break;
case FRONTIER_MODE_DOUBLES:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x8000);
+ isCurrent = IsWinStreakActive(STREAK_TOWER_DOUBLES_OPEN);
else
- isCurrent = sub_81A1C24(0x4000);
+ isCurrent = IsWinStreakActive(STREAK_TOWER_DOUBLES_50);
break;
case FRONTIER_MODE_MULTIS:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x20000);
+ isCurrent = IsWinStreakActive(STREAK_TOWER_MULTIS_OPEN);
else
- isCurrent = sub_81A1C24(0x10000);
+ isCurrent = IsWinStreakActive(STREAK_TOWER_MULTIS_50);
break;
case FRONTIER_MODE_LINK_MULTIS:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x80000);
+ isCurrent = IsWinStreakActive(STREAK_TOWER_LINK_MULTIS_OPEN);
else
- isCurrent = sub_81A1C24(0x40000);
+ isCurrent = IsWinStreakActive(STREAK_TOWER_LINK_MULTIS_50);
break;
}
@@ -1040,7 +1044,7 @@ static void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x
static void ShowTowerResultsWindow(u8 battleMode)
{
- gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
if (battleMode == FRONTIER_MODE_SINGLES)
@@ -1068,8 +1072,8 @@ static void ShowTowerResultsWindow(u8 battleMode)
static u16 DomeGetWinStreak(u8 battleMode, u8 lvlMode)
{
u16 winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
- if (winStreak > 9999)
- return 9999;
+ if (winStreak > MAX_STREAK)
+ return MAX_STREAK;
else
return winStreak;
}
@@ -1091,15 +1095,15 @@ static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2
default:
case FRONTIER_MODE_SINGLES:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(8);
+ isCurrent = IsWinStreakActive(STREAK_DOME_SINGLES_OPEN);
else
- isCurrent = sub_81A1C24(4);
+ isCurrent = IsWinStreakActive(STREAK_DOME_SINGLES_50);
break;
case FRONTIER_MODE_DOUBLES:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x200000);
+ isCurrent = IsWinStreakActive(STREAK_DOME_DOUBLES_OPEN);
else
- isCurrent = sub_81A1C24(0x100000);
+ isCurrent = IsWinStreakActive(STREAK_DOME_DOUBLES_50);
break;
}
@@ -1111,7 +1115,7 @@ static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2
static void ShowDomeResultsWindow(u8 battleMode)
{
- gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
if (battleMode == FRONTIER_MODE_SINGLES)
@@ -1137,8 +1141,8 @@ static void ShowDomeResultsWindow(u8 battleMode)
static void PalacePrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y)
{
AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL);
- if (num > 9999)
- num = 9999;
+ if (num > MAX_STREAK)
+ num = MAX_STREAK;
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gText_WinStreak);
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
@@ -1153,8 +1157,8 @@ static void PalacePrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8
static u16 PalaceGetWinStreak(u8 battleMode, u8 lvlMode)
{
u16 winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
- if (winStreak > 9999)
- return 9999;
+ if (winStreak > MAX_STREAK)
+ return MAX_STREAK;
else
return winStreak;
}
@@ -1168,15 +1172,15 @@ static void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8
default:
case FRONTIER_MODE_SINGLES:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x20);
+ isCurrent = IsWinStreakActive(STREAK_PALACE_SINGLES_OPEN);
else
- isCurrent = sub_81A1C24(0x10);
+ isCurrent = IsWinStreakActive(STREAK_PALACE_SINGLES_50);
break;
case FRONTIER_MODE_DOUBLES:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x800000);
+ isCurrent = IsWinStreakActive(STREAK_PALACE_DOUBLES_OPEN);
else
- isCurrent = sub_81A1C24(0x400000);
+ isCurrent = IsWinStreakActive(STREAK_PALACE_DOUBLES_50);
}
if (isCurrent == TRUE)
@@ -1187,7 +1191,7 @@ static void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8
static void ShowPalaceResultsWindow(u8 battleMode)
{
- gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
if (battleMode == FRONTIER_MODE_SINGLES)
@@ -1211,8 +1215,8 @@ static void ShowPalaceResultsWindow(u8 battleMode)
static u16 PikeGetWinStreak(u8 lvlMode)
{
u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
- if (winStreak > 9999)
- return 9999;
+ if (winStreak > MAX_STREAK)
+ return MAX_STREAK;
else
return winStreak;
}
@@ -1231,9 +1235,9 @@ static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
u16 winStreak = PikeGetWinStreak(lvlMode);
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x800);
+ isCurrent = IsWinStreakActive(STREAK_PIKE_OPEN);
else
- isCurrent = sub_81A1C24(0x400);
+ isCurrent = IsWinStreakActive(STREAK_PIKE_50);
if (isCurrent == TRUE)
PrintTwoStrings(gText_Current, gText_RoomsCleared, winStreak, x1, x2, y);
@@ -1243,7 +1247,7 @@ static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
static void ShowPikeResultsWindow(void)
{
- gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults);
@@ -1265,8 +1269,8 @@ static void ShowPikeResultsWindow(void)
static void ArenaPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y)
{
AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL);
- if (num > 9999)
- num = 9999;
+ if (num > MAX_STREAK)
+ num = MAX_STREAK;
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gText_KOsInARow);
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
@@ -1281,8 +1285,8 @@ static void ArenaPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
static u16 ArenaGetWinStreak(u8 lvlMode)
{
u16 winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode];
- if (winStreak > 9999)
- return 9999;
+ if (winStreak > MAX_STREAK)
+ return MAX_STREAK;
else
return winStreak;
}
@@ -1293,9 +1297,9 @@ static void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
u16 winStreak = ArenaGetWinStreak(lvlMode);
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x80);
+ isCurrent = IsWinStreakActive(STREAK_ARENA_OPEN);
else
- isCurrent = sub_81A1C24(0x40);
+ isCurrent = IsWinStreakActive(STREAK_ARENA_50);
if (isCurrent == TRUE)
ArenaPrintStreak(gText_Current, winStreak, x1, x2, y);
@@ -1305,7 +1309,7 @@ static void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
static void ShowArenaResultsWindow(void)
{
- gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
PrintHyphens(10);
@@ -1325,8 +1329,8 @@ static void ShowArenaResultsWindow(void)
static void FactoryPrintStreak(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y)
{
AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL);
- if (num1 > 9999)
- num1 = 9999;
+ if (num1 > MAX_STREAK)
+ num1 = MAX_STREAK;
ConvertIntToDecimalStringN(gStringVar1, num1, STR_CONV_MODE_RIGHT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gText_WinStreak);
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
@@ -1346,8 +1350,8 @@ static void FactoryPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8
static u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode)
{
u16 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode];
- if (winStreak > 9999)
- return 9999;
+ if (winStreak > MAX_STREAK)
+ return MAX_STREAK;
else
return winStreak;
}
@@ -1355,8 +1359,8 @@ static u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode)
static u16 FactoryGetRentsCount(u8 battleMode, u8 lvlMode)
{
u16 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode];
- if (rents > 9999)
- return 9999;
+ if (rents > MAX_STREAK)
+ return MAX_STREAK;
else
return rents;
}
@@ -1371,15 +1375,15 @@ static void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8
default:
case FRONTIER_MODE_SINGLES:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x200);
+ isCurrent = IsWinStreakActive(STREAK_FACTORY_SINGLES_OPEN);
else
- isCurrent = sub_81A1C24(0x100);
+ isCurrent = IsWinStreakActive(STREAK_FACTORY_SINGLES_50);
break;
case FRONTIER_MODE_DOUBLES:
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x2000000);
+ isCurrent = IsWinStreakActive(STREAK_FACTORY_DOUBLES_OPEN);
else
- isCurrent = sub_81A1C24(0x1000000);
+ isCurrent = IsWinStreakActive(STREAK_FACTORY_DOUBLES_50);
break;
}
@@ -1391,7 +1395,7 @@ static void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8
static void ShowFactoryResultsWindow(u8 battleMode)
{
- gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
if (battleMode == FRONTIER_MODE_SINGLES)
@@ -1416,8 +1420,8 @@ static void ShowFactoryResultsWindow(u8 battleMode)
static void PyramidPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y)
{
AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL);
- if (num > 9999)
- num = 9999;
+ if (num > MAX_STREAK)
+ num = MAX_STREAK;
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
StringExpandPlaceholders(gStringVar4, gText_FloorsCleared);
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
@@ -1432,8 +1436,8 @@ static void PyramidPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
static u16 PyramidGetWinStreak(u8 lvlMode)
{
u16 winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode];
- if (winStreak > 9999)
- return 9999;
+ if (winStreak > MAX_STREAK)
+ return MAX_STREAK;
else
return winStreak;
}
@@ -1444,9 +1448,9 @@ static void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
u16 winStreak = PyramidGetWinStreak(lvlMode);
if (lvlMode != FRONTIER_LVL_50)
- isCurrent = sub_81A1C24(0x2000);
+ isCurrent = IsWinStreakActive(STREAK_PYRAMID_OPEN);
else
- isCurrent = sub_81A1C24(0x1000);
+ isCurrent = IsWinStreakActive(STREAK_PYRAMID_50);
if (isCurrent == TRUE)
PyramidPrintStreak(gText_Current, winStreak, x1, x2, y);
@@ -1456,7 +1460,7 @@ static void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
static void ShowPyramidResultsWindow(void)
{
- gRecordsWindowId = AddWindow(&gUnknown_08611C74);
+ gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults);
@@ -1479,7 +1483,7 @@ static void ShowLinkContestResultsWindow(void)
s32 i, j;
s32 x;
- gRecordsWindowId = AddWindow(&gUnknown_08611C7C);
+ gRecordsWindowId = AddWindow(&sLinkContestResultsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
@@ -1523,7 +1527,7 @@ static void ShowLinkContestResultsWindow(void)
CopyWindowToVram(gRecordsWindowId, 3);
}
-static void sub_81A31FC(void)
+static void CheckPutFrontierTVShowOnAir(void)
{
u8 name[32];
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -1540,25 +1544,25 @@ static void sub_81A31FC(void)
{
StringCopy(name, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name);
StripExtCtrlCodes(name);
- StringCopy(gSaveBlock2Ptr->frontier.opponentName[lvlMode], name);
- SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]);
+ StringCopy(gSaveBlock2Ptr->frontier.opponentNames[lvlMode], name);
+ SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.opponentTrainerIds[lvlMode]);
}
if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1
- && sub_80EE818())
+ && ShouldAirFrontierTVShow())
{
switch (battleMode)
{
case FRONTIER_MODE_SINGLES:
- sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1);
break;
case FRONTIER_MODE_DOUBLES:
- sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2);
break;
case FRONTIER_MODE_MULTIS:
- sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3);
break;
case FRONTIER_MODE_LINK_MULTIS:
- sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4);
break;
}
}
@@ -1569,12 +1573,12 @@ static void sub_81A31FC(void)
{
gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > 1
- && sub_80EE818())
+ && ShouldAirFrontierTVShow())
{
if (battleMode == FRONTIER_MODE_SINGLES)
- sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5);
else
- sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6);
}
}
break;
@@ -1583,12 +1587,12 @@ static void sub_81A31FC(void)
{
gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 1
- && sub_80EE818())
+ && ShouldAirFrontierTVShow())
{
if (battleMode == FRONTIER_MODE_SINGLES)
- sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11);
else
- sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12);
}
}
break;
@@ -1597,9 +1601,9 @@ static void sub_81A31FC(void)
{
gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode];
if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 1
- && sub_80EE818())
+ && ShouldAirFrontierTVShow())
{
- sub_80EE8C8(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10);
}
}
break;
@@ -1609,12 +1613,12 @@ static void sub_81A31FC(void)
gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode];
gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode];
if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > 1
- && sub_80EE818())
+ && ShouldAirFrontierTVShow())
{
if (battleMode == FRONTIER_MODE_SINGLES)
- sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7);
else
- sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8);
}
}
break;
@@ -1623,9 +1627,9 @@ static void sub_81A31FC(void)
{
gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > 1
- && sub_80EE818())
+ && ShouldAirFrontierTVShow())
{
- sub_80EE8C8(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9);
}
}
break;
@@ -1634,53 +1638,58 @@ static void sub_81A31FC(void)
{
gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode];
if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 1
- && sub_80EE818())
+ && ShouldAirFrontierTVShow())
{
- sub_80EE8C8(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13);
+ TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13);
}
}
break;
}
}
-static void sub_81A35EC(void)
+static void Script_GetFrontierBrainStatus(void)
{
VarGet(VAR_FRONTIER_FACILITY); // Unused return value.
- gSpecialVar_Result = sub_81A3610();
+ gSpecialVar_Result = GetFrontierBrainStatus();
}
-u8 sub_81A3610(void)
+u8 GetFrontierBrainStatus(void)
{
- s32 ret = 0;
+ s32 status = FRONTIER_BRAIN_NOT_READY;
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
- u16 val = GetCurrentFacilityWinStreak();
- s32 r5 = val + gUnknown_08611550[facility][3];
+ u16 winStreakNoModifier = GetCurrentFacilityWinStreak();
+ s32 winStreak = winStreakNoModifier + sFrontierBrainStreakAppearances[facility][3];
s32 symbolsCount;
if (battleMode != FRONTIER_MODE_SINGLES)
- return 0;
+ return FRONTIER_BRAIN_NOT_READY;
symbolsCount = GetPlayerSymbolCountForFacility(facility);
switch (symbolsCount)
{
+ // Missing a symbol
case 0:
case 1:
- if (r5 == gUnknown_08611550[facility][symbolsCount])
- ret = symbolsCount + 1;
+ if (winStreak == sFrontierBrainStreakAppearances[facility][symbolsCount])
+ status = symbolsCount + 1; // FRONTIER_BRAIN_SILVER and FRONTIER_BRAIN_GOLD
break;
+ // Already received both symbols
case 2:
default:
- if (r5 == gUnknown_08611550[facility][0])
- ret = 3;
- else if (r5 == gUnknown_08611550[facility][1])
- ret = 4;
- else if (r5 > gUnknown_08611550[facility][1] && (r5 - gUnknown_08611550[facility][1]) % gUnknown_08611550[facility][2] == 0)
- ret = 4;
+ // Silver streak is reached
+ if (winStreak == sFrontierBrainStreakAppearances[facility][0])
+ status = FRONTIER_BRAIN_STREAK;
+ // Gold streak is reached
+ else if (winStreak == sFrontierBrainStreakAppearances[facility][1])
+ status = FRONTIER_BRAIN_STREAK_LONG;
+ // Some increment of the gold streak is reached
+ else if (winStreak > sFrontierBrainStreakAppearances[facility][1] && (winStreak - sFrontierBrainStreakAppearances[facility][1]) % sFrontierBrainStreakAppearances[facility][2] == 0)
+ status = FRONTIER_BRAIN_STREAK_LONG;
break;
}
- return ret;
+ return status;
}
void CopyFrontierTrainerText(u8 whichText, u16 trainerId)
@@ -1692,12 +1701,12 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId)
FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.greeting);
else if (trainerId == TRAINER_FRONTIER_BRAIN)
CopyFrontierBrainText(FALSE);
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
FrontierSpeechToString(gFacilityTrainers[trainerId].speechBefore);
else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].greeting);
else
- CopyFriendsApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE);
+ BufferApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE);
break;
case FRONTIER_PLAYER_LOST_TEXT:
if (trainerId == TRAINER_EREADER)
@@ -1708,7 +1717,7 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId)
{
CopyFrontierBrainText(FALSE);
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
FrontierSpeechToString(gFacilityTrainers[trainerId].speechWin);
}
@@ -1724,7 +1733,7 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId)
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
FrontierSpeechToString(GetRecordedBattleEasyChatSpeech());
else
- FrontierSpeechToString(gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords);
+ FrontierSpeechToString(gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].speechWon);
}
break;
case FRONTIER_PLAYER_WON_TEXT:
@@ -1736,7 +1745,7 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId)
{
CopyFrontierBrainText(TRUE);
}
- else if (trainerId < TRAINER_RECORD_MIXING_FRIEND)
+ else if (trainerId < FRONTIER_TRAINERS_COUNT)
{
FrontierSpeechToString(gFacilityTrainers[trainerId].speechLose);
}
@@ -1752,23 +1761,23 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId)
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
{
trainerId = GetRecordedBattleApprenticeId();
- FrontierSpeechToString(gApprentices[trainerId].easyChatWords);
+ FrontierSpeechToString(gApprentices[trainerId].speechLost);
}
else
{
trainerId = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id;
- FrontierSpeechToString(gApprentices[trainerId].easyChatWords);
+ FrontierSpeechToString(gApprentices[trainerId].speechLost);
}
}
break;
}
}
-void sub_81A3908(void)
+void ResetWinStreaks(void)
{
s32 battleMode, lvlMode;
- gSaveBlock2Ptr->frontier.field_CDC = 0;
+ gSaveBlock2Ptr->frontier.winStreakActiveFlags = 0;
for (battleMode = 0; battleMode < 4; battleMode++)
{
for (lvlMode = 0; lvlMode < 2; lvlMode++)
@@ -1788,8 +1797,8 @@ void sub_81A3908(void)
}
}
}
- if (gSaveBlock2Ptr->frontier.field_CA8 != 0)
- gSaveBlock2Ptr->frontier.field_CA8 = 1;
+ if (gSaveBlock2Ptr->frontier.challengeStatus != 0)
+ gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_SAVING;
}
u32 GetCurrentFacilityWinStreak(void)
@@ -1819,15 +1828,15 @@ u32 GetCurrentFacilityWinStreak(void)
}
}
-void sub_81A3ACC(void)
+void ResetFrontierTrainerIds(void)
{
s32 i;
- for (i = 0; i < 20; i++)
+ for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.trainerIds); i++)
gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF;
}
-static void sub_81A3B00(void)
+static void IsTrainerFrontierBrain(void)
{
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
gSpecialVar_Result = TRUE;
@@ -1841,7 +1850,7 @@ u8 GetPlayerSymbolCountForFacility(u8 facility)
+ FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2);
}
-static void sub_81A3B64(void)
+static void GiveBattlePoints(void)
{
s32 challengeNum = 0;
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -1876,37 +1885,37 @@ static void sub_81A3B64(void)
if (challengeNum != 0)
challengeNum--;
- if (challengeNum >= ARRAY_COUNT(gUnknown_086118B4))
- challengeNum = ARRAY_COUNT(gUnknown_086118B4) - 1;
+ if (challengeNum >= ARRAY_COUNT(sBattlePointAwards))
+ challengeNum = ARRAY_COUNT(sBattlePointAwards) - 1;
- points = gUnknown_086118B4[challengeNum][facility][battleMode];
+ points = sBattlePointAwards[challengeNum][facility][battleMode];
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
points += 10;
gSaveBlock2Ptr->frontier.battlePoints += points;
ConvertIntToDecimalStringN(gStringVar1, points, STR_CONV_MODE_LEFT_ALIGN, 2);
- if (gSaveBlock2Ptr->frontier.battlePoints > 9999)
- gSaveBlock2Ptr->frontier.battlePoints = 9999;
+ if (gSaveBlock2Ptr->frontier.battlePoints > MAX_BATTLE_FRONTIER_POINTS)
+ gSaveBlock2Ptr->frontier.battlePoints = MAX_BATTLE_FRONTIER_POINTS;
- points = gSaveBlock2Ptr->frontier.field_EBA;
- points += gUnknown_086118B4[challengeNum][facility][battleMode];
- sub_80EED60(gUnknown_086118B4[challengeNum][facility][battleMode]);
+ points = gSaveBlock2Ptr->frontier.cardBattlePoints;
+ points += sBattlePointAwards[challengeNum][facility][battleMode];
+ IncrementDailyBattlePoints(sBattlePointAwards[challengeNum][facility][battleMode]);
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
{
points += 10;
- sub_80EED60(10);
+ IncrementDailyBattlePoints(10);
}
if (points > 0xFFFF)
points = 0xFFFF;
- gSaveBlock2Ptr->frontier.field_EBA = points;
+ gSaveBlock2Ptr->frontier.cardBattlePoints = points;
}
-static void sub_81A3D30(void)
+static void GetFacilitySymbolCount(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
gSpecialVar_Result = GetPlayerSymbolCountForFacility(facility);
}
-static void sub_81A3D58(void)
+static void GiveFacilitySymbol(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
if (GetPlayerSymbolCountForFacility(facility) == 0)
@@ -1915,7 +1924,7 @@ static void sub_81A3D58(void)
FlagSet(FLAG_SYS_TOWER_GOLD + facility * 2);
}
-static void sub_81A3DA0(void)
+static void CheckBattleTypeFlag(void)
{
if (gBattleTypeFlags & gSpecialVar_0x8005)
gSpecialVar_Result = TRUE;
@@ -1923,12 +1932,12 @@ static void sub_81A3DA0(void)
gSpecialVar_Result = FALSE;
}
-static u8 sub_81A3DD0(u16 species, u8 arg1, s32 arg2)
+static u8 AppendCaughtBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCaught)
{
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
{
- arg1++;
- switch (arg1)
+ count++;
+ switch (count)
{
case 1:
case 3:
@@ -1936,30 +1945,30 @@ static u8 sub_81A3DD0(u16 species, u8 arg1, s32 arg2)
case 7:
case 9:
case 11:
- if (arg2 == arg1)
+ if (numBannedMonsCaught == count)
StringAppend(gStringVar1, gText_SpaceAndSpace);
- else if (arg2 > arg1)
+ else if (numBannedMonsCaught > count)
StringAppend(gStringVar1, gText_CommaSpace);
break;
case 2:
- if (arg1 == arg2)
+ if (count == numBannedMonsCaught)
StringAppend(gStringVar1, gText_SpaceAndSpace);
else
StringAppend(gStringVar1, gText_CommaSpace);
StringAppend(gStringVar1, gText_NewLine);
break;
default:
- if (arg1 == arg2)
+ if (count == numBannedMonsCaught)
StringAppend(gStringVar1, gText_SpaceAndSpace);
else
StringAppend(gStringVar1, gText_CommaSpace);
- StringAppend(gStringVar1, gText_ScrollTextUp);
+ StringAppend(gStringVar1, gText_LineBreak);
break;
}
StringAppend(gStringVar1, gSpeciesNames[species]);
}
- return arg1;
+ return count;
}
static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monLevel, u16 *speciesArray, u16 *itemsArray, u8 *count)
@@ -1995,30 +2004,36 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL
(*count)++;
}
-static void sub_81A3FD4(void)
+// gSpecialVar_Result is the level mode before and after calls to this function
+// gSpecialVar_0x8004 is used to store the return value instead (TRUE if there are insufficient eligible mons)
+// The names of ineligible pokemon that have been caught are also buffered to print
+static void CheckPartyIneligibility(void)
{
- u16 speciesArray[6];
- u16 itemArray[6];
+ u16 speciesArray[PARTY_SIZE];
+ u16 itemArray[PARTY_SIZE];
s32 monId = 0;
s32 toChoose = 0;
u8 count = 0;
s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
s32 monIdLooper;
+ // count is re-used, define for clarity
+ #define numEligibleMons count
+
switch (battleMode)
{
case FRONTIER_MODE_SINGLES:
- toChoose = 3;
+ toChoose = FRONTIER_PARTY_SIZE;
break;
case FRONTIER_MODE_MULTIS:
case FRONTIER_MODE_LINK_MULTIS:
- toChoose = 2;
+ toChoose = FRONTIER_MULTI_PARTY_SIZE;
break;
case FRONTIER_MODE_DOUBLES:
if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_TOWER)
- toChoose = 4;
+ toChoose = FRONTIER_DOUBLES_PARTY_SIZE;
else
- toChoose = 3;
+ toChoose = FRONTIER_PARTY_SIZE;
break;
}
@@ -2026,7 +2041,7 @@ static void sub_81A3FD4(void)
do
{
monId = monIdLooper;
- count = 0;
+ numEligibleMons = 0;
do
{
u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2);
@@ -2035,12 +2050,12 @@ static void sub_81A3FD4(void)
u16 hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP);
if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_PYRAMID)
{
- if (heldItem == 0)
- AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count);
+ if (heldItem == ITEM_NONE)
+ AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &numEligibleMons);
}
else
{
- AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count);
+ AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &numEligibleMons);
}
monId++;
if (monId >= PARTY_SIZE)
@@ -2048,9 +2063,9 @@ static void sub_81A3FD4(void)
} while (monId != monIdLooper);
monIdLooper++;
- } while (monIdLooper < PARTY_SIZE && count < toChoose);
+ } while (monIdLooper < PARTY_SIZE && numEligibleMons < toChoose);
- if (count < toChoose)
+ if (numEligibleMons < toChoose)
{
s32 i;
s32 caughtBannedMons = 0;
@@ -2061,10 +2076,10 @@ static void sub_81A3FD4(void)
caughtBannedMons++;
}
gStringVar1[0] = EOS;
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE;
count = 0;
for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF; i++)
- count = sub_81A3DD0(gFrontierBannedSpecies[i], count, caughtBannedMons);
+ count = AppendCaughtBannedMonSpeciesName(gFrontierBannedSpecies[i], count, caughtBannedMons);
if (count == 0)
{
@@ -2074,7 +2089,7 @@ static void sub_81A3FD4(void)
else
{
if (count & 1)
- StringAppend(gStringVar1, gText_ScrollTextUp);
+ StringAppend(gStringVar1, gText_LineBreak);
else
StringAppend(gStringVar1, gText_Space2);
StringAppend(gStringVar1, gText_Are2);
@@ -2082,17 +2097,18 @@ static void sub_81A3FD4(void)
}
else
{
- gSpecialVar_0x8004 = 0;
+ gSpecialVar_0x8004 = FALSE;
gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_Result;
}
+ #undef numEligibleMons
}
-static void sub_81A4224(void)
+static void ValidateVisitingTrainer(void)
{
ValidateEReaderTrainer();
}
-static void sub_81A4230(void)
+static void IncrementWinStreak(void)
{
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
@@ -2101,50 +2117,50 @@ static void sub_81A4230(void)
switch (facility)
{
case FRONTIER_FACILITY_TOWER:
- if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < MAX_STREAK)
{
gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]++;
if (battleMode == FRONTIER_MODE_SINGLES)
{
SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]);
- gSaveBlock2Ptr->frontier.field_D02 = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
+ gSaveBlock2Ptr->frontier.towerSinglesStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
}
}
break;
case FRONTIER_FACILITY_DOME:
- if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < MAX_STREAK)
gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++;
- if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < MAX_STREAK)
gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++;
break;
case FRONTIER_FACILITY_PALACE:
- if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < MAX_STREAK)
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++;
break;
case FRONTIER_FACILITY_ARENA:
- if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < MAX_STREAK)
gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]++;
break;
case FRONTIER_FACILITY_FACTORY:
- if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < MAX_STREAK)
gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]++;
break;
case FRONTIER_FACILITY_PIKE:
- if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < MAX_STREAK)
gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]++;
break;
case FRONTIER_FACILITY_PYRAMID:
- if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < 9999)
+ if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < MAX_STREAK)
gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]++;
break;
}
}
-static void sub_81A43A8(void)
+static void RestoreHeldItems(void)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
{
if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0)
{
@@ -2154,13 +2170,13 @@ static void sub_81A43A8(void)
}
}
-static void sub_81A4410(void)
+static void SaveRecordBattle(void)
{
gSpecialVar_Result = MoveRecordedBattleToSaveData();
- gSaveBlock2Ptr->frontier.field_CA9_b = 1;
+ gSaveBlock2Ptr->frontier.disableRecordBattle = TRUE;
}
-static void sub_81A443C(void)
+static void BufferFrontierTrainerName(void)
{
switch (gSpecialVar_0x8005)
{
@@ -2173,11 +2189,11 @@ static void sub_81A443C(void)
}
}
-static void sub_81A447C(void)
+static void ResetSketchedMoves(void)
{
u8 i, j, k;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
{
u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
if (monId < PARTY_SIZE)
@@ -2198,7 +2214,7 @@ static void sub_81A447C(void)
}
}
-static void sub_81A457C(void)
+static void SetFacilityBrainEventObject(void)
{
SetFrontierBrainEventObjGfx(VarGet(VAR_FRONTIER_FACILITY));
}
@@ -2216,11 +2232,11 @@ static void Print1PRecord(s32 position, s32 x, s32 y, struct RankingHall1P *hall
TVShowConvertInternationalString(text, hallRecord->name, hallRecord->language);
AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 2) * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
winStreak = hallRecord->winStreak;
- if (winStreak > 9999)
- winStreak = 9999;
+ if (winStreak > MAX_STREAK)
+ winStreak = MAX_STREAK;
ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4);
- StringExpandPlaceholders(gStringVar4, gHallFacilityToRecordsText[hallFacilityId]);
- AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gHallFacilityToRecordsText[hallFacilityId], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
+ StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[hallFacilityId]);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, sHallFacilityToRecordsText[hallFacilityId], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
}
}
@@ -2243,11 +2259,11 @@ static void Print2PRecord(s32 position, s32 x, s32 y, struct RankingHall2P *hall
AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 4) * 8, (8 * (y + 5 * position + 1)) + 1, TEXT_SPEED_FF, NULL);
winStreak = hallRecord->winStreak;
- if (winStreak > 9999)
- winStreak = 9999;
+ if (winStreak > MAX_STREAK)
+ winStreak = MAX_STREAK;
ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4);
- StringExpandPlaceholders(gStringVar4, gHallFacilityToRecordsText[9]);
- AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gHallFacilityToRecordsText[9], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
+ StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[RANKING_HALL_BATTLE_TOWER_LINK]);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, sHallFacilityToRecordsText[RANKING_HALL_BATTLE_TOWER_LINK], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
}
}
@@ -2326,15 +2342,15 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode)
struct RankingHall1P records1P[3];
struct RankingHall2P records2P[3];
- StringCopy(gStringVar1, gUnknown_08611CB0[hallFacilityId][0]);
- StringExpandPlaceholders(gStringVar4, gUnknown_08611CB0[hallFacilityId][1]);
+ StringCopy(gStringVar1, sRecordsWindowChallengeTexts[hallFacilityId][0]);
+ StringExpandPlaceholders(gStringVar4, sRecordsWindowChallengeTexts[hallFacilityId][1]);
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL);
- x = GetStringRightAlignXOffset(1, gLevelModeText[lvlMode], 0xD0);
- AddTextPrinterParameterized(gRecordsWindowId, 1, gLevelModeText[lvlMode], x, 1, TEXT_SPEED_FF, NULL);
- if (hallFacilityId == HALL_FACILITIES_COUNT)
+ x = GetStringRightAlignXOffset(1, sLevelModeText[lvlMode], 0xD0);
+ AddTextPrinterParameterized(gRecordsWindowId, 1, sLevelModeText[lvlMode], x, 1, TEXT_SPEED_FF, NULL);
+ if (hallFacilityId == RANKING_HALL_BATTLE_TOWER_LINK)
{
- gSaveBlock2Ptr->frontier.opponentName[0][PLAYER_NAME_LENGTH] = EOS;
- gSaveBlock2Ptr->frontier.opponentName[1][PLAYER_NAME_LENGTH] = EOS;
+ gSaveBlock2Ptr->frontier.opponentNames[0][PLAYER_NAME_LENGTH] = EOS;
+ gSaveBlock2Ptr->frontier.opponentNames[1][PLAYER_NAME_LENGTH] = EOS;
Fill2PRecords(records2P, lvlMode);
for (i = 0; i < 3; i++)
Print2PRecord(i, 1, 4, &records2P[i]);
@@ -2349,7 +2365,7 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode)
void ShowRankingHallRecordsWindow(void)
{
- gRecordsWindowId = AddWindow(&gUnknown_08611C84);
+ gRecordsWindowId = AddWindow(&sRankingHallRecordsWindowTemplate);
DrawStdWindowFrame(gRecordsWindowId, FALSE);
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_50);
@@ -2394,7 +2410,7 @@ void ClearRankingHallRecords(void)
}
}
-void sub_81A4C30(void)
+void SaveGameFrontier(void)
{
s32 i;
struct Pokemon *monsParty = calloc(PARTY_SIZE, sizeof(struct Pokemon));
@@ -2425,7 +2441,7 @@ u8 GetFrontierBrainTrainerPicIndex(void)
else
facility = VarGet(VAR_FRONTIER_FACILITY);
- return gTrainers[gFacilityToBrainTrainerId[facility]].trainerPic;
+ return gTrainers[sFrontierBrainTrainerIds[facility]].trainerPic;
}
u8 GetFrontierBrainTrainerClass(void)
@@ -2437,7 +2453,7 @@ u8 GetFrontierBrainTrainerClass(void)
else
facility = VarGet(VAR_FRONTIER_FACILITY);
- return gTrainers[gFacilityToBrainTrainerId[facility]].trainerClass;
+ return gTrainers[sFrontierBrainTrainerIds[facility]].trainerClass;
}
void CopyFrontierBrainTrainerName(u8 *dst)
@@ -2451,7 +2467,7 @@ void CopyFrontierBrainTrainerName(u8 *dst)
facility = VarGet(VAR_FRONTIER_FACILITY);
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
- dst[i] = gTrainers[gFacilityToBrainTrainerId[facility]].trainerName[i];
+ dst[i] = gTrainers[sFrontierBrainTrainerIds[facility]].trainerName[i];
dst[i] = EOS;
}
@@ -2459,13 +2475,13 @@ void CopyFrontierBrainTrainerName(u8 *dst)
bool8 IsFrontierBrainFemale(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
- return sFacilityToBrainEventObjGfx[facility][1];
+ return sFrontierBrainObjEventGfx[facility][1];
}
void SetFrontierBrainEventObjGfx_2(void)
{
s32 facility = VarGet(VAR_FRONTIER_FACILITY);
- VarSet(VAR_OBJ_GFX_ID_0, sFacilityToBrainEventObjGfx[facility][0]);
+ VarSet(VAR_OBJ_GFX_ID_0, sFrontierBrainObjEventGfx[facility][0]);
}
#define FRONTIER_BRAIN_OTID 61226
@@ -2474,7 +2490,7 @@ void SetFrontierBrainEventObjGfx_2(void)
void CreateFrontierBrainPokemon(void)
{
s32 i, j;
- s32 monCountInBits;
+ s32 selectedMonBits;
s32 monPartyId;
s32 monLevel = 0;
u8 friendship;
@@ -2482,16 +2498,16 @@ void CreateFrontierBrainPokemon(void)
s32 symbol = GetFronterBrainSymbol();
if (facility == FRONTIER_FACILITY_DOME)
- monCountInBits = GetDomeTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN));
+ selectedMonBits = GetDomeTrainerSelectedMons(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN));
else
- monCountInBits = 7;
+ selectedMonBits = (1 << FRONTIER_PARTY_SIZE) - 1; // all 3 mons selected
ZeroEnemyPartyMons();
monPartyId = 0;
monLevel = SetFacilityPtrsGetLevel();
- for (i = 0; i < 3; monCountInBits >>= 1, i++)
+ for (i = 0; i < FRONTIER_PARTY_SIZE; selectedMonBits >>= 1, i++)
{
- if (!(monCountInBits & 1))
+ if (!(selectedMonBits & 1))
continue;
do
@@ -2507,7 +2523,7 @@ void CreateFrontierBrainPokemon(void)
SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, &sFrontierBrainsMons[facility][symbol][i].heldItem);
for (j = 0; j < NUM_STATS; j++)
SetMonData(&gEnemyParty[monPartyId], MON_DATA_HP_EV + j, &sFrontierBrainsMons[facility][symbol][i].evs[j]);
- friendship = 0xFF;
+ friendship = MAX_FRIENDSHIP;
for (j = 0; j < MAX_MON_MOVES; j++)
{
SetMonMoveSlot(&gEnemyParty[monPartyId], sFrontierBrainsMons[facility][symbol][i].moves[j], j);
@@ -2544,7 +2560,7 @@ void CreateFrontierBrainPokemon(void)
bl TrainerIdToDomeTournamentId\n\
lsls r0, 16\n\
lsrs r0, 16\n\
- bl GetDomeTrainerMonCountInBits\n\
+ bl GetDomeTrainerSelectedMons\n\
adds r4, r0, 0\n\
b _081A4E46\n\
.pool\n\
@@ -2768,7 +2784,7 @@ u16 GetFrontierBrainMonSpecies(u8 monId)
void SetFrontierBrainEventObjGfx(u8 facility)
{
gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN;
- VarSet(VAR_OBJ_GFX_ID_0, sFacilityToBrainEventObjGfx[facility][0]);
+ VarSet(VAR_OBJ_GFX_ID_0, sFrontierBrainObjEventGfx[facility][0]);
}
u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId)
@@ -2803,17 +2819,18 @@ s32 GetFronterBrainSymbol(void)
if (symbol == 2)
{
u16 winStreak = GetCurrentFacilityWinStreak();
- if (winStreak + gUnknown_08611550[facility][3] == gUnknown_08611550[facility][0])
+ if (winStreak + sFrontierBrainStreakAppearances[facility][3] == sFrontierBrainStreakAppearances[facility][0])
symbol = 0;
- else if (winStreak + gUnknown_08611550[facility][3] == gUnknown_08611550[facility][1])
+ else if (winStreak + sFrontierBrainStreakAppearances[facility][3] == sFrontierBrainStreakAppearances[facility][1])
symbol = 1;
- else if (winStreak + gUnknown_08611550[facility][3] > gUnknown_08611550[facility][1]
- && (winStreak + gUnknown_08611550[facility][3] - gUnknown_08611550[facility][1]) % gUnknown_08611550[facility][2] == 0)
+ else if (winStreak + sFrontierBrainStreakAppearances[facility][3] > sFrontierBrainStreakAppearances[facility][1]
+ && (winStreak + sFrontierBrainStreakAppearances[facility][3] - sFrontierBrainStreakAppearances[facility][1]) % sFrontierBrainStreakAppearances[facility][2] == 0)
symbol = 1;
}
return symbol;
}
+// Called for intro speech as well despite the fact that its handled in the map scripts files instead
static void CopyFrontierBrainText(bool8 playerWonText)
{
s32 facility;
@@ -2833,10 +2850,10 @@ static void CopyFrontierBrainText(bool8 playerWonText)
switch (playerWonText)
{
case FALSE:
- StringCopy(gStringVar4, gUnknown_08611DB0[symbol][facility]);
+ StringCopy(gStringVar4, sFrontierBrainPlayerLostTexts[symbol][facility]);
break;
case TRUE:
- StringCopy(gStringVar4, gUnknown_08611DB8[symbol][facility]);
+ StringCopy(gStringVar4, sFrontierBrainPlayerWonTexts[symbol][facility]);
break;
}
}
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..eeeba56c9 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -777,8 +777,8 @@ const u32 gBattleAnimSpriteGfx_Roots[] = INCBIN_U32("graphics/battle_anims/sprit
const u32 gBattleAnimSpritePal_ItemBag[] = INCBIN_U32("graphics/battle_anims/sprites/item_bag.gbapal.lz");
const u32 gBattleAnimSpriteGfx_ItemBag[] = INCBIN_U32("graphics/battle_anims/sprites/item_bag.4bpp.lz");
-const u32 gBattleAnimSpritePal_TriForceTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_force_triangle.gbapal.lz");
-const u32 gBattleAnimSpriteGfx_TriForceTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_force_triangle.4bpp.lz");
+const u32 gBattleAnimSpritePal_TriAttackTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.gbapal.lz");
+const u32 gBattleAnimSpriteGfx_TriAttackTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.4bpp.lz");
const u32 gBattleAnimSpritePal_LetterZ[] = INCBIN_U32("graphics/battle_anims/sprites/letter_z.gbapal.lz");
const u32 gBattleAnimSpriteGfx_LetterZ[] = INCBIN_U32("graphics/battle_anims/sprites/letter_z.4bpp.lz");
@@ -960,34 +960,28 @@ const u32 gUnknown_08D778F0[] = INCBIN_U32("graphics/battle_transitions/vs_frame
const u32 gUnknown_08D779D8[] = INCBIN_U32("graphics/battle_transitions/vs_frame.bin.lz");
const u32 gUnknown_08D77AE4[] = INCBIN_U32("graphics/battle_transitions/vs_frame.gbapal.lz");
-const u32 gUnknown_08D77B0C[] = INCBIN_U32("graphics/battle_transitions/vs.4bpp.lz");
+const u32 gVsLettersGfx[] = INCBIN_U32("graphics/battle_transitions/vs.4bpp.lz");
#include "data/graphics/battle_terrain.h"
-const u32 gUnknown_08D82F10[] = INCBIN_U32("graphics/battle_frontier/tourney_bg.4bpp.lz");
-const u32 gUnknown_08D834FC[] = INCBIN_U32("graphics/battle_frontier/tourney_line.4bpp.lz"); // the red glow mask for the tourney advancement lines
-
-const u32 gUnknown_08D83900[] = INCBIN_U32("graphics/unknown/unknown_D83900.bin.lz"); // tilemaps likely
-
-const u32 gUnknown_08D83B2C[] = INCBIN_U32("graphics/unknown/unknown_D83B2C.bin.lz");
-
-const u32 gUnknown_08D83C3C[] = INCBIN_U32("graphics/unknown/unknown_D83C3C.bin.lz");
-
-const u32 gUnknown_08D83D50[] = INCBIN_U32("graphics/battle_frontier/misc1.4bpp.lz");
-
-const u32 gUnknown_08D84970[] = INCBIN_U32("graphics/unknown/unknown_D84970.bin.lz");
-
-const u32 gUnknown_08D84F00[] = INCBIN_U32("graphics/unknown/unknown_D84F00.bin.lz");
-
-const u32 gBattleFrontierGfx_DomeOptions[] = INCBIN_U32("graphics/battle_frontier/options.4bpp.lz");
-const u32 gUnknown_08D85358[] = INCBIN_U32("graphics/battle_frontier/options_pal1.gbapal.lz");
-const u32 gUnknown_08D85444[] = INCBIN_U32("graphics/battle_frontier/options_pal2.gbapal.lz"); // pokeball pal
-const u32 gUnknown_08D854C8[] = INCBIN_U32("graphics/battle_frontier/options_pal3.gbapal.lz"); // arrow pal
+// Battle Dome
+const u32 gDomeTourneyBg_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_bg.4bpp.lz");
+const u32 gDomeTourneyLine_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_line.4bpp.lz"); // the red glow mask for the tourney advancement lines
+const u32 gDomeTourneyLineMask_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_line_mask_map.bin.lz");
+const u32 gDomeTourneyLineDown_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_line_down_map.bin.lz");
+const u32 gDomeTourneyLineUp_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_line_up_map.bin.lz");
+const u32 gDomeTourneyInfoCard_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card.4bpp.lz");
+const u32 gDomeTourneyInfoCard_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card_tilemap.bin.lz");
+const u32 gDomeTourneyInfoCardBg_Tilemap[] = INCBIN_U32("graphics/battle_frontier/tourney_info_card_bg.bin.lz");
+const u32 gDomeTourneyTreeButtons_Gfx[] = INCBIN_U32("graphics/battle_frontier/tourney_buttons.4bpp.lz"); // exit/cancel and pokeball buttons
+const u32 gDomeTourneyTree_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney.gbapal.lz");
+const u32 gDomeTourneyTreeButtons_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney_buttons.gbapal.lz");
+const u32 gDomeTourneyMatchCardBg_Pal[] = INCBIN_U32("graphics/battle_frontier/tourney_match_card_bg.gbapal.lz");
const u32 gBattleArenaJudgementSymbolsGfx[] = INCBIN_U32("graphics/battle_frontier/arena_judgement_symbols.4bpp.lz");
const u32 gBattleArenaJudgementSymbolsPalette[] = INCBIN_U32("graphics/battle_frontier/arena_judgement_symbols.gbapal.lz");
-const u32 gUnknown_08D85600[] = INCBIN_U32("graphics/battle_frontier/text.gbapal.lz");
+const u32 gBattleWindowTextPalette[] = INCBIN_U32("graphics/battle_interface/text.gbapal.lz");
const u16 gUnknown_08D85620[] = INCBIN_U16("graphics/battle_frontier/text_pp.gbapal");
const u16 gTilesetAnims_BattleDomePals0_0[] = INCBIN_U16("graphics/battle_frontier/dome_anim1.gbapal");
@@ -1138,9 +1132,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 +1510,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..065d25582 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"
@@ -101,7 +101,7 @@ static void SpriteCB_GetOnScreenAndAnimate(struct Sprite *sprite);
static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2);
static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2);
static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2);
-static void sub_8175364(u8 taskId);
+static void Task_DoConfettiEffect(u8 taskId);
static void sub_81751A4(struct Sprite* sprite);
// const rom data
@@ -138,9 +138,10 @@ static const struct BgTemplate sHof_BgTemplates[] =
static const struct WindowTemplate sHof_WindowTemplate = {0, 2, 2, 0xE, 6, 0xE, 1};
-static const u8 sUnknown_085E5388[] = {0, 1, 2, 0};
+static const u8 sMonInfoTextColors[4] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY};
+static const u8 sPlayerInfoTextColors[4] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
-static const u8 sUnknown_085E538C[] = {0, 2, 3, 0, 4, 5, 0, 0};
+static const u8 sUnused_085E538C[] = {4, 5, 0, 0};
static const struct CompressedSpriteSheet sHallOfFame_ConfettiSpriteSheet[] =
{
@@ -174,10 +175,10 @@ static const s16 sHallOfFame_MonHalfTeamPositions[3][4] =
static const struct OamData sOamData_85E53FC =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -466,7 +467,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
}
else
{
- if (Save_LoadGameData(3) != TRUE)
+ if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK)
memset(gDecompressionBuffer, 0, 0x2000);
}
@@ -497,7 +498,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
static void Task_Hof_TrySaveData(u8 taskId)
{
gGameContinueCallback = CB2_DoHallOfFameScreenDontSaveData;
- if (TrySavingData(SAVE_HALL_OF_FAME) == 0xFF && gDamagedSaveSectors != 0)
+ if (TrySavingData(SAVE_HALL_OF_FAME) == SAVE_STATUS_ERROR && gDamagedSaveSectors != 0)
{
UnsetBgTilemapBuffer(1);
UnsetBgTilemapBuffer(3);
@@ -580,7 +581,7 @@ static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId)
if (monSprite->callback == SpriteCallbackDummy)
{
- monSprite->oam.affineMode = 0;
+ monSprite->oam.affineMode = ST_OAM_AFFINE_OFF;
HallOfFame_PrintMonInfo(currMon, 0, 14);
gTasks[taskId].tFrameCount = 120;
gTasks[taskId].func = Task_Hof_TryDisplayAnotherMon;
@@ -835,7 +836,7 @@ void CB2_DoHallOfFamePC(void)
static void Task_HofPC_CopySaveData(u8 taskId)
{
sub_81980F0(0, 0x1E, 0, 0xC, 0x226);
- if (Save_LoadGameData(3) != 1)
+ if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK)
{
gTasks[taskId].func = Task_HofPC_PrintDataIsCorrupted;
}
@@ -1063,7 +1064,7 @@ static void Task_HofPC_HandleExit(u8 taskId)
static void Task_HofPC_PrintDataIsCorrupted(u8 taskId)
{
- sub_8198180(gText_UnkCtrlF800Exit, 8, TRUE);
+ sub_8198180(gText_AButtonExit, 8, TRUE);
DrawDialogueFrame(0, 0);
AddTextPrinterParameterized2(0, 1, gText_HOFCorrupted, 0, NULL, 2, 1, 3);
CopyWindowToVram(0, 3);
@@ -1086,7 +1087,7 @@ static void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2)
{
FillWindowPixelBuffer(0, PIXEL_FILL(0));
PutWindowTilemap(0);
- AddTextPrinterParameterized3(0, 1, GetStringCenterAlignXOffset(1, gText_WelcomeToHOF, 0xD0), 1, sUnknown_085E5388, 0, gText_WelcomeToHOF);
+ AddTextPrinterParameterized3(0, 1, GetStringCenterAlignXOffset(1, gText_WelcomeToHOF, 0xD0), 1, sMonInfoTextColors, 0, gText_WelcomeToHOF);
CopyWindowToVram(0, 3);
}
@@ -1122,7 +1123,7 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
*(stringPtr)++ = CHAR_QUESTION_MARK;
}
stringPtr[0] = EOS;
- AddTextPrinterParameterized3(0, 1, 0x10, 1, sUnknown_085E5388, -1, text);
+ AddTextPrinterParameterized3(0, 1, 0x10, 1, sMonInfoTextColors, -1, text);
}
// nick, species names, gender and level
@@ -1131,13 +1132,13 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
if (currMon->species == SPECIES_EGG)
{
width = GetStringCenterAlignXOffset(1, text, 0xD0);
- AddTextPrinterParameterized3(0, 1, width, 1, sUnknown_085E5388, -1, text);
+ AddTextPrinterParameterized3(0, 1, width, 1, sMonInfoTextColors, -1, text);
CopyWindowToVram(0, 3);
}
else
{
width = GetStringRightAlignXOffset(1, text, 0x80);
- AddTextPrinterParameterized3(0, 1, width, 1, sUnknown_085E5388, -1, text);
+ AddTextPrinterParameterized3(0, 1, width, 1, sMonInfoTextColors, -1, text);
text[0] = CHAR_SLASH;
stringPtr = StringCopy(text + 1, gSpeciesNames[currMon->species]);
@@ -1158,15 +1159,15 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
}
stringPtr[0] = EOS;
- AddTextPrinterParameterized3(0, 1, 0x80, 1, sUnknown_085E5388, -1, text);
+ AddTextPrinterParameterized3(0, 1, 0x80, 1, sMonInfoTextColors, -1, text);
stringPtr = StringCopy(text, gText_Level);
ConvertIntToDecimalStringN(stringPtr, currMon->lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
- AddTextPrinterParameterized3(0, 1, 0x24, 0x11, sUnknown_085E5388, -1, text);
+ AddTextPrinterParameterized3(0, 1, 0x24, 0x11, sMonInfoTextColors, -1, text);
stringPtr = StringCopy(text, gText_IDNumber);
ConvertIntToDecimalStringN(stringPtr, (u16)(currMon->tid), STR_CONV_MODE_LEADING_ZEROS, 5);
- AddTextPrinterParameterized3(0, 1, 0x68, 0x11, sUnknown_085E5388, -1, text);
+ AddTextPrinterParameterized3(0, 1, 0x68, 0x11, sMonInfoTextColors, -1, text);
CopyWindowToVram(0, 3);
}
@@ -1181,13 +1182,13 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2)
FillWindowPixelBuffer(1, PIXEL_FILL(1));
PutWindowTilemap(1);
DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x21D, 0xD);
- AddTextPrinterParameterized3(1, 1, 0, 1, sUnknown_085E538C, -1, gText_Name);
+ AddTextPrinterParameterized3(1, 1, 0, 1, sPlayerInfoTextColors, -1, gText_Name);
width = GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 0x70);
- AddTextPrinterParameterized3(1, 1, width, 1, sUnknown_085E538C, -1, gSaveBlock2Ptr->playerName);
+ AddTextPrinterParameterized3(1, 1, width, 1, sPlayerInfoTextColors, -1, gSaveBlock2Ptr->playerName);
trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) | (gSaveBlock2Ptr->playerTrainerId[1] << 8);
- AddTextPrinterParameterized3(1, 1, 0, 0x11, sUnknown_085E538C, 0, gText_IDNumber);
+ AddTextPrinterParameterized3(1, 1, 0, 0x11, sPlayerInfoTextColors, 0, gText_IDNumber);
text[0] = (trainerId % 100000) / 10000 + CHAR_0;
text[1] = (trainerId % 10000) / 1000 + CHAR_0;
text[2] = (trainerId % 1000) / 100 + CHAR_0;
@@ -1195,9 +1196,9 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2)
text[4] = (trainerId % 10) / 1 + CHAR_0;
text[5] = EOS;
width = GetStringRightAlignXOffset(1, text, 0x70);
- AddTextPrinterParameterized3(1, 1, width, 0x11, sUnknown_085E538C, -1, text);
+ AddTextPrinterParameterized3(1, 1, width, 0x11, sPlayerInfoTextColors, -1, text);
- AddTextPrinterParameterized3(1, 1, 0, 0x21, sUnknown_085E538C, -1, gText_MainMenuTime);
+ AddTextPrinterParameterized3(1, 1, 0, 0x21, sPlayerInfoTextColors, -1, gText_Time);
text[0] = (gSaveBlock2Ptr->playTimeHours / 100) + CHAR_0;
text[1] = (gSaveBlock2Ptr->playTimeHours % 100) / 10 + CHAR_0;
text[2] = (gSaveBlock2Ptr->playTimeHours % 10) + CHAR_0;
@@ -1213,7 +1214,7 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2)
text[6] = EOS;
width = GetStringRightAlignXOffset(1, text, 0x70);
- AddTextPrinterParameterized3(1, 1, width, 0x21, sUnknown_085E538C, -1, text);
+ AddTextPrinterParameterized3(1, 1, width, 0x21, sPlayerInfoTextColors, -1, text);
CopyWindowToVram(1, 3);
}
@@ -1386,12 +1387,13 @@ static bool8 sub_81751FC(void)
return FALSE;
}
-void sub_8175280(void)
+// Used when a Battle Dome tourney is won
+void DoConfettiEffect(void)
{
u8 taskId;
gSpecialVar_0x8004 = 180;
- taskId = CreateTask(sub_8175364, 0);
+ taskId = CreateTask(Task_DoConfettiEffect, 0);
if (taskId != 0xFF)
{
gTasks[taskId].data[1] = gSpecialVar_0x8004;
@@ -1399,11 +1401,11 @@ void sub_8175280(void)
}
}
-static void sub_81752C0(void)
+static void StopConfettiEffect(void)
{
u8 taskId;
- if ((taskId = FindTaskIdByFunc(sub_8175364)) != 0xFF)
+ if ((taskId = FindTaskIdByFunc(Task_DoConfettiEffect)) != 0xFF)
DestroyTask(taskId);
sub_8152254();
@@ -1436,7 +1438,7 @@ static void sub_81752F4(struct UnkStruct_81520A8 *structPtr)
}
}
-static void sub_8175364(u8 taskId)
+static void Task_DoConfettiEffect(u8 taskId)
{
u32 var = 0;
u16 *data = gTasks[taskId].data;
@@ -1474,7 +1476,7 @@ static void sub_8175364(u8 taskId)
data[0] = 0xFF;
break;
case 0xFF:
- sub_81752C0();
+ StopConfettiEffect();
gSpecialVar_0x8004 = var;
gSpecialVar_0x8005 = 0xFFFF;
break;
diff --git a/src/hof_pc.c b/src/hof_pc.c
index 01015ee81..327749179 100644
--- a/src/hof_pc.c
+++ b/src/hof_pc.c
@@ -27,7 +27,7 @@ static void ReshowPCMenuAfterHallOfFamePC(void)
{
ScriptContext2_Enable();
Overworld_PlaySpecialMapMusic();
- ScrSpecial_CreatePCMenu();
+ ScriptMenu_CreatePCMultichoice();
ScriptMenu_DisplayPCStartupPrompt();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
CreateTask(Task_WaitForPaletteFade, 10);
diff --git a/src/ice.c b/src/ice.c
index 522fb1bbf..cc8b1d333 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,
@@ -998,7 +998,7 @@ void AnimTask_Haze1(u8 taskId)
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
sub_80A6B30(&animBg);
- LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset);
+ LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
sub_80A6D60(&animBg, gBattleAnimFogTilemap, 0);
LoadPalette(&gUnknown_083970E8, animBg.paletteId * 16, 32);
@@ -1105,7 +1105,7 @@ void AnimTask_LoadMistTiles(u8 taskId)
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
sub_80A6B30(&animBg);
- LoadBgTiles(animBg.bgId, gWeatherFog1Tiles, 0x800, animBg.tilesOffset);
+ LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset);
sub_80A6D60(&animBg, gBattleAnimFogTilemap, 0);
LoadPalette(&gUnknown_083970E8, animBg.paletteId * 16, 32);
diff --git a/src/image_processing_effects.c b/src/image_processing_effects.c
new file mode 100644
index 000000000..13794faf0
--- /dev/null
+++ b/src/image_processing_effects.c
@@ -0,0 +1,1226 @@
+#include "global.h"
+#include "image_processing_effects.h"
+#include "contest_painting.h"
+#include "constants/rgb.h"
+
+// IWRAM common
+u8 gCanvasColumnStart;
+u16 (*gCanvasPixels)[][32];
+u8 gCanvasRowEnd;
+u8 gCanvasHeight;
+u8 gCanvasColumnEnd;
+u8 gCanvasRowStart;
+u8 gCanvasMonPersonality;
+u8 gCanvasWidth;
+u16 *gCanvasPalette;
+u16 gCanvasPaletteStart;
+
+static void ApplyImageEffect_Pointillism(void);
+static void ApplyImageEffect_Blur(void);
+static void ApplyImageEffect_BlackOutline(void);
+static void ApplyImageEffect_Invert(void);
+static void ApplyImageEffect_BlackAndWhite(void);
+static void ApplyImageEffect_BlurRight(void);
+static void ApplyImageEffect_BlurDown(void);
+static void ApplyImageEffect_Shimmer(void);
+static void ApplyImageEffect_Grayscale(void);
+static void ApplyImageEffect_PersonalityColor(u8);
+static void ApplyImageEffect_RedChannelGrayscale(u8);
+static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8);
+static void AddPointillismPoints(u16);
+static u16 ConvertColorToGrayscale(u16*);
+static u16 QuantizePixel_Blur(u16*, u16*, u16*);
+static u16 QuantizePixel_PersonalityColor(u16*, u8);
+static u16 QuantizePixel_BlackAndWhite(u16*);
+static u16 QuantizePixel_BlackOutline(u16*, u16*);
+static u16 QuantizePixel_Invert(u16*);
+static u16 QuantizePixel_BlurHard(u16*, u16*, u16*);
+static u16 QuantizePixel_MotionBlur(u16*, u16*);
+static u16 GetColorFromPersonality(u8);
+static void QuantizePalette_Standard(bool8);
+static void SetPresetPalette_PrimaryColors(void);
+static void QuantizePalette_PrimaryColors(void);
+static void SetPresetPalette_Grayscale(void);
+static void QuantizePalette_Grayscale(void);
+static void SetPresetPalette_GrayscaleSmall(void);
+static void QuantizePalette_GrayscaleSmall(void);
+static void SetPresetPalette_BlackAndWhite(void);
+static void QuantizePalette_BlackAndWhite(void);
+static u16 QuantizePixel_Standard(u16*);
+static u16 QuantizePixel_GrayscaleSmall(u16*);
+static u16 QuantizePixel_Grayscale(u16*);
+static u16 QuantizePixel_PrimaryColors(u16*);
+
+extern const u8 gPointillismPoints[][3];
+
+void ApplyImageProcessingEffects(struct ImageProcessingContext *context)
+{
+ gCanvasPixels = context->canvasPixels;
+ gCanvasMonPersonality = context->personality;
+ gCanvasColumnStart = context->columnStart;
+ gCanvasRowStart = context->rowStart;
+ gCanvasColumnEnd = context->columnEnd;
+ gCanvasRowEnd = context->rowEnd;
+ gCanvasWidth = context->canvasWidth;
+ gCanvasHeight = context->canvasHeight;
+
+ switch (context->effect)
+ {
+ case IMAGE_EFFECT_POINTILLISM:
+ ApplyImageEffect_Pointillism();
+ break;
+ case IMAGE_EFFECT_BLUR:
+ ApplyImageEffect_Blur();
+ break;
+ case IMAGE_EFFECT_OUTLINE_COLORED:
+ ApplyImageEffect_BlackOutline();
+ ApplyImageEffect_PersonalityColor(gCanvasMonPersonality);
+ break;
+ case IMAGE_EFFECT_INVERT_BLACK_WHITE:
+ ApplyImageEffect_BlackOutline();
+ ApplyImageEffect_Invert();
+ ApplyImageEffect_BlackAndWhite();
+ case IMAGE_EFFECT_INVERT:
+ ApplyImageEffect_Invert();
+ break;
+ case IMAGE_EFFECT_THICK_BLACK_WHITE:
+ ApplyImageEffect_BlackOutline();
+ ApplyImageEffect_BlurRight();
+ ApplyImageEffect_BlurRight();
+ ApplyImageEffect_BlurDown();
+ ApplyImageEffect_BlackAndWhite();
+ break;
+ case IMAGE_EFFECT_SHIMMER:
+ ApplyImageEffect_Shimmer();
+ break;
+ case IMAGE_EFFECT_OUTLINE:
+ ApplyImageEffect_BlackOutline();
+ break;
+ case IMAGE_EFFECT_BLUR_RIGHT:
+ ApplyImageEffect_BlurRight();
+ break;
+ case IMAGE_EFFECT_BLUR_DOWN:
+ ApplyImageEffect_BlurDown();
+ break;
+ case IMAGE_EFFECT_GRAYSCALE_LIGHT:
+ ApplyImageEffect_Grayscale();
+ ApplyImageEffect_RedChannelGrayscale(3);
+ break;
+ case IMAGE_EFFECT_CHARCOAL:
+ ApplyImageEffect_BlackOutline();
+ ApplyImageEffect_BlurRight();
+ ApplyImageEffect_BlurDown();
+ ApplyImageEffect_BlackAndWhite();
+ ApplyImageEffect_Blur();
+ ApplyImageEffect_Blur();
+ ApplyImageEffect_RedChannelGrayscale(2);
+ ApplyImageEffect_RedChannelGrayscaleHighlight(4);
+ break;
+ }
+}
+
+static void ApplyImageEffect_RedChannelGrayscale(u8 delta)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ // Gets the grayscale value, based on the pixel's red channel.
+ // Also adds a delta to skew lighter or darker.
+ u8 grayValue = (31 & *pixel);
+ grayValue += delta;
+ if (grayValue > 31)
+ grayValue = 31;
+
+ *pixel = RGB2(grayValue, grayValue, grayValue);
+ }
+ }
+ }
+}
+
+static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ u8 grayValue = (31 & *pixel);
+ if (grayValue > 31 - highlight)
+ grayValue = 31 - (highlight >> 1);
+
+ *pixel = RGB2(grayValue, grayValue, grayValue);
+ }
+ }
+ }
+}
+
+static void ApplyImageEffect_Pointillism(void)
+{
+ u32 i;
+ for (i = 0; i < 3200; i++)
+ AddPointillismPoints(i);
+}
+
+static void ApplyImageEffect_Grayscale(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = ConvertColorToGrayscale(pixel);
+ }
+ }
+}
+
+static void ApplyImageEffect_Blur(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gCanvasColumnEnd; i++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart + i];
+ u16 prevPixel = *pixel;
+
+ j = 1;
+ pixel += gCanvasWidth;
+ while (j < gCanvasRowEnd - 1)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_Blur(&prevPixel, pixel, pixel + gCanvasWidth);
+ prevPixel = *pixel;
+ }
+
+ j++;
+ pixel += gCanvasWidth;
+ }
+ }
+}
+
+static void ApplyImageEffect_PersonalityColor(u8 personality)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_PersonalityColor(pixel, personality);
+ }
+ }
+}
+
+static void ApplyImageEffect_BlackAndWhite(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_BlackAndWhite(pixel);
+ }
+ }
+}
+
+static void ApplyImageEffect_BlackOutline(void)
+{
+ u8 i, j;
+ u16 *pixel;
+
+ // Handle top row of pixels first.
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ pixel = &pixelRow[gCanvasColumnStart];
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1);
+ for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++)
+ {
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1);
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1);
+ }
+
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel - 1);
+ }
+
+ // Handle each column from left to right.
+ for (i = 0; i < gCanvasColumnEnd; i++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ pixel = &pixelRow[gCanvasColumnStart + i];
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth);
+ for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth)
+ {
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth);
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth);
+ }
+
+ *pixel = QuantizePixel_BlackOutline(pixel, pixel - gCanvasWidth);
+ }
+}
+
+static void ApplyImageEffect_Invert(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_Invert(pixel);
+ }
+ }
+}
+
+static void ApplyImageEffect_Shimmer(void)
+{
+ u8 i, j;
+ u16 *pixel;
+ u16 prevPixel;
+
+ // First, invert all of the colors.
+ pixel = (*gCanvasPixels)[0];
+ for (i = 0; i < 64; i++)
+ {
+ for (j = 0; j < 64; j++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_Invert(pixel);
+ }
+ }
+
+ // Blur the pixels twice.
+ for (j = 0; j < 64; j++)
+ {
+ pixel = &(*gCanvasPixels)[0][j];
+ prevPixel = *pixel;
+ *pixel = 0x8000;
+ for (i = 1, pixel += 64; i < 63; i++, pixel += 64)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_BlurHard(&prevPixel, pixel, pixel + 64);
+ prevPixel = *pixel;
+ }
+ }
+
+ *pixel = 0x8000;
+ pixel = &(*gCanvasPixels)[0][j];
+ prevPixel = *pixel;
+ *pixel = 0x8000;
+ for (i = 1, pixel += 64; i < 63; i++, pixel += 64)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_BlurHard(&prevPixel, pixel, pixel + 64);
+ prevPixel = *pixel;
+ }
+ }
+
+ *pixel = 0x8000;
+ }
+
+ // Finally, invert colors back to the original color space.
+ // The above blur causes the outline areas to darken, which makes
+ // this inversion give the effect of light outlines.
+ pixel = (*gCanvasPixels)[0];
+ for (i = 0; i < 64; i++)
+ {
+ for (j = 0; j < 64; j++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ *pixel = QuantizePixel_Invert(pixel);
+ }
+ }
+}
+
+static void ApplyImageEffect_BlurRight(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ u16 prevPixel = *pixel;
+ for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel);
+ prevPixel = *pixel;
+ }
+ }
+ }
+}
+
+static void ApplyImageEffect_BlurDown(void)
+{
+ u8 i, j;
+
+ for (i = 0; i < gCanvasColumnEnd; i++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart + i];
+ u16 prevPixel = *pixel;
+ for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth)
+ {
+ if (!(0x8000 & *pixel))
+ {
+ *pixel = QuantizePixel_MotionBlur(&prevPixel, pixel);
+ prevPixel = *pixel;
+ }
+ }
+ }
+}
+
+struct PointillismPoint
+{
+ u8 column;
+ u8 row;
+ u16 delta;
+};
+
+static void AddPointillismPoints(u16 arg0)
+{
+ u8 i;
+ bool8 offsetDownLeft;
+ u8 colorType;
+ struct PointillismPoint points[6];
+
+ points[0].column = gPointillismPoints[arg0][0];
+ points[0].row = gPointillismPoints[arg0][1];
+ points[0].delta = (gPointillismPoints[arg0][2] >> 3) & 7;
+
+ colorType = (gPointillismPoints[arg0][2] >> 1) & 3;
+ offsetDownLeft = gPointillismPoints[arg0][2] & 1;
+ for (i = 1; i < points[0].delta; i++)
+ {
+ if (!offsetDownLeft)
+ {
+ points[i].column = points[0].column - i;
+ points[i].row = points[0].row + i;
+ }
+ else
+ {
+ points[i].column = points[0].column + 1;
+ points[i].row = points[0].row - 1;
+ }
+
+ if (points[i].column > 63 || points[i].row > 63)
+ {
+ points[0].delta = i - 1;
+ break;
+ }
+
+ points[i].delta = points[0].delta - i;
+ }
+
+ for (i = 0; i < points[0].delta; i++)
+ {
+ u16 *pixel = &(*gCanvasPixels)[points[i].row * 2][points[i].column];
+
+ if (!(0x8000 & *pixel))
+ {
+ u16 red = (*pixel) & 0x1F;
+ u16 green = (*pixel >> 5) & 0x1F;
+ u16 blue = (*pixel >> 10) & 0x1F;
+
+ switch (colorType)
+ {
+ case 0:
+ case 1:
+ switch (((gPointillismPoints[arg0][2] >> 3) & 7) % 3)
+ {
+ case 0:
+ if (red >= points[i].delta)
+ red -= points[i].delta;
+ else
+ red = 0;
+ break;
+ case 1:
+ if (green >= points[i].delta)
+ green -= points[i].delta;
+ else
+ green = 0;
+ break;
+ case 2:
+ if (blue >= points[i].delta)
+ blue -= points[i].delta;
+ else
+ blue = 0;
+ break;
+ }
+ break;
+ case 2:
+ case 3:
+ red += points[i].delta;
+ green += points[i].delta;
+ blue += points[i].delta;
+ if (red > 31)
+ red = 31;
+ if (green > 31)
+ green = 31;
+ if (blue > 31)
+ blue = 31;
+ break;
+ }
+
+ *pixel = RGB2(red, green, blue);
+ }
+ }
+}
+
+static u16 ConvertColorToGrayscale(u16 *color)
+{
+ s32 clr = *color;
+ s32 r = clr & 0x1F;
+ s32 g = (clr >> 5) & 0x1F;
+ s32 b = (clr >> 10) & 0x1F;
+ s32 gray = (r * Q_8_8(0.3) + g * Q_8_8(0.59) + b * Q_8_8(0.1133)) >> 8;
+ return RGB2(gray, gray, gray);
+}
+
+// The dark colors are the colored edges of the Cool painting effect.
+// Everything else is white.
+static u16 QuantizePixel_PersonalityColor(u16 *color, u8 personality)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 17 && green < 17 && blue < 17)
+ return GetColorFromPersonality(personality);
+ else
+ return RGB_WHITE;
+}
+
+// Based on the given value, which comes from the first 8 bits of
+// the mon's personality value, return a color.
+static u16 GetColorFromPersonality(u8 personality)
+{
+ u16 red = 0;
+ u16 green = 0;
+ u16 blue = 0;
+ u8 strength = (personality / 6) % 3;
+ u8 colorType = personality % 6;
+
+ switch (colorType)
+ {
+ case 0:
+ // Teal color
+ green = 21 - strength;
+ blue = green;
+ red = 0;
+ break;
+ case 1:
+ // Yellow color
+ blue = 0;
+ red = 21 - strength;
+ green = red;
+ break;
+ case 2:
+ // Purple color
+ blue = 21 - strength;
+ green = 0;
+ red = blue;
+ break;
+ case 3:
+ // Red color
+ blue = 0;
+ green = 0;
+ red = 23 - strength;
+ break;
+ case 4:
+ // Blue color
+ blue = 23 - strength;
+ green = 0;
+ red = 0;
+ break;
+ case 5:
+ // Green color
+ blue = 0;
+ green = 23 - strength;
+ red = 0;
+ break;
+ }
+
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_BlackAndWhite(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 17 && green < 17 && blue < 17)
+ return RGB_BLACK;
+ else
+ return RGB_WHITE;
+}
+
+static u16 QuantizePixel_BlackOutline(u16 *pixelA, u16 *pixelB)
+{
+ if (*pixelA != RGB_BLACK)
+ {
+ if (*pixelA & 0x8000)
+ return 0x8000;
+ if (*pixelB & 0x8000)
+ return RGB_BLACK;
+
+ return *pixelA;
+ }
+
+ return RGB_BLACK;
+}
+
+static u16 QuantizePixel_Invert(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ red = 31 - red;
+ green = 31 - green;
+ blue = 31 - blue;
+
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_MotionBlur(u16 *prevPixel, u16 *curPixel)
+{
+ u16 pixelChannels[2][3];
+ u16 diffs[3];
+ u8 i;
+ u16 largestDiff;
+ u16 red, green, blue;
+
+ if (*prevPixel == *curPixel)
+ return *curPixel;
+
+ pixelChannels[0][0] = (*prevPixel >> 0) & 0x1F;
+ pixelChannels[0][1] = (*prevPixel >> 5) & 0x1F;
+ pixelChannels[0][2] = (*prevPixel >> 10) & 0x1F;
+ pixelChannels[1][0] = (*curPixel >> 0) & 0x1F;
+ pixelChannels[1][1] = (*curPixel >> 5) & 0x1F;
+ pixelChannels[1][2] = (*curPixel >> 10) & 0x1F;
+
+ // Don't blur light colors.
+ if (pixelChannels[0][0] > 25 && pixelChannels[0][1] > 25 && pixelChannels[0][2] > 25)
+ return *curPixel;
+ if (pixelChannels[1][0] > 25 && pixelChannels[1][1] > 25 && pixelChannels[1][2] > 25)
+ return *curPixel;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (pixelChannels[0][i] > pixelChannels[1][i])
+ diffs[i] = pixelChannels[0][i] - pixelChannels[1][i];
+ else
+ diffs[i] = pixelChannels[1][i] - pixelChannels[0][i];
+ }
+
+ // Find the largest diff of any of the color channels.
+ if (diffs[0] >= diffs[1])
+ {
+ if (diffs[0] >= diffs[2])
+ largestDiff = diffs[0];
+ else if (diffs[1] >= diffs[2])
+ largestDiff = diffs[1];
+ else
+ largestDiff = diffs[2];
+ }
+ else
+ {
+ if (diffs[1] >= diffs[2])
+ largestDiff = diffs[1];
+ else if (diffs[2] >= diffs[0])
+ largestDiff = diffs[2];
+ else
+ largestDiff = diffs[0];
+ }
+
+ red = (pixelChannels[1][0] * (31 - largestDiff / 2)) / 31;
+ green = (pixelChannels[1][1] * (31 - largestDiff / 2)) / 31;
+ blue = (pixelChannels[1][2] * (31 - largestDiff / 2)) / 31;
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_Blur(u16 *prevPixel, u16 *curPixel, u16 *nextPixel)
+{
+ u16 red, green, blue;
+ u16 prevAvg, curAvg, nextAvg;
+ u16 prevDiff, nextDiff;
+ u32 diff;
+ u16 factor;
+
+ if (*prevPixel == *curPixel && *nextPixel == *curPixel)
+ return *curPixel;
+
+ red = (*curPixel >> 0) & 0x1F;
+ green = (*curPixel >> 5) & 0x1F;
+ blue = (*curPixel >> 10) & 0x1F;
+
+ prevAvg = (((*prevPixel >> 0) & 0x1F) + ((*prevPixel >> 5) & 0x1F) + ((*prevPixel >> 10) & 0x1F)) / 3;
+ curAvg = (((*curPixel >> 0) & 0x1F) + ((*curPixel >> 5) & 0x1F) + ((*curPixel >> 10) & 0x1F)) / 3;
+ nextAvg = (((*nextPixel >> 0) & 0x1F) + ((*nextPixel >> 5) & 0x1F) + ((*nextPixel >> 10) & 0x1F)) / 3;
+
+ if (prevAvg == curAvg && nextAvg == curAvg)
+ return *curPixel;
+
+ if (prevAvg > curAvg)
+ prevDiff = prevAvg - curAvg;
+ else
+ prevDiff = curAvg - prevAvg;
+
+ if (nextAvg > curAvg)
+ nextDiff = nextAvg - curAvg;
+ else
+ nextDiff = curAvg - nextAvg;
+
+ if (prevDiff >= nextDiff)
+ diff = prevDiff;
+ else
+ diff = nextDiff;
+
+ factor = 31 - diff / 2;
+ red = (red * factor) / 31;
+ green = (green * factor) / 31;
+ blue = (blue * factor) / 31;
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_BlurHard(u16 *prevPixel, u16 *curPixel, u16 *nextPixel)
+{
+ u16 red, green, blue;
+ u16 prevAvg, curAvg, nextAvg;
+ u16 prevDiff, nextDiff;
+ u32 diff;
+ u16 factor;
+
+ if (*prevPixel == *curPixel && *nextPixel == *curPixel)
+ return *curPixel;
+
+ red = (*curPixel >> 0) & 0x1F;
+ green = (*curPixel >> 5) & 0x1F;
+ blue = (*curPixel >> 10) & 0x1F;
+
+ prevAvg = (((*prevPixel >> 0) & 0x1F) + ((*prevPixel >> 5) & 0x1F) + ((*prevPixel >> 10) & 0x1F)) / 3;
+ curAvg = (((*curPixel >> 0) & 0x1F) + ((*curPixel >> 5) & 0x1F) + ((*curPixel >> 10) & 0x1F)) / 3;
+ nextAvg = (((*nextPixel >> 0) & 0x1F) + ((*nextPixel >> 5) & 0x1F) + ((*nextPixel >> 10) & 0x1F)) / 3;
+
+ if (prevAvg == curAvg && nextAvg == curAvg)
+ return *curPixel;
+
+ if (prevAvg > curAvg)
+ prevDiff = prevAvg - curAvg;
+ else
+ prevDiff = curAvg - prevAvg;
+
+ if (nextAvg > curAvg)
+ nextDiff = nextAvg - curAvg;
+ else
+ nextDiff = curAvg - nextAvg;
+
+ if (prevDiff >= nextDiff)
+ diff = prevDiff;
+ else
+ diff = nextDiff;
+
+ factor = 31 - diff;
+ red = (red * factor) / 31;
+ green = (green * factor) / 31;
+ blue = (blue * factor) / 31;
+ return RGB2(red, green, blue);
+}
+
+void ConvertImageProcessingToGBA(struct ImageProcessingContext *context)
+{
+ u16 i, j, k;
+ u16 *src, *dest, *src_, *dest_;
+ u16 width, height;
+
+ width = context->canvasWidth >> 3;
+ height = context->canvasHeight >> 3;
+ src_ = context->canvasPixels;
+ dest_ = context->dest;
+
+ if (context->var_16 == 2)
+ {
+ for (i = 0; i < height; i++)
+ {
+ for (j = 0; j < width; j++)
+ {
+ for (k = 0; k < 8; k++)
+ {
+ dest = dest_ + ((i * width + j) << 5) + (k << 2);
+ src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3);
+
+ dest[0] = src[0] | (src[1] << 8);
+ dest[1] = src[2] | (src[3] << 8);
+ dest[2] = src[4] | (src[5] << 8);
+ dest[3] = src[6] | (src[7] << 8);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < height; i++)
+ {
+ for (j = 0; j < width; j++)
+ {
+ for (k = 0; k < 8; k++)
+ {
+ dest = dest_ + ((i * width + j) << 4) + (k << 1);
+ src = src_ + ((((i << 3) + k) << 3) * width) + (j << 3);
+
+ dest[0] = src[0] | (src[1] << 4) | (src[2] << 8) | (src[3] << 0xC);
+ dest[1] = src[4] | (src[5] << 4) | (src[6] << 8) | (src[7] << 0xC);
+ }
+ }
+ }
+ }
+}
+
+void ApplyImageProcessingQuantization(struct ImageProcessingContext *context)
+{
+ gCanvasPaletteStart = context->paletteStart * 16;
+ gCanvasPalette = &context->canvasPalette[gCanvasPaletteStart];
+ gCanvasPixels = context->canvasPixels;
+ gCanvasColumnStart = context->columnStart;
+ gCanvasRowStart = context->rowStart;
+ gCanvasColumnEnd = context->columnEnd;
+ gCanvasRowEnd = context->rowEnd;
+ gCanvasWidth = context->canvasWidth;
+ gCanvasHeight = context->canvasHeight;
+
+ switch (context->quantizeEffect)
+ {
+ case QUANTIZE_EFFECT_STANDARD:
+ QuantizePalette_Standard(FALSE);
+ break;
+ case QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS:
+ QuantizePalette_Standard(TRUE);
+ break;
+ case QUANTIZE_EFFECT_PRIMARY_COLORS:
+ SetPresetPalette_PrimaryColors();
+ QuantizePalette_PrimaryColors();
+ break;
+ case QUANTIZE_EFFECT_GRAYSCALE:
+ SetPresetPalette_Grayscale();
+ QuantizePalette_Grayscale();
+ break;
+ case QUANTIZE_EFFECT_GRAYSCALE_SMALL:
+ SetPresetPalette_GrayscaleSmall();
+ QuantizePalette_GrayscaleSmall();
+ break;
+ case QUANTIZE_EFFECT_BLACK_WHITE:
+ SetPresetPalette_BlackAndWhite();
+ QuantizePalette_BlackAndWhite();
+ break;
+ }
+}
+
+static void SetPresetPalette_PrimaryColors(void)
+{
+ gCanvasPalette[0] = RGB2(0, 0, 0);
+ gCanvasPalette[1] = RGB2(6, 6, 6);
+ gCanvasPalette[2] = RGB2(29, 29, 29);
+ gCanvasPalette[3] = RGB2(11, 11, 11);
+ gCanvasPalette[4] = RGB2(29, 6, 6);
+ gCanvasPalette[5] = RGB2(6, 29, 6);
+ gCanvasPalette[6] = RGB2(6, 6, 29);
+ gCanvasPalette[7] = RGB2(29, 29, 6);
+ gCanvasPalette[8] = RGB2(29, 6, 29);
+ gCanvasPalette[9] = RGB2(6, 29, 29);
+ gCanvasPalette[10] = RGB2(29, 11, 6);
+ gCanvasPalette[11] = RGB2(11, 29, 6);
+ gCanvasPalette[12] = RGB2(6, 11, 29);
+ gCanvasPalette[13] = RGB2(29, 6, 11);
+ gCanvasPalette[14] = RGB2(6, 29, 11);
+ gCanvasPalette[15] = RGB2(11, 6, 29);
+}
+
+static void SetPresetPalette_BlackAndWhite(void)
+{
+ gCanvasPalette[0] = RGB2(0, 0, 0);
+ gCanvasPalette[1] = RGB2(0, 0, 0);
+ gCanvasPalette[2] = RGB2(31, 31, 31);
+}
+
+static void SetPresetPalette_GrayscaleSmall(void)
+{
+ u8 i;
+
+ gCanvasPalette[0] = RGB2(0, 0, 0);
+ gCanvasPalette[1] = RGB2(0, 0, 0);
+ for (i = 0; i < 14; i++)
+ gCanvasPalette[i + 2] = RGB2(2 * (i + 2), 2 * (i + 2), 2 * (i + 2));
+}
+
+static void SetPresetPalette_Grayscale(void)
+{
+ u8 i;
+
+ gCanvasPalette[0] = RGB2(0, 0, 0);
+ for (i = 0; i < 32; i++)
+ gCanvasPalette[i + 1] = RGB2(i, i, i);
+}
+
+static void QuantizePalette_Standard(bool8 useLimitedPalette)
+{
+ u8 i, j;
+ u16 maxIndex;
+
+ maxIndex = 0xDF;
+ if (!useLimitedPalette)
+ maxIndex = 0xFF;
+
+ for (i = 0; i < maxIndex; i++)
+ gCanvasPalette[i] = RGB_BLACK;
+
+ gCanvasPalette[maxIndex] = RGB2(15, 15, 15);
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ {
+ *pixel = gCanvasPaletteStart;
+ }
+ else
+ {
+ u16 quantizedColor = QuantizePixel_Standard(pixel);
+ u8 curIndex = 1;
+ if (curIndex < maxIndex)
+ {
+ if (gCanvasPalette[curIndex] == RGB_BLACK)
+ {
+ // The quantized color does not match any existing color in the
+ // palette, so we add it to the palette.
+ // This if block seems pointless because the below while loop handles
+ // this same logic.
+ gCanvasPalette[curIndex] = quantizedColor;
+ *pixel = gCanvasPaletteStart + curIndex;
+ }
+ else
+ {
+ while (curIndex < maxIndex)
+ {
+ if (gCanvasPalette[curIndex] == RGB_BLACK)
+ {
+ // The quantized color does not match any existing color in the
+ // palette, so we add it to the palette.
+ gCanvasPalette[curIndex] = quantizedColor;
+ *pixel = gCanvasPaletteStart + curIndex;
+ break;
+ }
+
+ if (gCanvasPalette[curIndex] == quantizedColor)
+ {
+ // The quantized color matches this existing color in the
+ // palette, so we use this existing color for the pixel.
+ *pixel = gCanvasPaletteStart + curIndex;
+ break;
+ }
+
+ curIndex++;
+ }
+ }
+ }
+
+ if (curIndex == maxIndex)
+ {
+ // The entire palette's colors are already in use, which means
+ // the base image has too many colors to handle. This error is handled
+ // by marking such pixels as gray color.
+ curIndex = maxIndex;
+ *pixel = curIndex;
+ }
+ }
+ }
+ }
+}
+
+static void QuantizePalette_BlackAndWhite(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ {
+ *pixel = gCanvasPaletteStart;
+ }
+ else
+ {
+ if (QuantizePixel_BlackAndWhite(pixel) == RGB_BLACK)
+ {
+ // Black is the first color in the quantized palette.
+ *pixel = gCanvasPaletteStart + 1;
+ }
+ else
+ {
+ // White is the second color in the quantized palette.
+ *pixel = gCanvasPaletteStart + 2;
+ }
+ }
+ }
+ }
+}
+
+static void QuantizePalette_GrayscaleSmall(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ *pixel = gCanvasPaletteStart;
+ else
+ *pixel = QuantizePixel_GrayscaleSmall(pixel) + gCanvasPaletteStart;
+ }
+ }
+}
+
+static void QuantizePalette_Grayscale(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ *pixel = gCanvasPaletteStart;
+ else
+ *pixel = QuantizePixel_Grayscale(pixel) + gCanvasPaletteStart;
+ }
+ }
+}
+
+static void QuantizePalette_PrimaryColors(void)
+{
+ u8 i, j;
+
+ for (j = 0; j < gCanvasRowEnd; j++)
+ {
+ u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth];
+ u16 *pixel = &pixelRow[gCanvasColumnStart];
+ for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
+ {
+ if (*pixel & 0x8000)
+ *pixel = gCanvasPaletteStart;
+ else
+ *pixel = QuantizePixel_PrimaryColors(pixel) + gCanvasPaletteStart;
+ }
+ }
+}
+
+// Quantizes the pixel's color channels to nearest multiple of 4, and clamps to [6, 30].
+static u16 QuantizePixel_Standard(u16 *pixel)
+{
+ u16 red = *pixel & 0x1F;
+ u16 green = (*pixel >> 5) & 0x1F;
+ u16 blue = (*pixel >> 10) & 0x1F;
+
+ // Quantize color channels to muliples of 4, rounding up.
+ if (red & 3)
+ red = (red & 0x1C) + 4;
+ if (green & 3)
+ green = (green & 0x1C) + 4;
+ if (blue & 3)
+ blue = (blue & 0x1C) + 4;
+
+ // Clamp channels to [6, 30].
+ if (red < 6)
+ red = 6;
+ if (red > 30)
+ red = 30;
+ if (green < 6)
+ green = 6;
+ if (green > 30)
+ green = 30;
+ if (blue < 6)
+ blue = 6;
+ if (blue > 30)
+ blue = 30;
+
+ return RGB2(red, green, blue);
+}
+
+static u16 QuantizePixel_PrimaryColors(u16* color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+
+ if (red < 12 && green < 11 && blue < 11)
+ return 1;
+
+ if (red > 19 && green > 19 && blue > 19)
+ return 2;
+
+ if (red > 19)
+ {
+ if (green > 19)
+ {
+ if (blue > 14)
+ return 2;
+ else
+ return 7;
+ }
+ else if (blue > 19)
+ {
+ if (green > 14)
+ return 2;
+ else
+ return 8;
+ }
+ }
+
+ if (green > 19 && blue > 19)
+ {
+ if (red > 14)
+ return 2;
+ else
+ return 9;
+ }
+
+ if (red > 19)
+ {
+ if (green > 11)
+ {
+ if (blue > 11)
+ {
+ if (green < blue)
+ return 8;
+ else
+ return 7;
+ }
+ else
+ {
+ return 10;
+ }
+ }
+ else if (blue > 11)
+ {
+ return 13;
+ }
+ else
+ {
+ return 4;
+ }
+ }
+
+ if (green > 19)
+ {
+ if (red > 11)
+ {
+ if (blue > 11)
+ {
+ if (red < blue)
+ return 9;
+ else
+ return 7;
+ }
+ else
+ {
+ return 11;
+ }
+ }
+ else
+ {
+ if (blue > 11)
+ return 14;
+ else
+ return 5;
+ }
+ }
+
+ if (blue > 19)
+ {
+ if (red > 11)
+ {
+ if (green > 11)
+ {
+ if (red < green)
+ return 9;
+ else
+ return 8;
+ }
+ }
+ else if (green > 11)
+ {
+ return 12;
+ }
+
+ if (blue > 11)
+ return 15;
+ else
+ return 6;
+ }
+
+ return 3;
+}
+
+static u16 QuantizePixel_GrayscaleSmall(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+ u16 average = ((red + green + blue) / 3) & 0x1E;
+ if (average == 0)
+ return 1;
+ else
+ return average / 2;
+}
+
+static u16 QuantizePixel_Grayscale(u16 *color)
+{
+ u16 red = *color & 0x1F;
+ u16 green = (*color >> 5) & 0x1F;
+ u16 blue = (*color >> 10) & 0x1F;
+ u16 average = (red + green + blue) / 3;
+ return average + 1;
+}
diff --git a/src/international_string_util.c b/src/international_string_util.c
index 9dc795dd0..ec5057359 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -45,7 +45,7 @@ int GetMaxWidthInMenuTable(const struct MenuAction *str, int arg1)
var = stringWidth;
}
- return convert_pixel_width_to_tile_width(var);
+ return ConvertPixelWidthToTileWidth(var);
}
int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2)
@@ -59,7 +59,7 @@ int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2)
var = stringWidth;
}
- return convert_pixel_width_to_tile_width(var);
+ return ConvertPixelWidthToTileWidth(var);
}
int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu)
diff --git a/src/intro.c b/src/intro.c
index e97fbedb0..7c2303dcc 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"
@@ -141,10 +141,10 @@ static const struct SpritePalette gIntroPalette_Lightning[] =
static const struct OamData gUnknown_085E4A94 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -210,10 +210,10 @@ static const struct SpritePalette gIntroPokemonRunningPalette[] =
static const struct OamData gUnknown_085E4B28 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -247,10 +247,10 @@ static const struct SpriteTemplate gUnknown_085E4B40 =
static const struct OamData gUnknown_085E4B58 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -303,10 +303,10 @@ static const struct SpriteTemplate gUnknown_085E4BA4 =
static const struct OamData gUnknown_085E4BBC =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -352,10 +352,10 @@ static const struct SpritePalette gIntroRayquazaLightningPalette[] =
static const struct OamData gUnknown_085E4C14 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -437,10 +437,10 @@ static const s16 gIntroKyogreBubbleData[][3] =
static const struct OamData gUnknown_085E4CF0 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x32),
.x = 0,
.matrixNum = 0,
@@ -477,10 +477,10 @@ static const struct SpriteTemplate gUnknown_085E4D14 =
static const struct OamData gUnknown_085E4D2C =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -568,10 +568,10 @@ static const union AnimCmd *const gIntroBicycleAnimationCommands[] =
static const struct OamData gUnknown_085E4DD4 =
{
.y = 160,
- .affineMode = 3,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -584,10 +584,10 @@ static const struct OamData gUnknown_085E4DD4 =
static const struct OamData gUnknown_085E4DDC =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -600,10 +600,10 @@ static const struct OamData gUnknown_085E4DDC =
static const struct OamData gUnknown_085E4DE4 =
{
.y = 160,
- .affineMode = 3,
- .objMode = 1,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_BLEND,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x64),
.x = 0,
.matrixNum = 0,
@@ -800,10 +800,10 @@ static const u8 gUnknown_085E4FA4[] =
static const struct OamData gUnknown_085E4FB0 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
@@ -853,10 +853,10 @@ static const struct SpritePalette gIntroPalette_DropLogoFlygon[] =
static const struct OamData gUnknown_085E501C =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -1070,7 +1070,7 @@ void CB2_InitCopyrightScreenAfterBootup(void)
ResetMenuAndMonGlobals();
Save_ResetSaveCounters();
Save_LoadGameData(SAVE_NORMAL);
- if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
+ if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT)
Sav2_ClearSetDefault();
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
InitHeap(gHeap, HEAP_SIZE);
@@ -2568,9 +2568,9 @@ static void sub_816F3A4(struct Sprite *sprite)
sprite->data[2] = 1024;
sprite->data[3] = 8 * (sprite->data[1] & 3);
sprite->callback = sub_816F318;
- sprite->oam.shape = 1;
- sprite->oam.size = 3;
- CalcCenterToCornerVec(sprite, 1, 3, 2);
+ sprite->oam.shape = SPRITE_SHAPE(64x32);
+ sprite->oam.size = SPRITE_SIZE(64x32);
+ CalcCenterToCornerVec(sprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_ERASE);
}
else
{
@@ -2690,9 +2690,9 @@ static void SpriteCB_WaterDropFall(struct Sprite *sprite)
sprite->data[2] = 1024;
sprite->data[3] = 8 * (sprite->data[1] & 3);
sprite->callback = sub_816F318;
- sprite->oam.shape = 1;
- sprite->oam.size = 3;
- CalcCenterToCornerVec(sprite, 1, 3, 2);
+ sprite->oam.shape = SPRITE_SHAPE(64x32);
+ sprite->oam.size = SPRITE_SIZE(64x32);
+ CalcCenterToCornerVec(sprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_ERASE);
}
}
@@ -2713,9 +2713,9 @@ static void SpriteCB_WaterDropFall_2(struct Sprite *sprite)
sprite->data[2] = 1024;
sprite->data[3] = 8 * (sprite->data[1] & 3);
sprite->callback = sub_816F318;
- sprite->oam.shape = 1;
- sprite->oam.size = 3;
- CalcCenterToCornerVec(sprite, 1, 3, 2);
+ sprite->oam.shape = SPRITE_SHAPE(64x32);
+ sprite->oam.size = SPRITE_SIZE(64x32);
+ CalcCenterToCornerVec(sprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_ERASE);
}
}
@@ -2732,9 +2732,9 @@ static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately)
gSprites[spriteId].data[3] = c;
gSprites[spriteId].data[5] = e;
gSprites[spriteId].data[6] = c;
- gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
gSprites[spriteId].oam.matrixNum = d;
- CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2);
+ CalcCenterToCornerVec(&gSprites[spriteId], SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), ST_OAM_AFFINE_ERASE);
StartSpriteAnim(&gSprites[spriteId], 2);
if (!fallImmediately)
gSprites[spriteId].callback = sub_816F454;
@@ -2745,18 +2745,18 @@ static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately)
spriteId = CreateSprite(&gIntroWaterDropSprite, x, y, 1);
gSprites[spriteId].data[7] = oldSpriteId;
gSprites[spriteId].data[1] = d + 1;
- gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
gSprites[spriteId].oam.matrixNum = d + 1;
- CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2);
+ CalcCenterToCornerVec(&gSprites[spriteId], SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), ST_OAM_AFFINE_ERASE);
gSprites[spriteId].callback = sub_816F3A4;
spriteId = CreateSprite(&gIntroWaterDropSprite, x, y, 1);
gSprites[spriteId].data[7] = oldSpriteId;
gSprites[spriteId].data[1] = d + 2;
StartSpriteAnim(&gSprites[spriteId], 1);
- gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
gSprites[spriteId].oam.matrixNum = d + 2;
- CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2);
+ CalcCenterToCornerVec(&gSprites[spriteId], SPRITE_SHAPE(32x32), SPRITE_SIZE(32x32), ST_OAM_AFFINE_ERASE);
gSprites[spriteId].callback = sub_816F3A4;
SetOamMatrix(d, c + 32, 0, 0, c + 32);
@@ -2915,7 +2915,7 @@ static void sub_816FB38(struct Sprite *sprite)
if (gIntroFrameCounter == 0x110)
{
StartSpriteAffineAnim(sprite, 2);
- sprite->oam.objMode = 1;
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
sprite->data[0]++;
}
break;
@@ -3008,9 +3008,9 @@ static void sub_816FEDC(struct Sprite *sprite)
{
case 0:
default:
- sprite->oam.affineMode = 3;
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
sprite->oam.matrixNum = 1;
- CalcCenterToCornerVec(sprite, 1, 3, 3);
+ CalcCenterToCornerVec(sprite, SPRITE_SHAPE(64x32), SPRITE_SIZE(64x32), ST_OAM_AFFINE_DOUBLE);
sprite->invisible = FALSE;
sprite->data[0] = 1;
sprite->data[1] = 0x80;
@@ -3054,9 +3054,9 @@ static void SpriteCB_IntroRayquazaHyperbeam(struct Sprite *sprite)
case 0:
default:
sprite->invisible = FALSE;
- sprite->oam.affineMode = 3;
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
sprite->oam.matrixNum = 18;
- CalcCenterToCornerVec(sprite, 0, 3, 3);
+ CalcCenterToCornerVec(sprite, SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE);
sprite->data[1] = 0;
sprite->data[0] = 1;
//fall through
diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c
index 059c1079e..04e2216f6 100644
--- a/src/intro_credits_graphics.c
+++ b/src/intro_credits_graphics.c
@@ -1026,7 +1026,7 @@ static void sub_817B698(u8 a, const struct IntroCreditsSpriteMetadata *b, const
for(i = 0; i < d; i++)
{
u8 sprite = CreateSprite(&gUnknown_085F504C, b[i].x, b[i].y, b[i].subpriority);
- CalcCenterToCornerVec(&gSprites[sprite], b[i].shape, b[i].size, 0);
+ CalcCenterToCornerVec(&gSprites[sprite], b[i].shape, b[i].size, ST_OAM_AFFINE_OFF);
gSprites[sprite].oam.priority = 3;
gSprites[sprite].oam.shape = b[i].shape;
gSprites[sprite].oam.size = b[i].size;
diff --git a/src/item.c b/src/item.c
index 5e505724c..61069ca73 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"
@@ -14,6 +14,7 @@
#include "battle_pyramid_bag.h"
#include "constants/items.h"
#include "constants/hold_effects.h"
+#include "constants/tv.h"
extern u16 gUnknown_0203CF30[];
@@ -142,7 +143,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 +190,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 +405,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 +518,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);
}
@@ -542,7 +543,7 @@ bool8 RemoveBagItem(u16 itemId, u16 count)
if (CurMapIsSecretBase() == TRUE)
{
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x200);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_BAG);
VarSet(VAR_SECRET_BASE_LAST_ITEM_USED, itemId);
}
diff --git a/src/item_icon.c b/src/item_icon.c
index 91c32951a..487b89b71 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"
@@ -16,10 +16,10 @@ EWRAM_DATA void *gItemIcon4x4Buffer = NULL;
static const struct OamData sOamData_ItemIcon =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
diff --git a/src/item_menu.c b/src/item_menu.c
index 12f03b328..eef006545 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"
@@ -118,7 +119,7 @@ void sub_81AD9C0(u8);
void sub_81ADB14(u8);
void sub_81ADA7C(u8);
void sub_81ADC0C(u8);
-void bag_menu_leave_maybe(void);
+void CB2_ApprenticeExitBagMenu(void);
void CB2_FavorLadyExitBagMenu(void);
void CB2_QuizLadyExitBagMenu(void);
void sub_81ABA6C(void);
@@ -135,7 +136,7 @@ void ItemMenu_Give(u8 taskId);
void ItemMenu_Cancel(u8 taskId);
void ItemMenu_UseInBattle(u8 taskId);
void ItemMenu_CheckTag(u8 taskId);
-void unknown_ItemMenu_Confirm(u8 taskId);
+void Task_FadeAndCloseBagMenu(u8 taskId);
void unknown_ItemMenu_Show(u8 taskId);
void unknown_ItemMenu_Give2(u8 taskId);
void unknown_ItemMenu_Confirm2(u8 taskId);
@@ -215,7 +216,7 @@ const struct MenuAction sItemMenuActions[] = {
{gMenuText_Walk, ItemMenu_UseOutOfBattle},
{gMenuText_Deselect, ItemMenu_Register},
{gMenuText_CheckTag, ItemMenu_CheckTag},
- {gMenuText_Confirm, unknown_ItemMenu_Confirm},
+ {gMenuText_Confirm, Task_FadeAndCloseBagMenu},
{gMenuText_Show, unknown_ItemMenu_Show},
{gMenuText_Give2, unknown_ItemMenu_Give2},
{gMenuText_Confirm, unknown_ItemMenu_Confirm2},
@@ -240,7 +241,7 @@ const TaskFunc gUnknown_08614054[] = {
unknown_item_menu_type,
item_menu_type_2,
DisplaySellItemAskString,
- unknown_ItemMenu_Confirm,
+ Task_FadeAndCloseBagMenu,
unknown_item_menu_type,
DisplayDepositItemAskString,
unknown_item_menu_type,
@@ -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)
@@ -476,7 +477,7 @@ void CB2_ChooseBerry(void)
GoToBagMenu(RETURN_LOCATION_FIELD_2, BERRIES_POCKET, CB2_ReturnToFieldContinueScript);
}
-void sub_81AABF0(void (*callback)(void))
+void ChooseBerrySetCallback(void (*callback)(void))
{
GoToBagMenu(RETURN_LOCATION_FIELD_3, BERRIES_POCKET, callback);
}
@@ -491,23 +492,23 @@ void sub_81AAC14(void)
GoToBagMenu(RETURN_LOCATION_PC, POCKETS_COUNT, sub_816B31C);
}
-void sub_81AAC28(void)
+void ApprenticeOpenBagMenu(void)
{
- GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, bag_menu_leave_maybe);
- gSpecialVar_0x8005 = 0;
- gSpecialVar_Result = 0;
+ GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, CB2_ApprenticeExitBagMenu);
+ gSpecialVar_0x8005 = ITEM_NONE;
+ gSpecialVar_Result = FALSE;
}
void FavorLadyOpenBagMenu(void)
{
GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, CB2_FavorLadyExitBagMenu);
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
}
void QuizLadyOpenBagMenu(void)
{
GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, CB2_QuizLadyExitBagMenu);
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
}
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)())
@@ -790,19 +791,19 @@ 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);
- StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2);
+ ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
+ StringExpandPlaceholders(dest, gText_NumberVar1Clear7Var2);
}
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);
+ StringExpandPlaceholders(dest, gText_NumberVar1Clear7Var2);
break;
default:
CopyItemName(itemId, dest);
@@ -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);
@@ -941,7 +942,7 @@ void FreeBagItemListBuffers(void)
Free(gBagMenu);
}
-void unknown_ItemMenu_Confirm(u8 taskId)
+void Task_FadeAndCloseBagMenu(u8 taskId)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gTasks[taskId].func = TaskCloseBagMenu_2;
@@ -965,7 +966,7 @@ void TaskCloseBagMenu_2(u8 taskId)
}
}
-void sub_81AB9A8(u8 pocketId)
+void UpdatePocketItemList(u8 pocketId)
{
u16 i;
struct BagPocket *pocket = &gBagPockets[pocketId];
@@ -996,7 +997,7 @@ void sub_81ABA6C(void)
{
u8 i;
for (i = 0; i < POCKETS_COUNT; i++)
- sub_81AB9A8(i);
+ UpdatePocketItemList(i);
}
void SetInitialScrollAndCursorPositions(u8 pocketId)
@@ -1040,7 +1041,7 @@ void BagMenu_InitListsMenu(u8 taskId)
u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket];
bag_menu_RemoveBagItem_message_window(4);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
- sub_81AB9A8(gBagPositionStruct.pocket);
+ UpdatePocketItemList(gBagPositionStruct.pocket);
SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
@@ -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)
@@ -1116,7 +1117,7 @@ void Task_BagMenu(u8 taskId)
}
PlaySE(SE_SELECT);
gSpecialVar_ItemId = select;
- gTasks[taskId].func = unknown_ItemMenu_Confirm;
+ gTasks[taskId].func = Task_FadeAndCloseBagMenu;
break;
default: // A_BUTTON
PlaySE(SE_SELECT);
@@ -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);
@@ -1743,7 +1744,7 @@ void Task_ActuallyToss(u8 taskId)
PlaySE(SE_SELECT);
RemoveBagItem(gSpecialVar_ItemId, data[8]);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
- sub_81AB9A8(gBagPositionStruct.pocket);
+ UpdatePocketItemList(gBagPositionStruct.pocket);
SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
@@ -1782,8 +1783,8 @@ void ItemMenu_Give(u8 taskId)
BagMenu_PrintThereIsNoPokemon(taskId);
else
{
- gBagMenu->mainCallback2 = sub_81B7F60;
- unknown_ItemMenu_Confirm(taskId);
+ gBagMenu->mainCallback2 = CB2_ChooseMonToGiveItem;
+ Task_FadeAndCloseBagMenu(taskId);
}
}
else
@@ -1816,7 +1817,7 @@ void sub_81AD350(u8 taskId)
void ItemMenu_CheckTag(u8 taskId)
{
gBagMenu->mainCallback2 = DoBerryTagScreen;
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
}
void ItemMenu_Cancel(u8 taskId)
@@ -1840,7 +1841,7 @@ void ItemMenu_UseInBattle(u8 taskId)
}
}
-void bag_menu_mail_related(void)
+void CB2_ReturnToBagMenuPocket(void)
{
GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL);
}
@@ -1859,7 +1860,7 @@ void item_menu_type_2(u8 taskId)
}
else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId))
{
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
}
else
{
@@ -1872,16 +1873,18 @@ void item_menu_type_b(u8 taskId)
if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId))
- gTasks[taskId].func = unknown_ItemMenu_Confirm;
+ gTasks[taskId].func = Task_FadeAndCloseBagMenu;
else
BagMenu_PrintItemCantBeHeld(taskId);
}
+#define tUsingRegisteredKeyItem data[3]
+
bool8 UseRegisteredKeyItemOnField(void)
{
u8 taskId;
- if (InUnionRoom() == TRUE || InBattlePyramid() || InBattlePike() || InMultiBattleRoom() == TRUE)
+ if (InUnionRoom() == TRUE || InBattlePyramid() || InBattlePike() || InMultiPartnerRoom() == TRUE)
return FALSE;
HideMapNamePopUpWindow();
ChangeBgY_ScreenOff(0, 0, 0);
@@ -1895,16 +1898,20 @@ bool8 UseRegisteredKeyItemOnField(void)
sub_808BCF4();
gSpecialVar_ItemId = gSaveBlock1Ptr->registeredItem;
taskId = CreateTask(ItemId_GetFieldFunc(gSaveBlock1Ptr->registeredItem), 8);
- gTasks[taskId].data[3] = 1;
+ gTasks[taskId].tUsingRegisteredKeyItem = TRUE;
return TRUE;
}
else
+ {
gSaveBlock1Ptr->registeredItem = ITEM_NONE;
+ }
}
ScriptContext1_SetupScript(EventScript_SelectWithoutRegisteredItem);
return TRUE;
}
+#undef tUsingRegisteredKeyItem
+
void DisplaySellItemAskString(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -1936,7 +1943,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 +1968,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 +1979,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 +2003,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);
}
@@ -2011,7 +2018,7 @@ void sub_81AD8C8(u8 taskId)
RemoveBagItem(gSpecialVar_ItemId, data[8]);
AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
- sub_81AB9A8(gBagPositionStruct.pocket);
+ UpdatePocketItemList(gBagPositionStruct.pocket);
SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket);
LoadBagItemListBuffers(gBagPositionStruct.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
@@ -2087,7 +2094,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 +2164,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)
@@ -2185,7 +2192,7 @@ void Task_WallyTutorialBagMenu(u8 taskId)
BagMenu_RemoveSomeWindow();
DestroyListMenuTask(data[0], 0, 0);
RestoreBagAfterWallyTutorial();
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
break;
default:
data[8]++;
@@ -2199,10 +2206,10 @@ void unknown_ItemMenu_Show(u8 taskId)
gSpecialVar_0x8005 = gSpecialVar_ItemId;
gSpecialVar_Result = 1;
BagMenu_RemoveSomeWindow();
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
}
-void bag_menu_leave_maybe(void)
+void CB2_ApprenticeExitBagMenu(void)
{
gFieldCallback = Apprentice_EnableBothScriptContexts;
SetMainCallback2(CB2_ReturnToField);
@@ -2213,7 +2220,7 @@ void unknown_ItemMenu_Give2(u8 taskId)
RemoveBagItem(gSpecialVar_ItemId, 1);
gSpecialVar_Result = 1;
BagMenu_RemoveSomeWindow();
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
}
void CB2_FavorLadyExitBagMenu(void)
@@ -2226,7 +2233,7 @@ void unknown_ItemMenu_Confirm2(u8 taskId)
{
gSpecialVar_Result = 1;
BagMenu_RemoveSomeWindow();
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
}
void CB2_QuizLadyExitBagMenu(void)
@@ -2398,7 +2405,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 +2415,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_menu_icons.c b/src/item_menu_icons.c
index 780a50160..cbc038d8c 100644
--- a/src/item_menu_icons.c
+++ b/src/item_menu_icons.c
@@ -32,10 +32,10 @@ static const u16 gCherryUnused_Pal[] = INCBIN_U16("graphics/unused/cherry.gbapal
static const struct OamData sBagOamData =
{
.y = 0,
- .affineMode = 1,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -142,10 +142,10 @@ static const struct SpriteTemplate gBagSpriteTemplate =
static const struct OamData sRotatingBallOamData =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 4,
@@ -213,10 +213,10 @@ static const struct SpriteTemplate gRotatingBallSpriteTemplate =
static const struct OamData sBerryPicOamData =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -230,10 +230,10 @@ static const struct OamData sBerryPicOamData =
static const struct OamData sBerryPicRotatingOamData =
{
.y = 0,
- .affineMode = 3,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -370,10 +370,10 @@ const struct CompressedSpritePalette gBerryCheckCirclePaletteTable =
static const struct OamData sBerryCheckCircleOamData =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -492,7 +492,7 @@ static void UpdateSwitchPocketRotatingBallCoords(struct Sprite *sprite)
static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite)
{
- sprite->oam.affineMode = 1;
+ sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
if (sprite->data[0] == -1)
sprite->affineAnims = sRotatingBallAnimCmds;
else
diff --git a/src/item_use.c b/src/item_use.c
index 2f4374423..b352079cf 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -10,6 +10,7 @@
#include "data.h"
#include "event_data.h"
#include "event_object_movement.h"
+#include "event_scripts.h"
#include "fieldmap.h"
#include "field_effect.h"
#include "field_player_avatar.h"
@@ -43,70 +44,61 @@
#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[];
-
-void SetUpItemUseCallback(u8 taskId);
-void MapPostLoadHook_UseItem(void);
-void sub_80AF6D4(void);
-void Task_CallItemUseOnFieldCallback(u8 taskId);
-void BagMenu_InitListsMenu(u8 taskId);
-void ItemUseOnFieldCB_Bike(u8 taskId);
-void ItemUseOnFieldCB_Rod(u8 taskId);
-void ItemUseOnFieldCB_Itemfinder(u8 taskId);
-void sub_80FD504(u8 taskId);
-void sub_80FD5CC(u8 taskId);
-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 sub_80FE124(u8 taskId);
-void sub_80FE164(u8 taskId);
-
-void DisplayItemMessage(u8 taskId, u8 a, const u8* str, void(*callback)(u8 taskId));
-void DisplayItemMessageOnField(u8 taskId, const u8* str, void(*callback)(u8 taskId));
-void sub_81C6714(u8 taskId);
-void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId);
-void StartFishing(u8 a);
-bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8);
-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);
-void ItemUseOutOfBattle_CannotUse(u8 taskId);
+static void SetUpItemUseCallback(u8 taskId);
+static void FieldCB_UseItemOnField(void);
+static void Task_CallItemUseOnFieldCallback(u8 taskId);
+static void Task_UseItemfinder(u8 taskId);
+static void Task_CloseItemfinderMessage(u8 taskId);
+static void Task_HiddenItemNearby(u8 taskId);
+static void Task_StandingOnHiddenItem(u8 taskId);
+static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8);
+static u8 GetDirectionToHiddenItem(s16 distanceX, s16 distanceY);
+static void PlayerFaceHiddenItem(u8 a);
+static void CheckForHiddenItemsInMapConnection(u8 taskId);
+static void sub_80FDC00(u8 taskId);
+static void ItemUseOnFieldCB_Bike(u8 taskId);
+static void ItemUseOnFieldCB_Rod(u8);
+static void ItemUseOnFieldCB_Itemfinder(u8);
+static void ItemUseOnFieldCB_Berry(u8 taskId);
+static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId);
+static void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId);
+static bool8 TryToWaterSudowoodo(void);
+static void BootUpSoundTMHM(u8 taskId);
+static void Task_ShowTMHMContainedMessage(u8 taskId);
+static void UseTMHMYesNo(u8 taskId);
+static void UseTMHM(u8 taskId);
+static void Task_StartUseRepel(u8 taskId);
+static void Task_UseRepel(u8 taskId);
+static void Task_CloseCantUseKeyItemMessage(u8 taskId);
+static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 x, s16 y);
+static void CB2_OpenPokeblockCaseOnField(void);
// EWRAM variables
-EWRAM_DATA static void(*gUnknown_0203A0F4)(u8 taskId) = NULL;
+EWRAM_DATA static void(*sItemUseOnFieldCB)(u8 taskId) = NULL;
+
+// Below is set TRUE by UseRegisteredKeyItemOnField
+#define tUsingRegisteredKeyItem data[3]
// .rodata
-static const MainCallback gUnknown_085920D8[] =
+static const MainCallback sItemUseCallbacks[] =
{
- sub_81B617C,
+ CB2_ShowPartyMenuForItemUse,
CB2_ReturnToField,
NULL,
};
-static const u8 gUnknown_085920E4[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST};
+static const u8 sClockwiseDirections[] = {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,
};
// .text
-void SetUpItemUseCallback(u8 taskId)
+static void SetUpItemUseCallback(u8 taskId)
{
u8 type;
if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY)
@@ -115,40 +107,40 @@ void SetUpItemUseCallback(u8 taskId)
type = ItemId_GetType(gSpecialVar_ItemId) - 1;
if (!InBattlePyramid())
{
- gBagMenu->mainCallback2 = gUnknown_085920D8[type];
- unknown_ItemMenu_Confirm(taskId);
+ gBagMenu->mainCallback2 = sItemUseCallbacks[type];
+ Task_FadeAndCloseBagMenu(taskId);
}
else
{
- gPyramidBagResources->callback2 = gUnknown_085920D8[type];
- sub_81C5B14(taskId);
+ gPyramidBagResources->callback2 = sItemUseCallbacks[type];
+ CloseBattlePyramidBagAndSetCallback(taskId);
}
}
-void SetUpItemUseOnFieldCallback(u8 taskId)
+static void SetUpItemUseOnFieldCallback(u8 taskId)
{
- if (gTasks[taskId].data[3] != 1)
+ if (gTasks[taskId].tUsingRegisteredKeyItem != TRUE)
{
- gFieldCallback = MapPostLoadHook_UseItem;
+ gFieldCallback = FieldCB_UseItemOnField;
SetUpItemUseCallback(taskId);
}
else
- gUnknown_0203A0F4(taskId);
+ sItemUseOnFieldCB(taskId);
}
-void MapPostLoadHook_UseItem(void)
+static void FieldCB_UseItemOnField(void)
{
- pal_fill_black();
+ FadeInFromBlack();
CreateTask(Task_CallItemUseOnFieldCallback, 8);
}
-void Task_CallItemUseOnFieldCallback(u8 taskId)
+static void Task_CallItemUseOnFieldCallback(u8 taskId)
{
if (IsWeatherNotFadingIn() == 1)
- gUnknown_0203A0F4(taskId);
+ sItemUseOnFieldCB(taskId);
}
-void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField, const u8 *str)
+static void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField, const u8 *str)
{
StringExpandPlaceholders(gStringVar4, str);
if (!isUsingRegisteredKeyItemOnField)
@@ -156,23 +148,23 @@ void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnFiel
if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
else
- DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, sub_81C6714);
+ DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, Task_CloseBattlePyramidBagMessage);
}
else
- DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField);
+ DisplayItemMessageOnField(taskId, gStringVar4, Task_CloseCantUseKeyItemMessage);
}
-void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
+static void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
{
DisplayCannotUseItemMessage(taskId, isUsingRegisteredKeyItemOnField, gText_DadsAdvice);
}
-void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
+static void DisplayCannotDismountBikeMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnField)
{
DisplayCannotUseItemMessage(taskId, isUsingRegisteredKeyItemOnField, gText_CantDismountBike);
}
-void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId)
+static void Task_CloseCantUseKeyItemMessage(u8 taskId)
{
ClearDialogWindowAndFrame(0, 1);
DestroyTask(taskId);
@@ -190,17 +182,18 @@ u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId)
return 0;
}
-void sub_80FD254(void)
+// Mail in the bag menu can't have a message but it can be checked (view the mail background, no message)
+static void CB2_CheckMail(void)
{
struct MailStruct mail;
mail.itemId = gSpecialVar_ItemId;
- ReadMail(&mail, bag_menu_mail_related, 0);
+ ReadMail(&mail, CB2_ReturnToBagMenuPocket, 0);
}
void ItemUseOutOfBattle_Mail(u8 taskId)
{
- gBagMenu->mainCallback2 = sub_80FD254;
- unknown_ItemMenu_Confirm(taskId);
+ gBagMenu->mainCallback2 = CB2_CheckMail;
+ Task_FadeAndCloseBagMenu(taskId);
}
void ItemUseOutOfBattle_Bike(u8 taskId)
@@ -212,20 +205,20 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
PlayerGetDestCoords(&coordsX, &coordsY);
behavior = MapGridGetMetatileBehaviorAt(coordsX, coordsY);
if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE || MetatileBehavior_IsVerticalRail(behavior) == TRUE || MetatileBehavior_IsHorizontalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(behavior) == TRUE || MetatileBehavior_IsIsolatedHorizontalRail(behavior) == TRUE)
- DisplayCannotDismountBikeMessage(taskId, data[3]);
+ DisplayCannotDismountBikeMessage(taskId, tUsingRegisteredKeyItem);
else
{
if (Overworld_IsBikingAllowed() == TRUE && IsBikingDisallowedByPlayer() == 0)
{
- gUnknown_0203A0F4 = ItemUseOnFieldCB_Bike;
+ sItemUseOnFieldCB = ItemUseOnFieldCB_Bike;
SetUpItemUseOnFieldCallback(taskId);
}
else
- DisplayDadsAdviceCannotUseItemMessage(taskId, data[3]);
+ DisplayDadsAdviceCannotUseItemMessage(taskId, tUsingRegisteredKeyItem);
}
}
-void ItemUseOnFieldCB_Bike(u8 taskId)
+static void ItemUseOnFieldCB_Bike(u8 taskId)
{
if (!ItemId_GetSecondaryId(gSpecialVar_ItemId))
GetOnOffBike(2);
@@ -236,7 +229,7 @@ void ItemUseOnFieldCB_Bike(u8 taskId)
DestroyTask(taskId);
}
-bool32 CanFish(void)
+static bool32 CanFish(void)
{
s16 x, y;
u16 tileBehavior;
@@ -270,14 +263,14 @@ void ItemUseOutOfBattle_Rod(u8 taskId)
{
if (CanFish() == TRUE)
{
- gUnknown_0203A0F4 = ItemUseOnFieldCB_Rod;
+ sItemUseOnFieldCB = ItemUseOnFieldCB_Rod;
SetUpItemUseOnFieldCallback(taskId);
}
else
- DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
}
-void ItemUseOnFieldCB_Rod(u8 taskId)
+static void ItemUseOnFieldCB_Rod(u8 taskId)
{
StartFishing(ItemId_GetSecondaryId(gSpecialVar_ItemId));
DestroyTask(taskId);
@@ -285,56 +278,65 @@ void ItemUseOnFieldCB_Rod(u8 taskId)
void ItemUseOutOfBattle_Itemfinder(u8 var)
{
- IncrementGameStat(0x27);
- gUnknown_0203A0F4 = ItemUseOnFieldCB_Itemfinder;
+ IncrementGameStat(GAME_STAT_USED_ITEMFINDER);
+ sItemUseOnFieldCB = ItemUseOnFieldCB_Itemfinder;
SetUpItemUseOnFieldCallback(var);
}
-void ItemUseOnFieldCB_Itemfinder(u8 taskId)
+static void ItemUseOnFieldCB_Itemfinder(u8 taskId)
{
if (ItemfinderCheckForHiddenItems(gMapHeader.events, taskId) == TRUE)
- gTasks[taskId].func = sub_80FD504;
+ gTasks[taskId].func = Task_UseItemfinder;
else
- DisplayItemMessageOnField(taskId, gText_ItemFinderNothing, sub_80FD5CC);
+ DisplayItemMessageOnField(taskId, gText_ItemFinderNothing, Task_CloseItemfinderMessage);
}
-void sub_80FD504(u8 taskId)
+// Define itemfinder task data
+#define tItemDistanceX data[0]
+#define tItemDistanceY data[1]
+#define tItemFound data[2]
+#define tCounter data[3] // Used to count delay between beeps and rotations during player spin
+#define tItemfinderBeeps data[4]
+#define tFacingDir data[5]
+
+static void Task_UseItemfinder(u8 taskId)
{
u8 playerDir;
u8 playerDirToItem;
u8 i;
s16* data = gTasks[taskId].data;
- if (!data[3])
+ if (tCounter == 0)
{
- if (data[4] == 4)
+ if (tItemfinderBeeps == 4)
{
- playerDirToItem = sub_80FD9B0(data[0], data[1]);
- if (playerDirToItem)
+ playerDirToItem = GetDirectionToHiddenItem(tItemDistanceX, tItemDistanceY);
+ if (playerDirToItem != DIR_NONE)
{
- sub_80FDA24(gUnknown_085920E4[playerDirToItem - 1]);
- gTasks[taskId].func = sub_80FDA94;
+ PlayerFaceHiddenItem(sClockwiseDirections[playerDirToItem - 1]);
+ gTasks[taskId].func = Task_HiddenItemNearby;
}
else
{
+ // Player is standing on hidden item
playerDir = GetPlayerFacingDirection();
- for (i = 0; i < 4; i++)
+ for (i = 0; i < ARRAY_COUNT(sClockwiseDirections); i++)
{
- if (playerDir == gUnknown_085920E4[i])
- data[5] = (i + 1) & 3;
+ if (playerDir == sClockwiseDirections[i])
+ tFacingDir = (i + 1) & 3;
}
- gTasks[taskId].func = sub_80FDADC;
- data[3] = 0;
- data[2] = 0;
+ gTasks[taskId].func = Task_StandingOnHiddenItem;
+ tCounter = 0;
+ tItemFound = 0;
}
return;
}
PlaySE(SE_DAUGI);
- data[4]++;
+ tItemfinderBeeps++;
}
- data[3] = (data[3] + 1) & 0x1F;
+ tCounter = (tCounter + 1) & 0x1F;
}
-void sub_80FD5CC(u8 taskId)
+static void Task_CloseItemfinderMessage(u8 taskId)
{
ClearDialogWindowAndFrame(0, 1);
ScriptUnfreezeEventObjects();
@@ -342,34 +344,36 @@ void sub_80FD5CC(u8 taskId)
DestroyTask(taskId);
}
-bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 taskId)
+static bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 taskId)
{
- int distanceX, distanceY;
- s16 x, y, i, newDistanceX, newDistanceY;
- PlayerGetDestCoords(&x, &y);
- gTasks[taskId].data[2] = FALSE;
+ int itemX, itemY;
+ s16 playerX, playerY, i, distanceX, distanceY;
+ PlayerGetDestCoords(&playerX, &playerY);
+ gTasks[taskId].tItemFound = 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))
+ // Check if there are any hidden items on the current map that haven't been picked up
+ 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;
- distanceY = (u16)events->bgEvents[i].y + 7;
- newDistanceY = distanceY - y;
+ itemX = (u16)events->bgEvents[i].x + 7;
+ distanceX = itemX - playerX;
+ itemY = (u16)events->bgEvents[i].y + 7;
+ distanceY = itemY - playerY;
- if ((u16)(newDistanceX + 7) < 15 && (newDistanceY >= -5) && (newDistanceY < 6))
- sub_80FD8E0(taskId, newDistanceX, newDistanceY);
+ if ((u16)(distanceX + 7) < 15 && (distanceY >= -5) && (distanceY < 6))
+ SetDistanceOfClosestHiddenItem(taskId, distanceX, distanceY);
}
}
- sub_80FD7C8(taskId);
- if (gTasks[taskId].data[2] == TRUE)
+ CheckForHiddenItemsInMapConnection(taskId);
+ if (gTasks[taskId].tItemFound == TRUE)
return TRUE;
else
return FALSE;
}
-bool8 sub_80FD6D4(const struct MapEvents *events, s16 x, s16 y)
+static bool8 IsHiddenItemPresentAtCoords(const struct MapEvents *events, s16 x, s16 y)
{
u8 bgEventCount = events->bgEventCount;
struct BgEvent *bgEvent = events->bgEvents;
@@ -379,7 +383,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;
@@ -388,7 +392,7 @@ bool8 sub_80FD6D4(const struct MapEvents *events, s16 x, s16 y)
return FALSE;
}
-bool8 sub_80FD730(struct MapConnection *connection, int x, int y)
+static bool8 IsHiddenItemPresentInConnection(struct MapConnection *connection, int x, int y)
{
u16 localX, localY;
@@ -399,7 +403,7 @@ bool8 sub_80FD730(struct MapConnection *connection, int x, int y)
switch (connection->direction)
{
- // same weird temp variable behavior seen in sub_80FD6D4
+ // same weird temp variable behavior seen in IsHiddenItemPresentAtCoords
case 2:
localOffset = connection->offset + 7;
localX = x - localOffset;
@@ -427,136 +431,145 @@ bool8 sub_80FD730(struct MapConnection *connection, int x, int y)
default:
return FALSE;
}
- return sub_80FD6D4(mapHeader->events, localX, localY);
+ return IsHiddenItemPresentAtCoords(mapHeader->events, localX, localY);
}
-void sub_80FD7C8(u8 taskId)
+static void CheckForHiddenItemsInMapConnection(u8 taskId)
{
+ s16 playerX, playerY;
s16 x, y;
- s16 curX, curY;
s16 width = gMapHeader.mapLayout->width + 7;
s16 height = gMapHeader.mapLayout->height + 7;
s16 var1 = 7;
s16 var2 = 7;
- PlayerGetDestCoords(&x, &y);
+ PlayerGetDestCoords(&playerX, &playerY);
- for (curX = x - 7; curX <= x + 7; curX++)
+ for (x = playerX - 7; x <= playerX + 7; x++)
{
- for (curY = y - 5; curY <= y + 5; curY++)
+ for (y = playerY - 5; y <= playerY + 5; y++)
{
- if (var1 > curX
- || curX >= width
- || var2 > curY
- || curY >= height)
+ if (var1 > x
+ || x >= width
+ || var2 > y
+ || y >= height)
{
- struct MapConnection *conn = sub_8088A8C(curX, curY);
- if (conn && sub_80FD730(conn, curX, curY) == TRUE)
- sub_80FD8E0(taskId, curX - x, curY - y);
+ struct MapConnection *conn = GetConnectionAtCoords(x, y);
+ if (conn && IsHiddenItemPresentInConnection(conn, x, y) == TRUE)
+ SetDistanceOfClosestHiddenItem(taskId, x - playerX, y - playerY);
}
}
}
}
-void sub_80FD8E0(u8 taskId, s16 x, s16 y)
+static void SetDistanceOfClosestHiddenItem(u8 taskId, s16 itemDistanceX, s16 itemDistanceY)
{
s16 *data = gTasks[taskId].data;
- s16 var1, var2, var3, var4;
+ s16 oldItemAbsX, oldItemAbsY, newItemAbsX, newItemAbsY;
- if (data[2] == FALSE)
+ if (tItemFound == FALSE)
{
- data[0] = x;
- data[1] = y;
- data[2] = TRUE;
+ // No other items found yet, set this one
+ tItemDistanceX = itemDistanceX;
+ tItemDistanceY = itemDistanceY;
+ tItemFound = TRUE;
}
else
{
- // data[0] and data[1] contain the player's coordinates.
- // x and y contain the item's coordinates.
- if (data[0] < 0)
- var1 = data[0] * -1; // item is to the left
+ // Other items have been found, check if this one is closer
+
+ // Get absolute x distance of the already-found item
+ if (tItemDistanceX < 0)
+ oldItemAbsX = tItemDistanceX * -1; // WEST
else
- var1 = data[0]; // item is to the right
+ oldItemAbsX = tItemDistanceX; // EAST
- if (data[1] < 0)
- var2 = data[1] * -1; // item is to the north
+ // Get absolute y distance of the already-found item
+ if (tItemDistanceY < 0)
+ oldItemAbsY = tItemDistanceY * -1; // NORTH
else
- var2 = data[1]; // item is to the south
+ oldItemAbsY = tItemDistanceY; // SOUTH
- if (x < 0)
- var3 = x * -1;
+ // Get absolute x distance of the newly-found item
+ if (itemDistanceX < 0)
+ newItemAbsX = itemDistanceX * -1;
else
- var3 = x;
+ newItemAbsX = itemDistanceX;
- if (y < 0)
- var4 = y * -1;
+ // Get absolute y distance of the newly-found item
+ if (itemDistanceY < 0)
+ newItemAbsY = itemDistanceY * -1;
else
- var4 = y;
+ newItemAbsY = itemDistanceY;
- if (var1 + var2 > var3 + var4)
+
+ if (oldItemAbsX + oldItemAbsY > newItemAbsX + newItemAbsY)
{
- data[0] = x;
- data[1] = y;
+ // New item is closer
+ tItemDistanceX = itemDistanceX;
+ tItemDistanceY = itemDistanceY;
}
else
{
- if (var1 + var2 == var3 + var4 && (var2 > var4 || (var2 == var4 && data[1] < y)))
+ if (oldItemAbsX + oldItemAbsY == newItemAbsX + newItemAbsY
+ && (oldItemAbsY > newItemAbsY || (oldItemAbsY == newItemAbsY && tItemDistanceY < itemDistanceY)))
{
- data[0] = x;
- data[1] = y;
+ // If items are equal distance, use whichever is closer on the Y axis or further south
+ tItemDistanceX = itemDistanceX;
+ tItemDistanceY = itemDistanceY;
}
}
}
}
-u8 sub_80FD9B0(s16 itemX, s16 itemY)
+static u8 GetDirectionToHiddenItem(s16 itemDistanceX, s16 itemDistanceY)
{
- s16 abX, abY;
+ s16 absX, absY;
- if (itemX == 0 && itemY == 0)
+ if (itemDistanceX == 0 && itemDistanceY == 0)
return DIR_NONE; // player is standing on the item.
- // get absolute X distance.
- if (itemX < 0)
- abX = itemX * -1;
+ // Get absolute X distance.
+ if (itemDistanceX < 0)
+ absX = itemDistanceX * -1;
else
- abX = itemX;
+ absX = itemDistanceX;
- // get absolute Y distance.
- if (itemY < 0)
- abY = itemY * -1;
+ // Get absolute Y distance.
+ if (itemDistanceY < 0)
+ absY = itemDistanceY * -1;
else
- abY = itemY;
+ absY = itemDistanceY;
- if (abX > abY)
+ if (absX > absY)
{
- if (itemX < 0)
+ if (itemDistanceX < 0)
return DIR_EAST;
else
return DIR_NORTH;
}
else
{
- if (abX < abY)
+ if (absX < absY)
{
- if (itemY < 0)
+ if (itemDistanceY < 0)
return DIR_SOUTH;
else
return DIR_WEST;
}
- if (abX == abY)
+ if (absX == absY)
{
- if (itemY < 0)
+ if (itemDistanceY < 0)
return DIR_SOUTH;
else
return DIR_WEST;
}
- return DIR_NONE; // should never get here. return something so it doesnt crash.
+ return DIR_NONE; // Unreachable
}
}
-void sub_80FDA24(u8 direction)
+static void PlayerFaceHiddenItem(u8 direction)
{
EventObjectClearHeldMovementIfFinished(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]);
EventObjectClearHeldMovement(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]);
@@ -564,101 +577,110 @@ void sub_80FDA24(u8 direction)
PlayerTurnInPlace(direction);
}
-void sub_80FDA94(u8 taskId)
+static void Task_HiddenItemNearby(u8 taskId)
{
if (EventObjectCheckHeldMovementStatus(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]) == TRUE)
- DisplayItemMessageOnField(taskId, gText_ItemFinderNearby, sub_80FD5CC);
+ DisplayItemMessageOnField(taskId, gText_ItemFinderNearby, Task_CloseItemfinderMessage);
}
-void sub_80FDADC(u8 taskId)
+static void Task_StandingOnHiddenItem(u8 taskId)
{
s16 *data = gTasks[taskId].data;
if (EventObjectCheckHeldMovementStatus(&gEventObjects[GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0)]) == TRUE
- || data[2] == FALSE)
+ || tItemFound == FALSE)
{
- sub_80FDA24(gUnknown_085920E4[data[5]]);
- data[2] = 1;
- data[5] = (data[5] + 1) & 3;
- data[3]++;
-
- if (data[3] == 4)
- DisplayItemMessageOnField(taskId, gText_ItemFinderOnTop, sub_80FD5CC);
+ // Spin player around on item
+ PlayerFaceHiddenItem(sClockwiseDirections[tFacingDir]);
+ tItemFound = TRUE;
+ tFacingDir = (tFacingDir + 1) & 3;
+ tCounter++;
+
+ if (tCounter == 4)
+ DisplayItemMessageOnField(taskId, gText_ItemFinderOnTop, Task_CloseItemfinderMessage);
}
}
+// Undefine itemfinder task data
+#undef tItemDistanceX
+#undef tItemDistanceY
+#undef tItemFound
+#undef tCounter
+#undef tItemfinderBeeps
+#undef tFacingDir
+
void ItemUseOutOfBattle_PokeblockCase(u8 taskId)
{
- if (sub_81221AC() == TRUE)
+ if (sub_81221AC() == TRUE) // link func
{
- DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
}
- else if (gTasks[taskId].data[3] != TRUE)
+ else if (gTasks[taskId].tUsingRegisteredKeyItem != TRUE)
{
- gBagMenu->mainCallback2 = sub_80FDBEC;
- unknown_ItemMenu_Confirm(taskId);
+ gBagMenu->mainCallback2 = CB2_OpenPokeblockCaseOnField;
+ Task_FadeAndCloseBagMenu(taskId);
}
else
{
gFieldCallback = sub_80AF6D4;
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].func = sub_80FDC00;
}
}
-void sub_80FDBEC(void)
+static void CB2_OpenPokeblockCaseOnField(void)
{
- OpenPokeblockCase(0, bag_menu_mail_related);
+ OpenPokeblockCase(PBLOCK_CASE_FIELD, CB2_ReturnToBagMenuPocket);
}
-void sub_80FDC00(u8 taskId)
+static void sub_80FDC00(u8 taskId)
{
if (!gPaletteFade.active)
{
CleanupOverworldWindowsAndTilemaps();
- OpenPokeblockCase(0, CB2_ReturnToField);
+ OpenPokeblockCase(PBLOCK_CASE_FIELD, CB2_ReturnToField);
DestroyTask(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])
+ if (!gTasks[taskId].tUsingRegisteredKeyItem)
{
DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
}
else
{
- DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField);
+ DisplayItemMessageOnField(taskId, gStringVar4, Task_CloseCantUseKeyItemMessage);
}
}
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])
+ if (!gTasks[taskId].tUsingRegisteredKeyItem)
{
DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
}
else
{
- DisplayItemMessageOnField(taskId, gStringVar4, CleanUpAfterFailingToUseRegisteredKeyItemOnField);
+ DisplayItemMessageOnField(taskId, gStringVar4, Task_CloseCantUseKeyItemMessage);
}
}
-void sub_80FDD10(u8 taskId)
+void ItemUseOutOfBattle_Berry(u8 taskId)
{
if (IsPlayerFacingEmptyBerryTreePatch() == TRUE)
{
- gUnknown_0203A0F4 = sub_80FDD74;
- gFieldCallback = MapPostLoadHook_UseItem;
+ sItemUseOnFieldCB = ItemUseOnFieldCB_Berry;
+ gFieldCallback = FieldCB_UseItemOnField;
gBagMenu->mainCallback2 = CB2_ReturnToField;
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
}
else
{
@@ -666,40 +688,40 @@ void sub_80FDD10(u8 taskId)
}
}
-void sub_80FDD74(u8 taskId)
+static 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;
+ sItemUseOnFieldCB = ItemUseOnFieldCB_WailmerPailSudowoodo;
SetUpItemUseOnFieldCallback(taskId);
}
else if (TryToWaterBerryTree() == TRUE)
{
- gUnknown_0203A0F4 = sub_80FDE08;
+ sItemUseOnFieldCB = ItemUseOnFieldCB_WailmerPailBerry;
SetUpItemUseOnFieldCallback(taskId);
}
else
{
- DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
}
}
-void sub_80FDE08(u8 taskId)
+static void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId)
{
ScriptContext2_Enable();
- ScriptContext1_SetupScript(BerryTree_EventScript_2744C0);
+ ScriptContext1_SetupScript(BerryTree_EventScript_ItemUseWailmerPail);
DestroyTask(taskId);
}
-bool8 sub_80FDE2C(void)
+static bool8 TryToWaterSudowoodo(void)
{
u16 x, y;
u8 z;
@@ -707,98 +729,98 @@ 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)
+static 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);
}
-void sub_80FE058(void)
+static void RemoveUsedItem(void)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
CopyItemName(gSpecialVar_ItemId, gStringVar2);
StringExpandPlaceholders(gStringVar4, gText_PlayerUsedVar2);
if (!InBattlePyramid())
{
- sub_81AB9A8(ItemId_GetPocket(gSpecialVar_ItemId));
+ UpdatePocketItemList(ItemId_GetPocket(gSpecialVar_ItemId));
SetInitialScrollAndCursorPositions(ItemId_GetPocket(gSpecialVar_ItemId));
}
else
@@ -811,14 +833,14 @@ void sub_80FE058(void)
void ItemUseOutOfBattle_Repel(u8 taskId)
{
if (VarGet(VAR_REPEL_STEP_COUNT) == 0)
- gTasks[taskId].func = sub_80FE124;
+ gTasks[taskId].func = Task_StartUseRepel;
else if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, BagMenu_InitListsMenu);
else
- DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, sub_81C6714);
+ DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, Task_CloseBattlePyramidBagMessage);
}
-void sub_80FE124(u8 taskId)
+static void Task_StartUseRepel(u8 taskId)
{
s16* data = gTasks[taskId].data;
@@ -826,24 +848,24 @@ void sub_80FE124(u8 taskId)
{
data[8] = 0;
PlaySE(SE_TU_SAA);
- gTasks[taskId].func = sub_80FE164;
+ gTasks[taskId].func = Task_UseRepel;
}
}
-void sub_80FE164(u8 taskId)
+static void Task_UseRepel(u8 taskId)
{
if (!IsSEPlaying())
{
VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId));
- sub_80FE058();
+ RemoveUsedItem();
if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
else
- DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714);
+ DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage);
}
}
-void sub_80FE1D0(u8 taskId)
+static void Task_UsedBlackWhiteFlute(u8 taskId)
{
if(++gTasks[taskId].data[8] > 7)
{
@@ -851,7 +873,7 @@ void sub_80FE1D0(u8 taskId)
if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu);
else
- DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714);
+ DisplayItemMessageInBattlePyramid(taskId, gStringVar4, Task_CloseBattlePyramidBagMessage);
}
}
@@ -871,27 +893,27 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId)
StringExpandPlaceholders(gStringVar4, gText_UsedVar2WildRepelled);
}
gTasks[taskId].data[8] = 0;
- gTasks[taskId].func = sub_80FE1D0;
+ gTasks[taskId].func = Task_UsedBlackWhiteFlute;
}
-void task08_080A1C44(u8 taskId)
+void Task_UseDigEscapeRopeOnField(u8 taskId)
{
ResetInitialPlayerAvatarState();
StartEscapeRopeFieldEffect();
DestroyTask(taskId);
}
-void re_escape_rope(u8 taskId)
+static void ItemUseOnFieldCB_EscapeRope(u8 taskId)
{
Overworld_ResetStateAfterDigEscRope();
- sub_80FE058();
+ RemoveUsedItem();
gTasks[taskId].data[0] = 0;
- DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44);
+ DisplayItemMessageOnField(taskId, gStringVar4, Task_UseDigEscapeRopeOnField);
}
bool8 CanUseEscapeRopeOnCurrMap(void)
{
- if (gMapHeader.flags & 2)
+ if (gMapHeader.flags & MAP_ALLOW_ESCAPE_ROPE)
return TRUE;
else
return FALSE;
@@ -901,18 +923,18 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
{
if (CanUseEscapeRopeOnCurrMap() == TRUE)
{
- gUnknown_0203A0F4 = re_escape_rope;
+ sItemUseOnFieldCB = ItemUseOnFieldCB_EscapeRope;
SetUpItemUseOnFieldCallback(taskId);
}
else
{
- DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
}
}
void ItemUseOutOfBattle_EvolutionStone(u8 taskId)
{
- gUnknown_03006328 = sub_81B7C74;
+ gItemUseCB = ItemUseCB_EvolutionStone;
SetUpItemUseCallback(taskId);
}
@@ -922,42 +944,43 @@ void ItemUseInBattle_PokeBall(u8 taskId)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
if (!InBattlePyramid())
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
else
- sub_81C5B14(taskId);
+ CloseBattlePyramidBagAndSetCallback(taskId);
}
else if (!InBattlePyramid())
{
DisplayItemMessage(taskId, 1, gText_BoxFull, BagMenu_InitListsMenu);
}
else
- DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, sub_81C6714);
+ DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, Task_CloseBattlePyramidBagMessage);
}
-void sub_80FE408(u8 taskId)
+static void Task_CloseStatIncreaseMessage(u8 taskId)
{
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
if (!InBattlePyramid())
- unknown_ItemMenu_Confirm(taskId);
+ Task_FadeAndCloseBagMenu(taskId);
else
- sub_81C5B14(taskId);
+ CloseBattlePyramidBagAndSetCallback(taskId);
}
}
-void sub_80FE440(u8 taskId)
+static void Task_UseStatIncreaseItem(u8 taskId)
{
if(++gTasks[taskId].data[8] > 7)
{
PlaySE(SE_KAIFUKU);
RemoveBagItem(gSpecialVar_ItemId, 1);
if (!InBattlePyramid())
- DisplayItemMessage(taskId, 1, sub_806CF78(gSpecialVar_ItemId), sub_80FE408);
+ DisplayItemMessage(taskId, 1, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage);
else
- DisplayItemMessageInBattlePyramid(taskId, sub_806CF78(gSpecialVar_ItemId), sub_80FE408);
+ DisplayItemMessageInBattlePyramid(taskId, UseStatIncreaseItem(gSpecialVar_ItemId), Task_CloseStatIncreaseMessage);
}
}
+// e.g. X Attack, Guard Spec
void ItemUseInBattle_StatIncrease(u8 taskId)
{
u16 partyId = gBattlerPartyIndexes[gBattlerInMenuId];
@@ -967,61 +990,63 @@ void ItemUseInBattle_StatIncrease(u8 taskId)
if (!InBattlePyramid())
DisplayItemMessage(taskId, 1, gText_WontHaveEffect, BagMenu_InitListsMenu);
else
- DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, sub_81C6714);
+ DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, Task_CloseBattlePyramidBagMessage);
}
else
{
- gTasks[taskId].func = sub_80FE440;
+ gTasks[taskId].func = Task_UseStatIncreaseItem;
gTasks[taskId].data[8] = 0;
}
}
-void sub_80FE54C(u8 taskId)
+static void ItemUseInBattle_ShowPartyMenu(u8 taskId)
{
if (!InBattlePyramid())
{
- gBagMenu->mainCallback2 = sub_81B89F0;
- unknown_ItemMenu_Confirm(taskId);
+ gBagMenu->mainCallback2 = ChooseMonForInBattleItem;
+ Task_FadeAndCloseBagMenu(taskId);
}
else
{
- gPyramidBagResources->callback2 = sub_81B89F0;
- sub_81C5B14(taskId);
+ gPyramidBagResources->callback2 = ChooseMonForInBattleItem;
+ CloseBattlePyramidBagAndSetCallback(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);
}
+// Fluffy Tail / Poke Doll
void ItemUseInBattle_Escape(u8 taskId)
{
if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE)
{
- sub_80FE058();
+ RemoveUsedItem();
if (!InBattlePyramid())
- DisplayItemMessage(taskId, 1, gStringVar4, unknown_ItemMenu_Confirm);
+ DisplayItemMessage(taskId, 1, gStringVar4, Task_FadeAndCloseBagMenu);
else
- DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C5B14);
+ DisplayItemMessageInBattlePyramid(taskId, gStringVar4, CloseBattlePyramidBagAndSetCallback);
}
else
{
- DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
}
}
@@ -1098,5 +1123,7 @@ void ItemUseInBattle_EnigmaBerry(u8 taskId)
void ItemUseOutOfBattle_CannotUse(u8 taskId)
{
- DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[3]);
+ DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].tUsingRegisteredKeyItem);
}
+
+#undef tUsingRegisteredKeyItem
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..939a4afc8 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;
@@ -212,10 +213,9 @@ const struct WindowTemplate gUnknown_082ED204[] = {
{0x00, 0x00, 0x0D, 0x1E, 0x07, 0x0F, 0x016A},
DUMMY_WIN_TEMPLATE
};
-const u8 gUnknown_082ED224[] = {
- 0x00, 0x01, 0x02, 0x00,
- 0xff, 0xfe, 0xff, 0x00
-};
+
+static const u8 sTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
+static const u8 sUnused_082ED224[] = {0x00, 0xff, 0xfe, 0xff, 0x00};
// .text
@@ -282,7 +282,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 +316,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;
}
}
@@ -452,7 +452,7 @@ static void LinkTestProcessKeyInput(void)
}
if (gMain.newKeys & R_BUTTON)
{
- TrySavingData(1);
+ TrySavingData(SAVE_LINK);
}
if (gMain.newKeys & SELECT_BUTTON)
{
@@ -597,9 +597,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 +739,7 @@ void ClearLinkCallback(void)
{
if (gWirelessCommType)
{
- Rfu_set_zero();
+ ClearLinkRfuCallback();
}
else
{
@@ -751,7 +751,7 @@ void ClearLinkCallback_2(void)
{
if (gWirelessCommType)
{
- Rfu_set_zero();
+ ClearLinkRfuCallback();
}
else
{
@@ -862,15 +862,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 +1084,7 @@ bool8 IsLinkTaskFinished(void)
{
if (gWirelessCommType == TRUE)
{
- return sub_8010500();
+ return IsLinkRfuTaskFinished();
}
return gLinkCallback == NULL;
}
@@ -1349,7 +1349,7 @@ bool8 sub_800AA60(void)
{
if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
{
- if (gLinkType == 0x2288)
+ if (gLinkType == LINKTYPE_BATTLE_TOWER)
{
if (gLinkType == gLinkPlayers[i].linkType)
{
@@ -1398,7 +1398,7 @@ void sub_800AB18(void)
}
}
-void sub_800AB98(void)
+void ResetLinkPlayerCount(void)
{
gSavedLinkPlayerCount = 0;
gSavedMultiplayerId = 0;
@@ -1687,8 +1687,8 @@ static void sub_800B080(void)
LoadPalette(gWirelessLinkDisplayPal, 0, 0x20);
FillWindowPixelBuffer(0, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0));
- AddTextPrinterParameterized3(0, 3, 2, 6, gUnknown_082ED224, 0, gText_CommErrorEllipsis);
- AddTextPrinterParameterized3(2, 3, 2, 1, gUnknown_082ED224, 0, gText_MoveCloserToLinkPartner);
+ AddTextPrinterParameterized3(0, 3, 2, 6, sTextColors, 0, gText_CommErrorEllipsis);
+ AddTextPrinterParameterized3(2, 3, 2, 1, sTextColors, 0, gText_MoveCloserToLinkPartner);
PutWindowTilemap(0);
PutWindowTilemap(2);
CopyWindowToVram(0, 0);
@@ -1700,7 +1700,7 @@ static void sub_800B138(void)
LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0);
FillWindowPixelBuffer(1, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0));
- AddTextPrinterParameterized3(1, 3, 2, 0, gUnknown_082ED224, 0, gText_CommErrorCheckConnections);
+ AddTextPrinterParameterized3(1, 3, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections);
PutWindowTilemap(1);
PutWindowTilemap(2);
CopyWindowToVram(1, 0);
@@ -1740,11 +1740,11 @@ static void CB2_PrintErrorMessage(void)
case 130:
if (gWirelessCommType == 2)
{
- AddTextPrinterParameterized3(0, 3, 2, 20, gUnknown_082ED224, 0, gText_ABtnTitleScreen);
+ AddTextPrinterParameterized3(0, 3, 2, 20, sTextColors, 0, gText_ABtnTitleScreen);
}
else if (gWirelessCommType == 1)
{
- AddTextPrinterParameterized3(0, 3, 2, 20, gUnknown_082ED224, 0, gText_ABtnRegistrationCounter);
+ AddTextPrinterParameterized3(0, 3, 2, 20, sTextColors, 0, gText_ABtnRegistrationCounter);
}
break;
}
@@ -1902,14 +1902,15 @@ bool32 sub_800B504(void)
return FALSE;
}
-u8 sub_800B518(void)
+// Unused
+u8 GetWirelessCommType(void)
{
return gWirelessCommType;
}
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..ddcad0fe9 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"
@@ -125,10 +125,10 @@ static const struct
static const struct OamData sOamData_ScrollArrowIndicator =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -265,10 +265,10 @@ static const struct Subsprite sSubsprite_RedOutline8 =
static const struct OamData sOamData_RedArrowCursor =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
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..f6f96b012 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"
@@ -158,10 +158,10 @@ static const struct WindowTemplate sUnknown_0859F29C[] = {
DUMMY_WIN_TEMPLATE
};
-static const u8 sUnknown_0859F2AC[] = {
- 0,
- 10,
- 11
+static const u8 sTextColors[] = {
+ TEXT_COLOR_TRANSPARENT,
+ TEXT_DYNAMIC_COLOR_1,
+ TEXT_DYNAMIC_COLOR_2
};
static const u16 sUnknown_0859F2B0[][2] = {
@@ -486,14 +486,14 @@ static void sub_8121B1C(void)
{
continue;
}
- AddTextPrinterParameterized3(0, 1, sMailRead->layout->var8[i].xOffset + sMailRead->layout->wordsYPos, y + sMailRead->layout->wordsXPos, sUnknown_0859F2AC, 0, sMailRead->strbuf[i]);
+ AddTextPrinterParameterized3(0, 1, sMailRead->layout->var8[i].xOffset + sMailRead->layout->wordsYPos, y + sMailRead->layout->wordsXPos, sTextColors, 0, sMailRead->strbuf[i]);
y += sMailRead->layout->var8[i].lineHeight;
}
bufptr = StringCopy(strbuf, gText_FromSpace);
StringCopy(bufptr, sMailRead->playerName);
box_x = GetStringCenterAlignXOffset(1, strbuf, sMailRead->signatureWidth) + 0x68;
box_y = sMailRead->layout->signatureYPos + 0x58;
- AddTextPrinterParameterized3(0, 1, box_x, box_y, sUnknown_0859F2AC, 0, strbuf);
+ AddTextPrinterParameterized3(0, 1, box_x, box_y, sTextColors, 0, strbuf);
CopyWindowToVram(0, 3);
CopyWindowToVram(1, 3);
}
@@ -542,7 +542,7 @@ static void CB2_ExitMailReadFreeVars(void)
case 1:
case 2:
FreeMonIconPalette(sub_80D2E84(sMailRead->mail->species));
- sub_80D2EF8(&gSprites[sMailRead->monIconSprite]);
+ FreeAndDestroyMonIconSprite(&gSprites[sMailRead->monIconSprite]);
}
memset(sMailRead, 0, sizeof(*sMailRead));
ResetPaletteFade();
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..7c4e82c76 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -412,8 +412,8 @@ static const struct WindowTemplate gNewGameBirchSpeechTextWindows[] =
static const u16 sMainMenuBgPal[] = INCBIN_U16("graphics/misc/main_menu_bg.gbapal");
static const u16 sMainMenuTextPal[] = INCBIN_U16("graphics/misc/main_menu_text.gbapal");
-static const u8 sTextColor_Headers[] = {10, 11, 12};
-static const u8 sTextColor_PlayerGenderColor[] = {10, 1, 12};
+static const u8 sTextColor_Headers[] = {TEXT_DYNAMIC_COLOR_1, TEXT_DYNAMIC_COLOR_2, TEXT_DYNAMIC_COLOR_3};
+static const u8 sTextColor_MenuInfo[] = {TEXT_DYNAMIC_COLOR_1, TEXT_COLOR_WHITE, TEXT_DYNAMIC_COLOR_3};
static const struct BgTemplate sMainMenuBgTemplates[] = {
{
@@ -643,30 +643,30 @@ static void Task_MainMenuCheckSaveFile(u8 taskId)
tWirelessAdapterConnected = TRUE;
switch (gSaveFileStatus)
{
- case 1:
+ case SAVE_STATUS_OK:
tMenuType = HAS_SAVED_GAME;
if (IsMysteryGiftEnabled())
tMenuType++;
gTasks[taskId].func = Task_MainMenuCheckBattery;
break;
- case 2:
+ case SAVE_STATUS_CORRUPT:
CreateMainMenuErrorWindow(gText_SaveFileErased);
tMenuType = HAS_NO_SAVED_GAME;
gTasks[taskId].func = Task_WaitForSaveFileErrorWindow;
break;
- case 0xFF:
+ case SAVE_STATUS_ERROR:
CreateMainMenuErrorWindow(gText_SaveFileCorrupted);
gTasks[taskId].func = Task_WaitForSaveFileErrorWindow;
tMenuType = HAS_SAVED_GAME;
if (IsMysteryGiftEnabled() == TRUE)
tMenuType++;
break;
- case 0:
+ case SAVE_STATUS_EMPTY:
default:
tMenuType = HAS_NO_SAVED_GAME;
gTasks[taskId].func = Task_MainMenuCheckBattery;
break;
- case 4:
+ case SAVE_STATUS_NO_FLASH:
CreateMainMenuErrorWindow(gJPText_No1MSubCircuit);
gTasks[taskId].tMenuType = HAS_NO_SAVED_GAME;
gTasks[taskId].func = Task_WaitForSaveFileErrorWindow;
@@ -1312,7 +1312,7 @@ static void Task_NewGameBirchSpeech_WaitToShowBirch(u8 taskId)
gSprites[spriteId].pos1.x = 136;
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = 1;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
NewGameBirchSpeech_StartFadeInTarget1OutTarget2(taskId, 10);
NewGameBirchSpeech_StartFadePlatformOut(taskId, 20);
gTasks[taskId].tTimer = 80;
@@ -1324,7 +1324,7 @@ static void Task_NewGameBirchSpeech_WaitForSpriteFadeInWelcome(u8 taskId)
{
if (gTasks[taskId].tIsDoneFadingSprites)
{
- gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = 0;
+ gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
if (gTasks[taskId].tTimer)
{
gTasks[taskId].tTimer--;
@@ -1392,7 +1392,7 @@ static void Task_NewGameBirchSpeechSub_WaitForLotad(u8 taskId)
case 0:
if (sprite->callback == SpriteCallbackDummy)
{
- sprite->oam.affineMode = 0;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
goto incrementStateAndTimer;
}
break;
@@ -1430,8 +1430,8 @@ static void Task_NewGameBirchSpeech_StartBirchLotadPlatformFade(u8 taskId)
{
if (!RunTextPrintersAndIsPrinter0Active())
{
- gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = 1;
- gSprites[gTasks[taskId].tLotadSpriteId].oam.objMode = 1;
+ gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[gTasks[taskId].tLotadSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
NewGameBirchSpeech_StartFadeOutTarget1InTarget2(taskId, 2);
NewGameBirchSpeech_StartFadePlatformIn(taskId, 1);
gTasks[taskId].tTimer = 64;
@@ -1470,7 +1470,7 @@ static void Task_NewGameBirchSpeech_StartPlayerFadeIn(u8 taskId)
gSprites[spriteId].pos1.x = 180;
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = 1;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
gTasks[taskId].tPlayerSpriteId = spriteId;
gTasks[taskId].tPlayerGender = MALE;
NewGameBirchSpeech_StartFadeInTarget1OutTarget2(taskId, 2);
@@ -1484,7 +1484,7 @@ static void Task_NewGameBirchSpeech_WaitForPlayerFadeIn(u8 taskId)
{
if (gTasks[taskId].tIsDoneFadingSprites)
{
- gSprites[gTasks[taskId].tPlayerSpriteId].oam.objMode = 0;
+ gSprites[gTasks[taskId].tPlayerSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
gTasks[taskId].func = Task_NewGameBirchSpeech_BoyOrGirl;
}
}
@@ -1530,7 +1530,7 @@ static void Task_NewGameBirchSpeech_ChooseGender(u8 taskId)
if (gender2 != gTasks[taskId].tPlayerGender)
{
gTasks[taskId].tPlayerGender = gender2;
- gSprites[gTasks[taskId].tPlayerSpriteId].oam.objMode = 1;
+ gSprites[gTasks[taskId].tPlayerSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
NewGameBirchSpeech_StartFadeOutTarget1InTarget2(taskId, 0);
gTasks[taskId].func = Task_NewGameBirchSpeech_SlideOutOldGenderSprite;
}
@@ -1554,7 +1554,7 @@ static void Task_NewGameBirchSpeech_SlideOutOldGenderSprite(u8 taskId)
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
gTasks[taskId].tPlayerSpriteId = spriteId;
- gSprites[spriteId].oam.objMode = 1;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
NewGameBirchSpeech_StartFadeInTarget1OutTarget2(taskId, 0);
gTasks[taskId].func = Task_NewGameBirchSpeech_SlideInNewGenderSprite;
}
@@ -1573,7 +1573,7 @@ static void Task_NewGameBirchSpeech_SlideInNewGenderSprite(u8 taskId)
gSprites[spriteId].pos1.x = 180;
if (gTasks[taskId].tIsDoneFadingSprites)
{
- gSprites[spriteId].oam.objMode = 0;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
gTasks[taskId].func = Task_NewGameBirchSpeech_ChooseGender;
}
}
@@ -1637,7 +1637,7 @@ static void Task_NewGameBirchSpeech_ProcessNameYesNoMenu(u8 taskId)
{
case 0:
PlaySE(SE_SELECT);
- gSprites[gTasks[taskId].tPlayerSpriteId].oam.objMode = 1;
+ gSprites[gTasks[taskId].tPlayerSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
NewGameBirchSpeech_StartFadeOutTarget1InTarget2(taskId, 2);
NewGameBirchSpeech_StartFadePlatformIn(taskId, 1);
gTasks[taskId].func = Task_NewGameBirchSpeech_SlidePlatformAway2;
@@ -1674,12 +1674,12 @@ static void Task_NewGameBirchSpeech_ReshowBirchLotad(u8 taskId)
gSprites[spriteId].pos1.x = 136;
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = 1;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
spriteId = gTasks[taskId].tLotadSpriteId;
gSprites[spriteId].pos1.x = 100;
gSprites[spriteId].pos1.y = 75;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = 1;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
NewGameBirchSpeech_StartFadeInTarget1OutTarget2(taskId, 2);
NewGameBirchSpeech_StartFadePlatformOut(taskId, 1);
NewGameBirchSpeech_ClearWindow(0);
@@ -1693,12 +1693,12 @@ static void Task_NewGameBirchSpeech_WaitForSpriteFadeInAndTextPrinter(u8 taskId)
{
if (gTasks[taskId].tIsDoneFadingSprites)
{
- gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = 0;
- gSprites[gTasks[taskId].tLotadSpriteId].oam.objMode = 0;
+ gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[gTasks[taskId].tLotadSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
if (!RunTextPrintersAndIsPrinter0Active())
{
- gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = 1;
- gSprites[gTasks[taskId].tLotadSpriteId].oam.objMode = 1;
+ gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[gTasks[taskId].tLotadSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
NewGameBirchSpeech_StartFadeOutTarget1InTarget2(taskId, 2);
NewGameBirchSpeech_StartFadePlatformIn(taskId, 1);
gTasks[taskId].tTimer = 64;
@@ -1727,7 +1727,7 @@ static void Task_NewGameBirchSpeech_AreYouReady(u8 taskId)
gSprites[spriteId].pos1.x = 120;
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
- gSprites[spriteId].oam.objMode = 1;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
gTasks[taskId].tPlayerSpriteId = spriteId;
NewGameBirchSpeech_StartFadeInTarget1OutTarget2(taskId, 2);
NewGameBirchSpeech_StartFadePlatformOut(taskId, 1);
@@ -1743,11 +1743,11 @@ static void Task_NewGameBirchSpeech_ShrinkPlayer(u8 taskId)
if (gTasks[taskId].tIsDoneFadingSprites)
{
- gSprites[gTasks[taskId].tPlayerSpriteId].oam.objMode = 0;
+ gSprites[gTasks[taskId].tPlayerSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
if (!RunTextPrintersAndIsPrinter0Active())
{
spriteId = gTasks[taskId].tPlayerSpriteId;
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].affineAnims = sSpriteAffineAnimTable_PlayerShrink;
InitSpriteAffineAnim(&gSprites[spriteId]);
StartSpriteAffineAnim(&gSprites[spriteId], 0);
@@ -2147,8 +2147,8 @@ static void MainMenu_FormatSavegameText(void)
static void MainMenu_FormatSavegamePlayer(void)
{
StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPlayer);
- AddTextPrinterParameterized3(2, 1, 0, 17, sTextColor_PlayerGenderColor, -1, gStringVar4);
- AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 100), 17, sTextColor_PlayerGenderColor, -1, gSaveBlock2Ptr->playerName);
+ AddTextPrinterParameterized3(2, 1, 0, 17, sTextColor_MenuInfo, -1, gStringVar4);
+ AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 100), 17, sTextColor_MenuInfo, -1, gSaveBlock2Ptr->playerName);
}
static void MainMenu_FormatSavegameTime(void)
@@ -2157,11 +2157,11 @@ static void MainMenu_FormatSavegameTime(void)
u8* ptr;
StringExpandPlaceholders(gStringVar4, gText_ContinueMenuTime);
- AddTextPrinterParameterized3(2, 1, 0x6C, 17, sTextColor_PlayerGenderColor, -1, gStringVar4);
- ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, 0, 3);
+ AddTextPrinterParameterized3(2, 1, 0x6C, 17, sTextColor_MenuInfo, -1, gStringVar4);
+ ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3);
*ptr = 0xF0;
- ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, 2, 2);
- AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 17, sTextColor_PlayerGenderColor, -1, str);
+ ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 17, sTextColor_MenuInfo, -1, str);
}
static void MainMenu_FormatSavegamePokedex(void)
@@ -2172,13 +2172,13 @@ 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);
- AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 100), 33, sTextColor_PlayerGenderColor, -1, str);
+ AddTextPrinterParameterized3(2, 1, 0, 33, sTextColor_MenuInfo, -1, gStringVar4);
+ ConvertIntToDecimalStringN(str, dexCount, STR_CONV_MODE_LEFT_ALIGN, 3);
+ AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 100), 33, sTextColor_MenuInfo, -1, str);
}
}
@@ -2194,9 +2194,9 @@ static void MainMenu_FormatSavegameBadges(void)
badgeCount++;
}
StringExpandPlaceholders(gStringVar4, gText_ContinueMenuBadges);
- AddTextPrinterParameterized3(2, 1, 0x6C, 33, sTextColor_PlayerGenderColor, -1, gStringVar4);
- ConvertIntToDecimalStringN(str, badgeCount, 2, 1);
- AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 33, sTextColor_PlayerGenderColor, -1, str);
+ AddTextPrinterParameterized3(2, 1, 0x6C, 33, sTextColor_MenuInfo, -1, gStringVar4);
+ ConvertIntToDecimalStringN(str, badgeCount, STR_CONV_MODE_LEADING_ZEROS, 1);
+ AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 33, sTextColor_MenuInfo, -1, str);
}
static void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset)
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index d95b808e9..b84489a17 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -371,7 +371,7 @@ static void LoadMapNamePopUpWindowBg(void)
LoadBgTiles(GetWindowAttribute(popupWindowId, WINDOW_BG), gMapPopUp_Outline_Table[popUpThemeId], 0x400, 0x21D);
CallWindowFunction(popupWindowId, sub_80D4A78);
PutWindowTilemap(popupWindowId);
- if(gMapHeader.weather == WEATHER_BUBBLES)
+ if (gMapHeader.weather == WEATHER_UNDERWATER_BUBBLES)
LoadPalette(&gUnknown_0857F444, 0xE0, 0x20);
else
LoadPalette(gMapPopUp_Palette_Table[popUpThemeId], 0xE0, 0x20);
diff --git a/src/match_call.c b/src/match_call.c
index b02af9977..dac98e559 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)
{
@@ -1060,7 +1060,7 @@ static bool32 SelectMatchCallTrainer(void)
static u32 GetNumRegisteredNPCs(void)
{
u32 i, count;
- for (i = 0, count = 0; i < 64; i++)
+ for (i = 0, count = 0; i < REMATCH_SPECIAL_TRAINER_START; i++)
{
if (FlagGet(FLAG_MATCH_CALL_REGISTERED + i))
count++;
@@ -1072,7 +1072,7 @@ static u32 GetNumRegisteredNPCs(void)
static u32 GetActiveMatchCallTrainerId(u32 activeMatchCallId)
{
u32 i;
- for (i = 0; i < 64; i++)
+ for (i = 0; i < REMATCH_SPECIAL_TRAINER_START; i++)
{
if (FlagGet(FLAG_MATCH_CALL_REGISTERED + i))
{
@@ -1290,7 +1290,7 @@ static bool32 sub_81963F0(u8 taskId)
sub_81973A4();
playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
ScriptContext2_Disable();
}
@@ -1384,7 +1384,7 @@ static u16 GetRematchTrainerLocation(int matchCallId)
static u32 GetNumRematchTrainersFought(void)
{
u32 i, count;
- for (i = 0, count = 0; i < 64; i++)
+ for (i = 0, count = 0; i < REMATCH_SPECIAL_TRAINER_START; i++)
{
if (HasTrainerBeenFought(gRematchTable[i].trainerIds[0]))
count++;
@@ -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[] =
@@ -1961,7 +1961,7 @@ static const u8 *const sBirchDexRatingTexts[] =
gBirchDexRatingText_DexCompleted,
};
-void sub_8197080(u8 *destStr)
+void BufferPokedexRatingForMatchCall(u8 *destStr)
{
int numSeen, numCaught;
u8 *str;
@@ -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 64f04f3bc..8fe233fc1 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;
}
}
@@ -359,7 +360,7 @@ static void InitGiddyTaleList(void)
break;
if (r1 == 6)
r1 = 0;
- giddy->randomWords[i] = sub_811EE90(arr[r1][0]);
+ giddy->randomWords[i] = GetRandomEasyChatWordFromUnlockedGroup(arr[r1][0]);
}
}
}
@@ -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];
@@ -1155,9 +1337,9 @@ static void PrintStoryList(void)
if (curWidth > width)
width = curWidth;
}
- sStorytellerWindowId = CreateWindowFromRect(0, 0, convert_pixel_width_to_tile_width(width), GetFreeStorySlot() * 2 + 2);
+ 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..fb7f44ceb 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"
@@ -62,7 +62,13 @@ static EWRAM_DATA u16 gUnknown_0203CDA8 = 0;
static EWRAM_DATA void *gUnknown_0203CDAC[0x20] = {NULL};
const u16 gUnknown_0860F074[] = INCBIN_U16("graphics/interface/860F074.gbapal");
-static const u8 gUnknown_0860F094[] = { 8, 4, 1 };
+
+static const u8 sTextSpeedFrameDelays[] =
+{
+ [OPTIONS_TEXT_SPEED_SLOW] = 8,
+ [OPTIONS_TEXT_SPEED_MID] = 4,
+ [OPTIONS_TEXT_SPEED_FAST] = 1
+};
static const struct WindowTemplate sStandardTextBox_WindowTemplates[] =
{
@@ -90,7 +96,7 @@ static const struct WindowTemplate sYesNo_WindowTemplates =
};
const u16 gUnknown_0860F0B0[] = INCBIN_U16("graphics/interface/860F0B0.gbapal");
-const u8 gUnknown_0860F0D0[] = { 15, 1, 2 };
+const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
// Table of move info icon offsets in graphics/interface_fr/menu.png
const struct MoveMenuInfoIcon gMoveMenuInfoIcons[] =
@@ -480,7 +486,7 @@ u8 GetPlayerTextSpeedDelay(void)
if (gSaveBlock2Ptr->optionsTextSpeed > OPTIONS_TEXT_SPEED_FAST)
gSaveBlock2Ptr->optionsTextSpeed = OPTIONS_TEXT_SPEED_MID;
speed = GetPlayerTextSpeed();
- return gUnknown_0860F094[speed];
+ return sTextSpeedFrameDelays[speed];
}
u8 sub_81979C4(u8 a1)
@@ -819,7 +825,7 @@ void sub_8198180(const u8 *string, u8 a2, bool8 copyToVram)
0,
0xEC - (GetWindowAttribute(sWindowId, WINDOW_TILEMAP_LEFT) * 8) - a2 - width,
1,
- gUnknown_0860F0D0,
+ sTextColors,
0,
string);
if (copyToVram)
@@ -836,15 +842,15 @@ void sub_8198204(const u8 *string, const u8 *string2, u8 a3, u8 a4, bool8 copyTo
{
if (a3 != 0)
{
- color[0] = 0;
- color[1] = 1;
- color[2] = 2;
+ color[0] = TEXT_COLOR_TRANSPARENT;
+ color[1] = TEXT_COLOR_WHITE;
+ color[2] = TEXT_COLOR_DARK_GREY;
}
else
{
- color[0] = 15;
- color[1] = 1;
- color[2] = 2;
+ color[0] = TEXT_DYNAMIC_COLOR_6;
+ color[1] = TEXT_COLOR_WHITE;
+ color[2] = TEXT_COLOR_DARK_GREY;
}
PutWindowTilemap(sWindowId);
FillWindowPixelBuffer(sWindowId, PIXEL_FILL(15));
@@ -1433,13 +1439,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 +1480,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 +1519,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 +1560,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 +1874,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 +1889,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 +2154,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..5b68828c8 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -33,10 +33,10 @@ static TaskFunc gUnknown_0300117C;
static const struct OamData sOamData_859F4E8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -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..252bb7604 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"
@@ -72,9 +72,9 @@ static const struct WindowTemplate sUnknown_086253E8[] =
}
};
-static const u8 sUnknown_08625400[] =
+static const u8 sPlayerNameTextColors[] =
{
- 1, 2, 3
+ TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY
};
static const u8 sEmptyItemName[] = _("");
@@ -267,7 +267,7 @@ static void sub_81D1D44(u8 windowId, s32 itemId, u8 y)
length = StringLength(buffer);
if (length <= 5)
ConvertInternationalString(buffer, LANGUAGE_JAPANESE);
- AddTextPrinterParameterized4(windowId, 1, 8, y, 0, 0, sUnknown_08625400, -1, buffer);
+ AddTextPrinterParameterized4(windowId, 1, 8, y, 0, 0, sPlayerNameTextColors, -1, buffer);
}
u8 sub_81D1DC0(struct PlayerPCItemPageStruct *page)
@@ -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);
@@ -1104,14 +1104,14 @@ static const u32 gUnknown_086256A0[] = INCBIN_U32("graphics/pokenav/sparkle.4bpp
static const struct OamData sOamData_8625A20 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
- .size = 3,
+ .size = SPRITE_SIZE(64x64),
.tileNum = 0,
.priority = 1,
.paletteNum = 0,
@@ -1121,14 +1121,14 @@ static const struct OamData sOamData_8625A20 =
static const struct OamData sOamData_8625A28 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
- .size = 1,
+ .size = SPRITE_SIZE(16x16),
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
@@ -1476,14 +1476,14 @@ static void sub_81D35E8(struct Sprite *sprite)
}
}
-static const u8 *const sLvlUpStatStrings[] =
+static const u8 *const sLvlUpStatStrings[NUM_STATS] =
{
- gUnknown_085EEA46,
- gUnknown_085EEA4E,
- gUnknown_085EEA55,
- gUnknown_085EEA63,
- gUnknown_085EEA6B,
- gUnknown_085EEA5D
+ gText_MaxHP,
+ gText_Attack,
+ gText_Defense,
+ gText_SpAtk,
+ gText_SpDef,
+ gText_Speed
};
void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bgClr, u8 fgClr, u8 shadowClr)
@@ -1517,7 +1517,7 @@ void DrawLevelUpWindowPg1(u16 windowId, u16 *statsBefore, u16 *statsAfter, u8 bg
-1,
sLvlUpStatStrings[i]);
- StringCopy(text, (statsDiff[i] >= 0) ? gText_UnkCtrlF904 : gText_Dash);
+ StringCopy(text, (statsDiff[i] >= 0) ? gText_Plus : gText_Dash);
AddTextPrinterParameterized3(windowId,
1,
56,
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index 16298183b..435ad7233 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -244,7 +244,7 @@ static const u8 sTileBitAttributes[] =
[MB_CABLE_BOX_RESULTS_2] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
[MB_WIRELESS_BOX_RESULTS] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
[MB_TRAINER_HILL_TIMER] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
- [MB_UNKNOWN_CLOSED_DOOR] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
+ [MB_SKY_PILLAR_CLOSED_DOOR] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
[MB_UNUSED_EB] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
[MB_UNUSED_EC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
[MB_UNUSED_ED] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE),
@@ -1172,9 +1172,9 @@ bool8 MetatileBehavior_IsClosedSootopolisDoor(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsUnknownClosedDoor(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSkyPillarClosedDoor(u8 metatileBehavior)
{
- if (metatileBehavior == MB_UNKNOWN_CLOSED_DOOR)
+ if (metatileBehavior == MB_SKY_PILLAR_CLOSED_DOOR)
return TRUE;
else
return FALSE;
diff --git a/src/mevent2.c b/src/mevent2.c
index f36e5d06b..0bbaf6db8 100755
--- a/src/mevent2.c
+++ b/src/mevent2.c
@@ -9,6 +9,7 @@
#include "string_util.h"
#include "new_game.h"
#include "mevent.h"
+#include "constants/mevent.h"
#include "constants/species.h"
static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE;
@@ -131,8 +132,8 @@ void DestroyWonderCard(void)
sub_801B368();
sub_801B9F8();
ClearRamScript();
- sub_809D4D8();
- sub_809D570();
+ ClearMysteryEventFlags();
+ ClearMysteryEventVars();
ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer);
}
@@ -493,7 +494,7 @@ u16 mevent_081445C0(u32 command)
{
switch (command)
{
- case 0:
+ case GET_CARD_BATTLES_WON_INTERNAL:
{
struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 2)
@@ -503,7 +504,7 @@ u16 mevent_081445C0(u32 command)
}
break;
}
- case 1:
+ case 1: // Never occurs
{
struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 2)
@@ -513,7 +514,7 @@ u16 mevent_081445C0(u32 command)
}
break;
}
- case 2:
+ case 2: // Never occurs
{
struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 2)
@@ -523,14 +524,14 @@ u16 mevent_081445C0(u32 command)
}
break;
}
- case 3:
+ case GET_NUM_STAMPS_INTERNAL:
{
struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 1)
return sub_801B4CC();
break;
}
- case 4:
+ case GET_MAX_STAMPS_INTERNAL:
{
struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 1)
diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c
index 8f5b2d636..8596b43cd 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,11 +61,11 @@ 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},
- {0, 1, 2}
+const u8 sTextColorTable[][3] = {
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY},
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}
};
const u8 ALIGNED(4) gUnknown_082F0E18[3] = {7, 4, 7};
const struct WindowTemplate gUnknown_082F0E1C[] = {
@@ -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},
@@ -371,28 +371,28 @@ void sub_801C178(u8 whichWindow)
case 0:
{
s32 x;
- AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_018B);
+ AddTextPrinterParameterized3(windowId, 3, 0, 1, sTextColorTable[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_018B);
x = 160 - GetStringWidth(3, sWonderCardData->unk_01B4, GetFontAttribute(3, 2));
if (x < 0)
x = 0;
- AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_01B4);
+ AddTextPrinterParameterized3(windowId, 3, x, 17, sTextColorTable[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_01B4);
if (sWonderCardData->unk_0000.unk_04 != 0)
{
- AddTextPrinterParameterized3(windowId, 1, 166, 17, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_01DD);
+ AddTextPrinterParameterized3(windowId, 1, 166, 17, sTextColorTable[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_01DD);
}
break;
}
case 1:
for (; sp0C < 4; sp0C++)
{
- AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal2], 0, sWonderCardData->unk_01E4[sp0C]);
+ AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, sTextColorTable[sWonderCardData->unk_0170->textPal2], 0, sWonderCardData->unk_01E4[sp0C]);
}
break;
case 2:
- AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0], gUnknown_082F0E10[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_0288);
+ AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0], sTextColorTable[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_0288);
if (sWonderCardData->unk_0000.unk_08_0 != 2)
{
- AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0], gUnknown_082F0E10[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02B1);
+ AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0], sTextColorTable[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02B1);
}
else
{
@@ -401,11 +401,11 @@ void sub_801C178(u8 whichWindow)
s32 spacing = GetFontAttribute(3, 2);
for (; sp0C < sWonderCardData->unk_0175; sp0C++)
{
- AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02DC[sp0C].unk_01);
+ AddTextPrinterParameterized3(windowId, 3, x, y, sTextColorTable[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02DC[sp0C].unk_01);
if (sWonderCardData->unk_02DC[sp0C].unk_42[0] != EOS)
{
x += GetStringWidth(3, sWonderCardData->unk_02DC[sp0C].unk_01, spacing);
- AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02DC[sp0C].unk_42);
+ AddTextPrinterParameterized3(windowId, 3, x, y, sTextColorTable[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02DC[sp0C].unk_42);
x += GetStringWidth(3, sWonderCardData->unk_02DC[sp0C].unk_42, spacing) + sWonderCardData->unk_02DC[sp0C].unk_00;
}
}
@@ -445,7 +445,7 @@ void sub_801C61C(void)
{
u8 r6 = 0;
if (sWonderCardData->unk_017C != 0xFF)
- sub_80D2EF8(&gSprites[sWonderCardData->unk_017C]);
+ FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->unk_017C]);
if (sWonderCardData->unk_0000.unk_09 != 0 && sWonderCardData->unk_0000.unk_08_0 == 1)
{
for (; r6 < sWonderCardData->unk_0000.unk_09; r6++)
@@ -456,7 +456,7 @@ void sub_801C61C(void)
}
if (sWonderCardData->unk_017D[r6][1] != 0xFF)
{
- sub_80D2EF8(&gSprites[sWonderCardData->unk_017D[r6][1]]);
+ FreeAndDestroyMonIconSprite(&gSprites[sWonderCardData->unk_017D[r6][1]]);
}
}
FreeSpriteTilesByTag(0x8000);
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_news.c b/src/mevent_news.c
index 192bb0fc7..9e78cf406 100644
--- a/src/mevent_news.c
+++ b/src/mevent_news.c
@@ -53,6 +53,7 @@ void sub_801DBDC(void)
}
}
+// Unused
u16 sub_801DC20(void)
{
u16 *r6 = &gSpecialVar_Result;
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..bb93bb497 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"
@@ -139,10 +139,10 @@ static const union AnimCmd gSpriteAnim_8617DEC[] =
static const struct OamData gOamData_8617DF4 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
diff --git a/src/mon_markings.c b/src/mon_markings.c
index f8b128045..db5df07e8 100644
--- a/src/mon_markings.c
+++ b/src/mon_markings.c
@@ -26,10 +26,10 @@ static const u8 gUnknown_0859E67C[] = INCBIN_U8("graphics/misc/mon_markings.4bpp
static const struct OamData gUnknown_0859EE7C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -43,10 +43,10 @@ static const struct OamData gUnknown_0859EE7C =
static const struct OamData gUnknown_0859EE84 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -152,10 +152,10 @@ static const union AnimCmd *const gUnknown_0859EF14[] =
static const struct OamData gUnknown_0859EF1C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.matrixNum = 0,
@@ -350,7 +350,7 @@ void sub_811FAA4(u8 markings, s16 x, s16 y)
u16 i;
sMenu->cursorPos = 0;
sMenu->markings = markings;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_MON_MARKINGS; i++)
sMenu->markingsArray[i] = (sMenu->markings >> i) & 1;
sub_811FC80(x, y, sMenu->baseTileTag, sMenu->basePaletteTag);
}
@@ -371,7 +371,7 @@ void sub_811FAF8(void)
DestroySprite(sMenu->menuWindowSprites[i]);
sMenu->menuWindowSprites[i] = NULL;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_MON_MARKINGS; i++)
{
if (!sMenu->menuMarkingSprites[i])
return;
@@ -422,7 +422,7 @@ bool8 sub_811FBA4(void)
{
case 4:
sMenu->markings = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_MON_MARKINGS; i++)
sMenu->markings |= sMenu->markingsArray[i] << i;
return FALSE;
case 5:
@@ -498,7 +498,7 @@ static void sub_811FC80(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag)
sprTemplate.callback = sub_811FF40;
sprTemplate.oam = &gUnknown_0859EE84;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_MON_MARKINGS; i++)
{
spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 0);
if (spriteId != MAX_SPRITES)
@@ -520,12 +520,12 @@ static void sub_811FC80(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag)
if (spriteId != MAX_SPRITES)
{
sMenu->menuTextSprite = &gSprites[spriteId];
- sMenu->menuTextSprite->oam.shape = ST_OAM_SQUARE;
- sMenu->menuTextSprite->oam.size = 2;
+ sMenu->menuTextSprite->oam.shape = SPRITE_SHAPE(32x32);
+ sMenu->menuTextSprite->oam.size = SPRITE_SIZE(32x32);
StartSpriteAnim(sMenu->menuTextSprite, 9);
sMenu->menuTextSprite->pos1.x = x + MENU_TEXT_SPRITE_X_OFFSET;
sMenu->menuTextSprite->pos1.y = y + 80;
- CalcCenterToCornerVec(sMenu->menuTextSprite, 1, 2, 0);
+ CalcCenterToCornerVec(sMenu->menuTextSprite, SPRITE_SHAPE(32x16), SPRITE_SIZE(32x16), ST_OAM_AFFINE_OFF);
}
else
{
diff --git a/src/money.c b/src/money.c
index 7b95a75ab..6213f2dd0 100644
--- a/src/money.c
+++ b/src/money.c
@@ -20,10 +20,10 @@ EWRAM_DATA static u8 sMoneyLabelSpriteId = 0;
static const struct OamData sOamData_MoneyLabel =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
diff --git a/src/mossdeep_gym.c b/src/mossdeep_gym.c
deleted file mode 100644
index d8adbe0c6..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]);
- sub_80D338C();
-}
-
-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 0b0b4a5aa..e88008689 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"
@@ -154,7 +154,7 @@ static EWRAM_DATA struct
{
u8 state;
u8 heartSpriteIds[16]; /*0x001*/
- u16 movesToLearn[4]; /*0x012*/
+ u16 movesToLearn[MAX_MON_MOVES]; /*0x012*/
u8 filler1A[0x44 - 0x1A]; /*0x01A*/
u8 partyMon; /*0x044*/
u8 moveSlot; /*0x045*/
@@ -183,14 +183,14 @@ static const u8 sMoveRelearnerSpriteSheetData[] = INCBIN_U8("graphics/interface/
static const struct OamData sHeartSpriteOamData =
{
.y = 0,
- .affineMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
.bpp = ST_OAM_4BPP,
- .shape = ST_OAM_SQUARE,
+ .shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
- .size = 0,
+ .size = SPRITE_SIZE(8x8),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
@@ -200,14 +200,14 @@ static const struct OamData sHeartSpriteOamData =
static const struct OamData sUnusedOam1 =
{
.y = 0,
- .affineMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
.bpp = ST_OAM_4BPP,
- .shape = ST_OAM_V_RECTANGLE,
+ .shape = SPRITE_SHAPE(8x16),
.x = 0,
.matrixNum = 0,
- .size = 0,
+ .size = SPRITE_SIZE(8x16),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
@@ -217,14 +217,14 @@ static const struct OamData sUnusedOam1 =
static const struct OamData sUnusedOam2 =
{
.y = 0,
- .affineMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
.bpp = ST_OAM_4BPP,
- .shape = ST_OAM_H_RECTANGLE,
+ .shape = SPRITE_SHAPE(16x8),
.x = 0,
.matrixNum = 0,
- .size = 0,
+ .size = SPRITE_SIZE(16x8),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
@@ -376,7 +376,7 @@ static void Task_WaitForFadeOut(u8 taskId)
if (!gPaletteFade.active)
{
SetMainCallback2(CB2_InitLearnMove);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyTask(taskId);
}
}
@@ -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..9da5f060a 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"
@@ -921,7 +921,7 @@ static bool32 mevent_save_game(u8 * state)
(*state)++;
break;
case 1:
- TrySavingData(0);
+ TrySavingData(SAVE_NORMAL);
(*state)++;
break;
case 2:
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 7da7d99b0..68eeded91 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"
@@ -33,28 +33,11 @@ EWRAM_DATA static struct NamingScreenData *gNamingScreenData = NULL;
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,15 +46,15 @@ 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!");
+static const u8 sText_AlphabetUpperLower[] = _("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!");
static const struct BgTemplate gUnknown_0858BE00[] =
{
@@ -171,7 +154,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[];
@@ -238,7 +221,7 @@ static void NamingScreen_TurnOffScreen(void);
static void NamingScreen_InitDisplayMode(void);
static void VBlankCB_NamingScreen(void);
static void sub_80E501C(void);
-static bool8 sub_80E503C(u8);
+static bool8 IsLetter(u8);
void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGender, u32 monPersonality, MainCallback returnCallback)
{
@@ -428,35 +411,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();
@@ -541,23 +541,23 @@ static void DisplaySentToPCMessage(void)
{
u8 stringToDisplay = 0;
- if (!sub_813B260())
+ if (!IsDestinationBoxFull())
{
- StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
StringCopy(gStringVar2, gNamingScreenData->destBuffer);
}
else
{
- StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
+ StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_PC_BOX_TO_SEND_MON)));
StringCopy(gStringVar2, gNamingScreenData->destBuffer);
- StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id()));
+ StringCopy(gStringVar3, GetBoxNamePtr(GetPCBoxToSendMon()));
stringToDisplay = 2;
}
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);
@@ -913,7 +913,7 @@ static void CursorInit(void)
gNamingScreenData->cursorSpriteId = CreateSprite(&gUnknown_0858C138, 38, 88, 1);
sub_80E3E3C(1);
gSprites[gNamingScreenData->cursorSpriteId].oam.priority = 1;
- gSprites[gNamingScreenData->cursorSpriteId].oam.objMode = 1;
+ gSprites[gNamingScreenData->cursorSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
gSprites[gNamingScreenData->cursorSpriteId].data[6] = 1;
gSprites[gNamingScreenData->cursorSpriteId].data[6] = 2;
SetCursorPos(0, 0);
@@ -1526,8 +1526,8 @@ static void TaskDummy3(void)
static const u8 sGenderColors[2][3] =
{
- {0, 9, 8},
- {0, 5, 4}
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_BLUE, TEXT_COLOR_BLUE},
+ {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}
};
static void sub_80E49BC(void)
@@ -1660,7 +1660,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)
{
}
@@ -1678,8 +1678,8 @@ static void sub_80E4D10(void)
for (i = 0; i < maxChars; i++)
{
temp[0] = gNamingScreenData->textBuffer[i];
- temp[1] = gExpandedPlaceholder_Empty[0];
- unk2 = (sub_80E503C(temp[0]) == 1) ? 2 : 0;
+ temp[1] = gText_ExpandedPlaceholder_Empty[0];
+ unk2 = (IsLetter(temp[0]) == TRUE) ? 2 : 0;
AddTextPrinterParameterized(gNamingScreenData->windows[2], 1, temp, i * 8 + unk + unk2, 1, 0xFF, NULL);
}
@@ -1689,43 +1689,43 @@ static void sub_80E4D10(void)
PutWindowTilemap(gNamingScreenData->windows[2]);
}
-struct TextColorThing // needed because of alignment... it's so stupid
+struct TextColor // Needed because of alignment
{
u8 colors[3][4];
};
-static const struct TextColorThing sUnkColorStruct =
+static const struct TextColor sTextColorStruct =
{
{
- {13, 1, 2},
- {14, 1, 2},
- {15, 1, 2}
+ {TEXT_DYNAMIC_COLOR_4, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY},
+ {TEXT_DYNAMIC_COLOR_5, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY},
+ {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}
}
};
-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 sKeyboardTextColors[KBPAGE_COUNT] =
{
- sUnkColorStruct.colors[1],
- sUnkColorStruct.colors[0],
- sUnkColorStruct.colors[2]
+ [KBPAGE_LETTERS_LOWER] = sTextColorStruct.colors[1],
+ [KBPAGE_LETTERS_UPPER] = sTextColorStruct.colors[0],
+ [KBPAGE_SYMBOLS] = sTextColorStruct.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, sKeyboardTextColors[page], 0, sNamingScreenKeyboardText[page][i]);
}
PutWindowTilemap(window);
@@ -1767,7 +1767,7 @@ static void sub_80E4E5C(void)
static void sub_80E4EF0(void)
{
- const u8 color[3] = { 15, 1, 2 };
+ const u8 color[3] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
FillWindowPixelBuffer(gNamingScreenData->windows[4], PIXEL_FILL(15));
AddTextPrinterParameterized3(gNamingScreenData->windows[4], 0, 2, 1, color, 0, gText_MoveOkBack);
@@ -1815,13 +1815,13 @@ static void sub_80E501C(void)
ShowBg(3);
}
-static bool8 sub_80E503C(u8 character)
+static bool8 IsLetter(u8 character)
{
u8 i;
- for (i = 0; gUnknown_0858BDC8[i] != EOS; i++)
+ for (i = 0; sText_AlphabetUpperLower[i] != EOS; i++)
{
- if (character == gUnknown_0858BDC8[i])
+ if (character == sText_AlphabetUpperLower[i])
return FALSE;
}
return FALSE;
@@ -1857,7 +1857,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 +1868,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 +1879,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 +1890,7 @@ static const struct NamingScreenTemplate wandaWordsScreenTemplate =
.maxChars = 15,
.iconFunction = 4,
.addGenderIcon = 0,
- .initialPage = PAGE_UPPER,
+ .initialPage = KBPAGE_LETTERS_UPPER,
.unused = 11,
.title = gText_TellHimTheWords,
};
@@ -1948,37 +1948,170 @@ const struct OamData gOamData_858BFFC =
static const struct Subsprite gUnknown_0858C004[] =
{
- {-20, -16, 1, 1, 0, 1},
- { 12, -16, 0, 0, 4, 1},
- {-20, -8, 1, 1, 5, 1},
- { 12, -8, 0, 0, 9, 1},
- {-20, 0, 1, 1, 10, 1},
- { 12, 0, 0, 0, 14, 1},
- {-20, 8, 1, 1, 15, 1},
- { 12, 8, 0, 0, 19, 1}
+ {
+ .x = -20,
+ .y = -16,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 12,
+ .y = -16,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = -20,
+ .y = -8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 5,
+ .priority = 1
+ },
+ {
+ .x = 12,
+ .y = -8,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 9,
+ .priority = 1
+ },
+ {
+ .x = -20,
+ .y = 0,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 10,
+ .priority = 1
+ },
+ {
+ .x = 12,
+ .y = 0,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 14,
+ .priority = 1
+ },
+ {
+ .x = -20,
+ .y = 8,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 15,
+ .priority = 1
+ },
+ {
+ .x = 12,
+ .y = 8,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 19,
+ .priority = 1
+ }
};
static const struct Subsprite gUnknown_0858C024[] =
{
- {-12, -4, 1, 0, 0, 1},
- { 4, -4, 0, 0, 2, 1}
+ {
+ .x = -12,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 4,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 2,
+ .priority = 1
+ }
};
static const struct Subsprite gUnknown_0858C02C[] =
{
- {-20, -12, 1, 1, 0, 1},
- { 12, -12, 0, 0, 4, 1},
- {-20, -4, 1, 1, 5, 1},
- { 12, -4, 0, 0, 9, 1},
- {-20, 4, 1, 1, 10, 1},
- { 12, 4, 0, 0, 14, 1}
+ {
+ .x = -20,
+ .y = -12,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 12,
+ .y = -12,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = -20,
+ .y = -4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 5,
+ .priority = 1
+ },
+ {
+ .x = 12,
+ .y = -4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 9,
+ .priority = 1
+ },
+ {
+ .x = -20,
+ .y = 4,
+ .shape = SPRITE_SHAPE(32x8),
+ .size = SPRITE_SIZE(32x8),
+ .tileOffset = 10,
+ .priority = 1
+ },
+ {
+ .x = 12,
+ .y = 4,
+ .shape = SPRITE_SHAPE(8x8),
+ .size = SPRITE_SIZE(8x8),
+ .tileOffset = 14,
+ .priority = 1
+ }
};
static const struct Subsprite gUnknown_0858C044[] =
{
- {-8, -12, 1, 0, 0, 3},
- {-8, -4, 1, 0, 2, 3},
- {-8, 4, 1, 0, 4, 3}
+ {
+ .x = -8,
+ .y = -12,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 0,
+ .priority = 3
+ },
+ {
+ .x = -8,
+ .y = -4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 2,
+ .priority = 3
+ },
+ {
+ .x = -8,
+ .y = 4,
+ .shape = SPRITE_SHAPE(16x8),
+ .size = SPRITE_SIZE(16x8),
+ .tileOffset = 4,
+ .priority = 3
+ }
};
static const struct SubspriteTable gUnknown_0858C050[] =
@@ -2144,25 +2277,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/new_game.c b/src/new_game.c
index b4d9ba9b3..464da6414 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -81,7 +81,7 @@ u32 GetTrainerId(u8 *trainerId)
void CopyTrainerId(u8 *dst, u8 *src)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
dst[i] = src[i];
}
@@ -122,8 +122,8 @@ static void ClearFrontierRecord(void)
{
CpuFill32(0, &gSaveBlock2Ptr->frontier, sizeof(gSaveBlock2Ptr->frontier));
- gSaveBlock2Ptr->frontier.opponentName[0][0] = EOS;
- gSaveBlock2Ptr->frontier.opponentName[1][0] = EOS;
+ gSaveBlock2Ptr->frontier.opponentNames[0][0] = EOS;
+ gSaveBlock2Ptr->frontier.opponentNames[1][0] = EOS;
}
static void WarpToTruck(void)
@@ -150,7 +150,7 @@ void ResetMenuAndMonGlobals(void)
void NewGameInitData(void)
{
- if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
+ if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT)
RtcReset();
gDifferentSaveFile = 1;
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/option_menu.c b/src/option_menu.c
index 3ffb2738f..e0473b5c3 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -48,6 +48,13 @@ enum
WIN_OPTIONS
};
+#define YPOS_TEXTSPEED (MENUITEM_TEXTSPEED * 16)
+#define YPOS_BATTLESCENE (MENUITEM_BATTLESCENE * 16)
+#define YPOS_BATTLESTYLE (MENUITEM_BATTLESTYLE * 16)
+#define YPOS_SOUND (MENUITEM_SOUND * 16)
+#define YPOS_BUTTONMODE (MENUITEM_BUTTONMODE * 16)
+#define YPOS_FRAMETYPE (MENUITEM_FRAMETYPE * 16)
+
// this file's functions
static void Task_OptionMenuFadeIn(u8 taskId);
static void Task_OptionMenuProcessInput(u8 taskId);
@@ -80,13 +87,13 @@ static const u8 sEqualSignGfx[] = INCBIN_U8("graphics/misc/option_menu_equals_si
static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] =
{
- gText_TextSpeed,
- gText_BattleScene,
- gText_BattleStyle,
- gText_Sound,
- gText_ButtonMode,
- gText_Frame,
- gText_OptionMenuCancel,
+ [MENUITEM_TEXTSPEED] = gText_TextSpeed,
+ [MENUITEM_BATTLESCENE] = gText_BattleScene,
+ [MENUITEM_BATTLESTYLE] = gText_BattleStyle,
+ [MENUITEM_SOUND] = gText_Sound,
+ [MENUITEM_BUTTONMODE] = gText_ButtonMode,
+ [MENUITEM_FRAMETYPE] = gText_Frame,
+ [MENUITEM_CANCEL] = gText_OptionMenuCancel,
};
static const struct WindowTemplate sOptionMenuWinTemplates[] =
@@ -280,12 +287,12 @@ static void Task_OptionMenuProcessInput(u8 taskId)
if (gTasks[taskId].data[TD_MENUSELECTION] > 0)
gTasks[taskId].data[TD_MENUSELECTION]--;
else
- gTasks[taskId].data[TD_MENUSELECTION] = 6;
+ gTasks[taskId].data[TD_MENUSELECTION] = MENUITEM_CANCEL;
HighlightOptionMenuItem(gTasks[taskId].data[TD_MENUSELECTION]);
}
else if (gMain.newKeys & DPAD_DOWN)
{
- if (gTasks[taskId].data[TD_MENUSELECTION] <= 5)
+ if (gTasks[taskId].data[TD_MENUSELECTION] < MENUITEM_CANCEL)
gTasks[taskId].data[TD_MENUSELECTION]++;
else
gTasks[taskId].data[TD_MENUSELECTION] = 0;
@@ -431,7 +438,7 @@ static void TextSpeed_DrawChoices(u8 selection)
styles[2] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_TextSpeedSlow, 104, 0, styles[0]);
+ DrawOptionMenuChoice(gText_TextSpeedSlow, 104, YPOS_TEXTSPEED, styles[0]);
widthSlow = GetStringWidth(1, gText_TextSpeedSlow, 0);
widthMid = GetStringWidth(1, gText_TextSpeedMid, 0);
@@ -439,9 +446,9 @@ static void TextSpeed_DrawChoices(u8 selection)
widthMid -= 94;
xMid = (widthSlow - widthMid - widthFast) / 2 + 104;
- DrawOptionMenuChoice(gText_TextSpeedMid, xMid, 0, styles[1]);
+ DrawOptionMenuChoice(gText_TextSpeedMid, xMid, YPOS_TEXTSPEED, styles[1]);
- DrawOptionMenuChoice(gText_TextSpeedFast, GetStringRightAlignXOffset(1, gText_TextSpeedFast, 198), 0, styles[2]);
+ DrawOptionMenuChoice(gText_TextSpeedFast, GetStringRightAlignXOffset(1, gText_TextSpeedFast, 198), YPOS_TEXTSPEED, styles[2]);
}
static u8 BattleScene_ProcessInput(u8 selection)
@@ -463,8 +470,8 @@ static void BattleScene_DrawChoices(u8 selection)
styles[1] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_BattleSceneOn, 104, 16, styles[0]);
- DrawOptionMenuChoice(gText_BattleSceneOff, GetStringRightAlignXOffset(1, gText_BattleSceneOff, 198), 16, styles[1]);
+ DrawOptionMenuChoice(gText_BattleSceneOn, 104, YPOS_BATTLESCENE, styles[0]);
+ DrawOptionMenuChoice(gText_BattleSceneOff, GetStringRightAlignXOffset(1, gText_BattleSceneOff, 198), YPOS_BATTLESCENE, styles[1]);
}
static u8 BattleStyle_ProcessInput(u8 selection)
@@ -486,8 +493,8 @@ static void BattleStyle_DrawChoices(u8 selection)
styles[1] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_BattleStyleShift, 104, 32, styles[0]);
- DrawOptionMenuChoice(gText_BattleStyleSet, GetStringRightAlignXOffset(1, gText_BattleStyleSet, 198), 32, styles[1]);
+ DrawOptionMenuChoice(gText_BattleStyleShift, 104, YPOS_BATTLESTYLE, styles[0]);
+ DrawOptionMenuChoice(gText_BattleStyleSet, GetStringRightAlignXOffset(1, gText_BattleStyleSet, 198), YPOS_BATTLESTYLE, styles[1]);
}
static u8 Sound_ProcessInput(u8 selection)
@@ -510,8 +517,8 @@ static void Sound_DrawChoices(u8 selection)
styles[1] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_SoundMono, 104, 48, styles[0]);
- DrawOptionMenuChoice(gText_SoundStereo, GetStringRightAlignXOffset(1, gText_SoundStereo, 198), 48, styles[1]);
+ DrawOptionMenuChoice(gText_SoundMono, 104, YPOS_SOUND, styles[0]);
+ DrawOptionMenuChoice(gText_SoundStereo, GetStringRightAlignXOffset(1, gText_SoundStereo, 198), YPOS_SOUND, styles[1]);
}
static u8 FrameType_ProcessInput(u8 selection)
@@ -568,8 +575,8 @@ static void FrameType_DrawChoices(u8 selection)
text[i] = EOS;
- DrawOptionMenuChoice(gText_FrameType, 104, 80, 0);
- DrawOptionMenuChoice(text, 128, 80, 1);
+ DrawOptionMenuChoice(gText_FrameType, 104, YPOS_FRAMETYPE, 0);
+ DrawOptionMenuChoice(text, 128, YPOS_FRAMETYPE, 1);
}
static u8 ButtonMode_ProcessInput(u8 selection)
@@ -605,7 +612,7 @@ static void ButtonMode_DrawChoices(u8 selection)
styles[2] = 0;
styles[selection] = 1;
- DrawOptionMenuChoice(gText_ButtonTypeNormal, 104, 64, styles[0]);
+ DrawOptionMenuChoice(gText_ButtonTypeNormal, 104, YPOS_BUTTONMODE, styles[0]);
widthNormal = GetStringWidth(1, gText_ButtonTypeNormal, 0);
widthLR = GetStringWidth(1, gText_ButtonTypeLR, 0);
@@ -613,9 +620,9 @@ static void ButtonMode_DrawChoices(u8 selection)
widthLR -= 94;
xLR = (widthNormal - widthLR - widthLA) / 2 + 104;
- DrawOptionMenuChoice(gText_ButtonTypeLR, xLR, 64, styles[1]);
+ DrawOptionMenuChoice(gText_ButtonTypeLR, xLR, YPOS_BUTTONMODE, styles[1]);
- DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(1, gText_ButtonTypeLEqualsA, 198), 64, styles[2]);
+ DrawOptionMenuChoice(gText_ButtonTypeLEqualsA, GetStringRightAlignXOffset(1, gText_ButtonTypeLEqualsA, 198), YPOS_BUTTONMODE, styles[2]);
}
static void DrawTextOption(void)
diff --git a/src/overworld.c b/src/overworld.c
index 819f9ac4e..e11dbbfda 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"
@@ -64,6 +64,7 @@
#include "constants/region_map_sections.h"
#include "constants/songs.h"
#include "constants/species.h"
+#include "constants/trainer_hill.h"
#include "constants/weather.h"
#define PLAYER_TRADING_STATE_IDLE 0x80
@@ -85,19 +86,19 @@
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 EventScript_DoubleBattleColosseum_PlayerSpot0[];
-extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot1[];
-extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot2[];
-extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot3[];
+extern const u8 CableClub_EventScript_TooBusyToNotice[];
+extern const u8 CableClub_EventScript_ReadTrainerCard[];
+extern const u8 CableClub_EventScript_ReadTrainerCardColored[];
+extern const u8 EventScript_BattleColosseum_4P_PlayerSpot0[];
+extern const u8 EventScript_BattleColosseum_4P_PlayerSpot1[];
+extern const u8 EventScript_BattleColosseum_4P_PlayerSpot2[];
+extern const u8 EventScript_BattleColosseum_4P_PlayerSpot3[];
extern const u8 EventScript_RecordCenter_Spot0[];
extern const u8 EventScript_RecordCenter_Spot1[];
extern const u8 EventScript_RecordCenter_Spot2[];
extern const u8 EventScript_RecordCenter_Spot3[];
-extern const u8 EventScript_SingleBattleColosseum_PlayerSpot0[];
-extern const u8 EventScript_SingleBattleColosseum_PlayerSpot1[];
+extern const u8 EventScript_BattleColosseum_2P_PlayerSpot0[];
+extern const u8 EventScript_BattleColosseum_2P_PlayerSpot1[];
extern const u8 EventScript_TradeCenter_Chair1[];
extern const u8 EventScript_TradeCenter_Chair0[];
extern const u8 EventScript_ConfirmLeaveTradeRoom[];
@@ -431,11 +432,11 @@ static void Overworld_ResetStateAfterWhiteOut(void)
FlagClear(FLAG_SYS_USE_STRENGTH);
FlagClear(FLAG_SYS_USE_FLASH);
// If you were defeated by Kyogre/Groudon and the step counter has
- // maxed out, end the unusual weather.
- if (VarGet(VAR_SHOULD_END_UNUSUAL_WEATHER) == 1)
+ // maxed out, end the abnormal weather.
+ if (VarGet(VAR_SHOULD_END_ABNORMAL_WEATHER) == 1)
{
- VarSet(VAR_SHOULD_END_UNUSUAL_WEATHER, 0);
- VarSet(VAR_UNUSUAL_WEATHER_LOCATION, UNUSUAL_WEATHER_NONE);
+ VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 0);
+ VarSet(VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_NONE);
}
}
@@ -851,10 +852,10 @@ static void mli0_load_map(u32 a1)
LoadCurrentMapData();
if (!(sUnknown_020322D8 & 1))
{
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
LoadBattlePyramidEventObjectTemplates();
else if (InTrainerHill())
- sub_81D5DF8();
+ LoadTrainerHillEventObjectTemplates();
else
LoadEventObjTemplatesFromHeader();
}
@@ -862,7 +863,7 @@ static void mli0_load_map(u32 a1)
isOutdoors = IsMapTypeOutdoors(gMapHeader.mapType);
isIndoors = IsMapTypeIndoors(gMapHeader.mapType);
- sub_80EB218();
+ CheckLeftFriendsSecretBase();
TrySetMapSaveWarpStatus();
ClearTempFieldEventData();
ResetCyclingRoadChallengeData();
@@ -879,7 +880,7 @@ static void mli0_load_map(u32 a1)
RunOnTransitionMapScript();
UpdateLocationHistoryForRoamer();
RoamerMoveToOtherLocationSet();
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
InitBattlePyramidMap(FALSE);
else if (InTrainerHill())
InitTrainerHillMap();
@@ -977,7 +978,7 @@ static u16 GetCenterScreenMetatileBehavior(void)
bool32 Overworld_IsBikingAllowed(void)
{
- if (!(gMapHeader.flags & 1))
+ if (!(gMapHeader.flags & MAP_ALLOW_BIKE))
return FALSE;
else
return TRUE;
@@ -1183,7 +1184,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 +1232,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
@@ -1525,7 +1526,7 @@ static bool8 map_post_load_hook_exec(void)
if (gFieldCallback)
gFieldCallback();
else
- mapldr_default();
+ FieldCB_DefaultWarpExit();
gFieldCallback = NULL;
}
@@ -1564,7 +1565,7 @@ void CB2_WhiteOut(void)
ResetInitialPlayerAvatarState();
ScriptContext1_Init();
ScriptContext2_Disable();
- gFieldCallback = sub_80AF3C8;
+ gFieldCallback = FieldCB_WarpExitFadeFromBlack;
val = 0;
do_load_map_stuff_loop(&val);
SetFieldVBlankCallback();
@@ -1608,10 +1609,10 @@ void sub_8086024(void)
}
}
-void sub_8086074(void)
+void CB2_ReturnToFieldCableClub(void)
{
FieldClearVBlankHBlankCallbacks();
- gFieldCallback = sub_80AF314;
+ gFieldCallback = FieldCB_ReturnToFieldWirelessLink;
SetMainCallback2(c2_80567AC);
}
@@ -1662,9 +1663,9 @@ void CB2_ReturnToFieldFromMultiplayer(void)
ResetAllMultiplayerState();
if (gWirelessCommType != 0)
- gFieldCallback = sub_80AF314;
+ gFieldCallback = FieldCB_ReturnToFieldWirelessLink;
else
- gFieldCallback = sub_80AF214;
+ gFieldCallback = FieldCB_ReturnToFieldCableLink;
ScriptContext1_Init();
ScriptContext2_Disable();
@@ -1674,36 +1675,36 @@ void CB2_ReturnToFieldFromMultiplayer(void)
void CB2_ReturnToFieldWithOpenMenu(void)
{
FieldClearVBlankHBlankCallbacks();
- gFieldCallback2 = sub_80AF6A4;
+ gFieldCallback2 = FieldCB_ReturnToFieldOpenStartMenu;
CB2_ReturnToField();
}
void CB2_ReturnToFieldContinueScript(void)
{
FieldClearVBlankHBlankCallbacks();
- gFieldCallback = sub_80AF188;
+ gFieldCallback = FieldCB_ContinueScript;
CB2_ReturnToField();
}
void CB2_ReturnToFieldContinueScriptPlayMapMusic(void)
{
FieldClearVBlankHBlankCallbacks();
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
CB2_ReturnToField();
}
void sub_80861E8(void)
{
FieldClearVBlankHBlankCallbacks();
- gFieldCallback = sub_80AF3C8;
+ gFieldCallback = FieldCB_WarpExitFadeFromBlack;
CB2_ReturnToField();
}
static void sub_8086204(void)
{
- if ((gMapHeader.flags & 0xF8) == 8 && SecretBaseMapPopupEnabled() == TRUE)
+ if (SHOW_MAP_NAME_ENABLED && SecretBaseMapPopupEnabled() == TRUE)
ShowMapNamePopup();
- sub_80AF3C8();
+ FieldCB_WarpExitFadeFromBlack();
}
void CB2_ContinueSavedGame(void)
@@ -1713,23 +1714,23 @@ void CB2_ContinueSavedGame(void)
FieldClearVBlankHBlankCallbacks();
StopMapMusic();
ResetSafariZoneFlag_();
- if (gSaveFileStatus == 0xFF)
- sub_81A3908();
+ if (gSaveFileStatus == SAVE_STATUS_ERROR)
+ ResetWinStreaks();
LoadSaveblockMapHeader();
ClearDiveAndHoleWarps();
trainerHillMapId = GetCurrentTrainerHillMapId();
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
LoadBattlePyramidFloorEventObjectScripts();
- else if (trainerHillMapId != 0 && trainerHillMapId != 6)
- sub_81D5F48();
+ else if (trainerHillMapId != 0 && trainerHillMapId != TRAINER_HILL_ENTRANCE)
+ LoadTrainerHillFloorEventObjectScripts();
else
LoadSaveblockEventObjScripts();
UnfreezeEventObjects();
DoTimeBasedEvents();
sub_8084788();
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
InitBattlePyramidMap(TRUE);
else if (trainerHillMapId != 0)
InitTrainerHillMap();
@@ -1759,7 +1760,7 @@ void CB2_ContinueSavedGame(void)
static void FieldClearVBlankHBlankCallbacks(void)
{
- if (warp0_in_pokecenter() == TRUE)
+ if (UsedPokemonCenterWarp() == TRUE)
CloseLink();
if (gWirelessCommType != 0)
@@ -1947,7 +1948,7 @@ static bool32 load_map_stuff(u8 *state, u32 a2)
(*state)++;
break;
case 11:
- if ((gMapHeader.flags & 0xF8) == 8 && SecretBaseMapPopupEnabled() == TRUE)
+ if (SHOW_MAP_NAME_ENABLED && SecretBaseMapPopupEnabled() == TRUE)
ShowMapNamePopup();
(*state)++;
break;
@@ -2435,7 +2436,7 @@ static void UpdateAllLinkPlayers(u16 *keys, s32 selfId)
struct TradeRoomPlayer trainer;
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
u8 key = keys[i];
u16 setFacing = FACING_NONE;
@@ -2742,7 +2743,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 +2766,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);
@@ -2781,13 +2782,13 @@ static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *player)
// these event scripts runs.
static u16 GetDirectionForEventScript(const u8 *script)
{
- if (script == EventScript_DoubleBattleColosseum_PlayerSpot0)
+ if (script == EventScript_BattleColosseum_4P_PlayerSpot0)
return FACING_FORCED_RIGHT;
- else if (script == EventScript_DoubleBattleColosseum_PlayerSpot1)
+ else if (script == EventScript_BattleColosseum_4P_PlayerSpot1)
return FACING_FORCED_LEFT;
- else if (script == EventScript_DoubleBattleColosseum_PlayerSpot2)
+ else if (script == EventScript_BattleColosseum_4P_PlayerSpot2)
return FACING_FORCED_RIGHT;
- else if (script == EventScript_DoubleBattleColosseum_PlayerSpot3)
+ else if (script == EventScript_BattleColosseum_4P_PlayerSpot3)
return FACING_FORCED_LEFT;
else if (script == EventScript_RecordCenter_Spot0)
return FACING_FORCED_RIGHT;
@@ -2797,9 +2798,9 @@ static u16 GetDirectionForEventScript(const u8 *script)
return FACING_FORCED_RIGHT;
else if (script == EventScript_RecordCenter_Spot3)
return FACING_FORCED_LEFT;
- else if (script == EventScript_SingleBattleColosseum_PlayerSpot0)
+ else if (script == EventScript_BattleColosseum_2P_PlayerSpot0)
return FACING_FORCED_RIGHT;
- else if (script == EventScript_SingleBattleColosseum_PlayerSpot1)
+ else if (script == EventScript_BattleColosseum_2P_PlayerSpot1)
return FACING_FORCED_LEFT;
else if (script == EventScript_TradeCenter_Chair0)
return FACING_FORCED_RIGHT;
@@ -3026,7 +3027,7 @@ static s32 sub_80878E4(u8 linkPlayerId)
static u8 GetLinkPlayerIdAt(s16 x, s16 y)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
if (gLinkPlayerEventObjects[i].active
&& (gLinkPlayerEventObjects[i].movementMode == 0 || gLinkPlayerEventObjects[i].movementMode == 2))
diff --git a/src/party_menu.c b/src/party_menu.c
index f4b749bde..bc4cf8c0b 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:
- if (InMultiBattleRoom() == TRUE || GetMonData(mon, MON_DATA_IS_EGG))
- returnVar = 1;
+ case PARTY_MENU_TYPE_FIELD:
+ if (InMultiPartnerRoom() == TRUE || GetMonData(mon, MON_DATA_IS_EGG))
+ 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,121 +3663,123 @@ 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;
}
}
bool8 FieldCallback_PrepareFadeInFromMenu(void)
{
- pal_fill_black();
- CreateTask(task_launch_hm_phase_2, 8);
+ FadeInFromBlack();
+ 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();
- DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], 1, 2, 3);
+ arrayPtr[12] = CreateLevelUpStatsWindow();
+ DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
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);
+ DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
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;
}
@@ -6272,7 +5186,7 @@ u8 GetItemEffectType(u16 item)
else
itemEffect = gItemEffectTable[item - ITEM_POTION];
- if ((itemEffect[0] & (ITEM0_HIGH_CRIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_MIST))
+ if ((itemEffect[0] & (ITEM0_DIRE_HIT | ITEM0_X_ATTACK)) || itemEffect[1] || itemEffect[2] || (itemEffect[3] & ITEM3_GUARD_SPEC))
return ITEM_EFFECT_X_ITEM;
else if (itemEffect[0] & ITEM0_SACRED_ASH)
return ITEM_EFFECT_SACRED_ASH;
@@ -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);
+ FadeInFromBlack();
+ 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;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
}
-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..bf3a5b01d 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
{
@@ -484,7 +484,7 @@ static void ItemStorageMenuProcessInput(u8 taskId)
static void ItemStorage_Deposit(u8 taskId)
{
gTasks[taskId].func = Task_ItemStorage_Deposit;
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
}
static void Task_ItemStorage_Deposit(u8 taskId)
@@ -508,7 +508,7 @@ void Mailbox_DoRedrawMailboxMenuAfterReturn(void)
sub_81973A4();
DrawDialogueFrame(0, 1);
InitItemStorageMenu(CreateTask(ItemStorage_HandleReturnToProcessInput, 0), 1);
- pal_fill_black();
+ FadeInFromBlack();
}
static void ItemStorage_HandleReturnToProcessInput(u8 taskId)
@@ -714,7 +714,7 @@ static void Mailbox_MailOptionsProcessInput(u8 taskId)
static void Mailbox_DoMailRead(u8 taskId)
{
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].func = Mailbox_FadeAndReadMail;
}
@@ -745,7 +745,7 @@ static void pal_fill_for_maplights_or_black(void)
Mailbox_DrawMailboxMenu(taskId);
else
DestroyTask(taskId);
- pal_fill_black();
+ FadeInFromBlack();
}
static void Mailbox_HandleReturnToProcessInput(u8 taskId)
@@ -813,7 +813,7 @@ static void Mailbox_Give(u8 taskId)
Mailbox_NoPokemonForMail(taskId);
else
{
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
gTasks[taskId].func = Mailbox_DoGiveMailPokeMenu;
}
}
@@ -824,7 +824,7 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId)
{
sub_81D1EC0();
CleanupOverworldWindowsAndTilemaps();
- sub_81B8448();
+ ChooseMonToGiveMailFromMailbox();
DestroyTask(taskId);
}
}
@@ -852,7 +852,7 @@ static void Mailbox_UpdateMailListAfterDeposit(void)
Mailbox_DrawMailboxMenu(taskId);
else
DestroyTask(taskId);
- pal_fill_black();
+ FadeInFromBlack();
}
static void Mailbox_NoPokemonForMail(u8 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..d473f9ba0 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -95,10 +95,10 @@ const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] =
static const struct OamData sBallOamData =
{
.y = 0,
- .affineMode = 3,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -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 0d8469132..b9031e173 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -1,9 +1,8 @@
#include "global.h"
-#include "alloc.h"
+#include "malloc.h"
#include "battle.h"
#include "battle_controllers.h"
#include "battle_message.h"
-#include "berry.h"
#include "bg.h"
#include "decompress.h"
#include "event_data.h"
@@ -30,6 +29,7 @@
#include "task.h"
#include "text.h"
#include "text_window.h"
+#include "constants/berry.h"
#include "constants/items.h"
#include "constants/songs.h"
#include "constants/rgb.h"
@@ -219,10 +219,10 @@ static const u8 sContestStatsMonData[] = {MON_DATA_COOL, MON_DATA_BEAUTY, MON_DA
static const struct OamData sOamData_PokeblockCase =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -451,7 +451,7 @@ void OpenPokeblockCase(u8 caseId, void (*callback)(void))
sPokeblockMenu->pokeblockOptionsIds = sActionsWhenGivingToLady;
sPokeblockMenu->optionsNo = ARRAY_COUNT(sActionsWhenGivingToLady);
break;
- default:
+ default: // PBLOCK_CASE_FIELD
sPokeblockMenu->pokeblockOptionsIds = sActionsOnField;
sPokeblockMenu->optionsNo = ARRAY_COUNT(sActionsOnField);
break;
@@ -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)
@@ -928,7 +928,7 @@ static void sub_8136470(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
- sprite->oam.affineMode = 1;
+ sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
sprite->affineAnims = sSpriteAffineAnimTable_85B26F0;
InitSpriteAffineAnim(sprite);
sprite->data[0] = 1;
@@ -937,7 +937,7 @@ static void sub_8136470(struct Sprite *sprite)
case 1:
if (++sprite->data[1] > 11)
{
- sprite->oam.affineMode = 0;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
sprite->data[0] = 0;
sprite->data[1] = 0;
FreeOamMatrix(sprite->oam.matrixNum);
@@ -960,7 +960,7 @@ static void Task_FreeDataAndExitPokeblockCase(u8 taskId)
if (!gPaletteFade.active)
{
if (sPokeblockMenu->caseId == PBLOCK_CASE_FEEDER || sPokeblockMenu->caseId == PBLOCK_CASE_GIVE)
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
sub_8136418();
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index 4ad15414d..5edf14309 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"
@@ -459,10 +459,10 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_85F066C[] =
static const struct OamData sThrownPokeblockOamData =
{
.y = 0,
- .affineMode = 3,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -833,7 +833,7 @@ static u8 CreateMonSprite(struct Pokemon* mon)
if (!IsMonSpriteNotFlipped(species))
{
gSprites[spriteId].affineAnims = sSpriteAffineAnimTable_MonNoFlip;
- gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
sPokeblockFeed->noMonFlip = FALSE;
}
@@ -869,7 +869,7 @@ static void sub_817A468(struct Sprite* sprite)
static u8 CreatePokeblockCaseSpriteForFeeding(void)
{
u8 spriteId = CreatePokeblockCaseSprite(188, 100, 2);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].affineAnims = sSpriteAffineAnimTable_85F0664;
gSprites[spriteId].callback = SpriteCallbackDummy;
InitSpriteAffineAnim(&gSprites[spriteId]);
@@ -879,7 +879,7 @@ static u8 CreatePokeblockCaseSpriteForFeeding(void)
static void DoPokeblockCaseThrowEffect(u8 spriteId, bool8 a1)
{
FreeOamMatrix(gSprites[spriteId].oam.matrixNum);
- gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
if (!a1)
gSprites[spriteId].affineAnims = sSpriteAffineAnimTable_85F0668;
@@ -947,7 +947,7 @@ static void sub_817A634(void)
sub_817A91C();
if (sNatureToMonPokeblockAnim[pokeblockFeed->nature][1] != 0)
{
- pokeblockFeed->monSpritePtr->oam.affineMode = 3;
+ pokeblockFeed->monSpritePtr->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
pokeblockFeed->monSpritePtr->oam.matrixNum = 0;
pokeblockFeed->monSpritePtr->affineAnims = sSpriteAffineAnimTable_85F04FC;
InitSpriteAffineAnim(pokeblockFeed->monSpritePtr);
diff --git a/src/pokedex.c b/src/pokedex.c
index c1787ef6a..78c204d2d 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"
@@ -52,7 +52,7 @@ struct UnknownStruct1
const struct PokedexOption *pokedexList;
u8 unk4;
u8 unk5;
- u16 unk6;
+ u16 numOptions;
};
struct UnknownStruct3
@@ -99,7 +99,7 @@ struct PokedexView
u16 unk618;
u16 seenCount;
u16 ownCount;
- u16 unk61E[4];
+ u16 monSpriteIds[4];
u16 selectedMonSpriteId;
u16 unk628;
u16 unk62A;
@@ -140,7 +140,7 @@ void sub_80BB78C(u8);
void sub_80BB7D4(u8);
void sub_80BBA28(u8);
void sub_80BBA78(u8);
-void sub_80BBBF4(u8);
+void LoadPageOnceMonFinishedMoving(u8);
void sub_80BBC74(u8);
void sub_80BBD1C(u8);
void sub_80BBDE8(u8);
@@ -154,22 +154,22 @@ void sub_80BC3DC(u8);
void sub_80BC47C(u8);
bool8 sub_80BC514(u8);
static void LoadPokedexBgPalette(u8);
-void sub_80BC890(void);
-void sub_80BC8D4(u8, u8);
+static void FreeWindowAndBgBuffers(void);
+static void CreatePokedexList(u8 dexMode, u8 sortMode);
static void CreateMonDexNum(u16, u8, u8, u16);
static void CreateCaughtBall(u16, u8, u8, u16);
static u8 CreateMonName(u16, u8, u8);
-void sub_80BD28C(u8, u8, u16);
+static void ClearMonListEntry(u8 x, u8 y, u16 unused);
static void CreateInitialPokemonSprites(u16, u16);
bool8 sub_80BD404(u8, u8, u8);
u16 sub_80BD69C(u16, u16);
-void sub_80BD8D0(void);
-bool8 sub_80BD930(void);
-u8 sub_80BDA40(void);
+static void UpdateSelectedMonSpriteId(void);
+static bool8 UpdateSelectedMon(void);
+static u8 ClearMonSprites(void);
u16 GetPokemonSpriteToDisplay(u16);
u32 sub_80BDACC(u16, s16, s16);
static void CreateInterfaceSprites(u8);
-void sub_80BE470(struct Sprite *sprite);
+void MoveMonIntoPosition(struct Sprite *sprite);
static void SpriteCB_Scrollbar(struct Sprite *sprite);
void sub_80BE658(struct Sprite *sprite);
void sub_80BE758(struct Sprite *sprite);
@@ -177,42 +177,42 @@ void sub_80BE780(struct Sprite *sprite);
void sub_80BE44C(struct Sprite *sprite);
void sub_80BE834(struct Sprite *sprite);
void sub_80BE4E0(struct Sprite *sprite);
-u8 sub_80BE91C(struct PokedexListItem*, u8);
+u8 SetupInfoScreen(struct PokedexListItem*, u8 monSpriteId);
bool8 sub_80BE9C4(u8);
u8 sub_80BE9F8(struct PokedexListItem*, u8);
-void sub_80BEA24(u8);
-void sub_80BEDF4(u8);
-void sub_80BEFD0(u8);
-void sub_80BF038(u8);
-void sub_80BF070(u8);
-void sub_80BF0AC(u8);
-void sub_80BF1B4(u8);
+void LoadInfoScreen(u8);
+void ChangePokedexScreen(u8);
+void LoadSelectedScreen(u8);
+void BeginChangeInfoScreen(u8);
+void BeginReturnToPokedex(u8);
+void LoadAreaScreen(u8);
+static void WaitForAreaScreenInput(u8 taskId);
void sub_80BF1EC(u8);
-void sub_80BF250(u8);
+void LoadCryScreen(u8);
void sub_80BF5CC(u8);
void sub_80BF790(u8);
void sub_80BF7FC(u8);
-void sub_80BF82C(u8);
+void LoadSizeScreen(u8);
void sub_80BFBB0(u8);
void sub_80BFC78(u8);
void sub_80BFCDC(u16);
void sub_80BFCF4(u16);
void sub_80BFD0C(u8, u16);
void sub_80BFD7C(u8, u16);
-void sub_80BFE38(u8);
+static void Task_DisplayNewMonData(u8);
void sub_80C0088(u8);
void blockset_load_palette_to_gpu(u8);
void sub_80C01CC(struct Sprite *sprite);
-void sub_80C020C(u32, u32, u32, u32);
-void sub_80C0354(u16, u8, u8);
-void sub_80C0460(u16 weight, u8 left, u8 top);
-void sub_80C09B0(u16);
+static void PrintMonInfo(u32 num, u32, u32 owned, u32 newEntry);
+static void PrintMonHeight(u16 height, u8 left, u8 top);
+static void PrintMonWeight(u16 weight, u8 left, u8 top);
+static void ResetOtherVideoRegisters(u16);
u8 sub_80C0B44(u8, u16, u8, u8);
-void sub_80C0D30(u8, u16);
+static void PrintFootprint(u8 windowId, u16 dexNum);
u16 sub_80C0EF8(u16, s16, s16, s8);
u16 sub_80C0E0C(u8, u16, u16, u16);
-u8 sub_80C1258();
-void sub_80C12E0(u8);
+u8 LoadSearchMenu(void);
+void Task_LoadSearchMenu(u8);
void sub_80C1570(u8);
void sub_80C15B0(u8);
void sub_80C16CC(u8);
@@ -229,7 +229,7 @@ void sub_80C2064(u8, u8);
void sub_80C20F8(u8);
void sub_80C21D4(u8);
void sub_80C2294(u8);
-u8 sub_80C2318(u8, u8);
+static u8 GetSearchModeSelection(u8 taskId, u8 option);
void sub_80C23B8(u8);
void sub_80C2594(u8);
void sub_80C2618(const u8*);
@@ -244,10 +244,10 @@ void sub_80C267C(void);
static const struct OamData sOamData_855CFE4 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -261,10 +261,10 @@ static const struct OamData sOamData_855CFE4 =
static const struct OamData sOamData_855CFEC =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
.matrixNum = 0,
@@ -278,10 +278,10 @@ static const struct OamData sOamData_855CFEC =
static const struct OamData sOamData_855CFF4 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
@@ -295,10 +295,10 @@ static const struct OamData sOamData_855CFF4 =
static const struct OamData sOamData_855CFFC =
{
.y = 160,
- .affineMode = 0,
- .objMode = 2,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_WINDOW,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -312,10 +312,10 @@ static const struct OamData sOamData_855CFFC =
static const struct OamData sOamData_855D004 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
@@ -329,10 +329,10 @@ static const struct OamData sOamData_855D004 =
static const struct OamData sOamData_855D00C =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x16),
.x = 0,
.matrixNum = 0,
@@ -717,7 +717,7 @@ static const struct SpritePalette sInterfaceSpritePalette[] =
static const u8 gUnknown_0855D28C[] = {0x4, 0x8, 0x10, 0x20, 0x20};
static const u8 gUnknown_0855D291[] = {0x8, 0x4, 0x2, 0x1, 0x1};
-static const struct BgTemplate gBgTemplates_0855D298[] =
+static const struct BgTemplate sPokedex_BgTemplate[] =
{
{
.bg = 0,
@@ -782,7 +782,7 @@ ALIGNED(4) static const u8 gExpandedPlaceholder_PokedexDescription[] = _("");
static const u16 gUnknown_0856E610[] = INCBIN_U16("graphics/pokedex/black.gbapal");
-static const struct BgTemplate gUnknown_0856E630[] =
+static const struct BgTemplate sInfoScreen_BgTemplate[] =
{
{
.bg = 0,
@@ -822,9 +822,14 @@ static const struct BgTemplate gUnknown_0856E630[] =
}
};
-static const struct WindowTemplate gUnknown_0856E640[] =
+#define WIN_INFO 0
+#define WIN_FOOTPRINT 1
+#define WIN_CRY_WAVE 2
+#define WIN_VU_METER 3
+
+static const struct WindowTemplate sInfoScreen_WindowTemplates[] =
{
- {
+ { // WIN_INFO
.bg = 2,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -833,7 +838,7 @@ static const struct WindowTemplate gUnknown_0856E640[] =
.paletteNum = 0,
.baseBlock = 0x0001,
},
- {
+ { // WIN_FOOTPRINT
.bg = 2,
.tilemapLeft = 25,
.tilemapTop = 8,
@@ -842,7 +847,7 @@ static const struct WindowTemplate gUnknown_0856E640[] =
.paletteNum = 15,
.baseBlock = 0x0281,
},
- {
+ { // WIN_CRY_WAVE
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 12,
@@ -851,7 +856,7 @@ static const struct WindowTemplate gUnknown_0856E640[] =
.paletteNum = 8,
.baseBlock = 0x0285,
},
- {
+ { // WIN_VU_METER
.bg = 2,
.tilemapLeft = 18,
.tilemapTop = 3,
@@ -863,7 +868,7 @@ static const struct WindowTemplate gUnknown_0856E640[] =
DUMMY_WIN_TEMPLATE
};
-static const struct BgTemplate gUnknown_0856E668[] =
+static const struct BgTemplate sNewEntryInfoScreen_BgTemplate[] =
{
{
.bg = 2,
@@ -885,9 +890,9 @@ static const struct BgTemplate gUnknown_0856E668[] =
},
};
-static const struct WindowTemplate gUnknown_0856E670[] =
+static const struct WindowTemplate sNewEntryInfoScreen_WindowTemplates[] =
{
- {
+ { // WIN_INFO
.bg = 2,
.tilemapLeft = 0,
.tilemapTop = 0,
@@ -896,7 +901,7 @@ static const struct WindowTemplate gUnknown_0856E670[] =
.paletteNum = 0,
.baseBlock = 0x0001,
},
- {
+ { // WIN_FOOTPRINT
.bg = 2,
.tilemapLeft = 25,
.tilemapTop = 8,
@@ -929,19 +934,19 @@ static const u8 gUnknown_0856ED08[][4] =
static const struct UnknownStruct3 gUnknown_0856ED30[] =
{
{
- .text = gUnknown_085E87A5,
+ .text = gText_SearchForPkmnBasedOnParameters,
.unk4 = 0,
.unk5 = 0,
.unk6 = 5,
},
{
- .text = gUnknown_085E87D6,
+ .text = gText_SwitchPokedexListings,
.unk4 = 6,
.unk5 = 0,
.unk6 = 5,
},
{
- .text = gUnknown_085E87EF,
+ .text = gText_ReturnToPokedex,
.unk4 = 12,
.unk5 = 0,
.unk6 = 5,
@@ -951,7 +956,7 @@ static const struct UnknownStruct3 gUnknown_0856ED30[] =
static const struct UnknownStruct4 gUnknown_0856ED48[] =
{
{
- .text = gUnknown_085E8840,
+ .text = gText_ListByFirstLetter,
.unk4 = 0,
.unk5 = 2,
.unk6 = 5,
@@ -960,7 +965,7 @@ static const struct UnknownStruct4 gUnknown_0856ED48[] =
.unk9 = 12,
},
{
- .text = gUnknown_085E887C,
+ .text = gText_ListByBodyColor,
.unk4 = 0,
.unk5 = 4,
.unk6 = 5,
@@ -969,7 +974,7 @@ static const struct UnknownStruct4 gUnknown_0856ED48[] =
.unk9 = 12,
},
{
- .text = gUnknown_085E88A6,
+ .text = gText_ListByType,
.unk4 = 0,
.unk5 = 6,
.unk6 = 5,
@@ -978,7 +983,7 @@ static const struct UnknownStruct4 gUnknown_0856ED48[] =
.unk9 = 6,
},
{
- .text = gUnknown_085E88A6,
+ .text = gText_ListByType,
.unk4 = 0,
.unk5 = 6,
.unk6 = 5,
@@ -987,7 +992,7 @@ static const struct UnknownStruct4 gUnknown_0856ED48[] =
.unk9 = 6,
},
{
- .text = gUnknown_085E881F,
+ .text = gText_SelectPokedexListingMode,
.unk4 = 0,
.unk5 = 8,
.unk6 = 5,
@@ -996,7 +1001,7 @@ static const struct UnknownStruct4 gUnknown_0856ED48[] =
.unk9 = 12,
},
{
- .text = gUnknown_085E8806,
+ .text = gText_SelectPokedexMode,
.unk4 = 0,
.unk5 = 10,
.unk6 = 5,
@@ -1005,7 +1010,7 @@ static const struct UnknownStruct4 gUnknown_0856ED48[] =
.unk9 = 12,
},
{
- .text = gUnknown_085E88C8,
+ .text = gText_ExecuteSearchSwitch,
.unk4 = 0,
.unk5 = 12,
.unk6 = 5,
@@ -1131,9 +1136,34 @@ static const struct PokedexOption gDexSearchTypeOptions[] =
{NULL, NULL},
};
-static const u8 gUnknown_0856EFAC[] = {0x00, 0x01};
-static const u8 gUnknown_0856EFAE[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
-static const u8 gDexSearchTypeIds[] = {
+
+#define SEARCH_NAME 0
+#define SEARCH_COLOR 1
+#define SEARCH_TYPE_1 2
+#define SEARCH_TYPE_2 3
+#define SEARCH_ORDER 4
+#define SEARCH_DEX_MODE 5
+
+#define SORT_NUMERICAL 0
+#define SORT_ALPHABETICAL 1
+#define SORT_HEAVIEST 2
+#define SORT_LIGHTEST 3
+#define SORT_TALLEST 4
+#define SORT_SMALLEST 5
+
+static const u8 sPokedexModes[] = {DEX_MODE_HOENN, DEX_MODE_NATIONAL};
+static const u8 sSortOptions[] =
+{
+ SORT_NUMERICAL,
+ SORT_ALPHABETICAL,
+ SORT_HEAVIEST,
+ SORT_LIGHTEST,
+ SORT_TALLEST,
+ SORT_SMALLEST,
+};
+
+static const u8 gDexSearchTypeIds[] =
+{
TYPE_NONE,
TYPE_NORMAL,
TYPE_FIGHTING,
@@ -1154,7 +1184,7 @@ static const u8 gDexSearchTypeIds[] = {
TYPE_DARK,
};
-static const struct UnknownStruct1 gUnknown_0856EFC8[] =
+static const struct UnknownStruct1 sSearchOptions[] =
{
{gDexSearchAlphaOptions, 6, 7, 10},
{gDexSearchColorOptions, 8, 9, 11},
@@ -1164,7 +1194,7 @@ static const struct UnknownStruct1 gUnknown_0856EFC8[] =
{gDexModeOptions, 2, 3, 2},
};
-static const struct BgTemplate gUnknown_0856EFF8[] =
+static const struct BgTemplate sSearchMenu_BgTemplate[] =
{
{
.bg = 0,
@@ -1204,7 +1234,7 @@ static const struct BgTemplate gUnknown_0856EFF8[] =
}
};
-static const struct WindowTemplate gUnknown_0856F008[] =
+static const struct WindowTemplate sSearchMenu_WindowTemplate[] =
{
{
.bg = 2,
@@ -1280,7 +1310,7 @@ static void ResetPokedexView(struct PokedexView *pokedexView)
pokedexView->seenCount = 0;
pokedexView->ownCount = 0;
for (i = 0; i < 4; i++)
- pokedexView->unk61E[i] = 0xFFFF;
+ pokedexView->monSpriteIds[i] = 0xFFFF;
pokedexView->unk628 = 0;
pokedexView->unk62A = 0;
pokedexView->unk62C = 0;
@@ -1318,7 +1348,7 @@ void CB2_Pokedex(void)
case 0:
default:
SetVBlankCallback(NULL);
- sub_80C09B0(0);
+ ResetOtherVideoRegisters(0);
DmaFillLarge16(3, 0, (u8 *)VRAM, VRAM_SIZE, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
@@ -1347,13 +1377,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++;
@@ -1362,7 +1392,7 @@ void CB2_Pokedex(void)
EnableInterrupts(1);
SetVBlankCallback(sub_80BB370);
SetMainCallback2(sub_80BB774);
- sub_80BC8D4(sPokedexView->dexMode, sPokedexView->dexOrder);
+ CreatePokedexList(sPokedexView->dexMode, sPokedexView->dexOrder);
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80);
break;
}
@@ -1395,12 +1425,12 @@ void sub_80BB7D4(u8 taskId)
{
if ((gMain.newKeys & A_BUTTON) && sPokedexView->pokedexList[sPokedexView->selectedPokemon].seen)
{
- sub_80BD8D0();
+ UpdateSelectedMonSpriteId();
BeginNormalPaletteFade(~(1 << (gSprites[sPokedexView->selectedMonSpriteId].oam.paletteNum + 16)), 0, 0, 0x10, RGB_BLACK);
- gSprites[sPokedexView->selectedMonSpriteId].callback = sub_80BE470;
- gTasks[taskId].func = sub_80BBBF4;
+ gSprites[sPokedexView->selectedMonSpriteId].callback = MoveMonIntoPosition;
+ gTasks[taskId].func = LoadPageOnceMonFinishedMoving;
PlaySE(SE_PIN);
- sub_80BC890();
+ FreeWindowAndBgBuffers();
}
else if (gMain.newKeys & START_BUTTON)
{
@@ -1415,7 +1445,7 @@ void sub_80BB7D4(u8 taskId)
{
PlaySE(SE_SELECT);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].data[0] = sub_80C1258();
+ gTasks[taskId].data[0] = LoadSearchMenu();
sPokedexView->unk64E = 0;
sPokedexView->unk62A = sPokedexView->unk62C;
sPokedexView->unk610 = sPokedexView->selectedPokemon;
@@ -1423,7 +1453,7 @@ void sub_80BB7D4(u8 taskId)
sPokedexView->unk618 = sPokedexView->dexOrder;
gTasks[taskId].func = sub_80BBD1C;
PlaySE(SE_PC_LOGIN);
- sub_80BC890();
+ FreeWindowAndBgBuffers();
}
else if (gMain.newKeys & B_BUTTON)
{
@@ -1469,14 +1499,14 @@ void sub_80BBA78(u8 taskId)
case 1: //LIST TOP
sPokedexView->selectedPokemon = 0;
sPokedexView->unk62C = 0x40;
- sub_80BDA40();
+ ClearMonSprites();
CreateInitialPokemonSprites(sPokedexView->selectedPokemon, 0xE);
gMain.newKeys |= START_BUTTON; //Exit menu
break;
case 2: //LIST BOTTOM
sPokedexView->selectedPokemon = sPokedexView->pokemonListCount - 1;
sPokedexView->unk62C = sPokedexView->pokemonListCount * 16 + 0x30;
- sub_80BDA40();
+ ClearMonSprites();
CreateInitialPokemonSprites(sPokedexView->selectedPokemon, 0xE);
gMain.newKeys |= START_BUTTON; //Exit menu
break;
@@ -1508,12 +1538,12 @@ void sub_80BBA78(u8 taskId)
}
}
-void sub_80BBBF4(u8 taskId)
+void LoadPageOnceMonFinishedMoving(u8 taskId)
{
if (gSprites[sPokedexView->selectedMonSpriteId].pos1.x == 48 && gSprites[sPokedexView->selectedMonSpriteId].pos1.y == 56)
{
sPokedexView->unk64B = sPokedexView->unk64A;
- gTasks[taskId].data[0] = sub_80BE91C(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId);
+ gTasks[taskId].data[0] = SetupInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId);
gTasks[taskId].func = sub_80BBC74;
}
}
@@ -1522,7 +1552,7 @@ void sub_80BBC74(u8 taskId)
{
if (gTasks[gTasks[taskId].data[0]].isActive)
{
- if (sPokedexView->unk64A == 1 && !sub_80BE9C4(gTasks[taskId].data[0]) && sub_80BD930())
+ if (sPokedexView->unk64A == 1 && !sub_80BE9C4(gTasks[taskId].data[0]) && UpdateSelectedMon())
sub_80BE9F8(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].data[0]);
}
else
@@ -1537,7 +1567,7 @@ void sub_80BBD1C(u8 taskId)
{
if (!gTasks[gTasks[taskId].data[0]].isActive)
{
- sub_80BDA40();
+ ClearMonSprites();
if (sPokedexView->unk64E != 0)
{
sPokedexView->selectedPokemon = 0;
@@ -1565,8 +1595,8 @@ void sub_80BBDE8(u8 taskId)
if (!IsNationalPokedexEnabled())
gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
gSaveBlock2Ptr->pokedex.order = sPokedexView->dexOrder;
- sub_80BDA40();
- sub_80BC890();
+ ClearMonSprites();
+ FreeWindowAndBgBuffers();
DestroyTask(taskId);
SetMainCallback2(CB2_ReturnToFieldWithOpenMenu);
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
@@ -1595,13 +1625,13 @@ void sub_80BBEB8(u8 taskId)
{
u32 a;
- sub_80BD8D0();
+ UpdateSelectedMonSpriteId();
a = (1 << (gSprites[sPokedexView->selectedMonSpriteId].oam.paletteNum + 16));
- gSprites[sPokedexView->selectedMonSpriteId].callback = sub_80BE470;
+ gSprites[sPokedexView->selectedMonSpriteId].callback = MoveMonIntoPosition;
BeginNormalPaletteFade(~a, 0, 0, 0x10, RGB_BLACK);
gTasks[taskId].func = sub_80BC2D4;
PlaySE(SE_PIN);
- sub_80BC890();
+ FreeWindowAndBgBuffers();
}
else if (gMain.newKeys & START_BUTTON)
{
@@ -1614,11 +1644,11 @@ void sub_80BBEB8(u8 taskId)
else if (gMain.newKeys & SELECT_BUTTON)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].data[0] = sub_80C1258();
+ gTasks[taskId].data[0] = LoadSearchMenu();
sPokedexView->unk64E = 0;
gTasks[taskId].func = sub_80BBD1C;
PlaySE(SE_PC_LOGIN);
- sub_80BC890();
+ FreeWindowAndBgBuffers();
}
else if (gMain.newKeys & B_BUTTON)
{
@@ -1663,14 +1693,14 @@ static void HandleButtonPress_StartMenu(u8 taskId)
case 1: //LIST TOP
sPokedexView->selectedPokemon = 0;
sPokedexView->unk62C = 0x40;
- sub_80BDA40();
+ ClearMonSprites();
CreateInitialPokemonSprites(sPokedexView->selectedPokemon, 0xE);
gMain.newKeys |= START_BUTTON;
break;
case 2: //LIST BOTTOM
sPokedexView->selectedPokemon = sPokedexView->pokemonListCount - 1;
sPokedexView->unk62C = sPokedexView->pokemonListCount * 16 + 0x30;
- sub_80BDA40();
+ ClearMonSprites();
CreateInitialPokemonSprites(sPokedexView->selectedPokemon, 0xE);
gMain.newKeys |= START_BUTTON;
break;
@@ -1712,7 +1742,7 @@ void sub_80BC2D4(u8 taskId)
if (gSprites[sPokedexView->selectedMonSpriteId].pos1.x == 48 && gSprites[sPokedexView->selectedMonSpriteId].pos1.y == 56)
{
sPokedexView->unk64B = sPokedexView->unk64A;
- gTasks[taskId].data[0] = sub_80BE91C(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId);
+ gTasks[taskId].data[0] = SetupInfoScreen(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], sPokedexView->selectedMonSpriteId);
sPokedexView->selectedMonSpriteId = -1;
gTasks[taskId].func = sub_80BC360;
}
@@ -1722,7 +1752,7 @@ void sub_80BC360(u8 taskId)
{
if (gTasks[gTasks[taskId].data[0]].isActive)
{
- if (sPokedexView->unk64A == 1 && !sub_80BE9C4(gTasks[taskId].data[0]) && sub_80BD930())
+ if (sPokedexView->unk64A == 1 && !sub_80BE9C4(gTasks[taskId].data[0]) && UpdateSelectedMon())
sub_80BE9F8(&sPokedexView->pokedexList[sPokedexView->selectedPokemon], gTasks[taskId].data[0]);
}
else
@@ -1742,8 +1772,8 @@ void sub_80BC3DC(u8 taskId)
sPokedexView->dexMode = DEX_MODE_HOENN;
sPokedexView->dexOrder = sPokedexView->unk618;
gTasks[taskId].func = sub_80BB78C;
- sub_80BDA40();
- sub_80BC890();
+ ClearMonSprites();
+ FreeWindowAndBgBuffers();
}
}
@@ -1771,10 +1801,10 @@ bool8 sub_80BC514(u8 a)
return 0;
SetVBlankCallback(NULL);
sPokedexView->unk64A = a;
- sub_80C09B0(0);
+ ResetOtherVideoRegisters(0);
SetGpuReg(REG_OFFSET_BG2VOFS, sPokedexView->initialVOffset);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gBgTemplates_0855D298, 4);
+ InitBgsFromTemplates(0, sPokedex_BgTemplate, 4);
SetBgTilemapBuffer(3, AllocZeroed(0x800));
SetBgTilemapBuffer(2, AllocZeroed(0x800));
SetBgTilemapBuffer(1, AllocZeroed(0x800));
@@ -1812,7 +1842,7 @@ bool8 sub_80BC514(u8 a)
break;
case 3:
if (a == 0)
- sub_80BC8D4(sPokedexView->dexMode, sPokedexView->dexOrder);
+ CreatePokedexList(sPokedexView->dexMode, sPokedexView->dexOrder);
CreateInitialPokemonSprites(sPokedexView->selectedPokemon, 0xE);
sPokedexView->menuIsOpen = 0;
sPokedexView->menuY = 0;
@@ -1866,7 +1896,7 @@ static void LoadPokedexBgPalette(u8 a)
LoadPalette(GetOverworldTextboxPalettePtr(), 0xF0, 32);
}
-void sub_80BC890(void)
+static void FreeWindowAndBgBuffers(void)
{
void* tilemapBuffer;
@@ -1885,7 +1915,7 @@ void sub_80BC890(void)
Free(tilemapBuffer);
}
-void sub_80BC8D4(u8 dexMode, u8 sortMode)
+static void CreatePokedexList(u8 dexMode, u8 sortMode)
{
u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever.
#define temp_dexCount vars[0]
@@ -1918,7 +1948,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
switch (sortMode)
{
- case 0:
+ case SORT_NUMERICAL:
if (temp_isHoennDex)
{
for (i = 0; i < temp_dexCount; i++)
@@ -1955,7 +1985,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
}
}
break;
- case 1:
+ case SORT_ALPHABETICAL:
for (i = 0; i < POKEMON_SLOTS_NUMBER - 1; i++)
{
temp_dexNum = gPokedexOrder_Alphabetical[i];
@@ -1969,7 +1999,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
}
}
break;
- case 2:
+ case SORT_HEAVIEST:
for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--)
{
temp_dexNum = gPokedexOrder_Weight[i];
@@ -1983,7 +2013,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
}
}
break;
- case 3:
+ case SORT_LIGHTEST:
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
temp_dexNum = gPokedexOrder_Weight[i];
@@ -1997,7 +2027,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
}
}
break;
- case 4:
+ case SORT_TALLEST:
for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--)
{
temp_dexNum = gPokedexOrder_Height[i];
@@ -2011,7 +2041,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
}
}
break;
- case 5:
+ case SORT_SMALLEST:
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
temp_dexNum = gPokedexOrder_Height[i];
@@ -2060,11 +2090,11 @@ static void CreateMonListEntry(u8 direction, u16 b, u16 c)
{
if (_b < 0 || _b >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[_b].dexNum == 0xFFFF)
{
- sub_80BD28C(0x11, i * 2, c);
+ ClearMonListEntry(0x11, i * 2, c);
}
else
{
- sub_80BD28C(0x11, i * 2, c);
+ ClearMonListEntry(0x11, i * 2, c);
if (sPokedexView->pokedexList[_b].seen)
{
CreateMonDexNum(_b, 0x12, i * 2, c);
@@ -2085,11 +2115,11 @@ static void CreateMonListEntry(u8 direction, u16 b, u16 c)
_b = b - 5;
if (_b < 0 || _b >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[_b].dexNum == 0xFFFF)
{
- sub_80BD28C(0x11, sPokedexView->unk630 * 2, c);
+ ClearMonListEntry(0x11, sPokedexView->unk630 * 2, c);
}
else
{
- sub_80BD28C(0x11, sPokedexView->unk630 * 2, c);
+ ClearMonListEntry(0x11, sPokedexView->unk630 * 2, c);
if (sPokedexView->pokedexList[_b].seen)
{
CreateMonDexNum(_b, 0x12, sPokedexView->unk630 * 2, c);
@@ -2110,10 +2140,10 @@ static void CreateMonListEntry(u8 direction, u16 b, u16 c)
if (r2 > 15)
r2 -= 16;
if (_b < 0 || _b >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[_b].dexNum == 0xFFFF)
- sub_80BD28C(0x11, r2 * 2, c);
+ ClearMonListEntry(0x11, r2 * 2, c);
else
{
- sub_80BD28C(0x11, r2 * 2, c);
+ ClearMonListEntry(0x11, r2 * 2, c);
if (sPokedexView->pokedexList[_b].seen)
{
CreateMonDexNum(_b, 0x12, r2 * 2, c);
@@ -2168,7 +2198,7 @@ static u8 CreateMonName(u16 num, u8 left, u8 top)
return StringLength(str);
}
-void sub_80BD28C(u8 x, u8 y, u16 unused)
+static void ClearMonListEntry(u8 x, u8 y, u16 unused)
{
FillWindowPixelRect(0, PIXEL_FILL(0), x * 8, y * 8, 0x60, 16);
}
@@ -2182,7 +2212,7 @@ static void CreateInitialPokemonSprites(u16 selectedMon, u16 b)
gPaletteFade.bufferTransferDisabled = TRUE;
for (i = 0; i < 4; i++)
- sPokedexView->unk61E[i] = 0xFFFF;
+ sPokedexView->monSpriteIds[i] = 0xFFFF;
sPokedexView->selectedMonSpriteId = 0xFFFF;
unk = GetPokemonSpriteToDisplay(selectedMon - 1);
@@ -2231,8 +2261,8 @@ bool8 sub_80BD404(u8 a, u8 b, u8 c)
case 1:
for (i = 0; i < 4; i++)
{
- if (sPokedexView->unk61E[i] != 0xFFFF)
- gSprites[sPokedexView->unk61E[i]].data[5] += b;
+ if (sPokedexView->monSpriteIds[i] != 0xFFFF)
+ gSprites[sPokedexView->monSpriteIds[i]].data[5] += b;
}
foo = 16 * (c - sPokedexView->unk62E) / c;
SetGpuReg(REG_OFFSET_BG2VOFS, sPokedexView->initialVOffset + sPokedexView->unk632 * 16 - foo);
@@ -2241,8 +2271,8 @@ bool8 sub_80BD404(u8 a, u8 b, u8 c)
case 2:
for (i = 0; i < 4; i++)
{
- if (sPokedexView->unk61E[i] != 0xFFFF)
- gSprites[sPokedexView->unk61E[i]].data[5] -= b;
+ if (sPokedexView->monSpriteIds[i] != 0xFFFF)
+ gSprites[sPokedexView->monSpriteIds[i]].data[5] -= b;
}
foo = 16 * (c - sPokedexView->unk62E) / c;
SetGpuReg(REG_OFFSET_BG2VOFS, sPokedexView->initialVOffset + sPokedexView->unk632 * 16 + foo);
@@ -2326,7 +2356,7 @@ u16 sub_80BD69C(u16 selectedMon, u16 b)
for (i = 0; i < 7; i++)
selectedMon = sub_80C0E0C(1, selectedMon, 0, sPokedexView->pokemonListCount - 1);
sPokedexView->unk62C += 16 * (selectedMon - r6);
- sub_80BDA40();
+ ClearMonSprites();
CreateInitialPokemonSprites(selectedMon, 0xE);
PlaySE(SE_Z_PAGE);
}
@@ -2336,7 +2366,7 @@ u16 sub_80BD69C(u16 selectedMon, u16 b)
for (i = 0; i < 7; i++)
selectedMon = sub_80C0E0C(0, selectedMon, 0, sPokedexView->pokemonListCount - 1);
sPokedexView->unk62C += (selectedMon - r6) * 16;
- sub_80BDA40();
+ ClearMonSprites();
CreateInitialPokemonSprites(selectedMon, 0xE);
PlaySE(SE_Z_PAGE);
}
@@ -2360,20 +2390,20 @@ u16 sub_80BD69C(u16 selectedMon, u16 b)
return selectedMon;
}
-void sub_80BD8D0(void)
+static void UpdateSelectedMonSpriteId(void)
{
u16 i;
for (i = 0; i < 4; i++)
{
- u16 spriteId = sPokedexView->unk61E[i];
+ u16 spriteId = sPokedexView->monSpriteIds[i];
if (gSprites[spriteId].pos2.x == 0 && gSprites[spriteId].pos2.y == 0 && spriteId != 0xFFFF)
sPokedexView->selectedMonSpriteId = spriteId;
}
}
-u8 sub_80BD930(void)
+static bool8 UpdateSelectedMon(void)
{
u16 r2;
u16 r4 = sPokedexView->selectedPokemon;
@@ -2427,16 +2457,16 @@ u8 sub_80BD930(void)
return FALSE;
}
-u8 sub_80BDA40(void)
+static u8 ClearMonSprites(void)
{
u16 i;
for (i = 0; i < 4; i++)
{
- if (sPokedexView->unk61E[i] != 0xFFFF)
+ if (sPokedexView->monSpriteIds[i] != 0xFFFF)
{
- FreeAndDestroyMonPicSprite(sPokedexView->unk61E[i]);
- sPokedexView->unk61E[i] = 0xFFFF;
+ FreeAndDestroyMonPicSprite(sPokedexView->monSpriteIds[i]);
+ sPokedexView->monSpriteIds[i] = 0xFFFF;
}
}
return FALSE;
@@ -2458,16 +2488,16 @@ u32 sub_80BDACC(u16 num, s16 x, s16 y)
for (i = 0; i < 4; i++)
{
- if (sPokedexView->unk61E[i] == 0xFFFF)
+ if (sPokedexView->monSpriteIds[i] == 0xFFFF)
{
u8 spriteId = CreateMonSpriteFromNationalDexNumber(num, x, y, i);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.priority = 3;
gSprites[spriteId].data[0] = 0;
gSprites[spriteId].data[1] = i;
gSprites[spriteId].data[2] = NationalPokedexNumToSpecies(num);
- sPokedexView->unk61E[i] = spriteId;
+ sPokedexView->monSpriteIds[i] = spriteId;
return spriteId;
}
}
@@ -2501,13 +2531,13 @@ static void CreateInterfaceSprites(u8 a)
StartSpriteAnim(&gSprites[spriteId], 1);
spriteId = CreateSprite(&sRotatingPokeballSpriteTemplate, 0, 80, 2);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 30;
gSprites[spriteId].data[0] = 0x1E;
gSprites[spriteId].data[1] = 0;
spriteId = CreateSprite(&sRotatingPokeballSpriteTemplate, 0, 80, 2);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 31;
gSprites[spriteId].data[0] = 0x1F;
gSprites[spriteId].data[1] = 0x80;
@@ -2583,7 +2613,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 +2656,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);
@@ -2690,10 +2720,10 @@ void sub_80BE44C(struct Sprite *sprite)
}
//Move Pokemon into position for description page
-void sub_80BE470(struct Sprite *sprite)
+void MoveMonIntoPosition(struct Sprite *sprite)
{
sprite->oam.priority = 0;
- sprite->oam.affineMode = 0;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
sprite->pos2.x = 0;
sprite->pos2.y = 0;
if (sprite->pos1.x != 48 || sprite->pos1.y != 56)
@@ -2720,8 +2750,8 @@ void sub_80BE4E0(struct Sprite *sprite)
if (sPokedexView->unk64A != 0 && sPokedexView->unk64A != 3)
{
- FreeAndDestroyMonPicSprite(sPokedexView->unk61E[data1]);
- sPokedexView->unk61E[data1] = 0xFFFF;
+ FreeAndDestroyMonPicSprite(sPokedexView->monSpriteIds[data1]);
+ sPokedexView->monSpriteIds[data1] = 0xFFFF;
}
else
{
@@ -2746,8 +2776,8 @@ void sub_80BE4E0(struct Sprite *sprite)
if ((sprite->data[5] <= -64 || sprite->data[5] >= 64) && sprite->data[0] != 0)
{
- FreeAndDestroyMonPicSprite(sPokedexView->unk61E[data1]);
- sPokedexView->unk61E[data1] = 0xFFFF;
+ FreeAndDestroyMonPicSprite(sPokedexView->monSpriteIds[data1]);
+ sPokedexView->monSpriteIds[data1] = 0xFFFF;
}
}
}
@@ -2850,7 +2880,7 @@ void sub_80BE834(struct Sprite *sprite)
}
}
-void sub_80BE8DC(const u8* str, u8 left, u8 top)
+static void PrintInfoPageText(const u8* str, u8 left, u8 top)
{
u8 color[3];
color[0] = 0;
@@ -2860,25 +2890,27 @@ void sub_80BE8DC(const u8* str, u8 left, u8 top)
AddTextPrinterParameterized4(0, 1, left, top, 0, 0, color, -1, str);
}
-u8 sub_80BE91C(struct PokedexListItem* item, u8 b)
+#define tMonSpriteId data[4]
+
+u8 SetupInfoScreen(struct PokedexListItem* item, u8 monSpriteId)
{
u8 taskId;
sPokedexListItem = item;
- taskId = CreateTask(sub_80BEA24, 0);
+ taskId = CreateTask(LoadInfoScreen, 0);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = 1;
gTasks[taskId].data[2] = 0;
gTasks[taskId].data[3] = 0;
- gTasks[taskId].data[4] = b;
+ gTasks[taskId].tMonSpriteId = monSpriteId;
gTasks[taskId].data[5] = 255;
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0856E630, 4);
+ InitBgsFromTemplates(0, sInfoScreen_BgTemplate, 4);
SetBgTilemapBuffer(3, AllocZeroed(0x800));
SetBgTilemapBuffer(2, AllocZeroed(0x800));
SetBgTilemapBuffer(1, AllocZeroed(0x800));
SetBgTilemapBuffer(0, AllocZeroed(0x800));
- InitWindows(gUnknown_0856E640);
+ InitWindows(sInfoScreen_WindowTemplates);
DeactivateAllTextPrinters();
return taskId;
@@ -2886,7 +2918,7 @@ u8 sub_80BE91C(struct PokedexListItem* item, u8 b)
bool8 sub_80BE9C4(u8 taskId)
{
- if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == sub_80BEDF4)
+ if (gTasks[taskId].data[0] == 0 && gTasks[taskId].func == ChangePokedexScreen)
return FALSE;
else
return TRUE;
@@ -2902,7 +2934,7 @@ u8 sub_80BE9F8(struct PokedexListItem *item, u8 b)
return b;
}
-void sub_80BEA24(u8 taskId)
+void LoadInfoScreen(u8 taskId)
{
switch (gMain.state)
{
@@ -2917,21 +2949,21 @@ void sub_80BEA24(u8 taskId)
SetVBlankCallback(NULL);
r2 = 0;
if (gTasks[taskId].data[1] != 0)
- r2 += 0x1000;
+ r2 += DISPCNT_OBJ_ON;
if (gTasks[taskId].data[2] != 0)
- r2 |= 0x200;
- sub_80C09B0(r2);
+ r2 |= DISPCNT_BG1_ON;
+ ResetOtherVideoRegisters(r2);
gMain.state = 1;
}
break;
case 1:
DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, gPokedexTilemap_DescriptionScreen, 0, 0);
- FillWindowPixelBuffer(0, PIXEL_FILL(0));
- PutWindowTilemap(0);
- PutWindowTilemap(1);
- sub_80C0D30(1, sPokedexListItem->dexNum);
- CopyWindowToVram(1, 2);
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PutWindowTilemap(WIN_INFO);
+ PutWindowTilemap(WIN_FOOTPRINT);
+ PrintFootprint(WIN_FOOTPRINT, sPokedexListItem->dexNum);
+ CopyWindowToVram(WIN_FOOTPRINT, 2);
gMain.state++;
break;
case 2:
@@ -2944,10 +2976,10 @@ void sub_80BEA24(u8 taskId)
gMain.state++;
break;
case 4:
- sub_80C020C(sPokedexListItem->dexNum, sPokedexView->dexMode == 0 ? 0 : 1, sPokedexListItem->owned, 0);
+ PrintMonInfo(sPokedexListItem->dexNum, sPokedexView->dexMode == 0 ? 0 : 1, sPokedexListItem->owned, 0);
if (!sPokedexListItem->owned)
LoadPalette(gPlttBufferUnfaded + 1, 0x31, 0x1E);
- CopyWindowToVram(0, 3);
+ CopyWindowToVram(WIN_INFO, 3);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(3);
@@ -2956,20 +2988,20 @@ void sub_80BEA24(u8 taskId)
case 5:
if (gTasks[taskId].data[1] == 0)
{
- gTasks[taskId].data[4] = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0);
- gSprites[gTasks[taskId].data[4]].oam.priority = 0;
+ gTasks[taskId].tMonSpriteId = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0);
+ gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0;
}
gMain.state++;
break;
case 6:
{
- u32 r3 = 0;
+ u32 preservedPalettes = 0;
if (gTasks[taskId].data[2] != 0)
- r3 = 0x14;
+ preservedPalettes = 0x14; // each bit represents a palette index
if (gTasks[taskId].data[1] != 0)
- r3 |= (1 << (gSprites[gTasks[taskId].data[4]].oam.paletteNum + 16));
- BeginNormalPaletteFade(~r3, 0, 16, 0, RGB_BLACK);
+ preservedPalettes |= (1 << (gSprites[gTasks[taskId].tMonSpriteId].oam.paletteNum + 16));
+ BeginNormalPaletteFade(~preservedPalettes, 0, 16, 0, RGB_BLACK);
SetVBlankCallback(gUnknown_030060B4);
gMain.state++;
}
@@ -3009,13 +3041,13 @@ void sub_80BEA24(u8 taskId)
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = 1;
gTasks[taskId].data[3] = 1;
- gTasks[taskId].func = sub_80BEDF4;
+ gTasks[taskId].func = ChangePokedexScreen;
gMain.state = 0;
break;
}
}
-void sub_80BEDB0(void)
+static void FreeWindowAndBgBuffers_(void)
{
void *r0;
FreeAllWindowBuffers();
@@ -3033,19 +3065,19 @@ void sub_80BEDB0(void)
Free(r0);
}
-void sub_80BEDF4(u8 taskId)
+void ChangePokedexScreen(u8 taskId)
{
if (gTasks[taskId].data[0] != 0)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].func = sub_80BF038;
+ gTasks[taskId].func = BeginChangeInfoScreen;
PlaySE(SE_Z_SCROLL);
return;
}
if (gMain.newKeys & B_BUTTON)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
- gTasks[taskId].func = sub_80BF070;
+ gTasks[taskId].func = BeginReturnToPokedex;
PlaySE(SE_PC_OFF);
return;
}
@@ -3056,13 +3088,13 @@ void sub_80BEDF4(u8 taskId)
case AREA_SCREEN:
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 16, RGB_BLACK);
sPokedexView->unk64E = 1;
- gTasks[taskId].func = sub_80BEFD0;
+ gTasks[taskId].func = LoadSelectedScreen;
PlaySE(SE_PIN);
break;
case CRY_SCREEN:
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK);
sPokedexView->unk64E = 2;
- gTasks[taskId].func = sub_80BEFD0;
+ gTasks[taskId].func = LoadSelectedScreen;
PlaySE(SE_PIN);
break;
case SIZE_SCREEN:
@@ -3074,13 +3106,13 @@ void sub_80BEDF4(u8 taskId)
{
BeginNormalPaletteFade(0xFFFFFFEB, 0, 0, 0x10, RGB_BLACK);
sPokedexView->unk64E = 3;
- gTasks[taskId].func = sub_80BEFD0;
+ gTasks[taskId].func = LoadSelectedScreen;
PlaySE(SE_PIN);
}
break;
case CANCEL_SCREEN:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].func = sub_80BF070;
+ gTasks[taskId].func = BeginReturnToPokedex;
PlaySE(SE_PC_OFF);
break;
}
@@ -3106,47 +3138,47 @@ void sub_80BEDF4(u8 taskId)
}
}
-void sub_80BEFD0(u8 taskId)
+void LoadSelectedScreen(u8 taskId)
{
if (!gPaletteFade.active)
{
- FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
+ FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId);
switch (sPokedexView->unk64E)
{
case 1:
default:
- gTasks[taskId].func = sub_80BF0AC;
+ gTasks[taskId].func = LoadAreaScreen;
break;
case 2:
- gTasks[taskId].func = sub_80BF250;
+ gTasks[taskId].func = LoadCryScreen;
break;
case 3:
- gTasks[taskId].func = sub_80BF82C;
+ gTasks[taskId].func = LoadSizeScreen;
break;
}
}
}
-void sub_80BF038(u8 taskId)
+void BeginChangeInfoScreen(u8 taskId)
{
if (!gPaletteFade.active)
{
- FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
- gTasks[taskId].func = sub_80BEA24;
+ FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId);
+ gTasks[taskId].func = LoadInfoScreen;
}
}
-void sub_80BF070(u8 taskId)
+void BeginReturnToPokedex(u8 taskId)
{
if (!gPaletteFade.active)
{
- FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
- sub_80BEDB0();
+ FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId);
+ FreeWindowAndBgBuffers_();
DestroyTask(taskId);
}
}
-void sub_80BF0AC(u8 taskId)
+void LoadAreaScreen(u8 taskId)
{
switch (gMain.state)
{
@@ -3157,7 +3189,7 @@ void sub_80BF0AC(u8 taskId)
sPokedexView->unk64A = 5;
gUnknown_030060B4 = gMain.vblankCallback;
SetVBlankCallback(NULL);
- sub_80C09B0(0x200);
+ ResetOtherVideoRegisters(DISPCNT_BG1_ON);
sPokedexView->selectedScreen = AREA_SCREEN;
gMain.state = 1;
}
@@ -3174,13 +3206,14 @@ void sub_80BF0AC(u8 taskId)
SetVBlankCallback(gUnknown_030060B4);
sPokedexView->unk64E = 0;
gMain.state = 0;
- gTasks[taskId].func = sub_80BF1B4;
+ gTasks[taskId].func = WaitForAreaScreenInput;
break;
}
}
-void sub_80BF1B4(u8 taskId)
+static void WaitForAreaScreenInput(u8 taskId)
{
+// See Task_PokedexAreaScreen_1() in pokedex_area_screen.c
if (sPokedexView->unk64E != 0)
gTasks[taskId].func = sub_80BF1EC;
}
@@ -3193,16 +3226,16 @@ void sub_80BF1EC(u8 taskId)
{
case 1:
default:
- gTasks[taskId].func = sub_80BEA24;
+ gTasks[taskId].func = LoadInfoScreen;
break;
case 2:
- gTasks[taskId].func = sub_80BF250;
+ gTasks[taskId].func = LoadCryScreen;
break;
}
}
}
-void sub_80BF250(u8 taskId)
+void LoadCryScreen(u8 taskId)
{
switch (gMain.state)
{
@@ -3214,7 +3247,7 @@ void sub_80BF250(u8 taskId)
sPokedexView->unk64A = 6;
gUnknown_030060B4 = gMain.vblankCallback;
SetVBlankCallback(NULL);
- sub_80C09B0(0x200);
+ ResetOtherVideoRegisters(DISPCNT_BG1_ON);
sPokedexView->selectedScreen = CRY_SCREEN;
gMain.state = 1;
}
@@ -3222,10 +3255,10 @@ void sub_80BF250(u8 taskId)
case 1:
DecompressAndLoadBgGfxUsingHeap(3, &gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, &gPokedexTilemap_CryScreen, 0, 0);
- FillWindowPixelBuffer(0, PIXEL_FILL(0));
- PutWindowTilemap(0);
- PutWindowTilemap(3);
- PutWindowTilemap(2);
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PutWindowTilemap(WIN_INFO);
+ PutWindowTilemap(WIN_VU_METER);
+ PutWindowTilemap(WIN_CRY_WAVE);
gMain.state++;
break;
case 2:
@@ -3239,13 +3272,13 @@ void sub_80BF250(u8 taskId)
gMain.state++;
break;
case 4:
- sub_80BE8DC(gText_CryOf, 0x52, 33);
+ PrintInfoPageText(gText_CryOf, 0x52, 33);
sub_80C0B44(0, sPokedexListItem->dexNum, 0x52, 49);
gMain.state++;
break;
case 5:
- gTasks[taskId].data[4] = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0);
- gSprites[gTasks[taskId].data[4]].oam.priority = 0;
+ gTasks[taskId].tMonSpriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0);
+ gSprites[gTasks[taskId].tMonSpriteId].oam.priority = 0;
gDexCryScreenState = 0;
gMain.state++;
break;
@@ -3274,8 +3307,8 @@ void sub_80BF250(u8 taskId)
spC.yPos = 3;
if (sub_8145850(&spC, 3) != 0)
gMain.state++;
- CopyWindowToVram(3, 2);
- CopyWindowToVram(0, 3);
+ CopyWindowToVram(WIN_VU_METER, 2);
+ CopyWindowToVram(WIN_INFO, 3);
CopyBgTilemapBufferToVram(0);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
@@ -3367,18 +3400,18 @@ void sub_80BF790(u8 taskId)
if (!gPaletteFade.active)
{
sub_8145914();
- FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
+ FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId);
switch (sPokedexView->unk64E)
{
default:
case 1:
- gTasks[taskId].func = sub_80BEA24;
+ gTasks[taskId].func = LoadInfoScreen;
break;
case 2:
- gTasks[taskId].func = sub_80BF0AC;
+ gTasks[taskId].func = LoadAreaScreen;
break;
case 3:
- gTasks[taskId].func = sub_80BF82C;
+ gTasks[taskId].func = LoadSizeScreen;
break;
}
}
@@ -3395,7 +3428,7 @@ void sub_80BF7FC(u8 a)
LoadPalette(&unk, 0x5D, 2);
}
-void sub_80BF82C(u8 taskId)
+void LoadSizeScreen(u8 taskId)
{
u8 spriteId;
@@ -3408,7 +3441,7 @@ void sub_80BF82C(u8 taskId)
sPokedexView->unk64A = 7;
gUnknown_030060B4 = gMain.vblankCallback;
SetVBlankCallback(NULL);
- sub_80C09B0(0x200);
+ ResetOtherVideoRegisters(DISPCNT_BG1_ON);
sPokedexView->selectedScreen = SIZE_SCREEN;
gMain.state = 1;
}
@@ -3416,8 +3449,8 @@ void sub_80BF82C(u8 taskId)
case 1:
DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, gPokedexTilemap_SizeScreen, 0, 0);
- FillWindowPixelBuffer(0, PIXEL_FILL(0));
- PutWindowTilemap(0);
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PutWindowTilemap(WIN_INFO);
gMain.state++;
break;
case 2:
@@ -3432,7 +3465,7 @@ void sub_80BF82C(u8 taskId)
StringCopy(string, gText_SizeComparedTo);
StringAppend(string, gSaveBlock2Ptr->playerName);
- sub_80BE8DC(string, GetStringCenterAlignXOffset(1, string, 0xF0), 0x79);
+ PrintInfoPageText(string, GetStringCenterAlignXOffset(1, string, 0xF0), 0x79);
gMain.state++;
}
break;
@@ -3442,7 +3475,7 @@ void sub_80BF82C(u8 taskId)
break;
case 5:
spriteId = sub_80C0EF8(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), 152, 56, 0);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 1;
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].pos2.y = gPokedexEntries[sPokedexListItem->dexNum].trainerOffset;
@@ -3453,14 +3486,14 @@ void sub_80BF82C(u8 taskId)
break;
case 6:
spriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 88, 56, 1);
- gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.matrixNum = 2;
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].pos2.y = gPokedexEntries[sPokedexListItem->dexNum].pokemonOffset;
SetOamMatrix(2, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale, 0, 0, gPokedexEntries[sPokedexListItem->dexNum].pokemonScale);
LoadPalette(gUnknown_0856E610, (gSprites[spriteId].oam.paletteNum + 16) * 16, 0x20);
- gTasks[taskId].data[4] = spriteId;
- CopyWindowToVram(0, 3);
+ gTasks[taskId].tMonSpriteId = spriteId;
+ CopyWindowToVram(WIN_INFO, 3);
CopyBgTilemapBufferToVram(1);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(3);
@@ -3516,16 +3549,16 @@ void sub_80BFC78(u8 taskId)
{
if (!gPaletteFade.active)
{
- FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]);
+ FreeAndDestroyMonPicSprite(gTasks[taskId].tMonSpriteId);
FreeAndDestroyTrainerPicSprite(gTasks[taskId].data[5]);
switch (sPokedexView->unk64E)
{
default:
case 1:
- gTasks[taskId].func = sub_80BEA24;
+ gTasks[taskId].func = LoadInfoScreen;
break;
case 2:
- gTasks[taskId].func = sub_80BF250;
+ gTasks[taskId].func = LoadCryScreen;
break;
}
}
@@ -3729,7 +3762,7 @@ _080BFDB4:\n\
u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 b, u32 c)
{
- u8 taskId = CreateTask(sub_80BFE38, 0);
+ u8 taskId = CreateTask(Task_DisplayNewMonData, 0);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = dexNum;
@@ -3740,7 +3773,7 @@ u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 b, u32 c)
return taskId;
}
-void sub_80BFE38(u8 taskId)
+static void Task_DisplayNewMonData(u8 taskId)
{
u8 spriteId;
u16 dexNum = gTasks[taskId].data[1];
@@ -3753,12 +3786,12 @@ void sub_80BFE38(u8 taskId)
{
gUnknown_030060B4 = gMain.vblankCallback;
SetVBlankCallback(NULL);
- sub_80C09B0(0x100);
+ ResetOtherVideoRegisters(DISPCNT_BG0_ON);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0856E668, 2);
+ InitBgsFromTemplates(0, sNewEntryInfoScreen_BgTemplate, 2);
SetBgTilemapBuffer(3, AllocZeroed(0x800));
SetBgTilemapBuffer(2, AllocZeroed(0x800));
- InitWindows(gUnknown_0856E670);
+ InitWindows(sNewEntryInfoScreen_WindowTemplates);
DeactivateAllTextPrinters();
gTasks[taskId].data[0] = 1;
}
@@ -3766,11 +3799,11 @@ void sub_80BFE38(u8 taskId)
case 1:
DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0);
CopyToBgTilemapBuffer(3, gPokedexTilemap_DescriptionScreen, 0, 0);
- FillWindowPixelBuffer(0, PIXEL_FILL(0));
- PutWindowTilemap(0);
- PutWindowTilemap(1);
- sub_80C0D30(1, gTasks[taskId].data[1]);
- CopyWindowToVram(1, 2);
+ FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0));
+ PutWindowTilemap(WIN_INFO);
+ PutWindowTilemap(WIN_FOOTPRINT);
+ PrintFootprint(WIN_FOOTPRINT, gTasks[taskId].data[1]);
+ CopyWindowToVram(WIN_FOOTPRINT, 2);
ResetPaletteFade();
LoadPokedexBgPalette(0);
gTasks[taskId].data[0]++;
@@ -3779,8 +3812,8 @@ void sub_80BFE38(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 3:
- sub_80C020C(dexNum, IsNationalPokedexEnabled(), 1, 1);
- CopyWindowToVram(0, 3);
+ PrintMonInfo(dexNum, IsNationalPokedexEnabled(), 1, 1);
+ CopyWindowToVram(WIN_INFO, 3);
CopyBgTilemapBufferToVram(2);
CopyBgTilemapBufferToVram(3);
gTasks[taskId].data[0]++;
@@ -3874,7 +3907,7 @@ void sub_80C01CC(struct Sprite *sprite)
sprite->pos1.y -= 1;
}
-void sub_80C020C(u32 num, u32 value, u32 c, u32 d)
+static void PrintMonInfo(u32 num, u32 value, u32 owned, u32 newEntry)
{
u8 str[0x10];
u8 str2[0x20];
@@ -3883,21 +3916,21 @@ void sub_80C020C(u32 num, u32 value, u32 c, u32 d)
const u8 *text2;
const u8 *text3;
- if (d)
- sub_80BE8DC(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0);
+ if (newEntry)
+ PrintInfoPageText(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0);
if (value == 0)
value = NationalToHoennOrder(num);
else
value = num;
- ConvertIntToDecimalStringN(StringCopy(str, gText_UnkCtrlF908Clear01), value, 2, 3);
- sub_80BE8DC(str, 0x60, 0x19);
+ ConvertIntToDecimalStringN(StringCopy(str, gText_NumberClear01), value, STR_CONV_MODE_LEADING_ZEROS, 3);
+ PrintInfoPageText(str, 0x60, 0x19);
natNum = NationalPokedexNumToSpecies(num);
if (natNum)
text = gSpeciesNames[natNum];
else
text = sText_TenDashes2;
- sub_80BE8DC(text, 0x84, 0x19);
- if (c)
+ PrintInfoPageText(text, 0x84, 0x19);
+ if (owned)
{
CopyMonCategoryText(num, str2);
text2 = str2;
@@ -3906,27 +3939,27 @@ void sub_80C020C(u32 num, u32 value, u32 c, u32 d)
{
text2 = gText_5MarksPokemon;
}
- sub_80BE8DC(text2, 0x64, 0x29);
- sub_80BE8DC(gText_HTHeight, 0x60, 0x39);
- sub_80BE8DC(gText_WTWeight, 0x60, 0x49);
- if (c)
+ PrintInfoPageText(text2, 0x64, 0x29);
+ PrintInfoPageText(gText_HTHeight, 0x60, 0x39);
+ PrintInfoPageText(gText_WTWeight, 0x60, 0x49);
+ if (owned)
{
- sub_80C0354(gPokedexEntries[num].height, 0x81, 0x39);
- sub_80C0460(gPokedexEntries[num].weight, 0x81, 0x49);
+ PrintMonHeight(gPokedexEntries[num].height, 0x81, 0x39);
+ PrintMonWeight(gPokedexEntries[num].weight, 0x81, 0x49);
}
else
{
- sub_80BE8DC(gText_UnkHeight, 0x81, 0x39);
- sub_80BE8DC(gText_UnkWeight, 0x81, 0x49);
+ PrintInfoPageText(gText_UnkHeight, 0x81, 0x39);
+ PrintInfoPageText(gText_UnkWeight, 0x81, 0x49);
}
- if (c)
+ if (owned)
text3 = gPokedexEntries[num].description;
else
text3 = gExpandedPlaceholder_PokedexDescription;
- sub_80BE8DC(text3, GetStringCenterAlignXOffset(1, text3, 0xF0), 0x5F);
+ PrintInfoPageText(text3, GetStringCenterAlignXOffset(1, text3, 0xF0), 0x5F);
}
-void sub_80C0354(u16 height, u8 left, u8 top)
+static void PrintMonHeight(u16 height, u8 left, u8 top)
{
u8 buffer[16];
u32 inches, feet;
@@ -3956,13 +3989,13 @@ void sub_80C0354(u16 height, u8 left, u8 top)
buffer[i++] = (inches % 10) + CHAR_0;
buffer[i++] = CHAR_DBL_QUOT_RIGHT;
buffer[i++] = EOS;
- sub_80BE8DC(buffer, left, top);
+ PrintInfoPageText(buffer, left, top);
}
#ifdef NONMATCHING
// This doesn't match because gcc manages to avoid using the stack
// to store local variables.
-void sub_80C0460(u16 weight, u8 left, u8 top)
+static void PrintMonWeight(u16 weight, u8 left, u8 top)
{
u8 buffer[16];
bool8 output;
@@ -4018,11 +4051,11 @@ void sub_80C0460(u16 weight, u8 left, u8 top)
buffer[i++] = CHAR_s;
buffer[i++] = CHAR_PERIOD;
buffer[i++] = EOS;
- sub_80BE8DC(buffer, left, top);
+ PrintInfoPageText(buffer, left, top);
}
#else
__attribute__((naked))
-void sub_80C0460(u16 weight, u8 left, u8 top)
+static void PrintMonWeight(u16 weight, u8 left, u8 top)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -4227,7 +4260,7 @@ _080C0552:\n\
mov r0, sp\n\
mov r1, r10\n\
ldr r2, [sp, 0x10]\n\
- bl sub_80BE8DC\n\
+ bl PrintInfoPageText\n\
add sp, 0x14\n\
pop {r3-r5}\n\
mov r8, r3\n\
@@ -4240,7 +4273,7 @@ _080C0552:\n\
}
#endif
-const u8 *sub_80C0620(u16 dexNum)
+const u8 *GetPokedexCategoryName(u16 dexNum) // unused
{
return gPokedexEntries[dexNum].categoryName;
}
@@ -4428,7 +4461,7 @@ bool16 HasAllMons(void)
return TRUE;
}
-void sub_80C09B0(u16 a)
+static void ResetOtherVideoRegisters(u16 a)
{
if (!(a & DISPCNT_BG0_ON))
{
@@ -4477,7 +4510,7 @@ void sub_80C0A88(u8 windowId, const u8 *str, u8 left, u8 top)
AddTextPrinterParameterized4(windowId, 1, left, top, 0, 0, color, -1, str);
}
-void sub_80C0AC4(u8 windowId, u16 order, u8 left, u8 top)
+void sub_80C0AC4(u8 windowId, u16 order, u8 left, u8 top) // unused
{
u8 str[4];
@@ -4511,7 +4544,7 @@ u8 sub_80C0B44(u8 windowId, u16 num, u8 left, u8 top)
return i;
}
-void sub_80C0BF0(u8 windowId, const u8* str, u8 left, u8 top)
+void sub_80C0BF0(u8 windowId, const u8* str, u8 left, u8 top) // unused
{
u8 str2[11];
u8 i;
@@ -4527,7 +4560,7 @@ void sub_80C0BF0(u8 windowId, const u8* str, u8 left, u8 top)
sub_80C0A88(windowId, str2, left, top);
}
-void sub_80C0C6C(u8 windowId, u16 b, u8 left, u8 top)
+void sub_80C0C6C(u8 windowId, u16 b, u8 left, u8 top) // unused
{
u8 str[6];
bool8 outputted = FALSE;
@@ -4564,10 +4597,10 @@ void sub_80C0C6C(u8 windowId, u16 b, u8 left, u8 top)
sub_80C0A88(windowId, str, left, top);
}
-void sub_80C0D30(u8 windowId, u16 a1)
+static void PrintFootprint(u8 windowId, u16 dexNum)
{
u8 image[32 * 4];
- const u8 * r12 = gMonFootprintTable[NationalPokedexNumToSpecies(a1)];
+ const u8 * r12 = gMonFootprintTable[NationalPokedexNumToSpecies(dexNum)];
u16 r5 = 0;
u16 i;
u16 j;
@@ -4656,7 +4689,7 @@ int sub_80C0F30(u8 dexMode, u8 sortMode, u8 abcGroup, u8 bodyColor, u8 type1, u8
u16 resultsCount;
u8 types[2];
- sub_80BC8D4(dexMode, sortMode);
+ CreatePokedexList(dexMode, sortMode);
for (i = 0, resultsCount = 0; i < NATIONAL_DEX_COUNT; i++)
{
@@ -4764,9 +4797,9 @@ int sub_80C0F30(u8 dexMode, u8 sortMode, u8 abcGroup, u8 bodyColor, u8 type1, u8
return resultsCount;
}
-u8 sub_80C1258(void)
+u8 LoadSearchMenu(void)
{
- return CreateTask(sub_80C12E0, 0);
+ return CreateTask(Task_LoadSearchMenu, 0);
}
void sub_80C1270(const u8 *str, u32 left, u32 top)
@@ -4784,7 +4817,7 @@ void sub_80C12B0(u32 x, u32 y, u32 width, u32 height)
FillWindowPixelRect(0, PIXEL_FILL(0), x, y, width, height);
}
-void sub_80C12E0(u8 taskId)
+void Task_LoadSearchMenu(u8 taskId)
{
u16 i;
@@ -4795,14 +4828,14 @@ void sub_80C12E0(u8 taskId)
if (!gPaletteFade.active)
{
sPokedexView->unk64A = 2;
- sub_80C09B0(0);
+ ResetOtherVideoRegisters(0);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_0856EFF8, 4);
+ InitBgsFromTemplates(0, sSearchMenu_BgTemplate, 4);
SetBgTilemapBuffer(3, AllocZeroed(0x800));
SetBgTilemapBuffer(2, AllocZeroed(0x800));
SetBgTilemapBuffer(1, AllocZeroed(0x800));
SetBgTilemapBuffer(0, AllocZeroed(0x800));
- InitWindows(gUnknown_0856F008);
+ InitWindows(sSearchMenu_WindowTemplate);
DeactivateAllTextPrinters();
PutWindowTilemap(0);
DecompressAndLoadBgGfxUsingHeap(3, gPokedexSearchMenu_Gfx, 0x2000, 0, 0);
@@ -4975,11 +5008,11 @@ void sub_80C170C(u8 taskId)
sPokedexView->unk62A = 0x40;
gUnknown_02039B50 = 0;
sPokedexView->unk610 = 0;
- gSaveBlock2Ptr->pokedex.mode = sub_80C2318(taskId, 5);
+ gSaveBlock2Ptr->pokedex.mode = GetSearchModeSelection(taskId, SEARCH_DEX_MODE);
if (!IsNationalPokedexEnabled())
gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
sPokedexView->unk614 = gSaveBlock2Ptr->pokedex.mode;
- gSaveBlock2Ptr->pokedex.order = sub_80C2318(taskId, 4);
+ gSaveBlock2Ptr->pokedex.order = GetSearchModeSelection(taskId, SEARCH_ORDER);
sPokedexView->unk618 = gSaveBlock2Ptr->pokedex.order;
PlaySE(SE_PC_OFF);
gTasks[taskId].func = sub_80C1D38;
@@ -5036,14 +5069,14 @@ void sub_80C170C(u8 taskId)
void sub_80C19A4(u8 taskId)
{
- u8 r10 = sub_80C2318(taskId, 5);
- u8 r9 = sub_80C2318(taskId, 4);
- u8 r8 = sub_80C2318(taskId, 0);
- u8 r6 = sub_80C2318(taskId, 1);
- u8 r4 = sub_80C2318(taskId, 2);
- u8 r0 = sub_80C2318(taskId, 3);
+ u8 dexMode = GetSearchModeSelection(taskId, SEARCH_DEX_MODE);
+ u8 sortMode = GetSearchModeSelection(taskId, SEARCH_ORDER);
+ u8 abcGroup = GetSearchModeSelection(taskId, SEARCH_NAME);
+ u8 bodyColor = GetSearchModeSelection(taskId, SEARCH_COLOR);
+ u8 type1 = GetSearchModeSelection(taskId, SEARCH_TYPE_1);
+ u8 type2 = GetSearchModeSelection(taskId, SEARCH_TYPE_2);
- sub_80C0F30(r10, r9, r8, r6, r4, r0);
+ sub_80C0F30(dexMode, sortMode, abcGroup, bodyColor, type1, type2);
gTasks[taskId].func = sub_80C1A4C;
}
@@ -5059,7 +5092,7 @@ void sub_80C1A4C(u8 taskId)
else
{
PlaySE(SE_HAZURE);
- sub_80C2618(gUnknown_085E8785);
+ sub_80C2618(gText_NoMatchingPkmnWereFound);
}
gTasks[taskId].func = sub_80C1AB8;
CopyWindowToVram(0, 2);
@@ -5073,8 +5106,8 @@ void sub_80C1AB8(u8 taskId)
if (sPokedexView->pokemonListCount != 0)
{
sPokedexView->unk64E = 1;
- sPokedexView->dexMode = sub_80C2318(taskId, 5);
- sPokedexView->dexOrder = sub_80C2318(taskId, 4);
+ sPokedexView->dexMode = GetSearchModeSelection(taskId, SEARCH_DEX_MODE);
+ sPokedexView->dexOrder = GetSearchModeSelection(taskId, SEARCH_ORDER);
gTasks[taskId].func = sub_80C1D38;
PlaySE(SE_PC_OFF);
}
@@ -5094,8 +5127,8 @@ void sub_80C1B64(u8 taskId)
sub_80C21D4(0);
r0 = gTasks[taskId].data[1];
- p1 = &gTasks[taskId].data[gUnknown_0856EFC8[r0].unk4];
- p2 = &gTasks[taskId].data[gUnknown_0856EFC8[r0].unk5];
+ p1 = &gTasks[taskId].data[sSearchOptions[r0].unk4];
+ p2 = &gTasks[taskId].data[sSearchOptions[r0].unk5];
gTasks[taskId].data[14] = *p1;
gTasks[taskId].data[15] = *p2;
sub_80C2294(taskId);
@@ -5115,10 +5148,10 @@ void sub_80C1BCC(u8 taskId)
bool8 r3;
r1 = gTasks[taskId].data[1];
- r8 = gUnknown_0856EFC8[r1].pokedexList;
- p1 = &gTasks[taskId].data[gUnknown_0856EFC8[r1].unk4];
- p2 = &gTasks[taskId].data[gUnknown_0856EFC8[r1].unk5];
- r2 = gUnknown_0856EFC8[r1].unk6 - 1;
+ r8 = sSearchOptions[r1].pokedexList;
+ p1 = &gTasks[taskId].data[sSearchOptions[r1].unk4];
+ p2 = &gTasks[taskId].data[sSearchOptions[r1].unk5];
+ r2 = sSearchOptions[r1].numOptions - 1;
if (gMain.newKeys & A_BUTTON)
{
PlaySE(SE_PIN);
@@ -5466,9 +5499,9 @@ void sub_80C21D4(u8 a)
void sub_80C2294(u8 taskId)
{
- const struct PokedexOption *r6 = gUnknown_0856EFC8[gTasks[taskId].data[1]].pokedexList;
- const u16 *r8 = &gTasks[taskId].data[gUnknown_0856EFC8[gTasks[taskId].data[1]].unk4];
- const u16 *r7 = &gTasks[taskId].data[gUnknown_0856EFC8[gTasks[taskId].data[1]].unk5];
+ const struct PokedexOption *r6 = sSearchOptions[gTasks[taskId].data[1]].pokedexList;
+ const u16 *r8 = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].data[1]].unk4];
+ const u16 *r7 = &gTasks[taskId].data[sSearchOptions[gTasks[taskId].data[1]].unk5];
u16 i;
u16 j;
@@ -5478,32 +5511,32 @@ void sub_80C2294(u8 taskId)
sub_80C2618(r6[*r8 + *r7].description);
}
-u8 sub_80C2318(u8 taskId, u8 b)
+static u8 GetSearchModeSelection(u8 taskId, u8 option)
{
- const u16 *ptr1 = &gTasks[taskId].data[gUnknown_0856EFC8[b].unk4];
- const u16 *ptr2 = &gTasks[taskId].data[gUnknown_0856EFC8[b].unk5];
+ const u16 *ptr1 = &gTasks[taskId].data[sSearchOptions[option].unk4];
+ const u16 *ptr2 = &gTasks[taskId].data[sSearchOptions[option].unk5];
u16 type = *ptr1 + *ptr2;
- switch (b)
+ switch (option)
{
default:
return 0;
- case 5:
- return gUnknown_0856EFAC[type];
- case 4:
- return gUnknown_0856EFAE[type];
- case 0:
+ case SEARCH_DEX_MODE:
+ return sPokedexModes[type];
+ case SEARCH_ORDER:
+ return sSortOptions[type];
+ case SEARCH_NAME:
if (type == 0)
return 0xFF;
else
return type;
- case 1:
+ case SEARCH_COLOR:
if (type == 0)
return 0xFF;
else
return type - 1;
- case 2:
- case 3:
+ case SEARCH_TYPE_1:
+ case SEARCH_TYPE_2:
return gDexSearchTypeIds[type];
}
}
@@ -5552,8 +5585,8 @@ void sub_80C23B8(u8 taskId)
bool8 sub_80C244C(u8 taskId)
{
u8 val1 = gTasks[taskId].data[1];
- const u16 *ptr = &gTasks[taskId].data[gUnknown_0856EFC8[val1].unk5];
- u16 val2 = gUnknown_0856EFC8[val1].unk6 - 1;
+ const u16 *ptr = &gTasks[taskId].data[sSearchOptions[val1].unk5];
+ u16 val2 = sSearchOptions[val1].numOptions - 1;
if (val2 > 5 && *ptr != 0)
return FALSE;
@@ -5564,8 +5597,8 @@ bool8 sub_80C244C(u8 taskId)
bool8 sub_80C2494(u8 taskId)
{
u8 val1 = gTasks[taskId].data[1];
- const u16 *ptr = &gTasks[taskId].data[gUnknown_0856EFC8[val1].unk5];
- u16 val2 = gUnknown_0856EFC8[val1].unk6 - 1;
+ const u16 *ptr = &gTasks[taskId].data[sSearchOptions[val1].unk5];
+ u16 val2 = sSearchOptions[val1].numOptions - 1;
if (val2 > 5 && *ptr < val2 - 5)
return FALSE;
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 074ee2d19..5a4e6df08 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;
@@ -1333,7 +1334,7 @@ const struct SpindaSpot gSpindaSpotGraphics[] =
#include "data/pokemon/item_effects.h"
-const s8 gNatureStatTable[][5] =
+const s8 gNatureStatTable[][NUM_EV_STATS] =
{
// Atk Def Spd Sp.Atk Sp.Def
{ 0, 0, 0, 0, 0}, // Hardy
@@ -1886,7 +1887,7 @@ const u16 gLinkPlayerFacilityClasses[] =
FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_GUITARIST,
FACILITY_CLASS_COOLTRAINER_F, FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_PICNICKER,
FACILITY_CLASS_LASS, FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_BATTLE_GIRL,
- FACILITY_CLASS_POKEMON_BREEDER_F, FACILITY_CLASS_BEAUTY
+ FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_BEAUTY
};
static const u8 sHoldEffectToType[][2] =
@@ -2042,7 +2043,8 @@ static const u8 sGetMonDataEVConstants[] =
MON_DATA_SPATK_EV
};
-static const u8 gUnknown_08329EC8[] =
+// For stat-raising items
+static const u8 sStatsToRaise[] =
{
STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC
};
@@ -2082,10 +2084,10 @@ static const struct SpeciesItem sAlteringCaveWildMonHeldItems[] =
static const struct OamData sOamData_8329F20 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -2879,22 +2881,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)
@@ -2942,14 +2944,14 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon)
u16 moveLevel;
u16 move;
- moveLevel = (gLevelUpLearnsets[species][i] & 0xFE00);
+ moveLevel = (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV);
if (moveLevel > (level << 9))
break;
- move = (gLevelUpLearnsets[species][i] & 0x1FF);
+ move = (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID);
- if (GiveMoveToBoxMon(boxMon, move) == 0xFFFF)
+ if (GiveMoveToBoxMon(boxMon, move) == MON_HAS_MAX_MOVES)
DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move);
}
}
@@ -2968,7 +2970,7 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
{
sLearningMoveTableID = 0;
- while ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) != (level << 9))
+ while ((gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_LV) != (level << 9))
{
sLearningMoveTableID++;
if (gLevelUpLearnsets[species][sLearningMoveTableID] == LEVEL_UP_END)
@@ -2976,9 +2978,9 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
}
}
- if ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) == (level << 9))
+ if ((gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_LV) == (level << 9))
{
- gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & 0x1FF);
+ gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_ID);
sLearningMoveTableID++;
retVal = GiveMoveToMon(mon, gMoveToLearn);
}
@@ -2989,11 +2991,11 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move)
{
s32 i;
- u16 moves[4];
- u8 pp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 pp[MAX_MON_MOVES];
u8 ppBonuses;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_MON_MOVES - 1; i++)
{
moves[i] = GetMonData(mon, MON_DATA_MOVE2 + i, NULL);
pp[i] = GetMonData(mon, MON_DATA_PP2 + i, NULL);
@@ -3016,11 +3018,11 @@ void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move)
void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move)
{
s32 i;
- u16 moves[4];
- u8 pp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 pp[MAX_MON_MOVES];
u8 ppBonuses;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < MAX_MON_MOVES - 1; i++)
{
moves[i] = GetBoxMonData(boxMon, MON_DATA_MOVE2 + i, NULL);
pp[i] = GetBoxMonData(boxMon, MON_DATA_PP2 + i, NULL);
@@ -3270,7 +3272,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
}
// any weather except sun weakens solar beam
- if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL)) && gCurrentMove == MOVE_SOLAR_BEAM)
+ if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL_ANY)) && gCurrentMove == MOVE_SOLAR_BEAM)
damage /= 2;
// sunny
@@ -3304,21 +3306,21 @@ u8 CountAliveMonsInBattle(u8 caseId)
switch (caseId)
{
case BATTLE_ALIVE_EXCEPT_ACTIVE:
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (i != gActiveBattler && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
}
break;
case BATTLE_ALIVE_ATK_SIDE:
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (GetBattlerSide(i) == GetBattlerSide(gBattlerAttacker) && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
}
break;
case BATTLE_ALIVE_DEF_SIDE:
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (GetBattlerSide(i) == GetBattlerSide(gBattlerTarget) && !(gAbsentBattlerFlags & gBitTable[i]))
retVal++;
@@ -4329,7 +4331,7 @@ u8 SendMonToPC(struct Pokemon* mon)
{
s32 boxNo, boxPos;
- set_unknown_box_id(VarGet(VAR_STORAGE_UNKNOWN));
+ SetPCBoxToSendMon(VarGet(VAR_PC_BOX_TO_SEND_MON));
boxNo = StorageGetCurrentBox();
@@ -4344,9 +4346,9 @@ u8 SendMonToPC(struct Pokemon* mon)
CopyMon(checkingMon, &mon->box, sizeof(mon->box));
gSpecialVar_MonBoxId = boxNo;
gSpecialVar_MonBoxPos = boxPos;
- if (get_unknown_box_id() != boxNo)
- FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
- VarSet(VAR_STORAGE_UNKNOWN, boxNo);
+ if (GetPCBoxToSendMon() != boxNo)
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
+ VarSet(VAR_PC_BOX_TO_SEND_MON, boxNo);
return MON_GIVEN_TO_PC;
}
}
@@ -4690,7 +4692,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
gBattleMons[battlerId].status2 &= ~STATUS2_INFATUATION;
retVal = FALSE;
}
- if ((itemEffect[cmdIndex] & ITEM0_HIGH_CRIT)
+ if ((itemEffect[cmdIndex] & ITEM0_DIRE_HIT)
&& !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY))
{
gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY;
@@ -4744,7 +4746,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
}
break;
case 3:
- if ((itemEffect[cmdIndex] & ITEM3_MIST)
+ if ((itemEffect[cmdIndex] & ITEM3_GUARD_SPEC)
&& gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0)
{
gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5;
@@ -4817,11 +4819,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (evCount >= MAX_TOTAL_EVS)
return TRUE;
- if (dataSigned >= 100)
+ if (dataSigned >= EV_ITEM_RAISE_LIMIT)
break;
- if (dataSigned + r2 > 100)
- r5 = 100 - (dataSigned + r2) + r2;
+ if (dataSigned + r2 > EV_ITEM_RAISE_LIMIT)
+ r5 = EV_ITEM_RAISE_LIMIT - (dataSigned + r2) + r2;
else
r5 = r2;
@@ -4860,7 +4862,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++;
}
@@ -5021,11 +5023,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
{
if (evCount >= MAX_TOTAL_EVS)
return TRUE;
- if (dataSigned >= 100)
+ if (dataSigned >= EV_ITEM_RAISE_LIMIT)
break;
- if (dataSigned + r2 > 100)
- r5 = 100 - (dataSigned + r2) + r2;
+ if (dataSigned + r2 > EV_ITEM_RAISE_LIMIT)
+ r5 = EV_ITEM_RAISE_LIMIT - (dataSigned + r2) + r2;
else
r5 = r2;
@@ -5084,8 +5086,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
}
if (friendship < 0)
friendship = 0;
- if (friendship > 255)
- friendship = 255;
+ if (friendship > MAX_FRIENDSHIP)
+ friendship = MAX_FRIENDSHIP;
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
retVal = FALSE;
}
@@ -5110,8 +5112,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
}
if (friendship < 0)
friendship = 0;
- if (friendship > 255)
- friendship = 255;
+ if (friendship > MAX_FRIENDSHIP)
+ friendship = MAX_FRIENDSHIP;
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
retVal = FALSE;
}
@@ -5135,8 +5137,8 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov
}
if (friendship < 0)
friendship = 0;
- if (friendship > 255)
- friendship = 255;
+ if (friendship > MAX_FRIENDSHIP)
+ friendship = MAX_FRIENDSHIP;
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
retVal = FALSE;
}
@@ -5284,15 +5286,15 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit)
return offset;
}
-static void sub_806CF24(s32 arg0)
+static void BufferStatRoseMessage(s32 arg0)
{
gBattlerTarget = gBattlerInMenuId;
- StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_08329EC8[arg0]]);
+ StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[arg0]]);
StringCopy(gBattleTextBuff2, gText_StatRose);
BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnsStatChanged2);
}
-u8 *sub_806CF78(u16 itemId)
+u8 *UseStatIncreaseItem(u16 itemId)
{
int i;
const u8 *itemEffect;
@@ -5313,13 +5315,14 @@ u8 *sub_806CF78(u16 itemId)
for (i = 0; i < 3; i++)
{
- if (itemEffect[i] & 0xF)
- sub_806CF24(i * 2);
- if (itemEffect[i] & 0xF0)
+ if (itemEffect[i] & (ITEM0_X_ATTACK | ITEM1_X_SPEED | ITEM2_X_SPATK))
+ BufferStatRoseMessage(i * 2);
+
+ if (itemEffect[i] & (ITEM0_DIRE_HIT | ITEM1_X_DEFEND | ITEM2_X_ACCURACY))
{
- if (i)
+ if (i != 0) // Dire Hit is the only ITEM0 above
{
- sub_806CF24(i * 2 + 1);
+ BufferStatRoseMessage(i * 2 + 1);
}
else
{
@@ -5329,7 +5332,7 @@ u8 *sub_806CF78(u16 itemId)
}
}
- if (itemEffect[3] & ITEM3_MIST)
+ if (itemEffect[3] & ITEM3_GUARD_SPEC)
{
gBattlerAttacker = gBattlerInMenuId;
BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnShroudedInMist);
@@ -5657,21 +5660,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 +5709,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);
@@ -5712,7 +5717,8 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex)
{
- if (statIndex < 1 || statIndex > 5)
+ // Dont modify HP, Accuracy, or Evasion by nature
+ if (statIndex <= STAT_HP || statIndex > NUM_EV_STATS)
{
// Should just be "return n", but it wouldn't match without this.
u16 retVal = n;
@@ -5724,9 +5730,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;
@@ -5783,8 +5789,8 @@ void AdjustFriendship(struct Pokemon *mon, u8 event)
}
if (friendship < 0)
friendship = 0;
- if (friendship > 255)
- friendship = 255;
+ if (friendship > MAX_FRIENDSHIP)
+ friendship = MAX_FRIENDSHIP;
SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship);
}
}
@@ -6096,7 +6102,7 @@ u32 CanSpeciesLearnTMHM(u16 species, u8 tm)
u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
{
- u16 learnedMoves[4];
+ u16 learnedMoves[MAX_MON_MOVES];
u8 numMoves = 0;
u16 species = GetMonData(mon, MON_DATA_SPECIES, 0);
u8 level = GetMonData(mon, MON_DATA_LEVEL, 0);
@@ -6109,23 +6115,23 @@ u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
{
u16 moveLevel;
- if (gLevelUpLearnsets[species][i] == 0xFFFF)
+ if (gLevelUpLearnsets[species][i] == LEVEL_UP_END)
break;
- moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
+ moveLevel = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV;
if (moveLevel <= (level << 9))
{
- for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
+ for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); j++)
;
if (j == MAX_MON_MOVES)
{
- for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
+ for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); k++)
;
if (k == numMoves)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID;
}
}
}
@@ -6138,15 +6144,15 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
u8 numMoves = 0;
int i;
- for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != LEVEL_UP_END; i++)
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID;
return numMoves;
}
u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
{
- u16 learnedMoves[4];
+ u16 learnedMoves[MAX_MON_MOVES];
u16 moves[20];
u8 numMoves = 0;
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
@@ -6163,23 +6169,23 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
{
u16 moveLevel;
- if (gLevelUpLearnsets[species][i] == 0xFFFF)
+ if (gLevelUpLearnsets[species][i] == LEVEL_UP_END)
break;
- moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
+ moveLevel = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV;
if (moveLevel <= (level << 9))
{
- for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
+ for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); j++)
;
if (j == MAX_MON_MOVES)
{
- for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
+ for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); k++)
;
if (k == numMoves)
- moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
+ moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID;
}
}
}
@@ -6439,11 +6445,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);
}
@@ -6683,7 +6689,7 @@ u8 sub_806EF08(u8 arg0)
var = (arg0 != 0) ? 2 : 0;
break;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
if (gLinkPlayers[i].id == (s16)(var))
break;
@@ -6706,7 +6712,7 @@ u8 sub_806EF84(u8 arg0, u8 arg1)
var = (arg0 != 0) ? 2 : 0;
break;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_LINK_PLAYERS; i++)
{
if (gLinkPlayers[i].id == (s16)(var))
break;
diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c
index 340327475..622e1d584 100644
--- a/src/pokemon_animation.c
+++ b/src/pokemon_animation.c
@@ -970,7 +970,7 @@ static void SetAffineData(struct Sprite *sprite, s16 xScale, s16 yScale, u16 rot
static void HandleStartAffineAnim(struct Sprite *sprite)
{
- sprite->oam.affineMode = 3;
+ sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
sprite->affineAnims = sSpriteAffineAnimTable_860AD68;
if (sUnknown_03001274 == TRUE)
@@ -1028,7 +1028,7 @@ static u8 sub_817F758(void)
static void sub_817F77C(struct Sprite *sprite)
{
- sprite->oam.affineMode = 1;
+ sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
if (sUnknown_03001274 == TRUE)
@@ -1040,7 +1040,7 @@ static void sub_817F77C(struct Sprite *sprite)
FreeOamMatrix(sprite->oam.matrixNum);
sprite->oam.matrixNum |= (sprite->hFlip << 3);
- sprite->oam.affineMode = 0;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
}
}
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index ee68de326..7d8c65d7c 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1004,38 +1004,36 @@ const union AffineAnimCmd *const sMonIconAffineAnims[] =
const u16 sSpriteImageSizes[3][4] =
{
- // square
+ [ST_OAM_SQUARE] =
{
- 0x20, // 1×1
- 0x80, // 2×2
- 0x200, // 4×4
- 0x800, // 8×8
+ [SPRITE_SIZE(8x8)] = 0x20,
+ [SPRITE_SIZE(16x16)] = 0x80,
+ [SPRITE_SIZE(32x32)] = 0x200,
+ [SPRITE_SIZE(64x64)] = 0x800,
},
-
- // horizontal rectangle
+ [ST_OAM_H_RECTANGLE] =
{
- 0x40, // 2×1
- 0x80, // 4×1
- 0x100, // 4×2
- 0x400, // 8×4
+ [SPRITE_SIZE(16x8)] = 0x40,
+ [SPRITE_SIZE(32x8)] = 0x80,
+ [SPRITE_SIZE(32x16)] = 0x100,
+ [SPRITE_SIZE(64x32)] = 0x400,
},
-
- // vertical rectangle
+ [ST_OAM_V_RECTANGLE] =
{
- 0x40, // 1×2
- 0x80, // 1×4
- 0x100, // 2×4
- 0x400, // 4×8
+ [SPRITE_SIZE(8x16)] = 0x40,
+ [SPRITE_SIZE(8x32)] = 0x80,
+ [SPRITE_SIZE(16x32)] = 0x100,
+ [SPRITE_SIZE(32x64)] = 0x400,
},
};
-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,12 +1123,12 @@ 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)
+void FreeAndDestroyMonIconSprite(struct Sprite *sprite)
{
sub_80D328C(sprite);
}
@@ -1184,17 +1182,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 +1300,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..c7ce6ddf7 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.
@@ -2294,14 +2294,14 @@ static const struct SpriteTemplate *const gUnknown_082FBEB8[] =
static const struct OamData sOamData_82FBEC8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
- .size = 3,
+ .size = SPRITE_SIZE(64x64),
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
@@ -2311,14 +2311,14 @@ static const struct OamData sOamData_82FBEC8 =
static const struct OamData sOamData_82FBED0 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 2,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x32),
.x = 0,
.matrixNum = 0,
- .size = 2,
+ .size = SPRITE_SIZE(16x32),
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
@@ -2328,14 +2328,14 @@ static const struct OamData sOamData_82FBED0 =
static const struct OamData sOamData_82FBED8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
- .size = 2,
+ .size = SPRITE_SIZE(32x32),
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
@@ -2345,14 +2345,14 @@ static const struct OamData sOamData_82FBED8 =
static const struct OamData sOamData_82FBEE0 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 1,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
- .size = 2,
+ .size = SPRITE_SIZE(32x16),
.tileNum = 0,
.priority = 2,
.paletteNum = 0,
@@ -2498,14 +2498,14 @@ static const struct SpriteTemplate gUnknown_082FBFC0 =
static const struct OamData sOamData_82FBFD8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
- .size = 1,
+ .size = SPRITE_SIZE(16x16),
.tileNum = 0,
.priority = 1,
.paletteNum = 0,
@@ -3466,7 +3466,7 @@ static void sub_802DB18(u16 left, u16 top, u8 cursorPos)
static void sub_802DB8C(void)
{
- u8 color[] = {0, 2, 3};
+ u8 color[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
PutWindowTilemap(0);
PutWindowTilemap(1);
@@ -3557,8 +3557,8 @@ static void sub_802DD08(void)
struct UnkStruct3 unkStruct;
struct UnkStruct3 *ptr = &unkStruct; // This temp variable is needed to match, don't ask me why.
- ptr->shape = 0;
- ptr->size = 0;
+ ptr->shape = SPRITE_SHAPE(8x8);
+ ptr->size = SPRITE_SIZE(8x8);
ptr->field_0_0 = 0;
ptr->priority = 1;
ptr->field_1 = 5;
@@ -3666,7 +3666,7 @@ static void sub_802DF70(bool32 arg0)
if (!arg0)
{
for (i = 0; i < playersCount; i++)
- sub_802DED8(i, 0, 2, 3);
+ sub_802DED8(i, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
}
else
{
@@ -3674,9 +3674,9 @@ static void sub_802DF70(bool32 arg0)
for (i = 0; i < playersCount; i++)
{
if (var != i)
- sub_802DED8(i, 0, 2, 3);
+ sub_802DED8(i, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY);
else
- sub_802DED8(i, 0, 4, 5);
+ sub_802DED8(i, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED);
}
}
}
@@ -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,
@@ -4483,14 +4483,14 @@ static void sub_802EF50(u16 tileTag, u16 palTag)
static const struct OamData sOamData_82FEBDC =
{
.y = 0,
- .affineMode = 3,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
- .size = 2,
+ .size = SPRITE_SIZE(32x32),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
@@ -4500,14 +4500,14 @@ static const struct OamData sOamData_82FEBDC =
static const struct OamData sOamData_82FEBE4 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
- .shape = 1,
+ .bpp = ST_OAM_4BPP,
+ .shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
- .size = 3,
+ .size = SPRITE_SIZE(64x32),
.tileNum = 0,
.priority = 0,
.paletteNum = 0,
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 4cd1a4772..4ccb39ce2 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"
@@ -453,7 +453,7 @@ EWRAM_DATA static bool8 sInPartyMenu = 0;
EWRAM_DATA static u8 sCurrentBoxOption = 0;
EWRAM_DATA static u8 gUnknown_02039D0E = 0;
EWRAM_DATA static u8 sWhichToReshow = 0;
-EWRAM_DATA static u8 gUnknown_02039D10 = 0;
+EWRAM_DATA static u8 sLastUsedBox = 0;
EWRAM_DATA static u16 gUnknown_02039D12 = 0;
EWRAM_DATA static struct Pokemon gUnknown_02039D14 = {0};
EWRAM_DATA static s8 sBoxCursorArea = 0;
@@ -778,8 +778,8 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_8571730[] =
sSpriteAffineAnim_8571720
};
-static const u8 gUnknown_08571734[] = {4, 0xF, 0xE};
-static const u8 gUnknown_08571737[] = _("/30");
+static const u8 sBoxInfoTextColors[] = {TEXT_COLOR_RED, TEXT_DYNAMIC_COLOR_6, TEXT_DYNAMIC_COLOR_5};
+static const u8 sText_OutOf30[] = _("/30");
static const u16 gBoxSelectionPopupPalette[] = INCBIN_U16("graphics/unknown/unknown_57173C.gbapal");
static const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_center.4bpp");
@@ -963,10 +963,10 @@ static const struct WindowTemplate sYesNoWindowTemplate =
static const struct OamData sOamData_857286C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -980,10 +980,10 @@ static const struct OamData sOamData_857286C =
static const struct OamData sOamData_8572874 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
.matrixNum = 0,
@@ -1056,10 +1056,10 @@ static const struct SpriteTemplate gUnknown_085728D4 =
static const struct OamData sOamData_85728EC =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -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);
}
@@ -1789,7 +1790,7 @@ static void Task_PokemonStorageSystemPC(u8 taskId)
}
else
{
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
task->data[0] = 4;
}
break;
@@ -1854,7 +1855,7 @@ static void FieldCb_ReturnToPcMenu(void)
gTasks[taskId].data[1] = sPreviousBoxOption;
Task_PokemonStorageSystemPC(taskId);
SetVBlankCallback(vblankCb);
- pal_fill_black();
+ FadeInFromBlack();
}
static void CreatePCMenu(u8 whichMenu, s16 *windowIdPtr)
@@ -2089,7 +2090,7 @@ static void sub_80C7BB4(void)
static void sub_80C7BE4(void)
{
- u8 text[16];
+ u8 numBoxMonsText[16];
struct WindowTemplate winTemplate;
u8 windowId;
u8 *boxName = GetBoxNamePtr(gUnknown_02039D04->curBox);
@@ -2105,12 +2106,12 @@ static void sub_80C7BE4(void)
FillWindowPixelBuffer(windowId, PIXEL_FILL(4));
center = GetStringCenterAlignXOffset(1, boxName, 64);
- AddTextPrinterParameterized3(windowId, 1, center, 1, gUnknown_08571734, TEXT_SPEED_FF, boxName);
+ AddTextPrinterParameterized3(windowId, 1, center, 1, sBoxInfoTextColors, TEXT_SPEED_FF, boxName);
- ConvertIntToDecimalStringN(text, nPokemonInBox, 1, 2);
- StringAppend(text, gUnknown_08571737);
- center = GetStringCenterAlignXOffset(1, text, 64);
- AddTextPrinterParameterized3(windowId, 1, center, 17, gUnknown_08571734, TEXT_SPEED_FF, text);
+ ConvertIntToDecimalStringN(numBoxMonsText, nPokemonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ StringAppend(numBoxMonsText, sText_OutOf30);
+ center = GetStringCenterAlignXOffset(1, numBoxMonsText, 64);
+ AddTextPrinterParameterized3(windowId, 1, center, 17, sBoxInfoTextColors, TEXT_SPEED_FF, numBoxMonsText);
winTileData = GetWindowAttribute(windowId, WINDOW_TILE_DATA);
CpuCopy32((void *)winTileData, (void *)OBJ_VRAM0 + 0x100 + (GetSpriteTileStartByTag(gUnknown_02039D04->unk_0240) * 32), 0x400);
@@ -2167,7 +2168,7 @@ static void Cb2_EnterPSS(u8 boxOption)
gUnknown_02039D12 = 0;
sPSSData->state = 0;
sPSSData->taskId = CreateTask(Cb_InitPSS, 3);
- gUnknown_02039D10 = StorageGetCurrentBox();
+ sLastUsedBox = StorageGetCurrentBox();
SetMainCallback2(Cb2_PSS);
}
}
@@ -4366,10 +4367,10 @@ static bool8 DoShowPartyMenu(void)
static void sub_80CABE0(void)
{
- if (gUnknown_02039D10 != StorageGetCurrentBox())
+ if (sLastUsedBox != StorageGetCurrentBox())
{
- FlagClear(FLAG_SYS_STORAGE_UNKNOWN_FLAG);
- VarSet(VAR_STORAGE_UNKNOWN, StorageGetCurrentBox());
+ FlagClear(FLAG_SHOWN_BOX_WAS_FULL_MESSAGE);
+ VarSet(VAR_PC_BOX_TO_SEND_MON, StorageGetCurrentBox());
}
}
@@ -4568,7 +4569,7 @@ static void sub_80CB028(u8 boxId)
for (boxPosition = 0; boxPosition < IN_BOX_COUNT; boxPosition++)
{
if (GetBoxMonDataAt(boxId, boxPosition, MON_DATA_HELD_ITEM) == 0)
- sPSSData->boxMonsSprites[boxPosition]->oam.objMode = 1;
+ sPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
}
}
}
@@ -4585,7 +4586,7 @@ static void sub_80CB140(u8 boxPosition)
sPSSData->boxMonsSprites[boxPosition] = CreateMonIconSprite(species, personality, x, y, 2, 19 - (boxPosition % IN_BOX_ROWS));
if (sPSSData->boxOption == BOX_OPTION_MOVE_ITEMS)
- sPSSData->boxMonsSprites[boxPosition]->oam.objMode = 1;
+ sPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
}
}
@@ -4698,7 +4699,7 @@ static u8 sub_80CB2F8(u8 row, u16 times, s16 xDelta)
sPSSData->boxMonsSprites[boxPosition]->data[3] = xDest;
sPSSData->boxMonsSprites[boxPosition]->callback = sub_80CB234;
if (GetBoxMonDataAt(sPSSData->field_C5C, boxPosition, MON_DATA_HELD_ITEM) == 0)
- sPSSData->boxMonsSprites[boxPosition]->oam.objMode = 1;
+ sPSSData->boxMonsSprites[boxPosition]->oam.objMode = ST_OAM_OBJ_BLEND;
count++;
}
}
@@ -4845,7 +4846,7 @@ static void CreatePartyMonsSprites(bool8 arg0)
for (i = 0; i < PARTY_SIZE; i++)
{
if (sPSSData->partySprites[i] != NULL && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == 0)
- sPSSData->partySprites[i]->oam.objMode = 1;
+ sPSSData->partySprites[i]->oam.objMode = ST_OAM_OBJ_BLEND;
}
}
}
@@ -5086,7 +5087,7 @@ static void sub_80CBF14(u8 mode, u8 position)
if (*sPSSData->field_B04 != NULL)
{
InitSpriteAffineAnim(*sPSSData->field_B04);
- (*sPSSData->field_B04)->oam.affineMode = 1;
+ (*sPSSData->field_B04)->oam.affineMode = ST_OAM_AFFINE_NORMAL;
(*sPSSData->field_B04)->affineAnims = gSpriteAffineAnimTable_857291C;
StartSpriteAffineAnim(*sPSSData->field_B04, 0);
}
@@ -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));
@@ -9357,10 +9358,10 @@ static const u32 gUnknown_0857BB24[] = INCBIN_U32("graphics/pokemon_storage/unkn
static const struct OamData sOamData_857BBA4 =
{
.y = 0,
- .affineMode = 1,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 79aac4b5e..ffd468a9b 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"
@@ -121,8 +122,8 @@ static EWRAM_DATA struct PokemonSummaryScreenData
u8 metGame; // 0xB
u32 pid; // 0xC
u32 exp; // 0x10
- u16 moves[4]; // 0x14
- u8 pp[4]; // 0x1C
+ u16 moves[MAX_MON_MOVES]; // 0x14
+ u8 pp[MAX_MON_MOVES]; // 0x1C
u16 currentHP; // 0x20
u16 maxHP; // 0x22
u16 atk; // 0x24
@@ -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
@@ -224,10 +225,10 @@ static void DrawExperienceProgressBar(struct Pokemon* mon);
static void DrawContestMoveHearts(u16 move);
static void LimitEggSummaryPageDisplay(void);
static void ResetWindows(void);
-static void sub_81C25E8(void);
-static void sub_81C2628(void);
-static void sub_81C2794(void);
-static void sub_81C27DC(struct Pokemon *mon, u16 a);
+static void PrintMonInfo(void);
+static void PrintNotEggInfo(void);
+static void PrintEggInfo(void);
+static void PrintGenderSymbol(struct Pokemon *mon, u16 a);
static void PrintPageNamesAndStatsPageToWindows(void);
static void CreatePageWindowTilemaps(u8 a);
static void ClearPageWindowTilemaps(u8 a);
@@ -705,10 +706,10 @@ static const u8 sMovesPPLayout[] = _("{PP}{SPECIAL_F7 0x00}/{SPECIAL_F7 0x01}");
static const struct OamData sOamData_MoveTypes =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
@@ -881,10 +882,10 @@ static const u8 sMoveTypeToOamPaletteNum[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIE
static const struct OamData gOamData_861CFF4 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -970,10 +971,10 @@ static const struct SpriteTemplate gUnknown_0861D084 =
static const struct OamData sOamData_StatusCondition =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.matrixNum = 0,
@@ -1173,7 +1174,7 @@ static bool8 SummaryScreen_LoadGraphics(void)
gMain.state++;
break;
case 11:
- sub_81C25E8();
+ PrintMonInfo();
gMain.state++;
break;
case 12:
@@ -1449,7 +1450,7 @@ static void sub_81C0348(void)
DrawPokerusCuredSymbol(&sMonSummaryScreen->currentMon);
}
-static void sub_81C0434(void)
+static void FreeSummaryScreen(void)
{
FreeAllWindowBuffers();
Free(sMonSummaryScreen);
@@ -1474,7 +1475,7 @@ static void CloseSummaryScreen(u8 taskId)
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100);
if (gMonSpritesGfxPtr == 0)
sub_806F47C(0);
- sub_81C0434();
+ FreeSummaryScreen();
DestroyTask(taskId);
}
}
@@ -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);
}
@@ -1625,7 +1626,7 @@ static void sub_81C0704(u8 taskId)
SetTypeIcons();
break;
case 10:
- sub_81C25E8();
+ PrintMonInfo();
break;
case 11:
PrintPageSpecificText(sMonSummaryScreen->currPageIndex);
@@ -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
@@ -2571,12 +2572,12 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo
schedule_bg_copy_tilemap_to_vram(3);
}
-static void sub_81C228C(bool8 isMonShiny)
+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);
}
@@ -2695,19 +2696,19 @@ static void SummaryScreen_PrintTextOnWindow(u8 windowId, const u8 *string, u8 x,
AddTextPrinterParameterized4(windowId, 1, x, y, 0, lineSpacing, sTextColors_861CD2C[colorId], 0, string);
}
-static void sub_81C25E8(void)
+static void PrintMonInfo(void)
{
FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, PIXEL_FILL(0));
FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME, PIXEL_FILL(0));
FillWindowPixelBuffer(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, PIXEL_FILL(0));
if (!sMonSummaryScreen->summary.isEgg)
- sub_81C2628();
+ PrintNotEggInfo();
else
- sub_81C2794();
+ PrintEggInfo();
schedule_bg_copy_tilemap_to_vram(0);
}
-static void sub_81C2628(void)
+static void PrintNotEggInfo(void)
{
u8 strArray[16];
struct Pokemon *mon = &sMonSummaryScreen->currentMon;
@@ -2715,18 +2716,18 @@ static void sub_81C2628(void)
u16 dexNum = SpeciesToPokedexNum(summary->species);
if (dexNum != 0xFFFF)
{
- StringCopy(gStringVar1, &gText_UnkCtrlF908Clear01[0]);
- ConvertIntToDecimalStringN(gStringVar2, dexNum, 2, 3);
+ StringCopy(gStringVar1, &gText_NumberClear01[0]);
+ ConvertIntToDecimalStringN(gStringVar2, dexNum, STR_CONV_MODE_LEADING_ZEROS, 3);
StringAppend(gStringVar1, gStringVar2);
if (!IsMonShiny(mon))
{
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 1);
- sub_81C228C(FALSE);
+ SetDexNumberColor(FALSE);
}
else
{
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER, gStringVar1, 0, 1, 0, 7);
- sub_81C228C(TRUE);
+ SetDexNumberColor(TRUE);
}
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER);
}
@@ -2734,12 +2735,12 @@ static void sub_81C2628(void)
{
ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_DEX_NUMBER);
if (!IsMonShiny(mon))
- sub_81C228C(FALSE);
+ SetDexNumberColor(FALSE);
else
- sub_81C228C(TRUE);
+ 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);
@@ -2747,12 +2748,12 @@ static void sub_81C2628(void)
strArray[0] = CHAR_SLASH;
StringCopy(&strArray[1], &gSpeciesNames[summary->species2][0]);
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, &strArray[0], 0, 1, 0, 1);
- sub_81C27DC(mon, summary->species2);
+ PrintGenderSymbol(mon, summary->species2);
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME);
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
}
-static void sub_81C2794(void)
+static void PrintEggInfo(void)
{
GetMonNickname(&sMonSummaryScreen->currentMon, gStringVar1);
SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME, gStringVar1, 0, 1, 0, 1);
@@ -2761,7 +2762,7 @@ static void sub_81C2794(void)
ClearWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
}
-static void sub_81C27DC(struct Pokemon *mon, u16 species)
+static void PrintGenderSymbol(struct Pokemon *mon, u16 species)
{
if (species != SPECIES_NIDORAN_M && species != SPECIES_NIDORAN_F)
{
@@ -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_IDNumber2), (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);
}
@@ -3208,7 +3209,7 @@ static void PrintEggOTName(void)
static void PrintEggOTID(void)
{
int x;
- StringCopy(gStringVar1, gText_UnkCtrlF907F908);
+ StringCopy(gStringVar1, gText_IDNumber2);
StringAppend(gStringVar1, gText_FiveMarks);
x = GetStringRightAlignXOffset(1, gStringVar1, 56);
SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ID), gStringVar1, x, 1, 0, 1);
@@ -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..a7b7c95a3 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"
@@ -48,8 +48,8 @@ static void VBlankCB_Pokenav(void);
static void CB2_Pokenav(void);
static void Task_RunLoopedTask_LinkMode(u8 a0);
static void Task_RunLoopedTask(u8 taskId);
-static void sub_81C742C(u8 taskId);
-static void sub_81C72BC(void);
+static void Task_Pokenav(u8 taskId);
+static void CB2_InitPokenavForTutorial(void);
const struct UnknownPokenavCallbackStruct PokenavMenuCallbacks[15] =
{
@@ -311,19 +311,19 @@ void CB2_InitPokeNav(void)
InitPokenavResources(gPokenavResources);
ResetTasks();
SetVBlankCallback(NULL);
- CreateTask(sub_81C742C, 0);
+ CreateTask(Task_Pokenav, 0);
SetMainCallback2(CB2_Pokenav);
SetVBlankCallback(VBlankCB_Pokenav);
}
}
-void sub_81C72A4(void)
+void OpenPokenavForTutorial(void)
{
- SetMainCallback2(sub_81C72BC);
- FadeScreen(1, 0);
+ SetMainCallback2(CB2_InitPokenavForTutorial);
+ FadeScreen(FADE_TO_BLACK, 0);
}
-static void sub_81C72BC(void)
+static void CB2_InitPokenavForTutorial(void)
{
UpdatePaletteFade();
if (gPaletteFade.active)
@@ -337,12 +337,12 @@ static void sub_81C72BC(void)
else
{
InitPokenavResources(gPokenavResources);
- gPokenavResources->mode = POKENAV_MODE_FORCE_CALL_1;
+ gPokenavResources->mode = POKENAV_MODE_FORCE_CALL_READY;
ResetTasks();
ResetSpriteData();
FreeAllSpritePalettes();
SetVBlankCallback(NULL);
- CreateTask(sub_81C742C, 0);
+ CreateTask(Task_Pokenav, 0);
SetMainCallback2(CB2_Pokenav);
SetVBlankCallback(VBlankCB_Pokenav);
}
@@ -416,7 +416,7 @@ static void VBlankCB_Pokenav(void)
ProcessSpriteCopyRequests();
}
-static void sub_81C742C(u8 taskId)
+static void Task_Pokenav(u8 taskId)
{
u32 v1;
s16 *data = gTasks[taskId].data;
diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c
index 4422a70e3..583d23a55 100644
--- a/src/pokenav_main_menu.c
+++ b/src/pokenav_main_menu.c
@@ -41,7 +41,7 @@ struct PokenavMainMenuResources
u32 (*unk4)(void);
u32 unk8;
u32 currentTaskId;
- u32 unk10;
+ u32 helpBarWindowId;
u32 unk14;
struct Sprite *spinningPokenav;
struct Sprite *leftHeaderSprites[2];
@@ -68,10 +68,10 @@ static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 dura
static void SpriteCB_MoveLeftHeader(struct Sprite *sprite);
static void InitPokenavMainMenuResources(void);
static void InitHoennMapHeaderSprites(void);
-static void sub_81C7B74(void);
+static void InitHelpBar(void);
static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0);
static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0);
-static void sub_81C7BF8(u32 a0);
+static void DrawHelpBar(u32 windowId);
static void SpriteCB_SpinningPokenav(struct Sprite* sprite);
static u32 LoopedTask_InitPokenavMenu(s32 a0);
@@ -92,7 +92,7 @@ const struct BgTemplate gPokenavMainMenuBgTemplates[] =
}
};
-const struct WindowTemplate gUnknown_0861FA08[2] =
+static const struct WindowTemplate sHelpBarWindowTemplate[] =
{
{
.bg = 0,
@@ -103,36 +103,28 @@ const struct WindowTemplate gUnknown_0861FA08[2] =
.paletteNum = 0,
.baseBlock = 0x36,
},
- {
- .bg = 0xFF,
- .tilemapLeft = 0,
- .tilemapTop = 0,
- .width = 0,
- .height = 0,
- .paletteNum = 0,
- .baseBlock = 0,
- },
+ DUMMY_WIN_TEMPLATE
};
-const u8 *const sHelpBarTexts[12] =
-{
- gText_Pokenav_ClearButtonList,
- gText_PokenavMap_ZoomedOutButtons,
- gText_PokenavMap_ZoomedInButtons,
- gText_PokenavCondition_MonListButtons,
- gText_PokenavCondition_MonStatusButtons,
- gText_PokenavCondition_MarkingButtons,
- gText_PokenavMatchCall_TrainerListButtons,
- gText_PokenavMatchCall_CallMenuButtons,
- gText_PokenavMatchCall_CheckTrainerButtons,
- gText_PokenavRibbons_MonListButtons,
- gText_PokenavRibbons_RibbonListButtons,
- gText_PokenavRibbons_RibbonCheckButtons,
+static const u8 *const sHelpBarTexts[HELPBAR_COUNT] =
+{
+ [HELPBAR_NONE] = gText_Pokenav_ClearButtonList,
+ [HELPBAR_MAP_ZOOMED_OUT] = gText_PokenavMap_ZoomedOutButtons,
+ [HELPBAR_MAP_ZOOMED_IN] = gText_PokenavMap_ZoomedInButtons,
+ [HELPBAR_CONDITION_MON_LIST] = gText_PokenavCondition_MonListButtons,
+ [HELPBAR_CONDITION_MON_STATUS] = gText_PokenavCondition_MonStatusButtons,
+ [HELPBAR_CONDITION_MARKINGS] = gText_PokenavCondition_MarkingButtons,
+ [HELPBAR_MC_TRAINER_LIST] = gText_PokenavMatchCall_TrainerListButtons,
+ [HELPBAR_MC_CALL_MENU] = gText_PokenavMatchCall_CallMenuButtons,
+ [HELPBAR_MC_CHECK_PAGE] = gText_PokenavMatchCall_CheckTrainerButtons,
+ [HELPBAR_RIBBONS_MON_LIST] = gText_PokenavRibbons_MonListButtons,
+ [HELPBAR_RIBBONS_LIST] = gText_PokenavRibbons_RibbonListButtons,
+ [HELPBAR_RIBBONS_CHECK] = gText_PokenavRibbons_RibbonCheckButtons,
};
-const u8 gMenuButtonReminderColor[3] =
+static const u8 sHelpBarTextColors[3] =
{
- 4, 1, 2
+ TEXT_COLOR_RED, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY
};
static const struct CompressedSpriteSheet gSpinningPokenavSpriteSheet[] =
@@ -288,7 +280,7 @@ static const struct OamData sUnknown_0861FB24 =
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
.objMode = ST_OAM_OBJ_NORMAL,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
@@ -386,7 +378,7 @@ static u32 LoopedTask_InitPokenavMenu(s32 a0)
if (free_temp_tile_data_buffers_if_possible())
return LT_PAUSE;
- sub_81C7B74();
+ InitHelpBar();
return LT_INC_AND_PAUSE;
case 3:
if (IsDma3ManagerBusyWithBgCopy())
@@ -676,31 +668,31 @@ void InitBgTemplates(const struct BgTemplate *templates, int count)
InitBgFromTemplate(templates++);
}
-static void sub_81C7B74(void)
+static void InitHelpBar(void)
{
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
- InitWindows(&gUnknown_0861FA08[0]);
- structPtr->unk10 = 0;
- sub_81C7BF8(structPtr->unk10);
- PutWindowTilemap(structPtr->unk10);
- CopyWindowToVram(structPtr->unk10, 3); // TODO: Use a defined constant here.
+ InitWindows(&sHelpBarWindowTemplate[0]);
+ structPtr->helpBarWindowId = 0;
+ DrawHelpBar(structPtr->helpBarWindowId);
+ PutWindowTilemap(structPtr->helpBarWindowId);
+ CopyWindowToVram(structPtr->helpBarWindowId, 3); // TODO: Use a defined constant here.
}
-void sub_81C7BA4(u32 helpBarIndex)
+void PrintHelpBarText(u32 textId)
{
struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0);
- sub_81C7BF8(structPtr->unk10);
- AddTextPrinterParameterized3(structPtr->unk10, 1, 0, 1, gMenuButtonReminderColor, 0, sHelpBarTexts[helpBarIndex]);
+ DrawHelpBar(structPtr->helpBarWindowId);
+ AddTextPrinterParameterized3(structPtr->helpBarWindowId, 1, 0, 1, sHelpBarTextColors, 0, sHelpBarTexts[textId]);
}
-bool32 IsDma3ManagerBusyWithBgCopy_(void)
+bool32 WaitForHelpBar(void)
{
return IsDma3ManagerBusyWithBgCopy();
}
-static void sub_81C7BF8(u32 windowId)
+static void DrawHelpBar(u32 windowId)
{
FillWindowPixelBuffer(windowId, PIXEL_FILL(4));
FillWindowPixelRect(windowId, PIXEL_FILL(5), 0, 0, 0x80, 1);
diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c
index 5379ee88e..91dbe4005 100644
--- a/src/pokenav_match_call_data.c
+++ b/src/pokenav_match_call_data.c
@@ -7,9 +7,23 @@
#include "gym_leader_rematch.h"
#include "match_call.h"
#include "pokenav.h"
+#include "strings.h"
#include "constants/region_map_sections.h"
#include "constants/trainers.h"
+
+// NPC below means non-trainer character (no rematch or check page)
+// Steven also uses this type but has a check page by using a MatchCallCheckPageOverride
+enum
+{
+ MC_TYPE_NPC,
+ MC_TYPE_TRAINER,
+ MC_TYPE_WALLY,
+ MC_TYPE_BIRCH,
+ MC_TYPE_RIVAL,
+ MC_TYPE_LEADER
+};
+
// Static type declarations
typedef struct MatchCallTextDataStruct {
@@ -24,7 +38,7 @@ struct MatchCallStructCommon {
u16 flag;
};
-struct MatchCallStruct0 {
+struct MatchCallStructNPC {
u8 type;
u8 mapSec;
u16 flag;
@@ -33,7 +47,8 @@ struct MatchCallStruct0 {
const match_call_text_data_t *textData;
};
-struct MatchCallStruct1 {
+// Shared by MC_TYPE_TRAINER and MC_TYPE_LEADER
+struct MatchCallStructTrainer {
u8 type;
u8 mapSec;
u16 flag;
@@ -43,22 +58,22 @@ struct MatchCallStruct1 {
const match_call_text_data_t *textData;
};
-struct MatchCallSubstruct2 {
+struct MatchCallLocationOverride {
u16 flag;
u8 mapSec;
};
-struct MatchCallStruct2 {
+struct MatchCallWally {
u8 type;
u8 mapSec;
u16 flag;
u16 rematchTableIdx;
const u8 *desc;
const match_call_text_data_t *textData;
- const struct MatchCallSubstruct2 *v10;
+ const struct MatchCallLocationOverride *locationData;
};
-struct MatchCallStruct3 {
+struct MatchCallBirch {
u8 type;
u8 mapSec;
u16 flag;
@@ -66,21 +81,10 @@ struct MatchCallStruct3 {
const u8 *name;
};
-struct MatchCallStruct4 {
- u8 type;
- u8 gender;
- u16 flag;
- const u8 *desc;
- const u8 *name;
- const match_call_text_data_t *textData;
-};
-
-// Note: Type1 and Type5 have identical struct layouts.
-struct MatchCallStruct5 {
+struct MatchCallRival {
u8 type;
- u8 mapSec;
+ u8 playerGender;
u16 flag;
- u16 rematchTableIdx;
const u8 *desc;
const u8 *name;
const match_call_text_data_t *textData;
@@ -88,731 +92,606 @@ struct MatchCallStruct5 {
typedef union {
const struct MatchCallStructCommon *common;
- const struct MatchCallStruct0 *type0;
- const struct MatchCallStruct1 *type1;
- const struct MatchCallStruct2 *type2;
- const struct MatchCallStruct3 *type3;
- const struct MatchCallStruct4 *type4;
- const struct MatchCallStruct5 *type5;
+ const struct MatchCallStructNPC *npc;
+ const struct MatchCallStructTrainer *trainer;
+ const struct MatchCallWally *wally;
+ const struct MatchCallBirch *birch;
+ const struct MatchCallRival *rival;
+ const struct MatchCallStructTrainer *leader;
} match_call_t;
-struct MatchCallOverride {
+struct MatchCallCheckPageOverride {
u16 idx;
u16 facilityClass;
u32 flag;
- const u8 *flavorTexts[4];
+ const u8 *flavorTexts[CHECK_PAGE_ENTRY_COUNT];
};
// Static RAM declarations
// Static ROM declarations
-static bool32 MatchCallGetFlag_Type0(match_call_t);
-static bool32 MatchCallGetFlag_Type1(match_call_t);
-static bool32 MatchCallGetFlag_Type2(match_call_t);
-static bool32 MatchCallGetFlag_Type3(match_call_t);
-static bool32 MatchCallGetFlag_Type4(match_call_t);
-
-static u8 MatchCallGetMapSec_Type0(match_call_t);
-static u8 MatchCallGetMapSec_Type1(match_call_t);
-static u8 MatchCallGetMapSec_Type2(match_call_t);
-static u8 MatchCallGetMapSec_Type3(match_call_t);
-static u8 MatchCallGetMapSec_Type4(match_call_t);
-
-static bool32 MatchCall_IsRematchable_Type0(match_call_t);
-static bool32 MatchCall_IsRematchable_Type1(match_call_t);
-static bool32 MatchCall_IsRematchable_Type2(match_call_t);
-static bool32 MatchCall_IsRematchable_Type3(match_call_t);
-static bool32 MatchCall_IsRematchable_Type4(match_call_t);
-
-static bool32 MatchCall_HasCheckPage_Type0(match_call_t);
-static bool32 MatchCall_HasCheckPage_Type1(match_call_t);
-static bool32 MatchCall_HasCheckPage_Type2(match_call_t);
-static bool32 MatchCall_HasCheckPage_Type3(match_call_t);
-static bool32 MatchCall_HasCheckPage_Type4(match_call_t);
-
-static u32 MatchCall_GetRematchTableIdx_Type0(match_call_t);
-static u32 MatchCall_GetRematchTableIdx_Type1(match_call_t);
-static u32 MatchCall_GetRematchTableIdx_Type2(match_call_t);
-static u32 MatchCall_GetRematchTableIdx_Type3(match_call_t);
-static u32 MatchCall_GetRematchTableIdx_Type4(match_call_t);
-
-static void MatchCall_GetMessage_Type0(match_call_t, u8 *);
-static void MatchCall_GetMessage_Type1(match_call_t, u8 *);
-static void MatchCall_GetMessage_Type2(match_call_t, u8 *);
-static void MatchCall_GetMessage_Type3(match_call_t, u8 *);
-static void MatchCall_GetMessage_Type4(match_call_t, u8 *);
-
-static void MatchCall_GetNameAndDesc_Type0(match_call_t, const u8 **, const u8 **);
-static void MatchCall_GetNameAndDesc_Type1(match_call_t, const u8 **, const u8 **);
-static void MatchCall_GetNameAndDesc_Type2(match_call_t, const u8 **, const u8 **);
-static void MatchCall_GetNameAndDesc_Type3(match_call_t, const u8 **, const u8 **);
-static void MatchCall_GetNameAndDesc_Type4(match_call_t, const u8 **, const u8 **);
-
-static void sub_81D1920(const match_call_text_data_t *, u8 *);
-static void sub_81D199C(const match_call_text_data_t *, u16, u8 *);
+static bool32 MatchCall_GetEnabled_NPC(match_call_t);
+static bool32 MatchCall_GetEnabled_Trainer(match_call_t);
+static bool32 MatchCall_GetEnabled_Wally(match_call_t);
+static bool32 MatchCall_GetEnabled_Birch(match_call_t);
+static bool32 MatchCall_GetEnabled_Rival(match_call_t);
+
+static u8 MatchCall_GetMapSec_NPC(match_call_t);
+static u8 MatchCall_GetMapSec_Trainer(match_call_t);
+static u8 MatchCall_GetMapSec_Wally(match_call_t);
+static u8 MatchCall_GetMapSec_Birch(match_call_t);
+static u8 MatchCall_GetMapSec_Rival(match_call_t);
+
+static bool32 MatchCall_IsRematchable_NPC(match_call_t);
+static bool32 MatchCall_IsRematchable_Trainer(match_call_t);
+static bool32 MatchCall_IsRematchable_Wally(match_call_t);
+static bool32 MatchCall_IsRematchable_Birch(match_call_t);
+static bool32 MatchCall_IsRematchable_Rival(match_call_t);
+
+static bool32 MatchCall_HasCheckPage_NPC(match_call_t);
+static bool32 MatchCall_HasCheckPage_Trainer(match_call_t);
+static bool32 MatchCall_HasCheckPage_Wally(match_call_t);
+static bool32 MatchCall_HasCheckPage_Birch(match_call_t);
+static bool32 MatchCall_HasCheckPage_Rival(match_call_t);
+
+static u32 MatchCall_GetRematchTableIdx_NPC(match_call_t);
+static u32 MatchCall_GetRematchTableIdx_Trainer(match_call_t);
+static u32 MatchCall_GetRematchTableIdx_Wally(match_call_t);
+static u32 MatchCall_GetRematchTableIdx_Birch(match_call_t);
+static u32 MatchCall_GetRematchTableIdx_Rival(match_call_t);
+
+static void MatchCall_GetMessage_NPC(match_call_t, u8 *);
+static void MatchCall_GetMessage_Trainer(match_call_t, u8 *);
+static void MatchCall_GetMessage_Wally(match_call_t, u8 *);
+static void MatchCall_GetMessage_Birch(match_call_t, u8 *);
+static void MatchCall_GetMessage_Rival(match_call_t, u8 *);
+
+static void MatchCall_GetNameAndDesc_NPC(match_call_t, const u8 **, const u8 **);
+static void MatchCall_GetNameAndDesc_Trainer(match_call_t, const u8 **, const u8 **);
+static void MatchCall_GetNameAndDesc_Wally(match_call_t, const u8 **, const u8 **);
+static void MatchCall_GetNameAndDesc_Birch(match_call_t, const u8 **, const u8 **);
+static void MatchCall_GetNameAndDesc_Rival(match_call_t, const u8 **, const u8 **);
+
+static void MatchCall_BufferCallMessageText(const match_call_text_data_t *, u8 *);
+static void MatchCall_BufferCallMessageTextByRematchTeam(const match_call_text_data_t *, u16, u8 *);
static void MatchCall_GetNameAndDescByRematchIdx(u32, const u8 **, const u8 **);
-extern const u8 gText_MrStone_Pokenav_2B60C0[];
-extern const u8 gText_MrStone_Pokenav_2B61E6[];
-extern const u8 gText_MrStone_Pokenav_2B6302[];
-extern const u8 gText_MrStone_Pokenav_2B63A0[];
-extern const u8 gText_MrStone_Pokenav_2B64A2[];
-extern const u8 gText_MrStone_Pokenav_2B6526[];
-extern const u8 gText_MrStone_Pokenav_2B65BB[];
-extern const u8 gText_MrStone_Pokenav_2B6664[];
-extern const u8 gText_MrStone_Pokenav_2B66B1[];
-extern const u8 gText_MrStone_Pokenav_2B6703[];
-extern const u8 gText_MrStone_Pokenav_2B67ED[];
-
-extern const u8 gMrStoneMatchCallDesc[];
-extern const u8 gMrStoneMatchCallName[];
-
-extern const u8 gText_Norman_Pokenav_2B5719[];
-extern const u8 gText_Norman_Pokenav_2B5795[];
-extern const u8 gText_Norman_Pokenav_2B584D[];
-extern const u8 gText_Norman_Pokenav_2B58E3[];
-extern const u8 gText_Norman_Pokenav_2B5979[];
-extern const u8 gText_Norman_Pokenav_2B5A07[];
-extern const u8 gText_Norman_Pokenav_2B5A69[];
-extern const u8 gText_Norman_Pokenav_2B5ACF[];
-extern const u8 gText_Norman_Pokenav_2B5B5E[];
-
-extern const u8 gNormanMatchCallDesc[];
-extern const u8 gNormanMatchCallName[];
-
-extern const u8 gProfBirchMatchCallDesc[];
-extern const u8 gProfBirchMatchCallName[];
-
-extern const u8 gText_Mom_Pokenav_2B227B[];
-extern const u8 gText_Mom_Pokenav_2B2310[];
-extern const u8 gText_Mom_Pokenav_2B23F3[];
-
-extern const u8 gMomMatchCallDesc[];
-extern const u8 gMomMatchCallName[];
-
-extern const u8 gText_Steven_Pokenav_2B5B95[];
-extern const u8 gText_Steven_Pokenav_2B5C53[];
-extern const u8 gText_Steven_Pokenav_2B5CC9[];
-extern const u8 gText_Steven_Pokenav_2B5DB4[];
-extern const u8 gText_Steven_Pokenav_2B5E26[];
-extern const u8 gText_Steven_Pokenav_2B5EA2[];
-extern const u8 gText_Steven_Pokenav_2B5ED9[];
-
-extern const u8 gStevenMatchCallDesc[];
-extern const u8 gStevenMatchCallName[];
-
-extern const u8 gText_May_Pokenav_2B3AB3[];
-extern const u8 gText_May_Pokenav_2B3B3F[];
-extern const u8 gText_May_Pokenav_2B3C13[];
-extern const u8 gText_May_Pokenav_2B3CF3[];
-extern const u8 gText_May_Pokenav_2B3D4B[];
-extern const u8 gText_May_Pokenav_2B3DD1[];
-extern const u8 gText_May_Pokenav_2B3E69[];
-extern const u8 gText_May_Pokenav_2B3ECD[];
-extern const u8 gText_May_Pokenav_2B3F2B[];
-extern const u8 gText_May_Pokenav_2B3FFB[];
-extern const u8 gText_May_Pokenav_2B402B[];
-extern const u8 gText_May_Pokenav_2B414B[];
-extern const u8 gText_May_Pokenav_2B4228[];
-extern const u8 gText_May_Pokenav_2B42E0[];
-extern const u8 gText_May_Pokenav_2B4350[];
-extern const u8 gMayBrendanMatchCallDesc[];
-extern const u8 gExpandedPlaceholder_May[];
-extern const u8 gText_Brendan_Pokenav_2B43EF[];
-extern const u8 gText_Brendan_Pokenav_2B4486[];
-extern const u8 gText_Brendan_Pokenav_2B4560[];
-extern const u8 gText_Brendan_Pokenav_2B463F[];
-extern const u8 gText_Brendan_Pokenav_2B46B7[];
-extern const u8 gText_Brendan_Pokenav_2B4761[];
-extern const u8 gText_Brendan_Pokenav_2B47F4[];
-extern const u8 gText_Brendan_Pokenav_2B4882[];
-extern const u8 gText_Brendan_Pokenav_2B4909[];
-extern const u8 gText_Brendan_Pokenav_2B49C4[];
-extern const u8 gText_Brendan_Pokenav_2B4A44[];
-extern const u8 gText_Brendan_Pokenav_2B4B28[];
-extern const u8 gText_Brendan_Pokenav_2B4C15[];
-extern const u8 gText_Brendan_Pokenav_2B4CD8[];
-extern const u8 gText_Brendan_Pokenav_2B4D46[];
-extern const u8 gExpandedPlaceholder_Brendan[];
-extern const u8 gText_Wally_Pokenav_2B4DE2[];
-extern const u8 gText_Wally_Pokenav_2B4E57[];
-extern const u8 gText_Wally_Pokenav_2B4EA5[];
-extern const u8 gText_Wally_Pokenav_2B4F41[];
-extern const u8 gText_Wally_Pokenav_2B4FF3[];
-extern const u8 gText_Wally_Pokenav_2B50B1[];
-extern const u8 gText_Wally_Pokenav_2B5100[];
-extern const u8 gWallyMatchCallDesc[];
-extern const u8 gText_Scott_Pokenav_2B5184[];
-extern const u8 gText_Scott_Pokenav_2B5275[];
-extern const u8 gText_Scott_Pokenav_2B5323[];
-extern const u8 gText_Scott_Pokenav_2B53DB[];
-extern const u8 gText_Scott_Pokenav_2B54A5[];
-extern const u8 gText_Scott_Pokenav_2B5541[];
-extern const u8 gText_Scott_Pokenav_2B56CA[];
-extern const u8 gScottMatchCallDesc[];
-extern const u8 gScottMatchCallName[];
-extern const u8 gText_Roxanne_Pokenav_2B2456[];
-extern const u8 gText_Roxanne_Pokenav_2B250E[];
-extern const u8 gText_Roxanne_Pokenav_2B25C1[];
-extern const u8 gText_Roxanne_Pokenav_2B2607[];
-extern const u8 gRoxanneMatchCallDesc[];
-extern const u8 gText_Brawly_Pokenav_2B2659[];
-extern const u8 gText_Brawly_Pokenav_2B275D[];
-extern const u8 gText_Brawly_Pokenav_2B286F[];
-extern const u8 gText_Brawly_Pokenav_2B28D1[];
-extern const u8 gBrawlyMatchCallDesc[];
-extern const u8 gText_Wattson_Pokenav_2B2912[];
-extern const u8 gText_Wattson_Pokenav_2B29CA[];
-extern const u8 gText_Wattson_Pokenav_2B2AB6[];
-extern const u8 gText_Wattson_Pokenav_2B2B01[];
-extern const u8 gWattsonMatchCallDesc[];
-extern const u8 gText_Flannery_Pokenav_2B2B4D[];
-extern const u8 gText_Flannery_Pokenav_2B2C0E[];
-extern const u8 gText_Flannery_Pokenav_2B2CF1[];
-extern const u8 gText_Flannery_Pokenav_2B2D54[];
-extern const u8 gFlanneryMatchCallDesc[];
-extern const u8 gText_Winona_Pokenav_2B2DA4[];
-extern const u8 gText_Winona_Pokenav_2B2E2B[];
-extern const u8 gText_Winona_Pokenav_2B2EC2[];
-extern const u8 gText_Winona_Pokenav_2B2F16[];
-extern const u8 gWinonaMatchCallDesc[];
-extern const u8 gText_TateLiza_Pokenav_2B2F97[];
-extern const u8 gText_TateLiza_Pokenav_2B306E[];
-extern const u8 gText_TateLiza_Pokenav_2B3158[];
-extern const u8 gText_TateLiza_Pokenav_2B31CD[];
-extern const u8 gTateLizaMatchCallDesc[];
-extern const u8 gText_Juan_Pokenav_2B3249[];
-extern const u8 gText_Juan_Pokenav_2B32EC[];
-extern const u8 gText_Juan_Pokenav_2B33AA[];
-extern const u8 gText_Juan_Pokenav_2B341E[];
-extern const u8 gJuanMatchCallDesc[];
-extern const u8 gText_Sidney_Pokenav_2B34CC[];
-extern const u8 gEliteFourMatchCallDesc[];
-extern const u8 gText_Phoebe_Pokenav_2B3561[];
-extern const u8 gText_Glacia_Pokenav_2B35E4[];
-extern const u8 gText_Drake_Pokenav_2B368B[];
-extern const u8 gText_Wallace_Pokenav_2B3790[];
-extern const u8 gChampionMatchCallDesc[];
-extern const u8 gMatchCallStevenStrategyText[];
-extern const u8 gMatchCall_StevenTrainersPokemonText[];
-extern const u8 gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle[];
-extern const u8 gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle[];
-extern const u8 gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle[];
-extern const u8 gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle[];
-extern const u8 gMatchCall_BrendanStrategyText[];
-extern const u8 gMatchCall_BrendanTrainersPokemonText[];
-extern const u8 gMatchCall_BrendanSelfIntroductionText_Line1[];
-extern const u8 gMatchCall_BrendanSelfIntroductionText_Line2[];
-extern const u8 gMatchCall_MayStrategyText[];
-extern const u8 gMatchCall_MayTrainersPokemonText[];
-extern const u8 gMatchCall_MaySelfIntroductionText_Line1[];
-extern const u8 gMatchCall_MaySelfIntroductionText_Line2[];
// .rodata
static const match_call_text_data_t sMrStoneTextScripts[] = {
- { gText_MrStone_Pokenav_2B60C0, 0xFFFF, FLAG_ENABLE_MR_STONE_POKENAV },
- { gText_MrStone_Pokenav_2B61E6, FLAG_ENABLE_MR_STONE_POKENAV, 0xFFFF },
- { gText_MrStone_Pokenav_2B6302, FLAG_DELIVERED_STEVEN_LETTER, 0xFFFF },
- { gText_MrStone_Pokenav_2B63A0, FLAG_RECEIVED_EXP_SHARE, 0xFFFF },
- { gText_MrStone_Pokenav_2B64A2, FLAG_RECEIVED_HM04, 0xFFFF },
- { gText_MrStone_Pokenav_2B6526, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
- { gText_MrStone_Pokenav_2B65BB, FLAG_RECEIVED_CASTFORM, 0xFFFF },
- { gText_MrStone_Pokenav_2B6664, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF },
- { gText_MrStone_Pokenav_2B66B1, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
- { gText_MrStone_Pokenav_2B6703, FLAG_DEFEATED_SOOTOPOLIS_GYM, 0xFFFF },
- { gText_MrStone_Pokenav_2B67ED, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_MrStone1, 0xFFFF, FLAG_ENABLE_MR_STONE_POKENAV },
+ { MatchCall_Text_MrStone2, FLAG_ENABLE_MR_STONE_POKENAV, 0xFFFF },
+ { MatchCall_Text_MrStone3, FLAG_DELIVERED_STEVEN_LETTER, 0xFFFF },
+ { MatchCall_Text_MrStone4, FLAG_RECEIVED_EXP_SHARE, 0xFFFF },
+ { MatchCall_Text_MrStone5, FLAG_RECEIVED_HM04, 0xFFFF },
+ { MatchCall_Text_MrStone6, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
+ { MatchCall_Text_MrStone7, FLAG_RECEIVED_CASTFORM, 0xFFFF },
+ { MatchCall_Text_MrStone8, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF },
+ { MatchCall_Text_MrStone9, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
+ { MatchCall_Text_MrStone10, FLAG_DEFEATED_SOOTOPOLIS_GYM, 0xFFFF },
+ { MatchCall_Text_MrStone11, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct0 sMrStoneMatchCallHeader =
+static const struct MatchCallStructNPC sMrStoneMatchCallHeader =
{
- .type = 0,
+ .type = MC_TYPE_NPC,
.mapSec = MAPSEC_RUSTBORO_CITY,
.flag = 0xFFFF,
- .desc = gMrStoneMatchCallDesc,
- .name = gMrStoneMatchCallName,
+ .desc = gText_MrStoneMatchCallDesc,
+ .name = gText_MrStoneMatchCallName,
.textData = sMrStoneTextScripts
};
static const match_call_text_data_t sNormanTextScripts[] = {
- { gText_Norman_Pokenav_2B5719, FLAG_ENABLE_NORMAN_MATCH_CALL, 0xFFFF },
- { gText_Norman_Pokenav_2B5795, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF },
- { gText_Norman_Pokenav_2B584D, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF },
- { gText_Norman_Pokenav_2B58E3, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
- { gText_Norman_Pokenav_2B5979, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
- { gText_Norman_Pokenav_2B5A07, 0xFFFE, 0xFFFF },
- { gText_Norman_Pokenav_2B5A69, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { gText_Norman_Pokenav_2B5ACF, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { gText_Norman_Pokenav_2B5B5E, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Norman1, FLAG_ENABLE_NORMAN_MATCH_CALL, 0xFFFF },
+ { MatchCall_Text_Norman2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF },
+ { MatchCall_Text_Norman3, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF },
+ { MatchCall_Text_Norman4, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
+ { MatchCall_Text_Norman5, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
+ { MatchCall_Text_Norman6, 0xFFFE, 0xFFFF },
+ { MatchCall_Text_Norman7, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { MatchCall_Text_Norman8, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { MatchCall_Text_Norman9, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sNormanMatchCallHeader =
+static const struct MatchCallStructTrainer sNormanMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_PETALBURG_CITY,
.flag = FLAG_ENABLE_NORMAN_MATCH_CALL,
.rematchTableIdx = REMATCH_NORMAN,
- .desc = gNormanMatchCallDesc,
- .name = gNormanMatchCallName,
+ .desc = gText_NormanMatchCallDesc,
+ .name = gText_NormanMatchCallName,
.textData = sNormanTextScripts
};
-static const struct MatchCallStruct3 sProfBirchMatchCallHeader =
+static const struct MatchCallBirch sProfBirchMatchCallHeader =
{
- .type = 3,
+ .type = MC_TYPE_BIRCH,
.mapSec = 0,
.flag = FLAG_ENABLE_PROF_BIRCH_MATCH_CALL,
- .desc = gProfBirchMatchCallDesc,
- .name = gProfBirchMatchCallName
+ .desc = gText_ProfBirchMatchCallDesc,
+ .name = gText_ProfBirchMatchCallName
};
static const match_call_text_data_t sMomTextScripts[] = {
- { gText_Mom_Pokenav_2B227B, 0xffff, 0xffff },
- { gText_Mom_Pokenav_2B2310, FLAG_DEFEATED_PETALBURG_GYM, 0xffff },
- { gText_Mom_Pokenav_2B23F3, FLAG_SYS_GAME_CLEAR, 0xffff },
- { NULL, 0xffff, 0xffff }
+ { MatchCall_Text_Mom1, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Mom2, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
+ { MatchCall_Text_Mom3, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct0 sMomMatchCallHeader =
+static const struct MatchCallStructNPC sMomMatchCallHeader =
{
- .type = 0,
+ .type = MC_TYPE_NPC,
.mapSec = MAPSEC_LITTLEROOT_TOWN,
.flag = FLAG_ENABLE_MOM_MATCH_CALL,
- .desc = gMomMatchCallDesc,
- .name = gMomMatchCallName,
+ .desc = gText_MomMatchCallDesc,
+ .name = gText_MomMatchCallName,
.textData = sMomTextScripts
};
static const match_call_text_data_t sStevenTextScripts[] = {
- { gText_Steven_Pokenav_2B5B95, 0xffff, 0xffff },
- { gText_Steven_Pokenav_2B5C53, FLAG_RUSTURF_TUNNEL_OPENED, 0xffff },
- { gText_Steven_Pokenav_2B5CC9, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xffff },
- { gText_Steven_Pokenav_2B5DB4, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xffff },
- { gText_Steven_Pokenav_2B5E26, FLAG_DEFEATED_MOSSDEEP_GYM, 0xffff },
- { gText_Steven_Pokenav_2B5EA2, FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, 0xffff },
- { gText_Steven_Pokenav_2B5ED9, FLAG_SYS_GAME_CLEAR, 0xffff },
- { NULL, 0xffff, 0xffff },
+ { MatchCall_Text_Steven1, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Steven2, FLAG_RUSTURF_TUNNEL_OPENED, 0xFFFF },
+ { MatchCall_Text_Steven3, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
+ { MatchCall_Text_Steven4, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
+ { MatchCall_Text_Steven5, FLAG_DEFEATED_MOSSDEEP_GYM, 0xFFFF },
+ { MatchCall_Text_Steven6, FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, 0xFFFF },
+ { MatchCall_Text_Steven7, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF },
};
-static const struct MatchCallStruct0 sStevenMatchCallHeader =
+static const struct MatchCallStructNPC sStevenMatchCallHeader =
{
- .type = 0,
+ .type = MC_TYPE_NPC,
.mapSec = MAPSEC_NONE,
.flag = FLAG_REGISTERED_STEVEN_POKENAV,
- .desc = gStevenMatchCallDesc,
- .name = gStevenMatchCallName,
+ .desc = gText_StevenMatchCallDesc,
+ .name = gText_StevenMatchCallName,
.textData = sStevenTextScripts
};
static const match_call_text_data_t sMayTextScripts[] = {
- { gText_May_Pokenav_2B3AB3, 0xFFFF, 0xFFFF },
- { gText_May_Pokenav_2B3B3F, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF },
- { gText_May_Pokenav_2B3C13, FLAG_DELIVERED_DEVON_GOODS, 0xFFFF },
- { gText_May_Pokenav_2B3CF3, FLAG_HIDE_MAUVILLE_CITY_WALLY, 0xFFFF },
- { gText_May_Pokenav_2B3D4B, FLAG_RECEIVED_HM04, 0xFFFF },
- { gText_May_Pokenav_2B3DD1, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF },
- { gText_May_Pokenav_2B3E69, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
- { gText_May_Pokenav_2B3ECD, FLAG_RECEIVED_CASTFORM, 0xFFFF },
- { gText_May_Pokenav_2B3F2B, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
- { gText_May_Pokenav_2B3FFB, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF },
- { gText_May_Pokenav_2B402B, FLAG_MET_TEAM_AQUA_HARBOR, 0xFFFF },
- { gText_May_Pokenav_2B414B, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
- { gText_May_Pokenav_2B4228, FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, 0xFFFF },
- { gText_May_Pokenav_2B42E0, FLAG_DEFEATED_SOOTOPOLIS_GYM, 0xFFFF },
- { gText_May_Pokenav_2B4350, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_May1, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_May2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF },
+ { MatchCall_Text_May3, FLAG_DELIVERED_DEVON_GOODS, 0xFFFF },
+ { MatchCall_Text_May4, FLAG_HIDE_MAUVILLE_CITY_WALLY, 0xFFFF },
+ { MatchCall_Text_May5, FLAG_RECEIVED_HM04, 0xFFFF },
+ { MatchCall_Text_May6, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF },
+ { MatchCall_Text_May7, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
+ { MatchCall_Text_May8, FLAG_RECEIVED_CASTFORM, 0xFFFF },
+ { MatchCall_Text_May9, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
+ { MatchCall_Text_May10, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF },
+ { MatchCall_Text_May11, FLAG_MET_TEAM_AQUA_HARBOR, 0xFFFF },
+ { MatchCall_Text_May12, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
+ { MatchCall_Text_May13, FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, 0xFFFF },
+ { MatchCall_Text_May14, FLAG_DEFEATED_SOOTOPOLIS_GYM, 0xFFFF },
+ { MatchCall_Text_May15, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct4 sMayMatchCallHeader =
+static const struct MatchCallRival sMayMatchCallHeader =
{
- .type = 4,
- .gender = MALE, //Gender of player
+ .type = MC_TYPE_RIVAL,
+ .playerGender = MALE,
.flag = FLAG_ENABLE_RIVAL_MATCH_CALL,
- .desc = gMayBrendanMatchCallDesc,
- .name = gExpandedPlaceholder_May,
+ .desc = gText_MayBrendanMatchCallDesc,
+ .name = gText_ExpandedPlaceholder_May,
.textData = sMayTextScripts
};
static const match_call_text_data_t sBrendanTextScripts[] = {
- { gText_Brendan_Pokenav_2B43EF, 0xFFFF, 0xFFFF },
- { gText_Brendan_Pokenav_2B4486, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF },
- { gText_Brendan_Pokenav_2B4560, FLAG_DELIVERED_DEVON_GOODS, 0xFFFF },
- { gText_Brendan_Pokenav_2B463F, FLAG_HIDE_MAUVILLE_CITY_WALLY, 0xFFFF },
- { gText_Brendan_Pokenav_2B46B7, FLAG_RECEIVED_HM04, 0xFFFF },
- { gText_Brendan_Pokenav_2B4761, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF },
- { gText_Brendan_Pokenav_2B47F4, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
- { gText_Brendan_Pokenav_2B4882, FLAG_RECEIVED_CASTFORM, 0xFFFF },
- { gText_Brendan_Pokenav_2B4909, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
- { gText_Brendan_Pokenav_2B49C4, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF },
- { gText_Brendan_Pokenav_2B4A44, FLAG_MET_TEAM_AQUA_HARBOR, 0xFFFF },
- { gText_Brendan_Pokenav_2B4B28, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
- { gText_Brendan_Pokenav_2B4C15, FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, 0xFFFF },
- { gText_Brendan_Pokenav_2B4CD8, FLAG_DEFEATED_SOOTOPOLIS_GYM, 0xFFFF },
- { gText_Brendan_Pokenav_2B4D46, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Brendan1, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Brendan2, FLAG_DEFEATED_DEWFORD_GYM, 0xFFFF },
+ { MatchCall_Text_Brendan3, FLAG_DELIVERED_DEVON_GOODS, 0xFFFF },
+ { MatchCall_Text_Brendan4, FLAG_HIDE_MAUVILLE_CITY_WALLY, 0xFFFF },
+ { MatchCall_Text_Brendan5, FLAG_RECEIVED_HM04, 0xFFFF },
+ { MatchCall_Text_Brendan6, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF },
+ { MatchCall_Text_Brendan7, FLAG_DEFEATED_PETALBURG_GYM, 0xFFFF },
+ { MatchCall_Text_Brendan8, FLAG_RECEIVED_CASTFORM, 0xFFFF },
+ { MatchCall_Text_Brendan9, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
+ { MatchCall_Text_Brendan10, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF },
+ { MatchCall_Text_Brendan11, FLAG_MET_TEAM_AQUA_HARBOR, 0xFFFF },
+ { MatchCall_Text_Brendan12, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
+ { MatchCall_Text_Brendan13, FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, 0xFFFF },
+ { MatchCall_Text_Brendan14, FLAG_DEFEATED_SOOTOPOLIS_GYM, 0xFFFF },
+ { MatchCall_Text_Brendan15, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct4 sBrendanMatchCallHeader =
+static const struct MatchCallRival sBrendanMatchCallHeader =
{
- .type = 4,
- .gender = FEMALE, //Gender of player
+ .type = MC_TYPE_RIVAL,
+ .playerGender = FEMALE,
.flag = FLAG_ENABLE_RIVAL_MATCH_CALL,
- .desc = gMayBrendanMatchCallDesc,
- .name = gExpandedPlaceholder_Brendan,
+ .desc = gText_MayBrendanMatchCallDesc,
+ .name = gText_ExpandedPlaceholder_Brendan,
.textData = sBrendanTextScripts
};
static const match_call_text_data_t sWallyTextScripts[] = {
- { gText_Wally_Pokenav_2B4DE2, 0xFFFF, 0xFFFF },
- { gText_Wally_Pokenav_2B4E57, FLAG_RUSTURF_TUNNEL_OPENED, 0xFFFF },
- { gText_Wally_Pokenav_2B4EA5, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF },
- { gText_Wally_Pokenav_2B4F41, FLAG_RECEIVED_CASTFORM, 0xFFFF },
- { gText_Wally_Pokenav_2B4FF3, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF },
- { gText_Wally_Pokenav_2B50B1, FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, 0xFFFF },
- { gText_Wally_Pokenav_2B5100, FLAG_DEFEATED_WALLY_VICTORY_ROAD, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Wally1, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Wally2, FLAG_RUSTURF_TUNNEL_OPENED, 0xFFFF },
+ { MatchCall_Text_Wally3, FLAG_DEFEATED_LAVARIDGE_GYM, 0xFFFF },
+ { MatchCall_Text_Wally4, FLAG_RECEIVED_CASTFORM, 0xFFFF },
+ { MatchCall_Text_Wally5, FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xFFFF },
+ { MatchCall_Text_Wally6, FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, 0xFFFF },
+ { MatchCall_Text_Wally7, FLAG_DEFEATED_WALLY_VICTORY_ROAD, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-const struct MatchCallSubstruct2 sWallyAdditionalData[] = {
+const struct MatchCallLocationOverride sWallyLocationData[] = {
{ FLAG_HIDE_MAUVILLE_CITY_WALLY, MAPSEC_VERDANTURF_TOWN },
{ FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, MAPSEC_NONE },
{ FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY, MAPSEC_VICTORY_ROAD },
{ 0xFFFF, MAPSEC_NONE }
};
-static const struct MatchCallStruct2 sWallyMatchCallHeader =
+static const struct MatchCallWally sWallyMatchCallHeader =
{
- .type = 2,
+ .type = MC_TYPE_WALLY,
.mapSec = 0,
.flag = FLAG_ENABLE_WALLY_MATCH_CALL,
.rematchTableIdx = REMATCH_WALLY_3,
- .desc = gWallyMatchCallDesc,
+ .desc = gText_WallyMatchCallDesc,
.textData = sWallyTextScripts,
- .v10 = sWallyAdditionalData
+ .locationData = sWallyLocationData
};
static const match_call_text_data_t sScottTextScripts[] = {
- { gText_Scott_Pokenav_2B5184, 0xFFFF, 0xFFFF },
- { gText_Scott_Pokenav_2B5275, FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY, 0xFFFF },
- { gText_Scott_Pokenav_2B5323, FLAG_RECEIVED_CASTFORM, 0xFFFF },
- { gText_Scott_Pokenav_2B53DB, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
- { gText_Scott_Pokenav_2B54A5, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
- { gText_Scott_Pokenav_2B5541, FLAG_DEFEATED_SOOTOPOLIS_GYM, 0xFFFF },
- { gText_Scott_Pokenav_2B56CA, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Scott1, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Scott2, FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY, 0xFFFF },
+ { MatchCall_Text_Scott3, FLAG_RECEIVED_CASTFORM, 0xFFFF },
+ { MatchCall_Text_Scott4, FLAG_RECEIVED_RED_OR_BLUE_ORB, 0xFFFF },
+ { MatchCall_Text_Scott5, FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE, 0xFFFF },
+ { MatchCall_Text_Scott6, FLAG_DEFEATED_SOOTOPOLIS_GYM, 0xFFFF },
+ { MatchCall_Text_Scott7, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct0 sScottMatchCallHeader =
+static const struct MatchCallStructNPC sScottMatchCallHeader =
{
.type = 0,
.mapSec = MAPSEC_NONE,
.flag = FLAG_ENABLE_SCOTT_MATCH_CALL,
- .desc = gScottMatchCallDesc,
- .name = gScottMatchCallName,
+ .desc = gText_ScottMatchCallDesc,
+ .name = gText_ScottMatchCallName,
.textData = sScottTextScripts
};
static const match_call_text_data_t sRoxanneTextScripts[] = {
- { gText_Roxanne_Pokenav_2B2456, 0xFFFE, 0xFFFF },
- { gText_Roxanne_Pokenav_2B250E, 0xFFFF, 0xFFFF },
- { gText_Roxanne_Pokenav_2B25C1, 0xFFFF, 0xFFFF },
- { gText_Roxanne_Pokenav_2B2607, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Roxanne1, 0xFFFE, 0xFFFF },
+ { MatchCall_Text_Roxanne2, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Roxanne3, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Roxanne4, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sRoxanneMatchCallHeader =
+static const struct MatchCallStructTrainer sRoxanneMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_RUSTBORO_CITY,
.flag = FLAG_ENABLE_ROXANNE_MATCH_CALL,
.rematchTableIdx = REMATCH_ROXANNE,
- .desc = gRoxanneMatchCallDesc,
+ .desc = gText_RoxanneMatchCallDesc,
.name = NULL,
.textData = sRoxanneTextScripts
};
static const match_call_text_data_t sBrawlyTextScripts[] = {
- { gText_Brawly_Pokenav_2B2659, 0xFFFE, 0xFFFF },
- { gText_Brawly_Pokenav_2B275D, 0xFFFF, 0xFFFF },
- { gText_Brawly_Pokenav_2B286F, 0xFFFF, 0xFFFF },
- { gText_Brawly_Pokenav_2B28D1, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Brawly1, 0xFFFE, 0xFFFF },
+ { MatchCall_Text_Brawly2, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Brawly3, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Brawly4, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sBrawlyMatchCallHeader =
+static const struct MatchCallStructTrainer sBrawlyMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_DEWFORD_TOWN,
.flag = FLAG_ENABLE_BRAWLY_MATCH_CALL,
.rematchTableIdx = REMATCH_BRAWLY,
- .desc = gBrawlyMatchCallDesc,
+ .desc = gText_BrawlyMatchCallDesc,
.name = NULL,
.textData = sBrawlyTextScripts
};
static const match_call_text_data_t sWattsonTextScripts[] = {
- { gText_Wattson_Pokenav_2B2912, 0xFFFE, 0xFFFF },
- { gText_Wattson_Pokenav_2B29CA, 0xFFFF, 0xFFFF },
- { gText_Wattson_Pokenav_2B2AB6, 0xFFFF, 0xFFFF },
- { gText_Wattson_Pokenav_2B2B01, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Wattson1, 0xFFFE, 0xFFFF },
+ { MatchCall_Text_Wattson2, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Wattson3, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Wattson4, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sWattsonMatchCallHeader =
+static const struct MatchCallStructTrainer sWattsonMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_MAUVILLE_CITY,
.flag = FLAG_ENABLE_WATTSON_MATCH_CALL,
.rematchTableIdx = REMATCH_WATTSON,
- .desc = gWattsonMatchCallDesc,
+ .desc = gText_WattsonMatchCallDesc,
.name = NULL,
.textData = sWattsonTextScripts
};
static const match_call_text_data_t sFlanneryTextScripts[] = {
- { gText_Flannery_Pokenav_2B2B4D, 0xFFFE, 0xFFFF },
- { gText_Flannery_Pokenav_2B2C0E, 0xFFFF, 0xFFFF },
- { gText_Flannery_Pokenav_2B2CF1, 0xFFFF, 0xFFFF },
- { gText_Flannery_Pokenav_2B2D54, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Flannery1, 0xFFFE, 0xFFFF },
+ { MatchCall_Text_Flannery2, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Flannery3, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Flannery4, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sFlanneryMatchCallHeader =
+static const struct MatchCallStructTrainer sFlanneryMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_LAVARIDGE_TOWN,
.flag = FLAG_ENABLE_FLANNERY_MATCH_CALL,
.rematchTableIdx = REMATCH_FLANNERY,
- .desc = gFlanneryMatchCallDesc,
+ .desc = gText_FlanneryMatchCallDesc,
.name = NULL,
.textData = sFlanneryTextScripts
};
static const match_call_text_data_t sWinonaTextScripts[] = {
- { gText_Winona_Pokenav_2B2DA4, 0xFFFE, 0xFFFF },
- { gText_Winona_Pokenav_2B2E2B, 0xFFFF, 0xFFFF },
- { gText_Winona_Pokenav_2B2EC2, 0xFFFF, 0xFFFF },
- { gText_Winona_Pokenav_2B2F16, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Winona1, 0xFFFE, 0xFFFF },
+ { MatchCall_Text_Winona2, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Winona3, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Winona4, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sWinonaMatchCallHeader =
+static const struct MatchCallStructTrainer sWinonaMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_FORTREE_CITY,
.flag = FLAG_ENABLE_WINONA_MATCH_CALL,
.rematchTableIdx = REMATCH_WINONA,
- .desc = gWinonaMatchCallDesc,
+ .desc = gText_WinonaMatchCallDesc,
.name = NULL,
.textData = sWinonaTextScripts
};
static const match_call_text_data_t sTateLizaTextScripts[] = {
- { gText_TateLiza_Pokenav_2B2F97, 0xFFFE, 0xFFFF },
- { gText_TateLiza_Pokenav_2B306E, 0xFFFF, 0xFFFF },
- { gText_TateLiza_Pokenav_2B3158, 0xFFFF, 0xFFFF },
- { gText_TateLiza_Pokenav_2B31CD, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_TateLiza1, 0xFFFE, 0xFFFF },
+ { MatchCall_Text_TateLiza2, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_TateLiza3, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_TateLiza4, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sTateLizaMatchCallHeader =
+static const struct MatchCallStructTrainer sTateLizaMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_MOSSDEEP_CITY,
.flag = FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL,
.rematchTableIdx = REMATCH_TATE_AND_LIZA,
- .desc = gTateLizaMatchCallDesc,
+ .desc = gText_TateLizaMatchCallDesc,
.name = NULL,
.textData = sTateLizaTextScripts
};
static const match_call_text_data_t sJuanTextScripts[] = {
- { gText_Juan_Pokenav_2B3249, 0xFFFE, 0xFFFF },
- { gText_Juan_Pokenav_2B32EC, 0xFFFF, 0xFFFF },
- { gText_Juan_Pokenav_2B33AA, 0xFFFF, 0xFFFF },
- { gText_Juan_Pokenav_2B341E, FLAG_SYS_GAME_CLEAR, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Juan1, 0xFFFE, 0xFFFF },
+ { MatchCall_Text_Juan2, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Juan3, 0xFFFF, 0xFFFF },
+ { MatchCall_Text_Juan4, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sJuanMatchCallHeader =
+static const struct MatchCallStructTrainer sJuanMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_SOOTOPOLIS_CITY,
.flag = FLAG_ENABLE_JUAN_MATCH_CALL,
.rematchTableIdx = REMATCH_JUAN,
- .desc = gJuanMatchCallDesc,
+ .desc = gText_JuanMatchCallDesc,
.name = NULL,
.textData = sJuanTextScripts
};
static const match_call_text_data_t sSidneyTextScripts[] = {
- { gText_Sidney_Pokenav_2B34CC, 0xFFFF, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Sidney, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sSidneyMatchCallHeader =
+static const struct MatchCallStructTrainer sSidneyMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_EVER_GRANDE_CITY,
.flag = FLAG_REMATCH_SIDNEY,
.rematchTableIdx = REMATCH_SIDNEY,
- .desc = gEliteFourMatchCallDesc,
+ .desc = gText_EliteFourMatchCallDesc,
.name = NULL,
.textData = sSidneyTextScripts
};
static const match_call_text_data_t sPhoebeTextScripts[] = {
- { gText_Phoebe_Pokenav_2B3561, 0xFFFF, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Phoebe, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sPhoebeMatchCallHeader =
+static const struct MatchCallStructTrainer sPhoebeMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_EVER_GRANDE_CITY,
.flag = FLAG_REMATCH_PHOEBE,
.rematchTableIdx = REMATCH_PHOEBE,
- .desc = gEliteFourMatchCallDesc,
+ .desc = gText_EliteFourMatchCallDesc,
.name = NULL,
.textData = sPhoebeTextScripts
};
static const match_call_text_data_t sGlaciaTextScripts[] = {
- { gText_Glacia_Pokenav_2B35E4, 0xFFFF, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Glacia, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sGlaciaMatchCallHeader =
+static const struct MatchCallStructTrainer sGlaciaMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_EVER_GRANDE_CITY,
.flag = FLAG_REMATCH_GLACIA,
.rematchTableIdx = REMATCH_GLACIA,
- .desc = gEliteFourMatchCallDesc,
+ .desc = gText_EliteFourMatchCallDesc,
.name = NULL,
.textData = sGlaciaTextScripts
};
static const match_call_text_data_t sDrakeTextScripts[] = {
- { gText_Drake_Pokenav_2B368B, 0xFFFF, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Drake, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sDrakeMatchCallHeader =
+static const struct MatchCallStructTrainer sDrakeMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_EVER_GRANDE_CITY,
.flag = FLAG_REMATCH_DRAKE,
.rematchTableIdx = REMATCH_DRAKE,
- .desc = gEliteFourMatchCallDesc,
+ .desc = gText_EliteFourMatchCallDesc,
.name = NULL,
.textData = sDrakeTextScripts
};
static const match_call_text_data_t sWallaceTextScripts[] = {
- { gText_Wallace_Pokenav_2B3790, 0xFFFF, 0xFFFF },
- { NULL, 0xFFFF, 0xFFFF }
+ { MatchCall_Text_Wallace, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
};
-static const struct MatchCallStruct5 sWallaceMatchCallHeader =
+static const struct MatchCallStructTrainer sWallaceMatchCallHeader =
{
- .type = 5,
+ .type = MC_TYPE_LEADER,
.mapSec = MAPSEC_EVER_GRANDE_CITY,
.flag = FLAG_REMATCH_WALLACE,
.rematchTableIdx = REMATCH_WALLACE,
- .desc = gChampionMatchCallDesc,
+ .desc = gText_ChampionMatchCallDesc,
.name = NULL,
.textData = sWallaceTextScripts
};
static const match_call_t sMatchCallHeaders[] = {
- [MC_HEADER_MR_STONE] = {.type0 = &sMrStoneMatchCallHeader},
- [MC_HEADER_PROF_BIRCH] = {.type3 = &sProfBirchMatchCallHeader},
- [MC_HEADER_BRENDAN] = {.type4 = &sBrendanMatchCallHeader},
- [MC_HEADER_MAY] = {.type4 = &sMayMatchCallHeader},
- [MC_HEADER_WALLY] = {.type2 = &sWallyMatchCallHeader},
- [MC_HEADER_NORMAN] = {.type5 = &sNormanMatchCallHeader},
- [MC_HEADER_MOM] = {.type0 = &sMomMatchCallHeader},
- [MC_HEADER_STEVEN] = {.type0 = &sStevenMatchCallHeader},
- [MC_HEADER_SCOTT] = {.type0 = &sScottMatchCallHeader},
- [MC_HEADER_ROXANNE] = {.type5 = &sRoxanneMatchCallHeader},
- [MC_HEADER_BRAWLY] = {.type5 = &sBrawlyMatchCallHeader},
- [MC_HEADER_WATTSON] = {.type5 = &sWattsonMatchCallHeader},
- [MC_HEADER_FLANNERY] = {.type5 = &sFlanneryMatchCallHeader},
- [MC_HEADER_WINONA] = {.type5 = &sWinonaMatchCallHeader},
- [MC_HEADER_TATE_LIZA] = {.type5 = &sTateLizaMatchCallHeader},
- [MC_HEADER_JUAN] = {.type5 = &sJuanMatchCallHeader},
- [MC_HEADER_SIDNEY] = {.type5 = &sSidneyMatchCallHeader},
- [MC_HEADER_PHOEBE] = {.type5 = &sPhoebeMatchCallHeader},
- [MC_HEADER_GLACIA] = {.type5 = &sGlaciaMatchCallHeader},
- [MC_HEADER_DRAKE] = {.type5 = &sDrakeMatchCallHeader},
- [MC_HEADER_WALLACE] = {.type5 = &sWallaceMatchCallHeader}
+ [MC_HEADER_MR_STONE] = {.npc = &sMrStoneMatchCallHeader},
+ [MC_HEADER_PROF_BIRCH] = {.birch = &sProfBirchMatchCallHeader},
+ [MC_HEADER_BRENDAN] = {.rival = &sBrendanMatchCallHeader},
+ [MC_HEADER_MAY] = {.rival = &sMayMatchCallHeader},
+ [MC_HEADER_WALLY] = {.wally = &sWallyMatchCallHeader},
+ [MC_HEADER_NORMAN] = {.leader = &sNormanMatchCallHeader},
+ [MC_HEADER_MOM] = {.npc = &sMomMatchCallHeader},
+ [MC_HEADER_STEVEN] = {.npc = &sStevenMatchCallHeader},
+ [MC_HEADER_SCOTT] = {.npc = &sScottMatchCallHeader},
+ [MC_HEADER_ROXANNE] = {.leader = &sRoxanneMatchCallHeader},
+ [MC_HEADER_BRAWLY] = {.leader = &sBrawlyMatchCallHeader},
+ [MC_HEADER_WATTSON] = {.leader = &sWattsonMatchCallHeader},
+ [MC_HEADER_FLANNERY] = {.leader = &sFlanneryMatchCallHeader},
+ [MC_HEADER_WINONA] = {.leader = &sWinonaMatchCallHeader},
+ [MC_HEADER_TATE_LIZA] = {.leader = &sTateLizaMatchCallHeader},
+ [MC_HEADER_JUAN] = {.leader = &sJuanMatchCallHeader},
+ [MC_HEADER_SIDNEY] = {.leader = &sSidneyMatchCallHeader},
+ [MC_HEADER_PHOEBE] = {.leader = &sPhoebeMatchCallHeader},
+ [MC_HEADER_GLACIA] = {.leader = &sGlaciaMatchCallHeader},
+ [MC_HEADER_DRAKE] = {.leader = &sDrakeMatchCallHeader},
+ [MC_HEADER_WALLACE] = {.leader = &sWallaceMatchCallHeader}
};
-static bool32 (*const sMatchCallGetFlagFuncs[])(match_call_t) = {
- MatchCallGetFlag_Type0,
- MatchCallGetFlag_Type1,
- MatchCallGetFlag_Type2,
- MatchCallGetFlag_Type4,
- MatchCallGetFlag_Type3
+static bool32 (*const sMatchCallGetEnabledFuncs[])(match_call_t) = {
+ MatchCall_GetEnabled_NPC,
+ MatchCall_GetEnabled_Trainer,
+ MatchCall_GetEnabled_Wally,
+ MatchCall_GetEnabled_Rival,
+ MatchCall_GetEnabled_Birch
};
static u8 (*const sMatchCallGetMapSecFuncs[])(match_call_t) = {
- MatchCallGetMapSec_Type0,
- MatchCallGetMapSec_Type1,
- MatchCallGetMapSec_Type2,
- MatchCallGetMapSec_Type4,
- MatchCallGetMapSec_Type3
+ MatchCall_GetMapSec_NPC,
+ MatchCall_GetMapSec_Trainer,
+ MatchCall_GetMapSec_Wally,
+ MatchCall_GetMapSec_Rival,
+ MatchCall_GetMapSec_Birch
};
static bool32 (*const sMatchCall_IsRematchableFunctions[])(match_call_t) = {
- MatchCall_IsRematchable_Type0,
- MatchCall_IsRematchable_Type1,
- MatchCall_IsRematchable_Type2,
- MatchCall_IsRematchable_Type4,
- MatchCall_IsRematchable_Type3
+ MatchCall_IsRematchable_NPC,
+ MatchCall_IsRematchable_Trainer,
+ MatchCall_IsRematchable_Wally,
+ MatchCall_IsRematchable_Rival,
+ MatchCall_IsRematchable_Birch
};
static bool32 (*const sMatchCall_HasCheckPageFunctions[])(match_call_t) = {
- MatchCall_HasCheckPage_Type0,
- MatchCall_HasCheckPage_Type1,
- MatchCall_HasCheckPage_Type2,
- MatchCall_HasCheckPage_Type4,
- MatchCall_HasCheckPage_Type3
+ MatchCall_HasCheckPage_NPC,
+ MatchCall_HasCheckPage_Trainer,
+ MatchCall_HasCheckPage_Wally,
+ MatchCall_HasCheckPage_Rival,
+ MatchCall_HasCheckPage_Birch
};
static u32 (*const sMatchCall_GetRematchTableIdxFunctions[])(match_call_t) = {
- MatchCall_GetRematchTableIdx_Type0,
- MatchCall_GetRematchTableIdx_Type1,
- MatchCall_GetRematchTableIdx_Type2,
- MatchCall_GetRematchTableIdx_Type4,
- MatchCall_GetRematchTableIdx_Type3
+ MatchCall_GetRematchTableIdx_NPC,
+ MatchCall_GetRematchTableIdx_Trainer,
+ MatchCall_GetRematchTableIdx_Wally,
+ MatchCall_GetRematchTableIdx_Rival,
+ MatchCall_GetRematchTableIdx_Birch
};
static void (*const sMatchCall_GetMessageFunctions[])(match_call_t, u8 *) = {
- MatchCall_GetMessage_Type0,
- MatchCall_GetMessage_Type1,
- MatchCall_GetMessage_Type2,
- MatchCall_GetMessage_Type4,
- MatchCall_GetMessage_Type3
+ MatchCall_GetMessage_NPC,
+ MatchCall_GetMessage_Trainer,
+ MatchCall_GetMessage_Wally,
+ MatchCall_GetMessage_Rival,
+ MatchCall_GetMessage_Birch
};
static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8 **, const u8 **) = {
- MatchCall_GetNameAndDesc_Type0,
- MatchCall_GetNameAndDesc_Type1,
- MatchCall_GetNameAndDesc_Type2,
- MatchCall_GetNameAndDesc_Type4,
- MatchCall_GetNameAndDesc_Type3
+ MatchCall_GetNameAndDesc_NPC,
+ MatchCall_GetNameAndDesc_Trainer,
+ MatchCall_GetNameAndDesc_Wally,
+ MatchCall_GetNameAndDesc_Rival,
+ MatchCall_GetNameAndDesc_Birch
};
-static const struct MatchCallOverride sMatchCallCheckPageOverrides[] = {
- { MC_HEADER_STEVEN, FACILITY_CLASS_STEVEN, 0xFFFF, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle } }, // STEVEN
- { MC_HEADER_STEVEN, FACILITY_CLASS_STEVEN, FLAG_DEFEATED_MOSSDEEP_GYM, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle } }, // STEVEN
- { MC_HEADER_BRENDAN, FACILITY_CLASS_BRENDAN, 0xFFFF, { gMatchCall_BrendanStrategyText, gMatchCall_BrendanTrainersPokemonText, gMatchCall_BrendanSelfIntroductionText_Line1, gMatchCall_BrendanSelfIntroductionText_Line2 } }, // Brendan
- { MC_HEADER_MAY, FACILITY_CLASS_MAY, 0xFFFF, { gMatchCall_MayStrategyText, gMatchCall_MayTrainersPokemonText, gMatchCall_MaySelfIntroductionText_Line1, gMatchCall_MaySelfIntroductionText_Line2 } } // May
+static const struct MatchCallCheckPageOverride sCheckPageOverrides[] = {
+ {
+ .idx = MC_HEADER_STEVEN,
+ .facilityClass = FACILITY_CLASS_STEVEN,
+ .flag = 0xFFFF,
+ .flavorTexts = {
+ [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy,
+ [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon,
+ [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle,
+ [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle
+ }
+ },
+ {
+ .idx = MC_HEADER_STEVEN,
+ .facilityClass = FACILITY_CLASS_STEVEN,
+ .flag = FLAG_DEFEATED_MOSSDEEP_GYM,
+ .flavorTexts = {
+ [CHECK_PAGE_STRATEGY] = gText_MatchCallSteven_Strategy,
+ [CHECK_PAGE_POKEMON] = gText_MatchCallSteven_Pokemon,
+ [CHECK_PAGE_INTRO_1] = gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle,
+ [CHECK_PAGE_INTRO_2] = gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle
+ }
+ },
+ {
+ .idx = MC_HEADER_BRENDAN,
+ .facilityClass = FACILITY_CLASS_BRENDAN,
+ .flag = 0xFFFF,
+ .flavorTexts = MCFLAVOR(Brendan)
+ },
+ {
+ .idx = MC_HEADER_MAY,
+ .facilityClass = FACILITY_CLASS_MAY,
+ .flag = 0xFFFF,
+ .flavorTexts = MCFLAVOR(May)
+ }
};
// .text
@@ -821,17 +700,17 @@ static u32 MatchCallGetFunctionIndex(match_call_t matchCall)
{
switch (matchCall.common->type)
{
- case 0:
default:
+ case MC_TYPE_NPC:
return 0;
- case 1:
- case 5:
+ case MC_TYPE_TRAINER:
+ case MC_TYPE_LEADER:
return 1;
- case 2:
+ case MC_TYPE_WALLY:
return 2;
- case 4:
+ case MC_TYPE_RIVAL:
return 3;
- case 3:
+ case MC_TYPE_BIRCH:
return 4;
}
}
@@ -853,93 +732,93 @@ s32 GetRematchIdxByTrainerIdx(s32 trainerIdx)
return -1;
}
-bool32 MatchCallFlagGetByIndex(u32 idx)
+bool32 MatchCall_GetEnabled(u32 idx)
{
match_call_t matchCall;
u32 i;
- if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1)
+ if (idx >= ARRAY_COUNT(sMatchCallHeaders))
return FALSE;
matchCall = sMatchCallHeaders[idx];
i = MatchCallGetFunctionIndex(matchCall);
- return sMatchCallGetFlagFuncs[i](matchCall);
+ return sMatchCallGetEnabledFuncs[i](matchCall);
}
-static bool32 MatchCallGetFlag_Type0(match_call_t matchCall)
+static bool32 MatchCall_GetEnabled_NPC(match_call_t matchCall)
{
- if (matchCall.type0->flag == 0xffff)
+ if (matchCall.npc->flag == 0xFFFF)
return TRUE;
- return FlagGet(matchCall.type0->flag);
+ return FlagGet(matchCall.npc->flag);
}
-static bool32 MatchCallGetFlag_Type1(match_call_t matchCall)
+static bool32 MatchCall_GetEnabled_Trainer(match_call_t matchCall)
{
- if (matchCall.type1->flag == 0xffff)
+ if (matchCall.trainer->flag == 0xFFFF)
return TRUE;
- return FlagGet(matchCall.type1->flag);
+ return FlagGet(matchCall.trainer->flag);
}
-static bool32 MatchCallGetFlag_Type2(match_call_t matchCall)
+static bool32 MatchCall_GetEnabled_Wally(match_call_t matchCall)
{
- if (matchCall.type2->flag == 0xffff)
+ if (matchCall.wally->flag == 0xFFFF)
return TRUE;
- return FlagGet(matchCall.type2->flag);
+ return FlagGet(matchCall.wally->flag);
}
-static bool32 MatchCallGetFlag_Type4(match_call_t matchCall)
+static bool32 MatchCall_GetEnabled_Rival(match_call_t matchCall)
{
- if (matchCall.type4->gender != gSaveBlock2Ptr->playerGender)
+ if (matchCall.rival->playerGender != gSaveBlock2Ptr->playerGender)
return FALSE;
- if (matchCall.type4->flag == 0xffff)
+ if (matchCall.rival->flag == 0xFFFF)
return TRUE;
- return FlagGet(matchCall.type4->flag);
+ return FlagGet(matchCall.rival->flag);
}
-static bool32 MatchCallGetFlag_Type3(match_call_t matchCall)
+static bool32 MatchCall_GetEnabled_Birch(match_call_t matchCall)
{
- return FlagGet(matchCall.type3->flag);
+ return FlagGet(matchCall.birch->flag);
}
-u8 MatchCallMapSecGetByIndex(u32 idx)
+u8 MatchCall_GetMapSec(u32 idx)
{
match_call_t matchCall;
u32 i;
- if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1)
+ if (idx >= ARRAY_COUNT(sMatchCallHeaders))
return 0;
matchCall = sMatchCallHeaders[idx];
i = MatchCallGetFunctionIndex(matchCall);
return sMatchCallGetMapSecFuncs[i](matchCall);
}
-static u8 MatchCallGetMapSec_Type0(match_call_t matchCall)
+static u8 MatchCall_GetMapSec_NPC(match_call_t matchCall)
{
- return matchCall.type0->mapSec;
+ return matchCall.npc->mapSec;
}
-static u8 MatchCallGetMapSec_Type1(match_call_t matchCall)
+static u8 MatchCall_GetMapSec_Trainer(match_call_t matchCall)
{
- return matchCall.type1->mapSec;
+ return matchCall.trainer->mapSec;
}
-static u8 MatchCallGetMapSec_Type2(match_call_t matchCall)
+static u8 MatchCall_GetMapSec_Wally(match_call_t matchCall)
{
s32 i;
- for (i = 0; matchCall.type2->v10[i].flag != 0xffff; i++)
+ for (i = 0; matchCall.wally->locationData[i].flag != 0xFFFF; i++)
{
- if (!FlagGet(matchCall.type2->v10[i].flag))
+ if (!FlagGet(matchCall.wally->locationData[i].flag))
break;
}
- return matchCall.type2->v10[i].mapSec;
+ return matchCall.wally->locationData[i].mapSec;
}
-static u8 MatchCallGetMapSec_Type4(match_call_t matchCall)
+static u8 MatchCall_GetMapSec_Rival(match_call_t matchCall)
{
return MAPSEC_NONE;
}
-static u8 MatchCallGetMapSec_Type3(match_call_t matchCall)
+static u8 MatchCall_GetMapSec_Birch(match_call_t matchCall)
{
return MAPSEC_NONE;
}
@@ -949,36 +828,36 @@ bool32 MatchCall_IsRematchable(u32 idx)
match_call_t matchCall;
u32 i;
- if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1)
+ if (idx >= ARRAY_COUNT(sMatchCallHeaders))
return 0;
matchCall = sMatchCallHeaders[idx];
i = MatchCallGetFunctionIndex(matchCall);
return sMatchCall_IsRematchableFunctions[i](matchCall);
}
-static bool32 MatchCall_IsRematchable_Type0(match_call_t matchCall)
+static bool32 MatchCall_IsRematchable_NPC(match_call_t matchCall)
{
return FALSE;
}
-static bool32 MatchCall_IsRematchable_Type1(match_call_t matchCall)
+static bool32 MatchCall_IsRematchable_Trainer(match_call_t matchCall)
{
- if (matchCall.type1->rematchTableIdx >= REMATCH_ELITE_FOUR_ENTRIES)
+ if (matchCall.trainer->rematchTableIdx >= REMATCH_ELITE_FOUR_ENTRIES)
return FALSE;
- return gSaveBlock1Ptr->trainerRematches[matchCall.type1->rematchTableIdx] ? TRUE : FALSE;
+ return gSaveBlock1Ptr->trainerRematches[matchCall.trainer->rematchTableIdx] ? TRUE : FALSE;
}
-static bool32 MatchCall_IsRematchable_Type2(match_call_t matchCall)
+static bool32 MatchCall_IsRematchable_Wally(match_call_t matchCall)
{
- return gSaveBlock1Ptr->trainerRematches[matchCall.type2->rematchTableIdx] ? TRUE : FALSE;
+ return gSaveBlock1Ptr->trainerRematches[matchCall.wally->rematchTableIdx] ? TRUE : FALSE;
}
-static bool32 MatchCall_IsRematchable_Type4(match_call_t matchCall)
+static bool32 MatchCall_IsRematchable_Rival(match_call_t matchCall)
{
return FALSE;
}
-static bool32 MatchCall_IsRematchable_Type3(match_call_t matchCall)
+static bool32 MatchCall_IsRematchable_Birch(match_call_t matchCall)
{
return FALSE;
}
@@ -988,41 +867,41 @@ bool32 MatchCall_HasCheckPage(u32 idx)
match_call_t matchCall;
u32 i;
- if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1)
+ if (idx >= ARRAY_COUNT(sMatchCallHeaders))
return FALSE;
matchCall = sMatchCallHeaders[idx];
i = MatchCallGetFunctionIndex(matchCall);
if (sMatchCall_HasCheckPageFunctions[i](matchCall))
return TRUE;
- for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++)
+ for (i = 0; i < ARRAY_COUNT(sCheckPageOverrides); i++)
{
- if (sMatchCallCheckPageOverrides[i].idx == idx)
+ if (sCheckPageOverrides[i].idx == idx)
return TRUE;
}
return FALSE;
}
-static bool32 MatchCall_HasCheckPage_Type0(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_NPC(match_call_t matchCall)
{
return FALSE;
}
-static bool32 MatchCall_HasCheckPage_Type1(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Trainer(match_call_t matchCall)
{
return TRUE;
}
-static bool32 MatchCall_HasCheckPage_Type2(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Wally(match_call_t matchCall)
{
return TRUE;
}
-static bool32 MatchCall_HasCheckPage_Type4(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Rival(match_call_t matchCall)
{
return FALSE;
}
-static bool32 MatchCall_HasCheckPage_Type3(match_call_t matchCall)
+static bool32 MatchCall_HasCheckPage_Birch(match_call_t matchCall)
{
return FALSE;
}
@@ -1032,34 +911,34 @@ u32 MatchCall_GetRematchTableIdx(u32 idx)
match_call_t matchCall;
u32 i;
- if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1)
+ if (idx >= ARRAY_COUNT(sMatchCallHeaders))
return REMATCH_TABLE_ENTRIES;
matchCall = sMatchCallHeaders[idx];
i = MatchCallGetFunctionIndex(matchCall);
return sMatchCall_GetRematchTableIdxFunctions[i](matchCall);
}
-static u32 MatchCall_GetRematchTableIdx_Type0(match_call_t matchCall)
+static u32 MatchCall_GetRematchTableIdx_NPC(match_call_t matchCall)
{
return REMATCH_TABLE_ENTRIES;
}
-static u32 MatchCall_GetRematchTableIdx_Type1(match_call_t matchCall)
+static u32 MatchCall_GetRematchTableIdx_Trainer(match_call_t matchCall)
{
- return matchCall.type1->rematchTableIdx;
+ return matchCall.trainer->rematchTableIdx;
}
-static u32 MatchCall_GetRematchTableIdx_Type2(match_call_t matchCall)
+static u32 MatchCall_GetRematchTableIdx_Wally(match_call_t matchCall)
{
- return matchCall.type2->rematchTableIdx;
+ return matchCall.wally->rematchTableIdx;
}
-static u32 MatchCall_GetRematchTableIdx_Type4(match_call_t matchCall)
+static u32 MatchCall_GetRematchTableIdx_Rival(match_call_t matchCall)
{
return REMATCH_TABLE_ENTRIES;
}
-static u32 MatchCall_GetRematchTableIdx_Type3(match_call_t matchCall)
+static u32 MatchCall_GetRematchTableIdx_Birch(match_call_t matchCall)
{
return REMATCH_TABLE_ENTRIES;
}
@@ -1069,76 +948,77 @@ void MatchCall_GetMessage(u32 idx, u8 *dest)
match_call_t matchCall;
u32 i;
- if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1)
+ if (idx >= ARRAY_COUNT(sMatchCallHeaders))
return;
matchCall = sMatchCallHeaders[idx];
i = MatchCallGetFunctionIndex(matchCall);
sMatchCall_GetMessageFunctions[i](matchCall, dest);
}
-static void MatchCall_GetMessage_Type0(match_call_t matchCall, u8 *dest)
+static void MatchCall_GetMessage_NPC(match_call_t matchCall, u8 *dest)
{
- sub_81D1920(matchCall.type0->textData, dest);
+ MatchCall_BufferCallMessageText(matchCall.npc->textData, dest);
}
-static void MatchCall_GetMessage_Type1(match_call_t matchCall, u8 *dest)
+// This is the one functional difference between MC_TYPE_TRAINER and MC_TYPE_LEADER
+static void MatchCall_GetMessage_Trainer(match_call_t matchCall, u8 *dest)
{
- if (matchCall.common->type != 5)
- sub_81D1920(matchCall.type1->textData, dest);
+ if (matchCall.common->type != MC_TYPE_LEADER)
+ MatchCall_BufferCallMessageText(matchCall.trainer->textData, dest);
else
- sub_81D199C(matchCall.type5->textData, matchCall.type5->rematchTableIdx, dest);
+ MatchCall_BufferCallMessageTextByRematchTeam(matchCall.leader->textData, matchCall.leader->rematchTableIdx, dest);
}
-static void MatchCall_GetMessage_Type2(match_call_t matchCall, u8 *dest)
+static void MatchCall_GetMessage_Wally(match_call_t matchCall, u8 *dest)
{
- sub_81D1920(matchCall.type2->textData, dest);
+ MatchCall_BufferCallMessageText(matchCall.wally->textData, dest);
}
-static void MatchCall_GetMessage_Type4(match_call_t matchCall, u8 *dest)
+static void MatchCall_GetMessage_Rival(match_call_t matchCall, u8 *dest)
{
- sub_81D1920(matchCall.type4->textData, dest);
+ MatchCall_BufferCallMessageText(matchCall.rival->textData, dest);
}
-static void MatchCall_GetMessage_Type3(match_call_t matchCall, u8 *dest)
+static void MatchCall_GetMessage_Birch(match_call_t matchCall, u8 *dest)
{
- sub_8197080(dest);
+ BufferPokedexRatingForMatchCall(dest);
}
-static void sub_81D1920(const match_call_text_data_t *sub0, u8 *dest)
+static void MatchCall_BufferCallMessageText(const match_call_text_data_t *textData, u8 *dest)
{
u32 i;
- for (i = 0; sub0[i].text != NULL; i++)
+ for (i = 0; textData[i].text != NULL; i++)
;
if (i)
i--;
while (i)
{
- if (sub0[i].flag != 0xffff && FlagGet(sub0[i].flag) == TRUE)
+ if (textData[i].flag != 0xFFFF && FlagGet(textData[i].flag) == TRUE)
break;
i--;
}
- if (sub0[i].flag2 != 0xffff)
- FlagSet(sub0[i].flag2);
- StringExpandPlaceholders(dest, sub0[i].text);
+ if (textData[i].flag2 != 0xFFFF)
+ FlagSet(textData[i].flag2);
+ StringExpandPlaceholders(dest, textData[i].text);
}
-static void sub_81D199C(const match_call_text_data_t *sub0, u16 idx, u8 *dest)
+static void MatchCall_BufferCallMessageTextByRematchTeam(const match_call_text_data_t *textData, u16 idx, u8 *dest)
{
u32 i;
- for (i = 0; sub0[i].text != NULL; i++)
+ for (i = 0; textData[i].text != NULL; i++)
{
- if (sub0[i].flag == 0xfffe)
+ if (textData[i].flag == 0xFFFE)
break;
- if (sub0[i].flag != 0xffff && !FlagGet(sub0[i].flag))
+ if (textData[i].flag != 0xFFFF && !FlagGet(textData[i].flag))
break;
}
- if (sub0[i].flag != 0xfffe)
+ if (textData[i].flag != 0xFFFE)
{
if (i)
i--;
- if (sub0[i].flag2 != 0xffff)
- FlagSet(sub0[i].flag2);
- StringExpandPlaceholders(dest, sub0[i].text);
+ if (textData[i].flag2 != 0xFFFF)
+ FlagSet(textData[i].flag2);
+ StringExpandPlaceholders(dest, textData[i].text);
}
else
{
@@ -1155,54 +1035,54 @@ static void sub_81D199C(const match_call_text_data_t *sub0, u16 idx, u8 *dest)
} while (0);
}
- StringExpandPlaceholders(dest, sub0[i].text);
+ StringExpandPlaceholders(dest, textData[i].text);
}
}
-void sub_81D1A78(u32 idx, const u8 **desc, const u8 **name)
+void MatchCall_GetNameAndDesc(u32 idx, const u8 **desc, const u8 **name)
{
match_call_t matchCall;
u32 i;
- if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1)
+ if (idx >= ARRAY_COUNT(sMatchCallHeaders))
return;
matchCall = sMatchCallHeaders[idx];
i = MatchCallGetFunctionIndex(matchCall);
sMatchCall_GetNameAndDescFunctions[i](matchCall, desc, name);
}
-static void MatchCall_GetNameAndDesc_Type0(match_call_t matchCall, const u8 **desc, const u8 **name)
+static void MatchCall_GetNameAndDesc_NPC(match_call_t matchCall, const u8 **desc, const u8 **name)
{
- *desc = matchCall.type0->desc;
- *name = matchCall.type0->name;
+ *desc = matchCall.npc->desc;
+ *name = matchCall.npc->name;
}
-static void MatchCall_GetNameAndDesc_Type1(match_call_t matchCall, const u8 **desc, const u8 **name)
+static void MatchCall_GetNameAndDesc_Trainer(match_call_t matchCall, const u8 **desc, const u8 **name)
{
match_call_t _matchCall = matchCall;
- if (_matchCall.type1->name == NULL)
- MatchCall_GetNameAndDescByRematchIdx(_matchCall.type1->rematchTableIdx, desc, name);
+ if (_matchCall.trainer->name == NULL)
+ MatchCall_GetNameAndDescByRematchIdx(_matchCall.trainer->rematchTableIdx, desc, name);
else
- *name = _matchCall.type1->name;
- *desc = _matchCall.type1->desc;
+ *name = _matchCall.trainer->name;
+ *desc = _matchCall.trainer->desc;
}
-static void MatchCall_GetNameAndDesc_Type2(match_call_t matchCall, const u8 **desc, const u8 **name)
+static void MatchCall_GetNameAndDesc_Wally(match_call_t matchCall, const u8 **desc, const u8 **name)
{
- MatchCall_GetNameAndDescByRematchIdx(matchCall.type2->rematchTableIdx, desc, name);
- *desc = matchCall.type2->desc;
+ MatchCall_GetNameAndDescByRematchIdx(matchCall.wally->rematchTableIdx, desc, name);
+ *desc = matchCall.wally->desc;
}
-static void MatchCall_GetNameAndDesc_Type4(match_call_t matchCall, const u8 **desc, const u8 **name)
+static void MatchCall_GetNameAndDesc_Rival(match_call_t matchCall, const u8 **desc, const u8 **name)
{
- *desc = matchCall.type4->desc;
- *name = matchCall.type4->name;
+ *desc = matchCall.rival->desc;
+ *name = matchCall.rival->name;
}
-static void MatchCall_GetNameAndDesc_Type3(match_call_t matchCall, const u8 **desc, const u8 **name)
+static void MatchCall_GetNameAndDesc_Birch(match_call_t matchCall, const u8 **desc, const u8 **name)
{
- *desc = matchCall.type3->desc;
- *name = matchCall.type3->name;
+ *desc = matchCall.birch->desc;
+ *name = matchCall.birch->name;
}
static void MatchCall_GetNameAndDescByRematchIdx(u32 idx, const u8 **desc, const u8 **name)
@@ -1216,21 +1096,21 @@ const u8 *MatchCall_GetOverrideFlavorText(u32 idx, u32 offset)
{
u32 i;
- for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++)
+ for (i = 0; i < ARRAY_COUNT(sCheckPageOverrides); i++)
{
- if (sMatchCallCheckPageOverrides[i].idx == idx)
+ if (sCheckPageOverrides[i].idx == idx)
{
while (1)
{
- if (i + 1 >= ARRAY_COUNT(sMatchCallCheckPageOverrides))
+ if (i + 1 >= ARRAY_COUNT(sCheckPageOverrides))
break;
- if (sMatchCallCheckPageOverrides[i + 1].idx != idx)
+ if (sCheckPageOverrides[i + 1].idx != idx)
break;
- if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].flag))
+ if (!FlagGet(sCheckPageOverrides[i + 1].flag))
break;
i++;
}
- return sMatchCallCheckPageOverrides[i].flavorTexts[offset];
+ return sCheckPageOverrides[i].flavorTexts[offset];
}
}
return NULL;
@@ -1240,22 +1120,22 @@ int MatchCall_GetOverrideFacilityClass(u32 idx)
{
u32 i;
- for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++)
+ for (i = 0; i < ARRAY_COUNT(sCheckPageOverrides); i++)
{
- if (sMatchCallCheckPageOverrides[i].idx == idx)
- return sMatchCallCheckPageOverrides[i].facilityClass;
+ if (sCheckPageOverrides[i].idx == idx)
+ return sCheckPageOverrides[i].facilityClass;
}
return -1;
}
-bool32 sub_81D1BF8(u32 idx)
+bool32 MatchCall_HasRematchId(u32 idx)
{
int i;
for (i = 0; i < (int)ARRAY_COUNT(sMatchCallHeaders); i++)
{
- u32 r0 = MatchCall_GetRematchTableIdx(i);
- if (r0 != REMATCH_TABLE_ENTRIES && r0 == idx)
+ u32 id = MatchCall_GetRematchTableIdx(i);
+ if (id != REMATCH_TABLE_ENTRIES && id == idx)
return TRUE;
}
return FALSE;
diff --git a/src/pokenav_match_call_ui.c b/src/pokenav_match_call_ui.c
index 275a4063e..fd346393e 100644
--- a/src/pokenav_match_call_ui.c
+++ b/src/pokenav_match_call_ui.c
@@ -46,7 +46,7 @@ struct PokenavSub17Substruct
u32 unk28;
s32 unk2C;
u32 unk30;
- void (*unk34)(struct PokenavMonList *, u8*);
+ void (*unk34)(struct PokenavMatchCallEntries *, u8*);
void (*unk38)(u16, u32, u32);
struct Sprite *rightArrow;
struct Sprite *upArrow;
@@ -67,8 +67,8 @@ struct PokenavSub17
extern void sub_81DB620(u32 windowId, u32 a1, u32 a2, u32 a3, u32 a4);
void sub_81C82E4(struct PokenavSub17 *a0);
-bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct MatchCallListTemplate *a2, s32 a3);
-void sub_81C9160(struct MatchCallWindowState *a0, struct MatchCallListTemplate *a1);
+bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3);
+void sub_81C9160(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1);
void SpriteCB_MatchCallUpArrow(struct Sprite *sprite);
void SpriteCB_MatchCallDownArrow(struct Sprite *sprite);
void SpriteCB_MatchCallRightArrow(struct Sprite *sprite);
@@ -76,7 +76,7 @@ void ToggleMatchCallArrows(struct PokenavSub17Substruct *a0, u32 a1);
void sub_81C8FE0(struct PokenavSub17Substruct *a0);
void sub_81C8EF8(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1);
void sub_81C8ED0(void);
-void sub_81C8E54(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2);
+static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2);
void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 a1);
void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1);
void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1);
@@ -91,14 +91,14 @@ u32 LoopedTask_sub_81C83F0(s32 state);
u32 LoopedTask_sub_81C85A0(s32 state);
u32 LoopedTask_sub_81C8870(s32 state);
u32 LoopedTask_sub_81C8A28(s32 state);
-u32 LoopedTask_sub_81C8958(s32 state);
+u32 LoopedTask_PrintCheckPageInfo(s32 state);
static const u16 sMatchcallArrowPaletteData[] = INCBIN_U16("graphics/pokenav/arrows_matchcall.gbapal");
static const u32 sMatchcallArrowSpriteSheetData[] = INCBIN_U32("graphics/pokenav/arrows_matchcall.4bpp.lz");
EWRAM_DATA u32 gUnknown_0203CF44 = 0;
-bool32 sub_81C81D4(const struct BgTemplate *arg0, struct MatchCallListTemplate *arg1, s32 arg2)
+bool32 sub_81C81D4(const struct BgTemplate *arg0, struct PokenavListTemplate *arg1, s32 arg2)
{
struct PokenavSub17 *structPtr = AllocSubstruct(17, sizeof(struct PokenavSub17));
if (structPtr == NULL)
@@ -467,12 +467,12 @@ void sub_81C877C(void)
structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8870, 6);
}
-void sub_81C87AC(s16 a0)
+void PrintCheckPageInfo(s16 a0)
{
struct PokenavSub17 *structPtr = GetSubstructPtr(17);
structPtr->unk888.windowTopIndex += a0;
structPtr->unk89C = 0;
- structPtr->unk8A0 = CreateLoopedTask(LoopedTask_sub_81C8958, 6);
+ structPtr->unk8A0 = CreateLoopedTask(LoopedTask_PrintCheckPageInfo, 6);
}
void sub_81C87F0(void)
@@ -496,6 +496,7 @@ void sub_81C8838(void)
CopyWindowToVram(structPtr->unk0.unk0.windowId, 1);
}
+// TODO:
u32 LoopedTask_sub_81C8870(s32 state)
{
struct PokenavSub17 *structPtr = GetSubstructPtr(17);
@@ -543,7 +544,7 @@ u32 LoopedTask_sub_81C8870(s32 state)
return LT_FINISH;
}
-u32 LoopedTask_sub_81C8958(s32 state)
+u32 LoopedTask_PrintCheckPageInfo(s32 state)
{
struct PokenavSub17 *structPtr = GetSubstructPtr(17);
if (IsDma3ManagerBusyWithBgCopy())
@@ -558,22 +559,22 @@ u32 LoopedTask_sub_81C8958(s32 state)
PrintMatchCallFieldNames(&structPtr->unk0, 0);
break;
case 2:
- sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 0);
+ PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_STRATEGY);
break;
case 3:
PrintMatchCallFieldNames(&structPtr->unk0, 1);
break;
case 4:
- sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 1);
+ PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_POKEMON);
break;
case 5:
PrintMatchCallFieldNames(&structPtr->unk0, 2);
break;
case 6:
- sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 2);
+ PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_INTRO_1);
break;
case 7:
- sub_81C8E54(&structPtr->unk888, &structPtr->unk0, 3);
+ PrintMatchCallFlavorText(&structPtr->unk888, &structPtr->unk0, CHECK_PAGE_INTRO_2);
break;
default:
return LT_FINISH;
@@ -683,7 +684,7 @@ void sub_81C8B70(struct UnknownSubSubStruct_0203CF40 *a0, s32 a1, s32 a2)
}
for (a2--; a2 != -1; a1 = (a1 + 1) & 0xF, a2--)
- sub_81CBD48(a0->windowId, a1);
+ ClearRematchPokeballIcon(a0->windowId, a1);
CopyWindowToVram(a0->windowId, 1);
}
@@ -705,7 +706,7 @@ void sub_81C8C64(struct UnknownSubSubStruct_0203CF40 *a0, u32 a1)
void sub_81C8CB4(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1)
{
- u8 colors[3] = {0, 2, 5};
+ u8 colors[3] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_RED};
a1->unk34(a0->unk10 + a0->unkC * a0->windowTopIndex, a1->unkTextBuffer);
a1->unk38(a1->unk0.windowId, a0->windowTopIndex, a1->unk0.unkA);
@@ -727,7 +728,7 @@ void sub_81C8D4C(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *
void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 fieldId)
{
const u8 *fieldNames[] = {gText_PokenavMatchCall_Strategy, gText_PokenavMatchCall_TrainerPokemon, gText_PokenavMatchCall_SelfIntroduction};
- u8 colors[3] = {1, 4, 5};
+ u8 colors[3] = {TEXT_COLOR_WHITE, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED};
u32 top = (a0->unk0.unkA + 1 + (fieldId * 2)) & 0xF;
FillWindowPixelRect(a0->unk0.windowId, PIXEL_FILL(1), 0, top << 4, a0->unk0.unk4, 16);
@@ -735,11 +736,19 @@ void PrintMatchCallFieldNames(struct PokenavSub17Substruct *a0, u32 fieldId)
CopyWindowRectToVram(a0->unk0.windowId, 2, 0, top << 1, a0->unk0.unk4, 2);
}
-void sub_81C8E54(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 a2)
+static void PrintMatchCallFlavorText(struct MatchCallWindowState *a0, struct PokenavSub17Substruct *a1, u32 checkPageEntry)
{
- static const u8 array[] = {2, 4, 6, 7};
- u32 r6 = (a1->unk0.unkA + array[a2]) & 0xF;
- const u8 *str = sub_81CAFD8(a0->windowTopIndex, a2);
+ // lines 1, 3, and 5 are the field names printed by PrintMatchCallFieldNames
+ static const u8 lineOffsets[CHECK_PAGE_ENTRY_COUNT] =
+ {
+ [CHECK_PAGE_STRATEGY] = 2,
+ [CHECK_PAGE_POKEMON] = 4,
+ [CHECK_PAGE_INTRO_1] = 6,
+ [CHECK_PAGE_INTRO_2] = 7
+ };
+
+ u32 r6 = (a1->unk0.unkA + lineOffsets[checkPageEntry]) & 0xF;
+ const u8 *str = GetMatchCallFlavorText(a0->windowTopIndex, checkPageEntry);
if (str != NULL)
{
@@ -925,9 +934,9 @@ void ToggleMatchCallVerticalArrows(bool32 shouldHide)
structPtr->unk0.downArrow->data[7] = shouldHide;
}
-void sub_81C9160(struct MatchCallWindowState *a0, struct MatchCallListTemplate *a1)
+void sub_81C9160(struct MatchCallWindowState *a0, struct PokenavListTemplate *a1)
{
- a0->unk10 = a1->unk0;
+ a0->unk10 = a1->list.matchCallEntries;
a0->windowTopIndex = a1->unk6;
a0->listLength = a1->unk4;
a0->unkC = a1->unk8;
@@ -953,13 +962,13 @@ void sub_81C9160(struct MatchCallWindowState *a0, struct MatchCallListTemplate *
}
}
-bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct MatchCallListTemplate *a2, s32 a3)
+bool32 sub_81C91AC(struct PokenavSub17Substruct *a0, const struct BgTemplate *a1, struct PokenavListTemplate *a2, s32 a3)
{
struct WindowTemplate window;
a0->unk0.bg = a1->bg;
a0->unk0.unk6 = a3;
- a0->unk34 = a2->unk10;
+ a0->unk34 = a2->listFunc.unk10_2;
a0->unk38 = a2->unk14;
a0->unk0.unk1 = a2->unkD;
a0->unk0.unk2 = a2->unk9;
diff --git a/src/pokenav_unk_1.c b/src/pokenav_unk_1.c
index b5bbc4b74..8bf3ebd2a 100644
--- a/src/pokenav_unk_1.c
+++ b/src/pokenav_unk_1.c
@@ -64,7 +64,7 @@ bool32 PokenavCallback_Init_0(void)
state->menuType = GetPokenavMainMenuType();
state->cursorPos = 0;
state->descriptionId = 0;
- state->helpBarIndex = 0;
+ state->helpBarIndex = HELPBAR_NONE;
sub_81C939C(state);
return TRUE;
}
@@ -78,7 +78,7 @@ bool32 PokenavCallback_Init_4(void)
state->menuType = GetPokenavMainMenuType();
state->cursorPos = 2;
state->descriptionId = 2;
- state->helpBarIndex = 0;
+ state->helpBarIndex = HELPBAR_NONE;
sub_81C939C(state);
return TRUE;
}
@@ -105,7 +105,7 @@ bool32 PokenavCallback_Init_2(void)
state->menuType = 3;
state->cursorPos = 0;
state->descriptionId = 5;
- state->helpBarIndex = 0;
+ state->helpBarIndex = HELPBAR_NONE;
sub_81C939C(state);
return TRUE;
}
@@ -119,7 +119,7 @@ bool32 PokenavCallback_Init_3(void)
state->menuType = 4;
state->cursorPos = sub_81C76AC();
state->descriptionId = state->cursorPos + 8;
- state->helpBarIndex = 0;
+ state->helpBarIndex = HELPBAR_NONE;
sub_81C939C(state);
return TRUE;
}
@@ -151,9 +151,9 @@ static u32 (*sub_81C93EC(void))(struct Pokenav1Struct*)
default:
case POKENAV_MODE_NORMAL:
return sub_81C943C;
- case POKENAV_MODE_FORCE_CALL_1:
+ case POKENAV_MODE_FORCE_CALL_READY:
return sub_81C9520;
- case POKENAV_MODE_FORCE_CALL_2:
+ case POKENAV_MODE_FORCE_CALL_EXIT:
return sub_81C9588;
}
}
@@ -179,7 +179,7 @@ static u32 sub_81C943C(struct Pokenav1Struct *a0)
switch (sDescriptionIds[a0->menuType][a0->cursorPos])
{
case 0:
- a0->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? 2 : 1;
+ a0->helpBarIndex = gSaveBlock2Ptr->regionMapZoom ? HELPBAR_MAP_ZOOMED_IN : HELPBAR_MAP_ZOOMED_OUT;
sub_81C97B0(a0, POKENAV_MENU_6);
return 8;
case 1:
@@ -189,13 +189,13 @@ static u32 sub_81C943C(struct Pokenav1Struct *a0)
a0->callback = sub_81C963C;
return 2;
case 2:
- a0->helpBarIndex = 6;
+ a0->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
sub_81C97B0(a0, POKENAV_MENU_B);
return 8;
case 3:
if (CanViewRibbonsMenu())
{
- a0->helpBarIndex = 9;
+ a0->helpBarIndex = HELPBAR_RIBBONS_MON_LIST;
sub_81C97B0(a0, POKENAV_MENU_C);
return 8;
}
@@ -224,7 +224,7 @@ static u32 sub_81C9520(struct Pokenav1Struct *a0)
{
if (sDescriptionIds[a0->menuType][a0->cursorPos] == 2)
{
- a0->helpBarIndex = 6;
+ a0->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
sub_81C97B0(a0, POKENAV_MENU_B);
return 8;
}
@@ -259,7 +259,7 @@ static u32 sub_81C9588(struct Pokenav1Struct *a0)
}
else if (v0 == 2)
{
- a0->helpBarIndex = 6;
+ a0->helpBarIndex = HELPBAR_MC_TRAINER_LIST;
sub_81C97B0(a0, POKENAV_MENU_B);
return 8;
}
@@ -349,7 +349,7 @@ static u32 sub_81C96FC(struct Pokenav1Struct *a0)
{
sub_81C7694(v0 - 8);
sub_81C97B0(a0, POKENAV_MENU_8);
- a0->helpBarIndex = 3;
+ a0->helpBarIndex = HELPBAR_CONDITION_MON_LIST;
return 8;
}
else
@@ -459,7 +459,7 @@ int sub_81C98B4(void)
return state->descriptionId;
}
-u16 sub_81C98C4(void)
+u16 GetHelpBarTextId(void)
{
struct Pokenav1Struct *state = GetSubstructPtr(1);
return state->helpBarIndex;
diff --git a/src/pokenav_unk_10.c b/src/pokenav_unk_10.c
index 135ff24b3..099843f83 100644
--- a/src/pokenav_unk_10.c
+++ b/src/pokenav_unk_10.c
@@ -573,7 +573,7 @@ u32 sub_81D0A6C(s32 state)
return LT_PAUSE;
case 7:
sub_81D12D8(structPtr);
- sub_81C7BA4(10);
+ PrintHelpBarText(HELPBAR_RIBBONS_LIST);
return LT_INC_AND_PAUSE;
case 8:
if (!IsDma3ManagerBusyWithBgCopy())
@@ -667,7 +667,7 @@ u32 sub_81D0D2C(s32 state)
if (!sub_81D1524(structPtr))
{
sub_81D0EFC(structPtr);
- sub_81C7BA4(11);
+ PrintHelpBarText(HELPBAR_RIBBONS_CHECK);
return LT_INC_AND_PAUSE;
}
return LT_PAUSE;
@@ -721,7 +721,7 @@ u32 sub_81D0E00(s32 state)
if (!sub_81D1524(structPtr))
{
sub_81D0E84(structPtr);
- sub_81C7BA4(10);
+ PrintHelpBarText(HELPBAR_RIBBONS_LIST);
return LT_INC_AND_PAUSE;
}
return LT_PAUSE;
@@ -752,7 +752,7 @@ void sub_81D0E60(struct PokenavSub14 *structPtr)
void sub_81D0E84(struct PokenavSub14 *structPtr)
{
- u8 color[] = {4, 2, 3};
+ u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
ConvertIntToDecimalStringN(gStringVar1, GetCurrMonRibbonCount(), STR_CONV_MODE_LEFT_ALIGN, 2);
DynamicPlaceholderTextUtil_Reset();
@@ -767,7 +767,7 @@ void sub_81D0EFC(struct PokenavSub14 *structPtr)
{
s32 i;
u32 ribbonId = sub_81D0954();
- u8 color[] = {4, 2, 3};
+ u8 color[] = {TEXT_COLOR_RED, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
FillWindowPixelBuffer(structPtr->field_A, PIXEL_FILL(4));
if (ribbonId < 25)
@@ -1057,10 +1057,10 @@ static const struct SpritePalette gUnknown_08624C80[] =
static const struct OamData sOamData_8624CB0 =
{
.y = 0,
- .affineMode = 1,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c
index 1c40e146f..de962ccd6 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"
@@ -220,32 +220,31 @@ static const struct WindowTemplate gUnknown_086202CC =
static const u8 *const gUnknown_086202D4[] =
{
- gUnknown_085EBCC5,
- gUnknown_085EBCE8,
- gUnknown_085EBD01,
- gUnknown_085EBD1C,
- gUnknown_085EBD34,
- gUnknown_085EBD83,
- gUnknown_085EBDA2,
- gUnknown_085EBDBF,
- gUnknown_085EBDDB,
- gUnknown_085EBDEE,
- gUnknown_085EBE06,
- gUnknown_085EBE19,
- gUnknown_085EBE2D,
- gUnknown_085EBE41
+ gText_CheckMapOfHoenn,
+ gText_CheckPokemonInDetail,
+ gText_CallRegisteredTrainer,
+ gText_CheckObtainedRibbons,
+ gText_PutAwayPokenav,
+ gText_CheckPartyPokemonInDetail,
+ gText_CheckAllPokemonInDetail,
+ gText_ReturnToPokenavMenu,
+ gText_FindCoolPokemon,
+ gText_FindBeautifulPokemon,
+ gText_FindCutePokemon,
+ gText_FindSmartPokemon,
+ gText_FindToughPokemon,
+ gText_ReturnToConditionMenu
};
-static const u8 gUnknown_0862030C[] = {6, 8, 7};
-
-static const u8 gUnknown_0862030F[] = {6, 8, 7, 0, 0};
+static const u8 sOptionDescTextColors[] = {TEXT_COLOR_GREEN, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_GREEN};
+static const u8 sOptionDescTextColors2[] = {TEXT_COLOR_GREEN, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_GREEN};
static const struct OamData gUnknown_08620314 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
- .bpp = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.size = SPRITE_SIZE(32x16),
@@ -287,9 +286,9 @@ static const struct SpriteTemplate gUnknown_0862034C =
static const struct OamData gUnknown_08620364 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
- .bpp = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.size = SPRITE_SIZE(32x16),
@@ -324,7 +323,7 @@ static bool32 sub_81C98D4(void)
for (i = 0; i < REMATCH_TABLE_ENTRIES; i++)
{
if (sub_81CB0C8(i) == gMapHeader.regionMapSectionId
- && sub_81CAE08(i)
+ && IsRematchEntryRegistered(i)
&& gSaveBlock1Ptr->trainerRematches[i])
return TRUE;
}
@@ -707,10 +706,10 @@ static u32 sub_81C9F28(s32 state)
switch (state)
{
case 0:
- sub_81C7BA4(sub_81C98C4());
+ PrintHelpBarText(GetHelpBarTextId());
return LT_INC_AND_PAUSE;
case 1:
- if (IsDma3ManagerBusyWithBgCopy_())
+ if (WaitForHelpBar())
return LT_PAUSE;
sub_81C7880();
sub_81CA9C8();
@@ -1030,7 +1029,7 @@ static void sub_81CA4AC(struct Sprite * sprite)
{
sprite->invisible = TRUE;
FreeOamMatrix(sprite->oam.matrixNum);
- CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0);
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF);
sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
sprite->oam.objMode = ST_OAM_OBJ_NORMAL;
sprite->callback = SpriteCallbackDummy;
@@ -1130,7 +1129,7 @@ static void sub_81CA714(void)
const u8 * s = gUnknown_086202D4[i];
u32 width = GetStringWidth(1, s, -1);
FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6));
- AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, gUnknown_0862030C, 0, s);
+ AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors, 0, s);
}
@@ -1140,7 +1139,7 @@ static void sub_81CA770(void)
const u8 * s = gText_NoRibbonWinners;
u32 width = GetStringWidth(1, s, -1);
FillWindowPixelBuffer(ptr->optionDescriptionWindowId, PIXEL_FILL(6));
- AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, gUnknown_0862030F, 0, s);
+ AddTextPrinterParameterized3(ptr->optionDescriptionWindowId, 1, (192 - width) / 2, 1, sOptionDescTextColors2, 0, s);
}
static bool32 sub_81CA7C4(void)
diff --git a/src/pokenav_unk_3.c b/src/pokenav_unk_3.c
index c66434192..28e84b50b 100755
--- a/src/pokenav_unk_3.c
+++ b/src/pokenav_unk_3.c
@@ -17,30 +17,40 @@
struct Pokenav3Struct
{
- u16 unk0;
- u16 unk2;
- const u8 *unk4;
- u16 unk8;
- u16 unkA;
+ u16 optionCursorPos;
+ u16 maxOptionId;
+ const u8 *matchCallOptions;
+ u16 headerId;
+ u16 numRegistered;
u16 unkC;
u32 unk10;
u32 unk14;
u32 (*callback)(struct Pokenav3Struct*);
- struct PokenavMonList unk1C[99];
+ struct PokenavMatchCallEntries matchCallEntries[MAX_REMATCH_ENTRIES - 1];
};
-static u32 sub_81CAB44(struct Pokenav3Struct *);
+static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *);
static u32 sub_81CABFC(struct Pokenav3Struct *);
-static u32 sub_81CAC04(struct Pokenav3Struct *);
-static u32 sub_81CACB8(struct Pokenav3Struct *);
-static u32 sub_81CACF8(struct Pokenav3Struct *);
+static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *);
+static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *);
+static u32 CB2_HandleCallInput(struct Pokenav3Struct *);
static u32 sub_81CAD20(s32);
static bool32 sub_81CB1D0(void);
#include "data/text/match_call_messages.h"
-const u8 gUnknown_08622508[] = {0, 2};
-const u8 gUnknown_0862250A[] = {0, 1, 2};
+static const u8 sMatchCallOptionsNoCheckPage[] =
+{
+ MATCH_CALL_OPTION_CALL,
+ MATCH_CALL_OPTION_CANCEL
+};
+
+static const u8 sMatchCallOptionsHasCheckPage[] =
+{
+ MATCH_CALL_OPTION_CALL,
+ MATCH_CALL_OPTION_CHECK,
+ MATCH_CALL_OPTION_CANCEL
+};
bool32 PokenavCallback_Init_11(void)
{
@@ -48,8 +58,8 @@ bool32 PokenavCallback_Init_11(void)
if (!state)
return FALSE;
- state->callback = sub_81CAB44;
- state->unk8 = 0;
+ state->callback = CB2_HandleMatchCallInput;
+ state->headerId = 0;
state->unk10 = 0;
state->unk14 = CreateLoopedTask(sub_81CAD20, 1);
return TRUE;
@@ -66,52 +76,54 @@ void sub_81CAB38(void)
FreePokenavSubstruct(5);
}
-static u32 sub_81CAB44(struct Pokenav3Struct *state)
+static u32 CB2_HandleMatchCallInput(struct Pokenav3Struct *state)
{
- int selectedMatchCall;
+ int selection;
if (gMain.newAndRepeatedKeys & DPAD_UP)
- return 2;
+ return POKENAV_MC_FUNC_UP;
if (gMain.newAndRepeatedKeys & DPAD_DOWN)
- return 1;
+ return POKENAV_MC_FUNC_DOWN;
if (gMain.newAndRepeatedKeys & DPAD_LEFT)
- return 4;
+ return POKENAV_MC_FUNC_PG_UP;
if (gMain.newAndRepeatedKeys & DPAD_RIGHT)
- return 3;
+ return POKENAV_MC_FUNC_PG_DOWN;
if (gMain.newKeys & A_BUTTON)
{
- state->callback = sub_81CAC04;
- state->unk0 = 0;
- selectedMatchCall = GetSelectedMatchCall();
- if (!state->unk1C[selectedMatchCall].boxId || MatchCall_HasCheckPage(state->unk1C[selectedMatchCall].unk6))
+ state->callback = CB2_HandleMatchCallOptionsInput;
+ state->optionCursorPos = 0;
+ selection = GetSelectedMatchCall();
+
+ if (!state->matchCallEntries[selection].isSpecialTrainer || MatchCall_HasCheckPage(state->matchCallEntries[selection].headerId))
{
- state->unk4 = gUnknown_0862250A;
- state->unk2 = 2;
+ state->matchCallOptions = sMatchCallOptionsHasCheckPage;
+ state->maxOptionId = ARRAY_COUNT(sMatchCallOptionsHasCheckPage) - 1;
}
else
{
- state->unk4 = gUnknown_08622508;
- state->unk2 = 1;
+ state->matchCallOptions = sMatchCallOptionsNoCheckPage;
+ state->maxOptionId = ARRAY_COUNT(sMatchCallOptionsNoCheckPage) - 1;
}
- return 5;
+ return POKENAV_MC_FUNC_SELECT;
}
if (gMain.newKeys & B_BUTTON)
{
- if (GetPokenavMode() != POKENAV_MODE_FORCE_CALL_1)
+ if (GetPokenavMode() != POKENAV_MODE_FORCE_CALL_READY)
{
state->callback = sub_81CABFC;
- return 15;
+ return POKENAV_MC_FUNC_EXIT;
}
else
{
+ // Cant exit Match Call menu before calling Mr Stone during tutorial
PlaySE(SE_HAZURE);
}
}
- return 0;
+ return POKENAV_MC_FUNC_NONE;
}
static u32 sub_81CABFC(struct Pokenav3Struct *state)
@@ -119,76 +131,76 @@ static u32 sub_81CABFC(struct Pokenav3Struct *state)
return POKENAV_MENU_4;
}
-static u32 sub_81CAC04(struct Pokenav3Struct *state)
+static u32 CB2_HandleMatchCallOptionsInput(struct Pokenav3Struct *state)
{
- if ((gMain.newKeys & DPAD_UP) && state->unk0)
+ if ((gMain.newKeys & DPAD_UP) && state->optionCursorPos)
{
- state->unk0--;
- return 6;
+ state->optionCursorPos--;
+ return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR;
}
- if ((gMain.newKeys & DPAD_DOWN) && state->unk0 < state->unk2)
+ if ((gMain.newKeys & DPAD_DOWN) && state->optionCursorPos < state->maxOptionId)
{
- state->unk0++;
- return 6;
+ state->optionCursorPos++;
+ return POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR;
}
if (gMain.newKeys & A_BUTTON)
{
- switch (state->unk4[state->unk0])
+ switch (state->matchCallOptions[state->optionCursorPos])
{
- case 2:
- state->callback = sub_81CAB44;
- return 7;
- case 0:
- if (GetPokenavMode() == POKENAV_MODE_FORCE_CALL_1)
- SetPokenavMode(POKENAV_MODE_FORCE_CALL_2);
-
- state->callback = sub_81CACF8;
+ case MATCH_CALL_OPTION_CANCEL:
+ state->callback = CB2_HandleMatchCallInput;
+ return POKENAV_MC_FUNC_CANCEL;
+ case MATCH_CALL_OPTION_CALL:
+ if (GetPokenavMode() == POKENAV_MODE_FORCE_CALL_READY)
+ SetPokenavMode(POKENAV_MODE_FORCE_CALL_EXIT);
+
+ state->callback = CB2_HandleCallInput;
if (sub_81CB1D0())
- return 9;
+ return POKENAV_MC_FUNC_NEARBY_MSG;
- return 8;
- case 1:
- state->callback = sub_81CACB8;
- return 11;
+ return POKENAV_MC_FUNC_CALL_MSG;
+ case MATCH_CALL_OPTION_CHECK:
+ state->callback = CB2_HandleCheckPageInput;
+ return POKENAV_MC_FUNC_SHOW_CHECK_PAGE;
}
}
if (gMain.newKeys & B_BUTTON)
{
- state->callback = sub_81CAB44;
- return 7;
+ state->callback = CB2_HandleMatchCallInput;
+ return POKENAV_MC_FUNC_CANCEL;
}
- return 0;
+ return POKENAV_MC_FUNC_NONE;
}
-static u32 sub_81CACB8(struct Pokenav3Struct *state)
+static u32 CB2_HandleCheckPageInput(struct Pokenav3Struct *state)
{
if (gMain.newAndRepeatedKeys & DPAD_UP)
- return 12;
+ return POKENAV_MC_FUNC_CHECK_PAGE_UP;
if (gMain.newAndRepeatedKeys & DPAD_DOWN)
- return 13;
+ return POKENAV_MC_FUNC_CHECK_PAGE_DOWN;
if (gMain.newKeys & B_BUTTON)
{
- state->callback = sub_81CAB44;
- return 14;
+ state->callback = CB2_HandleMatchCallInput;
+ return POKENAV_MC_FUNC_EXIT_CHECK_PAGE;
}
- return 0;
+ return POKENAV_MC_FUNC_NONE;
}
-static u32 sub_81CACF8(struct Pokenav3Struct *state)
+static u32 CB2_HandleCallInput(struct Pokenav3Struct *state)
{
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
- state->callback = sub_81CAB44;
- return 10;
+ state->callback = CB2_HandleMatchCallInput;
+ return POKENAV_MC_FUNC_10;
}
- return 0;
+ return POKENAV_MC_FUNC_NONE;
}
static u32 sub_81CAD20(s32 taskState)
@@ -198,41 +210,41 @@ static u32 sub_81CAD20(s32 taskState)
switch (taskState)
{
case 0:
- state->unk8 = 0;
- state->unkA = 0;
+ state->headerId = 0;
+ state->numRegistered = 0;
return LT_INC_AND_CONTINUE;
case 1:
- for (i = 0, j = state->unk8; i < 30; i++, j++)
+ for (i = 0, j = state->headerId; i < 30; i++, j++)
{
- if (MatchCallFlagGetByIndex(j))
+ if (MatchCall_GetEnabled(j))
{
- state->unk1C[state->unkA].unk6 = j;
- state->unk1C[state->unkA].boxId = 1;
- state->unk1C[state->unkA].monId = MatchCallMapSecGetByIndex(j);
- state->unkA++;
+ state->matchCallEntries[state->numRegistered].headerId = j;
+ state->matchCallEntries[state->numRegistered].isSpecialTrainer = TRUE;
+ state->matchCallEntries[state->numRegistered].mapSec = MatchCall_GetMapSec(j);
+ state->numRegistered++;
}
- if (++state->unk8 >= MC_HEADER_COUNT)
+ if (++state->headerId >= MC_HEADER_COUNT)
{
- state->unkC = state->unk8;
- state->unk8 = 0;
+ state->unkC = state->headerId;
+ state->headerId = 0;
return LT_INC_AND_CONTINUE;
}
}
return LT_CONTINUE;
case 2:
- for (i = 0, j = state->unk8; i < 30; i++, j++)
+ for (i = 0, j = state->headerId; i < 30; i++, j++)
{
- if (!sub_81D1BF8(state->unk8) && sub_81CAE08(state->unk8))
+ if (!MatchCall_HasRematchId(state->headerId) && IsRematchEntryRegistered(state->headerId))
{
- state->unk1C[state->unkA].unk6 = state->unk8;
- state->unk1C[state->unkA].boxId = 0;
- state->unk1C[state->unkA].monId = sub_81CB0C8(j);
- state->unkA++;
+ state->matchCallEntries[state->numRegistered].headerId = state->headerId;
+ state->matchCallEntries[state->numRegistered].isSpecialTrainer = FALSE;
+ state->matchCallEntries[state->numRegistered].mapSec = sub_81CB0C8(j);
+ state->numRegistered++;
}
- if (++state->unk8 > REMATCH_TABLE_ENTRIES - 1)
+ if (++state->headerId > REMATCH_TABLE_ENTRIES - 1)
return LT_INC_AND_CONTINUE;
}
@@ -245,7 +257,7 @@ static u32 sub_81CAD20(s32 taskState)
return LT_FINISH;
}
-bool32 sub_81CAE08(int rematchIndex)
+bool32 IsRematchEntryRegistered(int rematchIndex)
{
if (rematchIndex < REMATCH_TABLE_ENTRIES)
return FlagGet(FLAG_MATCH_CALL_REGISTERED + rematchIndex);
@@ -259,10 +271,10 @@ int sub_81CAE28(void)
return state->unk10;
}
-int sub_81CAE38(void)
+int GetNumberRegistered(void)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
- return state->unkA;
+ return state->numRegistered;
}
int sub_81CAE48(void)
@@ -274,38 +286,38 @@ int sub_81CAE48(void)
int unref_sub_81CAE58(void)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
- return state->unkA - state->unkC;
+ return state->numRegistered - state->unkC;
}
int unref_sub_81CAE6C(int arg0)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
arg0 += state->unkC;
- if (arg0 >= state->unkA)
+ if (arg0 >= state->numRegistered)
return REMATCH_TABLE_ENTRIES;
- return state->unk1C[arg0].unk6;
+ return state->matchCallEntries[arg0].headerId;
}
-struct PokenavMonList *sub_81CAE94(void)
+struct PokenavMatchCallEntries *sub_81CAE94(void)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
- return state->unk1C;
+ return state->matchCallEntries;
}
-u16 sub_81CAEA4(int index)
+u16 GetMatchCallMapSec(int index)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
- return state->unk1C[index].monId;
+ return state->matchCallEntries[index].mapSec;
}
-bool32 sub_81CAEBC(int index)
+bool32 ShouldDrawRematchPokeballIcon(int index)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
- if (!state->unk1C[index].boxId)
- index = state->unk1C[index].unk6;
+ if (!state->matchCallEntries[index].isSpecialTrainer)
+ index = state->matchCallEntries[index].headerId;
else
- index = MatchCall_GetRematchTableIdx(state->unk1C[index].unk6);
+ index = MatchCall_GetRematchTableIdx(state->matchCallEntries[index].headerId);
if (index == REMATCH_TABLE_ENTRIES)
return FALSE;
@@ -313,83 +325,83 @@ bool32 sub_81CAEBC(int index)
return gSaveBlock1Ptr->trainerRematches[index] != 0;
}
-int sub_81CAF04(int index)
+int GetMatchCallTrainerPic(int index)
{
- int var0;
+ int headerId;
struct Pokenav3Struct *state = GetSubstructPtr(5);
- if (!state->unk1C[index].boxId)
+ if (!state->matchCallEntries[index].isSpecialTrainer)
{
- index = GetTrainerIdxByRematchIdx(state->unk1C[index].unk6);
+ index = GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId);
return gTrainers[index].trainerPic;
}
- var0 = state->unk1C[index].unk6;
- index = MatchCall_GetRematchTableIdx(var0);
+ headerId = state->matchCallEntries[index].headerId;
+ index = MatchCall_GetRematchTableIdx(headerId);
if (index != REMATCH_TABLE_ENTRIES)
{
index = GetTrainerIdxByRematchIdx(index);
return gTrainers[index].trainerPic;
}
- index = MatchCall_GetOverrideFacilityClass(var0);
+ index = MatchCall_GetOverrideFacilityClass(headerId);
return gFacilityClassToPicIndex[index];
}
-const u8 *sub_81CAF78(int index, u8 *arg1)
+const u8 *GetMatchCallMessageText(int index, u8 *arg1)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
*arg1 = 0;
if (!Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType))
return gText_CallCantBeMadeHere;
- if (!state->unk1C[index].boxId)
- *arg1 = SelectMatchCallMessage(GetTrainerIdxByRematchIdx(state->unk1C[index].unk6), gStringVar4);
+ if (!state->matchCallEntries[index].isSpecialTrainer)
+ *arg1 = SelectMatchCallMessage(GetTrainerIdxByRematchIdx(state->matchCallEntries[index].headerId), gStringVar4);
else
- MatchCall_GetMessage(state->unk1C[index].unk6, gStringVar4);
+ MatchCall_GetMessage(state->matchCallEntries[index].headerId, gStringVar4);
return gStringVar4;
}
-const u8 *sub_81CAFD8(int index, int textType)
+const u8 *GetMatchCallFlavorText(int index, int checkPageEntry)
{
- int var0;
+ int rematchId;
struct Pokenav3Struct *state = GetSubstructPtr(5);
- if (state->unk1C[index].boxId)
+ if (state->matchCallEntries[index].isSpecialTrainer)
{
- var0 = MatchCall_GetRematchTableIdx(state->unk1C[index].unk6);
- if (var0 == REMATCH_TABLE_ENTRIES)
- return MatchCall_GetOverrideFlavorText(state->unk1C[index].unk6, textType);
+ rematchId = MatchCall_GetRematchTableIdx(state->matchCallEntries[index].headerId);
+ if (rematchId == REMATCH_TABLE_ENTRIES)
+ return MatchCall_GetOverrideFlavorText(state->matchCallEntries[index].headerId, checkPageEntry);
}
else
{
- var0 = state->unk1C[index].unk6;
+ rematchId = state->matchCallEntries[index].headerId;
}
- return gMatchCallMessages[var0][textType];
+ return gMatchCallFlavorTexts[rematchId][checkPageEntry];
}
-u16 sub_81CB01C(void)
+u16 GetMatchCallOptionCursorPos(void)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
- return state->unk0;
+ return state->optionCursorPos;
}
-u16 sub_81CB02C(int arg0)
+u16 GetMatchCallOptionId(int optionId)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
- if (state->unk2 < arg0)
- return 3;
+ if (state->maxOptionId < optionId)
+ return MATCH_CALL_OPTION_COUNT;
- return state->unk4[arg0];
+ return state->matchCallOptions[optionId];
}
-void sub_81CB050(struct PokenavMonList * arg0, u8 *str)
+void BufferMatchCallNameAndDesc(struct PokenavMatchCallEntries *matchCallEntry, u8 *str)
{
const u8 *trainerName;
const u8 *className;
- if (!arg0->boxId)
+ if (!matchCallEntry->isSpecialTrainer)
{
- int index = GetTrainerIdxByRematchIdx(arg0->unk6);
+ int index = GetTrainerIdxByRematchIdx(matchCallEntry->headerId);
const struct Trainer *trainer = &gTrainers[index];
int class = trainer->trainerClass;
className = gTrainerClassNames[class];
@@ -397,7 +409,7 @@ void sub_81CB050(struct PokenavMonList * arg0, u8 *str)
}
else
{
- sub_81D1A78(arg0->unk6, &className, &trainerName);
+ MatchCall_GetNameAndDesc(matchCallEntry->headerId, &className, &trainerName);
}
if (className && trainerName)
@@ -418,15 +430,15 @@ u8 sub_81CB0C8(int rematchIndex)
return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->regionMapSectionId;
}
-int sub_81CB0E4(int index)
+int GetIndexDeltaOfNextCheckPageDown(int index)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
int count = 1;
- while (++index < state->unkA)
+ while (++index < state->numRegistered)
{
- if (!state->unk1C[index].boxId)
+ if (!state->matchCallEntries[index].isSpecialTrainer)
return count;
- if (MatchCall_HasCheckPage(state->unk1C[index].unk6))
+ if (MatchCall_HasCheckPage(state->matchCallEntries[index].headerId))
return count;
count++;
@@ -435,15 +447,15 @@ int sub_81CB0E4(int index)
return 0;
}
-int sub_81CB128(int index)
+int GetIndexDeltaOfNextCheckPageUp(int index)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
int count = -1;
while (--index >= 0)
{
- if (!state->unk1C[index].boxId)
+ if (!state->matchCallEntries[index].isSpecialTrainer)
return count;
- if (MatchCall_HasCheckPage(state->unk1C[index].unk6))
+ if (MatchCall_HasCheckPage(state->matchCallEntries[index].headerId))
return count;
count--;
@@ -458,13 +470,13 @@ bool32 unref_sub_81CB16C(void)
for (i = 0; i < REMATCH_TABLE_ENTRIES; i++)
{
- if (sub_81CAE08(i) && gSaveBlock1Ptr->trainerRematches[i])
+ if (IsRematchEntryRegistered(i) && gSaveBlock1Ptr->trainerRematches[i])
return TRUE;
}
for (i = 0; i < MC_HEADER_COUNT; i++)
{
- if (MatchCallFlagGetByIndex(i))
+ if (MatchCall_GetEnabled(i))
{
int index = MatchCall_GetRematchTableIdx(i);
if (gSaveBlock1Ptr->trainerRematches[index])
@@ -478,20 +490,20 @@ bool32 unref_sub_81CB16C(void)
static bool32 sub_81CB1D0(void)
{
struct Pokenav3Struct *state = GetSubstructPtr(5);
- int index = GetSelectedMatchCall();
- if (!state->unk1C[index].boxId)
+ int selection = GetSelectedMatchCall();
+ if (!state->matchCallEntries[selection].isSpecialTrainer)
{
- if (sub_81CAEA4(index) == gMapHeader.regionMapSectionId)
+ if (GetMatchCallMapSec(selection) == gMapHeader.regionMapSectionId)
{
- if (!gSaveBlock1Ptr->trainerRematches[state->unk1C[index].unk6])
+ if (!gSaveBlock1Ptr->trainerRematches[state->matchCallEntries[selection].headerId])
return TRUE;
}
}
else
{
- if (state->unk1C[index].unk6 == 11)
+ if (state->matchCallEntries[selection].headerId == MC_HEADER_WATTSON)
{
- if (sub_81CAEA4(index) == gMapHeader.regionMapSectionId
+ if (GetMatchCallMapSec(selection) == gMapHeader.regionMapSectionId
&& FlagGet(FLAG_BADGE05_GET) == TRUE)
{
if (!FlagGet(FLAG_WATTSON_REMATCH_AVAILABLE))
diff --git a/src/pokenav_unk_4.c b/src/pokenav_unk_4.c
index 0f05c6f5d..d8a1a0dfa 100755
--- a/src/pokenav_unk_4.c
+++ b/src/pokenav_unk_4.c
@@ -32,15 +32,15 @@ struct Pokenav4Struct
u8 filler8[0x6];
u8 unkE;
u8 unkF;
- u16 unk10;
- u16 unk12;
- u16 unk14;
+ u16 locWindowId;
+ u16 infoBoxWindowId;
+ u16 msgBoxWindowId;
s16 unk16;
u8 unused18;
u8 unk19;
u16 unk1A;
- struct Sprite *unk1C;
- struct Sprite *unk20;
+ struct Sprite *optionsCursorSprite;
+ struct Sprite *trainerPicSprite;
u8 unk24[0x800];
u8 unk824[0x800];
u8 unk1024[0x800];
@@ -55,74 +55,70 @@ static void sub_81CBBB8(void);
static void sub_81CBC1C(void);
static void sub_81CC2B4(void);
static void sub_81CC034(struct Pokenav4Struct *);
-static void sub_81CBD78(struct Pokenav4Struct *);
-static void sub_81CBDC0(struct Pokenav4Struct *);
-static void sub_81CBEF8(struct Pokenav4Struct *, int);
+static void DrawMatchCallLeftColumnWindows(struct Pokenav4Struct *);
+static void UpdateMatchCallInfoBox(struct Pokenav4Struct *);
+static void PrintMatchCallLocation(struct Pokenav4Struct *, int);
static void sub_81CC214(void);
static void sub_81CBC38(int);
-static void sub_81CBF60(struct Pokenav4Struct *);
+static void PrintMatchCallSelectionOptions(struct Pokenav4Struct *);
static bool32 sub_81CBFC4(struct Pokenav4Struct *);
-static void sub_81CC344(struct Pokenav4Struct *, int);
-static bool32 sub_81CC004(struct Pokenav4Struct *);
-static void sub_81CBFF0(struct Pokenav4Struct *);
-static void sub_81CC058(struct Pokenav4Struct *);
-static bool32 sub_81CC0D0(struct Pokenav4Struct *);
-static void sub_81CC0E0(struct Pokenav4Struct *);
-static bool32 sub_81CC104(struct Pokenav4Struct *);
-static void sub_81CC158(struct Pokenav4Struct *);
-static bool32 sub_81CC194(struct Pokenav4Struct *);
-static void sub_81CC09C(struct Pokenav4Struct *);
-static void sub_81CC11C(struct Pokenav4Struct *);
-static bool32 sub_81CC140(struct Pokenav4Struct *);
-static void sub_81CC1DC(struct Pokenav4Struct *);
-static bool32 sub_81CC204(struct Pokenav4Struct *);
-static void sub_81CC014(struct Pokenav4Struct *);
-static void sub_81CC39C(struct Pokenav4Struct *);
-static bool32 sub_81CC42C(struct Pokenav4Struct *);
-static void sub_81CC420(struct Pokenav4Struct *);
+static void UpdateCursorGfxPos(struct Pokenav4Struct *, int);
+static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav4Struct *);
+static void UpdateWindowsReturnToTrainerList(struct Pokenav4Struct *);
+static void DrawMsgBoxForMatchCallMsg(struct Pokenav4Struct *);
+static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav4Struct *);
+static void PrintCallingDots(struct Pokenav4Struct *);
+static bool32 WaitForCallingDotsText(struct Pokenav4Struct *);
+static void PrintMatchCallMessage(struct Pokenav4Struct *);
+static bool32 WaitForMatchCallMessageText(struct Pokenav4Struct *);
+static void DrawMsgBoxForCloseByMsg(struct Pokenav4Struct *);
+static void PrintTrainerIsCloseBy(struct Pokenav4Struct *);
+static bool32 WaitForTrainerIsCloseByText(struct Pokenav4Struct *);
+static void DrawSpinningPokenavForCall(struct Pokenav4Struct *);
+static bool32 WaitForSpinningPokenav(struct Pokenav4Struct *);
+static void UpdateWindowsToShowCheckPage(struct Pokenav4Struct *);
+static void LoadCheckPageTrainerPic(struct Pokenav4Struct *);
+static bool32 WaitForTrainerPic(struct Pokenav4Struct *);
+static void TrainerPicSlideOffscreen(struct Pokenav4Struct *);
static void sub_81CBC64(u8 taskId);
-static void sub_81CBCEC(u16 windowId, u32, u32);
-static void sub_81CBDF4(u16 windowId);
-static void sub_81CBE0C(u16 windowId);
-static void sub_81CBE38(u16 windowId);
-static void sub_81CBE50(u16 windowId);
-static void sub_81CBE88(u16 windowId, const u8 *str, int top);
-static void sub_81CBEB4(u16 windowId, const u8 *str, int top);
+static void TryDrawRematchPokeballIcon(u16 windowId, u32, u32);
+static void PrintNumberRegisteredLabel(u16 windowId);
+static void PrintNumberRegistered(u16 windowId);
+static void PrintNumberOfBattlesLabel(u16 windowId);
+static void PrintNumberOfBattles(u16 windowId);
+static void PrintMatchCallInfoLabel(u16 windowId, const u8 *str, int top);
+static void PrintMatchCallInfoNumber(u16 windowId, const u8 *str, int top);
static void sub_81CC2F0(struct Pokenav4Struct *, int);
-static void sub_81CC330(struct Pokenav4Struct *);
-static struct Sprite *sub_81CC370(void);
-static void sub_81CC440(struct Sprite *sprite);
-static void sub_81CC4A4(struct Sprite *sprite);
-void sub_81CC34C(struct Sprite *sprite);
-u32 sub_81CB510(s32);
-u32 sub_81CB588(s32);
-u32 sub_81CB600(s32);
-u32 sub_81CB678(s32);
-u32 sub_81CB6F0(s32);
-u32 sub_81CB734(s32);
-u32 sub_81CB75C(s32);
-u32 sub_81CB7A0(s32);
-u32 sub_81CB824(s32);
+static void CloseMatchCallSelectOptionsWindow(struct Pokenav4Struct *);
+static struct Sprite *CreateTrainerPicSprite(void);
+static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *sprite);
+static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *sprite);
+void SpriteCB_OptionsCursor(struct Sprite *sprite);
+u32 MatchCallListCursorDown(s32);
+u32 MatchCallListCursorUp(s32);
+u32 MatchCallListPageDown(s32);
+u32 MatchCallListPageUp(s32);
+u32 SelectMatchCallEntry(s32);
+u32 MoveMatchCallOptionsCursor(s32);
+static u32 CancelMatchCallSelection(s32);
+u32 DoMatchCallMessage(s32);
+u32 DoTrainerCloseByMessage(s32);
u32 sub_81CB888(s32);
-u32 sub_81CB93C(s32);
-u32 sub_81CBAD4(s32);
-u32 sub_81CB9C8(s32);
-u32 sub_81CBA68(s32);
-u32 sub_81CBB74(s32);
-
-extern const struct WindowTemplate gUnknown_08622808;
-extern const struct SpriteTemplate gUnknown_08622830;
-extern const struct SpriteTemplate gUnknown_08622850;
-
-const u16 gUnknown_08622510[] = INCBIN_U16("graphics/pokenav/ui_matchcall.gbapal");
-const u32 gUnknown_08622530[] = INCBIN_U32("graphics/pokenav/ui_matchcall.4bpp.lz");
-const u32 gUnknown_086225D4[] = INCBIN_U32("graphics/pokenav/ui_matchcall.bin.lz");
-const u16 gUnknown_08622698[] = INCBIN_U16("graphics/pokenav/arrow2.gbapal");
-const u32 gUnknown_086226B8[] = INCBIN_U32("graphics/pokenav/arrow2.4bpp.lz");
-const u16 gUnknown_086226E0[] = INCBIN_U16("graphics/pokenav/86226E0.gbapal");
-const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbapal");
-const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal");
-const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz");
+u32 ShowCheckPage(s32);
+u32 ShowCheckPageUp(s32);
+u32 ShowCheckPageDown(s32);
+u32 ExitCheckPage(s32);
+u32 ExitMatchCall(s32);
+
+static const u16 sMatchCallUI_Pal[] = INCBIN_U16("graphics/pokenav/ui_matchcall.gbapal");
+static const u32 sMatchCallUI_Gfx[] = INCBIN_U32("graphics/pokenav/ui_matchcall.4bpp.lz");
+static const u32 sMatchCallUI_Tilemap[] = INCBIN_U32("graphics/pokenav/ui_matchcall.bin.lz");
+static const u16 gUnknown_08622698[] = INCBIN_U16("graphics/pokenav/arrow2.gbapal");
+static const u32 gUnknown_086226B8[] = INCBIN_U32("graphics/pokenav/arrow2.4bpp.lz");
+static const u16 gUnknown_086226E0[] = INCBIN_U16("graphics/pokenav/86226E0.gbapal");
+static const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbapal");
+static const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal");
+static const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz");
const struct BgTemplate gUnknown_0862278C[3] =
{
@@ -155,27 +151,27 @@ const struct BgTemplate gUnknown_0862278C[3] =
}
};
-const LoopedTask gUnknown_08622798[] =
-{
- NULL,
- sub_81CB510,
- sub_81CB588,
- sub_81CB600,
- sub_81CB678,
- sub_81CB6F0,
- sub_81CB734,
- sub_81CB75C,
- sub_81CB7A0,
- sub_81CB824,
- sub_81CB888,
- sub_81CB93C,
- sub_81CBAD4,
- sub_81CB9C8,
- sub_81CBA68,
- sub_81CBB74
+static const LoopedTask sMatchCallLoopTaskFuncs[] =
+{
+ [POKENAV_MC_FUNC_NONE] = NULL,
+ [POKENAV_MC_FUNC_DOWN] = MatchCallListCursorDown,
+ [POKENAV_MC_FUNC_UP] = MatchCallListCursorUp,
+ [POKENAV_MC_FUNC_PG_DOWN] = MatchCallListPageDown,
+ [POKENAV_MC_FUNC_PG_UP] = MatchCallListPageUp,
+ [POKENAV_MC_FUNC_SELECT] = SelectMatchCallEntry,
+ [POKENAV_MC_FUNC_MOVE_OPTIONS_CURSOR] = MoveMatchCallOptionsCursor,
+ [POKENAV_MC_FUNC_CANCEL] = CancelMatchCallSelection,
+ [POKENAV_MC_FUNC_CALL_MSG] = DoMatchCallMessage,
+ [POKENAV_MC_FUNC_NEARBY_MSG] = DoTrainerCloseByMessage,
+ [POKENAV_MC_FUNC_10] = sub_81CB888,
+ [POKENAV_MC_FUNC_SHOW_CHECK_PAGE] = ShowCheckPage,
+ [POKENAV_MC_FUNC_CHECK_PAGE_UP] = ShowCheckPageUp,
+ [POKENAV_MC_FUNC_CHECK_PAGE_DOWN] = ShowCheckPageDown,
+ [POKENAV_MC_FUNC_EXIT_CHECK_PAGE] = ExitCheckPage,
+ [POKENAV_MC_FUNC_EXIT] = ExitMatchCall
};
-const struct WindowTemplate gUnknown_086227D8 =
+static const struct WindowTemplate sMatchCallLocationWindowTemplate =
{
.bg = 2,
.tilemapLeft = 0,
@@ -186,7 +182,7 @@ const struct WindowTemplate gUnknown_086227D8 =
.baseBlock = 16
};
-const struct WindowTemplate gUnknown_086227E0 =
+static const struct WindowTemplate sMatchCallInfoBoxWindowTemplate =
{
.bg = 2,
.tilemapLeft = 0,
@@ -197,16 +193,17 @@ const struct WindowTemplate gUnknown_086227E0 =
.baseBlock = 38
};
-const u8 *const gUnknown_086227E8[] =
+static const u8 *const sMatchCallOptionTexts[MATCH_CALL_OPTION_COUNT] =
{
- gUnknown_085EC017,
- gUnknown_085EC01C,
- gUnknown_085EC022
+ [MATCH_CALL_OPTION_CALL] = gText_Call,
+ [MATCH_CALL_OPTION_CHECK] = gText_Check,
+ [MATCH_CALL_OPTION_CANCEL] = gText_Cancel6
};
-const u8 gUnknown_086227F4[] = _("·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·\p");
+// The series of 5 dots that appear when someone is called with Match Call
+static const u8 sText_CallingDots[] = _("·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·\p");
-const struct WindowTemplate gUnknown_08622808 =
+static const struct WindowTemplate sCallMsgBoxWindowTemplate =
{
.bg = 1,
.tilemapLeft = 1,
@@ -222,18 +219,17 @@ const struct CompressedSpriteSheet gUnknown_08622810[1] =
{gUnknown_086226B8, 0x40, 7}
};
-const struct SpritePalette gUnknown_08622818[] =
+const struct SpritePalette gUnknown_08622818[2] =
{
- {gUnknown_08622698, 12},
- {}
+ {gUnknown_08622698, 12}
};
-const struct OamData gUnknown_08622828 =
+static const struct OamData sOptionsCursorOamData =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
- .bpp = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x16),
.x = 0,
.size = SPRITE_SIZE(8x16),
@@ -242,23 +238,23 @@ const struct OamData gUnknown_08622828 =
.paletteNum = 0,
};
-const struct SpriteTemplate gUnknown_08622830 =
+static const struct SpriteTemplate sOptionsCursorSpriteTemplate =
{
.tileTag = 7,
.paletteTag = 12,
- .oam = &gUnknown_08622828,
+ .oam = &sOptionsCursorOamData,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81CC34C,
+ .callback = SpriteCB_OptionsCursor,
};
-const struct OamData gUnknown_08622848 =
+static const struct OamData sTrainerPicOamData =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
- .bpp = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.size = SPRITE_SIZE(64x64),
@@ -267,11 +263,11 @@ const struct OamData gUnknown_08622848 =
.paletteNum = 0,
};
-const struct SpriteTemplate gUnknown_08622850 =
+static const struct SpriteTemplate sTrainerPicSpriteTemplate =
{
.tileTag = 8,
.paletteTag = 13,
- .oam = &gUnknown_08622848,
+ .oam = &sTrainerPicOamData,
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
@@ -293,7 +289,7 @@ bool32 sub_81CB260(void)
void sub_81CB29C(s32 index)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
- state->unk4 = CreateLoopedTask(gUnknown_08622798[index], 1);
+ state->unk4 = CreateLoopedTask(sMatchCallLoopTaskFuncs[index], 1);
state->unk0 = sub_81CB310;
}
@@ -308,9 +304,9 @@ void sub_81CB2E0(void)
struct Pokenav4Struct *state = GetSubstructPtr(6);
sub_81CC2B4();
sub_81CBC1C();
- RemoveWindow(state->unk12);
- RemoveWindow(state->unk10);
- RemoveWindow(state->unk14);
+ RemoveWindow(state->infoBoxWindowId);
+ RemoveWindow(state->locWindowId);
+ RemoveWindow(state->msgBoxWindowId);
FreePokenavSubstruct(6);
}
@@ -329,48 +325,48 @@ static u32 sub_81CB324(s32 taskState)
InitBgTemplates(gUnknown_0862278C, ARRAY_COUNT(gUnknown_0862278C));
ChangeBgX(2, 0, 0);
ChangeBgY(2, 0, 0);
- decompress_and_copy_tile_data_to_vram(2, gUnknown_08622530, 0, 0, 0);
+ decompress_and_copy_tile_data_to_vram(2, sMatchCallUI_Gfx, 0, 0, 0);
SetBgTilemapBuffer(2, state->unk1024);
- CopyToBgTilemapBuffer(2, gUnknown_086225D4, 0, 0);
+ CopyToBgTilemapBuffer(2, sMatchCallUI_Tilemap, 0, 0);
CopyBgTilemapBufferToVram(2);
- CopyPaletteIntoBufferUnfaded(gUnknown_08622510, 0x20, 0x20);
+ CopyPaletteIntoBufferUnfaded(sMatchCallUI_Pal, 0x20, 0x20);
CopyBgTilemapBufferToVram(2);
- return 0;
+ return LT_INC_AND_PAUSE;
case 1:
if (free_temp_tile_data_buffers_if_possible())
- return 2;
+ return LT_PAUSE;
sub_8199DF0(1, 0, 0, 1);
SetBgTilemapBuffer(1, state->unk24);
FillBgTilemapBufferRect_Palette0(1, 0x1000, 0, 0, 32, 20);
CopyPaletteIntoBufferUnfaded(gUnknown_086226E0, 0x10, 0x20);
CopyBgTilemapBufferToVram(1);
- return 0;
+ return LT_INC_AND_PAUSE;
case 2:
if (free_temp_tile_data_buffers_if_possible())
- return 2;
+ return LT_PAUSE;
sub_81CC034(state);
decompress_and_copy_tile_data_to_vram(3, gUnknown_08622760, 0, 0, 0);
CopyPaletteIntoBufferUnfaded(gUnknown_08622700, 0x30, 0x20);
CopyPaletteIntoBufferUnfaded(gUnknown_08622720, 0x50, 0x20);
- return 0;
+ return LT_INC_AND_PAUSE;
case 3:
if (free_temp_tile_data_buffers_if_possible() || !sub_81CAE28())
- return 2;
+ return LT_PAUSE;
sub_81CBBB8();
- return 0;
+ return LT_INC_AND_PAUSE;
case 4:
if (sub_81C8224())
- return 2;
+ return LT_PAUSE;
- sub_81CBD78(state);
- return 0;
+ DrawMatchCallLeftColumnWindows(state);
+ return LT_INC_AND_PAUSE;
case 5:
- sub_81CBDC0(state);
- sub_81CBEF8(state, 0);
- return 0;
+ UpdateMatchCallInfoBox(state);
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 6:
ChangeBgX(1, 0, 0);
ChangeBgY(1, 0, 0);
@@ -381,19 +377,19 @@ static u32 sub_81CB324(s32 taskState)
LoadLeftHeaderGfxForIndex(3);
sub_81C7FA0(3, 1, 0);
sub_81C7AC0(1);
- return 0;
+ return LT_INC_AND_PAUSE;
case 7:
if (IsPaletteFadeActive() || sub_81C8010())
- return 2;
+ return LT_PAUSE;
sub_81CBC38(1);
- return 4;
+ return LT_FINISH;
default:
- return 4;
+ return LT_FINISH;
}
}
-u32 sub_81CB510(s32 taskState)
+u32 MatchCallListCursorDown(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
@@ -410,27 +406,27 @@ u32 sub_81CB510(s32 taskState)
PlaySE(SE_SELECT);
// fall through
default:
- return 0;
+ return LT_INC_AND_PAUSE;
}
break;
case 1:
if (sub_81C8630())
- return 2;
+ return LT_PAUSE;
- sub_81CBEF8(state, 0);
- return 0;
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 2:
- sub_81CBEF8(state, 0);
- return 0;
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 3:
if (IsDma3ManagerBusyWithBgCopy())
- return 2;
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CB588(s32 taskState)
+u32 MatchCallListCursorUp(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
@@ -447,27 +443,27 @@ u32 sub_81CB588(s32 taskState)
PlaySE(SE_SELECT);
// fall through
default:
- return 0;
+ return LT_INC_AND_PAUSE;
}
break;
case 1:
if (sub_81C8630())
- return 2;
+ return LT_PAUSE;
- sub_81CBEF8(state, 0);
- return 0;
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 2:
- sub_81CBEF8(state, 0);
- return 0;
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 3:
if (IsDma3ManagerBusyWithBgCopy())
- return 2;
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CB600(s32 taskState)
+u32 MatchCallListPageDown(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
@@ -484,27 +480,27 @@ u32 sub_81CB600(s32 taskState)
PlaySE(SE_SELECT);
// fall through
default:
- return 0;
+ return LT_INC_AND_PAUSE;
}
break;
case 1:
if (sub_81C8630())
- return 2;
+ return LT_PAUSE;
- sub_81CBEF8(state, 0);
- return 0;
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 2:
- sub_81CBEF8(state, 0);
- return 0;
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 3:
if (IsDma3ManagerBusyWithBgCopy())
- return 2;
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CB678(s32 taskState)
+u32 MatchCallListPageUp(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
@@ -521,138 +517,138 @@ u32 sub_81CB678(s32 taskState)
PlaySE(SE_SELECT);
// fall through
default:
- return 0;
+ return LT_INC_AND_PAUSE;
}
break;
case 1:
if (sub_81C8630())
- return 2;
+ return LT_PAUSE;
- sub_81CBEF8(state, 0);
- return 0;
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 2:
- sub_81CBEF8(state, 0);
- return 0;
+ PrintMatchCallLocation(state, 0);
+ return LT_INC_AND_PAUSE;
case 3:
if (IsDma3ManagerBusyWithBgCopy())
- return 2;
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CB6F0(s32 taskState)
+u32 SelectMatchCallEntry(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
{
case 0:
PlaySE(SE_SELECT);
- sub_81CBF60(state);
- sub_81C7BA4(7);
- return 0;
+ PrintMatchCallSelectionOptions(state);
+ PrintHelpBarText(HELPBAR_MC_CALL_MENU);
+ return LT_INC_AND_PAUSE;
case 1:
if (sub_81CBFC4(state))
- return 2;
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CB734(s32 taskState)
+u32 MoveMatchCallOptionsCursor(s32 taskState)
{
struct Pokenav4Struct *state;
- u16 var0;
+ u16 cursorPos;
PlaySE(SE_SELECT);
state = GetSubstructPtr(6);
- var0 = sub_81CB01C();
- sub_81CC344(state, var0);
- return 4;
+ cursorPos = GetMatchCallOptionCursorPos();
+ UpdateCursorGfxPos(state, cursorPos);
+ return LT_FINISH;
}
-u32 sub_81CB75C(s32 taskState)
+u32 CancelMatchCallSelection(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
{
case 0:
PlaySE(SE_SELECT);
- sub_81CBFF0(state);
- sub_81C7BA4(6);
- return 0;
+ UpdateWindowsReturnToTrainerList(state);
+ PrintHelpBarText(HELPBAR_MC_TRAINER_LIST);
+ return LT_INC_AND_PAUSE;
case 1:
- if (sub_81CC004(state))
- return 2;
+ if (IsDma3ManagerBusyWithBgCopy1(state))
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CB7A0(s32 taskState)
+u32 DoMatchCallMessage(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
{
case 0:
ToggleMatchCallVerticalArrows(TRUE);
- sub_81CC058(state);
- return 0;
+ DrawMsgBoxForMatchCallMsg(state);
+ return LT_INC_AND_PAUSE;
case 1:
- if (sub_81CC0D0(state))
- return 2;
+ if (IsDma3ManagerBusyWithBgCopy2(state))
+ return LT_PAUSE;
- sub_81CC0E0(state);
+ PrintCallingDots(state);
PlaySE(SE_TOREEYE);
state->unkE = 0;
- return 0;
+ return LT_INC_AND_PAUSE;
case 2:
- if (sub_81CC104(state))
- return 2;
+ if (WaitForCallingDotsText(state))
+ return LT_PAUSE;
- sub_81CC158(state);
- return 0;
+ PrintMatchCallMessage(state);
+ return LT_INC_AND_PAUSE;
case 3:
- if (sub_81CC194(state))
- return 2;
+ if (WaitForMatchCallMessageText(state))
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CB824(s32 taskState)
+u32 DoTrainerCloseByMessage(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
{
case 0:
PlaySE(SE_SELECT);
- sub_81CC09C(state);
+ DrawMsgBoxForCloseByMsg(state);
ToggleMatchCallVerticalArrows(TRUE);
state->unkE = 1;
- return 0;
+ return LT_INC_AND_PAUSE;
case 1:
- if (sub_81CC0D0(state))
- return 2;
+ if (IsDma3ManagerBusyWithBgCopy2(state))
+ return LT_PAUSE;
- sub_81CC11C(state);
- return 0;
+ PrintTrainerIsCloseBy(state);
+ return LT_INC_AND_PAUSE;
case 2:
- if (sub_81CC140(state))
- return 2;
+ if (WaitForTrainerIsCloseByText(state))
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
u32 sub_81CB888(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
- u32 result = 0;
+ u32 result = LT_INC_AND_PAUSE;
switch (taskState)
{
@@ -663,49 +659,49 @@ u32 sub_81CB888(s32 taskState)
PlaySE(SE_SELECT);
break;
case 1:
- sub_81CC1DC(state);
+ DrawSpinningPokenavForCall(state);
break;
case 2:
- if (sub_81CC204(state))
- result = 2;
+ if (WaitForSpinningPokenav(state))
+ result = LT_PAUSE;
break;
case 3:
- sub_81CBFF0(state);
+ UpdateWindowsReturnToTrainerList(state);
break;
case 4:
- if (sub_81CC004(state))
- result = 2;
+ if (IsDma3ManagerBusyWithBgCopy1(state))
+ result = LT_PAUSE;
- sub_81C7BA4(6);
+ PrintHelpBarText(HELPBAR_MC_TRAINER_LIST);
break;
case 5:
- if (IsDma3ManagerBusyWithBgCopy_())
+ if (WaitForHelpBar())
{
- result = 2;
+ result = LT_PAUSE;
}
else
{
if (state->unkF)
{
sub_81C8838();
- result = 1;
+ result = LT_INC_AND_CONTINUE;
}
else
{
ToggleMatchCallVerticalArrows(FALSE);
- result = 4;
+ result = LT_FINISH;
}
}
break;
case 6:
if (IsDma3ManagerBusyWithBgCopy())
{
- result = 2;
+ result = LT_PAUSE;
}
else
{
ToggleMatchCallVerticalArrows(FALSE);
- result = 4;
+ result = LT_FINISH;
}
break;
}
@@ -713,7 +709,7 @@ u32 sub_81CB888(s32 taskState)
return result;
}
-u32 sub_81CB93C(s32 taskState)
+u32 ShowCheckPage(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
@@ -721,132 +717,132 @@ u32 sub_81CB93C(s32 taskState)
case 0:
PlaySE(SE_SELECT);
sub_81C877C();
- sub_81CC014(state);
- return 0;
+ UpdateWindowsToShowCheckPage(state);
+ return LT_INC_AND_PAUSE;
case 1:
- if (sub_81C8820() || sub_81CC004(state))
- return 2;
+ if (sub_81C8820() || IsDma3ManagerBusyWithBgCopy1(state))
+ return LT_PAUSE;
- sub_81C7BA4(8);
- return 0;
+ PrintHelpBarText(HELPBAR_MC_CHECK_PAGE);
+ return LT_INC_AND_PAUSE;
case 2:
- sub_81C87AC(0);
- sub_81CC39C(state);
- return 0;
+ PrintCheckPageInfo(0);
+ LoadCheckPageTrainerPic(state);
+ return LT_INC_AND_PAUSE;
case 3:
- if (sub_81C8820() || sub_81CC42C(state) || IsDma3ManagerBusyWithBgCopy_())
- return 2;
+ if (sub_81C8820() || WaitForTrainerPic(state) || WaitForHelpBar())
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CB9C8(s32 taskState)
+u32 ShowCheckPageDown(s32 taskState)
{
- int index;
- int var0;
+ int topId;
+ int delta;
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
{
case 0:
- index = GetMatchCallListTopIndex();
- var0 = sub_81CB0E4(index);
- if (var0)
+ topId = GetMatchCallListTopIndex();
+ delta = GetIndexDeltaOfNextCheckPageDown(topId);
+ if (delta)
{
PlaySE(SE_SELECT);
- state->unk16 = var0;
- sub_81CC420(state);
- return 0;
+ state->unk16 = delta;
+ TrainerPicSlideOffscreen(state);
+ return LT_INC_AND_PAUSE;
}
break;
case 1:
- if (sub_81CC42C(state))
- return 2;
+ if (WaitForTrainerPic(state))
+ return LT_PAUSE;
- sub_81CBEF8(state, state->unk16);
- return 0;
+ PrintMatchCallLocation(state, state->unk16);
+ return LT_INC_AND_PAUSE;
case 2:
- sub_81C87AC(state->unk16);
- return 0;
+ PrintCheckPageInfo(state->unk16);
+ return LT_INC_AND_PAUSE;
case 3:
- sub_81CC39C(state);
- return 0;
+ LoadCheckPageTrainerPic(state);
+ return LT_INC_AND_PAUSE;
case 4:
- if (sub_81C8820() || sub_81CC42C(state))
- return 2;
+ if (sub_81C8820() || WaitForTrainerPic(state))
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CBA68(s32 taskState)
+u32 ExitCheckPage(s32 taskState)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
{
case 0:
PlaySE(SE_SELECT);
- sub_81CC420(state);
+ TrainerPicSlideOffscreen(state);
sub_81C87F0();
- return 0;
+ return LT_INC_AND_PAUSE;
case 1:
- if (sub_81C8820() || sub_81CC42C(state))
- return 2;
+ if (sub_81C8820() || WaitForTrainerPic(state))
+ return LT_PAUSE;
- sub_81C7BA4(6);
- sub_81CBDC0(state);
- return 0;
+ PrintHelpBarText(HELPBAR_MC_TRAINER_LIST);
+ UpdateMatchCallInfoBox(state);
+ return LT_INC_AND_PAUSE;
case 2:
if (IsDma3ManagerBusyWithBgCopy())
- return 2;
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CBAD4(s32 taskState)
+u32 ShowCheckPageUp(s32 taskState)
{
- int index;
- int var0;
+ int topId;
+ int delta;
struct Pokenav4Struct *state = GetSubstructPtr(6);
switch (taskState)
{
case 0:
- index = GetMatchCallListTopIndex();
- var0 = sub_81CB128(index);
- if (var0)
+ topId = GetMatchCallListTopIndex();
+ delta = GetIndexDeltaOfNextCheckPageUp(topId);
+ if (delta)
{
PlaySE(SE_SELECT);
- state->unk16 = var0;
- sub_81CC420(state);
- return 0;
+ state->unk16 = delta;
+ TrainerPicSlideOffscreen(state);
+ return LT_INC_AND_PAUSE;
}
break;
case 1:
- if (sub_81CC42C(state))
- return 2;
+ if (WaitForTrainerPic(state))
+ return LT_PAUSE;
- sub_81CBEF8(state, state->unk16);
- return 0;
+ PrintMatchCallLocation(state, state->unk16);
+ return LT_INC_AND_PAUSE;
case 2:
- sub_81C87AC(state->unk16);
- return 0;
+ PrintCheckPageInfo(state->unk16);
+ return LT_INC_AND_PAUSE;
case 3:
- sub_81CC39C(state);
- return 0;
+ LoadCheckPageTrainerPic(state);
+ return LT_INC_AND_PAUSE;
case 4:
- if (sub_81C8820() || sub_81CC42C(state))
- return 2;
+ if (sub_81C8820() || WaitForTrainerPic(state))
+ return LT_PAUSE;
break;
}
- return 4;
+ return LT_FINISH;
}
-u32 sub_81CBB74(s32 taskState)
+u32 ExitMatchCall(s32 taskState)
{
switch (taskState)
{
@@ -855,23 +851,23 @@ u32 sub_81CBB74(s32 taskState)
sub_81CBC38(0);
sub_81C7AC0(0);
sub_81C78A0();
- return 0;
+ return LT_INC_AND_PAUSE;
case 1:
if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy())
- return 2;
+ return LT_PAUSE;
sub_81C7FDC();
break;
}
- return 4;
+ return LT_FINISH;
}
static void sub_81CBBB8(void)
{
- struct MatchCallListTemplate template;
- template.unk0 = sub_81CAE94();
- template.unk4 = sub_81CAE38();
+ struct PokenavListTemplate template;
+ template.list.matchCallEntries = sub_81CAE94();
+ template.unk4 = GetNumberRegistered();
template.unk8 = 4;
template.unk6 = 0;
template.unk9 = 13;
@@ -880,8 +876,8 @@ static void sub_81CBBB8(void)
template.unkC = 8;
template.unkD = 3;
template.unkE = 7;
- template.unk10 = sub_81CB050;
- template.unk14 = sub_81CBCEC;
+ template.listFunc.unk10_2 = BufferMatchCallNameAndDesc;
+ template.unk14 = TryDrawRematchPokeballIcon;
sub_81C81D4(&gUnknown_0862278C[2], &template, 2);
CreateTask(sub_81CBC64, 7);
}
@@ -913,12 +909,12 @@ static void sub_81CBC64(u8 taskId)
}
}
-static void sub_81CBCEC(u16 windowId, u32 arg1, u32 arg2)
+static void TryDrawRematchPokeballIcon(u16 windowId, u32 rematchId, u32 arg2)
{
u8 bg = GetWindowAttribute(windowId, WINDOW_BG);
u16 *tilemap = GetBgTilemapBuffer(bg);
tilemap += arg2 * 0x40 + 0x1D;
- if (sub_81CAEBC(arg1))
+ if (ShouldDrawRematchPokeballIcon(rematchId))
{
tilemap[0] = 0x5000;
tilemap[0x20] = 0x5001;
@@ -930,7 +926,7 @@ static void sub_81CBCEC(u16 windowId, u32 arg1, u32 arg2)
}
}
-void sub_81CBD48(u16 windowId, u32 arg0)
+void ClearRematchPokeballIcon(u16 windowId, u32 arg0)
{
u8 bg = GetWindowAttribute(windowId, WINDOW_BG);
u16 *tilemap = GetBgTilemapBuffer(bg);
@@ -939,45 +935,45 @@ void sub_81CBD48(u16 windowId, u32 arg0)
tilemap[0x20] = 0x5002;
}
-static void sub_81CBD78(struct Pokenav4Struct *state)
+static void DrawMatchCallLeftColumnWindows(struct Pokenav4Struct *state)
{
- state->unk10 = AddWindow(&gUnknown_086227D8);
- state->unk12 = AddWindow(&gUnknown_086227E0);
- FillWindowPixelBuffer(state->unk10, PIXEL_FILL(1));
- PutWindowTilemap(state->unk10);
- FillWindowPixelBuffer(state->unk12, PIXEL_FILL(1));
- PutWindowTilemap(state->unk12);
- CopyWindowToVram(state->unk10, 1);
+ state->locWindowId = AddWindow(&sMatchCallLocationWindowTemplate);
+ state->infoBoxWindowId = AddWindow(&sMatchCallInfoBoxWindowTemplate);
+ FillWindowPixelBuffer(state->locWindowId, PIXEL_FILL(1));
+ PutWindowTilemap(state->locWindowId);
+ FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1));
+ PutWindowTilemap(state->infoBoxWindowId);
+ CopyWindowToVram(state->locWindowId, 1);
}
-static void sub_81CBDC0(struct Pokenav4Struct *state)
+static void UpdateMatchCallInfoBox(struct Pokenav4Struct *state)
{
- FillWindowPixelBuffer(state->unk12, PIXEL_FILL(1));
- sub_81CBDF4(state->unk12);
- sub_81CBE0C(state->unk12);
- sub_81CBE38(state->unk12);
- sub_81CBE50(state->unk12);
- CopyWindowToVram(state->unk12, 2);
+ FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1));
+ PrintNumberRegisteredLabel(state->infoBoxWindowId);
+ PrintNumberRegistered(state->infoBoxWindowId);
+ PrintNumberOfBattlesLabel(state->infoBoxWindowId);
+ PrintNumberOfBattles(state->infoBoxWindowId);
+ CopyWindowToVram(state->infoBoxWindowId, 2);
}
-static void sub_81CBDF4(u16 windowId)
+static void PrintNumberRegisteredLabel(u16 windowId)
{
- sub_81CBE88(windowId, gText_NumberRegistered, 0);
+ PrintMatchCallInfoLabel(windowId, gText_NumberRegistered, 0);
}
-static void sub_81CBE0C(u16 windowId)
+static void PrintNumberRegistered(u16 windowId)
{
u8 str[3];
- ConvertIntToDecimalStringN(str, sub_81CAE38(), STR_CONV_MODE_LEFT_ALIGN, 3);
- sub_81CBEB4(windowId, str, 1);
+ ConvertIntToDecimalStringN(str, GetNumberRegistered(), STR_CONV_MODE_LEFT_ALIGN, 3);
+ PrintMatchCallInfoNumber(windowId, str, 1);
}
-static void sub_81CBE38(u16 windowId)
+static void PrintNumberOfBattlesLabel(u16 windowId)
{
- sub_81CBE88(windowId, gText_NumberOfBattles, 2);
+ PrintMatchCallInfoLabel(windowId, gText_NumberOfBattles, 2);
}
-static void sub_81CBE50(u16 windowId)
+static void PrintNumberOfBattles(u16 windowId)
{
u8 str[5];
int numTrainerBattles = GetGameStat(GAME_STAT_TRAINER_BATTLES);
@@ -985,150 +981,150 @@ static void sub_81CBE50(u16 windowId)
numTrainerBattles = 99999;
ConvertIntToDecimalStringN(str, numTrainerBattles, STR_CONV_MODE_LEFT_ALIGN, 5);
- sub_81CBEB4(windowId, str, 3);
+ PrintMatchCallInfoNumber(windowId, str, 3);
}
-static void sub_81CBE88(u16 windowId, const u8 *str, int top)
+static void PrintMatchCallInfoLabel(u16 windowId, const u8 *str, int top)
{
int y = top * 16 + 1;
AddTextPrinterParameterized(windowId, 7, str, 2, y, TEXT_SPEED_FF, NULL);
}
-static void sub_81CBEB4(u16 windowId, const u8 *str, int top)
+static void PrintMatchCallInfoNumber(u16 windowId, const u8 *str, int top)
{
int x = GetStringRightAlignXOffset(7, str, 86);
int y = top * 16 + 1;
AddTextPrinterParameterized(windowId, 7, str, x, y, TEXT_SPEED_FF, NULL);
}
-static void sub_81CBEF8(struct Pokenav4Struct *state, int arg1)
+static void PrintMatchCallLocation(struct Pokenav4Struct *state, int arg1)
{
u8 mapName[32];
int x;
int index = GetSelectedMatchCall() + arg1;
- int regionMapSection = sub_81CAEA4(index);
- if (regionMapSection != MAPSEC_NONE)
- GetMapName(mapName, regionMapSection, 0);
+ int mapSec = GetMatchCallMapSec(index);
+ if (mapSec != MAPSEC_NONE)
+ GetMapName(mapName, mapSec, 0);
else
StringCopy(mapName, gText_Unknown);
x = GetStringCenterAlignXOffset(7, mapName, 88);
- FillWindowPixelBuffer(state->unk10, PIXEL_FILL(1));
- AddTextPrinterParameterized(state->unk10, 7, mapName, x, 1, 0, NULL);
+ FillWindowPixelBuffer(state->locWindowId, PIXEL_FILL(1));
+ AddTextPrinterParameterized(state->locWindowId, 7, mapName, x, 1, 0, NULL);
}
-static void sub_81CBF60(struct Pokenav4Struct *state)
+static void PrintMatchCallSelectionOptions(struct Pokenav4Struct *state)
{
u32 i;
- FillWindowPixelBuffer(state->unk12, PIXEL_FILL(1));
- for (i = 0; i < 3; i++)
+ FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1));
+ for (i = 0; i < MATCH_CALL_OPTION_COUNT; i++)
{
- int messageId = sub_81CB02C(i);
- if (messageId == 3)
+ int optionText = GetMatchCallOptionId(i);
+ if (optionText == MATCH_CALL_OPTION_COUNT)
break;
- AddTextPrinterParameterized(state->unk12, 7, gUnknown_086227E8[messageId], 16, i * 16 + 1, TEXT_SPEED_FF, NULL);
+ AddTextPrinterParameterized(state->infoBoxWindowId, 7, sMatchCallOptionTexts[optionText], 16, i * 16 + 1, TEXT_SPEED_FF, NULL);
}
- CopyWindowToVram(state->unk12, 2);
+ CopyWindowToVram(state->infoBoxWindowId, 2);
}
static bool32 sub_81CBFC4(struct Pokenav4Struct *state)
{
if (!IsDma3ManagerBusyWithBgCopy())
{
- sub_81CC2F0(state, sub_81CB01C());
+ sub_81CC2F0(state, GetMatchCallOptionCursorPos());
return FALSE;
}
return TRUE;
}
-static void sub_81CBFF0(struct Pokenav4Struct *state)
+static void UpdateWindowsReturnToTrainerList(struct Pokenav4Struct *state)
{
- sub_81CC330(state);
- sub_81CBDC0(state);
+ CloseMatchCallSelectOptionsWindow(state);
+ UpdateMatchCallInfoBox(state);
}
-static bool32 sub_81CC004(struct Pokenav4Struct *state)
+static bool32 IsDma3ManagerBusyWithBgCopy1(struct Pokenav4Struct *state)
{
return IsDma3ManagerBusyWithBgCopy();
}
-static void sub_81CC014(struct Pokenav4Struct *state)
+static void UpdateWindowsToShowCheckPage(struct Pokenav4Struct *state)
{
- sub_81CC330(state);
- FillWindowPixelBuffer(state->unk12, PIXEL_FILL(1));
- CopyWindowToVram(state->unk12, 2);
+ CloseMatchCallSelectOptionsWindow(state);
+ FillWindowPixelBuffer(state->infoBoxWindowId, PIXEL_FILL(1));
+ CopyWindowToVram(state->infoBoxWindowId, 2);
}
static void sub_81CC034(struct Pokenav4Struct *state)
{
- state->unk14 = AddWindow(&gUnknown_08622808);
- sub_8197184(state->unk14, 1, 4);
+ state->msgBoxWindowId = AddWindow(&sCallMsgBoxWindowTemplate);
+ sub_8197184(state->msgBoxWindowId, 1, 4);
sub_81C7B40();
}
-static void sub_81CC058(struct Pokenav4Struct *state)
+static void DrawMsgBoxForMatchCallMsg(struct Pokenav4Struct *state)
{
struct Sprite *sprite;
- sub_8197184(state->unk14, 1, 4);
- sub_81971C4(state->unk14, 1, 4);
- FillWindowPixelBuffer(state->unk14, PIXEL_FILL(1));
- PutWindowTilemap(state->unk14);
- CopyWindowToVram(state->unk14, 3);
+ sub_8197184(state->msgBoxWindowId, 1, 4);
+ sub_81971C4(state->msgBoxWindowId, 1, 4);
+ FillWindowPixelBuffer(state->msgBoxWindowId, PIXEL_FILL(1));
+ PutWindowTilemap(state->msgBoxWindowId);
+ CopyWindowToVram(state->msgBoxWindowId, 3);
sprite = PauseSpinningPokenavSprite();
sprite->pos1.x = 24;
sprite->pos1.y = 112;
sprite->pos2.y = 0;
}
-static void sub_81CC09C(struct Pokenav4Struct *state)
+static void DrawMsgBoxForCloseByMsg(struct Pokenav4Struct *state)
{
- LoadUserWindowBorderGfx(state->unk14, 1, 0x40);
- DrawTextBorderOuter(state->unk14, 1, 4);
- FillWindowPixelBuffer(state->unk14, PIXEL_FILL(1));
- PutWindowTilemap(state->unk14);
- CopyWindowToVram(state->unk14, 3);
+ LoadUserWindowBorderGfx(state->msgBoxWindowId, 1, 0x40);
+ DrawTextBorderOuter(state->msgBoxWindowId, 1, 4);
+ FillWindowPixelBuffer(state->msgBoxWindowId, PIXEL_FILL(1));
+ PutWindowTilemap(state->msgBoxWindowId);
+ CopyWindowToVram(state->msgBoxWindowId, 3);
}
-static bool32 sub_81CC0D0(struct Pokenav4Struct *state)
+static bool32 IsDma3ManagerBusyWithBgCopy2(struct Pokenav4Struct *state)
{
return IsDma3ManagerBusyWithBgCopy();
}
-static void sub_81CC0E0(struct Pokenav4Struct *state)
+static void PrintCallingDots(struct Pokenav4Struct *state)
{
- AddTextPrinterParameterized(state->unk14, 1, gUnknown_086227F4, 32, 1, 1, NULL);
+ AddTextPrinterParameterized(state->msgBoxWindowId, 1, sText_CallingDots, 32, 1, 1, NULL);
}
-static bool32 sub_81CC104(struct Pokenav4Struct *state)
+static bool32 WaitForCallingDotsText(struct Pokenav4Struct *state)
{
RunTextPrinters();
- return IsTextPrinterActive(state->unk14);
+ return IsTextPrinterActive(state->msgBoxWindowId);
}
-static void sub_81CC11C(struct Pokenav4Struct *state)
+static void PrintTrainerIsCloseBy(struct Pokenav4Struct *state)
{
- AddTextPrinterParameterized(state->unk14, 1, gText_TrainerCloseBy, 0, 1, 1, NULL);
+ AddTextPrinterParameterized(state->msgBoxWindowId, 1, gText_TrainerCloseBy, 0, 1, 1, NULL);
}
-static bool32 sub_81CC140(struct Pokenav4Struct *state)
+static bool32 WaitForTrainerIsCloseByText(struct Pokenav4Struct *state)
{
RunTextPrinters();
- return IsTextPrinterActive(state->unk14);
+ return IsTextPrinterActive(state->msgBoxWindowId);
}
-static void sub_81CC158(struct Pokenav4Struct *state)
+static void PrintMatchCallMessage(struct Pokenav4Struct *state)
{
int index = GetSelectedMatchCall();
- const u8 *str = sub_81CAF78(index, &state->unkF);
+ const u8 *str = GetMatchCallMessageText(index, &state->unkF);
u8 speed = GetPlayerTextSpeedDelay();
- AddTextPrinterParameterized(state->unk14, 1, str, 32, 1, speed, NULL);
+ AddTextPrinterParameterized(state->msgBoxWindowId, 1, str, 32, 1, speed, NULL);
}
-static bool32 sub_81CC194(struct Pokenav4Struct *state)
+static bool32 WaitForMatchCallMessageText(struct Pokenav4Struct *state)
{
if (gMain.heldKeys & A_BUTTON)
gTextFlags.canABSpeedUpPrint = 1;
@@ -1136,19 +1132,19 @@ static bool32 sub_81CC194(struct Pokenav4Struct *state)
gTextFlags.canABSpeedUpPrint = 0;
RunTextPrinters();
- return IsTextPrinterActive(state->unk14);
+ return IsTextPrinterActive(state->msgBoxWindowId);
}
-static void sub_81CC1DC(struct Pokenav4Struct *state)
+static void DrawSpinningPokenavForCall(struct Pokenav4Struct *state)
{
ResumeSpinningPokenavSprite();
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20);
CopyBgTilemapBufferToVram(1);
}
-static bool32 sub_81CC204(struct Pokenav4Struct *state)
+static bool32 WaitForSpinningPokenav(struct Pokenav4Struct *state)
{
- return IsDma3ManagerBusyWithBgCopy();
+ return IsDma3ManagerBusyWithBgCopy();
}
static void sub_81CC214(void)
@@ -1162,24 +1158,24 @@ static void sub_81CC214(void)
LoadCompressedSpriteSheet(&gUnknown_08622810[i]);
Pokenav_AllocAndLoadPalettes(gUnknown_08622818);
- state->unk1C = NULL;
+ state->optionsCursorSprite = NULL;
spriteSheet.data = state->unk1828;
spriteSheet.size = 0x800;
spriteSheet.tag = 8;
state->unk1824 = (u8 *)OBJ_VRAM0 + LoadSpriteSheet(&spriteSheet) * 0x20;
paletteNum = AllocSpritePalette(13);
state->unk1A = 0x100 + paletteNum * 0x10;
- state->unk20 = sub_81CC370();
- state->unk20->invisible = 1;
+ state->trainerPicSprite = CreateTrainerPicSprite();
+ state->trainerPicSprite->invisible = TRUE;
}
static void sub_81CC2B4(void)
{
struct Pokenav4Struct *state = GetSubstructPtr(6);
- if (state->unk1C)
- DestroySprite(state->unk1C);
- if (state->unk20)
- DestroySprite(state->unk20);
+ if (state->optionsCursorSprite)
+ DestroySprite(state->optionsCursorSprite);
+ if (state->trainerPicSprite)
+ DestroySprite(state->trainerPicSprite);
FreeSpriteTilesByTag(8);
FreeSpriteTilesByTag(7);
@@ -1189,26 +1185,26 @@ static void sub_81CC2B4(void)
static void sub_81CC2F0(struct Pokenav4Struct *state, int top)
{
- if (!state->unk1C)
+ if (!state->optionsCursorSprite)
{
- u8 spriteId = CreateSprite(&gUnknown_08622830, 4, 80, 5);
- state->unk1C = &gSprites[spriteId];
- sub_81CC344(state, top);
+ u8 spriteId = CreateSprite(&sOptionsCursorSpriteTemplate, 4, 80, 5);
+ state->optionsCursorSprite = &gSprites[spriteId];
+ UpdateCursorGfxPos(state, top);
}
}
-static void sub_81CC330(struct Pokenav4Struct *state)
+static void CloseMatchCallSelectOptionsWindow(struct Pokenav4Struct *state)
{
- DestroySprite(state->unk1C);
- state->unk1C = NULL;
+ DestroySprite(state->optionsCursorSprite);
+ state->optionsCursorSprite = NULL;
}
-static void sub_81CC344(struct Pokenav4Struct *state, int top)
+static void UpdateCursorGfxPos(struct Pokenav4Struct *state, int top)
{
- state->unk1C->pos2.y = top * 16;
+ state->optionsCursorSprite->pos2.y = top * 16;
}
-void sub_81CC34C(struct Sprite *sprite)
+void SpriteCB_OptionsCursor(struct Sprite *sprite)
{
if (++sprite->data[0] > 3)
{
@@ -1217,39 +1213,39 @@ void sub_81CC34C(struct Sprite *sprite)
}
}
-static struct Sprite *sub_81CC370(void)
+static struct Sprite *CreateTrainerPicSprite(void)
{
- u8 spriteId = CreateSprite(&gUnknown_08622850, 44, 104, 6);
+ u8 spriteId = CreateSprite(&sTrainerPicSpriteTemplate, 44, 104, 6);
return &gSprites[spriteId];
}
-static void sub_81CC39C(struct Pokenav4Struct *state)
+static void LoadCheckPageTrainerPic(struct Pokenav4Struct *state)
{
u16 cursor;
- int trainerId = sub_81CAF04(GetSelectedMatchCall());
- if (trainerId >= 0)
+ int trainerPic = GetMatchCallTrainerPic(GetSelectedMatchCall());
+ if (trainerPic >= 0)
{
- DecompressPicFromTable(&gTrainerFrontPicTable[trainerId], state->unk1828, SPECIES_NONE);
- LZ77UnCompWram(gTrainerFrontPicPaletteTable[trainerId].data, state->unk2028);
+ DecompressPicFromTable(&gTrainerFrontPicTable[trainerPic], state->unk1828, SPECIES_NONE);
+ LZ77UnCompWram(gTrainerFrontPicPaletteTable[trainerPic].data, state->unk2028);
cursor = RequestDma3Copy(state->unk1828, state->unk1824, 0x800, 1);
LoadPalette(state->unk2028, state->unk1A, 0x20);
- state->unk20->data[0] = 0;
- state->unk20->data[7] = cursor;
- state->unk20->callback = sub_81CC440;
+ state->trainerPicSprite->data[0] = 0;
+ state->trainerPicSprite->data[7] = cursor;
+ state->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOnscreen;
}
}
-static void sub_81CC420(struct Pokenav4Struct *state)
+static void TrainerPicSlideOffscreen(struct Pokenav4Struct *state)
{
- state->unk20->callback = sub_81CC4A4;
+ state->trainerPicSprite->callback = SpriteCB_TrainerPicSlideOffscreen;
}
-static bool32 sub_81CC42C(struct Pokenav4Struct *state)
+static bool32 WaitForTrainerPic(struct Pokenav4Struct *state)
{
- return state->unk20->callback != SpriteCallbackDummy;
+ return state->trainerPicSprite->callback != SpriteCallbackDummy;
}
-static void sub_81CC440(struct Sprite *sprite)
+static void SpriteCB_TrainerPicSlideOnscreen(struct Sprite *sprite)
{
switch (sprite->data[0])
{
@@ -1257,7 +1253,7 @@ static void sub_81CC440(struct Sprite *sprite)
if (CheckForSpaceForDma3Request(sprite->data[7]) != -1)
{
sprite->pos2.x = -80;
- sprite->invisible = 0;
+ sprite->invisible = FALSE;
sprite->data[0]++;
}
break;
@@ -1272,12 +1268,12 @@ static void sub_81CC440(struct Sprite *sprite)
}
}
-static void sub_81CC4A4(struct Sprite *sprite)
+static void SpriteCB_TrainerPicSlideOffscreen(struct Sprite *sprite)
{
sprite->pos2.x -= 8;
if (sprite->pos2.x <= -80)
{
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
sprite->callback = SpriteCallbackDummy;
}
}
diff --git a/src/pokenav_unk_5.c b/src/pokenav_unk_5.c
index 03ac05d4d..be30ca94d 100755
--- a/src/pokenav_unk_5.c
+++ b/src/pokenav_unk_5.c
@@ -144,9 +144,9 @@ const struct WindowTemplate gUnknown_08623110 =
const struct OamData gUnknown_086231C8 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
- .bpp = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.size = SPRITE_SIZE(32x8),
@@ -401,10 +401,10 @@ u32 sub_81CC878(s32 taskState)
if (sub_8123514() || sub_81CCC88())
return 2;
- sub_81C7BA4(1);
+ PrintHelpBarText(HELPBAR_MAP_ZOOMED_OUT);
return 0;
case 2:
- if (IsDma3ManagerBusyWithBgCopy_())
+ if (WaitForHelpBar())
return 2;
sub_81C7E14(4);
@@ -434,10 +434,10 @@ u32 sub_81CC8D8(s32 taskState)
if (sub_8123514() || sub_81CCC88())
return 2;
- sub_81C7BA4(2);
+ PrintHelpBarText(HELPBAR_MAP_ZOOMED_IN);
return 0;
case 3:
- if (IsDma3ManagerBusyWithBgCopy_())
+ if (WaitForHelpBar())
return 2;
sub_81C7E14(5);
diff --git a/src/pokenav_unk_6.c b/src/pokenav_unk_6.c
index ac8237793..4c93c0d41 100644
--- a/src/pokenav_unk_6.c
+++ b/src/pokenav_unk_6.c
@@ -463,14 +463,14 @@ void sub_81CD970(void)
{
unkPtr->unk4[count].boxId = TOTAL_BOXES_COUNT;
unkPtr->unk4[count].monId = i;
- unkPtr->unk4[count].unk6 = 0;
+ unkPtr->unk4[count].data = 0;
count++;
}
}
unkPtr->unk4[count].boxId = 0;
unkPtr->unk4[count].monId = 0;
- unkPtr->unk4[count].unk6 = 0;
+ unkPtr->unk4[count].data = 0;
unkPtr->unk2 = 0;
unkPtr->unk0 = count + 1;
structPtr->unk678A = 0;
@@ -597,7 +597,7 @@ u8 *sub_81CDD24(u8 id)
u16 sub_81CDD48(void)
{
struct PokenavSub18 *unkPtr = GetSubstructPtr(18);
- return unkPtr->unk4[unkPtr->unk2].unk6;
+ return unkPtr->unk4[unkPtr->unk2].data;
}
bool32 sub_81CDD5C(void)
diff --git a/src/pokenav_unk_7.c b/src/pokenav_unk_7.c
index 34432a077..11fdaa425 100644
--- a/src/pokenav_unk_7.c
+++ b/src/pokenav_unk_7.c
@@ -195,8 +195,8 @@ u32 sub_81CDE94(s32 state)
{
case 0:
if (sub_81CD3C4() != TRUE)
- return 2;
- return 0;
+ return LT_PAUSE;
+ return LT_INC_AND_PAUSE;
case 1:
InitBgTemplates(gUnknown_08623358, ARRAY_COUNT(gUnknown_08623358));
ChangeBgX(1, 0, 0);
@@ -209,15 +209,15 @@ u32 sub_81CDE94(s32 state)
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4));
decompress_and_copy_tile_data_to_vram(3, gPokenavCondition_Gfx, 0, 0, 0);
- return 0;
+ return LT_INC_AND_PAUSE;
case 2:
if (free_temp_tile_data_buffers_if_possible())
- return 2;
+ return LT_PAUSE;
decompress_and_copy_tile_data_to_vram(2, gUnknown_08623228, 0, 0, 0);
- return 0;
+ return LT_INC_AND_PAUSE;
case 3:
if (free_temp_tile_data_buffers_if_possible())
- return 2;
+ return LT_PAUSE;
LZ77UnCompVram(gPokenavCondition_Tilemap, structPtr->tilemapBuffers[0]);
SetBgTilemapBuffer(3, structPtr->tilemapBuffers[0]);
@@ -228,26 +228,26 @@ u32 sub_81CDE94(s32 state)
CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20);
CopyPaletteIntoBufferUnfaded(gUnknown_08623208, 0xF0, 0x20);
structPtr->unk1814 = -80;
- return 0;
+ return LT_INC_AND_PAUSE;
case 4:
if (free_temp_tile_data_buffers_if_possible())
- return 2;
+ return LT_PAUSE;
LZ77UnCompVram(gUnknown_0862323C, structPtr->tilemapBuffers[2]);
SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]);
CopyBgTilemapBufferToVram(2);
CopyPaletteIntoBufferUnfaded(gUnknown_086231E8, 0x30, 0x20);
sub_81D21DC(2);
- return 0;
+ return LT_INC_AND_PAUSE;
case 5:
sub_8199DF0(1, 0, 0, 1);
sub_8199DF0(1, 17, 1, 1);
CpuFill32(0, structPtr->tilemapBuffers[1], BG_SCREEN_SIZE);
SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]);
- return 0;
+ return LT_INC_AND_PAUSE;
case 6:
if (free_temp_tile_data_buffers_if_possible())
- return 2;
+ return LT_PAUSE;
structPtr->unk1820 = AddWindow(&gUnknown_08623364);
if (sub_81CDD5C() == TRUE)
@@ -257,29 +257,29 @@ u32 sub_81CDE94(s32 state)
structPtr->unk1823 = AddWindow(&gUnknown_0862337C);
}
DeactivateAllTextPrinters();
- return 0;
+ return LT_INC_AND_PAUSE;
case 7:
sub_81CED30(0);
- return 0;
+ return LT_INC_AND_PAUSE;
case 8:
sub_81CE9E4();
- return 0;
+ return LT_INC_AND_PAUSE;
case 9:
if (sub_81CDD5C() == TRUE)
sub_81CE934();
- return 0;
+ return LT_INC_AND_PAUSE;
case 10:
sub_81CE754(0, sub_81CDC84(), TRUE);
- return 0;
+ return LT_INC_AND_PAUSE;
case 11:
sub_81CE754(1, sub_81CDC84(), TRUE);
- return 0;
+ return LT_INC_AND_PAUSE;
case 12:
sub_81CE754(2, sub_81CDC84(), TRUE);
- return 0;
+ return LT_INC_AND_PAUSE;
case 13:
if (sub_81CE754(3, sub_81CDC84(), TRUE) != TRUE)
- return 2;
+ return LT_PAUSE;
PutWindowTilemap(structPtr->unk1820);
if (sub_81CDD5C() == TRUE)
{
@@ -287,14 +287,14 @@ u32 sub_81CDE94(s32 state)
PutWindowTilemap(structPtr->unk1822);
PutWindowTilemap(structPtr->unk1823);
}
- return 0;
+ return LT_INC_AND_PAUSE;
case 14:
ShowBg(1);
HideBg(2);
ShowBg(3);
if (sub_81CDD5C() == TRUE)
- sub_81C7BA4(4);
- return 0;
+ PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS);
+ return LT_INC_AND_PAUSE;
case 15:
sub_81C7AC0(1);
if (!sub_81CDD5C())
@@ -303,25 +303,25 @@ u32 sub_81CDE94(s32 state)
sub_81C7FA0(1, TRUE, 0);
sub_81C7FA0(6, TRUE, 0);
}
- return 0;
+ return LT_INC_AND_PAUSE;
case 16:
if (IsPaletteFadeActive())
- return 2;
+ return LT_PAUSE;
if (!sub_81CDD5C() && sub_81C8010())
- return 2;
+ return LT_PAUSE;
SetVBlankCallback_(sub_81CEE44);
- return 0;
+ return LT_INC_AND_PAUSE;
case 17:
sub_81CEE90();
sub_81D20AC(sub_81CDC70());
- return 0;
+ return LT_INC_AND_PAUSE;
case 18:
if (sub_81D20BC(sub_81CDC70()))
- return 2;
- return 0;
+ return LT_PAUSE;
+ return LT_INC_AND_PAUSE;
case 19:
sub_81CEE74(TRUE);
- return 0;
+ return LT_INC_AND_PAUSE;
case 20:
if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814))
{
@@ -329,12 +329,12 @@ u32 sub_81CDE94(s32 state)
if (sub_81CDD5C() == TRUE || sub_81CDC60() != sub_81CDC50())
sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0());
- return 4;
+ return LT_FINISH;
}
- return 2;
+ return LT_PAUSE;
}
- return 4;
+ return LT_FINISH;
}
u32 sub_81CE2D0(s32 state)
@@ -367,7 +367,7 @@ u32 sub_81CE2D0(s32 state)
return 1;
}
- return 4;
+ return LT_FINISH;
}
u32 sub_81CE37C(s32 state)
@@ -424,7 +424,7 @@ u32 sub_81CE37C(s32 state)
return 2;
}
- return 4;
+ return LT_FINISH;
}
u32 sub_81CE4D8(s32 state)
@@ -468,7 +468,7 @@ u32 sub_81CE4D8(s32 state)
return 2;
}
- return 4;
+ return LT_FINISH;
}
u32 sub_81CE5E4(s32 state)
@@ -506,7 +506,7 @@ u32 sub_81CE5E4(s32 state)
return 2;
}
- return 4;
+ return LT_FINISH;
}
u32 sub_81CE6BC(s32 state)
@@ -514,18 +514,18 @@ u32 sub_81CE6BC(s32 state)
switch (state)
{
case 0:
- sub_811FAA4(sub_81CDD7C(), 0xb0, 0x20);
+ sub_811FAA4(sub_81CDD7C(), 176, 32);
return 1;
case 1:
- sub_81C7BA4(5);
+ PrintHelpBarText(HELPBAR_CONDITION_MARKINGS);
return 1;
case 2:
- if (IsDma3ManagerBusyWithBgCopy_() == TRUE)
+ if (WaitForHelpBar() == TRUE)
return 2;
return 1;
}
- return 4;
+ return LT_FINISH;
}
u32 sub_81CE700(s32 state)
@@ -536,18 +536,18 @@ u32 sub_81CE700(s32 state)
sub_811FAF8();
return 1;
case 1:
- sub_81C7BA4(4);
+ PrintHelpBarText(HELPBAR_CONDITION_MON_STATUS);
return 1;
case 2:
- if (IsDma3ManagerBusyWithBgCopy_() == TRUE)
+ if (WaitForHelpBar() == TRUE)
return 2;
return 1;
}
- return 4;
+ return LT_FINISH;
}
-u8 *sub_81CE738(u8 *dst, u16 num)
+static u8 *UnusedPrintNumberString(u8 *dst, u16 num)
{
u8 *txtPtr = ConvertIntToDecimalStringN(dst, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
txtPtr = StringCopy(txtPtr, gText_Number2);
@@ -719,8 +719,8 @@ void sub_81CE9E4(void)
if (spriteId != MAX_SPRITES)
{
structPtr->unk1806[i] = spriteId;
- gSprites[spriteId].oam.shape = 1;
- gSprites[spriteId].oam.size = 2;
+ gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16);
+ gSprites[spriteId].oam.size = SPRITE_SIZE(32x16);
}
else
{
diff --git a/src/pokenav_unk_8.c b/src/pokenav_unk_8.c
index c52932a79..6c1460dd1 100644
--- a/src/pokenav_unk_8.c
+++ b/src/pokenav_unk_8.c
@@ -227,7 +227,7 @@ static s32 sub_81CF0F0(void)
{
struct PokenavSub7 * ptr = GetSubstructPtr(7);
s32 i = GetSelectedMatchCall();
- return ptr->unkPtr->unk4[i].unk6;
+ return ptr->unkPtr->unk4[i].data;
}
static u16 sub_81CF10C(void)
@@ -258,7 +258,7 @@ static u32 sub_81CF134(s32 state)
if (!GetMonData(pokemon, MON_DATA_SANITY_IS_EGG))
{
item.monId = i;
- item.unk6 = GetMonData(pokemon, ptr->unk14);
+ item.data = GetMonData(pokemon, ptr->unk14);
sub_81CF2C4(ptr, &item);
}
}
@@ -290,7 +290,7 @@ static u32 sub_81CF1D8(s32 state)
{
item.boxId = boxId;
item.monId = monId;
- item.unk6 = GetBoxMonDataAt(boxId, monId, ptr->unk14);
+ item.data = GetBoxMonDataAt(boxId, monId, ptr->unk14);
sub_81CF2C4(ptr, &item);
}
boxCount++;
@@ -313,19 +313,19 @@ static u32 sub_81CF278(s32 state)
{
struct PokenavSub7 * ptr = GetSubstructPtr(7);
s32 r6 = ptr->unkPtr->unk0;
- s32 r4 = ptr->unkPtr->unk4[0].unk6;
+ s32 r4 = ptr->unkPtr->unk4[0].data;
s32 i;
- ptr->unkPtr->unk4[0].unk6 = 1;
+ ptr->unkPtr->unk4[0].data = 1;
for (i = 1; i < r6; i++)
{
- if (ptr->unkPtr->unk4[i].unk6 == r4)
+ if (ptr->unkPtr->unk4[i].data == r4)
{
- ptr->unkPtr->unk4[i].unk6 = ptr->unkPtr->unk4[i - 1].unk6;
+ ptr->unkPtr->unk4[i].data = ptr->unkPtr->unk4[i - 1].data;
}
else
{
- r4 = ptr->unkPtr->unk4[i].unk6;
- ptr->unkPtr->unk4[i].unk6 = i + 1;
+ r4 = ptr->unkPtr->unk4[i].data;
+ ptr->unkPtr->unk4[i].data = i + 1;
}
}
ptr->unk18 = 1;
@@ -340,7 +340,7 @@ static void sub_81CF2C4(struct PokenavSub7 *structPtr, struct PokenavMonList *it
while (right != insertionIdx)
{
- if (item->unk6 > structPtr->unkPtr->unk4[insertionIdx].unk6)
+ if (item->data > structPtr->unkPtr->unk4[insertionIdx].data)
right = insertionIdx;
else
left = insertionIdx + 1;
@@ -431,7 +431,7 @@ static u32 sub_81CF418(s32 state)
if (sub_81C8224())
return LT_PAUSE;
sub_81CF7C8(unk);
- sub_81C7BA4(3);
+ PrintHelpBarText(HELPBAR_CONDITION_MON_LIST);
return LT_INC_AND_PAUSE;
case 4:
if (free_temp_tile_data_buffers_if_possible())
@@ -651,8 +651,8 @@ static void sub_81CF7F4(struct PokenavSub8 * ptr)
static void sub_81CF88C(void)
{
- struct MatchCallListTemplate template;
- template.unk0 = sub_81CF0D0();
+ struct PokenavListTemplate template;
+ template.list.monList = sub_81CF0D0();
template.unk4 = sub_81CF0E0();
template.unk8 = 4;
template.unk6 = sub_81CF10C();
@@ -662,7 +662,7 @@ static void sub_81CF88C(void)
template.unkC = 8;
template.unkD = 2;
template.unkE = 1;
- template.unk10 = sub_81CF8E4;
+ template.listFunc.unk10_1 = sub_81CF8E4;
template.unk14 = NULL;
sub_81C81D4(&gUnknown_08623590[1], &template, 0);
}
diff --git a/src/pokenav_unk_9.c b/src/pokenav_unk_9.c
index 05d590a87..b1a344de9 100644
--- a/src/pokenav_unk_9.c
+++ b/src/pokenav_unk_9.c
@@ -218,7 +218,7 @@ static s32 sub_81CFB48(void)
{
struct PokenavSub9 * ptr = GetSubstructPtr(9);
s32 idx = GetSelectedMatchCall();
- return ptr->unk1C->unk4[idx].unk6;
+ return ptr->unk1C->unk4[idx].data;
}
static s32 sub_81CFB64(void)
@@ -240,7 +240,7 @@ static u32 sub_81CFB8C(s32 state)
ptr->unk1C->unk0 = 0;
ptr->unk1C->unk2 = 0;
- item.boxId = 14;
+ item.boxId = TOTAL_BOXES_COUNT;
for (i = 0; i < PARTY_SIZE; i++)
{
struct Pokemon * pokemon = &gPlayerParty[i];
@@ -252,7 +252,7 @@ static u32 sub_81CFB8C(s32 state)
if (ribbonCount != 0)
{
item.monId = i;
- item.unk6 = ribbonCount;
+ item.data = ribbonCount;
sub_81CFCEC(ptr, &item);
}
}
@@ -288,13 +288,13 @@ static u32 sub_81CFC40(s32 state)
{
item.boxId = boxId;
item.monId = monId;
- item.unk6 = ribbonCount;
+ item.data = ribbonCount;
sub_81CFCEC(ptr, &item);
}
}
boxCount++;
monId++;
- if (boxCount > 14)
+ if (boxCount > TOTAL_BOXES_COUNT)
{
ptr->unkC = boxId;
ptr->unk10 = monId;
@@ -317,7 +317,7 @@ static void sub_81CFCEC(struct PokenavSub9 *structPtr, struct PokenavMonList *it
while (right != insertionIdx)
{
- if (item->unk6 > structPtr->unk1C->unk4[insertionIdx].unk6)
+ if (item->data > structPtr->unk1C->unk4[insertionIdx].data)
right = insertionIdx;
else
left = insertionIdx + 1;
@@ -445,7 +445,7 @@ static u32 sub_81CFEB8(s32 state)
return LT_PAUSE;
ShowBg(2);
HideBg(3);
- sub_81C7BA4(9);
+ PrintHelpBarText(HELPBAR_RIBBONS_MON_LIST);
sub_81C7AC0(1);
if (!unk->unkC)
{
@@ -665,8 +665,8 @@ static void sub_81D02B0(s32 windowId, s32 val1, s32 val2)
static void sub_81D0304(void)
{
- struct MatchCallListTemplate template;
- template.unk0 = sub_81CFB28();
+ struct PokenavListTemplate template;
+ template.list.monList = sub_81CFB28();
template.unk4 = sub_81CFB38();
template.unk8 = 4;
template.unk6 = sub_81CFB64();
@@ -676,7 +676,7 @@ static void sub_81D0304(void)
template.unkC = 8;
template.unkD = 2;
template.unkE = 1;
- template.unk10 = sub_81D035C;
+ template.listFunc.unk10_1 = sub_81D035C;
template.unk14 = NULL;
sub_81C81D4(&gUnknown_086237B0[1], &template, 0);
}
@@ -688,7 +688,7 @@ static void sub_81D035C(struct PokenavMonList * item0, u8 * dest)
u8 * s;
const u8 * genderStr;
struct PokenavMonList * item = item0;
- if (item->boxId == 14)
+ if (item->boxId == TOTAL_BOXES_COUNT)
{
struct Pokemon * mon = &gPlayerParty[item->monId];
gender = GetMonGender(mon);
@@ -722,5 +722,5 @@ static void sub_81D035C(struct PokenavMonList * item0, u8 * dest)
*s++ = 5; // LV
ConvertIntToDecimalStringN(s, level, STR_CONV_MODE_LEFT_ALIGN, 3);
dest = sub_81DB494(dest, 1, gStringVar1, 54);
- ConvertIntToDecimalStringN(dest, item->unk6, STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(dest, item->data, STR_CONV_MODE_RIGHT_ALIGN, 2);
}
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 3cbf6ecd2..4fa5d1b21 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -9,6 +9,7 @@
#include "tv.h"
#include "constants/heal_locations.h"
#include "constants/flags.h"
+#include "constants/tv.h"
int GameClear(void)
{
@@ -76,9 +77,9 @@ int GameClear(void)
}
}
- if (ribbonCounts[0].count > 4)
+ if (ribbonCounts[0].count > NUM_CUTIES_RIBBONS)
{
- sub_80EE4DC(&gPlayerParty[ribbonCounts[0].partyIndex], MON_DATA_CHAMPION_RIBBON);
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[ribbonCounts[0].partyIndex], MON_DATA_CHAMPION_RIBBON);
}
}
@@ -86,7 +87,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..656608740 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,
@@ -659,7 +659,7 @@ void sub_810F6B0(struct Sprite *sprite)
static void sub_810F740(struct Sprite *sprite)
{
- sprite->oam.affineMode = 1;
+ sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
sprite->affineAnims = gUnknown_08596740;
sprite->data[0] = 0;
InitSpriteAffineAnim(sprite);
@@ -674,7 +674,7 @@ static void sub_810F774(struct Sprite *sprite)
if (sprite->affineAnimEnded)
{
FreeOamMatrix(sprite->oam.matrixNum);
- sprite->oam.affineMode = 0;
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
sprite->data[1] = 18;
sprite->data[0]++;
}
diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c
index fc2860797..cef7f4cdd 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"
@@ -101,10 +101,10 @@ static const TaskFunc sTasksForAnimations[] =
static const struct OamData sOamData_862A6BC =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -118,10 +118,10 @@ static const struct OamData sOamData_862A6BC =
static const struct OamData sOamData_862A6C4 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -135,10 +135,10 @@ static const struct OamData sOamData_862A6C4 =
static const struct OamData sOamData_862A6CC =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
@@ -152,10 +152,10 @@ static const struct OamData sOamData_862A6CC =
static const struct OamData sOamData_862A6D4 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.matrixNum = 0,
@@ -169,10 +169,10 @@ static const struct OamData sOamData_862A6D4 =
static const struct OamData sOamData_862A6DC =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x8),
.x = 0,
.matrixNum = 0,
@@ -186,10 +186,10 @@ static const struct OamData sOamData_862A6DC =
static const struct OamData sOamData_862A6E4 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x32),
.x = 0,
.matrixNum = 0,
@@ -203,10 +203,10 @@ static const struct OamData sOamData_862A6E4 =
static const struct OamData sOamData_862A6EC =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
@@ -220,10 +220,10 @@ static const struct OamData sOamData_862A6EC =
static const struct OamData sOamData_862A6F4 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.matrixNum = 0,
@@ -2045,8 +2045,8 @@ static void sub_81D81A4(u8 taskId)
(sUnknown_0862AAB8[data[0]][1] * 4) + 80,
0);
gSprites[spriteId].data[0] = (s8)(data[0]);
- gSprites[spriteId].oam.objMode = 1;
- gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
gSprites[spriteId].oam.priority = 2;
InitSpriteAffineAnim(&gSprites[spriteId]);
if (data[0] == 9)
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 32e0404b9..f290c8554 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"
@@ -69,7 +69,7 @@ struct PlayerRecordsEmerald
/* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord;
/* 0x1210 */ u16 giftItem;
/* 0x1214 */ LilycoveLady lilycoveLady;
- /* 0x1254 */ struct Apprentice apprentice[2];
+ /* 0x1254 */ struct Apprentice apprentices[2];
/* 0x12dc */ struct PlayerHallRecords hallRecords;
/* 0x1434 */ u8 field_1434[0x10];
}; // 0x1444
@@ -120,8 +120,8 @@ static void sub_80E7B2C(const u8 *);
static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *, size_t, u8, TVShow *);
static void ReceiveGiftItem(u16 *item, u8 which);
static void Task_DoRecordMixing(u8 taskId);
-static void sub_80E8110(struct Apprentice *arg0, struct Apprentice *arg1);
-static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2);
+static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src);
+static void ReceiveApprenticeData(struct Apprentice *mixApprentice, size_t recordSize, u32 multiplayerId);
static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2);
static void sub_80E89F8(struct RecordMixingDayCareMail *dst);
static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src);
@@ -252,7 +252,7 @@ static void PrepareExchangePacket(void)
if (GetMultiplayerId() == 0)
sSentRecord->emerald.giftItem = GetRecordMixingGift();
- sub_80E8110(sSentRecord->emerald.apprentice, sApprenticesSave);
+ GetSavedApprentices(sSentRecord->emerald.apprentices, sApprenticesSave);
GetPlayerHallRecords(&sSentRecord->emerald.hallRecords);
}
}
@@ -285,7 +285,7 @@ static void ReceiveExchangePacket(u32 which)
ReceiveBattleTowerData(&sReceivedRecords->emerald.battleTowerRecord, sizeof(struct PlayerRecordsEmerald), which);
ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, which);
ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(struct PlayerRecordsEmerald), which);
- ReceiveApprenticeData(sReceivedRecords->emerald.apprentice, sizeof(struct PlayerRecordsEmerald), (u8) which);
+ ReceiveApprenticeData(sReceivedRecords->emerald.apprentices, sizeof(struct PlayerRecordsEmerald), (u8) which);
ReceiveRankingHallRecords(&sReceivedRecords->emerald.hallRecords, sizeof(struct PlayerRecordsEmerald), (u8) which);
}
}
@@ -369,7 +369,7 @@ static void Task_RecordMixing_Main(u8 taskId)
sub_808729C();
if (gWirelessCommType != 0)
{
- CreateTask(sub_80AF2B4, 10);
+ CreateTask(Task_ReturnToFieldRecordMixing, 10);
}
ClearDialogWindowAndFrame(0, 1);
DestroyTask(taskId);
@@ -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];
@@ -651,7 +651,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u
{
struct EmeraldBattleTowerRecord *dest;
struct BattleTowerPokemon *btPokemon;
- u32 mixIndices[4];
+ u32 mixIndices[MAX_LINK_PLAYERS];
s32 i;
ShufflePlayerIndices(mixIndices);
@@ -682,7 +682,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u
static void ReceiveLilycoveLadyData(LilycoveLady *lilycoveLady, size_t recordSize, u8 which)
{
LilycoveLady *dest;
- u32 mixIndices[4];
+ u32 mixIndices[MAX_LINK_PLAYERS];
ShufflePlayerIndices(mixIndices);
memcpy((void *)lilycoveLady + recordSize * which, sLilycoveLadySave, sizeof(LilycoveLady));
@@ -1018,57 +1018,59 @@ static void Task_DoRecordMixing(u8 taskId)
// New Emerald functions
-static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src)
+static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src)
{
s32 i, id;
- s32 var_2C, var_28, var_24, r8;
+ s32 apprenticeSaveId, oldPlayerApprenticeSaveId;
+ s32 numOldPlayerApprentices, numMixApprentices;
dst[0].playerName[0] = EOS;
dst[1].playerName[0] = EOS;
dst[0] = src[0];
- var_28 = 0;
- var_24 = 0;
- var_2C = 0;
- r8 = 0;
+ oldPlayerApprenticeSaveId = 0;
+ numOldPlayerApprentices = 0;
+ apprenticeSaveId = 0;
+ numMixApprentices = 0;
for (i = 0; i < 2; i++)
{
- id = ((i + gSaveBlock2Ptr->playerApprentice.field_B2_1) % 3) + 1;
+ id = ((i + gSaveBlock2Ptr->playerApprentice.saveId) % (APPRENTICE_COUNT - 1)) + 1;
if (src[id].playerName[0] != EOS)
{
if (GetTrainerId(src[id].playerId) != GetTrainerId(gSaveBlock2Ptr->playerTrainerId))
{
- r8++;
- var_2C = id;
+ numMixApprentices++;
+ apprenticeSaveId = id;
}
if (GetTrainerId(src[id].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId))
{
- var_24++;
- var_28 = id;
+ numOldPlayerApprentices++;
+ oldPlayerApprenticeSaveId = id;
}
}
}
- if (r8 == 0 && var_24 != 0)
+ // Prefer passing on other mixed Apprentices rather than old player's Apprentices
+ if (numMixApprentices == 0 && numOldPlayerApprentices != 0)
{
- r8 = var_24;
- var_2C = var_28;
+ numMixApprentices = numOldPlayerApprentices;
+ apprenticeSaveId = oldPlayerApprenticeSaveId;
}
- switch (r8)
+ switch (numMixApprentices)
{
case 1:
- dst[1] = src[var_2C];
+ dst[1] = src[apprenticeSaveId];
break;
case 2:
if (Random2() > 0x3333)
{
- dst[1] = src[gSaveBlock2Ptr->playerApprentice.field_B2_1 + 1];
+ dst[1] = src[gSaveBlock2Ptr->playerApprentice.saveId + 1];
}
else
{
- dst[1] = src[((gSaveBlock2Ptr->playerApprentice.field_B2_1 + 1) % 3 + 1)];
+ dst[1] = src[((gSaveBlock2Ptr->playerApprentice.saveId + 1) % (APPRENTICE_COUNT - 1) + 1)];
}
break;
}
@@ -1092,9 +1094,9 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst)
{
dst->twoPlayers[j].language = GAME_LANGUAGE;
CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId);
- CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]);
+ CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.opponentTrainerIds[j]);
StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName);
- StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.opponentName[j]);
+ StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.opponentNames[j]);
}
for (i = 0; i < 2; i++)
@@ -1113,14 +1115,14 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst)
}
}
-static bool32 sub_80E841C(struct Apprentice *arg0, struct Apprentice *arg1)
+static bool32 IsApprenticeAlreadySaved(struct Apprentice *mixApprentice, struct Apprentice *apprentices)
{
s32 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < APPRENTICE_COUNT; i++)
{
- if (GetTrainerId(arg0->playerId) == GetTrainerId(arg1[i].playerId)
- && arg0->number == arg1[i].number)
+ if (GetTrainerId(mixApprentice->playerId) == GetTrainerId(apprentices[i].playerId)
+ && mixApprentice->number == apprentices[i].number)
{
return TRUE;
}
@@ -1129,40 +1131,40 @@ static bool32 sub_80E841C(struct Apprentice *arg0, struct Apprentice *arg1)
return FALSE;
}
-static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2)
+static void ReceiveApprenticeData(struct Apprentice *mixApprentice, size_t recordSize, u32 multiplayerId)
{
- s32 i, r7, r8;
- struct Apprentice *structPtr;
- u32 mixIndices[4];
- u32 structId;
+ s32 i, numApprentices, apprenticeId;
+ struct Apprentice *mixApprenticePtr;
+ u32 mixIndices[MAX_LINK_PLAYERS];
+ u32 apprenticeSaveId;
ShufflePlayerIndices(mixIndices);
- structPtr = (void*)(arg0) + (arg1 * mixIndices[arg2]);
- r7 = 0;
- r8 = 0;
+ mixApprenticePtr = (void*)(mixApprentice) + (recordSize * mixIndices[multiplayerId]);
+ numApprentices = 0;
+ apprenticeId = 0;
for (i = 0; i < 2; i++)
{
- if (structPtr[i].playerName[0] != EOS && !sub_80E841C(&structPtr[i], &gSaveBlock2Ptr->apprentices[0]))
+ if (mixApprenticePtr[i].playerName[0] != EOS && !IsApprenticeAlreadySaved(&mixApprenticePtr[i], &gSaveBlock2Ptr->apprentices[0]))
{
- r7++;
- r8 = i;
+ numApprentices++;
+ apprenticeId = i;
}
}
- switch (r7)
+ switch (numApprentices)
{
case 1:
- structId = gSaveBlock2Ptr->playerApprentice.field_B2_1 + 1;
- gSaveBlock2Ptr->apprentices[structId] = structPtr[r8];
- gSaveBlock2Ptr->playerApprentice.field_B2_1 = (gSaveBlock2Ptr->playerApprentice.field_B2_1 + 1) % 3;
+ apprenticeSaveId = gSaveBlock2Ptr->playerApprentice.saveId + 1;
+ gSaveBlock2Ptr->apprentices[apprenticeSaveId] = mixApprenticePtr[apprenticeId];
+ gSaveBlock2Ptr->playerApprentice.saveId = (gSaveBlock2Ptr->playerApprentice.saveId + 1) % (APPRENTICE_COUNT - 1);
break;
case 2:
for (i = 0; i < 2; i++)
{
- structId = ((i ^ 1) + gSaveBlock2Ptr->playerApprentice.field_B2_1) % 3 + 1;
- gSaveBlock2Ptr->apprentices[structId] = structPtr[i];
+ apprenticeSaveId = ((i ^ 1) + gSaveBlock2Ptr->playerApprentice.saveId) % (APPRENTICE_COUNT - 1) + 1;
+ gSaveBlock2Ptr->apprentices[apprenticeSaveId] = mixApprenticePtr[i];
}
- gSaveBlock2Ptr->playerApprentice.field_B2_1 = (gSaveBlock2Ptr->playerApprentice.field_B2_1 + 2) % 3;
+ gSaveBlock2Ptr->playerApprentice.saveId = (gSaveBlock2Ptr->playerApprentice.saveId + 2) % (APPRENTICE_COUNT - 1);
break;
}
}
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index 9e03d57f6..5a0579f70 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"
@@ -37,8 +37,8 @@ struct PlayerInfo
struct MovePp
{
- u16 moves[4];
- u8 pp[4];
+ u16 moves[MAX_MON_MOVES];
+ u8 pp[MAX_MON_MOVES];
};
struct RecordedBattleSave
@@ -91,7 +91,7 @@ EWRAM_DATA static u32 sBattleFlags = 0;
EWRAM_DATA static u32 sAI_Scripts = 0;
EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0};
-EWRAM_DATA static u16 sPlayerMonMoves[2][4] = {0};
+EWRAM_DATA static u16 sPlayerMonMoves[2][MAX_MON_MOVES] = {0};
EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA static u8 sUnknown_0203CCD0 = 0;
EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0};
@@ -323,7 +323,7 @@ static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct
saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4);
- if (TryWriteSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSection)) != 1)
+ if (TryWriteSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSection)) != SAVE_STATUS_OK)
return FALSE;
else
return TRUE;
@@ -334,9 +334,9 @@ bool32 MoveRecordedBattleToSaveData(void)
s32 i, j;
bool32 ret;
struct RecordedBattleSave *battleSave, *savSection;
- u8 var;
+ u8 saveAttempts;
- var = 0;
+ saveAttempts = 0;
battleSave = AllocZeroed(sizeof(struct RecordedBattleSave));
savSection = AllocZeroed(0x1000);
@@ -409,12 +409,12 @@ bool32 MoveRecordedBattleToSaveData(void)
if (sBattleOutcome == B_OUTCOME_WON)
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].speechLost[i];
}
else
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].speechWon[i];
}
battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].language;
@@ -427,12 +427,12 @@ bool32 MoveRecordedBattleToSaveData(void)
if (sBattleOutcome == B_OUTCOME_WON)
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].speechLost[i];
}
else
{
- for (i = 0; i < 6; i++)
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].speechWon[i];
}
battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].language;
@@ -449,15 +449,15 @@ bool32 MoveRecordedBattleToSaveData(void)
if (gTrainerBattleOpponent_A >= TRAINER_RECORD_MIXING_APPRENTICE)
{
battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].id;
- for (i = 0; i < 6; i++)
- battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords[i];
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
+ battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].speechWon[i];
battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].language;
}
else if (gTrainerBattleOpponent_B >= TRAINER_RECORD_MIXING_APPRENTICE)
{
battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].id;
- for (i = 0; i < 6; i++)
- battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords[i];
+ for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
+ battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].speechWon[i];
battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].language;
}
else if (gPartnerTrainerId >= TRAINER_RECORD_MIXING_APPRENTICE)
@@ -480,8 +480,8 @@ bool32 MoveRecordedBattleToSaveData(void)
ret = RecordedBattleToSave(battleSave, savSection);
if (ret == TRUE)
break;
- var++;
- if (var >= 3)
+ saveAttempts++;
+ if (saveAttempts >= 3)
break;
}
@@ -492,7 +492,7 @@ bool32 MoveRecordedBattleToSaveData(void)
static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSection *saveBuffer)
{
- if (TryReadSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != 1)
+ if (TryReadSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != SAVE_STATUS_OK)
return FALSE;
memcpy(dst, saveBuffer, sizeof(struct RecordedBattleSave));
@@ -766,11 +766,11 @@ void sub_818603C(u8 arg0)
{
if (sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == ACTION_MOVE_CHANGE)
{
- u8 ppBonuses[4];
- u8 array1[4];
- u8 array2[4];
+ u8 ppBonuses[MAX_MON_MOVES];
+ u8 array1[MAX_MON_MOVES];
+ u8 array2[MAX_MON_MOVES];
struct MovePp movePp;
- u8 array3[8];
+ u8 array3[(MAX_MON_MOVES * 2)];
u8 var;
RecordedBattle_GetBattlerAction(battlerId);
diff --git a/src/region_map.c b/src/region_map.c
index a98964e5c..5694d4c7a 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"
@@ -24,6 +24,7 @@
#include "region_map.h"
#include "constants/region_map_sections.h"
#include "heal_location.h"
+#include "constants/field_specials.h"
#include "constants/heal_locations.h"
#include "constants/map_types.h"
#include "constants/rgb.h"
@@ -54,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;
@@ -996,7 +997,7 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
break;
case MAP_TYPE_UNDERGROUND:
case MAP_TYPE_UNUSED_2:
- if (gMapHeader.flags & 0x02)
+ if (gMapHeader.flags & MAP_ALLOW_ESCAPE_ROPE)
{
mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
@@ -1144,20 +1145,20 @@ static void RegionMap_InitializeStateBasedOnSSTidalLocation(void)
x = 0;
switch (GetSSTidalLocation(&mapGroup, &mapNum, &xOnMap, &yOnMap))
{
- case 1:
+ case SS_TIDAL_LOCATION_SLATEPORT:
gRegionMap->mapSecId = MAPSEC_SLATEPORT_CITY;
break;
- case 2:
+ case SS_TIDAL_LOCATION_LILYCOVE:
gRegionMap->mapSecId = MAPSEC_LILYCOVE_CITY;
break;
- case 3:
+ case SS_TIDAL_LOCATION_ROUTE124:
gRegionMap->mapSecId = MAPSEC_ROUTE_124;
break;
- case 4:
+ case SS_TIDAL_LOCATION_ROUTE131:
gRegionMap->mapSecId = MAPSEC_ROUTE_131;
break;
default:
- case 0:
+ case SS_TIDAL_LOCATION_CURRENTS:
mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
@@ -1258,7 +1259,7 @@ static u16 RegionMap_GetTerraCaveMapSecId(void)
{
s16 idx;
- idx = VarGet(VAR_UNUSUAL_WEATHER_LOCATION) - 1;
+ idx = VarGet(VAR_ABNORMAL_WEATHER_LOCATION) - 1;
if (idx < 0 || idx > 15)
{
idx = 0;
@@ -1270,7 +1271,7 @@ static void RegionMap_GetMarineCaveCoords(u16 *x, u16 *y)
{
u16 idx;
- idx = VarGet(VAR_UNUSUAL_WEATHER_LOCATION);
+ idx = VarGet(VAR_ABNORMAL_WEATHER_LOCATION);
if (idx < 9 || idx > 16)
{
idx = 9;
@@ -1415,14 +1416,14 @@ void CreateRegionMapCursor(u16 tileTag, u16 paletteTag)
gRegionMap->cursorSprite = &gSprites[spriteId];
if (gRegionMap->zoomed == TRUE)
{
- gRegionMap->cursorSprite->oam.size = 2;
+ gRegionMap->cursorSprite->oam.size = SPRITE_SIZE(32x32);
gRegionMap->cursorSprite->pos1.x -= 8;
gRegionMap->cursorSprite->pos1.y -= 8;
StartSpriteAnim(gRegionMap->cursorSprite, 1);
}
else
{
- gRegionMap->cursorSprite->oam.size = 1;
+ gRegionMap->cursorSprite->oam.size = SPRITE_SIZE(16x16);
gRegionMap->cursorSprite->pos1.x = 8 * gRegionMap->cursorPosX + 4;
gRegionMap->cursorSprite->pos1.y = 8 * gRegionMap->cursorPosY + 4;
}
@@ -1604,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)
{
@@ -1625,7 +1627,7 @@ u8 *sub_8124610(u8 *dest, u16 mapSecId)
}
else
{
- return sub_81245DC(dest, mapSecId);
+ return GetMapNameGeneric(dest, mapSecId);
}
}
@@ -1861,15 +1863,15 @@ static void sub_8124AD4(void)
y = (y + MAPCURSOR_Y_MIN) * 8 + 4;
if (width == 2)
{
- shape = ST_OAM_H_RECTANGLE;
+ shape = SPRITE_SHAPE(16x8);
}
else if (height == 2)
{
- shape = ST_OAM_V_RECTANGLE;
+ shape = SPRITE_SHAPE(8x16);
}
else
{
- shape = ST_OAM_SQUARE;
+ shape = SPRITE_SHAPE(8x8);
}
spriteId = CreateSprite(&gUnknown_085A1F7C, x, y, 10);
if (spriteId != MAX_SPRITES)
@@ -1911,7 +1913,7 @@ static void sub_8124BE4(void)
spriteId = CreateSprite(&gUnknown_085A1F7C, x, y, 10);
if (spriteId != MAX_SPRITES)
{
- gSprites[spriteId].oam.size = 1;
+ gSprites[spriteId].oam.size = SPRITE_SIZE(16x16);
gSprites[spriteId].callback = sub_8124CBC;
StartSpriteAnim(&gSprites[spriteId], 6);
gSprites[spriteId].data[0] = mapSecId;
@@ -1971,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;
}
@@ -1996,7 +1998,7 @@ static void sub_8124E0C(void)
if (!UpdatePaletteFade())
{
FreeRegionMapIconResources();
- if (sFlyMap->unk_a72)
+ if (sFlyMap->choseFlyLocation)
{
switch (sFlyMap->regionMap.mapSecId)
{
@@ -2023,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..efad640e3 100644
--- a/src/reset_rtc_screen.c
+++ b/src/reset_rtc_screen.c
@@ -105,10 +105,10 @@ static const struct ResetRtcStruct sUnknown_08510428[5] =
static const struct OamData sOamData_08510464 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(8x8),
.x = 0,
.matrixNum = 0,
@@ -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);
@@ -559,7 +559,7 @@ static void Task_ResetRtcScreen(u8 taskId)
case 1:
if (!gPaletteFade.active)
{
- if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
+ if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT)
{
ShowMessage(gText_NoSaveFileCantSetTime);
data[0] = 5;
@@ -608,7 +608,7 @@ static void Task_ResetRtcScreen(u8 taskId)
}
break;
case 4:
- if (TrySavingData(0) == 1)
+ if (TrySavingData(SAVE_NORMAL) == SAVE_STATUS_OK)
{
ShowMessage(gText_SaveCompleted);
PlaySE(SE_PINPON);
diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c
index beba742f5..577a48b0d 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)
{
@@ -21,8 +21,8 @@ void sub_81700F8(void)
SetSaveBlocksPointers(sub_815355C());
ResetMenuAndMonGlobals();
Save_ResetSaveCounters();
- Save_LoadGameData(0);
- if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
+ Save_LoadGameData(SAVE_NORMAL);
+ if (gSaveFileStatus == SAVE_STATUS_EMPTY || gSaveFileStatus == SAVE_STATUS_CORRUPT)
Sav2_ClearSetDefault();
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
InitHeap(gHeap, HEAP_SIZE);
diff --git a/src/rock.c b/src/rock.c
index 6f6e20955..28566f1b7 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,
@@ -136,8 +136,8 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596BA0 =
const struct Subsprite gUnknown_08596BB8[] =
{
- {.x = -16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 0, .priority = 1},
- {.x = 16, .y = 0, .shape = ST_OAM_H_RECTANGLE, .size = 2, .tileOffset = 8, .priority = 1},
+ {.x = -16, .y = 0, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .tileOffset = 0, .priority = 1},
+ {.x = 16, .y = 0, .shape = SPRITE_SHAPE(32x16), .size = SPRITE_SIZE(32x16), .tileOffset = 8, .priority = 1},
};
const struct SubspriteTable gUnknown_08596BC0[] =
@@ -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..029696526 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"
@@ -189,7 +189,7 @@ static void sub_8034EFC(struct UnkStruct2 *arg0)
oamId--;
gMain.oamBuffer[oamId].x = arg0->x - arg0->xDelta;
- gMain.oamBuffer[oamId].affineMode = 2;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
gMain.oamBuffer[oamId].tileNum = arg0->tileStart + (arg0->field_9 * 10);
}
@@ -244,9 +244,9 @@ static void sub_80350B0(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
}
if (arg2)
- gMain.oamBuffer[oamId].affineMode = 0;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
else
- gMain.oamBuffer[oamId].affineMode = 2;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
}
static void sub_8035164(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
@@ -265,14 +265,14 @@ static void sub_8035164(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
if (r4 != 0 || gUnknown_03000DDC != -1 || r5 == 0)
{
gMain.oamBuffer[gUnknown_03000DD4].tileNum = (r4 * arg0->field_9) + arg0->tileStart;
- gMain.oamBuffer[gUnknown_03000DD4].affineMode = 0;
+ gMain.oamBuffer[gUnknown_03000DD4].affineMode = ST_OAM_AFFINE_OFF;
if (gUnknown_03000DDC == -1)
gUnknown_03000DDC = gUnknown_03000DD8;
}
else
{
- gMain.oamBuffer[gUnknown_03000DD4].affineMode = 2;
+ gMain.oamBuffer[gUnknown_03000DD4].affineMode = ST_OAM_AFFINE_ERASE;
}
gUnknown_03000DD4++;
@@ -281,12 +281,12 @@ static void sub_8035164(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
if (arg2)
{
- gMain.oamBuffer[gUnknown_03000DD4].affineMode = 0;
+ gMain.oamBuffer[gUnknown_03000DD4].affineMode = ST_OAM_AFFINE_OFF;
gMain.oamBuffer[gUnknown_03000DD4].x = arg0->x + ((gUnknown_03000DDC - 1) * arg0->xDelta);
}
else
{
- gMain.oamBuffer[gUnknown_03000DD4].affineMode = 2;
+ gMain.oamBuffer[gUnknown_03000DD4].affineMode = ST_OAM_AFFINE_ERASE;
}
}
@@ -307,7 +307,7 @@ static void sub_80352C0(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
{
var_28 = 1;
gMain.oamBuffer[oamId].tileNum = (r4 * arg0->field_9) + arg0->tileStart;
- gMain.oamBuffer[oamId].affineMode = 0;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
oamId++;
r9++;
@@ -316,15 +316,15 @@ static void sub_80352C0(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2)
while (r9 < arg0->oamCount)
{
- gMain.oamBuffer[oamId].affineMode = 2;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
oamId++;
r9++;
}
if (arg2)
- gMain.oamBuffer[oamId].affineMode = 0;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
else
- gMain.oamBuffer[oamId].affineMode = 2;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
}
void sub_80353DC(u32 id)
@@ -340,7 +340,7 @@ void sub_80353DC(u32 id)
oamId = gUnknown_02022E10->array[id].firstOamId;
for (i = 0; i < oamCount; i++, oamId++)
- gMain.oamBuffer[oamId].affineMode = 2;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
if (!SharesTileWithAnyActive(id))
FreeSpriteTilesByTag(gUnknown_02022E10->array[id].tileTag);
@@ -364,12 +364,12 @@ void sub_803547C(u32 id, bool32 arg1)
if (arg1)
{
for (i = 0; i < oamCount; i++, oamId++)
- gMain.oamBuffer[oamId].affineMode = 2;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
}
else
{
for (i = 0; i < oamCount; i++, oamId++)
- gMain.oamBuffer[oamId].affineMode = 0;
+ gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
sub_8035044(id, gUnknown_02022E10->array[id].field_18);
}
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_gate.c b/src/rotating_gate.c
index 44d291dc4..340fc58dd 100644
--- a/src/rotating_gate.c
+++ b/src/rotating_gate.c
@@ -233,7 +233,7 @@ static const struct OamData sOamData_RotatingGateLarge =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
- .objMode = 0,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
@@ -250,7 +250,7 @@ static const struct OamData sOamData_RotatingGateRegular =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
- .objMode = 0,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
.bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
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..e38da31d0 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);
}
@@ -1727,7 +1727,7 @@ static void sub_8141E7C(u8 taskId) // end roulette ?
ResetPaletteFade();
ResetSpriteData();
sub_8140418();
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
SetMainCallback2(CB2_ReturnToField);
DestroyTask(taskId);
}
@@ -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);
@@ -4043,7 +4043,7 @@ static void sub_81446DC(struct Sprite *sprite)
gUnknown_0203AB88->var3C[55] = CreateSprite(&gSpriteTemplate_85B79F8, 36, -12, 50);
gUnknown_0203AB88->var3C[56] = CreateSprite(&gSpriteTemplate_85B7ABC[0], s[sprite->data[0]][0], s[sprite->data[0]][1], 59);
gUnknown_0203AB88->var3C[57] = CreateSprite(&gSpriteTemplate_85B7ABC[1], 36, 140, 51);
- gSprites[gUnknown_0203AB88->var3C[57]].oam.objMode = 1;
+ gSprites[gUnknown_0203AB88->var3C[57]].oam.objMode = ST_OAM_OBJ_BLEND;
for (i = 0; i < 3; i++)
{
gSprites[gUnknown_0203AB88->var3C[i + 55]].coordOffsetEnabled = FALSE;
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/save.c b/src/save.c
index cdfd2ae1d..c19aff4d8 100644
--- a/src/save.c
+++ b/src/save.c
@@ -14,7 +14,7 @@
#include "constants/game_stat.h"
static u16 CalculateChecksum(void *data, u16 size);
-static u8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section);
+static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section);
static u8 GetSaveValidStatus(const struct SaveSectionLocation *location);
static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location);
static u8 ClearSaveData_2(u16 a1, const struct SaveSectionLocation *location);
@@ -53,7 +53,7 @@ static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location);
min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \
} \
-const struct SaveSectionOffsets gSaveSectionOffsets[] =
+static const struct SaveSectionOffsets sSaveSectionOffsets[] =
{
SAVEBLOCK_CHUNK(gSaveblock2, 0),
@@ -84,9 +84,9 @@ u16 gUnknown_03006208;
u16 gSaveUnusedVar;
u16 gSaveFileStatus;
void (*gGameContinueCallback)(void);
-struct SaveSectionLocation gRamSaveSectionLocations[0xE];
+struct SaveSectionLocation gRamSaveSectionLocations[SECTOR_SAVE_SLOT_LENGTH];
u16 gSaveUnusedVar2;
-u16 gUnknown_03006294;
+u16 gSaveAttemptStatus;
EWRAM_DATA struct SaveSection gSaveDataBuffer = {0};
EWRAM_DATA static u8 sUnusedVar = 0;
@@ -130,16 +130,16 @@ static bool32 SetDamagedSectorBits(u8 op, u8 bit)
return retVal;
}
-static u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location)
+static u8 SaveWriteToFlash(u16 a1, const struct SaveSectionLocation *location)
{
- u32 retVal;
+ u32 status;
u16 i;
gFastSaveSection = &gSaveDataBuffer;
if (a1 != 0xFFFF) // for link
{
- retVal = HandleWriteSector(a1, location);
+ status = HandleWriteSector(a1, location);
}
else
{
@@ -148,41 +148,41 @@ static u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location
gLastWrittenSector++;
gLastWrittenSector = gLastWrittenSector % SECTOR_SAVE_SLOT_LENGTH; // array count save sector locations
gSaveCounter++;
- retVal = 1;
+ status = SAVE_STATUS_OK;
for (i = 0; i < SECTOR_SAVE_SLOT_LENGTH; i++)
HandleWriteSector(i, location);
if (gDamagedSaveSectors != 0) // skip the damaged sector.
{
- retVal = 0xFF;
+ status = SAVE_STATUS_ERROR;
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
}
}
- return retVal;
+ return status;
}
-static u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location)
+static u8 HandleWriteSector(u16 sectorId, const struct SaveSectionLocation *location)
{
u16 i;
u16 sector;
u8 *data;
u16 size;
- sector = a1 + gLastWrittenSector;
+ sector = sectorId + gLastWrittenSector;
sector %= SECTOR_SAVE_SLOT_LENGTH;
sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2);
- data = location[a1].data;
- size = location[a1].size;
+ data = location[sectorId].data;
+ size = location[sectorId].size;
// clear save section.
for (i = 0; i < sizeof(struct SaveSection); i++)
((char *)gFastSaveSection)[i] = 0;
- gFastSaveSection->id = a1;
+ gFastSaveSection->id = sectorId;
gFastSaveSection->security = UNKNOWN_CHECK_VALUE;
gFastSaveSection->counter = gSaveCounter;
@@ -215,12 +215,12 @@ static u8 TryWriteSector(u8 sector, u8 *data)
if (ProgramFlashSectorAndVerify(sector, data) != 0) // is damaged?
{
SetDamagedSectorBits(ENABLE, sector); // set damaged sector bits.
- return 0xFF;
+ return SAVE_STATUS_ERROR;
}
else
{
SetDamagedSectorBits(DISABLE, sector); // unset damaged sector bits. it's safe now.
- return 1;
+ return SAVE_STATUS_OK;
}
}
@@ -247,46 +247,46 @@ static u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) //
return 0;
}
-static u8 sub_81529D4(u16 a1, const struct SaveSectionLocation *location)
+static u8 sub_81529D4(u16 sectorId, const struct SaveSectionLocation *location)
{
- u8 retVal;
+ u8 status;
- if (gUnknown_03006208 < a1 - 1)
+ if (gUnknown_03006208 < sectorId - 1)
{
- retVal = 1;
+ status = SAVE_STATUS_OK;
HandleWriteSector(gUnknown_03006208, location);
gUnknown_03006208++;
if (gDamagedSaveSectors)
{
- retVal = 0xFF;
+ status = SAVE_STATUS_ERROR;
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
}
}
else
{
- retVal = 0xFF;
+ status = SAVE_STATUS_ERROR;
}
- return retVal;
+ return status;
}
-static u8 sub_8152A34(u16 a1, const struct SaveSectionLocation *location)
+static u8 sub_8152A34(u16 sectorId, const struct SaveSectionLocation *location)
{
- u8 retVal = 1;
+ u8 status = SAVE_STATUS_OK;
- ClearSaveData_2(a1 - 1, location);
+ ClearSaveData_2(sectorId - 1, location);
if (gDamagedSaveSectors)
{
- retVal = 0xFF;
+ status = SAVE_STATUS_ERROR;
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
}
- return retVal;
+ return status;
}
-static u8 ClearSaveData_2(u16 a1, const struct SaveSectionLocation *location)
+static u8 ClearSaveData_2(u16 sectorId, const struct SaveSectionLocation *location)
{
u16 i;
u16 sector;
@@ -294,18 +294,18 @@ static u8 ClearSaveData_2(u16 a1, const struct SaveSectionLocation *location)
u16 size;
u8 status;
- sector = a1 + gLastWrittenSector;
+ sector = sectorId + gLastWrittenSector;
sector %= SECTOR_SAVE_SLOT_LENGTH;
sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2);
- data = location[a1].data;
- size = location[a1].size;
+ data = location[sectorId].data;
+ size = location[sectorId].size;
// clear temp save section.
for (i = 0; i < sizeof(struct SaveSection); i++)
((char *)gFastSaveSection)[i] = 0;
- gFastSaveSection->id = a1;
+ gFastSaveSection->id = sectorId;
gFastSaveSection->security = UNKNOWN_CHECK_VALUE;
gFastSaveSection->counter = gSaveCounter;
@@ -318,53 +318,53 @@ static u8 ClearSaveData_2(u16 a1, const struct SaveSectionLocation *location)
EraseFlashSector(sector);
- status = 1;
+ status = SAVE_STATUS_OK;
for (i = 0; i < sizeof(struct UnkSaveSection); i++)
{
if (ProgramFlashByte(sector, i, ((u8 *)gFastSaveSection)[i]))
{
- status = 0xFF;
+ status = SAVE_STATUS_ERROR;
break;
}
}
- if (status == 0xFF)
+ if (status == SAVE_STATUS_ERROR)
{
SetDamagedSectorBits(ENABLE, sector);
- return 0xFF;
+ return SAVE_STATUS_ERROR;
}
else
{
- status = 1;
+ status = SAVE_STATUS_OK;
for (i = 0; i < 7; i++)
{
if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i]))
{
- status = 0xFF;
+ status = SAVE_STATUS_ERROR;
break;
}
}
- if (status == 0xFF)
+ if (status == SAVE_STATUS_ERROR)
{
SetDamagedSectorBits(ENABLE, sector);
- return 0xFF;
+ return SAVE_STATUS_ERROR;
}
else
{
SetDamagedSectorBits(DISABLE, sector);
- return 1;
+ return SAVE_STATUS_OK;
}
}
}
-static u8 sav12_xor_get(u16 a1, const struct SaveSectionLocation *location)
+static u8 sav12_xor_get(u16 sectorId, const struct SaveSectionLocation *location)
{
u16 sector;
- sector = a1 + gLastWrittenSector; // no sub 1?
+ sector = sectorId + gLastWrittenSector; // no sub 1?
sector %= SECTOR_SAVE_SLOT_LENGTH;
sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2);
@@ -374,20 +374,20 @@ static u8 sav12_xor_get(u16 a1, const struct SaveSectionLocation *location)
SetDamagedSectorBits(ENABLE, sector);
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
- return 0xFF;
+ return SAVE_STATUS_ERROR;
}
else
{
SetDamagedSectorBits(DISABLE, sector);
- return 1;
+ return SAVE_STATUS_OK;
}
}
-static u8 sub_8152CAC(u16 a1, const struct SaveSectionLocation *location)
+static u8 sub_8152CAC(u16 sectorId, const struct SaveSectionLocation *location)
{
u16 sector;
- sector = a1 + gLastWrittenSector - 1;
+ sector = sectorId + gLastWrittenSector - 1;
sector %= SECTOR_SAVE_SLOT_LENGTH;
sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2);
@@ -397,20 +397,20 @@ static u8 sub_8152CAC(u16 a1, const struct SaveSectionLocation *location)
SetDamagedSectorBits(ENABLE, sector);
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
- return 0xFF;
+ return SAVE_STATUS_ERROR;
}
else
{
SetDamagedSectorBits(DISABLE, sector);
- return 1;
+ return SAVE_STATUS_OK;
}
}
-static u8 sub_8152D44(u16 a1, const struct SaveSectionLocation *location)
+static u8 sub_8152D44(u16 sectorId, const struct SaveSectionLocation *location)
{
u16 sector;
- sector = a1 + gLastWrittenSector - 1; // no sub 1?
+ sector = sectorId + gLastWrittenSector - 1; // no sub 1?
sector %= SECTOR_SAVE_SLOT_LENGTH;
sector += SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2);
@@ -420,30 +420,30 @@ static u8 sub_8152D44(u16 a1, const struct SaveSectionLocation *location)
SetDamagedSectorBits(ENABLE, sector);
gLastWrittenSector = gLastKnownGoodSector;
gSaveCounter = gLastSaveCounter;
- return 0xFF;
+ return SAVE_STATUS_ERROR;
}
else
{
SetDamagedSectorBits(DISABLE, sector);
- return 1;
+ return SAVE_STATUS_OK;
}
}
static u8 sub_8152DD0(u16 a1, const struct SaveSectionLocation *location)
{
- u8 retVal;
+ u8 status;
gFastSaveSection = &gSaveDataBuffer;
if (a1 != 0xFFFF)
{
- retVal = 0xFF;
+ status = SAVE_STATUS_ERROR;
}
else
{
- retVal = GetSaveValidStatus(location);
+ status = GetSaveValidStatus(location);
sub_8152E10(0xFFFF, location);
}
- return retVal;
+ return status;
}
static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location)
@@ -469,7 +469,7 @@ static u8 sub_8152E10(u16 a1, const struct SaveSectionLocation *location)
}
}
- return 1;
+ return SAVE_STATUS_OK;
}
static u8 GetSaveValidStatus(const struct SaveSectionLocation *location)
@@ -502,13 +502,13 @@ static u8 GetSaveValidStatus(const struct SaveSectionLocation *location)
if (securityPassed)
{
if (slotCheckField == 0x3FFF)
- saveSlot1Status = 1;
+ saveSlot1Status = SAVE_STATUS_OK;
else
- saveSlot1Status = 255;
+ saveSlot1Status = SAVE_STATUS_ERROR;
}
else
{
- saveSlot1Status = 0;
+ saveSlot1Status = SAVE_STATUS_EMPTY;
}
slotCheckField = 0;
@@ -533,16 +533,16 @@ static u8 GetSaveValidStatus(const struct SaveSectionLocation *location)
if (securityPassed)
{
if (slotCheckField == 0x3FFF)
- saveSlot2Status = 1;
+ saveSlot2Status = SAVE_STATUS_OK;
else
- saveSlot2Status = 255;
+ saveSlot2Status = SAVE_STATUS_ERROR;
}
else
{
- saveSlot2Status = 0;
+ saveSlot2Status = SAVE_STATUS_EMPTY;
}
- if (saveSlot1Status == 1 && saveSlot2Status == 1)
+ if (saveSlot1Status == SAVE_STATUS_OK && saveSlot2Status == SAVE_STATUS_OK)
{
if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) || (saveSlot1Counter == 0 && saveSlot2Counter == -1))
{
@@ -558,42 +558,42 @@ static u8 GetSaveValidStatus(const struct SaveSectionLocation *location)
else
gSaveCounter = saveSlot1Counter;
}
- return 1;
+ return SAVE_STATUS_OK;
}
- if (saveSlot1Status == 1)
+ if (saveSlot1Status == SAVE_STATUS_OK)
{
gSaveCounter = saveSlot1Counter;
- if (saveSlot2Status == 255)
- return 255;
- return 1;
+ if (saveSlot2Status == SAVE_STATUS_ERROR)
+ return SAVE_STATUS_ERROR;
+ return SAVE_STATUS_OK;
}
- if (saveSlot2Status == 1)
+ if (saveSlot2Status == SAVE_STATUS_OK)
{
gSaveCounter = saveSlot2Counter;
- if (saveSlot1Status == 255)
- return 255;
- return 1;
+ if (saveSlot1Status == SAVE_STATUS_ERROR)
+ return SAVE_STATUS_ERROR;
+ return SAVE_STATUS_OK;
}
- if (saveSlot1Status == 0 && saveSlot2Status == 0)
+ if (saveSlot1Status == SAVE_STATUS_EMPTY && saveSlot2Status == SAVE_STATUS_EMPTY)
{
gSaveCounter = 0;
gLastWrittenSector = 0;
- return 0;
+ return SAVE_STATUS_EMPTY;
}
gSaveCounter = 0;
gLastWrittenSector = 0;
- return 2;
+ return SAVE_STATUS_CORRUPT;
}
-static u8 sub_81530DC(u8 a1, u8 *data, u16 size)
+static u8 sub_81530DC(u8 sectorId, u8 *data, u16 size)
{
u16 i;
struct SaveSection *section = &gSaveDataBuffer;
- DoReadFlashWholeSection(a1, section);
+ DoReadFlashWholeSection(sectorId, section);
if (section->security == UNKNOWN_CHECK_VALUE)
{
u16 checksum = CalculateChecksum(section->data, size);
@@ -601,23 +601,24 @@ static u8 sub_81530DC(u8 a1, u8 *data, u16 size)
{
for (i = 0; i < size; i++)
data[i] = section->data[i];
- return 1;
+ return SAVE_STATUS_OK;
}
else
{
- return 2;
+ return SAVE_STATUS_CORRUPT;
}
}
else
{
- return 0;
+ return SAVE_STATUS_EMPTY;
}
}
-static u8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section)
+// Return value always ignored
+static bool8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section)
{
ReadFlash(sector, 0, section->data, sizeof(struct SaveSection));
- return 1;
+ return TRUE;
}
static u16 CalculateChecksum(void *data, u16 size)
@@ -638,19 +639,19 @@ static void UpdateSaveAddresses(void)
{
int i = 0;
- gRamSaveSectionLocations[i].data = (void*)(gSaveBlock2Ptr) + gSaveSectionOffsets[i].toAdd;
- gRamSaveSectionLocations[i].size = gSaveSectionOffsets[i].size;
+ gRamSaveSectionLocations[i].data = (void*)(gSaveBlock2Ptr) + sSaveSectionOffsets[i].toAdd;
+ gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size;
- for (i = 1; i < 5; i++)
+ for (i = SECTOR_ID_SAVEBLOCK1_START; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
{
- gRamSaveSectionLocations[i].data = (void*)(gSaveBlock1Ptr) + gSaveSectionOffsets[i].toAdd;
- gRamSaveSectionLocations[i].size = gSaveSectionOffsets[i].size;
+ gRamSaveSectionLocations[i].data = (void*)(gSaveBlock1Ptr) + sSaveSectionOffsets[i].toAdd;
+ gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size;
}
- for (i = 5; i < 14; i++)
+ for (i = SECTOR_ID_PKMN_STORAGE_START; i <= SECTOR_ID_PKMN_STORAGE_END; i++)
{
- gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + gSaveSectionOffsets[i].toAdd;
- gRamSaveSectionLocations[i].size = gSaveSectionOffsets[i].size;
+ gRamSaveSectionLocations[i].data = (void*)(gPokemonStoragePtr) + sSaveSectionOffsets[i].toAdd;
+ gRamSaveSectionLocations[i].size = sSaveSectionOffsets[i].size;
i++;i--; // needed to match
}
@@ -673,36 +674,36 @@ u8 HandleSavingData(u8 saveType)
if (GetGameStat(GAME_STAT_ENTERED_HOF) < 999)
IncrementGameStat(GAME_STAT_ENTERED_HOF);
SaveSerializedGame();
- save_write_to_flash(0xFFFF, gRamSaveSectionLocations);
+ SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations);
tempAddr = gDecompressionBuffer;
- HandleWriteSectorNBytes(SECTOR_ID_HOF_1, tempAddr, 0xF80);
- HandleWriteSectorNBytes(SECTOR_ID_HOF_2, tempAddr + 0xF80, 0xF80);
+ HandleWriteSectorNBytes(SECTOR_ID_HOF_1, tempAddr, SECTOR_DATA_SIZE);
+ HandleWriteSectorNBytes(SECTOR_ID_HOF_2, tempAddr + SECTOR_DATA_SIZE, SECTOR_DATA_SIZE);
break;
case SAVE_NORMAL: // normal save. also called by overwriting your own save.
default:
SaveSerializedGame();
- save_write_to_flash(0xFFFF, gRamSaveSectionLocations);
+ SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations);
break;
- case SAVE_LINK: // _081532C4
- case SAVE_LINK2:
+ case SAVE_LINK: // Link and Battle Frontier
+ case SAVE_LINK2: // Unused
SaveSerializedGame();
- for(i = 0; i < 5; i++)
+ for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
ClearSaveData_2(i, gRamSaveSectionLocations);
- for(i = 0; i < 5; i++)
+ for(i = SECTOR_ID_SAVEBLOCK2; i <= SECTOR_ID_SAVEBLOCK1_END; i++)
sav12_xor_get(i, gRamSaveSectionLocations);
break;
// Support for Ereader was removed in Emerald.
/*
case EREADER_SAVE: // used in mossdeep "game corner" before/after battling old man e-reader trainer
SaveSerializedGame();
- save_write_to_flash(0, gRamSaveSectionLocations);
+ SaveWriteToFlash(0, gRamSaveSectionLocations);
break;
*/
case SAVE_OVERWRITE_DIFFERENT_FILE:
for (i = SECTOR_ID_HOF_1; i < SECTORS_COUNT; i++)
EraseFlashSector(i); // erase HOF.
SaveSerializedGame();
- save_write_to_flash(0xFFFF, gRamSaveSectionLocations);
+ SaveWriteToFlash(0xFFFF, gRamSaveSectionLocations);
break;
}
gTrainerHillVBlankCounter = backupVar;
@@ -713,25 +714,25 @@ u8 TrySavingData(u8 saveType)
{
if (gFlashMemoryPresent != TRUE)
{
- gUnknown_03006294 = 0xFF;
- return 0xFF;
+ gSaveAttemptStatus = SAVE_STATUS_ERROR;
+ return SAVE_STATUS_ERROR;
}
HandleSavingData(saveType);
if (!gDamagedSaveSectors)
{
- gUnknown_03006294 = 1;
- return 1;
+ gSaveAttemptStatus = SAVE_STATUS_OK;
+ return SAVE_STATUS_OK;
}
else
{
DoSaveFailedScreen(saveType);
- gUnknown_03006294 = 0xFF;
- return 0xFF;
+ gSaveAttemptStatus = SAVE_STATUS_ERROR;
+ return SAVE_STATUS_ERROR;
}
}
-bool8 sub_8153380(void) // trade.s save
+bool8 sub_8153380(void) // trade.c
{
if (gFlashMemoryPresent != TRUE)
return TRUE;
@@ -741,92 +742,92 @@ bool8 sub_8153380(void) // trade.s save
return FALSE;
}
-bool8 sub_81533AC(void) // trade.s save
+bool8 sub_81533AC(void) // trade.c
{
- u8 retVal = sub_81529D4(SECTOR_SAVE_SLOT_LENGTH, gRamSaveSectionLocations);
+ u8 status = sub_81529D4(SECTOR_SAVE_SLOT_LENGTH, gRamSaveSectionLocations);
if (gDamagedSaveSectors)
- DoSaveFailedScreen(0);
- if (retVal == 0xFF)
+ DoSaveFailedScreen(SAVE_NORMAL);
+ if (status == SAVE_STATUS_ERROR)
return TRUE;
else
return FALSE;
}
-u8 sub_81533E0(void) // trade.s save
+bool8 sub_81533E0(void) // trade.c
{
sub_8152A34(SECTOR_SAVE_SLOT_LENGTH, gRamSaveSectionLocations);
if (gDamagedSaveSectors)
- DoSaveFailedScreen(0);
- return 0;
+ DoSaveFailedScreen(SAVE_NORMAL);
+ return FALSE;
}
-u8 sub_8153408(void) // trade.s save
+bool8 sub_8153408(void) // trade.c
{
sub_8152CAC(SECTOR_SAVE_SLOT_LENGTH, gRamSaveSectionLocations);
if (gDamagedSaveSectors)
- DoSaveFailedScreen(0);
- return 0;
+ DoSaveFailedScreen(SAVE_NORMAL);
+ return FALSE;
}
u8 FullSaveGame(void)
{
if (gFlashMemoryPresent != TRUE)
- return 1;
+ return TRUE;
UpdateSaveAddresses();
SaveSerializedGame();
RestoreSaveBackupVars(gRamSaveSectionLocations);
sub_8152A34(gUnknown_03006208 + 1, gRamSaveSectionLocations);
- return 0;
+ return FALSE;
}
bool8 CheckSaveFile(void)
{
u8 retVal = FALSE;
- u16 val = ++gUnknown_03006208;
- if (val <= 4)
+ u16 sectorId = ++gUnknown_03006208;
+ if (sectorId <= SECTOR_ID_SAVEBLOCK1_END)
{
sub_8152A34(gUnknown_03006208 + 1, gRamSaveSectionLocations);
- sub_8152D44(val, gRamSaveSectionLocations);
+ sub_8152D44(sectorId, gRamSaveSectionLocations);
}
else
{
- sub_8152D44(val, gRamSaveSectionLocations);
+ sub_8152D44(sectorId, gRamSaveSectionLocations);
retVal = TRUE;
}
if (gDamagedSaveSectors)
- DoSaveFailedScreen(1);
+ DoSaveFailedScreen(SAVE_LINK);
return retVal;
}
-u8 Save_LoadGameData(u8 a1)
+u8 Save_LoadGameData(u8 saveType)
{
- u8 result;
+ u8 status;
if (gFlashMemoryPresent != TRUE)
{
- gSaveFileStatus = 4;
- return 0xFF;
+ gSaveFileStatus = SAVE_STATUS_NO_FLASH;
+ return SAVE_STATUS_ERROR;
}
UpdateSaveAddresses();
- switch (a1)
+ switch (saveType)
{
- case 0:
+ case SAVE_NORMAL:
default:
- result = sub_8152DD0(0xFFFF, gRamSaveSectionLocations);
+ status = sub_8152DD0(0xFFFF, gRamSaveSectionLocations);
LoadSerializedGame();
- gSaveFileStatus = result;
+ gSaveFileStatus = status;
gGameContinueCallback = 0;
break;
- case 3:
- result = sub_81530DC(0x1C, gDecompressionBuffer, 0xF80);
- if(result == 1)
- result = sub_81530DC(0x1D, gDecompressionBuffer + 0xF80, 0xF80);
+ case SAVE_HALL_OF_FAME:
+ status = sub_81530DC(SECTOR_ID_HOF_1, gDecompressionBuffer, SECTOR_DATA_SIZE);
+ if (status == SAVE_STATUS_OK)
+ status = sub_81530DC(SECTOR_ID_HOF_2, gDecompressionBuffer + SECTOR_DATA_SIZE, SECTOR_DATA_SIZE);
break;
}
- return result;
+ return status;
}
u16 sub_815355C(void)
@@ -836,7 +837,7 @@ u16 sub_815355C(void)
savSection = gFastSaveSection = &gSaveDataBuffer;
if (gFlashMemoryPresent != TRUE)
- return 0;
+ return SAVE_STATUS_EMPTY;
UpdateSaveAddresses();
GetSaveValidStatus(gRamSaveSectionLocations);
v3 = SECTOR_SAVE_SLOT_LENGTH * (gSaveCounter % 2);
@@ -849,7 +850,7 @@ u16 sub_815355C(void)
savSection->data[12] +
savSection->data[13];
}
- return 0;
+ return SAVE_STATUS_EMPTY;
}
u32 TryReadSpecialSaveSection(u8 sector, u8* dst)
@@ -859,17 +860,17 @@ u32 TryReadSpecialSaveSection(u8 sector, u8* dst)
u8* savData;
if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE)
- return 0xFF;
+ return SAVE_STATUS_ERROR;
ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, sizeof(struct SaveSection));
if (*(u32*)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTION_SENTINEL)
- return 0xFF;
+ return SAVE_STATUS_ERROR;
// copies whole save section except u32 counter
i = 0;
size = 0xFFB;
savData = &gSaveDataBuffer.data[4];
for (; i <= size; i++)
dst[i] = savData[i];
- return 1;
+ return SAVE_STATUS_OK;
}
u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
@@ -880,7 +881,7 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
void* savDataBuffer;
if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE)
- return 0xFF;
+ return SAVE_STATUS_ERROR;
savDataBuffer = &gSaveDataBuffer;
*(u32*)(savDataBuffer) = SPECIAL_SECTION_SENTINEL;
@@ -892,8 +893,8 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
for (; i <= size; i++)
savData[i] = src[i];
if (ProgramFlashSectorAndVerify(sector, savDataBuffer) != 0)
- return 0xFF;
- return 1;
+ return SAVE_STATUS_ERROR;
+ return SAVE_STATUS_OK;
}
void sub_8153688(u8 taskId)
diff --git a/src/save_failed_screen.c b/src/save_failed_screen.c
index 6d45370b8..a2a2acc8d 100644
--- a/src/save_failed_screen.c
+++ b/src/save_failed_screen.c
@@ -48,10 +48,10 @@ EWRAM_DATA u8 gSaveFailedUnused2[4] = {0};
static const struct OamData sClockOamData =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 0,
diff --git a/src/save_location.c b/src/save_location.c
index 2443b3161..6bf5eceb0 100644
--- a/src/save_location.c
+++ b/src/save_location.c
@@ -52,10 +52,10 @@ static const u16 sSaveLocationPokeCenterList[] =
MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F,
MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F,
MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F,
- MAP_SINGLE_BATTLE_COLOSSEUM,
+ MAP_BATTLE_COLOSSEUM_2P,
MAP_TRADE_CENTER,
MAP_RECORD_CORNER,
- MAP_DOUBLE_BATTLE_COLOSSEUM,
+ MAP_BATTLE_COLOSSEUM_4P,
0xFFFF,
};
@@ -118,6 +118,8 @@ void TrySetMapSaveWarpStatus(void)
sub_81AFD5C();
}
+// Called when receiving the Pokedex
+// Only place field_A8 is written (aside from clearing on new game), never read
void sub_81AFDA0(void)
{
gSaveBlock2Ptr->field_A8 |= 0x8000;
@@ -129,7 +131,7 @@ void sub_81AFDA0(void)
gSaveBlock2Ptr->field_A8 |= 0x8;
}
-void sub_81AFDD0(void)
+void SetChampionSaveWarp(void)
{
- gSaveBlock2Ptr->specialSaveWarpFlags |= 0x80;
+ gSaveBlock2Ptr->specialSaveWarpFlags |= CHAMPION_SAVEWARP;
}
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 0326a56a4..0e52f5953 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.
@@ -462,13 +461,13 @@ bool8 ScrCmd_compare_var_to_var(struct ScriptContext *ctx)
return FALSE;
}
+// Note: addvar doesn't support adding from a variable in vanilla. If you were to
+// add a VarGet() to the above, make sure you change the `addvar VAR_*, -1`
+// in the contest scripts to `subvar VAR_*, 1`, else contests will break.
bool8 ScrCmd_addvar(struct ScriptContext *ctx)
{
u16 *ptr = GetVarPointer(ScriptReadHalfword(ctx));
*ptr += ScriptReadHalfword(ctx);
- // Note: addvar doesn't support adding from a variable in vanilla. If you were to
- // add a VarGet() to the above, make sure you change the `addvar VAR_0x8006, 65535`
- // in the contest scripts to `subvar VAR_0x8006, 1`, else contests will break.
return FALSE;
}
@@ -487,7 +486,7 @@ bool8 ScrCmd_random(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_giveitem(struct ScriptContext *ctx)
+bool8 ScrCmd_additem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
@@ -496,7 +495,7 @@ bool8 ScrCmd_giveitem(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_takeitem(struct ScriptContext *ctx)
+bool8 ScrCmd_removeitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u32 quantity = VarGet(ScriptReadHalfword(ctx));
@@ -531,7 +530,7 @@ bool8 ScrCmd_checkitemtype(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_givepcitem(struct ScriptContext *ctx)
+bool8 ScrCmd_addpcitem(struct ScriptContext *ctx)
{
u16 itemId = VarGet(ScriptReadHalfword(ctx));
u16 quantity = VarGet(ScriptReadHalfword(ctx));
@@ -549,7 +548,7 @@ bool8 ScrCmd_checkpcitem(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_givedecoration(struct ScriptContext *ctx)
+bool8 ScrCmd_adddecoration(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
@@ -557,7 +556,7 @@ bool8 ScrCmd_givedecoration(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_takedecoration(struct ScriptContext *ctx)
+bool8 ScrCmd_removedecoration(struct ScriptContext *ctx)
{
u32 decorId = VarGet(ScriptReadHalfword(ctx));
@@ -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;
}
@@ -651,13 +650,14 @@ bool8 ScrCmd_fadescreenswapbuffers(struct ScriptContext *ctx)
switch (mode)
{
- case 1:
+ case FADE_TO_BLACK:
+ case FADE_TO_WHITE:
default:
CpuCopy32(gPlttBufferUnfaded, gPaletteDecompressionBuffer, PLTT_DECOMP_BUFFER_SIZE);
FadeScreen(mode, 0);
break;
- case 0:
- case 2:
+ case FADE_FROM_BLACK:
+ case FADE_FROM_WHITE:
CpuCopy32(gPaletteDecompressionBuffer, gPlttBufferUnfaded, PLTT_DECOMP_BUFFER_SIZE);
FadeScreen(mode, 0);
break;
@@ -810,12 +810,12 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- sub_80AF848();
+ DoTeleportWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
-bool8 ScrCmd_warpD7(struct ScriptContext *ctx)
+bool8 ScrCmd_warpmossdeepgym(struct ScriptContext *ctx)
{
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
@@ -824,7 +824,7 @@ bool8 ScrCmd_warpD7(struct ScriptContext *ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- sub_80AF87C();
+ DoMossdeepGymWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
@@ -1247,7 +1247,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
HideFieldMessageBox();
playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
return FALSE;
}
@@ -1261,7 +1261,7 @@ bool8 ScrCmd_release(struct ScriptContext *ctx)
EventObjectClearHeldMovementIfFinished(&gEventObjects[gSelectedEventObject]);
playerObjectId = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[playerObjectId]);
- sub_80D338C();
+ ScriptMovement_UnfreezeEventObjects();
UnfreezeEventObjects();
return FALSE;
}
@@ -1468,10 +1468,10 @@ bool8 ScrCmd_hidemonpic(struct ScriptContext *ctx)
bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
+ u8 contestWinnerId = ScriptReadByte(ctx);
+ if (contestWinnerId)
+ SetContestWinnerForPainting(contestWinnerId);
- if (v1)
- sub_812FDA8(v1);
ShowContestWinner();
ScriptContext1_Stop();
return TRUE;
@@ -1528,9 +1528,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 +1612,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;
}
@@ -1624,7 +1624,7 @@ bool8 ScrCmd_bufferstdstring(struct ScriptContext *ctx)
u8 stringVarIndex = ScriptReadByte(ctx);
u16 index = VarGet(ScriptReadHalfword(ctx));
- StringCopy(sScriptStringVars[stringVarIndex], gUnknown_0858BAF0[index]);
+ StringCopy(sScriptStringVars[stringVarIndex], gStdStrings[index]);
return FALSE;
}
@@ -1726,7 +1726,7 @@ bool8 ScrCmd_checkpartymove(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_givemoney(struct ScriptContext *ctx)
+bool8 ScrCmd_addmoney(struct ScriptContext *ctx)
{
u32 amount = ScriptReadWord(ctx);
u8 ignore = ScriptReadByte(ctx);
@@ -1736,7 +1736,7 @@ bool8 ScrCmd_givemoney(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_takemoney(struct ScriptContext *ctx)
+bool8 ScrCmd_removemoney(struct ScriptContext *ctx)
{
u32 amount = ScriptReadWord(ctx);
u8 ignore = ScriptReadByte(ctx);
@@ -1930,15 +1930,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;
}
@@ -1946,7 +1946,7 @@ bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx)
bool8 ScrCmd_startcontest(struct ScriptContext *ctx)
{
- sub_80F840C();
+ StartContest();
ScriptContext1_Stop();
return TRUE;
}
@@ -2127,53 +2127,53 @@ bool8 ScrCmd_checkcoins(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_givecoins(struct ScriptContext *ctx)
+bool8 ScrCmd_addcoins(struct ScriptContext *ctx)
{
u16 coins = VarGet(ScriptReadHalfword(ctx));
- if (GiveCoins(coins) == TRUE)
+ if (AddCoins(coins) == TRUE)
gSpecialVar_Result = 0;
else
gSpecialVar_Result = 1;
return FALSE;
}
-bool8 ScrCmd_takecoins(struct ScriptContext *ctx)
+bool8 ScrCmd_removecoins(struct ScriptContext *ctx)
{
u16 coins = VarGet(ScriptReadHalfword(ctx));
- if (TakeCoins(coins) == TRUE)
+ if (RemoveCoins(coins) == TRUE)
gSpecialVar_Result = 0;
else
gSpecialVar_Result = 1;
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 +2218,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 +2257,7 @@ bool8 ScrCmd_setmonmetlocation(struct ScriptContext *ctx)
return FALSE;
}
-void sub_809BDB4(void)
+static void CloseBrailleWindow(void)
{
ClearStdWindowAndFrame(gBrailleWindowId, 1);
RemoveWindow(gBrailleWindowId);
@@ -2279,12 +2281,12 @@ bool8 ScrCmd_buffertrainername(struct ScriptContext *ctx)
return FALSE;
}
-void sub_809BE48(u16 npcId)
+void SetMovingNpcId(u16 npcId)
{
sMovingNpcId = npcId;
}
-bool8 ScrCmd_warpE0(struct ScriptContext *ctx)
+bool8 ScrCmd_warpsootopolislegend(struct ScriptContext *ctx)
{
u8 mapGroup = ScriptReadByte(ctx);
u8 mapNum = ScriptReadByte(ctx);
@@ -2293,7 +2295,7 @@ bool8 ScrCmd_warpE0(struct ScriptContext *ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
SetWarpDestination(mapGroup, mapNum, warpId, x, y);
- sub_80AF79C();
+ DoSootopolisLegendWarp();
ResetInitialPlayerAvatarState();
return TRUE;
}
diff --git a/src/script_menu.c b/src/script_menu.c
index c1dc2af63..7afe30080 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -13,1026 +13,30 @@
#include "strings.h"
#include "task.h"
#include "text.h"
+#include "constants/field_specials.h"
#include "constants/items.h"
+#include "constants/script_menu.h"
#include "constants/songs.h"
-// multichoice lists
-const struct MenuAction MultichoiceList_000[] =
-{
- {gUnknown_085EAD37, NULL},
- {gUnknown_085EAD41, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_002[] =
-{
- {gUnknown_085EAD67, NULL},
- {gUnknown_085EAD6D, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_003[] =
-{
- {gUnknown_085EAD72, NULL},
- {gUnknown_085EAD84, NULL},
- {gUnknown_085EAD96, NULL},
- {gText_Cancel2, NULL},
-};
-
-const struct MenuAction MultichoiceList_004[] =
-{
- {gText_CoolnessContest, NULL},
- {gText_BeautyContest, NULL},
- {gText_CutenessContest, NULL},
- {gText_SmartnessContest, NULL},
- {gText_ToughnessContest, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_006[] =
-{
- {gUnknown_085EADF9, NULL},
- {gUnknown_085EAE04, NULL},
- {gUnknown_085EAE12, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_005[] =
-{
- {gUnknown_085EADF9, NULL},
- {gUnknown_085EAE04, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_007[] =
-{
- {gMenuText_Register, NULL},
- {gUnknown_085EAE12, NULL},
- {gUnknown_085EAE1B, NULL},
- {gText_Cancel2, NULL},
-};
-
-const struct MenuAction MultichoiceList_012[] =
-{
- {gUnknown_085EAE27, NULL},
- {gUnknown_085EAE2C, NULL},
-};
-
-const struct MenuAction MultichoiceList_013[] =
-{
- {gUnknown_085EAE31, NULL},
- {gUnknown_085EAE35, NULL},
- {gUnknown_085EAE39, NULL},
- {gUnknown_085EAE3D, NULL},
- {gUnknown_085EAE41, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_014[] =
-{
- {gUnknown_085EAD5F, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_016[] =
-{
- {gUnknown_085EAE53, NULL},
- {gUnknown_085EAE5A, NULL},
-};
-
-const struct MenuAction MultichoiceList_020[] =
-{
- {gText_Yes, NULL},
- {gText_No, NULL},
- {gUnknown_085EAD6D, NULL},
-};
-
-const struct MenuAction MultichoiceList_023[] =
-{
- {gUnknown_085EAEA2, NULL},
- {gUnknown_085EAEAC, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_024[] =
-{
- {gText_Lv50, NULL},
- {gText_OpenLevel, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_025[] = //Trick House Mechadoll 1, Question 1
-{
- {gTrickHouse_Mechadoll_Oddish, NULL},
- {gTrickHouse_Mechadoll_Poochyena, NULL},
- {gTrickHouse_Mechadoll_Taillow, NULL},
-};
-
-const struct MenuAction MultichoiceList_026[] = //Trick House Mechadoll 1, Question 2
-{
- {gTrickHouse_Mechadoll_Azurill, NULL},
- {gTrickHouse_Mechadoll_Lotad, NULL},
- {gTrickHouse_Mechadoll_Wingull, NULL},
-};
-
-const struct MenuAction MultichoiceList_027[] = //Trick House Mechadoll 1, Question 3
-{
- {gTrickHouse_Mechadoll_Dustox, NULL},
- {gTrickHouse_Mechadoll_Zubat, NULL},
- {gTrickHouse_Mechadoll_Nincada, NULL},
-};
-
-const struct MenuAction MultichoiceList_028[] = //Trick House Mechadoll 2, Question 1
-{
- {gTrickHouse_Mechadoll_Ralts, NULL},
- {gTrickHouse_Mechadoll_Zigzagoon, NULL},
- {gTrickHouse_Mechadoll_Slakoth, NULL},
-};
-
-const struct MenuAction MultichoiceList_029[] = //Trick House Mechadoll 2, Question 2
-{
- {gTrickHouse_Mechadoll_Poochyena2, NULL},
- {gTrickHouse_Mechadoll_Shroomish, NULL},
- {gTrickHouse_Mechadoll_Zigzagoon2, NULL},
-};
-
-const struct MenuAction MultichoiceList_030[] = //Trick House Mechadoll 2, Question 3
-{
- {gTrickHouse_Mechadoll_Poochyena3, NULL},
- {gTrickHouse_Mechadoll_Zubat2, NULL},
- {gTrickHouse_Mechadoll_Carvanha, NULL},
-};
-
-const struct MenuAction MultichoiceList_031[] = //Trick House Mechadoll 3, Question 1
-{
- {gTrickHouse_Mechadoll_BurnHeal, NULL},
- {gTrickHouse_Mechadoll_HarborMail, NULL},
- {gTrickHouse_Mechadoll_SamePrice, NULL},
-};
+#include "data/script_menu.h"
-const struct MenuAction MultichoiceList_032[] = //Trick House Mechadoll 3, Question 2
-{
- {gTrickHouse_Mechadoll_60Yen, NULL},
- {gTrickHouse_Mechadoll_55Yen, NULL},
- {gTrickHouse_Mechadoll_Nothing, NULL},
-};
-
-const struct MenuAction MultichoiceList_033[] = //Trick House Mechadoll 3, Question 3
-{
- {gTrickHouse_Mechadoll_CostMore, NULL},
- {gTrickHouse_Mechadoll_CostLess, NULL},
- {gTrickHouse_Mechadoll_SamePrice2, NULL},
-};
+static EWRAM_DATA u8 sProcessInputDelay = 0;
-const struct MenuAction MultichoiceList_034[] = //Trick House Mechadoll 4, Question 1
-{
- {gTrickHouse_Mechadoll_Male, NULL},
- {gTrickHouse_Mechadoll_Female, NULL},
- {gTrickHouse_Mechadoll_Neither, NULL},
-};
+static u8 sLilycoveSSTidalSelections[SSTIDAL_SELECTION_COUNT];
-const struct MenuAction MultichoiceList_035[] = //Trick House Mechadoll 4, Question 2
-{
- {gTrickHouse_Mechadoll_ElderlyMen, NULL},
- {gTrickHouse_Mechadoll_ElderlyLadies, NULL},
- {gTrickHouse_Mechadoll_SameNumber, NULL},
-};
-
-const struct MenuAction MultichoiceList_036[] = //Trick House Mechadoll 4, Question 3
-{
- {gTrickHouse_Mechadoll_None, NULL},
- {gTrickHouse_Mechadoll_One, NULL},
- {gTrickHouse_Mechadoll_Two, NULL},
-};
-
-const struct MenuAction MultichoiceList_037[] = //Trick House Mechadoll 5, Question 1
-{
- {gTrickHouse_Mechadoll_Two2, NULL},
- {gTrickHouse_Mechadoll_Three, NULL},
- {gTrickHouse_Mechadoll_Four, NULL},
-};
-
-const struct MenuAction MultichoiceList_038[] = //Trick House Mechadoll 5, Question 2
-{
- {gTrickHouse_Mechadoll_Six, NULL},
- {gTrickHouse_Mechadoll_Seven, NULL},
- {gTrickHouse_Mechadoll_Eight, NULL},
-};
-
-const struct MenuAction MultichoiceList_039[] = //Trick House Mechadoll 5, Question 3
-{
- {gTrickHouse_Mechadoll_Six2, NULL},
- {gTrickHouse_Mechadoll_Seven2, NULL},
- {gTrickHouse_Mechadoll_Eight2, NULL},
-};
-
-const struct MenuAction MultichoiceList_042[] =
-{
- {gUnknown_085EAEC3, NULL},
- {gUnknown_085EAED6, NULL},
- {gUnknown_085EAEE6, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_043[] =
-{
- {gUnknown_085EAEF6, NULL},
- {gUnknown_085EAF02, NULL},
- {gUnknown_085EAF0E, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_044[] =
-{
- {gUnknown_085EAF1B, NULL},
- {gUnknown_085EAF24, NULL},
- {gUnknown_085EAF2F, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_045[] =
-{
- {gUnknown_085EAF34, NULL},
- {gUnknown_085EAF3E, NULL},
-};
-
-const struct MenuAction MultichoiceList_046[] =
-{
- {gUnknown_085EAF4B, NULL},
- {gUnknown_085EAF58, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_047[] =
-{
- {gUnknown_085EAF65, NULL},
- {gUnknown_085EAF70, NULL},
- {gUnknown_085EAF7D, NULL},
- {gUnknown_085EAF87, NULL},
- {gUnknown_085EAF93, NULL},
- {gUnknown_085EAF9F, NULL},
- {gUnknown_085EAFAB, NULL},
- {gText_Cancel2, NULL},
-};
-
-const struct MenuAction MultichoiceList_048[] =
-{
- {gUnknown_085EAFB6, NULL},
- {gUnknown_085EAFCF, NULL},
- {gUnknown_085EAFE8, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_055[] =
-{
- {gUnknown_085EB089, NULL},
- {gUnknown_085EB09C, NULL},
- {gUnknown_085EB0AF, NULL},
- {gUnknown_085EB0C2, NULL},
- {gUnknown_085EB0D5, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_049[] =
-{
- {gUnknown_085EB002, NULL},
- {gUnknown_085EB017, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_050[] =
-{
- {gUnknown_085EB02A, NULL},
- {gUnknown_085EB034, NULL},
-};
-
-const struct MenuAction MultichoiceList_052[] =
-{
- {gText_LilycoveCity, NULL},
- {gText_BattleFrontier, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_053[] =
-{
- {gText_SlateportCity, NULL},
- {gText_LilycoveCity, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_054[] =
-{
- {gUnknown_085EB07E, NULL},
- {gUnknown_085EB084, NULL},
-};
-
-const struct MenuAction MultichoiceList_056[] =
-{
- {gText_LilycoveCity, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_057[] =
-{
- {gText_5F, NULL},
- {gText_4F, NULL},
- {gText_3F, NULL},
- {gText_2F, NULL},
- {gText_1F, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_058[] =
-{
- {gUnknown_085EB040, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_059[] =
-{
- {gUnknown_085EB04A, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_060[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB04A, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_061[] =
-{
- {gUnknown_085EB057, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_062[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB057, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_063[] =
-{
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB057, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_064[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB057, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_065[] =
-{
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_066[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_067[] =
-{
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_068[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_069[] =
-{
- {gUnknown_085EB057, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_070[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB057, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_071[] =
-{
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB057, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_072[] =
-{
- {gUnknown_085EB040, NULL},
- {gUnknown_085EB04A, NULL},
- {gUnknown_085EB057, NULL},
- {gUnknown_085EB062, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_073[] =
-{
- {gText_Opponent, NULL},
- {gText_Tourney_Tree, NULL},
- {gText_ReadyToStart, NULL},
- {gUnknown_085EB5BC, NULL},
- {gUnknown_085EB5C3, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_107[] =
-{
- {gText_Opponent, NULL},
- {gText_Tourney_Tree, NULL},
- {gText_ReadyToStart, NULL},
- {gUnknown_085EB5C3, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_088[] =
-{
- {gUnknown_085EB29A, NULL},
- {gUnknown_085EB2A3, NULL},
-};
-
-const struct MenuAction MultichoiceList_076[] =
-{
- {gUnknown_085EB372, NULL},
- {gUnknown_085EB37F, NULL},
- {gUnknown_085EB389, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_017[] =
-{
- {gText_Yes, NULL},
- {gText_No, NULL},
- {gUnknown_085EAD6D, NULL},
-};
-
-const struct MenuAction MultichoiceList_018[] =
-{
- {gUnknown_085EAE6E, NULL},
- {gUnknown_085EAE7C, NULL},
- {gUnknown_085EAE8A, NULL},
- {gUnknown_085EAD6D, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_078[] =
-{
- {gUnknown_085EB372, NULL},
- {gUnknown_085EB37F, NULL},
- {gUnknown_085EB397, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_079[] =
-{
- {gUnknown_085EB372, NULL},
- {gUnknown_085EB37F, NULL},
- {gUnknown_085EB389, NULL},
- {gUnknown_085EB397, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_074[] =
-{
- {gUnknown_085EB372, NULL},
- {gUnknown_085EB37F, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_080[] =
-{
- {gUnknown_085EB3A4, NULL},
- {gUnknown_085EB3B1, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_081[] =
-{
- {gUnknown_085EB3D4, NULL},
- {gUnknown_085EB3C6, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_082[] =
-{
- {gText_NormalRank, NULL},
- {gText_SuperRank, NULL},
- {gText_HyperRank, NULL},
- {gText_MasterRank, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_083[] =
-{
- {gText_BattleBag, NULL},
- {gText_HeldItem, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_084[] =
-{
- {gText_LinkContest, NULL},
- {gText_AboutE_Mode, NULL},
- {gText_AboutG_Mode, NULL},
- {gText_Cancel2, NULL},
-};
-
-const struct MenuAction MultichoiceList_085[] =
-{
- {gText_E_Mode, NULL},
- {gText_G_Mode, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_086[] =
-{
- {gText_MenuOptionPokedex, NULL},
- {gText_MenuOptionPokemon, NULL},
- {gText_MenuOptionBag, NULL},
- {gText_MenuOptionPokenav, NULL},
- {gUnknown_085EB278, NULL},
- {gText_MenuOptionSave, NULL},
- {gText_MenuOptionOption, NULL},
- {gText_MenuOptionExit, NULL},
-};
-
-const struct MenuAction MultichoiceList_087[] =
-{
- {gUnknown_085EB28A, NULL},
- {gUnknown_085EB290, NULL},
- {gUnknown_085EB295, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_089[] =
-{
- {gText_SouthernIsland, NULL},
- {gText_BirthIsland, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_090[] =
-{
- {gText_SouthernIsland, NULL},
- {gText_FarawayIsland, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_091[] =
-{
- {gText_BirthIsland, NULL},
- {gText_FarawayIsland, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_092[] =
-{
- {gText_SouthernIsland, NULL},
- {gText_BirthIsland, NULL},
- {gText_FarawayIsland, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_093[] =
-{
- {gUnknown_085EB2E4, NULL},
- {gUnknown_085EB2F0, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_094[] =
-{
- {gText_Yes, NULL},
- {gUnknown_085EB2FC, NULL},
-};
-
-const struct MenuAction MultichoiceList_095[] =
-{
- {gUnknown_085EB3DF, NULL},
- {gUnknown_085EB3EA, NULL},
- {gUnknown_085EB3F1, NULL},
- {gUnknown_085EB3FC, NULL},
- {gUnknown_085EB40A, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_011[] =
-{
- {gUnknown_085EB415, NULL},
- {gUnknown_085EB41D, NULL},
- {gUnknown_085EB424, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_096[] =
-{
- {gUnknown_085EB45C, NULL},
- {gUnknown_085EB469, NULL},
- {gUnknown_085EB475, NULL},
- {gUnknown_085EB482, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_097[] =
-{
- {gUnknown_085EB42F, NULL},
- {gUnknown_085EB43A, NULL},
- {gUnknown_085EB444, NULL},
- {gUnknown_085EB451, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_098[] =
-{
- {gUnknown_085EB48E, NULL},
- {gUnknown_085EB496, NULL},
- {gUnknown_085EB4A3, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_099[] =
-{
- {gUnknown_085EB4AD, NULL},
- {gUnknown_085EB4B9, NULL},
- {gUnknown_085EB4C7, NULL},
- {gUnknown_085EB4D4, NULL},
- {gUnknown_085EB4E0, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_100[] =
-{
- {gText_BattleBasics, NULL},
- {gText_PokemonNature, NULL},
- {gText_PokemonMoves, NULL},
- {gText_Underpowered, NULL},
- {gText_WhenInDanger, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_101[] =
-{
- {gUnknown_085EB532, NULL},
- {gUnknown_085EB543, NULL},
- {gUnknown_085EB555, NULL},
- {gUnknown_085EB563, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_102[] =
-{
- {gUnknown_085EB56E, NULL},
- {gUnknown_085EB57E, NULL},
- {gUnknown_085EB589, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_103[] =
-{
- {gUnknown_085EB5B6, NULL},
- {gUnknown_085EB5BC, NULL},
- {gUnknown_085EB5C3, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_104[] =
-{
- {gUnknown_085EB5B6, NULL},
- {gUnknown_085EB5C3, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_105[] =
-{
- {gUnknown_085EB5B6, NULL},
- {gUnknown_085EB5BC, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_106[] =
-{
- {gUnknown_085EB5B6, NULL},
- {gUnknown_085EB5C8, NULL},
-};
-
-const struct MenuAction MultichoiceList_108[] =
-{
- {gUnknown_085EE14B, NULL},
- {gUnknown_085EE14F, NULL},
-};
-
-const struct MenuAction MultichoiceList_109[] =
-{
- {gUnknown_085EB2FF, NULL},
- {gUnknown_085EB310, NULL},
- {gUnknown_085EB317, NULL},
- {gUnknown_085EB31F, NULL},
-};
-
-const struct MenuAction MultichoiceList_110[] =
-{
- {gText_CaveOfOrigin, NULL},
- {gText_MtPyre, NULL},
- {gText_SkyPillar, NULL},
- {gText_DontRemember, NULL},
-};
-
-const struct MenuAction MultichoiceList_111[] =
-{
- {gUnknown_085EB4AD, NULL},
- {gUnknown_085EB4B9, NULL},
- {gUnknown_085EB4C7, NULL},
- {gUnknown_085EB4D4, NULL},
- {gUnknown_085EB597, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_112[] =
-{
- {gText_BattleTrainers, NULL},
- {gUnknown_085EB45C, NULL},
- {gUnknown_085EB469, NULL},
- {gUnknown_085EB475, NULL},
- {gUnknown_085EB482, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_113[] =
-{
- {gText_NormalTagMatch, NULL},
- {gText_VarietyTagMatch, NULL},
- {gText_UniqueTagMatch, NULL},
- {gText_ExpertTagMatch, NULL},
- {gText_Exit, NULL},
-};
-
-const struct MenuAction MultichoiceList_001[] =
-{
- {gText_Exit, NULL},
-};
-
-struct MultichoiceListStruct
-{
- const struct MenuAction *list;
- u8 count;
-};
-
-const struct MultichoiceListStruct gMultichoiceLists[] =
-{
- {MultichoiceList_000, ARRAY_COUNT(MultichoiceList_000)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_002, ARRAY_COUNT(MultichoiceList_002)},
- {MultichoiceList_003, ARRAY_COUNT(MultichoiceList_003)},
- {MultichoiceList_004, ARRAY_COUNT(MultichoiceList_004)},
- {MultichoiceList_005, ARRAY_COUNT(MultichoiceList_005)},
- {MultichoiceList_006, ARRAY_COUNT(MultichoiceList_006)},
- {MultichoiceList_007, ARRAY_COUNT(MultichoiceList_007)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_011, ARRAY_COUNT(MultichoiceList_011)},
- {MultichoiceList_012, ARRAY_COUNT(MultichoiceList_012)},
- {MultichoiceList_013, ARRAY_COUNT(MultichoiceList_013)},
- {MultichoiceList_014, ARRAY_COUNT(MultichoiceList_014)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_016, ARRAY_COUNT(MultichoiceList_016)},
- {MultichoiceList_017, ARRAY_COUNT(MultichoiceList_017)},
- {MultichoiceList_018, ARRAY_COUNT(MultichoiceList_018)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_020, ARRAY_COUNT(MultichoiceList_020)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_023, ARRAY_COUNT(MultichoiceList_023)},
- {MultichoiceList_024, ARRAY_COUNT(MultichoiceList_024)},
- {MultichoiceList_025, ARRAY_COUNT(MultichoiceList_025)},
- {MultichoiceList_026, ARRAY_COUNT(MultichoiceList_026)},
- {MultichoiceList_027, ARRAY_COUNT(MultichoiceList_027)},
- {MultichoiceList_028, ARRAY_COUNT(MultichoiceList_028)},
- {MultichoiceList_029, ARRAY_COUNT(MultichoiceList_029)},
- {MultichoiceList_030, ARRAY_COUNT(MultichoiceList_030)},
- {MultichoiceList_031, ARRAY_COUNT(MultichoiceList_031)},
- {MultichoiceList_032, ARRAY_COUNT(MultichoiceList_032)},
- {MultichoiceList_033, ARRAY_COUNT(MultichoiceList_033)},
- {MultichoiceList_034, ARRAY_COUNT(MultichoiceList_034)},
- {MultichoiceList_035, ARRAY_COUNT(MultichoiceList_035)},
- {MultichoiceList_036, ARRAY_COUNT(MultichoiceList_036)},
- {MultichoiceList_037, ARRAY_COUNT(MultichoiceList_037)},
- {MultichoiceList_038, ARRAY_COUNT(MultichoiceList_038)},
- {MultichoiceList_039, ARRAY_COUNT(MultichoiceList_039)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_042, ARRAY_COUNT(MultichoiceList_042)},
- {MultichoiceList_043, ARRAY_COUNT(MultichoiceList_043)},
- {MultichoiceList_044, ARRAY_COUNT(MultichoiceList_044)},
- {MultichoiceList_045, ARRAY_COUNT(MultichoiceList_045)},
- {MultichoiceList_046, ARRAY_COUNT(MultichoiceList_046)},
- {MultichoiceList_047, ARRAY_COUNT(MultichoiceList_047)},
- {MultichoiceList_048, ARRAY_COUNT(MultichoiceList_048)},
- {MultichoiceList_049, ARRAY_COUNT(MultichoiceList_049)},
- {MultichoiceList_050, ARRAY_COUNT(MultichoiceList_050)},
- {MultichoiceList_001, ARRAY_COUNT(MultichoiceList_001)},
- {MultichoiceList_052, ARRAY_COUNT(MultichoiceList_052)},
- {MultichoiceList_053, ARRAY_COUNT(MultichoiceList_053)},
- {MultichoiceList_054, ARRAY_COUNT(MultichoiceList_054)},
- {MultichoiceList_055, ARRAY_COUNT(MultichoiceList_055)},
- {MultichoiceList_056, ARRAY_COUNT(MultichoiceList_056)},
- {MultichoiceList_057, ARRAY_COUNT(MultichoiceList_057)},
- {MultichoiceList_058, ARRAY_COUNT(MultichoiceList_058)},
- {MultichoiceList_059, ARRAY_COUNT(MultichoiceList_059)},
- {MultichoiceList_060, ARRAY_COUNT(MultichoiceList_060)},
- {MultichoiceList_061, ARRAY_COUNT(MultichoiceList_061)},
- {MultichoiceList_062, ARRAY_COUNT(MultichoiceList_062)},
- {MultichoiceList_063, ARRAY_COUNT(MultichoiceList_063)},
- {MultichoiceList_064, ARRAY_COUNT(MultichoiceList_064)},
- {MultichoiceList_065, ARRAY_COUNT(MultichoiceList_065)},
- {MultichoiceList_066, ARRAY_COUNT(MultichoiceList_066)},
- {MultichoiceList_067, ARRAY_COUNT(MultichoiceList_067)},
- {MultichoiceList_068, ARRAY_COUNT(MultichoiceList_068)},
- {MultichoiceList_069, ARRAY_COUNT(MultichoiceList_069)},
- {MultichoiceList_070, ARRAY_COUNT(MultichoiceList_070)},
- {MultichoiceList_071, ARRAY_COUNT(MultichoiceList_071)},
- {MultichoiceList_072, ARRAY_COUNT(MultichoiceList_072)},
- {MultichoiceList_073, ARRAY_COUNT(MultichoiceList_073)},
- {MultichoiceList_074, ARRAY_COUNT(MultichoiceList_074)},
- {MultichoiceList_074, ARRAY_COUNT(MultichoiceList_074)},
- {MultichoiceList_076, ARRAY_COUNT(MultichoiceList_076)},
- {MultichoiceList_076, ARRAY_COUNT(MultichoiceList_076)},
- {MultichoiceList_078, ARRAY_COUNT(MultichoiceList_078)},
- {MultichoiceList_079, ARRAY_COUNT(MultichoiceList_079)},
- {MultichoiceList_080, ARRAY_COUNT(MultichoiceList_080)},
- {MultichoiceList_081, ARRAY_COUNT(MultichoiceList_081)},
- {MultichoiceList_082, ARRAY_COUNT(MultichoiceList_082)},
- {MultichoiceList_083, ARRAY_COUNT(MultichoiceList_083)},
- {MultichoiceList_084, ARRAY_COUNT(MultichoiceList_084)},
- {MultichoiceList_085, ARRAY_COUNT(MultichoiceList_085)},
- {MultichoiceList_086, ARRAY_COUNT(MultichoiceList_086)},
- {MultichoiceList_087, ARRAY_COUNT(MultichoiceList_087)},
- {MultichoiceList_088, ARRAY_COUNT(MultichoiceList_088)},
- {MultichoiceList_089, ARRAY_COUNT(MultichoiceList_089)},
- {MultichoiceList_090, ARRAY_COUNT(MultichoiceList_090)},
- {MultichoiceList_091, ARRAY_COUNT(MultichoiceList_091)},
- {MultichoiceList_092, ARRAY_COUNT(MultichoiceList_092)},
- {MultichoiceList_093, ARRAY_COUNT(MultichoiceList_093)},
- {MultichoiceList_094, ARRAY_COUNT(MultichoiceList_094)},
- {MultichoiceList_095, ARRAY_COUNT(MultichoiceList_095)},
- {MultichoiceList_096, ARRAY_COUNT(MultichoiceList_096)},
- {MultichoiceList_097, ARRAY_COUNT(MultichoiceList_097)},
- {MultichoiceList_098, ARRAY_COUNT(MultichoiceList_098)},
- {MultichoiceList_099, ARRAY_COUNT(MultichoiceList_099)},
- {MultichoiceList_100, ARRAY_COUNT(MultichoiceList_100)},
- {MultichoiceList_101, ARRAY_COUNT(MultichoiceList_101)},
- {MultichoiceList_102, ARRAY_COUNT(MultichoiceList_102)},
- {MultichoiceList_103, ARRAY_COUNT(MultichoiceList_103)},
- {MultichoiceList_104, ARRAY_COUNT(MultichoiceList_104)},
- {MultichoiceList_105, ARRAY_COUNT(MultichoiceList_105)},
- {MultichoiceList_106, ARRAY_COUNT(MultichoiceList_106)},
- {MultichoiceList_107, ARRAY_COUNT(MultichoiceList_107)},
- {MultichoiceList_108, ARRAY_COUNT(MultichoiceList_108)},
- {MultichoiceList_109, ARRAY_COUNT(MultichoiceList_109)},
- {MultichoiceList_110, ARRAY_COUNT(MultichoiceList_110)},
- {MultichoiceList_111, ARRAY_COUNT(MultichoiceList_111)},
- {MultichoiceList_112, ARRAY_COUNT(MultichoiceList_112)},
- {MultichoiceList_113, ARRAY_COUNT(MultichoiceList_113)},
-};
-
-const u8 *const gUnknown_0858BAF0[] =
-{
- gText_Cool,
- gText_Beauty,
- gText_Cute,
- gText_Smart,
- gText_Tough,
- gText_Normal,
- gText_Super,
- gText_Hyper,
- gText_Master,
- gText_Cool2,
- gText_Beauty2,
- gText_Cute2,
- gText_Smart2,
- gText_Tough2,
- gText_Items,
- gText_Key_Items,
- gText_Poke_Balls,
- gText_TMs_Hms,
- gText_Berries2,
- gText_Single2,
- gText_Double2,
- gText_Multi,
- gText_MultiLink,
- gText_BattleTower2,
- gText_BattleDome,
- gText_BattleFactory,
- gText_BattlePalace,
- gText_BattleArena,
- gText_BattlePike,
- gText_BattlePyramid,
-};
-
-const u8 gUnknown_0858BB68[] = { 74, 75, 76, 77, 78, 79 };
-
-const u8 *const sPCNameStrings[] =
-{
- gText_SomeonesPC,
- gText_LanettesPC,
- gText_PlayersPC,
- gText_LogOff,
-};
-
-const u8 *const gUnknown_0858BB80[] =
-{
- gText_SlateportCity,
- gText_BattleFrontier,
- gText_SouthernIsland,
- gText_NavelRock,
- gText_BirthIsland,
- gText_FarawayIsland,
- gText_Exit,
-};
-
-const u8 *const gUnknown_0858BB9C[] =
-{
- OldaleTown_PokemonCenter_2F_Text_277F1B,
- OldaleTown_PokemonCenter_2F_Text_277F5A,
- OldaleTown_PokemonCenter_2F_Text_277F96,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBAC[] =
-{
- OldaleTown_PokemonCenter_2F_Text_27879F,
- OldaleTown_PokemonCenter_2F_Text_2787D5,
- OldaleTown_PokemonCenter_2F_Text_278831,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBBC[] =
-{
- OldaleTown_PokemonCenter_2F_Text_27879F,
- OldaleTown_PokemonCenter_2F_Text_2787D5,
- OldaleTown_PokemonCenter_2F_Text_2787FC,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBCC[] =
-{
- OldaleTown_PokemonCenter_2F_Text_27879F,
- OldaleTown_PokemonCenter_2F_Text_2787D5,
- OldaleTown_PokemonCenter_2F_Text_278831,
- OldaleTown_PokemonCenter_2F_Text_2787FC,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBE0[] =
-{
- OldaleTown_PokemonCenter_2F_Text_277F1B,
- OldaleTown_PokemonCenter_2F_Text_277F5A,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-const u8 *const gUnknown_0858BBEC[] =
-{
- OldaleTown_PokemonCenter_2F_Text_27879F,
- OldaleTown_PokemonCenter_2F_Text_2787D5,
- OldaleTown_PokemonCenter_2F_Text_27889C,
-};
-
-EWRAM_DATA u8 gUnknown_02039F90 = 0;
-
-static u8 gUnknown_03001124[7];
-static u32 filler_0300112c;
-
-static void Task_HandleMultichoiceInput(u8);
-static void Task_HandleYesNoInput(u8);
-static void Task_HandleMultichoiceGridInput(u8);
-static void DrawMultichoiceMenu(u8, u8, u8, bool8, u8);
-static void sub_80E1FBC(u8, u8, u8, u8);
-static void sub_80E2A94(u8);
-static void CreatePCMenu(void);
-static void sub_80E2578(void);
+static void Task_HandleMultichoiceInput(u8 taskId);
+static void Task_HandleYesNoInput(u8 taskId);
+static void Task_HandleMultichoiceGridInput(u8 taskId);
+static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 cursorPos);
+static void InitMultichoiceCheckWrap(bool8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId);
+static void DrawLinkServicesMultichoiceMenu(u8 multichoiceId);
+static void CreatePCMultichoice(void);
+static void CreateLilycoveSSTidalMultichoice(void);
static bool8 IsPicboxClosed(void);
-static void CreateStartMenu(void);
-static void sub_80E2CC4(u8, u8, u8, u8);
+static void CreateStartMenuForPokenavTutorial(void);
+static void InitMultichoiceNoWrap(bool8 ignoreBPress, u8 unusedCount, u8 windowId, u8 multichoiceId);
-bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress)
+bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress)
{
if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
{
@@ -1060,7 +64,8 @@ bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, bool8
}
}
-static u16 sub_80E1EB8(const u8 *str)
+// Unused
+static u16 GetLengthWithExpandedPlayerName(const u8 *str)
{
u16 length = 0;
@@ -1069,7 +74,7 @@ static u16 sub_80E1EB8(const u8 *str)
if (*str == PLACEHOLDER_BEGIN)
{
str++;
- if (*str == 1)
+ if (*str == PLACEHOLDER_ID_PLAYER)
{
length += StringLength(gSaveBlock2Ptr->playerName);
str++;
@@ -1085,28 +90,28 @@ static u16 sub_80E1EB8(const u8 *str)
return length;
}
-static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 cursorPos)
+static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 cursorPos)
{
int i;
u8 windowId;
- u8 count = gMultichoiceLists[multichoiceId].count;
- const struct MenuAction *actions = gMultichoiceLists[multichoiceId].list;
+ u8 count = sMultichoiceLists[multichoiceId].count;
+ const struct MenuAction *actions = sMultichoiceLists[multichoiceId].list;
int width = 0;
u8 newWidth;
for (i = 0; i < count; i++)
{
- width = display_text_and_get_width(actions[i].text, width);
+ width = DisplayTextAndGetWidth(actions[i].text, width);
}
- newWidth = convert_pixel_width_to_tile_width(width);
- left = sub_80E2D5C(left, newWidth);
+ newWidth = ConvertPixelWidthToTileWidth(width);
+ left = ScriptMenu_AdjustLeftCoordFromWidth(left, newWidth);
windowId = CreateWindowFromRect(left, top, newWidth, count * 2);
SetStandardWindowBorderStyle(windowId, 0);
PrintMenuTable(windowId, count, actions);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, cursorPos);
schedule_bg_copy_tilemap_to_vram(0);
- sub_80E1FBC(ignoreBPress, count, windowId, multichoiceId);
+ InitMultichoiceCheckWrap(ignoreBPress, count, windowId, multichoiceId);
}
#define tLeft data[0]
@@ -1118,17 +123,17 @@ static void DrawMultichoiceMenu(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPre
#define tWindowId data[6]
#define tMultichoiceId data[7]
-static void sub_80E1FBC(u8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId)
+static void InitMultichoiceCheckWrap(bool8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId)
{
u8 i;
u8 taskId;
- gUnknown_02039F90 = 2;
+ sProcessInputDelay = 2;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < ARRAY_COUNT(sLinkServicesMultichoiceIds); i++)
{
- if (gUnknown_0858BB68[i] == multichoiceId)
+ if (sLinkServicesMultichoiceIds[i] == multichoiceId)
{
- gUnknown_02039F90 = 12;
+ sProcessInputDelay = 12;
}
}
@@ -1144,7 +149,7 @@ static void sub_80E1FBC(u8 ignoreBPress, u8 count, u8 windowId, u8 multichoiceId
gTasks[taskId].tWindowId = windowId;
gTasks[taskId].tMultichoiceId = multichoiceId;
- sub_80E2A94(multichoiceId);
+ DrawLinkServicesMultichoiceMenu(multichoiceId);
}
static void Task_HandleMultichoiceInput(u8 taskId)
@@ -1154,9 +159,9 @@ static void Task_HandleMultichoiceInput(u8 taskId)
if (!gPaletteFade.active)
{
- if (gUnknown_02039F90)
+ if (sProcessInputDelay)
{
- gUnknown_02039F90--;
+ sProcessInputDelay--;
}
else
{
@@ -1167,7 +172,7 @@ static void Task_HandleMultichoiceInput(u8 taskId)
if (gMain.newKeys & (DPAD_UP | DPAD_DOWN))
{
- sub_80E2A94(tMultichoiceId);
+ DrawLinkServicesMultichoiceMenu(tMultichoiceId);
}
if (selection != MENU_NOTHING_CHOSEN)
@@ -1177,7 +182,7 @@ static void Task_HandleMultichoiceInput(u8 taskId)
if (tIgnoreBPress)
return;
PlaySE(SE_SELECT);
- gSpecialVar_Result = 127;
+ gSpecialVar_Result = MULTI_B_PRESSED;
}
else
{
@@ -1208,7 +213,7 @@ bool8 ScriptMenu_YesNo(u8 left, u8 top)
}
}
-// unused
+// Unused
bool8 IsScriptActive(void)
{
if (gSpecialVar_Result == 0xFF)
@@ -1243,7 +248,7 @@ static void Task_HandleYesNoInput(u8 taskId)
EnableBothScriptContexts();
}
-bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnCount)
+bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignoreBPress, u8 columnCount)
{
if (FuncIsActiveTask(Task_HandleMultichoiceGridInput) == TRUE)
{
@@ -1258,22 +263,22 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPr
gSpecialVar_Result = 0xFF;
width = 0;
- for (i = 0; i < gMultichoiceLists[multichoiceId].count; i++)
+ for (i = 0; i < sMultichoiceLists[multichoiceId].count; i++)
{
- width = display_text_and_get_width(gMultichoiceLists[multichoiceId].list[i].text, width);
+ width = DisplayTextAndGetWidth(sMultichoiceLists[multichoiceId].list[i].text, width);
}
- newWidth = convert_pixel_width_to_tile_width(width);
+ newWidth = ConvertPixelWidthToTileWidth(width);
- left = sub_80E2D5C(left, columnCount * newWidth);
- rowCount = gMultichoiceLists[multichoiceId].count / columnCount;
+ left = ScriptMenu_AdjustLeftCoordFromWidth(left, columnCount * newWidth);
+ rowCount = sMultichoiceLists[multichoiceId].count / columnCount;
taskId = CreateTask(Task_HandleMultichoiceGridInput, 80);
gTasks[taskId].tIgnoreBPress = ignoreBPress;
gTasks[taskId].tWindowId = CreateWindowFromRect(left, top, columnCount * newWidth, rowCount * 2);
SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 0);
- PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, gMultichoiceLists[multichoiceId].list);
+ PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, sMultichoiceLists[multichoiceId].list);
sub_8199944(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, 0);
CopyWindowToVram(gTasks[taskId].tWindowId, 3);
return TRUE;
@@ -1293,7 +298,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId)
if (tIgnoreBPress)
return;
PlaySE(SE_SELECT);
- gSpecialVar_Result = 0x7F;
+ gSpecialVar_Result = MULTI_B_PRESSED;
break;
default:
gSpecialVar_Result = selection;
@@ -1307,7 +312,7 @@ static void Task_HandleMultichoiceGridInput(u8 taskId)
#undef tWindowId
-bool16 ScrSpecial_CreatePCMenu(void)
+bool16 ScriptMenu_CreatePCMultichoice(void)
{
if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
{
@@ -1316,12 +321,12 @@ bool16 ScrSpecial_CreatePCMenu(void)
else
{
gSpecialVar_Result = 0xFF;
- CreatePCMenu();
+ CreatePCMultichoice();
return TRUE;
}
}
-static void CreatePCMenu(void)
+static void CreatePCMultichoice(void)
{
u8 y = 8;
u32 pixelWidth = 0;
@@ -1332,17 +337,18 @@ static void CreatePCMenu(void)
for (i = 0; i < ARRAY_COUNT(sPCNameStrings); i++)
{
- pixelWidth = display_text_and_get_width(sPCNameStrings[i], pixelWidth);
+ pixelWidth = DisplayTextAndGetWidth(sPCNameStrings[i], pixelWidth);
}
if (FlagGet(FLAG_SYS_GAME_CLEAR))
{
- pixelWidth = display_text_and_get_width(gText_HallOfFame, pixelWidth);
+ pixelWidth = DisplayTextAndGetWidth(gText_HallOfFame, pixelWidth);
}
- width = convert_pixel_width_to_tile_width(pixelWidth);
+ width = ConvertPixelWidthToTileWidth(pixelWidth);
- if (FlagGet(FLAG_SYS_GAME_CLEAR)) // player has cleared game?
+ // Include Hall of Fame option if player is champion
+ if (FlagGet(FLAG_SYS_GAME_CLEAR))
{
numChoices = 4;
windowId = CreateWindowFromRect(0, 0, width, 8);
@@ -1358,7 +364,8 @@ static void CreatePCMenu(void)
AddTextPrinterParameterized(windowId, 1, gText_LogOff, y, 33, TEXT_SPEED_FF, NULL);
}
- if (FlagGet(FLAG_SYS_PC_LANETTE)) // player met lanette?
+ // Change PC name if player has met Lanette
+ if (FlagGet(FLAG_SYS_PC_LANETTE))
AddTextPrinterParameterized(windowId, 1, gText_LanettesPC, y, 1, TEXT_SPEED_FF, NULL);
else
AddTextPrinterParameterized(windowId, 1, gText_SomeonesPC, y, 1, TEXT_SPEED_FF, NULL);
@@ -1367,7 +374,7 @@ static void CreatePCMenu(void)
PrintPlayerNameOnWindow(windowId, gStringVar4, y, 17);
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, numChoices, 0);
CopyWindowToVram(windowId, 3);
- sub_80E1FBC(FALSE, numChoices, windowId, 1);
+ InitMultichoiceCheckWrap(FALSE, numChoices, windowId, MULTI_PC);
}
void ScriptMenu_DisplayPCStartupPrompt(void)
@@ -1376,7 +383,7 @@ void ScriptMenu_DisplayPCStartupPrompt(void)
AddTextPrinterParameterized2(0, 1, gText_WhichPCShouldBeAccessed, 0, NULL, 2, 1, 3);
}
-bool8 sub_80E2548(void)
+bool8 ScriptMenu_CreateLilycoveSSTidalMultichoice(void)
{
if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
{
@@ -1385,14 +392,16 @@ bool8 sub_80E2548(void)
else
{
gSpecialVar_Result = 0xFF;
- sub_80E2578();
+ CreateLilycoveSSTidalMultichoice();
return TRUE;
}
}
-static void sub_80E2578(void)
+// gSpecialVar_0x8004 is 1 if the Sailor was shown multiple event tickets at the same time
+// otherwise gSpecialVar_0x8004 is 0
+static void CreateLilycoveSSTidalMultichoice(void)
{
- u8 temp = 0;
+ u8 selectionCount = 0;
u8 count;
u32 pixelWidth;
u8 width;
@@ -1400,21 +409,22 @@ static void sub_80E2578(void)
u8 i;
u32 j;
- for (i = 0; i < ARRAY_COUNT(gUnknown_03001124); i++)
+ for (i = 0; i < SSTIDAL_SELECTION_COUNT; i++)
{
- gUnknown_03001124[i] = 0xFF;
+ sLilycoveSSTidalSelections[i] = 0xFF;
}
GetFontAttribute(1, FONTATTR_MAX_LETTER_WIDTH);
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 0;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SLATEPORT;
+ selectionCount++;
+
if (FlagGet(FLAG_MET_SCOTT_ON_SS_TIDAL) == TRUE)
{
- gUnknown_03001124[temp] = 1;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BATTLE_FRONTIER;
+ selectionCount++;
}
}
@@ -1422,14 +432,14 @@ static void sub_80E2578(void)
{
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 2;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SOUTHERN_ISLAND;
+ selectionCount++;
}
if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_EON_TICKET) == FALSE)
{
- gUnknown_03001124[temp] = 2;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_SOUTHERN_ISLAND;
+ selectionCount++;
FlagSet(FLAG_HAS_EON_TICKET);
}
}
@@ -1438,14 +448,14 @@ static void sub_80E2578(void)
{
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 3;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_NAVEL_ROCK;
+ selectionCount++;
}
if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_MYSTIC_TICKET) == FALSE)
{
- gUnknown_03001124[temp] = 3;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_NAVEL_ROCK;
+ selectionCount++;
FlagSet(FLAG_HAS_MYSTIC_TICKET);
}
}
@@ -1454,14 +464,14 @@ static void sub_80E2578(void)
{
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 4;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BIRTH_ISLAND;
+ selectionCount++;
}
if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_AURORA_TICKET) == FALSE)
{
- gUnknown_03001124[temp] = 4;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_BIRTH_ISLAND;
+ selectionCount++;
FlagSet(FLAG_HAS_AURORA_TICKET);
}
}
@@ -1470,69 +480,69 @@ static void sub_80E2578(void)
{
if (gSpecialVar_0x8004 == 0)
{
- gUnknown_03001124[temp] = 5;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_FARAWAY_ISLAND;
+ selectionCount++;
}
if (gSpecialVar_0x8004 == 1 && FlagGet(FLAG_HAS_OLD_SEA_MAP) == FALSE)
{
- gUnknown_03001124[temp] = 5;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_FARAWAY_ISLAND;
+ selectionCount++;
FlagSet(FLAG_HAS_OLD_SEA_MAP);
}
}
- gUnknown_03001124[temp] = 6;
- temp++;
+ sLilycoveSSTidalSelections[selectionCount] = SSTIDAL_SELECTION_EXIT;
+ selectionCount++;
if (gSpecialVar_0x8004 == 0 && FlagGet(FLAG_MET_SCOTT_ON_SS_TIDAL) == TRUE)
{
- count = temp;
+ count = selectionCount;
}
- count = temp;
- if (count == 7)
+ count = selectionCount;
+ if (count == SSTIDAL_SELECTION_COUNT)
{
- gSpecialVar_0x8004 = 11;
- sub_813A128();
+ gSpecialVar_0x8004 = SCROLL_MULTI_SS_TIDAL_DESTINATION;
+ ShowScrollableMultichoice();
}
else
{
pixelWidth = 0;
- for (j = 0; j < ARRAY_COUNT(gUnknown_0858BB80); j++)
+ for (j = 0; j < SSTIDAL_SELECTION_COUNT; j++)
{
- u8 test = gUnknown_03001124[j];
- if (test != 0xFF)
+ u8 selection = sLilycoveSSTidalSelections[j];
+ if (selection != 0xFF)
{
- pixelWidth = display_text_and_get_width(gUnknown_0858BB80[test], pixelWidth);
+ pixelWidth = DisplayTextAndGetWidth(sLilycoveSSTidalDestinations[selection], pixelWidth);
}
}
- width = convert_pixel_width_to_tile_width(pixelWidth);
- windowId = CreateWindowFromRect(28 - width, (6 - count) * 2, width, count * 2);
+ width = ConvertPixelWidthToTileWidth(pixelWidth);
+ windowId = CreateWindowFromRect(MAX_MULTICHOICE_WIDTH - width, (6 - count) * 2, width, count * 2);
SetStandardWindowBorderStyle(windowId, 0);
- for (temp = 0, i = 0; i < ARRAY_COUNT(gUnknown_0858BB80); i++)
+ for (selectionCount = 0, i = 0; i < SSTIDAL_SELECTION_COUNT; i++)
{
- if (gUnknown_03001124[i] != 0xFF)
+ if (sLilycoveSSTidalSelections[i] != 0xFF)
{
- AddTextPrinterParameterized(windowId, 1, gUnknown_0858BB80[gUnknown_03001124[i]], 8, temp * 16 + 1, TEXT_SPEED_FF, NULL);
- temp++;
+ AddTextPrinterParameterized(windowId, 1, sLilycoveSSTidalDestinations[sLilycoveSSTidalSelections[i]], 8, selectionCount * 16 + 1, TEXT_SPEED_FF, NULL);
+ selectionCount++;
}
}
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, count - 1);
CopyWindowToVram(windowId, 3);
- sub_80E1FBC(FALSE, count, windowId, 8);
+ InitMultichoiceCheckWrap(FALSE, count, windowId, MULTI_SSTIDAL_LILYCOVE);
}
}
-void sub_80E2878(void)
+void GetLilycoveSSTidalSelection(void)
{
- if (gSpecialVar_Result != 0x7F)
+ if (gSpecialVar_Result != MULTI_B_PRESSED)
{
- gSpecialVar_Result = gUnknown_03001124[gSpecialVar_Result];
+ gSpecialVar_Result = sLilycoveSSTidalSelections[gSpecialVar_Result];
}
}
@@ -1629,50 +639,52 @@ void ClearToTransparentAndRemoveWindow(u8 windowId)
RemoveWindow(windowId);
}
-static void sub_80E2A94(u8 multichoiceId)
+static void DrawLinkServicesMultichoiceMenu(u8 multichoiceId)
{
switch (multichoiceId)
{
- case 77:
+ case MULTI_WIRELESS_NO_BERRY:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBAC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sWirelessOptionsNoBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 76:
+ case MULTI_CABLE_CLUB_WITH_RECORD_MIX:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BB9C[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sCableClubOptions_WithRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 78:
+ case MULTI_WIRELESS_NO_RECORD:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBBC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sWirelessOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 79:
+ case MULTI_WIRELESS_ALL_SERVICES:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBCC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sWirelessOptions_AllServices[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 75:
+ case MULTI_WIRELESS_NO_RECORD_BERRY:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBEC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sWirelessOptions_NoRecordMixBerryCrush[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
- case 74:
+ case MULTI_CABLE_CLUB_NO_RECORD_MIX:
FillWindowPixelBuffer(0, PIXEL_FILL(1));
- AddTextPrinterParameterized2(0, 1, gUnknown_0858BBE0[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
+ AddTextPrinterParameterized2(0, 1, sCableClubOptions_NoRecordMix[Menu_GetCursorPos()], 0, NULL, 2, 1, 3);
break;
}
}
-bool16 sp106_CreateStartMenu(void)
+bool16 ScriptMenu_CreateStartMenuForPokenavTutorial(void)
{
if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
{
return FALSE;
}
-
- gSpecialVar_Result = 0xFF;
- CreateStartMenu();
- return TRUE;
+ else
+ {
+ gSpecialVar_Result = 0xFF;
+ CreateStartMenuForPokenavTutorial();
+ return TRUE;
+ }
}
-static void CreateStartMenu(void)
+static void CreateStartMenuForPokenavTutorial(void)
{
u8 windowId = CreateWindowFromRect(21, 0, 7, 18);
SetStandardWindowBorderStyle(windowId, 0);
@@ -1684,17 +696,17 @@ static void CreateStartMenu(void)
AddTextPrinterParameterized(windowId, 1, gText_MenuOptionSave, 8, 89, TEXT_SPEED_FF, NULL);
AddTextPrinterParameterized(windowId, 1, gText_MenuOptionOption, 8, 105, TEXT_SPEED_FF, NULL);
AddTextPrinterParameterized(windowId, 1, gText_MenuOptionExit, 8, 121, TEXT_SPEED_FF, NULL);
- sub_81983AC(windowId, 1, 0, 9, 16, 8, 0);
- sub_80E2CC4(0, 8, windowId, 86);
+ sub_81983AC(windowId, 1, 0, 9, 16, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), 0);
+ InitMultichoiceNoWrap(FALSE, ARRAY_COUNT(MultichoiceList_ForcedStartMenu), windowId, MULTI_FORCED_START_MENU);
CopyWindowToVram(windowId, 3);
}
#define tWindowId data[6]
-static void sub_80E2CC4(bool8 ignoreBPress, u8 unused, u8 windowId, u8 multichoiceId)
+static void InitMultichoiceNoWrap(bool8 ignoreBPress, u8 unusedCount, u8 windowId, u8 multichoiceId)
{
u8 taskId;
- gUnknown_02039F90 = 2;
+ sProcessInputDelay = 2;
taskId = CreateTask(Task_HandleMultichoiceInput, 80);
gTasks[taskId].tIgnoreBPress = ignoreBPress;
gTasks[taskId].tDoWrap = 0;
@@ -1711,47 +723,43 @@ static void sub_80E2CC4(bool8 ignoreBPress, u8 unused, u8 windowId, u8 multichoi
#undef tWindowId
#undef tMultichoiceId
-static int display_text_and_get_width_internal(const u8 *str)
+static int DisplayTextAndGetWidthInternal(const u8 *str)
{
u8 temp[64];
StringExpandPlaceholders(temp, str);
return GetStringWidth(1, temp, 0);
}
-int display_text_and_get_width(const u8 *str, int prevMaxWidth)
+int DisplayTextAndGetWidth(const u8 *str, int prevWidth)
{
- int len = display_text_and_get_width_internal(str);
- if (len < prevMaxWidth)
+ int width = DisplayTextAndGetWidthInternal(str);
+ if (width < prevWidth)
{
- len = prevMaxWidth;
+ width = prevWidth;
}
- return len;
+ return width;
}
-int convert_pixel_width_to_tile_width(int width)
+int ConvertPixelWidthToTileWidth(int width)
{
- return (((width + 9) / 8) + 1) > 28 ? 28 : (((width + 9) / 8) + 1);
+ return (((width + 9) / 8) + 1) > MAX_MULTICHOICE_WIDTH ? MAX_MULTICHOICE_WIDTH : (((width + 9) / 8) + 1);
}
-int sub_80E2D5C(int a0, int a1)
+int ScriptMenu_AdjustLeftCoordFromWidth(int left, int width)
{
- int ret = a0;
+ int adjustedLeft = left;
- if (a0 + a1 > 28)
+ if (left + width > MAX_MULTICHOICE_WIDTH)
{
- if (28 - a1 < 0)
+ if (MAX_MULTICHOICE_WIDTH - width < 0)
{
- ret = 0;
+ adjustedLeft = 0;
}
else
{
- ret = 28 - a1;
+ adjustedLeft = MAX_MULTICHOICE_WIDTH - width;
}
}
- else
- {
- ret = a0;
- }
- return ret;
+ return adjustedLeft;
}
diff --git a/src/script_movement.c b/src/script_movement.c
index 9fee9e060..03d6b10e8 100644
--- a/src/script_movement.c
+++ b/src/script_movement.c
@@ -3,20 +3,22 @@
#include "event_object_movement.h"
#include "task.h"
#include "util.h"
+#include "constants/event_objects.h"
+#include "constants/event_object_movement_constants.h"
// static functions
-static void sub_80D33AC(u8);
-static u8 sub_80D33F4(void);
-static bool8 sub_80D3408(u8, u8, const u8 *);
-static u8 sub_80D3474(u8, u8);
-static bool8 sub_80D3584(u8, u8);
-static void sub_80D35DC(u8, u8, u8, const u8 *);
-static void UnfreezeObjects(u8);
-static void sub_80D3660(u8);
-static void sub_80A2490(u8, u8, u8, const u8 *);
+static void ScriptMovement_StartMoveObjects(u8 priority);
+static u8 GetMoveObjectsTaskId(void);
+static bool8 ScriptMovement_TryAddNewMovement(u8 taskId, u8 eventObjId, const u8 *movementScript);
+static u8 GetMovementScriptIdFromEventObjectId(u8 taskId, u8 eventObjId);
+static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId);
+static void ScriptMovement_AddNewMovement(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript);
+static void ScriptMovement_UnfreezeActiveObjects(u8 taskId);
+static void ScriptMovement_MoveObjects(u8 taskId);
+static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript);
// EWRAM_DATA
-static EWRAM_DATA const u8 *gUnknown_02039D90[16] = {0};
+static EWRAM_DATA const u8 *gMovementScripts[EVENT_OBJECTS_COUNT] = {0};
// text
bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript)
@@ -25,207 +27,207 @@ bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGrou
if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &eventObjId))
return TRUE;
- if (!FuncIsActiveTask(sub_80D3660))
- sub_80D33AC(50);
- return sub_80D3408(sub_80D33F4(), eventObjId, movementScript);
+ if (!FuncIsActiveTask(ScriptMovement_MoveObjects))
+ ScriptMovement_StartMoveObjects(50);
+ return ScriptMovement_TryAddNewMovement(GetMoveObjectsTaskId(), eventObjId, movementScript);
}
-bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapBank)
+bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapGroup)
{
u8 eventObjId;
- u8 r4;
- u8 r1;
+ u8 taskId;
+ u8 moveScrId;
- if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapBank, &eventObjId))
+ if (TryGetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &eventObjId))
return TRUE;
- r4 = sub_80D33F4();
- r1 = sub_80D3474(r4, eventObjId);
- if (r1 == 16)
+ taskId = GetMoveObjectsTaskId();
+ moveScrId = GetMovementScriptIdFromEventObjectId(taskId, eventObjId);
+ if (moveScrId == EVENT_OBJECTS_COUNT)
return TRUE;
- return sub_80D3584(r4, r1);
+ return IsMovementScriptFinished(taskId, moveScrId);
}
-void sub_80D338C(void)
+void ScriptMovement_UnfreezeEventObjects(void)
{
u8 taskId;
- taskId = sub_80D33F4();
+ taskId = GetMoveObjectsTaskId();
if (taskId != 0xFF)
{
- UnfreezeObjects(taskId);
+ ScriptMovement_UnfreezeActiveObjects(taskId);
DestroyTask(taskId);
}
}
-
-static void sub_80D33AC(u8 priority)
+static void ScriptMovement_StartMoveObjects(u8 priority)
{
u8 taskId;
u8 i;
- taskId = CreateTask(sub_80D3660, priority);
- for (i = 1; i < 16; i++)
+ taskId = CreateTask(ScriptMovement_MoveObjects, priority);
+
+ for (i = 1; i < NUM_TASK_DATA; i++)
gTasks[taskId].data[i] = 0xFFFF;
}
-static u8 sub_80D33F4(void)
+static u8 GetMoveObjectsTaskId(void)
{
- return FindTaskIdByFunc(sub_80D3660);
+ return FindTaskIdByFunc(ScriptMovement_MoveObjects);
}
-static bool8 sub_80D3408(u8 taskId, u8 eventObjId, const u8 *movementScript)
+static bool8 ScriptMovement_TryAddNewMovement(u8 taskId, u8 eventObjId, const u8 *movementScript)
{
- u8 r4;
+ u8 moveScrId;
- r4 = sub_80D3474(taskId, eventObjId);
- if (r4 != 16)
+ moveScrId = GetMovementScriptIdFromEventObjectId(taskId, eventObjId);
+ if (moveScrId != EVENT_OBJECTS_COUNT)
{
- if (sub_80D3584(taskId, r4) == 0)
+ if (IsMovementScriptFinished(taskId, moveScrId) == 0)
{
return TRUE;
}
else
{
- sub_80D35DC(taskId, r4, eventObjId, movementScript);
+ ScriptMovement_AddNewMovement(taskId, moveScrId, eventObjId, movementScript);
return FALSE;
}
}
- r4 = sub_80D3474(taskId, 0xFF);
- if (r4 == 16)
+ moveScrId = GetMovementScriptIdFromEventObjectId(taskId, EVENT_OBJ_ID_PLAYER);
+ if (moveScrId == EVENT_OBJECTS_COUNT)
{
return TRUE;
}
else
{
- sub_80D35DC(taskId, r4, eventObjId, movementScript);
+ ScriptMovement_AddNewMovement(taskId, moveScrId, eventObjId, movementScript);
return FALSE;
}
}
-static u8 sub_80D3474(u8 taskId, u8 b)
+static u8 GetMovementScriptIdFromEventObjectId(u8 taskId, u8 eventObjId)
{
- u8 *ptr;
+ u8 *moveScriptId;
u8 i;
- ptr = (u8 *)&gTasks[taskId].data[1];
- for (i = 0; i < 16; i++, ptr++)
+ moveScriptId = (u8 *)&gTasks[taskId].data[1];
+ for (i = 0; i < EVENT_OBJECTS_COUNT; i++, moveScriptId++)
{
- if (*ptr == b)
+ if (*moveScriptId == eventObjId)
return i;
}
- return 16;
+ return EVENT_OBJECTS_COUNT;
}
-static void sub_80D34B0(u8 taskId, u8 b, u8 **c)
+static void LoadEventObjectIdPtrFromMovementScript(u8 taskId, u8 moveScrId, u8 **pEventObjId)
{
u8 i;
- *c = (u8 *)&gTasks[taskId].data[1];
- for (i = 0; i < b; i++, (*c)++)
+ *pEventObjId = (u8 *)&gTasks[taskId].data[1];
+ for (i = 0; i < moveScrId; i++, (*pEventObjId)++)
;
}
-static void sub_80D34E4(u8 taskId, u8 b, u8 c)
+static void SetEventObjectIdAtMovementScript(u8 taskId, u8 moveScrId, u8 eventObjId)
{
u8 *ptr;
- sub_80D34B0(taskId, b, &ptr);
- *ptr = c; //what is this supposed to do?
+ LoadEventObjectIdPtrFromMovementScript(taskId, moveScrId, &ptr);
+ *ptr = eventObjId;
}
-static void sub_80D3508(u8 taskId, u8 b, u8 *c)
+static void LoadEventObjectIdFromMovementScript(u8 taskId, u8 moveScrId, u8 *eventObjId)
{
u8 *ptr;
- sub_80D34B0(taskId, b, &ptr);
- *c = *ptr;
+ LoadEventObjectIdPtrFromMovementScript(taskId, moveScrId, &ptr);
+ *eventObjId = *ptr;
}
-static void sub_80D352C(u8 a, u8 b)
+static void ClearMovementScriptFinished(u8 taskId, u8 moveScrId)
{
- u16 var = ~gBitTable[b];
+ u16 mask = ~gBitTable[moveScrId];
- gTasks[a].data[0] &= var;
+ gTasks[taskId].data[0] &= mask;
}
-static void sub_80D355C(u8 taskId, u8 b)
+static void SetMovementScriptFinished(u8 taskId, u8 moveScrId)
{
- gTasks[taskId].data[0] |= gBitTable[b];
+ gTasks[taskId].data[0] |= gBitTable[moveScrId];
}
-static bool8 sub_80D3584(u8 taskId, u8 b)
+static bool8 IsMovementScriptFinished(u8 taskId, u8 moveScrId)
{
- u16 var = (u16)gTasks[taskId].data[0] & gBitTable[b];
+ u16 moveScriptFinished = (u16)gTasks[taskId].data[0] & gBitTable[moveScrId];
- if (var != 0)
+ if (moveScriptFinished != 0)
return TRUE;
else
return FALSE;
}
-static void npc_obj_offscreen_culling_and_flag_update(u8 a, const u8 *movementScript)
+static void SetMovementScript(u8 moveScrId, const u8 *movementScript)
{
- gUnknown_02039D90[a] = movementScript;
+ gMovementScripts[moveScrId] = movementScript;
}
-static const u8 *sub_80D35CC(u8 a)
+static const u8 *GetMovementScript(u8 moveScrId)
{
- return gUnknown_02039D90[a];
+ return gMovementScripts[moveScrId];
}
-static void sub_80D35DC(u8 taskId, u8 b, u8 eventObjId, const u8 *movementScript)
+static void ScriptMovement_AddNewMovement(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript)
{
- sub_80D352C(taskId, b);
- npc_obj_offscreen_culling_and_flag_update(b, movementScript);
- sub_80D34E4(taskId, b, eventObjId);
+ ClearMovementScriptFinished(taskId, moveScrId);
+ SetMovementScript(moveScrId, movementScript);
+ SetEventObjectIdAtMovementScript(taskId, moveScrId, eventObjId);
}
-static void UnfreezeObjects(u8 taskId)
+static void ScriptMovement_UnfreezeActiveObjects(u8 taskId)
{
u8 *pEventObjId;
u8 i;
pEventObjId = (u8 *)&gTasks[taskId].data[1];
- for (i = 0; i < 16; i++, pEventObjId++)
+ for (i = 0; i < EVENT_OBJECTS_COUNT; i++, pEventObjId++)
{
if (*pEventObjId != 0xFF)
UnfreezeEventObject(&gEventObjects[*pEventObjId]);
}
}
-static void sub_80D3660(u8 taskId)
+static void ScriptMovement_MoveObjects(u8 taskId)
{
u8 i;
- u8 var;
+ u8 eventObjId;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{
- sub_80D3508(taskId, i, &var);
- if (var != 0xFF)
- sub_80A2490(taskId, i, var, sub_80D35CC(i));
+ LoadEventObjectIdFromMovementScript(taskId, i, &eventObjId);
+ if (eventObjId != 0xFF)
+ ScriptMovement_TakeStep(taskId, i, eventObjId, GetMovementScript(i));
}
}
-static void sub_80A2490(u8 taskId, u8 b, u8 eventObjId, const u8 *d)
+static void ScriptMovement_TakeStep(u8 taskId, u8 moveScrId, u8 eventObjId, const u8 *movementScript)
{
- u8 var;
+ u8 nextMoveActionId;
if (EventObjectIsHeldMovementActive(&gEventObjects[eventObjId])
&& !EventObjectClearHeldMovementIfFinished(&gEventObjects[eventObjId]))
return;
- var = *d;
- if (var == 0xFE)
+ nextMoveActionId = *movementScript;
+ if (nextMoveActionId == MOVEMENT_ACTION_STEP_END)
{
- sub_80D355C(taskId, b);
+ SetMovementScriptFinished(taskId, moveScrId);
FreezeEventObject(&gEventObjects[eventObjId]);
}
else
{
- if (!EventObjectSetHeldMovement(&gEventObjects[eventObjId], var))
+ if (!EventObjectSetHeldMovement(&gEventObjects[eventObjId], nextMoveActionId))
{
- d++;
- npc_obj_offscreen_culling_and_flag_update(b, d);
+ movementScript++;
+ SetMovementScript(moveScrId, movementScript);
}
}
}
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
index 51bd73b1c..e691ed5fb 100755
--- a/src/script_pokemon_util_80F87D8.c
+++ b/src/script_pokemon_util_80F87D8.c
@@ -29,6 +29,7 @@
#include "constants/event_objects.h"
#include "constants/items.h"
#include "constants/species.h"
+#include "constants/tv.h"
#include "constants/vars.h"
#include "constants/battle_frontier.h"
@@ -39,10 +40,10 @@ extern const u16 gEventObjectPalette34[];
static const u8 gUnknown_0858D8EC[] = { 3, 4, 5, 14 };
-static void sub_80F8EE8(u8 taskId);
-static void sub_80F9088(u8 taskId);
+static void Task_ShowContestEntryMonPic(u8 taskId);
+static void Task_LinkContestWaitForConnection(u8 taskId);
static void CB2_ReturnFromChooseHalfParty(void);
-static void sub_80F94B8(void);
+static void CB2_ReturnFromChooseBattleFrontierParty(void);
void SetContestTrainerGfxIds(void)
{
@@ -51,6 +52,7 @@ void SetContestTrainerGfxIds(void)
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
}
+// Unused
void sub_80F8814(void)
{
u16 var1;
@@ -74,14 +76,15 @@ void sub_80F8814(void)
gSpecialVar_0x8004 = var1;
}
-void sub_80F8850(void)
+void BufferContestTrainerAndMonNames(void)
{
- sub_80F8264();
- sub_80F8290();
- sub_80F8438();
+ BufferContestantTrainerName();
+ BufferContestantMonNickname();
+ BufferContestantMonSpecies();
}
-void sub_80F8864(void)
+// Unused
+void DoesContestCategoryHaveWinner(void)
{
int contestWinner;
switch (gSpecialVar_ContestCategory)
@@ -104,28 +107,28 @@ void sub_80F8864(void)
break;
}
- if (!gSaveBlock1Ptr->contestWinners[contestWinner].species)
- gSpecialVar_0x8004 = 0;
+ if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
+ gSpecialVar_0x8004 = FALSE;
else
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE;
}
-void sub_80F88DC(void)
+void SaveMuseumContestPainting(void)
{
sub_80DEDA8(0xFF);
}
-void sub_80F88E8(void)
+void ShouldReadyContestArtist(void)
{
if (gContestFinalStandings[gContestPlayerMonIndex] == 0
- && gSpecialVar_ContestRank == 3
+ && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
&& gUnknown_02039F08[gContestPlayerMonIndex] >= 800)
{
- gSpecialVar_0x8004 = 1;
+ gSpecialVar_0x8004 = TRUE;
}
else
{
- gSpecialVar_0x8004 = 0;
+ gSpecialVar_0x8004 = FALSE;
}
}
@@ -143,9 +146,10 @@ u8 CountPlayerContestPaintings(void)
return count;
}
+// Unused
void sub_80F8970(void)
{
- s16 sp[4];
+ s16 conditions[CONTESTANT_COUNT];
int i, j;
s16 condition;
s8 var0;
@@ -153,28 +157,27 @@ void sub_80F8970(void)
u8 r8;
u8 r7;
- for (i = 0; i < 4; i++)
- sp[i] = gContestMonConditions[i];
+ for (i = 0; i < CONTESTANT_COUNT; i++)
+ conditions[i] = gContestMonConditions[i];
- for (i = 0; i < 3; i++)
+ for (i = 0; i < CONTESTANT_COUNT - 1; i++)
{
- for (j = 3; j > i; j--)
+ for (j = CONTESTANT_COUNT - 1; j > i; j--)
{
- if (sp[j - 1] < sp[j])
+ if (conditions[j - 1] < conditions[j])
{
- int temp = sp[j];
- sp[j] = sp[j - 1];
- sp[j - 1] = temp;
+ int temp;
+ SWAP(conditions[j], conditions[j - 1], temp)
}
}
}
- condition = sp[gSpecialVar_0x8006];
+ condition = conditions[gSpecialVar_0x8006];
var0 = 0;
r8 = 0;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (sp[i] == condition)
+ if (conditions[i] == condition)
{
var0++;
if (i == gSpecialVar_0x8006)
@@ -182,15 +185,15 @@ void sub_80F8970(void)
}
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
- if (sp[i] == condition)
+ if (conditions[i] == condition)
break;
}
r7 = i;
var2 = r8;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < CONTESTANT_COUNT; i++)
{
if (condition == gContestMonConditions[i])
{
@@ -219,11 +222,22 @@ static void ShowContestWinnerCleanup(void)
void ShowContestWinner(void)
{
+ /*
+ if(gUnknown_0203856C)
+ {
+ sub_80AAF30();
+ gBattleStruct->unk15DDF = 1;
+ gBattleStruct->unk15DDE = sub_80B2C4C(254, 0);
+ Contest_SaveWinner(3);
+ gUnknown_0203856C = 0;
+ }
+ */
+
SetMainCallback2(CB2_ContestPainting);
gMain.savedCallback = ShowContestWinnerCleanup;
}
-void sub_80F8AFC(void)
+void SetLinkContestPlayerGfx(void)
{
int i;
@@ -248,7 +262,7 @@ void sub_80F8AFC(void)
}
}
-void sub_80F8B94(void)
+void LoadLinkContestPlayerPalettes(void)
{
int i;
u8 eventObjectId;
@@ -287,13 +301,15 @@ u8 GiveMonArtistRibbon(void)
u8 hasArtistRibbon;
hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
- if (!hasArtistRibbon && gContestFinalStandings[gContestPlayerMonIndex] == 0 && gSpecialVar_ContestRank == 3
- && gUnknown_02039F08[gContestPlayerMonIndex] >= 800)
+ if (!hasArtistRibbon
+ && gContestFinalStandings[gContestPlayerMonIndex] == 0
+ && gSpecialVar_ContestRank == CONTEST_RANK_MASTER
+ && gUnknown_02039F08[gContestPlayerMonIndex] >= 800)
{
hasArtistRibbon = 1;
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
- if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > 4)
- sub_80EE4DC(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
+ if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
+ TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
return 1;
}
@@ -303,9 +319,9 @@ u8 GiveMonArtistRibbon(void)
}
}
-u8 sub_80F8D24(void)
+bool8 IsContestDebugActive(void)
{
- return 0;
+ return FALSE; // gUnknown_0203856C in pokeruby
}
void ShowContestEntryMonPic(void)
@@ -317,7 +333,7 @@ void ShowContestEntryMonPic(void)
u8 taskId;
u8 left, top;
- if (FindTaskIdByFunc(sub_80F8EE8) == 0xFF)
+ if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
{
AllocateMonSpritesGfx();
left = 10;
@@ -325,7 +341,7 @@ void ShowContestEntryMonPic(void)
species = gContestMons[gSpecialVar_0x8006].species;
personality = gContestMons[gSpecialVar_0x8006].personality;
otId = gContestMons[gSpecialVar_0x8006].otId;
- taskId = CreateTask(sub_80F8EE8, 0x50);
+ taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = species;
if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
@@ -357,9 +373,9 @@ void ShowContestEntryMonPic(void)
}
}
-void sub_80F8EB8(void)
+void HideContestEntryMonPic(void)
{
- u8 taskId = FindTaskIdByFunc(sub_80F8EE8);
+ u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
if (taskId != 0xFF)
{
gTasks[taskId].data[0]++;
@@ -367,7 +383,7 @@ void sub_80F8EB8(void)
}
}
-static void sub_80F8EE8(u8 taskId)
+static void Task_ShowContestEntryMonPic(u8 taskId)
{
struct Task *task = &gTasks[taskId];
struct Sprite *sprite;
@@ -403,10 +419,12 @@ static void sub_80F8EE8(u8 taskId)
void ScriptGetMultiplayerId(void)
{
- if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) && gNumLinkContestPlayers == 4 && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
+ if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
+ && gNumLinkContestPlayers == CONTESTANT_COUNT
+ && !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
gSpecialVar_Result = GetMultiplayerId();
else
- gSpecialVar_Result = 4;
+ gSpecialVar_Result = MAX_LINK_PLAYERS;
}
void ScriptRandom(void)
@@ -428,26 +446,26 @@ void ScriptRandom(void)
*scriptPtr = random % *scriptPtr;
}
-u16 sub_80F903C(void)
+u16 GetContestRand(void)
{
gContestRngValue = 1103515245 * gContestRngValue + 24691;
return gContestRngValue >> 16;
}
-u8 sub_80F905C(void)
+bool8 LinkContestWaitForConnection(void)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
{
- CreateTask(sub_80F9088, 5);
- return 1;
+ CreateTask(Task_LinkContestWaitForConnection, 5);
+ return TRUE;
}
else
{
- return 0;
+ return FALSE;
}
}
-static void sub_80F9088(u8 taskId)
+static void Task_LinkContestWaitForConnection(u8 taskId)
{
switch (gTasks[taskId].data[0])
{
@@ -471,7 +489,7 @@ static void sub_80F9088(u8 taskId)
}
}
-void sub_80F90DC(void)
+void LinkContestTryShowWirelessIndicator(void)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
{
@@ -483,7 +501,7 @@ void sub_80F90DC(void)
}
}
-void sub_80F910C(void)
+void LinkContestTryHideWirelessIndicator(void)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
{
@@ -492,25 +510,25 @@ void sub_80F910C(void)
}
}
-u8 sub_80F9134(void)
+bool8 IsContestWithRSPlayer(void)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
- return 1;
+ return TRUE;
else
- return 0;
+ return FALSE;
}
-void sub_80F9154(void)
+void ClearLinkContestFlags(void)
{
gLinkContestFlags = 0;
}
-u8 sub_80F9160(void)
+bool8 IsWirelessContest(void)
{
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
- return 1;
+ return TRUE;
else
- return 0;
+ return FALSE;
}
void HealPlayerParty(void)
@@ -585,14 +603,14 @@ void HasEnoughMonsForDoubleBattle(void)
{
switch (GetMonsStateToDoubles())
{
- case 0:
- gSpecialVar_Result = 0;
+ case PLAYER_HAS_TWO_USABLE_MONS:
+ gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
break;
- case 1:
- gSpecialVar_Result = 1;
+ case PLAYER_HAS_ONE_MON:
+ gSpecialVar_Result = PLAYER_HAS_ONE_MON;
break;
- case 2:
- gSpecialVar_Result = 2;
+ case PLAYER_HAS_ONE_USABLE_MON:
+ gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
break;
}
}
@@ -610,7 +628,7 @@ static bool8 CheckPartyMonHasHeldItem(u16 item)
return FALSE;
}
-bool8 sub_80F9370(void)
+bool8 DoesPartyHaveEnigmaBerry(void)
{
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
if (hasItem == TRUE)
@@ -624,7 +642,7 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item)
u8 heldItem[2];
ZeroEnemyPartyMons();
- CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, OT_ID_PLAYER_ID, 0);
+ CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
if (item)
{
heldItem[0] = item;
@@ -646,7 +664,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);
}
@@ -665,21 +683,21 @@ static void CB2_ReturnFromChooseHalfParty(void)
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
-void sub_80F9490(void)
+void ChoosePartyForBattleFrontier(void)
{
- gMain.savedCallback = sub_80F94B8;
+ gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
}
-static void sub_80F94B8(void)
+static void CB2_ReturnFromChooseBattleFrontierParty(void)
{
switch (gSelectedOrderFromParty[0])
{
case 0:
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
break;
default:
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
break;
}
@@ -688,20 +706,20 @@ static void sub_80F94B8(void)
void ReducePlayerPartyToSelectedMons(void)
{
- struct Pokemon party[4];
+ struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
int i;
CpuFill32(0, party, sizeof party);
// copy the selected pokemon according to the order.
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
// overwrite the first 4 with the order copied to.
- for (i = 0; i < 4; i++)
+ for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
gPlayerParty[i] = party[i];
CalculatePlayerPartyCount();
diff --git a/src/secret_base.c b/src/secret_base.c
index 12cb8cd61..e7f40a72b 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"
@@ -16,6 +16,7 @@
#include "fldeff.h"
#include "fldeff_misc.h"
#include "international_string_util.h"
+#include "item_menu.h"
#include "link.h"
#include "list_menu.h"
#include "main.h"
@@ -40,11 +41,13 @@
#include "constants/maps.h"
#include "constants/map_types.h"
#include "constants/metatile_behaviors.h"
+#include "constants/metatile_labels.h"
#include "constants/moves.h"
#include "constants/secret_bases.h"
#include "constants/songs.h"
#include "constants/species.h"
#include "constants/trainers.h"
+#include "constants/tv.h"
struct SecretBaseRegistryMenu
{
@@ -82,18 +85,18 @@ 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[] =
{
- {.closedMetatileId = 0x0026, .openMetatileId = 0x0036},
- {.closedMetatileId = 0x0027, .openMetatileId = 0x0037},
- {.closedMetatileId = 0x01a0, .openMetatileId = 0x01a1},
- {.closedMetatileId = 0x01a8, .openMetatileId = 0x01a9},
- {.closedMetatileId = 0x01b0, .openMetatileId = 0x01b1},
- {.closedMetatileId = 0x0208, .openMetatileId = 0x0210},
- {.closedMetatileId = 0x0271, .openMetatileId = 0x0278},
+ {.closedMetatileId = METATILE_General_SecretBase_TreeLeft, .openMetatileId = METATILE_General_SecretBase_VineLeft},
+ {.closedMetatileId = METATILE_General_SecretBase_TreeRight, .openMetatileId = METATILE_General_SecretBase_VineRight},
+ {.closedMetatileId = METATILE_General_RedCaveIndent, .openMetatileId = METATILE_General_RedCaveOpen},
+ {.closedMetatileId = METATILE_General_YellowCaveIndent, .openMetatileId = METATILE_General_YellowCaveOpen},
+ {.closedMetatileId = METATILE_General_BlueCaveIndent, .openMetatileId = METATILE_General_BlueCaveOpen},
+ {.closedMetatileId = METATILE_Fallarbor_BrownCaveIndent, .openMetatileId = METATILE_Fallarbor_BrownCaveOpen},
+ {.closedMetatileId = METATILE_Fortree_SecretBase_Shrub, .openMetatileId = METATILE_Fortree_SecretBase_ShrubOpen},
};
// mapNum, warpId, x, y
@@ -349,7 +352,7 @@ void SetPlayerSecretBase(void)
u16 i;
gSaveBlock1Ptr->secretBases[0].secretBaseId = sCurSecretBaseId;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
gSaveBlock1Ptr->secretBases[0].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
VarSet(VAR_CURRENT_SECRET_BASE, 0);
@@ -413,7 +416,7 @@ static void Task_EnterSecretBase(u8 taskId)
SetSecretBaseWarpDestination();
WarpIntoMap();
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
SetMainCallback2(CB2_LoadMap);
DestroyTask(taskId);
break;
@@ -423,7 +426,7 @@ static void Task_EnterSecretBase(u8 taskId)
void EnterSecretBase(void)
{
CreateTask(Task_EnterSecretBase, 0);
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
}
@@ -451,12 +454,12 @@ static void EnterNewlyCreatedSecretBase_StartFadeIn(void)
ScriptContext2_Enable();
HideMapNamePopUpWindow();
- FindMetatileIdMapCoords(&x, &y, 0x220);
+ FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
x += 7;
y += 7;
- MapGridSetMetatileIdAt(x, y, 0x220 | METATILE_COLLISION_MASK);
+ MapGridSetMetatileIdAt(x, y, METATILE_SecretBase_PC | METATILE_COLLISION_MASK);
CurrentMapDrawMetatileAt(x, y);
- pal_fill_black();
+ FadeInFromBlack();
CreateTask(EnterNewlyCreatedSecretBase_WaitFadeIn, 0);
}
@@ -505,7 +508,7 @@ void InitSecretBaseAppearance(bool8 hidePC)
secretBaseId = VarGet(VAR_CURRENT_SECRET_BASE);
decorations = gSaveBlock1Ptr->secretBases[secretBaseId].decorations;
decorPos = gSaveBlock1Ptr->secretBases[secretBaseId].decorationPositions;
- for (x = 0; x < 16; x++)
+ for (x = 0; x < DECOR_MAX_SECRET_BASE; x++)
{
if (decorations[x] > 0 && decorations[x] <= NUM_DECORATIONS && gDecorations[decorations[x]].permission != DECORPERM_SPRITE)
ShowDecorationOnMap((decorPos[x] >> 4) + 7, (decorPos[x] & 0xF) + 7, decorations[x]);
@@ -514,14 +517,14 @@ void InitSecretBaseAppearance(bool8 hidePC)
if (secretBaseId != 0)
{
// Another player's secret base. Change PC type to the "Register" PC.
- FindMetatileIdMapCoords(&x, &y, 0x220);
- MapGridSetMetatileIdAt(x + 7, y + 7, 0x221 | METATILE_COLLISION_MASK);
+ FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
+ MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SecretBase_RegisterPC | METATILE_COLLISION_MASK);
}
else if (hidePC == TRUE && VarGet(VAR_SECRET_BASE_INITIALIZED) == 1)
{
// Change PC to regular ground tile.
- FindMetatileIdMapCoords(&x, &y, 0x220);
- MapGridSetMetatileIdAt(x + 7, y + 7, 0x20a | METATILE_COLLISION_MASK);
+ FindMetatileIdMapCoords(&x, &y, METATILE_SecretBase_PC);
+ MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_SecretBase_Ground | METATILE_COLLISION_MASK);
}
}
}
@@ -650,7 +653,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)
@@ -678,7 +681,7 @@ static void Task_WarpOutOfSecretBase(u8 taskId)
case 2:
SetWarpDestinationToDynamicWarp(0x7e);
WarpIntoMap();
- gFieldCallback = mapldr_default;
+ gFieldCallback = FieldCB_DefaultWarpExit;
SetMainCallback2(CB2_LoadMap);
ScriptContext2_Disable();
DestroyTask(taskId);
@@ -894,7 +897,7 @@ static void Task_ShowSecretBaseRegistryMenu(u8 taskId)
}
else
{
- DisplayItemMessageOnField(taskId, gText_NoRegistry, GoToSecretBasePCMainMenu);
+ DisplayItemMessageOnField(taskId, gText_NoRegistry, GoToSecretBasePCRegisterMenu);
}
}
@@ -974,7 +977,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 +1077,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,40 +1097,40 @@ 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)
{
- sub_813BADC(1);
+ TryGainNewFanFromCounter(1);
gTrainerBattleOpponent_A = TRAINER_SECRET_BASE;
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;
@@ -1173,48 +1176,60 @@ void SecretBasePerStepCallback(u8 taskId)
VarSet(VAR_SECRET_BASE_STEP_COUNTER, VarGet(VAR_SECRET_BASE_STEP_COUNTER) + 1);
behavior = MapGridGetMetatileBehaviorAt(x, y);
tileId = MapGridGetMetatileIdAt(x, y);
- if (tileId == 0x234 || tileId == 0x23C)
+ if (tileId == METATILE_SecretBase_Board_Top || tileId == METATILE_SecretBase_Board_Bottom)
{
if (sInFriendSecretBase == TRUE)
{
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x20);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SOLID_BOARD);
}
}
- else if (tileId == 0x2b8 || tileId == 0x2b9 || tileId == 0x2ba || tileId == 0x2c0 || tileId == 0x2c1 || tileId == 0x2c2 || tileId == 0x2c8 || tileId == 0x2c9 || tileId == 0x2ca)
+ else if (tileId == METATILE_SecretBase_SmallChair
+ || tileId == METATILE_SecretBase_PokemonChair
+ || tileId == METATILE_SecretBase_HeavyChair
+ || tileId == METATILE_SecretBase_PrettyChair
+ || tileId == METATILE_SecretBase_ComfortChair
+ || tileId == METATILE_SecretBase_RaggedChair
+ || tileId == METATILE_SecretBase_BrickChair
+ || tileId == METATILE_SecretBase_CampChair
+ || tileId == METATILE_SecretBase_HardChair)
{
if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x01);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_CHAIR);
}
- else if (tileId == 0x239 || tileId == 0x241 || tileId == 0x251 || tileId == 0x259)
+ else if (tileId == METATILE_SecretBase_RedTent_DoorTop
+ || tileId == METATILE_SecretBase_RedTent_Door
+ || tileId == METATILE_SecretBase_BlueTent_DoorTop
+ || tileId == METATILE_SecretBase_BlueTent_Door)
{
if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x04);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_TENT);
}
- else if ((behavior == 0x34 && tileId == 0x26d) || (behavior == 0x35 && MapGridGetMetatileIdAt(x, y) == 0x26a))
+ else if ((behavior == MB_IMPASSABLE_NORTHEAST && tileId == METATILE_SecretBase_Stand_RightCorner)
+ || (behavior == MB_IMPASSABLE_NORTHWEST && MapGridGetMetatileIdAt(x, y) == METATILE_SecretBase_Stand_LeftCorner))
{
if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x200);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_STAND);
}
- else if (behavior == 0xc1 && tileId == 0x23d)
+ else if (behavior == MB_IMPASSABLE_WEST_AND_EAST && tileId == METATILE_SecretBase_Slide_Stairs)
{
if (sInFriendSecretBase == TRUE)
{
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ 0x1000);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x2000);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_USED_SLIDE);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_DECLINED_SLIDE);
}
}
- else if (behavior == 0x47 && tileId == 0x23e)
+ else if (behavior == MB_SLIDE_SOUTH && tileId == METATILE_SecretBase_Slide)
{
if (sInFriendSecretBase == TRUE)
{
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x1000);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ 0x2000);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SLIDE);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) ^ SECRET_BASE_DECLINED_SLIDE);
}
}
else if (MetatileBehavior_IsSecretBaseGlitterMat(behavior) == TRUE)
{
if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x80);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_GLITTER_MAT);
}
else if (MetatileBehavior_IsSecretBaseBalloon(behavior) == TRUE)
{
@@ -1223,13 +1238,13 @@ void SecretBasePerStepCallback(u8 taskId)
{
switch ((int)MapGridGetMetatileIdAt(x, y))
{
- case 0x338:
- case 0x33c:
- case 0x340:
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x02);
+ case METATILE_SecretBase_RedBalloon:
+ case METATILE_SecretBase_BlueBalloon:
+ case METATILE_SecretBase_YellowBalloon:
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_BALLOON);
break;
- case 0x228:
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x100);
+ case METATILE_SecretBase_MudBall:
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_MUD_BALL);
break;
}
}
@@ -1237,23 +1252,23 @@ void SecretBasePerStepCallback(u8 taskId)
else if (MetatileBehavior_IsSecretBaseBreakableDoor(behavior) == TRUE)
{
if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x400);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BREAKABLE_DOOR);
ShatterSecretBaseBreakableDoor(x, y);
}
else if (MetatileBehavior_IsSecretBaseSoundMat(behavior) == TRUE){
if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x8000);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_NOTE_MAT);
}
else if (MetatileBehavior_IsSecretBaseJumpMat(behavior) == TRUE)
{
if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x4000);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_JUMP_MAT);
}
else if (MetatileBehavior_IsSecretBaseSpinMat(behavior) == TRUE)
{
if (sInFriendSecretBase == TRUE)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x02);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SPIN_MAT);
}
}
break;
@@ -1291,7 +1306,7 @@ static void SetSecretBaseDataAndLanguage(u8 secretBaseId, struct SecretBase *sec
static bool8 SecretBasesHaveSameTrainerId(struct SecretBase *secretBase1, struct SecretBase *secretBase2)
{
u8 i;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
{
if (secretBase1->trainerId[i] != secretBase2->trainerId[i])
return FALSE;
@@ -1416,9 +1431,8 @@ static void SortSecretBasesByRegistryStatus(void)
{
if ((secretBases[i].registryStatus == 0 && secretBases[j].registryStatus == 1) || (secretBases[i].registryStatus == 2 && secretBases[j].registryStatus != 2))
{
- struct SecretBase temp = secretBases[i];
- secretBases[i] = secretBases[j];
- secretBases[j] = temp;
+ struct SecretBase temp;
+ SWAP(secretBases[i], secretBases[j], temp)
}
}
}
@@ -1445,7 +1459,7 @@ bool8 SecretBaseBelongsToPlayer(struct SecretBase *secretBase)
return FALSE;
// Check if the player's trainer Id matches the secret base's id.
- for (i = 0; i < 4; i++)
+ for (i = 0; i < TRAINER_ID_LENGTH; i++)
{
if (secretBase->trainerId[i] != gSaveBlock2Ptr->playerTrainerId[i])
return FALSE;
@@ -1460,48 +1474,57 @@ bool8 SecretBaseBelongsToPlayer(struct SecretBase *secretBase)
return TRUE;
}
+#define DELETED_BASE_A (1 << 0)
+#define DELETED_BASE_B (1 << 1)
+#define DELETED_BASE_C (1 << 2)
+
void DeleteFirstOldBaseFromPlayerInRecordMixingFriendsRecords(struct SecretBase *basesA, struct SecretBase *basesB, struct SecretBase *basesC)
{
u8 i;
- u8 sbFlags = 0x0;
+ u8 sbFlags = 0;
for (i = 0; i < SECRET_BASES_COUNT; i++)
{
- if (!(sbFlags & 0x1)) // 001
+ if (!(sbFlags & DELETED_BASE_A))
{
if (SecretBaseBelongsToPlayer(&basesA[i]) == TRUE)
{
ClearSecretBase(&basesA[i]);
- sbFlags |= 1;
+ sbFlags |= DELETED_BASE_A;
}
}
- if (!(sbFlags & 0x2)) // 010
+ if (!(sbFlags & DELETED_BASE_B))
{
if (SecretBaseBelongsToPlayer(&basesB[i]) == TRUE)
{
ClearSecretBase(&basesB[i]);
- sbFlags |= 2;
+ sbFlags |= DELETED_BASE_B;
}
}
- if (!(sbFlags & 0x4)) // 100
+ if (!(sbFlags & DELETED_BASE_C))
{
if (SecretBaseBelongsToPlayer(&basesC[i]) == TRUE)
{
ClearSecretBase(&basesC[i]);
- sbFlags |= 4;
+ sbFlags |= DELETED_BASE_C;
}
}
- if (sbFlags == 0x7) // 111
+ if (sbFlags == (DELETED_BASE_A | DELETED_BASE_B | DELETED_BASE_C))
{
break;
}
}
}
-bool8 sub_80EAD14(struct SecretBase *secretBase, struct SecretBase *secretBases, u8 c)
+#undef DELETED_BASE_A
+#undef DELETED_BASE_B
+#undef DELETED_BASE_C
+
+// returns TRUE if secretBase was deleted, FALSE otherwise
+static bool8 ClearDuplicateOwnedSecretBases(struct SecretBase *secretBase, struct SecretBase *secretBases, u8 c)
{
u8 i;
@@ -1545,11 +1568,11 @@ void sub_80EAD94(struct SecretBase *basesA, struct SecretBase *basesB, struct Se
{
basesA[i].sbr_field_1_0 = 1;
}
- if (!sub_80EAD14(&basesA[i], basesB, i))
+ if (!ClearDuplicateOwnedSecretBases(&basesA[i], basesB, i))
{
- if (!sub_80EAD14(&basesA[i], basesC, i))
+ if (!ClearDuplicateOwnedSecretBases(&basesA[i], basesC, i))
{
- sub_80EAD14(&basesA[i], basesD, i);
+ ClearDuplicateOwnedSecretBases(&basesA[i], basesD, i);
}
}
}
@@ -1559,9 +1582,9 @@ void sub_80EAD94(struct SecretBase *basesA, struct SecretBase *basesB, struct Se
if (basesB[i].secretBaseId)
{
basesB[i].battledOwnerToday = 0;
- if (!sub_80EAD14(&basesB[i], basesC, i))
+ if (!ClearDuplicateOwnedSecretBases(&basesB[i], basesC, i))
{
- sub_80EAD14(&basesB[i], basesD, i);
+ ClearDuplicateOwnedSecretBases(&basesB[i], basesD, i);
}
}
}
@@ -1570,7 +1593,7 @@ void sub_80EAD94(struct SecretBase *basesA, struct SecretBase *basesB, struct Se
if (basesC[i].secretBaseId)
{
basesC[i].battledOwnerToday = 0;
- sub_80EAD14(&basesC[i], basesD, i);
+ ClearDuplicateOwnedSecretBases(&basesC[i], basesD, i);
}
if (basesD[i].secretBaseId)
{
@@ -1616,6 +1639,17 @@ void sub_80EAEF4(struct SecretBaseRecordMixer *mixers)
sub_80EABA4(&mixers[2], 0);
}
+#define INIT_SECRET_BASE_RECORD_MIXER(linkId1, linkId2, linkId3) \
+ mixers[0].secretBases = secretBases + linkId1 * recordSize; \
+ mixers[0].version = gLinkPlayers[linkId1].version & 0xFF; \
+ mixers[0].language = gLinkPlayers[linkId1].language; \
+ mixers[1].secretBases = secretBases + linkId2 * recordSize; \
+ mixers[1].version = gLinkPlayers[linkId2].version & 0xFF; \
+ mixers[1].language = gLinkPlayers[linkId2].language; \
+ mixers[2].secretBases = secretBases + linkId3 * recordSize; \
+ mixers[2].version = gLinkPlayers[linkId3].version & 0xFF; \
+ mixers[2].language = gLinkPlayers[linkId3].language;
+
void ReceiveSecretBasesData(void *secretBases, size_t recordSize, u8 linkIdx)
{
struct SecretBaseRecordMixer mixers[3];
@@ -1637,48 +1671,16 @@ void ReceiveSecretBasesData(void *secretBases, size_t recordSize, u8 linkIdx)
switch (linkIdx)
{
case 0:
- mixers[0].secretBases = secretBases + 1 * recordSize;
- mixers[0].version = gLinkPlayers[1].version & 0xFF;
- mixers[0].language = gLinkPlayers[1].language;
- mixers[1].secretBases = secretBases + 2 * recordSize;
- mixers[1].version = gLinkPlayers[2].version & 0xFF;
- mixers[1].language = gLinkPlayers[2].language;
- mixers[2].secretBases = secretBases + 3 * recordSize;
- mixers[2].version = gLinkPlayers[3].version & 0xFF;
- mixers[2].language = gLinkPlayers[3].language;
+ INIT_SECRET_BASE_RECORD_MIXER(1, 2, 3)
break;
case 1:
- mixers[0].secretBases = secretBases + 2 * recordSize;
- mixers[0].version = gLinkPlayers[2].version & 0xFF;
- mixers[0].language = gLinkPlayers[2].language;
- mixers[1].secretBases = secretBases + 3 * recordSize;
- mixers[1].version = gLinkPlayers[3].version & 0xFF;
- mixers[1].language = gLinkPlayers[3].language;
- mixers[2].secretBases = secretBases + 0 * recordSize;
- mixers[2].version = gLinkPlayers[0].version & 0xFF;
- mixers[2].language = gLinkPlayers[0].language;
+ INIT_SECRET_BASE_RECORD_MIXER(2, 3, 0)
break;
case 2:
- mixers[0].secretBases = secretBases + 3 * recordSize;
- mixers[0].version = gLinkPlayers[3].version & 0xFF;
- mixers[0].language = gLinkPlayers[3].language;
- mixers[1].secretBases = secretBases + 0 * recordSize;
- mixers[1].version = gLinkPlayers[0].version & 0xFF;
- mixers[1].language = gLinkPlayers[0].language;
- mixers[2].secretBases = secretBases + 1 * recordSize;
- mixers[2].version = gLinkPlayers[1].version & 0xFF;
- mixers[2].language = gLinkPlayers[1].language;
+ INIT_SECRET_BASE_RECORD_MIXER(3, 0, 1)
break;
case 3:
- mixers[0].secretBases = secretBases + 0 * recordSize;
- mixers[0].version = gLinkPlayers[0].version & 0xFF;
- mixers[0].language = gLinkPlayers[0].language;
- mixers[1].secretBases = secretBases + 1 * recordSize;
- mixers[1].version = gLinkPlayers[1].version & 0xFF;
- mixers[1].language = gLinkPlayers[1].language;
- mixers[2].secretBases = secretBases + 2 * recordSize;
- mixers[2].version = gLinkPlayers[2].version & 0xFF;
- mixers[2].language = gLinkPlayers[2].language;
+ INIT_SECRET_BASE_RECORD_MIXER(0, 1, 2)
break;
}
@@ -1719,7 +1721,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);
@@ -1733,13 +1735,13 @@ void sub_80EB1AC(void)
sInFriendSecretBase = FALSE;
}
-void sub_80EB218(void)
+void CheckLeftFriendsSecretBase(void)
{
if (VarGet(VAR_SECRET_BASE_IS_NOT_LOCAL) && sInFriendSecretBase == TRUE && !CurMapIsSecretBase())
{
VarSet(VAR_SECRET_BASE_IS_NOT_LOCAL, FALSE);
sInFriendSecretBase = FALSE;
- sub_80EEA70();
+ TryPutSecretBaseSecretsOnAir();
VarSet(VAR_SECRET_BASE_STEP_COUNTER, 0);
VarSet(VAR_SECRET_BASE_LAST_ITEM_USED, 0);
VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, 0);
@@ -1748,252 +1750,245 @@ void sub_80EB218(void)
}
}
-void sub_80EB290(void)
+void CheckInteractedWithFriendsDollDecor(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x800);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_DOLL);
}
-void sub_80EB2C8(void)
+void CheckInteractedWithFriendsCushionDecor(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x400);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_CUSHION);
}
-void sub_80EB300(void)
+void DeclinedSecretBaseBattle(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~0x3800);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~0x001);
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x2000);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~(SECRET_BASE_BATTLED_WON | SECRET_BASE_BATTLED_LOST | SECRET_BASE_DECLINED_BATTLE));
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~(SECRET_BASE_BATTLED_DRAW));
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_DECLINED_BATTLE);
}
}
-void sub_80EB368(void)
+void WonSecretBaseBattle(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~0x3800);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~0x001);
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x800);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~(SECRET_BASE_BATTLED_WON | SECRET_BASE_BATTLED_LOST | SECRET_BASE_DECLINED_BATTLE));
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~(SECRET_BASE_BATTLED_DRAW));
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_BATTLED_WON);
}
}
-void sub_80EB3D0(void)
+void LostSecretBaseBattle(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~0x3800);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~0x001);
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x1000);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~(SECRET_BASE_BATTLED_WON | SECRET_BASE_BATTLED_LOST | SECRET_BASE_DECLINED_BATTLE));
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~(SECRET_BASE_BATTLED_DRAW));
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_BATTLED_LOST);
}
}
-void sub_80EB438(void)
+void DrewSecretBaseBattle(void)
{
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~0x3800);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~0x001);
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x001);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) & ~(SECRET_BASE_BATTLED_WON | SECRET_BASE_BATTLED_LOST | SECRET_BASE_DECLINED_BATTLE));
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) & ~(SECRET_BASE_BATTLED_DRAW));
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_BATTLED_DRAW);
}
}
-void SetSecretBaseSecretsTvFlags_Poster(void)
+void CheckInteractedWithFriendsPosterDecor(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch (MapGridGetMetatileIdAt(x, y))
{
- case 0x31C:
- case 0x31D:
- case 0x31E:
- case 0x31F:
- case 0x324:
- case 0x325:
- case 0x326:
- case 0x327:
- case 0x32C:
- case 0x32D:
- case 0x330:
- case 0x331:
- case 0x332:
- case 0x333:
- case 0x334:
+ case METATILE_SecretBase_PikaPoster_Left:
+ case METATILE_SecretBase_PikaPoster_Right:
+ case METATILE_SecretBase_LongPoster_Left:
+ case METATILE_SecretBase_LongPoster_Right:
+ case METATILE_SecretBase_SeaPoster_Left:
+ case METATILE_SecretBase_SeaPoster_Right:
+ case METATILE_SecretBase_SkyPoster_Left:
+ case METATILE_SecretBase_SkyPoster_Right:
+ case METATILE_SecretBase_KissPoster_Left:
+ case METATILE_SecretBase_KissPoster_Right:
+ case METATILE_SecretBase_BallPoster:
+ case METATILE_SecretBase_GreenPoster:
+ case METATILE_SecretBase_RedPoster:
+ case METATILE_SecretBase_BluePoster:
+ case METATILE_SecretBase_CutePoster:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x4000);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_POSTER);
break;
}
}
-void SetSecretBaseSecretsTvFlags_MiscFurnature(void)
+void CheckInteractedWithFriendsFurnitureBottom(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch (MapGridGetMetatileIdAt(x, y))
{
- case 0x28a:
- case 0x28b:
- // Bird Statue
+ case METATILE_SecretBase_GlassOrnament_Base1:
+ case METATILE_SecretBase_GlassOrnament_Base2:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x40);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_GLASS_ORNAMENT);
break;
- case 0x2d8:
- case 0x2d9:
- case 0x2da:
- case 0x2db:
- case 0x2dc:
- case 0x2dd:
- case 0x2e8:
- case 0x2e9:
- case 0x2ea:
- case 0x2eb:
- case 0x2ec:
- case 0x2ed:
- case 0x2ee:
- case 0x2ef:
- case 0x2f8:
- case 0x2f9:
- case 0x2fa:
- case 0x2fb:
- // Plants
+ case METATILE_SecretBase_RedPlant_Base1:
+ case METATILE_SecretBase_RedPlant_Base2:
+ case METATILE_SecretBase_TropicalPlant_Base1:
+ case METATILE_SecretBase_TropicalPlant_Base2:
+ case METATILE_SecretBase_PrettyFlower_Base1:
+ case METATILE_SecretBase_PrettyFlower_Base2:
+ case METATILE_SecretBase_ColorfulFlowers_BaseLeft1:
+ case METATILE_SecretBase_ColorfulFlowers_BaseRight1:
+ case METATILE_SecretBase_ColorfulFlowers_BaseLeft2:
+ case METATILE_SecretBase_ColorfulFlowers_BaseRight2:
+ case METATILE_SecretBase_BigPlant_BaseLeft1:
+ case METATILE_SecretBase_BigPlant_BaseRight1:
+ case METATILE_SecretBase_BigPlant_BaseLeft2:
+ case METATILE_SecretBase_BigPlant_BaseRight2:
+ case METATILE_SecretBase_GorgeousPlant_BaseLeft1:
+ case METATILE_SecretBase_GorgeousPlant_BaseRight1:
+ case METATILE_SecretBase_GorgeousPlant_BaseLeft2:
+ case METATILE_SecretBase_GorgeousPlant_BaseRight2:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | 0x8);
+ VarSet(VAR_SECRET_BASE_LOW_TV_FLAGS, VarGet(VAR_SECRET_BASE_LOW_TV_FLAGS) | SECRET_BASE_USED_PLANT);
break;
- case 0x22c:
- case 0x233:
- // Fence
+ case METATILE_SecretBase_Fence_Horizontal:
+ case METATILE_SecretBase_Fence_Vertical:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x40);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_FENCE);
break;
- case 0x288:
- case 0x289:
- // Tire
+ case METATILE_SecretBase_Tire_BottomLeft:
+ case METATILE_SecretBase_Tire_BottomRight:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x100);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_TIRE);
break;
- case 0x22d:
- case 0x22e:
- case 0x22f:
- // Bricks
+ case METATILE_SecretBase_RedBrick_Bottom:
+ case METATILE_SecretBase_YellowBrick_Bottom:
+ case METATILE_SecretBase_BlueBrick_Bottom:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x10);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BRICK);
break;
- case 0x287:
- case 0x28f:
- case 0x298:
- case 0x299:
- case 0x29a:
- case 0x29b:
- case 0x29c:
- case 0x29d:
- case 0x29e:
- case 0x29f:
- case 0x2ab:
- case 0x2b0:
- case 0x2b1:
- case 0x2b2:
- case 0x2b4:
- case 0x2b5:
- case 0x2b6:
- case 0x2b7:
- case 0x2cb:
- case 0x2cc:
- case 0x2cd:
- case 0x2ce:
- case 0x2cf:
- // Tables
+ case METATILE_SecretBase_SmallDesk:
+ case METATILE_SecretBase_PokemonDesk:
+ case METATILE_SecretBase_HeavyDesk_BottomLeft:
+ case METATILE_SecretBase_HeavyDesk_BottomMid:
+ case METATILE_SecretBase_HeavyDesk_BottomRight:
+ case METATILE_SecretBase_RaggedDesk_BottomLeft:
+ case METATILE_SecretBase_RaggedDesk_BottomMid:
+ case METATILE_SecretBase_RaggedDesk_BottomRight:
+ case METATILE_SecretBase_ComfortDesk_BottomLeft:
+ case METATILE_SecretBase_ComfortDesk_BottomMid:
+ case METATILE_SecretBase_ComfortDesk_BottomRight:
+ case METATILE_SecretBase_BrickDesk_BottomLeft:
+ case METATILE_SecretBase_BrickDesk_BottomMid:
+ case METATILE_SecretBase_BrickDesk_BottomRight:
+ case METATILE_SecretBase_CampDesk_BottomLeft:
+ case METATILE_SecretBase_CampDesk_BottomMid:
+ case METATILE_SecretBase_CampDesk_BottomRight:
+ case METATILE_SecretBase_HardDesk_BottomLeft:
+ case METATILE_SecretBase_HardDesk_BottomMid:
+ case METATILE_SecretBase_HardDesk_BottomRight:
+ case METATILE_SecretBase_PrettyDesk_BottomLeft:
+ case METATILE_SecretBase_PrettyDesk_BottomMid:
+ case METATILE_SecretBase_PrettyDesk_BottomRight:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x8);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_DESK);
break;
}
}
-void SetSecretBaseSecretsTvFlags_LargeDecorationSpot(void)
+void CheckInteractedWithFriendsFurnitureMiddle(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch (MapGridGetMetatileIdAt(x, y))
{
- case 0x291:
- case 0x294:
- case 0x297:
- case 0x2a1:
- case 0x2a5:
- case 0x2a9:
- case 0x2ad:
- case 0x2bb:
- case 0x2be:
- case 0x2c3:
- case 0x2c6:
+ case METATILE_SecretBase_HeavyDesk_TopMid:
+ case METATILE_SecretBase_RaggedDesk_TopMid:
+ case METATILE_SecretBase_ComfortDesk_TopMid:
+ case METATILE_SecretBase_BrickDesk_TopMid:
+ case METATILE_SecretBase_BrickDesk_Center:
+ case METATILE_SecretBase_CampDesk_TopMid:
+ case METATILE_SecretBase_CampDesk_Center:
+ case METATILE_SecretBase_HardDesk_TopMid:
+ case METATILE_SecretBase_HardDesk_Center:
+ case METATILE_SecretBase_PrettyDesk_TopMid:
+ case METATILE_SecretBase_PrettyDesk_Center:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x8);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_DESK);
break;
}
}
-void SetSecretBaseSecretsTvFlags_SmallDecorationSpot(void)
+void CheckInteractedWithFriendsFurnitureTop(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch (MapGridGetMetatileIdAt(x, y))
{
- case 0x290:
- case 0x292:
- case 0x293:
- case 0x295:
- case 0x296:
- case 0x2a0:
- case 0x2a2:
- case 0x2a3:
- case 0x2a4:
- case 0x2a6:
- case 0x2a7:
- case 0x2a8:
- case 0x2aa:
- case 0x2ac:
- case 0x2ae:
- case 0x2af:
- case 0x2bc:
- case 0x2bd:
- case 0x2bf:
- case 0x2c4:
- case 0x2c5:
- case 0x2c7:
+ case METATILE_SecretBase_HeavyDesk_TopLeft:
+ case METATILE_SecretBase_HeavyDesk_TopRight:
+ case METATILE_SecretBase_RaggedDesk_TopLeft:
+ case METATILE_SecretBase_RaggedDesk_TopRight:
+ case METATILE_SecretBase_ComfortDesk_TopLeft:
+ case METATILE_SecretBase_ComfortDesk_TopRight:
+ case METATILE_SecretBase_BrickDesk_TopLeft:
+ case METATILE_SecretBase_BrickDesk_TopRight:
+ case METATILE_SecretBase_BrickDesk_MidLeft:
+ case METATILE_SecretBase_BrickDesk_MidRight:
+ case METATILE_SecretBase_CampDesk_TopLeft:
+ case METATILE_SecretBase_CampDesk_TopRight:
+ case METATILE_SecretBase_CampDesk_MidLeft:
+ case METATILE_SecretBase_CampDesk_MidRight:
+ case METATILE_SecretBase_HardDesk_TopLeft:
+ case METATILE_SecretBase_HardDesk_TopRight:
+ case METATILE_SecretBase_HardDesk_MidLeft:
+ case METATILE_SecretBase_HardDesk_MidRight:
+ case METATILE_SecretBase_PrettyDesk_TopLeft:
+ case METATILE_SecretBase_PrettyDesk_TopRight:
+ case METATILE_SecretBase_PrettyDesk_MidLeft:
+ case METATILE_SecretBase_PrettyDesk_MidRight:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x8);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_DESK);
break;
- case 0x280:
- case 0x281:
+ case METATILE_SecretBase_Tire_TopLeft:
+ case METATILE_SecretBase_Tire_TopRight:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x100);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_TIRE);
break;
- case 0x225:
- case 0x226:
- case 0x227:
+ case METATILE_SecretBase_RedBrick_Top:
+ case METATILE_SecretBase_YellowBrick_Top:
+ case METATILE_SecretBase_BlueBrick_Top:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x10);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_BRICK);
break;
}
}
-void SetSecretBaseSecretsTvFlags_SandOrnament(void)
+void CheckInteractedWithFriendsSandOrnament(void)
{
s16 x, y;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
switch ((int)MapGridGetMetatileIdAt(x, y))
{
- case 0x28d:
- case 0x28e:
- // Sand Ornament
+ case METATILE_SecretBase_SandOrnament_Base1:
+ case METATILE_SecretBase_SandOrnament_Base2:
if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
- VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | 0x4);
+ VarSet(VAR_SECRET_BASE_HIGH_TV_FLAGS, VarGet(VAR_SECRET_BASE_HIGH_TV_FLAGS) | SECRET_BASE_USED_SAND_ORNAMENT);
break;
}
}
diff --git a/src/shop.c b/src/shop.c
index bf15568fb..6e6c10e43 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;
@@ -347,7 +348,7 @@ static void Task_HandleShopMenuBuy(u8 taskId)
data[8] = (u32)CB2_InitBuyMenu >> 16;
data[9] = (u32)CB2_InitBuyMenu;
gTasks[taskId].func = Task_GoToBuyOrSellMenu;
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
}
static void Task_HandleShopMenuSell(u8 taskId)
@@ -356,7 +357,7 @@ static void Task_HandleShopMenuSell(u8 taskId)
data[8] = (u32)CB2_GoToSellMenu >> 16;
data[9] = (u32)CB2_GoToSellMenu;
gTasks[taskId].func = Task_GoToBuyOrSellMenu;
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
}
void CB2_ExitSellMenu(void)
@@ -389,7 +390,7 @@ static void Task_GoToBuyOrSellMenu(u8 taskId)
static void MapPostLoadHook_ReturnToShopMenu(void)
{
- pal_fill_black();
+ FadeInFromBlack();
CreateTask(Task_ReturnToShopMenu, 8);
}
@@ -438,7 +439,7 @@ static void CB2_InitBuyMenu(void)
{
case 0:
SetVBlankHBlankCallbacksToNull();
- CpuFastFill(0, (void *)OAM, 0x400);
+ CpuFastFill(0, (void *)OAM, OAM_SIZE);
ScanlineEffect_Stop();
reset_temp_tile_data_buffers();
FreeAllSpritePalettes();
@@ -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);
}
@@ -855,7 +856,7 @@ static void BuyMenuDrawEventObjects(void)
if (BuyMenuCheckIfEventObjectOverlapsMenuBg(gShopDataPtr->viewportObjects[i]) == TRUE)
{
gSprites[spriteId].subspriteTableNum = 4;
- gSprites[spriteId].subspriteMode = 1;
+ gSprites[spriteId].subspriteMode = SUBSPRITES_ON;
}
StartSpriteAnim(&gSprites[spriteId], gShopDataPtr->viewportObjects[i][ANIM_NUM]);
@@ -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..a7dcd1613 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"
@@ -453,7 +453,7 @@ const struct WindowTemplate gUnknown_085A7444 =
0, 1, 3, 20, 13, 13, 1
};
-const u8 gColors_ReeltimeHelp[] = {3, 1, 2, 0};
+static const u8 sColors_ReeltimeHelp[] = {TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY};
bool8 (*const SlotActions[])(struct Task *task) =
{
@@ -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)
@@ -3126,7 +3126,7 @@ static void InfoBox_8104B80(struct Task *task)
static void InfoBox_AddText(struct Task *task)
{
- AddTextPrinterParameterized3(1, 1, 2, 5, gColors_ReeltimeHelp, 0, gText_ReelTimeHelp);
+ AddTextPrinterParameterized3(1, 1, 2, 5, sColors_ReeltimeHelp, 0, gText_ReelTimeHelp);
CopyWindowToVram(1, 3);
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB(0, 0, 0));
task->data[0]++;
diff --git a/src/smokescreen.c b/src/smokescreen.c
index 61e011451..1ee0c658c 100644
--- a/src/smokescreen.c
+++ b/src/smokescreen.c
@@ -4,46 +4,46 @@
#include "sprite.h"
#include "util.h"
-static void sub_8075370(struct Sprite *);
+static void SmokescreenImpact_Callback(struct Sprite *);
-extern const struct CompressedSpriteSheet gUnknown_0831C620;
-extern const struct CompressedSpritePalette gUnknown_0831C628;
-extern const struct SpriteTemplate gUnknown_0831C688;
+extern const struct CompressedSpriteSheet gSmokescreenImpactSpriteSheet;
+extern const struct CompressedSpritePalette gSmokescreenlImpactSpritePalette;
+extern const struct SpriteTemplate gSmokescreenImpactSpriteTemplate;
-u8 sub_807521C(s16 x, s16 y, u8 a3)
+u8 SmokescreenImpact(s16 x, s16 y, u8 a3)
{
u8 mainSpriteId;
u8 spriteId1, spriteId2, spriteId3, spriteId4;
struct Sprite *mainSprite;
- if (GetSpriteTileStartByTag(gUnknown_0831C620.tag) == 0xFFFF)
+ if (GetSpriteTileStartByTag(gSmokescreenImpactSpriteSheet.tag) == 0xFFFF)
{
- LoadCompressedSpriteSheetUsingHeap(&gUnknown_0831C620);
- LoadCompressedSpritePaletteUsingHeap(&gUnknown_0831C628);
+ LoadCompressedSpriteSheetUsingHeap(&gSmokescreenImpactSpriteSheet);
+ LoadCompressedSpritePaletteUsingHeap(&gSmokescreenlImpactSpritePalette);
}
- mainSpriteId = CreateInvisibleSpriteWithCallback(sub_8075370);
+ mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback);
mainSprite = &gSprites[mainSpriteId];
mainSprite->data[1] = a3;
- spriteId1 = CreateSprite(&gUnknown_0831C688, x - 16, y - 16, 2);
+ spriteId1 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2);
gSprites[spriteId1].data[0] = mainSpriteId;
mainSprite->data[0]++;
AnimateSprite(&gSprites[spriteId1]);
- spriteId2 = CreateSprite(&gUnknown_0831C688, x, y - 16, 2);
+ spriteId2 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y - 16, 2);
gSprites[spriteId2].data[0] = mainSpriteId;
mainSprite->data[0]++;
StartSpriteAnim(&gSprites[spriteId2], 1);
AnimateSprite(&gSprites[spriteId2]);
- spriteId3 = CreateSprite(&gUnknown_0831C688, x - 16, y, 2);
+ spriteId3 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y, 2);
gSprites[spriteId3].data[0] = mainSpriteId;
mainSprite->data[0]++;
StartSpriteAnim(&gSprites[spriteId3], 2);
AnimateSprite(&gSprites[spriteId3]);
- spriteId4 = CreateSprite(&gUnknown_0831C688, x, y, 2);
+ spriteId4 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y, 2);
gSprites[spriteId4].data[0] = mainSpriteId;
mainSprite->data[0]++;
StartSpriteAnim(&gSprites[spriteId4], 3);
@@ -52,12 +52,12 @@ u8 sub_807521C(s16 x, s16 y, u8 a3)
return mainSpriteId;
}
-static void sub_8075370(struct Sprite *sprite)
+static void SmokescreenImpact_Callback(struct Sprite *sprite)
{
if (!sprite->data[0])
{
- FreeSpriteTilesByTag(gUnknown_0831C620.tag);
- FreeSpritePaletteByTag(gUnknown_0831C628.tag);
+ FreeSpriteTilesByTag(gSmokescreenImpactSpriteSheet.tag);
+ FreeSpritePaletteByTag(gSmokescreenlImpactSpritePalette.tag);
if (!sprite->data[1])
DestroySprite(sprite);
else
@@ -65,7 +65,7 @@ static void sub_8075370(struct Sprite *sprite)
}
}
-void sub_80753B4(struct Sprite *sprite)
+void SpriteCB_DestroySprite(struct Sprite *sprite)
{
if (sprite->animEnded)
{
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..a816f4f2f 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -83,7 +83,7 @@ EWRAM_DATA static u8 sBattlePyramidFloorWindowId = 0;
EWRAM_DATA static u8 sStartMenuCursorPos = 0;
EWRAM_DATA static u8 sNumStartMenuActions = 0;
EWRAM_DATA static u8 sCurrentStartMenuActions[9] = {0};
-EWRAM_DATA static u8 sUnknown_02037619[2] = {0};
+EWRAM_DATA static u8 sInitStartMenuData[2] = {0};
EWRAM_DATA static u8 (*sSaveDialogCallback)(void) = NULL;
EWRAM_DATA static u8 sSaveDialogTimer = 0;
@@ -135,9 +135,7 @@ static void StartMenuTask(u8 taskId);
static void SaveGameTask(u8 taskId);
static void sub_80A0550(u8 taskId);
static void sub_80A08A4(u8 taskId);
-
-// Some other callback
-static bool8 sub_809FA00(void);
+static bool8 FieldCB_ReturnToFieldStartMenu(void);
static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
@@ -203,7 +201,7 @@ static void BuildLinkModeStartMenu(void);
static void BuildUnionRoomStartMenu(void);
static void BuildBattlePikeStartMenu(void);
static void BuildBattlePyramidStartMenu(void);
-static void BuildMultiBattleRoomStartMenu(void);
+static void BuildMultiPartnerRoomStartMenu(void);
static void ShowSafariBallsWindow(void);
static void ShowPyramidFloorWindow(void);
static void RemoveExtraStartMenuWindows(void);
@@ -258,9 +256,9 @@ static void BuildStartMenuActions(void)
{
BuildBattlePyramidStartMenu();
}
- else if (InMultiBattleRoom())
+ else if (InMultiPartnerRoom())
{
- BuildMultiBattleRoomStartMenu();
+ BuildMultiPartnerRoomStartMenu();
}
else
{
@@ -358,7 +356,7 @@ static void BuildBattlePyramidStartMenu(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildMultiBattleRoomStartMenu(void)
+static void BuildMultiPartnerRoomStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_PLAYER);
@@ -440,33 +438,33 @@ static bool32 PrintStartMenuActions(s8 *pIndex, u32 count)
static bool32 InitStartMenuStep(void)
{
- s8 value = sUnknown_02037619[0];
+ s8 state = sInitStartMenuData[0];
- switch (value)
+ switch (state)
{
case 0:
- sUnknown_02037619[0]++;
+ sInitStartMenuData[0]++;
break;
case 1:
BuildStartMenuActions();
- sUnknown_02037619[0]++;
+ sInitStartMenuData[0]++;
break;
case 2:
sub_81973A4();
DrawStdWindowFrame(sub_81979C4(sNumStartMenuActions), FALSE);
- sUnknown_02037619[1] = 0;
- sUnknown_02037619[0]++;
+ sInitStartMenuData[1] = 0;
+ sInitStartMenuData[0]++;
break;
case 3:
if (GetSafariZoneFlag())
ShowSafariBallsWindow();
if (InBattlePyramid())
ShowPyramidFloorWindow();
- sUnknown_02037619[0]++;
+ sInitStartMenuData[0]++;
break;
case 4:
- if (PrintStartMenuActions(&sUnknown_02037619[1], 2))
- sUnknown_02037619[0]++;
+ if (PrintStartMenuActions(&sInitStartMenuData[1], 2))
+ sInitStartMenuData[0]++;
break;
case 5:
sStartMenuCursorPos = sub_81983AC(GetStartMenuWindowId(), 1, 0, 9, 16, sNumStartMenuActions, sStartMenuCursorPos);
@@ -479,8 +477,8 @@ static bool32 InitStartMenuStep(void)
static void InitStartMenu(void)
{
- sUnknown_02037619[0] = 0;
- sUnknown_02037619[1] = 0;
+ sInitStartMenuData[0] = 0;
+ sInitStartMenuData[1] = 0;
while (!InitStartMenuStep())
;
}
@@ -495,31 +493,31 @@ static void CreateStartMenuTask(TaskFunc followupFunc)
{
u8 taskId;
- sUnknown_02037619[0] = 0;
- sUnknown_02037619[1] = 0;
+ sInitStartMenuData[0] = 0;
+ sInitStartMenuData[1] = 0;
taskId = CreateTask(StartMenuTask, 0x50);
SetTaskFuncWithFollowupFunc(taskId, StartMenuTask, followupFunc);
}
-static bool8 sub_809FA00(void)
+static bool8 FieldCB_ReturnToFieldStartMenu(void)
{
if (InitStartMenuStep() == FALSE)
{
return FALSE;
}
- sub_80AF688();
+ ReturnToFieldOpenStartMenu();
return TRUE;
}
-void sub_809FA18(void) // Called from field_screen.s
+void ShowReturnToFieldStartMenu(void)
{
- sUnknown_02037619[0] = 0;
- sUnknown_02037619[1] = 0;
- gFieldCallback2 = sub_809FA00;
+ sInitStartMenuData[0] = 0;
+ sInitStartMenuData[1] = 0;
+ gFieldCallback2 = FieldCB_ReturnToFieldStartMenu;
}
-void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s
+void Task_ShowStartMenu(u8 taskId)
{
struct Task* task = &gTasks[taskId];
@@ -539,7 +537,7 @@ void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s
}
}
-void ShowStartMenu(void) // Called from overworld.c and field_control_avatar.s
+void ShowStartMenu(void)
{
if (!IsUpdateLinkStateCBActive())
{
@@ -547,7 +545,7 @@ void ShowStartMenu(void) // Called from overworld.c and field_control_avatar.s
sub_808B864();
sub_808BCF4();
}
- CreateStartMenuTask(sub_809FA34);
+ CreateStartMenuTask(Task_ShowStartMenu);
ScriptContext2_Enable();
}
@@ -570,7 +568,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;
}
@@ -581,7 +579,7 @@ static bool8 HandleStartMenuInput(void)
&& gMenuCallback != StartMenuSafariZoneRetireCallback
&& gMenuCallback != StartMenuBattlePyramidRetireCallback)
{
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
}
return FALSE;
@@ -743,11 +741,12 @@ static bool8 StartMenuBattlePyramidRetireCallback(void)
return FALSE;
}
-void sub_809FDD4(void)
+// Functionally unused
+void ShowBattlePyramidStartMenu(void)
{
ClearDialogWindowAndFrameToTransparent(0, FALSE);
ScriptUnfreezeEventObjects();
- CreateStartMenuTask(sub_809FA34);
+ CreateStartMenuTask(Task_ShowStartMenu);
ScriptContext2_Enable();
}
@@ -827,7 +826,7 @@ static bool8 BattlePyramidRetireCallback(void)
ClearDialogWindowAndFrameToTransparent(0, TRUE);
ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
- ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88);
+ ScriptContext1_SetupScript(BattlePyramid_Retire);
return TRUE;
}
@@ -853,7 +852,7 @@ static u8 RunSaveCallback(void)
return sSaveDialogCallback();
}
-void SaveGame(void) // Called from cable_club.s
+void SaveGame(void)
{
InitSave();
CreateTask(SaveGameTask, 0x50);
@@ -967,8 +966,8 @@ static u8 SaveConfirmInputCallback(void)
case 0: // Yes
switch (gSaveFileStatus)
{
- case 0:
- case 2:
+ case SAVE_STATUS_EMPTY:
+ case SAVE_STATUS_CORRUPT:
if (gDifferentSaveFile == FALSE)
{
sSaveDialogCallback = SaveFileExistsCallback;
@@ -1048,7 +1047,7 @@ static u8 SaveDoSaveCallback(void)
u8 saveStatus;
IncrementGameStat(GAME_STAT_SAVED_GAME);
- sub_81A9E90();
+ PausePyramidChallenge();
if (gDifferentSaveFile == TRUE)
{
@@ -1060,14 +1059,10 @@ static u8 SaveDoSaveCallback(void)
saveStatus = TrySavingData(SAVE_NORMAL);
}
- if (saveStatus == 1) // Save succeded
- {
+ if (saveStatus == SAVE_STATUS_OK)
ShowSaveMessage(gText_PlayerSavedGame, SaveSuccessCallback);
- }
- else // Save error
- {
+ else
ShowSaveMessage(gText_SaveError, SaveErrorCallback);
- }
SaveStartTimer();
return SAVE_IN_PROGRESS;
@@ -1202,7 +1197,7 @@ static bool32 sub_80A03E4(u8 *par1)
return FALSE;
}
-void sub_80A0514(void) // Called from cable_club.s
+void sub_80A0514(void)
{
if (sub_80A03E4(&gMain.state))
{
@@ -1371,7 +1366,7 @@ static void sub_80A08A4(u8 taskId)
}
}
-void sub_80A08CC(void) // Referenced in data/specials.inc and data/scripts/maps/BattleFrontier_BattleTowerLobby.inc
+void sub_80A08CC(void)
{
u8 taskId = CreateTask(sub_8153688, 0x5);
gTasks[taskId].data[2] = 1;
@@ -1386,7 +1381,7 @@ static void HideStartMenuWindow(void)
ScriptContext2_Disable();
}
-void HideStartMenu(void) // Called from map_name_popup.s
+void HideStartMenu(void)
{
PlaySE(SE_SELECT);
HideStartMenuWindow();
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 5524d407b..348491992 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -112,16 +112,16 @@ static const struct WindowTemplate gUnknown_085B1DE4 =
static const u8 sPokeballCoords[STARTER_MON_COUNT][2] =
{
- {0x3c, 0x40},
- {0x78, 0x58},
- {0xb4, 0x40},
+ {60, 64},
+ {120, 88},
+ {180, 64},
};
-static const u8 gStarterChoose_LabelCoords[][2] =
+static const u8 sStarterLabelCoords[][2] =
{
- {0x00, 0x09},
- {0x10, 0x0a},
- {0x08, 0x04},
+ {0, 9},
+ {16, 10},
+ {8, 4},
};
static const u16 sStarterMon[STARTER_MON_COUNT] =
@@ -162,15 +162,15 @@ static const struct BgTemplate gUnknown_085B1E00[3] =
},
};
-static const u8 gUnknown_085B1E0C[] = {0x00, 0x01, 0x03};
+static const u8 sTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GREY};
static const struct OamData gOamData_85B1E10 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -184,10 +184,10 @@ static const struct OamData gOamData_85B1E10 =
static const struct OamData gOamData_85B1E18 =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x32),
.x = 0,
.matrixNum = 0,
@@ -201,10 +201,10 @@ static const struct OamData gOamData_85B1E18 =
static const struct OamData gOamData_85B1E20 =
{
.y = 160,
- .affineMode = 3,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -215,11 +215,11 @@ static const struct OamData gOamData_85B1E20 =
.affineParam = 0,
};
-static const u8 gUnknown_085B1E28[][2] =
+static const u8 sCursorCoords[][2] =
{
- {0x3c, 0x20},
- {0x78, 0x38},
- {0xb4, 0x20},
+ {60, 32},
+ {120, 56},
+ {180, 32},
};
static const union AnimCmd gSpriteAnim_85B1E30[] =
@@ -579,36 +579,36 @@ static void Task_StarterChoose6(u8 taskId)
static void CreateStarterPokemonLabel(u8 selection)
{
- u8 text[32];
+ u8 categoryText[32];
struct WindowTemplate winTemplate;
const u8 *speciesName;
s32 width;
u8 labelLeft, labelRight, labelTop, labelBottom;
u16 species = GetStarterPokemon(selection);
- CopyMonCategoryText(SpeciesToNationalPokedexNum(species), text);
+ CopyMonCategoryText(SpeciesToNationalPokedexNum(species), categoryText);
speciesName = gSpeciesNames[species];
winTemplate = gUnknown_085B1DE4;
- winTemplate.tilemapLeft = gStarterChoose_LabelCoords[selection][0];
- winTemplate.tilemapTop = gStarterChoose_LabelCoords[selection][1];
+ winTemplate.tilemapLeft = sStarterLabelCoords[selection][0];
+ winTemplate.tilemapTop = sStarterLabelCoords[selection][1];
sStarterChooseWindowId = AddWindow(&winTemplate);
FillWindowPixelBuffer(sStarterChooseWindowId, PIXEL_FILL(0));
- width = GetStringCenterAlignXOffset(7, text, 0x68);
- AddTextPrinterParameterized3(sStarterChooseWindowId, 7, width, 1, gUnknown_085B1E0C, 0, text);
+ width = GetStringCenterAlignXOffset(7, categoryText, 0x68);
+ AddTextPrinterParameterized3(sStarterChooseWindowId, 7, width, 1, sTextColors, 0, categoryText);
width = GetStringCenterAlignXOffset(1, speciesName, 0x68);
- AddTextPrinterParameterized3(sStarterChooseWindowId, 1, width, 0x11, gUnknown_085B1E0C, 0, speciesName);
+ AddTextPrinterParameterized3(sStarterChooseWindowId, 1, width, 0x11, sTextColors, 0, speciesName);
PutWindowTilemap(sStarterChooseWindowId);
schedule_bg_copy_tilemap_to_vram(0);
- labelLeft = gStarterChoose_LabelCoords[selection][0] * 8 - 4;
- labelRight = (gStarterChoose_LabelCoords[selection][0] + 13) * 8 + 4;
- labelTop = gStarterChoose_LabelCoords[selection][1] * 8;
- labelBottom = (gStarterChoose_LabelCoords[selection][1] + 4) * 8;
+ labelLeft = sStarterLabelCoords[selection][0] * 8 - 4;
+ labelRight = (sStarterLabelCoords[selection][0] + 13) * 8 + 4;
+ labelTop = sStarterLabelCoords[selection][1] * 8;
+ labelBottom = (sStarterLabelCoords[selection][1] + 4) * 8;
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(labelLeft, labelRight));
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(labelTop, labelBottom));
}
@@ -647,8 +647,8 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y)
void sub_81346DC(struct Sprite *sprite)
{
- sprite->pos1.x = gUnknown_085B1E28[gTasks[sprite->data[0]].tStarterSelection][0];
- sprite->pos1.y = gUnknown_085B1E28[gTasks[sprite->data[0]].tStarterSelection][1];
+ sprite->pos1.x = sCursorCoords[gTasks[sprite->data[0]].tStarterSelection][0];
+ sprite->pos1.y = sCursorCoords[gTasks[sprite->data[0]].tStarterSelection][1];
sprite->pos2.y = Sin(sprite->data[1], 8);
sprite->data[1] = (u8)(sprite->data[1]) + 4;
}
diff --git a/src/string_util.c b/src/string_util.c
deleted file mode 100644
index 39d235ab8..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[] =
- {
- ExpandPlaceholder_UnknownStringVar,
- ExpandPlaceholder_PlayerName,
- ExpandPlaceholder_StringVar1,
- ExpandPlaceholder_StringVar2,
- ExpandPlaceholder_StringVar3,
- ExpandPlaceholder_KunChan,
- ExpandPlaceholder_RivalName,
- ExpandPlaceholder_Version,
- ExpandPlaceholder_Aqua,
- ExpandPlaceholder_Magma,
- ExpandPlaceholder_Archie,
- ExpandPlaceholder_Maxie,
- ExpandPlaceholder_Kyogre,
- 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 ebc995f13..f0566c859 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -2,23 +2,23 @@
#include "strings.h"
ALIGNED(4)
-const u8 gExpandedPlaceholder_Empty[] = _("");
-const u8 gExpandedPlaceholder_Kun[] = _("");
-const u8 gExpandedPlaceholder_Chan[] = _("");
-const u8 gExpandedPlaceholder_Sapphire[] = _("SAPPHIRE");
-const u8 gExpandedPlaceholder_Ruby[] = _("RUBY");
-const u8 gExpandedPlaceholder_Emerald[] = _("EMERALD");
-const u8 gExpandedPlaceholder_Aqua[] = _("AQUA");
-const u8 gExpandedPlaceholder_Magma[] = _("MAGMA");
-const u8 gExpandedPlaceholder_Archie[] = _("ARCHIE");
-const u8 gExpandedPlaceholder_Maxie[] = _("MAXIE");
-const u8 gExpandedPlaceholder_Kyogre[] = _("KYOGRE");
-const u8 gExpandedPlaceholder_Groudon[] = _("GROUDON");
-const u8 gExpandedPlaceholder_Brendan[] = _("BRENDAN");
-const u8 gExpandedPlaceholder_May[] = _("MAY");
+const u8 gText_ExpandedPlaceholder_Empty[] = _("");
+const u8 gText_ExpandedPlaceholder_Kun[] = _("");
+const u8 gText_ExpandedPlaceholder_Chan[] = _("");
+const u8 gText_ExpandedPlaceholder_Sapphire[] = _("SAPPHIRE");
+const u8 gText_ExpandedPlaceholder_Ruby[] = _("RUBY");
+const u8 gText_ExpandedPlaceholder_Emerald[] = _("EMERALD");
+const u8 gText_ExpandedPlaceholder_Aqua[] = _("AQUA");
+const u8 gText_ExpandedPlaceholder_Magma[] = _("MAGMA");
+const u8 gText_ExpandedPlaceholder_Archie[] = _("ARCHIE");
+const u8 gText_ExpandedPlaceholder_Maxie[] = _("MAXIE");
+const u8 gText_ExpandedPlaceholder_Kyogre[] = _("KYOGRE");
+const u8 gText_ExpandedPlaceholder_Groudon[] = _("GROUDON");
+const u8 gText_ExpandedPlaceholder_Brendan[] = _("BRENDAN");
+const u8 gText_ExpandedPlaceholder_May[] = _("MAY");
const u8 gText_EggNickname[] = _("EGG");
const u8 gText_Pokemon[] = _("POKéMON");
-const u8 gProfBirchMatchCallName[] = _("PROF. BIRCH");
+const u8 gText_ProfBirchMatchCallName[] = _("PROF. BIRCH");
const u8 gText_MainMenuNewGame[] = _("NEW GAME");
const u8 gText_MainMenuContinue[] = _("CONTINUE");
const u8 gText_MainMenuOption[] = _("OPTION");
@@ -28,31 +28,31 @@ const u8 gText_MainMenuMysteryEvents[] = _("MYSTERY EVENTS");
const u8 gText_WirelessNotConnected[] = _("The Wireless Adapter is not\nconnected.");
const u8 gText_MysteryGiftCantUse[] = _("MYSTERY GIFT can't be used while\nthe Wireless Adapter is attached.");
const u8 gText_MysteryEventsCantUse[] = _("MYSTERY EVENTS can't be used while\nthe Wireless Adapter is attached.");
-const u8 gUnknown_085E836D[] = _("Updating save file using external\ndata. Please wait.");
-const u8 gUnknown_085E83A2[] = _("The save file has been updated.");
+const u8 gText_UpdatingSaveExternalData[] = _("Updating save file using external\ndata. Please wait."); // Unused
+const u8 gText_SaveFileUpdated[] = _("The save file has been updated."); // Unused
const u8 gText_SaveFileCorrupted[] = _("The save file is corrupted. The\nprevious save file will be loaded.");
const u8 gText_SaveFileErased[] = _("The save file has been erased\ndue to corruption or damage.");
const u8 gJPText_No1MSubCircuit[] = _("1Mサブきばんが ささっていません!");
const u8 gText_BatteryRunDry[] = _("The internal battery has run dry.\nThe game can be played.\pHowever, clock-based events will\nno longer occur.");
-const u8 gUnknown_085E84BF[] = _("PLAYER");
-const u8 gUnknown_085E84C6[] = _("POKéDEX");
-const u8 gText_MainMenuTime[] = _("TIME");
-const u8 gUnknown_085E84D3[] = _("BADGES");
-const u8 gUnknown_085E84DA[] = _("A Button");
-const u8 gUnknown_085E84E3[] = _("B Button");
-const u8 gUnknown_085E84EC[] = _("R Button");
-const u8 gUnknown_085E84F5[] = _("L Button");
-const u8 gUnknown_085E84FE[] = _("START");
-const u8 gUnknown_085E8504[] = _("SELECT");
-const u8 gUnknown_085E850B[] = _("+ Control Pad");
-const u8 gUnknown_085E8519[] = _("L Button R Button");
-const u8 gUnknown_085E852C[] = _("CONTROLS");
-ALIGNED(4) const u8 gUnknown_085E8538[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK");
-ALIGNED(4) const u8 gUnknown_085E8544[] = _("{A_BUTTON}NEXT");
-ALIGNED(4) const u8 gUnknown_085E854C[] = _("{A_BUTTON}NEXT {B_BUTTON}BACK");
+const u8 gText_Player[] = _("PLAYER"); // Unused
+const u8 gText_Pokedex[] = _("POKéDEX"); // Unused
+const u8 gText_Time[] = _("TIME");
+const u8 gText_Badges[] = _("BADGES"); // Unused
+const u8 gText_AButton[] = _("A Button"); // Unused
+const u8 gText_BButton[] = _("B Button"); // Unused
+const u8 gText_RButton[] = _("R Button"); // Unused
+const u8 gText_LButton[] = _("L Button"); // Unused
+const u8 gText_Start[] = _("START"); // Unused
+const u8 gText_Select[] = _("SELECT"); // Unused
+const u8 gText_ControlPad[] = _("+ Control Pad"); // Unused
+const u8 gText_LButtonRButton[] = _("L Button R Button"); // Unused
+const u8 gText_Controls[] = _("CONTROLS"); // Unused
+ALIGNED(4) const u8 gText_PickOk[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}OK"); // Unused
+ALIGNED(4) const u8 gText_Next[] = _("{A_BUTTON}NEXT"); // Unused
+ALIGNED(4) const u8 gText_NextBack[] = _("{A_BUTTON}NEXT {B_BUTTON}BACK"); // Unused
ALIGNED(4) const u8 gText_PickNextCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}NEXT {B_BUTTON}CANCEL");
ALIGNED(4) const u8 gText_PickCancel[] = _("{DPAD_UPDOWN}PICK {A_BUTTON}{B_BUTTON}CANCEL");
-ALIGNED(4) const u8 gText_UnkCtrlF800Exit[] = _("{A_BUTTON}EXIT");
+ALIGNED(4) const u8 gText_AButtonExit[] = _("{A_BUTTON}EXIT");
const u8 gText_BirchBoy[] = _("BOY");
const u8 gText_BirchGirl[] = _("GIRL");
const u8 gText_DefaultNameStu[] = _("STU");
@@ -99,28 +99,28 @@ const u8 gText_ThisIsAPokemon[] = _("This is what we call a “POKéMON.”{PAUS
const u8 gText_5MarksPokemon[] = _("????? POKéMON");
const u8 gText_UnkHeight[] = _("{CLEAR_TO 0x0C}??'??”");
const u8 gText_UnkWeight[] = _("????.? lbs.");
-const u8 gUnknown_085E86DC[] = _(" POKéMON");
-const u8 gUnknown_085E86FB[] = _("{CLEAR_TO 0x0C} ' ”");
-const u8 gUnknown_085E8709[] = _(" . lbs.");
-const u8 gUnknown_085E871A[] = _("");
+const u8 gText_EmptyPkmnCategory[] = _(" POKéMON"); // Unused
+const u8 gText_EmptyHeight[] = _("{CLEAR_TO 0x0C} ' ”"); // Unused
+const u8 gText_EmptyWeight[] = _(" . lbs."); // Unused
+const u8 gText_EmptyPokedexInfo1[] = _(""); // Unused
const u8 gText_CryOf[] = _("CRY OF");
-const u8 gUnknown_085E8722[] = _("");
+const u8 gText_EmptyPokedexInfo2[] = _(""); // Unused
const u8 gText_SizeComparedTo[] = _("SIZE COMPARED TO ");
const u8 gText_PokedexRegistration[] = _("POKéDEX registration completed.");
const u8 gText_HTHeight[] = _("HT");
const u8 gText_WTWeight[] = _("WT");
const u8 gText_SearchingPleaseWait[] = _("Searching…\nPlease wait.");
const u8 gText_SearchCompleted[] = _("Search completed.");
-const u8 gUnknown_085E8785[] = _("No matching POKéMON were found.");
-const u8 gUnknown_085E87A5[] = _("Search for POKéMON based on\nselected parameters.");
-const u8 gUnknown_085E87D6[] = _("Switch POKéDEX listings.");
-const u8 gUnknown_085E87EF[] = _("Return to the POKéDEX.");
-const u8 gUnknown_085E8806[] = _("Select the POKéDEX mode.");
-const u8 gUnknown_085E881F[] = _("Select the POKéDEX listing mode.");
-const u8 gUnknown_085E8840[] = _("List by the first letter in the name.\nSpotted POKéMON only.");
-const u8 gUnknown_085E887C[] = _("List by body color.\nSpotted POKéMON only.");
-const u8 gUnknown_085E88A6[] = _("List by type.\nOwned POKéMON only.");
-const u8 gUnknown_085E88C8[] = _("Execute search/switch.");
+const u8 gText_NoMatchingPkmnWereFound[] = _("No matching POKéMON were found.");
+const u8 gText_SearchForPkmnBasedOnParameters[] = _("Search for POKéMON based on\nselected parameters.");
+const u8 gText_SwitchPokedexListings[] = _("Switch POKéDEX listings.");
+const u8 gText_ReturnToPokedex[] = _("Return to the POKéDEX.");
+const u8 gText_SelectPokedexMode[] = _("Select the POKéDEX mode.");
+const u8 gText_SelectPokedexListingMode[] = _("Select the POKéDEX listing mode.");
+const u8 gText_ListByFirstLetter[] = _("List by the first letter in the name.\nSpotted POKéMON only.");
+const u8 gText_ListByBodyColor[] = _("List by body color.\nSpotted POKéMON only.");
+const u8 gText_ListByType[] = _("List by type.\nOwned POKéMON only.");
+const u8 gText_ExecuteSearchSwitch[] = _("Execute search/switch.");
const u8 gText_DexHoennTitle[] = _("HOENN DEX");
const u8 gText_DexNatTitle[] = _("NATIONAL DEX");
const u8 gText_DexSortNumericalTitle[] = _("NUMERICAL MODE");
@@ -160,7 +160,7 @@ const u8 gText_DexEmptyString[] = _("");
const u8 gText_DexSearchDontSpecify[] = _("DON'T SPECIFY.");
const u8 gText_DexSearchTypeNone[] = _("NONE");
const u8 gText_SelectorArrow[] = _("▶");
-const u8 gUnknown_085E8B3C[] = _(" ");
+const u8 gText_EmptySpace[] = _(" "); // Unused
const u8 gText_WelcomeToHOF[] = _("Welcome to the HALL OF FAME!");
const u8 gText_HOFDexRating[] = _("Spotted POKéMON: {STR_VAR_1}!\nOwned POKéMON: {STR_VAR_2}!\pPROF. BIRCH's POKéDEX rating!\pPROF. BIRCH: Let's see…\p");
const u8 gText_HOFDexSaving[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
@@ -169,12 +169,12 @@ const u8 gText_HOFNumber[] = _("HALL OF FAME No. {STR_VAR_1}");
const u8 gText_LeagueChamp[] = _("LEAGUE CHAMPION!\nCONGRATULATIONS!");
const u8 gText_Number[] = _("No. ");
const u8 gText_Level[] = _("Lv. ");
-const u8 gUnknown_085E8C40[] = _("IDNo. /");
+const u8 gText_IdNumberSlash[] = _("IDNo. /"); // Unused
const u8 gText_Name[] = _("NAME");
const u8 gText_IDNumber[] = _("IDNo.");
const u8 gText_BirchInTrouble[] = _("PROF. BIRCH is in trouble!\nRelease a POKéMON and rescue him!");
const u8 gText_ConfirmStarterChoice[] = _("Do you choose this POKéMON?");
-const u8 gUnknown_085E8CAC[] = _("POKéMON");
+const u8 gText_Pokemon4[] = _("POKéMON"); // Unused
const u8 gText_FlyToWhere[] = _("FLY to where?");
const u8 gMenuText_Use[] = _("USE");
const u8 gMenuText_Toss[] = _("TOSS");
@@ -187,7 +187,7 @@ const u8 gText_Cancel[] = _("CANCEL");
const u8 gText_Cancel2[] = _("CANCEL");
const u8 gMenuText_Show[] = _("SHOW");
const u8 gText_EmptyString2[] = _("");
-const u8 gUnknown_085E8D04[] = _("CANCEL");
+const u8 gText_Cancel7[] = _("CANCEL"); // Unused
const u8 gText_Item[] = _("ITEM");
const u8 gText_Mail[] = _("MAIL");
const u8 gText_Take[] = _("TAKE");
@@ -204,17 +204,17 @@ const u8 gText_ThreeDashes[] = _("---");
const u8 gText_MaleSymbol[] = _("♂");
const u8 gText_FemaleSymbol[] = _("♀");
const u8 gText_LevelSymbol[] = _("{LV}");
-const u8 gText_UnkCtrlF908Clear01[] = _("{NO}{CLEAR 0x01}");
-const u8 gUnknown_085E8D55[] = _("+");
-const u8 gUnknown_085E8D57[] = _("{RIGHT_ARROW}");
-const u8 gText_UnkCtrlF907F908[] = _("{ID}{NO}");
+const u8 gText_NumberClear01[] = _("{NO}{CLEAR 0x01}");
+const u8 gText_PlusSymbol[] = _("+"); // Unused
+const u8 gText_RightArrow[] = _("{RIGHT_ARROW}"); // Unused
+const u8 gText_IDNumber2[] = _("{ID}{NO}");
const u8 gText_Space[] = _(" ");
const u8 gText_SelectorArrow2[] = _("▶");
const u8 gText_GoBackPrevMenu[] = _("Go back to the\nprevious menu.");
const u8 gText_WhatWouldYouLike[] = _("What would you like to do?");
const u8 gMenuText_Give2[] = _("GIVE");
const u8 gText_xVar1[] = _("×{STR_VAR_1}");
-const u8 gUnknown_085E8DA4[] = _(" BERRY");
+const u8 gText_Berry2[] = _(" BERRY"); // Unused
const u8 gText_Coins[] = _("{STR_VAR_1} COINS");
const u8 gText_CloseBag[] = _("CLOSE BAG");
const u8 gText_Var1IsSelected[] = _("{STR_VAR_1} is\nselected.");
@@ -292,7 +292,7 @@ const u8 *const gPocketNamesStringsTable[] =
gText_KeyItemsPocket
};
-const u8 gText_UnkF908Var1Clear7Var2[] = _("{NO}{STR_VAR_1}{CLEAR 0x07}{STR_VAR_2}");
+const u8 gText_NumberVar1Clear7Var2[] = _("{NO}{STR_VAR_1}{CLEAR 0x07}{STR_VAR_2}");
const u8 gText_ClearTo11Var1Clear5Var2[] = _("{CLEAR_TO 0x11}{STR_VAR_1}{CLEAR 0x05}{STR_VAR_2}");
const u8 gText_SizeSlash[] = _("SIZE /");
const u8 gText_FirmSlash[] = _("FIRM /");
@@ -305,7 +305,7 @@ const u8 gBerryFirmnessString_Hard[] = _("Hard");
const u8 gBerryFirmnessString_VeryHard[] = _("Very hard");
const u8 gBerryFirmnessString_SuperHard[] = _("Super hard");
-const u8 gText_UnkF908Var1Var2[] = _("{NO}{STR_VAR_1} {STR_VAR_2}");
+const u8 gText_NumberVar1Var2[] = _("{NO}{STR_VAR_1} {STR_VAR_2}");
const u8 gText_BerryTag[] = _("BERRY TAG");
const u8 gText_RedPokeblock[] = _("RED {POKEBLOCK}");
const u8 gText_BluePokeblock[] = _("BLUE {POKEBLOCK}");
@@ -326,8 +326,8 @@ const u8 gText_Dry[] = _("DRY");
const u8 gText_Sweet[] = _("SWEET");
const u8 gText_Bitter[] = _("BITTER");
const u8 gText_Sour[] = _("SOUR");
-const u8 gUnknown_085E9339[] = _("TASTY");
-const u8 gUnknown_085E933F[] = _("FEEL");
+const u8 gText_Tasty[] = _("TASTY"); // Unused
+const u8 gText_Feel[] = _("FEEL"); // Unused
const u8 gText_StowCase[] = _("Stow CASE.");
const u8 gText_LvVar1[] = _("{LV}{STR_VAR_1}");
const u8 gText_ThrowAwayVar1[] = _("Throw away this\n{STR_VAR_1}?");
@@ -363,7 +363,7 @@ const u8 gText_Shift[] = _("SHIFT");
const u8 gText_SendOut[] = _("SEND OUT");
const u8 gText_Switch2[] = _("SWITCH");
const u8 gText_Summary5[] = _("SUMMARY");
-const u8 gUnknown_085E96BE[] = _("MOVES");
+const u8 gText_Moves[] = _("MOVES"); // Unused
const u8 gText_Enter[] = _("ENTER");
const u8 gText_NoEntry[] = _("NO ENTRY");
const u8 gText_Take2[] = _("TAKE");
@@ -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}");
@@ -411,7 +411,7 @@ const u8 gText_PkmnWokeUp2[] = _("{STR_VAR_1} woke up.{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnBurnHealed[] = _("{STR_VAR_1}'s burn was healed.{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnThawedOut[] = _("{STR_VAR_1} was thawed out.{PAUSE_UNTIL_PRESS}");
const u8 gText_PPWasRestored[] = _("PP was restored.{PAUSE_UNTIL_PRESS}");
-const u8 gUnknown_085E9CCA[] = _("{STR_VAR_1} regained health.{PAUSE_UNTIL_PRESS}");
+const u8 gText_PkmnRegainhedHealth[] = _("{STR_VAR_1} regained health.{PAUSE_UNTIL_PRESS}"); // Unused
const u8 gText_PkmnBecameHealthy[] = _("{STR_VAR_1} became healthy.{PAUSE_UNTIL_PRESS}");
const u8 gText_MovesPPIncreased[] = _("{STR_VAR_1}'s PP increased.{PAUSE_UNTIL_PRESS}");
const u8 gText_PkmnElevatedToLvVar2[] = _("{STR_VAR_1} was elevated to\nLv. {STR_VAR_2}.");
@@ -423,7 +423,7 @@ const u8 gText_PkmnSnappedOutOfConfusion[] = _("{STR_VAR_1} snapped out of its\n
const u8 gText_PkmnGotOverInfatuation[] = _("{STR_VAR_1} got over its\ninfatuation.{PAUSE_UNTIL_PRESS}");
const u8 gText_ThrowAwayItem[] = _("Throw away this\n{STR_VAR_1}?");
const u8 gText_ItemThrownAway[] = _("The {STR_VAR_1}\nwas thrown away.{PAUSE_UNTIL_PRESS}");
-const u8 gUnknown_085E9E2E[] = _("Teach which POKéMON?");
+const u8 gText_TeachWhichPokemon2[] = _("Teach which POKéMON?"); // Unused
const u8 gText_ChoosePokemon[] = _("Choose a POKéMON.");
const u8 gText_MoveToWhere[] = _("Move to where?");
const u8 gText_TeachWhichPokemon[] = _("Teach which POKéMON?");
@@ -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.");
@@ -487,7 +487,7 @@ const u8 gText_SpAtk4[] = _("SP. ATK");
const u8 gText_SpDef4[] = _("SP. DEF");
const u8 gText_Speed2[] = _("SPEED");
const u8 gText_HP4[] = _("HP");
-const u8 gUnknown_085EA364[] = _("");
+const u8 gText_EmptyString8[] = _(""); // Unused
const u8 gText_OTSlash[] = _("OT/");
const u8 gText_RentalPkmn[] = _("RENTAL POKéMON");
const u8 gText_TypeSlash[] = _("TYPE/");
@@ -500,7 +500,7 @@ const u8 gText_ExpPoints[] = _("EXP. POINTS");
const u8 gText_NextLv[] = _("NEXT LV.");
const u8 gText_RibbonsVar1[] = _("RIBBONS: {STR_VAR_1}");
const u8 gText_EmptyString5[] = _("");
-const u8 gUnknown_085EA3C1[] = _("EVENTS");
+const u8 gText_Events[] = _("EVENTS"); // Unused
const u8 gText_Switch[] = _("SWITCH");
const u8 gText_PkmnInfo[] = _("POKéMON INFO");
const u8 gText_PkmnSkills[] = _("POKéMON SKILLS");
@@ -530,7 +530,7 @@ const u8 gText_OkayToDeleteFromRegistry[] = _("Is it okay to delete {STR_VAR_1}\
const u8 gText_RegisteredDataDeleted[] = _("The registered data was deleted.{PAUSE_UNTIL_PRESS}");
const u8 gText_NoRegistry[] = _("There is no REGISTRY.{PAUSE_UNTIL_PRESS}");
const u8 gText_DelRegist[] = _("DEL REGIST.");
-const u8 gUnknown_085EA7A9[] = _("{STR_VAR_3}{STR_VAR_1}/{STR_VAR_2}");
+const u8 gText_Var3Var1SlashVar2[] = _("{STR_VAR_3}{STR_VAR_1}/{STR_VAR_2}"); // Unused
const u8 gText_Decorate[] = _("DECORATE");
const u8 gText_PutAway[] = _("PUT AWAY");
const u8 gText_Toss2[] = _("TOSS");
@@ -555,7 +555,7 @@ const u8 gText_CancelDecorating[] = _("Cancel decorating?");
const u8 gText_InUseAlready[] = _("This is in use already.");
const u8 gText_NoMoreDecorations[] = _("No more decorations can be placed.\nThe most that can be placed are {STR_VAR_1}.");
const u8 gText_NoMoreDecorations2[] = _("No more decorations can be placed.\nThe most that can be placed are {STR_VAR_1}.");
-const u8 gUnknown_085EA978[] = _("This can't be placed here.\nIt must be on a DESK, etc.");
+const u8 gText_MustBePlacedOnDesk[] = _("This can't be placed here.\nIt must be on a DESK, etc."); // Unused
const u8 gText_CantPlaceInRoom[] = _("This decoration can't be placed in\nyour own room.");
const u8 gText_CantThrowAwayInUse[] = _("This decoration is in use.\nIt can't be thrown away.");
const u8 gText_DecorationWillBeDiscarded[] = _("This {STR_VAR_1} will be discarded.\nIs that okay?");
@@ -599,89 +599,89 @@ const u8 gText_Brawly[] = _("BRAWLY");
const u8 gText_Winona[] = _("WINONA");
const u8 gText_Phoebe[] = _("PHOEBE");
const u8 gText_Glacia[] = _("GLACIA");
-const u8 gUnknown_085EAD37[] = _("PETALBURG");
-const u8 gUnknown_085EAD41[] = _("SLATEPORT");
-const u8 gUnknown_085EAD4B[] = _("LITTLEROOT");
-const u8 gUnknown_085EAD56[] = _("LILYCOVE");
-const u8 gUnknown_085EAD5F[] = _("DEWFORD");
-const u8 gUnknown_085EAD67[] = _("ENTER");
-const u8 gUnknown_085EAD6D[] = _("INFO");
-const u8 gUnknown_085EAD72[] = _("What's a CONTEST?");
-const u8 gUnknown_085EAD84[] = _("Types of CONTESTS");
-const u8 gUnknown_085EAD96[] = _("Ranks");
-const u8 gUnknown_085EAD9C[] = _("Judging");
+const u8 gText_Petalburg[] = _("PETALBURG");
+const u8 gText_Slateport[] = _("SLATEPORT");
+const u8 gText_Littleroot[] = _("LITTLEROOT"); // Unused. Given the context, Briney may at one point have been able to sail the player here
+const u8 gText_Lilycove[] = _("LILYCOVE"); // Unused. Given the context, Briney may at one point have been able to sail the player here
+const u8 gText_Dewford[] = _("DEWFORD");
+const u8 gText_Enter2[] = _("ENTER");
+const u8 gText_Info2[] = _("INFO");
+const u8 gText_WhatsAContest[] = _("What's a CONTEST?");
+const u8 gText_TypesOfContests[] = _("Types of CONTESTS");
+const u8 gText_Ranks[] = _("Ranks");
+const u8 gText_Judging[] = _("Judging"); //unused
const u8 gText_CoolnessContest[] = _("COOLNESS CONTEST");
const u8 gText_BeautyContest[] = _("BEAUTY CONTEST");
const u8 gText_CutenessContest[] = _("CUTENESS CONTEST");
const u8 gText_SmartnessContest[] = _("SMARTNESS CONTEST");
const u8 gText_ToughnessContest[] = _("TOUGHNESS CONTEST");
-const u8 gUnknown_085EADF9[] = _("DECORATION");
-const u8 gUnknown_085EAE04[] = _("PACK UP");
-const u8 gUnknown_085EAE0C[] = _("COUNT");
-const u8 gUnknown_085EAE12[] = _("REGISTRY");
-const u8 gUnknown_085EAE1B[] = _("INFORMATION");
-const u8 gUnknown_085EAE27[] = _("MACH");
-const u8 gUnknown_085EAE2C[] = _("ACRO");
-const u8 gUnknown_085EAE31[] = _("PSN");
-const u8 gUnknown_085EAE35[] = _("PAR");
-const u8 gUnknown_085EAE39[] = _("SLP");
-const u8 gUnknown_085EAE3D[] = _("BRN");
-const u8 gUnknown_085EAE41[] = _("FRZ");
-const u8 gUnknown_085EAE45[] = _("TOXIC");
-const u8 gUnknown_085EAE4B[] = _("OK");
-const u8 gUnknown_085EAE4E[] = _("QUIT");
-const u8 gUnknown_085EAE53[] = _("Saw it");
-const u8 gUnknown_085EAE5A[] = _("Not yet");
+const u8 gText_Decoration2[] = _("DECORATION");
+const u8 gText_PackUp[] = _("PACK UP");
+const u8 gText_Count[] = _("COUNT"); //unused
+const u8 gText_Registry[] = _("REGISTRY");
+const u8 gText_Information[] = _("INFORMATION");
+const u8 gText_Mach[] = _("MACH");
+const u8 gText_Acro[] = _("ACRO");
+const u8 gText_Psn[] = _("PSN");
+const u8 gText_Par[] = _("PAR");
+const u8 gText_Slp[] = _("SLP");
+const u8 gText_Brn[] = _("BRN");
+const u8 gText_Frz[] = _("FRZ");
+const u8 gText_Toxic[] = _("TOXIC"); // Unused
+const u8 gText_Ok3[] = _("OK"); // Unused
+const u8 gText_Quit[] = _("QUIT"); // Unused
+const u8 gText_SawIt[] = _("Saw it");
+const u8 gText_NotYet[] = _("Not yet");
const u8 gText_Yes[] = _("YES");
const u8 gText_No[] = _("NO");
-const u8 gUnknown_085EAE69[] = _("INFO");
-const u8 gUnknown_085EAE6E[] = _("SINGLE BATTLE");
-const u8 gUnknown_085EAE7C[] = _("DOUBLE BATTLE");
-const u8 gUnknown_085EAE8A[] = _("MULTI BATTLE");
-const u8 gUnknown_085EAE97[] = _("MR. BRINEY");
-const u8 gUnknown_085EAEA2[] = _("CHALLENGE");
-const u8 gUnknown_085EAEAC[] = _("INFO");
+const u8 gText_Info4[] = _("INFO"); // Unused
+const u8 gText_SingleBattle[] = _("SINGLE BATTLE");
+const u8 gText_DoubleBattle[] = _("DOUBLE BATTLE");
+const u8 gText_MultiBattle[] = _("MULTI BATTLE");
+const u8 gText_MrBriney[] = _("MR. BRINEY"); // Unused
+const u8 gText_Challenge[] = _("CHALLENGE");
+const u8 gText_Info3[] = _("INFO");
const u8 gText_Lv50[] = _("LV. 50");
const u8 gText_OpenLevel[] = _("OPEN LEVEL");
-const u8 gUnknown_085EAEC3[] = _("FRESH WATER{CLEAR_TO 0x48}¥200");
-const u8 gUnknown_085EAED6[] = _("SODA POP{CLEAR_TO 0x48}¥300");
-const u8 gUnknown_085EAEE6[] = _("LEMONADE{CLEAR_TO 0x48}¥350");
-const u8 gUnknown_085EAEF6[] = _("HOW TO RIDE");
-const u8 gUnknown_085EAF02[] = _("HOW TO TURN");
-const u8 gUnknown_085EAF0E[] = _("SANDY SLOPES");
-const u8 gUnknown_085EAF1B[] = _("WHEELIES");
-const u8 gUnknown_085EAF24[] = _("BUNNY-HOPS");
-const u8 gUnknown_085EAF2F[] = _("JUMP");
-const u8 gUnknown_085EAF34[] = _("Satisfied");
-const u8 gUnknown_085EAF3E[] = _("Dissatisfied");
-const u8 gUnknown_085EAF4B[] = _("DEEPSEATOOTH");
-const u8 gUnknown_085EAF58[] = _("DEEPSEASCALE");
-const u8 gUnknown_085EAF65[] = _("BLUE FLUTE");
-const u8 gUnknown_085EAF70[] = _("YELLOW FLUTE");
-const u8 gUnknown_085EAF7D[] = _("RED FLUTE");
-const u8 gUnknown_085EAF87[] = _("WHITE FLUTE");
-const u8 gUnknown_085EAF93[] = _("BLACK FLUTE");
-const u8 gUnknown_085EAF9F[] = _("GLASS CHAIR");
-const u8 gUnknown_085EAFAB[] = _("GLASS DESK");
-const u8 gUnknown_085EAFB6[] = _("TREECKO DOLL 1,000 COINS");
-const u8 gUnknown_085EAFCF[] = _("TORCHIC DOLL 1,000 COINS");
-const u8 gUnknown_085EAFE8[] = _("MUDKIP DOLL 1,000 COINS");
-const u8 gUnknown_085EB002[] = _(" 50 COINS ¥1,000");
-const u8 gUnknown_085EB017[] = _("500 COINS ¥10,000");
-const u8 gUnknown_085EB02A[] = _("Excellent");
-const u8 gUnknown_085EB034[] = _("Not so good");
-const u8 gUnknown_085EB040[] = _("RED SHARD");
-const u8 gUnknown_085EB04A[] = _("YELLOW SHARD");
-const u8 gUnknown_085EB057[] = _("BLUE SHARD");
-const u8 gUnknown_085EB062[] = _("GREEN SHARD");
+const u8 gText_FreshWaterAndPrice[] = _("FRESH WATER{CLEAR_TO 0x48}¥200");
+const u8 gText_SodaPopAndPrice[] = _("SODA POP{CLEAR_TO 0x48}¥300");
+const u8 gText_LemonadeAndPrice[] = _("LEMONADE{CLEAR_TO 0x48}¥350");
+const u8 gText_HowToRide[] = _("HOW TO RIDE");
+const u8 gText_HowToTurn[] = _("HOW TO TURN");
+const u8 gText_SandySlopes[] = _("SANDY SLOPES");
+const u8 gText_Wheelies[] = _("WHEELIES");
+const u8 gText_BunnyHops[] = _("BUNNY-HOPS");
+const u8 gText_Jump[] = _("JUMP");
+const u8 gText_Satisfied[] = _("Satisfied");
+const u8 gText_Dissatisfied[] = _("Dissatisfied");
+const u8 gText_DeepSeaTooth[] = _("DEEPSEATOOTH");
+const u8 gText_DeepSeaScale[] = _("DEEPSEASCALE");
+const u8 gText_BlueFlute2[] = _("BLUE FLUTE");
+const u8 gText_YellowFlute2[] = _("YELLOW FLUTE");
+const u8 gText_RedFlute2[] = _("RED FLUTE");
+const u8 gText_WhiteFlute2[] = _("WHITE FLUTE");
+const u8 gText_BlackFlute2[] = _("BLACK FLUTE");
+const u8 gText_GlassChair[] = _("GLASS CHAIR");
+const u8 gText_GlassDesk[] = _("GLASS DESK");
+const u8 gText_TreeckoDollAndPrice[] = _("TREECKO DOLL 1,000 COINS");
+const u8 gText_TorchicDollAndPrice[] = _("TORCHIC DOLL 1,000 COINS");
+const u8 gText_MudkipDollAndPrice[] = _("MUDKIP DOLL 1,000 COINS");
+const u8 gText_50CoinsAndPrice[] = _(" 50 COINS ¥1,000");
+const u8 gText_500CoinsAndPrice[] = _("500 COINS ¥10,000");
+const u8 gText_Excellent2[] = _("Excellent");
+const u8 gText_NotSoGood[] = _("Not so good");
+const u8 gText_RedShard[] = _("RED SHARD");
+const u8 gText_YellowShard[] = _("YELLOW SHARD");
+const u8 gText_BlueShard[] = _("BLUE SHARD");
+const u8 gText_GreenShard[] = _("GREEN SHARD");
const u8 gText_BattleFrontier[] = _("BATTLE FRONTIER");
-const u8 gUnknown_085EB07E[] = _("Right");
-const u8 gUnknown_085EB084[] = _("Left");
-const u8 gUnknown_085EB089[] = _("TM32{CLEAR_TO 0x48}1,500 COINS");
-const u8 gUnknown_085EB09C[] = _("TM29{CLEAR_TO 0x48}3,500 COINS");
-const u8 gUnknown_085EB0AF[] = _("TM35{CLEAR_TO 0x48}4,000 COINS");
-const u8 gUnknown_085EB0C2[] = _("TM24{CLEAR_TO 0x48}4,000 COINS");
-const u8 gUnknown_085EB0D5[] = _("TM13{CLEAR_TO 0x48}4,000 COINS");
+const u8 gText_Right[] = _("Right");
+const u8 gText_Left[] = _("Left");
+const u8 gText_TM32AndPrice[] = _("TM32{CLEAR_TO 0x48}1,500 COINS");
+const u8 gText_TM29AndPrice[] = _("TM29{CLEAR_TO 0x48}3,500 COINS");
+const u8 gText_TM35AndPrice[] = _("TM35{CLEAR_TO 0x48}4,000 COINS");
+const u8 gText_TM24AndPrice[] = _("TM24{CLEAR_TO 0x48}4,000 COINS");
+const u8 gText_TM13AndPrice[] = _("TM13{CLEAR_TO 0x48}4,000 COINS");
const u8 gText_Cool[] = _("COOL");
const u8 gText_Beauty[] = _("BEAUTY");
const u8 gText_Cute[] = _("CUTE");
@@ -728,87 +728,86 @@ const u8 gText_MenuOptionPokedex[] = _("POKéDEX");
const u8 gText_MenuOptionPokemon[] = _("POKéMON");
const u8 gText_MenuOptionBag[] = _("BAG");
const u8 gText_MenuOptionPokenav[] = _("POKéNAV");
-const u8 gUnknown_085EB278[] = _("");
+const u8 gText_Blank[] = _("");
const u8 gText_MenuOptionSave[] = _("SAVE");
const u8 gText_MenuOptionOption[] = _("OPTION");
const u8 gText_MenuOptionExit[] = _("EXIT");
-const u8 gUnknown_085EB28A[] = __(" ");
-const u8 gUnknown_085EB28C[] = _("5BP");
-const u8 gUnknown_085EB290[] = _("10BP");
-const u8 gUnknown_085EB295[] = _("15BP");
-const u8 gUnknown_085EB29A[] = _("RED TENT");
-const u8 gUnknown_085EB2A3[] = _("BLUE TENT");
+const u8 gText_5BP[] = _(" 5BP");
+const u8 gText_10BP[] = _("10BP");
+const u8 gText_15BP[] = _("15BP");
+const u8 gText_RedTent[] = _("RED TENT");
+const u8 gText_BlueTent[] = _("BLUE TENT");
const u8 gText_SouthernIsland[] = _("SOUTHERN ISLAND");
const u8 gText_BirthIsland[] = _("BIRTH ISLAND");
const u8 gText_FarawayIsland[] = _("FARAWAY ISLAND");
const u8 gText_NavelRock[] = _("NAVEL ROCK");
-const u8 gUnknown_085EB2E4[] = _("CLAW FOSSIL");
-const u8 gUnknown_085EB2F0[] = _("ROOT FOSSIL");
-const u8 gUnknown_085EB2FC[] = _("NO");
-const u8 gUnknown_085EB2FF[] = _("I'll battle now!");
-const u8 gUnknown_085EB310[] = _("I won!");
-const u8 gUnknown_085EB317[] = _("I lost!");
-const u8 gUnknown_085EB31F[] = _("I won't tell.");
+const u8 gText_ClawFossil[] = _("CLAW FOSSIL");
+const u8 gText_RootFossil[] = _("ROOT FOSSIL");
+const u8 gText_No4[] = _("NO");
+const u8 gText_IllBattleNow[] = _("I'll battle now!");
+const u8 gText_IWon[] = _("I won!");
+const u8 gText_ILost[] = _("I lost!");
+const u8 gText_IWontTell[] = _("I won't tell.");
const u8 gText_NormalTagMatch[] = _("NORMAL TAG MATCH");
const u8 gText_VarietyTagMatch[] = _("VARIETY TAG MATCH");
const u8 gText_UniqueTagMatch[] = _("UNIQUE TAG MATCH");
const u8 gText_ExpertTagMatch[] = _("EXPERT TAG MATCH");
-const u8 gUnknown_085EB372[] = _("TRADE CENTER");
-const u8 gUnknown_085EB37F[] = _("COLOSSEUM");
-const u8 gUnknown_085EB389[] = _("RECORD CORNER");
-const u8 gUnknown_085EB397[] = _("BERRY CRUSH");
-const u8 gUnknown_085EB3A3[] = _("");
-const u8 gUnknown_085EB3A4[] = _("POKéMON JUMP");
-const u8 gUnknown_085EB3B1[] = _("DODRIO BERRY-PICKING");
-const u8 gUnknown_085EB3C6[] = _("BECOME LEADER");
-const u8 gUnknown_085EB3D4[] = _("JOIN GROUP");
-const u8 gUnknown_085EB3DF[] = _("TWO STYLES");
-const u8 gUnknown_085EB3EA[] = _("LV. 50");
-const u8 gUnknown_085EB3F1[] = _("OPEN LEVEL");
-const u8 gUnknown_085EB3FC[] = _("{PKMN} TYPE & NO.");
-const u8 gUnknown_085EB40A[] = _("HOLD ITEMS");
-const u8 gUnknown_085EB415[] = _("SYMBOLS");
-const u8 gUnknown_085EB41D[] = _("RECORD");
-const u8 gUnknown_085EB424[] = _("BATTLE PTS");
-const u8 gUnknown_085EB42F[] = _("TOWER INFO");
-const u8 gUnknown_085EB43A[] = _("BATTLE {PKMN}");
-const u8 gUnknown_085EB444[] = _("BATTLE SALON");
-const u8 gUnknown_085EB451[] = _("MULTI-LINK");
-const u8 gUnknown_085EB45C[] = _("BATTLE RULES");
-const u8 gUnknown_085EB469[] = _("JUDGE: MIND");
-const u8 gUnknown_085EB475[] = _("JUDGE: SKILL");
-const u8 gUnknown_085EB482[] = _("JUDGE: BODY");
-const u8 gUnknown_085EB48E[] = _("MATCHUP");
-const u8 gUnknown_085EB496[] = _("TOURNEY TREE");
-const u8 gUnknown_085EB4A3[] = _("DOUBLE KO");
-const u8 gUnknown_085EB4AD[] = _("BASIC RULES");
-const u8 gUnknown_085EB4B9[] = _("SWAP: PARTNER");
-const u8 gUnknown_085EB4C7[] = _("SWAP: NUMBER");
-const u8 gUnknown_085EB4D4[] = _("SWAP: NOTES");
-const u8 gUnknown_085EB4E0[] = _("OPEN LEVEL");
+const u8 gText_TradeCenter[] = _("TRADE CENTER");
+const u8 gText_Colosseum[] = _("COLOSSEUM");
+const u8 gText_RecordCorner[] = _("RECORD CORNER");
+const u8 gText_BerryCrush3[] = _("BERRY CRUSH");
+const u8 gText_EmptyLinkService[] = _(""); // Maybe Spin Trade?
+const u8 gText_PokemonJump[] = _("POKéMON JUMP");
+const u8 gText_DodrioBerryPicking[] = _("DODRIO BERRY-PICKING");
+const u8 gText_BecomeLeader[] = _("BECOME LEADER");
+const u8 gText_JoinGroup[] = _("JOIN GROUP");
+const u8 gText_TwoStyles[] = _("TWO STYLES");
+const u8 gText_Lv50_3[] = _("LV. 50");
+const u8 gText_OpenLevel2[] = _("OPEN LEVEL");
+const u8 gText_MonTypeAndNo[] = _("{PKMN} TYPE & NO.");
+const u8 gText_HoldItems[] = _("HOLD ITEMS");
+const u8 gText_Symbols2[] = _("SYMBOLS");
+const u8 gText_Record3[] = _("RECORD");
+const u8 gText_BattlePts[] = _("BATTLE PTS");
+const u8 gText_TowerInfo[] = _("TOWER INFO");
+const u8 gText_BattleMon[] = _("BATTLE {PKMN}");
+const u8 gText_BattleSalon[] = _("BATTLE SALON");
+const u8 gText_MultiLink2[] = _("MULTI-LINK");
+const u8 gText_BattleRules[] = _("BATTLE RULES");
+const u8 gText_JudgeMind[] = _("JUDGE: MIND");
+const u8 gText_JudgeSkill[] = _("JUDGE: SKILL");
+const u8 gText_JudgeBody[] = _("JUDGE: BODY");
+const u8 gText_Matchup[] = _("MATCHUP");
+const u8 gText_TourneyTree[] = _("TOURNEY TREE");
+const u8 gText_DoubleKO[] = _("DOUBLE KO");
+const u8 gText_BasicRules[] = _("BASIC RULES");
+const u8 gText_SwapPartners[] = _("SWAP: PARTNER");
+const u8 gText_SwapNumber[] = _("SWAP: NUMBER");
+const u8 gText_SwapNotes[] = _("SWAP: NOTES");
+const u8 gText_OpenLevel3[] = _("OPEN LEVEL");
const u8 gText_BattleBasics[] = _("BATTLE BASICS");
const u8 gText_PokemonNature[] = _("POKéMON NATURE");
const u8 gText_PokemonMoves[] = _("POKéMON MOVES");
const u8 gText_Underpowered[] = _("UNDERPOWERED");
const u8 gText_WhenInDanger[] = _("WHEN IN DANGER");
-const u8 gUnknown_085EB532[] = _("PYRAMID: POKéMON");
-const u8 gUnknown_085EB543[] = _("PYRAMID: TRAINERS");
-const u8 gUnknown_085EB555[] = _("PYRAMID: MAZE");
-const u8 gUnknown_085EB563[] = _("BATTLE BAG");
-const u8 gUnknown_085EB56E[] = _("POKéNAV AND BAG");
-const u8 gUnknown_085EB57E[] = _("HELD ITEMS");
-const u8 gUnknown_085EB589[] = _("POKéMON ORDER");
-const u8 gUnknown_085EB597[] = _("BATTLE POKéMON");
+const u8 gText_PyramidPokemon[] = _("PYRAMID: POKéMON");
+const u8 gText_PyramidTrainers[] = _("PYRAMID: TRAINERS");
+const u8 gText_PyramidMaze[] = _("PYRAMID: MAZE");
+const u8 gText_BattleBag2[] = _("BATTLE BAG");
+const u8 gText_PokenavAndBag[] = _("POKéNAV AND BAG");
+const u8 gText_HeldItems[] = _("HELD ITEMS");
+const u8 gText_PokemonOrder[] = _("POKéMON ORDER");
+const u8 gText_BattlePokemon[] = _("BATTLE POKéMON");
const u8 gText_BattleTrainers[] = _("BATTLE TRAINERS");
-const u8 gUnknown_085EB5B6[] = _("GO ON");
-const u8 gUnknown_085EB5BC[] = _("RECORD");
-const u8 gUnknown_085EB5C3[] = _("REST");
-const u8 gUnknown_085EB5C8[] = _("RETIRE");
+const u8 gText_GoOn[] = _("GO ON");
+const u8 gText_Record2[] = _("RECORD");
+const u8 gText_Rest[] = _("REST");
+const u8 gText_Retire[] = _("RETIRE");
const u8 gText_99TimesPlus[] = _("99 times +");
const u8 gText_1MinutePlus[] = _("1 minute +");
const u8 gText_SpaceSeconds[] = _(" seconds");
const u8 gText_SpaceTimes[] = _(" time(s)");
-const u8 gUnknown_085EB5F7[] = _(".");
+const u8 gText_Dot[] = _("."); // Unused
const u8 gText_BigGuy[] = _("Big guy");
const u8 gText_BigGirl[] = _("Big girl");
const u8 gText_Son[] = _("son");
@@ -926,7 +925,7 @@ const u8 gPCText_PolkaDot[] = _("POLKA-DOT");
const u8 gPCText_Pokecenter[] = _("POKéCENTER");
const u8 gPCText_Machine[] = _("MACHINE");
const u8 gPCText_Simple[] = _("SIMPLE");
-const u8 gUnknown_085EBB56[] = _("What would you like to do?");
+const u8 gText_WhatWouldYouLikeToDo[] = _("What would you like to do?"); // Unused
const u8 gText_WithdrawPokemon[] = _("WITHDRAW POKéMON");
const u8 gText_DepositPokemon[] = _("DEPOSIT POKéMON");
const u8 gText_MovePokemon[] = _("MOVE POKéMON");
@@ -940,28 +939,28 @@ const u8 gText_SeeYaDescription[] = _("Return to the previous menu.");
const u8 gText_JustOnePkmn[] = _("There is just one POKéMON with you.");
const u8 gText_PartyFull[] = _("Your party is full!");
const u8 gText_Box[] = _("BOX");
-const u8 gUnknown_085EBCC5[] = _("Check the map of the HOENN region.");
-const u8 gUnknown_085EBCE8[] = _("Check POKéMON in detail.");
-const u8 gUnknown_085EBD01[] = _("Call a registered TRAINER.");
-const u8 gUnknown_085EBD1C[] = _("Check obtained RIBBONS.");
-const u8 gUnknown_085EBD34[] = _("Put away the POKéNAV.");
+const u8 gText_CheckMapOfHoenn[] = _("Check the map of the HOENN region.");
+const u8 gText_CheckPokemonInDetail[] = _("Check POKéMON in detail.");
+const u8 gText_CallRegisteredTrainer[] = _("Call a registered TRAINER.");
+const u8 gText_CheckObtainedRibbons[] = _("Check obtained RIBBONS.");
+const u8 gText_PutAwayPokenav[] = _("Put away the POKéNAV.");
const u8 gText_NoRibbonWinners[] = _("There are no RIBBON winners.");
-const u8 gUnknown_085EBD67[] = _("No TRAINERS are registered.");
-const u8 gUnknown_085EBD83[] = _("Check party POKéMON in detail.");
-const u8 gUnknown_085EBDA2[] = _("Check all POKéMON in detail.");
-const u8 gUnknown_085EBDBF[] = _("Return to the POKéNAV menu.");
-const u8 gUnknown_085EBDDB[] = _("Find cool POKéMON.");
-const u8 gUnknown_085EBDEE[] = _("Find beautiful POKéMON.");
-const u8 gUnknown_085EBE06[] = _("Find cute POKéMON.");
-const u8 gUnknown_085EBE19[] = _("Find smart POKéMON.");
-const u8 gUnknown_085EBE2D[] = _("Find tough POKéMON.");
-const u8 gUnknown_085EBE41[] = _("Return to the CONDITION menu.");
+const u8 gText_NoTrainersRegistered[] = _("No TRAINERS are registered."); // Unused
+const u8 gText_CheckPartyPokemonInDetail[] = _("Check party POKéMON in detail.");
+const u8 gText_CheckAllPokemonInDetail[] = _("Check all POKéMON in detail.");
+const u8 gText_ReturnToPokenavMenu[] = _("Return to the POKéNAV menu.");
+const u8 gText_FindCoolPokemon[] = _("Find cool POKéMON.");
+const u8 gText_FindBeautifulPokemon[] = _("Find beautiful POKéMON.");
+const u8 gText_FindCutePokemon[] = _("Find cute POKéMON.");
+const u8 gText_FindSmartPokemon[] = _("Find smart POKéMON.");
+const u8 gText_FindToughPokemon[] = _("Find tough POKéMON.");
+const u8 gText_ReturnToConditionMenu[] = _("Return to the CONDITION menu.");
const u8 gText_NumberRegistered[] = _("No. registered");
const u8 gText_NumberOfBattles[] = _("No. of battles");
-const u8 gUnknown_085EBE7D[] = _("DETAIL");
-const u8 gUnknown_085EBE84[] = _("CALL");
-const u8 gUnknown_085EBE89[] = _("EXIT");
-const u8 gUnknown_085EBE8E[] = _("Can't call opponent here.");
+const u8 gText_Detail[] = _("DETAIL"); // Unused
+const u8 gText_Call2[] = _("CALL"); // Unused
+const u8 gText_UnusedExit[] = _("EXIT"); // Unused
+const u8 gText_CantCallOpponentHere[] = _("Can't call opponent here."); // Unused
const u8 gText_PokenavMatchCall_Strategy[] = _("STRATEGY");
const u8 gText_PokenavMatchCall_TrainerPokemon[] = _("TRAINER'S POKéMON");
const u8 gText_PokenavMatchCall_SelfIntroduction[] = _("SELF-INTRODUCTION");
@@ -981,26 +980,26 @@ const u8 gText_NatureSlash[] = _("NATURE/");
const u8 gText_TrainerCloseBy[] = _("That TRAINER is close by.\nTalk to the TRAINER in person!");
const u8 gText_InParty[] = _("IN PARTY");
const u8 gText_Number2[] = _("No. ");
-const u8 gUnknown_085EBFDC[] = _("RIBBONS");
-const u8 gUnknown_085EBFE4[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}");
-const u8 gUnknown_085EBFF6[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}");
-const u8 gUnknown_085EC008[] = _("{SPECIAL_F7 0x00}/{LV}{SPECIAL_F7 0x01}");
+const u8 gText_Ribbons[] = _("RIBBONS"); // Unused
+const u8 gText_PokemonMaleLv[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}"); // Unused
+const u8 gText_PokemonFemaleLv[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}"); // Unused
+const u8 gText_PokemonNoGenderLv[] = _("{SPECIAL_F7 0x00}/{LV}{SPECIAL_F7 0x01}"); // Unused
const u8 gText_Unknown[] = _("UNKNOWN");
-const u8 gUnknown_085EC017[] = _("CALL");
-const u8 gUnknown_085EC01C[] = _("CHECK");
-const u8 gUnknown_085EC022[] = _("CANCEL");
+const u8 gText_Call[] = _("CALL");
+const u8 gText_Check[] = _("CHECK");
+const u8 gText_Cancel6[] = _("CANCEL");
const u8 gText_NumberF700[] = _("No. {SPECIAL_F7 0x00}");
const u8 gText_RibbonsF700[] = _("RIBBONS {SPECIAL_F7 0x00}");
-const u8 gUnknown_085EC03B[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}");
-const u8 gUnknown_085EC04F[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}");
-const u8 gUnknown_085EC063[] = _("{SPECIAL_F7 0x00}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}");
+const u8 gText_PokemonMaleLv2[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_RED WHITE GREEN}♂{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused
+const u8 gText_PokemonFemaleLv2[] = _("{SPECIAL_F7 0x00}{COLOR_HIGHLIGHT_SHADOW LIGHT_GREEN WHITE BLUE}♀{COLOR_HIGHLIGHT_SHADOW DARK_GREY WHITE LIGHT_GREY}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused
+const u8 gText_PokemonNoGenderLv2[] = _("{SPECIAL_F7 0x00}/{LV}{SPECIAL_F7 0x01}{SPECIAL_F7 0x02}"); // Unused
const u8 gText_CombineFourWordsOrPhrases[] = _("Combine four words or phrases");
const u8 gText_AndMakeYourProfile[] = _("and make your profile.");
const u8 gText_CombineSixWordsOrPhrases[] = _("Combine six words or phrases");
const u8 gText_AndMakeAMessage[] = _("and make a message.");
const u8 gText_FindWordsThatDescribeYour[] = _("Find words that describe your");
const u8 gText_FeelingsRightNow[] = _("feelings right now.");
-const u8 gUnknown_085EC104[] = _("With four phrases,");
+const u8 gText_WithFourPhrases[] = _("With four phrases,"); // Unused
const u8 gText_CombineNineWordsOrPhrases[] = _("Combine nine words or phrases");
const u8 gText_AndMakeAMessage2[] = _("and make a message.");
const u8 gText_ChangeJustOneWordOrPhrase[] = _("Change just one word or phrase");
@@ -1011,7 +1010,7 @@ const u8 gText_WhatYouSayIfYouWin[] = _("What you say if you win a battle");
const u8 gText_WhatYouSayIfYouLose[] = _("What you say if you lose a battle");
const u8 gText_TheAnswer[] = _("The answer");
const u8 gText_TheMailMessage[] = _("The MAIL message");
-const u8 gUnknown_085EC214[] = _("The MAIL salutation");
+const u8 gText_TheMailSalutation[] = _("The MAIL salutation"); // Unused
const u8 gText_TheBardsSong2[] = _("The new song");
const u8 gText_CombineTwoWordsOrPhrases[] = _("Combine two words or phrases");
const u8 gText_AndMakeATrendySaying[] = _("and make a trendy saying.");
@@ -1028,7 +1027,7 @@ const u8 gText_AndCreateAQuiz[] = _("and create a quiz!");
const u8 gText_PickAWordOrPhraseAnd[] = _("Pick a word or phrase and");
const u8 gText_SetTheQuizAnswer[] = _("set the quiz answer.");
const u8 gText_TheAnswerColon[] = _("The answer:");
-const u8 gUnknown_085EC387[] = _("The quiz:");
+const u8 gText_TheQuizColon[] = _("The quiz:"); // Unused
const u8 gText_ApprenticePhrase[] = _("Apprentice's phrase:");
const u8 gText_QuitEditing[] = _("Quit editing?");
const u8 gText_StopGivingPkmnMail[] = _("Stop giving the POKéMON MAIL?");
@@ -1036,20 +1035,20 @@ const u8 gText_AndFillOutTheQuestionnaire[] = _("and fill out the questionnaire.
const u8 gText_LetsReplyToTheInterview[] = _("Let's reply to the interview!");
const u8 gText_AllTextBeingEditedWill[] = _("All the text being edited will");
const u8 gText_BeDeletedThatOkay[] = _("be deleted. Is that okay?");
-const u8 gUnknown_085EC449[] = _("Quit editing?");
-const u8 gUnknown_085EC457[] = _("The edited text will not be saved.");
-const u8 gUnknown_085EC47A[] = _("Is that okay?");
-const u8 gUnknown_085EC488[] = _("Please enter a phrase or word.");
-const u8 gUnknown_085EC4A7[] = _("The entire text can't be deleted.");
+const u8 gText_QuitEditing2[] = _("Quit editing?"); // Unused
+const u8 gText_EditedTextWillNotBeSaved[] = _("The edited text will not be saved."); // Unused
+const u8 gText_IsThatOkay[] = _("Is that okay?"); // Unused
+const u8 gText_PleaseEnterPhraseOrWord[] = _("Please enter a phrase or word."); // Unused
+const u8 gText_EntireTextCantBeDeleted[] = _("The entire text can't be deleted.");
const u8 gText_OnlyOnePhrase[] = _("Only one phrase may be changed.");
const u8 gText_OriginalSongWillBeUsed[] = _("The original song will be used.");
-const u8 gUnknown_085EC509[] = _("That's trendy already!");
+const u8 gText_ThatsTrendyAlready[] = _("That's trendy already!"); // Unused
const u8 gText_CombineTwoWordsOrPhrases3[] = _("Combine two words or phrases.");
-const u8 gUnknown_085EC53E[] = _("Quit giving information?");
-const u8 gUnknown_085EC557[] = _("Stop giving the POKéMON MAIL?");
-const u8 gUnknown_085EC575[] = _("Create a quiz!");
-const u8 gUnknown_085EC584[] = _("Set the answer!");
-const u8 gUnknown_085EC594[] = _("Cancel the selection?");
+const u8 gText_QuitGivingInfo[] = _("Quit giving information?"); // Unused
+const u8 gText_StopGivingPkmnMail2[] = _("Stop giving the POKéMON MAIL?"); // Unused
+const u8 gText_CreateAQuiz2[] = _("Create a quiz!"); // Unused
+const u8 gText_SetTheAnswer[] = _("Set the answer!"); // Unused
+const u8 gText_CancelSelection[] = _("Cancel the selection?"); // Unused
const u8 gText_Profile[] = _("PROFILE");
const u8 gText_AtTheBattlesStart[] = _("At the battle's start:");
const u8 gText_UponWinningABattle[] = _("Upon winning a battle:");
@@ -1059,7 +1058,7 @@ const u8 gText_WhatsHipAndHappening[] = _("What's hip and happening?");
const u8 gText_Interview[] = _("Interview");
const u8 gText_GoodSaying[] = _("Good saying");
const u8 gText_FansQuestion[] = _("Fan's question");
-const u8 gUnknown_085EC645[] = _("クイズの こたえは?");
+const u8 gJPText_WhatIsTheQuizAnswer[] = _("クイズの こたえは?"); // Unused
const u8 gText_ApprenticesPhrase[] = _("Apprentice's phrase");
const u8 gText_Questionnaire[] = _("QUESTIONNAIRE");
const u8 gText_YouCannotQuitHere[] = _("You cannot quit here.");
@@ -1190,13 +1189,13 @@ const u8 gText_Marco[] = _("MARCO");
const u8 gText_TrainerCardName[] = _("NAME: ");
const u8 gText_TrainerCardIDNo[] = _("IDNo.");
const u8 gText_TrainerCardMoney[] = _("MONEY");
-const u8 gUnknown_085ECF84[] = _("¥");
+const u8 gText_PokeDollar[] = _("¥"); // Unused
const u8 gText_TrainerCardPokedex[] = _("POKéDEX");
const u8 gText_EmptyString6[] = _("");
const u8 gText_Colon2[] = _(":");
-const u8 gUnknown_085ECF91[] = _(" points");
+const u8 gText_Points[] = _(" points"); // Unused
const u8 gText_TrainerCardTime[] = _("TIME");
-const u8 gUnknown_085ECF9E[] = _("ゲ-ムポイント");
+const u8 gJPText_BattlePoints[] = _("ゲ-ムポイント"); // Unused. Name presumed, translation is Game Points
const u8 gText_Var1sTrainerCard[] = _("{STR_VAR_1}'s TRAINER CARD");
const u8 gText_HallOfFameDebut[] = _("HALL OF FAME DEBUT ");
const u8 gText_LinkBattles[] = _("LINK BATTLES");
@@ -1221,11 +1220,11 @@ const u8 gText_BattleArena[] = _("BATTLE ARENA");
const u8 gText_BattlePike[] = _("BATTLE PIKE");
const u8 gText_BattlePyramid[] = _("BATTLE PYRAMID");
-ALIGNED(4) const u8 gUnknown_085ED164[] = _("{STR_VAR_1} SINGLE");
-ALIGNED(4) const u8 gUnknown_085ED170[] = _("{STR_VAR_1} DOUBLE");
-ALIGNED(4) const u8 gUnknown_085ED17C[] = _("{STR_VAR_1} MULTI");
-ALIGNED(4) const u8 gUnknown_085ED188[] = _("{STR_VAR_1} LINK");
-ALIGNED(4) const u8 gUnknown_085ED190[] = _("{STR_VAR_1}");
+ALIGNED(4) const u8 gText_FacilitySingle[] = _("{STR_VAR_1} SINGLE");
+ALIGNED(4) const u8 gText_FacilityDouble[] = _("{STR_VAR_1} DOUBLE");
+ALIGNED(4) const u8 gText_FacilityMulti[] = _("{STR_VAR_1} MULTI");
+ALIGNED(4) const u8 gText_FacilityLink[] = _("{STR_VAR_1} LINK");
+ALIGNED(4) const u8 gText_Facility[] = _("{STR_VAR_1}");
const u8 gText_Give[] = _("Give");
const u8 gText_NoNeed[] = _("No need");
@@ -1240,9 +1239,9 @@ const u8 gText_Round2Results[] = _("Round 2 results!");
const u8 gText_Var1sVar2Won[] = _("{STR_VAR_1}'s {STR_VAR_2} won!");
const u8 gText_CommunicationStandby[] = _("Communication standby…");
const u8 gText_ColorDarkGrey[] = _("{COLOR DARK_GREY}");
-const u8 gUnknown_085ED222[] = _("{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR6 WHITE DYNAMIC_COLOR5}");
+const u8 gText_ColorDynamic6WhiteDynamic5[] = _("{COLOR_HIGHLIGHT_SHADOW DYNAMIC_COLOR6 WHITE DYNAMIC_COLOR5}"); // Unused
const u8 gText_HighlightDarkGrey[] = _("{HIGHLIGHT DARK_GREY}");
-const u8 gUnknown_085ED22C[] = _(" ");
+const u8 gText_EmptySpace2[] = _(" "); // Unused
const u8 gText_DynColor2Male[] = _("{COLOR DYNAMIC_COLOR2}♂");
const u8 gText_DynColor1Female[] = _("{COLOR DYNAMIC_COLOR1}♀");
const u8 gText_DynColor2[] = _("{COLOR DYNAMIC_COLOR2}");
@@ -1258,8 +1257,8 @@ const u8 gText_RegisterTextHere[] = _("Register text here?");
const u8 gText_InputText[] = _("Input text.");
const u8 gText_F700JoinedChat[] = _("{SPECIAL_F7 0x00} joined the chat!");
const u8 gText_F700LeftChat[] = _("{SPECIAL_F7 0x00} left the chat.");
-const u8 gUnknown_085ED2CF[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめ:");
-const u8 gUnknown_085ED2D9[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません");
+const u8 gJPText_PlayersXPokemon[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめ:"); // Unused
+const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません"); // Unused
const u8 gText_ExitingChat[] = _("Exiting the chat…");
const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {SPECIAL_F7 0x00}, has\nleft, ending the chat.");
const u8 gText_RegisteredTextChanged[] = _("The registered text has been changed.\nIs it okay to save the game?");
@@ -1274,25 +1273,25 @@ const u8 gText_Battle[] = _("BATTLE");
const u8 gText_Lets[] = _("LET'S");
const u8 gText_Ok[] = _("OK!");
const u8 gText_Sorry[] = _("SORRY");
-const u8 gText_YayUnkF9F9[] = _("YAY{EMOJI_BIGSMILE}");
+const u8 gText_YaySmileEmoji[] = _("YAY{EMOJI_BIGSMILE}");
const u8 gText_ThankYou[] = _("THANK YOU");
const u8 gText_ByeBye[] = _("BYE-BYE!");
-const u8 gMatchCallStevenStrategyText[] = _("Attack the weak points!");
-const u8 gMatchCall_StevenTrainersPokemonText[] = _("Ultimate STEEL POKéMON.");
-const u8 gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle[] = _("I'd climb even waterfalls");
-const u8 gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle[] = _("to find a rare stone!");
-const u8 gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle[] = _("I'm the strongest and most");
-const u8 gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle[] = _("energetic after all!");
-const u8 gMatchCall_BrendanStrategyText[] = _("Battle with knowledge!");
-const u8 gMatchCall_BrendanTrainersPokemonText[] = _("I will use various POKéMON.");
-const u8 gMatchCall_BrendanSelfIntroductionText_Line1[] = _("I'll be a better POKéMON");
-const u8 gMatchCall_BrendanSelfIntroductionText_Line2[] = _("prof than my father is!");
-const u8 gMatchCall_MayStrategyText[] = _("I'm not so good at battles.");
-const u8 gMatchCall_MayTrainersPokemonText[] = _("I'll use any POKéMON!");
-const u8 gMatchCall_MaySelfIntroductionText_Line1[] = _("My POKéMON and I help");
-const u8 gMatchCall_MaySelfIntroductionText_Line2[] = _("my father's research.");
+const u8 gText_MatchCallSteven_Strategy[] = _("Attack the weak points!");
+const u8 gText_MatchCallSteven_Pokemon[] = _("Ultimate STEEL POKéMON.");
+const u8 gText_MatchCallSteven_Intro1_BeforeMeteorFallsBattle[] = _("I'd climb even waterfalls");
+const u8 gText_MatchCallSteven_Intro2_BeforeMeteorFallsBattle[] = _("to find a rare stone!");
+const u8 gText_MatchCallSteven_Intro1_AfterMeteorFallsBattle[] = _("I'm the strongest and most");
+const u8 gText_MatchCallSteven_Intro2_AfterMeteorFallsBattle[] = _("energetic after all!");
+const u8 gText_MatchCallBrendan_Strategy[] = _("Battle with knowledge!");
+const u8 gText_MatchCallBrendan_Pokemon[] = _("I will use various POKéMON.");
+const u8 gText_MatchCallBrendan_Intro1[] = _("I'll be a better POKéMON");
+const u8 gText_MatchCallBrendan_Intro2[] = _("prof than my father is!");
+const u8 gText_MatchCallMay_Strategy[] = _("I'm not so good at battles.");
+const u8 gText_MatchCallMay_Pokemon[] = _("I'll use any POKéMON!");
+const u8 gText_MatchCallMay_Intro1[] = _("My POKéMON and I help");
+const u8 gText_MatchCallMay_Intro2[] = _("my father's research.");
const u8 gText_HatchedFromEgg[] = _("{STR_VAR_1} hatched from the EGG!");
-const u8 gText_NickHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?");
+const u8 gText_NicknameHatchPrompt[] = _("Would you like to nickname the newly\nhatched {STR_VAR_1}?");
ALIGNED(4) const u8 gText_ReadyToBerryCrush[] = _("Are you ready to BERRY-CRUSH?\nPlease pick a BERRY for use.\p");
ALIGNED(4) const u8 gText_WaitForAllChooseBerry[] = _("Please wait while each member\nchooses a BERRY.");
ALIGNED(4) const u8 gText_EndedWithXUnitsPowder[] = _("{PAUSE_MUSIC}{PLAY_BGM MUS_FANFA1}You ended up with {STR_VAR_1} units of\nsilky-smooth BERRY POWDER.{RESUME_MUSIC}\pYour total amount of BERRY POWDER\nis {STR_VAR_2}.\p");
@@ -1328,36 +1327,36 @@ const u8 gText_Var1Players[] = _("{STR_VAR_1} PLAYERS");
const u8 gText_SymbolsEarned[] = _("Symbols Earned");
const u8 gText_BattleRecord[] = _("Battle Record");
const u8 gText_BattlePoints[] = _("Battle Points");
-const u8 gUnknown_085ED92A[] = _("CANCEL");
-const u8 gUnknown_085ED931[] = _("");
-const u8 gUnknown_085ED932[] = _("Check BATTLE FRONTIER MAP.");
-const u8 gUnknown_085ED94D[] = _("Check TRAINER CARD.");
-const u8 gUnknown_085ED961[] = _("View recorded battle.");
-const u8 gUnknown_085ED977[] = _("Put away the FRONTIER PASS.");
-const u8 gUnknown_085ED993[] = _("Your current Battle Points.");
-const u8 gUnknown_085ED9AF[] = _("Your collected Symbols.");
-const u8 gUnknown_085ED9C7[] = _("Battle Tower - Ability Symbol");
-const u8 gUnknown_085ED9E5[] = _("Battle Dome - Tactics Symbol");
-const u8 gUnknown_085EDA02[] = _("Battle Palace - Spirits Symbol");
-const u8 gUnknown_085EDA21[] = _("Battle Arena - Guts Symbol");
-const u8 gUnknown_085EDA3C[] = _("Battle Factory - Knowledge Symbol");
-const u8 gUnknown_085EDA5E[] = _("Battle Pike - Luck Symbol");
-const u8 gUnknown_085EDA78[] = _("Battle Pyramid - Brave Symbol");
-const u8 gUnknown_085EDA96[] = _("There is no Battle Record.");
-const u8 gUnknown_085EDAB1[] = _("BATTLE TOWER");
-const u8 gUnknown_085EDABE[] = _("BATTLE DOME");
-const u8 gUnknown_085EDACA[] = _("BATTLE PALACE");
-const u8 gUnknown_085EDAD8[] = _("BATTLE ARENA");
-const u8 gUnknown_085EDAE5[] = _("BATTLE FACTORY");
-const u8 gUnknown_085EDAF4[] = _("BATTLE PIKE");
-const u8 gUnknown_085EDB00[] = _("BATTLE PYRAMID");
-const u8 gUnknown_085EDB0F[] = _("KO opponents and aim for the top!\nYour ability will be tested.");
-const u8 gUnknown_085EDB4E[] = _("Keep winning at the tournament!\nYour tactics will be tested.");
-const u8 gUnknown_085EDB8B[] = _("Watch your POKéMON battle!\nYour spirit will be tested.");
-const u8 gUnknown_085EDBC2[] = _("Win battles with teamed-up POKéMON!\nYour guts will be tested.");
-const u8 gUnknown_085EDC00[] = _("Aim for victory using rental POKéMON!\nYour knowledge will be tested.");
-const u8 gUnknown_085EDC45[] = _("Select one of three paths to battle!\nYour luck will be tested.");
-const u8 gUnknown_085EDC84[] = _("Aim for the top with exploration!\nYour bravery will be tested.");
+const u8 gText_UnusedCancel[] = _("CANCEL"); // Unused
+const u8 gText_EmptyString7[] = _("");
+const u8 gText_CheckFrontierMap[] = _("Check BATTLE FRONTIER MAP.");
+const u8 gText_CheckTrainerCard[] = _("Check TRAINER CARD.");
+const u8 gText_ViewRecordedBattle[] = _("View recorded battle.");
+const u8 gText_PutAwayFrontierPass[] = _("Put away the FRONTIER PASS.");
+const u8 gText_CurrentBattlePoints[] = _("Your current Battle Points.");
+const u8 gText_CollectedSymbols[] = _("Your collected Symbols.");
+const u8 gText_BattleTowerAbilitySymbol[] = _("Battle Tower - Ability Symbol");
+const u8 gText_BattleDomeTacticsSymbol[] = _("Battle Dome - Tactics Symbol");
+const u8 gText_BattlePalaceSpiritsSymbol[] = _("Battle Palace - Spirits Symbol");
+const u8 gText_BattleArenaGutsSymbol[] = _("Battle Arena - Guts Symbol");
+const u8 gText_BattleFactoryKnowledgeSymbol[] = _("Battle Factory - Knowledge Symbol");
+const u8 gText_BattlePikeLuckSymbol[] = _("Battle Pike - Luck Symbol");
+const u8 gText_BattlePyramidBraveSymbol[] = _("Battle Pyramid - Brave Symbol");
+const u8 gText_ThereIsNoBattleRecord[] = _("There is no Battle Record.");
+const u8 gText_BattleTower3[] = _("BATTLE TOWER");
+const u8 gText_BattleDome2[] = _("BATTLE DOME");
+const u8 gText_BattlePalace2[] = _("BATTLE PALACE");
+const u8 gText_BattleArena2[] = _("BATTLE ARENA");
+const u8 gText_BattleFactory2[] = _("BATTLE FACTORY");
+const u8 gText_BattlePike2[] = _("BATTLE PIKE");
+const u8 gText_BattlePyramid2[] = _("BATTLE PYRAMID");
+const u8 gText_BattleTowerDesc[] = _("KO opponents and aim for the top!\nYour ability will be tested.");
+const u8 gText_BattleDomeDesc[] = _("Keep winning at the tournament!\nYour tactics will be tested.");
+const u8 gText_BattlePalaceDesc[] = _("Watch your POKéMON battle!\nYour spirit will be tested.");
+const u8 gText_BattleArenaDesc[] = _("Win battles with teamed-up POKéMON!\nYour guts will be tested.");
+const u8 gText_BattleFactoryDesc[] = _("Aim for victory using rental POKéMON!\nYour knowledge will be tested.");
+const u8 gText_BattlePikeDesc[] = _("Select one of three paths to battle!\nYour luck will be tested.");
+const u8 gText_BattlePyramidDesc[] = _("Aim for the top with exploration!\nYour bravery will be tested.");
const u8 gText_ContinueMenuPlayer[] = _("PLAYER");
const u8 gText_ContinueMenuTime[] = _("TIME");
const u8 gText_ContinueMenuPokedex[] = _("POKéDEX");
@@ -1401,27 +1400,27 @@ const u8 gText_2nd[] = _("2nd");
const u8 gText_3rd[] = _("3rd");
const u8 gText_4th[] = _("4th");
const u8 gText_Friend[] = _("Friend");
-const u8 gUnknown_085EDFB7[] = _("POKeMON");
+const u8 gText_Pokemon3[] = _("POKeMON"); // Unused
const u8 gJPText_MysteryGift[] = _("ふしぎなもらいもの");
const u8 gJPText_DecideStop[] = _("{A_BUTTON}けってい {B_BUTTON}やめる");
-const u8 gUnknown_085EDFD6[] = _("カードeリーダー{PLUS} で\nふしぎなもらいものを よみこみます");
-const u8 gUnknown_085EDFF5[] = _("カードeリーダー{PLUS}の メニューから\n‘つうしん'を えらび");
-const u8 gUnknown_085EE014[] = _("‘ゲームボーイアドバンスとつうしん'\nを せんたく してください");
-const u8 gUnknown_085EE035[] = _("カードeリーダー{PLUS}の ‘つうしん'を\nえらんで Aボタンを おしてください");
-const u8 gUnknown_085EE05C[] = _("せつぞくが まちがっています");
-const u8 gUnknown_085EE06B[] = _("カードの よみこみを\nちゅうし しました");
-const u8 gUnknown_085EE080[] = _("カードeリーダー{PLUS}と\nつうしん できません");
-const u8 gUnknown_085EE097[] = _("つうしん ちゅう です");
-const u8 gUnknown_085EE0A3[] = _("つうしん エラーです\nせつぞくを たしかめて ください");
-const u8 gUnknown_085EE0BF[] = _("つうしん エラーです\nはじめから やりなおして ください");
-const u8 gUnknown_085EE0DC[] = _("カードeリーダー{PLUS} に\nカードを よみこませて ください");
-const u8 gUnknown_085EE0FA[] = _("つうしん しゅうりょう!");
-const u8 gUnknown_085EE107[] = _("あらたな トレーナーが\nホウエンに やってきた!");
-const u8 gUnknown_085EE120[] = _("しばらく おまちください");
-const u8 gUnknown_085EE12D[] = _("かきこみ エラー です\nデータが ほぞん できませんでした");
-const u8 gUnknown_085EE14B[] = _("RED");
-const u8 gUnknown_085EE14F[] = _("BLUE");
-const u8 gUnknown_085EE154[] = _("---");
+const u8 gJPText_ReceiveMysteryGiftWithEReader[] = _("カードeリーダー{PLUS} で\nふしぎなもらいものを よみこみます");
+const u8 gJPText_SelectConnectFromEReaderMenu[] = _("カードeリーダー{PLUS}の メニューから\n‘つうしん'を えらび");
+const u8 gJPText_SelectConnectWithGBA[] = _("‘ゲームボーイアドバンスとつうしん'\nを せんたく してください");
+const u8 gJPText_SelectConnectAndPressA[] = _("カードeリーダー{PLUS}の ‘つうしん'を\nえらんで Aボタンを おしてください"); // Unused
+const u8 gJPText_LinkIsIncorrect[] = _("せつぞくが まちがっています");
+const u8 gJPText_CardReadingHasBeenHalted[] = _("カードの よみこみを\nちゅうし しました");
+const u8 gJPText_UnableConnectWithEReader[] = _("カードeリーダー{PLUS}と\nつうしん できません"); // Unused
+const u8 gJPText_Connecting[] = _("つうしん ちゅう です");
+const u8 gJPText_ConnectionErrorCheckLink[] = _("つうしん エラーです\nせつぞくを たしかめて ください");
+const u8 gJPText_ConnectionErrorTryAgain[] = _("つうしん エラーです\nはじめから やりなおして ください"); // Link error
+const u8 gJPText_AllowEReaderToLoadCard[] = _("カードeリーダー{PLUS} に\nカードを よみこませて ください");
+const u8 gJPText_ConnectionComplete[] = _("つうしん しゅうりょう!");
+const u8 gJPText_NewTrainerHasComeToHoenn[] = _("あらたな トレーナーが\nホウエンに やってきた!");
+const u8 gJPText_PleaseWaitAMoment[] = _("しばらく おまちください");
+const u8 gJPText_WriteErrorUnableToSaveData[] = _("かきこみ エラー です\nデータが ほぞん できませんでした");
+const u8 gText_Red[] = _("RED");
+const u8 gText_Blue[] = _("BLUE");
+const u8 gText_3Dashes[] = _("---"); // Unused
const u8 gText_SingleBattleRoomResults[] = _("{PLAYER}'s Single Battle Room Results");
const u8 gText_DoubleBattleRoomResults[] = _("{PLAYER}'s Double Battle Room Results");
const u8 gText_MultiBattleRoomResults[] = _("{PLAYER}'s Multi Battle Room Results");
@@ -1501,11 +1500,11 @@ const u8 gText_GoldCard[] = _("GOLD");
const u8 gText_Day[] = _("DAY");
const u8 gText_Colon3[] = _(":");
const u8 gText_Confirm2[] = _("CONFIRM");
-const u8 gUnknown_085EE698[] = _("Days");
-const u8 gUnknown_085EE69D[] = _("Time:");
-const u8 gUnknown_085EE6A3[] = _("Game time");
-const u8 gUnknown_085EE6AD[] = _("RTC time");
-const u8 gUnknown_085EE6B6[] = _("Updated time");
+const u8 gText_Days[] = _("Days"); // Unused
+const u8 gText_TimeColon2[] = _("Time:"); // Unused
+const u8 gText_GameTime[] = _("Game time"); // Unused
+const u8 gText_RTCTime[] = _("RTC time"); // Unused
+const u8 gText_UpdatedTime[] = _("Updated time"); // Unused
const u8 gText_MenuPokedex[] = _("POKéDEX");
const u8 gText_MenuPokemon[] = _("POKéMON");
const u8 gText_MenuBag[] = _("BAG");
@@ -1532,13 +1531,13 @@ const u8 gText_LoadingEvent[] = _("Loading event…");
const u8 gText_DontRemoveCableTurnOff[] = _("Don't remove the Game Link cable.\nDon't turn off the power.");
const u8 gText_EventSafelyLoaded[] = _("The event was safely loaded.");
const u8 gText_LoadErrorEndingSession[] = _("Loading error.\nEnding session.");
-const u8 gUnknown_085EE846[] = _("プレイヤー");
-const u8 gUnknown_085EE84C[] = _("さま");
+const u8 gJPText_Player[] = _("プレイヤー"); // Unused
+const u8 gJPText_Sama[] = _("さま"); // Unused
const u8 gText_DexHoenn[] = _("HOENN");
const u8 gText_DexNational[] = _("NATIONAL");
const u8 gText_PokedexDiploma[] = _("PLAYER: {CLEAR 0x10}{COLOR RED}{SHADOW LIGHT_RED}{PLAYER}{COLOR DARK_GREY}{SHADOW LIGHT_GREY}\n\nThis document certifies\nthat you have successfully\ncompleted your\n{STR_VAR_1} POKéDEX.\n\n{CLEAR_TO 0x42}{COLOR RED}{SHADOW LIGHT_RED}GAME FREAK");
-const u8 gUnknown_085EE8DC[] = _("{COLOR RED}{SHADOW LIGHT_RED}ゲ-ムフリ-ク");
-const u8 gUnknown_085EE8EA[] = _("{COLOR RED}{SHADOW LIGHT_RED}");
+const u8 gJPText_GameFreak[] = _("{COLOR RED}{SHADOW LIGHT_RED}ゲ-ムフリ-ク"); // Unused
+const u8 gText_DiplomaEmpty[] = _("{COLOR RED}{SHADOW LIGHT_RED}"); // Unused
const u8 gText_Hoenn[] = _("HOENN");
const u8 gText_OhABite[] = _("Oh! A bite!");
const u8 gText_PokemonOnHook[] = _("A POKéMON's on the hook!{PAUSE_UNTIL_PRESS}");
@@ -1574,13 +1573,13 @@ const u8 gEasyChatGroupName_TrendySaying[] = _("TRENDY SAYING");
const u8 gEasyChatGroupName_Pokemon2[] = _("POKéMON2");
const u8 gText_ThreeQuestionMarks[] = _("???");
-const u8 gUnknown_085EEA46[] = _("MAX. HP");
-const u8 gUnknown_085EEA4E[] = _("ATTACK");
-const u8 gUnknown_085EEA55[] = _("DEFENSE");
-const u8 gUnknown_085EEA5D[] = _("SPEED");
-const u8 gUnknown_085EEA63[] = _("SP. ATK");
-const u8 gUnknown_085EEA6B[] = _("SP. DEF");
-const u8 gText_UnkCtrlF904[] = _("{PLUS}");
+const u8 gText_MaxHP[] = _("MAX. HP");
+const u8 gText_Attack[] = _("ATTACK");
+const u8 gText_Defense[] = _("DEFENSE");
+const u8 gText_Speed[] = _("SPEED");
+const u8 gText_SpAtk[] = _("SP. ATK");
+const u8 gText_SpDef[] = _("SP. DEF");
+const u8 gText_Plus[] = _("{PLUS}");
const u8 gText_Dash[] = _("-");
const u8 gText_FromSpace[] = _("From ");
const u8 gText_MixingRecords[] = _("Mixing records…");
@@ -1631,10 +1630,10 @@ const u8 gText_Yes3[] = _("YES");
const u8 gText_No3[] = _("NO");
const u8 gText_PkmnForSwap[] = _("{PKMN} FOR SWAP");
const u8 gText_Cancel3[] = _("CANCEL");
-const u8 gUnknown_085EECE4[] = _("SWAP");
-const u8 gUnknown_085EECE9[] = _("ACCEPT");
+const u8 gText_Swap2[] = _("SWAP"); // Unused
+const u8 gText_Accept[] = _("ACCEPT"); // Unused
const u8 gText_AcceptThisPkmn[] = _("Accept this POKéMON?");
-const u8 gUnknown_085EED05[] = _(" ");
+const u8 gText_4Spaces[] = _(" "); // Unused
const u8 gText_SamePkmnInPartyAlready[] = _("Same {PKMN} in party already.");
const u8 gText_DecimalPoint[] = _(".");
const u8 gText_SavingPlayer[] = _("PLAYER");
@@ -1674,7 +1673,7 @@ ALIGNED(4) const u8 gText_DontHaveCardNewOneInput[] = _("You don't have a WONDER
ALIGNED(4) const u8 gText_DontHaveNewsNewOneInput[] = _("You don't have any WONDER NEWS,\nso new NEWS will be input.");
ALIGNED(4) const u8 gText_WhereShouldCardBeAccessed[] = _("Where should the WONDER CARD\nbe accessed?");
ALIGNED(4) const u8 gText_WhereShouldNewsBeAccessed[] = _("Where should the WONDER NEWS\nbe accessed?");
-ALIGNED(4) const u8 gUnknown_085EEFC0[] = _("Communication standby…\nB Button: Cancel");
+ALIGNED(4) const u8 gText_CommunicationStandbyBButtonCancel[] = _("Communication standby…\nB Button: Cancel"); // Unused
ALIGNED(4) const u8 gText_Communicating[] = _("Communicating…");
ALIGNED(4) const u8 gText_CommunicationCompleted[] = _("Communication completed.");
ALIGNED(4) const u8 gText_CommunicationError[] = _("Communication error.");
@@ -1748,12 +1747,12 @@ const u8 gText_MoveRelearnerPkmnTryingToLearnMove[] = _("{STR_VAR_1} is trying t
const u8 gText_MoveRelearnerStopTryingToTeachMove[] = _("Stop trying to teach\n{STR_VAR_2}?");
const u8 gText_MoveRelearnerAndPoof[] = _("{PAUSE 32}1, {PAUSE 15}2, and {PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p");
const u8 gText_MoveRelearnerPkmnForgotMoveAndLearnedNew[] = _("{STR_VAR_1} forgot {STR_VAR_3}.\pAnd…\p{STR_VAR_1} learned {STR_VAR_2}.");
-const u8 gUnknown_085EF9C8[] = _("{STR_VAR_1} did not learn the\nmove {STR_VAR_2}.");
+const u8 gText_MoveRelearnedPkmnDidNotLearnMove[] = _("{STR_VAR_1} did not learn the\nmove {STR_VAR_2}."); // Unused
const u8 gText_MoveRelearnerGiveUp[] = _("Give up trying to teach a new\nmove to {STR_VAR_1}?");
const u8 gText_MoveRelearnerWhichMoveToForget[] = _("Which move should be\nforgotten?\p");
const u8 gText_MoveRelearnerBattleMoves[] = _("BATTLE MOVES");
const u8 gText_MoveRelearnerContestMovesTitle[] = _("CONTEST MOVES");
-const u8 gUnknown_085EFA4C[] = _("TYPE/");
+const u8 gText_MoveRelearnerType[] = _("TYPE/"); // Unused
const u8 gText_MoveRelearnerPP[] = _("PP/");
const u8 gText_MoveRelearnerPower[] = _("POWER/");
const u8 gText_MoveRelearnerAccuracy[] = _("ACCURACY/");
@@ -1770,46 +1769,46 @@ const u8 gText_ClearingData[] = _("Clearing data…\nPlease wait.");
const u8 gText_IsThisTheCorrectTime[] = _("Is this the correct time?");
const u8 gText_Confirm3[] = _("CONFIRM");
const u8 gText_Cancel4[] = _("CANCEL");
-const u8 gMrStoneMatchCallDesc[] = _("DEVON PRES");
-const u8 gMrStoneMatchCallName[] = _("MR. STONE");
-const u8 gStevenMatchCallDesc[] = _("HARD AS ROCK");
-const u8 gStevenMatchCallName[] = _("STEVEN");
-const u8 gMayBrendanMatchCallDesc[] = _("RAD NEIGHBOR");
-const u8 gNormanMatchCallDesc[] = _("RELIABLE ONE");
-const u8 gMomMatchCallDesc[] = _("CALM & KIND");
-const u8 gWallyMatchCallDesc[] = _("{PKMN} LOVER");
-const u8 gNormanMatchCallName[] = _("DAD");
-const u8 gMomMatchCallName[] = _("MOM");
-const u8 gScottMatchCallDesc[] = _("ELUSIVE EYES");
-const u8 gScottMatchCallName[] = _("SCOTT");
-const u8 gRoxanneMatchCallDesc[] = _("ROCKIN' WHIZ");
-const u8 gBrawlyMatchCallDesc[] = _("THE BIG HIT");
-const u8 gWattsonMatchCallDesc[] = _("SWELL SHOCK");
-const u8 gFlanneryMatchCallDesc[] = _("PASSION BURN");
-const u8 gWinonaMatchCallDesc[] = _("SKY TAMER");
-const u8 gTateLizaMatchCallDesc[] = _("MYSTIC DUO");
-const u8 gJuanMatchCallDesc[] = _("DANDY CHARM");
-const u8 gEliteFourMatchCallDesc[] = _("ELITE FOUR");
-const u8 gChampionMatchCallDesc[] = _("CHAMPION");
-const u8 gProfBirchMatchCallDesc[] = _("{PKMN} PROF.");
+const u8 gText_MrStoneMatchCallDesc[] = _("DEVON PRES");
+const u8 gText_MrStoneMatchCallName[] = _("MR. STONE");
+const u8 gText_StevenMatchCallDesc[] = _("HARD AS ROCK");
+const u8 gText_StevenMatchCallName[] = _("STEVEN");
+const u8 gText_MayBrendanMatchCallDesc[] = _("RAD NEIGHBOR");
+const u8 gText_NormanMatchCallDesc[] = _("RELIABLE ONE");
+const u8 gText_MomMatchCallDesc[] = _("CALM & KIND");
+const u8 gText_WallyMatchCallDesc[] = _("{PKMN} LOVER");
+const u8 gText_NormanMatchCallName[] = _("DAD");
+const u8 gText_MomMatchCallName[] = _("MOM");
+const u8 gText_ScottMatchCallDesc[] = _("ELUSIVE EYES");
+const u8 gText_ScottMatchCallName[] = _("SCOTT");
+const u8 gText_RoxanneMatchCallDesc[] = _("ROCKIN' WHIZ");
+const u8 gText_BrawlyMatchCallDesc[] = _("THE BIG HIT");
+const u8 gText_WattsonMatchCallDesc[] = _("SWELL SHOCK");
+const u8 gText_FlanneryMatchCallDesc[] = _("PASSION BURN");
+const u8 gText_WinonaMatchCallDesc[] = _("SKY TAMER");
+const u8 gText_TateLizaMatchCallDesc[] = _("MYSTIC DUO");
+const u8 gText_JuanMatchCallDesc[] = _("DANDY CHARM");
+const u8 gText_EliteFourMatchCallDesc[] = _("ELITE FOUR");
+const u8 gText_ChampionMatchCallDesc[] = _("CHAMPION");
+const u8 gText_ProfBirchMatchCallDesc[] = _("{PKMN} PROF.");
const u8 gText_CommStandbyAwaitingOtherPlayer[] = _("Communication standby…\nAwaiting another player to choose.");
const u8 gText_BattleWasRefused[] = _("The battle was refused.{PAUSE 60}");
const u8 gText_RefusedBattle[] = _("Refused the battle.{PAUSE 60}");
-const u8 gUnknown_085EFC3E[] = _("NO WEATHER");
-const u8 gUnknown_085EFC49[] = _("SUNNY");
-const u8 gUnknown_085EFC4F[] = _("SUNNY2");
-const u8 gUnknown_085EFC56[] = _("RAIN");
-const u8 gUnknown_085EFC5B[] = _("SNOW");
-const u8 gUnknown_085EFC60[] = _("LIGHTNING");
-const u8 gUnknown_085EFC6A[] = _("FOG");
-const u8 gUnknown_085EFC6E[] = _("VOLCANO ASH");
-const u8 gUnknown_085EFC7A[] = _("SANDSTORM");
-const u8 gUnknown_085EFC84[] = _("FOG2");
-const u8 gUnknown_085EFC89[] = _("SEAFLOOR");
-const u8 gUnknown_085EFC92[] = _("CLOUDY");
-const u8 gUnknown_085EFC99[] = _("SUNNY3");
-const u8 gUnknown_085EFCA0[] = _("HEAVY RAIN");
-const u8 gUnknown_085EFCAB[] = _("SEAFLOOR2");
+const u8 gText_NoWeather[] = _("NO WEATHER"); // Below are unused debug names for weather types
+const u8 gText_Sunny[] = _("SUNNY"); // Unused
+const u8 gText_Sunny2[] = _("SUNNY2"); // Unused
+const u8 gText_Rain[] = _("RAIN"); // Unused
+const u8 gText_Snow[] = _("SNOW"); // Unused
+const u8 gText_Lightning[] = _("LIGHTNING"); // Unused
+const u8 gText_Fog[] = _("FOG"); // Unused
+const u8 gText_VolcanoAsh[] = _("VOLCANO ASH"); // Unused
+const u8 gText_Sandstorm[] = _("SANDSTORM"); // Unused
+const u8 gText_Fog2[] = _("FOG2"); // Unused
+const u8 gText_Seafloor[] = _("SEAFLOOR"); // Unused
+const u8 gText_Cloudy[] = _("CLOUDY"); // Unused
+const u8 gText_Sunny3[] = _("SUNNY3"); // Unused
+const u8 gText_HeavyRain[] = _("HEAVY RAIN"); // Unused
+const u8 gText_Seafloor2[] = _("SEAFLOOR2"); // Unused
const u8 gText_DelAll[] = _("DEL. ALL");
const u8 gText_Cancel5[] = _("CANCEL");
const u8 gText_Ok2[] = _("OK");
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/title_screen.c b/src/title_screen.c
index 8310ef811..c20e1ba70 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -102,10 +102,10 @@ const u16 gIntroWaterDropAlphaBlend[] =
static const struct OamData sVersionBannerLeftOamData =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 1,
+ .bpp = ST_OAM_8BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
@@ -119,10 +119,10 @@ static const struct OamData sVersionBannerLeftOamData =
static const struct OamData sVersionBannerRightOamData =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 1,
+ .bpp = ST_OAM_8BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.matrixNum = 0,
@@ -190,10 +190,10 @@ static const struct CompressedSpriteSheet sSpriteSheet_EmeraldVersion[] =
static const struct OamData sOamData_CopyrightBanner =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x8),
.x = 0,
.matrixNum = 0,
@@ -302,10 +302,10 @@ static const struct SpritePalette sSpritePalette_PressStart[] =
static const struct OamData sPokemonLogoShineOamData =
{
.y = 160,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
@@ -353,7 +353,7 @@ static void SpriteCB_VersionBannerLeft(struct Sprite *sprite)
{
if (gTasks[sprite->data[1]].data[1] != 0)
{
- sprite->oam.objMode = 0;
+ sprite->oam.objMode = ST_OAM_OBJ_NORMAL;
sprite->pos1.y = VERSION_BANNER_Y_GOAL;
}
else
@@ -370,7 +370,7 @@ static void SpriteCB_VersionBannerRight(struct Sprite *sprite)
{
if (gTasks[sprite->data[1]].data[1] != 0)
{
- sprite->oam.objMode = 0;
+ sprite->oam.objMode = ST_OAM_OBJ_NORMAL;
sprite->pos1.y = VERSION_BANNER_Y_GOAL;
}
else
@@ -484,22 +484,22 @@ static void StartPokemonLogoShine(u8 flashBg)
case 0:
case 2:
spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0);
- gSprites[spriteId].oam.objMode = 2;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
gSprites[spriteId].data[0] = flashBg;
break;
case 1:
spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0);
- gSprites[spriteId].oam.objMode = 2;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
gSprites[spriteId].data[0] = flashBg;
gSprites[spriteId].invisible = TRUE;
spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0);
gSprites[spriteId].callback = SpriteCB_PokemonLogoShine2;
- gSprites[spriteId].oam.objMode = 2;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, -80, 68, 0);
gSprites[spriteId].callback = SpriteCB_PokemonLogoShine2;
- gSprites[spriteId].oam.objMode = 2;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_WINDOW;
break;
}
}
diff --git a/src/trade.c b/src/trade.c
index d95e4ebf5..a9a0b9b2a 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 BufferInGameTradeMonName(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 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
-};
-
-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 void CB2_SaveAndEndWirelessTrade(void);
-static const struct WindowTemplate gUnknown_08338FFC[] =
-{
- {
- .bg = 0,
- .tilemapLeft = 2,
- .tilemapTop = 15,
- .width = 26,
- .height = 4,
- .paletteNum = 0,
- .baseBlock = 64
- },
- DUMMY_WIN_TEMPLATE
-};
+#include "data/trade.h"
-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 arr[4];
+ 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)
{
- arr[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL);
+ moves[i] = GetMonData(&gPlayerParty[partyIdx], i + MON_DATA_MOVE1, NULL);
}
else
{
- arr[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 (arr[i] != MOVE_NONE)
+ if (moves[i] != MOVE_NONE)
{
- StringAppend(a0, gMoveNames[arr[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,483 +1974,425 @@ 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;
+ s32 i;
+ for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++)
+ {
+ const u8 (*r5)[2];
+ const u8 (*r4)[2];
+ u32 r0 = 3 * whichParty;
+ const u8 (*r1)[2][2] = sTradeMonLevelCoords;
- for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++)
- {
- sub_8079C4C(whichParty, i, gTradeLevelDisplayCoords[whichParty][i][0], gTradeLevelDisplayCoords[whichParty][i][1], gTradeMonBoxCoords[whichParty][i][0], gTradeMonBoxCoords[whichParty][i][1]);
- }
-}
-#else
-NAKED
-static void sub_8079E44(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, [r0]\n\
- adds r0, 0x36\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- cmp r7, r0\n\
- bge _08079E94\n\
- lsls r0, r6, 1\n\
- adds r0, r6\n\
- ldr r1, =gTradeLevelDisplayCoords\n\
- lsls r0, 2\n\
- adds r5, r0, r1\n\
- ldr r1, =gTradeMonBoxCoords\n\
- adds r4, r0, r1\n\
-_08079E6A:\n\
- lsls r1, r7, 24\n\
- lsrs r1, 24\n\
- ldrb r2, [r5]\n\
- ldrb r3, [r5, 0x1]\n\
- ldrb r0, [r4]\n\
- str r0, [sp]\n\
- ldrb r0, [r4, 0x1]\n\
- str r0, [sp, 0x4]\n\
- adds r0, r6, 0\n\
- bl sub_8079C4C\n\
- adds r5, 0x2\n\
- adds r4, 0x2\n\
- adds r7, 0x1\n\
- ldr r0, =gUnknown_0203229C\n\
- ldr r0, [r0]\n\
- adds r0, 0x36\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- cmp r7, r0\n\
- blt _08079E6A\n\
-_08079E94:\n\
- add sp, 0x8\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool");
-}
-#endif // NONMATCHING
-
-static void sub_8079EA8(u8 whichParty)
+ r5 = r1[r0];
+ r4 = sTradeMonBoxCoords[r0];
+ DrawTradeMenuPartyMonInfo(
+ whichParty,
+ i,
+ r5[i][0],
+ r5[i][1],
+ r4[i][0],
+ r4[i][1]
+ );
+ }
+}
+
+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 +2405,116 @@ 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.
-#ifdef NONMATCHING
-int sub_807A918(struct Pokemon *mon, u16 monIdx)
+// 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
+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;
}
}
versions = 0;
- unk = 1;
+ canTradeAnyMon = TRUE;
for (i = 0; i < GetLinkPlayerCount(); i++)
{
version = gLinkPlayers[i].version & 0xFF;
@@ -3762,196 +2532,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))
+ // Does player not have National Dex
+ do
{
- unk = 0;
- }
+ if (!(player->progressFlags & 0xF))
+ canTradeAnyMon = FALSE;
+
+ if (versions && (player->progressFlags / 16))
+ canTradeAnyMon = FALSE;
+ } while (0);
}
- 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;
- }
-}
-#else
-NAKED
-int sub_807A918(struct Pokemon *mon, u16 a1)
-{
- asm_unified("push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0x18\n\
- adds r6, r0, 0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- mov r8, r1\n\
- movs r5, 0\n\
- ldr r0, =gPlayerPartyCount\n\
- ldrb r0, [r0]\n\
- cmp r5, r0\n\
- bge _0807A95A\n\
- mov r4, sp\n\
-_0807A934:\n\
- movs r0, 0x64\n\
- muls r0, r5\n\
- adds r0, r6, r0\n\
- movs r1, 0x41\n\
- bl GetMonData\n\
- str r0, [r4]\n\
- movs r1, 0xCE\n\
- lsls r1, 1\n\
- cmp r0, r1\n\
- bne _0807A94E\n\
- movs r0, 0\n\
- str r0, [r4]\n\
-_0807A94E:\n\
- adds r4, 0x4\n\
- adds r5, 0x1\n\
- ldr r0, =gPlayerPartyCount\n\
- ldrb r0, [r0]\n\
- cmp r5, r0\n\
- blt _0807A934\n\
-_0807A95A:\n\
- movs r7, 0\n\
- movs r6, 0x1\n\
- movs r5, 0\n\
- ldr r4, =gLinkPlayers\n\
- b _0807A980\n\
- .pool\n\
-_0807A96C:\n\
- ldrb r0, [r4]\n\
- subs r0, 0x4\n\
- cmp r0, 0x1\n\
- bhi _0807A978\n\
- movs r7, 0\n\
- b _0807A97C\n\
-_0807A978:\n\
- movs r0, 0x1\n\
- orrs r7, r0\n\
-_0807A97C:\n\
- adds r4, 0x1C\n\
- adds r5, 0x1\n\
-_0807A980:\n\
- bl GetLinkPlayerCount\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r5, r0\n\
- blt _0807A96C\n\
- movs r5, 0\n\
- movs r4, 0\n\
- b _0807A9B4\n\
-_0807A992:\n\
- ldr r0, =gLinkPlayers\n\
- adds r2, r4, r0\n\
- ldrb r1, [r2, 0x10]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0807A9A2\n\
- movs r6, 0\n\
-_0807A9A2:\n\
- cmp r7, 0\n\
- beq _0807A9B0\n\
- ldrb r0, [r2, 0x10]\n\
- lsrs r0, 4\n\
- cmp r0, 0\n\
- beq _0807A9B0\n\
- movs r6, 0\n\
-_0807A9B0:\n\
- adds r4, 0x1C\n\
- adds r5, 0x1\n\
-_0807A9B4:\n\
- bl GetLinkPlayerCount\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r5, r0\n\
- blt _0807A992\n\
- cmp r6, 0\n\
- bne _0807A9EA\n\
- mov r1, r8\n\
- lsls r0, r1, 2\n\
- mov r1, sp\n\
- adds r4, r1, r0\n\
- ldrh r0, [r4]\n\
- bl IsSpeciesInHoennDex\n\
- cmp r0, 0\n\
- bne _0807A9E0\n\
- movs r0, 0x2\n\
- b _0807AA1A\n\
- .pool\n\
-_0807A9E0:\n\
- ldr r0, [r4]\n\
- cmp r0, 0\n\
- bne _0807A9EA\n\
- movs r0, 0x3\n\
- b _0807AA1A\n\
-_0807A9EA:\n\
- movs r2, 0\n\
- movs r5, 0\n\
- ldr r0, =gPlayerPartyCount\n\
- ldrb r0, [r0]\n\
- cmp r2, r0\n\
- bge _0807AA0A\n\
- adds r3, r0, 0\n\
- mov r1, sp\n\
-_0807A9FA:\n\
- cmp r8, r5\n\
- beq _0807AA02\n\
- ldr r0, [r1]\n\
- adds r2, r0\n\
-_0807AA02:\n\
- adds r1, 0x4\n\
- adds r5, 0x1\n\
- cmp r5, r3\n\
- blt _0807A9FA\n\
-_0807AA0A:\n\
- cmp r2, 0\n\
- beq _0807AA18\n\
- movs r0, 0\n\
- b _0807AA1A\n\
- .pool\n\
-_0807AA18:\n\
- movs r0, 0x1\n\
-_0807AA1A:\n\
- add sp, 0x18\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1");
-}
-#endif // NONMATCHING
+ return CAN_TRADE_MON;
+}
static void sub_807AA28(struct Sprite *sprite)
{
@@ -4009,11 +2624,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 +2639,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 (++sTradeData->timer > 30)
{
- if (++gUnknown_020322A0->timer > 30)
- {
- CheckShouldAdvanceLinkState();
- gMain.state++;
- }
- }
- else
- {
- 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 +2874,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 +2902,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 +2992,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 +3006,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 +3015,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 +3071,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 = ST_OAM_AFFINE_DOUBLE;
+ CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE);
+ 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);
+ BufferInGameTradeMonName();
+ }
+ 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 = ST_OAM_AFFINE_DOUBLE;
+ CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], SPRITE_SHAPE(64x64), SPRITE_SIZE(64x64), ST_OAM_AFFINE_DOUBLE);
+ 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);
+ BufferInGameTradeMonName();
+ }
+ 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 +4311,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 +4358,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 +4376,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 +4404,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 +4412,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 BufferInGameTradeMonName(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 +4429,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 +4445,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 +4462,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 +4475,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 +4506,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 +4529,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 +4555,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 +4718,7 @@ static void sub_807EB50(void)
UpdatePaletteFade();
}
-static void c2_080543C4(void)
+static void CB2_FreeTradeData(void)
{
if (!gPaletteFade.active)
{
@@ -6120,7 +4727,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 +4741,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);
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ SetMainCallback2(CB2_InGameTrade);
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
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 +4845,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 +4864,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 +4891,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 dcf1fa076..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"
@@ -71,7 +71,7 @@ void CreateAvailableDecorationsMenu(u8 taskId)
if (curWidth > windowWidth)
windowWidth = curWidth;
}
- windowTemplate.width = convert_pixel_width_to_tile_width(windowWidth);
+ windowTemplate.width = ConvertPixelWidthToTileWidth(windowWidth);
data[3] = AddWindow(&windowTemplate);
DrawStdFrameWithCustomTileAndPalette(data[3], FALSE, 0x214, 14);
for (i = 0; i < 4; i++)
@@ -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..5ea076c2a 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"
@@ -281,8 +281,8 @@ static const u16 *const gFireRedTrainerCardStarPals[] =
gFireRedTrainerCard4Star_Pal,
};
-static const u8 gUnknown_0856FB0C[] = {0, 2, 3};
-static const u8 gUnknown_0856FB0F[] = {0, 4, 5};
+static const u8 sTrainerCardTextColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
+static const u8 sTrainerCardStatColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED};
static const u8 gUnknown_0856FB12[6] = {0};
static const u8 gUnknown_0856FB18[][2][2] =
@@ -728,7 +728,7 @@ static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCar
trainerCard->version = GAME_VERSION;
SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
trainerCard->hasAllSymbols = HasAllFrontierSymbols();
- trainerCard->frontierBP = gSaveBlock2Ptr->frontier.field_EBA;
+ trainerCard->frontierBP = gSaveBlock2Ptr->frontier.cardBattlePoints;
if (trainerCard->hasAllSymbols)
trainerCard->stars++;
@@ -744,7 +744,7 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard)
trainerCard->version = GAME_VERSION;
SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
trainerCard->var_3A = HasAllFrontierSymbols();
- *((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.field_EBA;
+ *((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.cardBattlePoints;
if (trainerCard->var_3A)
trainerCard->stars++;
@@ -973,9 +973,9 @@ static void PrintNameOnCard(void)
StringCopy(txtPtr, sData->trainerCard.playerName);
ConvertInternationalString(txtPtr, sData->language);
if (sData->cardType == CARD_TYPE_FRLG)
- AddTextPrinterParameterized3(1, 1, 20, 28, gUnknown_0856FB0C, TEXT_SPEED_FF, buffer);
+ AddTextPrinterParameterized3(1, 1, 20, 28, sTrainerCardTextColors, TEXT_SPEED_FF, buffer);
else
- AddTextPrinterParameterized3(1, 1, 16, 33, gUnknown_0856FB0C, TEXT_SPEED_FF, buffer);
+ AddTextPrinterParameterized3(1, 1, 16, 33, sTrainerCardTextColors, TEXT_SPEED_FF, buffer);
}
static void PrintIdOnCard(void)
@@ -997,7 +997,7 @@ static void PrintIdOnCard(void)
top = 9;
}
- AddTextPrinterParameterized3(1, 1, xPos, top, gUnknown_0856FB0C, TEXT_SPEED_FF, buffer);
+ AddTextPrinterParameterized3(1, 1, xPos, top, sTrainerCardTextColors, TEXT_SPEED_FF, buffer);
}
static void PrintMoneyOnCard(void)
@@ -1006,11 +1006,11 @@ static void PrintMoneyOnCard(void)
u8 top;
if (!sData->isHoenn)
- AddTextPrinterParameterized3(1, 1, 20, 56, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardMoney);
+ AddTextPrinterParameterized3(1, 1, 20, 56, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardMoney);
else
- AddTextPrinterParameterized3(1, 1, 16, 57, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardMoney);
+ AddTextPrinterParameterized3(1, 1, 16, 57, sTrainerCardTextColors, 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)
{
@@ -1022,7 +1022,7 @@ static void PrintMoneyOnCard(void)
xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128);
top = 57;
}
- AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4);
+ AddTextPrinterParameterized3(1, 1, xOffset, top, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4);
}
static u16 GetCaughtMonsCount(void)
@@ -1040,10 +1040,10 @@ static void PrintPokedexOnCard(void)
if (FlagGet(FLAG_SYS_POKEDEX_GET))
{
if (!sData->isHoenn)
- AddTextPrinterParameterized3(1, 1, 20, 72, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardPokedex);
+ AddTextPrinterParameterized3(1, 1, 20, 72, sTrainerCardTextColors, 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);
+ AddTextPrinterParameterized3(1, 1, 16, 73, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardPokedex);
+ StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3), gText_EmptyString6);
if (!sData->isHoenn)
{
xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144);
@@ -1054,11 +1054,11 @@ static void PrintPokedexOnCard(void)
xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128);
top = 73;
}
- AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4);
+ AddTextPrinterParameterized3(1, 1, xOffset, top, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4);
}
}
-static const u8 *const gUnknown_0856FB40[] = {gUnknown_0856FB0C, gUnknown_0856FB12};
+static const u8 *const gUnknown_0856FB40[] = {sTrainerCardTextColors, gUnknown_0856FB12};
static void PrintTimeOnCard(void)
{
@@ -1068,9 +1068,9 @@ static void PrintTimeOnCard(void)
u32 r7, r4, r10;
if (!sData->isHoenn)
- AddTextPrinterParameterized3(1, 1, 20, 88, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardTime);
+ AddTextPrinterParameterized3(1, 1, 20, 88, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardTime);
else
- AddTextPrinterParameterized3(1, 1, 16, 89, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardTime);
+ AddTextPrinterParameterized3(1, 1, 16, 89, sTrainerCardTextColors, TEXT_SPEED_FF, gText_TrainerCardTime);
if (sData->isLink)
{
@@ -1103,13 +1103,13 @@ static void PrintTimeOnCard(void)
r7 -= r10;
FillWindowPixelRect(1, PIXEL_FILL(0), r7, r4, r10, 15);
- ConvertIntToDecimalStringN(gStringVar4, hours, 1, 3);
- AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4);
+ ConvertIntToDecimalStringN(gStringVar4, hours, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ AddTextPrinterParameterized3(1, 1, r7, r4, sTrainerCardTextColors, 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);
- AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4);
+ ConvertIntToDecimalStringN(gStringVar4, minutes, STR_CONV_MODE_LEADING_ZEROS, 2);
+ AddTextPrinterParameterized3(1, 1, r7, r4, sTrainerCardTextColors, TEXT_SPEED_FF, gStringVar4);
}
static const u8 gUnknown_0856FB48[] = {0x71, 0x68};
@@ -1119,10 +1119,10 @@ static void PrintProfilePhraseOnCard(void)
{
if (sData->isLink)
{
- AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[sData->isHoenn], gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_19[0]);
- AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[0], 0) + 14, gUnknown_0856FB48[sData->isHoenn], gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_19[1]);
- AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB4A[sData->isHoenn], gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_19[2]);
- AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[2], 0) + 14, gUnknown_0856FB4A[sData->isHoenn], gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_19[3]);
+ AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_19[0]);
+ AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[0], 0) + 14, gUnknown_0856FB48[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_19[1]);
+ AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB4A[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_19[2]);
+ AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[2], 0) + 14, gUnknown_0856FB4A[sData->isHoenn], sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_19[3]);
}
}
@@ -1140,9 +1140,9 @@ static void PrintNameOnCard2(void)
static void sub_80C3B50(void)
{
if (!sData->isHoenn)
- AddTextPrinterParameterized3(1, 1, 136, 9, gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_4D);
+ AddTextPrinterParameterized3(1, 1, 136, 9, sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_4D);
else
- AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, sData->var_4D, 216), 9, gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_4D);
+ AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, sData->var_4D, 216), 9, sTrainerCardTextColors, TEXT_SPEED_FF, sData->var_4D);
}
static const u8 gUnknown_0856FB4C[] = {0xfd, 0x02, 0xf0, 0xfd, 0x03, 0xf0, 0xfd, 0x04, 0xff};
@@ -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);
}
}
@@ -1163,14 +1163,14 @@ static const u8 gUnknown_0856FB57[] = {0xd8, 0xd8};
static void PrintString(u8 top, const u8* str1, u8* str2, const u8* color)
{
- AddTextPrinterParameterized3(1, 1, gUnknown_0856FB55[sData->isHoenn], top * 16 + 33, gUnknown_0856FB0C, TEXT_SPEED_FF, str1);
+ AddTextPrinterParameterized3(1, 1, gUnknown_0856FB55[sData->isHoenn], top * 16 + 33, sTrainerCardTextColors, TEXT_SPEED_FF, str1);
AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, str2, gUnknown_0856FB57[sData->isHoenn]), top * 16 + 33, color, TEXT_SPEED_FF, str2);
}
static void PrintHofDebutStringOnCard(void)
{
if (sData->hasHofResult)
- PrintString(0, gText_HallOfFameDebut, sData->var_93, gUnknown_0856FB0F);
+ PrintString(0, gText_HallOfFameDebut, sData->var_93, sTrainerCardStatColors);
}
static const u8 *const gUnknown_0856FB5C[] = {gText_LinkBattles, gText_LinkCableBattles, gText_LinkBattles};
@@ -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);
}
}
@@ -1192,51 +1192,51 @@ static void PrintWinsLossesStringOnCard(void)
StringCopy(gStringVar1, sData->var_165);
StringCopy(gStringVar2, sData->var_1AB);
StringExpandPlaceholders(gStringVar4, gText_WinsLosses);
- PrintString(1, sData->var_D9, gStringVar4, gUnknown_0856FB0C);
+ PrintString(1, sData->var_D9, gStringVar4, sTrainerCardTextColors);
}
}
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)
{
if (sData->hasTrades)
- PrintString(2, gText_PokemonTrades, sData->var_237, gUnknown_0856FB0F);
+ PrintString(2, gText_PokemonTrades, sData->var_237, sTrainerCardStatColors);
}
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)
{
if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints)
- PrintString(4, gText_BerryCrush, sData->var_2C3, gUnknown_0856FB0F);
+ PrintString(4, gText_BerryCrush, sData->var_2C3, sTrainerCardStatColors);
}
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)
{
if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.unionRoomNum)
- PrintString(3, gText_UnionTradesAndBattles, sData->var_34F, gUnknown_0856FB0F);
+ PrintString(3, gText_UnionTradesAndBattles, sData->var_34F, sTrainerCardStatColors);
}
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);
}
}
@@ -1244,19 +1244,19 @@ static void PrintPokeblocksNumOnCard(void)
static void PrintPokeblockStringOnCard(void)
{
if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.pokeblocksWithFriends)
- PrintString(3, gText_PokeblocksWithFriends, sData->var_395, gUnknown_0856FB0F);
+ PrintString(3, gText_PokeblocksWithFriends, sData->var_395, sTrainerCardStatColors);
}
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)
{
if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.contestsWithFriends)
- PrintString(4, gText_WonContestsWFriends, sData->var_3DB, gUnknown_0856FB0F);
+ PrintString(4, gText_WonContestsWFriends, sData->var_3DB, sTrainerCardStatColors);
}
static void PrintBattleFacilityNumsOnCard(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;
@@ -1289,11 +1289,11 @@ static void PrintBattleFacilityStringOnCard(void)
{
case CARD_TYPE_RS:
if (sData->hasBattleTowerWins)
- PrintString(5, gText_BattleTower, sData->var_421, gUnknown_0856FB0C);
+ PrintString(5, gText_BattleTower, sData->var_421, sTrainerCardTextColors);
break;
case CARD_TYPE_EMERALD:
if (sData->trainerCard.frontierBP)
- PrintString(5, gText_BattlePtsWon, sData->var_421, gUnknown_0856FB0F);
+ PrintString(5, gText_BattlePtsWon, sData->var_421, sTrainerCardStatColors);
break;
case CARD_TYPE_FRLG:
break;
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index 2a7e003d9..c339a56e0 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"
@@ -22,6 +22,7 @@
#include "trainer_hill.h"
#include "window.h"
#include "util.h"
+#include "constants/battle_ai.h"
#include "constants/event_object_movement_constants.h"
#include "constants/event_objects.h"
#include "constants/items.h"
@@ -45,7 +46,7 @@ struct TrHillStruct2
{
u8 floorId;
struct TrHillTag tag;
- struct TrHillFloor floors[4];
+ struct TrHillFloor floors[NUM_TRAINER_HILL_FLOORS];
};
static EWRAM_DATA struct TrHillStruct2 *sHillData = NULL;
@@ -54,30 +55,30 @@ EWRAM_DATA u32 *gTrainerHillVBlankCounter = NULL;
// This file's functions.
static void TrainerHillStartChallenge(void);
-static void sub_81D58D8(void);
-static void sub_81D5924(void);
-static void sub_81D59D0(void);
+static void GetOwnerState(void);
+static void GiveChallengePrize(void);
+static void CheckFinalTime(void);
static void TrainerHillResumeTimer(void);
static void TrainerHillSetPlayerLost(void);
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 sub_81D62B4(void);
-static void sub_81D64AC(void);
-static void sub_81D64DC(void);
-static void sub_81D64FC(void);
-static void sub_81D6518(void);
-static void sub_81D6568(void);
+static void BufferChallengeTime(void);
+static void GetAllFloorsUsed(void);
+static void ClearVarResult(void);
+static void IsTrainerHillChallengeActive(void);
+static void ShowTrainerHillPostBattleText(void);
+static void SetAllTrainerFlags(void);
+static void GetGameSaved(void);
+static void SetGameSaved(void);
+static void ClearGameSaved(void);
+static void GetChallengeWon(void);
static void TrainerHillSetTag(void);
static void SetUpDataStruct(void);
static void FreeDataStruct(void);
static void nullsub_2(void);
static void SetTimerValue(u32 *dst, u32 val);
static u32 GetTimerValue(u32 *src);
-static void sub_81D642C(struct Pokemon *mon, u8 level);
-static u16 sub_81D6640(void);
+static void SetTrainerHillMonLevel(struct Pokemon *mon, u8 level);
+static u16 GetPrizeItemId(void);
// const data
#include "data/battle_frontier/trainer_hill.h"
@@ -86,7 +87,7 @@ struct
{
u8 trainerClass;
u8 musicId;
-} static const gUnknown_0862A3B4[] =
+} static const sTrainerClassesAndMusic[] =
{
{TRAINER_CLASS_TEAM_AQUA, TRAINER_ENCOUNTER_MUSIC_AQUA},
{TRAINER_CLASS_AQUA_ADMIN, TRAINER_ENCOUNTER_MUSIC_AQUA},
@@ -144,63 +145,64 @@ struct
{TRAINER_CLASS_SCHOOL_KID, TRAINER_ENCOUNTER_MUSIC_MALE},
};
-static const u16 gUnknown_0862A48C[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A498[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4A4[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4B0[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4BC[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4C8[] = {ITEM_TM05_ROAR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4D4[] = {ITEM_TM36_SLUDGE_BOMB, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4E0[] = {ITEM_TM06_TOXIC, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4EC[] = {ITEM_TM11_SUNNY_DAY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A4F8[] = {ITEM_TM26_EARTHQUAKE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A504[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A510[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A51C[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A528[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A534[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A540[] = {ITEM_TM31_BRICK_BREAK, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A54C[] = {ITEM_TM41_TORMENT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A558[] = {ITEM_TM48_SKILL_SWAP, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A564[] = {ITEM_TM19_GIGA_DRAIN, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-static const u16 gUnknown_0862A570[] = {ITEM_TM45_ATTRACT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
-
-static const u16 *const gUnknown_0862A57C[] =
-{
- gUnknown_0862A48C,
- gUnknown_0862A498,
- gUnknown_0862A4A4,
- gUnknown_0862A4B0,
- gUnknown_0862A4BC,
- gUnknown_0862A4C8,
- gUnknown_0862A4D4,
- gUnknown_0862A4E0,
- gUnknown_0862A4EC,
- gUnknown_0862A4F8
+static const u16 sPrizeListRareCandy1[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListLuxuryBall1[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListMaxRevive1[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListMaxEther1[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListElixir1[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListRoar[] = {ITEM_TM05_ROAR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListSludgeBomb[] = {ITEM_TM36_SLUDGE_BOMB, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListToxic[] = {ITEM_TM06_TOXIC, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListSunnyDay[] = {ITEM_TM11_SUNNY_DAY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListEarthQuake[] = {ITEM_TM26_EARTHQUAKE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+
+static const u16 sPrizeListRareCandy2[] = {ITEM_RARE_CANDY, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListLuxuryBall2[] = {ITEM_LUXURY_BALL, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListMaxRevive2[] = {ITEM_MAX_REVIVE, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListMaxEther2[] = {ITEM_MAX_ETHER, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListElixir2[] = {ITEM_ELIXIR, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListBrickBreak[] = {ITEM_TM31_BRICK_BREAK, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListTorment[] = {ITEM_TM41_TORMENT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListSkillSwap[] = {ITEM_TM48_SKILL_SWAP, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListGigaSwap[] = {ITEM_TM19_GIGA_DRAIN, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+static const u16 sPrizeListAttract[] = {ITEM_TM45_ATTRACT, ITEM_ETHER, ITEM_MAX_POTION, ITEM_REVIVE, ITEM_FLUFFY_TAIL, ITEM_GREAT_BALL};
+
+static const u16 *const sPrizeLists1[NUM_TRAINER_HILL_PRIZE_LISTS] =
+{
+ sPrizeListRareCandy1,
+ sPrizeListLuxuryBall1,
+ sPrizeListMaxRevive1,
+ sPrizeListMaxEther1,
+ sPrizeListElixir1,
+ sPrizeListRoar,
+ sPrizeListSludgeBomb,
+ sPrizeListToxic,
+ sPrizeListSunnyDay,
+ sPrizeListEarthQuake
};
-static const u16 *const gUnknown_0862A5A4[] =
-{
- gUnknown_0862A504,
- gUnknown_0862A510,
- gUnknown_0862A51C,
- gUnknown_0862A528,
- gUnknown_0862A534,
- gUnknown_0862A540,
- gUnknown_0862A54C,
- gUnknown_0862A558,
- gUnknown_0862A564,
- gUnknown_0862A570
+static const u16 *const sPrizeLists2[NUM_TRAINER_HILL_PRIZE_LISTS] =
+{
+ sPrizeListRareCandy2,
+ sPrizeListLuxuryBall2,
+ sPrizeListMaxRevive2,
+ sPrizeListMaxEther2,
+ sPrizeListElixir2,
+ sPrizeListBrickBreak,
+ sPrizeListTorment,
+ sPrizeListSkillSwap,
+ sPrizeListGigaSwap,
+ sPrizeListAttract
};
-static const u16 *const *const gUnknown_0862A5CC[] =
+static const u16 *const *const sPrizeListSets[] =
{
- gUnknown_0862A57C,
- gUnknown_0862A5A4
+ sPrizeLists1,
+ sPrizeLists2
};
-static const u16 gUnknown_0862A5D4[] = INCBIN_U16("graphics/pokenav/862A5D4.gbapal");
-static const u8 sRecordWinColors[] = {0, 2, 3};
+static const u16 sUnknown_0862A5D4[] = INCBIN_U16("graphics/pokenav/862A5D4.gbapal");
+static const u8 sRecordWinColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
static const struct TrHillTag *const sDataPerTag[] =
{
@@ -221,24 +223,24 @@ static const u8 *const sFloorStrings[] =
static void (* const sHillFunctions[])(void) =
{
- TrainerHillStartChallenge,
- sub_81D58D8,
- sub_81D5924,
- sub_81D59D0,
- TrainerHillResumeTimer,
- TrainerHillSetPlayerLost,
- TrainerHillGetChallengeStatus,
- sub_81D5B2C,
- sub_81D5BBC,
- sub_81D5C00,
- sub_81D5C5C,
- sub_81D62B4,
- sub_81D64AC,
- sub_81D64DC,
- sub_81D64FC,
- sub_81D6518,
- sub_81D6568,
- TrainerHillSetTag,
+ [TRAINER_HILL_FUNC_START] = TrainerHillStartChallenge,
+ [TRAINER_HILL_FUNC_GET_OWNER_STATE] = GetOwnerState,
+ [TRAINER_HILL_FUNC_GIVE_PRIZE] = GiveChallengePrize,
+ [TRAINER_HILL_FUNC_CHECK_FINAL_TIME] = CheckFinalTime,
+ [TRAINER_HILL_FUNC_RESUME_TIMER] = TrainerHillResumeTimer,
+ [TRAINER_HILL_FUNC_SET_LOST] = TrainerHillSetPlayerLost,
+ [TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS] = TrainerHillGetChallengeStatus,
+ [TRAINER_HILL_FUNC_GET_CHALLENGE_TIME] = BufferChallengeTime,
+ [TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED] = GetAllFloorsUsed,
+ [TRAINER_HILL_FUNC_CLEAR_RESULT] = ClearVarResult,
+ [TRAINER_HILL_FUNC_IN_CHALLENGE] = IsTrainerHillChallengeActive,
+ [TRAINER_HILL_FUNC_POST_BATTLE_TEXT] = ShowTrainerHillPostBattleText,
+ [TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS] = SetAllTrainerFlags,
+ [TRAINER_HILL_FUNC_GET_GAME_SAVED] = GetGameSaved,
+ [TRAINER_HILL_FUNC_SET_GAME_SAVED] = SetGameSaved,
+ [TRAINER_HILL_FUNC_CLEAR_GAME_SAVED] = ClearGameSaved,
+ [TRAINER_HILL_FUNC_GET_WON] = GetChallengeWon,
+ [TRAINER_HILL_FUNC_SET_TAG] = TrainerHillSetTag,
};
static const u8 *const sTagMatchStrings[] =
@@ -249,7 +251,7 @@ static const u8 *const sTagMatchStrings[] =
gText_ExpertTagMatch,
};
-static const struct EventObjectTemplate gUnknown_0862A670 =
+static const struct EventObjectTemplate sTrainerEventObjectTemplate =
{
.graphicsId = EVENT_OBJ_GFX_RIVAL_BRENDAN_NORMAL,
.elevation = 3,
@@ -259,8 +261,18 @@ static const struct EventObjectTemplate gUnknown_0862A670 =
.trainerType = 1,
};
-static const u32 gUnknown_0862A688[] = {MAP_NUM(TRAINER_HILL_2F), MAP_NUM(TRAINER_HILL_3F), MAP_NUM(TRAINER_HILL_4F), MAP_NUM(TRAINER_HILL_ROOF)};
-static const u8 gUnknown_0862A698[][3] = {{0, 1, 2}, {3, 4, 5}};
+static const u32 sNextFloorMapNum[NUM_TRAINER_HILL_FLOORS] =
+{
+ MAP_NUM(TRAINER_HILL_2F),
+ MAP_NUM(TRAINER_HILL_3F),
+ MAP_NUM(TRAINER_HILL_4F),
+ MAP_NUM(TRAINER_HILL_ROOF)
+};
+static const u8 sTrainerPartySlots[][PARTY_SIZE / 2] =
+{
+ {0, 1, 2},
+ {3, 4, 5}
+};
// code
void CallTrainerHillFunction(void)
@@ -274,8 +286,8 @@ void ResetTrainerHillResults(void)
{
s32 i;
- gSaveBlock2Ptr->frontier.field_EF9_1 = 0;
- gSaveBlock2Ptr->frontier.field_EF9_0 = 0;
+ gSaveBlock2Ptr->frontier.savedGame = 0;
+ gSaveBlock2Ptr->frontier.unk_EF9 = 0;
gSaveBlock1Ptr->trainerHill.bestTime = 0;
for (i = 0; i < 4; i++)
SetTimerValue(&gSaveBlock1Ptr->trainerHillTimes[i], HILL_MAX_TIME);
@@ -366,16 +378,16 @@ void CopyTrainerHillTrainerText(u8 which, u16 trainerId)
switch (which)
{
- case 2:
+ case TRAINER_HILL_TEXT_INTRO:
FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechBefore);
break;
- case 3:
+ case TRAINER_HILL_TEXT_PLAYER_LOST:
FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechWin);
break;
- case 4:
+ case TRAINER_HILL_TEXT_PLAYER_WON:
FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechLose);
break;
- case 5:
+ case TRAINER_HILL_TEXT_AFTER:
FrontierSpeechToString(sHillData->floors[floorId].trainers[id].speechAfter);
break;
}
@@ -391,42 +403,42 @@ static void TrainerHillStartChallenge(void)
else
gSaveBlock1Ptr->trainerHill.field_3D6E_0f = 0;
- gSaveBlock1Ptr->trainerHill.field_3D6C = 0;
+ gSaveBlock1Ptr->trainerHill.unk_3D6C = 0;
SetTrainerHillVBlankCounter(&gSaveBlock1Ptr->trainerHill.timer);
gSaveBlock1Ptr->trainerHill.timer = 0;
- gSaveBlock1Ptr->trainerHill.field_3D6E_0c = 0;
- gSaveBlock1Ptr->trainerHill.field_3D6E_0b = 0;
+ gSaveBlock1Ptr->trainerHill.spokeToOwner = 0;
+ gSaveBlock1Ptr->trainerHill.checkedFinalTime = 0;
gSaveBlock1Ptr->trainerHill.maybeECardScanDuringChallenge = 0;
- gSaveBlock2Ptr->frontier.field_EE0 = 0;
+ gSaveBlock2Ptr->frontier.trainerFlags = 0;
gBattleOutcome = 0;
- gSaveBlock1Ptr->trainerHill.field_3D6E_0a = 0;
+ gSaveBlock1Ptr->trainerHill.receivedPrize = 0;
}
-static void sub_81D58D8(void)
+static void GetOwnerState(void)
{
ClearTrainerHillVBlankCounter();
gSpecialVar_Result = 0;
- if (gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ if (gSaveBlock1Ptr->trainerHill.spokeToOwner)
gSpecialVar_Result++;
- if (gSaveBlock1Ptr->trainerHill.field_3D6E_0a && gSaveBlock1Ptr->trainerHill.field_3D6E_0b)
+ if (gSaveBlock1Ptr->trainerHill.receivedPrize && gSaveBlock1Ptr->trainerHill.checkedFinalTime)
gSpecialVar_Result++;
- gSaveBlock1Ptr->trainerHill.field_3D6E_0c = 1;
+ gSaveBlock1Ptr->trainerHill.spokeToOwner = TRUE;
}
-static void sub_81D5924(void)
+static void GiveChallengePrize(void)
{
- u16 itemId = sub_81D6640();
+ u16 itemId = GetPrizeItemId();
- if (sHillData->tag.numFloors != 4 || gSaveBlock1Ptr->trainerHill.field_3D6E_0a)
+ if (sHillData->tag.numFloors != NUM_TRAINER_HILL_FLOORS || gSaveBlock1Ptr->trainerHill.receivedPrize)
{
gSpecialVar_Result = 2;
}
else if (AddBagItem(itemId, 1) == TRUE)
{
CopyItemName(itemId, gStringVar2);
- gSaveBlock1Ptr->trainerHill.field_3D6E_0a = 1;
- gSaveBlock2Ptr->frontier.field_EF9_0 = 0;
+ gSaveBlock1Ptr->trainerHill.receivedPrize = TRUE;
+ gSaveBlock2Ptr->frontier.unk_EF9 = 0;
gSpecialVar_Result = 0;
}
else
@@ -435,9 +447,11 @@ static void sub_81D5924(void)
}
}
-static void sub_81D59D0(void)
+// If bestTime > timer, the challenge was completed faster and its a new record
+// Otherwise the owner says it was a slow time and to complete it faster next time
+static void CheckFinalTime(void)
{
- if (gSaveBlock1Ptr->trainerHill.field_3D6E_0b)
+ if (gSaveBlock1Ptr->trainerHill.checkedFinalTime)
{
gSpecialVar_Result = 2;
}
@@ -452,12 +466,12 @@ static void sub_81D59D0(void)
gSpecialVar_Result = 1;
}
- gSaveBlock1Ptr->trainerHill.field_3D6E_0b = 1;
+ gSaveBlock1Ptr->trainerHill.checkedFinalTime = TRUE;
}
static void TrainerHillResumeTimer(void)
{
- if (!gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ if (!gSaveBlock1Ptr->trainerHill.spokeToOwner)
{
if (gSaveBlock1Ptr->trainerHill.timer >= HILL_MAX_TIME)
gSaveBlock1Ptr->trainerHill.timer = HILL_MAX_TIME;
@@ -468,7 +482,7 @@ static void TrainerHillResumeTimer(void)
static void TrainerHillSetPlayerLost(void)
{
- gSaveBlock1Ptr->trainerHill.hasLost = 1;
+ gSaveBlock1Ptr->trainerHill.hasLost = TRUE;
}
static void TrainerHillGetChallengeStatus(void)
@@ -476,7 +490,7 @@ static void TrainerHillGetChallengeStatus(void)
if (gSaveBlock1Ptr->trainerHill.hasLost)
{
// The player lost their last match.
- gSaveBlock1Ptr->trainerHill.hasLost = 0;
+ gSaveBlock1Ptr->trainerHill.hasLost = FALSE;
gSpecialVar_Result = TRAINER_HILL_PLAYER_STATUS_LOST;
}
else if (gSaveBlock1Ptr->trainerHill.maybeECardScanDuringChallenge)
@@ -492,7 +506,7 @@ static void TrainerHillGetChallengeStatus(void)
}
}
-static void sub_81D5B2C(void)
+static void BufferChallengeTime(void)
{
s32 total, minutes, secondsWhole, secondsFraction;
@@ -511,34 +525,38 @@ static void sub_81D5B2C(void)
ConvertIntToDecimalStringN(gStringVar3, secondsFraction, STR_CONV_MODE_LEADING_ZEROS, 2);
}
-static void sub_81D5BBC(void)
+// Returns TRUE if all 4 floors are used
+// Returns FALSE otherwise, and buffers the number of floors used
+// The only time fewer than all 4 floors are used is for the JP-exclusive E-Reader and Default modes
+static void GetAllFloorsUsed(void)
{
SetUpDataStruct();
- if (sHillData->tag.numFloors != 4)
+ if (sHillData->tag.numFloors != NUM_TRAINER_HILL_FLOORS)
{
ConvertIntToDecimalStringN(gStringVar1, sHillData->tag.numFloors, STR_CONV_MODE_LEFT_ALIGN, 1);
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
}
else
{
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
}
FreeDataStruct();
}
-static void sub_81D5C00(void)
+// May have been dummied. Every time this is called a conditional for var result occurs afterwards
+static void ClearVarResult(void)
{
SetUpDataStruct();
gSpecialVar_Result = 0;
FreeDataStruct();
}
-bool8 sub_81D5C18(void)
+bool8 InTrainerHillChallenge(void)
{
if (VarGet(VAR_TRAINER_HILL_IS_ACTIVE) == 0)
return FALSE;
- else if (gSaveBlock1Ptr->trainerHill.field_3D6E_0c)
+ else if (gSaveBlock1Ptr->trainerHill.spokeToOwner)
return FALSE;
else if (GetCurrentTrainerHillMapId() != 0)
return TRUE;
@@ -546,12 +564,12 @@ bool8 sub_81D5C18(void)
return FALSE;
}
-static void sub_81D5C5C(void)
+static void IsTrainerHillChallengeActive(void)
{
- if (!sub_81D5C18())
- gSpecialVar_Result = 0;
+ if (!InTrainerHillChallenge())
+ gSpecialVar_Result = FALSE;
else
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
}
void nullsub_129(void)
@@ -611,12 +629,12 @@ static void SetTimerValue(u32 *dst, u32 val)
*dst = val;
}
-void sub_81D5DF8(void)
+void LoadTrainerHillEventObjectTemplates(void)
{
u8 i, floorId;
struct EventObjectTemplate *eventTemplates = gSaveBlock1Ptr->eventObjectTemplates;
- if (!sub_81D5F48())
+ if (!LoadTrainerHillFloorEventObjectScripts())
return;
SetUpDataStruct();
@@ -629,7 +647,7 @@ void sub_81D5DF8(void)
{
u8 bits;
- eventTemplates[i] = gUnknown_0862A670;
+ eventTemplates[i] = sTrainerEventObjectTemplate;
eventTemplates[i].localId = i + 1;
eventTemplates[i].graphicsId = FacilityClassToGraphicsId(sHillData->floors[floorId].trainers[i].facilityClass);
eventTemplates[i].x = sHillData->floors[floorId].display.coords[i] & 0xF;
@@ -637,16 +655,17 @@ void sub_81D5DF8(void)
bits = i << 2;
eventTemplates[i].movementType = ((sHillData->floors[floorId].display.direction >> bits) & 0xF) + MOVEMENT_TYPE_FACE_UP;
eventTemplates[i].trainerRange_berryTreeId = (sHillData->floors[floorId].display.range >> bits) & 0xF;
- eventTemplates[i].script = EventScript_2C83F0;
+ eventTemplates[i].script = TrainerHill_EventScript_TrainerBattle;
gSaveBlock2Ptr->frontier.trainerIds[i] = i + 1;
}
FreeDataStruct();
}
-bool32 sub_81D5F48(void)
+bool32 LoadTrainerHillFloorEventObjectScripts(void)
{
SetUpDataStruct();
+ // Something may have been dummied here
FreeDataStruct();
return TRUE;
}
@@ -657,8 +676,8 @@ static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
{
u32 var0, var1, var2, var3;
- var0 = (sHillData->floors[floorId].unk3A0[arg2] >> (15 - bit)) & 1;
- var1 = sHillData->floors[floorId].data[arg2 * arg3 + bit];
+ var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit)) & 1;
+ var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit];
var3 = 0x200;
var2 = 0x3000;
@@ -716,20 +735,20 @@ static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
}
#endif // NONMATCHING
-void sub_81D5FB4(u16 *mapArg)
+void GenerateTrainerHillFloorLayout(u16 *mapArg)
{
s32 i, j;
u16 *src, *dst;
u8 mapId = GetCurrentTrainerHillMapId();
- if (mapId == 6)
+ if (mapId == TRAINER_HILL_ENTRANCE)
{
InitMapFromSavedGame();
return;
}
SetUpDataStruct();
- if (mapId == 5)
+ if (mapId == TRAINER_HILL_ROOF)
{
InitMapFromSavedGame();
FreeDataStruct();
@@ -766,9 +785,9 @@ bool32 InTrainerHill(void)
bool32 ret;
if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_1F
- || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_2F
- || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_3F
- || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_4F)
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_2F
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_3F
+ || gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_4F)
ret = TRUE;
else
ret = FALSE;
@@ -778,58 +797,61 @@ bool32 InTrainerHill(void)
u8 GetCurrentTrainerHillMapId(void)
{
- u8 ret;
+ u8 mapId;
if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_1F)
- ret = 1;
+ mapId = TRAINER_HILL_1F;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_2F)
- ret = 2;
+ mapId = TRAINER_HILL_2F;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_3F)
- ret = 3;
+ mapId = TRAINER_HILL_3F;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_4F)
- ret = 4;
+ mapId = TRAINER_HILL_4F;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ROOF)
- ret = 5;
+ mapId = TRAINER_HILL_ROOF;
else if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ENTRANCE)
- ret = 6;
+ mapId = TRAINER_HILL_ENTRANCE;
else
- ret = 0;
+ mapId = 0;
- return ret;
+ return mapId;
}
-static bool32 sub_81D6100(void)
+// Unused
+static bool32 OnTrainerHillRoof(void)
{
- bool32 ret;
+ bool32 onRoof;
if (gMapHeader.mapLayoutId == LAYOUT_TRAINER_HILL_ROOF)
- ret = TRUE;
+ onRoof = TRUE;
else
- ret = FALSE;
+ onRoof = FALSE;
- return ret;
+ return onRoof;
}
-const struct WarpEvent* sub_81D6120(void)
+const struct WarpEvent* SetWarpDestinationTrainerHill4F(void)
{
const struct MapHeader *header = Overworld_GetMapHeaderByGroupAndId(MAP_GROUP(TRAINER_HILL_4F), MAP_NUM(TRAINER_HILL_4F));
return &header->events->warps[1];
}
-const struct WarpEvent* sub_81D6134(u8 warpEventId)
+// For warping from the roof in challenges where the 4F is not the final challenge floor
+// This would only occur in the JP-exclusive Default and E-Reader challenges
+const struct WarpEvent* SetWarpDestinationTrainerHillFinalFloor(u8 warpEventId)
{
- u8 id;
+ u8 numFloors;
const struct MapHeader *header;
if (warpEventId == 1)
return &gMapHeader.events->warps[1];
- id = sub_81D6490();
- if (id == 0 || id >= 5)
- id = 4;
+ numFloors = GetNumFloorsInTrainerHillChallenge();
+ if (numFloors == 0 || numFloors > NUM_TRAINER_HILL_FLOORS)
+ numFloors = NUM_TRAINER_HILL_FLOORS;
- header = Overworld_GetMapHeaderByGroupAndId(MAP_GROUP(TRAINER_HILL_4F), gUnknown_0862A688[id - 1]);
+ header = Overworld_GetMapHeaderByGroupAndId(MAP_GROUP(TRAINER_HILL_4F), sNextFloorMapNum[numFloors - 1]);
return &header->events->warps[0];
}
@@ -843,7 +865,7 @@ bool8 GetHillTrainerFlag(u8 eventObjectId)
u32 floorId = GetFloorId() * 2;
u8 bitId = gEventObjects[eventObjectId].localId - 1 + floorId;
- return gSaveBlock2Ptr->frontier.field_EE0 & gBitTable[bitId];
+ return gSaveBlock2Ptr->frontier.trainerFlags & gBitTable[bitId];
}
void SetHillTrainerFlag(void)
@@ -855,7 +877,7 @@ void SetHillTrainerFlag(void)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_A)
{
- gSaveBlock2Ptr->frontier.field_EE0 |= gBitTable[floorId + i];
+ gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[floorId + i];
break;
}
}
@@ -866,7 +888,7 @@ void SetHillTrainerFlag(void)
{
if (gSaveBlock2Ptr->frontier.trainerIds[i] == gTrainerBattleOpponent_B)
{
- gSaveBlock2Ptr->frontier.field_EE0 |= gBitTable[floorId + i];
+ gSaveBlock2Ptr->frontier.trainerFlags |= gBitTable[floorId + i];
break;
}
}
@@ -875,19 +897,19 @@ void SetHillTrainerFlag(void)
const u8 *GetTrainerHillTrainerScript(void)
{
- return EventScript_2C83F0;
+ return TrainerHill_EventScript_TrainerBattle;
}
-static void sub_81D62B4(void)
+static void ShowTrainerHillPostBattleText(void)
{
- CopyTrainerHillTrainerText(5, gSpecialVar_LastTalked);
+ CopyTrainerHillTrainerText(TRAINER_HILL_TEXT_AFTER, gSpecialVar_LastTalked);
sub_80982B8();
}
-static void sub_81D62CC(u16 trainerId, u8 firstMonId)
+static void CreateNPCTrainerHillParty(u16 trainerId, u8 firstMonId)
{
u8 trId, level;
- s32 i, floorId, arrId;
+ s32 i, floorId, partySlot;
if (trainerId == 0 || trainerId > 2)
return;
@@ -896,13 +918,13 @@ static void sub_81D62CC(u16 trainerId, u8 firstMonId)
SetUpDataStruct();
level = GetHighestLevelInPlayerParty();
floorId = GetFloorId();
- for (i = firstMonId, arrId = 0; i < firstMonId + 3; i++, arrId++)
+ for (i = firstMonId, partySlot = 0; i < firstMonId + 3; i++, partySlot++)
{
- u8 id = gUnknown_0862A698[trId][arrId];
+ u8 id = sTrainerPartySlots[trId][partySlot];
struct Pokemon *mon = &gEnemyParty[i];
CreateBattleTowerMon(mon, &sHillData->floors[floorId].trainers[trId].mons[id]);
- sub_81D642C(mon, level);
+ SetTrainerHillMonLevel(mon, level);
}
FreeDataStruct();
@@ -911,22 +933,22 @@ static void sub_81D62CC(u16 trainerId, u8 firstMonId)
void FillHillTrainerParty(void)
{
ZeroEnemyPartyMons();
- sub_81D62CC(gTrainerBattleOpponent_A, 0);
+ CreateNPCTrainerHillParty(gTrainerBattleOpponent_A, 0);
}
void FillHillTrainersParties(void)
{
ZeroEnemyPartyMons();
- sub_81D62CC(gTrainerBattleOpponent_A, 0);
- sub_81D62CC(gTrainerBattleOpponent_B, 3);
+ CreateNPCTrainerHillParty(gTrainerBattleOpponent_A, 0);
+ CreateNPCTrainerHillParty(gTrainerBattleOpponent_B, 3);
}
// This function is unused, but my best guess is
// it was supposed to return AI scripts for trainer
// hill trainers.
-u32 sub_81D63C4(void)
+u32 GetTrainerHillAIFlags(void)
{
- return 7;
+ return (AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY);
}
u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
@@ -939,16 +961,16 @@ u8 GetTrainerEncounterMusicIdInTrainerHill(u16 trainerId)
facilityClass = sHillData->floors[sHillData->floorId].trainers[trId].facilityClass;
FreeDataStruct();
- for (i = 0; i < ARRAY_COUNT(gUnknown_0862A3B4); i++)
+ for (i = 0; i < ARRAY_COUNT(sTrainerClassesAndMusic); i++)
{
- if (gUnknown_0862A3B4[i].trainerClass == gFacilityClassToTrainerClass[facilityClass])
- return gUnknown_0862A3B4[i].musicId;
+ if (sTrainerClassesAndMusic[i].trainerClass == gFacilityClassToTrainerClass[facilityClass])
+ return sTrainerClassesAndMusic[i].musicId;
}
return 0;
}
-static void sub_81D642C(struct Pokemon *mon, u8 level)
+static void SetTrainerHillMonLevel(struct Pokemon *mon, u8 level)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
u32 exp = gExperienceTables[gBaseStats[species].growthRate][level];
@@ -958,61 +980,63 @@ static void sub_81D642C(struct Pokemon *mon, u8 level)
CalculateMonStats(mon);
}
-u8 sub_81D6490(void)
+u8 GetNumFloorsInTrainerHillChallenge(void)
{
- u8 ret;
+ u8 floors;
SetUpDataStruct();
- ret = sHillData->tag.numFloors;
+ floors = sHillData->tag.numFloors;
FreeDataStruct();
- return ret;
+ return floors;
}
-static void sub_81D64AC(void)
+static void SetAllTrainerFlags(void)
{
- gSaveBlock2Ptr->frontier.field_EE0 = 0xFF;
+ gSaveBlock2Ptr->frontier.trainerFlags = 0xFF;
}
+// Palette never loaded, sub_81D6534 always FALSE
void sub_81D64C0(void)
{
if (sub_81D6534() == TRUE)
- LoadPalette(gUnknown_0862A5D4, 0x70, 0x20);
+ LoadPalette(sUnknown_0862A5D4, 0x70, 0x20);
}
-static void sub_81D64DC(void)
+static void GetGameSaved(void)
{
- gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_EF9_1;
+ gSpecialVar_Result = gSaveBlock2Ptr->frontier.savedGame;
}
-static void sub_81D64FC(void)
+static void SetGameSaved(void)
{
- gSaveBlock2Ptr->frontier.field_EF9_1 = 1;
+ gSaveBlock2Ptr->frontier.savedGame = TRUE;
}
-static void sub_81D6518(void)
+static void ClearGameSaved(void)
{
- gSaveBlock2Ptr->frontier.field_EF9_1 = 0;
+ gSaveBlock2Ptr->frontier.savedGame = FALSE;
}
+// Always FALSE
bool32 sub_81D6534(void)
{
- if (!sub_81D5C18() || GetCurrentTrainerHillMapId() == 6)
+ if (!InTrainerHillChallenge() || GetCurrentTrainerHillMapId() == TRAINER_HILL_ENTRANCE)
return FALSE;
- sub_81D5C00();
+ ClearVarResult();
if (gSpecialVar_Result == 0)
return FALSE;
else
return TRUE;
}
-static void sub_81D6568(void)
+static void GetChallengeWon(void)
{
if (gSaveBlock1Ptr->trainerHill.hasLost)
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
else
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
}
static void TrainerHillSetTag(void)
@@ -1021,49 +1045,50 @@ static void TrainerHillSetTag(void)
gSaveBlock1Ptr->trainerHill.bestTime = gSaveBlock1Ptr->trainerHillTimes[gSpecialVar_0x8005];
}
-static u8 sub_81D65E8(u8 arg0)
+static u8 GetPrizeListId(bool8 maxTrainers)
{
- u8 var, i, modBy;
+ u8 prizeListId, i, modBy;
- var = 0;
- for (i = 0; i < 4; i++)
+ prizeListId = 0;
+ for (i = 0; i < NUM_TRAINER_HILL_FLOORS; i++)
{
- var ^= sHillData->floors[i].unk0 & 0x1F;
- var ^= sHillData->floors[i].unk1 & 0x1F;
+ prizeListId ^= sHillData->floors[i].trainerNum1 & 0x1F;
+ prizeListId ^= sHillData->floors[i].trainerNum2 & 0x1F;
}
- if (arg0)
- modBy = 10;
+ // Not possible to win TMs with fewer than 8 trainers
+ if (maxTrainers)
+ modBy = NUM_TRAINER_HILL_PRIZE_LISTS;
else
- modBy = 5;
+ modBy = NUM_TRAINER_HILL_PRIZE_LISTS / 2;
- var %= modBy;
- return var;
+ prizeListId %= modBy;
+ return prizeListId;
}
-static u16 sub_81D6640(void)
+static u16 GetPrizeItemId(void)
{
u8 i;
- const u16 *ptr;
- s32 var = 0, var2, minutes, id;
+ const u16 *prizeList;
+ s32 var = 0, prizeListSetId, minutes, id;
- for (i = 0; i < 4; i++)
+ for (i = 0; i < NUM_TRAINER_HILL_FLOORS; i++)
{
- var += sHillData->floors[i].unk0;
- var += sHillData->floors[i].unk1;
+ var += sHillData->floors[i].trainerNum1;
+ var += sHillData->floors[i].trainerNum2;
}
- var2 = var / 256;
- var2 %= 2;
- if (FlagGet(FLAG_SYS_GAME_CLEAR) && sHillData->tag.unkField_0 == 8)
- i = sub_81D65E8(1);
+ prizeListSetId = var / 256;
+ prizeListSetId %= 2;
+ if (FlagGet(FLAG_SYS_GAME_CLEAR) && sHillData->tag.numTrainers == NUM_TRAINER_HILL_TRAINERS)
+ i = GetPrizeListId(TRUE);
else
- i = sub_81D65E8(0);
+ i = GetPrizeListId(FALSE);
if (gSaveBlock1Ptr->trainerHill.tag == HILL_TAG_EXPERT)
- i = (i + 1) % 10;
+ i = (i + 1) % NUM_TRAINER_HILL_PRIZE_LISTS;
- ptr = gUnknown_0862A5CC[var2][i];
+ prizeList = sPrizeListSets[prizeListSetId][i];
minutes = (signed)(gSaveBlock1Ptr->trainerHill.timer) / (60 * 60);
if (minutes < 12)
id = 0;
@@ -1078,5 +1103,5 @@ static u16 sub_81D6640(void)
else
id = 5;
- return ptr[id];
+ return prizeList[id];
}
diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c
index 047783a85..99a3fd4c5 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"
@@ -41,7 +41,7 @@ static const struct OamData gUnknown_0860B064 =
static const struct OamData gUnknown_0860B06C =
{
- .affineMode = 1,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
.shape = SPRITE_SHAPE(64x64),
.size = SPRITE_SIZE(64x64)
};
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 22b256a99..5e843164d 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;
@@ -96,10 +97,10 @@ static bool8 (*const sTrainerSeeFuncList2[])(u8 taskId, struct Task *task, struc
static const struct OamData sOamData_Icons =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(16x16),
.x = 0,
.matrixNum = 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 ef826a4af..2e9254253 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1,7 +1,6 @@
#include "global.h"
#include "rtc.h"
#include "overworld.h"
-#include "constants/maps.h"
#include "random.h"
#include "event_data.h"
#include "fieldmap.h"
@@ -14,12 +13,9 @@
#include "pokemon_storage_system.h"
#include "field_message_box.h"
#include "easy_chat.h"
-#include "constants/species.h"
-#include "constants/moves.h"
#include "battle.h"
#include "battle_tower.h"
#include "contest.h"
-#include "constants/items.h"
#include "item.h"
#include "link.h"
#include "main.h"
@@ -31,15 +27,23 @@
#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"
#include "secret_base.h"
#include "tv.h"
#include "data.h"
+#include "constants/battle_frontier.h"
+#include "constants/contest.h"
+#include "constants/items.h"
#include "constants/layouts.h"
+#include "constants/maps.h"
#include "constants/metatile_behaviors.h"
+#include "constants/moves.h"
+#include "constants/region_map_sections.h"
+#include "constants/script_menu.h"
+#include "constants/species.h"
+#include "constants/tv.h"
// Static type declarations
@@ -182,7 +186,7 @@ static void DoTVShowPokemonContestLiveUpdates2(void);
static const struct {
u16 species;
- u16 moves[4];
+ u16 moves[MAX_MON_MOVES];
u8 level;
u8 location;
} sPokeOutbreakSpeciesList[] = {
@@ -633,50 +637,51 @@ static const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
gTVWhatsNo1InHoennTodayText08
};
-static const u8 *const sTVSecretBaseSecretsTextGroup[] = {
- gTVSecretBaseSecretsText00,
- gTVSecretBaseSecretsText01,
- gTVSecretBaseSecretsText02,
- gTVSecretBaseSecretsText03,
- gTVSecretBaseSecretsText04,
- gTVSecretBaseSecretsText05,
- gTVSecretBaseSecretsText06,
- gTVSecretBaseSecretsText07,
- gTVSecretBaseSecretsText08,
- gTVSecretBaseSecretsText09,
- gTVSecretBaseSecretsText10,
- gTVSecretBaseSecretsText11,
- gTVSecretBaseSecretsText12,
- gTVSecretBaseSecretsText13,
- gTVSecretBaseSecretsText14,
- gTVSecretBaseSecretsText15,
- gTVSecretBaseSecretsText16,
- gTVSecretBaseSecretsText17,
- gTVSecretBaseSecretsText18,
- gTVSecretBaseSecretsText19,
- gTVSecretBaseSecretsText20,
- gTVSecretBaseSecretsText21,
- gTVSecretBaseSecretsText22,
- gTVSecretBaseSecretsText23,
- gTVSecretBaseSecretsText24,
- gTVSecretBaseSecretsText25,
- gTVSecretBaseSecretsText26,
- gTVSecretBaseSecretsText27,
- gTVSecretBaseSecretsText28,
- gTVSecretBaseSecretsText29,
- gTVSecretBaseSecretsText30,
- gTVSecretBaseSecretsText31,
- gTVSecretBaseSecretsText32,
- gTVSecretBaseSecretsText33,
- gTVSecretBaseSecretsText34,
- gTVSecretBaseSecretsText35,
- gTVSecretBaseSecretsText36,
- gTVSecretBaseSecretsText37,
- gTVSecretBaseSecretsText38,
- gTVSecretBaseSecretsText39,
- gTVSecretBaseSecretsText40,
- gTVSecretBaseSecretsText41,
- gTVSecretBaseSecretsText42
+static const u8 *const sTVSecretBaseSecretsTextGroup[SBSECRETS_NUM_STATES] =
+{
+ [SBSECRETS_STATE_INTRO] = TVSecretBaseSecrets_Text_Intro,
+ [SBSECRETS_STATE_DO_NEXT1] = TVSecretBaseSecrets_Text_WhatWillPlayerDoNext1,
+ [SBSECRETS_STATE_DO_NEXT2] = TVSecretBaseSecrets_Text_WhatWillPlayerDoNext2,
+ [SBSECRETS_STATE_TOOK_X_STEPS] = TVSecretBaseSecrets_Text_TookXStepsBeforeLeaving,
+ [SBSECRETS_STATE_BASE_INTEREST_LOW] = TVSecretBaseSecrets_Text_BaseFailedToInterestPlayer,
+ [SBSECRETS_STATE_BASE_INTEREST_MED] = TVSecretBaseSecrets_Text_PlayerEnjoyedBase,
+ [SBSECRETS_STATE_BASE_INTEREST_HIGH] = TVSecretBaseSecrets_Text_PlayerHugeFanOfBase,
+ [SBSECRETS_STATE_OUTRO] = TVSecretBaseSecrets_Text_Outro,
+ [SBSECRETS_STATE_NOTHING_USED1] = TVSecretBaseSecrets_Text_StoppedMoving1,
+ [SBSECRETS_STATE_NOTHING_USED2] = TVSecretBaseSecrets_Text_StoppedMoving2,
+ [SBSECRETS_STATE_USED_CHAIR] = TVSecretBaseSecrets_Text_UsedChair,
+ [SBSECRETS_STATE_USED_BALLOON] = TVSecretBaseSecrets_Text_UsedBalloon,
+ [SBSECRETS_STATE_USED_TENT] = TVSecretBaseSecrets_Text_UsedTent,
+ [SBSECRETS_STATE_USED_PLANT] = TVSecretBaseSecrets_Text_UsedPlant,
+ [SBSECRETS_STATE_USED_GOLD_SHIELD] = TVSecretBaseSecrets_Text_UsedGoldShield,
+ [SBSECRETS_STATE_USED_SILVER_SHIELD] = TVSecretBaseSecrets_Text_UsedSilverShield,
+ [SBSECRETS_STATE_USED_GLASS_ORNAMENT] = TVSecretBaseSecrets_Text_UsedGlassOrnament,
+ [SBSECRETS_STATE_USED_TV] = TVSecretBaseSecrets_Text_UsedTV,
+ [SBSECRETS_STATE_USED_MUD_BALL] = TVSecretBaseSecrets_Text_UsedMudBall,
+ [SBSECRETS_STATE_USED_BAG] = TVSecretBaseSecrets_Text_UsedBag,
+ [SBSECRETS_STATE_USED_CUSHION] = TVSecretBaseSecrets_Text_UsedCushion,
+ [SBSECRETS_STATE_HIT_CUSHION] = TVSecretBaseSecrets_Text_HitCushion,
+ [SBSECRETS_STATE_HUGGED_CUSHION] = TVSecretBaseSecrets_Text_HuggedCushion,
+ [SBSECRETS_STATE_BATTLED_WON] = TVSecretBaseSecrets_Text_BattledWon,
+ [SBSECRETS_STATE_BATTLED_LOST] = TVSecretBaseSecrets_Text_BattledLost,
+ [SBSECRETS_STATE_DECLINED_BATTLE] = TVSecretBaseSecrets_Text_DeclinedBattle,
+ [SBSECRETS_STATE_USED_POSTER] = TVSecretBaseSecrets_Text_UsedPoster,
+ [SBSECRETS_STATE_USED_NOTE_MAT] = TVSecretBaseSecrets_Text_UsedNoteMat,
+ [SBSECRETS_STATE_BATTLED_DRAW] = TVSecretBaseSecrets_Text_BattledDraw,
+ [SBSECRETS_STATE_USED_SPIN_MAT] = TVSecretBaseSecrets_Text_UsedSpinMat,
+ [SBSECRETS_STATE_USED_SAND_ORNAMENT] = TVSecretBaseSecrets_Text_UsedSandOrnament,
+ [SBSECRETS_STATE_USED_DESK] = TVSecretBaseSecrets_Text_UsedDesk,
+ [SBSECRETS_STATE_USED_BRICK] = TVSecretBaseSecrets_Text_UsedBrick,
+ [SBSECRETS_STATE_USED_SOLID_BOARD] = TVSecretBaseSecrets_Text_UsedSolidBoard,
+ [SBSECRETS_STATE_USED_FENCE] = TVSecretBaseSecrets_Text_UsedFence,
+ [SBSECRETS_STATE_USED_GLITTER_MAT] = TVSecretBaseSecrets_Text_UsedGlitterMat,
+ [SBSECRETS_STATE_USED_TIRE] = TVSecretBaseSecrets_Text_UsedTire,
+ [SBSECRETS_STATE_USED_STAND] = TVSecretBaseSecrets_Text_UsedStand,
+ [SBSECRETS_STATE_USED_BREAKABLE_DOOR] = TVSecretBaseSecrets_Text_BrokeDoor,
+ [SBSECRETS_STATE_USED_DOLL] = TVSecretBaseSecrets_Text_UsedDoll,
+ [SBSECRETS_STATE_USED_SLIDE] = TVSecretBaseSecrets_Text_UsedSlide,
+ [SBSECRETS_STATE_DECLINED_SLIDE] = TVSecretBaseSecrets_Text_UsedSlideButDidntGoDown,
+ [SBSECRETS_STATE_USED_JUMP_MAT] = TVSecretBaseSecrets_Text_UsedJumpMat
};
static const u8 *const sTVSafariFanClubTextGroup[] = {
@@ -705,39 +710,42 @@ static const u8 *const sTVInSearchOfTrainersTextGroup[] = {
gTVInSearchOfTrainersText08
};
-const u8 sTVSecretBaseSecretsStateLookup[] = {
- 0x0a,
- 0x0b,
- 0x0c,
- 0x0d,
- 0x0e,
- 0x0f,
- 0x10,
- 0x11,
- 0x12,
- 0x13,
- 0x14,
- 0x17,
- 0x18,
- 0x19,
- 0x1a,
- 0x1b,
- 0x1c,
- 0x1d,
- 0x1e,
- 0x1f,
- 0x20,
- 0x21,
- 0x22,
- 0x23,
- 0x24,
- 0x25,
- 0x26,
- 0x27,
- 0x28,
- 0x29,
- 0x2a,
- 0x2b
+// Secret Base Secrets TV Show states for actions that can be taken in a secret base
+// The flags that determine whether or not the action was taken are commented
+const u8 sTVSecretBaseSecretsActions[NUM_SECRET_BASE_FLAGS] =
+{
+ SBSECRETS_STATE_USED_CHAIR, // SECRET_BASE_USED_CHAIR
+ SBSECRETS_STATE_USED_BALLOON, // SECRET_BASE_USED_BALLOON
+ SBSECRETS_STATE_USED_TENT, // SECRET_BASE_USED_TENT
+ SBSECRETS_STATE_USED_PLANT, // SECRET_BASE_USED_PLANT
+ SBSECRETS_STATE_USED_GOLD_SHIELD, // SECRET_BASE_USED_GOLD_SHIELD
+ SBSECRETS_STATE_USED_SILVER_SHIELD, // SECRET_BASE_USED_SILVER_SHIELD
+ SBSECRETS_STATE_USED_GLASS_ORNAMENT, // SECRET_BASE_USED_GLASS_ORNAMENT
+ SBSECRETS_STATE_USED_TV, // SECRET_BASE_USED_TV
+ SBSECRETS_STATE_USED_MUD_BALL, // SECRET_BASE_USED_MUD_BALL
+ SBSECRETS_STATE_USED_BAG, // SECRET_BASE_USED_BAG
+ SBSECRETS_STATE_USED_CUSHION, // SECRET_BASE_USED_CUSHION
+ SBSECRETS_STATE_BATTLED_WON, // SECRET_BASE_BATTLED_WON
+ SBSECRETS_STATE_BATTLED_LOST, // SECRET_BASE_BATTLED_LOST
+ SBSECRETS_STATE_DECLINED_BATTLE, // SECRET_BASE_DECLINED_BATTLE
+ SBSECRETS_STATE_USED_POSTER, // SECRET_BASE_USED_POSTER
+ SBSECRETS_STATE_USED_NOTE_MAT, // SECRET_BASE_USED_NOTE_MAT
+ SBSECRETS_STATE_BATTLED_DRAW, // SECRET_BASE_BATTLED_DRAW
+ SBSECRETS_STATE_USED_SPIN_MAT, // SECRET_BASE_USED_SPIN_MAT
+ SBSECRETS_STATE_USED_SAND_ORNAMENT, // SECRET_BASE_USED_SAND_ORNAMENT
+ SBSECRETS_STATE_USED_DESK, // SECRET_BASE_USED_DESK
+ SBSECRETS_STATE_USED_BRICK, // SECRET_BASE_USED_BRICK
+ SBSECRETS_STATE_USED_SOLID_BOARD, // SECRET_BASE_USED_SOLID_BOARD
+ SBSECRETS_STATE_USED_FENCE, // SECRET_BASE_USED_FENCE
+ SBSECRETS_STATE_USED_GLITTER_MAT, // SECRET_BASE_USED_GLITTER_MAT
+ SBSECRETS_STATE_USED_TIRE, // SECRET_BASE_USED_TIRE
+ SBSECRETS_STATE_USED_STAND, // SECRET_BASE_USED_STAND
+ SBSECRETS_STATE_USED_BREAKABLE_DOOR, // SECRET_BASE_USED_BREAKABLE_DOOR
+ SBSECRETS_STATE_USED_DOLL, // SECRET_BASE_USED_DOLL
+ SBSECRETS_STATE_USED_SLIDE, // SECRET_BASE_USED_SLIDE
+ SBSECRETS_STATE_DECLINED_SLIDE, // SECRET_BASE_DECLINED_SLIDE
+ SBSECRETS_STATE_USED_JUMP_MAT, // SECRET_BASE_USED_JUMP_MAT
+ SBSECRETS_NUM_STATES // SECRET_BASE_UNUSED_FLAG. Odd that this is included, if it were used it would overflow sTVSecretBaseSecretsTextGroup
};
// .text
@@ -759,7 +767,7 @@ void ClearTVShowData(void)
ClearPokemonNews();
}
-u8 special_0x44(void)
+u8 GetRandomActiveShowIdx(void)
{
u8 i;
u8 j;
@@ -768,10 +776,8 @@ u8 special_0x44(void)
for (i = 5; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows) - 1; i ++)
{
- if (gSaveBlock1Ptr->tvShows[i].common.kind == 0)
- {
+ if (gSaveBlock1Ptr->tvShows[i].common.kind == TVSHOW_OFF_AIR)
break;
- }
}
j = Random() % i;
selIdx = j;
@@ -780,44 +786,38 @@ u8 special_0x44(void)
if (GetTVChannelByShowType(gSaveBlock1Ptr->tvShows[j].common.kind) != 4)
{
if (gSaveBlock1Ptr->tvShows[j].common.active == TRUE)
- {
return j;
- }
}
else
{
show = &gSaveBlock1Ptr->tvShows[j];
if (show->massOutbreak.daysLeft == 0 && show->massOutbreak.active == TRUE)
- {
return j;
- }
}
+
if (j == 0)
- {
j = ARRAY_COUNT(gSaveBlock1Ptr->tvShows) - 2;
- }
else
- {
j --;
- }
+
} while (j != selIdx);
return 0xFF;
}
u8 FindAnyTVShowOnTheAir(void)
{
- u8 response;
+ u8 show;
- response = special_0x44();
- if (response == 0xFF)
+ show = GetRandomActiveShowIdx();
+ if (show == 0xFF)
{
return 0xFF;
}
- if (gSaveBlock1Ptr->outbreakPokemonSpecies != SPECIES_NONE && gSaveBlock1Ptr->tvShows[response].common.kind == TVSHOW_MASS_OUTBREAK)
+ if (gSaveBlock1Ptr->outbreakPokemonSpecies != SPECIES_NONE && gSaveBlock1Ptr->tvShows[show].common.kind == TVSHOW_MASS_OUTBREAK)
{
return FindFirstActiveTVShowThatIsNotAMassOutbreak();
}
- return response;
+ return show;
}
void UpdateTVScreensOnMap(int width, int height)
@@ -873,7 +873,7 @@ void TurnOnTVScreen(void)
DrawWholeMapView();
}
-u8 special_0x45(void)
+u8 GetSelectedTVShow(void)
{
return gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004].common.kind;
}
@@ -884,7 +884,7 @@ u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void)
for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->tvShows) - 1; i ++)
{
- if (gSaveBlock1Ptr->tvShows[i].common.kind != 0 && gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_MASS_OUTBREAK && gSaveBlock1Ptr->tvShows[i].common.active == TRUE)
+ if (gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_OFF_AIR && gSaveBlock1Ptr->tvShows[i].common.kind != TVSHOW_MASS_OUTBREAK && gSaveBlock1Ptr->tvShows[i].common.active == TRUE)
{
return i;
}
@@ -892,7 +892,7 @@ u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void)
return 0xFF;
}
-u8 special_0x4a(void)
+u8 GetNextActiveShowIfMassOutbreak(void)
{
TVShow *tvShow;
@@ -1543,12 +1543,12 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
show->bravoTrainerTower.kind = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE;
show->bravoTrainerTower.active = TRUE;
StringCopy(show->bravoTrainerTower.trainerName, gSaveBlock2Ptr->playerName);
- StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.field_BD8);
- show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.field_BD4;
- show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.field_BD6;
- show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.field_D07, 0);
- show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.field_D06;
- if (gSaveBlock2Ptr->frontier.field_D07 == 0)
+ StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.towerInterview.opponentName);
+ show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.towerInterview.playerSpecies;
+ show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies;
+ show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.towerLvlMode, 0);
+ show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.towerBattleOutcome;
+ if (gSaveBlock2Ptr->frontier.towerLvlMode == FRONTIER_LVL_50)
{
show->bravoTrainerTower.btLevel = 50;
}
@@ -1559,13 +1559,13 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
show->bravoTrainerTower.interviewResponse = gSpecialVar_0x8004;
tv_store_id_2x(show);
show->bravoTrainerTower.language = gGameLanguage;
- if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.field_BEB == LANGUAGE_JAPANESE)
+ if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage == LANGUAGE_JAPANESE)
{
show->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE;
}
else
{
- show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.field_BEB;
+ show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage;
}
}
@@ -1593,7 +1593,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;
@@ -1953,11 +1953,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;
@@ -2000,7 +2000,7 @@ void sub_80EDC60(const u16 *words)
}
}
-void sub_80EDCE8(void)
+void TryPutTreasureInvestigatorsOnAir(void)
{
TVShow *show;
@@ -2295,7 +2295,7 @@ void sub_80EE184(void)
}
}
-void sub_80EE2CC(void)
+void TryPutLotteryWinnerReportOnAir(void)
{
TVShow *show;
@@ -2329,7 +2329,7 @@ void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u1
show->battleSeminar.foeSpecies = foeSpecies;
show->battleSeminar.species = species;
show->battleSeminar.move = movePtr[moveIdx];
- for (i = 0, j = 0; i < 4; i ++)
+ for (i = 0, j = 0; i < MAX_MON_MOVES; i ++)
{
if (i != moveIdx && movePtr[i])
{
@@ -2362,7 +2362,7 @@ void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed)
}
}
-void sub_80EE4DC(struct Pokemon *pokemon, u8 ribbonMonDataIdx)
+void TryPutSpotTheCutiesOnAir(struct Pokemon *pokemon, u8 ribbonMonDataIdx)
{
TVShow *show;
@@ -2437,7 +2437,7 @@ u8 TV_MonDataIdxToRibbon(u8 monDataIdx)
return 0;
}
-void sub_80EE72C(void)
+void TrySetUpTrainerFanClubSpecial(void)
{
TVShow *show;
@@ -2455,26 +2455,23 @@ void sub_80EE72C(void)
}
}
-bool8 sub_80EE7C0(void)
+bool8 ShouldHideFanClubInterviewer(void)
{
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot == -1)
- {
return TRUE;
- }
+
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_SPECIAL);
if (gSpecialVar_Result == TRUE)
- {
return TRUE;
- }
+
if (gSaveBlock1Ptr->linkBattleRecords.entries[0].name[0] == EOS)
- {
return TRUE;
- }
+
return FALSE;
}
-bool8 sub_80EE818(void)
+bool8 ShouldAirFrontierTVShow(void)
{
u32 playerId;
u8 showIdx;
@@ -2502,7 +2499,7 @@ bool8 sub_80EE818(void)
return TRUE;
}
-void sub_80EE8C8(u16 winStreak, u8 facilityAndMode)
+void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facilityAndMode)
{
TVShow *show;
@@ -2551,7 +2548,7 @@ void sub_80EE8C8(u16 winStreak, u8 facilityAndMode)
}
}
-void sub_80EEA70(void)
+void TryPutSecretBaseSecretsOnAir(void)
{
TVShow *show;
u8 strbuf[32];
@@ -2623,37 +2620,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);
}
@@ -2786,11 +2783,11 @@ bool8 GetPriceReduction(u8 newsKind)
{
u8 i;
- if (newsKind == 0)
+ if (newsKind == POKENEWS_NONE)
{
return FALSE;
}
- for (i = 0; i < 16; i ++)
+ for (i = 0; i < POKE_NEWS_COUNT; i ++)
{
if (gSaveBlock1Ptr->pokeNews[i].kind == newsKind)
{
@@ -2870,17 +2867,17 @@ void CopyContestRankToStringVar(u8 varIdx, u8 rank)
{
switch (rank)
{
- case 0: // NORMAL
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[5]);
+ case CONTEST_RANK_NORMAL:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_NORMAL]);
break;
- case 1: // SUPER
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[6]);
+ case CONTEST_RANK_SUPER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SUPER]);
break;
- case 2: // HYPER
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[7]);
+ case CONTEST_RANK_HYPER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_HYPER]);
break;
- case 3: // MASTER
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[8]);
+ case CONTEST_RANK_MASTER:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_MASTER]);
break;
}
}
@@ -2889,20 +2886,20 @@ void CopyContestCategoryToStringVar(u8 varIdx, u8 category)
{
switch (category)
{
- case 0: // COOL
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[0]);
+ case CONTEST_CATEGORY_COOL:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_COOL]);
break;
- case 1: // BEAUTY
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[1]);
+ case CONTEST_CATEGORY_BEAUTY:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_BEAUTY]);
break;
- case 2: // CUTE
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[2]);
+ case CONTEST_CATEGORY_CUTE:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_CUTE]);
break;
- case 3: // SMART
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[3]);
+ case CONTEST_CATEGORY_SMART:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_SMART]);
break;
- case 4: // TOUGH
- StringCopy(gTVStringVarPtrs[varIdx], gUnknown_0858BAF0[4]);
+ case CONTEST_CATEGORY_TOUGH:
+ StringCopy(gTVStringVarPtrs[varIdx], gStdStrings[STDSTRING_TOUGH]);
break;
}
}
@@ -3146,7 +3143,7 @@ static void InterviewBefore_FanClubSpecial(void)
}
}
-bool8 sub_80EF88C(u8 monIdx)
+static bool8 IsPartyMonNicknamedOrNotEnglish(u8 monIdx)
{
struct Pokemon *pokemon;
u8 language;
@@ -3161,9 +3158,9 @@ bool8 sub_80EF88C(u8 monIdx)
return TRUE;
}
-bool8 sub_80EF8F8(void)
+bool8 IsLeadMonNicknamedOrNotEnglish(void)
{
- return sub_80EF88C(GetLeadMonIndex());
+ return IsPartyMonNicknamedOrNotEnglish(GetLeadMonIndex());
}
void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx)
@@ -3433,13 +3430,14 @@ bool8 TV_IsScriptShowKindAlreadyInQueue(void)
return FALSE;
}
-bool8 TV_PutNameRaterShowOnTheAirIfNicknameChanged(void)
+bool8 TryPutNameRaterShowOnTheAir(void)
{
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1);
+
+ // Nickname wasnt changed
if (!StringCompare(gStringVar3, gStringVar1))
- {
return FALSE;
- }
+
PutNameRaterShowOnTheAir();
return TRUE;
}
@@ -3475,22 +3473,18 @@ void ChangeBoxPokemonNickname_CB(void)
CB2_ReturnToFieldContinueScriptPlayMapMusic();
}
-void TV_CopyNicknameToStringVar1AndEnsureTerminated(void)
+void BufferMonNickname(void)
{
GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1);
StringGetEnd10(gStringVar1);
}
-void TV_CheckMonOTIDEqualsPlayerID(void)
+void IsMonOTIDNotPlayers(void)
{
if (GetPlayerIDAsU32() == GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_OT_ID, NULL))
- {
gSpecialVar_Result = FALSE;
- }
else
- {
gSpecialVar_Result = TRUE;
- }
}
u8 GetTVChannelByShowType(u8 kind)
@@ -3601,7 +3595,7 @@ void GetMomOrDadStringForTVMessage(void)
}
}
-void sub_80F01B8(void)
+void HideBattleTowerReporter(void)
{
VarSet(VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, 0);
RemoveEventObjectByLocalIdAndMap(5, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
@@ -7350,35 +7344,32 @@ static void DoTVShowWhatsNo1InHoennToday(void)
ShowFieldMessage(sTVWhatsNo1InHoennTodayTextGroup[state]);
}
-u8 TVShowGetFlagCount(TVShow *show)
+u8 SecretBaseSecrets_GetNumActionsTaken(TVShow *show)
{
u8 i;
- u8 tot;
+ u8 flagsSet;
- for (i = 0, tot = 0; i < 32; i ++)
+ for (i = 0, flagsSet = 0; i < NUM_SECRET_BASE_FLAGS; i ++)
{
if ((show->secretBaseSecrets.flags >> i) & 1)
- {
- tot ++;
- }
+ flagsSet++;
}
- return tot;
+ return flagsSet;
}
-static u8 SecretBaseSecrets_GetStateForFlagNumber(TVShow *show, u8 a1)
+static u8 SecretBaseSecrets_GetStateByFlagNumber(TVShow *show, u8 flagId)
{
u8 i;
- u8 tot;
+ u8 flagsSet;
- for (i = 0, tot = 0; i < 32; i ++)
+ for (i = 0, flagsSet = 0; i < NUM_SECRET_BASE_FLAGS; i ++)
{
if ((show->secretBaseSecrets.flags >> i) & 1)
{
- if (tot == a1)
- {
- return sTVSecretBaseSecretsStateLookup[i];
- }
- tot ++;
+ if (flagsSet == flagId)
+ return sTVSecretBaseSecretsActions[i];
+
+ flagsSet++;
}
}
return 0;
@@ -7388,7 +7379,7 @@ static void DoTVShowSecretBaseSecrets(void)
{
TVShow *show;
u8 state;
- u8 bitCount;
+ u8 numActions;
u16 i;
show = &gSaveBlock1Ptr->tvShows[gSpecialVar_0x8004];
@@ -7396,226 +7387,128 @@ static void DoTVShowSecretBaseSecrets(void)
state = sTVShowState;
switch (state)
{
- case 0:
+ case SBSECRETS_STATE_INTRO:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- bitCount = TVShowGetFlagCount(show);
- if (bitCount == 0)
+ numActions = SecretBaseSecrets_GetNumActionsTaken(show);
+ if (numActions == 0)
{
- sTVShowState = 8;
+ sTVShowState = SBSECRETS_STATE_NOTHING_USED1;
}
else
{
- show->secretBaseSecrets.savedState = 1;
- sTVSecretBaseSecretsRandomValues[0] = Random() % bitCount;
- sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, sTVSecretBaseSecretsRandomValues[0]);
+ show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT1;
+ sTVSecretBaseSecretsRandomValues[0] = Random() % numActions;
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[0]);
}
break;
- case 1:
+ case SBSECRETS_STATE_DO_NEXT1:
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- bitCount = TVShowGetFlagCount(show);
- switch (bitCount)
+ numActions = SecretBaseSecrets_GetNumActionsTaken(show);
+ switch (numActions)
{
case 1:
- sTVShowState = 9;
+ sTVShowState = SBSECRETS_STATE_NOTHING_USED2;
break;
case 2:
- show->secretBaseSecrets.savedState = 2;
+ show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT2;
if (sTVSecretBaseSecretsRandomValues[0] == 0)
{
- sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, 1);
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, 1);
}
else
{
- sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, 0);
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, 0);
}
break;
default:
for (i = 0; i < 0xFFFF; i ++)
{
- sTVSecretBaseSecretsRandomValues[1] = Random() % bitCount;
+ sTVSecretBaseSecretsRandomValues[1] = Random() % numActions;
if (sTVSecretBaseSecretsRandomValues[1] != sTVSecretBaseSecretsRandomValues[0])
{
break;
}
}
- show->secretBaseSecrets.savedState = 2;
- sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, sTVSecretBaseSecretsRandomValues[1]);
+ show->secretBaseSecrets.savedState = SBSECRETS_STATE_DO_NEXT2;
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[1]);
break;
}
break;
- case 2:
+ case SBSECRETS_STATE_DO_NEXT2:
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- bitCount = TVShowGetFlagCount(show);
- if (bitCount == 2)
+ numActions = SecretBaseSecrets_GetNumActionsTaken(show);
+ if (numActions == 2)
{
- sTVShowState = 9;
+ sTVShowState = SBSECRETS_STATE_NOTHING_USED2;
}
else
{
for (i = 0; i < 0xFFFF; i ++)
{
- sTVSecretBaseSecretsRandomValues[2] = Random() % bitCount;
+ sTVSecretBaseSecretsRandomValues[2] = Random() % numActions;
if (sTVSecretBaseSecretsRandomValues[2] != sTVSecretBaseSecretsRandomValues[0] && sTVSecretBaseSecretsRandomValues[2] != sTVSecretBaseSecretsRandomValues[1])
{
break;
}
}
- show->secretBaseSecrets.savedState = 3;
- sTVShowState = SecretBaseSecrets_GetStateForFlagNumber(show, sTVSecretBaseSecretsRandomValues[2]);
+ show->secretBaseSecrets.savedState = SBSECRETS_STATE_TOOK_X_STEPS;
+ sTVShowState = SecretBaseSecrets_GetStateByFlagNumber(show, sTVSecretBaseSecretsRandomValues[2]);
}
break;
- case 3:
+ case SBSECRETS_STATE_TOOK_X_STEPS:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
TV_PrintIntToStringVar(2, show->secretBaseSecrets.stepsInBase);
if (show->secretBaseSecrets.stepsInBase <= 30)
{
- sTVShowState = 4;
+ sTVShowState = SBSECRETS_STATE_BASE_INTEREST_LOW;
}
else if (show->secretBaseSecrets.stepsInBase <= 100)
{
- sTVShowState = 5;
+ sTVShowState = SBSECRETS_STATE_BASE_INTEREST_MED;
}
else
{
- sTVShowState = 6;
+ sTVShowState = SBSECRETS_STATE_BASE_INTEREST_HIGH;
}
break;
- case 4:
+ case SBSECRETS_STATE_BASE_INTEREST_LOW ... SBSECRETS_STATE_BASE_INTEREST_HIGH:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- sTVShowState = 7;
+ sTVShowState = SBSECRETS_STATE_OUTRO;
break;
- case 5:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- sTVShowState = 7;
- break;
- case 6:
- TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
- TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
- sTVShowState = 7;
- break;
- case 7:
+ case SBSECRETS_STATE_OUTRO:
TVShowConvertInternationalString(gStringVar1, show->secretBaseSecrets.baseOwnersName, show->secretBaseSecrets.baseOwnersNameLanguage);
TVShowConvertInternationalString(gStringVar2, show->secretBaseSecrets.playerName, show->secretBaseSecrets.language);
TVShowDone();
break;
- case 8:
- sTVShowState = 3;
- break;
- case 9:
- sTVShowState = 3;
- break;
- case 10:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 11:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 12:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 13:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 14:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 15:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 16:
- sTVShowState = show->secretBaseSecrets.savedState;
+ // All below states are descriptions of what the player interacted with while in the secret base
+ case SBSECRETS_STATE_NOTHING_USED1:
+ sTVShowState = SBSECRETS_STATE_TOOK_X_STEPS;
break;
- case 17:
- sTVShowState = show->secretBaseSecrets.savedState;
+ case SBSECRETS_STATE_NOTHING_USED2:
+ sTVShowState = SBSECRETS_STATE_TOOK_X_STEPS;
break;
- case 18:
+ case SBSECRETS_STATE_USED_CHAIR ... SBSECRETS_STATE_USED_MUD_BALL:
sTVShowState = show->secretBaseSecrets.savedState;
break;
- case 19:
+ case SBSECRETS_STATE_USED_BAG:
StringCopy(gStringVar2, ItemId_GetName(show->secretBaseSecrets.item));
sTVShowState = show->secretBaseSecrets.savedState;
break;
- case 20:
+ case SBSECRETS_STATE_USED_CUSHION:
+ // Randomly decide based on trainer ID if the player hugged or hit the cushion
if (show->common.trainerIdLo & 1)
{
- sTVShowState = 22;
+ sTVShowState = SBSECRETS_STATE_HUGGED_CUSHION;
}
else
{
- sTVShowState = 21;
+ sTVShowState = SBSECRETS_STATE_HIT_CUSHION;
}
break;
- case 21:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 22:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 23:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 24:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 25:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 26:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 27:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 28:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 29:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 30:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 31:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 32:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 33:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 34:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 35:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 36:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 37:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 38:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 39:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 40:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 41:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 42:
- sTVShowState = show->secretBaseSecrets.savedState;
- break;
- case 43:
+ case SBSECRETS_STATE_HIT_CUSHION ... SBSECRETS_NUM_STATES:
sTVShowState = show->secretBaseSecrets.savedState;
break;
}
diff --git a/src/union_room.c b/src/union_room.c
index 01288c8cc..4eea421ba 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"
@@ -30,6 +30,7 @@
#include "party_menu.h"
#include "pokemon_jump.h"
#include "random.h"
+#include "save_location.h"
#include "script.h"
#include "script_pokemon_util_80F87D8.h"
#include "sound.h"
@@ -44,21 +45,24 @@
#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"
+#include "constants/union_room.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 +100,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 +109,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 +126,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 +144,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)
@@ -1192,19 +158,19 @@ void sub_80124EC(u8 windowId, u8 arg1, u8 stringId)
switch (arg1 << 8)
{
case 0x200:
- sub_80173E0(windowId, 1, gUnknown_082EDB60[0][stringId - 1], 0, 1, 0);
+ sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[0][stringId - 1], 0, 1, 0);
break;
case 0x400:
- sub_80173E0(windowId, 1, gUnknown_082EDB60[1][stringId - 1], 0, 1, 0);
+ sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[1][stringId - 1], 0, 1, 0);
break;
case 0x2500:
- sub_80173E0(windowId, 1, gUnknown_082EDB60[2][stringId - 1], 0, 1, 0);
+ sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[2][stringId - 1], 0, 1, 0);
break;
case 0x3500:
- sub_80173E0(windowId, 1, gUnknown_082EDB60[3][stringId - 1], 0, 1, 0);
+ sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[3][stringId - 1], 0, 1, 0);
break;
case 0x2400:
- sub_80173E0(windowId, 1, gUnknown_082EDB60[4][stringId - 1], 0, 1, 0);
+ sub_80173E0(windowId, 1, sPlayersNeededOrModeTexts[4][stringId - 1], 0, 1, 0);
break;
}
@@ -1217,7 +183,7 @@ void sub_80125BC(u8 windowId)
u8 *txtPtr;
sub_80173E0(windowId, 1, gSaveBlock2Ptr->playerName, 0, 1, 0);
- txtPtr = StringCopy(text, gText_UnkCtrlCodeF907);
+ txtPtr = StringCopy(text, sText_ID);
ConvertIntToDecimalStringN(txtPtr, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5);
sub_80173E0(windowId, 1, text, 0, 0x11, 0);
}
@@ -1231,7 +197,7 @@ void sub_801262C(u8 *dst, u8 caseId)
case 14 ... 16:
case 21 ... 28:
// UB: argument *dst isn't used, instead it always prints to gStringVar4
- StringExpandPlaceholders(gStringVar4, gText_AwaitingCommunication);
+ StringExpandPlaceholders(gStringVar4, sText_AwaitingCommunication);
break;
}
}
@@ -1249,7 +215,7 @@ bool32 sub_80126CC(u32 caseId)
}
}
-void BerryBlenderLinkBecomeLeader(void)
+void TryBecomeLinkLeader(void)
{
u8 taskId;
struct UnkStruct_Leader *dataPtr;
@@ -1271,7 +237,7 @@ void sub_8012780(u8 taskId)
switch (data->state)
{
case 0:
- if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN)
+ if (gSpecialVar_0x8004 == LINK_GROUP_BATTLE_TOWER && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN)
gSpecialVar_0x8004++;
gUnknown_02022C2C = gUnknown_082F00C4[gSpecialVar_0x8004];
gUnknown_02022C2D = gUnknown_082F00C4[gSpecialVar_0x8004] >> 8;
@@ -1308,7 +274,7 @@ void sub_8012780(u8 taskId)
data->field_11 = AddWindow(&gUnknown_082F012C);
FillWindowPixelBuffer(data->field_10, PIXEL_FILL(2));
- sub_80173E0(data->field_10, 0, gUnknown_082EDBC4, 8, 1, 4);
+ sub_80173E0(data->field_10, 0, sText_BButtonCancel, 8, 1, 4);
PutWindowTilemap(data->field_10);
CopyWindowToVram(data->field_10, 2);
@@ -1326,13 +292,13 @@ void sub_8012780(u8 taskId)
data->state = 4;
break;
case 4:
- StringCopy(gStringVar1, gUnknown_082F0048[gUnknown_02022C2C]);
+ StringCopy(gStringVar1, sLinkGroupActivityTexts[gUnknown_02022C2C]);
if ((gUnknown_02022C2D >> 4) != 0)
{
if (data->field_13 > (gUnknown_02022C2D >> 4) - 1 && (gUnknown_02022C2D & 0xF) != 0)
- StringExpandPlaceholders(gStringVar4, gText_AwaitingLink);
+ StringExpandPlaceholders(gStringVar4, sText_AwaitingLinkPressStart);
else
- StringExpandPlaceholders(gStringVar4, gText_AwaitingCommunication);
+ StringExpandPlaceholders(gStringVar4, sText_AwaitingCommunication);
}
else
{
@@ -1380,7 +346,7 @@ void sub_8012780(u8 taskId)
break;
case 10:
id = ((gUnknown_02022C2C & 0xF) == 2) ? 1 : 0;
- if (PrintOnTextbox(&data->textState, gUnknown_082EDDC4[id]))
+ if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id]))
{
data->field_13 = sub_8013398(data->field_0);
RedrawListMenu(data->listTaskId);
@@ -1389,7 +355,7 @@ void sub_8012780(u8 taskId)
break;
case 29:
id = ((gUnknown_02022C2D & 0xF) == 2) ? 0 : 1;
- if (PrintOnTextbox(&data->textState, gUnknown_082EDDC4[id]))
+ if (PrintOnTextbox(&data->textState, sPlayerUnavailableTexts[id]))
{
data->state = 21;
}
@@ -1439,7 +405,7 @@ void sub_8012780(u8 taskId)
else
{
sub_8018404(gStringVar1, &data->field_0->arr[data->field_13 - 1]);
- StringExpandPlaceholders(gStringVar4, gUnknown_082EDC9C);
+ StringExpandPlaceholders(gStringVar4, sText_AnOKWasSentToPlayer);
data->state = 13;
}
@@ -1477,7 +443,7 @@ void sub_8012780(u8 taskId)
data->state = 17;
break;
case 15:
- if (PrintOnTextbox(&data->textState, gUnknown_082EDC5C))
+ if (PrintOnTextbox(&data->textState, sText_AreTheseMembersOK))
data->state = 16;
break;
case 16:
@@ -1496,7 +462,7 @@ void sub_8012780(u8 taskId)
}
break;
case 19:
- if (PrintOnTextbox(&data->textState, gUnknown_082EDC78))
+ if (PrintOnTextbox(&data->textState, sText_CancelModeWithTheseMembers))
data->state = 20;
break;
case 20:
@@ -1543,7 +509,7 @@ void sub_8012780(u8 taskId)
}
break;
case 30:
- if (PrintOnTextbox(&data->textState, gUnknown_082EDD58))
+ if (PrintOnTextbox(&data->textState, sText_ModeWithTheseMembersWillBeCanceled))
data->state = 23;
break;
case 21:
@@ -1611,11 +577,11 @@ void sub_8012FC4(u8 *dst, u8 caseId)
case 4:
case 14:
case 28:
- StringExpandPlaceholders(dst, gUnknown_082EDBE8);
+ StringExpandPlaceholders(dst, sText_PlayerContactedYouForXAccept);
break;
case 21:
case 22:
- StringExpandPlaceholders(dst, gUnknown_082EDC0C);
+ StringExpandPlaceholders(dst, sText_PlayerContactedYouShareX);
break;
case 3:
case 9:
@@ -1628,7 +594,7 @@ void sub_8012FC4(u8 *dst, u8 caseId)
case 25:
case 26:
case 27:
- StringExpandPlaceholders(dst, gUnknown_082EDC34);
+ StringExpandPlaceholders(dst, sText_PlayerContactedYouAddToMembers);
break;
}
}
@@ -1639,11 +605,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;
}
}
@@ -1659,7 +625,7 @@ void sub_80130B4(u8 *dst, u8 caseId)
case 21:
case 22:
case 28:
- StringExpandPlaceholders(dst, gUnknown_082EFC3C);
+ StringExpandPlaceholders(dst, sText_AwaitingPlayersResponse);
break;
case 3:
case 9:
@@ -1672,7 +638,7 @@ void sub_80130B4(u8 *dst, u8 caseId)
case 25:
case 26:
case 27:
- StringExpandPlaceholders(dst, gUnknown_082EFC54);
+ StringExpandPlaceholders(dst, sText_PlayerHasBeenAskedToRegisterYouPleaseWait);
break;
}
}
@@ -1688,7 +654,7 @@ void sub_8013160(u8 *dst, u8 caseId)
case 21:
case 22:
case 28:
- StringExpandPlaceholders(dst, gUnknown_082EDDF4);
+ StringExpandPlaceholders(dst, sText_PlayerSentBackOK);
break;
case 3:
case 9:
@@ -1701,7 +667,7 @@ void sub_8013160(u8 *dst, u8 caseId)
case 25:
case 26:
case 27:
- StringExpandPlaceholders(dst, gUnknown_082EDE0C);
+ StringExpandPlaceholders(dst, sText_PlayerOKdRegistration);
break;
}
}
@@ -1831,7 +797,7 @@ u8 sub_8013398(struct UnkStruct_Main0 *arg0)
return ret;
}
-void BerryBlenderLinkJoinGroup(void)
+void TryJoinLinkGroup(void)
{
u8 taskId;
struct UnkStruct_Group *dataPtr;
@@ -1853,7 +819,7 @@ void sub_80134E8(u8 taskId)
switch (data->state)
{
case 0:
- if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN)
+ if (gSpecialVar_0x8004 == LINK_GROUP_BATTLE_TOWER && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN)
gSpecialVar_0x8004++;
gUnknown_02022C2C = gUnknown_082F0530[gSpecialVar_0x8004];
sub_8010F84(gUnknown_02022C2C, 0, 0);
@@ -1865,7 +831,7 @@ void sub_80134E8(u8 taskId)
data->state = 1;
break;
case 1:
- if (PrintOnTextbox(&data->textState, gUnknown_082EFB70[gSpecialVar_0x8004]))
+ if (PrintOnTextbox(&data->textState, sChooseTrainerTexts[gSpecialVar_0x8004]))
data->state = 2;
break;
case 2:
@@ -1877,7 +843,7 @@ void sub_80134E8(u8 taskId)
data->field_D = AddWindow(&gUnknown_082F017C);
FillWindowPixelBuffer(data->field_C, PIXEL_FILL(2));
- sub_80173E0(data->field_C, 0, gUnknown_082EF7DC, 8, 1, 4);
+ sub_80173E0(data->field_C, 0, sText_ChooseJoinCancel, 8, 1, 4);
PutWindowTilemap(data->field_C);
CopyWindowToVram(data->field_C, 2);
@@ -1922,7 +888,7 @@ void sub_80134E8(u8 taskId)
}
else
{
- StringCopy(gStringVar4, gUnknown_082EDD50[var - 1]);
+ StringCopy(gStringVar4, sCantTransmitToTrainerTexts[var - 1]);
data->state = 18;
PlaySE(SE_PN_ON);
}
@@ -1987,8 +953,8 @@ void sub_80134E8(u8 taskId)
else
{
sub_8011A64(7, 0);
- StringCopy(gStringVar1, gUnknown_082F0048[gUnknown_02022C2C]);
- StringExpandPlaceholders(gStringVar4, gUnknown_082EDE48);
+ StringCopy(gStringVar1, sLinkGroupActivityTexts[gUnknown_02022C2C]);
+ StringExpandPlaceholders(gStringVar4, sText_AwaitingOtherMembers);
}
}
break;
@@ -2023,7 +989,7 @@ void sub_80134E8(u8 taskId)
data->state = 7;
break;
case 7:
- if (PrintOnTextbox(&data->textState, gUnknown_082EDE64))
+ if (PrintOnTextbox(&data->textState, sText_QuitBeingMember))
data->state = 8;
break;
case 8:
@@ -2070,7 +1036,7 @@ void sub_80134E8(u8 taskId)
break;
case 13:
DestroyWirelessStatusIndicatorSprite();
- if (PrintOnTextbox(&data->textState, gUnknown_082EDE9C[sub_8011A74()]))
+ if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[sub_8011A74()]))
{
gSpecialVar_Result = 6;
data->state = 23;
@@ -2083,7 +1049,7 @@ void sub_80134E8(u8 taskId)
break;
case 15:
DestroyWirelessStatusIndicatorSprite();
- if (PrintOnTextbox(&data->textState, gUnknown_082EDE9C[sub_8011A74()]))
+ if (PrintOnTextbox(&data->textState, sPlayerDisconnectedTexts[sub_8011A74()]))
{
gSpecialVar_Result = 8;
data->state = 23;
@@ -2114,9 +1080,9 @@ u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id)
if (gUnknown_02022C2C == 4 && structPtr->unk.field_0.unk_00.unk_01_2 != 3)
{
- if (!(gSaveBlock2Ptr->specialSaveWarpFlags & 0x80))
+ if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP))
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 +1271,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 +1311,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 +1387,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 +1395,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();
@@ -2458,7 +1424,7 @@ void sub_8014384(void)
break;
case 1:
if (!FuncIsActiveTask(sub_80140E0))
- SetMainCallback2(sub_8086074);
+ SetMainCallback2(CB2_ReturnToFieldCableClub);
break;
}
@@ -2506,7 +1472,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(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE);
SetMainCallback2(sub_8014384);
break;
case 2:
@@ -2515,7 +1481,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(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE);
SetMainCallback2(sub_8014384);
break;
case 3:
@@ -2524,19 +1490,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(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 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 +1528,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 +1560,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);
@@ -2617,7 +1583,7 @@ void sub_8014790(u8 taskId)
case 1:
if (!ScriptContext1_IsScriptSetUp())
{
- FadeScreen(1, 0);
+ FadeScreen(FADE_TO_BLACK, 0);
data[0] = 2;
}
break;
@@ -2627,7 +1593,7 @@ void sub_8014790(u8 taskId)
if (gUnknown_02022C2C == 29)
{
DestroyTask(taskId);
- SetMainCallback2(sub_80773AC);
+ SetMainCallback2(CB2_StartCreateTradeMenu);
}
else
{
@@ -2751,7 +1717,7 @@ void sub_8014A40(u8 taskId)
data->state = 2;
break;
case 2:
- StringCopy(gStringVar1, gUnknown_082F0048[gUnknown_02022C2C]);
+ StringCopy(gStringVar1, sLinkGroupActivityTexts[gUnknown_02022C2C]);
sub_801262C(gStringVar4, gUnknown_02022C2C);
data->state = 3;
break;
@@ -2768,7 +1734,7 @@ void sub_8014A40(u8 taskId)
}
break;
case 6:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_082EDF40))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_LinkWithFriendDropped))
{
data->field_13 = sub_8013398(data->field_0);
RedrawListMenu(data->listTaskId);
@@ -2808,7 +1774,7 @@ void sub_8014A40(u8 taskId)
RedrawListMenu(data->listTaskId);
data->field_13++;
sub_8018404(gStringVar1, &data->field_0->arr[data->field_13 - 1]);
- StringExpandPlaceholders(gStringVar4, gUnknown_082EDC9C);
+ StringExpandPlaceholders(gStringVar4, sText_AnOKWasSentToPlayer);
data->state = 9;
sub_800EF38();
}
@@ -2865,7 +1831,7 @@ void sub_8014A40(u8 taskId)
data->state++;
break;
case 14:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_PleaseStartOver))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_PleaseStartOver))
{
DestroyTask(taskId);
gSpecialVar_Result = 5;
@@ -2933,7 +1899,7 @@ void sub_8014F48(u8 taskId)
data->state = 1;
break;
case 1:
- AddTextPrinterToWindow1(gUnknown_082EF7F8);
+ AddTextPrinterToWindow1(sText_ChooseTrainer);
data->state = 2;
break;
case 2:
@@ -3006,7 +1972,7 @@ void sub_8014F48(u8 taskId)
}
break;
case 4:
- AddTextPrinterToWindow1(gUnknown_082EFC3C);
+ AddTextPrinterToWindow1(sText_AwaitingPlayersResponse);
sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
data->state = 5;
break;
@@ -3025,7 +1991,7 @@ void sub_8014F48(u8 taskId)
data->state = 8;
break;
case 5:
- AddTextPrinterToWindow1(gUnknown_082EDDF4);
+ AddTextPrinterToWindow1(sText_PlayerSentBackOK);
sub_8011A64(0, 0);
break;
}
@@ -3043,7 +2009,7 @@ void sub_8014F48(u8 taskId)
data->state++;
break;
case 9:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_082EDF80[sub_8011A74()]))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sLinkDroppedTexts[sub_8011A74()]))
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
@@ -3053,7 +2019,7 @@ void sub_8014F48(u8 taskId)
break;
case 7:
DestroyWirelessStatusIndicatorSprite();
- AddTextPrinterToWindow1(gText_PleaseStartOver);
+ AddTextPrinterToWindow1(sText_PleaseStartOver);
DestroyTask(taskId);
sub_800EDD4();
gSpecialVar_Result = 5;
@@ -3102,7 +2068,7 @@ void sub_80152F4(u8 taskId)
data->state = 1;
break;
case 1:
- AddTextPrinterToWindow1(gUnknown_082EFBC8);
+ AddTextPrinterToWindow1(sText_SearchingForWirelessSystemWait);
data->state = 2;
break;
case 2:
@@ -3171,7 +2137,7 @@ void sub_80152F4(u8 taskId)
}
break;
case 4:
- AddTextPrinterToWindow1(gUnknown_082EFC90);
+ AddTextPrinterToWindow1(sText_AwaitingResponseFromWirelessSystem);
sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]);
data->state = 5;
break;
@@ -3190,7 +2156,7 @@ void sub_80152F4(u8 taskId)
data->state = 8;
break;
case 5:
- AddTextPrinterToWindow1(gUnknown_082EDEC4);
+ AddTextPrinterToWindow1(sText_WirelessLinkEstablished);
sub_8011A64(0, 0);
break;
}
@@ -3211,7 +2177,7 @@ void sub_80152F4(u8 taskId)
data->state++;
break;
case 9:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_082EDF04))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_WirelessLinkDropped))
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
@@ -3220,7 +2186,7 @@ void sub_80152F4(u8 taskId)
}
break;
case 7:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_WirelessSearchCanceled))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sText_WirelessSearchCanceled))
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
@@ -3229,7 +2195,7 @@ void sub_80152F4(u8 taskId)
}
break;
case 11:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_082EFD58[data->field_12]))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, sNoWonderSharedTexts[data->field_12]))
{
DestroyWirelessStatusIndicatorSprite();
DestroyTask(taskId);
@@ -3334,7 +2300,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 +2311,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 +2337,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
{
@@ -3455,7 +2423,7 @@ void sub_80156E0(u8 taskId)
}
break;
case 23:
- if (!FuncIsActiveTask(sub_809FA34))
+ if (!FuncIsActiveTask(Task_ShowStartMenu))
{
sub_8011090(0x40, 0, 0);
data->state = 4;
@@ -3491,9 +2459,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;
@@ -3510,7 +2478,7 @@ void sub_80156E0(u8 taskId)
if (!FuncIsActiveTask(sub_80140E0))
{
if (gUnknown_02022C2C == 0x44)
- sub_8015664(31, gUnknown_082EE004);
+ sub_8015664(31, sText_AwaitingPlayersResponseAboutTrade);
else
data->state = 5;
}
@@ -3526,7 +2494,7 @@ void sub_80156E0(u8 taskId)
case 5:
id = sub_80179AC(&data->field_0->arr[taskData[1]]);
playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_8015664(6, gUnknown_082EE24C[id][playerGender]);
+ sub_8015664(6, sHiDoSomethingTexts[id][playerGender]);
break;
case 6:
var5 = sub_8017178(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_082F021C, &gUnknown_082F0244);
@@ -3544,16 +2512,16 @@ void sub_80156E0(u8 taskId)
{
data->field_4C[0] = 0x40;
sub_800FE50(data->field_4C);
- StringCopy(gStringVar4, gUnknown_082EEB80[gLinkPlayers[0].gender]);
+ StringCopy(gStringVar4, sIfYouWantToDoSomethingTexts[gLinkPlayers[0].gender]);
data->state = 32;
}
else
{
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,14 +2534,14 @@ void sub_80156E0(u8 taskId)
}
break;
case 28:
- StringCopy(gStringVar4, gUnknown_082EEB88);
+ StringCopy(gStringVar4, sText_TrainerBattleBusy);
data->state = 36;
break;
case 27:
sub_8017FD8(data);
playerGender = sub_8017CF8(taskData[1], data->field_0);
id = sub_8017984(data->field_4C[0] & 0x3F);
- if (PrintOnTextbox(&data->textState, gUnknown_082EE82C[playerGender][id]))
+ if (PrintOnTextbox(&data->textState, sText_WaitOrShowCardTexts[playerGender][id]))
{
taskData[3] = 0;
data->state = 29;
@@ -3585,15 +2553,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
@@ -3623,7 +2591,7 @@ void sub_80156E0(u8 taskId)
case 7:
id = sub_80179AC(&data->field_0->arr[taskData[1]]);
playerGender = sub_8017CF8(taskData[1], data->field_0);
- sub_8015664(6, gUnknown_082EE24C[id][playerGender]);
+ sub_8015664(6, sHiDoSomethingTexts[id][playerGender]);
break;
case 40:
if (PrintOnTextbox(&data->textState, gStringVar4))
@@ -3641,7 +2609,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, sAwaitingResponseTexts[id]);
data->state = 33;
}
else
@@ -3665,7 +2633,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(sDeclineBattleTexts[playerGender]);
break;
}
break;
@@ -3688,9 +2656,9 @@ void sub_80156E0(u8 taskId)
playerGender = sub_8017CF8(taskData[1], data->field_0);
sub_8011090(0x54, 0, 1);
if (sub_8011B90() == TRUE)
- sub_801568C(gUnknown_082EED3C[playerGender]);
+ sub_801568C(sChatDeclinedTexts[playerGender]);
else
- sub_8015664(30, gUnknown_082EED3C[playerGender]);
+ sub_8015664(30, sChatDeclinedTexts[playerGender]);
break;
case 3:
data->state = 22;
@@ -3704,9 +2672,9 @@ void sub_80156E0(u8 taskId)
playerGender = sub_8017CF8(taskData[1], data->field_0);
sub_8011090(0x54, 0, 1);
if (sub_8011B90() == TRUE)
- sub_801568C(gUnknown_082EED3C[playerGender]);
+ sub_801568C(sChatDeclinedTexts[playerGender]);
else
- sub_8015664(30, gUnknown_082EED3C[playerGender]);
+ sub_8015664(30, sChatDeclinedTexts[playerGender]);
}
if (gReceivedRemoteLinkPlayers != 0)
data->state = 16;
@@ -3737,7 +2705,7 @@ void sub_80156E0(u8 taskId)
data->state = 33;
StringCopy(gStringVar1, gLinkPlayers[1].name);
id = sub_800E540(gLinkPlayers[1].trainerId, gLinkPlayers[1].name);
- StringExpandPlaceholders(gStringVar4, gUnknown_082EE324[id]);
+ StringExpandPlaceholders(gStringVar4, sPlayerContactedYouTexts[id]);
}
break;
case 33:
@@ -3750,7 +2718,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 +2739,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 +2834,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 +2862,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 +2879,33 @@ void sub_80156E0(u8 taskId)
case 54:
if (!gPaletteFade.active)
{
- gUnknown_02022C40.field_0 = 1;
- gFieldCallback = sub_80AF128;
- sub_81B8904(8, CB2_ReturnToField);
+ sUnionRoomTrade.field_0 = 1;
+ gFieldCallback = FieldCB_ContinueScriptUnionRoom;
+ 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 +2921,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 +2954,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,23 +2986,23 @@ 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;
- gFieldCallback = sub_80AF128;
- sub_81B8904(9, CB2_ReturnToField);
+ gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.field_0.type;
+ gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.field_0.species;
+ gFieldCallback = FieldCB_ContinueScriptUnionRoom;
+ 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:
gUnknown_02022C2C = 0x44;
sub_8012188(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, 0x44);
sub_8018404(gStringVar1, &data->field_0->arr[taskData[1]]);
- sub_8017020(gUnknown_082EE17C[2]);
+ sub_8017020(sCommunicatingWaitTexts[2]);
data->state = 25;
break;
case 26:
@@ -4097,20 +3065,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 +3117,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 +3126,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 +3150,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
@@ -4486,7 +3454,7 @@ u8 sub_8017118(const struct WindowTemplate * template)
u8 windowId = AddWindow(template);
DrawStdWindowFrame(windowId, FALSE);
FillWindowPixelBuffer(windowId, 0xFF);
- sub_80173E0(windowId, 1, gUnknown_082EFD94, 8, 1, 6);
+ sub_80173E0(windowId, 1, sText_NameWantedOfferLv, 8, 1, 6);
CopyWindowToVram(windowId, 2);
PutWindowTilemap(windowId);
return windowId;
@@ -4812,7 +3780,7 @@ void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4,
u8 sp0[6];
ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
- StringAppend(gStringVar4, gText_Colon);
+ StringAppend(gStringVar4, sText_Colon);
sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, 0);
arg1 += 18;
r2 = arg3->unk.field_0.unk_0a_0;
@@ -4821,7 +3789,7 @@ void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4,
sub_8018404(gStringVar4, arg3);
sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, arg4);
ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
- StringCopy(gStringVar4, gText_UnkCtrlCodeF907);
+ StringCopy(gStringVar4, sText_ID);
StringAppend(gStringVar4, sp0);
sub_80173E0(arg0, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x88), arg2, arg4);
}
@@ -4836,7 +3804,7 @@ void sub_80178A0(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4,
sub_8018404(gStringVar4, arg3);
sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, arg4);
ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5);
- StringCopy(gStringVar4, gText_UnkCtrlCodeF907);
+ StringCopy(gStringVar4, sText_ID);
StringAppend(gStringVar4, sp0);
sub_80173E0(arg0, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x68), arg2, arg4);
}
@@ -4897,12 +3865,12 @@ 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, sJoinChatTexts[r2][playerGender]);
return 2;
}
else
{
- sub_8017020(gUnknown_082EE17C[r2]);
+ sub_8017020(sCommunicatingWaitTexts[r2]);
return 1;
}
}
@@ -4916,19 +3884,19 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender
switch (r5->unk.field_0.unk_0a_0 & 0x3F)
{
case 1:
- StringExpandPlaceholders(gStringVar4, gUnknown_082EEEAC[playerGender][Random() % 4]);
+ StringExpandPlaceholders(gStringVar4, sBattleReactionTexts[playerGender][Random() % 4]);
break;
case 4:
- StringExpandPlaceholders(gStringVar4, gUnknown_082EF1CC[playerGender][Random() % 2]);
+ StringExpandPlaceholders(gStringVar4, sTradeReactionTexts[playerGender][Random() % 2]);
break;
case 5:
- StringExpandPlaceholders(gStringVar4, gUnknown_082EF010[playerGender][Random() % 4]);
+ StringExpandPlaceholders(gStringVar4, sChatReactionTexts[playerGender][Random() % 4]);
break;
case 8:
- StringExpandPlaceholders(gStringVar4, gUnknown_082EF100[playerGender][Random() % 2]);
+ StringExpandPlaceholders(gStringVar4, sTrainerCardReactionTexts[playerGender][Random() % 2]);
break;
default:
- StringExpandPlaceholders(gStringVar4, gUnknown_082EE6C8);
+ StringExpandPlaceholders(gStringVar4, sText_TrainerAppearsBusy);
break;
}
return 0;
@@ -4945,12 +3913,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
{
@@ -5055,16 +4023,16 @@ void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender)
switch (arg1)
{
case 0x41:
- StringExpandPlaceholders(dst, gUnknown_082EEA68[playerGender]);
+ StringExpandPlaceholders(dst, sBattleDeclinedTexts[playerGender]);
break;
case 0x45:
- StringExpandPlaceholders(dst, gUnknown_082EED3C[playerGender]);
+ StringExpandPlaceholders(dst, sChatDeclinedTexts[playerGender]);
break;
case 0x44:
- StringExpandPlaceholders(dst, gUnknown_082EF7B0);
+ StringExpandPlaceholders(dst, sText_TradeOfferRejected);
break;
case 0x48:
- StringExpandPlaceholders(dst, gUnknown_082EEB08[playerGender]);
+ StringExpandPlaceholders(dst, sShowTrainerCardDeclinedTexts[playerGender]);
break;
}
}
@@ -5077,13 +4045,13 @@ void sub_8017E00(u8 *dst, u8 arg1)
switch (arg1)
{
case 0x41:
- StringCopy(dst, gUnknown_082EE984[mpId][gender][0]);
+ StringCopy(dst, sStartActivityTexts[mpId][gender][0]);
break;
case 0x44:
- StringCopy(dst, gUnknown_082EE984[mpId][gender][2]);
+ StringCopy(dst, sStartActivityTexts[mpId][gender][2]);
break;
case 0x45:
- StringCopy(dst, gUnknown_082EE984[mpId][gender][1]);
+ StringCopy(dst, sStartActivityTexts[mpId][gender][1]);
break;
}
}
@@ -5097,16 +4065,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 +4087,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 +4095,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 +4137,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 +4152,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 +4169,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 +4201,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 +4241,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);
}
}
@@ -5321,7 +4283,7 @@ void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2)
DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName);
- StringCopy(arg1->field_174, gUnknown_082EFF50[trainerCard->stars]);
+ StringCopy(arg1->field_174, sCardColorTexts[trainerCard->stars]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_174);
ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3);
@@ -5332,7 +4294,7 @@ void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2)
DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, arg1->field_C0[3]);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, arg1->field_C0[4]);
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_082EFF64);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, sText_TrainerCardInfoPage1);
StringCopy(gStringVar4, arg1->field_1A4);
n = trainerCard->linkBattleWins;
@@ -5360,17 +4322,17 @@ void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2)
DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->field_C0[i + 3]);
}
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_082EFFA4);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, sText_TrainerCardInfoPage2);
StringAppend(gStringVar4, arg1->field_1A4);
if (arg2 == TRUE)
{
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_082F0020);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, sText_FinishedCheckingPlayersTrainerCard);
StringAppend(gStringVar4, arg1->field_1A4);
}
else if (arg2 == FALSE)
{
- DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_082F0018[trainerCard->gender]);
+ DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, sGladToMeetYouTexts[trainerCard->gender]);
StringAppend(gStringVar4, arg1->field_1A4);
}
}
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..f212c69a7 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");
@@ -417,8 +461,8 @@ const struct SpritePalette gUnknown_082F315C = {
};
const struct OamData gUnknown_082F3164 = {
- .shape = ST_OAM_H_RECTANGLE,
- .size = 3,
+ .shape = SPRITE_SHAPE(64x32),
+ .size = SPRITE_SIZE(64x32),
.priority = 1
};
@@ -460,8 +504,8 @@ const struct SpriteTemplate gUnknown_082F319C = {
};
const struct OamData gUnknown_082F31B4 = {
- .shape = ST_OAM_V_RECTANGLE,
- .size = 0,
+ .shape = SPRITE_SHAPE(8x16),
+ .size = SPRITE_SIZE(8x16),
.priority = 2
};
@@ -486,14 +530,14 @@ const struct SpriteTemplate gUnknown_082F31D4 = {
};
const struct OamData gUnknown_082F31EC = {
- .shape = ST_OAM_SQUARE,
- .size = 1,
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
.priority = 2
};
const struct OamData gUnknown_082F31F4 = {
- .shape = ST_OAM_H_RECTANGLE,
- .size = 2,
+ .shape = SPRITE_SHAPE(32x16),
+ .size = SPRITE_SIZE(32x16),
.priority = 2
};
@@ -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)
@@ -1661,7 +1705,7 @@ void copy_strings_to_sav1(void)
StringCopy(gSaveBlock1Ptr->unk3C88[4], gText_Lets);
StringCopy(gSaveBlock1Ptr->unk3C88[5], gText_Ok);
StringCopy(gSaveBlock1Ptr->unk3C88[6], gText_Sorry);
- StringCopy(gSaveBlock1Ptr->unk3C88[7], gText_YayUnkF9F9);
+ StringCopy(gSaveBlock1Ptr->unk3C88[7], gText_YaySmileEmoji);
StringCopy(gSaveBlock1Ptr->unk3C88[8], gText_ThankYou);
StringCopy(gSaveBlock1Ptr->unk3C88[9], gText_ByeBye);
}
@@ -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();
- sp[0] = 0;
- sp[1] = 14;
- sp[2] = 13;
- if (var0 != 3)
+ page = GetCurrentKeyboardPage();
+ sp[0] = TEXT_COLOR_TRANSPARENT;
+ sp[1] = TEXT_DYNAMIC_COLOR_5;
+ sp[2] = TEXT_DYNAMIC_COLOR_4;
+ 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);
}
@@ -2644,7 +2688,7 @@ static void sub_802040C(void)
static void sub_8020420(u16 row, u8 *str, u8 arg2)
{
u8 color[3];
- color[0] = 1;
+ color[0] = TEXT_COLOR_WHITE;
color[1] = arg2 * 2 + 2;
color[2] = arg2 * 2 + 3;
FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15);
@@ -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/unk_transition.c b/src/unk_transition.c
index cd91af07e..09e194be3 100644
--- a/src/unk_transition.c
+++ b/src/unk_transition.c
@@ -47,10 +47,10 @@ static const u8 sFiller[0x1C0] = {0};
static const struct OamData sOamData_862B71C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
.mosaic = 0,
- .bpp = 0,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x64),
.x = 0,
.matrixNum = 0,
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index 655f38def..a0c8d8e2d 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"
@@ -178,11 +178,11 @@ const u8 gUnknown_085DFCC4[] =
1 // Sour/Tough
};
-const u8 gUnknown_085DFCC9[] =
+static const u8 sNatureTextColors[] =
{
- 0,
- 8,
- 1
+ TEXT_COLOR_TRANSPARENT,
+ TEXT_COLOR_BLUE,
+ TEXT_COLOR_WHITE
};
const struct BgTemplate gUnknown_085DFCCC[4] =
@@ -299,9 +299,9 @@ const s16 gUnknown_085DFD28[][2] =
const struct OamData gOamData_085DFD3C =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
- .bpp = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(32x16),
.x = 0,
.size = SPRITE_SIZE(32x16),
@@ -342,9 +342,9 @@ const struct SpriteTemplate gSpriteTemplate_085DFD5C =
const struct OamData gOamData_085DFD74 =
{
.y = 0,
- .affineMode = 0,
- .objMode = 0,
- .bpp = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
.shape = SPRITE_SHAPE(64x32),
.x = 0,
.size = SPRITE_SIZE(64x32),
@@ -1302,8 +1302,8 @@ void sub_8167760(void)
if (spriteId != MAX_SPRITES)
{
gUnknown_0203BCAC->field_7B06[i] = spriteId;
- gSprites[spriteId].oam.shape = 1;
- gSprites[spriteId].oam.size = 2;
+ gSprites[spriteId].oam.shape = SPRITE_SHAPE(32x16);
+ gSprites[spriteId].oam.size = SPRITE_SIZE(32x16);
}
else
{
@@ -1398,7 +1398,7 @@ void sub_8167BA0(u16 arg0, u8 copyToVramMode)
nature = GetNature(&gPlayerParty[partyIndex]);
str = StringCopy(gUnknown_0203BCAC->info.field_7A, gText_NatureSlash);
str = StringCopy(str, gNatureNamePointers[nature]);
- AddTextPrinterParameterized3(1, 1, 2, 1, gUnknown_085DFCC9, 0, gUnknown_0203BCAC->info.field_7A);
+ AddTextPrinterParameterized3(1, 1, 2, 1, sNatureTextColors, 0, gUnknown_0203BCAC->info.field_7A);
}
if (copyToVramMode)
diff --git a/src/walda_phrase.c b/src/walda_phrase.c
index e8c1e4aed..4b617e3b8 100644
--- a/src/walda_phrase.c
+++ b/src/walda_phrase.c
@@ -70,7 +70,7 @@ static void CB2_HandleGivenWaldaPhrase(void)
}
StringCopy(gStringVar1, GetWaldaPhrasePtr());
- gFieldCallback = FieldCallback_ReturnToEventScript2;
+ gFieldCallback = FieldCB_ContinueScriptHandleMusic;
SetMainCallback2(CB2_ReturnToField);
}
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..52aac17f3 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;
}
@@ -423,7 +424,7 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar
level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]);
if (flags & WILD_CHECK_REPEL && !IsWildLevelAllowedByRepel(level))
return FALSE;
- if (gMapHeader.mapLayoutId != LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3 && flags & WILD_CHECK_KEEN_EYE && !IsAbilityAllowingEncounter(level))
+ if (gMapHeader.mapLayoutId != LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS && flags & WILD_CHECK_KEEN_EYE && !IsAbilityAllowingEncounter(level))
return FALSE;
CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level);
@@ -484,7 +485,7 @@ static bool8 DoWildEncounterRateTest(u32 encounterRate, bool8 ignoreAbility)
{
u32 ability = GetMonAbility(&gPlayerParty[0]);
- if (ability == ABILITY_STENCH && gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ if (ability == ABILITY_STENCH && gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
encounterRate = encounterRate * 3 / 4;
else if (ability == ABILITY_STENCH)
encounterRate /= 2;
@@ -532,7 +533,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
headerId = GetCurrentMapWildMonHeaderId();
if (headerId == 0xFFFF)
{
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS)
{
headerId = GetBattlePikeWildMonHeaderId();
if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
@@ -547,7 +548,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
BattleSetup_StartBattlePikeWildBattle();
return TRUE;
}
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
{
headerId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
@@ -675,7 +676,7 @@ bool8 SweetScentWildEncounter(void)
headerId = GetCurrentMapWildMonHeaderId();
if (headerId == 0xFFFF)
{
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS)
{
headerId = GetBattlePikeWildMonHeaderId();
if (TryGenerateWildMon(gBattlePikeWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE)
@@ -685,7 +686,7 @@ bool8 SweetScentWildEncounter(void)
BattleSetup_StartBattlePikeWildBattle();
return TRUE;
}
- if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
+ if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
{
headerId = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
if (TryGenerateWildMon(gBattlePyramidWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE)
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;
-}