diff options
Diffstat (limited to 'src')
181 files changed, 12825 insertions, 20973 deletions
diff --git a/src/alloc.c b/src/alloc.c deleted file mode 100644 index 4d1a9fe5c..000000000 --- a/src/alloc.c +++ /dev/null @@ -1,210 +0,0 @@ -#include "global.h" - -static void *sHeapStart; -static u32 sHeapSize; -static u32 malloc_c_unused_0300000c; // needed to align dma3_manager.o(.bss) - -#define MALLOC_SYSTEM_ID 0xA3A3 - -struct MemBlock { - // Whether this block is currently allocated. - bool16 flag; - - // Magic number used for error checking. Should equal MALLOC_SYSTEM_ID. - u16 magic; - - // Size of the block (not including this header struct). - u32 size; - - // Previous block pointer. Equals sHeapStart if this is the first block. - struct MemBlock *prev; - - // Next block pointer. Equals sHeapStart if this is the last block. - struct MemBlock *next; - - // Data in the memory block. (Arrays of length 0 are a GNU extension.) - u8 data[0]; -}; - -void PutMemBlockHeader(void *block, struct MemBlock *prev, struct MemBlock *next, u32 size) -{ - struct MemBlock *header = (struct MemBlock *)block; - - header->flag = FALSE; - header->magic = MALLOC_SYSTEM_ID; - header->size = size; - header->prev = prev; - header->next = next; -} - -void PutFirstMemBlockHeader(void *block, u32 size) -{ - PutMemBlockHeader(block, (struct MemBlock *)block, (struct MemBlock *)block, size - sizeof(struct MemBlock)); -} - -void *AllocInternal(void *heapStart, u32 size) -{ - struct MemBlock *pos = (struct MemBlock *)heapStart; - struct MemBlock *head = pos; - struct MemBlock *splitBlock; - u32 foundBlockSize; - - // Alignment - if (size & 3) - size = 4 * ((size / 4) + 1); - - for (;;) { - // Loop through the blocks looking for unused block that's big enough. - - if (!pos->flag) { - foundBlockSize = pos->size; - - if (foundBlockSize >= size) { - if (foundBlockSize - size < 2 * sizeof(struct MemBlock)) { - // The block isn't much bigger than the requested size, - // so just use it. - pos->flag = TRUE; - } else { - // The block is significantly bigger than the requested - // size, so split the rest into a separate block. - foundBlockSize -= sizeof(struct MemBlock); - foundBlockSize -= size; - - splitBlock = (struct MemBlock *)(pos->data + size); - - pos->flag = TRUE; - pos->size = size; - - PutMemBlockHeader(splitBlock, pos, pos->next, foundBlockSize); - - pos->next = splitBlock; - - if (splitBlock->next != head) - splitBlock->next->prev = splitBlock; - } - - return pos->data; - } - } - - if (pos->next == head) - return NULL; - - pos = pos->next; - } -} - -void FreeInternal(void *heapStart, void *pointer) -{ - if (pointer) { - struct MemBlock *head = (struct MemBlock *)heapStart; - struct MemBlock *block = (struct MemBlock *)((u8 *)pointer - sizeof(struct MemBlock)); - block->flag = FALSE; - - // If the freed block isn't the last one, merge with the next block - // if it's not in use. - if (block->next != head) { - if (!block->next->flag) { - block->size += sizeof(struct MemBlock) + block->next->size; - block->next->magic = 0; - block->next = block->next->next; - if (block->next != head) - block->next->prev = block; - } - } - - // If the freed block isn't the first one, merge with the previous block - // if it's not in use. - if (block != head) { - if (!block->prev->flag) { - block->prev->next = block->next; - - if (block->next != head) - block->next->prev = block->prev; - - block->magic = 0; - block->prev->size += sizeof(struct MemBlock) + block->size; - } - } - } -} - -void *AllocZeroedInternal(void *heapStart, u32 size) -{ - void *mem = AllocInternal(heapStart, size); - - if (mem != NULL) { - if (size & 3) - size = 4 * ((size / 4) + 1); - - CpuFill32(0, mem, size); - } - - return mem; -} - -bool32 CheckMemBlockInternal(void *heapStart, void *pointer) -{ - struct MemBlock *head = (struct MemBlock *)heapStart; - struct MemBlock *block = (struct MemBlock *)((u8 *)pointer - sizeof(struct MemBlock)); - - if (block->magic != MALLOC_SYSTEM_ID) - return FALSE; - - if (block->next->magic != MALLOC_SYSTEM_ID) - return FALSE; - - if (block->next != head && block->next->prev != block) - return FALSE; - - if (block->prev->magic != MALLOC_SYSTEM_ID) - return FALSE; - - if (block->prev != head && block->prev->next != block) - return FALSE; - - if (block->next != head && block->next != (struct MemBlock *)(block->data + block->size)) - return FALSE; - - return TRUE; -} - -void InitHeap(void *heapStart, u32 heapSize) -{ - sHeapStart = heapStart; - sHeapSize = heapSize; - PutFirstMemBlockHeader(heapStart, heapSize); -} - -void *Alloc(u32 size) -{ - return AllocInternal(sHeapStart, size); -} - -void *AllocZeroed(u32 size) -{ - return AllocZeroedInternal(sHeapStart, size); -} - -void Free(void *pointer) -{ - FreeInternal(sHeapStart, pointer); -} - -bool32 CheckMemBlock(void *pointer) -{ - return CheckMemBlockInternal(sHeapStart, pointer); -} - -bool32 CheckHeap() -{ - struct MemBlock *pos = (struct MemBlock *)sHeapStart; - - do { - if (!CheckMemBlockInternal(sHeapStart, pos->data)) - return FALSE; - pos = pos->next; - } while (pos != (struct MemBlock *)sHeapStart); - - return TRUE; -} diff --git a/src/apprentice.c b/src/apprentice.c index 113b22f6e..189647991 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -10,7 +10,7 @@ #include "item.h" #include "item_menu.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "new_game.h" #include "party_menu.h" diff --git a/src/battle_anim.c b/src/battle_anim.c index ab1e5ed6a..25abbfece 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -114,7 +114,7 @@ EWRAM_DATA u8 gBattleAnimTarget = 0; EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gUnknown_02038440 = 0; -const struct OamData gUnknown_08524904 = +const struct OamData gOamData_AffineOff_ObjNormal_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -129,7 +129,7 @@ const struct OamData gUnknown_08524904 = }; -const struct OamData gUnknown_0852490C = +const struct OamData gOamData_AffineOff_ObjNormal_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -143,7 +143,7 @@ const struct OamData gUnknown_0852490C = .paletteNum = 0, }; -const struct OamData gUnknown_08524914 = +const struct OamData gOamData_AffineOff_ObjNormal_32x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -157,7 +157,7 @@ const struct OamData gUnknown_08524914 = .paletteNum = 0, }; -const struct OamData gUnknown_0852491C = +const struct OamData gOamData_AffineOff_ObjNormal_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -171,7 +171,7 @@ const struct OamData gUnknown_0852491C = .paletteNum = 0, }; -const struct OamData gUnknown_08524924 = +const struct OamData gOamData_AffineOff_ObjNormal_16x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -185,7 +185,7 @@ const struct OamData gUnknown_08524924 = .paletteNum = 0, }; -const struct OamData gUnknown_0852492C = +const struct OamData gOamData_AffineOff_ObjNormal_32x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -199,7 +199,7 @@ const struct OamData gUnknown_0852492C = .paletteNum = 0, }; -const struct OamData gUnknown_08524934 = +const struct OamData gOamData_AffineOff_ObjNormal_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -213,7 +213,7 @@ const struct OamData gUnknown_08524934 = .paletteNum = 0, }; -const struct OamData gUnknown_0852493C = +const struct OamData gOamData_AffineOff_ObjNormal_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -227,7 +227,7 @@ const struct OamData gUnknown_0852493C = .paletteNum = 0, }; -const struct OamData gUnknown_08524944 = +const struct OamData gOamData_AffineOff_ObjNormal_8x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -241,7 +241,7 @@ const struct OamData gUnknown_08524944 = .paletteNum = 0, }; -const struct OamData gUnknown_0852494C = +const struct OamData gOamData_AffineOff_ObjNormal_8x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -255,7 +255,7 @@ const struct OamData gUnknown_0852494C = .paletteNum = 0, }; -const struct OamData gUnknown_08524954 = +const struct OamData gOamData_AffineOff_ObjNormal_16x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -269,7 +269,7 @@ const struct OamData gUnknown_08524954 = .paletteNum = 0, }; -const struct OamData gUnknown_0852495C = +const struct OamData gOamData_AffineOff_ObjNormal_32x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -283,7 +283,7 @@ const struct OamData gUnknown_0852495C = .paletteNum = 0, }; -const struct OamData gUnknown_08524964 = +const struct OamData gOamData_AffineNormal_ObjNormal_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -297,7 +297,7 @@ const struct OamData gUnknown_08524964 = .paletteNum = 0, }; -const struct OamData gUnknown_0852496C = +const struct OamData gOamData_AffineNormal_ObjNormal_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -311,7 +311,7 @@ const struct OamData gUnknown_0852496C = .paletteNum = 0, }; -const struct OamData gUnknown_08524974 = +const struct OamData gOamData_AffineNormal_ObjNormal_32x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -325,7 +325,7 @@ const struct OamData gUnknown_08524974 = .paletteNum = 0, }; -const struct OamData gUnknown_0852497C = +const struct OamData gOamData_AffineNormal_ObjNormal_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -339,7 +339,7 @@ const struct OamData gUnknown_0852497C = .paletteNum = 0, }; -const struct OamData gUnknown_08524984 = +const struct OamData gOamData_AffineNormal_ObjNormal_16x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -353,7 +353,7 @@ const struct OamData gUnknown_08524984 = .paletteNum = 0, }; -const struct OamData gUnknown_0852498C = +const struct OamData gOamData_AffineNormal_ObjNormal_32x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -367,7 +367,7 @@ const struct OamData gUnknown_0852498C = .paletteNum = 0, }; -const struct OamData gUnknown_08524994 = +const struct OamData gOamData_AffineNormal_ObjNormal_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -381,7 +381,7 @@ const struct OamData gUnknown_08524994 = .paletteNum = 0, }; -const struct OamData gUnknown_0852499C = +const struct OamData gOamData_AffineNormal_ObjNormal_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -395,7 +395,7 @@ const struct OamData gUnknown_0852499C = .paletteNum = 0, }; -const struct OamData gUnknown_085249A4 = +const struct OamData gOamData_AffineNormal_ObjNormal_8x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -409,7 +409,7 @@ const struct OamData gUnknown_085249A4 = .paletteNum = 0, }; -const struct OamData gUnknown_085249AC = +const struct OamData gOamData_AffineNormal_ObjNormal_8x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -423,7 +423,7 @@ const struct OamData gUnknown_085249AC = .paletteNum = 0, }; -const struct OamData gUnknown_085249B4 = +const struct OamData gOamData_AffineNormal_ObjNormal_16x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -437,7 +437,7 @@ const struct OamData gUnknown_085249B4 = .paletteNum = 0, }; -const struct OamData gUnknown_085249BC = +const struct OamData gOamData_AffineNormal_ObjNormal_32x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -451,7 +451,7 @@ const struct OamData gUnknown_085249BC = .paletteNum = 0, }; -const struct OamData gUnknown_085249C4 = +const struct OamData gOamData_AffineDouble_ObjNormal_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -465,7 +465,7 @@ const struct OamData gUnknown_085249C4 = .paletteNum = 0, }; -const struct OamData gUnknown_085249CC = +const struct OamData gOamData_AffineDouble_ObjNormal_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -479,7 +479,7 @@ const struct OamData gUnknown_085249CC = .paletteNum = 0, }; -const struct OamData gUnknown_085249D4 = +const struct OamData gOamData_AffineDouble_ObjNormal_32x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -493,7 +493,7 @@ const struct OamData gUnknown_085249D4 = .paletteNum = 0, }; -const struct OamData gUnknown_085249DC = +const struct OamData gOamData_AffineDouble_ObjNormal_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -507,7 +507,7 @@ const struct OamData gUnknown_085249DC = .paletteNum = 0, }; -const struct OamData gUnknown_085249E4 = +const struct OamData gOamData_AffineDouble_ObjNormal_16x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -521,7 +521,7 @@ const struct OamData gUnknown_085249E4 = .paletteNum = 0, }; -const struct OamData gUnknown_085249EC = +const struct OamData gOamData_AffineDouble_ObjNormal_32x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -535,7 +535,7 @@ const struct OamData gUnknown_085249EC = .paletteNum = 0, }; -const struct OamData gUnknown_085249F4 = +const struct OamData gOamData_AffineDouble_ObjNormal_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -549,7 +549,7 @@ const struct OamData gUnknown_085249F4 = .paletteNum = 0, }; -const struct OamData gUnknown_085249FC = +const struct OamData gOamData_AffineDouble_ObjNormal_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -563,7 +563,7 @@ const struct OamData gUnknown_085249FC = .paletteNum = 0, }; -const struct OamData gUnknown_08524A04 = +const struct OamData gOamData_AffineDouble_ObjNormal_8x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -577,7 +577,7 @@ const struct OamData gUnknown_08524A04 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A0C = +const struct OamData gOamData_AffineDouble_ObjNormal_8x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -591,7 +591,7 @@ const struct OamData gUnknown_08524A0C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A14 = +const struct OamData gOamData_AffineDouble_ObjNormal_16x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -605,7 +605,7 @@ const struct OamData gUnknown_08524A14 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A1C = +const struct OamData gOamData_AffineDouble_ObjNormal_32x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -619,7 +619,7 @@ const struct OamData gUnknown_08524A1C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A24 = +const struct OamData gOamData_AffineOff_ObjBlend_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -633,7 +633,7 @@ const struct OamData gUnknown_08524A24 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A2C = +const struct OamData gOamData_AffineOff_ObjBlend_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -647,7 +647,7 @@ const struct OamData gUnknown_08524A2C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A34 = +const struct OamData gOamData_AffineOff_ObjBlend_32x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -661,7 +661,7 @@ const struct OamData gUnknown_08524A34 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A3C = +const struct OamData gOamData_AffineOff_ObjBlend_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -675,7 +675,7 @@ const struct OamData gUnknown_08524A3C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A44 = +const struct OamData gOamData_AffineOff_ObjBlend_16x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -689,7 +689,7 @@ const struct OamData gUnknown_08524A44 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A4C = +const struct OamData gOamData_AffineOff_ObjBlend_32x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -703,7 +703,7 @@ const struct OamData gUnknown_08524A4C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A54 = +const struct OamData gOamData_AffineOff_ObjBlend_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -717,7 +717,7 @@ const struct OamData gUnknown_08524A54 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A5C = +const struct OamData gOamData_AffineOff_ObjBlend_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -731,7 +731,7 @@ const struct OamData gUnknown_08524A5C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A64 = +const struct OamData gOamData_AffineOff_ObjBlend_8x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -745,7 +745,7 @@ const struct OamData gUnknown_08524A64 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A6C = +const struct OamData gOamData_AffineOff_ObjBlend_8x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -759,7 +759,7 @@ const struct OamData gUnknown_08524A6C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A74 = +const struct OamData gOamData_AffineOff_ObjBlend_16x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -773,7 +773,7 @@ const struct OamData gUnknown_08524A74 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A7C = +const struct OamData gOamData_AffineOff_ObjBlend_32x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_OFF, @@ -787,7 +787,7 @@ const struct OamData gUnknown_08524A7C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A84 = +const struct OamData gOamData_AffineNormal_ObjBlend_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -801,7 +801,7 @@ const struct OamData gUnknown_08524A84 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A8C = +const struct OamData gOamData_AffineNormal_ObjBlend_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -815,7 +815,7 @@ const struct OamData gUnknown_08524A8C = .paletteNum = 0, }; -const struct OamData gUnknown_08524A94 = +const struct OamData gOamData_AffineNormal_ObjBlend_32x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -829,7 +829,7 @@ const struct OamData gUnknown_08524A94 = .paletteNum = 0, }; -const struct OamData gUnknown_08524A9C = +const struct OamData gOamData_AffineNormal_ObjBlend_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -843,7 +843,7 @@ const struct OamData gUnknown_08524A9C = .paletteNum = 0, }; -const struct OamData gUnknown_08524AA4 = +const struct OamData gOamData_AffineNormal_ObjBlend_16x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -857,7 +857,7 @@ const struct OamData gUnknown_08524AA4 = .paletteNum = 0, }; -const struct OamData gUnknown_08524AAC = +const struct OamData gOamData_AffineNormal_ObjBlend_32x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -871,7 +871,7 @@ const struct OamData gUnknown_08524AAC = .paletteNum = 0, }; -const struct OamData gUnknown_08524AB4 = +const struct OamData gOamData_AffineNormal_ObjBlend_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -885,7 +885,7 @@ const struct OamData gUnknown_08524AB4 = .paletteNum = 0, }; -const struct OamData gUnknown_08524ABC = +const struct OamData gOamData_AffineNormal_ObjBlend_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -899,7 +899,7 @@ const struct OamData gUnknown_08524ABC = .paletteNum = 0, }; -const struct OamData gUnknown_08524AC4 = +const struct OamData gOamData_AffineNormal_ObjBlend_8x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -913,7 +913,7 @@ const struct OamData gUnknown_08524AC4 = .paletteNum = 0, }; -const struct OamData gUnknown_08524ACC = +const struct OamData gOamData_AffineNormal_ObjBlend_8x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -927,7 +927,7 @@ const struct OamData gUnknown_08524ACC = .paletteNum = 0, }; -const struct OamData gUnknown_08524AD4 = +const struct OamData gOamData_AffineNormal_ObjBlend_16x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -941,7 +941,7 @@ const struct OamData gUnknown_08524AD4 = .paletteNum = 0, }; -const struct OamData gUnknown_08524ADC = +const struct OamData gOamData_AffineNormal_ObjBlend_32x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -955,7 +955,7 @@ const struct OamData gUnknown_08524ADC = .paletteNum = 0, }; -const struct OamData gUnknown_08524AE4 = +const struct OamData gOamData_AffineDouble_ObjBlend_8x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -969,7 +969,7 @@ const struct OamData gUnknown_08524AE4 = .paletteNum = 0, }; -const struct OamData gUnknown_08524AEC = +const struct OamData gOamData_AffineDouble_ObjBlend_16x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -983,7 +983,7 @@ const struct OamData gUnknown_08524AEC = .paletteNum = 0, }; -const struct OamData gUnknown_08524AF4 = +const struct OamData gOamData_AffineDouble_ObjBlend_32x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -997,7 +997,7 @@ const struct OamData gUnknown_08524AF4 = .paletteNum = 0, }; -const struct OamData gUnknown_08524AFC = +const struct OamData gOamData_AffineDouble_ObjBlend_64x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1011,7 +1011,7 @@ const struct OamData gUnknown_08524AFC = .paletteNum = 0, }; -const struct OamData gUnknown_08524B04 = +const struct OamData gOamData_AffineDouble_ObjBlend_16x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1025,7 +1025,7 @@ const struct OamData gUnknown_08524B04 = .paletteNum = 0, }; -const struct OamData gUnknown_08524B0C = +const struct OamData gOamData_AffineDouble_ObjBlend_32x8 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1039,7 +1039,7 @@ const struct OamData gUnknown_08524B0C = .paletteNum = 0, }; -const struct OamData gUnknown_08524B14 = +const struct OamData gOamData_AffineDouble_ObjBlend_32x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1053,7 +1053,7 @@ const struct OamData gUnknown_08524B14 = .paletteNum = 0, }; -const struct OamData gUnknown_08524B1C = +const struct OamData gOamData_AffineDouble_ObjBlend_64x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1067,7 +1067,7 @@ const struct OamData gUnknown_08524B1C = .paletteNum = 0, }; -const struct OamData gUnknown_08524B24 = +const struct OamData gOamData_AffineDouble_ObjBlend_8x16 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1081,7 +1081,7 @@ const struct OamData gUnknown_08524B24 = .paletteNum = 0, }; -const struct OamData gUnknown_08524B2C = +const struct OamData gOamData_AffineDouble_ObjBlend_8x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1095,7 +1095,7 @@ const struct OamData gUnknown_08524B2C = .paletteNum = 0, }; -const struct OamData gUnknown_08524B34 = +const struct OamData gOamData_AffineDouble_ObjBlend_16x32 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, @@ -1109,7 +1109,7 @@ const struct OamData gUnknown_08524B34 = .paletteNum = 0, }; -const struct OamData gUnknown_08524B3C = +const struct OamData gOamData_AffineDouble_ObjBlend_32x64 = { .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index db9057cb4..1efa860d3 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle_anim.h" #include "battle_interface.h" #include "decompress.h" @@ -41,43 +41,43 @@ void AnimKnockOffItem(struct Sprite *); void AnimPresentHealParticle(struct Sprite *); void AnimItemSteal(struct Sprite *); void AnimTrickBag(struct Sprite *); -void sub_8100640(struct Sprite *); -void sub_8100898(struct Sprite *); +void AnimFlyingParticle(struct Sprite *); +void AnimNeedleArmSpike(struct Sprite *); void sub_81009F8(struct Sprite *); -void sub_8100A50(struct Sprite *); +void AnimWhipHit(struct Sprite *); void sub_8100A94(struct Sprite *); void AnimCuttingSlice(struct Sprite *); -void sub_8100B88(struct Sprite *); +void AnimAirCutterSlice(struct Sprite *); void sub_8100E1C(struct Sprite *); -void sub_8100EF0(struct Sprite *); -void sub_81010CC(struct Sprite *); -void sub_810130C(struct Sprite *); -void sub_810135C(struct Sprite *); +void AnimProtect(struct Sprite *); +void AnimMilkBottle(struct Sprite *); +void AnimGrantingStars(struct Sprite *); +void AnimSparkingStars(struct Sprite *); void sub_8101440(struct Sprite *); -void sub_81014F4(struct Sprite *); -void sub_81015AC(struct Sprite *); -void sub_8101898(struct Sprite *); -void sub_8101940(struct Sprite *); +void AnimSleepLetterZ(struct Sprite *); +void AnimLockOnTarget(struct Sprite *); +void AnimLockOnMoveTarget(struct Sprite *); +void AnimBowMon(struct Sprite *); void sub_8101B90(struct Sprite *); -void sub_8101F40(struct Sprite *); -void sub_8101FA8(struct Sprite *); -void sub_8101FF0(struct Sprite *); -void sub_81020D8(struct Sprite *); -void sub_810217C(struct Sprite *); -void sub_8102268(struct Sprite *); -void sub_810234C(struct Sprite *); -void sub_81024E0(struct Sprite *); -void sub_8102540(struct Sprite *); -void sub_8102844(struct Sprite *); -void sub_8102BCC(struct Sprite *); -void sub_8102CD4(struct Sprite *); -void sub_8102EB0(struct Sprite *); -void sub_8102FB8(struct Sprite *); -void sub_8103028(struct Sprite *); -void sub_8103164(struct Sprite *); -void sub_8103208(struct Sprite *); -void sub_8103284(struct Sprite *); -void sub_8103390(struct Sprite *); +void AnimSlashSlice(struct Sprite *); +void AnimFalseSwipeSlice(struct Sprite *); +void AnimFalseSwipePositionedSlice(struct Sprite *); +void AnimEndureEnergy(struct Sprite *); +void AnimSharpenSphere(struct Sprite *); +void AnimConversion(struct Sprite *); +void AnimConversion2(struct Sprite *); +void AnimMoon(struct Sprite *); +void AnimMoonlightSparkle(struct Sprite *); +void AnimHornHit(struct Sprite *); +void AnimSuperFang(struct Sprite *); +void AnimWavyMusicNotes(struct Sprite *); +void AnimFlyingMusicNotes(struct Sprite *); +void AnimBellyDrumHand(struct Sprite *); +void AnimSlowFlyingMusicNotes(struct Sprite *); +void AnimThoughtBubble(struct Sprite *); +void AnimMetronomeFinger(struct Sprite *); +void AnimFollowMeFinger(struct Sprite *); +void AnimTauntFinger(struct Sprite *); static void AnimMovePowderParticleStep(struct Sprite *); static void AnimSolarbeamSmallOrbStep(struct Sprite *); static void AnimAbsorptionOrbStep(struct Sprite *); @@ -93,64 +93,64 @@ static void AnimTranslateLinearSingleSineWaveStep(struct Sprite *); static void AnimMoveTwisterParticleStep(struct Sprite *); static void AnimConstrictBindingStep1(struct Sprite *); static void AnimConstrictBindingStep2(struct Sprite *); -static void sub_80FF53C(u8); -static void sub_80FF5CC(u8); -static void AnimItemStealStep(struct Sprite *); +static void AnimTask_DuplicateAndShrinkToPosStep1(u8); +static void AnimTask_DuplicateAndShrinkToPosStep2(u8); +static void AnimItemStealStep3(struct Sprite *); static void AnimRootFlickerOut(struct Sprite *); static void AnimTrickBagStep1(struct Sprite *); static void AnimTrickBagStep2(struct Sprite *); static void AnimTrickBagStep3(struct Sprite *); -static void sub_8100128(u8); -static s16 sub_8100504(struct Sprite *); -static void sub_8100524(struct Task *, u8); -static void sub_80CC408(struct Sprite *); -static void sub_810074C(struct Sprite *); -static void sub_81009A0(struct Sprite *); +static void AnimTask_LeafBladeStep(u8); +static s16 LeafBladeGetPosFactor(struct Sprite *); +static void AnimTask_LeafBladeStep2(struct Task *, u8); +static void AnimTask_LeafBladeStep2_Callback(struct Sprite *); +static void AnimFlyingParticleStep(struct Sprite *); +static void AnimNeedleArmSpikeStep(struct Sprite *); static void AnimSliceStep(struct Sprite *); static void sub_8100E80(struct Sprite *); -static void sub_8100FD4(struct Sprite *); -static void sub_8101138(struct Sprite *); -static void sub_8101298(struct Sprite *, int, int); +static void AnimProtectStep(struct Sprite *); +static void AnimMilkBottleStep1(struct Sprite *); +static void AnimMilkBottleStep2(struct Sprite *, int, int); static void sub_81014A0(struct Sprite *); -static void sub_8101560(struct Sprite *); -static void sub_81015D4(struct Sprite *); -static void sub_8101684(struct Sprite *); -static void sub_81016B8(struct Sprite *); -static void sub_8101774(struct Sprite *); -static void sub_8101820(struct Sprite *); -static void sub_8101848(struct Sprite *); -static void sub_8101998(struct Sprite *); -static void sub_81019E8(struct Sprite *); -static void sub_8101A74(struct Sprite *); -static void sub_8101AC4(struct Sprite *); -static void sub_8101B84(struct Sprite *); -static void sub_8101AE8(struct Sprite *); +static void AnimSleepLetterZStep(struct Sprite *); +static void AnimLockOnTargetStep1(struct Sprite *); +static void AnimLockOnTargetStep2(struct Sprite *); +static void AnimLockOnTargetStep3(struct Sprite *); +static void AnimLockOnTargetStep4(struct Sprite *); +static void AnimLockOnTargetStep5(struct Sprite *); +static void AnimLockOnTargetStep6(struct Sprite *); +static void AnimBowMonStep1(struct Sprite *); +static void AnimBowMonStep1_Callback(struct Sprite *); +static void AnimBowMonStep2(struct Sprite *); +static void AnimBowMonStep3(struct Sprite *); +static void AnimBowMonStep4(struct Sprite *); +static void AnimBowMonStep3_Callback(struct Sprite *); static void sub_8101BA0(struct Sprite *); -static void sub_8101D2C(u8); -static void sub_8101EEC(u8); -static void sub_8102044(struct Sprite *); -static void sub_810207C(struct Sprite *); -static void sub_810208C(struct Sprite *); -static void sub_810213C(struct Sprite *); -static void sub_81021CC(struct Sprite *); -static void sub_810237C(struct Sprite *); -static void sub_8102528(struct Sprite *); -static void sub_8102584(struct Sprite *); -static void sub_810296C(struct Sprite *); -static void sub_8102AE0(u8); -static void sub_8102B3C(struct Sprite *); -static void sub_8102D8C(s16, s16, s16 *, s16 *, s8); -static void sub_8102DE4(struct Sprite *); -static void sub_8102F40(struct Sprite *); -static void sub_81030B0(struct Sprite *); -static void sub_81031D0(struct Sprite *); -static void sub_8103250(struct Sprite *); -static void sub_8103300(struct Sprite *); -static void sub_8103320(struct Sprite *); -static void sub_81033F0(struct Sprite *); -static void sub_810342C(struct Sprite *); - -const union AnimCmd gUnknown_085920F0[] = +static void AnimTask_SkullBashPositionSet(u8); +static void AnimTask_SkullBashPositionReset(u8); +static void AnimFalseSwipeSliceStep1(struct Sprite *); +static void AnimFalseSwipeSliceStep2(struct Sprite *); +static void AnimFalseSwipeSliceStep3(struct Sprite *); +static void AnimEndureEnergyStep(struct Sprite *); +static void AnimSharpenSphereStep(struct Sprite *); +static void AnimConversion2Step(struct Sprite *); +static void AnimMoonStep(struct Sprite *); +static void AnimMoonlightSparkleStep(struct Sprite *); +static void AnimHornHitStep(struct Sprite *); +static void AnimTask_DoubleTeamStep(u8); +static void AnimTask_DoubleTeamCallback(struct Sprite *); +static void AnimWavyMusicNotesGetNextPos(s16, s16, s16 *, s16 *, s8); +static void AnimWavyMusicNotesStep(struct Sprite *); +static void AnimFlyingMusicNotesStep(struct Sprite *); +static void AnimSlowFlyingMusicNotesStep(struct Sprite *); +static void AnimThoughtBubbleStep(struct Sprite *); +static void AnimMetronomeFingerStep(struct Sprite *); +static void AnimFollowMeFingerStep1(struct Sprite *); +static void AnimFollowMeFingerStep2(struct Sprite *); +static void AnimTauntFingerStep1(struct Sprite *); +static void AnimTauntFingerStep2(struct Sprite *); + +const union AnimCmd gPowderParticlesAnimCmds[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(2, 5), @@ -163,17 +163,17 @@ const union AnimCmd gUnknown_085920F0[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gUnknown_08592114[] = +const union AnimCmd *const gPowderParticlesAnimTable[] = { - gUnknown_085920F0, + gPowderParticlesAnimCmds, }; const struct SpriteTemplate gSleepPowderParticleSpriteTemplate = { .tileTag = ANIM_TAG_SLEEP_POWDER, .paletteTag = ANIM_TAG_SLEEP_POWDER, - .oam = &gUnknown_08524944, - .anims = gUnknown_08592114, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = gPowderParticlesAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimMovePowderParticle, @@ -183,8 +183,8 @@ const struct SpriteTemplate gStunSporeParticleSpriteTemplate = { .tileTag = ANIM_TAG_STUN_SPORE, .paletteTag = ANIM_TAG_STUN_SPORE, - .oam = &gUnknown_08524944, - .anims = gUnknown_08592114, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = gPowderParticlesAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimMovePowderParticle, @@ -194,105 +194,105 @@ const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate = { .tileTag = ANIM_TAG_POISON_POWDER, .paletteTag = ANIM_TAG_POISON_POWDER, - .oam = &gUnknown_08524944, - .anims = gUnknown_08592114, + .oam = &gOamData_AffineOff_ObjNormal_8x16, + .anims = gPowderParticlesAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimMovePowderParticle, }; -const union AnimCmd gUnknown_08592160[] = +const union AnimCmd gSolarbeamBigOrbAnimCmds1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592168[] = +const union AnimCmd gSolarbeamBigOrbAnimCmds2[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592170[] = +const union AnimCmd gSolarbeamBigOrbAnimCmds3[] = { ANIMCMD_FRAME(2, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592178[] = +const union AnimCmd gSolarbeamBigOrbAnimCmds4[] = { ANIMCMD_FRAME(3, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592180[] = +const union AnimCmd gSolarbeamBigOrbAnimCmds5[] = { ANIMCMD_FRAME(4, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592188[] = +const union AnimCmd gSolarbeamBigOrbAnimCmds6[] = { ANIMCMD_FRAME(5, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592190[] = +const union AnimCmd gSolarbeamBigOrbAnimCmds7[] = { ANIMCMD_FRAME(6, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592198[] = +const union AnimCmd gSolarbeamSmallOrbAnimCms[] = { ANIMCMD_FRAME(7, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_085921A0[] = +const union AnimCmd gPowerAbsorptionOrbAnimCmds[] = { ANIMCMD_FRAME(8, 1), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_085921A8[] = +const union AnimCmd *const gSolarbeamBigOrbAnimTable[] = { - gUnknown_08592160, - gUnknown_08592168, - gUnknown_08592170, - gUnknown_08592178, - gUnknown_08592180, - gUnknown_08592188, - gUnknown_08592190, + gSolarbeamBigOrbAnimCmds1, + gSolarbeamBigOrbAnimCmds2, + gSolarbeamBigOrbAnimCmds3, + gSolarbeamBigOrbAnimCmds4, + gSolarbeamBigOrbAnimCmds5, + gSolarbeamBigOrbAnimCmds6, + gSolarbeamBigOrbAnimCmds7, }; -const union AnimCmd *const gUnknown_085921C4[] = +const union AnimCmd *const gSolarbeamSmallOrbAnimTable[] = { - gUnknown_08592198, + gSolarbeamSmallOrbAnimCms, }; -const union AnimCmd *const gUnknown_085921C8[] = +const union AnimCmd *const gPowerAbsorptionOrbAnimTable[] = { - gUnknown_085921A0, + gPowerAbsorptionOrbAnimCmds, }; -const union AffineAnimCmd gUnknown_085921CC[] = { +const union AffineAnimCmd gPowerAbsorptionOrbAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(-5, -5, 0, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_085921DC[] = { - gUnknown_085921CC, +const union AffineAnimCmd *const gPowerAbsorptionOrbAffineAnimTable[] = { + gPowerAbsorptionOrbAffineAnimCmds, }; const struct SpriteTemplate gPowerAbsorptionOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, - .oam = &gUnknown_08524A8C, - .anims = gUnknown_085921C8, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, .images = NULL, - .affineAnims = gUnknown_085921DC, + .affineAnims = gPowerAbsorptionOrbAffineAnimTable, .callback = AnimPowerAbsorptionOrb, }; @@ -300,8 +300,8 @@ const struct SpriteTemplate gSolarbeamBigOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, - .oam = &gUnknown_08524904, - .anims = gUnknown_085921A8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarbeamBigOrbAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSolarbeamBigOrb, @@ -311,51 +311,51 @@ const struct SpriteTemplate gSolarbeamSmallOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, - .oam = &gUnknown_08524904, - .anims = gUnknown_085921C4, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarbeamSmallOrbAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSolarbeamSmallOrb, }; -const union AffineAnimCmd gUnknown_08592228[] = { +const union AffineAnimCmd gStockpileAbsorptionOrbAffineCmds[] = { AFFINEANIMCMD_FRAME(320, 320, 0, 0), AFFINEANIMCMD_FRAME(-14, -14, 0, 1), AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd *const gUnknown_08592240[] = { - gUnknown_08592228, +const union AffineAnimCmd *const gStockpileAbsorptionOrbAffineAnimTable[] = { + gStockpileAbsorptionOrbAffineCmds, }; const struct SpriteTemplate gStockpileAbsorptionOrbSpriteTemplate = { .tileTag = ANIM_TAG_GRAY_ORB, .paletteTag = ANIM_TAG_GRAY_ORB, - .oam = &gUnknown_085249C4, + .oam = &gOamData_AffineDouble_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08592240, + .affineAnims = gStockpileAbsorptionOrbAffineAnimTable, .callback = AnimPowerAbsorptionOrb, }; -const union AffineAnimCmd gUnknown_0859225C[] = { +const union AffineAnimCmd gAbsorptionOrbAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(-5, -5, 0, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_0859226C[] = { - gUnknown_0859225C, +const union AffineAnimCmd *const gAbsorptionOrbAffineAnimTable[] = { + gAbsorptionOrbAffineAnimCmds, }; const struct SpriteTemplate gAbsorptionOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, - .oam = &gUnknown_08524A8C, - .anims = gUnknown_085921C8, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, + .anims = gPowerAbsorptionOrbAnimTable, .images = NULL, - .affineAnims = gUnknown_0859226C, + .affineAnims = gAbsorptionOrbAffineAnimTable, .callback = AnimAbsorptionOrb, }; @@ -363,100 +363,100 @@ const struct SpriteTemplate gHyperBeamOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, - .oam = &gUnknown_08524904, - .anims = gUnknown_085921A8, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gSolarbeamBigOrbAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimHyperBeamOrb, }; -const union AnimCmd gUnknown_085922A0[] = +const union AnimCmd gLeechSeedAnimCmds1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_085922A8[] = +const union AnimCmd gLeechSeedAnimCmds2[] = { ANIMCMD_FRAME(4, 7), ANIMCMD_FRAME(8, 7), ANIMCMD_JUMP(0), }; -const union AnimCmd *const gUnknown_085922B4[] = +const union AnimCmd *const gLeechSeedAnimTable[] = { - gUnknown_085922A0, - gUnknown_085922A8, + gLeechSeedAnimCmds1, + gLeechSeedAnimCmds2, }; const struct SpriteTemplate gLeechSeedSpriteTemplate = { .tileTag = ANIM_TAG_SEED, .paletteTag = ANIM_TAG_SEED, - .oam = &gUnknown_0852490C, - .anims = gUnknown_085922B4, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gLeechSeedAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimLeechSeed, }; -const union AnimCmd gUnknown_085922D4[] = +const union AnimCmd gSporeParticleAnimCmds1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_085922DC[] = +const union AnimCmd gSporeParticleAnimCmds2[] = { ANIMCMD_FRAME(4, 7), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_085922E4[] = +const union AnimCmd *const gSporeParticleAnimTable[] = { - gUnknown_085922D4, - gUnknown_085922DC, + gSporeParticleAnimCmds1, + gSporeParticleAnimCmds2, }; const struct SpriteTemplate gSporeParticleSpriteTemplate = { .tileTag = ANIM_TAG_SPORE, .paletteTag = ANIM_TAG_SPORE, - .oam = &gUnknown_0852490C, - .anims = gUnknown_085922E4, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSporeParticleAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSporeParticle, }; -const union AnimCmd gUnknown_08592304[] = +const union AnimCmd gPetalDanceBigFlowerAnimCmds[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_0859230C[] = +const union AnimCmd gPetalDanceSmallFlowerAnimCmds[] = { ANIMCMD_FRAME(4, 1), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592314[] = +const union AnimCmd *const gPetalDanceBigFlowerAnimTable[] = { - gUnknown_08592304, + gPetalDanceBigFlowerAnimCmds, }; -const union AnimCmd *const gUnknown_08592318[] = +const union AnimCmd *const gPetalDanceSmallFlowerAnimTable[] = { - gUnknown_0859230C, + gPetalDanceSmallFlowerAnimCmds, }; const struct SpriteTemplate gPetalDanceBigFlowerSpriteTemplate = { .tileTag = ANIM_TAG_FLOWER, .paletteTag = ANIM_TAG_FLOWER, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08592314, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimPetalDanceBigFlower, @@ -466,14 +466,14 @@ const struct SpriteTemplate gPetalDanceSmallFlowerSpriteTemplate = { .tileTag = ANIM_TAG_FLOWER, .paletteTag = ANIM_TAG_FLOWER, - .oam = &gUnknown_08524904, - .anims = gUnknown_08592318, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gPetalDanceSmallFlowerAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimPetalDanceSmallFlower, }; -const union AnimCmd gUnknown_0859234C[] = +const union AnimCmd gRazorLeafParticleAnimCmds1[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(4, 5), @@ -488,7 +488,7 @@ const union AnimCmd gUnknown_0859234C[] = ANIMCMD_JUMP(0), }; -const union AnimCmd gUnknown_08592378[] = +const union AnimCmd gRazorLeafParticleAnimCmds2[] = { ANIMCMD_FRAME(24, 5), ANIMCMD_FRAME(28, 5), @@ -496,18 +496,18 @@ const union AnimCmd gUnknown_08592378[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592388[] = +const union AnimCmd *const gRazorLeafParticleAnimTable[] = { - gUnknown_0859234C, - gUnknown_08592378, + gRazorLeafParticleAnimCmds1, + gRazorLeafParticleAnimCmds2, }; const struct SpriteTemplate gRazorLeafParticleSpriteTemplate = { .tileTag = ANIM_TAG_LEAF, .paletteTag = ANIM_TAG_LEAF, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08592388, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimRazorLeafParticle, @@ -517,14 +517,14 @@ const struct SpriteTemplate gTwisterLeafParticleSpriteTemplate = { .tileTag = ANIM_TAG_LEAF, .paletteTag = ANIM_TAG_LEAF, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08592388, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gRazorLeafParticleAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimMoveTwisterParticle, }; -const union AnimCmd gUnknown_085923C0[] = +const union AnimCmd gRazorLeafCutterAnimCmds[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(0, 3, .hFlip = TRUE), @@ -533,43 +533,43 @@ const union AnimCmd gUnknown_085923C0[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gUnknown_085923D4[] = +const union AnimCmd *const gRazorLeafCutterAnimTable[] = { - gUnknown_085923C0, + gRazorLeafCutterAnimCmds, }; const struct SpriteTemplate gRazorLeafCutterSpriteTemplate = { .tileTag = ANIM_TAG_RAZOR_LEAF, .paletteTag = ANIM_TAG_RAZOR_LEAF, - .oam = &gUnknown_08524934, - .anims = gUnknown_085923D4, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gRazorLeafCutterAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimTranslateLinearSingleSineWave, }; -const union AffineAnimCmd gUnknown_085923F0[] = { +const union AffineAnimCmd gSwiftStarAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0, 0, 0, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_08592400[] = { - gUnknown_085923F0, +const union AffineAnimCmd *const gSwiftStarAffineAnimTable[] = { + gSwiftStarAffineAnimCmds, }; const struct SpriteTemplate gSwiftStarSpriteTemplate = { .tileTag = ANIM_TAG_YELLOW_STAR, .paletteTag = ANIM_TAG_YELLOW_STAR, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08592400, + .affineAnims = gSwiftStarAffineAnimTable, .callback = AnimTranslateLinearSingleSineWave, }; -const union AnimCmd gUnknown_0859241C[] = +const union AnimCmd gConstrictBindingAnimCmds1[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(32, 4), @@ -578,7 +578,7 @@ const union AnimCmd gUnknown_0859241C[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_08592430[] = +const union AnimCmd gConstrictBindingAnimCmds2[] = { ANIMCMD_FRAME(0, 4, .hFlip = TRUE), ANIMCMD_FRAME(32, 4, .hFlip = TRUE), @@ -587,70 +587,70 @@ const union AnimCmd gUnknown_08592430[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592444[] = +const union AnimCmd *const gConstrictBindingAnimTable[] = { - gUnknown_0859241C, - gUnknown_08592430, + gConstrictBindingAnimCmds1, + gConstrictBindingAnimCmds2, }; -const union AffineAnimCmd gUnknown_0859244C[] = { +const union AffineAnimCmd gConstrictBindingAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(-11, 0, 0, 6), AFFINEANIMCMD_FRAME(11, 0, 0, 6), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_0859246C[] = { +const union AffineAnimCmd gConstrictBindingAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), AFFINEANIMCMD_FRAME(11, 0, 0, 6), AFFINEANIMCMD_FRAME(-11, 0, 0, 6), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_0859248C[] = { - gUnknown_0859244C, - gUnknown_0859246C, +const union AffineAnimCmd *const gConstrictBindingAffineAnimTable[] = { + gConstrictBindingAffineAnimCmds1, + gConstrictBindingAffineAnimCmds2, }; const struct SpriteTemplate gConstrictBindingSpriteTemplate = { .tileTag = ANIM_TAG_TENDRILS, .paletteTag = ANIM_TAG_TENDRILS, - .oam = &gUnknown_0852499C, - .anims = gUnknown_08592444, + .oam = &gOamData_AffineNormal_ObjNormal_64x32, + .anims = gConstrictBindingAnimTable, .images = NULL, - .affineAnims = gUnknown_0859248C, + .affineAnims = gConstrictBindingAffineAnimTable, .callback = AnimConstrictBinding, }; -const union AffineAnimCmd gUnknown_085924AC[] = { +const union AffineAnimCmd gMimicOrbAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0, 0, 0, 0), AFFINEANIMCMD_FRAME(48, 48, 0, 14), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_085924C4[] = { +const union AffineAnimCmd gMimicOrbAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(-16, -16, 0, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_085924D4[] = { - gUnknown_085924AC, - gUnknown_085924C4, +const union AffineAnimCmd *const gMimicOrbAffineAnimTable[] = { + gMimicOrbAffineAnimCmds1, + gMimicOrbAffineAnimCmds2, }; const struct SpriteTemplate gMimicOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, - .oam = &gUnknown_085249CC, - .anims = gUnknown_085921C8, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gPowerAbsorptionOrbAnimTable, .images = NULL, - .affineAnims = gUnknown_085924D4, + .affineAnims = gMimicOrbAffineAnimTable, .callback = AnimMimicOrb, }; -const union AnimCmd gUnknown_085924F4[] = +const union AnimCmd gIngrainRootAnimCmds1[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(16, 7), @@ -659,7 +659,7 @@ const union AnimCmd gUnknown_085924F4[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_08592508[] = +const union AnimCmd gIngrainRootAnimCmds2[] = { ANIMCMD_FRAME(0, 7, .hFlip = TRUE), ANIMCMD_FRAME(16, 7, .hFlip = TRUE), @@ -668,7 +668,7 @@ const union AnimCmd gUnknown_08592508[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_0859251C[] = +const union AnimCmd gIngrainRootAnimCmds3[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(16, 7), @@ -676,7 +676,7 @@ const union AnimCmd gUnknown_0859251C[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_0859252C[] = +const union AnimCmd gIngrainRootAnimCmds4[] = { ANIMCMD_FRAME(0, 7, .hFlip = TRUE), ANIMCMD_FRAME(16, 7, .hFlip = TRUE), @@ -684,20 +684,20 @@ const union AnimCmd gUnknown_0859252C[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_0859253C[] = +const union AnimCmd *const gIngrainRootAnimTable[] = { - gUnknown_085924F4, - gUnknown_08592508, - gUnknown_0859251C, - gUnknown_0859252C, + gIngrainRootAnimCmds1, + gIngrainRootAnimCmds2, + gIngrainRootAnimCmds3, + gIngrainRootAnimCmds4, }; const struct SpriteTemplate gIngrainRootSpriteTemplate = { .tileTag = ANIM_TAG_ROOTS, .paletteTag = ANIM_TAG_ROOTS, - .oam = &gUnknown_08524914, - .anims = gUnknown_0859253C, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gIngrainRootAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimIngrainRoot, @@ -707,55 +707,55 @@ const struct SpriteTemplate gFrenzyPlantRootSpriteTemplate = { .tileTag = ANIM_TAG_ROOTS, .paletteTag = ANIM_TAG_ROOTS, - .oam = &gUnknown_08524914, - .anims = gUnknown_0859253C, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gIngrainRootAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimFrenzyPlantRoot, }; -const union AnimCmd gUnknown_0859257C[] = +const union AnimCmd gIngrainOrbAnimCmds[] = { ANIMCMD_FRAME(3, 3), ANIMCMD_FRAME(0, 5), ANIMCMD_JUMP(0), }; -const union AnimCmd *const gUnknown_08592588[] = +const union AnimCmd *const gIngrainOrbAnimTable[] = { - gUnknown_0859257C, + gIngrainOrbAnimCmds, }; const struct SpriteTemplate gIngrainOrbSpriteTemplate = { .tileTag = ANIM_TAG_ORBS, .paletteTag = ANIM_TAG_ORBS, - .oam = &gUnknown_08524904, - .anims = gUnknown_08592588, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gIngrainOrbAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimIngrainOrb, }; -const union AnimCmd gUnknown_085925A4[] = +const union AnimCmd gFallingBagAnimCmds[] = { ANIMCMD_FRAME(0, 30), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_085925AC[] = +const union AnimCmd *const gFallingBagAnimTable[] = { - gUnknown_085925A4, + gFallingBagAnimCmds, }; -const union AffineAnimCmd gUnknown_085925B0[] = { +const union AffineAnimCmd gFallingBagAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0, 0, -4, 10), AFFINEANIMCMD_FRAME(0, 0, 4, 20), AFFINEANIMCMD_FRAME(0, 0, -4, 10), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_085925D0[] = { +const union AffineAnimCmd gFallingBagAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0, 0, -1, 2), AFFINEANIMCMD_FRAME(0, 0, 1, 4), AFFINEANIMCMD_FRAME(0, 0, -1, 4), @@ -765,19 +765,19 @@ const union AffineAnimCmd gUnknown_085925D0[] = { AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_08592608[] = { - gUnknown_085925B0, - gUnknown_085925D0, +const union AffineAnimCmd *const gFallingBagAffineAnimTable[] = { + gFallingBagAffineAnimCmds1, + gFallingBagAffineAnimCmds2, }; const struct SpriteTemplate gPresentSpriteTemplate = { .tileTag = ANIM_TAG_ITEM_BAG, .paletteTag = ANIM_TAG_ITEM_BAG, - .oam = &gUnknown_08524974, - .anims = gUnknown_085925AC, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gFallingBagAnimTable, .images = NULL, - .affineAnims = gUnknown_08592608, + .affineAnims = gFallingBagAffineAnimTable, .callback = AnimPresent, }; @@ -785,14 +785,14 @@ const struct SpriteTemplate gKnockOffItemSpriteTemplate = { .tileTag = ANIM_TAG_ITEM_BAG, .paletteTag = ANIM_TAG_ITEM_BAG, - .oam = &gUnknown_08524974, - .anims = gUnknown_085925AC, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gFallingBagAnimTable, .images = NULL, - .affineAnims = gUnknown_08592608, + .affineAnims = gFallingBagAffineAnimTable, .callback = AnimKnockOffItem, }; -const union AnimCmd gUnknown_08592640[] = +const union AnimCmd gPresentHealParticleAnimCmds[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(4, 4), @@ -801,17 +801,17 @@ const union AnimCmd gUnknown_08592640[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592654[] = +const union AnimCmd *const gPresentHealParticleAnimTable[] = { - gUnknown_08592640, + gPresentHealParticleAnimCmds, }; const struct SpriteTemplate gPresentHealParticleSpriteTemplate = { .tileTag = ANIM_TAG_GREEN_SPARKLE, .paletteTag = ANIM_TAG_GREEN_SPARKLE, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08592654, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gPresentHealParticleAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimPresentHealParticle, @@ -821,19 +821,19 @@ const struct SpriteTemplate gItemStealSpriteTemplate = { .tileTag = ANIM_TAG_ITEM_BAG, .paletteTag = ANIM_TAG_ITEM_BAG, - .oam = &gUnknown_08524974, - .anims = gUnknown_085925AC, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gFallingBagAnimTable, .images = NULL, - .affineAnims = gUnknown_08592608, + .affineAnims = gFallingBagAffineAnimTable, .callback = AnimItemSteal, }; -const union AffineAnimCmd gUnknown_08592688[] = { +const union AffineAnimCmd gTrickBagAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0, 0, 0, 3), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08592698[] = { +const union AffineAnimCmd gTrickBagAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0, -10, 0, 3), AFFINEANIMCMD_FRAME(0, -6, 0, 3), AFFINEANIMCMD_FRAME(0, -2, 0, 3), @@ -844,25 +844,25 @@ const union AffineAnimCmd gUnknown_08592698[] = { AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_085926D8[] = { - gUnknown_08592688, - gUnknown_08592698, - gUnknown_085925B0, - gUnknown_085925D0, +const union AffineAnimCmd *const gTrickBagAffineAnimTable[] = { + gTrickBagAffineAnimCmds1, + gTrickBagAffineAnimCmds2, + gFallingBagAffineAnimCmds1, + gFallingBagAffineAnimCmds2, }; const struct SpriteTemplate gTrickBagSpriteTemplate = { .tileTag = ANIM_TAG_ITEM_BAG, .paletteTag = ANIM_TAG_ITEM_BAG, - .oam = &gUnknown_08524974, - .anims = gUnknown_085925AC, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gFallingBagAnimTable, .images = NULL, - .affineAnims = gUnknown_085926D8, + .affineAnims = gTrickBagAffineAnimTable, .callback = AnimTrickBag, }; -const s8 gUnknown_08592700[][3] = +const s8 gTrickBagCoordinates[][3] = { {5, 24, 1}, {0, 4, 0}, @@ -877,163 +877,163 @@ const s8 gUnknown_08592700[][3] = {0, 0, 127}, }; -const union AnimCmd gUnknown_08592724[] = +const union AnimCmd gLeafBladeAnimCmds1[] = { ANIMCMD_FRAME(28, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_0859272C[] = +const union AnimCmd gLeafBladeAnimCmds2[] = { ANIMCMD_FRAME(32, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592734[] = +const union AnimCmd gLeafBladeAnimCmds3[] = { ANIMCMD_FRAME(20, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_0859273C[] = +const union AnimCmd gLeafBladeAnimCmds4[] = { ANIMCMD_FRAME(28, 1, .hFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592744[] = +const union AnimCmd gLeafBladeAnimCmds5[] = { ANIMCMD_FRAME(16, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_0859274C[] = +const union AnimCmd gLeafBladeAnimCmds6[] = { ANIMCMD_FRAME(16, 1, .hFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592754[] = +const union AnimCmd gLeafBladeAnimCmds7[] = { ANIMCMD_FRAME(28, 1), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_0859275C[] = +const union AnimCmd *const gLeafBladeAnimTable[] = { - gUnknown_08592724, - gUnknown_0859272C, - gUnknown_08592734, - gUnknown_0859273C, - gUnknown_08592744, - gUnknown_0859274C, - gUnknown_08592754, + gLeafBladeAnimCmds1, + gLeafBladeAnimCmds2, + gLeafBladeAnimCmds3, + gLeafBladeAnimCmds4, + gLeafBladeAnimCmds5, + gLeafBladeAnimCmds6, + gLeafBladeAnimCmds7, }; -const struct SpriteTemplate gUnknown_08592778 = +const struct SpriteTemplate gLeafBladeSpriteTemplate = { .tileTag = ANIM_TAG_LEAF, .paletteTag = ANIM_TAG_LEAF, - .oam = &gUnknown_0852490C, - .anims = gUnknown_0859275C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gLeafBladeAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -const union AffineAnimCmd gUnknown_08592790[] = { +const union AffineAnimCmd gAromatherapyBigFlowerAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(256, 256, 0, 0), AFFINEANIMCMD_FRAME(0, 0, 4, 1), AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd *const gUnknown_085927A8[] = { - gUnknown_08592790, +const union AffineAnimCmd *const gAromatherapyBigFlowerAffineAnimTable[] = { + gAromatherapyBigFlowerAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_085927AC = +const struct SpriteTemplate gAromatherapySmallFlowerSpriteTemplate = { .tileTag = ANIM_TAG_FLOWER, .paletteTag = ANIM_TAG_FLOWER, - .oam = &gUnknown_08524904, - .anims = gUnknown_08592318, + .oam = &gOamData_AffineOff_ObjNormal_8x8, + .anims = gPetalDanceSmallFlowerAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8100640, + .callback = AnimFlyingParticle, }; -const struct SpriteTemplate gUnknown_085927C4 = +const struct SpriteTemplate gAromatherapyBigFlowerSpriteTemplate = { .tileTag = ANIM_TAG_FLOWER, .paletteTag = ANIM_TAG_FLOWER, - .oam = &gUnknown_0852496C, - .anims = gUnknown_08592314, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gPetalDanceBigFlowerAnimTable, .images = NULL, - .affineAnims = gUnknown_085927A8, - .callback = sub_8100640, + .affineAnims = gAromatherapyBigFlowerAffineAnimTable, + .callback = AnimFlyingParticle, }; -const union AffineAnimCmd gUnknown_085927DC[] = { +const union AffineAnimCmd gSilverWindBigSparkAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(256, 256, 0, 0), AFFINEANIMCMD_FRAME(0, 0, -10, 1), AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd gUnknown_085927F4[] = { +const union AffineAnimCmd gSilverWindMediumSparkAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(192, 192, 0, 0), AFFINEANIMCMD_FRAME(0, 0, -12, 1), AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd gUnknown_0859280C[] = { +const union AffineAnimCmd gSilverWindSmallSparkAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(143, 143, 0, 0), AFFINEANIMCMD_FRAME(0, 0, -15, 1), AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd *const gUnknown_08592824[] = { - gUnknown_085927DC, +const union AffineAnimCmd *const gSilverWindBigSparkAffineAnimTable[] = { + gSilverWindBigSparkAffineAnimCmds, }; -const union AffineAnimCmd *const gUnknown_08592828[] = { - gUnknown_085927F4, +const union AffineAnimCmd *const gSilverWindMediumSparkAffineAnimTable[] = { + gSilverWindMediumSparkAffineAnimCmds, }; -const union AffineAnimCmd *const gUnknown_0859282C[] = { - gUnknown_0859280C, +const union AffineAnimCmd *const gSilverWindSmallSparkAffineAnimTable[] = { + gSilverWindSmallSparkAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_08592830 = +const struct SpriteTemplate gSilverWindBigSparkSpriteTemplate = { .tileTag = ANIM_TAG_SPARKLE_6, .paletteTag = ANIM_TAG_SPARKLE_6, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08592824, - .callback = sub_8100640, + .affineAnims = gSilverWindBigSparkAffineAnimTable, + .callback = AnimFlyingParticle, }; -const struct SpriteTemplate gUnknown_08592848 = +const struct SpriteTemplate gSilverWindMediumSparkSpriteTemplate = { .tileTag = ANIM_TAG_SPARKLE_6, .paletteTag = ANIM_TAG_SPARKLE_6, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08592828, - .callback = sub_8100640, + .affineAnims = gSilverWindMediumSparkAffineAnimTable, + .callback = AnimFlyingParticle, }; -const struct SpriteTemplate gUnknown_08592860 = +const struct SpriteTemplate gSilverWindSmallSparkSpriteTemplate = { .tileTag = ANIM_TAG_SPARKLE_6, .paletteTag = ANIM_TAG_SPARKLE_6, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_0859282C, - .callback = sub_8100640, + .affineAnims = gSilverWindSmallSparkAffineAnimTable, + .callback = AnimFlyingParticle, }; const u16 gMagicalLeafBlendColors[] = @@ -1047,18 +1047,18 @@ const u16 gMagicalLeafBlendColors[] = RGB(22, 21, 31), }; -const struct SpriteTemplate gUnknown_08592888 = +const struct SpriteTemplate gNeedleArmSpikeSpriteTemplate = { .tileTag = ANIM_TAG_GREEN_SPIKE, .paletteTag = ANIM_TAG_GREEN_SPIKE, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8100898, + .callback = AnimNeedleArmSpike, }; -const union AnimCmd gUnknown_085928A0[] = +const union AnimCmd gWhipAnimCmds1[] = { ANIMCMD_FRAME(64, 3), ANIMCMD_FRAME(80, 3), @@ -1067,7 +1067,7 @@ const union AnimCmd gUnknown_085928A0[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_085928B4[] = +const union AnimCmd gWhipAnimCmds2[] = { ANIMCMD_FRAME(64, 3, .hFlip = TRUE), ANIMCMD_FRAME(80, 3, .hFlip = TRUE), @@ -1076,32 +1076,32 @@ const union AnimCmd gUnknown_085928B4[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_085928C8[] = +const union AnimCmd *const gWhipAnimTable[] = { - gUnknown_085928A0, - gUnknown_085928B4, + gWhipAnimCmds1, + gWhipAnimCmds2, }; -const struct SpriteTemplate gUnknown_085928D0 = +const struct SpriteTemplate gSlamHitSpriteTemplate = { .tileTag = ANIM_TAG_SLAM_HIT, .paletteTag = ANIM_TAG_SLAM_HIT, - .oam = &gUnknown_08524914, - .anims = gUnknown_085928C8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gWhipAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8100A50, + .callback = AnimWhipHit, }; const struct SpriteTemplate gVineWhipSpriteTemplate = { .tileTag = ANIM_TAG_WHIP_HIT, .paletteTag = ANIM_TAG_WHIP_HIT, - .oam = &gUnknown_08524914, - .anims = gUnknown_085928C8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gWhipAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8100A50, + .callback = AnimWhipHit, }; const union AnimCmd gUnknown_08592900[] = @@ -1119,22 +1119,24 @@ const union AnimCmd *const gUnknown_08592918[] = gUnknown_08592900, }; +// Unused const struct SpriteTemplate gUnknown_0859291C = { .tileTag = ANIM_TAG_HIT, .paletteTag = ANIM_TAG_HIT, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08592918, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = sub_81009F8, }; +// Unused const struct SpriteTemplate gUnknown_08592934 = { .tileTag = ANIM_TAG_HIT_2, .paletteTag = ANIM_TAG_HIT_2, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08592918, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1192,18 +1194,19 @@ const union AffineAnimCmd *const gUnknown_085929CC[] = { gUnknown_085929BC, }; +// Unused const struct SpriteTemplate gUnknown_085929EC = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_085929CC, .callback = sub_8100A94, }; -const union AnimCmd gUnknown_08592A04[] = +const union AnimCmd gCuttingSliceAnimCmds[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(16, 5), @@ -1212,31 +1215,31 @@ const union AnimCmd gUnknown_08592A04[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592A18[] = +const union AnimCmd *const gCuttingSliceAnimTable[] = { - gUnknown_08592A04, + gCuttingSliceAnimCmds, }; const struct SpriteTemplate gCuttingSliceSpriteTemplate = { .tileTag = ANIM_TAG_CUT, .paletteTag = ANIM_TAG_CUT, - .oam = &gUnknown_08524A34, - .anims = gUnknown_08592A18, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimCuttingSlice, }; -const struct SpriteTemplate gUnknown_08592A34 = +const struct SpriteTemplate gAirCutterSliceSpriteTemplate = { .tileTag = ANIM_TAG_CUT, .paletteTag = ANIM_TAG_CUT, - .oam = &gUnknown_08524A34, - .anims = gUnknown_08592A18, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gCuttingSliceAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8100B88, + .callback = AnimAirCutterSlice, }; const union AnimCmd gUnknown_08592A4C[] = @@ -1313,11 +1316,12 @@ const union AnimCmd *const gUnknown_08592A9C[] = gUnknown_08592A94, }; +// Unused const struct SpriteTemplate gUnknown_08592AC4 = { .tileTag = ANIM_TAG_MUSIC_NOTES, .paletteTag = ANIM_TAG_MUSIC_NOTES, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_08592A9C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1328,20 +1332,20 @@ const struct SpriteTemplate gUnknown_08592ADC = { .tileTag = ANIM_TAG_PROTECT, .paletteTag = ANIM_TAG_PROTECT, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8100EF0, + .callback = AnimProtect, }; -const union AffineAnimCmd gUnknown_08592AF4[] = +const union AffineAnimCmd gMilkBottleAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08592B04[] = +const union AffineAnimCmd gMilkBottleAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12), AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6), @@ -1351,24 +1355,24 @@ const union AffineAnimCmd gUnknown_08592B04[] = AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_08592B34[] = +const union AffineAnimCmd *const gMilkBottleAffineAnimTable[] = { - gUnknown_08592AF4, - gUnknown_08592B04, + gMilkBottleAffineAnimCmds1, + gMilkBottleAffineAnimCmds2, }; -const struct SpriteTemplate gUnknown_08592B3C = +const struct SpriteTemplate gMilkBottleSpriteTemplate = { .tileTag = ANIM_TAG_MILK_BOTTLE, .paletteTag = ANIM_TAG_MILK_BOTTLE, - .oam = &gUnknown_08524A94, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08592B34, - .callback = sub_81010CC, + .affineAnims = gMilkBottleAffineAnimTable, + .callback = AnimMilkBottle, }; -const union AnimCmd gUnknown_08592B54[] = +const union AnimCmd gGrantingStarsAnimCmds[] = { ANIMCMD_FRAME(0, 7), ANIMCMD_FRAME(16, 7), @@ -1381,31 +1385,31 @@ const union AnimCmd gUnknown_08592B54[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gUnknown_08592B78[] = +const union AnimCmd *const gGrantingStarsAnimTable[] = { - gUnknown_08592B54, + gGrantingStarsAnimCmds, }; -const struct SpriteTemplate gUnknown_08592B7C = +const struct SpriteTemplate gGrantingStarsSpriteTemplate = { .tileTag = ANIM_TAG_SPARKLE_2, .paletteTag = ANIM_TAG_SPARKLE_2, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592B78, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810130C, + .callback = AnimGrantingStars, }; -const struct SpriteTemplate gUnknown_08592B94 = +const struct SpriteTemplate gSparklingStarsSpriteTemplate = { .tileTag = ANIM_TAG_SPARKLE_2, .paletteTag = ANIM_TAG_SPARKLE_2, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592B78, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gGrantingStarsAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810135C, + .callback = AnimSparkingStars, }; const union AnimCmd gUnknown_08592BAC[] = @@ -1440,96 +1444,97 @@ const union AnimCmd *const gUnknown_08592BF4[] = gUnknown_08592BD0, }; +// Unused const struct SpriteTemplate gUnknown_08592BFC = { .tileTag = ANIM_TAG_BUBBLE_BURST, .paletteTag = ANIM_TAG_BUBBLE_BURST, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_08592BF4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = sub_8101440, }; -const union AnimCmd gUnknown_08592C14[] = +const union AnimCmd gSleepLetterZAnimCmds[] = { ANIMCMD_FRAME(0, 40), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592C1C[] = +const union AnimCmd *const gSleepLetterZAnimTable[] = { - gUnknown_08592C14, + gSleepLetterZAnimCmds, }; -const union AffineAnimCmd gUnknown_08592C20[] = +const union AffineAnimCmd gSleepLetterZAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0), AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08592C20_2[] = +const union AffineAnimCmd gSleepLetterZAffineAnimCmds1_2[] = { AFFINEANIMCMD_LOOP(0), AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24), AFFINEANIMCMD_LOOP(10), }; -const union AffineAnimCmd gUnknown_08592C50[] = +const union AffineAnimCmd gSleepLetterZAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0), AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08592C50_2[] = +const union AffineAnimCmd gSleepLetterZAffineAnimCmds2_2[] = { AFFINEANIMCMD_LOOP(0), AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24), AFFINEANIMCMD_LOOP(10), }; -const union AffineAnimCmd *const gUnknown_08592C80[] = +const union AffineAnimCmd *const gSleepLetterZAffineAnimTable[] = { - gUnknown_08592C20, - gUnknown_08592C50, + gSleepLetterZAffineAnimCmds1, + gSleepLetterZAffineAnimCmds2, }; -const struct SpriteTemplate gUnknown_08592C88 = +const struct SpriteTemplate gSleepLetterZSpriteTemplate = { .tileTag = ANIM_TAG_LETTER_Z, .paletteTag = ANIM_TAG_LETTER_Z, - .oam = &gUnknown_08524974, - .anims = gUnknown_08592C1C, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, + .anims = gSleepLetterZAnimTable, .images = NULL, - .affineAnims = gUnknown_08592C80, - .callback = sub_81014F4, + .affineAnims = gSleepLetterZAffineAnimTable, + .callback = AnimSleepLetterZ, }; -const struct SpriteTemplate gUnknown_08592CA0 = +const struct SpriteTemplate gLockOnTargetSpriteTemplate = { .tileTag = ANIM_TAG_LOCK_ON, .paletteTag = ANIM_TAG_LOCK_ON, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81015AC, + .callback = AnimLockOnTarget, }; -const struct SpriteTemplate gUnknown_08592CB8 = +const struct SpriteTemplate gLockOnMoveTargetSpriteTemplate = { .tileTag = ANIM_TAG_LOCK_ON, .paletteTag = ANIM_TAG_LOCK_ON, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101898, + .callback = AnimLockOnMoveTarget, }; -const s8 gUnknown_08592CD0[][2] = +const s8 gInclineMonCoordTable[][2] = { { 64, 64}, { 0, -64}, @@ -1537,7 +1542,7 @@ const s8 gUnknown_08592CD0[][2] = { 32, -32}, }; -const struct SpriteTemplate gUnknown_08592CD8 = +const struct SpriteTemplate gBowMonSpriteTemplate = { .tileTag = 0, .paletteTag = 0, @@ -1545,9 +1550,10 @@ const struct SpriteTemplate gUnknown_08592CD8 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101940, + .callback = AnimBowMon, }; +// Unused const struct SpriteTemplate gUnknown_08592CF0 = { .tileTag = 0, @@ -1559,7 +1565,7 @@ const struct SpriteTemplate gUnknown_08592CF0 = .callback = sub_8101B90, }; -const union AnimCmd gUnknown_08592D08[] = +const union AnimCmd gSlashSliceAnimCmds1[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(16, 4), @@ -1568,52 +1574,52 @@ const union AnimCmd gUnknown_08592D08[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_08592D1C[] = +const union AnimCmd gSlashSliceAnimCmds2[] = { ANIMCMD_FRAME(48, 4), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592D24[] = +const union AnimCmd *const gSlashSliceAnimTable[] = { - gUnknown_08592D08, - gUnknown_08592D1C, + gSlashSliceAnimCmds1, + gSlashSliceAnimCmds2, }; -const struct SpriteTemplate gUnknown_08592D2C = +const struct SpriteTemplate gSlashSliceSpriteTemplate = { .tileTag = ANIM_TAG_SLASH, .paletteTag = ANIM_TAG_SLASH, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592D24, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSlashSliceAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101F40, + .callback = AnimSlashSlice, }; -const struct SpriteTemplate gUnknown_08592D44 = +const struct SpriteTemplate gFalseSwipeSliceSpriteTemplate = { .tileTag = ANIM_TAG_SLASH_2, .paletteTag = ANIM_TAG_SLASH_2, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592D24, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSlashSliceAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101FA8, + .callback = AnimFalseSwipeSlice, }; -const struct SpriteTemplate gUnknown_08592D5C = +const struct SpriteTemplate gFalseSwipePositionedSliceSpriteTemplate = { .tileTag = ANIM_TAG_SLASH_2, .paletteTag = ANIM_TAG_SLASH_2, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592D24, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSlashSliceAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8101FF0, + .callback = AnimFalseSwipePositionedSlice, }; -const union AnimCmd gUnknown_08592D74[] = +const union AnimCmd gEndureEnergyAnimCmds[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(8, 12), @@ -1622,23 +1628,23 @@ const union AnimCmd gUnknown_08592D74[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592D88[] = +const union AnimCmd *const gEndureEnergyAnimTable[] = { - gUnknown_08592D74, + gEndureEnergyAnimCmds, }; -const struct SpriteTemplate gUnknown_08592D8C = +const struct SpriteTemplate gEndureEnergySpriteTemplate = { .tileTag = ANIM_TAG_FOCUS_ENERGY, .paletteTag = ANIM_TAG_FOCUS_ENERGY, - .oam = &gUnknown_08524954, - .anims = gUnknown_08592D88, + .oam = &gOamData_AffineOff_ObjNormal_16x32, + .anims = gEndureEnergyAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81020D8, + .callback = AnimEndureEnergy, }; -const union AnimCmd gUnknown_08592DA4[] = +const union AnimCmd gSharpenSphereAnimCmds[] = { ANIMCMD_FRAME(0, 18), ANIMCMD_FRAME(0, 6), @@ -1657,34 +1663,34 @@ const union AnimCmd gUnknown_08592DA4[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592DE0[] = +const union AnimCmd *const gSharpenSphereAnimTable[] = { - gUnknown_08592DA4, + gSharpenSphereAnimCmds, }; -const struct SpriteTemplate gUnknown_08592DE4 = +const struct SpriteTemplate gSharpenSphereSpriteTemplate = { .tileTag = ANIM_TAG_SPHERE_TO_CUBE, .paletteTag = ANIM_TAG_SPHERE_TO_CUBE, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592DE0, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSharpenSphereAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810217C, + .callback = AnimSharpenSphere, }; -const struct SpriteTemplate gUnknown_08592DFC = +const struct SpriteTemplate gOctazookaBallSpriteTemplate = { .tileTag = ANIM_TAG_BLACK_BALL, .paletteTag = ANIM_TAG_BLACK_BALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = TranslateAnimSpriteToTargetMonLocation, }; -const union AnimCmd gUnknown_08592E14[] = +const union AnimCmd gOctazookaAnimCmds[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(16, 3), @@ -1694,23 +1700,23 @@ const union AnimCmd gUnknown_08592E14[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592E2C[] = +const union AnimCmd *const gOctazookaAnimTable[] = { - gUnknown_08592E14, + gOctazookaAnimCmds, }; -const struct SpriteTemplate gUnknown_08592E30 = +const struct SpriteTemplate gOctazookaSmokeSpriteTemplate = { .tileTag = ANIM_TAG_GRAY_SMOKE, .paletteTag = ANIM_TAG_GRAY_SMOKE, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592E2C, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gOctazookaAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; -const union AnimCmd gUnknown_08592E48[] = +const union AnimCmd gConversionAnimCmds[] = { ANIMCMD_FRAME(3, 5), ANIMCMD_FRAME(2, 5), @@ -1719,34 +1725,34 @@ const union AnimCmd gUnknown_08592E48[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592E5C[] = +const union AnimCmd *const gConversionAnimTable[] = { - gUnknown_08592E48, + gConversionAnimCmds, }; -const union AffineAnimCmd gUnknown_08592E60[] = +const union AffineAnimCmd gConversionAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_08592E70[] = +const union AffineAnimCmd *const gConversionAffineAnimTable[] = { - gUnknown_08592E60, + gConversionAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_08592E74 = +const struct SpriteTemplate gConversionSpriteTemplate = { .tileTag = ANIM_TAG_CONVERSION, .paletteTag = ANIM_TAG_CONVERSION, - .oam = &gUnknown_08524AE4, - .anims = gUnknown_08592E5C, + .oam = &gOamData_AffineDouble_ObjBlend_8x8, + .anims = gConversionAnimTable, .images = NULL, - .affineAnims = gUnknown_08592E70, - .callback = sub_8102268, + .affineAnims = gConversionAffineAnimTable, + .callback = AnimConversion, }; -const union AnimCmd gUnknown_08592E8C[] = +const union AnimCmd gConversion2AnimCmds[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(1, 5), @@ -1755,34 +1761,34 @@ const union AnimCmd gUnknown_08592E8C[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592EA0[] = +const union AnimCmd *const gConversion2AnimTable[] = { - gUnknown_08592E8C, + gConversion2AnimCmds, }; -const struct SpriteTemplate gUnknown_08592EA4 = +const struct SpriteTemplate gConversion2SpriteTemplate = { .tileTag = ANIM_TAG_CONVERSION, .paletteTag = ANIM_TAG_CONVERSION, - .oam = &gUnknown_08524AE4, - .anims = gUnknown_08592EA0, + .oam = &gOamData_AffineDouble_ObjBlend_8x8, + .anims = gConversion2AnimTable, .images = NULL, - .affineAnims = gUnknown_08592E70, - .callback = sub_810234C, + .affineAnims = gConversionAffineAnimTable, + .callback = AnimConversion2, }; -const struct SpriteTemplate gUnknown_08592EBC = +const struct SpriteTemplate gMoonSpriteTemplate = { .tileTag = ANIM_TAG_MOON, .paletteTag = ANIM_TAG_MOON, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81024E0, + .callback = AnimMoon, }; -const union AnimCmd gUnknown_08592ED4[] = +const union AnimCmd gMoonlightSparkleAnimCmds[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(4, 8), @@ -1791,23 +1797,23 @@ const union AnimCmd gUnknown_08592ED4[] = ANIMCMD_JUMP(0), }; -const union AnimCmd *const gUnknown_08592EE8[] = +const union AnimCmd *const gMoonlightSparkleAnimTable[] = { - gUnknown_08592ED4, + gMoonlightSparkleAnimCmds, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_8592EEC = +const struct SpriteTemplate gMoonlightSparkleSpriteTemplate = { .tileTag = ANIM_TAG_GREEN_SPARKLE, .paletteTag = ANIM_TAG_GREEN_SPARKLE, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08592EE8, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gMoonlightSparkleAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8102540, + .callback = AnimMoonlightSparkle, }; -const union AnimCmd gUnknown_08592F04[] = +const union AnimCmd gHealingBlueStarAnimCmds[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(16, 2), @@ -1820,34 +1826,34 @@ const union AnimCmd gUnknown_08592F04[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592F28[] = +const union AnimCmd *const gHealingBlueStarAnimTable[] = { - gUnknown_08592F04, + gHealingBlueStarAnimCmds, }; -const struct SpriteTemplate gUnknown_08592F2C = +const struct SpriteTemplate gHealingBlueStarSpriteTemplate = { .tileTag = ANIM_TAG_BLUE_STAR, .paletteTag = ANIM_TAG_BLUE_STAR, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592F28, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gHealingBlueStarAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; -const struct SpriteTemplate gUnknown_08592F44 = +const struct SpriteTemplate gHornHitSpriteTemplate = { .tileTag = ANIM_TAG_HORN_HIT, .paletteTag = ANIM_TAG_HORN_HIT, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8102844, + .callback = AnimHornHit, }; -const union AnimCmd gUnknown_08592F5C[] = +const union AnimCmd gSuperFangAnimCmds[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(16, 2), @@ -1856,106 +1862,106 @@ const union AnimCmd gUnknown_08592F5C[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592F70[] = +const union AnimCmd *const gSuperFangAnimTable[] = { - gUnknown_08592F5C, + gSuperFangAnimCmds, }; -const struct SpriteTemplate gUnknown_08592F74 = +const struct SpriteTemplate gSuperFangSpriteTemplate = { .tileTag = ANIM_TAG_FANG_ATTACK, .paletteTag = ANIM_TAG_FANG_ATTACK, - .oam = &gUnknown_08524914, - .anims = gUnknown_08592F70, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gSuperFangAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8102BCC, + .callback = AnimSuperFang, }; -const union AnimCmd gUnknown_08592F8C[] = +const union AnimCmd gWavyMusicNotesAnimCmds1[] = { ANIMCMD_FRAME(0, 10), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592F94[] = +const union AnimCmd gWavyMusicNotesAnimCmds2[] = { ANIMCMD_FRAME(4, 10), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592F9C[] = +const union AnimCmd gWavyMusicNotesAnimCmds3[] = { ANIMCMD_FRAME(8, 41), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592FA4[] = +const union AnimCmd gWavyMusicNotesAnimCmds4[] = { ANIMCMD_FRAME(12, 10), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592FAC[] = +const union AnimCmd gWavyMusicNotesAnimCmds5[] = { ANIMCMD_FRAME(16, 10), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592FB4[] = +const union AnimCmd gWavyMusicNotesAnimCmds6[] = { ANIMCMD_FRAME(20, 10), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592FBC[] = +const union AnimCmd gWavyMusicNotesAnimCmds7[] = { ANIMCMD_FRAME(0, 10, .vFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd gUnknown_08592FC4[] = +const union AnimCmd gWavyMusicNotesAnimCmds8[] = { ANIMCMD_FRAME(4, 10, .vFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08592FCC[] = +const union AnimCmd *const gMusicNotesAnimTable[] = { - gUnknown_08592F8C, - gUnknown_08592F94, - gUnknown_08592F9C, - gUnknown_08592FA4, - gUnknown_08592FAC, - gUnknown_08592FB4, - gUnknown_08592FBC, - gUnknown_08592FC4, + gWavyMusicNotesAnimCmds1, + gWavyMusicNotesAnimCmds2, + gWavyMusicNotesAnimCmds3, + gWavyMusicNotesAnimCmds4, + gWavyMusicNotesAnimCmds5, + gWavyMusicNotesAnimCmds6, + gWavyMusicNotesAnimCmds7, + gWavyMusicNotesAnimCmds8, }; -const union AffineAnimCmd gUnknown_08592FEC[] = +const union AffineAnimCmd gWavyMusicNotesAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16), AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_08593004[] = +const union AffineAnimCmd *const gMusicNotesAffineAnimTable[] = { - gUnknown_08592FEC, + gWavyMusicNotesAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_08593008 = +const struct SpriteTemplate gWavyMusicNotesSpriteTemplate = { .tileTag = ANIM_TAG_MUSIC_NOTES, .paletteTag = ANIM_TAG_MUSIC_NOTES, - .oam = &gUnknown_085249CC, - .anims = gUnknown_08592FCC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, .images = NULL, - .affineAnims = gUnknown_08593004, - .callback = sub_8102CD4, + .affineAnims = gMusicNotesAffineAnimTable, + .callback = AnimWavyMusicNotes, }; -const u16 gUnknown_08593020[][6] = +const u16 gParticlesColorBlendTable[][6] = { {ANIM_TAG_MUSIC_NOTES, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)}, {ANIM_TAG_BENT_SPOON, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)}, @@ -1963,52 +1969,52 @@ const u16 gUnknown_08593020[][6] = {ANIM_TAG_LARGE_FRESH_EGG, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)}, }; -const struct SpriteTemplate gUnknown_08593050 = +const struct SpriteTemplate gFastFlyingMusicNotesSpriteTemplate = { .tileTag = ANIM_TAG_MUSIC_NOTES, .paletteTag = ANIM_TAG_MUSIC_NOTES, - .oam = &gUnknown_085249CC, - .anims = gUnknown_08592FCC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, .images = NULL, - .affineAnims = gUnknown_08593004, - .callback = sub_8102EB0, + .affineAnims = gMusicNotesAffineAnimTable, + .callback = AnimFlyingMusicNotes, }; -const struct SpriteTemplate gUnknown_08593068 = +const struct SpriteTemplate gBellyDrumHandSpriteTemplate = { .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE, .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8102FB8, + .callback = AnimBellyDrumHand, }; -const union AffineAnimCmd gUnknown_08593080[] = +const union AffineAnimCmd gSlowFlyingMusicNotesAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0), AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1), AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd *const gUnknown_08593098[] = +const union AffineAnimCmd *const gSlowFlyingMusicNotesAffineAnimTable[] = { - gUnknown_08593080, + gSlowFlyingMusicNotesAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_0859309C = +const struct SpriteTemplate gSlowFlyingMusicNotesSpriteTemplate = { .tileTag = ANIM_TAG_MUSIC_NOTES, .paletteTag = ANIM_TAG_MUSIC_NOTES, - .oam = &gUnknown_085249CC, - .anims = gUnknown_08592FCC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, .images = NULL, - .affineAnims = gUnknown_08593098, - .callback = sub_8103028, + .affineAnims = gSlowFlyingMusicNotesAffineAnimTable, + .callback = AnimSlowFlyingMusicNotes, }; -const union AnimCmd gUnknown_085930B4[] = +const union AnimCmd gMetronomeThroughtBubbleAnimCmds1[] = { ANIMCMD_FRAME(0, 2, .hFlip = TRUE), ANIMCMD_FRAME(16, 2, .hFlip = TRUE), @@ -2017,7 +2023,7 @@ const union AnimCmd gUnknown_085930B4[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_085930C8[] = +const union AnimCmd gMetronomeThroughtBubbleAnimCmds3[] = { ANIMCMD_FRAME(48, 2, .hFlip = TRUE), ANIMCMD_FRAME(32, 2, .hFlip = TRUE), @@ -2026,7 +2032,7 @@ const union AnimCmd gUnknown_085930C8[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_085930DC[] = +const union AnimCmd gMetronomeThroughtBubbleAnimCmds2[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(16, 2), @@ -2035,7 +2041,7 @@ const union AnimCmd gUnknown_085930DC[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_085930F0[] = +const union AnimCmd gMetronomeThroughtBubbleAnimCmds4[] = { ANIMCMD_FRAME(48, 2), ANIMCMD_FRAME(32, 2), @@ -2044,33 +2050,33 @@ const union AnimCmd gUnknown_085930F0[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593104[] = +const union AnimCmd *const gMetronomeThroughtBubbleAnimTable[] = { - gUnknown_085930B4, - gUnknown_085930DC, - gUnknown_085930C8, - gUnknown_085930F0, + gMetronomeThroughtBubbleAnimCmds1, + gMetronomeThroughtBubbleAnimCmds2, + gMetronomeThroughtBubbleAnimCmds3, + gMetronomeThroughtBubbleAnimCmds4, }; -const struct SpriteTemplate gUnknown_08593114 = +const struct SpriteTemplate gThoughtBubbleSpriteTemplate = { .tileTag = ANIM_TAG_THOUGHT_BUBBLE, .paletteTag = ANIM_TAG_THOUGHT_BUBBLE, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593104, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gMetronomeThroughtBubbleAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8103164, + .callback = AnimThoughtBubble, }; -const union AffineAnimCmd gUnknown_0859312C[] = +const union AffineAnimCmd gMetronomeFingerAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08593144[] = +const union AffineAnimCmd gMetronomeFingerAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11), AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11), @@ -2079,7 +2085,7 @@ const union AffineAnimCmd gUnknown_08593144[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08593144_2[] = +const union AffineAnimCmd gMetronomeFingerAffineAnimCmds2_2[] = { AFFINEANIMCMD_FRAME(16, 16, 0, 0), AFFINEANIMCMD_FRAME(30, 30, 0, 8), @@ -2092,47 +2098,47 @@ const union AffineAnimCmd gUnknown_08593144_2[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_085931B4[] = +const union AffineAnimCmd *const gMetronomeFingerAffineAnimTable[] = { - gUnknown_0859312C, - gUnknown_08593144, + gMetronomeFingerAffineAnimCmds1, + gMetronomeFingerAffineAnimCmds2, }; -const struct SpriteTemplate gUnknown_085931BC = +const struct SpriteTemplate gMetronomeFingerSpriteTemplate = { .tileTag = ANIM_TAG_FINGER, .paletteTag = ANIM_TAG_FINGER, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_085931B4, - .callback = sub_8103208, + .affineAnims = gMetronomeFingerAffineAnimTable, + .callback = AnimMetronomeFinger, }; -const struct SpriteTemplate gUnknown_085931D4 = +const struct SpriteTemplate gFollowMeFingerSpriteTemplate = { .tileTag = ANIM_TAG_FINGER, .paletteTag = ANIM_TAG_FINGER, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_085931B4, - .callback = sub_8103284, + .affineAnims = gMetronomeFingerAffineAnimTable, + .callback = AnimFollowMeFinger, }; -const union AnimCmd gUnknown_085931EC[] = +const union AnimCmd gTauntFingerAnimCmds1[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END, }; -const union AnimCmd gUnknown_085931F4[] = +const union AnimCmd gTauntFingerAnimCmds2[] = { ANIMCMD_FRAME(0, 1, .hFlip = TRUE), ANIMCMD_END, }; -const union AnimCmd gUnknown_085931FC[] = +const union AnimCmd gTauntFingerAnimCmds3[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(16, 4), @@ -2144,7 +2150,7 @@ const union AnimCmd gUnknown_085931FC[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_0859321C[] = +const union AnimCmd gTauntFingerAnimCmds4[] = { ANIMCMD_FRAME(0, 4, .hFlip = TRUE), ANIMCMD_FRAME(16, 4, .hFlip = TRUE), @@ -2156,23 +2162,23 @@ const union AnimCmd gUnknown_0859321C[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_0859323C[] = +const union AnimCmd *const gTauntFingerAnimTable[] = { - gUnknown_085931EC, - gUnknown_085931F4, - gUnknown_085931FC, - gUnknown_0859321C, + gTauntFingerAnimCmds1, + gTauntFingerAnimCmds2, + gTauntFingerAnimCmds3, + gTauntFingerAnimCmds4, }; -const struct SpriteTemplate gUnknown_0859324C = +const struct SpriteTemplate gTauntFingerSpriteTemplate = { .tileTag = ANIM_TAG_FINGER_2, .paletteTag = ANIM_TAG_FINGER_2, - .oam = &gUnknown_08524914, - .anims = gUnknown_0859323C, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gTauntFingerAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8103390, + .callback = AnimTauntFinger, }; // Animates the falling particles that horizontally wave back and forth. @@ -2803,11 +2809,11 @@ void sub_80FF458(u8 taskId) gTasks[taskId].data[0] = gBattleAnimArgs[0]; gTasks[taskId].data[1] = gBattleAnimArgs[1]; gTasks[taskId].data[11] = 0x100; - gTasks[taskId].func = sub_80FF53C; + gTasks[taskId].func = AnimTask_DuplicateAndShrinkToPosStep1; } } -static void sub_80FF53C(u8 taskId) +static void AnimTask_DuplicateAndShrinkToPosStep1(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET); gTasks[taskId].data[10] += gTasks[taskId].data[0]; @@ -2821,11 +2827,11 @@ static void sub_80FF53C(u8 taskId) if (--gTasks[taskId].data[1] == 0) { gTasks[taskId].data[0] = 0; - gTasks[taskId].func = sub_80FF5CC; + gTasks[taskId].func = AnimTask_DuplicateAndShrinkToPosStep2; } } -static void sub_80FF5CC(u8 taskId) +static void AnimTask_DuplicateAndShrinkToPosStep2(u8 taskId) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { @@ -2981,38 +2987,38 @@ static void sub_80FF9B8(struct Sprite* sprite, s16 c) sprite->data[7] = c; } -bool8 sub_80FF9E0(struct Sprite* sprite) +bool8 moveAlongLinearPath(struct Sprite* sprite) { - u16 r10 = (u8)(sprite->data[5] >> 8); - u16 r9 = (u8)sprite->data[5]; - s32 r2 = (u8)(sprite->data[6] >> 8); - s32 r4 = (u8)sprite->data[6]; - s16 r6 = sprite->data[7] >> 8; - s16 r3 = sprite->data[7] & 0xFF; - s16 r4_2; + u16 xStartPos = (u8)(sprite->data[5] >> 8); + u16 yStartPos = (u8)sprite->data[5]; + s32 xEndPos = (u8)(sprite->data[6] >> 8); + s32 yEndPos = (u8)sprite->data[6]; + s16 totalTime = sprite->data[7] >> 8; + s16 currentTime = sprite->data[7] & 0xFF; + s16 yEndPos_2; s16 r0; s32 var1; - s32 var2; - - if (r2 == 0) - r2 = -32; - else if (r2 == 255) - r2 = 272; - - r4_2 = r4 - r9; - r0 = r2 - r10; - var1 = r0 * r3 / r6; - var2 = r4_2 * r3 / r6; - sprite->pos1.x = var1 + r10; - sprite->pos1.y = var2 + r9; - if (++r3 == r6) + s32 vaxEndPos; + + if (xEndPos == 0) + xEndPos = -32; + else if (xEndPos == 255) + xEndPos = 272; + + yEndPos_2 = yEndPos - yStartPos; + r0 = xEndPos - xStartPos; + var1 = r0 * currentTime / totalTime; + vaxEndPos = yEndPos_2 * currentTime / totalTime; + sprite->pos1.x = var1 + xStartPos; + sprite->pos1.y = vaxEndPos + yStartPos; + if (++currentTime == totalTime) return TRUE; - sprite->data[7] = (r6 << 8) | r3; + sprite->data[7] = (totalTime << 8) | currentTime; return FALSE; } -void sub_80FFA84(struct Sprite* sprite) +void AnimItemStealStep2(struct Sprite* sprite) { if (sprite->data[0] == 10) StartSpriteAffineAnim(sprite, 1); @@ -3022,7 +3028,7 @@ void sub_80FFA84(struct Sprite* sprite) DestroyAnimSprite(sprite); } -static void sub_80FFAB4(struct Sprite* sprite) +static void AnimItemStealStep1(struct Sprite* sprite) { sprite->data[0] += sprite->data[3] * 128 / sprite->data[4]; if (sprite->data[0] >= 128) @@ -3032,11 +3038,11 @@ static void sub_80FFAB4(struct Sprite* sprite) } sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8); - if (sub_80FF9E0(sprite)) + if (moveAlongLinearPath(sprite)) { sprite->pos2.y = 0; sprite->data[0] = 0; - sprite->callback = sub_80FFA84; + sprite->callback = AnimItemStealStep2; } } @@ -3063,7 +3069,7 @@ void AnimPresent(struct Sprite* sprite) } sprite->data[4] = 60; - sprite->callback = sub_80FFAB4; + sprite->callback = AnimItemStealStep1; } static void sub_80FFB90(struct Sprite* sprite) @@ -3078,7 +3084,7 @@ static void sub_80FFB90(struct Sprite* sprite) } sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8); - if (sub_80FF9E0(sprite)) + if (moveAlongLinearPath(sprite)) { sprite->pos2.y = zero; sprite->data[0] = zero; @@ -3096,7 +3102,7 @@ void AnimKnockOffItem(struct Sprite* sprite) sub_80FF9B8(sprite, 40); sprite->data[3] = 3; sprite->data[4] = 60; - sprite->callback = sub_80FFAB4; + sprite->callback = AnimItemStealStep1; } else { @@ -3154,10 +3160,10 @@ void AnimItemSteal(struct Sprite* sprite) } sprite->data[4] = 60; - sprite->callback = AnimItemStealStep; + sprite->callback = AnimItemStealStep3; } -static void AnimItemStealStep(struct Sprite* sprite) +static void AnimItemStealStep3(struct Sprite* sprite) { int zero; sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]); @@ -3172,11 +3178,11 @@ static void AnimItemStealStep(struct Sprite* sprite) if (sprite->pos2.y == 0) PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(63)); - if (sub_80FF9E0(sprite)) + if (moveAlongLinearPath(sprite)) { sprite->pos2.y = 0; sprite->data[0] = 0; - sprite->callback = sub_80FFA84; + sprite->callback = AnimItemStealStep2; PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64)); } } @@ -3253,9 +3259,9 @@ static void AnimTrickBagStep1(struct Sprite* sprite) static void AnimTrickBagStep2(struct Sprite* sprite) { - if (sprite->data[2] == gUnknown_08592700[sprite->data[0]][1]) + if (sprite->data[2] == gTrickBagCoordinates[sprite->data[0]][1]) { - if (gUnknown_08592700[sprite->data[0]][2] == 127) + if (gTrickBagCoordinates[sprite->data[0]][2] == 127) { sprite->data[0] = 0; sprite->callback = AnimTrickBagStep3; @@ -3267,7 +3273,7 @@ static void AnimTrickBagStep2(struct Sprite* sprite) else { sprite->data[2]++; - sprite->data[1] = (gUnknown_08592700[sprite->data[0]][0] * gUnknown_08592700[sprite->data[0]][2] + sprite->data[1]) & 0xFF; + sprite->data[1] = (gTrickBagCoordinates[sprite->data[0]][0] * gTrickBagCoordinates[sprite->data[0]][2] + sprite->data[1]) & 0xFF; if (!IsContest()) { if ((u16)(sprite->data[1] - 1) < 191) @@ -3290,7 +3296,7 @@ static void AnimTrickBagStep3(struct Sprite* sprite) sprite->data[0]++; } -void sub_80FFFC0(u8 taskId) +void AnimTask_LeafBlade(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -3302,7 +3308,7 @@ void sub_80FFFC0(u8 taskId) task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1; task->data[9] = 56 - (task->data[5] * 64); task->data[8] = task->data[7] - task->data[9] + task->data[6]; - task->data[2] = CreateSprite(&gUnknown_08592778, task->data[8], task->data[9], task->data[4]); + task->data[2] = CreateSprite(&gLeafBladeSpriteTemplate, task->data[8], task->data[9], task->data[4]); if (task->data[2] == MAX_SPRITES) DestroyAnimVisualTask(taskId); @@ -3311,12 +3317,12 @@ void sub_80FFFC0(u8 taskId) gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5]; gSprites[task->data[2]].data[3] = task->data[9]; gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5]; - gSprites[task->data[2]].data[5] = sub_8100504(&gSprites[task->data[2]]); + gSprites[task->data[2]].data[5] = LeafBladeGetPosFactor(&gSprites[task->data[2]]); InitAnimArcTranslation(&gSprites[task->data[2]]); - task->func = sub_8100128; + task->func = AnimTask_LeafBladeStep; } -static void sub_8100128(u8 taskId) +static void AnimTask_LeafBladeStep(u8 taskId) { struct Task* task = &gTasks[taskId]; struct Sprite* sprite = &gSprites[task->data[2]]; @@ -3324,7 +3330,7 @@ static void sub_8100128(u8 taskId) switch (a) { case 4: - sub_8100524(task, taskId); + AnimTask_LeafBladeStep2(task, taskId); if (TranslateAnimHorizontalArc(sprite)) { task->data[15] = 5; @@ -3332,7 +3338,7 @@ static void sub_8100128(u8 taskId) } break; case 8: - sub_8100524(task, taskId); + AnimTask_LeafBladeStep2(task, taskId); if (TranslateAnimHorizontalArc(sprite)) { task->data[15] = 9; @@ -3340,7 +3346,7 @@ static void sub_8100128(u8 taskId) } break; case 0: - sub_8100524(task, taskId); + AnimTask_LeafBladeStep2(task, taskId); if (TranslateAnimHorizontalArc(sprite)) { task->data[15] = 1; @@ -3357,7 +3363,7 @@ static void sub_8100128(u8 taskId) sprite->data[2] = task->data[6]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7]; - sprite->data[5] = sub_8100504(sprite); + sprite->data[5] = LeafBladeGetPosFactor(sprite); task->data[4] += 2; task->data[3] = a; sprite->subpriority = task->data[4]; @@ -3366,7 +3372,7 @@ static void sub_8100128(u8 taskId) task->data[0]++; break; case 2: - sub_8100524(task, taskId); + AnimTask_LeafBladeStep2(task, taskId); if (TranslateAnimHorizontalArc(sprite)) { task->data[15] = 3; @@ -3383,7 +3389,7 @@ static void sub_8100128(u8 taskId) sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_8100504(sprite); + sprite->data[5] = LeafBladeGetPosFactor(sprite); task->data[3] = 2; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); @@ -3400,7 +3406,7 @@ static void sub_8100128(u8 taskId) sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_8100504(sprite); + sprite->data[5] = LeafBladeGetPosFactor(sprite); task->data[4] -= 2; task->data[3] = 3; sprite->subpriority = task->data[4]; @@ -3409,7 +3415,7 @@ static void sub_8100128(u8 taskId) task->data[0]++; break; case 6: - sub_8100524(task, taskId); + AnimTask_LeafBladeStep2(task, taskId); if (TranslateAnimHorizontalArc(sprite)) { task->data[15] = 7; @@ -3426,7 +3432,7 @@ static void sub_8100128(u8 taskId) sprite->data[2] = task->data[6]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7]; - sprite->data[5] = sub_8100504(sprite); + sprite->data[5] = LeafBladeGetPosFactor(sprite); task->data[4] += 2; task->data[3] = 4; sprite->subpriority = task->data[4]; @@ -3444,7 +3450,7 @@ static void sub_8100128(u8 taskId) sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5]; - sprite->data[5] = sub_8100504(sprite); + sprite->data[5] = LeafBladeGetPosFactor(sprite); task->data[3] = 5; sprite->subpriority = task->data[4]; StartSpriteAnim(sprite, task->data[3]); @@ -3452,7 +3458,7 @@ static void sub_8100128(u8 taskId) task->data[0]++; break; case 10: - sub_8100524(task, taskId); + AnimTask_LeafBladeStep2(task, taskId); if (TranslateAnimHorizontalArc(sprite)) { task->data[15] = 11; @@ -3470,7 +3476,7 @@ static void sub_8100128(u8 taskId) sprite->data[2] = task->data[8]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = task->data[9]; - sprite->data[5] = sub_8100504(sprite); + sprite->data[5] = LeafBladeGetPosFactor(sprite); task->data[4] -= 2; task->data[3] = 6; sprite->subpriority = task->data[4]; @@ -3480,7 +3486,7 @@ static void sub_8100128(u8 taskId) break; } case 12: - sub_8100524(task, taskId); + AnimTask_LeafBladeStep2(task, taskId); if (TranslateAnimHorizontalArc(sprite)) { DestroySprite(sprite); @@ -3501,7 +3507,7 @@ static void sub_8100128(u8 taskId) } } -static s16 sub_8100504(struct Sprite* sprite) +static s16 LeafBladeGetPosFactor(struct Sprite* sprite) { s16 var = 8; if (sprite->data[4] < sprite->pos1.y) @@ -3510,7 +3516,7 @@ static s16 sub_8100504(struct Sprite* sprite) return var; } -static void sub_8100524(struct Task* task, u8 taskId) +static void AnimTask_LeafBladeStep2(struct Task* task, u8 taskId) { task->data[14]++; if (task->data[14] > 0) @@ -3521,7 +3527,7 @@ static void sub_8100524(struct Task* task, u8 taskId) task->data[14] = 0; spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x; spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y; - spriteId = CreateSprite(&gUnknown_08592778, spriteX, spriteY, task->data[4]); + spriteId = CreateSprite(&gLeafBladeSpriteTemplate, spriteX, spriteY, task->data[4]); if (spriteId != MAX_SPRITES) { gSprites[spriteId].data[6] = taskId; @@ -3531,12 +3537,12 @@ static void sub_8100524(struct Task* task, u8 taskId) gTasks[taskId].data[13]++; StartSpriteAnim(&gSprites[spriteId], task->data[3]); gSprites[spriteId].subpriority = task->data[4]; - gSprites[spriteId].callback = sub_80CC408; + gSprites[spriteId].callback = AnimTask_LeafBladeStep2_Callback; } } } -static void sub_80CC408(struct Sprite* sprite) +static void AnimTask_LeafBladeStep2_Callback(struct Sprite* sprite) { sprite->data[0]++; if (sprite->data[0] > 1) @@ -3552,7 +3558,7 @@ static void sub_80CC408(struct Sprite* sprite) } } -void sub_8100640(struct Sprite* sprite) +void AnimFlyingParticle(struct Sprite* sprite) { u8 battler; if (!gBattleAnimArgs[6]) @@ -3597,10 +3603,10 @@ void sub_8100640(struct Sprite* sprite) break; } - sprite->callback = sub_810074C; + sprite->callback = AnimFlyingParticleStep; } -static void sub_810074C(struct Sprite* sprite) +static void AnimFlyingParticleStep(struct Sprite* sprite) { int a = sprite->data[7]; sprite->data[7]++; @@ -3651,7 +3657,7 @@ void sub_81007C4(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_8100898(struct Sprite* sprite) +void AnimNeedleArmSpike(struct Sprite* sprite) { u8 a; u8 b; @@ -3703,11 +3709,11 @@ void sub_8100898(struct Sprite* sprite) c -= 0x8000; TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c); - sprite->callback = sub_81009A0; + sprite->callback = AnimNeedleArmSpikeStep; } } -static void sub_81009A0(struct Sprite* sprite) +static void AnimNeedleArmSpikeStep(struct Sprite* sprite) { if (sprite->data[0]) { @@ -3746,7 +3752,7 @@ void sub_81009F8(struct Sprite* sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -void sub_8100A50(struct Sprite* sprite) +void AnimWhipHit(struct Sprite* sprite) { if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) StartSpriteAnim(sprite, 1); @@ -3800,7 +3806,7 @@ void AnimCuttingSlice(struct Sprite* sprite) sprite->data[1] = -sprite->data[1]; } -void sub_8100B88(struct Sprite* sprite) +void AnimAirCutterSlice(struct Sprite* sprite) { u8 a; u8 b; @@ -3937,7 +3943,7 @@ static void sub_8100E80(struct Sprite* sprite) DestroyAnimSprite(sprite); } -void sub_8100EF0(struct Sprite* sprite) +void AnimProtect(struct Sprite* sprite) { if (IsContest()) gBattleAnimArgs[1] += 8; @@ -3954,10 +3960,10 @@ void sub_8100EF0(struct Sprite* sprite) sprite->data[7] = 16; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7])); - sprite->callback = sub_8100FD4; + sprite->callback = AnimProtectStep; } -static void sub_8100FD4(struct Sprite *sprite) +static void AnimProtectStep(struct Sprite *sprite) { int a; int i; @@ -4000,7 +4006,7 @@ static void sub_8100FD4(struct Sprite *sprite) } } -void sub_81010CC(struct Sprite* sprite) +void AnimMilkBottle(struct Sprite* sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 0xFFE8; @@ -4013,10 +4019,10 @@ void sub_81010CC(struct Sprite* sprite) sprite->data[7] = 16; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7])); - sprite->callback = sub_8101138; + sprite->callback = AnimMilkBottleStep1; } -static void sub_8101138(struct Sprite* sprite) +static void AnimMilkBottleStep1(struct Sprite* sprite) { switch (sprite->data[0]) { @@ -4049,7 +4055,7 @@ static void sub_8101138(struct Sprite* sprite) } break; case 2: - sub_8101298(sprite, 16, 4); + AnimMilkBottleStep2(sprite, 16, 4); if (++sprite->data[1] > 2) { sprite->data[1] = 0; @@ -4089,7 +4095,7 @@ static void sub_8101138(struct Sprite* sprite) } } -static void sub_8101298(struct Sprite* sprite, int unk1, int unk2) +static void AnimMilkBottleStep2(struct Sprite* sprite, int unk1, int unk2) { if (sprite->data[3] <= 11) sprite->data[4] += 2; @@ -4110,7 +4116,7 @@ static void sub_8101298(struct Sprite* sprite, int unk1, int unk2) sprite->data[3] = 0; } -void sub_810130C(struct Sprite* sprite) +void AnimGrantingStars(struct Sprite* sprite) { if (!gBattleAnimArgs[2]) SetSpriteCoordsToAnimAttackerCoords(sprite); @@ -4124,7 +4130,7 @@ void sub_810130C(struct Sprite* sprite) sprite->callback = TranslateSpriteLinearFixedPoint; } -void sub_810135C(struct Sprite* sprite) +void AnimSparkingStars(struct Sprite* sprite) { u8 battler; if (!gBattleAnimArgs[2]) @@ -4192,7 +4198,7 @@ static void sub_81014A0(struct Sprite* sprite) DestroyAnimSprite(sprite); } -void sub_81014F4(struct Sprite* sprite) +void AnimSleepLetterZ(struct Sprite* sprite) { SetSpriteCoordsToAnimAttackerCoords(sprite); if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) @@ -4209,10 +4215,10 @@ void sub_81014F4(struct Sprite* sprite) StartSpriteAffineAnim(sprite, 1); } - sprite->callback = sub_8101560; + sprite->callback = AnimSleepLetterZStep; } -static void sub_8101560(struct Sprite* sprite) +static void AnimSleepLetterZStep(struct Sprite* sprite) { sprite->pos2.y = -(sprite->data[0] / 0x28); sprite->pos2.x = sprite->data[4] / 10; @@ -4222,23 +4228,23 @@ static void sub_8101560(struct Sprite* sprite) DestroySpriteAndMatrix(sprite); } -void sub_81015AC(struct Sprite* sprite) +void AnimLockOnTarget(struct Sprite* sprite) { sprite->pos1.x -= 32; sprite->pos1.y -= 32; sprite->data[0] = 20; sprite->callback = WaitAnimForDuration; - StoreSpriteCallbackInData6(sprite, sub_81015D4); + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep1); } -static void sub_81015D4(struct Sprite* sprite) +static void AnimLockOnTargetStep1(struct Sprite* sprite) { switch (sprite->data[5] & 1) { case 0: sprite->data[0] = 1; sprite->callback = WaitAnimForDuration; - StoreSpriteCallbackInData6(sprite, sub_81015D4); + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep1); break; case 1: sprite->pos1.x += sprite->pos2.x; @@ -4246,10 +4252,10 @@ static void sub_81015D4(struct Sprite* sprite) sprite->pos2.y = 0; sprite->pos2.x = 0; sprite->data[0] = 8; - sprite->data[2] = sprite->pos1.x + gUnknown_08592CD0[sprite->data[5] >> 8][0]; - sprite->data[4] = sprite->pos1.y + gUnknown_08592CD0[sprite->data[5] >> 8][1]; + sprite->data[2] = sprite->pos1.x + gInclineMonCoordTable[sprite->data[5] >> 8][0]; + sprite->data[4] = sprite->pos1.y + gInclineMonCoordTable[sprite->data[5] >> 8][1]; sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, sub_8101684); + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep2); sprite->data[5] += 0x100; PlaySE12WithPanning(SE_W199, BattleAnimAdjustPanning(63)); break; @@ -4258,21 +4264,21 @@ static void sub_81015D4(struct Sprite* sprite) sprite->data[5] ^= 1; } -static void sub_8101684(struct Sprite* sprite) +static void AnimLockOnTargetStep2(struct Sprite* sprite) { if ((sprite->data[5] >> 8) == 4) { sprite->data[0] = 10; sprite->callback = WaitAnimForDuration; - StoreSpriteCallbackInData6(sprite, sub_81016B8); + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep3); } else { - sprite->callback = sub_81015D4; + sprite->callback = AnimLockOnTargetStep1; } } -static void sub_81016B8(struct Sprite* sprite) +static void AnimLockOnTargetStep3(struct Sprite* sprite) { s16 a; s16 b; @@ -4282,7 +4288,7 @@ static void sub_81016B8(struct Sprite* sprite) sprite->data[1] = 0; sprite->data[2] = 0; sprite->callback = WaitAnimForDuration; - StoreSpriteCallbackInData6(sprite, sub_8101774); + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep4); } else { @@ -4314,11 +4320,11 @@ static void sub_81016B8(struct Sprite* sprite) sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + a; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + b; sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, sub_8101820); + StoreSpriteCallbackInData6(sprite, AnimLockOnTargetStep5); } } -static void sub_8101774(struct Sprite* sprite) +static void AnimLockOnTargetStep4(struct Sprite* sprite) { if (sprite->data[2] == 0) { @@ -4341,21 +4347,21 @@ static void sub_8101774(struct Sprite* sprite) } else if (sprite->data[1] == 0) { - sprite->callback = sub_8101820; + sprite->callback = AnimLockOnTargetStep5; } } -static void sub_8101820(struct Sprite* sprite) +static void AnimLockOnTargetStep5(struct Sprite* sprite) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { sprite->data[1] = 0; sprite->data[0] = 0; - sprite->callback = sub_8101848; + sprite->callback = AnimLockOnTargetStep6; } } -static void sub_8101848(struct Sprite* sprite) +static void AnimLockOnTargetStep6(struct Sprite* sprite) { if (sprite->data[0] % 3 == 0) { @@ -4368,7 +4374,7 @@ static void sub_8101848(struct Sprite* sprite) DestroyAnimSprite(sprite); } -void sub_8101898(struct Sprite* sprite) +void AnimLockOnMoveTarget(struct Sprite* sprite) { sprite->oam.affineParam = gBattleAnimArgs[0]; if ((s16)sprite->oam.affineParam == 1) @@ -4396,42 +4402,42 @@ void sub_8101898(struct Sprite* sprite) } sprite->oam.tileNum = (sprite->oam.tileNum + 16); - sprite->callback = sub_81015AC; + sprite->callback = AnimLockOnTarget; sprite->callback(sprite); } -void sub_8101940(struct Sprite* sprite) +void AnimBowMon(struct Sprite* sprite) { sprite->invisible = 1; sprite->data[0] = 0; switch (gBattleAnimArgs[0]) { case 0: - sprite->callback = sub_8101998; + sprite->callback = AnimBowMonStep1; break; case 1: - sprite->callback = sub_8101A74; + sprite->callback = AnimBowMonStep2; break; case 2: - sprite->callback = sub_8101AC4; + sprite->callback = AnimBowMonStep3; break; default: - sprite->callback = sub_8101B84; + sprite->callback = AnimBowMonStep4; break; } } -static void sub_8101998(struct Sprite* sprite) +static void AnimBowMonStep1(struct Sprite* sprite) { sprite->data[0] = 6; sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? 2 : -2; sprite->data[2] = 0; sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; - StoreSpriteCallbackInData6(sprite, sub_81019E8); + StoreSpriteCallbackInData6(sprite, AnimBowMonStep1_Callback); sprite->callback = TranslateMonSpriteLinear; } -static void sub_81019E8(struct Sprite* sprite) +static void AnimBowMonStep1_Callback(struct Sprite* sprite) { if (sprite->data[0] == 0) { @@ -4447,30 +4453,30 @@ static void sub_81019E8(struct Sprite* sprite) if (++sprite->data[0] > 3) { sprite->data[0] = 0; - sprite->callback = sub_8101B84; + sprite->callback = AnimBowMonStep4; } } -static void sub_8101A74(struct Sprite* sprite) +static void AnimBowMonStep2(struct Sprite* sprite) { sprite->data[0] = 4; sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? -3 : 3; sprite->data[2] = 0; sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; - StoreSpriteCallbackInData6(sprite, sub_8101B84); + StoreSpriteCallbackInData6(sprite, AnimBowMonStep4); sprite->callback = TranslateMonSpriteLinear; } -static void sub_8101AC4(struct Sprite* sprite) +static void AnimBowMonStep3(struct Sprite* sprite) { if (++sprite->data[0] > 8) { sprite->data[0] = 0; - sprite->callback = sub_8101AE8; + sprite->callback = AnimBowMonStep3_Callback; } } -static void sub_8101AE8(struct Sprite* sprite) +static void AnimBowMonStep3_Callback(struct Sprite* sprite) { if (sprite->data[0] == 0) { @@ -4494,11 +4500,11 @@ static void sub_8101AE8(struct Sprite* sprite) if (++sprite->data[0] > 2) { ResetSpriteRotScale(sprite->data[3]); - sprite->callback = sub_8101B84; + sprite->callback = AnimBowMonStep4; } } -static void sub_8101B84(struct Sprite* sprite) +static void AnimBowMonStep4(struct Sprite* sprite) { DestroyAnimSprite(sprite); } @@ -4546,7 +4552,7 @@ static void sub_8101BA0(struct Sprite *sprite) } } -void sub_8101C94(u8 taskId) +void AnimTask_SkullBashPosition(u8 taskId) { u8 a; @@ -4567,7 +4573,7 @@ void sub_8101C94(u8 taskId) if (a == 0) gTasks[taskId].data[5] *= -1; - gTasks[taskId].func = sub_8101D2C; + gTasks[taskId].func = AnimTask_SkullBashPositionSet; break; case 1: gTasks[taskId].data[3] = 8; @@ -4579,12 +4585,12 @@ void sub_8101C94(u8 taskId) gTasks[taskId].data[5] = -gTasks[taskId].data[5]; } - gTasks[taskId].func = sub_8101EEC; + gTasks[taskId].func = AnimTask_SkullBashPositionReset; break; } } -static void sub_8101D2C(u8 taskId) +static void AnimTask_SkullBashPositionSet(u8 taskId) { struct Task *task = &gTasks[taskId]; switch (task->data[2]) @@ -4675,7 +4681,7 @@ static void sub_8101D2C(u8 taskId) } } -static void sub_8101EEC(u8 taskId) +static void AnimTask_SkullBashPositionReset(u8 taskId) { struct Task* task = &gTasks[taskId]; if (task->data[3]) @@ -4692,7 +4698,7 @@ static void sub_8101EEC(u8 taskId) } } -void sub_8101F40(struct Sprite* sprite) +void AnimSlashSlice(struct Sprite* sprite) { if (gBattleAnimArgs[0] == 0) { @@ -4707,48 +4713,48 @@ void sub_8101F40(struct Sprite* sprite) sprite->data[0] = 0; sprite->data[1] = 0; - StoreSpriteCallbackInData6(sprite, sub_810208C); + StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep3); sprite->callback = RunStoredCallbackWhenAnimEnds; } -void sub_8101FA8(struct Sprite* sprite) +void AnimFalseSwipeSlice(struct Sprite* sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0; sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); - StoreSpriteCallbackInData6(sprite, sub_8102044); + StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep1); sprite->callback = RunStoredCallbackWhenAnimEnds; } -void sub_8101FF0(struct Sprite* sprite) +void AnimFalseSwipePositionedSlice(struct Sprite* sprite) { sprite->pos1.x = sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0 + gBattleAnimArgs[0]; sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3); StartSpriteAnim(sprite, 1); sprite->data[0] = 0; sprite->data[1] = 0; - sprite->callback = sub_810208C; + sprite->callback = AnimFalseSwipeSliceStep3; } -static void sub_8102044(struct Sprite* sprite) +static void AnimFalseSwipeSliceStep1(struct Sprite* sprite) { if (++sprite->data[0] > 8) { sprite->data[0] = 12; sprite->data[1] = 8; sprite->data[2] = 0; - StoreSpriteCallbackInData6(sprite, sub_810207C); + StoreSpriteCallbackInData6(sprite, AnimFalseSwipeSliceStep2); sprite->callback = TranslateSpriteLinear; } } -static void sub_810207C(struct Sprite* sprite) +static void AnimFalseSwipeSliceStep2(struct Sprite* sprite) { sprite->data[0] = 0; sprite->data[1] = 0; - sprite->callback = sub_810208C; + sprite->callback = AnimFalseSwipeSliceStep3; } -static void sub_810208C(struct Sprite* sprite) +static void AnimFalseSwipeSliceStep3(struct Sprite* sprite) { if (++sprite->data[0] > 1) { @@ -4759,7 +4765,7 @@ static void sub_810208C(struct Sprite* sprite) } } -void sub_81020D8(struct Sprite* sprite) +void AnimEndureEnergy(struct Sprite* sprite) { if (gBattleAnimArgs[0] == 0) { @@ -4774,10 +4780,10 @@ void sub_81020D8(struct Sprite* sprite) sprite->data[0] = 0; sprite->data[1] = gBattleAnimArgs[3]; - sprite->callback = sub_810213C; + sprite->callback = AnimEndureEnergyStep; } -static void sub_810213C(struct Sprite* sprite) +static void AnimEndureEnergyStep(struct Sprite* sprite) { if (++sprite->data[0] > sprite->data[1]) { @@ -4790,7 +4796,7 @@ static void sub_810213C(struct Sprite* sprite) DestroyAnimSprite(sprite); } -void sub_810217C(struct Sprite* sprite) +void AnimSharpenSphere(struct Sprite* sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - 12; @@ -4800,10 +4806,10 @@ void sub_810217C(struct Sprite* sprite) sprite->data[3] = 0; sprite->data[4] = 0; sprite->data[5] = BattleAnimAdjustPanning(-64); - sprite->callback = sub_81021CC; + sprite->callback = AnimSharpenSphereStep; } -static void sub_81021CC(struct Sprite* sprite) +static void AnimSharpenSphereStep(struct Sprite* sprite) { if (++sprite->data[0] >= sprite->data[1]) { @@ -4827,7 +4833,7 @@ static void sub_81021CC(struct Sprite* sprite) DestroyAnimSprite(sprite); } -void sub_8102268(struct Sprite* sprite) +void AnimConversion(struct Sprite* sprite) { if (sprite->data[0] == 0) { @@ -4843,7 +4849,7 @@ void sub_8102268(struct Sprite* sprite) DestroyAnimSprite(sprite); } -void sub_81022D4(u8 taskId) +void AnimTask_ConversionAlphaBlend(u8 taskId) { if (gTasks[taskId].data[2] == 1) { @@ -4867,15 +4873,15 @@ void sub_81022D4(u8 taskId) } } -void sub_810234C(struct Sprite* sprite) +void AnimConversion2(struct Sprite* sprite) { InitSpritePosToAnimTarget(sprite, FALSE); sprite->animPaused = 1; sprite->data[0] = gBattleAnimArgs[2]; - sprite->callback = sub_810237C; + sprite->callback = AnimConversion2Step; } -static void sub_810237C(struct Sprite* sprite) +static void AnimConversion2Step(struct Sprite* sprite) { if (sprite->data[0]) { @@ -4892,7 +4898,7 @@ static void sub_810237C(struct Sprite* sprite) } } -void sub_81023E0(u8 taskId) +void AnimTask_Conversion2AlphaBlend(u8 taskId) { if (++gTasks[taskId].data[0] == 4) { @@ -4928,7 +4934,7 @@ void unref_sub_81024A8(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_81024E0(struct Sprite* sprite) +void AnimMoon(struct Sprite* sprite) { if (IsContest()) { @@ -4944,16 +4950,16 @@ void sub_81024E0(struct Sprite* sprite) sprite->oam.shape = 0; sprite->oam.size = 3; sprite->data[0] = 0; - sprite->callback = sub_8102528; + sprite->callback = AnimMoonStep; } -static void sub_8102528(struct Sprite* sprite) +static void AnimMoonStep(struct Sprite* sprite) { if (sprite->data[0]) DestroyAnimSprite(sprite); } -void sub_8102540(struct Sprite* sprite) +void AnimMoonlightSparkle(struct Sprite* sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0]; sprite->pos1.y = gBattleAnimArgs[1]; @@ -4962,10 +4968,10 @@ void sub_8102540(struct Sprite* sprite) sprite->data[2] = 0; sprite->data[3] = 0; sprite->data[4] = 1; - sprite->callback = sub_8102584; + sprite->callback = AnimMoonlightSparkleStep; } -static void sub_8102584(struct Sprite* sprite) +static void AnimMoonlightSparkleStep(struct Sprite* sprite) { if (++sprite->data[1] > 1) { @@ -4981,10 +4987,10 @@ static void sub_8102584(struct Sprite* sprite) DestroyAnimSprite(sprite); } -void sub_81026A8(u8); +void AnimTask_FadeScreenBlueStep(u8); -void sub_81025C0(u8 taskId) +void AnimTask_FadeScreenBlue(u8 taskId) { int a = sub_80A75AC(1, 0, 0, 0, 0, 0, 0) & 0xFFFF; int b; @@ -5007,11 +5013,11 @@ void sub_81025C0(u8 taskId) b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON)); d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE); BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31)); - gTasks[taskId].func = sub_81026A8; + gTasks[taskId].func = AnimTask_FadeScreenBlueStep; gTasks[taskId].func(taskId); } -void sub_81026A8(u8 taskId) +void AnimTask_FadeScreenBlueStep(u8 taskId) { struct Task* task = &gTasks[taskId]; switch (task->data[0]) @@ -5067,7 +5073,7 @@ void sub_81026A8(u8 taskId) u8 spriteId; for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++) { - if (gSprites[spriteId].template == &gUnknown_08592EBC || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_8592EEC) + if (gSprites[spriteId].template == &gMoonSpriteTemplate || gSprites[spriteId].template == &gMoonlightSparkleSpriteTemplate) gSprites[spriteId].data[0] = 1; } @@ -5089,7 +5095,7 @@ void sub_81026A8(u8 taskId) } } -void sub_8102844(struct Sprite* sprite) +void AnimHornHit(struct Sprite* sprite) { if (gBattleAnimArgs[2] < 2) gBattleAnimArgs[2] = 2; @@ -5133,10 +5139,10 @@ void sub_8102844(struct Sprite* sprite) sprite->oam.matrixNum = (ST_OAM_HFLIP | ST_OAM_VFLIP); } - sprite->callback = sub_810296C; + sprite->callback = AnimHornHitStep; } -static void sub_810296C(struct Sprite* sprite) +static void AnimHornHitStep(struct Sprite* sprite) { sprite->data[2] += sprite->data[3]; sprite->data[4] += sprite->data[5]; @@ -5152,7 +5158,7 @@ static void sub_810296C(struct Sprite* sprite) DestroyAnimSprite(sprite); } -void sub_81029B4(u8 taskId) +void AnimTask_DoubleTeam(u8 taskId) { u16 i; int obj; @@ -5175,19 +5181,19 @@ void sub_81029B4(u8 taskId) gSprites[obj].data[0] = 0; gSprites[obj].data[1] = i << 7; gSprites[obj].data[2] = taskId; - gSprites[obj].callback = sub_8102B3C; + gSprites[obj].callback = AnimTask_DoubleTeamCallback; task->data[3]++; i++; } - task->func = sub_8102AE0; + task->func = AnimTask_DoubleTeamStep; if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); else ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); } -static void sub_8102AE0(u8 taskId) +static void AnimTask_DoubleTeamStep(u8 taskId) { struct Task* task = &gTasks[taskId]; if (!task->data[3]) @@ -5202,7 +5208,7 @@ static void sub_8102AE0(u8 taskId) } } -static void sub_8102B3C(struct Sprite* sprite) +static void AnimTask_DoubleTeamCallback(struct Sprite* sprite) { if (++sprite->data[3] > 1) { @@ -5224,57 +5230,57 @@ static void sub_8102B3C(struct Sprite* sprite) } } -void sub_8102BCC(struct Sprite* sprite) +void AnimSuperFang(struct Sprite* sprite) { StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); sprite->callback = RunStoredCallbackWhenAnimEnds; } -void sub_8102BE8(u8 taskId) +void AnimTask_MusicNotesRainbowBlend(u8 taskId) { u16 i; u16 j; u16 index; - index = IndexOfSpritePaletteTag(gUnknown_08593020[0][0]); + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[0][0]); if (index != 0xFF) { index = (index << 4) + 0x100; - for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++) - gPlttBufferFaded[index + i] = gUnknown_08593020[0][i]; + for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) + gPlttBufferFaded[index + i] = gParticlesColorBlendTable[0][i]; } - for (j = 1; j < ARRAY_COUNT(gUnknown_08593020); j++) + for (j = 1; j < ARRAY_COUNT(gParticlesColorBlendTable); j++) { - index = AllocSpritePalette(gUnknown_08593020[j][0]); + index = AllocSpritePalette(gParticlesColorBlendTable[j][0]); if (index != 0xFF) { index = (index << 4) + 0x100; - for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++) - gPlttBufferFaded[index + i] = gUnknown_08593020[j][i]; + for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable[0]); i++) + gPlttBufferFaded[index + i] = gParticlesColorBlendTable[j][i]; } } DestroyAnimVisualTask(taskId); } // clears the rainbow effect for musical notes. -void sub_8102CA0(u8 taskId) +void AnimTask_MusicNotesClearRainbowBlend(u8 taskId) { u16 i; - for (i = 1; i < ARRAY_COUNT(gUnknown_08593020); i++) - FreeSpritePaletteByTag(gUnknown_08593020[i][0]); + for (i = 1; i < ARRAY_COUNT(gParticlesColorBlendTable); i++) + FreeSpritePaletteByTag(gParticlesColorBlendTable[i][0]); DestroyAnimVisualTask(taskId); } -void sub_8102CD4(struct Sprite* sprite) +void AnimWavyMusicNotes(struct Sprite* sprite) { u8 index; u8 a; u8 b; SetSpriteCoordsToAnimAttackerCoords(sprite); StartSpriteAnim(sprite, gBattleAnimArgs[0]); - if ((index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[1]][0])) != 0xFF) + if ((index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[1]][0])) != 0xFF) sprite->oam.paletteNum = index; sprite->data[1] = gBattleAnimArgs[1]; @@ -5293,11 +5299,11 @@ void sub_8102CD4(struct Sprite* sprite) sprite->data[4] = sprite->pos1.x << 4; sprite->data[5] = sprite->pos1.y << 4; - sub_8102D8C(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 40); - sprite->callback = sub_8102DE4; + AnimWavyMusicNotesGetNextPos(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 40); + sprite->callback = AnimWavyMusicNotesStep; } -static void sub_8102D8C(s16 a, s16 b, s16* c, s16* d, s8 e) +static void AnimWavyMusicNotesGetNextPos(s16 a, s16 b, s16* c, s16* d, s8 e) { int f; int g; @@ -5313,7 +5319,7 @@ static void sub_8102D8C(s16 a, s16 b, s16* c, s16* d, s8 e) *d = (b << 8) / g; } -static void sub_8102DE4(struct Sprite* sprite) +static void AnimWavyMusicNotesStep(struct Sprite* sprite) { s16 y, yDelta; u8 index; @@ -5339,14 +5345,14 @@ static void sub_8102DE4(struct Sprite* sprite) if (++sprite->data[1] > 3) sprite->data[1] = 0; - index = IndexOfSpritePaletteTag(gUnknown_08593020[sprite->data[1]][0]); + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[sprite->data[1]][0]); if (index != 0xFF) sprite->oam.paletteNum = index; } } } -void sub_8102EB0(struct Sprite* sprite) +void AnimFlyingMusicNotes(struct Sprite* sprite) { if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) gBattleAnimArgs[1] *= -1; @@ -5360,10 +5366,10 @@ void sub_8102EB0(struct Sprite* sprite) sprite->data[5] = sprite->pos1.y << 4; sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5; sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5; - sprite->callback = sub_8102F40; + sprite->callback = AnimFlyingMusicNotesStep; } -static void sub_8102F40(struct Sprite* sprite) +static void AnimFlyingMusicNotesStep(struct Sprite* sprite) { sprite->data[4] += sprite->data[6]; sprite->data[5] += sprite->data[7]; @@ -5382,7 +5388,7 @@ static void sub_8102F40(struct Sprite* sprite) DestroySpriteAndMatrix(sprite); } -void sub_8102FB8(struct Sprite* sprite) +void AnimBellyDrumHand(struct Sprite* sprite) { s16 a; if (gBattleAnimArgs[0] == 1) @@ -5402,14 +5408,14 @@ void sub_8102FB8(struct Sprite* sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -void sub_8103028(struct Sprite* sprite) +void AnimSlowFlyingMusicNotes(struct Sprite* sprite) { s16 xDiff; u8 index; SetSpriteCoordsToAnimAttackerCoords(sprite); sprite->pos1.y += 8; StartSpriteAnim(sprite, gBattleAnimArgs[1]); - index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[2]][0]); + index = IndexOfSpritePaletteTag(gParticlesColorBlendTable[gBattleAnimArgs[2]][0]); if (index != 0xFF) sprite->oam.paletteNum = index; @@ -5421,10 +5427,10 @@ void sub_8103028(struct Sprite* sprite) sprite->data[4] = sprite->data[3] - 40; InitAnimLinearTranslation(sprite); sprite->data[5] = gBattleAnimArgs[3]; - sprite->callback = sub_81030B0; + sprite->callback = AnimSlowFlyingMusicNotesStep; } -static void sub_81030B0(struct Sprite* sprite) +static void AnimSlowFlyingMusicNotesStep(struct Sprite* sprite) { if (AnimTranslateLinear(sprite) == 0) { @@ -5443,7 +5449,7 @@ static void sub_81030B0(struct Sprite* sprite) } } -void sub_810310C(u8 battler, struct Sprite* sprite) +void SetSpriteNextToMonHead(u8 battler, struct Sprite* sprite) { if (GetBattlerSide(battler) == B_SIDE_PLAYER) sprite->pos1.x = GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_RIGHT) + 8; @@ -5453,7 +5459,7 @@ void sub_810310C(u8 battler, struct Sprite* sprite) sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) - (s16)GetBattlerSpriteCoordAttr(battler, BATTLER_COORD_ATTR_HEIGHT) / 4; } -void sub_8103164(struct Sprite* sprite) +void AnimThoughtBubble(struct Sprite* sprite) { u8 a; u8 battler; @@ -5462,16 +5468,16 @@ void sub_8103164(struct Sprite* sprite) else battler = gBattleAnimTarget; - sub_810310C(battler, sprite); + SetSpriteNextToMonHead(battler, sprite); a = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1; sprite->data[0] = gBattleAnimArgs[1]; sprite->data[1] = a + 2; StartSpriteAnim(sprite, a); - StoreSpriteCallbackInData6(sprite, sub_81031D0); + StoreSpriteCallbackInData6(sprite, AnimThoughtBubbleStep); sprite->callback = RunStoredCallbackWhenAnimEnds; } -static void sub_81031D0(struct Sprite* sprite) +static void AnimThoughtBubbleStep(struct Sprite* sprite) { if (--sprite->data[0] == 0) { @@ -5481,7 +5487,7 @@ static void sub_81031D0(struct Sprite* sprite) } } -void sub_8103208(struct Sprite* sprite) +void AnimMetronomeFinger(struct Sprite* sprite) { u8 battler; if (gBattleAnimArgs[0] == 0) @@ -5489,13 +5495,13 @@ void sub_8103208(struct Sprite* sprite) else battler = gBattleAnimTarget; - sub_810310C(battler, sprite); + SetSpriteNextToMonHead(battler, sprite); sprite->data[0] = 0; - StoreSpriteCallbackInData6(sprite, sub_8103250); + StoreSpriteCallbackInData6(sprite, AnimMetronomeFingerStep); sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } -static void sub_8103250(struct Sprite* sprite) +static void AnimMetronomeFingerStep(struct Sprite* sprite) { if (++sprite->data[0] > 16) { @@ -5505,7 +5511,7 @@ static void sub_8103250(struct Sprite* sprite) } } -void sub_8103284(struct Sprite* sprite) +void AnimFollowMeFinger(struct Sprite* sprite) { u8 battler; if (gBattleAnimArgs[0] == 0) @@ -5523,17 +5529,17 @@ void sub_8103284(struct Sprite* sprite) sprite->data[2] = sprite->subpriority; sprite->data[3] = sprite->subpriority + 4; sprite->data[4] = 0; - StoreSpriteCallbackInData6(sprite, sub_8103300); + StoreSpriteCallbackInData6(sprite, AnimFollowMeFingerStep1); sprite->callback = RunStoredCallbackWhenAffineAnimEnds; } -static void sub_8103300(struct Sprite* sprite) +static void AnimFollowMeFingerStep1(struct Sprite* sprite) { if (++sprite->data[4] > 12) - sprite->callback = sub_8103320; + sprite->callback = AnimFollowMeFingerStep2; } -static void sub_8103320(struct Sprite* sprite) +static void AnimFollowMeFingerStep2(struct Sprite* sprite) { s16 x1, x2; @@ -5543,7 +5549,7 @@ static void sub_8103320(struct Sprite* sprite) if (--sprite->data[0] == 0) { sprite->pos2.x = 0; - sprite->callback = sub_8103250; + sprite->callback = AnimMetronomeFingerStep; return; } else @@ -5563,7 +5569,7 @@ static void sub_8103320(struct Sprite* sprite) sprite->pos2.x = (x1 >> 3) + (x2 >> 1); } -void sub_8103390(struct Sprite* sprite) +void AnimTauntFinger(struct Sprite* sprite) { u8 battler; if (gBattleAnimArgs[0] == 0) @@ -5571,7 +5577,7 @@ void sub_8103390(struct Sprite* sprite) else battler = gBattleAnimTarget; - sub_810310C(battler, sprite); + SetSpriteNextToMonHead(battler, sprite); if (GetBattlerSide(battler) == B_SIDE_PLAYER) { StartSpriteAnim(sprite, 0); @@ -5583,21 +5589,21 @@ void sub_8103390(struct Sprite* sprite) sprite->data[0] = 3; } - sprite->callback = sub_81033F0; + sprite->callback = AnimTauntFingerStep1; } -static void sub_81033F0(struct Sprite* sprite) +static void AnimTauntFingerStep1(struct Sprite* sprite) { if (++sprite->data[1] > 10) { sprite->data[1] = 0; StartSpriteAnim(sprite, sprite->data[0]); - StoreSpriteCallbackInData6(sprite, sub_810342C); + StoreSpriteCallbackInData6(sprite, AnimTauntFingerStep2); sprite->callback = RunStoredCallbackWhenAnimEnds; } } -static void sub_810342C(struct Sprite* sprite) +static void AnimTauntFingerStep2(struct Sprite* sprite) { if (++sprite->data[1] > 5) DestroyAnimSprite(sprite); diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 1add76bf3..273dedc38 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle_anim.h" #include "battle_interface.h" #include "decompress.h" @@ -23,93 +23,94 @@ void sub_8103620(struct Sprite *); void Anim_KinesisZapEnergy(struct Sprite *); void Anim_SwordsDanceBlade(struct Sprite *); void AnimSonicBoomProjectile(struct Sprite *); -void sub_8103AA4(struct Sprite *); +void AnimAirWaveProjectile(struct Sprite *); void sub_8103FE8(struct Sprite *); -void sub_8104088(struct Sprite *); -void sub_810413C(struct Sprite *); -void sub_81041C4(struct Sprite *); -void Anim_RazorWindTornado(struct Sprite *); -void Anim_ViceGripPincer(struct Sprite *); -void Anim_GuillotinePincer(struct Sprite *); -void Anim_BreathPuff(struct Sprite *); -void Anim_AngerMark(struct Sprite *); -void sub_810501C(struct Sprite *); -void sub_81051C4(struct Sprite *); -void sub_81052A4(struct Sprite *); -void sub_81054E8(struct Sprite *); -void sub_8105538(struct Sprite *); -void sub_8105C48(struct Sprite *); -void sub_8105DE8(struct Sprite *); -void sub_8105E60(struct Sprite *); -void sub_8106140(struct Sprite *); -void sub_81061C4(struct Sprite *); -void sub_810624C(struct Sprite *); +void AnimCoinThrow(struct Sprite *); +void AnimFallingCoin(struct Sprite *); +void AnimBulletSeed(struct Sprite *); +void AnimRazorWindTornado(struct Sprite *); +void AnimViceGripPincer(struct Sprite *); +void AnimGuillotinePincer(struct Sprite *); +void AnimBreathPuff(struct Sprite *); +void AnimAngerMark(struct Sprite *); +void AnimPencil(struct Sprite *); +void AnimBlendThinRing(struct Sprite *); +void AnimHyperVoiceRing(struct Sprite *); +void AnimUproarRing(struct Sprite *); +void AnimSoftBoiledEgg(struct Sprite *); +void AnimSpeedDust(struct Sprite *); +void AnimHealBellMusicNote(struct Sprite *); +void AnimMagentaHeart(struct Sprite *); +void AnimRedHeartProjectile(struct Sprite *); +void AnimParticuleBurst(struct Sprite *); +void AnimRedHeartRising(struct Sprite *); void AnimOrbitFast(struct Sprite *); void AnimOrbitScatter(struct Sprite *); -void sub_8106944(struct Sprite *); -void sub_81069B8(struct Sprite *); -void sub_81069D0(struct Sprite *); -void sub_8106AD0(struct Sprite *); -void sub_8106B54(struct Sprite *); -void sub_8106C80(struct Sprite *); -void sub_8106CD0(struct Sprite *); -void sub_8106E00(struct Sprite *); -void sub_8106F00(struct Sprite *); -void sub_8106F60(struct Sprite *); -void sub_81070AC(struct Sprite *); +void AnimSpitUpOrb(struct Sprite *); +void AnimEyeSparkle(struct Sprite *); +void AnimAngel(struct Sprite *); +void AnimPinkHeart(struct Sprite *); +void AnimDevil(struct Sprite *); +void AnimFurySwipes(struct Sprite *); +void AnimMovmentWaves(struct Sprite *); +void AnimJaggedMusicNote(struct Sprite *); +void AnimPerishSongMusicNote2(struct Sprite *); +void AnimPerishSongMusicNote(struct Sprite *); +void AnimGuardRing(struct Sprite *); static void sub_81034D8(struct Sprite *); static void sub_8103658(struct Sprite *); static void sub_8103680(struct Sprite *); static void AnimTask_WithdrawStep(u8); -static void Anim_SwordsDanceBladeStep(struct Sprite *); +static void AnimSwordsDanceBladeStep(struct Sprite *); static void sub_8104018(struct Sprite *); -static void sub_8104154(struct Sprite *); -static void sub_810421C(struct Sprite *); -static void sub_81042A0(struct Sprite *); -static void Anim_ViceGripPincerStep(struct Sprite *); -static void Anim_GuillotinePincerStep1(struct Sprite *); -static void Anim_GuillotinePincerStep2(struct Sprite *); -static void Anim_GuillotinePincerStep3(struct Sprite *); +static void AnimFallingCoin_Step(struct Sprite *); +static void AnimBulletSeed_Step1(struct Sprite *); +static void AnimBulletSeed_Step2(struct Sprite *); +static void AnimViceGripPincerStep(struct Sprite *); +static void AnimGuillotinePincerStep1(struct Sprite *); +static void AnimGuillotinePincerStep2(struct Sprite *); +static void AnimGuillotinePincerStep3(struct Sprite *); static void AnimTask_GrowAndGreyscaleStep(u8); static void AnimTask_MinimizeStep1(u8); static void CreateMinimizeSprite(struct Task *, u8); static void ClonedMinizeSprite_Step(struct Sprite *); static void AnimTask_SplashStep(u8); static void AnimTask_GrowAndShrinkStep(u8); -static void sub_8104C78(u8); -static void sub_8104D28(u8); -static void sub_8104F54(u8); -static void sub_8105078(struct Sprite *); -static void sub_810557C(struct Sprite *); -static void sub_81055F4(struct Sprite *); -static void sub_810561C(struct Sprite *); -static void sub_8105694(struct Sprite *); -static void sub_81056D4(struct Sprite *); -static void sub_810571C(struct Sprite *); -static void sub_810575C(struct Sprite *); -static void sub_81057B8(u8); -static void sub_8105878(u8); -static void sub_81059E0(u8); -static void sub_8105B08(u8); -static void sub_8105F30(u8); -static void sub_8105F84(u8); -static void sub_810618C(struct Sprite *); -static void sub_810627C(struct Sprite *); -static void sub_81063A8(u8); -static void sub_81065EC(u8); +static void ThrashMoveMonStep(u8); +static void ThrashMoveMon(u8); +static void AnimTask_SketchDrawMon(u8); +static void AnimPencil_Step(struct Sprite *); +static void AnimSoftBoiledEgg_Step1(struct Sprite *); +static void AnimSoftBoiledEgg_Step2(struct Sprite *); +static void AnimSoftBoiledEgg_Step3(struct Sprite *); +static void AnimSoftBoiledEgg_Step3_Callback1(struct Sprite *); +static void AnimSoftBoiledEgg_Step3_Callback2(struct Sprite *); +static void AnimSoftBoiledEgg_Step4(struct Sprite *); +static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *); +static void StretchAttacker_Step(u8); +static void ExtremeSpeedImpact_Step(u8); +static void ExtremeSpeedMonReappear_Step(u8); +static void SpeedDust_Step1(u8); +static void FakeOutStep1(u8); +static void FakeOutStep2(u8); +static void AnimRedHeartProjectile_Step(struct Sprite *); +static void AnimRedHeartRising_Step(struct Sprite *); +static void HeartsBackground_Step(u8); +static void ScaryFace_Step(u8); static void AnimOrbitFastStep(struct Sprite *); static void AnimOrbitScatterStep(struct Sprite *); -static void sub_8106D5C(struct Sprite *); -static void sub_8106DD4(u8); -static void sub_8106EC8(struct Sprite *); -static void sub_8107018(struct Sprite *); -static void sub_810703C(struct Sprite *); +static void AnimMovmentWaves_Step(struct Sprite *); +static void UproarDistortion_Step(u8); +static void AnimJaggedMusicNote_Step(struct Sprite *); +static void AnimPerishSongMusicNote_Step1(struct Sprite *); +static void AnimPerishSongMusicNote_Step2(struct Sprite *); +// Unused const struct SpriteTemplate gUnknown_08593264 = { .tileTag = ANIM_TAG_FINGER, .paletteTag = ANIM_TAG_FINGER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -127,17 +128,19 @@ const union AnimCmd *const gUnknown_08593284[] = gUnknown_0859327C, }; +// Unused const struct SpriteTemplate gUnknown_08593288 = { .tileTag = ANIM_TAG_MUSIC_NOTES, .paletteTag = ANIM_TAG_MUSIC_NOTES, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = sub_8103498, }; +// Unused const struct SpriteTemplate gUnknown_085932A0 = { .tileTag = 0, @@ -150,11 +153,12 @@ const struct SpriteTemplate gUnknown_085932A0 = }; extern const union AffineAnimCmd *const gUnknown_08597060[]; +// Unused const struct SpriteTemplate gUnknown_085932B8 = { .tileTag = ANIM_TAG_CLAMP, .paletteTag = ANIM_TAG_CLAMP, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597060, @@ -187,18 +191,19 @@ const union AffineAnimCmd *const gUnknown_08593300[] = gUnknown_085932E8, }; +// Unused const struct SpriteTemplate gUnknown_08593304 = { .tileTag = ANIM_TAG_EXPLOSION_6, .paletteTag = ANIM_TAG_EXPLOSION_6, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_085932E4, .images = NULL, .affineAnims = gUnknown_08593300, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; -const union AnimCmd gUnknown_0859331C[] = +const union AnimCmd gKinesisZapEnergyAnimCmds[] = { ANIMCMD_FRAME(0, 3, .hFlip = TRUE), ANIMCMD_FRAME(8, 3, .hFlip = TRUE), @@ -211,23 +216,23 @@ const union AnimCmd gUnknown_0859331C[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593340[] = +const union AnimCmd *const gKinesisZapEnergyAnimTable[] = { - gUnknown_0859331C, + gKinesisZapEnergyAnimCmds, }; const struct SpriteTemplate gKinesisZapEnergySpriteTemplate = { .tileTag = ANIM_TAG_ALERT, .paletteTag = ANIM_TAG_ALERT, - .oam = &gUnknown_08524934, - .anims = gUnknown_08593340, + .oam = &gOamData_AffineOff_ObjNormal_32x16, + .anims = gKinesisZapEnergyAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = Anim_KinesisZapEnergy, }; -const union AffineAnimCmd gUnknown_0859335C[] = +const union AffineAnimCmd gSwordsDanceBladeAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12), @@ -235,19 +240,19 @@ const union AffineAnimCmd gUnknown_0859335C[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_0859337C[] = +const union AffineAnimCmd *const gSwordsDanceBladeAffineAnimTable[] = { - gUnknown_0859335C, + gSwordsDanceBladeAffineAnimCmds, }; const struct SpriteTemplate gSwordsDanceBladeSpriteTemplate = { .tileTag = ANIM_TAG_SWORD, .paletteTag = ANIM_TAG_SWORD, - .oam = &gUnknown_08524ADC, + .oam = &gOamData_AffineNormal_ObjBlend_32x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_0859337C, + .affineAnims = gSwordsDanceBladeAffineAnimTable, .callback = Anim_SwordsDanceBlade, }; @@ -255,32 +260,32 @@ const struct SpriteTemplate gSonicBoomSpriteTemplate = { .tileTag = ANIM_TAG_AIR_WAVE, .paletteTag = ANIM_TAG_AIR_WAVE, - .oam = &gUnknown_08524B14, + .oam = &gOamData_AffineDouble_ObjBlend_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = AnimSonicBoomProjectile, }; -const struct SpriteTemplate gUnknown_085933B0 = +const struct SpriteTemplate gAirWaveProjectileSpriteTemplate = { .tileTag = ANIM_TAG_AIR_WAVE, .paletteTag = ANIM_TAG_AIR_WAVE, - .oam = &gUnknown_08524A54, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8103AA4, + .callback = AnimAirWaveProjectile, }; -const union AffineAnimCmd gUnknown_085933C8[] = +const union AffineAnimCmd gGrowingRingAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0), AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_085933E0[] = +const union AffineAnimCmd gWaterPulseRingAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10), AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10), @@ -292,24 +297,24 @@ const union AffineAnimCmd gUnknown_085933E0[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_08593420[] = +const union AffineAnimCmd *const gGrowingRingAffineAnimTable[] = { - gUnknown_085933C8, + gGrowingRingAffineAnimCmds, }; -const union AffineAnimCmd *const gUnknown_08593424[] = +const union AffineAnimCmd *const gWaterPulseRingAffineAnimTable[] = { - gUnknown_085933E0, + gWaterPulseRingAffineAnimCmds, }; const struct SpriteTemplate gSupersonicWaveSpriteTemplate = { .tileTag = ANIM_TAG_GOLD_RING, .paletteTag = ANIM_TAG_GOLD_RING, - .oam = &gUnknown_08524A14, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593420, + .affineAnims = gGrowingRingAffineAnimTable, .callback = TranslateAnimSpriteToTargetMonLocation, }; @@ -317,147 +322,148 @@ const struct SpriteTemplate gScreechWaveSpriteTemplate = { .tileTag = ANIM_TAG_PURPLE_RING, .paletteTag = ANIM_TAG_PURPLE_RING, - .oam = &gUnknown_08524A14, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593420, + .affineAnims = gGrowingRingAffineAnimTable, .callback = TranslateAnimSpriteToTargetMonLocation, }; -const struct SpriteTemplate gUnknown_08593458 = +const struct SpriteTemplate gMetalSoundSpriteTemplate = { .tileTag = ANIM_TAG_METAL_SOUND_WAVES, .paletteTag = ANIM_TAG_METAL_SOUND_WAVES, - .oam = &gUnknown_08524A1C, + .oam = &gOamData_AffineDouble_ObjNormal_32x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593420, + .affineAnims = gGrowingRingAffineAnimTable, .callback = TranslateAnimSpriteToTargetMonLocation, }; -const struct SpriteTemplate gUnknown_08593470 = +const struct SpriteTemplate gWaterPulseRingSpriteTemplate = { .tileTag = ANIM_TAG_BLUE_RING_2, .paletteTag = ANIM_TAG_BLUE_RING_2, - .oam = &gUnknown_08524A14, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593424, - .callback = sub_8108C94, + .affineAnims = gWaterPulseRingAffineAnimTable, + .callback = AnimWaterPulseRing, }; -const struct SpriteTemplate gUnknown_08593488 = +const struct SpriteTemplate gEggThrowSpriteTemplate = { .tileTag = ANIM_TAG_LARGE_FRESH_EGG, .paletteTag = ANIM_TAG_LARGE_FRESH_EGG, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A78AC, + .callback = AnimThrowProjectile, }; +// Unused const struct SpriteTemplate gUnknown_085934A0 = { .tileTag = ANIM_TAG_VOID_LINES, .paletteTag = ANIM_TAG_VOID_LINES, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = sub_8103FE8, }; -const union AnimCmd gUnknown_085934B8[] = +const union AnimCmd gCoinAnimCmds[] = { ANIMCMD_FRAME(8, 1), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_085934C0[] = +const union AnimCmd *const gCoinAnimTable[] = { - gUnknown_085934B8, + gCoinAnimCmds, }; -const union AffineAnimCmd gUnknown_085934C4[] = +const union AffineAnimCmd gFallingCoinAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_085934D4[] = +const union AffineAnimCmd *const gFallingCoinAffineAnimTable[] = { - gUnknown_085934C4, + gFallingCoinAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_085934D8 = +const struct SpriteTemplate gCoinThrowSpriteTemplate = { .tileTag = ANIM_TAG_COIN, .paletteTag = ANIM_TAG_COIN, - .oam = &gUnknown_0852496C, - .anims = gUnknown_085934C0, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gCoinAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8104088, + .callback = AnimCoinThrow, }; -const struct SpriteTemplate gUnknown_085934F0 = +const struct SpriteTemplate gFallingCoinSpriteTemplate = { .tileTag = ANIM_TAG_COIN, .paletteTag = ANIM_TAG_COIN, - .oam = &gUnknown_0852496C, - .anims = gUnknown_085934C0, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gCoinAnimTable, .images = NULL, - .affineAnims = gUnknown_085934D4, - .callback = sub_810413C, + .affineAnims = gFallingCoinAffineAnimTable, + .callback = AnimFallingCoin, }; -const union AffineAnimCmd gUnknown_08593508[] = +const union AffineAnimCmd gBulletSeedAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1), AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd *const gUnknown_08593518[] = +const union AffineAnimCmd *const gBulletSeedAffineAnimTable[] = { - gUnknown_08593508, + gBulletSeedAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_0859351C = +const struct SpriteTemplate gBulletSeedSpriteTemplate = { .tileTag = ANIM_TAG_SEED, .paletteTag = ANIM_TAG_SEED, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593518, - .callback = sub_81041C4, + .affineAnims = gBulletSeedAffineAnimTable, + .callback = AnimBulletSeed, }; -const union AffineAnimCmd gUnknown_08593534[] = +const union AffineAnimCmd gRazorWindTornadoAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0), AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_0859354C[] = +const union AffineAnimCmd *const gRazorWindTornadoAffineAnimTable[] = { - gUnknown_08593534, + gRazorWindTornadoAffineAnimCmds, }; const struct SpriteTemplate gRazorWindTornadoSpriteTemplate = { .tileTag = ANIM_TAG_GUST, .paletteTag = ANIM_TAG_GUST, - .oam = &gUnknown_085249BC, + .oam = &gOamData_AffineNormal_ObjNormal_32x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_0859354C, - .callback = Anim_RazorWindTornado, + .affineAnims = gRazorWindTornadoAffineAnimTable, + .callback = AnimRazorWindTornado, }; -const union AnimCmd gUnknown_08593568[] = +const union AnimCmd gViceGripAnimCmds1[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(16, 3), @@ -465,7 +471,7 @@ const union AnimCmd gUnknown_08593568[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_08593578[] = +const union AnimCmd gViceGripAnimCmds2[] = { ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE), ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE), @@ -473,24 +479,24 @@ const union AnimCmd gUnknown_08593578[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593588[] = +const union AnimCmd *const gViceGripAnimTable[] = { - gUnknown_08593568, - gUnknown_08593578, + gViceGripAnimCmds1, + gViceGripAnimCmds2, }; const struct SpriteTemplate gViceGripSpriteTemplate = { .tileTag = ANIM_TAG_CUT, .paletteTag = ANIM_TAG_CUT, - .oam = &gUnknown_08524A34, - .anims = gUnknown_08593588, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gViceGripAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = Anim_ViceGripPincer, + .callback = AnimViceGripPincer, }; -const union AnimCmd gUnknown_085935A8[] = +const union AnimCmd gGuillotineAnimCmds1[] = { ANIMCMD_FRAME(0, 2), ANIMCMD_FRAME(16, 2), @@ -498,7 +504,7 @@ const union AnimCmd gUnknown_085935A8[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_085935B8[] = +const union AnimCmd gGuillotineAnimCmds2[] = { ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE), ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE), @@ -506,21 +512,21 @@ const union AnimCmd gUnknown_085935B8[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_085935C8[] = +const union AnimCmd *const gGuillotineAnimTable[] = { - gUnknown_085935A8, - gUnknown_085935B8, + gGuillotineAnimCmds1, + gGuillotineAnimCmds2, }; const struct SpriteTemplate gGuillotineSpriteTemplate = { .tileTag = ANIM_TAG_CUT, .paletteTag = ANIM_TAG_CUT, - .oam = &gUnknown_08524A34, - .anims = gUnknown_085935C8, + .oam = &gOamData_AffineOff_ObjBlend_32x32, + .anims = gGuillotineAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = Anim_GuillotinePincer, + .callback = AnimGuillotinePincer, }; const union AffineAnimCmd gSplashEffectAffineAnimCmds[] = @@ -539,7 +545,7 @@ const union AffineAnimCmd gGrowAndShrinkAffineAnimCmds[] = AFFINEANIMCMD_END, }; -const union AnimCmd gUnknown_08593628[] = +const union AnimCmd gBreathPuffAnimCmds1[] = { ANIMCMD_FRAME(0, 4, .hFlip = TRUE), ANIMCMD_FRAME(4, 40, .hFlip = TRUE), @@ -548,7 +554,7 @@ const union AnimCmd gUnknown_08593628[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_0859363C[] = +const union AnimCmd gBreathPuffAnimCmds2[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(4, 40), @@ -557,47 +563,47 @@ const union AnimCmd gUnknown_0859363C[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593650[] = +const union AnimCmd *const gBreathPuffAnimTable[] = { - gUnknown_08593628, - gUnknown_0859363C, + gBreathPuffAnimCmds1, + gBreathPuffAnimCmds2, }; const struct SpriteTemplate gBreathPuffSpriteTemplate = { .tileTag = ANIM_TAG_BREATH, .paletteTag = ANIM_TAG_BREATH, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08593650, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gBreathPuffAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = Anim_BreathPuff, + .callback = AnimBreathPuff, }; -const union AffineAnimCmd gUnknown_08593670[] = +const union AffineAnimCmd gAngerMarkAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8), AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_08593688[] = +const union AffineAnimCmd *const gAngerMarkAffineAnimTable[] = { - gUnknown_08593670, + gAngerMarkAffineAnimCmds, }; const struct SpriteTemplate gAngerMarkSpriteTemplate = { .tileTag = ANIM_TAG_ANGER, .paletteTag = ANIM_TAG_ANGER, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593688, - .callback = Anim_AngerMark, + .affineAnims = gAngerMarkAffineAnimTable, + .callback = AnimAngerMark, }; -const union AffineAnimCmd gUnknown_085936A4[] = +const union AffineAnimCmd gThrashMoveMonAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(-10, 9, 0, 7), AFFINEANIMCMD_FRAME(20, -20, 0, 7), @@ -607,29 +613,29 @@ const union AffineAnimCmd gUnknown_085936A4[] = AFFINEANIMCMD_END, }; -const struct SpriteTemplate gUnknown_085936D4 = +const struct SpriteTemplate gPencilSpriteTemplate = { .tileTag = ANIM_TAG_PENCIL, .paletteTag = ANIM_TAG_PENCIL, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810501C, + .callback = AnimPencil, }; -const struct SpriteTemplate gUnknown_085936EC = +const struct SpriteTemplate gSnoreZSpriteTemplate = { .tileTag = ANIM_TAG_SNORE_Z, .paletteTag = ANIM_TAG_SNORE_Z, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A7938, + .callback = AnimSnoreZ, }; -const union AnimCmd gUnknown_08593704[] = +const union AnimCmd gExplosionAnimCmds[] = { ANIMCMD_FRAME(0, 5), ANIMCMD_FRAME(16, 5), @@ -638,23 +644,23 @@ const union AnimCmd gUnknown_08593704[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593718[] = +const union AnimCmd *const gExplosionAnimTable[] = { - gUnknown_08593704, + gExplosionAnimCmds, }; -//* -const struct SpriteTemplate gBattleAnimSpriteTemplate_859371C = + +const struct SpriteTemplate gExplosionSpriteTemplate = { .tileTag = ANIM_TAG_EXPLOSION, .paletteTag = ANIM_TAG_EXPLOSION, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593718, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gExplosionAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; -const union AffineAnimCmd gUnknown_08593734[] = +const union AffineAnimCmd gSoftBoiledEggAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2), AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4), @@ -662,13 +668,13 @@ const union AffineAnimCmd gUnknown_08593734[] = AFFINEANIMCMD_JUMP(0), }; -const union AffineAnimCmd gUnknown_08593754[] = +const union AffineAnimCmd gSoftBoiledEggAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08593764[] = +const union AffineAnimCmd gSoftBoiledEggAffineAnimCmds3[] = { AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8), AFFINEANIMCMD_LOOP(0), @@ -680,130 +686,130 @@ const union AffineAnimCmd gUnknown_08593764[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_085937A4[] = +const union AffineAnimCmd *const gSoftBoiledEggAffineAnimTable[] = { - gUnknown_08593734, - gUnknown_08593754, - gUnknown_08593764, + gSoftBoiledEggAffineAnimCmds1, + gSoftBoiledEggAffineAnimCmds2, + gSoftBoiledEggAffineAnimCmds3, }; -//* -const struct SpriteTemplate gUnknown_085937B0 = + +const struct SpriteTemplate gSoftBoiledEggSpriteTemplate = { .tileTag = ANIM_TAG_BREAKING_EGG, .paletteTag = ANIM_TAG_BREAKING_EGG, - .oam = &gUnknown_08524AF4, + .oam = &gOamData_AffineDouble_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_085937A4, - .callback = sub_8105538, + .affineAnims = gSoftBoiledEggAffineAnimTable, + .callback = AnimSoftBoiledEgg, }; -const union AffineAnimCmd gUnknown_085937C8[] = +const union AffineAnimCmd gThinRingExpandingAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30), AFFINEANIMCMD_END_ALT(1), }; -const union AffineAnimCmd gUnknown_085937E0[] = +const union AffineAnimCmd gThinRingExpandingAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15), AFFINEANIMCMD_END_ALT(1), }; -const union AffineAnimCmd gUnknown_085937F8[] = +const union AffineAnimCmd gHyperVoiceRingAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0), AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45), AFFINEANIMCMD_END_ALT(1), }; -const union AffineAnimCmd *const gUnknown_08593810[] = +const union AffineAnimCmd *const gThinRingExpandingAffineAnimTable[] = { - gUnknown_085937C8, - gUnknown_085937E0, + gThinRingExpandingAffineAnimCmds1, + gThinRingExpandingAffineAnimCmds2, }; -const union AffineAnimCmd *const gUnknown_08593818[] = +const union AffineAnimCmd *const gHyperVoiceRingAffineAnimTable[] = { - gUnknown_085937F8, + gHyperVoiceRingAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_0859381C = +const struct SpriteTemplate gThinRingExpandingSpriteTemplate = { .tileTag = ANIM_TAG_THIN_RING, .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593810, - .callback = sub_80A77C8, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimSpriteOnMonPos, }; -//* -const union AffineAnimCmd gUnknown_08593834[] = + +const union AffineAnimCmd gThinRingShrinkingAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30), AFFINEANIMCMD_END_ALT(1), }; -const union AffineAnimCmd *const gUnknown_0859384C[] = +const union AffineAnimCmd *const gThinRingShrinkingAffineAnimTable[] = { - gUnknown_08593834, + gThinRingShrinkingAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_08593850 = +const struct SpriteTemplate gThinRingShrinkingSpriteTemplate = { .tileTag = ANIM_TAG_THIN_RING, .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_0859384C, - .callback = sub_80A77C8, + .affineAnims = gThinRingShrinkingAffineAnimTable, + .callback = AnimSpriteOnMonPos, }; -const struct SpriteTemplate gUnknown_08593868 = +const struct SpriteTemplate gBlendThinRingExpandingSpriteTemplate = { .tileTag = ANIM_TAG_THIN_RING, .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593810, - .callback = sub_81051C4, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimBlendThinRing, }; -const struct SpriteTemplate gUnknown_08593880 = +const struct SpriteTemplate gHyperVoiceRingSpriteTemplate = { .tileTag = ANIM_TAG_THIN_RING, .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593818, - .callback = sub_81052A4, + .affineAnims = gHyperVoiceRingAffineAnimTable, + .callback = AnimHyperVoiceRing, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_8593898 = +const struct SpriteTemplate gUproarRingSpriteTemplate = { .tileTag = ANIM_TAG_THIN_RING, .paletteTag = ANIM_TAG_THIN_RING, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593810, - .callback = sub_81054E8, + .affineAnims = gThinRingExpandingAffineAnimTable, + .callback = AnimUproarRing, }; -const union AffineAnimCmd gUnknown_085938B0[] = +const union AffineAnimCmd gStretchAttackerAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(96, -13, 0, 8), AFFINEANIMCMD_END, }; -const union AnimCmd gUnknown_085938C0[] = +const union AnimCmd gSpeedDustAnimCmds[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_FRAME(4, 3), @@ -813,23 +819,23 @@ const union AnimCmd gUnknown_085938C0[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_085938D8[] = +const union AnimCmd *const gSpeedDustAnimTable[] = { - gUnknown_085938C0, + gSpeedDustAnimCmds, }; -const struct SpriteTemplate gUnknown_085938DC = +const struct SpriteTemplate gSpeedDustSpriteTemplate = { .tileTag = ANIM_TAG_SPEED_DUST, .paletteTag = ANIM_TAG_SPEED_DUST, - .oam = &gUnknown_0852490C, - .anims = gUnknown_085938D8, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gSpeedDustAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105C48, + .callback = AnimSpeedDust, }; -const s8 gUnknown_085938F4[][2] = +const s8 gSpeedDustPosTable[][2] = { {30, 28}, {-20, 24}, @@ -837,7 +843,7 @@ const s8 gUnknown_085938F4[][2] = {-10, 28}, }; -const union AnimCmd gUnknown_085938FC[] = +const union AnimCmd gBellAnimCmds[] = { ANIMCMD_FRAME(0, 6), ANIMCMD_FRAME(16, 6), @@ -855,49 +861,49 @@ const union AnimCmd gUnknown_085938FC[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593934[] = +const union AnimCmd *const gBellAnimTable[] = { - gUnknown_085938FC, + gBellAnimCmds, }; -const struct SpriteTemplate gUnknown_08593938 = +const struct SpriteTemplate gBellSpriteTemplate = { .tileTag = ANIM_TAG_BELL, .paletteTag = ANIM_TAG_BELL, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593934, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gBellAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; -const u16 gUnknown_08593950[] = +const u16 gMusicNotePaletteTagsTable[] = { ANIM_TAG_MUSIC_NOTES_2, ANIM_SPRITES_START - 1, ANIM_SPRITES_START - 2, }; -const struct SpriteTemplate gUnknown_08593958 = +const struct SpriteTemplate gHealBellMusicNoteSpriteTemplate = { .tileTag = ANIM_TAG_MUSIC_NOTES_2, .paletteTag = ANIM_TAG_MUSIC_NOTES_2, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105DE8, + .callback = AnimHealBellMusicNote, }; const struct SpriteTemplate gMagentaHeartSpriteTemplate = { .tileTag = ANIM_TAG_MAGENTA_HEART, .paletteTag = ANIM_TAG_MAGENTA_HEART, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8105E60, + .callback = AnimMagentaHeart, }; const union AffineAnimCmd gUnknown_08593988[] = @@ -907,59 +913,59 @@ const union AffineAnimCmd gUnknown_08593988[] = AFFINEANIMCMD_END, }; -const struct SpriteTemplate gUnknown_085939A0 = +const struct SpriteTemplate gRedHeartProjectileSpriteTemplate = { .tileTag = ANIM_TAG_RED_HEART, .paletteTag = ANIM_TAG_RED_HEART, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106140, + .callback = AnimRedHeartProjectile, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_85939B8 = +const struct SpriteTemplate gRedHeartBurstSpriteTemplate = { .tileTag = ANIM_TAG_RED_HEART, .paletteTag = ANIM_TAG_RED_HEART, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81061C4, + .callback = AnimParticuleBurst, }; -const struct SpriteTemplate gUnknown_085939D0 = +const struct SpriteTemplate gRedHeartRisingSpriteTemplate = { .tileTag = ANIM_TAG_RED_HEART, .paletteTag = ANIM_TAG_RED_HEART, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_810624C, + .callback = AnimRedHeartRising, }; -const union AffineAnimCmd gUnknown_085939E8[] = +const union AffineAnimCmd gHiddenPowerOrbAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd *const gUnknown_08593A00[] = +const union AffineAnimCmd *const gHiddenPowerOrbAffineAnimTable[] = { - gUnknown_085939E8, + gHiddenPowerOrbAffineAnimCmds, }; const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate = { .tileTag = ANIM_TAG_RED_ORB, .paletteTag = ANIM_TAG_RED_ORB, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593A00, + .affineAnims = gHiddenPowerOrbAffineAnimTable, .callback = AnimOrbitFast, }; @@ -967,37 +973,37 @@ const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate = { .tileTag = ANIM_TAG_RED_ORB, .paletteTag = ANIM_TAG_RED_ORB, - .oam = &gUnknown_085249CC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593A00, + .affineAnims = gHiddenPowerOrbAffineAnimTable, .callback = AnimOrbitScatter, }; -const union AffineAnimCmd gUnknown_08593A34[] = +const union AffineAnimCmd gSpitUpOrbAffineAnimCmds[] = { AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0), AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1), AFFINEANIMCMD_JUMP(1), }; -const union AffineAnimCmd *const gUnknown_08593A4C[] = +const union AffineAnimCmd *const gSpitUpOrbAffineAnimTable[] = { - gUnknown_08593A34, + gSpitUpOrbAffineAnimCmds, }; -const struct SpriteTemplate gUnknown_08593A50 = +const struct SpriteTemplate gSpitUpOrbSpriteTemplate = { .tileTag = ANIM_TAG_RED_ORB_2, .paletteTag = ANIM_TAG_RED_ORB_2, - .oam = &gUnknown_085249C4, + .oam = &gOamData_AffineDouble_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593A4C, - .callback = sub_8106944, + .affineAnims = gSpitUpOrbAffineAnimTable, + .callback = AnimSpitUpOrb, }; -const union AnimCmd gUnknown_08593A68[] = +const union AnimCmd gEyeSparkleAnimCmds[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_FRAME(4, 4), @@ -1007,82 +1013,82 @@ const union AnimCmd gUnknown_08593A68[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593A80[] = +const union AnimCmd *const gEyeSparkleAnimTable[] = { - gUnknown_08593A68, + gEyeSparkleAnimCmds, }; -const struct SpriteTemplate gUnknown_08593A84 = +const struct SpriteTemplate gEyeSparkleSpriteTemplate = { .tileTag = ANIM_TAG_EYE_SPARKLE, .paletteTag = ANIM_TAG_EYE_SPARKLE, - .oam = &gUnknown_0852490C, - .anims = gUnknown_08593A80, + .oam = &gOamData_AffineOff_ObjNormal_16x16, + .anims = gEyeSparkleAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81069B8, + .callback = AnimEyeSparkle, }; -const union AnimCmd gUnknown_08593A9C[] = +const union AnimCmd gAngelSpriteAnimCmds[] = { ANIMCMD_FRAME(0, 24), ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593AA4[] = +const union AnimCmd *const gAngelSpriteAnimTable[] = { - gUnknown_08593A9C, + gAngelSpriteAnimCmds, }; -const struct SpriteTemplate gUnknown_08593AA8 = +const struct SpriteTemplate gAngelSpriteTemplate = { .tileTag = ANIM_TAG_ANGEL, .paletteTag = ANIM_TAG_ANGEL, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593AA4, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gAngelSpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81069D0, + .callback = AnimAngel, }; -const struct SpriteTemplate gUnknown_08593AC0 = +const struct SpriteTemplate gPinkHeartSpriteTemplate = { .tileTag = ANIM_TAG_PINK_HEART, .paletteTag = ANIM_TAG_PINK_HEART, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106AD0, + .callback = AnimPinkHeart, }; -const union AnimCmd gUnknown_08593AD8[] = +const union AnimCmd gDevilAnimCmds1[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_JUMP(0), }; -const union AnimCmd gUnknown_08593AE0[] = +const union AnimCmd gDevilAnimCmds2[] = { ANIMCMD_FRAME(16, 3), ANIMCMD_JUMP(0), }; -const union AnimCmd *const gUnknown_08593AE8[] = +const union AnimCmd *const gDevilAnimTable[] = { - gUnknown_08593AD8, - gUnknown_08593AE0, + gDevilAnimCmds1, + gDevilAnimCmds2, }; -const struct SpriteTemplate gUnknown_08593AF0 = +const struct SpriteTemplate gDevilSpriteTemplate = { .tileTag = ANIM_TAG_DEVIL, .paletteTag = ANIM_TAG_DEVIL, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593AE8, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gDevilAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106B54, + .callback = AnimDevil, }; const union AnimCmd gUnknown_08593B08[] = @@ -1103,24 +1109,24 @@ const union AnimCmd gUnknown_08593B1C[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593B30[] = +const union AnimCmd *const gFurySwipesAnimTable[] = { gUnknown_08593B08, gUnknown_08593B1C, }; -const struct SpriteTemplate gUnknown_08593B38 = +const struct SpriteTemplate gFurySwipesSpriteTemplate = { .tileTag = ANIM_TAG_SWIPE, .paletteTag = ANIM_TAG_SWIPE, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593B30, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gFurySwipesAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106C80, + .callback = AnimFurySwipes, }; -const union AnimCmd gUnknown_08593B50[] = +const union AnimCmd gMovementWavesAnimCmds1[] = { ANIMCMD_FRAME(0, 8), ANIMCMD_FRAME(16, 8), @@ -1129,7 +1135,7 @@ const union AnimCmd gUnknown_08593B50[] = ANIMCMD_END, }; -const union AnimCmd gUnknown_08593B64[] = +const union AnimCmd gMovementWavesAnimCmds2[] = { ANIMCMD_FRAME(16, 8, .hFlip = TRUE), ANIMCMD_FRAME(32, 8, .hFlip = TRUE), @@ -1138,21 +1144,21 @@ const union AnimCmd gUnknown_08593B64[] = ANIMCMD_END, }; -const union AnimCmd *const gUnknown_08593B78[] = +const union AnimCmd *const gMovementWavesAnimTable[] = { - gUnknown_08593B50, - gUnknown_08593B64, + gMovementWavesAnimCmds1, + gMovementWavesAnimCmds2, }; -const struct SpriteTemplate gUnknown_08593B80 = +const struct SpriteTemplate gMovementWavesSpriteTemplate = { .tileTag = ANIM_TAG_MOVEMENT_WAVES, .paletteTag = ANIM_TAG_MOVEMENT_WAVES, - .oam = &gUnknown_08524914, - .anims = gUnknown_08593B78, + .oam = &gOamData_AffineOff_ObjNormal_32x32, + .anims = gMovementWavesAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106CD0, + .callback = AnimMovmentWaves, }; const union AffineAnimCmd gUnknown_08593B98[] = @@ -1163,92 +1169,92 @@ const union AffineAnimCmd gUnknown_08593B98[] = AFFINEANIMCMD_END, }; -const struct SpriteTemplate gBattleAnimSpriteTemplate_8593BB8 = +const struct SpriteTemplate gJaggedMusicNoteSpriteTemplate = { .tileTag = ANIM_TAG_JAGGED_MUSIC_NOTE, .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_8106E00, + .callback = AnimJaggedMusicNote, }; -const union AffineAnimCmd gUnknown_08593BD0[] = +const union AffineAnimCmd gPerishSongMusicNoteAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08593BE0[] = +const union AffineAnimCmd gPerishSongMusicNoteAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16), AFFINEANIMCMD_END_ALT(1), }; -const union AffineAnimCmd gUnknown_08593BF0[] = +const union AffineAnimCmd gPerishSongMusicNoteAffineAnimCmds3[] = { AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16), AFFINEANIMCMD_END_ALT(1), }; -const union AffineAnimCmd *const gUnknown_08593C00[] = +const union AffineAnimCmd *const gPerishSongMusicNoteAffineAnimTable[] = { - gUnknown_08593BD0, - gUnknown_08593BE0, - gUnknown_08593BF0, + gPerishSongMusicNoteAffineAnimCmds1, + gPerishSongMusicNoteAffineAnimCmds2, + gPerishSongMusicNoteAffineAnimCmds3, }; -extern const union AnimCmd *const gUnknown_08592FCC[]; -const struct SpriteTemplate gUnknown_08593C0C = +extern const union AnimCmd *const gMusicNotesAnimTable[]; +const struct SpriteTemplate gPerishSongMusicNoteSpriteTemplate = { .tileTag = ANIM_TAG_MUSIC_NOTES_2, .paletteTag = ANIM_TAG_MUSIC_NOTES_2, - .oam = &gUnknown_0852496C, - .anims = gUnknown_08592FCC, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, .images = NULL, - .affineAnims = gUnknown_08593C00, - .callback = sub_8106F60, + .affineAnims = gPerishSongMusicNoteAffineAnimTable, + .callback = AnimPerishSongMusicNote, }; -const struct SpriteTemplate gUnknown_08593C24 = +const struct SpriteTemplate gPerishSongMusicNote2SpriteTemplate = { .tileTag = ANIM_TAG_MUSIC_NOTES_2, .paletteTag = ANIM_TAG_MUSIC_NOTES_2, - .oam = &gUnknown_0852496C, - .anims = gUnknown_08592FCC, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, + .anims = gMusicNotesAnimTable, .images = NULL, - .affineAnims = gUnknown_08593C00, - .callback = sub_8106F00, + .affineAnims = gPerishSongMusicNoteAffineAnimTable, + .callback = AnimPerishSongMusicNote2, }; -const union AffineAnimCmd gUnknown_08593C3C[] = +const union AffineAnimCmd gGuardRingAffineAnimCmds1[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), AFFINEANIMCMD_END, }; -const union AffineAnimCmd gUnknown_08593C4C[] = +const union AffineAnimCmd gGuardRingAffineAnimCmds2[] = { AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0), AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gUnknown_08593C5C[] = +const union AffineAnimCmd *const gGuardRingAffineAnimTable[] = { - gUnknown_08593C3C, - gUnknown_08593C4C, + gGuardRingAffineAnimCmds1, + gGuardRingAffineAnimCmds2, }; -const struct SpriteTemplate gUnknown_08593C64 = +const struct SpriteTemplate gGuardRingSpriteTemplate = { .tileTag = ANIM_TAG_GUARD_RING, .paletteTag = ANIM_TAG_GUARD_RING, - .oam = &gUnknown_08524B1C, + .oam = &gOamData_AffineDouble_ObjBlend_64x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593C5C, - .callback = sub_81070AC, + .affineAnims = gGuardRingAffineAnimTable, + .callback = AnimGuardRing, }; void sub_8103448(struct Sprite *sprite) @@ -1273,7 +1279,7 @@ void sub_8103498(struct Sprite *sprite) else battler = gBattleAnimTarget; - sub_810310C(battler, sprite); + SetSpriteNextToMonHead(battler, sprite); sprite->data[0] = 0; sprite->data[1] = 0; sprite->callback = sub_81034D8; @@ -1450,10 +1456,10 @@ void Anim_SwordsDanceBlade(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, FALSE); sprite->callback = RunStoredCallbackWhenAffineAnimEnds; - StoreSpriteCallbackInData6(sprite, Anim_SwordsDanceBladeStep); + StoreSpriteCallbackInData6(sprite, AnimSwordsDanceBladeStep); } -static void Anim_SwordsDanceBladeStep(struct Sprite *sprite) +static void AnimSwordsDanceBladeStep(struct Sprite *sprite) { sprite->data[0] = 6; sprite->data[2] = sprite->pos1.x; @@ -1502,7 +1508,7 @@ void AnimSonicBoomProjectile(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -static void sub_81039CC(struct Sprite *sprite) +static void AnimAirWaveProjectile_Step2(struct Sprite *sprite) { if (sprite->data[0]-- <= 0) { @@ -1511,7 +1517,7 @@ static void sub_81039CC(struct Sprite *sprite) } } -static void sub_8103A00(struct Sprite *sprite) +static void AnimAirWaveProjectile_Step1(struct Sprite *sprite) { struct Task* task = &gTasks[sprite->data[7]]; if (sprite->data[0] > task->data[5]) @@ -1540,11 +1546,11 @@ static void sub_8103A00(struct Sprite *sprite) if (sprite->data[0]-- <= 0) { sprite->data[0] = 30; - sprite->callback = sub_81039CC; + sprite->callback = AnimAirWaveProjectile_Step2; } } -void sub_8103AA4(struct Sprite *sprite) +void AnimAirWaveProjectile(struct Sprite *sprite) { s16 a; s16 b; @@ -1588,23 +1594,23 @@ void sub_8103AA4(struct Sprite *sprite) sprite->data[5] = 0; sprite->data[3] = sub_8151534(sub_8151534(b, a), sub_8151624(0x1C0)); sprite->data[4] = sub_8151534(sub_8151534(c, a), sub_8151624(0x1C0)); - sprite->callback = sub_8103A00; + sprite->callback = AnimAirWaveProjectile_Step1; } } -static void sub_8103BE4(u8 taskId) +static void AirCutterProjectileStep2(u8 taskId) { if (gTasks[taskId].data[1] == 0) DestroyAnimVisualTask(taskId); } -static void sub_8103C0C(u8 taskId) +static void AirCutterProjectileStep1(u8 taskId) { if (gTasks[taskId].data[0]-- <= 0) { u8 spriteId; struct Sprite *sprite; - spriteId = CreateSprite(&gUnknown_085933B0, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); + spriteId = CreateSprite(&gAirWaveProjectileSpriteTemplate, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]); sprite = &gSprites[spriteId]; switch (gTasks[taskId].data[4]) { @@ -1623,11 +1629,11 @@ static void sub_8103C0C(u8 taskId) gTasks[taskId].data[1]++; PlaySE12WithPanning(SE_W059B, BattleAnimAdjustPanning(-63)); if (gTasks[taskId].data[1] > 2) - gTasks[taskId].func = sub_8103BE4; + gTasks[taskId].func = AirCutterProjectileStep2; } } -void sub_8103CF0(u8 taskId) +void AnimTask_AirCutterProjectile(u8 taskId) { s16 attackerY = 0; s16 attackerX = 0; @@ -1724,7 +1730,7 @@ void sub_8103CF0(u8 taskId) if (gTasks[taskId].data[2] < 3) gTasks[taskId].data[2] = 3; - gTasks[taskId].func = sub_8103C0C; + gTasks[taskId].func = AirCutterProjectileStep1; } void sub_8103FE8(struct Sprite *sprite) @@ -1754,7 +1760,7 @@ static void sub_8104018(struct Sprite *sprite) } } -void sub_8104088(struct Sprite *sprite) +void AnimCoinThrow(struct Sprite *sprite) { s16 r6; s16 r7; @@ -1777,14 +1783,14 @@ void sub_8104088(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -void sub_810413C(struct Sprite *sprite) +void AnimFallingCoin(struct Sprite *sprite) { sprite->data[2] = -16; sprite->pos1.y += 8; - sprite->callback = sub_8104154; + sprite->callback = AnimFallingCoin_Step; } -static void sub_8104154(struct Sprite *sprite) +static void AnimFallingCoin_Step(struct Sprite *sprite) { sprite->data[0] += 0x80; sprite->pos2.x = sprite->data[0] >> 8; @@ -1802,7 +1808,7 @@ static void sub_8104154(struct Sprite *sprite) } } -void sub_81041C4(struct Sprite *sprite) +void AnimBulletSeed(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = 20; @@ -1810,10 +1816,10 @@ void sub_81041C4(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); sprite->callback = StartAnimLinearTranslation; sprite->affineAnimPaused = 1; - StoreSpriteCallbackInData6(sprite, sub_810421C); + StoreSpriteCallbackInData6(sprite, AnimBulletSeed_Step1); } -static void sub_810421C(struct Sprite *sprite) +static void AnimBulletSeed_Step1(struct Sprite *sprite) { int i; u16 rand; @@ -1831,11 +1837,11 @@ static void sub_810421C(struct Sprite *sprite) sprite->data[6] = 0xFFF4 - (rand & 7); rand = Random2(); sprite->data[7] = (rand % 0xA0) + 0xA0; - sprite->callback = sub_81042A0; + sprite->callback = AnimBulletSeed_Step2; sprite->affineAnimPaused = 0; } -static void sub_81042A0(struct Sprite *sprite) +static void AnimBulletSeed_Step2(struct Sprite *sprite) { sprite->data[0] += sprite->data[7]; sprite->pos2.x = sprite->data[0] >> 8; @@ -1861,7 +1867,7 @@ static void sub_81042A0(struct Sprite *sprite) // arg 4: initial wave offset // arg 5: wave period (higher means faster wave) // arg 6: duration -void Anim_RazorWindTornado(struct Sprite *sprite) +void AnimRazorWindTornado(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, FALSE); if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) @@ -1879,7 +1885,7 @@ void Anim_RazorWindTornado(struct Sprite *sprite) // Animates a single pincer line that extends towards the center of the target mon. // arg 0: invert -void Anim_ViceGripPincer(struct Sprite *sprite) +void AnimViceGripPincer(struct Sprite *sprite) { s16 startXOffset = 32; s16 startYOffset = -32; @@ -1900,10 +1906,10 @@ void Anim_ViceGripPincer(struct Sprite *sprite) sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + endXOffset; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + endYOffset; sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, Anim_ViceGripPincerStep); + StoreSpriteCallbackInData6(sprite, AnimViceGripPincerStep); } -static void Anim_ViceGripPincerStep(struct Sprite *sprite) +static void AnimViceGripPincerStep(struct Sprite *sprite) { if (sprite->animEnded) DestroyAnimSprite(sprite); @@ -1911,7 +1917,7 @@ static void Anim_ViceGripPincerStep(struct Sprite *sprite) // Animates a single pincer line that extends towards the center of the target mon, and then back out. // arg 0: animation id -void Anim_GuillotinePincer(struct Sprite *sprite) +void AnimGuillotinePincer(struct Sprite *sprite) { s16 startXOffset = 32; s16 startYOffset = -32; @@ -1936,10 +1942,10 @@ void Anim_GuillotinePincer(struct Sprite *sprite) InitAnimLinearTranslation(sprite); sprite->data[5] = gBattleAnimArgs[0]; sprite->data[6] = sprite->data[0]; - sprite->callback = Anim_GuillotinePincerStep1; + sprite->callback = AnimGuillotinePincerStep1; } -static void Anim_GuillotinePincerStep1(struct Sprite *sprite) +static void AnimGuillotinePincerStep1(struct Sprite *sprite) { if (AnimTranslateLinear(sprite) && sprite->animEnded) { @@ -1954,11 +1960,11 @@ static void Anim_GuillotinePincerStep1(struct Sprite *sprite) sprite->data[2] ^= 1; sprite->data[4] = 0; sprite->data[3] = 0; - sprite->callback = Anim_GuillotinePincerStep2; + sprite->callback = AnimGuillotinePincerStep2; } } -static void Anim_GuillotinePincerStep2(struct Sprite *sprite) +static void AnimGuillotinePincerStep2(struct Sprite *sprite) { if (sprite->data[3]) { @@ -1975,11 +1981,11 @@ static void Anim_GuillotinePincerStep2(struct Sprite *sprite) sprite->data[3] = 0; sprite->animPaused = 0; StartSpriteAnim(sprite, sprite->data[5] ^ 1); - sprite->callback = Anim_GuillotinePincerStep3; + sprite->callback = AnimGuillotinePincerStep3; } } -static void Anim_GuillotinePincerStep3(struct Sprite *sprite) +static void AnimGuillotinePincerStep3(struct Sprite *sprite) { if (AnimTranslateLinear(sprite)) DestroyAnimSprite(sprite); @@ -2229,7 +2235,7 @@ static void AnimTask_GrowAndShrinkStep(u8 taskId) // Animates a little puff of the mon's breath. // Used by MOVE_SWAGGER and MOVE_BULK_UP // No args. -void Anim_BreathPuff(struct Sprite *sprite) +void AnimBreathPuff(struct Sprite *sprite) { if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) { @@ -2257,7 +2263,7 @@ void Anim_BreathPuff(struct Sprite *sprite) // arg 0: target mon (0 = attacker, 1 = target) // arg 1: x pixel offset // arg 2: y pixel offset -void Anim_AngerMark(struct Sprite *sprite) +void AnimAngerMark(struct Sprite *sprite) { u8 battler; if (!gBattleAnimArgs[0]) @@ -2278,17 +2284,17 @@ void Anim_AngerMark(struct Sprite *sprite) } // left/right movements -void sub_8104C38(u8 taskId) +void AnimTask_ThrashMoveMonHorizontal(u8 taskId) { struct Task* task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[0] = spriteId; task->data[1] = 0; - PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085936A4); - task->func = sub_8104C78; + PrepareAffineAnimInTaskData(task, spriteId, gThrashMoveMonAffineAnimCmds); + task->func = ThrashMoveMonStep; } -static void sub_8104C78(u8 taskId) +static void ThrashMoveMonStep(u8 taskId) { struct Task* task = &gTasks[taskId]; if (!RunAffineAnimFromTaskData(task)) @@ -2296,7 +2302,7 @@ static void sub_8104C78(u8 taskId) } // up/down movements -void sub_8104CA4(u8 taskId) +void AnimTask_ThrashMoveMonVertical(u8 taskId) { struct Task* task = &gTasks[taskId]; task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); @@ -2312,10 +2318,10 @@ void sub_8104CA4(u8 taskId) if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) task->data[2] *= -1; - task->func = sub_8104D28; + task->func = ThrashMoveMon; } -static void sub_8104D28(u8 taskId) +static void ThrashMoveMon(u8 taskId) { struct Task* task = &gTasks[taskId]; if (++task->data[7] > 2) @@ -2404,10 +2410,10 @@ void sub_8104E74(u8 taskId) params.initState = 1; params.unused9 = 0; ScanlineEffect_SetParams(params); - task->func = sub_8104F54; + task->func = AnimTask_SketchDrawMon; } -static void sub_8104F54(u8 taskId) +static void AnimTask_SketchDrawMon(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -2454,7 +2460,7 @@ static void sub_8104F54(u8 taskId) } } -void sub_810501C(struct Sprite *sprite) +void AnimPencil(struct Sprite *sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) - 16; sprite->pos1.y = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 16; @@ -2465,10 +2471,10 @@ void sub_810501C(struct Sprite *sprite) sprite->data[4] = 0; sprite->data[5] = GetBattlerSpriteCoordAttr(gBattleAnimTarget, BATTLER_COORD_ATTR_HEIGHT) + 2; sprite->data[6] = BattleAnimAdjustPanning(63); - sprite->callback = sub_8105078; + sprite->callback = AnimPencil_Step; } -static void sub_8105078(struct Sprite *sprite) +static void AnimPencil_Step(struct Sprite *sprite) { switch (sprite->data[0]) { @@ -2527,7 +2533,7 @@ static void sub_8105078(struct Sprite *sprite) } } -void sub_81051C4(struct Sprite *sprite) +void AnimBlendThinRing(struct Sprite *sprite) { u8 battler = 0; u16 sp0 = 0; @@ -2554,7 +2560,7 @@ void sub_81051C4(struct Sprite *sprite) gBattleAnimArgs[0] = sp0 - r4; } - sprite->callback = sub_80A77C8; + sprite->callback = AnimSpriteOnMonPos; sprite->callback(sprite); } @@ -2567,7 +2573,7 @@ void sub_8105284(struct Sprite *sprite) } } -void sub_81052A4(struct Sprite *sprite) +void AnimHyperVoiceRing(struct Sprite *sprite) { u16 r9 = 0; u16 r6 = 0; @@ -2652,7 +2658,7 @@ void sub_81052A4(struct Sprite *sprite) sprite->callback(sprite); } -void sub_81054E8(struct Sprite *sprite) +void AnimUproarRing(struct Sprite *sprite) { u8 index = IndexOfSpritePaletteTag(ANIM_TAG_THIN_RING); if (index != 0xFF) @@ -2661,11 +2667,11 @@ void sub_81054E8(struct Sprite *sprite) } StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80A77C8; + sprite->callback = AnimSpriteOnMonPos; sprite->callback(sprite); } -void sub_8105538(struct Sprite *sprite) +void AnimSoftBoiledEgg(struct Sprite *sprite) { s16 r1; InitSpritePosToAnimAttacker(sprite, FALSE); @@ -2673,10 +2679,10 @@ void sub_8105538(struct Sprite *sprite) sprite->data[0] = 0x380; sprite->data[1] = r1; sprite->data[7] = gBattleAnimArgs[2]; - sprite->callback = sub_810557C; + sprite->callback = AnimSoftBoiledEgg_Step1; } -static void sub_810557C(struct Sprite *sprite) +static void AnimSoftBoiledEgg_Step1(struct Sprite *sprite) { s16 add; sprite->pos2.y -= (sprite->data[0] >> 8); @@ -2692,20 +2698,20 @@ static void sub_810557C(struct Sprite *sprite) sprite->pos2.x = 0; sprite->data[0] = 0; StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_81055F4; + sprite->callback = AnimSoftBoiledEgg_Step2; } } -static void sub_81055F4(struct Sprite *sprite) +static void AnimSoftBoiledEgg_Step2(struct Sprite *sprite) { if (sprite->data[0]++ > 19) { StartSpriteAffineAnim(sprite, 2); - sprite->callback = sub_810561C; + sprite->callback = AnimSoftBoiledEgg_Step3; } } -static void sub_810561C(struct Sprite *sprite) +static void AnimSoftBoiledEgg_Step3(struct Sprite *sprite) { if (sprite->affineAnimEnded) { @@ -2714,17 +2720,17 @@ static void sub_810561C(struct Sprite *sprite) if (sprite->data[7] == 0) { sprite->oam.tileNum += 16; - sprite->callback = sub_8105694; + sprite->callback = AnimSoftBoiledEgg_Step3_Callback1; } else { sprite->oam.tileNum += 32; - sprite->callback = sub_810571C; + sprite->callback = AnimSoftBoiledEgg_Step4; } } } -static void sub_8105694(struct Sprite *sprite) +static void AnimSoftBoiledEgg_Step3_Callback1(struct Sprite *sprite) { sprite->pos2.y -= 2; if (++sprite->data[0] == 9) @@ -2733,50 +2739,50 @@ static void sub_8105694(struct Sprite *sprite) sprite->data[1] = 0; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND((u16)sprite->data[0], 0)); - sprite->callback = sub_81056D4; + sprite->callback = AnimSoftBoiledEgg_Step3_Callback2; } } -static void sub_81056D4(struct Sprite *sprite) +static void AnimSoftBoiledEgg_Step3_Callback2(struct Sprite *sprite) { if (sprite->data[1]++ % 3 == 0) { sprite->data[0]--; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0])); if (sprite->data[0] == 0) - sprite->callback = sub_810571C; + sprite->callback = AnimSoftBoiledEgg_Step4; } } -static void sub_810571C(struct Sprite *sprite) +static void AnimSoftBoiledEgg_Step4(struct Sprite *sprite) { if ((u16)gBattleAnimArgs[7] == 0xFFFF) { sprite->invisible = 1; if (sprite->data[7] == 0) - sprite->callback = sub_810575C; + sprite->callback = AnimSoftBoiledEgg_Step4_Callback; else sprite->callback = DestroyAnimSprite; } } -static void sub_810575C(struct Sprite *sprite) +static void AnimSoftBoiledEgg_Step4_Callback(struct Sprite *sprite) { SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); DestroyAnimSprite(sprite); } -void sub_810577C(u8 taskId) +void AnimTask_StretchAttacker(u8 taskId) { struct Task* task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); task->data[0] = spriteId; - PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085938B0); - task->func = sub_81057B8; + PrepareAffineAnimInTaskData(task, spriteId, gStretchAttackerAffineAnimCmds); + task->func = StretchAttacker_Step; } -static void sub_81057B8(u8 taskId) +static void StretchAttacker_Step(u8 taskId) { struct Task* task = &gTasks[taskId]; if (!RunAffineAnimFromTaskData(task)) @@ -2787,7 +2793,7 @@ static void sub_81057B8(u8 taskId) } } -void sub_8105810(u8 taskId) +void AnimTask_ExtremeSpeedImpact(u8 taskId) { struct Task* task = &gTasks[taskId]; task->data[0] = 0; @@ -2807,10 +2813,10 @@ void sub_8105810(u8 taskId) } task->data[15] = GetAnimBattlerSpriteId(ANIM_TARGET); - task->func = sub_8105878; + task->func = ExtremeSpeedImpact_Step; } -static void sub_8105878(u8 taskId) +static void ExtremeSpeedImpact_Step(u8 taskId) { struct Task* task = &gTasks[taskId]; @@ -2856,7 +2862,7 @@ static void sub_8105878(u8 taskId) } } -void sub_810599C(u8 taskId) +void AnimTask_ExtremeSpeedMonReappear(u8 taskId) { struct Task* task = &gTasks[taskId]; task->data[0] = 0; @@ -2867,10 +2873,10 @@ void sub_810599C(u8 taskId) task->data[13] = 14; task->data[14] = 2; task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER); - task->func = sub_81059E0; + task->func = ExtremeSpeedMonReappear_Step; } -static void sub_81059E0(u8 taskId) +static void ExtremeSpeedMonReappear_Step(u8 taskId) { struct Task* task = &gTasks[taskId]; if (task->data[0] == 0 && ++task->data[1] > task->data[4]) @@ -2898,7 +2904,7 @@ static void sub_81059E0(u8 taskId) } } -void sub_8105AAC(u8 taskId) +void AnimTask_SpeedDust(u8 taskId) { struct Task* task = &gTasks[taskId]; task->data[0] = 0; @@ -2913,10 +2919,10 @@ void sub_8105AAC(u8 taskId) task->data[13] = 0; task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_ATTACKER); task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_TARGET); - task->func = sub_8105B08; + task->func = SpeedDust_Step1; } -static void sub_8105B08(u8 taskId) +static void SpeedDust_Step1(u8 taskId) { struct Task* task = &gTasks[taskId]; switch (task->data[8]) @@ -2958,13 +2964,13 @@ static void sub_8105B08(u8 taskId) { u8 spriteId; task->data[1] = 0; - spriteId = CreateSprite(&gUnknown_085938DC, task->data[14], task->data[15], 0); + spriteId = CreateSprite(&gSpeedDustSpriteTemplate, task->data[14], task->data[15], 0); if (spriteId != MAX_SPRITES) { gSprites[spriteId].data[0] = taskId; gSprites[spriteId].data[1] = 13; - gSprites[spriteId].pos2.x = gUnknown_085938F4[task->data[2]][0]; - gSprites[spriteId].pos2.y = gUnknown_085938F4[task->data[2]][1]; + gSprites[spriteId].pos2.x = gSpeedDustPosTable[task->data[2]][0]; + gSprites[spriteId].pos2.y = gSpeedDustPosTable[task->data[2]][1]; task->data[13]++; if (++task->data[2] > 3) { @@ -2982,7 +2988,7 @@ static void sub_8105B08(u8 taskId) } } -void sub_8105C48(struct Sprite *sprite) +void AnimSpeedDust(struct Sprite *sprite) { sprite->invisible = gTasks[sprite->data[0]].data[5]; if (sprite->animEnded) @@ -3014,21 +3020,21 @@ void sub_8105D60(u8 taskId) { int i; for (i = 0; i < 3; i++) - FreeSpritePaletteByTag(gUnknown_08593950[i]); + FreeSpritePaletteByTag(gMusicNotePaletteTagsTable[i]); DestroyAnimVisualTask(taskId); } -static void sub_8105D88(struct Sprite *sprite, u8 a, u8 b) +static void SetMusicNotePalette(struct Sprite *sprite, u8 a, u8 b) { u8 tile; tile = (b & 1); tile = ((-tile | tile) >> 31) & 32; sprite->oam.tileNum += tile + (a << 2); - sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_08593950[b >> 1]); + sprite->oam.paletteNum = IndexOfSpritePaletteTag(gMusicNotePaletteTagsTable[b >> 1]); } -void sub_8105DE8(struct Sprite *sprite) +void AnimHealBellMusicNote(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, FALSE); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) @@ -3039,10 +3045,10 @@ void sub_8105DE8(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3]; sprite->callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sub_8105D88(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); + SetMusicNotePalette(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]); } -void sub_8105E60(struct Sprite *sprite) +void AnimMagentaHeart(struct Sprite *sprite) { if (++sprite->data[0] == 1) InitSpritePosToAnimAttacker(sprite, FALSE); @@ -3055,7 +3061,7 @@ void sub_8105E60(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8105EB0(u8 taskId) +void AnimTask_FakeOut(u8 taskId) { u16 win0h = IsContest() ? 0x98 : 0xF0; u16 win0v = 0; @@ -3070,17 +3076,17 @@ void sub_8105EB0(u8 taskId) SetGpuReg(REG_OFFSET_BLDY, 0x10); gTasks[taskId].data[0] = win0v; gTasks[taskId].data[1] = win0h; - gTasks[taskId].func = sub_8105F30; + gTasks[taskId].func = FakeOutStep1; } -static void sub_8105F30(u8 taskId) +static void FakeOutStep1(u8 taskId) { gTasks[taskId].data[0] += 13; gTasks[taskId].data[1] -= 13; if (gTasks[taskId].data[0] >= gTasks[taskId].data[1]) { gBattle_WIN0H = 0; - gTasks[taskId].func = sub_8105F84; + gTasks[taskId].func = FakeOutStep2; } else { @@ -3088,7 +3094,7 @@ static void sub_8105F30(u8 taskId) } } -static void sub_8105F84(u8 taskId) +static void FakeOutStep2(u8 taskId) { if (++gTasks[taskId].data[10] == 5) { @@ -3148,7 +3154,7 @@ void sub_81060B0(u8 taskId) } } -void sub_8106140(struct Sprite *sprite) +void AnimRedHeartProjectile(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = 95; @@ -3157,10 +3163,10 @@ void sub_8106140(struct Sprite *sprite) sprite->data[3] = sprite->pos1.y; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); InitAnimLinearTranslation(sprite); - sprite->callback = sub_810618C; + sprite->callback = AnimRedHeartProjectile_Step; } -static void sub_810618C(struct Sprite *sprite) +static void AnimRedHeartProjectile_Step(struct Sprite *sprite) { if (!AnimTranslateLinear(sprite)) { @@ -3173,7 +3179,7 @@ static void sub_810618C(struct Sprite *sprite) } } -void sub_81061C4(struct Sprite *sprite) +void AnimParticuleBurst(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -3195,17 +3201,17 @@ void sub_81061C4(struct Sprite *sprite) } } -void sub_810624C(struct Sprite *sprite) +void AnimRedHeartRising(struct Sprite *sprite) { sprite->pos1.x = gBattleAnimArgs[0]; sprite->pos1.y = 160; sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[1]; sprite->callback = WaitAnimForDuration; - StoreSpriteCallbackInData6(sprite, sub_810627C); + StoreSpriteCallbackInData6(sprite, AnimRedHeartRising_Step); } -static void sub_810627C(struct Sprite *sprite) +static void AnimRedHeartRising_Step(struct Sprite *sprite) { s16 y; sprite->data[2] += sprite->data[1]; @@ -3240,10 +3246,10 @@ void AnimTask_HeartsBackground(u8 taskId) AnimLoadCompressedBgGfx(animBg.bgId, &gUnknown_08C232E0, animBg.tilesOffset); sub_80A6D60(&animBg, &gUnknown_08C23D78, 0); LoadCompressedPalette(&gUnknown_08C23D50, animBg.paletteId * 16, 32); - gTasks[taskId].func = sub_81063A8; + gTasks[taskId].func = HeartsBackground_Step; } -static void sub_81063A8(u8 taskId) +static void HeartsBackground_Step(u8 taskId) { struct BattleAnimBgData animBg; @@ -3299,7 +3305,7 @@ static void sub_81063A8(u8 taskId) } } -void sub_81064F8(u8 taskId) +void AnimTask_ScaryFace(u8 taskId) { struct BattleAnimBgData animBg; @@ -3324,10 +3330,10 @@ void sub_81064F8(u8 taskId) AnimLoadCompressedBgGfx(animBg.bgId, gUnknown_08C249F8, animBg.tilesOffset); LoadCompressedPalette(gUnknown_08C249D0, animBg.paletteId * 16, 32); - gTasks[taskId].func = sub_81065EC; + gTasks[taskId].func = ScaryFace_Step; } -static void sub_81065EC(u8 taskId) +static void ScaryFace_Step(u8 taskId) { struct BattleAnimBgData animBg; @@ -3456,7 +3462,7 @@ static void AnimOrbitScatterStep(struct Sprite *sprite) DestroyAnimSprite(sprite); } -static void sub_8106914(struct Sprite *sprite) +static void AnimSpitUpOrb_Step(struct Sprite *sprite) { sprite->pos2.x += sprite->data[0]; sprite->pos2.y += sprite->data[1]; @@ -3464,14 +3470,14 @@ static void sub_8106914(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8106944(struct Sprite *sprite) +void AnimSpitUpOrb(struct Sprite *sprite) { sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); sprite->data[0] = Sin(gBattleAnimArgs[0], 10); sprite->data[1] = Cos(gBattleAnimArgs[0], 7); sprite->data[2] = gBattleAnimArgs[1]; - sprite->callback = sub_8106914; + sprite->callback = AnimSpitUpOrb_Step; } static void sub_810699C(struct Sprite *sprite) @@ -3480,13 +3486,13 @@ static void sub_810699C(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_81069B8(struct Sprite *sprite) +void AnimEyeSparkle(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->callback = sub_810699C; } -void sub_81069D0(struct Sprite *sprite) +void AnimAngel(struct Sprite *sprite) { s16 var0; if (!sprite->data[0]) @@ -3524,7 +3530,7 @@ static void sub_8106A64(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8106AD0(struct Sprite *sprite) +void AnimPinkHeart(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -3550,7 +3556,7 @@ void sub_8106AD0(struct Sprite *sprite) } } -void sub_8106B54(struct Sprite *sprite) +void AnimDevil(struct Sprite *sprite) { if (sprite->data[3] == 0) { @@ -3579,7 +3585,7 @@ void sub_8106B54(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8106C80(struct Sprite *sprite) +void AnimFurySwipes(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -3594,7 +3600,7 @@ void sub_8106C80(struct Sprite *sprite) } } -void sub_8106CD0(struct Sprite *sprite) +void AnimMovmentWaves(struct Sprite *sprite) { if (!gBattleAnimArgs[2]) { @@ -3621,11 +3627,11 @@ void sub_8106CD0(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = gBattleAnimArgs[1]; StartSpriteAnim(sprite, sprite->data[1]); - sprite->callback = sub_8106D5C; + sprite->callback = AnimMovmentWaves_Step; } } -static void sub_8106D5C(struct Sprite *sprite) +static void AnimMovmentWaves_Step(struct Sprite *sprite) { if (sprite->animEnded) { @@ -3636,21 +3642,21 @@ static void sub_8106D5C(struct Sprite *sprite) } } -void sub_8106D90(u8 taskId) +void AnimTask_UproarDistortion(u8 taskId) { u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); PrepareAffineAnimInTaskData(&gTasks[taskId], spriteId, gUnknown_08593B98); - gTasks[taskId].func = sub_8106DD4; + gTasks[taskId].func = UproarDistortion_Step; } -static void sub_8106DD4(u8 taskId) +static void UproarDistortion_Step(u8 taskId) { if (!RunAffineAnimFromTaskData(&gTasks[taskId])) DestroyAnimVisualTask(taskId); } -void sub_8106E00(struct Sprite *sprite) +void AnimJaggedMusicNote(struct Sprite *sprite) { int var1; u8 battler = !gBattleAnimArgs[0] ? gBattleAnimAttacker : gBattleAnimTarget; @@ -3675,10 +3681,10 @@ void sub_8106E00(struct Sprite *sprite) sprite->data[4] = var1 >> 3; sprite->oam.tileNum += gBattleAnimArgs[3] * 16; - sprite->callback = sub_8106EC8; + sprite->callback = AnimJaggedMusicNote_Step; } -static void sub_8106EC8(struct Sprite *sprite) +static void AnimJaggedMusicNote_Step(struct Sprite *sprite) { sprite->data[1] += sprite->data[3]; sprite->data[2] += sprite->data[4]; @@ -3688,7 +3694,7 @@ static void sub_8106EC8(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8106F00(struct Sprite *sprite) +void AnimPerishSongMusicNote2(struct Sprite *sprite) { if (!sprite->data[0]) { @@ -3703,7 +3709,7 @@ void sub_8106F00(struct Sprite *sprite) DestroyAnimSprite(sprite); } -void sub_8106F60(struct Sprite *sprite) +void AnimPerishSongMusicNote(struct Sprite *sprite) { int index; int var2; @@ -3733,7 +3739,7 @@ void sub_8106F60(struct Sprite *sprite) if (sprite->data[0] > sprite->data[5]) { - sprite->callback = sub_8107018; + sprite->callback = AnimPerishSongMusicNote_Step1; sprite->data[0] = 0; SetSpritePrimaryCoordsFromSecondaryCoords(sprite); @@ -3745,16 +3751,16 @@ void sub_8106F60(struct Sprite *sprite) } } -static void sub_8107018(struct Sprite *sprite) +static void AnimPerishSongMusicNote_Step1(struct Sprite *sprite) { if (++sprite->data[0] > 10) { sprite->data[0] = 0; - sprite->callback = sub_810703C; + sprite->callback = AnimPerishSongMusicNote_Step2; } } -static void sub_810703C(struct Sprite *sprite) +static void AnimPerishSongMusicNote_Step2(struct Sprite *sprite) { sprite->data[3] += sprite->data[2]; sprite->pos2.y = sprite->data[3]; @@ -3780,7 +3786,7 @@ static void sub_810703C(struct Sprite *sprite) } } -void sub_81070AC(struct Sprite *sprite) +void AnimGuardRing(struct Sprite *sprite) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) { diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 79b728e61..772ef6182 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_anim.h" #include "bg.h" @@ -24,7 +24,7 @@ #include "constants/species.h" #include "constants/weather.h" -extern const struct SpriteTemplate gUnknown_08593114; +extern const struct SpriteTemplate gThoughtBubbleSpriteTemplate; void sub_815A0D4(struct Sprite *); void sub_815A1B0(struct Sprite *); @@ -63,7 +63,7 @@ void AnimForesightMagnifyingGlass(struct Sprite *); void AnimMeteorMashStar(struct Sprite *); void AnimBlockX(struct Sprite *); void sub_815FE80(struct Sprite *); -void sub_81061C4(struct Sprite *); +void AnimParticuleBurst(struct Sprite *); void AnimKnockOffStrike(struct Sprite *); void AnimRecycle(struct Sprite *); static void sub_815A114(struct Sprite *); @@ -140,18 +140,18 @@ const struct SpriteTemplate gUnknown_085CE020 = { .tileTag = ANIM_TAG_SCRATCH, .paletteTag = ANIM_TAG_SCRATCH, - .oam = &gUnknown_08524A34, + .oam = &gOamData_AffineOff_ObjBlend_32x32, .anims = gUnknown_085CE01C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; const struct SpriteTemplate gUnknown_085CE038 = { .tileTag = ANIM_TAG_BLACK_SMOKE, .paletteTag = ANIM_TAG_BLACK_SMOKE, - .oam = &gUnknown_08524934, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -162,11 +162,11 @@ const struct SpriteTemplate gUnknown_085CE050 = { .tileTag = ANIM_TAG_BLACK_BALL, .paletteTag = ANIM_TAG_BLACK_BALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A78AC, + .callback = AnimThrowProjectile, }; const union AnimCmd gUnknown_085CE068[] = @@ -186,18 +186,18 @@ const struct SpriteTemplate gUnknown_085CE07C = { .tileTag = ANIM_TAG_OPENING_EYE, .paletteTag = ANIM_TAG_OPENING_EYE, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085CE078, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; const struct SpriteTemplate gUnknown_085CE094 = { .tileTag = ANIM_TAG_ROUND_WHITE_HALO, .paletteTag = ANIM_TAG_ROUND_WHITE_HALO, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -208,7 +208,7 @@ const struct SpriteTemplate gUnknown_085CE0AC = { .tileTag = ANIM_TAG_TEAL_ALERT, .paletteTag = ANIM_TAG_TEAL_ALERT, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -240,7 +240,7 @@ const struct SpriteTemplate gUnknown_085CE104 = { .tileTag = ANIM_TAG_EYE, .paletteTag = ANIM_TAG_EYE, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_085CE0FC, @@ -251,7 +251,7 @@ const struct SpriteTemplate gUnknown_085CE11C = { .tileTag = ANIM_TAG_SPIKES, .paletteTag = ANIM_TAG_SPIKES, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -277,7 +277,7 @@ const struct SpriteTemplate gUnknown_085CE150 = { .tileTag = ANIM_TAG_LEER, .paletteTag = ANIM_TAG_LEER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085CE14C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -311,7 +311,7 @@ const struct SpriteTemplate gUnknown_085CE190 = { .tileTag = ANIM_TAG_LETTER_Z, .paletteTag = ANIM_TAG_LETTER_Z, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_085CE170, .images = NULL, .affineAnims = gUnknown_085CE18C, @@ -348,7 +348,7 @@ const struct SpriteTemplate gUnknown_085CE1DC = { .tileTag = ANIM_TAG_FANG_ATTACK, .paletteTag = ANIM_TAG_FANG_ATTACK, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_085CE1BC, .images = NULL, .affineAnims = gUnknown_085CE1D8, @@ -379,7 +379,7 @@ const struct SpriteTemplate gUnknown_085CE22C = { .tileTag = ANIM_TAG_SPOTLIGHT, .paletteTag = ANIM_TAG_SPOTLIGHT, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_085CE224, @@ -390,7 +390,7 @@ const struct SpriteTemplate gUnknown_085CE244 = { .tileTag = ANIM_TAG_TAG_HAND, .paletteTag = ANIM_TAG_TAG_HAND, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -401,7 +401,7 @@ const struct SpriteTemplate gUnknown_085CE25C = { .tileTag = ANIM_TAG_TAG_HAND, .paletteTag = ANIM_TAG_TAG_HAND, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -425,7 +425,7 @@ const struct SpriteTemplate gUnknown_085CE288 = { .tileTag = ANIM_TAG_RAPID_SPIN, .paletteTag = ANIM_TAG_RAPID_SPIN, - .oam = &gUnknown_08524934, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gUnknown_085CE284, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -469,7 +469,7 @@ const struct SpriteTemplate gUnknown_085CE2F8 = { .tileTag = ANIM_TAG_TRI_FORCE_TRIANGLE, .paletteTag = ANIM_TAG_TRI_FORCE_TRIANGLE, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gUnknown_085CE2C8, .images = NULL, .affineAnims = gUnknown_085CE2F4, @@ -498,11 +498,11 @@ const struct SpriteTemplate gUnknown_085CE338 = { .tileTag = ANIM_TAG_ECLIPSING_ORB, .paletteTag = ANIM_TAG_ECLIPSING_ORB, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085CE334, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; const union AffineAnimCmd gUnknown_085CE350[] = @@ -517,7 +517,7 @@ const struct SpriteTemplate gUnknown_085CE370 = { .tileTag = ANIM_TAG_POKEBALL, .paletteTag = ANIM_TAG_POKEBALL, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -528,7 +528,7 @@ const struct SpriteTemplate gUnknown_085CE388 = { .tileTag = ANIM_TAG_GOLD_STARS, .paletteTag = ANIM_TAG_GOLD_STARS, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -539,7 +539,7 @@ const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate = { .tileTag = ANIM_TAG_GOLD_STARS, .paletteTag = ANIM_TAG_GOLD_STARS, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -570,7 +570,7 @@ const struct SpriteTemplate gUnknown_085CE418 = { .tileTag = ANIM_TAG_BLUE_ORB, .paletteTag = ANIM_TAG_BLUE_ORB, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -625,7 +625,7 @@ const struct SpriteTemplate gUnknown_085CE48C = { .tileTag = ANIM_TAG_GREEN_STAR, .paletteTag = ANIM_TAG_GREEN_STAR, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_085CE480, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -661,7 +661,7 @@ const struct SpriteTemplate gWeakFrustrationAngerMarkSpriteTemplate = { .tileTag = ANIM_TAG_ANGER, .paletteTag = ANIM_TAG_ANGER, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -711,7 +711,7 @@ const struct SpriteTemplate gSweetScentPetalSpriteTemplate = { .tileTag = ANIM_TAG_PINK_PETAL, .paletteTag = ANIM_TAG_PINK_PETAL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gSweetScentPetalAnimCmdTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -737,7 +737,7 @@ const struct SpriteTemplate gPainSplitProjectileSpriteTemplate = { .tileTag = ANIM_TAG_PAIN_SPLIT, .paletteTag = ANIM_TAG_PAIN_SPLIT, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gPainSplitAnimCmdTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -748,7 +748,7 @@ const struct SpriteTemplate gFlatterConfettiSpriteTemplate = { .tileTag = ANIM_TAG_CONFETTI, .paletteTag = ANIM_TAG_CONFETTI, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -759,7 +759,7 @@ const struct SpriteTemplate gFlatterSpotlightSpriteTemplate = { .tileTag = ANIM_TAG_SPOTLIGHT, .paletteTag = ANIM_TAG_SPOTLIGHT, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_085CE224, @@ -770,7 +770,7 @@ const struct SpriteTemplate gReversalOrbSpriteTemplate = { .tileTag = ANIM_TAG_BLUE_ORB, .paletteTag = ANIM_TAG_BLUE_ORB, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -822,7 +822,7 @@ const struct SpriteTemplate gYawnCloudSpriteTemplate = { .tileTag = ANIM_TAG_PINK_CLOUD, .paletteTag = ANIM_TAG_PINK_CLOUD, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gYawnCloudAffineAnimTable, @@ -873,7 +873,7 @@ const struct SpriteTemplate gSmokeBallEscapeCloudSpriteTemplate = { .tileTag = ANIM_TAG_PINK_CLOUD, .paletteTag = ANIM_TAG_PINK_CLOUD, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gSmokeBallEscapeCloudAffineAnimTable, @@ -892,7 +892,7 @@ const struct SpriteTemplate gFacadeSweatDrop = { .tileTag = ANIM_TAG_SWEAT_DROP, .paletteTag = ANIM_TAG_SWEAT_DROP, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -950,7 +950,7 @@ const struct SpriteTemplate gRoarNoiseLineSpriteTemplate = { .tileTag = ANIM_TAG_NOISE_LINE, .paletteTag = ANIM_TAG_NOISE_LINE, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gRoarNoiseLineAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -961,7 +961,7 @@ const struct SpriteTemplate gGlareEyeDotSpriteTemplate = { .tileTag = ANIM_TAG_SMALL_RED_EYE, .paletteTag = ANIM_TAG_SMALL_RED_EYE, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -972,7 +972,7 @@ const struct SpriteTemplate gAssistPawprintSpriteTemplate = { .tileTag = ANIM_TAG_PAW_PRINT, .paletteTag = ANIM_TAG_PAW_PRINT, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1002,7 +1002,7 @@ const struct SpriteTemplate gBarrageBallSpriteTemplate = { .tileTag = ANIM_TAG_RED_BALL, .paletteTag = ANIM_TAG_RED_BALL, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gBarrageBallAffineAnimTable, @@ -1013,7 +1013,7 @@ const struct SpriteTemplate gSmellingSaltsHandSpriteTemplate = { .tileTag = ANIM_TAG_TAG_HAND, .paletteTag = ANIM_TAG_TAG_HAND, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1031,7 +1031,7 @@ const struct SpriteTemplate gSmellingSaltExclamationSpriteTemplate = { .tileTag = ANIM_TAG_SMELLINGSALT_EFFECT, .paletteTag = ANIM_TAG_SMELLINGSALT_EFFECT, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1042,7 +1042,7 @@ const struct SpriteTemplate gHelpingHandClapSpriteTemplate = { .tileTag = ANIM_TAG_TAG_HAND, .paletteTag = ANIM_TAG_TAG_HAND, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1053,7 +1053,7 @@ const struct SpriteTemplate gForesightMagnifyingGlassSpriteTemplate = { .tileTag = ANIM_TAG_MAGNIFYING_GLASS, .paletteTag = ANIM_TAG_MAGNIFYING_GLASS, - .oam = &gUnknown_08524A34, + .oam = &gOamData_AffineOff_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1064,7 +1064,7 @@ const struct SpriteTemplate gMeteorMashStarSpriteTemplate = { .tileTag = ANIM_TAG_GOLD_STARS, .paletteTag = ANIM_TAG_GOLD_STARS, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1075,18 +1075,18 @@ const struct SpriteTemplate gUnknown_085CE8F4 = { .tileTag = ANIM_TAG_GOLD_STARS, .paletteTag = ANIM_TAG_GOLD_STARS, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81061C4, + .callback = AnimParticuleBurst, }; const struct SpriteTemplate gBlockXSpriteTemplate = { .tileTag = ANIM_TAG_X_SIGN, .paletteTag = ANIM_TAG_X_SIGN, - .oam = &gUnknown_0852491C, + .oam = &gOamData_AffineOff_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1097,7 +1097,7 @@ const struct SpriteTemplate gUnknown_085CE924 = { .tileTag = ANIM_TAG_ITEM_BAG, .paletteTag = ANIM_TAG_ITEM_BAG, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -1140,7 +1140,7 @@ const struct SpriteTemplate gKnockOffStrikeSpriteTemplate = { .tileTag = ANIM_TAG_SLAM_HIT_2, .paletteTag = ANIM_TAG_SLAM_HIT_2, - .oam = &gUnknown_0852497C, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, .anims = gKnockOffStrikeAnimTable, .images = NULL, .affineAnims = gKnockOffStrikeAffineAnimTable, @@ -1162,7 +1162,7 @@ const struct SpriteTemplate gRecycleSpriteTemplate = { .tileTag = ANIM_TAG_RECYCLE, .paletteTag = ANIM_TAG_RECYCLE, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gRecycleSpriteAffineAnimTable, @@ -1929,7 +1929,7 @@ static void sub_815B054(u8 taskId) } y = task->data[3] + task->data[5]; - spriteId = CreateSprite(&gUnknown_08593114, x, y, 6 - task->data[1]); + spriteId = CreateSprite(&gThoughtBubbleSpriteTemplate, x, y, 6 - task->data[1]); PlaySE12WithPanning(SE_W118, BattleAnimAdjustPanning(-64)); if (spriteId != MAX_SPRITES) @@ -1982,7 +1982,7 @@ static void sub_815B054(u8 taskId) case 4: for (i = 0, j = 0; i < MAX_SPRITES; i++) { - if (gSprites[i].template == &gUnknown_08593114) + if (gSprites[i].template == &gThoughtBubbleSpriteTemplate) { gSprites[i].data[0] = taskId; gSprites[i].data[1] = 6; diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index a667daecf..ea5184c53 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -7,7 +7,7 @@ #include "decompress.h" #include "dma3.h" #include "gpu_regs.h" -#include "alloc.h" +#include "malloc.h" #include "palette.h" #include "pokemon_icon.h" #include "sprite.h" @@ -26,11 +26,11 @@ #define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) -extern const struct OamData gUnknown_0852497C; +extern const struct OamData gOamData_AffineNormal_ObjNormal_64x64; static void sub_80A6FB4(struct Sprite *sprite); static void sub_80A7144(struct Sprite *sprite); -static void sub_80A791C(struct Sprite *sprite); +static void AnimThrowProjectile_Step(struct Sprite *sprite); static void sub_80A8DFC(struct Sprite *sprite); static void sub_80A8E88(struct Sprite *sprite); static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId); @@ -92,7 +92,7 @@ static const struct SpriteTemplate sUnknown_08525F90[] = { .tileTag = 55125, .paletteTag = 55125, - .oam = &gUnknown_0852497C, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -101,7 +101,7 @@ static const struct SpriteTemplate sUnknown_08525F90[] = { .tileTag = 55126, .paletteTag = 55126, - .oam = &gUnknown_0852497C, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -988,7 +988,7 @@ void sub_80A6DAC(bool8 arg0) } } -void sub_80A6DEC(struct Sprite *sprite) +void TradeMenuBouncePartySprites(struct Sprite *sprite) { sprite->data[1] = sprite->pos1.x; sprite->data[3] = sprite->pos1.y; @@ -1456,7 +1456,7 @@ static u8 GetBattlerAtPosition_(u8 position) return GetBattlerAtPosition(position); } -void sub_80A77C8(struct Sprite *sprite) +void AnimSpriteOnMonPos(struct Sprite *sprite) { bool8 var; @@ -1513,7 +1513,7 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -void sub_80A78AC(struct Sprite *sprite) +void AnimThrowProjectile(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, 1); if (GetBattlerSide(gBattleAnimAttacker)) @@ -1523,16 +1523,16 @@ void sub_80A78AC(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; sprite->data[5] = gBattleAnimArgs[5]; InitAnimArcTranslation(sprite); - sprite->callback = sub_80A791C; + sprite->callback = AnimThrowProjectile_Step; } -static void sub_80A791C(struct Sprite *sprite) +static void AnimThrowProjectile_Step(struct Sprite *sprite) { if (TranslateAnimHorizontalArc(sprite)) DestroyAnimSprite(sprite); } -void sub_80A7938(struct Sprite *sprite) +void AnimSnoreZ(struct Sprite *sprite) { bool8 r4; u8 battlerId, coordType; diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index 6780f0a32..18d6700a8 100755 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -238,7 +238,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_POKEBALL, .paletteTag = TAG_PARTICLES_POKEBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -247,7 +247,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_GREATBALL, .paletteTag = TAG_PARTICLES_GREATBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -256,7 +256,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_SAFARIBALL, .paletteTag = TAG_PARTICLES_SAFARIBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -265,7 +265,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_ULTRABALL, .paletteTag = TAG_PARTICLES_ULTRABALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -274,7 +274,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_MASTERBALL, .paletteTag = TAG_PARTICLES_MASTERBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -283,7 +283,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_NETBALL, .paletteTag = TAG_PARTICLES_NETBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -292,7 +292,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_DIVEBALL, .paletteTag = TAG_PARTICLES_DIVEBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -301,7 +301,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_NESTBALL, .paletteTag = TAG_PARTICLES_NESTBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -310,7 +310,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_REPEATBALL, .paletteTag = TAG_PARTICLES_REPEATBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -319,7 +319,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_TIMERBALL, .paletteTag = TAG_PARTICLES_TIMERBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -328,7 +328,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_LUXURYBALL, .paletteTag = TAG_PARTICLES_LUXURYBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -337,7 +337,7 @@ const struct SpriteTemplate gBallParticlesSpriteTemplates[] = { .tileTag = TAG_PARTICLES_PREMIERBALL, .paletteTag = TAG_PARTICLES_PREMIERBALL, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gAnims_BallParticles, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -375,7 +375,7 @@ const struct SpriteTemplate gPokeblockSpriteTemplate = { .tileTag = ANIM_TAG_POKEBLOCK, .paletteTag = ANIM_TAG_POKEBLOCK, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -396,7 +396,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085E5358, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c index 7ed78ea9a..e608cf041 100644 --- a/src/battle_anim_status_effects.c +++ b/src/battle_anim_status_effects.c @@ -14,8 +14,8 @@ extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; extern const u8 *const gBattleAnims_StatusConditions[]; -extern const struct OamData gUnknown_08524904; -extern const struct OamData gUnknown_08524A3C; +extern const struct OamData gOamData_AffineOff_ObjNormal_8x8; +extern const struct OamData gOamData_AffineOff_ObjBlend_64x64; // This file's functions. static void sub_80A9DB4(u8 taskId); @@ -46,7 +46,7 @@ const struct SpriteTemplate gUnknown_0853EDFC = { .tileTag = ANIM_TAG_ORB, .paletteTag = ANIM_TAG_ORB, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = sSpriteAnimTable_853EDF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -57,7 +57,7 @@ const struct SpriteTemplate gUnknown_0853EE14 = { .tileTag = ANIM_TAG_ORB, .paletteTag = ANIM_TAG_ORB, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = sSpriteAnimTable_853EDF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -79,7 +79,7 @@ const struct SpriteTemplate gUnknown_0853EE38 = { .tileTag = ANIM_TAG_WEATHER_BALL, .paletteTag = ANIM_TAG_WEATHER_BALL, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = sSpriteAnimTable_853EE34, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -90,7 +90,7 @@ const struct SpriteTemplate gUnknown_0853EE50 = { .tileTag = ANIM_TAG_WEATHER_BALL, .paletteTag = ANIM_TAG_WEATHER_BALL, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = sSpriteAnimTable_853EE34, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -116,7 +116,7 @@ const struct SpriteTemplate gUnknown_0853EE84 = { .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = sSpriteAnimTable_853EE80, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -127,7 +127,7 @@ const struct SpriteTemplate gUnknown_0853EE9C = { .tileTag = ANIM_TAG_MONSTER_FOOT, .paletteTag = ANIM_TAG_MONSTER_FOOT, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -163,7 +163,7 @@ const struct SpriteTemplate gUnknown_0853EED8 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = sSpriteAnimTable_853EECC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -197,7 +197,7 @@ const struct SpriteTemplate gUnknown_0853EF18 = { .tileTag = ANIM_TAG_ORB, .paletteTag = ANIM_TAG_ORB, - .oam = &gUnknown_085249CC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = sSpriteAnimTable_853EEF8, .images = NULL, .affineAnims = sSpriteAffineAnimTable_853EEF8, @@ -221,7 +221,7 @@ static const struct SpriteTemplate gUnknown_0853EF48 = { .tileTag = ANIM_TAG_ICE_CUBE, .paletteTag = ANIM_TAG_ICE_CUBE, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -232,7 +232,7 @@ static const struct SpriteTemplate gUnknown_0853EF60 = { .tileTag = ANIM_TAG_CIRCLE_IMPACT, .paletteTag = ANIM_TAG_CIRCLE_IMPACT, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index efe35e1b4..eff2bc3c7 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -3,7 +3,7 @@ #include "contest.h" #include "gpu_regs.h" #include "graphics.h" -#include "alloc.h" +#include "malloc.h" #include "palette.h" #include "sound.h" #include "sprite.h" @@ -36,7 +36,7 @@ static void sub_8117500(u8); static void sub_81175C4(u32, u16); static void sub_81176D8(u8); static void sub_8117A60(u8); -static void sub_8117FD0(u8); +static void ExtremSpeedMoveTarget_Step(u8); const u16 gUnknown_08597418 = RGB(31, 31, 31); @@ -1036,7 +1036,7 @@ void sub_8117F30(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_8117F60(u8 taskId) +void AnimTask_ExtremeSpeedMoveTarget(u8 taskId) { if (IsContest()) { @@ -1046,12 +1046,12 @@ void sub_8117F60(u8 taskId) { gTasks[taskId].data[0] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible; gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].invisible = 1; - gTasks[taskId].func = sub_8117FD0; + gTasks[taskId].func = ExtremSpeedMoveTarget_Step; gAnimVisualTaskCount--; } } -static void sub_8117FD0(u8 taskId) +static void ExtremSpeedMoveTarget_Step(u8 taskId) { if (gBattleAnimArgs[7] == 0x1000) { diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 1be5def47..57239bca6 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -31,6 +31,7 @@ #include "constants/battle_anim.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/songs.h" #include "constants/trainers.h" #include "constants/rgb.h" @@ -1341,10 +1342,10 @@ static void WaitForMonSelection(void) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { - if (gUnknown_0203CEE8 == 1) - BtlController_EmitChosenMonReturnValue(1, gUnknown_0203CEE9, gUnknown_0203CF00); + if (gPartyMenuUseExitCallback == TRUE) + BtlController_EmitChosenMonReturnValue(1, gSelectedMonPartyId, gBattlePartyCurrentOrder); else - BtlController_EmitChosenMonReturnValue(1, 6, NULL); + BtlController_EmitChosenMonReturnValue(1, PARTY_SIZE, NULL); if ((gBattleBufferA[gActiveBattler][1] & 0xF) == 1) PrintLinkStandbyMsg(); @@ -1531,12 +1532,12 @@ void ActionSelectionDestroyCursorAt(u8 cursorPosition) CopyBgTilemapBufferToVram(0); } -void SetCB2ToReshowScreenAfterMenu(void) +void CB2_SetUpReshowBattleScreenAfterMenu(void) { SetMainCallback2(ReshowBattleScreenAfterMenu); } -void SetCB2ToReshowScreenAfterMenu2(void) +void CB2_SetUpReshowBattleScreenAfterMenu2(void) { SetMainCallback2(ReshowBattleScreenAfterMenu); } @@ -2632,20 +2633,20 @@ static void PlayerHandleChooseItem(void) gBattlerControllerFuncs[gActiveBattler] = OpenBagAndChooseItem; gBattlerInMenuId = gActiveBattler; - for (i = 0; i < 3; i++) - gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][1 + i]; + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][1 + i]; } static void PlayerHandleChoosePokemon(void) { s32 i; - for (i = 0; i < 3; i++) - gUnknown_0203CF00[i] = gBattleBufferA[gActiveBattler][4 + i]; + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i]; - if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != PARTY_CANT_SWITCH) + if (gBattleTypeFlags & BATTLE_TYPE_ARENA && (gBattleBufferA[gActiveBattler][1] & 0xF) != PARTY_ACTION_CANT_SWITCH) { - BtlController_EmitChosenMonReturnValue(1, gBattlerPartyIndexes[gActiveBattler] + 1, gUnknown_0203CF00); + BtlController_EmitChosenMonReturnValue(1, gBattlerPartyIndexes[gActiveBattler] + 1, gBattlePartyCurrentOrder); PlayerBufferExecCompleted(); } else diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 17db0b868..d0e76ab1b 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -95,7 +95,7 @@ void sub_8032768(void) if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { for (i = 0; i < gBattlersCount; i++) - sub_81B8D64(i, 0); + BufferBattlePartyCurrentOrderBySide(i, 0); } for (i = 0; i < sizeof(gBattleStruct->tvMovePoints); i++) @@ -144,10 +144,10 @@ static void InitSinglePlayerBtlControllers(void) gBattlersCount = MAX_BATTLERS_COUNT; - sub_81B8D64(0, 0); - sub_81B8D64(1, 0); - sub_81B8D64(2, 1); - sub_81B8D64(3, 1); + BufferBattlePartyCurrentOrderBySide(0, 0); + BufferBattlePartyCurrentOrderBySide(1, 0); + BufferBattlePartyCurrentOrderBySide(2, 1); + BufferBattlePartyCurrentOrderBySide(3, 1); gBattlerPartyIndexes[0] = 0; gBattlerPartyIndexes[1] = 0; @@ -247,10 +247,10 @@ static void InitSinglePlayerBtlControllers(void) gBattlersCount = MAX_BATTLERS_COUNT; - sub_81B8D64(0, 0); - sub_81B8D64(1, 0); - sub_81B8D64(2, 1); - sub_81B8D64(3, 1); + BufferBattlePartyCurrentOrderBySide(0, 0); + BufferBattlePartyCurrentOrderBySide(1, 0); + BufferBattlePartyCurrentOrderBySide(2, 1); + BufferBattlePartyCurrentOrderBySide(3, 1); gBattlerPartyIndexes[0] = 0; gBattlerPartyIndexes[1] = 0; @@ -267,11 +267,11 @@ static void InitSinglePlayerBtlControllers(void) { case 0: case 3: - sub_81B8D64(gLinkPlayers[i].id, 0); + BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0); break; case 1: case 2: - sub_81B8D64(gLinkPlayers[i].id, 1); + BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1); break; } @@ -487,10 +487,10 @@ static void InitLinkBtlControllers(void) gBattlersCount = MAX_BATTLERS_COUNT; } - sub_81B8D64(0, 0); - sub_81B8D64(1, 0); - sub_81B8D64(2, 1); - sub_81B8D64(3, 1); + BufferBattlePartyCurrentOrderBySide(0, 0); + BufferBattlePartyCurrentOrderBySide(1, 0); + BufferBattlePartyCurrentOrderBySide(2, 1); + BufferBattlePartyCurrentOrderBySide(3, 1); gBattlerPartyIndexes[0] = 0; gBattlerPartyIndexes[1] = 0; gBattlerPartyIndexes[2] = 3; @@ -509,11 +509,11 @@ static void InitLinkBtlControllers(void) { case 0: case 3: - sub_81B8D64(gLinkPlayers[i].id, 0); + BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0); break; case 1: case 2: - sub_81B8D64(gLinkPlayers[i].id, 1); + BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1); break; } @@ -1175,13 +1175,13 @@ void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4) +void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8 *arg4) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON; sBattleBuffersTransferData[1] = caseId; - sBattleBuffersTransferData[2] = arg2; + sBattleBuffersTransferData[2] = slotId; sBattleBuffersTransferData[3] = abilityId; for (i = 0; i < 3; i++) sBattleBuffersTransferData[4 + i] = arg4[i]; @@ -1311,14 +1311,14 @@ void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c) +void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE; - sBattleBuffersTransferData[1] = b; - for (i = 0; i < 3; i++) - sBattleBuffersTransferData[2 + i] = c[i]; + sBattleBuffersTransferData[1] = partyId; + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + sBattleBuffersTransferData[2 + i] = battlePartyOrder[i]; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5); } diff --git a/src/battle_dome.c b/src/battle_dome.c index 1c116467d..a7d7a92f1 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -8,7 +8,7 @@ #include "event_data.h" #include "overworld.h" #include "util.h" -#include "alloc.h" +#include "malloc.h" #include "string_util.h" #include "random.h" #include "task.h" @@ -2330,7 +2330,7 @@ static void GetDomeData(void) } break; case 8: - sub_81B8558(); + ClearSelectedPartyOrder(); gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.field_CB0; gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8; break; diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index f56442432..36839cde5 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -11,7 +11,7 @@ #include "palette.h" #include "task.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "gpu_regs.h" #include "string_util.h" diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index de403aec7..341cd4a6a 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -6,7 +6,7 @@ #include "constants/battle_anim.h" #include "battle_interface.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "graphics.h" #include "random.h" #include "util.h" @@ -811,7 +811,7 @@ bool8 BattleInitAllSprites(u8 *state1, u8 *battlerId) break; case 6: LoadAndCreateEnemyShadowSprites(); - sub_81B8C68(); + BufferBattlePartyCurrentOrder(); retVal = TRUE; break; } @@ -1061,8 +1061,8 @@ void HandleBattleLowHpMusicChange(void) { u8 playerBattler1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); u8 playerBattler2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - u8 battler1PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler1]); - u8 battler2PartyId = pokemon_order_func(gBattlerPartyIndexes[playerBattler2]); + u8 battler1PartyId = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[playerBattler1]); + u8 battler2PartyId = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[playerBattler2]); if (GetMonData(&gPlayerParty[battler1PartyId], MON_DATA_HP) != 0) HandleLowHpMusicChange(&gPlayerParty[battler1PartyId], playerBattler1); diff --git a/src/battle_main.c b/src/battle_main.c index e623865f7..ab8c73ed4 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -26,7 +26,7 @@ #include "link_rfu.h" #include "load_save.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "m4a.h" #include "palette.h" #include "party_menu.h" @@ -54,6 +54,7 @@ #include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" #include "constants/species.h" @@ -166,8 +167,8 @@ EWRAM_DATA static u32 sUnusedUnknownArray[25] = {0}; EWRAM_DATA u32 gBattleTypeFlags = 0; EWRAM_DATA u8 gBattleTerrain = 0; EWRAM_DATA u32 gUnknown_02022FF4 = 0; -EWRAM_DATA struct UnknownPokemonStruct4 gUnknown_02022FF8[3] = {0}; // what is it used for? -EWRAM_DATA struct UnknownPokemonStruct4* gUnknown_02023058 = NULL; // what is it used for? +EWRAM_DATA struct UnknownPokemonStruct4 gMultiPartnerParty[MULTI_PARTY_SIZE] = {0}; +EWRAM_DATA static struct UnknownPokemonStruct4* sMultiPartnerPartyBuffer = NULL; EWRAM_DATA u8 *gUnknown_0202305C = NULL; EWRAM_DATA u8 *gUnknown_02023060 = NULL; EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0}; @@ -453,7 +454,7 @@ const u8 gTypeEffectiveness[336] = TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT }; -const u8 gTypeNames[][TYPE_NAME_LENGTH + 1] = +const u8 gTypeNames[NUMBER_OF_MON_TYPES][TYPE_NAME_LENGTH + 1] = { _("NORMAL"), _("FIGHT"), @@ -1248,12 +1249,12 @@ static void CB2_HandleStartMultiPartnerBattle(void) if (gLinkPlayers[playerMultiplayerId].id != 0) { memcpy(gPlayerParty, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); - memcpy(gPlayerParty + 3, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2); + memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2); } else { memcpy(gPlayerParty, gBlockRecvBuffer[playerMultiplayerId], sizeof(struct Pokemon) * 2); - memcpy(gPlayerParty + 3, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); + memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[enemyMultiplayerId], sizeof(struct Pokemon) * 2); } gBattleCommunication[MULTIUSE_STATE]++; } @@ -1396,22 +1397,22 @@ static void sub_80379F8(u8 arrayIdPlus) { s32 i; - for (i = 0; i < 3; i++) - { - gUnknown_02022FF8[i].species = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_SPECIES); - gUnknown_02022FF8[i].heldItem = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HELD_ITEM); - GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_NICKNAME, gUnknown_02022FF8[i].nickname); - gUnknown_02022FF8[i].level = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LEVEL); - gUnknown_02022FF8[i].hp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HP); - gUnknown_02022FF8[i].maxhp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_MAX_HP); - gUnknown_02022FF8[i].status = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_STATUS); - gUnknown_02022FF8[i].personality = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_PERSONALITY); - gUnknown_02022FF8[i].gender = GetMonGender(&gPlayerParty[arrayIdPlus + i]); - StripExtCtrlCodes(gUnknown_02022FF8[i].nickname); + for (i = 0; i < (int)ARRAY_COUNT(gMultiPartnerParty); i++) + { + gMultiPartnerParty[i].species = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_SPECIES); + gMultiPartnerParty[i].heldItem = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HELD_ITEM); + GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_NICKNAME, gMultiPartnerParty[i].nickname); + gMultiPartnerParty[i].level = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LEVEL); + gMultiPartnerParty[i].hp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_HP); + gMultiPartnerParty[i].maxhp = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_MAX_HP); + gMultiPartnerParty[i].status = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_STATUS); + gMultiPartnerParty[i].personality = GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_PERSONALITY); + gMultiPartnerParty[i].gender = GetMonGender(&gPlayerParty[arrayIdPlus + i]); + StripExtCtrlCodes(gMultiPartnerParty[i].nickname); if (GetMonData(&gPlayerParty[arrayIdPlus + i], MON_DATA_LANGUAGE) != LANGUAGE_JAPANESE) - PadNameString(gUnknown_02022FF8[i].nickname, CHAR_SPACE); + PadNameString(gMultiPartnerParty[i].nickname, CHAR_SPACE); } - memcpy(gUnknown_02023058, gUnknown_02022FF8, sizeof(gUnknown_02022FF8)); + memcpy(sMultiPartnerPartyBuffer, gMultiPartnerParty, sizeof(gMultiPartnerParty)); } static void CB2_PreInitMultiBattle(void) @@ -1443,9 +1444,9 @@ static void CB2_PreInitMultiBattle(void) case 0: if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) { - gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3); + sMultiPartnerPartyBuffer = Alloc(sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); sub_80379F8(0); - SendBlock(bitmask_all_link_players_but_self(), gUnknown_02023058, sizeof(struct UnknownPokemonStruct4) * 3); + SendBlock(bitmask_all_link_players_but_self(), sMultiPartnerPartyBuffer, sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1458,24 +1459,24 @@ static void CB2_PreInitMultiBattle(void) if (i == playerMultiplierId) continue; - if (numPlayers == 4) + if (numPlayers == MAX_LINK_PLAYERS) { if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[playerMultiplierId].id & 1)) || (gLinkPlayers[i].id & 1 && gLinkPlayers[playerMultiplierId].id & 1)) { - memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3); + memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); } } else { - memcpy(gUnknown_02022FF8, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * 3); + memcpy(gMultiPartnerParty, gBlockRecvBuffer[i], sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); } } gBattleCommunication[MULTIUSE_STATE]++; *savedCallback = gMain.savedCallback; *savedBattleTypeFlags = gBattleTypeFlags; gMain.savedCallback = CB2_PreInitMultiBattle; - sub_81B9150(); + ShowPartyMenuToShowcaseMultiBattleParty(); } break; case 2: @@ -1491,13 +1492,13 @@ static void CB2_PreInitMultiBattle(void) case 3: if (gWirelessCommType) { - if (sub_8010500()) + if (IsLinkRfuTaskFinished()) { gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - Free(gUnknown_02023058); - gUnknown_02023058 = NULL; + Free(sMultiPartnerPartyBuffer); + sMultiPartnerPartyBuffer = NULL; } } else if (gReceivedRemoteLinkPlayers == 0) @@ -1505,8 +1506,8 @@ static void CB2_PreInitMultiBattle(void) gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - Free(gUnknown_02023058); - gUnknown_02023058 = NULL; + Free(sMultiPartnerPartyBuffer); + sMultiPartnerPartyBuffer = NULL; } break; } @@ -1527,13 +1528,13 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void) switch (gBattleCommunication[MULTIUSE_STATE]) { case 0: - gUnknown_02023058 = Alloc(sizeof(struct UnknownPokemonStruct4) * 3); + sMultiPartnerPartyBuffer = Alloc(sizeof(struct UnknownPokemonStruct4) * ARRAY_COUNT(gMultiPartnerParty)); sub_80379F8(3); gBattleCommunication[MULTIUSE_STATE]++; *savedCallback = gMain.savedCallback; *savedBattleTypeFlags = gBattleTypeFlags; gMain.savedCallback = CB2_PreInitIngamePlayerPartnerBattle; - sub_81B9150(); + ShowPartyMenuToShowcaseMultiBattleParty(); break; case 1: if (!gPaletteFade.active) @@ -1542,8 +1543,8 @@ static void CB2_PreInitIngamePlayerPartnerBattle(void) gBattleTypeFlags = *savedBattleTypeFlags; gMain.savedCallback = *savedCallback; SetMainCallback2(CB2_InitBattleInternal); - Free(gUnknown_02023058); - gUnknown_02023058 = NULL; + Free(sMultiPartnerPartyBuffer); + sMultiPartnerPartyBuffer = NULL; } break; } @@ -1666,7 +1667,7 @@ static void CB2_HandleStartMultiBattle(void) break; case 1: case 2: - memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); break; } } @@ -1683,7 +1684,7 @@ static void CB2_HandleStartMultiBattle(void) break; case 1: case 2: - memcpy(gPlayerParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + memcpy(gPlayerParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); break; } } @@ -1697,7 +1698,7 @@ static void CB2_HandleStartMultiBattle(void) break; case 1: case 2: - memcpy(gEnemyParty + 3, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); + memcpy(gEnemyParty + MULTI_PARTY_SIZE, gBlockRecvBuffer[id], sizeof(struct Pokemon) * 2); break; } } @@ -4121,34 +4122,34 @@ u8 IsRunningFromBattleImpossible(void) return 0; } -void sub_803BDA0(u8 battler) +void SwitchPartyOrder(u8 battler) { s32 i; - u8 r4; - u8 r1; + u8 partyId1; + u8 partyId2; // gBattleStruct->field_60[battler][i] - for (i = 0; i < 3; i++) - gUnknown_0203CF00[i] = *(battler * 3 + i + (u8*)(gBattleStruct->field_60)); + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8*)(gBattleStruct->field_60)); - r4 = pokemon_order_func(gBattlerPartyIndexes[battler]); - r1 = pokemon_order_func(*(gBattleStruct->monToSwitchIntoId + battler)); - sub_81B8FB0(r4, r1); + partyId1 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]); + partyId2 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler)); + SwitchPartyMonSlots(partyId1, partyId2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - for (i = 0; i < 3; i++) + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) { - *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i]; - *(BATTLE_PARTNER(battler) * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i]; + *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; + *(BATTLE_PARTNER(battler) * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; } } else { - for (i = 0; i < 3; i++) + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) { - *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i]; + *(battler * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; } } } @@ -4283,7 +4284,7 @@ static void HandleTurnActionSelectionState(void) || gBattleTypeFlags & BATTLE_TYPE_ARENA || gStatuses3[gActiveBattler] & STATUS3_ROOTED) { - BtlController_EmitChoosePokemon(0, PARTY_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_CANT_SWITCH, PARTY_SIZE, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); } else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG)) || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) @@ -4292,16 +4293,16 @@ static void HandleTurnActionSelectionState(void) || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0)) && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))) { - BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, PARTY_SIZE, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]); } else { if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH) - BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH) - BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); else - BtlController_EmitChoosePokemon(0, PARTY_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, PARTY_SIZE, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); } MarkBattlerForControllerExec(gActiveBattler); break; @@ -4589,7 +4590,7 @@ static void HandleTurnActionSelectionState(void) for (i = 0; i < gBattlersCount; i++) { if (gChosenActionByBattler[i] == B_ACTION_SWITCH) - sub_80571DC(i, *(gBattleStruct->monToSwitchIntoId + i)); + SwitchPartyOrderInGameMulti(i, *(gBattleStruct->monToSwitchIntoId + i)); } } } diff --git a/src/battle_message.c b/src/battle_message.c index 3fec571f4..80c6f583b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -874,8 +874,8 @@ const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] = [STRINGID_FORFEITEDMATCH - 12] = sText_ForfeitedMatch, [STRINGID_PKMNTRANSFERREDSOMEONESPC - 12] = gText_PkmnTransferredSomeonesPC, [STRINGID_PKMNTRANSFERREDLANETTESPC - 12] = gText_PkmnTransferredLanettesPC, - [STRINGID_PKMNBOXSOMEONESPCFULL - 12] = gText_PkmnBoxSomeonesPCFull, - [STRINGID_PKMNBOXLANETTESPCFULL - 12] = gText_PkmnBoxLanettesPCFull, + [STRINGID_PKMNBOXSOMEONESPCFULL - 12] = gText_PkmnTransferredSomeonesPCBoxFull, + [STRINGID_PKMNBOXLANETTESPCFULL - 12] = gText_PkmnTransferredLanettesPCBoxFull, [STRINGID_TRAINER1WINTEXT - 12] = sText_Trainer1WinText, [STRINGID_TRAINER2WINTEXT - 12] = sText_Trainer2WinText, }; @@ -2759,7 +2759,7 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst) value = T1_READ_32(&src[srcID + 3]); break; } - ConvertIntToDecimalStringN(dst, value, 0, src[srcID + 2]); + ConvertIntToDecimalStringN(dst, value, STR_CONV_MODE_LEFT_ALIGN, src[srcID + 2]); srcID += src[srcID + 1] + 3; break; case B_BUFF_MOVE: // move name diff --git a/src/battle_pike.c b/src/battle_pike.c index 4e2be23e4..36bf8dcbf 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -9,7 +9,7 @@ #include "task.h" #include "battle_tower.h" #include "party_menu.h" -#include "alloc.h" +#include "malloc.h" #include "palette.h" #include "script.h" #include "battle_setup.h" @@ -22,20 +22,8 @@ #include "constants/trainers.h" #include "constants/species.h" #include "constants/moves.h" - -#define PIKE_ROOM_SINGLE_BATTLE 0 -#define PIKE_ROOM_HEAL_FULL 1 -#define PIKE_ROOM_NPC 2 -#define PIKE_ROOM_STATUS 3 -#define PIKE_ROOM_HEAL_PART 4 -#define PIKE_ROOM_WILD_MONS 5 -#define PIKE_ROOM_HARD_BATTLE 6 -#define PIKE_ROOM_DOUBLE_BATTLE 7 -#define PIKE_ROOM_BRAIN 8 - -// For the room with a status effect. -#define PIKE_STATUS_KIRLIA 0 -#define PIKE_STATUS_DUSCLOPS 1 +#include "constants/party_menu.h" +#include "constants/battle_pike.h" struct PikeRoomNPC { @@ -935,7 +923,7 @@ static bool8 TryInflictRandomStatus(void) for (i = 0; i < 3; i++) { mon = &gPlayerParty[indices[i]]; - if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0 + if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE && GetMonData(mon, MON_DATA_HP) != 0) { j++; @@ -977,7 +965,7 @@ static bool8 TryInflictRandomStatus(void) for (i = 0; i < 3; i++) { mon = &gPlayerParty[indices[i]]; - if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0 + if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE && GetMonData(mon, MON_DATA_HP) != 0) { j++; @@ -1009,7 +997,7 @@ static bool8 AtLeastOneHealthyMon(void) for (i = 0; i < 3; i++) { struct Pokemon *mon = &gPlayerParty[i]; - if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0 + if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE && GetMonData(mon, MON_DATA_HP) != 0) { healthyMonsCount++; @@ -1298,7 +1286,7 @@ static void TryHealMons(u8 healCount) { canBeHealed = TRUE; } - else if (pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) != 0) + else if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) != AILMENT_NONE) { canBeHealed = TRUE; } @@ -1569,7 +1557,7 @@ static void CanAnyPartyMonsBeHealed(void) struct Pokemon *mon = &gPlayerParty[i]; u16 curr = GetMonData(mon, MON_DATA_HP); u16 max = GetMonData(mon, MON_DATA_MAX_HP); - if (curr >= max && pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)) == 0) + if (curr >= max && GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE) { u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES); for (j = 0; j < MAX_MON_MOVES; j++) diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 4d35f4244..6dcd4063b 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -23,10 +23,11 @@ #include "main.h" #include "load_save.h" #include "script.h" -#include "alloc.h" +#include "malloc.h" #include "overworld.h" #include "event_scripts.h" #include "constants/battle_frontier.h" +#include "constants/battle_pyramid.h" #include "constants/event_objects.h" #include "constants/event_object_movement_constants.h" #include "constants/items.h" @@ -39,38 +40,7 @@ extern const struct MapLayout *const gMapLayouts[]; extern const u16 gUnknown_08D856C8[][16]; -#define TOTAL_ROUNDS 20 -#define PICKUP_ITEMS_PER_ROUND 10 -#define FLOOR_WALKABLE_METATILE 0x28D -#define FLOOR_EXIT_METATILE 0x28E -enum -{ - HINT_EXIT_DIRECTION, - HINT_REMAINING_ITEMS, - HINT_REMAINING_TRAINERS, - HINT_EXIT_SHORT_REMAINING_TRAINERS, - HINT_EXIT_SHORT_REMAINING_ITEMS, - HINT_EXIT_MEDIUM_REMAINING_TRAINERS, - HINT_EXIT_MEDIUM_REMAINING_ITEMS, - HINT_EXIT_FAR_REMAINING_TRAINERS, - HINT_EXIT_FAR_REMAINING_ITEMS, -}; - -enum -{ - OBJ_TRAINERS, - OBJ_ITEMS, -}; - -enum -{ - OBJ_POSITIONS_UNIFORM, - OBJ_POSITIONS_IN_AND_NEAR_ENTRANCE, - OBJ_POSITIONS_IN_AND_NEAR_EXIT, - OBJ_POSITIONS_NEAR_ENTRANCE, - OBJ_POSITIONS_NEAR_EXIT, -}; struct PyramidWildMon { diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index b4ec6cd62..c904d4e98 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -17,7 +17,7 @@ #include "list_menu.h" #include "mail.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "menu_helpers.h" #include "overworld.h" @@ -346,12 +346,12 @@ void InitBattlePyramidBagCursorPosition(void) void CB2_PyramidBagMenuFromStartMenu(void) { - sub_81C4F98(0, CB2_ReturnToFieldWithOpenMenu); + GoToBattlePyramidBagMenu(0, CB2_ReturnToFieldWithOpenMenu); } static void sub_81C4F10(void) { - sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2); + GoToBattlePyramidBagMenu(1, CB2_SetUpReshowBattleScreenAfterMenu2); } void sub_81C4F24(void) @@ -366,18 +366,18 @@ static void sub_81C4F44(u8 taskId) if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - gFieldCallback2 = hm_add_c3_without_phase_2; - sub_81C4F98(3, CB2_ReturnToField); + gFieldCallback2 = CB2_FadeFromPartyMenu; + GoToBattlePyramidBagMenu(3, CB2_ReturnToField); DestroyTask(taskId); } } -void sub_81C4F84(void) +void CB2_ReturnToPyramidBagMenu(void) { - sub_81C4F98(4, gPyramidBagCursorData.callback); + GoToBattlePyramidBagMenu(4, gPyramidBagCursorData.callback); } -void sub_81C4F98(u8 a0, void (*callback)(void)) +void GoToBattlePyramidBagMenu(u8 a0, void (*callback)(void)) { gPyramidBagResources = AllocZeroed(sizeof(*gPyramidBagResources)); @@ -981,7 +981,7 @@ static void HandleMenuActionInput(u8 taskId) sub_8199134(0, 1); } } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { if (id & 1 && IsValidMenuAction(id - 1)) { @@ -989,7 +989,7 @@ static void HandleMenuActionInput(u8 taskId) sub_8199134(-1, 0); } } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { if (!(id & 1) && IsValidMenuAction(id + 1)) { @@ -1202,7 +1202,7 @@ static void BagAction_Give(u8 taskId) } else if (!ItemId_GetImportance(gSpecialVar_ItemId)) { - gPyramidBagResources->callback2 = sub_81B7F60; + gPyramidBagResources->callback2 = CB2_ChooseMonToGiveItem; sub_81C5B14(taskId); } else @@ -1350,7 +1350,7 @@ static void sub_81C6A14(u8 taskId) SetTaskToMainPyramidBagInputHandler(taskId); } -void sub_81C6A94(void) +void TryStoreHeldItemsInPyramidBag(void) { u8 i; struct Pokemon *party = gPlayerParty; @@ -1363,8 +1363,9 @@ void sub_81C6A94(void) for (i = 0; i < 3; i++) { heldItem = GetMonData(&party[i], MON_DATA_HELD_ITEM); - if (heldItem != 0 && !AddBagItem(heldItem, 1)) + if (heldItem != ITEM_NONE && !AddBagItem(heldItem, 1)) { + // Cant store party held items in pyramid bag because bag is full memcpy(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode], newItems, PYRAMID_BAG_ITEMS_COUNT * sizeof(u16)); memcpy(gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode], newQuantities, PYRAMID_BAG_ITEMS_COUNT * sizeof(u8)); Free(newItems); @@ -1374,7 +1375,7 @@ void sub_81C6A94(void) } } - heldItem = 0; + heldItem = ITEM_NONE; for (i = 0; i < 3; i++) { SetMonData(&party[i], MON_DATA_HELD_ITEM, &heldItem); diff --git a/src/battle_records.c b/src/battle_records.c index 3d4cabcb0..ccd16e219 100644 --- a/src/battle_records.c +++ b/src/battle_records.c @@ -18,7 +18,7 @@ #include "international_string_util.h" #include "sound.h" #include "constants/songs.h" -#include "alloc.h" +#include "malloc.h" #include "gpu_regs.h" #include "constants/game_stat.h" #include "trainer_hill.h" diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 1ef046464..a6c0f1ee7 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -52,6 +52,7 @@ #include "menu_specialized.h" #include "constants/rgb.h" #include "data.h" +#include "constants/party_menu.h" extern struct MusicPlayerInfo gMPlayInfo_BGM; @@ -5107,13 +5108,13 @@ static void Cmd_jumpifcantswitch(void) } } -static void sub_804CF10(u8 arg0) +static void sub_804CF10(u8 slotId) { *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; - *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6; + *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]); - BtlController_EmitChoosePokemon(0, PARTY_MUST_CHOOSE_MON, arg0, 0, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_SEND_OUT, slotId, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); } @@ -5145,7 +5146,7 @@ static void Cmd_openpartyscreen(void) } else if (!gSpecialStatuses[gActiveBattler].flag40) { - sub_804CF10(6); + sub_804CF10(PARTY_SIZE); gSpecialStatuses[gActiveBattler].flag40 = 1; } } @@ -5352,9 +5353,9 @@ static void Cmd_openpartyscreen(void) else { if (gBattlescriptCurrInstr[1] & 0x80) - hitmarkerFaintBits = PARTY_CHOOSE_MON; // Used here as the caseId for the EmitChoose function. + hitmarkerFaintBits = PARTY_ACTION_CHOOSE_MON; // Used here as the caseId for the EmitChoose function. else - hitmarkerFaintBits = PARTY_MUST_CHOOSE_MON; + hitmarkerFaintBits = PARTY_ACTION_SEND_OUT; battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(0x80)); if (gSpecialStatuses[battlerId].flag40) @@ -5375,7 +5376,7 @@ static void Cmd_openpartyscreen(void) *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6; gBattleStruct->field_93 &= ~(gBitTable[gActiveBattler]); - BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), 0, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 6; @@ -5433,7 +5434,7 @@ static void Cmd_switchhandleorder(void) break; case 1: if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - sub_803BDA0(gActiveBattler); + SwitchPartyOrder(gActiveBattler); break; case 2: if (!(gBattleStruct->field_93 & gBitTable[gActiveBattler])) @@ -5458,11 +5459,11 @@ static void Cmd_switchhandleorder(void) } else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) { - sub_80571DC(gActiveBattler, *(gBattleStruct->monToSwitchIntoId + gActiveBattler)); + SwitchPartyOrderInGameMulti(gActiveBattler, *(gBattleStruct->monToSwitchIntoId + gActiveBattler)); } else { - sub_803BDA0(gActiveBattler); + SwitchPartyOrder(gActiveBattler); } PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species) @@ -5615,15 +5616,15 @@ static void Cmd_handlelearnnewmove(void) const u8 *jumpPtr1 = T1_READ_PTR(gBattlescriptCurrInstr + 1); const u8 *jumpPtr2 = T1_READ_PTR(gBattlescriptCurrInstr + 5); - u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]); - while (ret == 0xFFFE) - ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], 0); + u16 learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]); + while (learnMove == MON_ALREADY_KNOWS_MOVE) + learnMove = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], FALSE); - if (ret == 0) + if (learnMove == 0) { gBattlescriptCurrInstr = jumpPtr2; } - else if (ret == 0xFFFF) + else if (learnMove == MON_HAS_MAX_MOVES) { gBattlescriptCurrInstr += 10; } @@ -5634,7 +5635,7 @@ static void Cmd_handlelearnnewmove(void) if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED)) { - GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret); + GiveMoveToBattleMon(&gBattleMons[gActiveBattler], learnMove); } if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { @@ -5642,7 +5643,7 @@ static void Cmd_handlelearnnewmove(void) if (gBattlerPartyIndexes[gActiveBattler] == gBattleStruct->expGetterMonId && !(gBattleMons[gActiveBattler].status2 & STATUS2_TRANSFORMED)) { - GiveMoveToBattleMon(&gBattleMons[gActiveBattler], ret); + GiveMoveToBattleMon(&gBattleMons[gActiveBattler], learnMove); } } @@ -5715,8 +5716,8 @@ static void Cmd_yesnoboxlearnmove(void) case 4: if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2) { - u8 movePosition = sub_81C1B94(); - if (movePosition == 4) + u8 movePosition = GetMoveSlotToReplace(); + if (movePosition == MAX_MON_MOVES) { gBattleScripting.learnMoveState = 5; } @@ -7566,19 +7567,19 @@ static void Cmd_forcerandomswitch(void) *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; if (!IsMultiBattle()) - sub_803BDA0(gBattlerTarget); + SwitchPartyOrder(gBattlerTarget); if ((gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) || (gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_MULTI) || (gBattleTypeFlags & BATTLE_TYPE_x2000000 && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) || (gBattleTypeFlags & BATTLE_TYPE_x2000000 && gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - sub_81B8E80(gBattlerTarget, i, 0); - sub_81B8E80(gBattlerTarget ^ BIT_FLANK, i, 1); + SwitchPartyOrderLinkMulti(gBattlerTarget, i, 0); + SwitchPartyOrderLinkMulti(gBattlerTarget ^ BIT_FLANK, i, 1); } if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) - sub_80571DC(gBattlerTarget, i); + SwitchPartyOrderInGameMulti(gBattlerTarget, i); } } else @@ -8524,7 +8525,7 @@ static void Cmd_tryspiteppreduce(void) PREPARE_MOVE_BUFFER(gBattleTextBuff1, gLastMoves[gBattlerTarget]) - ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, 0, 1); + ConvertIntToDecimalStringN(gBattleTextBuff2, ppToDeduct, STR_CONV_MODE_LEFT_ALIGN, 1); PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 1, ppToDeduct) diff --git a/src/battle_setup.c b/src/battle_setup.c index c2d7cb6c6..a978cc24d 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -72,8 +72,8 @@ static void CB2_EndWildBattle(void); static void CB2_EndScriptedWildBattle(void); static u8 GetWildBattleTransition(void); static u8 GetTrainerBattleTransition(void); -static void sub_80B1218(void); -static void sub_80B1234(void); +static void TryUpdateGymLeaderRematchFromWild(void); +static void TryUpdateGymLeaderRematchFromTrainer(void); static void CB2_GiveStarter(void); static void CB2_StartFirstBattle(void); static void CB2_EndFirstBattle(void); @@ -395,8 +395,8 @@ static void DoStandardWildBattle(void) CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } void BattleSetup_StartRoamerBattle(void) @@ -409,8 +409,8 @@ void BattleSetup_StartRoamerBattle(void) CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } static void DoSafariBattle(void) @@ -433,8 +433,8 @@ static void DoBattlePikeWildBattle(void) CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } static void DoTrainerBattle(void) @@ -442,7 +442,7 @@ static void DoTrainerBattle(void) CreateBattleStartTask(GetTrainerBattleTransition(), 0); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_TRAINER_BATTLES); - sub_80B1234(); + TryUpdateGymLeaderRematchFromTrainer(); } static void sub_80B0828(void) @@ -454,7 +454,7 @@ static void sub_80B0828(void) IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_TRAINER_BATTLES); - sub_80B1234(); + TryUpdateGymLeaderRematchFromTrainer(); } // Initiates battle where Wally catches Ralts @@ -475,8 +475,8 @@ void BattleSetup_StartScriptedWildBattle(void) CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } void BattleSetup_StartLatiBattle(void) @@ -487,8 +487,8 @@ void BattleSetup_StartLatiBattle(void) CreateBattleStartTask(GetWildBattleTransition(), 0); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } void BattleSetup_StartLegendaryBattle(void) @@ -526,8 +526,8 @@ void BattleSetup_StartLegendaryBattle(void) IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } void StartGroudonKyogreBattle(void) @@ -543,8 +543,8 @@ void StartGroudonKyogreBattle(void) IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } void StartRegiBattle(void) @@ -576,8 +576,8 @@ void StartRegiBattle(void) IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } static void CB2_EndWildBattle(void) @@ -919,8 +919,8 @@ static void CB2_StartFirstBattle(void) ClearPoisonStepCounter(); IncrementGameStat(GAME_STAT_TOTAL_BATTLES); IncrementGameStat(GAME_STAT_WILD_BATTLES); - sub_80EECC8(); - sub_80B1218(); + IncrementDailyWildBattles(); + TryUpdateGymLeaderRematchFromWild(); } } @@ -930,13 +930,13 @@ static void CB2_EndFirstBattle(void) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } -static void sub_80B1218(void) +static void TryUpdateGymLeaderRematchFromWild(void) { if (GetGameStat(GAME_STAT_WILD_BATTLES) % 60 == 0) UpdateGymLeaderRematch(); } -static void sub_80B1234(void) +static void TryUpdateGymLeaderRematchFromTrainer(void) { if (GetGameStat(GAME_STAT_TRAINER_BATTLES) % 20 == 0) UpdateGymLeaderRematch(); @@ -1273,7 +1273,7 @@ void BattleSetup_StartTrainerBattle(void) MarkApproachingPyramidTrainersAsBattled(); } - else if (sub_81D5C18()) + else if (InTrainerHillChallenge()) { gBattleTypeFlags |= BATTLE_TYPE_TRAINER_HILL; @@ -1288,10 +1288,10 @@ void BattleSetup_StartTrainerBattle(void) sNoOfPossibleTrainerRetScripts = gNoOfApproachingTrainers; gNoOfApproachingTrainers = 0; sShouldCheckTrainerBScript = FALSE; - gUnknown_03006080 = 0; + gWhichTrainerToFaceAfterBattle = 0; gMain.savedCallback = CB2_EndTrainerBattle; - if (InBattlePyramid() || sub_81D5C18()) + if (InBattlePyramid() || InTrainerHillChallenge()) sub_80B0828(); else DoTrainerBattle(); @@ -1307,7 +1307,7 @@ static void CB2_EndTrainerBattle(void) } else if (IsPlayerDefeated(gBattleOutcome) == TRUE) { - if (InBattlePyramid() || sub_81D5C18()) + if (InBattlePyramid() || InTrainerHillChallenge()) SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); else SetMainCallback2(CB2_WhiteOut); @@ -1315,7 +1315,7 @@ static void CB2_EndTrainerBattle(void) else { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - if (!InBattlePyramid() && !sub_81D5C18()) + if (!InBattlePyramid() && !InTrainerHillChallenge()) { RegisterTrainerInMatchCall(); SetBattledTrainersFlags(); @@ -1361,7 +1361,7 @@ void ShowTrainerIntroSpeech(void) sub_80982B8(); } - else if (sub_81D5C18()) + else if (InTrainerHillChallenge()) { if (gNoOfApproachingTrainers == 0 || gNoOfApproachingTrainers == 1) CopyTrainerHillTrainerText(2, LocalIdToHillTrainerId(gSpecialVar_LastTalked)); @@ -1391,7 +1391,7 @@ const u8 *BattleSetup_GetTrainerPostBattleScript(void) sShouldCheckTrainerBScript = FALSE; if (sTrainerBBattleScriptRetAddr != NULL) { - gUnknown_03006080 = 1; + gWhichTrainerToFaceAfterBattle = 1; return sTrainerBBattleScriptRetAddr; } } @@ -1399,7 +1399,7 @@ const u8 *BattleSetup_GetTrainerPostBattleScript(void) { if (sTrainerABattleScriptRetAddr != NULL) { - gUnknown_03006080 = 0; + gWhichTrainerToFaceAfterBattle = 0; return sTrainerABattleScriptRetAddr; } } diff --git a/src/battle_tower.c b/src/battle_tower.c index c55180965..7b9842c48 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -31,8 +31,8 @@ #include "constants/species.h" #include "constants/easy_chat.h" -extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_224157[]; -extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_224166[]; +extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_MaxieTrainer[]; +extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_TabithaTrainer[]; // EWRAM vars. EWRAM_DATA const struct BattleFrontierTrainer *gFacilityTrainers = NULL; @@ -2349,9 +2349,9 @@ void DoSpecialTrainerBattle(void) gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_MULTI | BATTLE_TYPE_INGAME_PARTNER; FillPartnerParty(TRAINER_STEVEN_PARTNER); gApproachingTrainerId = 0; - BattleSetup_ConfigureTrainerBattle(MossdeepCity_SpaceCenter_2F_EventScript_224157 + 1); + BattleSetup_ConfigureTrainerBattle(MossdeepCity_SpaceCenter_2F_EventScript_MaxieTrainer + 1); gApproachingTrainerId = 1; - BattleSetup_ConfigureTrainerBattle(MossdeepCity_SpaceCenter_2F_EventScript_224166 + 1); + BattleSetup_ConfigureTrainerBattle(MossdeepCity_SpaceCenter_2F_EventScript_TabithaTrainer + 1); gPartnerTrainerId = TRAINER_STEVEN_PARTNER; CreateTask(Task_StartBattleAfterTransition, 1); PlayMapChosenOrBattleBGM(0); @@ -3191,7 +3191,7 @@ static void FillPartnerParty(u16 trainerId) sStevenMons[i].fixedIV, TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures. OT_ID_PRESET, STEVEN_OTID); - for (j = 0; j < 6; j++) + for (j = 0; j < PARTY_SIZE; j++) SetMonData(&gPlayerParty[3 + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]); for (j = 0; j < MAX_MON_MOVES; j++) SetMonMoveSlot(&gPlayerParty[3 + i], sStevenMons[i].moves[j], j); diff --git a/src/battle_transition.c b/src/battle_transition.c index fb7fd0c2f..c34419048 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -9,7 +9,7 @@ #include "field_weather.h" #include "gpu_regs.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "overworld.h" #include "palette.h" #include "random.h" diff --git a/src/battle_util2.c b/src/battle_util2.c index f840cd58b..fd0dda76b 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -2,7 +2,7 @@ #include "battle.h" #include "battle_anim.h" #include "battle_controllers.h" -#include "alloc.h" +#include "malloc.h" #include "pokemon.h" #include "trainer_hill.h" #include "party_menu.h" @@ -102,7 +102,7 @@ void AdjustFriendshipOnBattleFaint(u8 battlerId) } } -void sub_80571DC(u8 battlerId, u8 arg1) +void SwitchPartyOrderInGameMulti(u8 battlerId, u8 arg1) { if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) { @@ -110,13 +110,13 @@ void sub_80571DC(u8 battlerId, u8 arg1) // gBattleStruct->field_60[0][i] - for (i = 0; i < 3; i++) - gUnknown_0203CF00[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60)); + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + gBattlePartyCurrentOrder[i] = *(0 * 3 + i + (u8*)(gBattleStruct->field_60)); - sub_81B8FB0(pokemon_order_func(gBattlerPartyIndexes[battlerId]), pokemon_order_func(arg1)); + SwitchPartyMonSlots(GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId]), GetPartyIdFromBattlePartyId(arg1)); - for (i = 0; i < 3; i++) - *(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gUnknown_0203CF00[i]; + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + *(0 * 3 + i + (u8*)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; } } diff --git a/src/berry_blender.c b/src/berry_blender.c index 911c3e545..b4874c3b1 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -12,7 +12,7 @@ #include "bg.h" #include "palette.h" #include "decompress.h" -#include "alloc.h" +#include "malloc.h" #include "gpu_regs.h" #include "text.h" #include "text_window.h" @@ -1174,7 +1174,7 @@ static void sub_8080018(void) { case 0: sub_8080588(); - gLinkType = 0x4422; + gLinkType = LINKTYPE_BERRY_BLENDER; sBerryBlenderData->field_72 = 0; for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { @@ -1517,7 +1517,7 @@ static void sub_80808D4(void) sBerryBlenderData->playAgainState = 0; sBerryBlenderData->loadGfxState = 0; - gLinkType = 0x4422; + gLinkType = LINKTYPE_BERRY_BLENDER; sBerryBlenderData->mainState++; break; case 1: @@ -3339,7 +3339,7 @@ static bool8 Blender_PrintBlendingResults(void) TryAddContestLinkTvShow(&pokeblock, &sBerryBlenderData->tvBlender); CreateTask(sub_8083F3C, 6); - sub_80EECEC(); + IncrementDailyBerryBlender(); RemoveBagItem(gSpecialVar_ItemId, 1); AddPokeblock(&pokeblock); diff --git a/src/berry_crush.c b/src/berry_crush.c index 6259e0a41..8b4c7a545 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "berry_powder.h" #include "bg.h" #include "event_data.h" diff --git a/src/berry_fix_program.c b/src/berry_fix_program.c index 37be569f8..e3c4e2675 100644 --- a/src/berry_fix_program.c +++ b/src/berry_fix_program.c @@ -1,7 +1,7 @@ #include "global.h" #include "gpu_regs.h" #include "multiboot.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "graphics.h" #include "main.h" diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 10a45dc65..e7f6291c4 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -19,7 +19,7 @@ #include "string_util.h" #include "strings.h" #include "bg.h" -#include "alloc.h" +#include "malloc.h" #include "scanline_effect.h" #include "gpu_regs.h" #include "graphics.h" @@ -401,7 +401,7 @@ static void PrintAllBerryData(void) static void PrintBerryNumberAndName(void) { const struct Berry *berry = GetBerryInfo(sBerryTag->berryId); - ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, 2, 2); + ConvertIntToDecimalStringN(gStringVar1, sBerryTag->berryId, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopy(gStringVar2, berry->name); StringExpandPlaceholders(gStringVar4, gText_UnkF908Var1Var2); PrintTextInBerryTagScreen(WIN_BERRY_NAME, gStringVar4, 0, 1, 0, 0); @@ -421,8 +421,8 @@ static void PrintBerrySize(void) fraction = (inches % 100) / 10; inches /= 100; - ConvertIntToDecimalStringN(gStringVar1, inches, 0, 2); - ConvertIntToDecimalStringN(gStringVar2, fraction, 0, 2); + ConvertIntToDecimalStringN(gStringVar1, inches, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, fraction, STR_CONV_MODE_LEFT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_Var1DotVar2); AddTextPrinterParameterized(WIN_SIZE_FIRM, 1, gStringVar4, 0x28, 1, 0, NULL); } diff --git a/src/bg.c b/src/bg.c deleted file mode 100644 index ab4e8b60d..000000000 --- a/src/bg.c +++ /dev/null @@ -1,1256 +0,0 @@ -#include "global.h" -#include "bg.h" -#include "dma3.h" -#include "gpu_regs.h" - -#define DISPCNT_ALL_BG_AND_MODE_BITS (DISPCNT_BG_ALL_ON | 0x7) - -struct BgControl -{ - struct BgConfig { - u16 visible:1; - u16 unknown_1:1; - u16 screenSize:2; - u16 priority:2; - u16 mosaic:1; - u16 wraparound:1; - - u16 charBaseIndex:2; - u16 mapBaseIndex:5; - u16 paletteMode:1; - - u8 unknown_2; - u8 unknown_3; - } configs[4]; - - u16 bgVisibilityAndMode; -}; - -struct BgConfig2 -{ - u32 baseTile:10; - u32 basePalette:4; - u32 unk_3:18; - - void* tilemap; - s32 bg_x; - s32 bg_y; -}; - -static struct BgControl sGpuBgConfigs; -static struct BgConfig2 sGpuBgConfigs2[4]; -static u32 sDmaBusyBitfield[4]; - -u32 gUnneededFireRedVariable; - -static const struct BgConfig sZeroedBgControlStruct = { 0 }; - -void ResetBgs(void) -{ - ResetBgControlStructs(); - sGpuBgConfigs.bgVisibilityAndMode = 0; - SetTextModeAndHideBgs(); -} - -static void SetBgModeInternal(u8 bgMode) -{ - sGpuBgConfigs.bgVisibilityAndMode &= 0xFFF8; - sGpuBgConfigs.bgVisibilityAndMode |= bgMode; -} - -u8 GetBgMode(void) -{ - return sGpuBgConfigs.bgVisibilityAndMode & 0x7; -} - -void ResetBgControlStructs(void) -{ - struct BgConfig* bgConfigs = &sGpuBgConfigs.configs[0]; - struct BgConfig zeroedConfig = sZeroedBgControlStruct; - int i; - - for (i = 0; i < 4; i++) - { - bgConfigs[i] = zeroedConfig; - } -} - -void Unused_ResetBgControlStruct(u8 bg) -{ - if (!IsInvalidBg(bg)) - { - sGpuBgConfigs.configs[bg] = sZeroedBgControlStruct; - } -} - -enum -{ - BG_CTRL_ATTR_VISIBLE = 1, - BG_CTRL_ATTR_CHARBASEINDEX = 2, - BG_CTRL_ATTR_MAPBASEINDEX = 3, - BG_CTRL_ATTR_SCREENSIZE = 4, - BG_CTRL_ATTR_PALETTEMODE = 5, - BG_CTRL_ATTR_PRIORITY = 6, - BG_CTRL_ATTR_MOSAIC = 7, - BG_CTRL_ATTR_WRAPAROUND = 8, -}; - -static void SetBgControlAttributes(u8 bg, u8 charBaseIndex, u8 mapBaseIndex, u8 screenSize, u8 paletteMode, u8 priority, u8 mosaic, u8 wraparound) -{ - if (!IsInvalidBg(bg)) - { - if (charBaseIndex != 0xFF) - { - sGpuBgConfigs.configs[bg].charBaseIndex = charBaseIndex & 0x3; - } - - if (mapBaseIndex != 0xFF) - { - sGpuBgConfigs.configs[bg].mapBaseIndex = mapBaseIndex & 0x1F; - } - - if (screenSize != 0xFF) - { - sGpuBgConfigs.configs[bg].screenSize = screenSize & 0x3; - } - - if (paletteMode != 0xFF) - { - sGpuBgConfigs.configs[bg].paletteMode = paletteMode; - } - - if (priority != 0xFF) - { - sGpuBgConfigs.configs[bg].priority = priority & 0x3; - } - - if (mosaic != 0xFF) - { - sGpuBgConfigs.configs[bg].mosaic = mosaic & 0x1; - } - - if (wraparound != 0xFF) - { - sGpuBgConfigs.configs[bg].wraparound = wraparound; - } - - sGpuBgConfigs.configs[bg].unknown_2 = 0; - sGpuBgConfigs.configs[bg].unknown_3 = 0; - - sGpuBgConfigs.configs[bg].visible = 1; - } -} - -static u16 GetBgControlAttribute(u8 bg, u8 attributeId) -{ - if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible) - { - switch (attributeId) - { - case BG_CTRL_ATTR_VISIBLE: - return sGpuBgConfigs.configs[bg].visible; - case BG_CTRL_ATTR_CHARBASEINDEX: - return sGpuBgConfigs.configs[bg].charBaseIndex; - case BG_CTRL_ATTR_MAPBASEINDEX: - return sGpuBgConfigs.configs[bg].mapBaseIndex; - case BG_CTRL_ATTR_SCREENSIZE: - return sGpuBgConfigs.configs[bg].screenSize; - case BG_CTRL_ATTR_PALETTEMODE: - return sGpuBgConfigs.configs[bg].paletteMode; - case BG_CTRL_ATTR_PRIORITY: - return sGpuBgConfigs.configs[bg].priority; - case BG_CTRL_ATTR_MOSAIC: - return sGpuBgConfigs.configs[bg].mosaic; - case BG_CTRL_ATTR_WRAPAROUND: - return sGpuBgConfigs.configs[bg].wraparound; - } - } - - return 0xFF; -} - -u8 LoadBgVram(u8 bg, const void *src, u16 size, u16 destOffset, u8 mode) -{ - u16 offset; - s8 cursor; - - if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible) - { - switch (mode) - { - case 0x1: - offset = sGpuBgConfigs.configs[bg].charBaseIndex * BG_CHAR_SIZE; - break; - case 0x2: - offset = sGpuBgConfigs.configs[bg].mapBaseIndex * BG_SCREEN_SIZE; - break; - default: - cursor = -1; - goto end; - } - - offset = destOffset + offset; - - cursor = RequestDma3Copy(src, (void*)(offset + BG_VRAM), size, 0); - - if (cursor == -1) - { - return -1; - } - } - else - { - return -1; - } - -end: - return cursor; -} - -static void ShowBgInternal(u8 bg) -{ - u16 value; - if (!IsInvalidBg(bg) && sGpuBgConfigs.configs[bg].visible) - { - value = sGpuBgConfigs.configs[bg].priority | - (sGpuBgConfigs.configs[bg].charBaseIndex << 2) | - (sGpuBgConfigs.configs[bg].mosaic << 6) | - (sGpuBgConfigs.configs[bg].paletteMode << 7) | - (sGpuBgConfigs.configs[bg].mapBaseIndex << 8) | - (sGpuBgConfigs.configs[bg].wraparound << 13) | - (sGpuBgConfigs.configs[bg].screenSize << 14); - - SetGpuReg((bg << 1) + REG_OFFSET_BG0CNT, value); - - sGpuBgConfigs.bgVisibilityAndMode |= 1 << (bg + 8); - sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS; - } -} - -static void HideBgInternal(u8 bg) -{ - if (!IsInvalidBg(bg)) - { - sGpuBgConfigs.bgVisibilityAndMode &= ~(1 << (bg + 8)); - sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS; - } -} - -static void SyncBgVisibilityAndMode(void) -{ - SetGpuReg(REG_OFFSET_DISPCNT, (GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_ALL_BG_AND_MODE_BITS) | sGpuBgConfigs.bgVisibilityAndMode); -} - -void SetTextModeAndHideBgs(void) -{ - SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_ALL_BG_AND_MODE_BITS); -} - -static void SetBgAffineInternal(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) -{ - struct BgAffineSrcData src; - struct BgAffineDstData dest; - - switch (sGpuBgConfigs.bgVisibilityAndMode & 0x7) - { - case 1: - if (bg != 2) - return; - break; - case 2: - if (bg < 2 || bg > 3) - return; - break; - case 0: - default: - return; - } - - src.texX = srcCenterX; - src.texY = srcCenterY; - src.scrX = dispCenterX; - src.scrY = dispCenterY; - src.sx = scaleX; - src.sy = scaleY; - src.alpha = rotationAngle; - - BgAffineSet(&src, &dest, 1); - - SetGpuReg(REG_OFFSET_BG2PA, dest.pa); - SetGpuReg(REG_OFFSET_BG2PB, dest.pb); - SetGpuReg(REG_OFFSET_BG2PC, dest.pc); - SetGpuReg(REG_OFFSET_BG2PD, dest.pd); - SetGpuReg(REG_OFFSET_BG2PA, dest.pa); - SetGpuReg(REG_OFFSET_BG2X_L, (s16)(dest.dx)); - SetGpuReg(REG_OFFSET_BG2X_H, (s16)(dest.dx >> 16)); - SetGpuReg(REG_OFFSET_BG2Y_L, (s16)(dest.dy)); - SetGpuReg(REG_OFFSET_BG2Y_H, (s16)(dest.dy >> 16)); -} - -bool8 IsInvalidBg(u8 bg) -{ - if (bg > 3) - return TRUE; - else - return FALSE; -} - -int DummiedOutFireRedLeafGreenTileAllocFunc(int a1, int a2, int a3, int a4) -{ - return 0; -} - -void ResetBgsAndClearDma3BusyFlags(u32 leftoverFireRedLeafGreenVariable) -{ - int i; - ResetBgs(); - - for (i = 0; i < 4; i++) - { - sDmaBusyBitfield[i] = 0; - } - - gUnneededFireRedVariable = leftoverFireRedLeafGreenVariable; -} - -void InitBgsFromTemplates(u8 bgMode, const struct BgTemplate *templates, u8 numTemplates) -{ - int i; - u8 bg; - - SetBgModeInternal(bgMode); - ResetBgControlStructs(); - - for (i = 0; i < numTemplates; i++) - { - bg = templates[i].bg; - if (bg < 4) - { - SetBgControlAttributes(bg, - templates[i].charBaseIndex, - templates[i].mapBaseIndex, - templates[i].screenSize, - templates[i].paletteMode, - templates[i].priority, - 0, - 0); - - sGpuBgConfigs2[bg].baseTile = templates[i].baseTile; - sGpuBgConfigs2[bg].basePalette = 0; - sGpuBgConfigs2[bg].unk_3 = 0; - - sGpuBgConfigs2[bg].tilemap = NULL; - sGpuBgConfigs2[bg].bg_x = 0; - sGpuBgConfigs2[bg].bg_y = 0; - } - } -} - -void InitBgFromTemplate(const struct BgTemplate *template) -{ - u8 bg = template->bg; - - if (bg < 4) - { - SetBgControlAttributes(bg, - template->charBaseIndex, - template->mapBaseIndex, - template->screenSize, - template->paletteMode, - template->priority, - 0, - 0); - - sGpuBgConfigs2[bg].baseTile = template->baseTile; - sGpuBgConfigs2[bg].basePalette = 0; - sGpuBgConfigs2[bg].unk_3 = 0; - - sGpuBgConfigs2[bg].tilemap = NULL; - sGpuBgConfigs2[bg].bg_x = 0; - sGpuBgConfigs2[bg].bg_y = 0; - } -} - -void SetBgMode(u8 bgMode) -{ - SetBgModeInternal(bgMode); -} - -u16 LoadBgTiles(u8 bg, const void* src, u16 size, u16 destOffset) -{ - u16 tileOffset; - u8 cursor; - - if (GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE) == 0) - { - tileOffset = (sGpuBgConfigs2[bg].baseTile + destOffset) * 0x20; - } - else - { - tileOffset = (sGpuBgConfigs2[bg].baseTile + destOffset) * 0x40; - } - - cursor = LoadBgVram(bg, src, size, tileOffset, DISPCNT_MODE_1); - - if (cursor == 0xFF) - { - return -1; - } - - sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20)); - - if (gUnneededFireRedVariable == 1) - { - DummiedOutFireRedLeafGreenTileAllocFunc(bg, tileOffset / 0x20, size / 0x20, 1); - } - - return cursor; -} - -u16 LoadBgTilemap(u8 bg, const void *src, u16 size, u16 destOffset) -{ - u8 cursor = LoadBgVram(bg, src, size, destOffset * 2, DISPCNT_MODE_2); - - if (cursor == 0xFF) - { - return -1; - } - - sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20)); - - return cursor; -} - -u16 Unused_LoadBgPalette(u8 bg, const void *src, u16 size, u16 destOffset) -{ - s8 cursor; - - if (!IsInvalidBg32(bg)) - { - u16 paletteOffset = (sGpuBgConfigs2[bg].basePalette * 0x20) + (destOffset * 2); - cursor = RequestDma3Copy(src, (void*)(paletteOffset + BG_PLTT), size, 0); - - if (cursor == -1) - { - return -1; - } - } - else - { - return -1; - } - - sDmaBusyBitfield[cursor / 0x20] |= (1 << (cursor % 0x20)); - - return (u8)cursor; -} - -bool8 IsDma3ManagerBusyWithBgCopy(void) -{ - int i; - - for (i = 0; i < 0x80; i++) - { - u8 div = i / 0x20; - u8 mod = i % 0x20; - - if ((sDmaBusyBitfield[div] & (1 << mod))) - { - s8 reqSpace = CheckForSpaceForDma3Request(i); - if (reqSpace == -1) - { - return TRUE; - } - - sDmaBusyBitfield[div] &= ~(1 << mod); - } - } - - return FALSE; -} - -void ShowBg(u8 bg) -{ - ShowBgInternal(bg); - SyncBgVisibilityAndMode(); -} - -void HideBg(u8 bg) -{ - HideBgInternal(bg); - SyncBgVisibilityAndMode(); -} - -void SetBgAttribute(u8 bg, u8 attributeId, u8 value) -{ - switch (attributeId) - { - case BG_ATTR_CHARBASEINDEX: - SetBgControlAttributes(bg, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF); - break; - case BG_ATTR_MAPBASEINDEX: - SetBgControlAttributes(bg, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF); - break; - case BG_ATTR_SCREENSIZE: - SetBgControlAttributes(bg, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF, 0xFF); - break; - case BG_ATTR_PALETTEMODE: - SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF, 0xFF); - break; - case BG_ATTR_PRIORITY: - SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF, 0xFF); - break; - case BG_ATTR_MOSAIC: - SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value, 0xFF); - break; - case BG_ATTR_WRAPAROUND: - SetBgControlAttributes(bg, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, value); - break; - } -} - -u16 GetBgAttribute(u8 bg, u8 attributeId) -{ - switch (attributeId) - { - case BG_ATTR_CHARBASEINDEX: - return GetBgControlAttribute(bg, BG_CTRL_ATTR_CHARBASEINDEX); - case BG_ATTR_MAPBASEINDEX: - return GetBgControlAttribute(bg, BG_CTRL_ATTR_MAPBASEINDEX); - case BG_ATTR_SCREENSIZE: - return GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); - case BG_ATTR_PALETTEMODE: - return GetBgControlAttribute(bg, BG_CTRL_ATTR_PALETTEMODE); - case BG_ATTR_PRIORITY: - return GetBgControlAttribute(bg, BG_CTRL_ATTR_PRIORITY); - case BG_ATTR_MOSAIC: - return GetBgControlAttribute(bg, BG_CTRL_ATTR_MOSAIC); - case BG_ATTR_WRAPAROUND: - return GetBgControlAttribute(bg, BG_CTRL_ATTR_WRAPAROUND); - case BG_ATTR_METRIC: - switch (GetBgType(bg)) - { - case 0: - return GetBgMetricTextMode(bg, 0) * 0x800; - case 1: - return GetBgMetricAffineMode(bg, 0) * 0x100; - default: - return 0; - } - case BG_ATTR_TYPE: - return GetBgType(bg); - case BG_ATTR_BASETILE: - return sGpuBgConfigs2[bg].baseTile; - default: - return -1; - } -} - -s32 ChangeBgX(u8 bg, s32 value, u8 op) -{ - u8 mode; - u16 temp1; - u16 temp2; - - if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) - { - return -1; - } - - switch (op) - { - case 0: - default: - sGpuBgConfigs2[bg].bg_x = value; - break; - case 1: - sGpuBgConfigs2[bg].bg_x += value; - break; - case 2: - sGpuBgConfigs2[bg].bg_x -= value; - break; - } - - mode = GetBgMode(); - - switch (bg) - { - case 0: - temp1 = sGpuBgConfigs2[0].bg_x >> 0x8; - SetGpuReg(REG_OFFSET_BG0HOFS, temp1); - break; - case 1: - temp1 = sGpuBgConfigs2[1].bg_x >> 0x8; - SetGpuReg(REG_OFFSET_BG1HOFS, temp1); - break; - case 2: - if (mode == 0) - { - temp1 = sGpuBgConfigs2[2].bg_x >> 0x8; - SetGpuReg(REG_OFFSET_BG2HOFS, temp1); - } - else - { - temp1 = sGpuBgConfigs2[2].bg_x >> 0x10; - temp2 = sGpuBgConfigs2[2].bg_x & 0xFFFF; - SetGpuReg(REG_OFFSET_BG2X_H, temp1); - SetGpuReg(REG_OFFSET_BG2X_L, temp2); - } - break; - case 3: - if (mode == 0) - { - temp1 = sGpuBgConfigs2[3].bg_x >> 0x8; - SetGpuReg(REG_OFFSET_BG3HOFS, temp1); - } - else if (mode == 2) - { - temp1 = sGpuBgConfigs2[3].bg_x >> 0x10; - temp2 = sGpuBgConfigs2[3].bg_x & 0xFFFF; - SetGpuReg(REG_OFFSET_BG3X_H, temp1); - SetGpuReg(REG_OFFSET_BG3X_L, temp2); - } - break; - } - - return sGpuBgConfigs2[bg].bg_x; -} - -s32 GetBgX(u8 bg) -{ - if (IsInvalidBg32(bg)) - return -1; - else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) - return -1; - else - return sGpuBgConfigs2[bg].bg_x; -} - -s32 ChangeBgY(u8 bg, s32 value, u8 op) -{ - u8 mode; - u16 temp1; - u16 temp2; - - if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) - { - return -1; - } - - switch (op) - { - case 0: - default: - sGpuBgConfigs2[bg].bg_y = value; - break; - case 1: - sGpuBgConfigs2[bg].bg_y += value; - break; - case 2: - sGpuBgConfigs2[bg].bg_y -= value; - break; - } - - mode = GetBgMode(); - - switch (bg) - { - case 0: - temp1 = sGpuBgConfigs2[0].bg_y >> 0x8; - SetGpuReg(REG_OFFSET_BG0VOFS, temp1); - break; - case 1: - temp1 = sGpuBgConfigs2[1].bg_y >> 0x8; - SetGpuReg(REG_OFFSET_BG1VOFS, temp1); - break; - case 2: - if (mode == 0) - { - temp1 = sGpuBgConfigs2[2].bg_y >> 0x8; - SetGpuReg(REG_OFFSET_BG2VOFS, temp1); - } - else - { - temp1 = sGpuBgConfigs2[2].bg_y >> 0x10; - temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF; - SetGpuReg(REG_OFFSET_BG2Y_H, temp1); - SetGpuReg(REG_OFFSET_BG2Y_L, temp2); - } - break; - case 3: - if (mode == 0) - { - temp1 = sGpuBgConfigs2[3].bg_y >> 0x8; - SetGpuReg(REG_OFFSET_BG3VOFS, temp1); - } - else if (mode == 2) - { - temp1 = sGpuBgConfigs2[3].bg_y >> 0x10; - temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF; - SetGpuReg(REG_OFFSET_BG3Y_H, temp1); - SetGpuReg(REG_OFFSET_BG3Y_L, temp2); - } - break; - } - - return sGpuBgConfigs2[bg].bg_y; -} - -s32 ChangeBgY_ScreenOff(u8 bg, u32 value, u8 op) -{ - u8 mode; - u16 temp1; - u16 temp2; - - if (IsInvalidBg32(bg) || !GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) - { - return -1; - } - - switch (op) - { - case 0: - default: - sGpuBgConfigs2[bg].bg_y = value; - break; - case 1: - sGpuBgConfigs2[bg].bg_y += value; - break; - case 2: - sGpuBgConfigs2[bg].bg_y -= value; - break; - } - - mode = GetBgMode(); - - switch (bg) - { - case 0: - temp1 = sGpuBgConfigs2[0].bg_y >> 0x8; - SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, temp1); - break; - case 1: - temp1 = sGpuBgConfigs2[1].bg_y >> 0x8; - SetGpuReg_ForcedBlank(REG_OFFSET_BG1VOFS, temp1); - break; - case 2: - if (mode == 0) - { - temp1 = sGpuBgConfigs2[2].bg_y >> 0x8; - SetGpuReg_ForcedBlank(REG_OFFSET_BG2VOFS, temp1); - - } - else - { - temp1 = sGpuBgConfigs2[2].bg_y >> 0x10; - temp2 = sGpuBgConfigs2[2].bg_y & 0xFFFF; - SetGpuReg_ForcedBlank(REG_OFFSET_BG2Y_H, temp1); - SetGpuReg_ForcedBlank(REG_OFFSET_BG2Y_L, temp2); - } - break; - case 3: - if (mode == 0) - { - temp1 = sGpuBgConfigs2[3].bg_y >> 0x8; - SetGpuReg_ForcedBlank(REG_OFFSET_BG3VOFS, temp1); - } - else if (mode == 2) - { - temp1 = sGpuBgConfigs2[3].bg_y >> 0x10; - temp2 = sGpuBgConfigs2[3].bg_y & 0xFFFF; - SetGpuReg_ForcedBlank(REG_OFFSET_BG3Y_H, temp1); - SetGpuReg_ForcedBlank(REG_OFFSET_BG3Y_L, temp2); - } - break; - } - - return sGpuBgConfigs2[bg].bg_y; -} - -s32 GetBgY(u8 bg) -{ - if (IsInvalidBg32(bg)) - return -1; - else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) - return -1; - else - return sGpuBgConfigs2[bg].bg_y; -} - -void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) -{ - SetBgAffineInternal(bg, srcCenterX, srcCenterY, dispCenterX, dispCenterY, scaleX, scaleY, rotationAngle); -} - -u8 Unused_AdjustBgMosaic(u8 a1, u8 a2) -{ - u16 result = GetGpuReg(REG_OFFSET_MOSAIC); - s16 test1 = result & 0xF; - s16 test2 = (result >> 4) & 0xF; - - result &= 0xFF00; - - switch (a2) - { - case 0: - default: - test1 = a1 & 0xF; - test2 = a1 >> 0x4; - break; - case 1: - test1 = a1 & 0xF; - break; - case 2: - if ((test1 + a1) > 0xF) - { - test1 = 0xF; - } - else - { - test1 += a1; - } - break; - case 3: - if ((test1 - a1) < 0) - { - test1 = 0x0; - } - else - { - test1 -= a1; - } - break; - case 4: - test2 = a1 & 0xF; - break; - case 5: - if ((test2 + a1) > 0xF) - { - test2 = 0xF; - } - else - { - test2 += a1; - } - break; - case 6: - if ((test2 - a1) < 0) - { - test2 = 0x0; - } - else - { - test2 -= a1; - } - break; - } - - result |= ((test2 << 0x4) & 0xF0); - result |= (test1 & 0xF); - - SetGpuReg(REG_OFFSET_MOSAIC, result); - - return result; -} - -void SetBgTilemapBuffer(u8 bg, void *tilemap) -{ - if (!IsInvalidBg32(bg) && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) - { - sGpuBgConfigs2[bg].tilemap = tilemap; - } -} - -void UnsetBgTilemapBuffer(u8 bg) -{ - if (!IsInvalidBg32(bg) && GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) - { - sGpuBgConfigs2[bg].tilemap = NULL; - } -} - -void* GetBgTilemapBuffer(u8 bg) -{ - if (IsInvalidBg32(bg)) - return NULL; - else if (!GetBgControlAttribute(bg, BG_CTRL_ATTR_VISIBLE)) - return NULL; - else - return sGpuBgConfigs2[bg].tilemap; -} - -void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset) -{ - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) - { - if (mode != 0) - CpuCopy16(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2)), mode); - else - LZ77UnCompWram(src, (void *)(sGpuBgConfigs2[bg].tilemap + (destOffset * 2))); - } -} - -void CopyBgTilemapBufferToVram(u8 bg) -{ - u16 sizeToLoad; - - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) - { - switch (GetBgType(bg)) - { - case 0: - sizeToLoad = GetBgMetricTextMode(bg, 0) * 0x800; - break; - case 1: - sizeToLoad = GetBgMetricAffineMode(bg, 0) * 0x100; - break; - default: - sizeToLoad = 0; - break; - } - LoadBgVram(bg, sGpuBgConfigs2[bg].tilemap, sizeToLoad, 0, 2); - } -} - -void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) -{ - u16 destX16; - u16 destY16; - u16 mode; - - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) - { - switch (GetBgType(bg)) - { - case 0: - { - const u16 * srcCopy = src; - for (destY16 = destY; destY16 < (destY + height); destY16++) - { - for (destX16 = destX; destX16 < (destX + width); destX16++) - { - ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; - } - } - break; - } - case 1: - { - const u8 * srcCopy = src; - mode = GetBgMetricAffineMode(bg, 0x1); - for (destY16 = destY; destY16 < (destY + height); destY16++) - { - for (destX16 = destX; destX16 < (destX + width); destX16++) - { - ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; - } - } - break; - } - } - } -} - -void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette) -{ - CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0); -} - -void CopyRectToBgTilemapBufferRect(u8 bg, const void *src, u8 srcX, u8 srcY, u8 srcWidth, u8 unused, u8 srcHeight, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, s16 palette1, s16 tileOffset) -{ - u16 screenWidth, screenHeight, screenSize; - u16 var; - const void *srcPtr; - u16 i, j; - - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) - { - screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); - screenWidth = GetBgMetricTextMode(bg, 0x1) * 0x20; - screenHeight = GetBgMetricTextMode(bg, 0x2) * 0x20; - switch (GetBgType(bg)) - { - case 0: - srcPtr = src + ((srcY * srcWidth) + srcX) * 2; - for (i = destX; i < (destX + rectWidth); i++) - { - for (j = srcHeight; j < (srcHeight + destY); j++) - { - u16 index = GetTileMapIndexFromCoords(j, i, screenSize, screenWidth, screenHeight); - CopyTileMapEntry(srcPtr, sGpuBgConfigs2[bg].tilemap + (index * 2), rectHeight, palette1, tileOffset); - srcPtr += 2; - } - srcPtr += (srcWidth - destY) * 2; - } - break; - case 1: - srcPtr = src + ((srcY * srcWidth) + srcX); - var = GetBgMetricAffineMode(bg, 0x1); - for (i = destX; i < (destX + rectWidth); i++) - { - for (j = srcHeight; j < (srcHeight + destY); j++) - { - *(u8*)(sGpuBgConfigs2[bg].tilemap + ((var * i) + j)) = *(u8*)(srcPtr) + palette1; - srcPtr++; - } - srcPtr += (srcWidth - destY); - } - break; - } - } -} - -void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height) -{ - u16 x16; - u16 y16; - u16 mode; - - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) - { - switch (GetBgType(bg)) - { - case 0: - for (y16 = y; y16 < (y + height); y16++) - { - for (x16 = x; x16 < (x + width); x16++) - { - ((u16*)sGpuBgConfigs2[bg].tilemap)[((y16 * 0x20) + x16)] = tileNum; - } - } - break; - case 1: - mode = GetBgMetricAffineMode(bg, 0x1); - for (y16 = y; y16 < (y + height); y16++) - { - for (x16 = x; x16 < (x + width); x16++) - { - ((u8*)sGpuBgConfigs2[bg].tilemap)[((y16 * mode) + x16)] = tileNum; - } - } - break; - } - } -} - -void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette) -{ - WriteSequenceToBgTilemapBuffer(bg, tileNum, x, y, width, height, palette, 0); -} - -void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, s16 tileNumDelta) -{ - u16 mode; - u16 mode2; - u16 attribute; - u16 mode3; - u16 x16, y16; - - if (!IsInvalidBg32(bg) && !IsTileMapOutsideWram(bg)) - { - attribute = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); - mode = GetBgMetricTextMode(bg, 0x1) * 0x20; - mode2 = GetBgMetricTextMode(bg, 0x2) * 0x20; - switch (GetBgType(bg)) - { - case 0: - for (y16 = y; y16 < (y + height); y16++) - { - for (x16 = x; x16 < (x + width); x16++) - { - CopyTileMapEntry(&firstTileNum, &((u16*)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0); - firstTileNum = (firstTileNum & (METATILE_COLLISION_MASK | METATILE_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & METATILE_ID_MASK); - } - } - break; - case 1: - mode3 = GetBgMetricAffineMode(bg, 0x1); - for (y16 = y; y16 < (y + height); y16++) - { - for (x16 = x; x16 < (x + width); x16++) - { - ((u8*)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum; - firstTileNum = (firstTileNum & (METATILE_COLLISION_MASK | METATILE_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & METATILE_ID_MASK); - } - } - break; - } - } -} - -u16 GetBgMetricTextMode(u8 bg, u8 whichMetric) -{ - u8 screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); - - switch (whichMetric) - { - case 0: - switch (screenSize) - { - case 0: - return 1; - case 1: - case 2: - return 2; - case 3: - return 4; - } - break; - case 1: - switch (screenSize) - { - case 0: - return 1; - case 1: - return 2; - case 2: - return 1; - case 3: - return 2; - } - break; - case 2: - switch (screenSize) - { - case 0: - case 1: - return 1; - case 2: - case 3: - return 2; - } - break; - } - return 0; -} - -u32 GetBgMetricAffineMode(u8 bg, u8 whichMetric) -{ - u8 screenSize = GetBgControlAttribute(bg, BG_CTRL_ATTR_SCREENSIZE); - - switch (whichMetric) - { - case 0: - switch (screenSize) - { - case 0: - return 0x1; - case 1: - return 0x4; - case 2: - return 0x10; - case 3: - return 0x40; - } - break; - case 1: - case 2: - return 0x10 << screenSize; - } - return 0; -} - -u32 GetTileMapIndexFromCoords(s32 x, s32 y, s32 screenSize, u32 screenWidth, u32 screenHeight) -{ - x = x & (screenWidth - 1); - y = y & (screenHeight - 1); - - switch (screenSize) - { - case 0: - case 2: - break; - case 3: - if (y >= 0x20) - y += 0x20; - case 1: - if (x >= 0x20) - { - x -= 0x20; - y += 0x20; - } - break; - } - return (y * 0x20) + x; -} - -void CopyTileMapEntry(const u16 *src, u16 *dest, s32 palette1, s32 tileOffset, s32 palette2) -{ - u16 var; - - if (palette1 == 16) - goto CASE_16; - switch (palette1) - { - case 0 ... 16: - var = ((*src + tileOffset) & 0xFFF) + ((palette1 + palette2) << 12); - break; - CASE_16: - var = *dest; - var &= 0xFC00; - var += palette2 << 12; - var |= (*src + tileOffset) & 0x3FF; - break; - default: - var = *src + tileOffset + (palette2 << 12); - break; - } - *dest = var; -} - -u32 GetBgType(u8 bg) -{ - u8 mode = GetBgMode(); - - switch (bg) - { - case 0: - case 1: - switch (mode) - { - case 0: - case 1: - return 0; - } - break; - case 2: - switch (mode) - { - case 0: - return 0; - case 1: - case 2: - return 1; - } - break; - case 3: - switch (mode) - { - case 0: - return 0; - case 2: - return 1; - } - break; - } - - return 0xFFFF; -} - -bool32 IsInvalidBg32(u8 bg) -{ - if (bg > 3) - return TRUE; - else - return FALSE; -} - -bool32 IsTileMapOutsideWram(u8 bg) -{ - if (sGpuBgConfigs2[bg].tilemap > (void*)IWRAM_END) - return TRUE; - else if (sGpuBgConfigs2[bg].tilemap == NULL) - return TRUE; - else - return FALSE; -} diff --git a/src/bike.c b/src/bike.c index 7f84f350b..fad61ffab 100644 --- a/src/bike.c +++ b/src/bike.c @@ -45,8 +45,8 @@ static u8 AcroBike_GetJumpDirection(void); static void Bike_UpdateDirTimerHistory(u8); static void Bike_UpdateABStartSelectHistory(u8); static u8 Bike_DPadToDirection(u16); -static u8 get_some_collision(u8); -static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct EventObject *, s16, s16, u8, u8); +static u8 GetBikeCollision(u8); +static u8 GetBikeCollisionAt(struct EventObject *, s16, s16, u8, u8); static bool8 IsRunningDisallowedByMetatile(u8); static void Bike_TryAdvanceCyclingRoadCollisions(); static u8 CanBikeFaceDirOnMetatile(u8, u8); @@ -214,8 +214,8 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) } else { - collision = get_some_collision(direction); - if (collision > 0 && collision < 12) + collision = GetBikeCollision(direction); + if (collision > 0 && collision < COLLISION_VERTICAL_RAIL) { // we hit a solid object, but check to see if its a ledge and then jump. if (collision == COLLISION_LEDGE_JUMP) @@ -226,9 +226,9 @@ static void MachBikeTransition_TrySpeedUp(u8 direction) { // we hit a solid object that is not a ledge, so perform the collision. Bike_SetBikeStill(); - if (collision == 4 && IsPlayerCollidingWithFarawayIslandMew(direction)) + if (collision == COLLISION_EVENT_OBJECT && IsPlayerCollidingWithFarawayIslandMew(direction)) PlayerOnBikeCollideWithFarawayIslandMew(direction); - else if (collision < 5 || collision > 8) + else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE) PlayerOnBikeCollide(direction); } } @@ -250,9 +250,9 @@ static void MachBikeTransition_TrySlowDown(u8 direction) if (gPlayerAvatar.bikeSpeed != SPEED_STANDING) gPlayerAvatar.bikeFrameCounter = --gPlayerAvatar.bikeSpeed; - collision = get_some_collision(direction); + collision = GetBikeCollision(direction); - if (collision > 0 && collision < 12) + if (collision > 0 && collision < COLLISION_VERTICAL_RAIL) { if (collision == COLLISION_LEDGE_JUMP) { @@ -261,9 +261,9 @@ static void MachBikeTransition_TrySlowDown(u8 direction) else { Bike_SetBikeStill(); - if (collision == 4 && IsPlayerCollidingWithFarawayIslandMew(direction)) + if (collision == COLLISION_EVENT_OBJECT && IsPlayerCollidingWithFarawayIslandMew(direction)) PlayerOnBikeCollideWithFarawayIslandMew(direction); - else if (collision < 5 || collision > 8) + else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE) PlayerOnBikeCollide(direction); } } @@ -552,14 +552,14 @@ static void AcroBikeTransition_Moving(u8 direction) AcroBikeTransition_FaceDirection(playerEventObj->movementDirection); return; } - collision = get_some_collision(direction); - if (collision > 0 && collision < 12) + collision = GetBikeCollision(direction); + if (collision > 0 && collision < COLLISION_VERTICAL_RAIL) { if (collision == COLLISION_LEDGE_JUMP) PlayerJumpLedge(direction); - else if (collision == 4 && IsPlayerCollidingWithFarawayIslandMew(direction)) + else if (collision == COLLISION_EVENT_OBJECT && IsPlayerCollidingWithFarawayIslandMew(direction)) PlayerOnBikeCollideWithFarawayIslandMew(direction); - else if (collision < 5 || collision > 8) + else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE) PlayerOnBikeCollide(direction); } else @@ -614,19 +614,19 @@ static void AcroBikeTransition_WheelieHoppingMoving(u8 direction) AcroBikeTransition_WheelieHoppingStanding(playerEventObj->movementDirection); return; } - collision = get_some_collision(direction); + collision = GetBikeCollision(direction); // TODO: Try to get rid of this goto - if (collision == 0 || collision == 9) + if (collision == 0 || collision == COLLISION_WHEELIE_HOP) { goto derp; } - else if (collision == 6) + else if (collision == COLLISION_LEDGE_JUMP) { PlayerLedgeHoppingWheelie(direction); } - else if (collision < 5 || collision > 8) + else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE) { - if (collision <= 11) + if (collision < COLLISION_VERTICAL_RAIL) { AcroBikeTransition_WheelieHoppingStanding(direction); } @@ -643,12 +643,12 @@ static void AcroBikeTransition_SideJump(u8 direction) u8 collision; struct EventObject *playerEventObj; - collision = get_some_collision(direction); - if (collision != 0) + collision = GetBikeCollision(direction); + if (collision) { - if (collision == 7) + if (collision == COLLISION_PUSHED_BOULDER) return; - if (collision < 10) + if (collision < COLLISION_ISOLATED_VERTICAL_RAIL) { AcroBikeTransition_TurnDirection(direction); return; @@ -680,18 +680,18 @@ static void AcroBikeTransition_WheelieMoving(u8 direction) PlayerIdleWheelie(playerEventObj->movementDirection); return; } - collision = get_some_collision(direction); - if (collision > 0 && collision < 12) + collision = GetBikeCollision(direction); + if (collision > 0 && collision < COLLISION_VERTICAL_RAIL) { - if (collision == 6) + if (collision == COLLISION_LEDGE_JUMP) { PlayerLedgeHoppingWheelie(direction); } - else if (collision == 9) + else if (collision == COLLISION_WHEELIE_HOP) { PlayerIdleWheelie(direction); } - else if (collision <= 4) + else if (collision < COLLISION_STOP_SURFING) { if (MetatileBehavior_IsBumpySlope(playerEventObj->currentMetatileBehavior)) PlayerIdleWheelie(direction); @@ -714,18 +714,18 @@ static void AcroBikeTransition_WheelieRisingMoving(u8 direction) PlayerStartWheelie(playerEventObj->movementDirection); return; } - collision = get_some_collision(direction); - if (collision > 0 && collision < 12) + collision = GetBikeCollision(direction); + if (collision > 0 && collision < COLLISION_VERTICAL_RAIL) { - if (collision == 6) + if (collision == COLLISION_LEDGE_JUMP) { PlayerLedgeHoppingWheelie(direction); } - else if (collision == 9) + else if (collision == COLLISION_WHEELIE_HOP) { PlayerIdleWheelie(direction); } - else if (collision <= 4) + else if (collision < COLLISION_STOP_SURFING) { if (MetatileBehavior_IsBumpySlope(playerEventObj->currentMetatileBehavior)) PlayerIdleWheelie(direction); @@ -748,12 +748,12 @@ static void AcroBikeTransition_WheelieLoweringMoving(u8 direction) PlayerEndWheelie(playerEventObj->movementDirection); return; } - collision = get_some_collision(direction); - if (collision > 0 && collision < 12) + collision = GetBikeCollision(direction); + if (collision > 0 && collision < COLLISION_VERTICAL_RAIL) { - if (collision == 6) + if (collision == COLLISION_LEDGE_JUMP) PlayerJumpLedge(direction); - else if (collision < 5 || collision > 8) + else if (collision < COLLISION_STOP_SURFING || collision > COLLISION_ROTATING_GATE) PlayerEndWheelie(direction); return; } @@ -865,29 +865,26 @@ static u8 Bike_DPadToDirection(u16 heldKeys) return DIR_NONE; } -static u8 get_some_collision(u8 direction) +static u8 GetBikeCollision(u8 direction) { - s16 x; - s16 y; u8 metatitleBehavior; struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId]; - - x = playerEventObj->currentCoords.x; - y = playerEventObj->currentCoords.y; + s16 x = playerEventObj->currentCoords.x; + s16 y = playerEventObj->currentCoords.y; MoveCoords(direction, &x, &y); metatitleBehavior = MapGridGetMetatileBehaviorAt(x, y); - return Bike_CheckCollisionTryAdvanceCollisionCount(playerEventObj, x, y, direction, metatitleBehavior); + return GetBikeCollisionAt(playerEventObj, x, y, direction, metatitleBehavior); } -static u8 Bike_CheckCollisionTryAdvanceCollisionCount(struct EventObject *eventObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) +static u8 GetBikeCollisionAt(struct EventObject *eventObject, s16 x, s16 y, u8 direction, u8 metatitleBehavior) { u8 collision = CheckForEventObjectCollision(eventObject, x, y, direction, metatitleBehavior); - if (collision > 4) + if (collision > COLLISION_EVENT_OBJECT) return collision; - if (collision == 0 && IsRunningDisallowedByMetatile(metatitleBehavior)) - collision = 2; + if (collision == COLLISION_NONE && IsRunningDisallowedByMetatile(metatitleBehavior)) + collision = COLLISION_IMPASSABLE; if (collision) Bike_TryAdvanceCyclingRoadCollisions(); @@ -941,10 +938,10 @@ static bool8 WillPlayerCollideWithCollision(u8 newTileCollision, u8 direction) { if (direction == DIR_NORTH || direction == DIR_SOUTH) { - if (newTileCollision == 10 || newTileCollision == 12) + if (newTileCollision == COLLISION_ISOLATED_VERTICAL_RAIL || newTileCollision == COLLISION_VERTICAL_RAIL) return FALSE; } - else if (newTileCollision == 11 || newTileCollision == 13) + else if (newTileCollision == COLLISION_ISOLATED_HORIZONTAL_RAIL || newTileCollision == COLLISION_HORIZONTAL_RAIL) { return FALSE; } diff --git a/src/birch_pc.c b/src/birch_pc.c index 5179b1920..5b574b05d 100644 --- a/src/birch_pc.c +++ b/src/birch_pc.c @@ -9,13 +9,13 @@ bool16 ScriptGetPokedexInfo(void) { if (gSpecialVar_0x8004 == 0) // is national dex not present? { - gSpecialVar_0x8005 = GetHoennPokedexCount(0); - gSpecialVar_0x8006 = GetHoennPokedexCount(1); + gSpecialVar_0x8005 = GetHoennPokedexCount(FLAG_GET_SEEN); + gSpecialVar_0x8006 = GetHoennPokedexCount(FLAG_GET_CAUGHT); } else { - gSpecialVar_0x8005 = GetNationalPokedexCount(0); - gSpecialVar_0x8006 = GetNationalPokedexCount(1); + gSpecialVar_0x8005 = GetNationalPokedexCount(FLAG_GET_SEEN); + gSpecialVar_0x8006 = GetNationalPokedexCount(FLAG_GET_CAUGHT); } return IsNationalPokedexEnabled(); diff --git a/src/blit.c b/src/blit.c deleted file mode 100644 index 26a63fe9b..000000000 --- a/src/blit.c +++ /dev/null @@ -1,209 +0,0 @@ -#include "global.h" -#include "blit.h" - -void BlitBitmapRect4BitWithoutColorKey(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) -{ - BlitBitmapRect4Bit(src, dst, srcX, srcY, dstX, dstY, width, height, 0xFF); -} - -void BlitBitmapRect4Bit(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey) -{ - s32 xEnd; - s32 yEnd; - s32 multiplierSrcY; - s32 multiplierDstY; - s32 loopSrcY, loopDstY; - s32 loopSrcX, loopDstX; - const u8 *pixelsSrc; - u8 *pixelsDst; - s32 toOrr; - s32 toAnd; - s32 toShift; - - if (dst->width - dstX < width) - xEnd = (dst->width - dstX) + srcX; - else - xEnd = srcX + width; - - if (dst->height - dstY < height) - yEnd = (dst->height - dstY) + srcY; - else - yEnd = height + srcY; - - multiplierSrcY = (src->width + (src->width & 7)) >> 3; - multiplierDstY = (dst->width + (dst->width & 7)) >> 3; - - if (colorKey == 0xFF) - { - for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++) - { - for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) - { - pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B); - pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B); - toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF); - toShift = ((loopDstX & 1) << 2); - toOrr <<= toShift; - toAnd = 0xF0 >> (toShift); - *pixelsDst = toOrr | (*pixelsDst & toAnd); - } - } - } - else - { - for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++) - { - for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) - { - pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B); - pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B); - toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF); - if (toOrr != colorKey) - { - toShift = ((loopDstX & 1) << 2); - toOrr <<= toShift; - toAnd = 0xF0 >> (toShift); - *pixelsDst = toOrr | (*pixelsDst & toAnd); - } - } - } - } -} - -void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue) -{ - s32 xEnd; - s32 yEnd; - s32 multiplierY; - s32 loopX, loopY; - s32 toOrr1, toOrr2; - - xEnd = x + width; - if (xEnd > surface->width) - xEnd = surface->width; - - yEnd = y + height; - if (yEnd > surface->height) - yEnd = surface->height; - - multiplierY = (surface->width + (surface->width & 7)) >> 3; - toOrr1 = (u32)(fillValue << 0x1C) >> 0x18; - toOrr2 = (fillValue & 0xF); - - for (loopY = y; loopY < yEnd; loopY++) - { - for (loopX = x; loopX < xEnd; loopX++) - { - u8 *pixels = surface->pixels + ((loopX >> 1) & 3) + ((loopX >> 3) << 5) + (((loopY >> 3) * multiplierY) << 5) + ((u32)(loopY << 0x1d) >> 0x1B); - if ((loopX << 0x1F) != 0) - *pixels = toOrr1 | (*pixels & 0xF); - else - *pixels = toOrr2 | (*pixels & 0xF0); - } - } -} - -void BlitBitmapRect4BitTo8Bit(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset) -{ - s32 palOffsetBits; - s32 xEnd; - s32 yEnd; - s32 multiplierSrcY; - s32 multiplierDstY; - s32 loopSrcY, loopDstY; - s32 loopSrcX, loopDstX; - const u8 *pixelsSrc; - u8 *pixelsDst; - s32 colorKeyBits; - - palOffsetBits = (u32)(paletteOffset << 0x1C) >> 0x18; - colorKeyBits = (u32)(colorKey << 0x1C) >> 0x18; - - if (dst->width - dstX < width) - xEnd = (dst->width - dstX) + srcX; - else - xEnd = width + srcX; - - if (dst->height - dstY < height) - yEnd = (srcY + dst->height) - dstY; - else - yEnd = srcY + height; - - multiplierSrcY = (src->width + (src->width & 7)) >> 3; - multiplierDstY = (dst->width + (dst->width & 7)) >> 3; - - if (colorKey == 0xFF) - { - for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++) - { - pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b); - for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) - { - pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a); - if (loopSrcX & 1) - { - *pixelsDst = palOffsetBits + (*pixelsSrc >> 4); - } - else - { - pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b); - *pixelsDst = palOffsetBits + (*pixelsSrc & 0xF); - } - } - } - } - else - { - for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++) - { - pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b); - for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) - { - if (loopSrcX & 1) - { - if ((*pixelsSrc & 0xF0) != colorKeyBits) - { - pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a); - *pixelsDst = palOffsetBits + (*pixelsSrc >> 4); - } - } - else - { - pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b); - if ((*pixelsSrc & 0xF) != colorKey) - { - pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a); - *pixelsDst = palOffsetBits + (*pixelsSrc & 0xF); - } - } - } - } - } -} - -void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue) -{ - s32 xEnd; - s32 yEnd; - s32 multiplierY; - s32 loopX, loopY; - - xEnd = x + width; - if (xEnd > surface->width) - xEnd = surface->width; - - yEnd = y + height; - if (yEnd > surface->height) - yEnd = surface->height; - - multiplierY = (surface->width + (surface->width & 7)) >> 3; - - for (loopY = y; loopY < yEnd; loopY++) - { - for (loopX = x; loopX < xEnd; loopX++) - { - u8 *pixels = surface->pixels + (loopX & 7) + ((loopX >> 3) << 6) + (((loopY >> 3) * multiplierY) << 6) + ((u32)(loopY << 0x1d) >> 0x1a); - *pixels = fillValue; - } - } -} @@ -47,7 +47,7 @@ const struct SpriteTemplate gUnknown_08596974 = { .tileTag = ANIM_TAG_HORN_HIT_2, .paletteTag = ANIM_TAG_HORN_HIT_2, - .oam = &gUnknown_085249F4, + .oam = &gOamData_AffineDouble_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596968, @@ -83,7 +83,7 @@ const struct SpriteTemplate gUnknown_085969C8 = { .tileTag = ANIM_TAG_NEEDLE, .paletteTag = ANIM_TAG_NEEDLE, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_085969BC, @@ -94,7 +94,7 @@ const struct SpriteTemplate gWebThreadSpriteTemplate = { .tileTag = ANIM_TAG_WEB_THREAD, .paletteTag = ANIM_TAG_WEB_THREAD, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -105,7 +105,7 @@ const struct SpriteTemplate gUnknown_085969F8 = { .tileTag = ANIM_TAG_STRING, .paletteTag = ANIM_TAG_STRING, - .oam = &gUnknown_0852493C, + .oam = &gOamData_AffineOff_ObjNormal_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -128,7 +128,7 @@ const struct SpriteTemplate gSpiderWebSpriteTemplate = { .tileTag = ANIM_TAG_SPIDER_WEB, .paletteTag = ANIM_TAG_SPIDER_WEB, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596A28, @@ -139,7 +139,7 @@ const struct SpriteTemplate gLinearStingerSpriteTemplate = { .tileTag = ANIM_TAG_NEEDLE, .paletteTag = ANIM_TAG_NEEDLE, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -150,7 +150,7 @@ const struct SpriteTemplate gPinMissileSpriteTemplate = { .tileTag = ANIM_TAG_NEEDLE, .paletteTag = ANIM_TAG_NEEDLE, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -161,7 +161,7 @@ const struct SpriteTemplate gIcicleSpearSpriteTemplate = { .tileTag = ANIM_TAG_ICICLE_SPEAR, .paletteTag = ANIM_TAG_ICICLE_SPEAR, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -188,7 +188,7 @@ const struct SpriteTemplate gUnknown_08596AC8 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596AC4, diff --git a/src/cable_car.c b/src/cable_car.c index adeee2647..c6e7e724e 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -6,7 +6,7 @@ #include "field_weather.h" #include "gpu_regs.h" #include "graphics.h" -#include "alloc.h" +#include "malloc.h" #include "main.h" #include "menu.h" #include "overworld.h" diff --git a/src/cable_club.c b/src/cable_club.c index 303cc76d1..1375789c3 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -30,6 +30,8 @@ #include "trainer_card.h" #include "party_menu.h" #include "window.h" +#include "constants/battle_frontier.h" +#include "constants/cable_club.h" #include "constants/songs.h" static const struct WindowTemplate gUnknown_08550594 = { @@ -123,9 +125,9 @@ static u32 sub_80B2478(u8 lower, u8 upper) return 1; case EXCHANGE_IN_PROGRESS: return 3; - case EXCHANGE_STAT_4: + case EXCHANGE_PLAYER_NOT_READY: return 7; - case EXCHANGE_STAT_5: + case EXCHANGE_PARTNER_NOT_READY: return 9; case EXCHANGE_STAT_6: ConvertIntToDecimalStringN(gStringVar1, GetLinkPlayerCount_2(), STR_CONV_MODE_LEFT_ALIGN, 1); @@ -457,7 +459,7 @@ static void task_map_chg_seq_0807EC34(u16 *a0, u32 taskId) if (*a0 == 1) { - if (gLinkType == 0x2266 || gLinkType == 0x2277) + if (gLinkType == LINKTYPE_BATTLE_TOWER_50 || gLinkType == LINKTYPE_BATTLE_TOWER_OPEN) { if (sub_80B2AF4(trainerCards[0].monSpecies, trainerCards[1].monSpecies)) { @@ -550,45 +552,42 @@ static bool8 sub_80B2D6C(u8 taskId) return FALSE; } -void sub_80B2DA4(u8 arg0) +void TryBattleLinkup(u8 arg0) { u8 r3 = 2; u8 r2 = 2; switch (gSpecialVar_0x8004) { - case 1: + case USING_SINGLE_BATTLE: r3 = 2; - gLinkType = 0x2233; + gLinkType = LINKTYPE_SINGLE_BATTLE; break; - case 2: + case USING_DOUBLE_BATTLE: r3 = 2; - gLinkType = 0x2244; + gLinkType = LINKTYPE_DOUBLE_BATTLE; break; - case 5: + case USING_MULTI_BATTLE: r3 = 4; r2 = 4; - gLinkType = 0x2255; + gLinkType = LINKTYPE_MULTI_BATTLE; break; - case 9: + case USING_BATTLE_TOWER: r3 = 2; - if (gSaveBlock2Ptr->frontier.lvlMode == 0) - { - gLinkType = 0x2266; - } + if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_50) + gLinkType = LINKTYPE_BATTLE_TOWER_50; else - { - gLinkType = 0x2277; - } + gLinkType = LINKTYPE_BATTLE_TOWER_OPEN; + break; } sub_80B236C(r3, r2); } -void sub_80B2E4C(void) +void TryTradeLinkup(void) { - gLinkType = 0x1133; + gLinkType = LINKTYPE_0x1133; gBattleTypeFlags = 0; sub_80B236C(2, 2); } @@ -596,7 +595,7 @@ void sub_80B2E4C(void) void sub_80B2E74(void) { gSpecialVar_Result = 0; - gLinkType = 0x3311; + gLinkType = LINKTYPE_0x3311; gBattleTypeFlags = 0; sub_80B236C(2, 4); } @@ -681,21 +680,21 @@ static void sub_80B2EE4(u8 taskId) void sub_80B2FD8(void) { - gLinkType = 0x4411; + gLinkType = LINKTYPE_0x4411; gBattleTypeFlags = 0; sub_80B236C(2, 4); } void sub_80B3000(void) { - gLinkType = 0x6601; + gLinkType = LINKTYPE_0x6601; gBattleTypeFlags = 0; sub_80B236C(4, 4); } void sub_80B3028(void) { - gLinkType = 0x6602; + gLinkType = LINKTYPE_0x6602; gBattleTypeFlags = 0; sub_80B236C(2, 4); } @@ -707,30 +706,30 @@ u8 sub_80B3050(void) switch (gSpecialVar_0x8004) { - case 1: - gLinkType = 0x2233; + case USING_SINGLE_BATTLE: + gLinkType = LINKTYPE_SINGLE_BATTLE; break; - case 2: - gLinkType = 0x2244; + case USING_DOUBLE_BATTLE: + gLinkType = LINKTYPE_DOUBLE_BATTLE; break; - case 5: - gLinkType = 0x2255; + case USING_MULTI_BATTLE: + gLinkType = LINKTYPE_MULTI_BATTLE; break; - case 9: - if (gSaveBlock2Ptr->frontier.lvlMode == 0) + case USING_BATTLE_TOWER: + if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_50) { - gLinkType = 0x2266; + gLinkType = LINKTYPE_BATTLE_TOWER_50; } else { - gLinkType = 0x2277; + gLinkType = LINKTYPE_BATTLE_TOWER_OPEN; } break; - case 3: - gLinkType = 0x1111; + case USING_TRADE_CENTER: + gLinkType = LINKTYPE_0x1111; break; - case 4: - gLinkType = 0x3322; + case USING_RECORD_CORNER: + gLinkType = LINKTYPE_0x3322; break; } @@ -790,21 +789,21 @@ void sub_80B3254(void) SaveGame(); } -static void sub_80B3260(int a0) +static void SetLinkBattleTypeFlags(int linkService) { - switch (a0) + switch (linkService) { - case 1: + case USING_SINGLE_BATTLE: gBattleTypeFlags = BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER; break; - case 2: + case USING_DOUBLE_BATTLE: gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER; break; - case 5: + case USING_MULTI_BATTLE: ReducePlayerPartyToSelectedMons(); gBattleTypeFlags = BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI; break; - case 9: + case USING_BATTLE_TOWER: gBattleTypeFlags = BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI; break; } @@ -818,7 +817,7 @@ static void sub_80B32B4(u8 taskId) { case 0: FadeScreen(1, 0); - gLinkType = 0x2211; + gLinkType = LINKTYPE_BATTLE; ClearLinkCallback_2(); task->data[0]++; break; @@ -845,7 +844,7 @@ static void sub_80B32B4(u8 taskId) else PlayMapChosenOrBattleBGM(MUS_BATTLE20); - sub_80B3260(gSpecialVar_0x8004); + SetLinkBattleTypeFlags(gSpecialVar_0x8004); CleanupOverworldWindowsAndTilemaps(); gTrainerBattleOpponent_A = 0x800; SetMainCallback2(CB2_InitBattle); @@ -864,7 +863,7 @@ static void sub_80B33BC(u8 taskId) { case 0: FadeScreen(1, 0); - gLinkType = 0x2211; + gLinkType = LINKTYPE_BATTLE; ClearLinkCallback_2(); data[0] = 1; break; @@ -910,8 +909,8 @@ static void sub_80B33BC(u8 taskId) else PlayMapChosenOrBattleBGM(MUS_BATTLE20); - gLinkPlayers[0].linkType = 0x2211; - sub_80B3260(gSpecialVar_0x8004); + gLinkPlayers[0].linkType = LINKTYPE_BATTLE; + SetLinkBattleTypeFlags(gSpecialVar_0x8004); CleanupOverworldWindowsAndTilemaps(); gTrainerBattleOpponent_A = 0x800; SetMainCallback2(CB2_InitBattle); @@ -973,7 +972,7 @@ void sub_80B360C(void) SavePlayerBag(); sub_813BF10(); - if (gSpecialVar_0x8004 == 1 || gSpecialVar_0x8004 == 2) + if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE) { UpdatePlayerLinkBattleRecords(gLocalLinkPlayerId ^ 1); if (gWirelessCommType) @@ -1004,7 +1003,10 @@ void sub_80B360C(void) void CleanupLinkRoomState(void) { - if (gSpecialVar_0x8004 == 1 || gSpecialVar_0x8004 == 2 || gSpecialVar_0x8004 == 5 || gSpecialVar_0x8004 == 9) + if (gSpecialVar_0x8004 == USING_SINGLE_BATTLE + || gSpecialVar_0x8004 == USING_DOUBLE_BATTLE + || gSpecialVar_0x8004 == USING_MULTI_BATTLE + || gSpecialVar_0x8004 == USING_BATTLE_TOWER) { LoadPlayerParty(); SavePlayerBag(); @@ -1084,8 +1086,8 @@ static void sub_80B37FC(u8 taskId) task->data[0]++; break; case 2: - gUnknown_02032298[0] = 0; - gUnknown_02032298[1] = 0; + gSelectedTradeMonPositions[TRADE_PLAYER] = 0; + gSelectedTradeMonPositions[TRADE_PARTNER] = 0; m4aMPlayAllStop(); sub_800AC34(); task->data[0]++; @@ -1093,7 +1095,7 @@ static void sub_80B37FC(u8 taskId) case 3: if (!gReceivedRemoteLinkPlayers) { - SetMainCallback2(sub_80773AC); + SetMainCallback2(CB2_StartCreateTradeMenu); DestroyTask(taskId); } break; @@ -1109,7 +1111,7 @@ static void sub_80B3894(u8 taskId) case 0: ScriptContext2_Enable(); FadeScreen(1, 0); - Rfu_set_zero(); + ClearLinkRfuCallback(); data[0]++; break; case 1: @@ -1117,8 +1119,8 @@ static void sub_80B3894(u8 taskId) data[0]++; break; case 2: - gUnknown_02032298[0] = 0; - gUnknown_02032298[1] = 0; + gSelectedTradeMonPositions[TRADE_PLAYER] = 0; + gSelectedTradeMonPositions[TRADE_PARTNER] = 0; m4aMPlayAllStop(); sub_800ADF8(); data[0]++; @@ -1159,7 +1161,7 @@ void nullsub_37(void) // Note: VAR_0x8005 is set to the ID of the player spot. void ColosseumPlayerSpotTriggered(void) { - gLinkType = 0x2211; + gLinkType = LINKTYPE_BATTLE; if (gWirelessCommType != 0) { @@ -1178,7 +1180,7 @@ static void sub_80B39A4(void) ScriptContext1_Stop(); } -void sp02A_crash_sound(void) +void Script_ShowLinkTrainerCard(void) { ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic); } @@ -1300,6 +1302,6 @@ void sub_80B3BC4(void) { if (gWirelessCommType == 0) { - gLinkType = 0x2288; + gLinkType = LINKTYPE_0x2288; } } diff --git a/src/contest.c b/src/contest.c index 79c1616c2..2ad189058 100644 --- a/src/contest.c +++ b/src/contest.c @@ -1,7 +1,7 @@ #include "global.h" #include "gpu_regs.h" #include "bg.h" -#include "alloc.h" +#include "malloc.h" #include "constants/items.h" #include "constants/event_objects.h" #include "constants/moves.h" @@ -577,7 +577,7 @@ const struct SpriteTemplate gSpriteTemplate_8587C18 = { .tileTag = 0xABE0, .paletteTag = 0xABE0, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -2799,16 +2799,15 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) } } -// GetContestAvailability? -u8 sub_80DAE0C(struct Pokemon *pkmn) +u8 GetContestEntryEligibility(struct Pokemon *pkmn) { u8 ribbon; - u8 retVal; + u8 eligibility; if (GetMonData(pkmn, MON_DATA_IS_EGG)) - return 3; + return CANT_ENTER_CONTEST_EGG; if (GetMonData(pkmn, MON_DATA_HP) == 0) - return 4; + return CANT_ENTER_CONTEST_FAINTED; switch (gSpecialVar_ContestCategory) { case CONTEST_CATEGORY_COOL: @@ -2827,19 +2826,19 @@ u8 sub_80DAE0C(struct Pokemon *pkmn) ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON); break; default: - return 0; + return CANT_ENTER_CONTEST; } // Couldn't get this to match any other way. // Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below // the current contest rank. if (ribbon > gSpecialVar_ContestRank) - retVal = 2; + eligibility = CAN_ENTER_CONTEST_HIGH_RANK; else if (ribbon >= gSpecialVar_ContestRank) - retVal = 1; + eligibility = CAN_ENTER_CONTEST_EQUAL_RANK; else - retVal = 0; - return retVal; + eligibility = CANT_ENTER_CONTEST; + return eligibility; } static void DrawContestantWindowText(void) diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c index a0a29f0ad..69332b27f 100644 --- a/src/contest_link_80F57C4.c +++ b/src/contest_link_80F57C4.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_gfx_sfx_util.h" #include "bg.h" @@ -1935,14 +1935,16 @@ static void sub_80F7ED0(int windowId, u8 *str, int arg2) void sub_80F7F30(void) { - u8 result = sub_80DAE0C(&gPlayerParty[gContestMonPartyIndex]); - if (result) + u8 eligibility = GetContestEntryEligibility(&gPlayerParty[gContestMonPartyIndex]); + + // Nonzero eligibility can still be non-eligibile, if mon is fainted or egg + if (eligibility) { sub_80DAB8C(gSpecialVar_ContestCategory, gSpecialVar_ContestRank); sub_80DB09C(gSpecialVar_ContestCategory); } - gSpecialVar_Result = result; + gSpecialVar_Result = eligibility; } u16 sub_80F7F7C(void) diff --git a/src/contest_painting.c b/src/contest_painting.c index 1b95e1ed9..2b36d5e38 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_gfx_sfx_util.h" #include "bg.h" diff --git a/src/credits.c b/src/credits.c index 44fa2002c..323146f1e 100644 --- a/src/credits.c +++ b/src/credits.c @@ -3,7 +3,7 @@ #include "main.h" #include "task.h" #include "bg.h" -#include "alloc.h" +#include "malloc.h" #include "window.h" #include "text.h" #include "menu.h" @@ -128,16 +128,17 @@ enum TDE_TASK_A_ID = 2, }; -struct Unk201C000 -{ - u16 unk0[71]; - u16 unk8E; - u16 unk90; - u16 unk92; - u16 unk94; - u16 unk96[NATIONAL_DEX_COUNT]; - u16 unk39A; - u16 unk39C[7]; +#define NUM_MON_SLIDES 71 +struct CreditsData +{ + u16 monToShow[NUM_MON_SLIDES]; // List of Pokemon species ids that will show during the credits + u16 imgCounter; //how many mon images have been shown + u16 nextImgPos; //if the next image spawns left/center/right + u16 currShownMon; //index into monToShow + u16 numMonToShow; //number of pokemon to show, always NUM_MON_SLIDES after determine function + u16 caughtMonIds[NATIONAL_DEX_COUNT]; //temporary location to hold a condensed array of all caught pokemon + u16 numCaughtMon; //count of filled spaces in caughtMonIds + u16 unk39C[7]; // unused padding? }; struct CreditsEntry @@ -151,7 +152,7 @@ static EWRAM_DATA s16 gUnknown_0203BCE0 = 0; static EWRAM_DATA u16 gUnknown_0203BCE2 = 0; // TASK A EWRAM_DATA bool8 gHasHallOfFameRecords = 0; static EWRAM_DATA u8 gUnknown_0203BCE5 = 0; -static EWRAM_DATA struct Unk201C000 *gUnknown_0203BCE8 = {0}; +static EWRAM_DATA struct CreditsData *sCreditsData = {0}; static const u16 gUnknown_085E56F0[][16] = { @@ -959,7 +960,7 @@ static const struct WindowTemplate sWindowTemplates[] = }, DUMMY_WIN_TEMPLATE, }; -static const u8 gUnknown_085E6F7C[][2] = +static const u8 sMonSpritePos[][2] = { {104, 36}, {120, 36}, @@ -1127,8 +1128,8 @@ static void LoadTheEndScreen(u16, u16, u16); static void sub_8176E40(u16 arg0, u16 palette); static void sub_8176EE8(struct Sprite *sprite); static void sub_8176F90(struct Sprite *sprite); -static u8 sub_8177224(u16 species, s16 x, s16 y, u16 position); -static void sub_8177388(void); +static u8 MakeMonSprite(u16 species, s16 x, s16 y, u16 position); +static void DeterminePokemonToShow(void); static void CreditsVBlankCallback(void) { @@ -1241,13 +1242,13 @@ void CB2_StartCreditsSequence(void) m4aSongNumStart(MUS_THANKFOR); SetMainCallback2(CB2_RunCreditsSequence); gUnknown_0203BCE5 = 0; - gUnknown_0203BCE8 = AllocZeroed(sizeof(struct Unk201C000)); + sCreditsData = AllocZeroed(sizeof(struct CreditsData)); - sub_8177388(); + DeterminePokemonToShow(); - gUnknown_0203BCE8->unk8E = 0; - gUnknown_0203BCE8->unk90 = 0; - gUnknown_0203BCE8->unk92 = 0; + sCreditsData->imgCounter = 0; + sCreditsData->nextImgPos = 0; + sCreditsData->currShownMon = 0; gUnknown_0203BCE2 = taskIdA; } @@ -1604,7 +1605,7 @@ static void sub_8175DA0(u8 taskIdB) gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_4] = 1; DestroyTask(taskIdB); sub_81755A4(); - FREE_AND_SET_NULL(gUnknown_0203BCE8); + FREE_AND_SET_NULL(sCreditsData); return; } } @@ -1683,29 +1684,29 @@ static void sub_81760FC(u8 taskIdD) case 0: break; case 1: - if (gUnknown_0203BCE8->unk90 == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0) + if (sCreditsData->nextImgPos == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0) break; gTasks[taskIdD].data[TDD_STATE]++; break; case 2: - if (gUnknown_0203BCE8->unk8E == 71 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != Task_ProgressCreditTasks) + if (sCreditsData->imgCounter == NUM_MON_SLIDES || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != Task_ProgressCreditTasks) break; - r2 = sub_8177224(gUnknown_0203BCE8->unk0[gUnknown_0203BCE8->unk92], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][0], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][1], gUnknown_0203BCE8->unk90); - if (gUnknown_0203BCE8->unk92 < gUnknown_0203BCE8->unk94 - 1) + r2 = MakeMonSprite(sCreditsData->monToShow[sCreditsData->currShownMon], sMonSpritePos[sCreditsData->nextImgPos][0], sMonSpritePos[sCreditsData->nextImgPos][1], sCreditsData->nextImgPos); + if (sCreditsData->currShownMon < sCreditsData->numMonToShow - 1) { - gUnknown_0203BCE8->unk92++; + sCreditsData->currShownMon++; gSprites[r2].data[3] = 50; } else { - gUnknown_0203BCE8->unk92 = 0; + sCreditsData->currShownMon = 0; gSprites[r2].data[3] = 512; } - gUnknown_0203BCE8->unk8E++; - if (gUnknown_0203BCE8->unk90 == 2) - gUnknown_0203BCE8->unk90 = 0; + sCreditsData->imgCounter++; + if (sCreditsData->nextImgPos == 2) + sCreditsData->nextImgPos = 0; else - gUnknown_0203BCE8->unk90++; + sCreditsData->nextImgPos++; gTasks[taskIdD].data[TDD_3] = 50; gTasks[taskIdD].data[TDD_STATE]++; break; @@ -2256,7 +2257,7 @@ static void sub_8177050(struct Sprite *sprite) } } -static u8 sub_8177224(u16 nationalDexNum, s16 x, s16 y, u16 position) +static u8 MakeMonSprite(u16 nationalDexNum, s16 x, s16 y, u16 position) { u8 spriteId; u8 spriteId2; @@ -2292,73 +2293,86 @@ static void sub_81772B8(struct Sprite *sprite) sprite->pos1.y = gSprites[sprite->data[0]].pos1.y; } -static void sub_8177388(void) +static void DeterminePokemonToShow(void) { u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_STARTER_MON))); u16 page; u16 dexNum; u16 j; - + + // Go through the Pokedex, and anything that has gotten caught we put into our massive array. + // This basically packs all of the caught pokemon into the front of the array for (dexNum = 1, j = 0; dexNum < NATIONAL_DEX_COUNT; dexNum++) { if (GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT)) { - gUnknown_0203BCE8->unk96[j] = dexNum; + sCreditsData->caughtMonIds[j] = dexNum; j++; } } + // Fill the rest of the array with zeroes for (dexNum = j; dexNum < NATIONAL_DEX_COUNT; dexNum++) - gUnknown_0203BCE8->unk96[dexNum] = 0; + sCreditsData->caughtMonIds[dexNum] = 0; - gUnknown_0203BCE8->unk39A = j; - if (gUnknown_0203BCE8->unk39A < 71) - gUnknown_0203BCE8->unk94 = j; + // Cap the number of pokemon we care about to NUM_MON_SLIDES, the max we show in the credits scene (-1 for the starter) + sCreditsData->numCaughtMon = j; + if (sCreditsData->numCaughtMon < NUM_MON_SLIDES) + sCreditsData->numMonToShow = j; else - gUnknown_0203BCE8->unk94 = 71; + sCreditsData->numMonToShow = NUM_MON_SLIDES; + // Loop through our list of caught pokemon and select randomly from it to fill the images to show j = 0; do { - page = Random() % gUnknown_0203BCE8->unk39A; - gUnknown_0203BCE8->unk0[j] = gUnknown_0203BCE8->unk96[page]; - + // Select a random mon, insert into array + page = Random() % sCreditsData->numCaughtMon; + sCreditsData->monToShow[j] = sCreditsData->caughtMonIds[page]; + + // Remove the select mon from the array, and condense array entries j++; - gUnknown_0203BCE8->unk96[page] = 0; - gUnknown_0203BCE8->unk39A--; - if (page != gUnknown_0203BCE8->unk39A) + sCreditsData->caughtMonIds[page] = 0; + sCreditsData->numCaughtMon--; + if (page != sCreditsData->numCaughtMon) { - gUnknown_0203BCE8->unk96[page] = gUnknown_0203BCE8->unk96[gUnknown_0203BCE8->unk39A]; - gUnknown_0203BCE8->unk96[gUnknown_0203BCE8->unk39A] = 0; + // Instead of looping through and moving everything down, just take from the end. Order doesn't matter after all. + sCreditsData->caughtMonIds[page] = sCreditsData->caughtMonIds[sCreditsData->numCaughtMon]; + sCreditsData->caughtMonIds[sCreditsData->numCaughtMon] = 0; } } - while (gUnknown_0203BCE8->unk39A != 0 && j < 71); + while (sCreditsData->numCaughtMon != 0 && j < NUM_MON_SLIDES); - if (gUnknown_0203BCE8->unk94 < 71) + // If we don't have enough pokemon in the dex to fill everything, copy the selected mon into the end of the array, so it loops + if (sCreditsData->numMonToShow < NUM_MON_SLIDES) { - for (j = gUnknown_0203BCE8->unk94, page = 0; j < 71; j++) + for (j = sCreditsData->numMonToShow, page = 0; j < NUM_MON_SLIDES; j++) { - gUnknown_0203BCE8->unk0[j] = gUnknown_0203BCE8->unk0[page]; + sCreditsData->monToShow[j] = sCreditsData->monToShow[page]; page++; - if (page == gUnknown_0203BCE8->unk94) + if (page == sCreditsData->numMonToShow) page = 0; } - gUnknown_0203BCE8->unk0[70] = starter; + // Ensure the last pokemon is our starter + sCreditsData->monToShow[NUM_MON_SLIDES-1] = starter; } else { - for (dexNum = 0; gUnknown_0203BCE8->unk0[dexNum] != starter && dexNum < 71; dexNum++); + // Check to see if our starter has already appeared in this list, break if it has + for (dexNum = 0; sCreditsData->monToShow[dexNum] != starter && dexNum < NUM_MON_SLIDES; dexNum++); - if (dexNum < gUnknown_0203BCE8->unk94 - 1) + // If it has, swap it with the last pokemon, to ensure our starter is the last image + if (dexNum < sCreditsData->numMonToShow - 1) { - gUnknown_0203BCE8->unk0[dexNum] = gUnknown_0203BCE8->unk0[70]; - gUnknown_0203BCE8->unk0[70] = starter; + sCreditsData->monToShow[dexNum] = sCreditsData->monToShow[NUM_MON_SLIDES-1]; + sCreditsData->monToShow[NUM_MON_SLIDES-1] = starter; } else { - gUnknown_0203BCE8->unk0[70] = starter; + // Ensure the last pokemon is our starter + sCreditsData->monToShow[NUM_MON_SLIDES-1] = starter; } } - gUnknown_0203BCE8->unk94 = 71; + sCreditsData->numMonToShow = NUM_MON_SLIDES; } diff --git a/src/dark.c b/src/dark.c index 482c09c04..63a893b67 100644 --- a/src/dark.c +++ b/src/dark.c @@ -29,7 +29,7 @@ const struct SpriteTemplate gUnknown_08596FC8 = { .tileTag = ANIM_TAG_TIED_BAG, .paletteTag = ANIM_TAG_TIED_BAG, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -100,7 +100,7 @@ const struct SpriteTemplate gUnknown_08597080 = { .tileTag = ANIM_TAG_SHARP_TEETH, .paletteTag = ANIM_TAG_SHARP_TEETH, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597060, @@ -111,7 +111,7 @@ const struct SpriteTemplate gUnknown_08597098 = { .tileTag = ANIM_TAG_CLAMP, .paletteTag = ANIM_TAG_CLAMP, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597060, @@ -142,7 +142,7 @@ const struct SpriteTemplate gUnknown_085970E8 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_085970E0, @@ -179,7 +179,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8597138 = { .tileTag = ANIM_TAG_CLAW_SLASH, .paletteTag = ANIM_TAG_CLAW_SLASH, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08597130, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/data.c b/src/data.c index 7aebd63ed..8d6640223 100644 --- a/src/data.c +++ b/src/data.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "data.h" #include "graphics.h" diff --git a/src/data/field_event_obj/event_object_graphics_info_pointers.h b/src/data/field_event_obj/event_object_graphics_info_pointers.h index 0b8aa79b2..661539d57 100755 --- a/src/data/field_event_obj/event_object_graphics_info_pointers.h +++ b/src/data/field_event_obj/event_object_graphics_info_pointers.h @@ -489,11 +489,11 @@ const struct EventObjectGraphicsInfo *const gEventObjectGraphicsInfoPointers[] = }; const struct EventObjectGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[] = { - &gEventObjectGraphicsInfo_Bard, - &gEventObjectGraphicsInfo_Hipster, - &gEventObjectGraphicsInfo_Trader, - &gEventObjectGraphicsInfo_Storyteller, - &gEventObjectGraphicsInfo_Giddy, - &gEventObjectGraphicsInfo_UnusedMauvilleOldMan1, - &gEventObjectGraphicsInfo_UnusedMauvilleOldMan2, + [MAUVILLE_MAN_BARD] = &gEventObjectGraphicsInfo_Bard, + [MAUVILLE_MAN_HIPSTER] = &gEventObjectGraphicsInfo_Hipster, + [MAUVILLE_MAN_TRADER] = &gEventObjectGraphicsInfo_Trader, + [MAUVILLE_MAN_STORYTELLER] = &gEventObjectGraphicsInfo_Storyteller, + [MAUVILLE_MAN_GIDDY] = &gEventObjectGraphicsInfo_Giddy, + [MAUVILLE_MAN_UNUSED1] = &gEventObjectGraphicsInfo_UnusedMauvilleOldMan1, + [MAUVILLE_MAN_UNUSED2] = &gEventObjectGraphicsInfo_UnusedMauvilleOldMan2, }; diff --git a/src/data/field_event_obj/movement_action_func_tables.h b/src/data/field_event_obj/movement_action_func_tables.h index 712988f5e..8e136b58b 100755 --- a/src/data/field_event_obj/movement_action_func_tables.h +++ b/src/data/field_event_obj/movement_action_func_tables.h @@ -170,8 +170,8 @@ u8 MovementAction_SetFixedPriority_Step0(struct EventObject *, struct Sprite *); u8 MovementAction_ClearFixedPriority_Step0(struct EventObject *, struct Sprite *); u8 MovementAction_InitAffineAnim_Step0(struct EventObject *, struct Sprite *); u8 MovementAction_ClearAffineAnim_Step0(struct EventObject *, struct Sprite *); -u8 MovementAction_Unknown1_Step0(struct EventObject *, struct Sprite *); -u8 MovementAction_Unknown2_Step0(struct EventObject *, struct Sprite *); +u8 MovementAction_HideReflection_Step0(struct EventObject *, struct Sprite *); +u8 MovementAction_ShowReflection_Step0(struct EventObject *, struct Sprite *); u8 MovementAction_WalkDownStartAffine_Step0(struct EventObject *, struct Sprite *); u8 MovementAction_WalkDownStartAffine_Step1(struct EventObject *, struct Sprite *); u8 MovementAction_WalkDownAffine_Step0(struct EventObject *, struct Sprite *); @@ -358,8 +358,8 @@ u8 (*const gMovementActionFuncs_SetFixedPriority[])(struct EventObject *, struct u8 (*const gMovementActionFuncs_ClearFixedPriority[])(struct EventObject *, struct Sprite *); u8 (*const gMovementActionFuncs_InitAffineAnim[])(struct EventObject *, struct Sprite *); u8 (*const gMovementActionFuncs_ClearAffineAnim[])(struct EventObject *, struct Sprite *); -u8 (*const gMovementActionFuncs_Unknown1[])(struct EventObject *, struct Sprite *); -u8 (*const gMovementActionFuncs_Unknown2[])(struct EventObject *, struct Sprite *); +u8 (*const gMovementActionFuncs_HideReflection[])(struct EventObject *, struct Sprite *); +u8 (*const gMovementActionFuncs_ShowReflection[])(struct EventObject *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkDownStartAffine[])(struct EventObject *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkDownAffine[])(struct EventObject *, struct Sprite *); u8 (*const gMovementActionFuncs_AcroWheelieFaceDown[])(struct EventObject *, struct Sprite *); @@ -518,8 +518,8 @@ u8 (*const *const gMovementActionFuncs[])(struct EventObject *, struct Sprite *) [MOVEMENT_ACTION_CLEAR_FIXED_PRIORITY] = gMovementActionFuncs_ClearFixedPriority, [MOVEMENT_ACTION_INIT_AFFINE_ANIM] = gMovementActionFuncs_InitAffineAnim, [MOVEMENT_ACTION_CLEAR_AFFINE_ANIM] = gMovementActionFuncs_ClearAffineAnim, - [MOVEMENT_ACTION_UNKNOWN1] = gMovementActionFuncs_Unknown1, - [MOVEMENT_ACTION_UNKNOWN2] = gMovementActionFuncs_Unknown2, + [MOVEMENT_ACTION_HIDE_REFLECTION] = gMovementActionFuncs_HideReflection, + [MOVEMENT_ACTION_SHOW_REFLECTION] = gMovementActionFuncs_ShowReflection, [MOVEMENT_ACTION_WALK_DOWN_START_AFFINE] = gMovementActionFuncs_WalkDownStartAffine, [MOVEMENT_ACTION_WALK_DOWN_AFFINE] = gMovementActionFuncs_WalkDownAffine, [MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN] = gMovementActionFuncs_AcroWheelieFaceDown, @@ -1197,13 +1197,13 @@ u8 (*const gMovementActionFuncs_ClearAffineAnim[])(struct EventObject *, struct MovementAction_Finish, }; -u8 (*const gMovementActionFuncs_Unknown1[])(struct EventObject *, struct Sprite *) = { - MovementAction_Unknown1_Step0, +u8 (*const gMovementActionFuncs_HideReflection[])(struct EventObject *, struct Sprite *) = { + MovementAction_HideReflection_Step0, MovementAction_Finish, }; -u8 (*const gMovementActionFuncs_Unknown2[])(struct EventObject *, struct Sprite *) = { - MovementAction_Unknown2_Step0, +u8 (*const gMovementActionFuncs_ShowReflection[])(struct EventObject *, struct Sprite *) = { + MovementAction_ShowReflection_Step0, MovementAction_Finish, }; diff --git a/src/data/party_menu.h b/src/data/party_menu.h new file mode 100644 index 000000000..6af8ee2a6 --- /dev/null +++ b/src/data/party_menu.h @@ -0,0 +1,1255 @@ +static const struct BgTemplate sPartyMenuBgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 28, + .screenSize = 1, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, +}; + +enum +{ + PARTY_BOX_LEFT_COLUMN, + PARTY_BOX_RIGHT_COLUMN +}; + +static const struct PartyMenuBoxInfoRects sPartyBoxInfoRects[] = +{ + [PARTY_BOX_LEFT_COLUMN] = + { + BlitBitmapToPartyWindow_LeftColumn, + { + //The below are the x, y, width, and height for each of the following info + 24, 11, 40, 13, // Nickname + 32, 20, 32, 8, // Level + 64, 20, 8, 8, // Gender + 38, 37, 24, 8, // HP + 53, 37, 24, 8, // Max HP + 24, 35, 48, 3 // HP bar + }, + 12, 34, 64, 16 // Description text (e.g. NO USE) + }, + [PARTY_BOX_RIGHT_COLUMN] = + { + BlitBitmapToPartyWindow_RightColumn, + { + // See above comment + 22, 3, 40, 13, // Nickname + 30, 12, 32, 8, // Level + 62, 12, 8, 8, // Gender + 102, 12, 24, 8, // HP + 117, 12, 24, 8, // Max HP + 88, 10, 48, 3 // HP bar + }, + 77, 4, 64, 16 // Description text + }, +}; + + +// Each layout array has an array for each of the 6 party slots +// The array for each slot has the sprite coords of its various sprites in the following order +// Pokemon icon (x, y), held item (x, y), status condition (x, y), menu pokeball (x, y) +static const u8 sPartyMenuSpriteCoords[PARTY_LAYOUT_COUNT][PARTY_SIZE][4 * 2] = +{ + [PARTY_LAYOUT_SINGLE] = + { + { 16, 40, 20, 50, 50, 52, 16, 34}, + {104, 18, 108, 28, 136, 27, 102, 25}, + {104, 42, 108, 52, 136, 51, 102, 49}, + {104, 66, 108, 76, 136, 75, 102, 73}, + {104, 90, 108, 100, 136, 99, 102, 97}, + {104, 114, 108, 124, 136, 123, 102, 121}, + }, + [PARTY_LAYOUT_DOUBLE] = + { + {16, 24, 20, 34, 50, 36, 16, 18}, + {16, 80, 20, 90, 50, 92, 16, 74}, + {104, 18, 108, 28, 136, 27, 102, 25}, + {104, 50, 108, 60, 136, 59, 102, 57}, + {104, 82, 108, 92, 136, 91, 102, 89}, + {104, 114, 108, 124, 136, 123, 102, 121}, + }, + [PARTY_LAYOUT_MULTI] = + { + {16, 24, 20, 34, 50, 36, 16, 18}, + {16, 80, 20, 90, 50, 92, 16, 74}, + {104, 26, 106, 36, 136, 35, 102, 33}, + {104, 50, 106, 60, 136, 59, 102, 57}, + {104, 82, 106, 92, 136, 91, 102, 89}, + {104, 106, 106, 116, 136, 115, 102, 113}, + }, + [PARTY_LAYOUT_MULTI_SHOWCASE] = + { + {16, 32, 20, 42, 50, 44, 16, 26}, + {104, 34, 106, 44, 136, 43, 102, 41}, + {104, 58, 106, 68, 136, 67, 102, 65}, + {16, 104, 20, 114, 50, 116, 16, 98}, + {104, 106, 106, 116, 136, 115, 102, 113}, + {104, 130, 106, 140, 136, 139, 102, 137}, + }, +}; + +// Used only when both Cancel and Confirm are present +static const u32 sConfirmButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_confirm_button.bin"); +static const u32 sCancelButton_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_cancel_button.bin"); + +// Text colors for BG, FG, and Shadow in that order +static const u8 sFontColorTable[][3] = +{ + {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_DARK_GREY}, // Default + {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_GREEN}, // Unused + {TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_2, TEXT_DYNAMIC_COLOR_3}, // Gender symbol + {TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY}, // Selection actions + {TEXT_COLOR_WHITE, TEXT_COLOR_BLUE, TEXT_COLOR_LIGHT_BLUE}, // Field moves + {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}, // Unused +}; + +static const struct WindowTemplate sSinglePartyMenuWindowTemplate[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 10, + .height = 7, + .paletteNum = 3, + .baseBlock = 0x63, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 1, + .width = 18, + .height = 3, + .paletteNum = 4, + .baseBlock = 0xA9, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 4, + .width = 18, + .height = 3, + .paletteNum = 5, + .baseBlock = 0xDF, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 7, + .width = 18, + .height = 3, + .paletteNum = 6, + .baseBlock = 0x115, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 10, + .width = 18, + .height = 3, + .paletteNum = 7, + .baseBlock = 0x14B, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 13, + .width = 18, + .height = 3, + .paletteNum = 8, + .baseBlock = 0x181, + }, + { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 28, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x1DF, + }, + DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate sDoublePartyMenuWindowTemplate[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 10, + .height = 7, + .paletteNum = 3, + .baseBlock = 0x63, + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 8, + .width = 10, + .height = 7, + .paletteNum = 4, + .baseBlock = 0xA9, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 1, + .width = 18, + .height = 3, + .paletteNum = 5, + .baseBlock = 0xEF, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 5, + .width = 18, + .height = 3, + .paletteNum = 6, + .baseBlock = 0x125, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 9, + .width = 18, + .height = 3, + .paletteNum = 7, + .baseBlock = 0x15B, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 13, + .width = 18, + .height = 3, + .paletteNum = 8, + .baseBlock = 0x191, + }, + { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 28, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x1DF, + }, + DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate sMultiPartyMenuWindowTemplate[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 10, + .height = 7, + .paletteNum = 3, + .baseBlock = 0x63, + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 8, + .width = 10, + .height = 7, + .paletteNum = 4, + .baseBlock = 0xA9, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 2, + .width = 18, + .height = 3, + .paletteNum = 5, + .baseBlock = 0xEF, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 5, + .width = 18, + .height = 3, + .paletteNum = 6, + .baseBlock = 0x125, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 9, + .width = 18, + .height = 3, + .paletteNum = 7, + .baseBlock = 0x15B, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 12, + .width = 18, + .height = 3, + .paletteNum = 8, + .baseBlock = 0x191, + }, + { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 28, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x1DF, + }, + DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate sShowcaseMultiPartyMenuWindowTemplate[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 2, + .width = 10, + .height = 7, + .paletteNum = 3, + .baseBlock = 0x63, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 3, + .width = 18, + .height = 3, + .paletteNum = 5, + .baseBlock = 0xA9, + }, + { + .bg = 0, + .tilemapLeft = 12, + .tilemapTop = 6, + .width = 18, + .height = 3, + .paletteNum = 6, + .baseBlock = 0xDF, + }, + { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 11, + .width = 10, + .height = 7, + .paletteNum = 4, + .baseBlock = 0x115, + }, + { + .bg = 2, + .tilemapLeft = 12, + .tilemapTop = 12, + .width = 18, + .height = 3, + .paletteNum = 7, + .baseBlock = 0x16B, + }, + { + .bg = 2, + .tilemapLeft = 12, + .tilemapTop = 15, + .width = 18, + .height = 3, + .paletteNum = 8, + .baseBlock = 0x1A1, + }, + DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate sCancelButtonWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 24, + .tilemapTop = 17, + .width = 6, + .height = 2, + .paletteNum = 3, + .baseBlock = 0x1C7, +}; + +static const struct WindowTemplate sMultiCancelButtonWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 24, + .tilemapTop = 18, + .width = 6, + .height = 2, + .paletteNum = 3, + .baseBlock = 0x1C7, +}; + +static const struct WindowTemplate sConfirmButtonWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 24, + .tilemapTop = 16, + .width = 6, + .height = 2, + .paletteNum = 3, + .baseBlock = 0x1D3, +}; + +static const struct WindowTemplate sDefaultPartyMsgWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 17, + .width = 21, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x24F, +}; + +static const struct WindowTemplate sDoWhatWithMonMsgWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 17, + .width = 16, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x279, +}; + +static const struct WindowTemplate sDoWhatWithItemMsgWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 17, + .width = 20, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x299, +}; + +static const struct WindowTemplate sDoWhatWithMailMsgWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 17, + .width = 18, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x299, +}; + +static const struct WindowTemplate sWhichMoveMsgWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 17, + .width = 16, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x299, +}; + +static const struct WindowTemplate sAlreadyHoldingOneMsgWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 20, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x299, +}; + +static const struct WindowTemplate sItemGiveTakeWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 23, + .tilemapTop = 13, + .width = 6, + .height = 6, + .paletteNum = 14, + .baseBlock = 0x39D, +}; + +static const struct WindowTemplate sMailReadTakeWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 21, + .tilemapTop = 13, + .width = 8, + .height = 6, + .paletteNum = 14, + .baseBlock = 0x39D, +}; + +static const struct WindowTemplate sMoveSelectWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 19, + .tilemapTop = 11, + .width = 10, + .height = 8, + .paletteNum = 14, + .baseBlock = 0x2E9, +}; + +static const struct WindowTemplate sPartyMenuYesNoWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 21, + .tilemapTop = 9, + .width = 5, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x2E9, +}; + +static const struct WindowTemplate sLevelUpStatsWindowTemplate = +{ + .bg = 2, + .tilemapLeft = 19, + .tilemapTop = 1, + .width = 10, + .height = 11, + .paletteNum = 14, + .baseBlock = 0x2E9, +}; + +static const struct WindowTemplate sUnusedWindowTemplate_08615978 = +{ + .bg = 2, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 27, + .height = 4, + .paletteNum = 14, + .baseBlock = 0x1DF, +}; + +static const struct WindowTemplate sUnusedWindowTemplate_08615980 = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 13, + .width = 18, + .height = 3, + .paletteNum = 12, + .baseBlock = 0x39D, +}; + +// Tile nums +static const u8 sMainSlotTileNums[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 40, 59, 60, 58, 58, 58, 58, 58, 58, 61, + 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, + 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; + +static const u8 sMainSlotTileNums_Egg[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, + 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, + 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; + +static const u8 sOtherSlotsTileNums[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, + 49, 33, 33, 33, 33, 33, 33, 33, 33, 52, 53, 51, 51, 51, 51, 51, 51, 54, + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; + +static const u8 sOtherSlotsTileNums_Egg[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, + 49, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 50, + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; + +static const u8 sEmptySlotTileNums[] = {21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39}; + +// Palette offsets +static const u8 sGenderPalOffsets[] = {11, 12}; +static const u8 sHPBarPalOffsets[] = {9, 10}; +static const u8 sPartyBoxPalOffsets1[] = {4, 5, 6}; +static const u8 sPartyBoxPalOffsets2[] = {1, 7, 8}; +static const u8 sPartyBoxNoMonPalOffsets[] = {1, 11, 12}; + +// Palette ids +static const u8 sGenderMalePalIds[] = {59, 60}; +static const u8 sGenderFemalePalIds[] = {75, 76}; +static const u8 sHPBarGreenPalIds[] = {57, 58}; +static const u8 sHPBarYellowPalIds[] = {73, 74}; +static const u8 sHPBarRedPalIds[] = {89, 90}; +static const u8 sPartyBoxEmptySlotPalIds1[] = {52, 53, 54}; +static const u8 sPartyBoxMultiPalIds1[] = {68, 69, 70}; +static const u8 sPartyBoxFaintedPalIds1[] = {84, 85, 86}; +static const u8 sPartyBoxCurrSelectionPalIds1[] = {116, 117, 118}; +static const u8 sPartyBoxCurrSelectionMultiPalIds[] = {132, 133, 134}; +static const u8 sPartyBoxCurrSelectionFaintedPalIds[] = {148, 149, 150}; +static const u8 sPartyBoxSelectedForActionPalIds1[] = {100, 101, 102}; +static const u8 sPartyBoxEmptySlotPalIds2[] = {49, 55, 56}; +static const u8 sPartyBoxMultiPalIds2[] = {65, 71, 72}; +static const u8 sPartyBoxFaintedPalIds2[] = {81, 87, 88}; +static const u8 sPartyBoxCurrSelectionPalIds2[] = {97, 103, 104}; +static const u8 sPartyBoxSelectedForActionPalIds2[] = {161, 167, 168}; +static const u8 sPartyBoxNoMonPalIds[] = {17, 27, 28}; + +static const u8 *const sActionStringTable[] = +{ + [PARTY_MSG_CHOOSE_MON] = gText_ChoosePokemon, + [PARTY_MSG_CHOOSE_MON_OR_CANCEL] = gText_ChoosePokemonCancel, + [PARTY_MSG_CHOOSE_MON_AND_CONFIRM] = gText_ChoosePokemonConfirm, + [PARTY_MSG_MOVE_TO_WHERE] = gText_MoveToWhere, + [PARTY_MSG_TEACH_WHICH_MON] = gText_TeachWhichPokemon, + [PARTY_MSG_USE_ON_WHICH_MON] = gText_UseOnWhichPokemon, + [PARTY_MSG_GIVE_TO_WHICH_MON] = gText_GiveToWhichPokemon, + [PARTY_MSG_NOTHING_TO_CUT] = gText_NothingToCut, + [PARTY_MSG_CANT_SURF_HERE] = gText_CantSurfHere, + [PARTY_MSG_ALREADY_SURFING] = gText_AlreadySurfing, + [PARTY_MSG_CURRENT_TOO_FAST] = gText_CurrentIsTooFast, + [PARTY_MSG_ENJOY_CYCLING] = gText_EnjoyCycling, + [PARTY_MSG_ALREADY_IN_USE] = gText_InUseAlready_PM, + [PARTY_MSG_CANT_USE_HERE] = gText_CantUseHere, + [PARTY_MSG_NO_MON_FOR_BATTLE] = gText_NoPokemonForBattle, + [PARTY_MSG_CHOOSE_MON_2] = gText_ChoosePokemon2, + [PARTY_MSG_NOT_ENOUGH_HP] = gText_NotEnoughHp, + [PARTY_MSG_X_MONS_ARE_NEEDED] = gText_PokemonAreNeeded, + [PARTY_MSG_MONS_CANT_BE_SAME] = gText_PokemonCantBeSame, + [PARTY_MSG_NO_SAME_HOLD_ITEMS] = gText_NoIdenticalHoldItems, + [PARTY_MSG_UNUSED] = gText_EmptyString2, + [PARTY_MSG_DO_WHAT_WITH_MON] = gText_DoWhatWithPokemon, + [PARTY_MSG_RESTORE_WHICH_MOVE] = gText_RestoreWhichMove, + [PARTY_MSG_BOOST_PP_WHICH_MOVE] = gText_BoostPp, + [PARTY_MSG_DO_WHAT_WITH_ITEM] = gText_DoWhatWithItem, + [PARTY_MSG_DO_WHAT_WITH_MAIL] = gText_DoWhatWithMail, + [PARTY_MSG_ALREADY_HOLDING_ONE] = gText_AlreadyHoldingOne, +}; + +static const u8 *const sDescriptionStringTable[] = +{ + [PARTYBOX_DESC_NO_USE] = gText_NoUse, + [PARTYBOX_DESC_ABLE_3] = gText_Able, + [PARTYBOX_DESC_FIRST] = gText_First_PM, + [PARTYBOX_DESC_SECOND] = gText_Second_PM, + [PARTYBOX_DESC_THIRD] = gText_Third_PM, + [PARTYBOX_DESC_FOURTH] = gText_Fourth, + [PARTYBOX_DESC_ABLE] = gText_Able2, + [PARTYBOX_DESC_NOT_ABLE] = gText_NotAble, + [PARTYBOX_DESC_ABLE_2] = gText_Able3, + [PARTYBOX_DESC_NOT_ABLE_2] = gText_NotAble2, + [PARTYBOX_DESC_LEARNED] = gText_Learned, + [PARTYBOX_DESC_HAVE] = gText_Have, + [PARTYBOX_DESC_DONT_HAVE] = gText_DontHave, +}; + +static const u16 sUnused_08615B94[] = +{ + 0x0108, 0x0151, 0x0160, 0x015b, 0x002e, 0x005c, 0x0102, 0x0153, 0x014b, 0x00ed, 0x00f1, 0x010d, 0x003a, 0x003b, 0x003f, 0x0071, + 0x00b6, 0x00f0, 0x00ca, 0x00db, 0x00da, 0x004c, 0x00e7, 0x0055, 0x0057, 0x0059, 0x00d8, 0x005b, 0x005e, 0x00f7, 0x0118, 0x0068, + 0x0073, 0x015f, 0x0035, 0x00bc, 0x00c9, 0x007e, 0x013d, 0x014c, 0x0103, 0x0107, 0x0122, 0x009c, 0x00d5, 0x00a8, 0x00d3, 0x011d, + 0x0121, 0x013b, 0x000f, 0x0013, 0x0039, 0x0046, 0x0094, 0x00f9, 0x007f, 0x0123, +}; + +enum +{ + MENU_SUMMARY, + MENU_SWITCH, + MENU_CANCEL1, + MENU_ITEM, + MENU_GIVE, + MENU_TAKE_ITEM, + MENU_MAIL, + MENU_TAKE_MAIL, + MENU_READ, + MENU_CANCEL2, + MENU_SHIFT, + MENU_SEND_OUT, + MENU_ENTER, + MENU_NO_ENTRY, + MENU_STORE, + MENU_REGISTER, + MENU_TRADE1, + MENU_TRADE2, + MENU_TOSS, + MENU_FIELD_MOVES, +}; + +enum +{ + FIELD_MOVE_CUT, + FIELD_MOVE_FLASH, + FIELD_MOVE_ROCK_SMASH, + FIELD_MOVE_STRENGTH, + FIELD_MOVE_SURF, + FIELD_MOVE_FLY, + FIELD_MOVE_DIVE, + FIELD_MOVE_WATERFALL, + FIELD_MOVE_TELEPORT, + FIELD_MOVE_DIG, + FIELD_MOVE_SECRET_POWER, + FIELD_MOVE_MILK_DRINK, + FIELD_MOVE_SOFT_BOILED, + FIELD_MOVE_SWEET_SCENT, +}; + +// What a weird choice of table termination; +#define FIELD_MOVE_TERMINATOR MOVE_SWORDS_DANCE + +struct +{ + const u8 *text; + TaskFunc func; +} static const sCursorOptions[] = +{ + [MENU_SUMMARY] = {gText_Summary5, CursorCb_Summary}, + [MENU_SWITCH] = {gText_Switch2, CursorCb_Switch}, + [MENU_CANCEL1] = {gText_Cancel2, CursorCb_Cancel1}, + [MENU_ITEM] = {gText_Item, CursorCb_Item}, + [MENU_GIVE] = {gMenuText_Give, CursorCb_Give}, + [MENU_TAKE_ITEM] = {gText_Take, CursorCb_TakeItem}, + [MENU_MAIL] = {gText_Mail, CursorCb_Mail}, + [MENU_TAKE_MAIL] = {gText_Take2, CursorCb_TakeMail}, + [MENU_READ] = {gText_Read2, CursorCb_Read}, + [MENU_CANCEL2] = {gText_Cancel2, CursorCb_Cancel2}, + [MENU_SHIFT] = {gText_Shift, CursorCb_SendMon}, + [MENU_SEND_OUT] = {gText_SendOut, CursorCb_SendMon}, + [MENU_ENTER] = {gText_Enter, CursorCb_Enter}, + [MENU_NO_ENTRY] = {gText_NoEntry, CursorCb_NoEntry}, + [MENU_STORE] = {gText_Store, CursorCb_Store}, + [MENU_REGISTER] = {gText_Register, CursorCb_Register}, + [MENU_TRADE1] = {gText_Trade4, CursorCb_Trade1}, + [MENU_TRADE2] = {gText_Trade4, CursorCb_Trade2}, + [MENU_TOSS] = {gMenuText_Toss, CursorCb_Toss}, + [MENU_FIELD_MOVES + FIELD_MOVE_CUT] = {gMoveNames[MOVE_CUT], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_FLASH] = {gMoveNames[MOVE_FLASH], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_SMASH] = {gMoveNames[MOVE_ROCK_SMASH], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_STRENGTH] = {gMoveNames[MOVE_STRENGTH], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_SURF] = {gMoveNames[MOVE_SURF], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_FLY] = {gMoveNames[MOVE_FLY], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_DIVE] = {gMoveNames[MOVE_DIVE], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_WATERFALL] = {gMoveNames[MOVE_WATERFALL], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_TELEPORT] = {gMoveNames[MOVE_TELEPORT], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_DIG] = {gMoveNames[MOVE_DIG], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_SECRET_POWER] = {gMoveNames[MOVE_SECRET_POWER], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCb_FieldMove}, +}; + +static const u8 sPartyMenuAction_SummarySwitchCancel[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1}; +static const u8 sPartyMenuAction_ShiftSummaryCancel[] = {MENU_SHIFT, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_SendOutSummaryCancel[] = {MENU_SEND_OUT, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_SummaryCancel[] = {MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_EnterSummaryCancel[] = {MENU_ENTER, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_NoEntrySummaryCancel[] = {MENU_NO_ENTRY, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_StoreSummaryCancel[] = {MENU_STORE, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_GiveTakeItemCancel[] = {MENU_GIVE, MENU_TAKE_ITEM, MENU_CANCEL2}; +static const u8 sPartyMenuAction_ReadTakeMailCancel[] = {MENU_READ, MENU_TAKE_MAIL, MENU_CANCEL2}; +static const u8 sPartyMenuAction_RegisterSummaryCancel[] = {MENU_REGISTER, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_TradeSummaryCancel1[] = {MENU_TRADE1, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_TradeSummaryCancel2[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 sPartyMenuAction_TakeItemTossCancel[] = {MENU_TAKE_ITEM, MENU_TOSS, MENU_CANCEL1}; + +// IDs for the action lists that appear when a party mon is selected +enum +{ + ACTIONS_NONE, + ACTIONS_SWITCH, + ACTIONS_SHIFT, + ACTIONS_SEND_OUT, + ACTIONS_ENTER, + ACTIONS_NO_ENTRY, + ACTIONS_STORE, + ACTIONS_SUMMARY_ONLY, + ACTIONS_ITEM, + ACTIONS_MAIL, + ACTIONS_REGISTER, + ACTIONS_TRADE, + ACTIONS_SPIN_TRADE, + ACTIONS_TAKEITEM_TOSS +}; + +static const u8 *const sPartyMenuActions[] = +{ + [ACTIONS_NONE] = NULL, + [ACTIONS_SWITCH] = sPartyMenuAction_SummarySwitchCancel, + [ACTIONS_SHIFT] = sPartyMenuAction_ShiftSummaryCancel, + [ACTIONS_SEND_OUT] = sPartyMenuAction_SendOutSummaryCancel, + [ACTIONS_ENTER] = sPartyMenuAction_EnterSummaryCancel, + [ACTIONS_NO_ENTRY] = sPartyMenuAction_NoEntrySummaryCancel, + [ACTIONS_STORE] = sPartyMenuAction_StoreSummaryCancel, + [ACTIONS_SUMMARY_ONLY] = sPartyMenuAction_SummaryCancel, + [ACTIONS_ITEM] = sPartyMenuAction_GiveTakeItemCancel, + [ACTIONS_MAIL] = sPartyMenuAction_ReadTakeMailCancel, + [ACTIONS_REGISTER] = sPartyMenuAction_RegisterSummaryCancel, + [ACTIONS_TRADE] = sPartyMenuAction_TradeSummaryCancel1, + [ACTIONS_SPIN_TRADE] = sPartyMenuAction_TradeSummaryCancel2, + [ACTIONS_TAKEITEM_TOSS] = sPartyMenuAction_TakeItemTossCancel, +}; + +static const u8 sPartyMenuActionCounts[] = +{ + [ACTIONS_NONE] = 0, + [ACTIONS_SWITCH] = ARRAY_COUNT(sPartyMenuAction_SummarySwitchCancel), + [ACTIONS_SHIFT] = ARRAY_COUNT(sPartyMenuAction_ShiftSummaryCancel), + [ACTIONS_SEND_OUT] = ARRAY_COUNT(sPartyMenuAction_SendOutSummaryCancel), + [ACTIONS_ENTER] = ARRAY_COUNT(sPartyMenuAction_EnterSummaryCancel), + [ACTIONS_NO_ENTRY] = ARRAY_COUNT(sPartyMenuAction_NoEntrySummaryCancel), + [ACTIONS_STORE] = ARRAY_COUNT(sPartyMenuAction_StoreSummaryCancel), + [ACTIONS_SUMMARY_ONLY] = ARRAY_COUNT(sPartyMenuAction_SummaryCancel), + [ACTIONS_ITEM] = ARRAY_COUNT(sPartyMenuAction_GiveTakeItemCancel), + [ACTIONS_MAIL] = ARRAY_COUNT(sPartyMenuAction_ReadTakeMailCancel), + [ACTIONS_REGISTER] = ARRAY_COUNT(sPartyMenuAction_RegisterSummaryCancel), + [ACTIONS_TRADE] = ARRAY_COUNT(sPartyMenuAction_TradeSummaryCancel1), + [ACTIONS_SPIN_TRADE] = ARRAY_COUNT(sPartyMenuAction_TradeSummaryCancel2), + [ACTIONS_TAKEITEM_TOSS] = ARRAY_COUNT(sPartyMenuAction_TakeItemTossCancel) +}; + +static const u16 sFieldMoves[] = +{ + MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, MOVE_TELEPORT, + MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, FIELD_MOVE_TERMINATOR +}; + +struct +{ + bool8 (*fieldMoveFunc)(void); + u8 msgId; +} static const sFieldMoveCursorCallbacks[] = +{ + [FIELD_MOVE_CUT] = {SetUpFieldMove_Cut, PARTY_MSG_NOTHING_TO_CUT}, + [FIELD_MOVE_FLASH] = {SetUpFieldMove_Flash, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_ROCK_SMASH] = {SetUpFieldMove_RockSmash, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_STRENGTH] = {SetUpFieldMove_Strength, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_SURF] = {SetUpFieldMove_Surf, PARTY_MSG_CANT_SURF_HERE}, + [FIELD_MOVE_FLY] = {SetUpFieldMove_Fly, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_DIVE] = {SetUpFieldMove_Dive, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_WATERFALL] = {SetUpFieldMove_Waterfall, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_TELEPORT] = {SetUpFieldMove_Teleport, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_DIG] = {SetUpFieldMove_Dig, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_SECRET_POWER] = {SetUpFieldMove_SecretPower, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_MILK_DRINK] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP}, + [FIELD_MOVE_SOFT_BOILED] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP}, + [FIELD_MOVE_SWEET_SCENT] = {SetUpFieldMove_SweetScent, PARTY_MSG_CANT_USE_HERE}, +}; + +static const u8 *const sUnionRoomTradeMessages[] = +{ + [UR_TRADE_MSG_NOT_MON_PARTNER_WANTS - 1] = gText_NotPkmnOtherTrainerWants, + [UR_TRADE_MSG_NOT_EGG - 1] = gText_ThatIsntAnEgg, + [UR_TRADE_MSG_MON_CANT_BE_TRADED_1 - 1] = gText_PkmnCantBeTradedNow, + [UR_TRADE_MSG_MON_CANT_BE_TRADED_2 - 1] = gText_PkmnCantBeTradedNow, + [UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED - 1] = gText_OtherTrainersPkmnCantBeTraded, + [UR_TRADE_MSG_EGG_CANT_BE_TRADED -1] = gText_EggCantBeTradedNow, + [UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON - 1] = gText_OtherTrainerCantAcceptPkmn, + [UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1 - 1] = gText_CantTradeWithTrainer, + [UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2 - 1] = gText_CantTradeWithTrainer, +}; + +static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp"); +static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal"); + +static const struct OamData sOamData_HeldItem = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_HeldItem[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_HeldMail[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_HeldItem[] = +{ + sSpriteAnim_HeldItem, + sSpriteAnim_HeldMail, +}; + +static const struct SpriteSheet sSpriteSheet_HeldItem = +{ + sHeldItemGfx, sizeof(sHeldItemGfx), 0xd750 +}; + +static const struct SpritePalette sSpritePalette_HeldItem = +{ + sHeldItemPalette, 0xd750 +}; + +static const struct SpriteTemplate sSpriteTemplate_HeldItem = +{ + 0xd750, + 0xd750, + &sOamData_HeldItem, + sSpriteAnimTable_HeldItem, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +static const struct OamData sOamData_MenuPokeball = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sPokeballAnim_Closed[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sPokeballAnim_Open[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_MenuPokeball[] = +{ + sPokeballAnim_Closed, + sPokeballAnim_Open +}; + +static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeball = +{ + gPartyMenuPokeball_Gfx, 0x400, 0x04b0 +}; + +static const struct CompressedSpritePalette sSpritePalette_MenuPokeball = +{ + gPartyMenuPokeball_Pal, 0x04b0 +}; + +// Used for the pokeball sprite on each party slot / Cancel button +static const struct SpriteTemplate sSpriteTemplate_MenuPokeball = +{ + .tileTag = 0x04b0, + .paletteTag = 0x04b0, + .oam = &sOamData_MenuPokeball, + .anims = sSpriteAnimTable_MenuPokeball, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_MenuPokeballSmall = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSmallPokeballAnim_Closed[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSmallPokeballAnim_Open[] = +{ + ANIMCMD_FRAME(4, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSmallPokeballAnim_Blank1[] = +{ + ANIMCMD_FRAME(8, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSmallPokeballAnim_Blank2[] = +{ + ANIMCMD_FRAME(12, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSmallPokeballAnim_Blank3[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSmallPokeballAnim_Blank4[] = +{ + ANIMCMD_FRAME(20, 0), + ANIMCMD_END +}; + +// The blanks below are never used. See SpriteCB_BounceConfirmCancelButton, where they were intended to be used +static const union AnimCmd *const sSpriteAnimTable_MenuPokeballSmall[] = +{ + sSmallPokeballAnim_Closed, + sSmallPokeballAnim_Open, + sSmallPokeballAnim_Blank1, + sSmallPokeballAnim_Blank2, + sSmallPokeballAnim_Blank3, + sSmallPokeballAnim_Blank4 +}; + +static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall = +{ + gPartyMenuPokeballSmall_Gfx, 0x0300, 0x04b1 +}; + +// Used for the pokeball sprite next to Cancel and Confirm when both are present, otherwise sSpriteTemplate_MenuPokeball is used +static const struct SpriteTemplate sSpriteTemplate_MenuPokeballSmall = +{ + .tileTag = 1201, + .paletteTag = 1200, + .oam = &sOamData_MenuPokeballSmall, + .anims = sSpriteAnimTable_MenuPokeballSmall, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_StatusCondition = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_StatusPoison[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_StatusParalyzed[] = +{ + ANIMCMD_FRAME(4, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_StatusSleep[] = +{ + ANIMCMD_FRAME(8, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_StatusFrozen[] = +{ + ANIMCMD_FRAME(12, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_StatusBurn[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_StatusPokerus[] = +{ + ANIMCMD_FRAME(20, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_StatusFaint[] = +{ + ANIMCMD_FRAME(24, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Blank[] = +{ + ANIMCMD_FRAME(28, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteTemplate_StatusCondition[] = +{ + sSpriteAnim_StatusPoison, + sSpriteAnim_StatusParalyzed, + sSpriteAnim_StatusSleep, + sSpriteAnim_StatusFrozen, + sSpriteAnim_StatusBurn, + sSpriteAnim_StatusPokerus, + sSpriteAnim_StatusFaint, + sSpriteAnim_Blank +}; + +static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons = +{ + gStatusGfx_Icons, 0x400, 1202 +}; + +static const struct CompressedSpritePalette sSpritePalette_StatusIcons = +{ + gStatusPal_Icons, 1202 +}; + +static const struct SpriteTemplate sSpriteTemplate_StatusIcons = +{ + .tileTag = 1202, + .paletteTag = 1202, + .oam = &sOamData_StatusCondition, + .anims = sSpriteTemplate_StatusCondition, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +// Mask for the partners party in a multi battle. TRUE if in the partners party, FALSE otherwise +// The 7th slot is Cancel, and the 8th slot is unreachable +// Used only to determine whether or not to show the Deoxys form icon sprite +static const bool8 sMultiBattlePartnersPartyMask[PARTY_SIZE + 2] = +{ + FALSE, + TRUE, + FALSE, + FALSE, + TRUE, + TRUE, + FALSE +}; + +static const u8 *const sUnused_StatStrings[] = +{ + gText_HP4, + gText_Attack3, + gText_Defense3, + gText_SpAtk4, + gText_SpDef4, + gText_Speed2 +}; + +static const u16 sTMHMMoves[] = +{ + MOVE_FOCUS_PUNCH, + MOVE_DRAGON_CLAW, + MOVE_WATER_PULSE, + MOVE_CALM_MIND, + MOVE_ROAR, + MOVE_TOXIC, + MOVE_HAIL, + MOVE_BULK_UP, + MOVE_BULLET_SEED, + MOVE_HIDDEN_POWER, + MOVE_SUNNY_DAY, + MOVE_TAUNT, + MOVE_ICE_BEAM, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM, + MOVE_LIGHT_SCREEN, + MOVE_PROTECT, + MOVE_RAIN_DANCE, + MOVE_GIGA_DRAIN, + MOVE_SAFEGUARD, + MOVE_FRUSTRATION, + MOVE_SOLAR_BEAM, + MOVE_IRON_TAIL, + MOVE_THUNDERBOLT, + MOVE_THUNDER, + MOVE_EARTHQUAKE, + MOVE_RETURN, + MOVE_DIG, + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_BRICK_BREAK, + MOVE_DOUBLE_TEAM, + MOVE_REFLECT, + MOVE_SHOCK_WAVE, + MOVE_FLAMETHROWER, + MOVE_SLUDGE_BOMB, + MOVE_SANDSTORM, + MOVE_FIRE_BLAST, + MOVE_ROCK_TOMB, + MOVE_AERIAL_ACE, + MOVE_TORMENT, + MOVE_FACADE, + MOVE_SECRET_POWER, + MOVE_REST, + MOVE_ATTRACT, + MOVE_THIEF, + MOVE_STEEL_WING, + MOVE_SKILL_SWAP, + MOVE_SNATCH, + MOVE_OVERHEAT, + MOVE_CUT, + MOVE_FLY, + MOVE_SURF, + MOVE_STRENGTH, + MOVE_FLASH, + MOVE_ROCK_SMASH, + MOVE_WATERFALL, + MOVE_DIVE, +}; diff --git a/src/data/script_menu.h b/src/data/script_menu.h index b64146a5d..3880c3c0c 100644 --- a/src/data/script_menu.h +++ b/src/data/script_menu.h @@ -31,7 +31,7 @@ static const struct MenuAction MultichoiceList_ContestType[] = {gText_Exit}, }; -static const struct MenuAction MultichoiceList_DecorRegistry[] = +static const struct MenuAction MultichoiceList_BasePCWithRegistry[] = { {gText_Decoration2}, {gText_PackUp}, @@ -39,7 +39,7 @@ static const struct MenuAction MultichoiceList_DecorRegistry[] = {gText_Exit}, }; -static const struct MenuAction MultichoiceList_DecorNoRegistry[] = +static const struct MenuAction MultichoiceList_BasePCNoRegistry[] = { {gText_Decoration2}, {gText_PackUp}, @@ -789,8 +789,8 @@ static const struct MultichoiceListStruct sMultichoiceLists[] = [MULTI_ENTERINFO] = MULTICHOICE(MultichoiceList_EnterInfo), [MULTI_CONTEST_INFO] = MULTICHOICE(MultichoiceList_ContestInfo), [MULTI_CONTEST_TYPE] = MULTICHOICE(MultichoiceList_ContestType), - [MULTI_DECOR_NOREGISTRY] = MULTICHOICE(MultichoiceList_DecorNoRegistry), - [MULTI_DECOR_REGISTRY] = MULTICHOICE(MultichoiceList_DecorRegistry), + [MULTI_BASE_PC_NO_REGISTRY] = MULTICHOICE(MultichoiceList_BasePCNoRegistry), + [MULTI_BASE_PC_WITH_REGISTRY] = MULTICHOICE(MultichoiceList_BasePCWithRegistry), [MULTI_REGISTER_MENU] = MULTICHOICE(MultichoiceList_RegisterMenu), [MULTI_SSTIDAL_LILYCOVE] = MULTICHOICE(MultichoiceList_Exit), [MULTI_UNUSED_9] = MULTICHOICE(MultichoiceList_Exit), diff --git a/src/data/trade.h b/src/data/trade.h new file mode 100644 index 000000000..9e96a54dd --- /dev/null +++ b/src/data/trade.h @@ -0,0 +1,1197 @@ +// Exists unused in RS as well +static const u32 sUnusedStructSizes[] = +{ + sizeof(struct SaveBlock2), + sizeof(struct SaveBlock1), + sizeof(struct MapHeader), + // 0x00000530, in RS + sizeof(struct MailStruct), //or EventObject / EventObjectGraphicsInfo + sizeof(struct Pokemon), //or TrainerCard + 0x00000528 // 0x000004D8, in RS +}; + +static const u16 sTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); +static const u16 sTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); +static const u8 sTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); +static const u8 sTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); +static const u8 sText_EmptyString[] = _(""); +static const u8 sText_UnusedTextFormat[] = _("{COLOR WHITE}{HIGHLIGHT TRANSPARENT}{SHADOW DARK_GREY}"); +const u8 gText_MaleSymbol4[] = _("♂"); +const u8 gText_FemaleSymbol4[] = _("♀"); +const u8 gText_GenderlessSymbol[] = _(""); +static const u8 sText_SpaceMove[] = _(" MOVE"); // unused +static const u8 sText_NewLine[] = _("\n"); +static const u8 sText_Slash[] = _("/"); +static const u8 sText_Lv[] = _("Lv. "); +static const u8 sText_ThreeDashes[] = _("---"); +static const u8 sText_FourQuestionMarks[] = _("????"); +static const u8 sText_832DAE4[] = _(""); +static const u8 sText_IsThisTradeOkay[] = _("Is this trade okay?"); +static const u8 sText_Cancel[] = _("CANCEL"); +static const u8 sText_ChooseAPkmn[] = _("Choose a POKéMON."); +static const u8 sText_Summary[] = _("SUMMARY"); +static const u8 sText_Trade[] = _("TRADE"); +static const u8 sText_CancelTrade[] = _("Cancel trade?"); +static const u8 sJPText_PressBButtonToQuit[] = _("Bボタン で もどります"); +static const u8 sText_Summary2[] = _("SUMMARY"); +static const u8 sText_Trade2[] = _("TRADE"); +static const u8 sText_CommunicationStandby[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Communication standby…\nPlease wait."); +static const u8 sText_TheTradeHasBeenCanceled[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}The trade has\nbeen canceled."); +static const u8 sText_OnlyPkmnForBattle[] = _("That's your only\nPOKéMON for battle."); +static const u8 sText_WaitingForYourFriend[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Waiting for your friend\nto finish…"); +static const u8 sText_YourFriendWantsToTrade[] = _("Your friend wants\nto trade POKéMON."); + +static const struct OamData sTradeOamData_32x16 = +{ + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .priority = 1 +}; + +static const struct OamData sTradeOamData_64x32 = +{ + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +static const union AnimCmd gSpriteAnim_832DC24[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_832DC2C[] = +{ + ANIMCMD_FRAME(32, 5), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_832DC34[] = +{ + gSpriteAnim_832DC24, + gSpriteAnim_832DC2C +}; + +static const struct SpriteSheet sTradeButtonsSpriteSheet = +{ + .data = gTradeButtons_Gfx, + .size = 0x800, + .tag = 300 +}; + +static const struct SpritePalette gUnknown_0832DC44 = +{ + .data = gUnknown_08DDB444, + .tag = 2345 +}; + +static const union AnimCmd gSpriteAnim_832DC4C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_832DC54[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_832DC5C[] = +{ + ANIMCMD_FRAME(16, 5), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_832DC64[] = +{ + ANIMCMD_FRAME(24, 5), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_832DC6C[] = +{ + ANIMCMD_FRAME(32, 5), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_832DC74[] = +{ + ANIMCMD_FRAME(40, 5), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_832DC7C[] = +{ + gSpriteAnim_832DC4C, + gSpriteAnim_832DC54, + gSpriteAnim_832DC5C, + gSpriteAnim_832DC64, + gSpriteAnim_832DC6C, + gSpriteAnim_832DC74 +}; + +static const struct SpriteTemplate gSpriteTemplate_832DC94 = +{ + .tileTag = 300, + .paletteTag = 2345, + .oam = &sTradeOamData_64x32, + .anims = gSpriteAnimTable_832DC34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate gSpriteTemplate_832DCAC = +{ + .tileTag = 200, + .paletteTag = 4925, + .oam = &sTradeOamData_32x16, + .anims = gSpriteAnimTable_832DC7C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal"); +static const struct SpritePalette gSpritePalette_TradeScreenText = +{ + .data = TradeScreenTextPalette, + .tag = 4925 +}; + +// This is used to determine the next mon to select when the D-Pad is +// pressed in a given direction. +// Note that the mons are laid out like this. +// 0-5 are the player's party and 6-11 are the trading partner's party. +// 12 is the cancel button. +// 0 1 6 7 +// 2 3 8 9 +// 4 5 10 11 +// 12 +// 1st array is the current positions +// 2nd array is directions of input +// 3rd array is the next positions to go to (unoccupied spaces are skipped over) +static const u8 sTradeNextSelectedMonTable[(PARTY_SIZE * 2) + 1][4][PARTY_SIZE] = +{ + { + {4, 2, 12, 12, 0, 0}, // UP + {2, 4, 12, 12, 0, 0}, // DOWN + {7, 6, 1, 0, 0, 0}, // LEFT + {1, 6, 7, 0, 0, 0} // RIGHT + }, + { + {5, 3, 12, 12, 0, 0}, + {3, 5, 12, 12, 0, 0}, + {0, 7, 6, 1, 0, 0}, + {6, 7, 0, 1, 0, 0} + }, + { + {0, 0, 0, 0, 0, 0}, + {4, 0, 0, 0, 0, 0}, + {9, 8, 7, 6, 0, 0}, + {3, 1, 0, 0, 0, 0} + }, + { + {1, 1, 1, 1, 0, 0}, + {5, 1, 1, 1, 0, 0}, + {2, 9, 8, 7, 0, 0}, + {8, 9, 6, 6, 0, 0} + }, + { + {2, 2, 2, 2, 0, 0}, + {0, 0, 0, 0, 0, 0}, + {11, 10, 9, 8, 7, 6}, + {5, 3, 1, 0, 0, 0} + }, + { + {3, 3, 3, 3, 0, 0}, + {1, 1, 1, 1, 0, 0}, + {4, 4, 4, 4, 0, 0}, + {10, 8, 6, 0, 0, 0} + }, + { + {10, 8, 12, 0, 0, 0}, + {8, 10, 12, 0, 0, 0}, + {1, 0, 0, 0, 0, 0}, + {7, 0, 1, 0, 0, 0} + }, + { + {12, 0, 0, 0, 0, 0}, + {9, 12, 0, 0, 0, 0}, + {6, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0} + }, + { + {6, 0, 0, 0, 0, 0}, + {10, 6, 0, 0, 0, 0}, + {3, 2, 1, 0, 0, 0}, + {9, 7, 0, 0, 0, 0} + }, + { + {7, 0, 0, 0, 0, 0}, + {11, 12, 0, 0, 0, 0}, + {8, 0, 0, 0, 0, 0}, + {2, 1, 0, 0, 0, 0} + }, + { + {8, 0, 0, 0, 0, 0}, + {6, 0, 0, 0, 0, 0}, + {5, 4, 3, 2, 1, 0}, + {11, 9, 7, 0, 0, 0} + }, + { + {9, 0, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0}, + {10, 0, 0, 0, 0, 0}, + {4, 2, 0, 0, 0, 0} + }, + { + {11, 9, 7, 6, 0, 0}, + {7, 6, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0}, + {12, 0, 0, 0, 0, 0} + } +}; + +static const u8 sTradeMonSpriteCoords[(PARTY_SIZE * 2) + 1][2] = +{ + // Your party + {1, 5 }, + {8, 5 }, + {1, 10}, + {8, 10}, + {1, 15}, + {8, 15}, + + // Friend's party + {16, 5 }, + {23, 5 }, + {16, 10}, + {23, 10}, + {16, 15}, + {23, 15}, + + {23, 18} // CANCEL +}; + +static const u8 sTradeMonLevelCoords[][PARTY_SIZE][2] = +{ + { + // Your party + {5, 4}, + {12, 4}, + {5, 9}, + {12, 9}, + {5, 14}, + {12, 14}, + }, + { + // Friend's party + {20, 4}, + {27, 4}, + {20, 9}, + {27, 9}, + {20, 14}, + {27, 14} + } +}; + +static const u8 sTradeMonBoxCoords[][PARTY_SIZE][2] = +{ + { + // Your party + {1, 3}, + {8, 3}, + {1, 8}, + {8, 8}, + {1, 13}, + {8, 13}, + }, + { + // Friend's party + {16, 3}, + {23, 3}, + {16, 8}, + {23, 8}, + {16, 13}, + {23, 13} + } +}; + +static const u8 sUnref_0832DE6E[] = +{ + 0x00, 0x0e, + 0x0f, 0x1d, + 0x03, 0x05, + 0x03, 0x07, + 0x12, 0x05, + 0x12, 0x07, + 0x08, 0x07, + 0x16, 0x0c, + 0x08, 0x07, + 0x16, 0x0c, + 0x06, 0x07, + 0x18, 0x0c, + 0x06, 0x07, + 0x18, 0x0c, + 0x08, 0x07, + 0x16, 0x0c, + 0x07, 0x07, + 0x17, 0x0c +}; + +static const u8 *const sTradeActionTexts[] = +{ + [TRADE_TEXT_CANCEL] = sText_Cancel, + [TRADE_TEXT_CHOOSE_MON] = sText_ChooseAPkmn, + [TRADE_TEXT_SUMMARY] = sText_Summary, + [TRADE_TEXT_TRADE] = sText_Trade, + [TRADE_TEXT_CANCEL_TRADE] = sText_CancelTrade, + [TRADE_TEXT_JP_QUIT] = sJPText_PressBButtonToQuit +}; + +static const struct MenuAction sSelectTradeMonActions[] = +{ + {sText_Summary2, Task_DrawSelectionSummary}, + {sText_Trade2, Task_DrawSelectionTrade} +}; + +static const u8 *const sTradeMessages[] = +{ + [TRADE_MSG_STANDBY] = sText_CommunicationStandby, + [TRADE_MSG_CANCELED] = sText_TheTradeHasBeenCanceled, + [TRADE_MSG_ONLY_MON1] = sText_OnlyPkmnForBattle, + [TRADE_MSG_ONLY_MON2] = gText_OnlyPkmnForBattle, //identical text to above + [TRADE_MSG_WAITING_FOR_FRIEND] = sText_WaitingForYourFriend, + [TRADE_MSG_FRIEND_WANTS_TO_TRADE] = sText_YourFriendWantsToTrade, + [TRADE_MSG_MON_CANT_BE_TRADED] = gText_PkmnCantBeTradedNow, + [TRADE_MSG_EGG_CANT_BE_TRADED] = gText_EggCantBeTradedNow, + [TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED] = gText_OtherTrainersPkmnCantBeTraded +}; + +static const u8 sTradeTextColors[] = +{ + TEXT_COLOR_TRANSPARENT, //bg color + TEXT_COLOR_WHITE, //fg color + TEXT_COLOR_DARK_GREY //shadow color +}; + +static const struct BgTemplate sTradeMenuBgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 6, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 7, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate sTradeMenuWindowTemplates[] = +{ + { + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 7, + .width = 22, + .height = 4, + .paletteNum = 15, + .baseBlock = 30 + }, + { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 15, + .width = 10, + .height = 4, + .paletteNum = 15, + .baseBlock = 118 + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 158 + }, + { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 174 + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 190 + }, + { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 206 + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 222 + }, + { + .bg = 0, + .tilemapLeft = 7, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 238 + }, + { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 254 + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 270 + }, + { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 286 + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 302 + }, + { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 318 + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 15, + .width = 8, + .height = 2, + .paletteNum = 13, + .baseBlock = 334 + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 5, + .width = 14, + .height = 2, + .paletteNum = 13, + .baseBlock = 350 + }, + { + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 8, + .width = 11, + .height = 8, + .paletteNum = 15, + .baseBlock = 378 + }, + { + .bg = 0, + .tilemapLeft = 17, + .tilemapTop = 5, + .width = 14, + .height = 2, + .paletteNum = 15, + .baseBlock = 466 + }, + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 8, + .width = 11, + .height = 8, + .paletteNum = 15, + .baseBlock = 494 + }, + DUMMY_WIN_TEMPLATE, +}; + +static const struct WindowTemplate sTradeYesNoWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 23, + .tilemapTop = 13, + .width = 5, + .height = 4, + .paletteNum = 15, + .baseBlock = 582 +}; + +static const u8 sJPText_Shedinja[] = _("ヌケニン"); +static const u8 sTradeMenuPartyMonBoxDimensions[3][2] = +{ + [TRADE_PLAYER] = {4, 3}, + [TRADE_PARTNER] = {19, 3} +}; + +static const u16 sTradePal_PokeBall[] = INCBIN_U16("graphics/trade/pokeball.gbapal"); +static const u8 sTradeGfx_PokeBall[] = INCBIN_U8("graphics/trade/pokeball.4bpp"); +static const u8 sTradeGfx_PokeBallSymbol[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); // unused? +static const u16 sTradeTilemap_Cable[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); +static const u16 sTradeTilemap_PokeBallSymbol[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); // unused? +static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); +static const u16 sTradePal_Gba[] = INCBIN_U16("graphics/trade/gba.gbapal"); +static const u16 sTradePal_ShadowUnused[] = INCBIN_U16("graphics/trade/shadow.gbapal"); +static const u16 sTradePal_BlackUnused[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u16 sTradePal_Misc[] = INCBIN_U16("graphics/trade/misc.gbapal"); +static const u8 sTradeGfx_Glow1[] = INCBIN_U8("graphics/trade/glow1.4bpp"); +static const u8 sTradeGfx_Glow2[] = INCBIN_U8("graphics/trade/glow2.4bpp"); +static const u8 sTradeGfx_CableEnd[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); +static const u8 sTradeGfx_GbaScreen[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); +const u16 gUnknown_08331F60[] = INCBIN_U16("graphics/trade/shadow_map.bin"); +static const u8 sTradeAffine_Gba[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); +static const u8 sFiller_08335760[64] = {}; +static const u8 sTradeAffineMap_GbaCable[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); +static const u8 sTradeAffineMap_GbaWireless[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); +static const u16 sTradeTilemap_GbaWireless[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); +static const u16 sTradeTilemap_GbaCable[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); +static const u32 gUnknown_083379A0[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); //some wireless tilemap +static const u16 sTradePal_WirelessSignalSend[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); +static const u16 sTradePal_WirelessSignalReceive[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); +static const u16 sTradePal_Black[] = INCBIN_U16("graphics/trade/black.gbapal"); +static const u32 sTradeGfx_WirelessSignal[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); +static const u32 sTradeTilemap_WirelessSignal[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); + +static const struct OamData sTradeOamData_16x16 = +{ + .affineMode = 1, + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16) +}; + +static const union AnimCmd gSpriteAnim_8338C4C[] = +{ + ANIMCMD_FRAME( 0, 3), + ANIMCMD_FRAME( 4, 3), + ANIMCMD_FRAME( 8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(20, 3), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(28, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(36, 3), + ANIMCMD_FRAME(40, 3), + ANIMCMD_FRAME(44, 3), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME( 0, 3), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_8338C88[] = +{ + ANIMCMD_FRAME( 0, 3), + ANIMCMD_FRAME( 4, 3), + ANIMCMD_FRAME( 8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(20, 3), + ANIMCMD_FRAME(24, 3), + ANIMCMD_FRAME(28, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(36, 3), + ANIMCMD_FRAME(40, 3), + ANIMCMD_FRAME(44, 3), + ANIMCMD_LOOP(2), + ANIMCMD_FRAME( 0, 3), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_8338C88[] = +{ + gSpriteAnim_8338C4C, + gSpriteAnim_8338C88 +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8338CCC[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8338CDC[] = +{ + AFFINEANIMCMD_FRAME(-8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8338CEC[] = +{ + AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0), + AFFINEANIMCMD_FRAME( 0, 0, 0, 5), + AFFINEANIMCMD_FRAME( 8, 0, 0, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D0C[] = +{ + gSpriteAffineAnim_8338CCC, + gSpriteAffineAnim_8338CDC, + gSpriteAffineAnim_8338CEC +}; + +static const struct SpriteSheet sPokeBallSpriteSheet = +{ + .data = sTradeGfx_PokeBall, + .size = 0x600, + .tag = 5557 +}; + +static const struct SpritePalette sPokeBallSpritePalette = +{ + .data = sTradePal_PokeBall, + .tag = 5558 +}; + +static const struct SpriteTemplate gSpriteTemplate_8338D28 = +{ + .tileTag = 5557, + .paletteTag = 5558, + .oam = &sTradeOamData_16x16, + .anims = gSpriteAnimTable_8338C88, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8338D0C, + .callback = sub_807E55C +}; + +static const struct OamData sTradeOamData_32x32 = +{ + .affineMode = 1, + .objMode = 1, + .shape = SPRITE_SHAPE(32x32), + .size = SPRITE_SIZE(32x32), + .priority = 1 +}; + +static const union AnimCmd gSpriteAnim_8338D48[] = +{ + ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_8338D50[] = +{ + gSpriteAnim_8338D48 +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8338D54[] = +{ + AFFINEANIMCMD_FRAME(-10, -10, 0, 5), + AFFINEANIMCMD_FRAME(10, 10, 0, 5), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D6C[] = +{ + gSpriteAffineAnim_8338D54 +}; + +static const struct SpriteSheet sGlow1SpriteSheet = +{ + .data = sTradeGfx_Glow1, + .size = 0x200, + .tag = 5550 +}; + +static const struct SpritePalette sMiscTradeSpritePalette = +{ + .data = sTradePal_Misc, + .tag = 5551 +}; + +static const struct SpritePalette sGbaSpritePalette = +{ + .data = sTradePal_Gba, + .tag = 5555 +}; + +static const struct SpriteTemplate gUnknown_08338D88 = +{ + .tileTag = 5550, + .paletteTag = 5551, + .oam = &sTradeOamData_32x32, + .anims = gSpriteAnimTable_8338D50, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8338D6C, + .callback = sub_807AA28 +}; + +static const struct OamData sTradeOamData_16x32 = +{ + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .priority = 1 +}; + +static const union AnimCmd gSpriteAnim_8338DA8[] = +{ + ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_8338DB0[] = +{ + ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_8338DB8[] = +{ + gSpriteAnim_8338DA8, + gSpriteAnim_8338DB0 +}; + +static const struct SpriteSheet sGlow2SpriteSheet = +{ + .data = sTradeGfx_Glow2, + .size = 0x300, + .tag = 5552 +}; + +static const struct SpriteTemplate sGlowBallSpriteTemplate = +{ + .tileTag = 5552, + .paletteTag = 5551, + .oam = &sTradeOamData_16x32, + .anims = gSpriteAnimTable_8338DB8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807AA7C +}; + +static const struct OamData sTradeOamData_16x32_2 = +{ + .shape = SPRITE_SHAPE(16x32), + .size = SPRITE_SIZE(16x32), + .priority = 1 +}; + +static const union AnimCmd gSpriteAnim_8338DE8[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_8338DF0[] = +{ + gSpriteAnim_8338DE8 +}; + +static const struct SpriteSheet sCableEndSpriteSheet = +{ + .data = sTradeGfx_CableEnd, + .size = 0x100, + .tag = 5554 +}; + +static const struct SpriteTemplate gSpriteTemplate_8338DFC = +{ + .tileTag = 5554, + .paletteTag = 5555, + .oam = &sTradeOamData_16x32_2, + .anims = gSpriteAnimTable_8338DF0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807AABC +}; + +static const struct OamData sTradeOamData_64x32_2 = +{ + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +static const union AnimCmd gSpriteAnim_8338E1C[] = +{ + ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_LOOP(8), + ANIMCMD_END +}; + +static const union AnimCmd gSpriteAnim_8338E40[] = +{ + ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), + ANIMCMD_LOOP(2), + ANIMCMD_END +}; + +static const union AnimCmd *const gSpriteAnimTable_8338E64[] = +{ + gSpriteAnim_8338E1C +}; + +static const union AnimCmd *const gSpriteAnimTable_8338E68[] = +{ + gSpriteAnim_8338E40 +}; + +static const struct SpriteSheet sGbaScreenSpriteSheet = +{ + .data = sTradeGfx_GbaScreen, + .size = 0x1000, + .tag = 5556 +}; + +static const struct SpriteTemplate gSpriteTemplate_8338E74 = +{ + .tileTag = 5556, + .paletteTag = 5555, + .oam = &sTradeOamData_64x32_2, + .anims = gSpriteAnimTable_8338E64, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807AB04 +}; + +static const struct SpriteTemplate gSpriteTemplate_8338E8C = +{ + .tileTag = 5556, + .paletteTag = 5555, + .oam = &sTradeOamData_64x32_2, + .anims = gSpriteAnimTable_8338E68, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_807AB04 +}; + +static const u16 gUnknown_08338EA4[] = INCBIN_U16("graphics/trade/unknown_338EA4.gbapal"); + +static const union AffineAnimCmd gSpriteAffineAnim_8338EBC[] = +{ + AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), + AFFINEANIMCMD_JUMP(0) +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338ECC[] = +{ + gSpriteAffineAnim_8338EBC +}; + +static const struct InGameTrade sIngameTrades[] = +{ + [INGAME_TRADE_SEEDOT] = + { + .nickname = _("DOTS"), + .species = SPECIES_SEEDOT, + .ivs = {5, 4, 5, 4, 4, 4}, + .abilityNum = 1, + .otId = 38726, + .conditions = {30, 5, 5, 5, 5}, + .personality = 0x84, + .heldItem = ITEM_CHESTO_BERRY, + .mailNum = -1, + .otName = _("KOBE"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_RALTS + }, + [INGAME_TRADE_PLUSLE] = + { + .nickname = _("PLUSES"), + .species = SPECIES_PLUSLE, + .ivs = {4, 4, 4, 5, 5, 4}, + .abilityNum = 0, + .otId = 73996, + .conditions = {5, 5, 30, 5, 5}, + .personality = 0x6F, + .heldItem = ITEM_WOOD_MAIL, + .mailNum = 0, + .otName = _("ROMAN"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_VOLBEAT + }, + [INGAME_TRADE_HORSEA] = + { + .nickname = _("SEASOR"), + .species = SPECIES_HORSEA, + .ivs = {5, 4, 4, 4, 5, 4}, + .abilityNum = 0, + .otId = 46285, + .conditions = {5, 5, 5, 5, 30}, + .personality = 0x7F, + .heldItem = ITEM_WAVE_MAIL, + .mailNum = 1, + .otName = _("SKYLAR"), + .otGender = MALE, + .sheen = 10, + .requestedSpecies = SPECIES_BAGON + }, + [INGAME_TRADE_MEOWTH] = + { + .nickname = _("MEOWOW"), + .species = SPECIES_MEOWTH, + .ivs = {4, 5, 4, 5, 4, 4}, + .abilityNum = 0, + .otId = 91481, + .conditions = {5, 5, 5, 30, 5}, + .personality = 0x8B, + .heldItem = ITEM_RETRO_MAIL, + .mailNum = 2, + .otName = _("ISIS"), + .otGender = FEMALE, + .sheen = 10, + .requestedSpecies = SPECIES_SKITTY + } +}; + +static const u16 sIngameTradeMail[][MAIL_WORDS_COUNT + 1] = +{ + { + EC_WORD_BE, + EC_WORD_NICE, + EC_WORD_TO, + EC_POKEMON(PLUSLE), + EC_WORD_EXCL, + EC_POKEMON(VOLBEAT), + EC_WORD_WILL, + EC_WORD_BE, + EC_WORD_FANTASTIC + }, { + EC_WORD_I, + EC_WORD_WILL, + EC_WORD_MAKE, + EC_POKEMON(BAGON), + EC_WORD_TOUGH, + EC_WORD_PLEASE, + EC_WORD_TRAIN, + EC_POKEMON(HORSEA), + EC_WORD_WELL + }, { + EC_WORD_THANK_YOU, + EC_WORD_FOR, + EC_POKEMON(SKITTY), + EC_POKEMON2(MEOWTH), + EC_WORD_CRIES, + EC_WORD_IN, + EC_WORD_A, + EC_WORD_CUTE, + EC_WORD_WAY + } +}; + +static const struct WindowTemplate sTradeSequenceWindowTemplates[] = +{ + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 0, + .baseBlock = 64 + }, + DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate gTradeEvolutionSceneYesNoWindowTemplate = +{ + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 9, + .width = 5, + .height = 4, + .paletteNum = 15, + .baseBlock = 188 +}; + +static const struct BgTemplate sTradeSequenceBgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 5, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 18, + .screenSize = 1, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 6, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, +}; + +static const s8 sTradeBallVerticalVelocityTable[] = +{ + 0, 0, 1, 0, + 1, 0, 1, 1, + 1, 1, 2, 2, + 2, 2, 3, 3, + 3, 3, 4, 4, + 4, 4, -4, -4, + -4, -3, -3, -3, + -3, -2, -2, -2, + -2, -1, -1, -1, + -1, 0, -1, 0, + -1, 0, 0, 0, + 0, 0, 1, 0, + 1, 0, 1, 1, + 1, 1, 2, 2, + 2, 2, 3, 3, + 3, 3, 4, 4, + 4, 4, -4, -3, + -3, -2, -2, -1, + -1, -1, 0, -1, + 0, 0, 0, 0, + 0, 0, 1, 0, + 1, 1, 1, 2, + 2, 3, 3, 4, + -4, -3, -2, -1, + -1, -1, 0, 0, + 0, 0, 1, 0, + 1, 1, 2, 3 +}; + +static const u8 sWirelessSignalTiming[][2] = +{ + {0, 1}, + {1, 1}, + {2, 1}, + {3, 1}, + {4, 1}, + {5, 2}, + {6, 2}, + {7, 2}, + {8, 2}, + {9, 2}, + {10, 3}, + {11, 3}, + {12, 3}, + {13, 4}, + {14, 5}, + {15, 2}, + {0, 1}, + {1, 1}, + {2, 1}, + {3, 1}, + {4, 1}, + {5, 2}, + {6, 2}, + {7, 2}, + {8, 2}, + {9, 2}, + {10, 3}, + {11, 3}, + {12, 3}, + {13, 4}, + {14, 5}, + {16, 1}, + {16, 255}, + {0, 0} +}; diff --git a/src/data/union_room.h b/src/data/union_room.h new file mode 100644 index 000000000..abe91b010 --- /dev/null +++ b/src/data/union_room.h @@ -0,0 +1,1044 @@ +// const rom data + +ALIGNED(4) const u8 gText_EmptyString[] = _(""); +ALIGNED(4) const u8 gText_Colon[] = _(":"); +ALIGNED(4) const u8 gText_UnkCtrlCodeF907[] = _("{ID}"); +ALIGNED(4) const u8 gText_PleaseStartOver[] = _("Please start over from the beginning."); +ALIGNED(4) const u8 gText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled."); +ALIGNED(4) const u8 unref_text_union_room_0[] = _("Awaiting communication\nfrom another player."); +ALIGNED(4) const u8 gText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player."); +ALIGNED(4) const u8 gText_AwaitingLink[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready."); +ALIGNED(4) const u8 gJPText_SingleBattle[] = _("シングルバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_DoubleBattle[] = _("ダブルバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_MultiBattle[] = _("マルチバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする"); +ALIGNED(4) const u8 gJPText_Chat[] = _("チャットを かいさいする"); +ALIGNED(4) const u8 gJPText_DistWonderCard[] = _("ふしぎなカードをくばる"); +ALIGNED(4) const u8 gJPText_DistWonderNews[] = _("ふしぎなニュースをくばる"); +ALIGNED(4) const u8 unref_text_union_room_1[] = _("ふしぎなできごとを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldPokemonJump[] = _("なわとびを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldBerryPicking[] = _("きのみどりを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする"); + +const u8 *const unref_text_ptrs_union_room_0[] = { + gJPText_SingleBattle, + gJPText_DoubleBattle, + gJPText_MultiBattle, + gJPText_TradePokemon, + gJPText_Chat, + gJPText_DistWonderCard, + gJPText_DistWonderNews, + gJPText_DistWonderCard, + gJPText_HoldPokemonJump, + gJPText_HoldBerryCrush, + gJPText_HoldBerryPicking, + gJPText_HoldBerryPicking, + gJPText_HoldSpinTrade, + gJPText_HoldSpinShop +}; + +const u8 gText_1PlayerNeeded[] = _("1 player\nneeded."); +const u8 gText_2PlayersNeeded[] = _("2 players\nneeded."); +const u8 gText_3PlayersNeeded[] = _("3 players\nneeded."); +const u8 gText_4PlayersNeeded[] = _("4 players\nneeded."); +const u8 gText_2PlayerMode[] = _("2-PLAYER\nMODE"); +const u8 gText_3PlayerMode[] = _("3-PLAYER\nMODE"); +const u8 gText_4PlayerMode[] = _("4-PLAYER\nMODE"); +const u8 gText_5PlayerMode[] = _("5-PLAYER\nMODE"); + +const u8 *const gUnknown_082EDB60[][5] = { + { + gText_1PlayerNeeded, + gText_2PlayerMode + }, { + gText_3PlayersNeeded, + gText_2PlayersNeeded, + gText_1PlayerNeeded, + gText_4PlayerMode + }, { + gText_1PlayerNeeded, + gText_2PlayerMode, + gText_3PlayerMode, + gText_4PlayerMode, + gText_5PlayerMode + }, { + gText_2PlayersNeeded, + gText_1PlayerNeeded, + gText_3PlayerMode, + gText_4PlayerMode, + gText_5PlayerMode + }, { + gText_1PlayerNeeded, + gText_2PlayerMode, + gText_3PlayerMode, + gText_4PlayerMode + } +}; + +ALIGNED(4) const u8 gUnknown_082EDBC4[] = _("{B_BUTTON}CANCEL"); +ALIGNED(4) const u8 unref_text_union_room_2[] = _("ため\nさんかしゃ ぼしゅうちゅう です!"); +ALIGNED(4) const u8 gUnknown_082EDBE8[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?"); +ALIGNED(4) const u8 gUnknown_082EDC0C[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?"); +ALIGNED(4) const u8 gUnknown_082EDC34[] = _("{STR_VAR_2} contacted you.\nAdd to the members?"); +ALIGNED(4) const u8 gUnknown_082EDC5C[] = _("{STR_VAR_1}!\nAre these members OK?"); +ALIGNED(4) const u8 gUnknown_082EDC78[] = _("Cancel {STR_VAR_1} MODE\nwith these members?"); +ALIGNED(4) const u8 gUnknown_082EDC9C[] = _("An “OK” was sent\nto {STR_VAR_1}."); +ALIGNED(4) const u8 gUnknown_082EDCB4[] = _("The other TRAINER doesn't appear\nto be available now…\p"); +ALIGNED(4) const u8 gUnknown_082EDCEC[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); +ALIGNED(4) const u8 gUnknown_082EDD24[] = _("The other TRAINER(S) is/are not\nready yet.\p"); + +const u8 *const gUnknown_082EDD50[] = { + gUnknown_082EDCEC, + gUnknown_082EDD24 +}; + +ALIGNED(4) const u8 gUnknown_082EDD58[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EDD8C[] = _("There is a member who can no\nlonger remain available.\p"); + +const u8 *const gUnknown_082EDDC4[] = { + gUnknown_082EDCB4, + gUnknown_082EDD8C +}; + +ALIGNED(4) const u8 gUnknown_082EDDCC[] = _("The other TRAINER appears\nunavailable…\p"); +ALIGNED(4) const u8 gUnknown_082EDDF4[] = _("{STR_VAR_1} sent back an “OK”!"); +ALIGNED(4) const u8 gUnknown_082EDE0C[] = _("{STR_VAR_1} OK'd your registration as\na member."); +ALIGNED(4) const u8 gUnknown_082EDE34[] = _("{STR_VAR_1} replied, “No…”\p"); +ALIGNED(4) const u8 gUnknown_082EDE48[] = _("{STR_VAR_1}!\nAwaiting other members!"); +ALIGNED(4) const u8 gUnknown_082EDE64[] = _("Quit being a member?"); +ALIGNED(4) const u8 gUnknown_082EDE7C[] = _("You stopped being a member.\p"); + +const u8 *const gUnknown_082EDE9C[] = { + NULL, + gUnknown_082EDD8C, + gUnknown_082EDDCC, + NULL, + NULL, + NULL, + gUnknown_082EDE34, + NULL, + NULL, + gUnknown_082EDE7C +}; + +ALIGNED(4) const u8 gUnknown_082EDEC4[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); +ALIGNED(4) const u8 gUnknown_082EDF04[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…"); +ALIGNED(4) const u8 gUnknown_082EDF40[] = _("The link with your friend has been\ndropped…"); +ALIGNED(4) const u8 gUnknown_082EDF6C[] = _("{STR_VAR_1} replied, “No…”"); + +const u8 *const gUnknown_082EDF80[] = { + NULL, + gUnknown_082EDF40, + gUnknown_082EDF40, + NULL, + NULL, + NULL, + gUnknown_082EDF6C, + NULL, + NULL, + NULL +}; + +ALIGNED(4) const u8 gUnknown_082EDFA8[] = _("Do you want the {STR_VAR_2}\nMODE?"); +ALIGNED(4) const u8 gUnknown_082EDFC4[] = _("Do you want the {STR_VAR_2}\nMODE?"); + +const u8 *const unref_text_ptrs_union_room_1[] = { + gUnknown_082EDFA8, + gUnknown_082EDFC4 +}; + +ALIGNED(4) const u8 unref_text_union_room_3[] = _("Communicating…\nPlease wait."); +ALIGNED(4) const u8 gUnknown_082EE004[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…"); +ALIGNED(4) const u8 gUnknown_082EE02C[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) const u8 gUnknown_082EE098[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) const u8 gUnknown_082EE104[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); + +const u8 *const gUnknown_082EE17C[] = { + gUnknown_082EE02C, + gUnknown_082EE098, + gUnknown_082EE104 +}; + +ALIGNED(4) const u8 gUnknown_082EE188[] = _("Hiya! Is there something that you\nwanted to do?"); +ALIGNED(4) const u8 gUnknown_082EE1B8[] = _("Hello!\nWould you like to do something?"); +ALIGNED(4) const u8 gUnknown_082EE1E0[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?"); +ALIGNED(4) const u8 gUnknown_082EE218[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?"); + +const u8 *const gUnknown_082EE24C[][2] = { + { + gUnknown_082EE188, + gUnknown_082EE1B8 + }, { + gUnknown_082EE1E0, + gUnknown_082EE218 + } +}; + +ALIGNED(4) const u8 gUnknown_082EE25C[] = _("Want to do something?"); +ALIGNED(4) const u8 gUnknown_082EE274[] = _("Would you like to do something?"); +ALIGNED(4) const u8 gUnknown_082EE294[] = _("{STR_VAR_1}: What would you like to\ndo now?"); +ALIGNED(4) const u8 unref_text_union_room_4[] = _("{STR_VAR_1}: Want to do anything else?"); + +const u8 *const unref_text_ptrs_union_room_2[][2] = { + { + gUnknown_082EE25C, + gUnknown_082EE274 + }, { + gUnknown_082EE294, + gUnknown_082EE294 + } +}; + +ALIGNED(4) const u8 sText_SomebodyHasContactedYou[] = _("Somebody has contacted you.{PAUSE 60}"); +ALIGNED(4) const u8 sText_XHasContactedYou[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}"); + +static const u8 *const gUnknown_082EE324[] = { + sText_SomebodyHasContactedYou, + sText_XHasContactedYou +}; + +ALIGNED(4) const u8 sUnionRoom_AwaitingResponseFromTrainer[] = _("Awaiting a response from\nthe other TRAINER…"); +ALIGNED(4) const u8 sUnionRoom_AwaitingResponseFromX[] = _("Awaiting a response from\n{STR_VAR_1}…"); + +static const u8 *const sUnionRoomTexts_AwaitingResponse[] = { + sUnionRoom_AwaitingResponseFromTrainer, + sUnionRoom_AwaitingResponseFromX +}; + +ALIGNED(4) const u8 sText_ShowTrainerCard[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?"); +ALIGNED(4) const u8 sText_BattleChallenge[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?"); +ALIGNED(4) const u8 sText_ChatInvitation[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?"); +ALIGNED(4) const u8 sText_OfferToTradeMon[] = _("There is an offer to trade your\nregistered Lv. {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}\pin exchange for a\nLv. {SPECIAL_F7 0x02} {SPECIAL_F7 0x03}.\pWill you accept this trade\noffer?"); +ALIGNED(4) const u8 sText_OfferToTradeEgg[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?"); +ALIGNED(4) const u8 sText_ChatDropped[] = _("The chat has been dropped.\p"); +ALIGNED(4) const u8 sText_OfferDeclined1[] = _("You declined the offer.\p"); +ALIGNED(4) const u8 sText_OfferDeclined2[] = _("You declined the offer.\p"); +ALIGNED(4) const u8 sText_ChatEnded[] = _("The chat was ended.\p"); + +// Unused +static const u8 *const sUnionRoomTexts_Invitation[] = { + sText_ShowTrainerCard, + sText_BattleChallenge, + sText_ChatInvitation, + sText_OfferToTradeMon +}; + +ALIGNED(4) const u8 sText_JoinChatMale[] = _("Oh, hey! We're in a chat right now.\nWant to join us?"); +ALIGNED(4) const u8 sText_PlayerJoinChatMale[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?"); +ALIGNED(4) const u8 sText_JoinChatFemale[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?"); +ALIGNED(4) const u8 sText_PlayerJoinChatFemale[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?"); + +const u8 *const sUnionRoomTexts_JoinChat[][GENDER_COUNT] = { + { + sText_JoinChatMale, + sText_JoinChatFemale + }, { + sText_PlayerJoinChatMale, + sText_PlayerJoinChatFemale + } +}; + +ALIGNED(4) const u8 sText_TrainerAppearsBusy[] = _("……\nThe TRAINER appears to be busy…\p"); +ALIGNED(4) const u8 gUnknown_082EE6EC[] = _("A battle, huh?\nAll right, just give me some time."); +ALIGNED(4) const u8 gUnknown_082EE720[] = _("You want to chat, huh?\nSure, just wait a little."); +ALIGNED(4) const u8 gUnknown_082EE754[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD."); +ALIGNED(4) const u8 gUnknown_082EE78C[] = _("A battle? Of course, but I need\ntime to get ready."); +ALIGNED(4) const u8 gUnknown_082EE7C0[] = _("Did you want to chat?\nOkay, but please wait a moment."); +ALIGNED(4) const u8 gUnknown_082EE7F8[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); + +const u8 *const gUnknown_082EE82C[][4] = { + { + gUnknown_082EE6EC, + gUnknown_082EE720, + NULL, + gUnknown_082EE754 + }, { + gUnknown_082EE78C, + gUnknown_082EE7C0, + NULL, + gUnknown_082EE7F8 + } +}; + +ALIGNED(4) const u8 unref_text_union_room_5[] = _("You want to chat, huh?\nSure, just wait a little."); +ALIGNED(4) const u8 gUnknown_082EE880[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE8B8[] = _("All right!\nLet's chat!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE8D4[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE904[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE92C[] = _("The trade will be started.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE94C[] = _("The battle will be started.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE96C[] = _("Entering the chat…{PAUSE 60}"); + +const u8 *const gUnknown_082EE984[][2][3] = { + { + { + gUnknown_082EE94C, + gUnknown_082EE96C, + gUnknown_082EE92C + }, { + gUnknown_082EE94C, + gUnknown_082EE96C, + gUnknown_082EE92C + } + }, { + { + gUnknown_082EE880, + gUnknown_082EE8B8, + gUnknown_082EE92C + }, { + gUnknown_082EE8D4, + gUnknown_082EE904, + gUnknown_082EE92C + } + } +}; + +ALIGNED(4) const u8 gUnknown_082EE9B4[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p"); +ALIGNED(4) const u8 gUnknown_082EEA14[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p"); + +const u8 *const gUnknown_082EEA68[] = { + gUnknown_082EE9B4, + gUnknown_082EEA14 +}; + +ALIGNED(4) const u8 gUnknown_082EEA70[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p"); +ALIGNED(4) const u8 gUnknown_082EEAC0[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p"); + +const u8 *const gUnknown_082EEB08[] = { + gUnknown_082EEA70, + gUnknown_082EEAC0 +}; + +ALIGNED(4) const u8 gUnknown_082EEB10[] = _("If you want to do something with\nme, just give me a shout!\p"); +ALIGNED(4) const u8 gUnknown_082EEB4C[] = _("If you want to do something with\nme, don't be shy.\p"); + +const u8 *const gUnknown_082EEB80[] = { + gUnknown_082EEB10, + gUnknown_082EEB4C +}; + +ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); +ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); +ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); +ALIGNED(4) const u8 sText_DeclineBattleMale[] = _("Oh, all right.\nCome see me anytime, okay?\p"); +ALIGNED(4) const u8 sText_DeclineBattleFemale[] = _("Oh…\nPlease come by anytime.\p"); + +const u8 *const sUnionRoomTexts_DeclineBattle[GENDER_COUNT] = { + [MALE] = sText_DeclineBattleMale, + [FEMALE] = sText_DeclineBattleFemale +}; + +ALIGNED(4) const u8 gUnknown_082EECA4[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); +ALIGNED(4) const u8 gUnknown_082EECEC[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); + +const u8 *const gUnknown_082EED3C[] = { + gUnknown_082EECA4, + gUnknown_082EECEC +}; + +ALIGNED(4) const u8 gUnknown_082EED44[] = _("Whoa!\nI can tell you're pretty tough!\p"); +ALIGNED(4) const u8 gUnknown_082EED6C[] = _("You used that move?\nThat's good strategy!\p"); +ALIGNED(4) const u8 gUnknown_082EED98[] = _("Way to go!\nThat was an eye-opener!\p"); +ALIGNED(4) const u8 gUnknown_082EEDBC[] = _("Oh! How could you use that\nPOKéMON in that situation?\p"); +ALIGNED(4) const u8 gUnknown_082EEDF4[] = _("That POKéMON…\nIt's been raised really well!\p"); +ALIGNED(4) const u8 gUnknown_082EEE24[] = _("That's it!\nThis is the right move now!\p"); +ALIGNED(4) const u8 gUnknown_082EEE4C[] = _("That's awesome!\nYou can battle that way?\p"); +ALIGNED(4) const u8 gUnknown_082EEE78[] = _("You have exquisite timing for\nswitching POKéMON!\p"); + +const u8 *const gUnknown_082EEEAC[GENDER_COUNT][4] = { + [MALE] = + { + gUnknown_082EED44, + gUnknown_082EED6C, + gUnknown_082EED98, + gUnknown_082EEDBC + }, + [FEMALE] = + { + gUnknown_082EEDF4, + gUnknown_082EEE24, + gUnknown_082EEE4C, + gUnknown_082EEE78 + } +}; + +ALIGNED(4) const u8 gUnknown_082EEECC[] = _("Oh, I see!\nThis is educational!\p"); +ALIGNED(4) const u8 gUnknown_082EEEF0[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p"); +ALIGNED(4) const u8 gUnknown_082EEF2C[] = _("Oh?\nSomething like that happened.\p"); +ALIGNED(4) const u8 gUnknown_082EEF50[] = _("Hmhm… What?\nSo is this what you're saying?\p"); +ALIGNED(4) const u8 gUnknown_082EEF7C[] = _("Is that right?\nI didn't know that.\p"); +ALIGNED(4) const u8 gUnknown_082EEFA0[] = _("Ahaha!\nWhat is that about?\p"); +ALIGNED(4) const u8 gUnknown_082EEFBC[] = _("Yes, that's exactly it!\nThat's what I meant.\p"); +ALIGNED(4) const u8 gUnknown_082EEFEC[] = _("In other words…\nYes! That's right!\p"); + +const u8 *const gUnknown_082EF010[GENDER_COUNT][4] = { + [MALE] = + { + gUnknown_082EEECC, + gUnknown_082EEEF0, + gUnknown_082EEF2C, + gUnknown_082EEF50 + }, + [FEMALE] = + { + gUnknown_082EEF7C, + gUnknown_082EEFA0, + gUnknown_082EEFBC, + gUnknown_082EEFEC + } +}; + +ALIGNED(4) const u8 gUnknown_082EF030[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p"); +ALIGNED(4) const u8 gUnknown_082EF06C[] = _("I hope I get to know you better!\p"); +ALIGNED(4) const u8 gUnknown_082EF090[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p"); +ALIGNED(4) const u8 gUnknown_082EF0D0[] = _("Glad to meet you.\nPlease don't be a stranger!\p"); + +const u8 *const gUnknown_082EF100[GENDER_COUNT][2] = { + [MALE] = + { + gUnknown_082EF030, + gUnknown_082EF06C + }, + [FEMALE] = + { + gUnknown_082EF090, + gUnknown_082EF0D0 + } +}; + +ALIGNED(4) const u8 sText_MaleTraded1[] = _("Yeahah!\nI really wanted this POKéMON!\p"); +ALIGNED(4) const u8 sText_MaleTraded2[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p"); +ALIGNED(4) const u8 sText_FemaleTraded1[] = _("I'm trading POKéMON right now.\p"); +ALIGNED(4) const u8 sText_FemaleTraded2[] = _("I finally got that POKéMON I\nwanted in a trade!\p"); + +const u8 *const sUnionRoomTexts_Traded[GENDER_COUNT][4] = { + [MALE] = + { + sText_MaleTraded1, + sText_MaleTraded2 + }, + [FEMALE] = + { + sText_FemaleTraded1, + sText_FemaleTraded2 + } +}; + +ALIGNED(4) const u8 sText_XCheckedTradingBoard[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p"); +ALIGNED(4) const u8 sText_RegisterMonAtTradingBoard[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?"); +ALIGNED(4) const u8 sText_TradingBoardInfo[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?"); +ALIGNED(4) const u8 sText_ThankYouForRegistering[] = _("We have registered your POKéMON for\ntrade on the TRADING BOARD.\pThank you for using this service!\p"); // unused +ALIGNED(4) const u8 sText_NobodyHasRegistered[] = _("Nobody has registered any POKéMON\nfor trade on the TRADING BOARD.\p\n"); // unused +ALIGNED(4) const u8 sText_ChooseRequestedMonType[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); +ALIGNED(4) const u8 sText_WhichMonWillYouOffer[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); +ALIGNED(4) const u8 sText_RegistrationCanceled[] = _("Registration has been canceled.\p"); +ALIGNED(4) const u8 sText_RegistraionCompleted[] = _("Registration has been completed.\p"); +ALIGNED(4) const u8 sText_TradeCanceled[] = _("The trade has been canceled.\p"); +ALIGNED(4) const u8 sText_CancelRegistrationOfMon[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?"); +ALIGNED(4) const u8 sText_CancelRegistrationOfEgg[] = _("Cancel the registration of your\nEGG?"); +ALIGNED(4) const u8 sText_RegistrationCanceled2[] = _("The registration has been canceled.\p"); +ALIGNED(4) const u8 sText_TradeTrainersWillBeListed[] = _("TRAINERS wishing to make a trade\nwill be listed."); // unused +ALIGNED(4) const u8 sText_ChooseTrainerToTradeWith[] = _("Please choose the TRAINER with whom\nyou would like to trade POKéMON."); // unused +ALIGNED(4) const u8 sText_AskTrainerToMakeTrade[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?"); +ALIGNED(4) const u8 sText_AwaitingResponseFromTrainer[] = _("Awaiting a response from\nthe other TRAINER…"); // unused +ALIGNED(4) const u8 sText_NotRegisteredAMonForTrade[] = _("You have not registered a POKéMON\nfor trading.\p"); // unused +ALIGNED(4) const u8 sText_DontHaveTypeTrainerWants[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p"); +ALIGNED(4) const u8 sText_DontHaveEggTrainerWants[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p"); +ALIGNED(4) const u8 sText_CantTradeMonRightNow[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p"); +ALIGNED(4) const u8 sText_CantTradePartnersMonRightNow[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p"); + +// unused +const u8 *const sUnionRoomTexts_CantTradeRightNow[] = { + sText_CantTradeMonRightNow, + sText_CantTradePartnersMonRightNow +}; + +ALIGNED(4) const u8 sText_TradeOfferRejected[] = _("Your trade offer was rejected.\p"); +ALIGNED(4) const u8 sText_EggTrade[] = _("EGG TRADE"); +ALIGNED(4) const u8 gUnknown_082EF7DC[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL"); +ALIGNED(4) const u8 gUnknown_082EF7F8[] = _("Please choose a TRAINER."); +ALIGNED(4) const u8 gUnknown_082EF814[] = _("Please choose a TRAINER for\na SINGLE BATTLE."); +ALIGNED(4) const u8 gUnknown_082EF844[] = _("Please choose a TRAINER for\na DOUBLE BATTLE."); +ALIGNED(4) const u8 gUnknown_082EF874[] = _("Please choose the LEADER\nfor a MULTI BATTLE."); +ALIGNED(4) const u8 gUnknown_082EF8A4[] = _("Please choose the TRAINER to\ntrade with."); +ALIGNED(4) const u8 gUnknown_082EF8D0[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS."); +ALIGNED(4) const u8 gUnknown_082EF908[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS."); +ALIGNED(4) const u8 gUnknown_082EF940[] = _("Jump with mini POKéMON!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EF974[] = _("BERRY CRUSH!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EF99C[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EF9CC[] = _("BERRY BLENDER!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EF9F8[] = _("RECORD CORNER!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFA24[] = _("COOLNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFA50[] = _("BEAUTY CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFA7C[] = _("CUTENESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFAA8[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFAD8[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFB08[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFB3C[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER."); + +const u8 *const gUnknown_082EFB70[] = { + gUnknown_082EF814, + gUnknown_082EF844, + gUnknown_082EF874, + gUnknown_082EF8A4, + gUnknown_082EF940, + gUnknown_082EF974, + gUnknown_082EF99C, + gUnknown_082EF8D0, + gUnknown_082EF908, + NULL, + NULL, + NULL, + gUnknown_082EF9F8, + gUnknown_082EF9CC, + NULL, + gUnknown_082EFA24, + gUnknown_082EFA50, + gUnknown_082EFA7C, + gUnknown_082EFAA8, + gUnknown_082EFAD8, + gUnknown_082EFB08, + gUnknown_082EFB3C +}; + +ALIGNED(4) const u8 gUnknown_082EFBC8[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait..."); +ALIGNED(4) const u8 unref_text_union_room_12[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p"); +ALIGNED(4) const u8 gUnknown_082EFC3C[] = _("Awaiting {STR_VAR_1}'s response…"); +ALIGNED(4) const u8 gUnknown_082EFC54[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait."); +ALIGNED(4) const u8 gUnknown_082EFC90[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM."); +ALIGNED(4) const u8 unref_text_union_room_13[] = _("Please wait for other TRAINERS to\ngather and get ready."); +ALIGNED(4) const u8 gUnknown_082EFD04[] = _("No CARDS appear to be shared \nright now."); +ALIGNED(4) const u8 gUnknown_082EFD30[] = _("No NEWS appears to be shared\nright now."); + +const u8 *const gUnknown_082EFD58[] = { + gUnknown_082EFD04, + gUnknown_082EFD30 +}; + +ALIGNED(4) const u8 gUnknown_082EFD60[] = _("BATTLE"); +ALIGNED(4) const u8 gUnknown_082EFD68[] = _("CHAT"); +ALIGNED(4) const u8 gUnknown_082EFD70[] = _("GREETINGS"); +ALIGNED(4) const u8 gUnknown_082EFD7C[] = _("EXIT"); +ALIGNED(4) const u8 gUnknown_082EFD84[] = _("EXIT"); +ALIGNED(4) const u8 gUnknown_082EFD8C[] = _("INFO"); +ALIGNED(4) const u8 gUnknown_082EFD94[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV."); +ALIGNED(4) const u8 gUnknown_082EFDB0[] = _("SINGLE BATTLE"); +ALIGNED(4) const u8 gUnknown_082EFDC0[] = _("DOUBLE BATTLE"); +ALIGNED(4) const u8 gUnknown_082EFDD0[] = _("MULTI BATTLE"); +ALIGNED(4) const u8 gUnknown_082EFDE0[] = _("POKéMON TRADES"); +ALIGNED(4) const u8 gUnknown_082EFDF0[] = _("CHAT"); +ALIGNED(4) const u8 gUnknown_082EFDF8[] = _("CARDS"); +ALIGNED(4) const u8 gUnknown_082EFE00[] = _("WONDER CARDS"); +ALIGNED(4) const u8 gUnknown_082EFE10[] = _("WONDER NEWS"); +ALIGNED(4) const u8 gUnknown_082EFE1C[] = _("POKéMON JUMP"); +ALIGNED(4) const u8 gUnknown_082EFE2C[] = _("BERRY CRUSH"); +ALIGNED(4) const u8 gUnknown_082EFE38[] = _("BERRY-PICKING"); +ALIGNED(4) const u8 gUnknown_082EFE48[] = _("SEARCH"); +ALIGNED(4) const u8 gUnknown_082EFE50[] = _("BERRY BLENDER"); +ALIGNED(4) const u8 gUnknown_082EFE60[] = _("RECORD CORNER"); +ALIGNED(4) const u8 gUnknown_082EFE70[] = _("COOL CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFE80[] = _("BEAUTY CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFE90[] = _("CUTE CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFEA0[] = _("SMART CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFEB0[] = _("TOUGH CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFEC0[] = _("BATTLE TOWER LV. 50"); +ALIGNED(4) const u8 gUnknown_082EFED4[] = _("BATTLE TOWER OPEN LEVEL"); +ALIGNED(4) const u8 gUnknown_082EFEEC[] = _("It's a NORMAL CARD."); +ALIGNED(4) const u8 gUnknown_082EFF00[] = _("It's a BRONZE CARD!"); +ALIGNED(4) const u8 gUnknown_082EFF14[] = _("It's a COPPER CARD!"); +ALIGNED(4) const u8 gUnknown_082EFF28[] = _("It's a SILVER CARD!"); +ALIGNED(4) const u8 gUnknown_082EFF3C[] = _("It's a GOLD CARD!"); + +const u8 *const gUnknown_082EFF50[] = { + gUnknown_082EFEEC, + gUnknown_082EFF00, + gUnknown_082EFF14, + gUnknown_082EFF28, + gUnknown_082EFF3C +}; + +ALIGNED(4) const u8 gUnknown_082EFF64[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p"); +ALIGNED(4) const u8 gUnknown_082EFFA4[] = _("BATTLES: WINS: {SPECIAL_F7 0x00} LOSSES: {SPECIAL_F7 0x02}\nTRADES: {SPECIAL_F7 0x03}\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p"); +ALIGNED(4) const u8 gUnknown_082EFFDC[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EFFFC[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}"); + +const u8 *const gUnknown_082F0018[] = { + gUnknown_082EFFDC, + gUnknown_082EFFFC +}; + +ALIGNED(4) const u8 gUnknown_082F0020[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); + +const u8 *const gUnknown_082F0048[] = { + gText_EmptyString, + gUnknown_082EFDB0, + gUnknown_082EFDC0, + gUnknown_082EFDD0, + gUnknown_082EFDE0, + gUnknown_082EFDF0, + gUnknown_082EFE00, + gUnknown_082EFE10, + gUnknown_082EFDF8, + gUnknown_082EFE1C, + gUnknown_082EFE2C, + gUnknown_082EFE38, + gUnknown_082EFE48, + gText_EmptyString, + gUnknown_082EFED4, + gUnknown_082EFE60, + gUnknown_082EFE50, + gText_EmptyString, + gText_EmptyString, + gText_EmptyString, + gText_EmptyString, + gUnknown_082EFE00, + gUnknown_082EFE10, + gUnknown_082EFE70, + gUnknown_082EFE80, + gUnknown_082EFE90, + gUnknown_082EFEA0, + gUnknown_082EFEB0, + gUnknown_082EFEC0 +}; + +const struct WindowTemplate gUnknown_082F00BC = { + .bg = 0x00, + .tilemapLeft = 0x00, + .tilemapTop = 0x00, + .width = 0x1E, + .height = 0x02, + .paletteNum = 0x0F, + .baseBlock = 0x0008 +}; + +const u32 gUnknown_082F00C4[] = { + 0x0201, + 0x0202, + 0x0403, + 0x0204, + 0x2509, + 0x250a, + 0x350b, + 0x0000, + 0x0000, + 0x0000, + 0x0000, + 0x0000, + 0x240f, + 0x2410, + 0x0000, + 0x2417, + 0x2418, + 0x2419, + 0x241a, + 0x241b, + 0x021c, + 0x020e +}; + +const struct WindowTemplate gUnknown_082F011C = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x03, + .width = 0x0d, + .height = 0x08, + .paletteNum = 0x0f, + .baseBlock = 0x0044 +}; + +const struct WindowTemplate gUnknown_082F0124 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x03, + .width = 0x0d, + .height = 0x0a, + .paletteNum = 0x0f, + .baseBlock = 0x0044 +}; + +const struct WindowTemplate gUnknown_082F012C = { + .bg = 0x00, + .tilemapLeft = 0x10, + .tilemapTop = 0x03, + .width = 0x07, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x00c6 +}; + +const struct ListMenuItem gUnknown_082F0134[] = { + { gText_EmptyString, 0 }, + { gText_EmptyString, 1 }, + { gText_EmptyString, 2 }, + { gText_EmptyString, 3 }, + { gText_EmptyString, 4 } +}; + +const struct ListMenuTemplate gUnknown_082F015C = { + .items = gUnknown_082F0134, + .moveCursorFunc = NULL, + .itemPrintFunc = sub_8013278, + .totalItems = 5, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 0, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 1 +}; + +const struct WindowTemplate gUnknown_082F0174 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x03, + .width = 0x11, + .height = 0x0a, + .paletteNum = 0x0f, + .baseBlock = 0x0044 +}; + +const struct WindowTemplate gUnknown_082F017C = { + .bg = 0x00, + .tilemapLeft = 0x14, + .tilemapTop = 0x03, + .width = 0x07, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x00ee +}; + +const struct ListMenuItem gUnknown_082F0184[] = { + { gText_EmptyString, 0 }, + { gText_EmptyString, 1 }, + { gText_EmptyString, 2 }, + { gText_EmptyString, 3 }, + { gText_EmptyString, 4 }, + { gText_EmptyString, 5 }, + { gText_EmptyString, 6 }, + { gText_EmptyString, 7 }, + { gText_EmptyString, 8 }, + { gText_EmptyString, 9 }, + { gText_EmptyString, 10 }, + { gText_EmptyString, 11 }, + { gText_EmptyString, 12 }, + { gText_EmptyString, 13 }, + { gText_EmptyString, 14 }, + { gText_EmptyString, 15 } +}; + +const struct ListMenuTemplate gUnknown_082F0204 = { + .items = gUnknown_082F0184, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = sub_8013DF4, + .totalItems = 16, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 1, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate gUnknown_082F021C = { + .bg = 0x00, + .tilemapLeft = 0x14, + .tilemapTop = 0x05, + .width = 0x10, + .height = 0x08, + .paletteNum = 0x0f, + .baseBlock = 0x0001 +}; + +const struct ListMenuItem gUnknown_082F0224[] = { + { gUnknown_082EFD70, 0x208 }, + { gUnknown_082EFD60, 0x241 }, + { gUnknown_082EFD68, 0x245 }, + { gUnknown_082EFD7C, 0x040 } +}; + +const struct ListMenuTemplate gUnknown_082F0244 = { + .items = gUnknown_082F0224, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 4, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate gUnknown_082F025C = { + .bg = 0x00, + .tilemapLeft = 0x12, + .tilemapTop = 0x07, + .width = 0x10, + .height = 0x06, + .paletteNum = 0x0f, + .baseBlock = 0x0001 +}; + +const struct ListMenuItem gUnknown_082F0264[] = { + { gText_Register, 1 }, + { gUnknown_082EFD8C, 2 }, + { gUnknown_082EFD7C, 3 } +}; + +const struct ListMenuTemplate gUnknown_082F027C = { + .items = gUnknown_082F0264, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate gUnknown_082F0294 = { + .bg = 0x00, + .tilemapLeft = 0x14, + .tilemapTop = 0x01, + .width = 0x10, + .height = 0x0c, + .paletteNum = 0x0f, + .baseBlock = 0x0001 +}; + +static const struct ListMenuItem sTradingBoardTypes[] = { + { gTypeNames[TYPE_NORMAL], TYPE_NORMAL }, + { gTypeNames[TYPE_FIRE], TYPE_FIRE }, + { gTypeNames[TYPE_WATER], TYPE_WATER }, + { gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC }, + { gTypeNames[TYPE_GRASS], TYPE_GRASS }, + { gTypeNames[TYPE_ICE], TYPE_ICE }, + { gTypeNames[TYPE_GROUND], TYPE_GROUND }, + { gTypeNames[TYPE_ROCK], TYPE_ROCK }, + { gTypeNames[TYPE_FLYING], TYPE_FLYING }, + { gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC }, + { gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING }, + { gTypeNames[TYPE_POISON], TYPE_POISON }, + { gTypeNames[TYPE_BUG], TYPE_BUG }, + { gTypeNames[TYPE_GHOST], TYPE_GHOST }, + { gTypeNames[TYPE_DRAGON], TYPE_DRAGON }, + { gTypeNames[TYPE_STEEL], TYPE_STEEL }, + { gTypeNames[TYPE_DARK], TYPE_DARK }, + { gUnknown_082EFD7C, NUMBER_OF_MON_TYPES } +}; + +const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = { + .items = sTradingBoardTypes, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = NUMBER_OF_MON_TYPES, + .maxShowed = 6, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate gUnknown_082F0344 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x01, + .width = 0x1c, + .height = 0x02, + .paletteNum = 0x0d, + .baseBlock = 0x0001 +}; + +const struct WindowTemplate gUnknown_082F034C = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x05, + .width = 0x1c, + .height = 0x0c, + .paletteNum = 0x0d, + .baseBlock = 0x0039 +}; + +const struct ListMenuItem gUnknown_082F0354[] = { + { gText_EmptyString, -3 }, + { gText_EmptyString, 0 }, + { gText_EmptyString, 1 }, + { gText_EmptyString, 2 }, + { gText_EmptyString, 3 }, + { gText_EmptyString, 4 }, + { gText_EmptyString, 5 }, + { gText_EmptyString, 6 }, + { gText_EmptyString, 7 }, + { gUnknown_082EFD84, 8 } +}; + +const struct ListMenuTemplate gUnknown_082F03A4 = { + .items = gUnknown_082F0354, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = sub_8017BE8, + .totalItems = 10, + .maxShowed = 6, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 14, + .fillValue = 15, + .cursorShadowPal = 13, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate UnrefWindowTemplate_082F03B4 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x05, + .width = 0x1c, + .height = 0x0c, + .paletteNum = 0x0d, + .baseBlock = 0x0039 +}; + +const struct ListMenuItem gUnknown_082F03C4[] = { + { gText_EmptyString, 0 }, + { gText_EmptyString, 1 }, + { gText_EmptyString, 2 }, + { gText_EmptyString, 3 }, + { gText_EmptyString, 4 }, + { gText_EmptyString, 5 }, + { gText_EmptyString, 6 }, + { gText_EmptyString, 7 }, + { gText_EmptyString, 8 }, + { gText_EmptyString, 9 }, + { gText_EmptyString, 10 }, + { gText_EmptyString, 11 }, + { gText_EmptyString, 12 }, + { gText_EmptyString, 13 }, + { gText_EmptyString, 14 }, + { gText_EmptyString, 15 } +}; + +const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = { + .items = gUnknown_082F03C4, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = nullsub_14, + .totalItems = 16, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 1, + .fontId = 1, + .cursorKind = 0 +}; + +const struct UnkStruct_Shared gUnknown_082F045C = {0}; + +ALIGNED(4) const u8 gUnknown_082F0474[] = {0x01, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0478[] = {0x02, 0xff}; +ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff}; +ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff}; + +const u8 *const gUnknown_082F04D8[] = { + gUnknown_082F0474, + gUnknown_082F0478, + gUnknown_082F047C, + gUnknown_082F0480, + gUnknown_082F0484, + gUnknown_082F0488, + gUnknown_082F048C, + gUnknown_082F0490, + gUnknown_082F0494, + gUnknown_082F0498, + gUnknown_082F04A4, + gUnknown_082F04A8, + gUnknown_082F04B4, + gUnknown_082F04B8, + NULL, + gUnknown_082F04BC, + gUnknown_082F04C0, + gUnknown_082F04C4, + gUnknown_082F04C8, + gUnknown_082F04CC, + gUnknown_082F04D0, + gUnknown_082F04D4 +}; + +const u8 gUnknown_082F0530[] = { + 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, + 0x16, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x0e, 0x00, 0x00 +}; diff --git a/src/data/wild_encounters.json b/src/data/wild_encounters.json index ea555bd32..19aa40b00 100755 --- a/src/data/wild_encounters.json +++ b/src/data/wild_encounters.json @@ -26,7 +26,12 @@ "type": "fishing_mons", "encounter_rates": [ 70, 30, 60, 20, 20, 40, 40, 15, 4, 1 - ] + ], + "groups": { + "old_rod": [0, 1], + "good_rod": [2, 3, 4], + "super_rod": [5, 6, 7, 8, 9] + } } ], "encounters": [ diff --git a/src/data/wild_encounters.json.txt b/src/data/wild_encounters.json.txt index 85755ddec..bf848249f 100755 --- a/src/data/wild_encounters.json.txt +++ b/src/data/wild_encounters.json.txt @@ -3,14 +3,26 @@ ## for wild_encounter_group in wild_encounter_groups {% if wild_encounter_group.for_maps %} ## for wild_encounter_field in wild_encounter_group.fields +{% if not existsIn(wild_encounter_field, "groups") %} ## for encounter_rate in wild_encounter_field.encounter_rates -{% if trackVar(encounter_rate, 100) %} +{% if loop.index == 0 %} #define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} {{ encounter_rate }} {% else %}#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ loop.index }} ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ subtract(loop.index, 1) }} + {{ encounter_rate }}{% endif %} {{ setVarInt(wild_encounter_field.type, loop.index) }} ## endfor #define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_TOTAL (ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_SLOT_{{ getVar(wild_encounter_field.type) }}) +{% else %} +## for field_subgroup_key, field_subgroup_subarray in wild_encounter_field.groups +## for field_subgroup_index in field_subgroup_subarray +{% if loop.index == 0 %} +#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ field_subgroup_index }} {{ at(wild_encounter_field.encounter_rates, field_subgroup_index) }} {% else %}#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ field_subgroup_index }} ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ getVar("previous_slot") }} + {{ at(wild_encounter_field.encounter_rates, field_subgroup_index) }}{% endif %}{{ setVarInt(concat(wild_encounter_field.type, field_subgroup_key), field_subgroup_index) }}{{ setVarInt("previous_slot", field_subgroup_index) }} +## endfor +#define ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_TOTAL (ENCOUNTER_CHANCE_{{ upper(wild_encounter_field.type) }}_{{ upper(field_subgroup_key) }}_SLOT_{{ getVar(concat(wild_encounter_field.type, field_subgroup_key)) }}) +## endfor +{% endif %} ## endfor {% endif %} + + ## for encounter in wild_encounter_group.encounters {% if existsIn(encounter, "land_mons") %} const struct WildPokemon {{ encounter.base_label }}_LandMons[] = diff --git a/src/daycare.c b/src/daycare.c index e5445ee21..42c69465b 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -231,11 +231,8 @@ static void ApplyDaycareExperience(struct Pokemon *mon) while ((learnedMove = MonTryLearningNewMove(mon, firstMove)) != 0) { firstMove = FALSE; - if (learnedMove == 0xFFFF) - { - // Mon already knows 4 moves. + if (learnedMove == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn); - } } } else @@ -666,7 +663,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { if (sHatchedEggFatherMoves[i] == sHatchedEggEggMoves[j]) { - if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == 0xFFFF) + if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]); break; } @@ -685,7 +682,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { if (sHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01_FOCUS_PUNCH + j) && CanMonLearnTMHM(egg, j)) { - if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == 0xFFFF) + if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]); } } @@ -710,7 +707,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru { if (sHatchedEggLevelUpMoves[j] != MOVE_NONE && sHatchedEggFinalMoves[i] == sHatchedEggLevelUpMoves[j]) { - if (GiveMoveToMon(egg, sHatchedEggFinalMoves[i]) == 0xFFFF) + if (GiveMoveToMon(egg, sHatchedEggFinalMoves[i]) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFinalMoves[i]); break; } @@ -755,7 +752,7 @@ static void GiveVoltTackleIfLightBall(struct Pokemon *mon, struct DayCare *dayca if (motherItem == ITEM_LIGHT_BALL || fatherItem == ITEM_LIGHT_BALL) { - if (GiveMoveToMon(mon, MOVE_VOLT_TACKLE) == 0xFFFF) + if (GiveMoveToMon(mon, MOVE_VOLT_TACKLE) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToMon(mon, MOVE_VOLT_TACKLE); } } @@ -1295,6 +1292,6 @@ void ShowDaycareLevelMenu(void) void ChooseSendDaycareMon(void) { - sub_81B9328(); + ChooseMonForDaycare(); gMain.savedCallback = CB2_ReturnToField; } diff --git a/src/decompress.c b/src/decompress.c index 46e4ef614..5e85e065f 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "data.h" #include "decompress.h" #include "pokemon.h" diff --git a/src/decoration.c b/src/decoration.c index 4efeb19b1..2a47dd553 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "decoration.h" #include "decoration_inventory.h" @@ -40,6 +40,7 @@ #define PLACE_DECORATION_SELECTOR_TAG 0xbe5 #define PLACE_DECORATION_PLAYER_TAG 0x008 +#define NUM_DECORATION_FLAGS (FLAG_DECORATION_14 - FLAG_DECORATION_0) struct DecorationItemsMenu { @@ -69,8 +70,8 @@ struct DecorRearrangementDataBuffer EWRAM_DATA u8 *gCurDecorationItems = NULL; EWRAM_DATA static u8 sDecorationActionsCursorPos = 0; EWRAM_DATA static u8 sNumOwnedDecorationsInCurCategory = 0; -EWRAM_DATA static u8 sSecretBaseItemsIndicesBuffer[16] = {}; -EWRAM_DATA static u8 sPlayerRoomItemsIndicesBuffer[12] = {}; +EWRAM_DATA static u8 sSecretBaseItemsIndicesBuffer[DECOR_MAX_SECRET_BASE] = {}; +EWRAM_DATA static u8 sPlayerRoomItemsIndicesBuffer[DECOR_MAX_PLAYERS_HOUSE] = {}; EWRAM_DATA static u16 sDecorationsCursorPos = 0; EWRAM_DATA static u16 sDecorationsScrollOffset = 0; EWRAM_DATA u8 gCurDecorationIndex = 0; @@ -86,7 +87,7 @@ EWRAM_DATA static u8 sDecor_CameraSpriteObjectIdx1 = 0; EWRAM_DATA static u8 sDecor_CameraSpriteObjectIdx2 = 0; EWRAM_DATA static u8 sDecorationLastDirectionMoved = 0; EWRAM_DATA static struct OamData sDecorSelectorOam = {}; -EWRAM_DATA static struct DecorRearrangementDataBuffer sDecorRearrangementDataBuffer[16] = {}; +EWRAM_DATA static struct DecorRearrangementDataBuffer sDecorRearrangementDataBuffer[DECOR_MAX_SECRET_BASE] = {}; EWRAM_DATA static u8 sCurDecorSelectedInRearrangement = 0; static void HandleDecorationActionsMenuInput(u8 taskId); @@ -128,34 +129,34 @@ void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphic void sub_812826C(u8 taskId); void sub_81283BC(u8 taskId); void sub_8128414(u8 taskId); -void sub_8128950(u8 taskId); -void sub_81289D0(u8 taskId); -void sub_81289F0(u8 taskId); +void AttemptPlaceDecoration(u8 taskId); +void PlaceDecorationPrompt(u8 taskId); +void PlaceDecoration(u8 taskId); void sub_8128AAC(u8 taskId); -void sub_8128B80(u8 taskId); -void sub_8128BA0(u8 taskId); +void CancelDecoratingPrompt(u8 taskId); +void CancelDecorating(u8 taskId); void sub_8128BBC(u8 taskId); void c1_overworld_prev_quest(u8 taskId); void sub_8128CD4(void); void sub_8128DE0(void); -void sub_8128FD8(u8 taskId); -void sub_8129020(u8 taskId); +void ContinueDecorating(u8 taskId); +void CantPlaceDecorationPrompt(u8 taskId); void sub_81292D0(struct Sprite *sprite); void sub_81292E8(struct Sprite *sprite); u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor); const u32 *GetDecorationIconPicOrPalette(u16 decor, u8 mode); bool8 sub_81299AC(u8 taskId); void sub_8129ABC(u8 taskId); -void sub_8129B34(u8 taskId); +void ContinuePuttingAwayDecorations(u8 taskId); void sub_8129BCC(u8 taskId); void sub_8129BF8(u8 taskId); void sub_8129C74(u8 taskId); -void sub_8129D64(u8 taskId); +void ContinuePuttingAwayDecorationsPrompt(u8 taskId); void sub_812A0E8(u8 taskId); -void sub_812A1A0(u8 taskId); -void sub_812A1C0(u8 taskId); -void sub_812A1F0(u8 taskId); -void sub_812A210(u8 taskId); +void ReturnDecorationPrompt(u8 taskId); +void PutAwayDecoration(u8 taskId); +void StopPuttingAwayDecorationsPrompt(u8 taskId); +void StopPuttingAwayDecorations(u8 taskId); void sub_812A22C(u8 taskId); void sub_812A25C(u8 taskId); void sub_812A334(void); @@ -163,8 +164,8 @@ void sub_812A36C(struct Sprite *sprite); void sub_812A39C(void); void sub_812A3C8(void); void sub_812A3D4(u8 taskId); -void sub_812A458(u8 taskId); -void sub_812A478(u8 taskId); +void TossDecorationPrompt(u8 taskId); +void TossDecoration(u8 taskId); #include "data/decoration/tiles.h" #include "data/decoration/description.h" @@ -344,16 +345,16 @@ const struct SpritePalette gUnknown_085A72BC = .tag = PLACE_DECORATION_SELECTOR_TAG, }; -const struct YesNoFuncTable gUnknown_085A72C4 = +const struct YesNoFuncTable sPlaceDecorationYesNoFunctions = { - .yesFunc = sub_81289F0, - .noFunc = sub_8128FD8, + .yesFunc = PlaceDecoration, + .noFunc = ContinueDecorating, }; -const struct YesNoFuncTable gUnknown_085A72CC = +const struct YesNoFuncTable sCancelDecoratingYesNoFunctions = { - .yesFunc = sub_8128BA0, - .noFunc = sub_8128FD8, + .yesFunc = CancelDecorating, + .noFunc = ContinueDecorating, }; const struct YesNoFuncTable gUnknown_085A72D4[] = @@ -390,16 +391,16 @@ const u16 gUnknown_085A7308[] = INCBIN_U16("graphics/decorations/unk_85a7308.gba const u16 gUnknown_085A7328[] = INCBIN_U16("graphics/decorations/unk_85a7328.gbapal"); -const struct YesNoFuncTable gUnknown_085A7348 = +const struct YesNoFuncTable sReturnDecorationYesNoFunctions = { - .yesFunc = sub_812A1C0, - .noFunc = sub_8129B34, + .yesFunc = PutAwayDecoration, + .noFunc = ContinuePuttingAwayDecorations, }; -const struct YesNoFuncTable gUnknown_085A7350 = +const struct YesNoFuncTable sStopPuttingAwayDecorationsYesNoFunctions = { - .yesFunc = sub_812A210, - .noFunc = sub_8129B34, + .yesFunc = StopPuttingAwayDecorations, + .noFunc = ContinuePuttingAwayDecorations, }; const u8 gUnknown_085A7358[] = INCBIN_U8("graphics/misc/decoration_unk_85a7358.4bpp"); @@ -458,9 +459,9 @@ const struct SpriteTemplate gUnknown_085A7404 = sub_812A36C }; -const struct YesNoFuncTable gUnknown_085A741C = +const struct YesNoFuncTable sTossDecorationYesNoFunctions = { - .yesFunc = sub_812A478, + .yesFunc = TossDecoration, .noFunc = sub_8127A30, }; @@ -633,7 +634,7 @@ static void DecorationMenuAction_Cancel(u8 taskId) RemoveDecorationWindow(0); if (!gDecorationContext.isPlayerRoom) { - ScriptContext1_SetupScript(gUnknown_0823B4E8); + ScriptContext1_SetupScript(SecretBase_EventScript_PCCancel); DestroyTask(taskId); } else @@ -1235,12 +1236,12 @@ void ShowDecorationOnMap(u16 mapX, u16 mapY, u16 decoration) } } -void sub_8127E18(void) +void SetDecoration(void) { u8 i; u8 j; - for (i = 0; i < 14; i++) + for (i = 0; i < NUM_DECORATION_FLAGS; i++) { if (FlagGet(FLAG_DECORATION_1 + i) == TRUE) { @@ -1339,7 +1340,7 @@ void sub_8128060(u8 taskId) if (IsWeatherNotFadingIn() == TRUE) { gTasks[taskId].data[12] = 0; - sub_8128FD8(taskId); + ContinueDecorating(taskId); } break; } @@ -1427,7 +1428,7 @@ void sub_81283BC(u8 taskId) gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 1; gSprites[sDecor_CameraSpriteObjectIdx2].data[7] = 1; sub_8128DE0(); - sub_8128950(taskId); + AttemptPlaceDecoration(taskId); } void sub_8128414(u8 taskId) @@ -1437,7 +1438,7 @@ void sub_8128414(u8 taskId) gSprites[sDecor_CameraSpriteObjectIdx2].data[7] = 1; sub_8128DE0(); StringExpandPlaceholders(gStringVar4, gText_CancelDecorating); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8128B80); + DisplayItemMessageOnField(taskId, gStringVar4, CancelDecoratingPrompt); } bool8 sub_8128484(u8 behaviorAt, u16 behaviorBy) @@ -1472,7 +1473,7 @@ bool8 sub_81284F4(u16 behaviorAt, const struct Decoration *decoration) return FALSE; } -bool8 sub_812853C(u8 taskId, const struct Decoration *decoration) +bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) { u8 i; u8 j; @@ -1586,28 +1587,28 @@ bool8 sub_812853C(u8 taskId, const struct Decoration *decoration) return TRUE; } -void sub_8128950(u8 taskId) +void AttemptPlaceDecoration(u8 taskId) { - if (sub_812853C(taskId, &gDecorations[gCurDecorationItems[gCurDecorationIndex]]) == TRUE) + if (CanPlaceDecoration(taskId, &gDecorations[gCurDecorationItems[gCurDecorationIndex]]) == TRUE) { StringExpandPlaceholders(gStringVar4, gText_PlaceItHere); - DisplayItemMessageOnField(taskId, gStringVar4, sub_81289D0); + DisplayItemMessageOnField(taskId, gStringVar4, PlaceDecorationPrompt); } else { PlaySE(SE_HAZURE); StringExpandPlaceholders(gStringVar4, gText_CantBePlacedHere); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8129020); + DisplayItemMessageOnField(taskId, gStringVar4, CantPlaceDecorationPrompt); } } -void sub_81289D0(u8 taskId) +void PlaceDecorationPrompt(u8 taskId) { DisplayYesNoMenuDefaultYes(); - DoYesNoFuncWithChoice(taskId, &gUnknown_085A72C4); + DoYesNoFuncWithChoice(taskId, &sPlaceDecorationYesNoFunctions); } -void sub_81289F0(u8 taskId) +void PlaceDecoration(u8 taskId) { ClearDialogWindowAndFrame(0, 0); sub_8128AAC(taskId); @@ -1619,7 +1620,7 @@ void sub_81289F0(u8 taskId) { sCurDecorMapX = gTasks[taskId].data[0] - 7; sCurDecorMapY = gTasks[taskId].data[1] - 7; - ScriptContext1_SetupScript(EventScript_275D1F); + ScriptContext1_SetupScript(SecretBase_EventScript_SetDecoration); } gSprites[sDecor_CameraSpriteObjectIdx1].pos1.y += 2; @@ -1645,7 +1646,7 @@ void sub_8128AAC(u8 taskId) if (!gDecorationContext.isPlayerRoom) { - for (i = 0; i < 16; i++) + for (i = 0; i < DECOR_MAX_SECRET_BASE; i++) { if (sSecretBaseItemsIndicesBuffer[i] == 0) { @@ -1656,7 +1657,7 @@ void sub_8128AAC(u8 taskId) } else { - for (i = 0; i < 12; i++) + for (i = 0; i < DECOR_MAX_PLAYERS_HOUSE; i++) { if (sPlayerRoomItemsIndicesBuffer[i] == 0) { @@ -1667,13 +1668,13 @@ void sub_8128AAC(u8 taskId) } } -void sub_8128B80(u8 taskId) +void CancelDecoratingPrompt(u8 taskId) { DisplayYesNoMenuDefaultYes(); - DoYesNoFuncWithChoice(taskId, &gUnknown_085A72CC); + DoYesNoFuncWithChoice(taskId, &sCancelDecoratingYesNoFunctions); } -void sub_8128BA0(u8 taskId) +void CancelDecorating(u8 taskId) { ClearDialogWindowAndFrame(0, 0); sub_8128BBC(taskId); @@ -1718,7 +1719,7 @@ void sub_8128C64(u8 taskId) data[2]++; break; case 1: - ScriptContext1_SetupScript(EventScript_275D0C); + ScriptContext1_SetupScript(SecretBase_EventScript_InitDecorations); data[2]++; break; case 2: @@ -1857,7 +1858,7 @@ void sub_8128E18(u8 taskId) } } -void sub_8128FD8(u8 taskId) +void ContinueDecorating(u8 taskId) { ClearDialogWindowAndFrame(0, 1); gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 0; @@ -1865,10 +1866,10 @@ void sub_8128FD8(u8 taskId) gTasks[taskId].func = sub_8128E18; } -void sub_8129020(u8 taskId) +void CantPlaceDecorationPrompt(u8 taskId) { if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - sub_8128FD8(taskId); + ContinueDecorating(taskId); } void sub_8129048(struct PlaceDecorationGraphicsDataBuffer *data) @@ -2206,7 +2207,7 @@ void sub_81298EC(u8 taskId) case 1: if (!gPaletteFade.active) { DrawWholeMapView(); - ScriptContext1_SetupScript(EventScript_275D2E); + ScriptContext1_SetupScript(SecretBase_EventScript_PutAwayDecoration); ClearDialogWindowAndFrame(0, 1); gTasks[taskId].data[2] = 2; } @@ -2221,7 +2222,7 @@ void sub_81298EC(u8 taskId) if (IsWeatherNotFadingIn() == TRUE) { StringExpandPlaceholders(gStringVar4, gText_DecorationReturnedToPC); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8129D64); + DisplayItemMessageOnField(taskId, gStringVar4, ContinuePuttingAwayDecorationsPrompt); if (gMapHeader.regionMapSectionId == MAPSEC_SECRET_BASE) TV_PutSecretBaseVisitOnTheAir(); } @@ -2284,13 +2285,13 @@ void sub_8129ABC(u8 taskId) if (IsWeatherNotFadingIn() == TRUE) { data[12] = 1; - sub_8129B34(taskId); + ContinuePuttingAwayDecorations(taskId); } break; } } -void sub_8129B34(u8 taskId) +void ContinuePuttingAwayDecorations(u8 taskId) { ClearDialogWindowAndFrame(0, 1); gSprites[sDecor_CameraSpriteObjectIdx1].data[7] = 0; @@ -2316,7 +2317,7 @@ void sub_8129BF8(u8 taskId) gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE; gSprites[sDecor_CameraSpriteObjectIdx1].callback = SpriteCallbackDummy; StringExpandPlaceholders(gStringVar4, gText_StopPuttingAwayDecorations); - DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1F0); + DisplayItemMessageOnField(taskId, gStringVar4, StopPuttingAwayDecorationsPrompt); } void sub_8129C74(u8 taskId) @@ -2328,7 +2329,7 @@ void sub_8129C74(u8 taskId) if (sCurDecorSelectedInRearrangement != 0) { StringExpandPlaceholders(gStringVar4, gText_ReturnDecorationToPC); - DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1A0); + DisplayItemMessageOnField(taskId, gStringVar4, ReturnDecorationPrompt); } else { @@ -2339,20 +2340,20 @@ void sub_8129C74(u8 taskId) gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE; gSprites[sDecor_CameraSpriteObjectIdx1].callback = SpriteCallbackDummy; StringExpandPlaceholders(gStringVar4, gText_StopPuttingAwayDecorations); - DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1F0); + DisplayItemMessageOnField(taskId, gStringVar4, StopPuttingAwayDecorationsPrompt); } else { StringExpandPlaceholders(gStringVar4, gText_NoDecorationHere); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8129D64); + DisplayItemMessageOnField(taskId, gStringVar4, ContinuePuttingAwayDecorationsPrompt); } } } -void sub_8129D64(u8 taskId) +void ContinuePuttingAwayDecorationsPrompt(u8 taskId) { if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - sub_8129B34(taskId); + ContinuePuttingAwayDecorations(taskId); } void sub_8129D8C(u8 decor, struct DecorRearrangementDataBuffer *data) @@ -2542,26 +2543,26 @@ void sub_812A0E8(u8 taskId) } } -void sub_812A1A0(u8 taskId) +void ReturnDecorationPrompt(u8 taskId) { DisplayYesNoMenuDefaultYes(); - DoYesNoFuncWithChoice(taskId, &gUnknown_085A7348); + DoYesNoFuncWithChoice(taskId, &sReturnDecorationYesNoFunctions); } -void sub_812A1C0(u8 taskId) +void PutAwayDecoration(u8 taskId) { FadeScreen(1, 0); gTasks[taskId].data[2] = 0; gTasks[taskId].func = sub_81298EC; } -void sub_812A1F0(u8 taskId) +void StopPuttingAwayDecorationsPrompt(u8 taskId) { DisplayYesNoMenuDefaultYes(); - DoYesNoFuncWithChoice(taskId, &gUnknown_085A7350); + DoYesNoFuncWithChoice(taskId, &sStopPuttingAwayDecorationsYesNoFunctions); } -void sub_812A210(u8 taskId) +void StopPuttingAwayDecorations(u8 taskId) { ClearDialogWindowAndFrame(0, 0); sub_812A22C(taskId); @@ -2604,7 +2605,7 @@ void sub_812A2C4(u8 taskId) data[2]++; break; case 1: - ScriptContext1_SetupScript(EventScript_275D0C); + ScriptContext1_SetupScript(SecretBase_EventScript_InitDecorations); data[2]++; break; case 2: @@ -2658,7 +2659,7 @@ void sub_812A3D4(u8 taskId) { StringCopy(gStringVar1, gDecorations[gCurDecorationItems[gCurDecorationIndex]].name); StringExpandPlaceholders(gStringVar4, gText_DecorationWillBeDiscarded); - DisplayItemMessageOnField(taskId, gStringVar4, sub_812A458); + DisplayItemMessageOnField(taskId, gStringVar4, TossDecorationPrompt); } else { @@ -2667,13 +2668,13 @@ void sub_812A3D4(u8 taskId) } } -void sub_812A458(u8 taskId) +void TossDecorationPrompt(u8 taskId) { DisplayYesNoMenuDefaultYes(); - DoYesNoFuncWithChoice(taskId, &gUnknown_085A741C); + DoYesNoFuncWithChoice(taskId, &sTossDecorationYesNoFunctions); } -void sub_812A478(u8 taskId) +void TossDecoration(u8 taskId) { gCurDecorationItems[gCurDecorationIndex] = DECOR_NONE; sNumOwnedDecorationsInCurCategory = GetNumOwnedDecorationsInCategory(sCurDecorationCategory); diff --git a/src/dewford_trend.c b/src/dewford_trend.c index ee310af04..57a97d8f3 100644 --- a/src/dewford_trend.c +++ b/src/dewford_trend.c @@ -3,7 +3,7 @@ #include "easy_chat.h" #include "event_data.h" #include "link.h" -#include "alloc.h" +#include "malloc.h" #include "random.h" #include "text.h" #include "tv.h" diff --git a/src/diploma.c b/src/diploma.c index 8e0901fa8..3c03c057f 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -5,7 +5,7 @@ #include "gpu_regs.h" #include "scanline_effect.h" #include "task.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "bg.h" #include "window.h" diff --git a/src/dma3_manager.c b/src/dma3_manager.c deleted file mode 100644 index 43744883f..000000000 --- a/src/dma3_manager.c +++ /dev/null @@ -1,181 +0,0 @@ -#include "global.h" -#include "dma3.h" - -#define MAX_DMA_REQUESTS 128 - -#define DMA_REQUEST_COPY32 1 -#define DMA_REQUEST_FILL32 2 -#define DMA_REQUEST_COPY16 3 -#define DMA_REQUEST_FILL16 4 - -BSS_DATA struct -{ - const u8 *src; - u8 *dest; - u16 size; - u16 mode; - u32 value; -} gDma3Requests[MAX_DMA_REQUESTS]; - -static volatile bool8 gDma3ManagerLocked; -static u8 gDma3RequestCursor; - -void ClearDma3Requests(void) -{ - int i; - - gDma3ManagerLocked = TRUE; - gDma3RequestCursor = 0; - - for (i = 0; i < MAX_DMA_REQUESTS; i++) - { - gDma3Requests[i].size = 0; - gDma3Requests[i].src = NULL; - gDma3Requests[i].dest = NULL; - } - - gDma3ManagerLocked = FALSE; -} - -void ProcessDma3Requests(void) -{ - u16 bytesTransferred; - - if (gDma3ManagerLocked) - return; - - bytesTransferred = 0; - - // as long as there are DMA requests to process (unless size or vblank is an issue), do not exit - while (gDma3Requests[gDma3RequestCursor].size != 0) - { - bytesTransferred += gDma3Requests[gDma3RequestCursor].size; - - if (bytesTransferred > 40 * 1024) - return; // don't transfer more than 40 KiB - if (*(u8 *)REG_ADDR_VCOUNT > 224) - return; // we're about to leave vblank, stop - - switch (gDma3Requests[gDma3RequestCursor].mode) - { - case DMA_REQUEST_COPY32: // regular 32-bit copy - Dma3CopyLarge32_(gDma3Requests[gDma3RequestCursor].src, - gDma3Requests[gDma3RequestCursor].dest, - gDma3Requests[gDma3RequestCursor].size); - break; - case DMA_REQUEST_FILL32: // repeat a single 32-bit value across RAM - Dma3FillLarge32_(gDma3Requests[gDma3RequestCursor].value, - gDma3Requests[gDma3RequestCursor].dest, - gDma3Requests[gDma3RequestCursor].size); - break; - case DMA_REQUEST_COPY16: // regular 16-bit copy - Dma3CopyLarge16_(gDma3Requests[gDma3RequestCursor].src, - gDma3Requests[gDma3RequestCursor].dest, - gDma3Requests[gDma3RequestCursor].size); - break; - case DMA_REQUEST_FILL16: // repeat a single 16-bit value across RAM - Dma3FillLarge16_(gDma3Requests[gDma3RequestCursor].value, - gDma3Requests[gDma3RequestCursor].dest, - gDma3Requests[gDma3RequestCursor].size); - break; - } - - // Free the request - gDma3Requests[gDma3RequestCursor].src = NULL; - gDma3Requests[gDma3RequestCursor].dest = NULL; - gDma3Requests[gDma3RequestCursor].size = 0; - gDma3Requests[gDma3RequestCursor].mode = 0; - gDma3Requests[gDma3RequestCursor].value = 0; - gDma3RequestCursor++; - - if (gDma3RequestCursor >= MAX_DMA_REQUESTS) // loop back to the first DMA request - gDma3RequestCursor = 0; - } -} - -s16 RequestDma3Copy(const void *src, void *dest, u16 size, u8 mode) -{ - int cursor; - int i = 0; - - gDma3ManagerLocked = TRUE; - cursor = gDma3RequestCursor; - - while (i < MAX_DMA_REQUESTS) - { - if (gDma3Requests[cursor].size == 0) // an empty request was found. - { - gDma3Requests[cursor].src = src; - gDma3Requests[cursor].dest = dest; - gDma3Requests[cursor].size = size; - - if (mode == 1) - gDma3Requests[cursor].mode = DMA_REQUEST_COPY32; - else - gDma3Requests[cursor].mode = DMA_REQUEST_COPY16; - - gDma3ManagerLocked = FALSE; - return cursor; - } - if (++cursor >= MAX_DMA_REQUESTS) // loop back to start. - cursor = 0; - i++; - } - gDma3ManagerLocked = FALSE; - return -1; // no free DMA request was found -} - -s16 RequestDma3Fill(s32 value, void *dest, u16 size, u8 mode) -{ - int cursor; - int i = 0; - - cursor = gDma3RequestCursor; - gDma3ManagerLocked = TRUE; - - while (i < MAX_DMA_REQUESTS) - { - if (gDma3Requests[cursor].size == 0) // an empty request was found. - { - gDma3Requests[cursor].dest = dest; - gDma3Requests[cursor].size = size; - gDma3Requests[cursor].mode = mode; - gDma3Requests[cursor].value = value; - - if(mode == 1) - gDma3Requests[cursor].mode = DMA_REQUEST_FILL32; - else - gDma3Requests[cursor].mode = DMA_REQUEST_FILL16; - - gDma3ManagerLocked = FALSE; - return cursor; - } - if (++cursor >= MAX_DMA_REQUESTS) // loop back to start. - cursor = 0; - i++; - } - gDma3ManagerLocked = FALSE; - return -1; // no free DMA request was found -} - -s16 CheckForSpaceForDma3Request(s16 index) -{ - int i = 0; - - if (index == -1) // check if all requests are free - { - while (i < MAX_DMA_REQUESTS) - { - if (gDma3Requests[i].size != 0) - return -1; - i++; - } - return 0; - } - else // check the specified request - { - if (gDma3Requests[index].size != 0) - return -1; - return 0; - } -} diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index 714b10ef6..2e0cfbc7e 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "dodrio_berry_picking.h" #include "dynamic_placeholder_text_util.h" @@ -245,7 +245,7 @@ static u32 sub_8027DFC(u32 arg0); static u32 IncrementWithLimit(u32 arg0, u32 arg1); static u32 Min(u32 arg0, u32 arg1); static u32 sub_80276C0(u8 arg0); -static void sub_8027ACC(u8 taskId); +static void Task_ShowDodrioBerryPickingRecords(u8 taskId); static void sub_8029314(u8 taskId); static void sub_8027BEC(u8 windowId, s32 width); static void nullsub_15(struct Sprite *sprite); @@ -2580,7 +2580,7 @@ static u8 sub_8027A48(u8 id) return gUnknown_02022C98->unk34[id]; } -void sub_8027A5C(void) +void IsDodrioInParty(void) { int i; for (i = 0; i < PARTY_SIZE; i++) @@ -2588,18 +2588,18 @@ void sub_8027A5C(void) if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO) { - gSpecialVar_Result = 1; + gSpecialVar_Result = TRUE; return; } } - gSpecialVar_Result = 0; + gSpecialVar_Result = FALSE; } -void sub_8027AAC(void) +void ShowDodrioBerryPickingRecords(void) { - u8 taskId = CreateTask(sub_8027ACC, 0); - sub_8027ACC(taskId); + u8 taskId = CreateTask(Task_ShowDodrioBerryPickingRecords, 0); + Task_ShowDodrioBerryPickingRecords(taskId); } // Data related to printing saved results. @@ -2621,7 +2621,7 @@ ALIGNED(4) static const u8 gUnknown_082F7B44[][2] = {{25}, {41}, {57}}; static const u8 gUnknown_082F7B4A[][2] = {{25}, {41}, {73}}; -static void sub_8027ACC(u8 taskId) +static void Task_ShowDodrioBerryPickingRecords(u8 taskId) { struct WindowTemplate window; s32 i, width, widthCurr; diff --git a/src/dragon.c b/src/dragon.c index befaf52e7..fa91156d4 100644 --- a/src/dragon.c +++ b/src/dragon.c @@ -36,7 +36,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596E7C = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596E78, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -89,7 +89,7 @@ const struct SpriteTemplate gUnknown_08596EF4 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_08596EB4, .images = NULL, .affineAnims = gUnknown_08596EEC, @@ -115,7 +115,7 @@ const struct SpriteTemplate gUnknown_08596F28 = { .tileTag = ANIM_TAG_FIRE_PLUME, .paletteTag = ANIM_TAG_FIRE_PLUME, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596F24, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -158,7 +158,7 @@ const struct SpriteTemplate gUnknown_08596F80 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_08596F50, .images = NULL, .affineAnims = gUnknown_08596F78, @@ -169,7 +169,7 @@ const struct SpriteTemplate gUnknown_08596F98 = { .tileTag = ANIM_TAG_HOLLOW_ORB, .paletteTag = ANIM_TAG_HOLLOW_ORB, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -180,7 +180,7 @@ const struct SpriteTemplate gUnknown_08596FB0 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596E78, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/easy_chat.c b/src/easy_chat.c index ba54de783..05f51ed4e 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "bard_music.h" #include "bg.h" #include "data.h" @@ -31,6 +31,7 @@ #include "constants/event_objects.h" #include "constants/flags.h" #include "constants/lilycove_lady.h" +#include "constants/mauville_old_man.h" #include "constants/songs.h" #include "constants/species.h" #include "constants/rgb.h" @@ -121,8 +122,8 @@ static void sub_811B768(void); static u8 sub_811B960(u8); static void sub_811B9A0(void); static u8 sub_811BA1C(void); -static int sub_811BF20(void); -static u16 sub_811BF40(void); +static int DidPlayerInputMysteryGiftPhrase(void); +static u16 DidPlayerInputABerryMasterWifePhrase(void); static bool8 sub_811CE94(void); static void sub_811CF64(void); static void sub_811CF04(void); @@ -209,7 +210,7 @@ static void sub_811D830(void); static void sub_811D058(u8, u8, const u8 *, u8, u8, u8, u8, u8, u8); static void sub_811DD84(void); static void sub_811D6F4(void); -static void sub_811D758(void); +static void PrintEasyChatKeyboardText(void); static void sub_811D794(void); static const u8 *GetEasyChatWordGroupName(u8); static void sub_811D864(u8, u8); @@ -220,7 +221,7 @@ static void sub_811E0EC(s8, s8); static void sub_811E1A4(s8, s8); static void sub_811E2DC(struct Sprite *); static void sub_811E34C(u8, u8); -static bool8 sub_811F0F8(void); +static bool8 EasyChatIsNationalPokedexEnabled(void); static u16 sub_811F108(void); static void sub_811F2D4(void); static void sub_811F46C(void); @@ -698,11 +699,12 @@ static const struct WindowTemplate sEasyChatYesNoWindowTemplate = { static const u8 sText_Clear17[] = _("{CLEAR 17}"); -static const u8 *const sUnknown_08597C90[] = { - gUnknown_862B810, - gUnknown_862B832, - gUnknown_862B84B, - gUnknown_862B86C, +static const u8 *const sEasyChatKeyboardText[] = +{ + gText_EasyChatKeyboard_ABCDEFothers, + gText_EasyChatKeyboard_GHIJKL, + gText_EasyChatKeyboard_MNOPQRS, + gText_EasyChatKeyboard_TUVWXYZ, }; static const struct SpriteSheet sEasyChatSpriteSheets[] = { @@ -1262,7 +1264,7 @@ void ShowEasyChatScreen(void) break; case EASY_CHAT_TYPE_BARD_SONG: bard = &gSaveBlock1Ptr->oldMan.bard; - for (i = 0; i < 6; i ++) + for (i = 0; i < BARD_SONG_LENGTH; i ++) bard->temporaryLyrics[i] = bard->songLyrics[i]; words = bard->temporaryLyrics; @@ -2596,17 +2598,17 @@ static int FooterHasFourOptions_(void) return FooterHasFourOptions(); } -u8 sub_811BC7C(const u16 *arg0, u8 arg1) +static bool8 IsPhraseDifferentThanPlayerInput(const u16 *phrase, u8 phraseLength) { u8 i; - for (i = 0; i < arg1; i++) + for (i = 0; i < phraseLength; i++) { - if (arg0[i] != sEasyChatScreen->ecWordBuffer[i]) - return 1; + if (phrase[i] != sEasyChatScreen->ecWordBuffer[i]) + return TRUE; } - return 0; + return FALSE; } static u8 GetDisplayedPersonType(void) @@ -2729,7 +2731,7 @@ static void sub_811BE9C(void) FlagSet(FLAG_SYS_CHAT_USED); break; case EASY_CHAT_TYPE_QUESTIONNAIRE: - if (sub_811BF20()) + if (DidPlayerInputMysteryGiftPhrase()) gSpecialVar_0x8004 = 2; else gSpecialVar_0x8004 = 0; @@ -2739,22 +2741,22 @@ static void sub_811BE9C(void) gSpecialVar_0x8004 = sub_81226D8(sEasyChatScreen->ecWordBuffer); break; case EASY_CHAT_TYPE_GOOD_SAYING: - gSpecialVar_0x8004 = sub_811BF40(); + gSpecialVar_0x8004 = DidPlayerInputABerryMasterWifePhrase(); break; } } -static int sub_811BF20(void) +static int DidPlayerInputMysteryGiftPhrase(void) { - return sub_811BC7C(sMysteryGiftPhrase, ARRAY_COUNT(sMysteryGiftPhrase)) == 0; + return !IsPhraseDifferentThanPlayerInput(sMysteryGiftPhrase, ARRAY_COUNT(sMysteryGiftPhrase)); } -static u16 sub_811BF40(void) +static u16 DidPlayerInputABerryMasterWifePhrase(void) { int i; - for (i = 0; i < 5; i++) + for (i = 0; i < (int)ARRAY_COUNT(sBerryMasterWifePhrases); i++) { - if (!sub_811BC7C(sBerryMasterWifePhrases[i], ARRAY_COUNT(*sBerryMasterWifePhrases))) + if (!IsPhraseDifferentThanPlayerInput(sBerryMasterWifePhrases[i], ARRAY_COUNT(*sBerryMasterWifePhrases))) return i + 1; } @@ -3967,7 +3969,7 @@ static void sub_811D698(u32 arg0) sub_811D6F4(); break; case 1: - sub_811D758(); + PrintEasyChatKeyboardText(); break; case 2: sub_811D794(); @@ -4010,12 +4012,12 @@ static void sub_811D6F4(void) } } -static void sub_811D758(void) +static void PrintEasyChatKeyboardText(void) { u32 i; - for (i = 0; i < ARRAY_COUNT(sUnknown_08597C90); i++) - sub_811D028(2, 1, sUnknown_08597C90[i], 10, 97 + i * 16, 0xFF, NULL); + for (i = 0; i < ARRAY_COUNT(sEasyChatKeyboardText); i++) + sub_811D028(2, 1, sEasyChatKeyboardText[i], 10, 97 + i * 16, 0xFF, NULL); } static void sub_811D794(void) @@ -4808,7 +4810,7 @@ static void sub_811E948(void) PutWindowTilemap(windowId); } -static bool8 sub_811EA28(u8 groupId) +static bool8 IsEasyChatGroupUnlocked(u8 groupId) { switch (groupId) { @@ -4819,7 +4821,7 @@ static bool8 sub_811EA28(u8 groupId) case EC_GROUP_MOVE_2: return FlagGet(FLAG_SYS_GAME_CLEAR); case EC_GROUP_POKEMON_2: - return sub_811F0F8(); + return EasyChatIsNationalPokedexEnabled(); default: return TRUE; } @@ -4830,7 +4832,7 @@ u16 EasyChat_GetNumWordsInGroup(u8 groupId) if (groupId == EC_GROUP_POKEMON) return GetNationalPokedexCount(FLAG_GET_SEEN); - if (sub_811EA28(groupId)) + if (IsEasyChatGroupUnlocked(groupId)) return gEasyChatGroups[groupId].numEnabledWords; return 0; @@ -5070,7 +5072,7 @@ u16 sub_811EE38(u16 groupId) u16 sub_811EE90(u16 groupId) { - if (!sub_811EA28(groupId)) + if (!IsEasyChatGroupUnlocked(groupId)) return 0xFFFF; if (groupId == EC_GROUP_POKEMON) @@ -5128,16 +5130,16 @@ void sub_811EF6C(void) CopyEasyChatWord(gStringVar2, easyChatWord); } -static bool8 sub_811EF98(u8 additionalPhraseId) +static bool8 IsAdditionalPhraseUnlocked(u8 additionalPhraseId) { int byteOffset = additionalPhraseId / 8; int shift = additionalPhraseId % 8; return (gSaveBlock1Ptr->additionalPhrases[byteOffset] >> shift) & 1; } -void sub_811EFC0(u8 additionalPhraseId) +void UnlockAdditionalPhrase(u8 additionalPhraseId) { - if (additionalPhraseId < 33) + if (additionalPhraseId < NUM_ADDITIONAL_PHRASES) { int byteOffset = additionalPhraseId / 8; int shift = additionalPhraseId % 8; @@ -5145,32 +5147,32 @@ void sub_811EFC0(u8 additionalPhraseId) } } -u8 sub_811EFF0(void) +static u8 GetNumAdditionalPhrasesUnlocked(void) { u8 i; u8 numAdditionalPhrasesUnlocked; - for (i = 0, numAdditionalPhrasesUnlocked = 0; i < 33; i++) + for (i = 0, numAdditionalPhrasesUnlocked = 0; i < NUM_ADDITIONAL_PHRASES; i++) { - if (sub_811EF98(i)) + if (IsAdditionalPhraseUnlocked(i)) numAdditionalPhrasesUnlocked++; } return numAdditionalPhrasesUnlocked; } -u16 sub_811F01C(void) +u16 GetNewHipsterPhraseToTeach(void) { u16 i; u16 additionalPhraseId; - u8 numAdditionalPhrasesUnlocked = sub_811EFF0(); - if (numAdditionalPhrasesUnlocked == 33) + u8 numAdditionalPhrasesUnlocked = GetNumAdditionalPhrasesUnlocked(); + if (numAdditionalPhrasesUnlocked == NUM_ADDITIONAL_PHRASES) return 0xFFFF; - additionalPhraseId = Random() % (33 - numAdditionalPhrasesUnlocked); - for (i = 0; i < 33; i++) + additionalPhraseId = Random() % (NUM_ADDITIONAL_PHRASES - numAdditionalPhrasesUnlocked); + for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++) { - if (!sub_811EF98(i)) + if (!IsAdditionalPhraseUnlocked(i)) { if (additionalPhraseId) { @@ -5178,7 +5180,7 @@ u16 sub_811F01C(void) } else { - sub_811EFC0(i); + UnlockAdditionalPhrase(i); return EC_WORD(EC_GROUP_TRENDY_SAYING, i); } } @@ -5187,17 +5189,18 @@ u16 sub_811F01C(void) return 0xFFFF; } -u16 sub_811F090(void) +// Unused +u16 GetRandomTaughtHipsterPhrase(void) { u16 i; - u16 additionalPhraseId = sub_811EFF0(); + u16 additionalPhraseId = GetNumAdditionalPhrasesUnlocked(); if (additionalPhraseId == 0) return 0xFFFF; additionalPhraseId = Random() % additionalPhraseId; - for (i = 0; i < 33; i++) + for (i = 0; i < NUM_ADDITIONAL_PHRASES; i++) { - if (sub_811EF98(i)) + if (IsAdditionalPhraseUnlocked(i)) { if (additionalPhraseId) additionalPhraseId--; @@ -5209,7 +5212,7 @@ u16 sub_811F090(void) return 0xFFFF; } -static bool8 sub_811F0F8(void) +static bool8 EasyChatIsNationalPokedexEnabled(void) { return IsNationalPokedexEnabled(); } @@ -5496,7 +5499,7 @@ static bool8 sub_811F764(u16 wordIndex, u8 groupId) case EC_GROUP_MOVE_2: return TRUE; case EC_GROUP_TRENDY_SAYING: - return sub_811EF98(wordIndex); + return IsAdditionalPhraseUnlocked(wordIndex); default: return gEasyChatGroups[groupId].wordData.words[wordIndex].enabled; } @@ -5544,7 +5547,7 @@ bool32 sub_811F8D8(int easyChatWord) int groupId = EC_GROUP(easyChatWord); int mask = 0x7F; int index = EC_INDEX(easyChatWord); - if (!sub_811EA28(groupId & mask)) + if (!IsEasyChatGroupUnlocked(groupId & mask)) return FALSE; else return sub_811F764(index, groupId & mask); diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 1eaf4e4a1..9e9d1c2c5 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -17,7 +17,7 @@ #include "menu.h" #include "trig.h" #include "random.h" -#include "alloc.h" +#include "malloc.h" #include "dma3.h" #include "gpu_regs.h" #include "bg.h" diff --git a/src/electric.c b/src/electric.c index 4b93119dc..7a0cd542c 100644 --- a/src/electric.c +++ b/src/electric.c @@ -56,7 +56,7 @@ const struct SpriteTemplate gUnknown_085956C0 = { .tileTag = ANIM_TAG_LIGHTNING, .paletteTag = ANIM_TAG_LIGHTNING, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085956BC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -80,7 +80,7 @@ const struct SpriteTemplate gUnknown_085956FC = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_085956F8, @@ -107,7 +107,7 @@ const struct SpriteTemplate gUnknown_08595734 = { .tileTag = ANIM_TAG_SHOCK, .paletteTag = ANIM_TAG_SHOCK, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595730, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -118,7 +118,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_859574C = { .tileTag = ANIM_TAG_SPARK_2, .paletteTag = ANIM_TAG_SPARK_2, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -129,7 +129,7 @@ const struct SpriteTemplate gUnknown_08595764 = { .tileTag = ANIM_TAG_BLACK_BALL_2, .paletteTag = ANIM_TAG_BLACK_BALL_2, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -151,7 +151,7 @@ const struct SpriteTemplate gUnknown_08595790 = { .tileTag = ANIM_TAG_SPARK_2, .paletteTag = ANIM_TAG_SPARK_2, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_0859578C, @@ -188,7 +188,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85957E0 = { .tileTag = ANIM_TAG_SHOCK_3, .paletteTag = ANIM_TAG_SHOCK_3, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_085957B8, .images = NULL, .affineAnims = gUnknown_085957DC, @@ -199,7 +199,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85957F8 = { .tileTag = ANIM_TAG_SPARK_2, .paletteTag = ANIM_TAG_SPARK_2, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_0859578C, @@ -210,7 +210,7 @@ const struct SpriteTemplate gElectricitySpriteTemplate = { .tileTag = ANIM_TAG_SPARK_2, .paletteTag = ANIM_TAG_SPARK_2, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -221,7 +221,7 @@ const struct SpriteTemplate gUnknown_08595828 = { .tileTag = ANIM_TAG_SPARK, .paletteTag = ANIM_TAG_SPARK, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -232,7 +232,7 @@ const struct SpriteTemplate gUnknown_08595840 = { .tileTag = ANIM_TAG_SPARK_H, .paletteTag = ANIM_TAG_SPARK_H, - .oam = &gUnknown_08524934, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -287,7 +287,7 @@ const struct SpriteTemplate gUnknown_085958A8 = { .tileTag = ANIM_TAG_ELECTRIC_ORBS, .paletteTag = ANIM_TAG_ELECTRIC_ORBS, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_085958A0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -335,7 +335,7 @@ const struct SpriteTemplate gUnknown_0859595C = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08595950, @@ -360,7 +360,7 @@ const struct SpriteTemplate gUnknown_0859598C = { .tileTag = ANIM_TAG_ELECTRICITY, .paletteTag = ANIM_TAG_ELECTRICITY, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595988, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -371,7 +371,7 @@ const struct SpriteTemplate gUnknown_085959A4 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08595950, @@ -425,7 +425,7 @@ const struct SpriteTemplate gUnknown_08595A00 = { .tileTag = ANIM_TAG_SPARK, .paletteTag = ANIM_TAG_SPARK, - .oam = &gUnknown_08524A04, + .oam = &gOamData_AffineDouble_ObjNormal_8x16, .anims = gUnknown_085959DC, .images = NULL, .affineAnims = gUnknown_085959FC, @@ -436,7 +436,7 @@ const struct SpriteTemplate gUnknown_08595A18 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08595950, @@ -447,7 +447,7 @@ const struct SpriteTemplate gUnknown_08595A30 = { .tileTag = ANIM_TAG_SPARK, .paletteTag = ANIM_TAG_SPARK, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index f184dea82..7f0887790 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "ereader_helpers.h" #include "link.h" diff --git a/src/ereader_screen.c b/src/ereader_screen.c index 13e964224..4497556ea 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "ereader_helpers.h" #include "link.h" @@ -88,7 +88,7 @@ static u8 sub_81D4DE8(struct Unk03006370 *arg0) static void sub_81D4E30(void) { memset(gDecompressionBuffer, 0, 0x2000); - gLinkType = 0x5503; + gLinkType = LINKTYPE_0x5503; OpenLink(); SetSuppressLinkErrorMessage(TRUE); } diff --git a/src/event_obj_lock.c b/src/event_obj_lock.c index 22a29fd5d..c64a2ab22 100644 --- a/src/event_obj_lock.c +++ b/src/event_obj_lock.c @@ -108,12 +108,12 @@ void sub_8098524(void) UnfreezeEventObjects(); } -void sub_8098574(void) +void Script_FacePlayer(void) { EventObjectFaceOppositeDirection(&gEventObjects[gSelectedEventObject], gSpecialVar_Facing); } -void sub_809859C(void) +void Script_ClearHeldMovement(void) { EventObjectClearHeldMovementIfActive(&gEventObjects[gSelectedEventObject]); } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 75f758a12..c746f08b1 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle_pyramid.h" #include "berry.h" #include "decoration.h" @@ -26,6 +26,7 @@ #include "constants/event_objects.h" #include "constants/field_effects.h" #include "constants/items.h" +#include "constants/mauville_old_man.h" // this file was known as evobjmv.c in Game Freak's original source @@ -2723,9 +2724,8 @@ bool8 MovementType_WanderAround_Step4(struct EventObject *eventObject, struct Sp SetEventObjectDirection(eventObject, chosenDirection); sprite->data[1] = 5; if (GetCollisionInDirection(eventObject, chosenDirection)) - { sprite->data[1] = 1; - } + return TRUE; } @@ -3093,9 +3093,8 @@ bool8 MovementType_WanderUpAndDown_Step4(struct EventObject *eventObject, struct SetEventObjectDirection(eventObject, direction); sprite->data[1] = 5; if (GetCollisionInDirection(eventObject, direction)) - { sprite->data[1] = 1; - } + return TRUE; } @@ -3163,9 +3162,8 @@ bool8 MovementType_WanderLeftAndRight_Step4(struct EventObject *eventObject, str SetEventObjectDirection(eventObject, direction); sprite->data[1] = 5; if (GetCollisionInDirection(eventObject, direction)) - { sprite->data[1] = 1; - } + return TRUE; } @@ -3952,7 +3950,7 @@ bool8 MovementType_WalkBackAndForth_Step1(struct EventObject *eventObject, struc bool8 MovementType_WalkBackAndForth_Step2(struct EventObject *eventObject, struct Sprite *sprite) { - bool8 collisionState; + bool8 collision; u8 movementActionId; if (eventObject->directionSequenceIndex && eventObject->initialCoords.x == eventObject->currentCoords.x && eventObject->initialCoords.y == eventObject->currentCoords.y) @@ -3960,19 +3958,19 @@ bool8 MovementType_WalkBackAndForth_Step2(struct EventObject *eventObject, struc eventObject->directionSequenceIndex = 0; SetEventObjectDirection(eventObject, GetOppositeDirection(eventObject->movementDirection)); } - collisionState = GetCollisionInDirection(eventObject, eventObject->movementDirection); + collision = GetCollisionInDirection(eventObject, eventObject->movementDirection); movementActionId = GetWalkNormalMovementAction(eventObject->movementDirection); - if (collisionState == TRUE) + if (collision == COLLISION_OUTSIDE_RANGE) { eventObject->directionSequenceIndex++; SetEventObjectDirection(eventObject, GetOppositeDirection(eventObject->movementDirection)); movementActionId = GetWalkNormalMovementAction(eventObject->movementDirection); - collisionState = GetCollisionInDirection(eventObject, eventObject->movementDirection); + collision = GetCollisionInDirection(eventObject, eventObject->movementDirection); } - if (collisionState) - { + + if (collision) movementActionId = GetWalkInPlaceNormalMovementAction(eventObject->facingDirection); - } + EventObjectSetSingleMovement(eventObject, sprite, movementActionId); eventObject->singleMovementActive = 1; sprite->data[1] = 3; @@ -3998,27 +3996,26 @@ bool8 MovementType_WalkSequence_Step0(struct EventObject *eventObject, struct Sp bool8 MoveNextDirectionInSequence(struct EventObject *eventObject, struct Sprite *sprite, u8 *route) { - u8 collisionState; + u8 collision; u8 movementActionId; if (eventObject->directionSequenceIndex == 3 && eventObject->initialCoords.x == eventObject->currentCoords.x && eventObject->initialCoords.y == eventObject->currentCoords.y) - { eventObject->directionSequenceIndex = 0; - } + SetEventObjectDirection(eventObject, route[eventObject->directionSequenceIndex]); movementActionId = GetWalkNormalMovementAction(eventObject->movementDirection); - collisionState = GetCollisionInDirection(eventObject, eventObject->movementDirection); - if (collisionState == TRUE) + collision = GetCollisionInDirection(eventObject, eventObject->movementDirection); + if (collision == COLLISION_OUTSIDE_RANGE) { eventObject->directionSequenceIndex++; SetEventObjectDirection(eventObject, route[eventObject->directionSequenceIndex]); movementActionId = GetWalkNormalMovementAction(eventObject->movementDirection); - collisionState = GetCollisionInDirection(eventObject, eventObject->movementDirection); + collision = GetCollisionInDirection(eventObject, eventObject->movementDirection); } - if (collisionState) - { + + if (collision) movementActionId = GetWalkInPlaceNormalMovementAction(eventObject->facingDirection); - } + EventObjectSetSingleMovement(eventObject, sprite, movementActionId); eventObject->singleMovementActive = 1; sprite->data[1] = 2; @@ -4868,22 +4865,20 @@ static u8 GetCollisionInDirection(struct EventObject *eventObject, u8 direction) return GetCollisionAtCoords(eventObject, x, y, direction); } -u8 GetCollisionAtCoords(struct EventObject *eventObject, s16 x, s16 y, u32 dirn) +u8 GetCollisionAtCoords(struct EventObject *eventObject, s16 x, s16 y, u32 dir) { - u8 direction; - - direction = dirn; + u8 direction = dir; if (IsCoordOutsideEventObjectMovementRange(eventObject, x, y)) - return 1; + return COLLISION_OUTSIDE_RANGE; else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(eventObject, x, y, direction)) - return 2; + return COLLISION_IMPASSABLE; else if (eventObject->trackedByCamera && !CanCameraMoveInDirection(direction)) - return 2; + return COLLISION_IMPASSABLE; else if (IsZCoordMismatchAt(eventObject->currentElevation, x, y)) - return 3; + return COLLISION_ELEVATION_MISMATCH; else if (DoesObjectCollideWithObjectAt(eventObject, x, y)) - return 4; - return 0; + return COLLISION_EVENT_OBJECT; + return COLLISION_NONE; } u8 GetCollisionFlagsAtCoords(struct EventObject *eventObject, s16 x, s16 y, u8 direction) @@ -6831,15 +6826,15 @@ bool8 MovementAction_ClearAffineAnim_Step0(struct EventObject *eventObject, stru return TRUE; } -bool8 MovementAction_Unknown1_Step0(struct EventObject *eventObject, struct Sprite *sprite) +bool8 MovementAction_HideReflection_Step0(struct EventObject *eventObject, struct Sprite *sprite) { - eventObject->unk3_3 = TRUE; + eventObject->hideReflection = TRUE; return TRUE; } -bool8 MovementAction_Unknown2_Step0(struct EventObject *eventObject, struct Sprite *sprite) +bool8 MovementAction_ShowReflection_Step0(struct EventObject *eventObject, struct Sprite *sprite) { - eventObject->unk3_3 = FALSE; + eventObject->hideReflection = FALSE; return TRUE; } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 96ca2ed1c..929539d30 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_message.h" #include "bg.h" @@ -406,7 +406,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) gMain.state++; break; case 2: - sub_807F19C(); + InitTradeBg(); gMain.state++; break; case 3: @@ -438,7 +438,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) gSprites[ID].callback = SpriteCallbackDummy_2; gSprites[ID].oam.paletteNum = 2; gMain.state++; - sub_807B154(); + LinkTradeDrawWindow(); } break; case 6: @@ -452,7 +452,7 @@ static void CB2_TradeEvolutionSceneLoadGraphics(void) break; case 7: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); - sub_807B140(); + InitTradeSequenceBgGpuRegs(); ShowBg(0); ShowBg(1); SetMainCallback2(CB2_TradeEvolutionSceneUpdate); @@ -743,12 +743,12 @@ static void Task_EvolutionScene(u8 taskID) GetMonData(mon, MON_DATA_NICKNAME, text); StringCopy10(gBattleTextBuff1, text); - if (var == 0xFFFF) // no place to learn it + if (var == MON_HAS_MAX_MOVES) gTasks[taskID].tState = 22; - else if (var == 0xFFFE) // it already knows that move + else if (var == MON_ALREADY_KNOWS_MOVE) break; else - gTasks[taskID].tState = 20; // has less than 4 moves, so it's been learned + gTasks[taskID].tState = 20; // move has been learned } else // no move to learn { @@ -909,8 +909,8 @@ static void Task_EvolutionScene(u8 taskID) case 6: if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate) { - var = sub_81C1B94(); // moveID - if (var == 4) + var = GetMoveSlotToReplace(); + if (var == MAX_MON_MOVES) { gTasks[taskID].tLearnMoveState = 10; } @@ -985,7 +985,7 @@ static void Task_TradeEvolutionScene(u8 taskID) { case 0: StringExpandPlaceholders(gStringVar4, gText_PkmnIsEvolving); - sub_807F1A8(0, gStringVar4, 1); + DrawTextOnTradeWindow(0, gStringVar4, 1); gTasks[taskID].tState++; break; case 1: @@ -1075,7 +1075,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (IsCryFinished()) { StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved); - sub_807F1A8(0, gStringVar4, 1); + DrawTextOnTradeWindow(0, gStringVar4, 1); PlayFanfare(MUS_FANFA5); gTasks[taskID].tState++; SetMonData(mon, MON_DATA_SPECIES, (&gTasks[taskID].tPostEvoSpecies)); @@ -1100,9 +1100,9 @@ static void Task_TradeEvolutionScene(u8 taskID) GetMonData(mon, MON_DATA_NICKNAME, text); StringCopy10(gBattleTextBuff1, text); - if (var == 0xFFFF) + if (var == MON_HAS_MAX_MOVES) gTasks[taskID].tState = 20; - else if (var == 0xFFFE) + else if (var == MON_ALREADY_KNOWS_MOVE) break; else gTasks[taskID].tState = 18; @@ -1110,7 +1110,7 @@ static void Task_TradeEvolutionScene(u8 taskID) else { PlayBGM(MUS_SHINKA); - sub_807F1A8(0, gText_CommunicationStandby5, 1); + DrawTextOnTradeWindow(0, gText_CommunicationStandby5, 1); gTasks[taskID].tState++; } } @@ -1144,7 +1144,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (EvoScene_IsMonAnimFinished(sEvoStructPtr->preEvoSpriteID)) { StringExpandPlaceholders(gStringVar4, gText_EllipsisQuestionMark); - sub_807F1A8(0, gStringVar4, 1); + DrawTextOnTradeWindow(0, gStringVar4, 1); gTasks[taskID].tEvoWasStopped = 1; gTasks[taskID].tState = 13; } @@ -1155,7 +1155,7 @@ static void Task_TradeEvolutionScene(u8 taskID) BufferMoveToLearnIntoBattleTextBuff2(); PlayFanfare(MUS_FANFA1); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNLEARNEDMOVE - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter gTasks[taskID].tState++; } @@ -1172,7 +1172,7 @@ static void Task_TradeEvolutionScene(u8 taskID) { BufferMoveToLearnIntoBattleTextBuff2(); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE1 - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tLearnMoveState++; } break; @@ -1180,7 +1180,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE2 - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tLearnMoveState++; } break; @@ -1188,7 +1188,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_TRYTOLEARNMOVE3 - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tData7 = 5; gTasks[taskID].tData8 = 9; gTasks[taskID].tLearnMoveState++; @@ -1197,7 +1197,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { LoadUserWindowBorderGfx(0, 0xA8, 0xE0); - CreateYesNoMenu(&gUnknown_0833900C, 0xA8, 0xE, 0); + CreateYesNoMenu(&gTradeEvolutionSceneYesNoWindowTemplate, 0xA8, 0xE, 0); sEvoCursorPos = 0; gTasks[taskID].tLearnMoveState++; sEvoCursorPos = 0; @@ -1209,7 +1209,7 @@ static void Task_TradeEvolutionScene(u8 taskID) case 0: sEvoCursorPos = 0; BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tLearnMoveState = gTasks[taskID].tData7; if (gTasks[taskID].tLearnMoveState == 5) BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); @@ -1218,7 +1218,7 @@ static void Task_TradeEvolutionScene(u8 taskID) case -1: sEvoCursorPos = 1; BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_EMPTYSTRING3 - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tLearnMoveState = gTasks[taskID].tData8; break; } @@ -1243,8 +1243,8 @@ static void Task_TradeEvolutionScene(u8 taskID) case 6: if (!gPaletteFade.active && gMain.callback2 == CB2_TradeEvolutionSceneUpdate) { - var = sub_81C1B94(); // moveID - if (var == 4) + var = GetMoveSlotToReplace(); + if (var == MAX_MON_MOVES) { gTasks[taskID].tLearnMoveState = 9; } @@ -1254,7 +1254,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (IsHMMove2(move)) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tLearnMoveState = 11; } else @@ -1264,7 +1264,7 @@ static void Task_TradeEvolutionScene(u8 taskID) RemoveMonPPBonus(mon, var); SetMonMoveSlot(mon, gMoveToLearn, var); BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_123POOF - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tLearnMoveState++; } } @@ -1274,7 +1274,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_PKMNFORGOTMOVE - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tLearnMoveState++; } break; @@ -1282,20 +1282,20 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!IsTextPrinterActive(0) && !IsSEPlaying()) { BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_ANDELLIPSIS - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tState = 18; } break; case 9: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_STOPLEARNINGMOVE - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tData7 = 10; gTasks[taskID].tData8 = 0; gTasks[taskID].tLearnMoveState = 3; break; case 10: BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_DIDNOTLEARNMOVE - BATTLESTRINGS_ID_ADDER]); - sub_807F1A8(0, gDisplayedStringBattle, 1); + DrawTextOnTradeWindow(0, gDisplayedStringBattle, 1); gTasks[taskID].tState = 13; break; case 11: diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 8a41087f5..bbd2ebda9 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -223,10 +223,10 @@ static bool8 TryStartInteractionScript(struct MapPosition *position, u16 metatil return FALSE; // Don't play interaction sound for certain scripts. - if (script != EventScript_PlayerPCMale - && script != EventScript_PlayerPCFemale - && script != EventScript_SecretBasePC - && script != EventScript_RecordMixingSecretBasePC + if (script != LittlerootTown_BrendansHouse_2F_EventScript_PC + && script != LittlerootTown_MaysHouse_2F_EventScript_PC + && script != SecretBase_EventScript_PC + && script != SecretBase_EventScript_RecordMixingPC && script != SecretBase_EventScript_DollInteract && script != SecretBase_EventScript_CushionInteract && script != EventScript_PC) @@ -355,7 +355,7 @@ static const u8 *GetInteractedBackgroundEventScript(struct MapPosition *position { gSpecialVar_0x8004 = bgEvent->bgUnion.secretBaseId; if (TrySetCurSecretBase()) - return EventScript_2759F1; + return SecretBase_EventScript_CheckEntrance; } return NULL; } @@ -412,13 +412,13 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me if (height == MapGridGetZCoordAt(position->x, position->y)) { if (MetatileBehavior_IsSecretBasePC(metatileBehavior) == TRUE) - return EventScript_SecretBasePC; + return SecretBase_EventScript_PC; if (MetatileBehavior_IsRecordMixingSecretBasePC(metatileBehavior) == TRUE) - return EventScript_RecordMixingSecretBasePC; + return SecretBase_EventScript_RecordMixingPC; if (MetatileBehavior_IsSecretBaseSandOrnament(metatileBehavior) == TRUE) - return EventScript_SecretBaseSandOrnament; + return SecretBase_EventScript_SandOrnament; if (MetatileBehavior_IsSecretBaseShieldOrToyTV(metatileBehavior) == TRUE) - return EventScript_SecretBaseShieldOrToyTV; + return SecretBase_EventScript_ShieldOrToyTV; if (MetatileBehavior_IsMB_C6(metatileBehavior) == TRUE) { SetSecretBaseSecretsTvFlags_MiscFurnature(); @@ -547,7 +547,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) { if (UpdatePoisonStepCounter() == TRUE) { - ScriptContext1_SetupScript(EventScript_Poison); + ScriptContext1_SetupScript(EventScript_FieldPoison); return TRUE; } if (ShouldEggHatch()) @@ -563,7 +563,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) } if (ShouldDoBrailleRegicePuzzle() == TRUE) { - ScriptContext1_SetupScript(IslandCave_EventScript_238EAF); + ScriptContext1_SetupScript(IslandCave_EventScript_OpenRegiEntrance); return TRUE; } if (ShouldDoWallyCall() == TRUE) @@ -583,12 +583,12 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior) } if (ShouldDoRoxanneCall() == TRUE) { - ScriptContext1_SetupScript(RustboroCity_Gym_EventScript_21307B); + ScriptContext1_SetupScript(RustboroCity_Gym_EventScript_RegisterRoxanne); return TRUE; } if (ShouldDoRivalRayquazaCall() == TRUE) { - ScriptContext1_SetupScript(MossdeepCity_SpaceCenter_2F_EventScript_224175); + ScriptContext1_SetupScript(MossdeepCity_SpaceCenter_2F_EventScript_RivalRayquazaCall); return TRUE; } } @@ -733,12 +733,12 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB } if (MetatileBehavior_IsMtPyreHole(metatileBehavior) == TRUE) { - ScriptContext1_SetupScript(gUnknown_082A8350); + ScriptContext1_SetupScript(EventScript_FallDownHoleMtPyre); return TRUE; } if (MetatileBehavior_IsMossdeepGymWarp(metatileBehavior) == TRUE) { - sub_80AF87C(); + DoMossdeepGymWarp(); return TRUE; } DoWarp(); diff --git a/src/field_effect.c b/src/field_effect.c index 7569bdc75..99abcdcb0 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -63,7 +63,7 @@ static void PokeballGlowEffect_7(struct Sprite *); static u8 PokecenterHealEffectHelper(s16, s16); static void HallOfFameRecordEffectHelper(s16, s16, s16, u8); -static void mapldr_080842E8(void); +static void FieldCallback_Fly(void); static void task00_8084310(u8); static void mapldr_08084390(void); static void c3_080843F8(u8); @@ -1364,13 +1364,13 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) } -void sub_80B69DC(void) +void ReturnToFieldFromFlyMapSelect(void) { SetMainCallback2(CB2_ReturnToField); - gFieldCallback = mapldr_080842E8; + gFieldCallback = FieldCallback_Fly; } -static void mapldr_080842E8(void) +static void FieldCallback_Fly(void) { pal_fill_black(); CreateTask(task00_8084310, 0); diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index fb883b105..8db58ad7a 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -143,7 +143,7 @@ static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) reflectionSprite->pos2.y = -mainSprite->pos2.y; reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled; - if (eventObject->unk3_3 == TRUE) + if (eventObject->hideReflection == TRUE) reflectionSprite->invisible = TRUE; // Check if the reflection is not still. diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 6d62cdc4a..229e5aedb 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -71,10 +71,10 @@ static void PlayerNotOnBikeMoving(u8, u16); static u8 CheckForPlayerAvatarCollision(u8); static u8 sub_808B028(u8); static u8 sub_808B164(struct EventObject *, s16, s16, u8, u8); -static bool8 sub_808B1BC(s16, s16, u8); +static bool8 CanStopSurfing(s16, s16, u8); static bool8 ShouldJumpLedge(s16, s16, u8); -static u8 sub_808B238(s16, s16, u8); -static void check_acro_bike_metatile(s16, s16, u8, u8 *); +static bool8 TryPushBoulder(s16, s16, u8); +static void CheckAcroBikeCollision(s16, s16, u8, u8 *); static void DoPlayerAvatarTransition(void); static void PlayerAvatarTransition_Dummy(struct EventObject *a); @@ -115,9 +115,9 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep1(struct Task *task, struct Event static bool8 PlayerAvatar_SecretBaseMatSpinStep2(struct Task *task, struct EventObject *eventObject); static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct EventObject *eventObject); -static void sub_808C750(u8); -static void taskFF_0805D1D4(u8 taskId); -static void sub_808C814(u8 taskId); +static void CreateStopSurfingTask(u8); +static void Task_StopSurfingInit(u8 taskId); +static void Task_WaitStopSurfing(u8 taskId); static void Task_Fishing(u8 taskId); static u8 Fishing1(struct Task *task); @@ -194,7 +194,7 @@ static void (*const gUnknown_08497490[])(u8, u16) = PlayerNotOnBikeMoving, }; -static bool8 (*const gUnknown_0849749C[])(u8) = +static bool8 (*const sAcroBikeTrickMetatiles[])(u8) = { MetatileBehavior_IsBumpySlope, MetatileBehavior_IsIsolatedVerticalRail, @@ -203,7 +203,13 @@ static bool8 (*const gUnknown_0849749C[])(u8) = MetatileBehavior_IsHorizontalRail, }; -static const u8 gUnknown_084974B0[] = {9, 10, 11, 12, 13, 0, 0, 0}; +static const u8 sAcroBikeTrickCollisionTypes[] = { + COLLISION_WHEELIE_HOP, + COLLISION_ISOLATED_VERTICAL_RAIL, + COLLISION_ISOLATED_HORIZONTAL_RAIL, + COLLISION_VERTICAL_RAIL, + COLLISION_HORIZONTAL_RAIL, +}; static void (*const gUnknown_084974B8[])(struct EventObject *) = { @@ -432,19 +438,19 @@ static bool8 ForcedMovement_None(void) static u8 DoForcedMovement(u8 direction, void (*b)(u8)) { struct PlayerAvatar *playerAvatar = &gPlayerAvatar; - u8 collisionType = CheckForPlayerAvatarCollision(direction); + u8 collision = CheckForPlayerAvatarCollision(direction); playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; - if (collisionType != 0) + if (collision) { ForcedMovement_None(); - if (collisionType <= 4) + if (collision < COLLISION_STOP_SURFING) { return 0; } else { - if (collisionType == COLLISION_LEDGE_JUMP) + if (collision == COLLISION_LEDGE_JUMP) PlayerJumpLedge(direction); playerAvatar->flags |= PLAYER_AVATAR_FLAG_6; playerAvatar->runningState = MOVING; @@ -605,33 +611,26 @@ static void PlayerNotOnBikeTurningInPlace(u8 direction, u16 heldKeys) static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) { - u8 r0 = CheckForPlayerAvatarCollision(direction); + u8 collision = CheckForPlayerAvatarCollision(direction); - if (r0 != 0) + if (collision) { - if (r0 == 6) + if (collision == COLLISION_LEDGE_JUMP) { PlayerJumpLedge(direction); return; } - else if (r0 == 4 && IsPlayerCollidingWithFarawayIslandMew(direction) != 0) + else if (collision == COLLISION_EVENT_OBJECT && IsPlayerCollidingWithFarawayIslandMew(direction)) { PlayerNotOnBikeCollideWithFarawayIslandMew(direction); return; } else { - u8 r4 = r0 - 5; - - if (r4 > 3) - { + u8 adjustedCollision = collision - COLLISION_STOP_SURFING; + if (adjustedCollision > 3) PlayerNotOnBikeCollide(direction); - return; - } - else - { - return; - } + return; } } @@ -677,50 +676,49 @@ static u8 sub_808B028(u8 direction) return sub_808B164(playerEventObj, x, y, direction, MapGridGetMetatileBehaviorAt(x, y)); } -u8 CheckForEventObjectCollision(struct EventObject *a, s16 x, s16 y, u8 direction, u8 e) +u8 CheckForEventObjectCollision(struct EventObject *eventObject, s16 x, s16 y, u8 direction, u8 metatileBehavior) { - u8 collision; + u8 collision = GetCollisionAtCoords(eventObject, x, y, direction); + if (collision == COLLISION_ELEVATION_MISMATCH && CanStopSurfing(x, y, direction)) + return COLLISION_STOP_SURFING; - collision = GetCollisionAtCoords(a, x, y, direction); - if (collision == 3 && sub_808B1BC(x, y, direction)) - return 5; if (ShouldJumpLedge(x, y, direction)) { IncrementGameStat(GAME_STAT_JUMPED_DOWN_LEDGES); return COLLISION_LEDGE_JUMP; } - if (collision == 4 && sub_808B238(x, y, direction)) - return 7; + if (collision == COLLISION_EVENT_OBJECT && TryPushBoulder(x, y, direction)) + return COLLISION_PUSHED_BOULDER; - if (collision == 0) + if (collision == COLLISION_NONE) { if (CheckForRotatingGatePuzzleCollision(direction, x, y)) - return 8; - check_acro_bike_metatile(x, y, e, &collision); + return COLLISION_ROTATING_GATE; + CheckAcroBikeCollision(x, y, metatileBehavior, &collision); } return collision; } -static u8 sub_808B164(struct EventObject *a, s16 x, s16 y, u8 direction, u8 e) +static u8 sub_808B164(struct EventObject *eventObject, s16 x, s16 y, u8 direction, u8 metatileBehavior) { - u8 collision = GetCollisionAtCoords(a, x, y, direction); + u8 collision = GetCollisionAtCoords(eventObject, x, y, direction); - if (collision == 0) + if (collision == COLLISION_NONE) { - if (CheckForRotatingGatePuzzleCollisionWithoutAnimation(direction, x, y) != 0) - return 8; - check_acro_bike_metatile(x, y, e, &collision); + if (CheckForRotatingGatePuzzleCollisionWithoutAnimation(direction, x, y)) + return COLLISION_ROTATING_GATE; + CheckAcroBikeCollision(x, y, metatileBehavior, &collision); } return collision; } -static bool8 sub_808B1BC(s16 x, s16 y, u8 direction) +static bool8 CanStopSurfing(s16 x, s16 y, u8 direction) { if ((gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) && MapGridGetZCoordAt(x, y) == 3 && GetEventObjectIdByXYZ(x, y, 3) == EVENT_OBJECTS_COUNT) { - sub_808C750(direction); + CreateStopSurfingTask(direction); return TRUE; } else @@ -737,7 +735,7 @@ static bool8 ShouldJumpLedge(s16 x, s16 y, u8 z) return FALSE; } -static u8 sub_808B238(s16 x, s16 y, u8 direction) +static bool8 TryPushBoulder(s16 x, s16 y, u8 direction) { if (FlagGet(FLAG_SYS_USE_STRENGTH)) { @@ -748,26 +746,26 @@ static u8 sub_808B238(s16 x, s16 y, u8 direction) x = gEventObjects[eventObjectId].currentCoords.x; y = gEventObjects[eventObjectId].currentCoords.y; MoveCoords(direction, &x, &y); - if (GetCollisionAtCoords(&gEventObjects[eventObjectId], x, y, direction) == 0 + if (GetCollisionAtCoords(&gEventObjects[eventObjectId], x, y, direction) == COLLISION_NONE && MetatileBehavior_IsNonAnimDoor(MapGridGetMetatileBehaviorAt(x, y)) == 0) { StartStrengthAnim(eventObjectId, direction); - return 1; + return TRUE; } } } - return 0; + return FALSE; } -static void check_acro_bike_metatile(s16 unused1, s16 unused2, u8 c, u8 *d) +static void CheckAcroBikeCollision(s16 x, s16 y, u8 metatileBehavior, u8 *collision) { u8 i; - for (i = 0; i < 5; i++) + for (i = 0; i < ARRAY_COUNT(sAcroBikeTrickMetatiles); i++) { - if (gUnknown_0849749C[i](c)) + if (sAcroBikeTrickMetatiles[i](metatileBehavior)) { - *d = gUnknown_084974B0[i]; + *collision = sAcroBikeTrickCollisionTypes[i]; return; } } @@ -1314,7 +1312,8 @@ bool8 IsPlayerFacingSurfableFishableWater(void) s16 y = playerEventObj->currentCoords.y; MoveCoords(playerEventObj->facingDirection, &x, &y); - if (GetCollisionAtCoords(playerEventObj, x, y, playerEventObj->facingDirection) == 3 && PlayerGetZCoord() == 3 + if (GetCollisionAtCoords(playerEventObj, x, y, playerEventObj->facingDirection) == COLLISION_ELEVATION_MISMATCH + && PlayerGetZCoord() == 3 && MetatileBehavior_IsSurfableFishableWater(MapGridGetMetatileBehaviorAt(x, y))) return TRUE; else @@ -1626,9 +1625,7 @@ static bool8 PlayerAvatar_SecretBaseMatSpinStep3(struct Task *task, struct Event return FALSE; } -/* Some Field effect */ - -static void sub_808C750(u8 a) +static void CreateStopSurfingTask(u8 direction) { u8 taskId; @@ -1638,12 +1635,12 @@ static void sub_808C750(u8 a) gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; gPlayerAvatar.preventStep = TRUE; - taskId = CreateTask(taskFF_0805D1D4, 0xFF); - gTasks[taskId].data[0] = a; - taskFF_0805D1D4(taskId); + taskId = CreateTask(Task_StopSurfingInit, 0xFF); + gTasks[taskId].data[0] = direction; + Task_StopSurfingInit(taskId); } -static void taskFF_0805D1D4(u8 taskId) +static void Task_StopSurfingInit(u8 taskId) { struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId]; @@ -1654,10 +1651,10 @@ static void taskFF_0805D1D4(u8 taskId) } sub_81555AC(playerEventObj->fieldEffectSpriteId, 2); EventObjectSetHeldMovement(playerEventObj, GetJumpSpecialMovementAction((u8)gTasks[taskId].data[0])); - gTasks[taskId].func = sub_808C814; + gTasks[taskId].func = Task_WaitStopSurfing; } -static void sub_808C814(u8 taskId) +static void Task_WaitStopSurfing(u8 taskId) { struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId]; diff --git a/src/field_poison.c b/src/field_poison.c index 532c7f027..8385966d4 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -14,6 +14,8 @@ #include "strings.h" #include "task.h" #include "trainer_hill.h" +#include "constants/field_poison.h" +#include "constants/party_menu.h" #include "constants/species.h" static bool32 IsMonValidSpecies(struct Pokemon *pokemon) @@ -55,14 +57,14 @@ static void FaintFromFieldPoison(u8 partyIdx) static bool32 MonFaintedFromPoison(u8 partyIdx) { struct Pokemon *pokemon = gPlayerParty + partyIdx; - if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) + if (IsMonValidSpecies(pokemon) && GetMonData(pokemon, MON_DATA_HP) == 0 && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) { return TRUE; } return FALSE; } -static void Task_WhiteOut(u8 taskId) +static void Task_TryFieldPoisonWhiteOut(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) @@ -89,18 +91,18 @@ static void Task_WhiteOut(u8 taskId) case 2: if (AllMonsFainted()) { - if (InBattlePyramid() | InBattlePike() || sub_81D5C18()) + if (InBattlePyramid() | InBattlePike() || InTrainerHillChallenge()) { - gSpecialVar_Result = 2; + gSpecialVar_Result = FLDPSN_FRONTIER_WHITEOUT; } else { - gSpecialVar_Result = 1; + gSpecialVar_Result = FLDPSN_WHITEOUT; } } else { - gSpecialVar_Result = 0; + gSpecialVar_Result = FLDPSN_NO_WHITEOUT; } EnableBothScriptContexts(); DestroyTask(taskId); @@ -108,9 +110,9 @@ static void Task_WhiteOut(u8 taskId) } } -void ExecuteWhiteOut(void) +void TryFieldPoisonWhiteOut(void) { - CreateTask(Task_WhiteOut, 80); + CreateTask(Task_TryFieldPoisonWhiteOut, 80); ScriptContext1_Stop(); } @@ -123,7 +125,7 @@ s32 DoPoisonFieldEffect(void) u32 numFainted = 0; for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && pokemon_ailments_get_primary(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) + if (GetMonData(pokemon, MON_DATA_SANITY_HAS_SPECIES) && GetAilmentFromStatus(GetMonData(pokemon, MON_DATA_STATUS)) == AILMENT_PSN) { hp = GetMonData(pokemon, MON_DATA_HP); if (hp == 0 || --hp == 0) diff --git a/src/field_region_map.c b/src/field_region_map.c index ac1b26154..184c49b40 100644 --- a/src/field_region_map.c +++ b/src/field_region_map.c @@ -3,7 +3,7 @@ #include "gpu_regs.h" #include "international_string_util.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "palette.h" #include "region_map.h" diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 9a5d47156..1edb775ba 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -34,7 +34,7 @@ #include "event_obj_lock.h" #include "fldeff.h" -extern const u16 gUnknown_82EC7CC[]; +extern const u16 gOrbEffectBackgroundLayerFlags[]; // This file's functions. static void sub_8080B9C(u8); @@ -48,7 +48,7 @@ static bool32 WaitForWeatherFadeIn(void); static void task0A_mpl_807E31C(u8 taskId); static void sub_80AFA0C(u8 taskId); static void sub_80AFA88(u8 taskId); -static void task50_0807F0C8(u8); +static void Task_EnableScriptAfterMusicFade(u8 taskId); // const const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 }; @@ -556,7 +556,7 @@ void sub_80AF848(void) gFieldCallback = sub_80AF3E8; } -void sub_80AF87C(void) +void DoMossdeepGymWarp(void) { sub_8085540(1); ScriptContext2_Enable(); @@ -638,7 +638,7 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId) } } -void sub_80AF9F8(void) +void ReturnFromLinkRoom(void) { CreateTask(Task_ReturnToWorldFromLinkRoom, 10); } @@ -800,7 +800,7 @@ static void SetFlashScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 c } } -static void SetFlash2ScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right) +static void SetOrbFlashScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right) { if (y <= 160) { @@ -816,17 +816,17 @@ static void SetFlash2ScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s3 } } -static void SetFlash2ScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 centerY, s32 radius) +static void SetOrbFlashScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 centerY, s32 radius) { s32 r = radius; s32 v2 = radius; s32 v3 = 0; while (r >= v3) { - SetFlash2ScanlineEffectWindowBoundary(dest, centerY - v3, centerX - r, centerX + r); - SetFlash2ScanlineEffectWindowBoundary(dest, centerY + v3, centerX - r, centerX + r); - SetFlash2ScanlineEffectWindowBoundary(dest, centerY - r, centerX - v3, centerX + v3); - SetFlash2ScanlineEffectWindowBoundary(dest, centerY + r, centerX - v3, centerX + v3); + SetOrbFlashScanlineEffectWindowBoundary(dest, centerY - v3, centerX - r, centerX + r); + SetOrbFlashScanlineEffectWindowBoundary(dest, centerY + v3, centerX - r, centerX + r); + SetOrbFlashScanlineEffectWindowBoundary(dest, centerY - r, centerX - v3, centerX + v3); + SetOrbFlashScanlineEffectWindowBoundary(dest, centerY + r, centerX - v3, centerX + v3); v2 -= (v3 * 2) - 1; v3++; if (v2 < 0) @@ -878,18 +878,18 @@ static void UpdateFlashLevelEffect(u8 taskId) } } -static void UpdateFlash2LevelEffect(u8 taskId) +static void UpdateOrbFlashEffect(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) { case 0: - SetFlash2ScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); + SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); data[0] = 1; break; case 1: - SetFlash2ScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); + SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius); data[0] = 0; tCurFlashRadius += tFlashRadiusDelta; if (tCurFlashRadius > tDestFlashRadius) @@ -948,7 +948,7 @@ static u8 sub_80AFFDC(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 dest static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta) { - u8 taskId = CreateTask(UpdateFlash2LevelEffect, 80); + u8 taskId = CreateTask(UpdateOrbFlashEffect, 80); s16 *data = gTasks[taskId].data; tCurFlashRadius = initialFlashRadius; @@ -970,7 +970,7 @@ static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 dest #undef tFlashRadiusDelta #undef tClearScanlineEffect -void sub_80B009C(u8 flashLevel) +void AnimateFlash(u8 flashLevel) { u8 curFlashLevel = Overworld_GetFlashLevel(); u8 value = 0; @@ -1063,12 +1063,12 @@ void sub_80B0268(void) CreateTask(sub_80B01BC, 10); } -static void sub_80B028C(u8 a1) +static void LoadOrbEffectPalette(bool8 blueOrb) { int i; u16 color[1]; - if (!a1) + if (!blueOrb) color[0] = RGB_RED; else color[0] = RGB_BLUE; @@ -1079,12 +1079,12 @@ static void sub_80B028C(u8 a1) } } -static bool8 sub_80B02C8(u16 a1) +static bool8 sub_80B02C8(u16 shakeDir) { u8 lo = REG_BLDALPHA & 0xFF; u8 hi = REG_BLDALPHA >> 8; - if (a1) + if (shakeDir != 0) { if (lo) { @@ -1107,58 +1107,69 @@ static bool8 sub_80B02C8(u16 a1) return FALSE; } -static void sub_80B0318(u8 taskId) +#define tState data[0] +#define tBlueOrb data[1] +#define tCenterX data[2] +#define tCenterY data[3] +#define tShakeDelay data[4] +#define tShakeDir data[5] +#define tDispCnt data[6] +#define tBldCnt data[7] +#define tBldAlpha data[8] +#define tWinIn data[9] +#define tWinOut data[10] + +static void Task_OrbEffect(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (data[0]) + switch (tState) { case 0: - data[6] = REG_DISPCNT; - data[7] = REG_BLDCNT; - data[8] = REG_BLDALPHA; - data[9] = REG_WININ; - data[10] = REG_WINOUT; + tDispCnt = REG_DISPCNT; + tBldCnt = REG_BLDCNT; + tBldAlpha = REG_BLDALPHA; + tWinIn = REG_WININ; + tWinOut = REG_WINOUT; ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON); - SetGpuRegBits(REG_OFFSET_BLDCNT, gUnknown_82EC7CC[0]); + SetGpuRegBits(REG_OFFSET_BLDCNT, gOrbEffectBackgroundLayerFlags[0]); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 7)); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); - sub_8199C30(0, 0, 0, 0x1E, 0x14, 0xF); + SetBgTilemapPalette(0, 0, 0, 0x1E, 0x14, 0xF); schedule_bg_copy_tilemap_to_vram(0); - SetFlash2ScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], data[2], data[3], 1); + SetOrbFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], tCenterX, tCenterY, 1); CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480); ScanlineEffect_SetParams(sFlashEffectParams); - data[0] = 1; + tState = 1; break; case 1: sub_8199DF0(0, PIXEL_FILL(1), 0, 1); - sub_80B028C(data[1]); - sub_80B003C(data[2], data[3], 1, 160, 1, 2); - data[0] = 2; + LoadOrbEffectPalette(tBlueOrb); + sub_80B003C(tCenterX, tCenterY, 1, 160, 1, 2); + tState = 2; break; case 2: - if (!FuncIsActiveTask(UpdateFlash2LevelEffect)) + if (!FuncIsActiveTask(UpdateOrbFlashEffect)) { EnableBothScriptContexts(); - data[0] = 3; + tState = 3; } break; case 3: InstallCameraPanAheadCallback(); SetCameraPanningCallback(NULL); - data[5] = 0; - data[4] = 4; - data[0] = 4; + tShakeDir = 0; + tShakeDelay = 4; + tState = 4; break; case 4: - data[4]--; - if (!data[4]) + if (--tShakeDelay == 0) { s32 panning; - data[4] = 4; - data[5] ^= 1; - if (data[5]) + tShakeDelay = 4; + tShakeDir ^= 1; + if (tShakeDir) panning = 4; else panning = -4; @@ -1167,77 +1178,88 @@ static void sub_80B0318(u8 taskId) break; case 6: InstallCameraPanAheadCallback(); - data[4] = 8; - data[0] = 7; + tShakeDelay = 8; + tState = 7; break; case 7: - data[4]--; - if (!data[4]) + if (--tShakeDelay == 0) { - data[4] = 8; - data[5] ^= 1; - if (sub_80B02C8(data[5]) == TRUE) + tShakeDelay = 8; + tShakeDir ^= 1; + if (sub_80B02C8(tShakeDir) == TRUE) { - data[0] = 5; + tState = 5; sub_8199DF0(0, PIXEL_FILL(0), 0, 1); } } break; case 5: SetGpuReg(REG_OFFSET_WIN0H, 255); - SetGpuReg(REG_OFFSET_DISPCNT, data[6]); - SetGpuReg(REG_OFFSET_BLDCNT, data[7]); - SetGpuReg(REG_OFFSET_BLDALPHA, data[8]); - SetGpuReg(REG_OFFSET_WININ, data[9]); - SetGpuReg(REG_OFFSET_WINOUT, data[10]); + SetGpuReg(REG_OFFSET_DISPCNT, tDispCnt); + SetGpuReg(REG_OFFSET_BLDCNT, tBldCnt); + SetGpuReg(REG_OFFSET_BLDALPHA, tBldAlpha); + SetGpuReg(REG_OFFSET_WININ, tWinIn); + SetGpuReg(REG_OFFSET_WINOUT, tWinOut); EnableBothScriptContexts(); DestroyTask(taskId); break; } } -void sub_80B0534(void) +void DoOrbEffect(void) { - u8 taskId = CreateTask(sub_80B0318, 80); + u8 taskId = CreateTask(Task_OrbEffect, 80); s16 *data = gTasks[taskId].data; if (gSpecialVar_Result == 0) { - data[1] = 0; - data[2] = 104; + tBlueOrb = FALSE; + tCenterX = 104; } else if (gSpecialVar_Result == 1) { - data[1] = 1; - data[2] = 136; + tBlueOrb = TRUE; + tCenterX = 136; } else if (gSpecialVar_Result == 2) { - data[1] = 0; - data[2] = 120; + tBlueOrb = FALSE; + tCenterX = 120; } else { - data[1] = 1; - data[2] = 120; + tBlueOrb = TRUE; + tCenterX = 120; } - data[3] = 80; + tCenterY = 80; } -void sub_80B058C(void) +void FadeOutOrbEffect(void) { - u8 taskId = FindTaskIdByFunc(sub_80B0318); - gTasks[taskId].data[0] = 6; + u8 taskId = FindTaskIdByFunc(Task_OrbEffect); + gTasks[taskId].tState = 6; } -void sub_80B05B4(void) +#undef tState +#undef tBlueOrb +#undef tCenterX +#undef tCenterY +#undef tShakeDelay +#undef tShakeDir +#undef tDispCnt +#undef tBldCnt +#undef tBldAlpha +#undef tWinIn +#undef tWinOut + +void Script_FadeOutMapMusic(void) { Overworld_FadeOutMapMusic(); - CreateTask(task50_0807F0C8, 80); + CreateTask(Task_EnableScriptAfterMusicFade, 80); } -static void task50_0807F0C8(u8 taskId) +static void Task_EnableScriptAfterMusicFade(u8 taskId) { if (BGMusicStopped() == TRUE) { diff --git a/src/field_special_scene.c b/src/field_special_scene.c index dbf68e1a2..231f4dd42 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -302,7 +302,7 @@ void Task_HandlePorthole(u8 taskId) } break; case EXIT_PORTHOLE: // exit porthole. - FlagClear(FLAG_SPECIAL_FLAG_0x4001); + FlagClear(FLAG_DONT_TRANSITION_MUSIC); FlagClear(FLAG_HIDE_MAP_NAME_POPUP); SetWarpDestinationToDynamicWarp(0); DoDiveWarp(); @@ -339,7 +339,7 @@ void sub_80FB768(void) void sub_80FB7A4(void) { FlagSet(FLAG_SYS_CRUISE_MODE); - FlagSet(FLAG_SPECIAL_FLAG_0x4001); + FlagSet(FLAG_DONT_TRANSITION_MUSIC); FlagSet(FLAG_HIDE_MAP_NAME_POPUP); SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); sub_80FB59C(); diff --git a/src/field_specials.c b/src/field_specials.c index f20e38c8b..7c323792a 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_tower.h" #include "cable_club.h" @@ -55,10 +55,12 @@ #include "constants/heal_locations.h" #include "constants/map_types.h" #include "constants/maps.h" +#include "constants/tv.h" #include "constants/script_menu.h" #include "constants/songs.h" #include "constants/species.h" #include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/vars.h" #include "constants/battle_frontier.h" #include "constants/weather.h" @@ -68,8 +70,8 @@ EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; EWRAM_DATA u8 gBikeCollisions = 0; static EWRAM_DATA u32 sBikeCyclingTimer = 0; -static EWRAM_DATA u8 sUnknown_0203AB5C = 0; -static EWRAM_DATA u8 sPetalburgGymSlidingDoorFrameCounter = 0; +static EWRAM_DATA u8 sSlidingDoorNextFrameCounter = 0; +static EWRAM_DATA u8 sSlidingDoorFrame = 0; static EWRAM_DATA u8 sTutorMoveAndElevatorWindowId = 0; static EWRAM_DATA u16 sLilycoveDeptStore_NeverRead = 0; static EWRAM_DATA u16 sLilycoveDeptStore_DefaultFloorChoice = 0; @@ -95,16 +97,16 @@ u16 GetNumMovedLilycoveFanClubMembers(void); static void RecordCyclingRoadResults(u32, u8); static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEventId, u8 paletteNum); -static void Task_PetalburgGym(u8); -static void PetalburgGymFunc(u8, u16); +static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId); +static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId); static void Task_PCTurnOnEffect(u8); static void PCTurnOnEffect_0(struct Task *); static void PCTurnOnEffect_1(s16, s8, s8); static void PCTurnOffEffect(void); static void Task_LotteryCornerComputerEffect(u8); static void LotteryCornerComputerEffect(struct Task *); -static void sub_81395BC(u8 taskId); -static void sub_8139620(u8 taskId); +static void Task_ShakeCamera(u8 taskId); +static void StopCameraShake(u8 taskId); static void Task_MoveElevator(u8 taskId); static void MoveElevatorWindowLights(u16 floorDelta, bool8 descending); static void Task_MoveElevatorWindowLights(u8 taskId); @@ -126,8 +128,8 @@ static void Task_DeoxysRockInteraction(u8 taskId); static void ChangeDeoxysRockLevel(u8 a0); static void WaitForDeoxysRockMovement(u8 taskId); static void sub_813B57C(u8 taskId); -static void sub_813B824(u8 taskId); -static void _fwalk(u8 taskId); +static void Task_LoopWingFlapSE(u8 taskId); +static void Task_CloseBattlePikeCurtain(u8 taskId); static u8 sub_813BF44(void); static void sub_813BD84(void); static u16 sub_813BB74(void); @@ -635,6 +637,7 @@ static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEvent } } +// NOTE: Coordinates are +7, +7 from actual in-map coordinates static const struct UCoords8 sMauvilleGymSwitchCoords[] = { { 7, 22}, @@ -643,26 +646,24 @@ static const struct UCoords8 sMauvilleGymSwitchCoords[] = {15, 16} }; -// Flips the switches on the ground when the player steps on them. -void MauvilleGymSpecial1(void) +// Presses the stepped-on switch and raises the rest +void MauvilleGymPressSwitch(void) { u8 i; for (i = 0; i < ARRAY_COUNT(sMauvilleGymSwitchCoords); i++) { if (i == gSpecialVar_0x8004) - { MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, PressedSwitch)); - } else - { MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, RaisedSwitch)); - } } } -void MauvilleGymSpecial2(void) +// Sets the gym barriers back to the default state; their alt state is handled by MauvilleCity_Gym_EventScript_SetAltBarriers +void MauvilleGymSetDefaultBarriers(void) { int x, y; + // All switches/barriers are within these coord ranges -7 for (y = 12; y < 24; y++) { for (x = 7; x < 16; x++) @@ -734,13 +735,9 @@ void MauvilleGymSpecial2(void) break; case METATILE_ID(MauvilleGym, FloorTile): if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_ID(MauvilleGym, GreenBeamV1_On)) - { MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV2_On) | METATILE_COLLISION_MASK); - } else - { MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV2_On) | METATILE_COLLISION_MASK); - } break; case METATILE_ID(MauvilleGym, PoleBottom_Off): MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV1_On) | METATILE_COLLISION_MASK); @@ -757,7 +754,7 @@ void MauvilleGymSpecial2(void) } // Presses all switches and deactivates all beams. -void MauvilleGymSpecial3(void) +void MauvilleGymDeactivatePuzzle(void) { int i, x, y; const struct UCoords8 *switchCoords = sMauvilleGymSwitchCoords; @@ -814,7 +811,7 @@ void MauvilleGymSpecial3(void) } } -static const u8 gUnknown_085B2B78[] = {0, 1, 1, 1, 1}; +static const bool8 sSlidingDoorNextFrameDelay[] = {0, 1, 1, 1, 1}; static const u16 sPetalburgGymSlidingDoorMetatiles[] = { METATILE_ID(PetalburgGym, SlidingDoor_Frame0), @@ -824,21 +821,21 @@ static const u16 sPetalburgGymSlidingDoorMetatiles[] = { METATILE_ID(PetalburgGym, SlidingDoor_Frame4), }; -void PetalburgGymSpecial1(void) +void PetalburgGymSlideOpenRoomDoors(void) { - sUnknown_0203AB5C = 0; - sPetalburgGymSlidingDoorFrameCounter = 0; + sSlidingDoorNextFrameCounter = 0; + sSlidingDoorFrame = 0; PlaySE(SE_KI_GASYAN); - CreateTask(Task_PetalburgGym, 8); + CreateTask(Task_PetalburgGymSlideOpenRoomDoors, 8); } -static void Task_PetalburgGym(u8 taskId) +static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId) { - if (gUnknown_085B2B78[sPetalburgGymSlidingDoorFrameCounter] == sUnknown_0203AB5C) + if (sSlidingDoorNextFrameDelay[sSlidingDoorFrame] == sSlidingDoorNextFrameCounter) { - PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sPetalburgGymSlidingDoorFrameCounter]); - sUnknown_0203AB5C = 0; - if ((++sPetalburgGymSlidingDoorFrameCounter) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles)) + PetalburgGymSetDoorMetatiles(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sSlidingDoorFrame]); + sSlidingDoorNextFrameCounter = 0; + if ((++sSlidingDoorFrame) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles)) { DestroyTask(taskId); EnableBothScriptContexts(); @@ -846,11 +843,11 @@ static void Task_PetalburgGym(u8 taskId) } else { - sUnknown_0203AB5C++; + sSlidingDoorNextFrameCounter++; } } -static void PetalburgGymFunc(u8 roomNumber, u16 metatileId) +static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId) { u16 doorCoordsX[4]; u16 doorCoordsY[4]; @@ -915,9 +912,9 @@ static void PetalburgGymFunc(u8 roomNumber, u16 metatileId) DrawWholeMapView(); } -void PetalburgGymSpecial2(void) +void PetalburgGymUnlockRoomDoors(void) { - PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[4]); + PetalburgGymSetDoorMetatiles(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[4]); } void ShowFieldMessageStringVar4(void) @@ -977,7 +974,7 @@ void CableCarWarp(void) } } -void SetFlagInVar(void) +void SetHiddenItemFlag(void) { FlagSet(gSpecialVar_0x8004); } @@ -1493,44 +1490,56 @@ bool8 IsPokerusInParty(void) return TRUE; } -void sub_8139560(void) +#define horizontalPan data[0] +#define delayCounter data[1] +#define numShakes data[2] +#define delay data[3] +#define verticalPan data[4] + +void ShakeCamera(void) { - u8 taskId = CreateTask(sub_81395BC, 9); - gTasks[taskId].data[0] = gSpecialVar_0x8005; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = gSpecialVar_0x8006; - gTasks[taskId].data[3] = gSpecialVar_0x8007; - gTasks[taskId].data[4] = gSpecialVar_0x8004; + u8 taskId = CreateTask(Task_ShakeCamera, 9); + gTasks[taskId].horizontalPan = gSpecialVar_0x8005; + gTasks[taskId].delayCounter = 0; + gTasks[taskId].numShakes = gSpecialVar_0x8006; + gTasks[taskId].delay = gSpecialVar_0x8007; + gTasks[taskId].verticalPan = gSpecialVar_0x8004; SetCameraPanningCallback(NULL); PlaySE(SE_W070); } -static void sub_81395BC(u8 taskId) +static void Task_ShakeCamera(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1]++; - if (data[1] % data[3] == 0) + delayCounter++; + if (delayCounter % delay == 0) { - data[1] = 0; - data[2]--; - data[0] = -data[0]; - data[4] = -data[4]; - SetCameraPanning(data[0], data[4]); - if (data[2] == 0) + delayCounter = 0; + numShakes--; + horizontalPan = -horizontalPan; + verticalPan = -verticalPan; + SetCameraPanning(horizontalPan, verticalPan); + if (numShakes == 0) { - sub_8139620(taskId); + StopCameraShake(taskId); InstallCameraPanAheadCallback(); } } } -static void sub_8139620(u8 taskId) +static void StopCameraShake(u8 taskId) { DestroyTask(taskId); EnableBothScriptContexts(); } +#undef horizontalPan +#undef delayCounter +#undef numShakes +#undef delay +#undef verticalPan + bool8 FoundBlackGlasses(void) { return FlagGet(FLAG_HIDDEN_ITEM_ROUTE_116_BLACK_GLASSES); @@ -1621,20 +1630,20 @@ void BufferLottoTicketNumber(void) else if (gSpecialVar_Result >= 1000) { gStringVar1[0] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 1, gSpecialVar_Result, 0, CountDigits(gSpecialVar_Result)); + ConvertIntToDecimalStringN(gStringVar1 + 1, gSpecialVar_Result, STR_CONV_MODE_LEFT_ALIGN, CountDigits(gSpecialVar_Result)); } else if (gSpecialVar_Result >= 100) { gStringVar1[0] = CHAR_0; gStringVar1[1] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 2, gSpecialVar_Result, 0, CountDigits(gSpecialVar_Result)); + ConvertIntToDecimalStringN(gStringVar1 + 2, gSpecialVar_Result, STR_CONV_MODE_LEFT_ALIGN, CountDigits(gSpecialVar_Result)); } else if (gSpecialVar_Result >= 10) { gStringVar1[0] = CHAR_0; gStringVar1[1] = CHAR_0; gStringVar1[2] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 3, gSpecialVar_Result, 0, CountDigits(gSpecialVar_Result)); + ConvertIntToDecimalStringN(gStringVar1 + 3, gSpecialVar_Result, STR_CONV_MODE_LEFT_ALIGN, CountDigits(gSpecialVar_Result)); } else { @@ -1642,7 +1651,7 @@ void BufferLottoTicketNumber(void) gStringVar1[1] = CHAR_0; gStringVar1[2] = CHAR_0; gStringVar1[3] = CHAR_0; - ConvertIntToDecimalStringN(gStringVar1 + 4, gSpecialVar_Result, 0, CountDigits(gSpecialVar_Result)); + ConvertIntToDecimalStringN(gStringVar1 + 4, gSpecialVar_Result, STR_CONV_MODE_LEFT_ALIGN, CountDigits(gSpecialVar_Result)); } } @@ -1699,7 +1708,7 @@ bool8 InMultiBattleRoom(void) return FALSE; } -void sub_8139980(void) +void OffsetCameraForBattle(void) { SetCameraPanningCallback(NULL); SetCameraPanning(8, 0); @@ -2050,7 +2059,7 @@ bool8 UsedPokemonCenterWarp(void) return FALSE; } -bool32 sub_8139ED0(void) +bool32 PlayerNotAtTrainerHillEntrance(void) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRAINER_HILL_ENTRANCE) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRAINER_HILL_ENTRANCE)) { @@ -3473,7 +3482,7 @@ void IncrementBirthIslandRockStepCount(void) } } -void sub_813B1D0(void) +void SetDeoxysRockPalette(void) { LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], 0x1A0, 8); BlendPalettes(0x04000000, 16, 0); @@ -3713,7 +3722,7 @@ u32 GetMartEmployeeObjectEventId(void) return 1; } -bool32 sub_813B4E0(void) +bool32 IsTrainerRegistered(void) { int index = GetRematchIdxByTrainerIdx(gSpecialVar_0x8004); if (index >= 0) @@ -3725,12 +3734,11 @@ bool32 sub_813B4E0(void) } // Always returns FALSE -bool32 sub_813B514(void) +bool32 ShouldDistributeEonTicket(void) { - if (!VarGet(VAR_ALWAYS_ZERO_0x403F)) - { + if (!VarGet(VAR_DISTRIBUTE_EON_TICKET)) return FALSE; - } + return TRUE; } @@ -3889,40 +3897,46 @@ void Script_DoRayquazaScene(void) } } -void sub_813B80C(void) +#define playCount data[0] +#define delay data[1] + +void LoopWingFlapSE(void) { - CreateTask(sub_813B824, 8); + CreateTask(Task_LoopWingFlapSE, 8); PlaySE(SE_W017); } -static void sub_813B824(u8 taskId) +static void Task_LoopWingFlapSE(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1]++; - if (data[1] == gSpecialVar_0x8005) + delay++; + if (delay == gSpecialVar_0x8005) { - data[0]++; - data[1] = 0; + playCount++; + delay = 0; PlaySE(SE_W017); } - if (data[0] == gSpecialVar_0x8004 - 1) + if (playCount == gSpecialVar_0x8004 - 1) { DestroyTask(taskId); } } -void sub_813B880(void) +#undef playCount +#undef delay + +void CloseBattlePikeCurtain(void) { - u8 taskId = CreateTask(_fwalk, 8); + u8 taskId = CreateTask(Task_CloseBattlePikeCurtain, 8); gTasks[taskId].data[0] = 4; gTasks[taskId].data[1] = 4; gTasks[taskId].data[2] = 4; gTasks[taskId].data[3] = 0; } -static void _fwalk(u8 taskId) +static void Task_CloseBattlePikeCurtain(u8 taskId) { u8 x, y; s16 *data = gTasks[taskId].data; @@ -3934,7 +3948,7 @@ static void _fwalk(u8 taskId) { for (x = 0; x < 3; x++) { - MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + x + 6, gSaveBlock1Ptr->pos.y + y + 4, x + 0x201 + y * 8 + data[3] * 32); + MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + x + 6, gSaveBlock1Ptr->pos.y + y + 4, x + 513 + y * 8 + data[3] * 32); } } DrawWholeMapView(); diff --git a/src/field_tasks.c b/src/field_tasks.c index 63539e475..21b2732c3 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -16,6 +16,7 @@ #include "secret_base.h" #include "sound.h" #include "task.h" +#include "constants/field_tasks.h" #include "constants/items.h" #include "constants/songs.h" #include "constants/vars.h" @@ -38,14 +39,14 @@ static void Task_MuddySlope(u8 taskId); static const TaskFunc sPerStepCallbacks[] = { - DummyPerStepCallback, - AshGrassPerStepCallback, - FortreeBridgePerStepCallback, - PacifidlogBridgePerStepCallback, - SootopolisGymIcePerStepCallback, - EndTruckSequence, - SecretBasePerStepCallback, - CrackedFloorPerStepCallback + [STEP_CB_DUMMY] = DummyPerStepCallback, + [STEP_CB_ASH] = AshGrassPerStepCallback, + [STEP_CB_FORTREE_BRIDGE] = FortreeBridgePerStepCallback, + [STEP_CB_PACIFIDLOG_BRIDGE] = PacifidlogBridgePerStepCallback, + [STEP_CB_SOOTOPOLIS_ICE] = SootopolisGymIcePerStepCallback, + [STEP_CB_TRUCK] = EndTruckSequence, + [STEP_CB_SECRET_BASE] = SecretBasePerStepCallback, + [STEP_CB_CRACKED_FLOOR] = CrackedFloorPerStepCallback }; // they are in pairs but declared as 1D array diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 8fca02707..7f955c10a 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -2325,7 +2325,7 @@ static const struct SpriteTemplate sBubbleSpriteTemplate = { .tileTag = 0x1205, .paletteTag = 0x1200, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = sBubbleSpriteAnimCmds, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/fight.c b/src/fight.c index 5230c2f39..0c4b5a3fa 100644 --- a/src/fight.c +++ b/src/fight.c @@ -42,7 +42,7 @@ const struct SpriteTemplate gUnknown_08595E14 = { .tileTag = ANIM_TAG_HUMANOID_FOOT, .paletteTag = ANIM_TAG_HUMANOID_FOOT, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -100,7 +100,7 @@ const struct SpriteTemplate gUnknown_08595E68 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595E54, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -111,7 +111,7 @@ const struct SpriteTemplate gUnknown_08595E80 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595E54, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -122,7 +122,7 @@ const struct SpriteTemplate gFistFootSpriteTemplate = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595E54, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -133,7 +133,7 @@ const struct SpriteTemplate gUnknown_08595EB0 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595E54, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -144,7 +144,7 @@ const struct SpriteTemplate gUnknown_08595EC8 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595E60, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -155,7 +155,7 @@ const struct SpriteTemplate gUnknown_08595EE0 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595E58, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -178,7 +178,7 @@ const struct SpriteTemplate gUnknown_08595F14 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_08595E54, .images = NULL, .affineAnims = gUnknown_08595F10, @@ -201,7 +201,7 @@ const struct SpriteTemplate gMegaPunchKickSpriteTemplate = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_08595E54, .images = NULL, .affineAnims = gUnknown_08595F44, @@ -212,7 +212,7 @@ const struct SpriteTemplate gUnknown_08595F60 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595E58, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -223,7 +223,7 @@ const struct SpriteTemplate gUnknown_08595F78 = { .tileTag = ANIM_TAG_DUCK, .paletteTag = ANIM_TAG_DUCK, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -234,7 +234,7 @@ const struct SpriteTemplate gUnknown_08595F90 = { .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -245,7 +245,7 @@ const struct SpriteTemplate gUnknown_08595FA8 = { .tileTag = ANIM_TAG_TORN_METAL, .paletteTag = ANIM_TAG_TORN_METAL, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -270,7 +270,7 @@ const struct SpriteTemplate gUnknown_08595FEC = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08595FE8, @@ -281,7 +281,7 @@ const struct SpriteTemplate gUnknown_08596004 = { .tileTag = ANIM_TAG_FLAT_ROCK, .paletteTag = ANIM_TAG_FLAT_ROCK, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -292,7 +292,7 @@ const struct SpriteTemplate gUnknown_0859601C = { .tileTag = ANIM_TAG_METEOR, .paletteTag = ANIM_TAG_METEOR, - .oam = &gUnknown_0852491C, + .oam = &gOamData_AffineOff_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -303,7 +303,7 @@ const struct SpriteTemplate gUnknown_08596034 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595E54, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -345,7 +345,7 @@ const struct SpriteTemplate gUnknown_08596088 = { .tileTag = ANIM_TAG_PURPLE_SCRATCH, .paletteTag = ANIM_TAG_PURPLE_SCRATCH, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_0859607C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -384,7 +384,7 @@ const struct SpriteTemplate gUnknown_085960D0 = { .tileTag = ANIM_TAG_PURPLE_SWIPE, .paletteTag = ANIM_TAG_PURPLE_SWIPE, - .oam = &gUnknown_0852491C, + .oam = &gOamData_AffineOff_ObjNormal_64x64, .anims = gUnknown_085960C4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -407,7 +407,7 @@ const struct SpriteTemplate gUnknown_08596104 = { .tileTag = ANIM_TAG_HANDS_AND_FEET, .paletteTag = ANIM_TAG_HANDS_AND_FEET, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_08595E54, .images = NULL, .affineAnims = gUnknown_08596100, @@ -433,7 +433,7 @@ void sub_810CE68(struct Sprite *sprite) StartSpriteAnim(sprite, gBattleAnimArgs[6]); gBattleAnimArgs[6] = 0; - sub_80A7938(sprite); + AnimSnoreZ(sprite); } void sub_810CEB4(struct Sprite *sprite) diff --git a/src/fire.c b/src/fire.c index fdbfb234e..2a12c26cc 100644 --- a/src/fire.c +++ b/src/fire.c @@ -65,7 +65,7 @@ const struct SpriteTemplate gUnknown_08595368 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595360, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -76,7 +76,7 @@ const struct SpriteTemplate gUnknown_08595380 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595360, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -132,7 +132,7 @@ const struct SpriteTemplate gUnknown_085953F8 = { .tileTag = ANIM_TAG_FIRE, .paletteTag = ANIM_TAG_FIRE, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_085953BC, .images = NULL, .affineAnims = gUnknown_085953F4, @@ -143,7 +143,7 @@ const struct SpriteTemplate gUnknown_08595410 = { .tileTag = ANIM_TAG_FIRE, .paletteTag = ANIM_TAG_FIRE, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085953BC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -154,7 +154,7 @@ const struct SpriteTemplate gUnknown_08595428 = { .tileTag = ANIM_TAG_FIRE_PLUME, .paletteTag = ANIM_TAG_FIRE_PLUME, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085953D8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -165,7 +165,7 @@ const struct SpriteTemplate gUnknown_08595440 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085953D8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -189,7 +189,7 @@ const struct SpriteTemplate gUnknown_0859546C = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595468, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -212,7 +212,7 @@ const struct SpriteTemplate gUnknown_085954A0 = { .tileTag = ANIM_TAG_SUNLIGHT, .paletteTag = ANIM_TAG_SUNLIGHT, - .oam = &gUnknown_08524A94, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_0859549C, @@ -238,7 +238,7 @@ const struct SpriteTemplate gEmberSpriteTemplate = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -249,7 +249,7 @@ const struct SpriteTemplate gEmberFlareSpriteTemplate = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085954D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -260,7 +260,7 @@ const struct SpriteTemplate gUnknown_08595504 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085954D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -271,7 +271,7 @@ const struct SpriteTemplate gUnknown_0859551C = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085954D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -312,7 +312,7 @@ const struct SpriteTemplate gUnknown_0859556C = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595540, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -323,7 +323,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8595584 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085954D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -334,7 +334,7 @@ const struct SpriteTemplate gUnknown_0859559C = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085954D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -345,7 +345,7 @@ const struct SpriteTemplate gUnknown_085955B4 = { .tileTag = ANIM_TAG_WARM_ROCK, .paletteTag = ANIM_TAG_WARM_ROCK, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -368,7 +368,7 @@ const struct SpriteTemplate gUnknown_085955E8 = { .tileTag = ANIM_TAG_WARM_ROCK, .paletteTag = ANIM_TAG_WARM_ROCK, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -414,7 +414,7 @@ const struct SpriteTemplate gUnknown_0859563C = { .tileTag = ANIM_TAG_WISP_ORB, .paletteTag = ANIM_TAG_WISP_ORB, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_0859562C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -439,7 +439,7 @@ const struct SpriteTemplate gUnknown_0859566C = { .tileTag = ANIM_TAG_WISP_FIRE, .paletteTag = ANIM_TAG_WISP_FIRE, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595668, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -622,7 +622,7 @@ static void AnimEmberFlare(struct Sprite *sprite) || gBattleAnimAttacker == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - sprite->callback = sub_80A7938; + sprite->callback = AnimSnoreZ; sprite->callback(sprite); } @@ -631,7 +631,7 @@ static void sub_8109200(struct Sprite *sprite) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - sprite->callback = sub_80A7938; + sprite->callback = AnimSnoreZ; } // Animates the a fire sprite in the first-half of the MOVE_FIRE_BLAST diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index 3115ff231..fe21ff060 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -7,7 +7,7 @@ #include "field_player_avatar.h" #include "fieldmap.h" #include "fldeff.h" -#include "alloc.h" +#include "malloc.h" #include "metatile_behavior.h" #include "overworld.h" #include "party_menu.h" @@ -25,7 +25,7 @@ extern struct MapPosition gPlayerFacingPosition; extern const u8 EventScript_FldEffCut[]; -extern const u8 FarawayIsland_Interior_EventScript_267EDB[]; +extern const u8 FarawayIsland_Interior_EventScript_HideMewWhenGrassCut[]; extern const u8 gFieldEffectPic_CutGrass[]; extern const u16 gFieldEffectObjectPalette6[]; @@ -584,7 +584,7 @@ static void CutGrassSpriteCallbackEnd(struct Sprite *sprite) ScriptContext2_Disable(); if (IsMewPlayingHideAndSeek() == TRUE) - ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_267EDB); + ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_HideMewWhenGrassCut); } void FixLongGrassMetatilesWindowTop(s16 x, s16 y) diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index a2457307b..fedf38cf5 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -26,8 +26,8 @@ struct FlashStruct }; // static functions -static void hm2_flash(void); -static void sub_81371B4(void); +static void FieldCallback_Flash(void); +static void FldEff_UseFlash(void); static bool8 sub_8137304(void); static void sub_81373F0(void); static void sub_8137404(u8 taskId); @@ -86,26 +86,26 @@ bool8 SetUpFieldMove_Flash(void) else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH)) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = hm2_flash; + gPostMenuFieldCallback = FieldCallback_Flash; return TRUE; } return FALSE; } -static void hm2_flash(void) +static void FieldCallback_Flash(void) { u8 taskId = oei_task_add(); gFieldEffectArguments[0] = GetCursorSelectionMonId(); - gTasks[taskId].data[8] = (uintptr_t)sub_81371B4 >> 16; - gTasks[taskId].data[9] = (uintptr_t)sub_81371B4; + gTasks[taskId].data[8] = (uintptr_t)FldEff_UseFlash >> 16; + gTasks[taskId].data[9] = (uintptr_t)FldEff_UseFlash; } -static void sub_81371B4(void) +static void FldEff_UseFlash(void) { PlaySE(SE_W115); FlagSet(FLAG_SYS_USE_FLASH); - ScriptContext1_SetupScript(EventScript_2926F8); + ScriptContext1_SetupScript(EventScript_FldEffFlash); } static void sub_81371D4(void) diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index c68a95d41..591f61eb7 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -583,7 +583,7 @@ bool8 SetUpFieldMove_SecretPower(void) static void FieldCallback_SecretBaseCave(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_275A86); + ScriptContext1_SetupScript(SecretBase_EventScript_CaveUseSecretPower); } bool8 FldEff_UseSecretPowerCave(void) @@ -643,7 +643,7 @@ static void CaveEntranceSpriteCallbackEnd(struct Sprite *sprite) static void FieldCallback_SecretBaseTree(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_275ADF); + ScriptContext1_SetupScript(SecretBase_EventScript_TreeUseSecretPower); } bool8 FldEff_UseSecretPowerTree(void) @@ -717,7 +717,7 @@ static void TreeEntranceSpriteCallbackEnd(struct Sprite *sprite) static void FieldCallback_SecretBaseShrub(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); - ScriptContext1_SetupScript(EventScript_275B38); + ScriptContext1_SetupScript(SecretBase_EventScript_ShrubUseSecretPower); } bool8 FldEff_UseSecretPowerShrub(void) diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index c18602c68..1a42b297d 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -7,12 +7,13 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "constants/party_menu.h" #include "constants/songs.h" -static void sub_816166C(u8 taskId); -static void sub_81616C0(u8 taskId); -static void sub_8161724(u8 taskId); -static void sub_81617B8(u8 taskId); +static void Task_SoftboiledRestoreHealth(u8 taskId); +static void Task_DisplayHPRestoredMessage(u8 taskId); +static void Task_FinishSoftboiled(u8 taskId); +static void CantUseSoftboiledOnMon(u8 taskId); bool8 SetUpFieldMove_SoftBoiled(void) { @@ -29,81 +30,82 @@ bool8 SetUpFieldMove_SoftBoiled(void) return FALSE; } -void sub_8161560(u8 taskId) +void ChooseMonForSoftboiled(u8 taskId) { - gUnknown_0203CEC8.unkB = 0xA; - gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.slotId; - sub_81B0FCC(GetCursorSelectionMonId(), 0x1); - display_pokemon_menu_message(0x5); - gTasks[taskId].func = sub_81B1370; + gPartyMenu.action = PARTY_ACTION_SOFTBOILED; + gPartyMenu.slotId2 = gPartyMenu.slotId; + AnimatePartySlot(GetCursorSelectionMonId(), 1); + DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; } -void sub_81615A8(u8 taskId) +void Task_TryUseSoftboiledOnPartyMon(u8 taskId) { u16 hp; - u8 slotId = gUnknown_0203CEC8.slotId; - u8 pokemonIndex = gUnknown_0203CEC8.unkA; - if(pokemonIndex > 6) + u8 userPartyId = gPartyMenu.slotId; + u8 recipientPartyId = gPartyMenu.slotId2; + if(recipientPartyId > PARTY_SIZE) { - gUnknown_0203CEC8.unkB = 0; - display_pokemon_menu_message(0x0); - gTasks[taskId].func = sub_81B1370; + gPartyMenu.action = 0; + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; return; } - hp = GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_HP); - if(hp == 0 || slotId == pokemonIndex || GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_MAX_HP) == hp) + hp = GetMonData(&gPlayerParty[recipientPartyId], MON_DATA_HP); + if(hp == 0 || userPartyId == recipientPartyId || GetMonData(&gPlayerParty[recipientPartyId], MON_DATA_MAX_HP) == hp) { - sub_81617B8(taskId); + CantUseSoftboiledOnMon(taskId); return; } + // Take away Softboiled user's health first (-1) PlaySE(SE_KAIFUKU); - sub_81B1F18(taskId, slotId, -1, GetMonData(&gPlayerParty[slotId], MON_DATA_MAX_HP)/5, sub_816166C); + PartyMenuModifyHP(taskId, userPartyId, -1, GetMonData(&gPlayerParty[userPartyId], MON_DATA_MAX_HP)/5, Task_SoftboiledRestoreHealth); } -static void sub_816166C(u8 taskId) +static void Task_SoftboiledRestoreHealth(u8 taskId) { PlaySE(SE_KAIFUKU); - sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAX_HP)/5, sub_81616C0); + PartyMenuModifyHP(taskId, gPartyMenu.slotId2, 1, GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAX_HP)/5, Task_DisplayHPRestoredMessage); } -static void sub_81616C0(u8 taskId) +static void Task_DisplayHPRestoredMessage(u8 taskId) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unkA], gStringVar1); + GetMonNickname(&gPlayerParty[gPartyMenu.slotId2], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2); - sub_81B1B5C(gStringVar4, 0); + DisplayPartyMenuMessage(gStringVar4, FALSE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_8161724; + gTasks[taskId].func = Task_FinishSoftboiled; } -static void sub_8161724(u8 taskId) +static void Task_FinishSoftboiled(u8 taskId) { - if(sub_81B1BD4() == 1) + if(IsPartyMenuTextPrinterActive() == TRUE) return; - gUnknown_0203CEC8.unkB = 0x0; - sub_81B0FCC(gUnknown_0203CEC8.slotId, 0); - gUnknown_0203CEC8.slotId = gUnknown_0203CEC8.unkA; - sub_81B0FCC(gUnknown_0203CEC8.unkA, 1); - ClearStdWindowAndFrameToTransparent(0x6, FALSE); - ClearWindowTilemap(0x6); - display_pokemon_menu_message(0); - gTasks[taskId].func = sub_81B1370; + gPartyMenu.action = 0; + AnimatePartySlot(gPartyMenu.slotId, 0); + gPartyMenu.slotId = gPartyMenu.slotId2; + AnimatePartySlot(gPartyMenu.slotId2, 1); + ClearStdWindowAndFrameToTransparent(6, FALSE); + ClearWindowTilemap(6); + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; } -static void sub_8161784(u8 taskId) +static void Task_ChooseNewMonForSoftboiled(u8 taskId) { - if(sub_81B1BD4() == 1) + if(IsPartyMenuTextPrinterActive() == TRUE) return; - display_pokemon_menu_message(0x5); - gTasks[taskId].func = sub_81B1370; + DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; } -static void sub_81617B8(u8 taskId) +static void CantUseSoftboiledOnMon(u8 taskId) { PlaySE(SE_SELECT); - sub_81B1B5C(gText_CantBeUsedOnPkmn, 0); + DisplayPartyMenuMessage(gText_CantBeUsedOnPkmn, FALSE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_8161784; + gTasks[taskId].func = Task_ChooseNewMonForSoftboiled; } diff --git a/src/flying.c b/src/flying.c index 3d04a543c..43682ee42 100644 --- a/src/flying.c +++ b/src/flying.c @@ -42,7 +42,7 @@ const struct SpriteTemplate gUnknown_08596270 = { .tileTag = ANIM_TAG_GUST, .paletteTag = ANIM_TAG_GUST, - .oam = &gUnknown_0852495C, + .oam = &gOamData_AffineOff_ObjNormal_32x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -65,7 +65,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85962A4 = { .tileTag = ANIM_TAG_GUST, .paletteTag = ANIM_TAG_GUST, - .oam = &gUnknown_085249BC, + .oam = &gOamData_AffineNormal_ObjNormal_32x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_085962A0, @@ -90,7 +90,7 @@ const struct SpriteTemplate gUnknown_085962D4 = { .tileTag = ANIM_TAG_AIR_WAVE_2, .paletteTag = ANIM_TAG_AIR_WAVE_2, - .oam = &gUnknown_08524934, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gUnknown_085962D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -133,7 +133,7 @@ const struct SpriteTemplate gUnknown_08596340 = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596314, @@ -144,7 +144,7 @@ const struct SpriteTemplate gUnknown_08596358 = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gUnknown_0852497C, + .oam = &gOamData_AffineNormal_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596338, @@ -173,7 +173,7 @@ const struct SpriteTemplate gUnknown_08596388 = { .tileTag = ANIM_TAG_WHITE_FEATHER, .paletteTag = ANIM_TAG_WHITE_FEATHER, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_08596380, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -184,7 +184,7 @@ const struct SpriteTemplate gUnknown_085963A0 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -210,7 +210,7 @@ const struct SpriteTemplate gUnknown_085963D4 = { .tileTag = ANIM_TAG_WHIRLWIND_LINES, .paletteTag = ANIM_TAG_WHIRLWIND_LINES, - .oam = &gUnknown_08524934, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gUnknown_085963D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -236,7 +236,7 @@ const struct SpriteTemplate gUnknown_08596420 = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_0859641C, @@ -258,7 +258,7 @@ const struct SpriteTemplate gUnknown_0859644C = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596448, @@ -283,7 +283,7 @@ const struct SpriteTemplate gUnknown_08596490 = { .tileTag = ANIM_TAG_ROUND_SHADOW, .paletteTag = ANIM_TAG_ROUND_SHADOW, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_0859648C, @@ -307,7 +307,7 @@ const struct SpriteTemplate gUnknown_085964CC = { .tileTag = ANIM_TAG_SPLASH, .paletteTag = ANIM_TAG_SPLASH, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -318,7 +318,7 @@ const struct SpriteTemplate gUnknown_085964E4 = { .tileTag = ANIM_TAG_SWEAT_BEAD, .paletteTag = ANIM_TAG_SWEAT_BEAD, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -329,7 +329,7 @@ const struct SpriteTemplate gUnknown_085964FC = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -340,7 +340,7 @@ const struct SpriteTemplate gUnknown_08596514 = { .tileTag = ANIM_TAG_BIRD, .paletteTag = ANIM_TAG_BIRD, - .oam = &gUnknown_085249DC, + .oam = &gOamData_AffineDouble_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -550,12 +550,12 @@ void sub_810E2C8(struct Sprite *sprite) struct FeatherDanceData { - u8 unk0_0a:1; - u8 unk0_0b:1; - u8 unk0_0c:1; - u8 unk0_0d:1; - u8 unk0_1:4; - u8 unk1; + u16 unk0_0a:1; + u16 unk0_0b:1; + u16 unk0_0c:1; + u16 unk0_0d:1; + u16 unk0_1:4; + u16 unk1:8; u16 unk2; s16 unk4; u16 unk6; @@ -652,20 +652,11 @@ void sub_810E314(struct Sprite *sprite) sprite->callback = sub_810E520; } -#ifdef NONMATCHING -/* -Things I can't get to match: -1. data->unk0_1 bitfield behaviour. The way bits are read is different. -2. sprite->oam.priority--; sprite->oam.priority++; Nonmatching version tail-merges these, original does not. -3. sprite->pos2.x = (gSineTable[data->unk2] * var) >> 8; data->unk2 is very weirdly read at seemingly random moments inside the switch. -4. sinVal r6/r7 mismatch. -*/ void sub_810E520(struct Sprite *sprite) { - u8 matrixNum, sinIndex, var; + u8 matrixNum, sinIndex; s16 sinVal = 0; struct FeatherDanceData *data = (struct FeatherDanceData *)sprite->data; - if (data->unk0_0a) { if (data->unk1-- % 256 == 0) @@ -676,56 +667,69 @@ void sub_810E520(struct Sprite *sprite) } else { - switch (data->unk2 >> 6) + switch (data->unk2 / 64) { - case 0: - if (data->unk0_1 == 1) + case 0: + if (data->unk0_1 << 24 >> 24 == 1) // the shifts have to be here { data->unk0_0d = 1; data->unk0_0a = 1; data->unk1 = 0; } - else if (data->unk0_1 == 3) + else if (data->unk0_1 << 24 >> 24 == 3) { data->unk0_0b ^= 1; + data->unk0_0a = 1; data->unk1 = 0; } else if (data->unk0_0d) { sprite->hFlip ^= 1; sprite->animNum = sprite->hFlip; - sprite->animBeginning = 1; - sprite->animEnded = 0; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; if (data->unk0_0c) { if (!IsContest()) { if (!data->unkE_0) + { sprite->oam.priority--; + data->unkE_0 ^= 1; + } else + { sprite->oam.priority++; + data->unkE_0 ^= 1; + } } else { if (!data->unkE_0) + { sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } else + { sprite->subpriority += 12; + data->unkE_0 ^= 1; + } } - data->unkE_0 ^= 1; } data->unk0_0d = 0; + data->unk2; } data->unk0_1 = 0; break; case 1: - if (data->unk0_1 == 0) + if (data->unk0_1 << 24 >> 24 == 0) { data->unk0_0d = 1; data->unk0_0a = 1; data->unk1 = 0; } - else if (data->unk0_1 == 2) + else if (data->unk0_1 << 24 >> 24 == 2) { data->unk0_0a = 1; data->unk1 = 0; @@ -734,38 +738,49 @@ void sub_810E520(struct Sprite *sprite) { sprite->hFlip ^= 1; sprite->animNum = sprite->hFlip; - sprite->animBeginning = 1; - sprite->animEnded = 0; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; if (data->unk0_0c) { if (!IsContest()) { if (!data->unkE_0) + { sprite->oam.priority--; + data->unkE_0 ^= 1; + } else + { sprite->oam.priority++; + data->unkE_0 ^= 1; + } } else { if (!data->unkE_0) + { sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } else + { sprite->subpriority += 12; + data->unkE_0 ^= 1; + } } - data->unkE_0 ^= 1; } data->unk0_0d = 0; } data->unk0_1 = 1; break; case 2: - if (data->unk0_1 == 0) + if (data->unk0_1 << 24 >> 24 == 3) { data->unk0_0d = 1; data->unk0_0a = 1; data->unk1 = 0; } - else if (data->unk0_1 == 2) + else if (data->unk0_1 << 24 >> 24 == 1) { data->unk0_0a = 1; data->unk1 = 0; @@ -774,72 +789,96 @@ void sub_810E520(struct Sprite *sprite) { sprite->hFlip ^= 1; sprite->animNum = sprite->hFlip; - sprite->animBeginning = 1; - sprite->animEnded = 0; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; if (data->unk0_0c) { if (!IsContest()) { if (!data->unkE_0) + { sprite->oam.priority--; + data->unkE_0 ^= 1; + } else + { sprite->oam.priority++; + data->unkE_0 ^= 1; + } } else { if (!data->unkE_0) + { sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } else + { sprite->subpriority += 12; + data->unkE_0 ^= 1; + } } - data->unkE_0 ^= 1; } data->unk0_0d = 0; } data->unk0_1 = 2; break; case 3: - if (data->unk0_1 == 2) + if (data->unk0_1 << 24 >> 24 == 2) { data->unk0_0d = 1; } - else if (data->unk0_1 == 0) + else if (data->unk0_1 << 24 >> 24 == 0) { data->unk0_0b ^= 1; + data->unk0_0a = 1; data->unk1 = 0; } else if (data->unk0_0d) { sprite->hFlip ^= 1; sprite->animNum = sprite->hFlip; - sprite->animBeginning = 1; - sprite->animEnded = 0; + sprite->animBeginning = TRUE; + sprite->animEnded = FALSE; if (data->unk0_0c) { if (!IsContest()) { if (!data->unkE_0) + { sprite->oam.priority--; + data->unkE_0 ^= 1; + } else + { sprite->oam.priority++; + data->unkE_0 ^= 1; + } } else { if (!data->unkE_0) + { sprite->subpriority -= 12; + data->unkE_0 ^= 1; + } else + { sprite->subpriority += 12; + data->unkE_0 ^= 1; + } } - data->unkE_0 ^= 1; } data->unk0_0d = 0; } data->unk0_1 = 3; break; } - - var = data->unkC[data->unk0_0b]; - sprite->pos2.x = (gSineTable[data->unk2] * var) >> 8; + #ifndef NONMATCHING + asm("":::"r8"); + #endif + sprite->pos2.x = (data->unkC[data->unk0_0b] * gSineTable[data->unk2]) >> 8; matrixNum = sprite->oam.matrixNum; sinIndex = (-sprite->pos2.x >> 1) + data->unkA; @@ -856,723 +895,13 @@ void sub_810E520(struct Sprite *sprite) else data->unk2 = (data->unk2 + (data->unk4 & 0x7FFF)) & 0xFF; - if (sprite->pos1.y + sprite->pos2.y > data->unkE_1) + if (sprite->pos1.y + sprite->pos2.y >= data->unkE_1) { sprite->data[0] = 0; sprite->callback = sub_810E2C8; } } } -#else -NAKED -void sub_810E520(struct Sprite *sprite) -{ - asm_unified("push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - adds r5, r0, 0\n\ - movs r6, 0\n\ - adds r4, r5, 0\n\ - adds r4, 0x2E\n\ - ldrb r2, [r4]\n\ - movs r7, 0x1\n\ - movs r0, 0x1\n\ - mov r9, r0\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _0810E55A\n\ - ldrb r0, [r4, 0x1]\n\ - adds r1, r0, 0\n\ - adds r1, 0xFF\n\ - strb r1, [r4, 0x1]\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0810E54E\n\ - b _0810EA36\n\ -_0810E54E:\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - ands r0, r2\n\ - strb r0, [r4]\n\ - strb r6, [r4, 0x1]\n\ - b _0810EA36\n\ -_0810E55A:\n\ - ldrh r0, [r4, 0x2]\n\ - lsrs r1, r0, 6\n\ - mov r12, r0\n\ - cmp r1, 0x1\n\ - bne _0810E566\n\ - b _0810E68A\n\ -_0810E566:\n\ - cmp r1, 0x1\n\ - bgt _0810E570\n\ - cmp r1, 0\n\ - beq _0810E57E\n\ - b _0810E97C\n\ -_0810E570:\n\ - cmp r1, 0x2\n\ - bne _0810E576\n\ - b _0810E77E\n\ -_0810E576:\n\ - cmp r1, 0x3\n\ - bne _0810E57C\n\ - b _0810E872\n\ -_0810E57C:\n\ - b _0810E97C\n\ -_0810E57E:\n\ - lsls r1, r2, 24\n\ - lsrs r0, r1, 28\n\ - cmp r0, 0x1\n\ - bne _0810E592\n\ - movs r0, 0x8\n\ - orrs r0, r2\n\ - orrs r0, r7\n\ - strb r0, [r4]\n\ - strb r6, [r4, 0x1]\n\ - b _0810E680\n\ -_0810E592:\n\ - lsrs r0, r1, 28\n\ - cmp r0, 0x3\n\ - bne _0810E5B4\n\ - lsls r0, r2, 30\n\ - lsrs r0, 31\n\ - movs r1, 0x1\n\ - eors r0, r1\n\ - ands r0, r7\n\ - lsls r0, 1\n\ - movs r1, 0x3\n\ - negs r1, r1\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - orrs r1, r7\n\ - strb r1, [r4]\n\ - strb r6, [r4, 0x1]\n\ - b _0810E680\n\ -_0810E5B4:\n\ - movs r0, 0x8\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _0810E680\n\ - adds r3, r5, 0\n\ - adds r3, 0x3F\n\ - ldrb r2, [r3]\n\ - lsls r1, r2, 31\n\ - lsrs r1, 31\n\ - movs r6, 0x1\n\ - eors r1, r6\n\ - ands r1, r7\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - mov r8, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - lsls r0, 31\n\ - lsrs r0, 31\n\ - adds r1, r5, 0\n\ - adds r1, 0x2A\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - movs r1, 0x11\n\ - negs r1, r1\n\ - ands r0, r1\n\ - strb r0, [r3]\n\ - ldrb r1, [r4]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0810E672\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0810E642\n\ - ldrb r1, [r4, 0xE]\n\ - mov r0, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0810E628\n\ - ldrb r2, [r5, 0x5]\n\ - lsls r1, r2, 28\n\ - lsrs r1, 30\n\ - subs r1, 0x1\n\ - movs r0, 0x3\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x5]\n\ - b _0810E660\n\ -_0810E628:\n\ - ldrb r2, [r5, 0x5]\n\ - lsls r1, r2, 28\n\ - lsrs r1, 30\n\ - adds r1, 0x1\n\ - movs r0, 0x3\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x5]\n\ - b _0810E660\n\ -_0810E642:\n\ - ldrb r1, [r4, 0xE]\n\ - mov r0, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0810E656\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - ldrb r0, [r1]\n\ - subs r0, 0xC\n\ - b _0810E65E\n\ -_0810E656:\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - ldrb r0, [r1]\n\ - adds r0, 0xC\n\ -_0810E65E:\n\ - strb r0, [r1]\n\ -_0810E660:\n\ - ldrb r2, [r4, 0xE]\n\ - lsls r0, r2, 31\n\ - lsrs r0, 31\n\ - eors r0, r6\n\ - ands r0, r7\n\ - mov r1, r8\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - strb r1, [r4, 0xE]\n\ -_0810E672:\n\ - ldrb r1, [r4]\n\ - movs r0, 0x9\n\ - negs r0, r0\n\ - ands r0, r1\n\ - strb r0, [r4]\n\ - ldrh r1, [r4, 0x2]\n\ - mov r12, r1\n\ -_0810E680:\n\ - ldrb r1, [r4]\n\ - movs r0, 0xF\n\ - ands r0, r1\n\ - strb r0, [r4]\n\ - b _0810E97C\n\ -_0810E68A:\n\ - lsls r1, r2, 24\n\ - lsrs r0, r1, 28\n\ - cmp r0, 0\n\ - bne _0810E698\n\ - movs r0, 0x8\n\ - orrs r0, r2\n\ - b _0810E6A0\n\ -_0810E698:\n\ - lsrs r0, r1, 28\n\ - cmp r0, 0x2\n\ - bne _0810E6A8\n\ - adds r0, r2, 0\n\ -_0810E6A0:\n\ - orrs r0, r7\n\ - strb r0, [r4]\n\ - strb r6, [r4, 0x1]\n\ - b _0810E774\n\ -_0810E6A8:\n\ - movs r0, 0x8\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _0810E774\n\ - adds r3, r5, 0\n\ - adds r3, 0x3F\n\ - ldrb r2, [r3]\n\ - lsls r1, r2, 31\n\ - lsrs r1, 31\n\ - movs r6, 0x1\n\ - eors r1, r6\n\ - ands r1, r7\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - mov r8, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - lsls r0, 31\n\ - lsrs r0, 31\n\ - adds r1, r5, 0\n\ - adds r1, 0x2A\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - movs r1, 0x11\n\ - negs r1, r1\n\ - ands r0, r1\n\ - strb r0, [r3]\n\ - ldrb r1, [r4]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0810E766\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0810E736\n\ - ldrb r1, [r4, 0xE]\n\ - mov r0, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0810E71C\n\ - ldrb r2, [r5, 0x5]\n\ - lsls r1, r2, 28\n\ - lsrs r1, 30\n\ - subs r1, 0x1\n\ - movs r0, 0x3\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x5]\n\ - b _0810E754\n\ -_0810E71C:\n\ - ldrb r2, [r5, 0x5]\n\ - lsls r1, r2, 28\n\ - lsrs r1, 30\n\ - adds r1, 0x1\n\ - movs r0, 0x3\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x5]\n\ - b _0810E754\n\ -_0810E736:\n\ - ldrb r1, [r4, 0xE]\n\ - mov r0, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0810E74A\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - ldrb r0, [r1]\n\ - subs r0, 0xC\n\ - b _0810E752\n\ -_0810E74A:\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - ldrb r0, [r1]\n\ - adds r0, 0xC\n\ -_0810E752:\n\ - strb r0, [r1]\n\ -_0810E754:\n\ - ldrb r2, [r4, 0xE]\n\ - lsls r0, r2, 31\n\ - lsrs r0, 31\n\ - eors r0, r6\n\ - ands r0, r7\n\ - mov r1, r8\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - strb r1, [r4, 0xE]\n\ -_0810E766:\n\ - ldrb r1, [r4]\n\ - movs r0, 0x9\n\ - negs r0, r0\n\ - ands r0, r1\n\ - strb r0, [r4]\n\ - ldrh r1, [r4, 0x2]\n\ - mov r12, r1\n\ -_0810E774:\n\ - ldrb r0, [r4]\n\ - movs r1, 0xF\n\ - ands r1, r0\n\ - movs r0, 0x10\n\ - b _0810E978\n\ -_0810E77E:\n\ - lsls r1, r2, 24\n\ - lsrs r0, r1, 28\n\ - cmp r0, 0x3\n\ - bne _0810E78C\n\ - movs r0, 0x8\n\ - orrs r0, r2\n\ - b _0810E794\n\ -_0810E78C:\n\ - lsrs r0, r1, 28\n\ - cmp r0, 0x1\n\ - bne _0810E79C\n\ - adds r0, r2, 0\n\ -_0810E794:\n\ - orrs r0, r7\n\ - strb r0, [r4]\n\ - strb r6, [r4, 0x1]\n\ - b _0810E868\n\ -_0810E79C:\n\ - movs r0, 0x8\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _0810E868\n\ - adds r3, r5, 0\n\ - adds r3, 0x3F\n\ - ldrb r2, [r3]\n\ - lsls r1, r2, 31\n\ - lsrs r1, 31\n\ - movs r6, 0x1\n\ - eors r1, r6\n\ - ands r1, r7\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - mov r8, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - lsls r0, 31\n\ - lsrs r0, 31\n\ - adds r1, r5, 0\n\ - adds r1, 0x2A\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - movs r1, 0x11\n\ - negs r1, r1\n\ - ands r0, r1\n\ - strb r0, [r3]\n\ - ldrb r1, [r4]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0810E85A\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0810E82A\n\ - ldrb r1, [r4, 0xE]\n\ - mov r0, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0810E810\n\ - ldrb r2, [r5, 0x5]\n\ - lsls r1, r2, 28\n\ - lsrs r1, 30\n\ - subs r1, 0x1\n\ - movs r0, 0x3\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x5]\n\ - b _0810E848\n\ -_0810E810:\n\ - ldrb r2, [r5, 0x5]\n\ - lsls r1, r2, 28\n\ - lsrs r1, 30\n\ - adds r1, 0x1\n\ - movs r0, 0x3\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x5]\n\ - b _0810E848\n\ -_0810E82A:\n\ - ldrb r1, [r4, 0xE]\n\ - mov r0, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0810E83E\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - ldrb r0, [r1]\n\ - subs r0, 0xC\n\ - b _0810E846\n\ -_0810E83E:\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - ldrb r0, [r1]\n\ - adds r0, 0xC\n\ -_0810E846:\n\ - strb r0, [r1]\n\ -_0810E848:\n\ - ldrb r2, [r4, 0xE]\n\ - lsls r0, r2, 31\n\ - lsrs r0, 31\n\ - eors r0, r6\n\ - ands r0, r7\n\ - mov r1, r8\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - strb r1, [r4, 0xE]\n\ -_0810E85A:\n\ - ldrb r1, [r4]\n\ - movs r0, 0x9\n\ - negs r0, r0\n\ - ands r0, r1\n\ - strb r0, [r4]\n\ - ldrh r1, [r4, 0x2]\n\ - mov r12, r1\n\ -_0810E868:\n\ - ldrb r0, [r4]\n\ - movs r1, 0xF\n\ - ands r1, r0\n\ - movs r0, 0x20\n\ - b _0810E978\n\ -_0810E872:\n\ - lsls r1, r2, 24\n\ - lsrs r0, r1, 28\n\ - cmp r0, 0x2\n\ - bne _0810E882\n\ - movs r0, 0x8\n\ - orrs r0, r2\n\ - strb r0, [r4]\n\ - b _0810E970\n\ -_0810E882:\n\ - lsrs r0, r1, 28\n\ - cmp r0, 0\n\ - bne _0810E8A4\n\ - lsls r0, r2, 30\n\ - lsrs r0, 31\n\ - movs r1, 0x1\n\ - eors r0, r1\n\ - ands r0, r7\n\ - lsls r0, 1\n\ - movs r1, 0x3\n\ - negs r1, r1\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - orrs r1, r7\n\ - strb r1, [r4]\n\ - strb r6, [r4, 0x1]\n\ - b _0810E970\n\ -_0810E8A4:\n\ - movs r0, 0x8\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _0810E970\n\ - adds r3, r5, 0\n\ - adds r3, 0x3F\n\ - ldrb r2, [r3]\n\ - lsls r1, r2, 31\n\ - lsrs r1, 31\n\ - movs r6, 0x1\n\ - eors r1, r6\n\ - ands r1, r7\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - mov r8, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - lsls r0, 31\n\ - lsrs r0, 31\n\ - adds r1, r5, 0\n\ - adds r1, 0x2A\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - movs r1, 0x11\n\ - negs r1, r1\n\ - ands r0, r1\n\ - strb r0, [r3]\n\ - ldrb r1, [r4]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0810E962\n\ - bl IsContest\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0810E932\n\ - ldrb r1, [r4, 0xE]\n\ - mov r0, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0810E918\n\ - ldrb r2, [r5, 0x5]\n\ - lsls r1, r2, 28\n\ - lsrs r1, 30\n\ - subs r1, 0x1\n\ - movs r0, 0x3\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x5]\n\ - b _0810E950\n\ -_0810E918:\n\ - ldrb r2, [r5, 0x5]\n\ - lsls r1, r2, 28\n\ - lsrs r1, 30\n\ - adds r1, 0x1\n\ - movs r0, 0x3\n\ - ands r1, r0\n\ - lsls r1, 2\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r5, 0x5]\n\ - b _0810E950\n\ -_0810E932:\n\ - ldrb r1, [r4, 0xE]\n\ - mov r0, r9\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0810E946\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - ldrb r0, [r1]\n\ - subs r0, 0xC\n\ - b _0810E94E\n\ -_0810E946:\n\ - adds r1, r5, 0\n\ - adds r1, 0x43\n\ - ldrb r0, [r1]\n\ - adds r0, 0xC\n\ -_0810E94E:\n\ - strb r0, [r1]\n\ -_0810E950:\n\ - ldrb r2, [r4, 0xE]\n\ - lsls r0, r2, 31\n\ - lsrs r0, 31\n\ - eors r0, r6\n\ - ands r0, r7\n\ - mov r1, r8\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - strb r1, [r4, 0xE]\n\ -_0810E962:\n\ - ldrb r1, [r4]\n\ - movs r0, 0x9\n\ - negs r0, r0\n\ - ands r0, r1\n\ - strb r0, [r4]\n\ - ldrh r1, [r4, 0x2]\n\ - mov r12, r1\n\ -_0810E970:\n\ - ldrb r0, [r4]\n\ - movs r1, 0xF\n\ - ands r1, r0\n\ - movs r0, 0x30\n\ -_0810E978:\n\ - orrs r1, r0\n\ - strb r1, [r4]\n\ -_0810E97C:\n\ - ldrb r1, [r4]\n\ - lsls r1, 30\n\ - lsrs r1, 31\n\ - adds r0, r4, 0\n\ - adds r0, 0xC\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - ldr r3, =gSineTable\n\ - mov r2, r12\n\ - lsls r0, r2, 1\n\ - adds r0, r3\n\ - movs r2, 0\n\ - ldrsh r0, [r0, r2]\n\ - muls r0, r1\n\ - asrs r0, 8\n\ - strh r0, [r5, 0x24]\n\ - ldrb r2, [r5, 0x3]\n\ - lsls r2, 26\n\ - lsrs r2, 27\n\ - movs r1, 0x24\n\ - ldrsh r0, [r5, r1]\n\ - negs r0, r0\n\ - asrs r0, 1\n\ - ldrb r1, [r4, 0xA]\n\ - adds r0, r1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r1, r0, 1\n\ - adds r1, r3\n\ - ldrh r6, [r1]\n\ - ldr r1, =gOamMatrices\n\ - lsls r2, 3\n\ - adds r2, r1\n\ - adds r0, 0x40\n\ - lsls r0, 1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - strh r0, [r2, 0x6]\n\ - strh r0, [r2]\n\ - strh r6, [r2, 0x2]\n\ - lsls r0, r6, 16\n\ - asrs r0, 16\n\ - negs r0, r0\n\ - strh r0, [r2, 0x4]\n\ - ldrh r0, [r4, 0x6]\n\ - ldrh r2, [r4, 0x8]\n\ - adds r0, r2\n\ - strh r0, [r4, 0x8]\n\ - lsls r0, 16\n\ - lsrs r0, 24\n\ - strh r0, [r5, 0x22]\n\ - movs r1, 0x4\n\ - ldrsh r0, [r4, r1]\n\ - movs r1, 0x80\n\ - lsls r1, 8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0810EA0C\n\ - ldrh r0, [r4, 0x4]\n\ - subs r1, 0x1\n\ - ands r1, r0\n\ - ldrh r0, [r4, 0x2]\n\ - subs r0, r1\n\ - movs r1, 0xFF\n\ - ands r0, r1\n\ - strh r0, [r4, 0x2]\n\ - b _0810EA1C\n\ - .pool\n\ -_0810EA0C:\n\ - ldrh r0, [r4, 0x4]\n\ - ldr r1, =0x00007fff\n\ - ands r1, r0\n\ - ldrh r2, [r4, 0x2]\n\ - adds r1, r2\n\ - movs r0, 0xFF\n\ - ands r1, r0\n\ - strh r1, [r4, 0x2]\n\ -_0810EA1C:\n\ - movs r0, 0x22\n\ - ldrsh r1, [r5, r0]\n\ - movs r2, 0x26\n\ - ldrsh r0, [r5, r2]\n\ - adds r1, r0\n\ - ldrh r0, [r4, 0xE]\n\ - lsrs r0, 1\n\ - cmp r1, r0\n\ - blt _0810EA36\n\ - movs r0, 0\n\ - strh r0, [r5, 0x2E]\n\ - ldr r0, =sub_810E2C8\n\ - str r0, [r5, 0x1C]\n\ -_0810EA36:\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - "); -} -#endif void sub_810EA4C(struct Sprite *sprite) { diff --git a/src/frontier_pass.c b/src/frontier_pass.c index fff93c3c7..d8b36ffbd 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -5,7 +5,7 @@ #include "battle_anim.h" #include "event_data.h" #include "recorded_battle.h" -#include "alloc.h" +#include "malloc.h" #include "sprite.h" #include "scanline_effect.h" #include "text_window.h" @@ -442,7 +442,7 @@ static const struct SpriteTemplate sSpriteTemplates_Cursors[] = { .tileTag = 0, .paletteTag = 0, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = sSpriteAnimTable_8571574, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -451,7 +451,7 @@ static const struct SpriteTemplate sSpriteTemplates_Cursors[] = { .tileTag = 1, .paletteTag = 1, - .oam = &gUnknown_08524934, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = sSpriteAnimTable_8571598, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -463,7 +463,7 @@ static const struct SpriteTemplate sSpriteTemplate_Medal = { .tileTag = 2, .paletteTag = 2, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = sSpriteAnimTable_857157C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -474,7 +474,7 @@ static const struct SpriteTemplate sSpriteTemplate_Head = { .tileTag = 4, .paletteTag = 4, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = sSpriteAnimTable_8571574, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/frontier_util.c b/src/frontier_util.c index 88e466e8c..37840f834 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -24,7 +24,7 @@ #include "data.h" #include "record_mixing.h" #include "strings.h" -#include "alloc.h" +#include "malloc.h" #include "save.h" #include "load_save.h" #include "battle_dome.h" @@ -884,7 +884,7 @@ static void sub_81A1AD4(void) { s32 i; - sub_81B8558(); + ClearSelectedPartyOrder(); for (i = 0; i < gSpecialVar_0x8005; i++) gSelectedOrderFromParty[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i]; ReducePlayerPartyToSelectedMons(); @@ -1889,11 +1889,11 @@ static void sub_81A3B64(void) points = gSaveBlock2Ptr->frontier.field_EBA; points += gUnknown_086118B4[challengeNum][facility][battleMode]; - sub_80EED60(gUnknown_086118B4[challengeNum][facility][battleMode]); + IncrementDailyBattlePoints(gUnknown_086118B4[challengeNum][facility][battleMode]); if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) { points += 10; - sub_80EED60(10); + IncrementDailyBattlePoints(10); } if (points > 0xFFFF) points = 0xFFFF; diff --git a/src/ghost.c b/src/ghost.c index 41621ff54..93c442b92 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -58,7 +58,7 @@ const struct SpriteTemplate gUnknown_08596D14 = { .tileTag = ANIM_TAG_YELLOW_BALL, .paletteTag = ANIM_TAG_YELLOW_BALL, - .oam = &gUnknown_085249CC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596D10, @@ -69,7 +69,7 @@ const struct SpriteTemplate gUnknown_08596D2C = { .tileTag = ANIM_TAG_YELLOW_BALL, .paletteTag = ANIM_TAG_YELLOW_BALL, - .oam = &gUnknown_08524A2C, + .oam = &gOamData_AffineOff_ObjBlend_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -91,7 +91,7 @@ const struct SpriteTemplate gShadowBallSpriteTemplate = { .tileTag = ANIM_TAG_SHADOW_BALL, .paletteTag = ANIM_TAG_SHADOW_BALL, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596D54, @@ -117,7 +117,7 @@ const struct SpriteTemplate gUnknown_08596D8C = { .tileTag = ANIM_TAG_LICK, .paletteTag = ANIM_TAG_LICK, - .oam = &gUnknown_08524954, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gUnknown_08596D88, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -139,7 +139,7 @@ const struct SpriteTemplate gUnknown_08596DB8 = { .tileTag = ANIM_TAG_WHITE_SHADOW, .paletteTag = ANIM_TAG_WHITE_SHADOW, - .oam = &gUnknown_08524A5C, + .oam = &gOamData_AffineOff_ObjBlend_64x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -150,7 +150,7 @@ const struct SpriteTemplate gUnknown_08596DD0 = { .tileTag = ANIM_TAG_NAIL, .paletteTag = ANIM_TAG_NAIL, - .oam = &gUnknown_08524A54, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -161,7 +161,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596DE8 = { .tileTag = ANIM_TAG_GHOSTLY_SPIRIT, .paletteTag = ANIM_TAG_GHOSTLY_SPIRIT, - .oam = &gUnknown_08524A34, + .oam = &gOamData_AffineOff_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -172,7 +172,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596E00 = { .tileTag = ANIM_TAG_DEVIL, .paletteTag = ANIM_TAG_DEVIL, - .oam = &gUnknown_08524A34, + .oam = &gOamData_AffineOff_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -197,7 +197,7 @@ const struct SpriteTemplate gUnknown_08596E30 = { .tileTag = ANIM_TAG_PURPLE_FLAME, .paletteTag = ANIM_TAG_PURPLE_FLAME, - .oam = &gUnknown_08524A74, + .oam = &gOamData_AffineOff_ObjBlend_16x32, .anims = gUnknown_08596E2C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/gpu_regs.c b/src/gpu_regs.c deleted file mode 100644 index 3bcc4fd93..000000000 --- a/src/gpu_regs.c +++ /dev/null @@ -1,195 +0,0 @@ -#include "global.h" -#include "gpu_regs.h" - -#define GPU_REG_BUF_SIZE 0x60 - -#define GPU_REG_BUF(offset) (*(u16 *)(&sGpuRegBuffer[offset])) -#define GPU_REG(offset) (*(vu16 *)(REG_BASE + offset)) - -#define EMPTY_SLOT 0xFF - -static u8 sGpuRegBuffer[GPU_REG_BUF_SIZE]; -static u8 sGpuRegWaitingList[GPU_REG_BUF_SIZE]; -static volatile bool8 sGpuRegBufferLocked; -static volatile bool8 sShouldSyncRegIE; -static vu16 sRegIE; - -static void CopyBufferedValueToGpuReg(u8 regOffset); -static void SyncRegIE(void); -static void UpdateRegDispstatIntrBits(u16 regIE); - -void InitGpuRegManager(void) -{ - s32 i; - - for (i = 0; i < GPU_REG_BUF_SIZE; i++) - { - sGpuRegBuffer[i] = 0; - sGpuRegWaitingList[i] = EMPTY_SLOT; - } - - sGpuRegBufferLocked = FALSE; - sShouldSyncRegIE = FALSE; - sRegIE = 0; -} - -static void CopyBufferedValueToGpuReg(u8 regOffset) -{ - if (regOffset == REG_OFFSET_DISPSTAT) - { - REG_DISPSTAT &= ~(DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR); - REG_DISPSTAT |= GPU_REG_BUF(REG_OFFSET_DISPSTAT); - } - else - { - GPU_REG(regOffset) = GPU_REG_BUF(regOffset); - } -} - -void CopyBufferedValuesToGpuRegs(void) -{ - if (!sGpuRegBufferLocked) - { - s32 i; - - for (i = 0; i < GPU_REG_BUF_SIZE; i++) - { - u8 regOffset = sGpuRegWaitingList[i]; - if (regOffset == EMPTY_SLOT) - return; - CopyBufferedValueToGpuReg(regOffset); - sGpuRegWaitingList[i] = EMPTY_SLOT; - } - } -} - -void SetGpuReg(u8 regOffset, u16 value) -{ - if (regOffset < GPU_REG_BUF_SIZE) - { - u16 vcount; - - GPU_REG_BUF(regOffset) = value; - vcount = REG_VCOUNT & 0xFF; - - if ((vcount >= 161 && vcount <= 225) || (REG_DISPCNT & DISPCNT_FORCED_BLANK)) - { - CopyBufferedValueToGpuReg(regOffset); - } - else - { - s32 i; - - sGpuRegBufferLocked = TRUE; - - for (i = 0; i < GPU_REG_BUF_SIZE && sGpuRegWaitingList[i] != EMPTY_SLOT; i++) - { - if (sGpuRegWaitingList[i] == regOffset) - { - sGpuRegBufferLocked = FALSE; - return; - } - } - - sGpuRegWaitingList[i] = regOffset; - sGpuRegBufferLocked = FALSE; - } - } -} - -void SetGpuReg_ForcedBlank(u8 regOffset, u16 value) -{ - if (regOffset < GPU_REG_BUF_SIZE) - { - GPU_REG_BUF(regOffset) = value; - - if (REG_DISPCNT & DISPCNT_FORCED_BLANK) - { - CopyBufferedValueToGpuReg(regOffset); - } - else - { - s32 i; - - sGpuRegBufferLocked = TRUE; - - for (i = 0; i < GPU_REG_BUF_SIZE && sGpuRegWaitingList[i] != EMPTY_SLOT; i++) - { - if (sGpuRegWaitingList[i] == regOffset) - { - sGpuRegBufferLocked = FALSE; - return; - } - } - - sGpuRegWaitingList[i] = regOffset; - sGpuRegBufferLocked = FALSE; - } - } -} - -u16 GetGpuReg(u8 regOffset) -{ - if (regOffset == REG_OFFSET_DISPSTAT) - return REG_DISPSTAT; - - if (regOffset == REG_OFFSET_VCOUNT) - return REG_VCOUNT; - - return GPU_REG_BUF(regOffset); -} - -void SetGpuRegBits(u8 regOffset, u16 mask) -{ - u16 regValue = GPU_REG_BUF(regOffset); - SetGpuReg(regOffset, regValue | mask); -} - -void ClearGpuRegBits(u8 regOffset, u16 mask) -{ - u16 regValue = GPU_REG_BUF(regOffset); - SetGpuReg(regOffset, regValue & ~mask); -} - -static void SyncRegIE(void) -{ - if (sShouldSyncRegIE) - { - u16 temp = REG_IME; - REG_IME = 0; - REG_IE = sRegIE; - REG_IME = temp; - sShouldSyncRegIE = FALSE; - } -} - -void EnableInterrupts(u16 mask) -{ - sRegIE |= mask; - sShouldSyncRegIE = TRUE; - SyncRegIE(); - UpdateRegDispstatIntrBits(sRegIE); -} - -void DisableInterrupts(u16 mask) -{ - sRegIE &= ~mask; - sShouldSyncRegIE = TRUE; - SyncRegIE(); - UpdateRegDispstatIntrBits(sRegIE); -} - -static void UpdateRegDispstatIntrBits(u16 regIE) -{ - u16 oldValue = GetGpuReg(REG_OFFSET_DISPSTAT) & (DISPSTAT_HBLANK_INTR | DISPSTAT_VBLANK_INTR); - u16 newValue = 0; - - if (regIE & INTR_FLAG_VBLANK) - newValue |= DISPSTAT_VBLANK_INTR; - - if (regIE & INTR_FLAG_HBLANK) - newValue |= DISPSTAT_HBLANK_INTR; - - if (oldValue != newValue) - SetGpuReg(REG_OFFSET_DISPSTAT, newValue); -} diff --git a/src/graphics.c b/src/graphics.c index 679f16af1..06bfeed17 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1138,9 +1138,9 @@ const u32 gBattleAnimSpritePal_Slash2[] = INCBIN_U32("graphics/battle_anims/spri const u32 gBattleAnimSpriteGfx_WhiteShadow[] = INCBIN_U32("graphics/battle_anims/sprites/white_shadow.4bpp.lz"); const u32 gBattleAnimSpritePal_WhiteShadow[] = INCBIN_U32("graphics/battle_anims/sprites/white_shadow.gbapal.lz"); -const u32 gPartyMenuMisc_Gfx[] = INCBIN_U32("graphics/interface/party_menu_misc.4bpp.lz"); -const u32 gPartyMenuMisc_Pal[] = INCBIN_U32("graphics/interface/party_menu_misc.gbapal.lz"); -const u32 gPartyMenuMisc_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_misc.bin.lz"); +const u32 gPartyMenuBg_Gfx[] = INCBIN_U32("graphics/interface/party_menu_bg.4bpp.lz"); +const u32 gPartyMenuBg_Pal[] = INCBIN_U32("graphics/interface/party_menu_bg.gbapal.lz"); +const u32 gPartyMenuBg_Tilemap[] = INCBIN_U32("graphics/interface/party_menu_bg.bin.lz"); const u32 gPartyMenuPokeball_Gfx[] = INCBIN_U32("graphics/interface/party_menu_pokeball.4bpp.lz"); const u32 gPartyMenuPokeballSmall_Gfx[] = INCBIN_U32("graphics/interface/party_menu_pokeball_small.4bpp.lz"); //unused @@ -1516,21 +1516,14 @@ asm(".space 0x20"); //blank palette?? #include "data/graphics/berry_fix.h" -// more trade stuff? - -const u16 gUnknown_08DDB3E4[] = INCBIN_U16("graphics/trade/menu.gbapal"); - -const u16 gUnknown_08DDB444[] = INCBIN_U16("graphics/unknown/unknown_DDB444.gbapal"); - -const u8 gUnknown_08DDB464[] = INCBIN_U8("graphics/trade/menu.4bpp"); - -const u8 gUnknown_08DDC6E4[] = INCBIN_U8("graphics/trade/buttons.4bpp"); - +// Trade +const u16 gTradeMenu_Pal[] = INCBIN_U16("graphics/trade/menu.gbapal"); +const u16 gUnknown_08DDB444[] = INCBIN_U16("graphics/trade/unknown_DDB444.gbapal"); +const u8 gTradeMenu_Gfx[] = INCBIN_U8("graphics/trade/menu.4bpp"); +const u8 gTradeButtons_Gfx[] = INCBIN_U8("graphics/trade/buttons.4bpp"); const u16 gUnused_DDCEE4[] = INCBIN_U16("graphics/unused/unused_DDCEE4.bin"); - -const u16 gUnknown_08DDCF04[] = INCBIN_U16("graphics/unknown/unknown_DDCF04.bin"); - -const u16 gUnknown_08DDD704[] = INCBIN_U16("graphics/unknown/unknown_DDD704.bin"); // textbox tilemap?? +const u16 gUnknown_08DDCF04[] = INCBIN_U16("graphics/trade/unknown_DDCF04.bin"); +const u16 gTradeMenuMonBox_Tilemap[] = INCBIN_U16("graphics/trade/menu_mon_box.bin"); const u16 gMessageBox_Pal[] = INCBIN_U16("graphics/text_window/message_box.gbapal"); const u8 gMessageBox_Gfx[] = INCBIN_U8("graphics/text_window/message_box.4bpp"); diff --git a/src/ground.c b/src/ground.c index ae3cf6c3e..36dbd31f3 100644 --- a/src/ground.c +++ b/src/ground.c @@ -53,7 +53,7 @@ const struct SpriteTemplate gUnknown_08597178 = { .tileTag = ANIM_TAG_BONE, .paletteTag = ANIM_TAG_BONE, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597170, @@ -64,7 +64,7 @@ const struct SpriteTemplate gUnknown_08597190 = { .tileTag = ANIM_TAG_BONE, .paletteTag = ANIM_TAG_BONE, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597174, @@ -75,7 +75,7 @@ const struct SpriteTemplate gUnknown_085971A8 = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -97,7 +97,7 @@ const struct SpriteTemplate gUnknown_085971CC = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_085971C8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -108,7 +108,7 @@ const struct SpriteTemplate gUnknown_085971E4 = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -119,7 +119,7 @@ const struct SpriteTemplate gUnknown_085971FC = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -130,7 +130,7 @@ const struct SpriteTemplate gUnknown_08597214 = { .tileTag = ANIM_TAG_DIRT_MOUND, .paletteTag = ANIM_TAG_DIRT_MOUND, - .oam = &gUnknown_08524934, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index ac37b2ece..d138abbb1 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -6,7 +6,7 @@ #include "pokemon.h" #include "text.h" #include "text_window.h" -#include "alloc.h" +#include "malloc.h" #include "gpu_regs.h" #include "graphics.h" #include "main.h" @@ -66,7 +66,7 @@ const struct SpriteTemplate gUnknown_08595A58 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -155,7 +155,7 @@ const struct SpriteTemplate gUnknown_08595AD0 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524B24, + .oam = &gOamData_AffineDouble_ObjBlend_8x16, .anims = gUnknown_08595AA8, .images = NULL, .affineAnims = gUnknown_08595ACC, @@ -166,7 +166,7 @@ const struct SpriteTemplate gUnknown_08595AE8 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524A24, + .oam = &gOamData_AffineOff_ObjBlend_8x8, .anims = gUnknown_08595AAC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -188,7 +188,7 @@ const struct SpriteTemplate gUnknown_08595B14 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524AC4, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, .anims = gUnknown_08595AA8, .images = NULL, .affineAnims = gUnknown_08595B10, @@ -199,7 +199,7 @@ const struct SpriteTemplate gUnknown_08595B2C = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524A24, + .oam = &gOamData_AffineOff_ObjBlend_8x8, .anims = gUnknown_08595AAC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -223,7 +223,7 @@ const struct SpriteTemplate gUnknown_08595B68 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524AC4, + .oam = &gOamData_AffineNormal_ObjBlend_8x16, .anims = gUnknown_08595AA8, .images = NULL, .affineAnims = gUnknown_08595B64, @@ -234,7 +234,7 @@ const struct SpriteTemplate gUnknown_08595B80 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524A84, + .oam = &gOamData_AffineNormal_ObjBlend_8x8, .anims = gUnknown_08595AAC, .images = NULL, .affineAnims = gUnknown_08595B64, @@ -245,7 +245,7 @@ const struct SpriteTemplate gUnknown_08595B98 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_08595AB0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -256,7 +256,7 @@ const struct SpriteTemplate gUnknown_08595BB0 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_08595AB4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -267,7 +267,7 @@ const struct SpriteTemplate gUnknown_08595BC8 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_08595AB0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -295,7 +295,7 @@ const struct SpriteTemplate gUnknown_08595C04 = { .tileTag = ANIM_TAG_ICE_SPIKES, .paletteTag = ANIM_TAG_ICE_SPIKES, - .oam = &gUnknown_08524A64, + .oam = &gOamData_AffineOff_ObjBlend_8x16, .anims = gUnknown_08595C00, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -318,7 +318,7 @@ const struct SpriteTemplate gUnknown_08595C2C = { .tileTag = ANIM_TAG_MIST_CLOUD, .paletteTag = ANIM_TAG_MIST_CLOUD, - .oam = &gUnknown_08524A54, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gUnknown_08595C28, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -329,7 +329,7 @@ const struct SpriteTemplate gUnknown_08595C44 = { .tileTag = ANIM_TAG_PURPLE_GAS_CLOUD, .paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD, - .oam = &gUnknown_08524A54, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gUnknown_08595C28, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -345,7 +345,7 @@ const struct SpriteTemplate gUnknown_08595C70 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -361,7 +361,7 @@ const struct SpriteTemplate gUnknown_08595C9C = { .tileTag = ANIM_TAG_PURPLE_GAS_CLOUD, .paletteTag = ANIM_TAG_PURPLE_GAS_CLOUD, - .oam = &gUnknown_08524A54, + .oam = &gOamData_AffineOff_ObjBlend_32x16, .anims = gUnknown_08595C28, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -422,7 +422,7 @@ const struct SpriteTemplate gUnknown_08595D2C = { .tileTag = ANIM_TAG_HAIL, .paletteTag = ANIM_TAG_HAIL, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08595D1C, @@ -433,7 +433,7 @@ const struct SpriteTemplate gUnknown_08595D44 = { .tileTag = ANIM_TAG_HAIL, .paletteTag = ANIM_TAG_HAIL, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08595D28, @@ -504,7 +504,7 @@ const struct SpriteTemplate gUnknown_08595DE4 = { .tileTag = ANIM_TAG_ICE_CHUNK, .paletteTag = ANIM_TAG_ICE_CHUNK, - .oam = &gUnknown_085249D4, + .oam = &gOamData_AffineDouble_ObjNormal_32x32, .anims = gUnknown_08595D78, .images = NULL, .affineAnims = gUnknown_08595DD0, @@ -515,7 +515,7 @@ const struct SpriteTemplate gUnknown_08595DFC = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_08595AAC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/intro.c b/src/intro.c index e97fbedb0..58f2509cc 100644 --- a/src/intro.c +++ b/src/intro.c @@ -5,7 +5,7 @@ #include "task.h" #include "title_screen.h" #include "libgcnmultiboot.h" -#include "alloc.h" +#include "malloc.h" #include "gpu_regs.h" #include "link.h" #include "multiboot_pokemon_colosseum.h" diff --git a/src/item.c b/src/item.c index 5e505724c..7b8b37c06 100644 --- a/src/item.c +++ b/src/item.c @@ -4,7 +4,7 @@ #include "string_util.h" #include "text.h" #include "event_data.h" -#include "alloc.h" +#include "malloc.h" #include "secret_base.h" #include "item_menu.h" #include "strings.h" @@ -142,7 +142,7 @@ bool8 CheckBagHasItem(u16 itemId, u16 count) if (ItemId_GetPocket(itemId) == 0) return FALSE; - if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE) + if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) return CheckPyramidBagHasItem(itemId, count); pocket = ItemId_GetPocket(itemId) - 1; // Check for item slots that contain the item @@ -189,7 +189,7 @@ bool8 CheckBagHasSpace(u16 itemId, u16 count) if (ItemId_GetPocket(itemId) == POCKET_NONE) return FALSE; - if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE) + if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) { return CheckPyramidBagHasSpace(itemId, count); } @@ -404,7 +404,7 @@ bool8 AddBagItem(u16 itemId, u16 count) return FALSE; // check Battle Pyramid Bag - if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE) + if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) { return AddPyramidBagItem(itemId, count); } @@ -517,7 +517,7 @@ bool8 RemoveBagItem(u16 itemId, u16 count) return FALSE; // check Battle Pyramid Bag - if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE) + if (InBattlePyramid() || FlagGet(FLAG_STORING_ITEMS_IN_PYRAMID_BAG) == TRUE) { return RemovePyramidBagItem(itemId, count); } diff --git a/src/item_icon.c b/src/item_icon.c index 91c32951a..6ae7eac58 100644 --- a/src/item_icon.c +++ b/src/item_icon.c @@ -2,7 +2,7 @@ #include "decompress.h" #include "graphics.h" #include "item_icon.h" -#include "alloc.h" +#include "malloc.h" #include "sprite.h" #include "constants/items.h" diff --git a/src/item_menu.c b/src/item_menu.c index 12f03b328..2814aa5b9 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -4,6 +4,7 @@ #include "battle_controllers.h" #include "battle_pyramid.h" #include "frontier_util.h" +#include "battle_pyramid_bag.h" #include "berry_tag_screen.h" #include "bg.h" #include "constants/items.h" @@ -25,7 +26,7 @@ #include "link.h" #include "mail.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "map_name_popup.h" #include "menu.h" #include "money.h" @@ -466,9 +467,9 @@ void CB2_BagMenuFromStartMenu(void) void sub_81AABB0(void) { if (!InBattlePyramid()) - GoToBagMenu(RETURN_LOCATION_BATTLE, POCKETS_COUNT, SetCB2ToReshowScreenAfterMenu2); + GoToBagMenu(RETURN_LOCATION_BATTLE, POCKETS_COUNT, CB2_SetUpReshowBattleScreenAfterMenu2); else - sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2); + GoToBattlePyramidBagMenu(1, CB2_SetUpReshowBattleScreenAfterMenu2); } void CB2_ChooseBerry(void) @@ -790,17 +791,17 @@ void GetItemName(s8 *dest, u16 itemId) StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]); if (itemId >= ITEM_HM01) { - ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, 2, 1); + ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 1); StringExpandPlaceholders(dest, gText_ClearTo11Var1Clear5Var2); } else { - ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, 2, 2); + ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2); } break; case BERRIES_POCKET: - ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_CHERI_BERRY + 1, 2, 2); + ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_CHERI_BERRY + 1, STR_CONV_MODE_LEADING_ZEROS, 2); CopyItemName(itemId, gStringVar2); StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2); break; @@ -851,14 +852,14 @@ void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a) BlitBitmapToWindow(rboxId, gBagMenuHMIcon_Gfx, 8, a - 1, 16, 16); if (gBagPositionStruct.pocket == BERRIES_POCKET) { - ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 3); + ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_xVar1); offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77); BagMenu_Print(rboxId, 7, gStringVar4, offset, a, 0, 0, -1, 0); } else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && (unique = ItemId_GetImportance(itemId)) == FALSE) { - ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 2); + ConvertIntToDecimalStringN(gStringVar1, itemQuantity, STR_CONV_MODE_RIGHT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_xVar1); offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77); BagMenu_Print(rboxId, 7, gStringVar4, offset, a, unique, unique, -1, unique); @@ -1053,21 +1054,21 @@ void sub_81ABC3C(u8 a) PrintItemDepositAmount(BagMenu_AddWindow(a), 1); } -void PrintItemDepositAmount(u8 a, s16 b) +void PrintItemDepositAmount(u8 windowId, s16 numDeposited) { - u8 r3 = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; - ConvertIntToDecimalStringN(gStringVar1, b, 2, r3); + u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; + ConvertIntToDecimalStringN(gStringVar1, numDeposited, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); - AddTextPrinterParameterized(a, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0); + AddTextPrinterParameterized(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0); } -void sub_81ABCC0(int a, int b, int c) +void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned) { - u8 r3 = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; - ConvertIntToDecimalStringN(gStringVar1, b, 2, r3); + u8 numDigits = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; + ConvertIntToDecimalStringN(gStringVar1, numSold, STR_CONV_MODE_LEADING_ZEROS, numDigits); StringExpandPlaceholders(gStringVar4, gText_xVar1); - AddTextPrinterParameterized(a, 1, gStringVar4, 0, 1, -1, 0); - PrintMoneyAmount(a, 0x26, 1, c, 0); + AddTextPrinterParameterized(windowId, 1, gStringVar4, 0, 1, -1, 0); + PrintMoneyAmount(windowId, 38, 1, moneyEarned, 0); } void Task_BagMenu(u8 taskId) @@ -1148,13 +1149,13 @@ u8 GetSwitchBagPocketDirection(void) u8 LRKeys; if (gBagMenu->unk81B != 0) return 0; - LRKeys = GetLRKeysState(); - if ((gMain.newKeys & DPAD_LEFT) || LRKeys == 1) + LRKeys = GetLRKeysPressed(); + if ((gMain.newKeys & DPAD_LEFT) || LRKeys == MENU_L_PRESSED) { PlaySE(SE_SELECT); return 1; } - if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == 2) + if ((gMain.newKeys & DPAD_RIGHT) || LRKeys == MENU_R_PRESSED) { PlaySE(SE_SELECT); return 2; @@ -1581,7 +1582,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) sub_8199134(0, 1); } } - else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysState() == 1) + else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { if ((cursorPos & 1) && sub_81ACDFC(cursorPos - 1)) { @@ -1589,7 +1590,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) sub_8199134(-1, 0); } } - else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysState() == 2) + else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { if (!(cursorPos & 1) && sub_81ACDFC(cursorPos + 1)) { @@ -1651,7 +1652,7 @@ void ItemMenu_UseOutOfBattle(u8 taskId) if (gBagPositionStruct.pocket != BERRIES_POCKET) ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); else - sub_80FDD10(taskId); + ItemUseOutOfBattle_Berry(taskId); } } } @@ -1682,7 +1683,7 @@ void BagMenu_TossItems(u8 taskId) s16* data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems); FillWindowPixelBuffer(1, PIXEL_FILL(0)); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); @@ -1725,7 +1726,7 @@ void BagMenu_ConfirmToss(u8 taskId) s16* data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s); FillWindowPixelBuffer(1, PIXEL_FILL(0)); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); @@ -1782,7 +1783,7 @@ void ItemMenu_Give(u8 taskId) BagMenu_PrintThereIsNoPokemon(taskId); else { - gBagMenu->mainCallback2 = sub_81B7F60; + gBagMenu->mainCallback2 = CB2_ChooseMonToGiveItem; unknown_ItemMenu_Confirm(taskId); } } @@ -1936,7 +1937,7 @@ void sub_81AD680(u8 taskId) { s16* data = gTasks[taskId].data; - ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8], 0, 6); + ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1); DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD6E4); } @@ -1961,7 +1962,7 @@ void sub_81AD730(u8 taskId) s16* data = gTasks[taskId].data; u8 windowId = BagMenu_AddWindow(8); - sub_81ABCC0(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); + PrintItemSoldAmount(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); bag_menu_AddMoney_window(); gTasks[taskId].func = sub_81AD794; } @@ -1972,7 +1973,7 @@ void sub_81AD794(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81ABCC0(gBagMenu->unk818, data[8], (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); + PrintItemSoldAmount(gBagMenu->unk818, data[8], (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); } else if (gMain.newKeys & A_BUTTON) { @@ -1996,7 +1997,7 @@ void BagMenu_ConfirmSell(u8 taskId) s16* data = gTasks[taskId].data; CopyItemName(gSpecialVar_ItemId, gStringVar2); - ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8], 0, 6); + ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8], STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2); DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD8C8); } @@ -2087,7 +2088,7 @@ void sub_81ADB14(u8 taskId) else if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE) { CopyItemName(gSpecialVar_ItemId, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s); BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); gTasks[taskId].func = Task_ActuallyToss; @@ -2157,7 +2158,7 @@ void DoWallyTutorialBagMenu(void) PrepareBagForWallyTutorial(); AddBagItem(ITEM_POTION, 1); AddBagItem(ITEM_POKE_BALL, 1); - GoToBagMenu(RETURN_LOCATION_BATTLE_2, ITEMS_POCKET, SetCB2ToReshowScreenAfterMenu2); + GoToBagMenu(RETURN_LOCATION_BATTLE_2, ITEMS_POCKET, CB2_SetUpReshowBattleScreenAfterMenu2); } void Task_WallyTutorialBagMenu(u8 taskId) @@ -2398,7 +2399,7 @@ void PrintTMHMMoveData(u16 itemId) } else { - ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, 1, 3); + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, STR_CONV_MODE_RIGHT_ALIGN, 3); text = gStringVar1; } BagMenu_Print(4, 1, text, 7, 12, 0, 0, -1, 4); @@ -2408,11 +2409,11 @@ void PrintTMHMMoveData(u16 itemId) } else { - ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, 1, 3); + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); text = gStringVar1; } BagMenu_Print(4, 1, text, 7, 24, 0, 0, -1, 4); - ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, 1, 3); + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, STR_CONV_MODE_RIGHT_ALIGN, 3); BagMenu_Print(4, 1, gStringVar1, 7, 36, 0, 0, -1, 4); CopyWindowToVram(4, 2); } diff --git a/src/item_use.c b/src/item_use.c index 2f4374423..a777bb2ec 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -43,9 +43,9 @@ #include "constants/vars.h" #include "event_obj_lock.h" -extern u8 BerryTree_EventScript_274482[]; -extern u8 BerryTree_EventScript_2744C0[]; -extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[]; +extern u8 BerryTree_EventScript_ItemUsePlantBerry[]; +extern u8 BerryTree_EventScript_ItemUseWailmerPail[]; +extern u8 BattleFrontier_OutsideEast_EventScript_WaterSudowoodo[]; void SetUpItemUseCallback(u8 taskId); void MapPostLoadHook_UseItem(void); @@ -61,13 +61,13 @@ void sub_80FDA94(u8 taskId); void sub_80FDADC(u8 taskId); void sub_80FD7C8(u8 taskId); void sub_80FDC00(u8 taskId); -void sub_80FDD74(u8 taskId); -void sub_80FDE08(u8 taskId); -void sub_80FDE7C(u8 taskId); -void sub_80FDF90(u8 taskId); -void task08_0809AD8C(u8 taskId); -void sub_80FE024(u8 taskId); -void sub_80FE03C(u8 taskId); +void ItemUseOnFieldCB_Berry(u8 taskId); +void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId); +void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId); +static void BootUpSoundTMHM(u8 taskId); +static void Task_ShowTMHMContainedMessage(u8 taskId); +static void UseTMHMYesNo(u8 taskId); +static void UseTMHM(u8 taskId); void sub_80FE124(u8 taskId); void sub_80FE164(u8 taskId); @@ -81,7 +81,7 @@ u8 sub_80FD9B0(s16 a, s16 b); void sub_80FDA24(u8 a); void sub_80FD8E0(u8 taskId, s16 x, s16 y); void sub_80FDBEC(void); -bool8 sub_80FDE2C(void); +bool8 TryToWaterSudowoodo(void); void ItemUseOutOfBattle_CannotUse(u8 taskId); // EWRAM variables @@ -91,16 +91,16 @@ EWRAM_DATA static void(*gUnknown_0203A0F4)(u8 taskId) = NULL; static const MainCallback gUnknown_085920D8[] = { - sub_81B617C, + CB2_ShowPartyMenuForItemUse, CB2_ReturnToField, NULL, }; static const u8 gUnknown_085920E4[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST}; -static const struct YesNoFuncTable gUnknown_085920E8 = +static const struct YesNoFuncTable sUseTMHMYesNoFuncTable = { - .yesFunc = sub_80FE03C, + .yesFunc = UseTMHM, .noFunc = BagMenu_InitListsMenu, }; @@ -350,7 +350,7 @@ bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 taskId) gTasks[taskId].data[2] = FALSE; for (i = 0; i < events->bgEventCount; i++) { - if (events->bgEvents[i].kind == BG_EVENT_HIDDEN_ITEM && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4)) + if (events->bgEvents[i].kind == BG_EVENT_HIDDEN_ITEM && !FlagGet(events->bgEvents[i].bgUnion.hiddenItem.hiddenItemId + FLAG_HIDDEN_ITEMS_START)) { distanceX = (u16)events->bgEvents[i].x + 7; newDistanceX = distanceX - x; @@ -379,7 +379,7 @@ bool8 sub_80FD6D4(const struct MapEvents *events, s16 x, s16 y) { if (bgEvent[i].kind == BG_EVENT_HIDDEN_ITEM && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed? { - if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 0x1F4)) + if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + FLAG_HIDDEN_ITEMS_START)) return TRUE; else return FALSE; @@ -623,7 +623,7 @@ void sub_80FDC00(u8 taskId) void ItemUseOutOfBattle_CoinCase(u8 taskId) { - ConvertIntToDecimalStringN(gStringVar1, GetCoins(), 0, 4); + ConvertIntToDecimalStringN(gStringVar1, GetCoins(), STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar4, gText_CoinCase); if (!gTasks[taskId].data[3]) @@ -638,7 +638,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId) void ItemUseOutOfBattle_PowderJar(u8 taskId) { - ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), 0, 5); + ConvertIntToDecimalStringN(gStringVar1, GetBerryPowder(), STR_CONV_MODE_LEFT_ALIGN, 5); StringExpandPlaceholders(gStringVar4, gText_PowderQty); if (!gTasks[taskId].data[3]) @@ -651,11 +651,11 @@ void ItemUseOutOfBattle_PowderJar(u8 taskId) } } -void sub_80FDD10(u8 taskId) +void ItemUseOutOfBattle_Berry(u8 taskId) { if (IsPlayerFacingEmptyBerryTreePatch() == TRUE) { - gUnknown_0203A0F4 = sub_80FDD74; + gUnknown_0203A0F4 = ItemUseOnFieldCB_Berry; gFieldCallback = MapPostLoadHook_UseItem; gBagMenu->mainCallback2 = CB2_ReturnToField; unknown_ItemMenu_Confirm(taskId); @@ -666,24 +666,24 @@ void sub_80FDD10(u8 taskId) } } -void sub_80FDD74(u8 taskId) +void ItemUseOnFieldCB_Berry(u8 taskId) { RemoveBagItem(gSpecialVar_ItemId, 1); ScriptContext2_Enable(); - ScriptContext1_SetupScript(BerryTree_EventScript_274482); + ScriptContext1_SetupScript(BerryTree_EventScript_ItemUsePlantBerry); DestroyTask(taskId); } void ItemUseOutOfBattle_WailmerPail(u8 taskId) { - if (sub_80FDE2C() == TRUE) + if (TryToWaterSudowoodo() == TRUE) { - gUnknown_0203A0F4 = sub_80FDE7C; + gUnknown_0203A0F4 = ItemUseOnFieldCB_WailmerPailSudowoodo; SetUpItemUseOnFieldCallback(taskId); } else if (TryToWaterBerryTree() == TRUE) { - gUnknown_0203A0F4 = sub_80FDE08; + gUnknown_0203A0F4 = ItemUseOnFieldCB_WailmerPailBerry; SetUpItemUseOnFieldCallback(taskId); } else @@ -692,14 +692,14 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId) } } -void sub_80FDE08(u8 taskId) +void ItemUseOnFieldCB_WailmerPailBerry(u8 taskId) { ScriptContext2_Enable(); - ScriptContext1_SetupScript(BerryTree_EventScript_2744C0); + ScriptContext1_SetupScript(BerryTree_EventScript_ItemUseWailmerPail); DestroyTask(taskId); } -bool8 sub_80FDE2C(void) +bool8 TryToWaterSudowoodo(void) { u16 x, y; u8 z; @@ -707,87 +707,87 @@ bool8 sub_80FDE2C(void) GetXYCoordsOneStepInFrontOfPlayer(&x, &y); z = PlayerGetZCoord(); objId = GetEventObjectIdByXYZ(x, y, z); - if (objId == 16 || gEventObjects[objId].graphicsId != 0xE4) + if (objId == EVENT_OBJECTS_COUNT || gEventObjects[objId].graphicsId != EVENT_OBJ_GFX_SUDOWOODO) return FALSE; else return TRUE; } -void sub_80FDE7C(u8 taskId) +void ItemUseOnFieldCB_WailmerPailSudowoodo(u8 taskId) { ScriptContext2_Enable(); - ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_242CFC); + ScriptContext1_SetupScript(BattleFrontier_OutsideEast_EventScript_WaterSudowoodo); DestroyTask(taskId); } void ItemUseOutOfBattle_Medicine(u8 taskId) { - gUnknown_03006328 = ItemUseCB_Medicine; + gItemUseCB = ItemUseCB_Medicine; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_ReduceEV(u8 taskId) { - gUnknown_03006328 = sub_81B67C8; + gItemUseCB = ItemUseCB_ReduceEV; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_SacredAsh(u8 taskId) { - gUnknown_03006328 = sub_81B79E8; + gItemUseCB = ItemUseCB_SacredAsh; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_PPRecovery(u8 taskId) { - gUnknown_03006328 = dp05_ether; + gItemUseCB = ItemUseCB_PPRecovery; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_PPUp(u8 taskId) { - gUnknown_03006328 = dp05_pp_up; + gItemUseCB = ItemUseCB_PPUp; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_RareCandy(u8 taskId) { - gUnknown_03006328 = dp05_rare_candy; + gItemUseCB = ItemUseCB_RareCandy; SetUpItemUseCallback(taskId); } void ItemUseOutOfBattle_TMHM(u8 taskId) { if (gSpecialVar_ItemId >= ITEM_HM01_CUT) - DisplayItemMessage(taskId, 1, gText_BootedUpHM, sub_80FDF90); // HM + DisplayItemMessage(taskId, 1, gText_BootedUpHM, BootUpSoundTMHM); // HM else - DisplayItemMessage(taskId, 1, gText_BootedUpTM, sub_80FDF90); // TM + DisplayItemMessage(taskId, 1, gText_BootedUpTM, BootUpSoundTMHM); // TM } -void sub_80FDF90(u8 taskId) +static void BootUpSoundTMHM(u8 taskId) { PlaySE(SE_PC_LOGIN); - gTasks[taskId].func = task08_0809AD8C; + gTasks[taskId].func = Task_ShowTMHMContainedMessage; } -void task08_0809AD8C(u8 taskId) +static void Task_ShowTMHMContainedMessage(u8 taskId) { if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]); StringExpandPlaceholders(gStringVar4, gText_TMHMContainedVar1); - DisplayItemMessage(taskId, 1, gStringVar4, sub_80FE024); + DisplayItemMessage(taskId, 1, gStringVar4, UseTMHMYesNo); } } -void sub_80FE024(u8 taskId) +static void UseTMHMYesNo(u8 taskId) { - BagMenu_YesNo(taskId, 6, &gUnknown_085920E8); + BagMenu_YesNo(taskId, 6, &sUseTMHMYesNoFuncTable); } -void sub_80FE03C(u8 taskId) +static void UseTMHM(u8 taskId) { - gUnknown_03006328 = sub_81B6DC4; + gItemUseCB = ItemUseCB_TMHM; SetUpItemUseCallback(taskId); } @@ -912,7 +912,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId) void ItemUseOutOfBattle_EvolutionStone(u8 taskId) { - gUnknown_03006328 = sub_81B7C74; + gItemUseCB = ItemUseCB_EvolutionStone; SetUpItemUseCallback(taskId); } @@ -976,36 +976,37 @@ void ItemUseInBattle_StatIncrease(u8 taskId) } } -void sub_80FE54C(u8 taskId) +static void ItemUseInBattle_ShowPartyMenu(u8 taskId) { if (!InBattlePyramid()) { - gBagMenu->mainCallback2 = sub_81B89F0; + gBagMenu->mainCallback2 = ChooseMonForInBattleItem; unknown_ItemMenu_Confirm(taskId); } else { - gPyramidBagResources->callback2 = sub_81B89F0; + gPyramidBagResources->callback2 = ChooseMonForInBattleItem; sub_81C5B14(taskId); } } void ItemUseInBattle_Medicine(u8 taskId) { - gUnknown_03006328 = ItemUseCB_Medicine; - sub_80FE54C(taskId); + gItemUseCB = ItemUseCB_Medicine; + ItemUseInBattle_ShowPartyMenu(taskId); } -void sub_80FE5AC(u8 taskId) +// Unused. Sacred Ash cannot be used in battle +void ItemUseInBattle_SacredAsh(u8 taskId) { - gUnknown_03006328 = sub_81B79E8; - sub_80FE54C(taskId); + gItemUseCB = ItemUseCB_SacredAsh; + ItemUseInBattle_ShowPartyMenu(taskId); } void ItemUseInBattle_PPRecovery(u8 taskId) { - gUnknown_03006328 = dp05_ether; - sub_80FE54C(taskId); + gItemUseCB = ItemUseCB_PPRecovery; + ItemUseInBattle_ShowPartyMenu(taskId); } void ItemUseInBattle_Escape(u8 taskId) diff --git a/src/libagbsyscall.s b/src/libagbsyscall.s deleted file mode 100644 index d5639f689..000000000 --- a/src/libagbsyscall.s +++ /dev/null @@ -1,116 +0,0 @@ - .include "constants/gba_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start ArcTan2 -ArcTan2: @ 82E7078 - swi 0xA - bx lr - thumb_func_end ArcTan2 - - thumb_func_start BgAffineSet -@ void BgAffineSet(BgAffineSet_src_data *src, BgAffineSet_dest_data *dest, int entry_count) -BgAffineSet: @ 82E707C - swi 0xE - bx lr - thumb_func_end BgAffineSet - - thumb_func_start CpuFastSet -@ void CpuFastSet(void *src, void *dest, unsigned int mode) -CpuFastSet: @ 82E7080 - swi 0xC - bx lr - thumb_func_end CpuFastSet - - thumb_func_start CpuSet -@ void CpuSet(void *src, void *dest, unsigned int mode) -CpuSet: @ 82E7084 - swi 0xB - bx lr - thumb_func_end CpuSet - - thumb_func_start Div -Div: @ 82E7088 - swi 0x6 - bx lr - thumb_func_end Div - - thumb_func_start LZ77UnCompVram -@ void LZ77UnCompVram(void *src, void *dest) -LZ77UnCompVram: @ 82E708C - swi 0x12 - bx lr - thumb_func_end LZ77UnCompVram - - thumb_func_start LZ77UnCompWram -@ void LZ77UnCompWram(void *src, void *dest) -LZ77UnCompWram: @ 82E7090 - swi 0x11 - bx lr - thumb_func_end LZ77UnCompWram - - thumb_func_start MultiBoot -@ s32 MultiBoot(struct MultiBootParam *mp) -MultiBoot: @ 82E7094 - movs r1, 0x1 - swi 0x25 - bx lr - thumb_func_end MultiBoot - - thumb_func_start ObjAffineSet -ObjAffineSet: @ 82E709C - swi 0xF - bx lr - thumb_func_end ObjAffineSet - - thumb_func_start RLUnCompVram -RLUnCompVram: @ 82E70A0 - swi 0x15 - bx lr - thumb_func_end RLUnCompVram - - thumb_func_start RLUnCompWram -RLUnCompWram: @ 82E70A4 - swi 0x14 - bx lr - thumb_func_end RLUnCompWram - - thumb_func_start RegisterRamReset -@ void RegisterRamReset(int ResetFlags) -RegisterRamReset: @ 82E70A8 - swi 0x1 - bx lr - thumb_func_end RegisterRamReset - - thumb_func_start SoftReset -@ void SoftReset() -SoftReset: @ 82E70AC - ldr r3, =REG_IME - movs r2, 0 - strb r2, [r3] - ldr r1, =0x3007F00 - mov sp, r1 - swi 0x1 - swi 0 - .pool - thumb_func_end SoftReset - - thumb_func_start Sqrt -@ s16 Sqrt(int) -Sqrt: @ 82E70C4 - swi 0x8 - bx lr - thumb_func_end Sqrt - - thumb_func_start VBlankIntrWait -@ void VBlankIntrWait() -VBlankIntrWait: @ 82E70C8 - movs r2, 0 - swi 0x5 - bx lr - thumb_func_end VBlankIntrWait - - .align 2, 0 @ Don't pad with nop. diff --git a/src/link.c b/src/link.c index 9928b48da..3ca8236ed 100644 --- a/src/link.c +++ b/src/link.c @@ -2,7 +2,7 @@ // Includes #include "global.h" #include "m4a.h" -#include "alloc.h" +#include "malloc.h" #include "reset_save_heap.h" #include "save.h" #include "bg.h" @@ -28,6 +28,7 @@ #include "link.h" #include "link_rfu.h" #include "constants/rgb.h" +#include "constants/trade.h" extern u16 gHeldKeyCodeToSend; @@ -282,7 +283,7 @@ void LinkTestScreen(void) ResetTasks(); SetVBlankCallback(sub_80096BC); ResetBlockSend(); - gLinkType = 0x1111; + gLinkType = LINKTYPE_0x1111; OpenLink(); SeedRng(gMain.vblankCounter2); for (i = 0; i < MAX_LINK_PLAYERS; i++) @@ -316,10 +317,10 @@ static void InitLocalLinkPlayer(void) gLocalLinkPlayer.language = gGameLanguage; gLocalLinkPlayer.version = gGameVersion + 0x4000; gLocalLinkPlayer.lp_field_2 = 0x8000; - gLocalLinkPlayer.name[8] = IsNationalPokedexEnabled(); + gLocalLinkPlayer.progressFlags = IsNationalPokedexEnabled(); if (FlagGet(FLAG_IS_CHAMPION)) { - gLocalLinkPlayer.name[8] |= 0x10; + gLocalLinkPlayer.progressFlags |= 0x10; } } @@ -597,9 +598,9 @@ static void ProcessRecvCmds(u8 unused) *linkPlayer = block->linkPlayer; if ((linkPlayer->version & 0xFF) == VERSION_RUBY || (linkPlayer->version & 0xFF) == VERSION_SAPPHIRE) { - linkPlayer->name[10] = 0; - linkPlayer->name[9] = 0; - linkPlayer->name[8] = 0; + linkPlayer->progressFlagsCopy = 0; + linkPlayer->neverRead = 0; + linkPlayer->progressFlags = 0; } sub_800B524(linkPlayer); if (strcmp(block->magic1, gASCIIGameFreakInc) != 0 @@ -739,7 +740,7 @@ void ClearLinkCallback(void) { if (gWirelessCommType) { - Rfu_set_zero(); + ClearLinkRfuCallback(); } else { @@ -751,7 +752,7 @@ void ClearLinkCallback_2(void) { if (gWirelessCommType) { - Rfu_set_zero(); + ClearLinkRfuCallback(); } else { @@ -862,15 +863,15 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) { if (gLinkPlayers[0].linkType == 0x1133) { - switch (sub_807A728()) + switch (GetGameProgressForLinkTrade()) { - case 1: - sPlayerDataExchangeStatus = EXCHANGE_STAT_4; + case TRADE_PLAYER_NOT_READY: + sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY; break; - case 2: - sPlayerDataExchangeStatus = EXCHANGE_STAT_5; + case TRADE_PARTNER_NOT_READY: + sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY; break; - case 0: + case TRADE_BOTH_PLAYERS_READY: sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; break; } @@ -1084,7 +1085,7 @@ bool8 IsLinkTaskFinished(void) { if (gWirelessCommType == TRUE) { - return sub_8010500(); + return IsLinkRfuTaskFinished(); } return gLinkCallback == NULL; } @@ -1349,7 +1350,7 @@ bool8 sub_800AA60(void) { if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId) { - if (gLinkType == 0x2288) + if (gLinkType == LINKTYPE_0x2288) { if (gLinkType == gLinkPlayers[i].linkType) { @@ -1909,7 +1910,7 @@ u8 sub_800B518(void) void sub_800B524(struct LinkPlayer *player) { - player->name[10] = player->name[8]; + player->progressFlagsCopy = player->progressFlags; ConvertInternationalString(player->name, player->language); } diff --git a/src/link_rfu.c b/src/link_rfu.c index 4b0b0a2a5..cedc6b2fb 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "berry_blender.h" #include "decompress.h" @@ -2165,9 +2165,9 @@ void sub_800DD94(struct UnkLinkRfuStruct_02022B14 *data, u8 r9, bool32 r2, s32 r data->unk_00.unk_00_4 = 0; data->unk_00.unk_00_5 = 0; data->unk_00.unk_00_6 = 0; - data->unk_00.unk_00_7 = FlagGet(FLAG_IS_CHAMPION); - data->unk_00.unk_01_0 = IsNationalPokedexEnabled(); - data->unk_00.unk_01_1 = FlagGet(FLAG_SYS_GAME_CLEAR); + data->unk_00.isChampion = FlagGet(FLAG_IS_CHAMPION); + data->unk_00.hasNationalDex = IsNationalPokedexEnabled(); + data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR); } bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx) @@ -3169,7 +3169,7 @@ bool32 sub_800F4F0(void) sub_8011A64(2, 0x9000); rfu_clearAllSlot(); gReceivedRemoteLinkPlayers = FALSE; - gUnknown_03005000.unk_00 = 0; + gUnknown_03005000.linkRfuCallback = NULL; if (gUnknown_03005000.unk_ce4 == 1) { sub_8011A64(2, 0x9000); @@ -3264,17 +3264,17 @@ struct UnkLinkRfuStruct_02022B14 *sub_800F7DC(void) bool32 IsSendingKeysToRfu(void) { - return gUnknown_03005000.unk_00 == rfu_func_080F97B8; + return gUnknown_03005000.linkRfuCallback == rfu_func_080F97B8; } void sub_800F804(void) { - gUnknown_03005000.unk_00 = rfu_func_080F97B8; + gUnknown_03005000.linkRfuCallback = rfu_func_080F97B8; } -void Rfu_set_zero(void) +void ClearLinkRfuCallback(void) { - gUnknown_03005000.unk_00 = NULL; + gUnknown_03005000.linkRfuCallback = NULL; } void sub_800F820(void) @@ -3287,8 +3287,8 @@ void sub_800F820(void) void sub_800F850(void) { - if (gUnknown_03005000.unk_00 == NULL) - gUnknown_03005000.unk_00 = sub_800F820; + if (gUnknown_03005000.linkRfuCallback == NULL) + gUnknown_03005000.linkRfuCallback = sub_800F820; } static void sub_800F86C(u8 unused) @@ -3507,7 +3507,7 @@ void sub_800FE50(void *a0) bool32 sub_800FE84(const u8 *src, size_t size) { bool8 r4; - if (gUnknown_03005000.unk_00 != NULL) + if (gUnknown_03005000.linkRfuCallback != NULL) return FALSE; if (gSendCmd[0] != 0) return FALSE; @@ -3530,7 +3530,7 @@ bool32 sub_800FE84(const u8 *src, size_t size) gUnknown_03005000.unk_6c.unk_04 = gBlockSendBuffer; } sub_800FD14(0x8800); - gUnknown_03005000.unk_00 = rfufunc_80F9F44; + gUnknown_03005000.linkRfuCallback = rfufunc_80F9F44; gUnknown_03005000.unk_5b = 0; return TRUE; } @@ -3543,12 +3543,12 @@ static void rfufunc_80F9F44(void) if (gUnknown_03005000.unk_0c == 1) { if (++gUnknown_03005000.unk_5b > 2) - gUnknown_03005000.unk_00 = sub_800FFB0; + gUnknown_03005000.linkRfuCallback = sub_800FFB0; } else { if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == 0x8800) - gUnknown_03005000.unk_00 = sub_800FFB0; + gUnknown_03005000.linkRfuCallback = sub_800FFB0; } } } @@ -3564,7 +3564,7 @@ static void sub_800FFB0(void) if (gUnknown_03005000.unk_6c.unk_02 <= gUnknown_03005000.unk_6c.unk_00) { gUnknown_03005000.unk_6c.unk_10 = 0; - gUnknown_03005000.unk_00 = rfufunc_80FA020; + gUnknown_03005000.linkRfuCallback = rfufunc_80FA020; } } @@ -3586,11 +3586,11 @@ static void rfufunc_80FA020(void) gUnknown_02022B44.unk_64++; } else - gUnknown_03005000.unk_00 = NULL; + gUnknown_03005000.linkRfuCallback = NULL; } } else - gUnknown_03005000.unk_00 = NULL; + gUnknown_03005000.linkRfuCallback = NULL; } bool8 sub_8010100(u8 a0) @@ -3606,7 +3606,7 @@ void sub_801011C(void) sub_800C048(); gReceivedRemoteLinkPlayers = 0; gUnknown_03005000.unk_ef = 1; - gUnknown_03005000.unk_00 = NULL; + gUnknown_03005000.linkRfuCallback = NULL; } void sub_8010148(void) @@ -3624,7 +3624,7 @@ void sub_8010168(void) gUnknown_03005000.unk_ce4 = 2; } else - gUnknown_03005000.unk_00 = sub_8010148; + gUnknown_03005000.linkRfuCallback = sub_8010148; } void LinkRfu_FatalError(void) @@ -3654,7 +3654,7 @@ void sub_80101CC(void) sub_8010168(); } else - gUnknown_03005000.unk_00 = sub_8010168; + gUnknown_03005000.linkRfuCallback = sub_8010168; } } @@ -3663,16 +3663,16 @@ void sub_801022C(void) if (gSendCmd[0] == 0 && gUnknown_03005000.unk_ce8 == 0) { sub_800FD14(0x5f00); - gUnknown_03005000.unk_00 = sub_80101CC; + gUnknown_03005000.linkRfuCallback = sub_80101CC; } } void sub_8010264(u8 taskId) { - if (gUnknown_03005000.unk_00 == NULL) + if (gUnknown_03005000.linkRfuCallback == NULL) { gUnknown_03005000.unk_cd9 = 1; - gUnknown_03005000.unk_00 = sub_801022C; + gUnknown_03005000.linkRfuCallback = sub_801022C; DestroyTask(taskId); } } @@ -3708,7 +3708,7 @@ void sub_80102B8(void) for (i = 0; i < MAX_RFU_PLAYERS; i++) gUnknown_03005000.unk_e9[i] = 0; gUnknown_03005000.unk_100++; - gUnknown_03005000.unk_00 = NULL; + gUnknown_03005000.linkRfuCallback = NULL; } gUnknown_03005000.unk_fe++; } @@ -3718,7 +3718,7 @@ void sub_8010358(void) if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) { sub_800FD14(0x6600); - gUnknown_03005000.unk_00 = sub_80102B8; + gUnknown_03005000.linkRfuCallback = sub_80102B8; } } @@ -3732,7 +3732,7 @@ void sub_8010390(void) if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) { sub_800FD14(0x6600); - gUnknown_03005000.unk_00 = sub_80102B8; + gUnknown_03005000.linkRfuCallback = sub_80102B8; } } else @@ -3748,7 +3748,7 @@ void sub_8010390(void) if (gUnknown_03005000.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) { sub_800FD14(0x6600); - gUnknown_03005000.unk_00 = sub_8010358; + gUnknown_03005000.linkRfuCallback = sub_8010358; } } } @@ -3756,9 +3756,9 @@ void sub_8010390(void) void sub_8010434(void) { - if (gUnknown_03005000.unk_00 == NULL) + if (gUnknown_03005000.linkRfuCallback == NULL) { - gUnknown_03005000.unk_00 = sub_8010390; + gUnknown_03005000.linkRfuCallback = sub_8010390; gUnknown_03005000.unk_fe = 0; } } @@ -3800,17 +3800,17 @@ u8 sub_80104F4(void) return gUnknown_03005000.playerCount; } -bool8 sub_8010500(void) +bool8 IsLinkRfuTaskFinished(void) { if (gUnknown_03005000.unk_f1 == 2) return FALSE; - return gUnknown_03005000.unk_00 ? FALSE : TRUE; + return gUnknown_03005000.linkRfuCallback ? FALSE : TRUE; } static void sub_8010528(void) { - if (gUnknown_03005000.unk_00) - gUnknown_03005000.unk_00(); + if (gUnknown_03005000.linkRfuCallback) + gUnknown_03005000.linkRfuCallback(); } bool8 sub_8010540(void) @@ -4255,11 +4255,11 @@ void sub_8010FA0(bool32 a0, bool32 a1) gUnknown_02022B14.unk_00.unk_00_5 = a1; } -void sub_8010FCC(u32 a0, u32 a1, u32 a2) +void sub_8010FCC(u32 type, u32 species, u32 level) { - gUnknown_02022B14.type = a0; - gUnknown_02022B14.species = a1; - gUnknown_02022B14.unk_0b_1 = a2; + gUnknown_02022B14.type = type; + gUnknown_02022B14.species = species; + gUnknown_02022B14.level = level; } u8 sub_801100C(s32 a0) @@ -4345,12 +4345,12 @@ void sub_80111B0(bool32 a0) void sub_80111DC(void) { sub_8011E94(gUnknown_03004140.unk_00, 1); - gUnknown_03005000.unk_00 = NULL; + gUnknown_03005000.linkRfuCallback = NULL; } void sub_80111FC(void) { - gUnknown_03005000.unk_00 = sub_80111DC; + gUnknown_03005000.linkRfuCallback = sub_80111DC; } void sub_801120C(u8 a0, u8 unused1) @@ -4741,7 +4741,7 @@ void sub_8011AFC(void) SetVBlankCallback(sub_8011AE8); if (IsWirelessAdapterConnected()) { - gLinkType = 0x1111; + gLinkType = LINKTYPE_0x1111; sub_800B488(); OpenLink(); SeedRng(gMain.vblankCounter2); @@ -4979,7 +4979,7 @@ bool32 sub_801200C(s16 a1, struct UnkLinkRfuStruct_02022B14 *structPtr) return TRUE; } else if (structPtr->species != structPtr2->species - || structPtr->unk_0b_1 != structPtr2->unk_0b_1 + || structPtr->level != structPtr2->level || structPtr->type != structPtr2->type) { return TRUE; diff --git a/src/list_menu.c b/src/list_menu.c index 6d51559f7..797aff5f8 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -8,7 +8,7 @@ #include "trig.h" #include "decompress.h" #include "palette.h" -#include "alloc.h" +#include "malloc.h" #include "strings.h" #include "sound.h" #include "constants/songs.h" diff --git a/src/load_save.c b/src/load_save.c index 5857f2b46..24dfda20c 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "berry_powder.h" #include "item.h" #include "load_save.h" diff --git a/src/mail.c b/src/mail.c index 0078bc4fc..cdf965545 100644 --- a/src/mail.c +++ b/src/mail.c @@ -17,7 +17,7 @@ #include "bg.h" #include "pokemon_icon.h" #include "constants/species.h" -#include "alloc.h" +#include "malloc.h" #include "easy_chat.h" #include "constants/rgb.h" diff --git a/src/mail_data.c b/src/mail_data.c index 809dcc2a8..b0b05e8fe 100644 --- a/src/mail_data.c +++ b/src/mail_data.c @@ -63,7 +63,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId) gSaveBlock1Ptr->mail[id].playerName[i] = EOS; PadNameString(gSaveBlock1Ptr->mail[id].playerName, CHAR_SPACE); - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) gSaveBlock1Ptr->mail[id].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; species = GetBoxMonData(&mon->box, MON_DATA_SPECIES); diff --git a/src/main.c b/src/main.c index 06425e661..f488e7f6d 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,6 @@ #include "global.h" #include "crt0.h" -#include "alloc.h" +#include "malloc.h" #include "link.h" #include "link_rfu.h" #include "librfu.h" diff --git a/src/main_menu.c b/src/main_menu.c index 6a0bd9e2d..95c64b3bd 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -2158,9 +2158,9 @@ static void MainMenu_FormatSavegameTime(void) StringExpandPlaceholders(gStringVar4, gText_ContinueMenuTime); AddTextPrinterParameterized3(2, 1, 0x6C, 17, sTextColor_PlayerGenderColor, -1, gStringVar4); - ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, 0, 3); + ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); *ptr = 0xF0; - ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, 2, 2); + ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 17, sTextColor_PlayerGenderColor, -1, str); } @@ -2172,12 +2172,12 @@ static void MainMenu_FormatSavegamePokedex(void) if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE) { if (IsNationalPokedexEnabled()) - dexCount = GetNationalPokedexCount(1); + dexCount = GetNationalPokedexCount(FLAG_GET_CAUGHT); else - dexCount = GetHoennPokedexCount(1); + dexCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPokedex); AddTextPrinterParameterized3(2, 1, 0, 33, sTextColor_PlayerGenderColor, -1, gStringVar4); - ConvertIntToDecimalStringN(str, dexCount, 0, 3); + ConvertIntToDecimalStringN(str, dexCount, STR_CONV_MODE_LEFT_ALIGN, 3); AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 100), 33, sTextColor_PlayerGenderColor, -1, str); } } @@ -2195,7 +2195,7 @@ static void MainMenu_FormatSavegameBadges(void) } StringExpandPlaceholders(gStringVar4, gText_ContinueMenuBadges); AddTextPrinterParameterized3(2, 1, 0x6C, 33, sTextColor_PlayerGenderColor, -1, gStringVar4); - ConvertIntToDecimalStringN(str, badgeCount, 2, 1); + ConvertIntToDecimalStringN(str, badgeCount, STR_CONV_MODE_LEADING_ZEROS, 1); AddTextPrinterParameterized3(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 33, sTextColor_PlayerGenderColor, -1, str); } diff --git a/src/match_call.c b/src/match_call.c index 4b0134d2c..646b14cea 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_setup.h" #include "bg.h" @@ -965,9 +965,9 @@ static const struct MatchCallText *const sMatchCallGeneralTopics[] = sMatchCallBattlePyramidTexts, }; -extern const u8 gUnknown_082A5C9C[]; -extern const u8 gUnknown_082A5D2C[]; -extern const u8 gUnknown_082A633D[]; +extern const u8 gBirchDexRatingText_AreYouCurious[]; +extern const u8 gBirchDexRatingText_SoYouveSeenAndCaught[]; +extern const u8 gBirchDexRatingText_OnANationwideBasis[]; void InitMatchCallCounters(void) { @@ -1743,7 +1743,7 @@ static void PopulateBattleFrontierStreak(int matchCallId, u8 *destStr) i++; } - ConvertIntToDecimalStringN(destStr, gBattleFrontierStreakInfo.streak, 0, i); + ConvertIntToDecimalStringN(destStr, gBattleFrontierStreakInfo.streak, STR_CONV_MODE_LEFT_ALIGN, i); } static const u16 sBadgeFlags[] = @@ -1976,13 +1976,13 @@ void sub_8197080(u8 *destStr) numSeen = GetHoennPokedexCount(FLAG_GET_SEEN); numCaught = GetHoennPokedexCount(FLAG_GET_CAUGHT); - ConvertIntToDecimalStringN(gStringVar1, numSeen, 0, 3); - ConvertIntToDecimalStringN(gStringVar2, numCaught, 0, 3); + ConvertIntToDecimalStringN(gStringVar1, numSeen, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, numCaught, STR_CONV_MODE_LEFT_ALIGN, 3); dexRatingLevel = GetPokedexRatingLevel(numCaught); - str = StringCopy(buffer, gUnknown_082A5C9C); + str = StringCopy(buffer, gBirchDexRatingText_AreYouCurious); str[0] = CHAR_PROMPT_CLEAR; str++; - str = StringCopy(str, gUnknown_082A5D2C); + str = StringCopy(str, gBirchDexRatingText_SoYouveSeenAndCaught); str[0] = CHAR_PROMPT_CLEAR; str++; StringCopy(str, sBirchDexRatingTexts[dexRatingLevel]); @@ -1994,9 +1994,9 @@ void sub_8197080(u8 *destStr) str++; numSeen = GetNationalPokedexCount(FLAG_GET_SEEN); numCaught = GetNationalPokedexCount(FLAG_GET_CAUGHT); - ConvertIntToDecimalStringN(gStringVar1, numSeen, 0, 3); - ConvertIntToDecimalStringN(gStringVar2, numCaught, 0, 3); - StringExpandPlaceholders(str, gUnknown_082A633D); + ConvertIntToDecimalStringN(gStringVar1, numSeen, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, numCaught, STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(str, gBirchDexRatingText_OnANationwideBasis); } Free(buffer); diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index a4d70c062..add48efd8 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -22,6 +22,7 @@ #include "field_message_box.h" #include "script_menu.h" #include "trader.h" +#include "constants/mauville_old_man.h" #define CHAR_SONG_WORD_SEPARATOR 0x37 @@ -41,7 +42,7 @@ static EWRAM_DATA u16 sUnknownBardRelated = 0; static EWRAM_DATA struct MauvilleManStoryteller * sStorytellerPtr = NULL; static EWRAM_DATA u8 sStorytellerWindowId = 0; -static const u16 sDefaultBardSongLyrics[6] = { +static const u16 sDefaultBardSongLyrics[BARD_SONG_LENGTH] = { EC_WORD_SHAKE, EC_WORD_IT, EC_WORD_DO, @@ -80,7 +81,7 @@ static void SetupBard(void) bard->id = MAUVILLE_MAN_BARD; bard->hasChangedSong = FALSE; bard->language = gGameLanguage; - for (i = 0; i < 6; i++) + for (i = 0; i < BARD_SONG_LENGTH; i++) bard->songLyrics[i] = sDefaultBardSongLyrics[i]; } @@ -166,10 +167,10 @@ void ScrSpecial_SaveBardSongLyrics(void) StringCopy(bard->playerName, gSaveBlock2Ptr->playerName); - for (i = 0; i < 4; i++) + for (i = 0; i < TRAINER_ID_LENGTH; i++) bard->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i]; - for (i = 0; i < 6; i++) + for (i = 0; i < BARD_SONG_LENGTH; i++) bard->songLyrics[i] = bard->temporaryLyrics[i]; bard->hasChangedSong = TRUE; @@ -248,15 +249,15 @@ void ScrSpecial_SetHipsterSpokenFlag(void) void ScrSpecial_HipsterTeachWord(void) { - u16 var = sub_811F01C(); + u16 phrase = GetNewHipsterPhraseToTeach(); - if (var == 0xFFFF) + if (phrase == 0xFFFF) { gSpecialVar_Result = FALSE; } else { - CopyEasyChatWord(gStringVar1, var); + CopyEasyChatWord(gStringVar1, phrase); gSpecialVar_Result = TRUE; } } @@ -458,7 +459,7 @@ static void BardSing(struct Task *task, struct BardSong *song) lyrics = bard->songLyrics; else lyrics = bard->temporaryLyrics; - for (i = 0; i < 6; i++) + for (i = 0; i < BARD_SONG_LENGTH; i++) song->lyrics[i] = lyrics[i]; song->currWord = 0; } @@ -683,14 +684,14 @@ void ScrSpecial_SetMauvilleOldManEventObjGfx(void) void sub_8120B70(union OldMan * oldMan) { s32 i; - u8 sp00[8]; + u8 playerName[PLAYER_NAME_LENGTH + 1]; switch (oldMan->common.id) { case MAUVILLE_MAN_TRADER: { struct MauvilleOldManTrader * trader = &oldMan->trader; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_TRADER_ITEMS; i++) { if (trader->language[i] == LANGUAGE_JAPANESE) { @@ -702,17 +703,17 @@ void sub_8120B70(union OldMan * oldMan) case MAUVILLE_MAN_STORYTELLER: { struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { if (storyteller->gameStatIDs[i] != 0) { - memcpy(sp00, storyteller->trainerNames[i], 7); - sp00[7] = EOS; - if (IsStringJapanese(sp00)) + memcpy(playerName, storyteller->trainerNames[i], PLAYER_NAME_LENGTH); + playerName[PLAYER_NAME_LENGTH] = EOS; + if (IsStringJapanese(playerName)) { - memset(sp00, CHAR_SPACE, 8); - StringCopy(sp00, gText_Friend); - memcpy(storyteller->trainerNames[i], sp00, 7); + memset(playerName, CHAR_SPACE, PLAYER_NAME_LENGTH + 1); + StringCopy(playerName, gText_Friend); + memcpy(storyteller->trainerNames[i], playerName, PLAYER_NAME_LENGTH); storyteller->language[i] = GAME_LANGUAGE; } } @@ -732,7 +733,7 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3) { struct MauvilleOldManTrader * trader = &oldMan->trader; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_TRADER_ITEMS; i++) { if (IsStringJapanese(trader->playerNames[i])) { @@ -749,7 +750,7 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3) { struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { if (IsStringJapanese(storyteller->trainerNames[i])) { @@ -797,19 +798,19 @@ void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3) void SanitizeReceivedEmeraldOldMan(union OldMan * oldMan, u32 version, u32 language) { - u8 sp00[8]; + u8 playerName[PLAYER_NAME_LENGTH + 1]; s32 i; if (oldMan->common.id == MAUVILLE_MAN_STORYTELLER && language == LANGUAGE_JAPANESE) { struct MauvilleManStoryteller * storyteller = &oldMan->storyteller; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { if (storyteller->gameStatIDs[i] != 0) { - memcpy(sp00, storyteller->trainerNames[i], 7); - sp00[7] = EOS; - if (IsStringJapanese(sp00)) + memcpy(playerName, storyteller->trainerNames[i], PLAYER_NAME_LENGTH); + playerName[PLAYER_NAME_LENGTH] = EOS; + if (IsStringJapanese(playerName)) storyteller->language[i] = LANGUAGE_JAPANESE; else storyteller->language[i] = GAME_LANGUAGE; @@ -831,7 +832,7 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language if (isRuby) { - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_TRADER_ITEMS; i++) { u8 * str = trader->playerNames[i]; if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) @@ -845,7 +846,7 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language } else { - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_TRADER_ITEMS; i++) { if (trader->language[i] == LANGUAGE_JAPANESE) { @@ -863,7 +864,7 @@ void SanitizeReceivedRubyOldMan(union OldMan * oldMan, u32 version, u32 language if (isRuby) { - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { if (storyteller->gameStatIDs[i] != 0) storyteller->language[i] = language; @@ -914,42 +915,223 @@ struct Story }; static const struct Story sStorytellerStories[] = { - {GAME_STAT_NUM_UNION_ROOM_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956}, - {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE}, - {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8}, - {GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E}, - {GAME_STAT_GOT_INTERVIEWED, 1, MauvilleCity_PokemonCenter_1F_Text_28EBB5, MauvilleCity_PokemonCenter_1F_Text_28EBCD, MauvilleCity_PokemonCenter_1F_Text_28EBDD}, - {GAME_STAT_TRAINER_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28EC60, MauvilleCity_PokemonCenter_1F_Text_28EC79, MauvilleCity_PokemonCenter_1F_Text_28EC81}, - {GAME_STAT_POKEMON_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28ED04, MauvilleCity_PokemonCenter_1F_Text_28ED21, MauvilleCity_PokemonCenter_1F_Text_28ED30}, - {GAME_STAT_FISHING_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28EDA1, MauvilleCity_PokemonCenter_1F_Text_28EDB5, MauvilleCity_PokemonCenter_1F_Text_28EDCF}, - {GAME_STAT_HATCHED_EGGS, 1, MauvilleCity_PokemonCenter_1F_Text_28EE45, MauvilleCity_PokemonCenter_1F_Text_28EE5D, MauvilleCity_PokemonCenter_1F_Text_28EE6A}, - {GAME_STAT_EVOLVED_POKEMON, 1, MauvilleCity_PokemonCenter_1F_Text_28EEDD, MauvilleCity_PokemonCenter_1F_Text_28EEF1, MauvilleCity_PokemonCenter_1F_Text_28EF01}, - {GAME_STAT_USED_POKECENTER, 1, MauvilleCity_PokemonCenter_1F_Text_28EF73, MauvilleCity_PokemonCenter_1F_Text_28EF95, MauvilleCity_PokemonCenter_1F_Text_28EFAA}, - {GAME_STAT_RESTED_AT_HOME, 1, MauvilleCity_PokemonCenter_1F_Text_28F045, MauvilleCity_PokemonCenter_1F_Text_28F05A, MauvilleCity_PokemonCenter_1F_Text_28F071}, - {GAME_STAT_ENTERED_SAFARI_ZONE, 1, MauvilleCity_PokemonCenter_1F_Text_28F0F3, MauvilleCity_PokemonCenter_1F_Text_28F10D, MauvilleCity_PokemonCenter_1F_Text_28F125}, - {GAME_STAT_USED_CUT, 1, MauvilleCity_PokemonCenter_1F_Text_28F1BE, MauvilleCity_PokemonCenter_1F_Text_28F1D5, MauvilleCity_PokemonCenter_1F_Text_28F1DE}, - {GAME_STAT_USED_ROCK_SMASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F24F, MauvilleCity_PokemonCenter_1F_Text_28F269, MauvilleCity_PokemonCenter_1F_Text_28F277}, - {GAME_STAT_MOVED_SECRET_BASE, 1, MauvilleCity_PokemonCenter_1F_Text_28F2FC, MauvilleCity_PokemonCenter_1F_Text_28F314, MauvilleCity_PokemonCenter_1F_Text_28F32A}, - {GAME_STAT_USED_SPLASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F3AD, MauvilleCity_PokemonCenter_1F_Text_28F3C6, MauvilleCity_PokemonCenter_1F_Text_28F3D2}, - {GAME_STAT_USED_STRUGGLE, 1, MauvilleCity_PokemonCenter_1F_Text_28F44B, MauvilleCity_PokemonCenter_1F_Text_28F461, MauvilleCity_PokemonCenter_1F_Text_28F47C}, - {GAME_STAT_SLOT_JACKPOTS, 1, MauvilleCity_PokemonCenter_1F_Text_28F50C, MauvilleCity_PokemonCenter_1F_Text_28F51B, MauvilleCity_PokemonCenter_1F_Text_28F538}, - {GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, MauvilleCity_PokemonCenter_1F_Text_28F5BE, MauvilleCity_PokemonCenter_1F_Text_28F5D1, MauvilleCity_PokemonCenter_1F_Text_28F5F2}, - {GAME_STAT_ENTERED_BATTLE_TOWER, 1, MauvilleCity_PokemonCenter_1F_Text_28F678, MauvilleCity_PokemonCenter_1F_Text_28F694, MauvilleCity_PokemonCenter_1F_Text_28F6B4}, - {GAME_STAT_POKEBLOCKS, 1, MauvilleCity_PokemonCenter_1F_Text_28F751, MauvilleCity_PokemonCenter_1F_Text_28F76A, MauvilleCity_PokemonCenter_1F_Text_28F776}, - {GAME_STAT_ENTERED_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F7F6, MauvilleCity_PokemonCenter_1F_Text_28F811, MauvilleCity_PokemonCenter_1F_Text_28F822}, - {GAME_STAT_WON_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F89C, MauvilleCity_PokemonCenter_1F_Text_28F8AF, MauvilleCity_PokemonCenter_1F_Text_28F8BC}, - {GAME_STAT_SHOPPED, 1, MauvilleCity_PokemonCenter_1F_Text_28F92F, MauvilleCity_PokemonCenter_1F_Text_28F941, MauvilleCity_PokemonCenter_1F_Text_28F949}, - {GAME_STAT_USED_ITEMFINDER, 1, MauvilleCity_PokemonCenter_1F_Text_28F9D1, MauvilleCity_PokemonCenter_1F_Text_28F9EA, MauvilleCity_PokemonCenter_1F_Text_28F9FD}, - {GAME_STAT_GOT_RAINED_ON, 1, MauvilleCity_PokemonCenter_1F_Text_28FA81, MauvilleCity_PokemonCenter_1F_Text_28FA99, MauvilleCity_PokemonCenter_1F_Text_28FAA7}, - {GAME_STAT_CHECKED_POKEDEX, 1, MauvilleCity_PokemonCenter_1F_Text_28FB1D, MauvilleCity_PokemonCenter_1F_Text_28FB35, MauvilleCity_PokemonCenter_1F_Text_28FB47}, - {GAME_STAT_RECEIVED_RIBBONS, 1, MauvilleCity_PokemonCenter_1F_Text_28FBC4, MauvilleCity_PokemonCenter_1F_Text_28FBD9, MauvilleCity_PokemonCenter_1F_Text_28FBEA}, - {GAME_STAT_JUMPED_DOWN_LEDGES, 1, MauvilleCity_PokemonCenter_1F_Text_28FC6B, MauvilleCity_PokemonCenter_1F_Text_28FC85, MauvilleCity_PokemonCenter_1F_Text_28FC98}, - {GAME_STAT_WATCHED_TV, 1, MauvilleCity_PokemonCenter_1F_Text_28FD1D, MauvilleCity_PokemonCenter_1F_Text_28FD35, MauvilleCity_PokemonCenter_1F_Text_28FD40}, - {GAME_STAT_CHECKED_CLOCK, 1, MauvilleCity_PokemonCenter_1F_Text_28FDA2, MauvilleCity_PokemonCenter_1F_Text_28FDBD, MauvilleCity_PokemonCenter_1F_Text_28FDCE}, - {GAME_STAT_WON_POKEMON_LOTTERY, 1, MauvilleCity_PokemonCenter_1F_Text_28FE57, MauvilleCity_PokemonCenter_1F_Text_28FE72, MauvilleCity_PokemonCenter_1F_Text_28FE88}, - {GAME_STAT_USED_DAYCARE, 1, MauvilleCity_PokemonCenter_1F_Text_28FF0C, MauvilleCity_PokemonCenter_1F_Text_28FF27, MauvilleCity_PokemonCenter_1F_Text_28FF44}, - {GAME_STAT_RODE_CABLE_CAR, 1, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D}, - {GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB} + // The 50 below is replaced with GAME_STAT_SAVED_GAME + { + 50, 1, + MauvilleCity_PokemonCenter_1F_Text_SavedGameTitle, + MauvilleCity_PokemonCenter_1F_Text_SavedGameAction, + MauvilleCity_PokemonCenter_1F_Text_SavedGameStory + }, + { + GAME_STAT_STARTED_TRENDS, 1, + MauvilleCity_PokemonCenter_1F_Text_TrendsStartedTitle, + MauvilleCity_PokemonCenter_1F_Text_TrendsStartedAction, + MauvilleCity_PokemonCenter_1F_Text_TrendsStartedStory + }, + { + GAME_STAT_PLANTED_BERRIES, 1, + MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedTitle, + MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedAction, + MauvilleCity_PokemonCenter_1F_Text_BerriesPlantedStory + }, + { + GAME_STAT_TRADED_BIKES, 1, + MauvilleCity_PokemonCenter_1F_Text_BikeTradesTitle, + MauvilleCity_PokemonCenter_1F_Text_BikeTradesAction, + MauvilleCity_PokemonCenter_1F_Text_BikeTradesStory + }, + { + GAME_STAT_GOT_INTERVIEWED, 1, + MauvilleCity_PokemonCenter_1F_Text_InterviewsTitle, + MauvilleCity_PokemonCenter_1F_Text_InterviewsAction, + MauvilleCity_PokemonCenter_1F_Text_InterviewsStory + }, + { + GAME_STAT_TRAINER_BATTLES, 1, + MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesTitle, + MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesAction, + MauvilleCity_PokemonCenter_1F_Text_TrainerBattlesStory + }, + { + GAME_STAT_POKEMON_CAPTURES, 1, + MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtTitle, + MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtAction, + MauvilleCity_PokemonCenter_1F_Text_PokemonCaughtStory + }, + { + GAME_STAT_FISHING_CAPTURES, 1, + MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtTitle, + MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtAction, + MauvilleCity_PokemonCenter_1F_Text_FishingPokemonCaughtStory + }, + { + GAME_STAT_HATCHED_EGGS, 1, + MauvilleCity_PokemonCenter_1F_Text_EggsHatchedTitle, + MauvilleCity_PokemonCenter_1F_Text_EggsHatchedAction, + MauvilleCity_PokemonCenter_1F_Text_EggsHatchedStory + }, + { + GAME_STAT_EVOLVED_POKEMON, 1, + MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedTitle, + MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedAction, + MauvilleCity_PokemonCenter_1F_Text_PokemonEvolvedStory + }, + { + GAME_STAT_USED_POKECENTER, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterAction, + MauvilleCity_PokemonCenter_1F_Text_UsedPokemonCenterStory + }, + { + GAME_STAT_RESTED_AT_HOME, 1, + MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeTitle, + MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeAction, + MauvilleCity_PokemonCenter_1F_Text_RestedAtHomeStory + }, + { + GAME_STAT_ENTERED_SAFARI_ZONE, 1, + MauvilleCity_PokemonCenter_1F_Text_SafariGamesTitle, + MauvilleCity_PokemonCenter_1F_Text_SafariGamesAction, + MauvilleCity_PokemonCenter_1F_Text_SafariGamesStory + }, + { + GAME_STAT_USED_CUT, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedCutTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedCutAction, + MauvilleCity_PokemonCenter_1F_Text_UsedCutStory + }, + { + GAME_STAT_USED_ROCK_SMASH, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashAction, + MauvilleCity_PokemonCenter_1F_Text_UsedRockSmashStory + }, + { + GAME_STAT_MOVED_SECRET_BASE, 1, + MauvilleCity_PokemonCenter_1F_Text_MovedBasesTitle, + MauvilleCity_PokemonCenter_1F_Text_MovedBasesAction, + MauvilleCity_PokemonCenter_1F_Text_MovedBasesStory + }, + { + GAME_STAT_USED_SPLASH, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedSplashTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedSplashAction, + MauvilleCity_PokemonCenter_1F_Text_UsedSplashStory + }, + { + GAME_STAT_USED_STRUGGLE, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedStruggleTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedStruggleAction, + MauvilleCity_PokemonCenter_1F_Text_UsedStruggleStory + }, + { + GAME_STAT_SLOT_JACKPOTS, 1, + MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsTitle, + MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsAction, + MauvilleCity_PokemonCenter_1F_Text_SlotJackpotsStory + }, + { + GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, + MauvilleCity_PokemonCenter_1F_Text_RouletteWinsTitle, + MauvilleCity_PokemonCenter_1F_Text_RouletteWinsAction, + MauvilleCity_PokemonCenter_1F_Text_RouletteWinsStory + }, + { + GAME_STAT_ENTERED_BATTLE_TOWER, 1, + MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesTitle, + MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesAction, + MauvilleCity_PokemonCenter_1F_Text_BattleTowerChallengesStory + }, + { + GAME_STAT_POKEBLOCKS, 1, + MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksTitle, + MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksAction, + MauvilleCity_PokemonCenter_1F_Text_MadePokeblocksStory + }, + { + GAME_STAT_ENTERED_CONTEST, 1, + MauvilleCity_PokemonCenter_1F_Text_EnteredContestsTitle, + MauvilleCity_PokemonCenter_1F_Text_EnteredContestsAction, + MauvilleCity_PokemonCenter_1F_Text_EnteredContestsStory + }, + { + GAME_STAT_WON_CONTEST, 1, + MauvilleCity_PokemonCenter_1F_Text_WonContestsTitle, + MauvilleCity_PokemonCenter_1F_Text_WonContestsAction, + MauvilleCity_PokemonCenter_1F_Text_WonContestsStory + }, + { + GAME_STAT_SHOPPED, 1, + MauvilleCity_PokemonCenter_1F_Text_TimesShoppedTitle, + MauvilleCity_PokemonCenter_1F_Text_TimesShoppedAction, + MauvilleCity_PokemonCenter_1F_Text_TimesShoppedStory + }, + { + GAME_STAT_USED_ITEMFINDER, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderAction, + MauvilleCity_PokemonCenter_1F_Text_UsedItemFinderStory + }, + { + GAME_STAT_GOT_RAINED_ON, 1, + MauvilleCity_PokemonCenter_1F_Text_TimesRainedTitle, + MauvilleCity_PokemonCenter_1F_Text_TimesRainedAction, + MauvilleCity_PokemonCenter_1F_Text_TimesRainedStory + }, + { + GAME_STAT_CHECKED_POKEDEX, 1, + MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexTitle, + MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexAction, + MauvilleCity_PokemonCenter_1F_Text_CheckedPokedexStory + }, + { + GAME_STAT_RECEIVED_RIBBONS, 1, + MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsTitle, + MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsAction, + MauvilleCity_PokemonCenter_1F_Text_ReceivedRibbonsStory + }, + { + GAME_STAT_JUMPED_DOWN_LEDGES, 1, + MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedTitle, + MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedAction, + MauvilleCity_PokemonCenter_1F_Text_LedgesJumpedStory + }, + { + GAME_STAT_WATCHED_TV, 1, + MauvilleCity_PokemonCenter_1F_Text_TVWatchedTitle, + MauvilleCity_PokemonCenter_1F_Text_TVWatchedAction, + MauvilleCity_PokemonCenter_1F_Text_TVWatchedStory + }, + { + GAME_STAT_CHECKED_CLOCK, 1, + MauvilleCity_PokemonCenter_1F_Text_CheckedClockTitle, + MauvilleCity_PokemonCenter_1F_Text_CheckedClockAction, + MauvilleCity_PokemonCenter_1F_Text_CheckedClockStory + }, + { + GAME_STAT_WON_POKEMON_LOTTERY, 1, + MauvilleCity_PokemonCenter_1F_Text_WonLotteryTitle, + MauvilleCity_PokemonCenter_1F_Text_WonLotteryAction, + MauvilleCity_PokemonCenter_1F_Text_WonLotteryStory + }, + { + GAME_STAT_USED_DAYCARE, 1, + MauvilleCity_PokemonCenter_1F_Text_UsedDaycareTitle, + MauvilleCity_PokemonCenter_1F_Text_UsedDaycareAction, + MauvilleCity_PokemonCenter_1F_Text_UsedDaycareStory + }, + { + GAME_STAT_RODE_CABLE_CAR, 1, + MauvilleCity_PokemonCenter_1F_Text_RodeCableCarTitle, + MauvilleCity_PokemonCenter_1F_Text_RodeCableCarAction, + MauvilleCity_PokemonCenter_1F_Text_RodeCableCarStory + }, + { + GAME_STAT_ENTERED_HOT_SPRINGS, 1, + MauvilleCity_PokemonCenter_1F_Text_HotSpringsTitle, + MauvilleCity_PokemonCenter_1F_Text_HotSpringsAction, + MauvilleCity_PokemonCenter_1F_Text_HotSpringsStory + } }; static void StorytellerSetup(void) @@ -959,7 +1141,7 @@ static void StorytellerSetup(void) sStorytellerPtr->id = MAUVILLE_MAN_STORYTELLER; sStorytellerPtr->alreadyRecorded = FALSE; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { sStorytellerPtr->gameStatIDs[i] = 0; sStorytellerPtr->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead? @@ -977,7 +1159,7 @@ static void Storyteller_ResetFlag(void) static u32 StorytellerGetGameStat(u8 stat) { if (stat == 50) - stat = 0; + stat = GAME_STAT_SAVED_GAME; return GetGameStat(stat); } @@ -985,12 +1167,12 @@ static const struct Story *GetStoryByStat(u32 stat) { s32 i; - for (i = 0; i < 36; i++) + for (i = 0; i < (int)ARRAY_COUNT(sStorytellerStories); i++) { if (sStorytellerStories[i].stat == stat) return &sStorytellerStories[i]; } - return &sStorytellerStories[35]; + return &sStorytellerStories[ARRAY_COUNT(sStorytellerStories) - 1]; } static const u8 *GetStoryTitleByStat(u32 stat) @@ -1012,7 +1194,7 @@ static u8 GetFreeStorySlot(void) { u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { if (sStorytellerPtr->gameStatIDs[i] == 0) break; @@ -1049,15 +1231,15 @@ static void GetStoryByStattellerPlayerName(u32 player, void *dst) { u8 *name = sStorytellerPtr->trainerNames[player]; - memset(dst, EOS, 8); - memcpy(dst, name, 7); + memset(dst, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(dst, name, PLAYER_NAME_LENGTH); } static void StorytellerSetPlayerName(u32 player, const u8 * src) { u8 * name = sStorytellerPtr->trainerNames[player]; - memset(name, EOS, 7); - memcpy(name, src, 7); + memset(name, EOS, PLAYER_NAME_LENGTH); + memcpy(name, src, PLAYER_NAME_LENGTH); } @@ -1110,15 +1292,15 @@ static bool8 StorytellerInitializeRandomStat(void) u8 stat = sStorytellerStories[arr[i]].stat; u8 minVal = sStorytellerStories[arr[i]].minVal; - for (j = 0; j < 4; j++) + for (j = 0; j < NUM_STORYTELLER_TALES; j++) { if (sStorytellerPtr->gameStatIDs[j] == stat) break; } - if (j == 4 && StorytellerGetGameStat(stat) >= minVal) + if (j == NUM_STORYTELLER_TALES && StorytellerGetGameStat(stat) >= minVal) { sStorytellerPtr->alreadyRecorded = TRUE; - if (GetFreeStorySlot() == 4) + if (GetFreeStorySlot() == NUM_STORYTELLER_TALES) StorytellerRecordNewStat(sSelectedStory, stat); else StorytellerRecordNewStat(GetFreeStorySlot(), stat); @@ -1132,7 +1314,7 @@ static void StorytellerDisplayStory(u32 player) { u8 stat = sStorytellerPtr->gameStatIDs[player]; - ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10); + ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), STR_CONV_MODE_LEFT_ALIGN, 10); StringCopy(gStringVar2, GetStoryActionByStat(stat)); GetStoryByStattellerPlayerName(player, gStringVar3); ConvertInternationalString(gStringVar3, sStorytellerPtr->language[player]); @@ -1144,7 +1326,7 @@ static void PrintStoryList(void) s32 i; s32 width = GetStringWidth(1, gText_Exit, 0); u8 tileWidth; - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { s32 curWidth; u16 gameStatID = sStorytellerPtr->gameStatIDs[i]; @@ -1157,7 +1339,7 @@ static void PrintStoryList(void) } sStorytellerWindowId = CreateWindowFromRect(0, 0, ConvertPixelWidthToTileWidth(width), GetFreeStorySlot() * 2 + 2); SetStandardWindowBorderStyle(sStorytellerWindowId, 0); - for (i = 0; i < 4; i++) + for (i = 0; i < NUM_STORYTELLER_TALES; i++) { u16 gameStatID = sStorytellerPtr->gameStatIDs[i]; if (gameStatID == 0) @@ -1169,7 +1351,7 @@ static void PrintStoryList(void) CopyWindowToVram(sStorytellerWindowId, 3); } -static void Task_StoryListMenu(u8 taskId) // Task_StoryListMenu +static void Task_StoryListMenu(u8 taskId) { struct Task *task = &gTasks[taskId]; s32 selection; diff --git a/src/menu.c b/src/menu.c index 8d50d4dcc..056fc6a9d 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "blit.h" #include "dma3.h" @@ -1433,13 +1433,13 @@ s8 sub_8199284(void) sub_8199134(0, 1); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { PlaySE(SE_SELECT); sub_8199134(-1, 0); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { PlaySE(SE_SELECT); sub_8199134(1, 0); @@ -1474,13 +1474,13 @@ s8 Menu_ProcessInputGridLayout(void) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { if (oldPos != sub_81991F8(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { if (oldPos != sub_81991F8(1, 0)) PlaySE(SE_SELECT); @@ -1513,13 +1513,13 @@ s8 sub_81993D8(void) sub_8199134(0, 1); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || sub_812210C() == 1) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { PlaySE(SE_SELECT); sub_8199134(-1, 0); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || sub_812210C() == 2) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { PlaySE(SE_SELECT); sub_8199134(1, 0); @@ -1554,13 +1554,13 @@ s8 sub_8199484(void) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || sub_812210C() == 1) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT || GetLRKeysPressedAndHeld() == MENU_L_PRESSED) { if (oldPos != sub_81991F8(-1, 0)) PlaySE(SE_SELECT); return MENU_NOTHING_CHOSEN; } - else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || sub_812210C() == 2) + else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT || GetLRKeysPressedAndHeld() == MENU_R_PRESSED) { if (oldPos != sub_81991F8(1, 0)) PlaySE(SE_SELECT); @@ -1868,7 +1868,7 @@ u16 copy_decompressed_tile_data_to_vram(u8 bgId, const void *src, u16 size, u16 } } -void sub_8199C30(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette) +void SetBgTilemapPalette(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette) { u8 i; u8 j; @@ -1883,7 +1883,7 @@ void sub_8199C30(u8 bgId, u8 left, u8 top, u8 width, u8 height, u8 palette) } } -void sub_8199CBC(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height) +void CopyToBufferFromBgTilemap(u8 bgId, u16 *dest, u8 left, u8 top, u8 width, u8 height) { u8 i; u8 j; @@ -2148,18 +2148,18 @@ void sub_819A344(u8 a0, u8 *dest, u8 color) break; case 1: if (IsNationalPokedexEnabled()) - string = ConvertIntToDecimalStringN(string, GetNationalPokedexCount(1), 0, 3); + string = ConvertIntToDecimalStringN(string, GetNationalPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 3); else - string = ConvertIntToDecimalStringN(string, GetHoennPokedexCount(1), 0, 3); + string = ConvertIntToDecimalStringN(string, GetHoennPokedexCount(FLAG_GET_CAUGHT), STR_CONV_MODE_LEFT_ALIGN, 3); *string = EOS; break; case 2: - string = ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeHours, 0, 3); + string = ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); *(string++) = CHAR_COLON; - ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeMinutes, 2, 2); + ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); break; case 3: - sub_81245DC(string, gMapHeader.regionMapSectionId); + GetMapNameGeneric(string, gMapHeader.regionMapSectionId); break; case 4: for (curFlag = FLAG_BADGE01_GET, flagCount = 0, endOfString = string + 1; curFlag <= FLAG_BADGE08_GET; curFlag++) diff --git a/src/menu_helpers.c b/src/menu_helpers.c index cb0d621c6..2b7a7f419 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -251,27 +251,27 @@ bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1) return FALSE; } -u8 GetLRKeysState(void) +u8 GetLRKeysPressed(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { if (gMain.newKeys & L_BUTTON) - return 1; + return MENU_L_PRESSED; if (gMain.newKeys & R_BUTTON) - return 2; + return MENU_R_PRESSED; } return 0; } -u8 sub_812210C(void) +u8 GetLRKeysPressedAndHeld(void) { if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { if (gMain.newAndRepeatedKeys & L_BUTTON) - return 1; + return MENU_L_PRESSED; if (gMain.newAndRepeatedKeys & R_BUTTON) - return 2; + return MENU_R_PRESSED; } return 0; diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 1536cf413..75317e3ff 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle_main.h" #include "contest_effect.h" #include "data.h" @@ -761,7 +761,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) AddTextPrinterParameterized(0, 1, str, 4, 0x19, TEXT_SPEED_FF, NULL); x = 4 + GetStringWidth(1, gText_MoveRelearnerPP, 0); - ConvertIntToDecimalStringN(buffer, move->pp, 0, 2); + ConvertIntToDecimalStringN(buffer, move->pp, STR_CONV_MODE_LEFT_ALIGN, 2); AddTextPrinterParameterized(0, 1, buffer, x, 0x29, TEXT_SPEED_FF, NULL); if (move->power < 2) @@ -770,7 +770,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) } else { - ConvertIntToDecimalStringN(buffer, move->power, 0, 3); + ConvertIntToDecimalStringN(buffer, move->power, STR_CONV_MODE_LEFT_ALIGN, 3); str = buffer; } AddTextPrinterParameterized(0, 1, str, 0x6A, 0x19, TEXT_SPEED_FF, NULL); @@ -781,7 +781,7 @@ static void MoveRelearnerLoadBattleMoveDescription(u32 chosenMove) } else { - ConvertIntToDecimalStringN(buffer, move->accuracy, 0, 3); + ConvertIntToDecimalStringN(buffer, move->accuracy, STR_CONV_MODE_LEFT_ALIGN, 3); str = buffer; } AddTextPrinterParameterized(0, 1, str, 0x6A, 0x29, TEXT_SPEED_FF, NULL); diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index 8f5b2d636..0d7fb7699 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -4,7 +4,7 @@ #include "gpu_regs.h" #include "palette.h" #include "decompress.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "pokemon_icon.h" #include "union_room.h" @@ -61,7 +61,7 @@ void sub_801C178(u8 whichWindow); void sub_801C4C0(void); void sub_801C61C(void); -extern const struct OamData gUnknown_08524934; +extern const struct OamData gOamData_AffineOff_ObjNormal_32x16; const u8 gUnknown_082F0E10[][3] = { {0, 2, 3}, @@ -138,7 +138,7 @@ const struct SpritePalette gUnknown_082F1D08[] = { {gWonderCardShadowPal8, 0x8000} }; const struct SpriteTemplate gUnknown_082F1D48 = { - 0x8000, 0x8000, &gUnknown_08524934, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + 0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; const struct UnkStruct_8467FB8 gUnknown_082F1D60[8] = { {1, 0, 0, 0, gWonderCardBgGfx1, gWonderCardBgTilemap1, gWonderCardBgPal1}, diff --git a/src/mevent_client.c b/src/mevent_client.c index ec8908af2..659b772df 100644 --- a/src/mevent_client.c +++ b/src/mevent_client.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "overworld.h" #include "script.h" diff --git a/src/mevent_server.c b/src/mevent_server.c index 06b10dd95..0d3afea30 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "script.h" #include "mevent.h" #include "mevent_server.h" diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c index 9d47ba745..616f394f7 100644 --- a/src/mevent_server_helpers.c +++ b/src/mevent_server_helpers.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "util.h" #include "link.h" diff --git a/src/mirage_tower.c b/src/mirage_tower.c index bb9c6e958..0c2b8ce74 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "event_data.h" #include "event_object_movement.h" diff --git a/src/mossdeep_gym.c b/src/mossdeep_gym.c deleted file mode 100644 index 880780638..000000000 --- a/src/mossdeep_gym.c +++ /dev/null @@ -1,314 +0,0 @@ -#include "global.h" -#include "event_object_movement.h" -#include "fieldmap.h" -#include "alloc.h" -#include "mossdeep_gym.h" -#include "script_movement.h" -#include "constants/event_object_movement_constants.h" -#include "constants/event_objects.h" - -// Movement scripts. -extern const u8 gUnknown_08612698[]; -extern const u8 gUnknown_0861269C[]; -extern const u8 gUnknown_086126A0[]; -extern const u8 gUnknown_086126A4[]; -extern const u8 gUnknown_086126A8[]; -extern const u8 gUnknown_086126AA[]; -extern const u8 gUnknown_086126AC[]; -extern const u8 gUnknown_086126AE[]; - -struct MossdeepSubStruct -{ - u8 unk0; - u8 eventTemplateId; -}; - -struct MossdeepStruct -{ - struct MossdeepSubStruct objects[EVENT_OBJECTS_COUNT]; - u8 count; - bool8 unk41; -}; - -// This file's functions. -static void AddEventObject(u8 eventTemplateId, u8 arg1); -static void sub_81A8D94(u8 eventTemplateId, u8 arg1); - -// EWRAM vars -EWRAM_DATA static struct MossdeepStruct *gUnknown_0203CE50 = NULL; - -// code -void InitMossdeepGymTiles(bool8 arg0) -{ - if (gUnknown_0203CE50 == NULL) - gUnknown_0203CE50 = AllocZeroed(sizeof(*gUnknown_0203CE50)); - - gUnknown_0203CE50->unk41 = arg0; -} - -void FinishMossdeepGymTiles(void) -{ - u8 id; - - if (gUnknown_0203CE50 != NULL) - FREE_AND_SET_NULL(gUnknown_0203CE50); - - id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); - EventObjectClearHeldMovementIfFinished(&gEventObjects[id]); - ScriptMovement_UnfreezeEventObjects(); -} - -u16 MossdeepGym_MoveEvents(u8 arg0) -{ - u8 i; - struct EventObjectTemplate *events = gSaveBlock1Ptr->eventObjectTemplates; - u16 localId = 0; - - for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++) - { - s32 var; - u8 r5; - s16 x = events[i].x + 7; - s16 y = events[i].y + 7; - u16 metatile = MapGridGetMetatileIdAt(x, y); - - if (!gUnknown_0203CE50->unk41) - var = 0x250; - else - var = 0x298; - - if (metatile < 0x250) - continue; - - if ((u8)((metatile - var) / 8) >= 5) - continue; - if ((u8)((metatile - var) / 8) != arg0) - continue; - - r5 = (u8)((metatile - var) % 8); - if (r5 < 4) - { - s8 x = 0; - s8 y = 0; - const u8 *movementScript; - - switch (r5) - { - case 0: - movementScript = gUnknown_08612698; - x = 1; - break; - case 1: - movementScript = gUnknown_0861269C; - y = 1; - break; - case 2: - movementScript = gUnknown_086126A0; - x = -1; - break; - case 3: - movementScript = gUnknown_086126A4; - y = -1; - break; - default: - continue; - } - - events[i].x += x; - events[i].y += y; - if (GetEventObjectIdByLocalIdAndMap(events[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup) != EVENT_OBJECTS_COUNT) - { - AddEventObject(i, r5); - localId = events[i].localId; - ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript); - } - else - { - sub_81A8D94(i, r5); - } - } - } - - return localId; -} - -void MossdeepGym_TurnEvents(void) -{ - u8 i; - s32 var; - struct EventObjectTemplate *events; - - if (gUnknown_0203CE50 == NULL) - return; - - if (!gUnknown_0203CE50->unk41) - var = 0x250; - else - var = 0x298; - - events = gSaveBlock1Ptr->eventObjectTemplates; - for (i = 0; i < gUnknown_0203CE50->count; i++) - { - s32 r6; - s8 r0; - u8 eventObjectId; - s16 x = events[gUnknown_0203CE50->objects[i].eventTemplateId].x + 7; - s16 y = events[gUnknown_0203CE50->objects[i].eventTemplateId].y + 7; - u16 metatile = MapGridGetMetatileIdAt(x, y); - - r0 = (u8)((metatile - var) % 8); - r0 -= (gUnknown_0203CE50->objects[i].unk0); - if (r0 < 0 || r0 == 3) - { - if (r0 == -3) - r6 = 1; - else - r6 = 0; - } - else - { - if (r0 > 0) - r6 = 1; - else - r6 = 2; - } - - eventObjectId = GetEventObjectIdByLocalIdAndMap(events[gUnknown_0203CE50->objects[i].eventTemplateId].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - if (eventObjectId != EVENT_OBJECTS_COUNT) - { - const u8 *movementScript; - u8 direction = gEventObjects[eventObjectId].facingDirection; - if (r6 == 0) - { - switch (direction) - { - case DIR_EAST: - movementScript = gUnknown_086126AE; - events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; - break; - case DIR_SOUTH: - movementScript = gUnknown_086126A8; - events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; - break; - case DIR_WEST: - movementScript = gUnknown_086126AA; - events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; - break; - case DIR_NORTH: - movementScript = gUnknown_086126AC; - events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; - break; - default: - continue; - } - ScriptMovement_StartObjectMovementScript(events[gUnknown_0203CE50->objects[i].eventTemplateId].localId, - gSaveBlock1Ptr->location.mapNum, - gSaveBlock1Ptr->location.mapGroup, - movementScript); - } - else if (r6 == 1) - { - switch (direction) - { - case DIR_EAST: - movementScript = gUnknown_086126AA; - events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; - break; - case DIR_SOUTH: - movementScript = gUnknown_086126AC; - events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; - break; - case DIR_WEST: - movementScript = gUnknown_086126AE; - events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; - break; - case DIR_NORTH: - movementScript = gUnknown_086126A8; - events[gUnknown_0203CE50->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; - break; - default: - continue; - } - ScriptMovement_StartObjectMovementScript(events[gUnknown_0203CE50->objects[i].eventTemplateId].localId, - gSaveBlock1Ptr->location.mapNum, - gSaveBlock1Ptr->location.mapGroup, - movementScript); - } - } - } -} - -static void AddEventObject(u8 eventTemplateId, u8 arg1) -{ - gUnknown_0203CE50->objects[gUnknown_0203CE50->count].eventTemplateId = eventTemplateId; - gUnknown_0203CE50->objects[gUnknown_0203CE50->count].unk0 = arg1; - gUnknown_0203CE50->count++; -} - -static void sub_81A8D94(u8 eventTemplateId, u8 arg1) -{ - s8 r0; - s32 r6; - s32 var; - u16 movementType; - struct EventObjectTemplate *events = gSaveBlock1Ptr->eventObjectTemplates; - s16 x = events[eventTemplateId].x + 7; - s16 y = events[eventTemplateId].y + 7; - u16 metatile = MapGridGetMetatileIdAt(x, y); - - if (!gUnknown_0203CE50->unk41) - var = 0x250; - else - var = 0x298; - - r0 = (u8)((metatile - var) % 8); - r0 -= arg1; - if (r0 < 0 || r0 == 3) - r6 = 0; - else if (r0 > 0 || r0 == -3) - r6 = 1; - else - r6 = 2; - - movementType = events[eventTemplateId].movementType; - if (r6 == 0) - { - switch (movementType) - { - case MOVEMENT_TYPE_FACE_RIGHT: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; - break; - case MOVEMENT_TYPE_FACE_DOWN: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; - break; - case MOVEMENT_TYPE_FACE_LEFT: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; - break; - case MOVEMENT_TYPE_FACE_UP: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; - break; - default: - break; - } - } - else if (r6 == 1) - { - switch (movementType) - { - case MOVEMENT_TYPE_FACE_RIGHT: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; - break; - case MOVEMENT_TYPE_FACE_DOWN: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; - break; - case MOVEMENT_TYPE_FACE_LEFT: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; - break; - case MOVEMENT_TYPE_FACE_UP: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; - break; - default: - break; - } - } -} diff --git a/src/move_relearner.c b/src/move_relearner.c index 867c6c995..b5202e006 100644 --- a/src/move_relearner.c +++ b/src/move_relearner.c @@ -9,7 +9,7 @@ #include "gpu_regs.h" #include "move_relearner.h" #include "list_menu.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "menu_helpers.h" #include "menu_specialized.h" @@ -513,7 +513,7 @@ static void DoMoveRelearnerMain(void) if (selection == 0) { - if (GiveMoveToMon(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove()) != 0xFFFF) + if (GiveMoveToMon(&gPlayerParty[sMoveRelearnerStruct->partyMon], GetCurrentSelectedMove()) != MON_HAS_MAX_MOVES) { FormatAndPrintText(gText_MoveRelearnerPkmnLearnedMove); gSpecialVar_0x8004 = TRUE; @@ -778,7 +778,7 @@ static void HandleInput(bool8 showContest) switch (itemId) { case LIST_NOTHING_CHOSEN: - if (!(gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysState()) + if (!(gMain.newKeys & (DPAD_LEFT | DPAD_RIGHT)) && !GetLRKeysPressed()) { break; } diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index c77a48615..14c00fd96 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -152,7 +152,7 @@ static void CB2_MysteryEventMenu(void) if (!IsTextPrinterActive(0)) { gMain.state++; - gLinkType = 0x5501; + gLinkType = LINKTYPE_0x5501; OpenLink(); } break; diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c index dba914b51..76f340c60 100644 --- a/src/mystery_event_script.c +++ b/src/mystery_event_script.c @@ -286,7 +286,7 @@ bool8 MEScrCmd_givenationaldex(struct ScriptContext *ctx) bool8 MEScrCmd_addrareword(struct ScriptContext *ctx) { - sub_811EFC0(ScriptReadByte(ctx)); + UnlockAdditionalPhrase(ScriptReadByte(ctx)); StringExpandPlaceholders(gStringVar4, gText_MysteryGiftRareWord); ctx->data[2] = 2; return FALSE; diff --git a/src/mystery_gift.c b/src/mystery_gift.c index ab3df9020..aae7d127e 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -2,7 +2,7 @@ #include "main.h" #include "text.h" #include "task.h" -#include "alloc.h" +#include "malloc.h" #include "gpu_regs.h" #include "scanline_effect.h" #include "text_window.h" diff --git a/src/naming_screen.c b/src/naming_screen.c index 472489a26..73eda32c8 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1,6 +1,6 @@ #include "global.h" #include "naming_screen.h" -#include "alloc.h" +#include "malloc.h" #include "palette.h" #include "task.h" #include "sprite.h" @@ -34,27 +34,11 @@ extern u16 gKeyRepeatStartDelay; // extern text extern const u8 gExpandedPlaceholder_Empty[]; -extern const u8 gText_PkmnTransferredSomeonesPC[]; -extern const u8 gText_PkmnTransferredLanettesPC[]; -extern const u8 gText_PkmnBoxSomeonesPCFull[]; -extern const u8 gText_PkmnBoxLanettesPCFull[]; extern const u8 gText_MoveOkBack[]; extern const u8 gText_YourName[]; extern const u8 gText_BoxName[]; extern const u8 gText_PkmnsNickname[]; extern const u8 gText_TellHimTheWords[]; -extern const u8 gUnknown_0862B88D[]; -extern const u8 gUnknown_0862B8AE[]; -extern const u8 gUnknown_0862B8CF[]; -extern const u8 gUnknown_0862B8F0[]; -extern const u8 gUnknown_0862B911[]; -extern const u8 gUnknown_0862B932[]; -extern const u8 gUnknown_0862B953[]; -extern const u8 gUnknown_0862B974[]; -extern const u8 gUnknown_0862B995[]; -extern const u8 gUnknown_0862B9AE[]; -extern const u8 gUnknown_0862B9C7[]; -extern const u8 gUnknown_0862B9E0[]; // start of .rodata @@ -63,12 +47,12 @@ static const u8 gSpriteImage_858BCB8[] = INCBIN_U8("graphics/naming_screen/pc_ic static const u16 gUnknown_0858BD78[] = INCBIN_U16("graphics/naming_screen/0.gbapal"); static const u16 gUnknown_0858BD98[] = INCBIN_U16("graphics/naming_screen/1.gbapal"); -static const u8 *const gUnknown_0858BDB8[] = +static const u8 *const sTransferredToPCMessages[] = { gText_PkmnTransferredSomeonesPC, gText_PkmnTransferredLanettesPC, - gText_PkmnBoxSomeonesPCFull, - gText_PkmnBoxLanettesPCFull + gText_PkmnTransferredSomeonesPCBoxFull, + gText_PkmnTransferredLanettesPCBoxFull }; static const u8 gUnknown_0858BDC8[] = _("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!"); @@ -171,7 +155,7 @@ static const struct SpriteTemplate gUnknown_0858C138; static const struct SpriteTemplate sSpriteTemplate_InputArrow; static const struct SpriteTemplate sSpriteTemplate_Underscore; static const struct SpriteTemplate gUnknown_0858C180; -static const u8* const gUnknown_0858C198[][4]; +static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT]; static const struct SpriteSheet gUnknown_0858C1C8[]; static const struct SpritePalette gUnknown_0858C230[]; @@ -428,35 +412,52 @@ static void sub_80E31B0(u8 taskId) } } -static const u8 gUnknown_0858BEBB[] = { 0, 2, 1 }; -static const u8 gUnknown_0858BEBE[] = { 1, 0, 2 }; -static const u8 gUnknown_0858BEC1[] = { 2, 1, 0 }; +static const u8 sPageOrderLowerFirst[] = +{ + KBPAGE_LETTERS_LOWER, + KBPAGE_SYMBOLS, + KBPAGE_LETTERS_UPPER +}; + +static const u8 sPageOrderUpperFirst[] = +{ + KBPAGE_LETTERS_UPPER, + KBPAGE_LETTERS_LOWER, + KBPAGE_SYMBOLS +}; + +static const u8 sPageOrderSymbolsFirst[] = +{ + KBPAGE_SYMBOLS, + KBPAGE_LETTERS_UPPER, + KBPAGE_LETTERS_LOWER +}; static u8 sub_80E3244(u8 a1) { - return gUnknown_0858BEBB[a1]; + return sPageOrderLowerFirst[a1]; } static u8 sub_80E3254(void) { - return gUnknown_0858BEBE[gNamingScreenData->currentPage]; + return sPageOrderUpperFirst[gNamingScreenData->currentPage]; } static u8 sub_80E3274(void) { - return gUnknown_0858BEC1[gNamingScreenData->currentPage]; + return sPageOrderSymbolsFirst[gNamingScreenData->currentPage]; } static bool8 MainState_BeginFadeIn(void) { sub_80E4CF8(3, gUnknown_08DD4544); - gNamingScreenData->currentPage = PAGE_UPPER; + gNamingScreenData->currentPage = KBPAGE_LETTERS_UPPER; sub_80E4CF8(2, gUnknown_08DD46E0); sub_80E4CF8(1, gUnknown_08DD4620); - sub_80E4DE4(gNamingScreenData->windows[1], 0); - sub_80E4DE4(gNamingScreenData->windows[0], 1); - nullsub_10(2, 0); - nullsub_10(1, 1); + sub_80E4DE4(gNamingScreenData->windows[1], KBPAGE_LETTERS_LOWER); + sub_80E4DE4(gNamingScreenData->windows[0], KBPAGE_LETTERS_UPPER); + nullsub_10(2, KBPAGE_LETTERS_LOWER); + nullsub_10(1, KBPAGE_LETTERS_UPPER); sub_80E4D10(); sub_80E4964(); sub_80E4EF0(); @@ -557,7 +558,7 @@ static void DisplaySentToPCMessage(void) if (FlagGet(FLAG_SYS_PC_LANETTE)) stringToDisplay++; - StringExpandPlaceholders(gStringVar4, gUnknown_0858BDB8[stringToDisplay]); + StringExpandPlaceholders(gStringVar4, sTransferredToPCMessages[stringToDisplay]); DrawDialogueFrame(0, 0); gTextFlags.canABSpeedUpPrint = TRUE; AddTextPrinterParameterized2(0, 1, gStringVar4, GetPlayerTextSpeedDelay(), 0, 2, 1, 3); @@ -1660,7 +1661,7 @@ static void sub_80E4CF8(u8 bg, const void *src) CopyToBgTilemapBuffer(bg, src, 0, 0); } -static void nullsub_10(u8 a1, u8 a2) +static void nullsub_10(u8 a1, u8 page) { } @@ -1703,29 +1704,29 @@ static const struct TextColorThing sUnkColorStruct = } }; -static const u8 sFillValues[3] = +static const u8 sFillValues[KBPAGE_COUNT] = { - PIXEL_FILL(0xE), - PIXEL_FILL(0xD), - PIXEL_FILL(0xF) + [KBPAGE_LETTERS_LOWER] = PIXEL_FILL(0xE), + [KBPAGE_LETTERS_UPPER] = PIXEL_FILL(0xD), + [KBPAGE_SYMBOLS] = PIXEL_FILL(0xF) }; -static const u8 *const sUnkColors[3] = +static const u8 *const sUnkColors[KBPAGE_COUNT] = { - sUnkColorStruct.colors[1], - sUnkColorStruct.colors[0], - sUnkColorStruct.colors[2] + [KBPAGE_LETTERS_LOWER] = sUnkColorStruct.colors[1], + [KBPAGE_LETTERS_UPPER] = sUnkColorStruct.colors[0], + [KBPAGE_SYMBOLS] = sUnkColorStruct.colors[2] }; -static void sub_80E4DE4(u8 window, u8 a1) +static void sub_80E4DE4(u8 window, u8 page) { u8 i; - FillWindowPixelBuffer(window, sFillValues[a1]); + FillWindowPixelBuffer(window, sFillValues[page]); - for (i = 0; i < 4; i++) + for (i = 0; i < KBROW_COUNT; i++) { - AddTextPrinterParameterized3(window, 1, 0, i * 16 + 1, sUnkColors[a1], 0, gUnknown_0858C198[a1][i]); + AddTextPrinterParameterized3(window, 1, 0, i * 16 + 1, sUnkColors[page], 0, sNamingScreenKeyboardText[page][i]); } PutWindowTilemap(window); @@ -1857,7 +1858,7 @@ static const struct NamingScreenTemplate playerNamingScreenTemplate = .maxChars = 7, .iconFunction = 1, .addGenderIcon = 0, - .initialPage = PAGE_UPPER, + .initialPage = KBPAGE_LETTERS_UPPER, .unused = 35, .title = gText_YourName, }; @@ -1868,7 +1869,7 @@ static const struct NamingScreenTemplate pcBoxNamingTemplate = .maxChars = 8, .iconFunction = 2, .addGenderIcon = 0, - .initialPage = PAGE_UPPER, + .initialPage = KBPAGE_LETTERS_UPPER, .unused = 19, .title = gText_BoxName, }; @@ -1879,7 +1880,7 @@ static const struct NamingScreenTemplate monNamingScreenTemplate = .maxChars = 10, .iconFunction = 3, .addGenderIcon = 1, - .initialPage = PAGE_UPPER, + .initialPage = KBPAGE_LETTERS_UPPER, .unused = 35, .title = gText_PkmnsNickname, }; @@ -1890,7 +1891,7 @@ static const struct NamingScreenTemplate wandaWordsScreenTemplate = .maxChars = 15, .iconFunction = 4, .addGenderIcon = 0, - .initialPage = PAGE_UPPER, + .initialPage = KBPAGE_LETTERS_UPPER, .unused = 11, .title = gText_TellHimTheWords, }; @@ -2144,25 +2145,28 @@ static const struct SpriteTemplate gUnknown_0858C180 = .callback = SpriteCallbackDummy }; -static const u8* const gUnknown_0858C198[][4] = +static const u8* const sNamingScreenKeyboardText[KBPAGE_COUNT][KBROW_COUNT] = { + [KBPAGE_LETTERS_LOWER] = { - gUnknown_0862B88D, - gUnknown_0862B8AE, - gUnknown_0862B8CF, - gUnknown_0862B8F0 + gText_NamingScreenKeyboard_abcdef, + gText_NamingScreenKeyboard_ghijkl, + gText_NamingScreenKeyboard_mnopqrs, + gText_NamingScreenKeyboard_tuvwxyz }, + [KBPAGE_LETTERS_UPPER] = { - gUnknown_0862B911, - gUnknown_0862B932, - gUnknown_0862B953, - gUnknown_0862B974 + gText_NamingScreenKeyboard_ABCDEF, + gText_NamingScreenKeyboard_GHIJKL, + gText_NamingScreenKeyboard_MNOPQRS, + gText_NamingScreenKeyboard_TUVWXYZ }, + [KBPAGE_SYMBOLS] = { - gUnknown_0862B995, - gUnknown_0862B9AE, - gUnknown_0862B9C7, - gUnknown_0862B9E0 + gText_NamingScreenKeyboard_01234, + gText_NamingScreenKeyboard_56789, + gText_NamingScreenKeyboard_Symbols1, + gText_NamingScreenKeyboard_Symbols2 }, }; diff --git a/src/normal.c b/src/normal.c index 2b592e199..7864dd9a3 100644 --- a/src/normal.c +++ b/src/normal.c @@ -64,7 +64,7 @@ const struct SpriteTemplate gConfusionDuckSpriteTemplate = { .tileTag = ANIM_TAG_DUCK, .paletteTag = ANIM_TAG_DUCK, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_08597254, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -112,7 +112,7 @@ const struct SpriteTemplate gUnknown_085972C0 = { .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085972BC, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -169,7 +169,7 @@ const struct SpriteTemplate gBasicHitSplatSpriteTemplate = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gUnknown_08524A94, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597348, @@ -180,7 +180,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8597370 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gUnknown_08524A94, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597348, @@ -191,7 +191,7 @@ const struct SpriteTemplate gUnknown_08597388 = { .tileTag = ANIM_TAG_WATER_IMPACT, .paletteTag = ANIM_TAG_WATER_IMPACT, - .oam = &gUnknown_08524A94, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597348, @@ -202,7 +202,7 @@ const struct SpriteTemplate gUnknown_085973A0 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gUnknown_08524A94, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597348, @@ -213,7 +213,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_85973B8 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gUnknown_08524A94, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597348, @@ -224,7 +224,7 @@ const struct SpriteTemplate gUnknown_085973D0 = { .tileTag = ANIM_TAG_CROSS_IMPACT, .paletteTag = ANIM_TAG_CROSS_IMPACT, - .oam = &gUnknown_08524A34, + .oam = &gOamData_AffineOff_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -235,7 +235,7 @@ const struct SpriteTemplate gUnknown_085973E8 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597348, @@ -246,7 +246,7 @@ const struct SpriteTemplate gUnknown_08597400 = { .tileTag = ANIM_TAG_IMPACT, .paletteTag = ANIM_TAG_IMPACT, - .oam = &gUnknown_08524A94, + .oam = &gOamData_AffineNormal_ObjBlend_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08597348, diff --git a/src/overworld.c b/src/overworld.c index 0cac8390a..55afe2fcf 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -26,7 +26,7 @@ #include "link_rfu.h" #include "load_save.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "m4a.h" #include "map_name_popup.h" #include "match_call.h" @@ -85,9 +85,9 @@ extern const u8 EventScript_WhiteOut[]; extern const u8 EventScript_ResetMrBriney[]; extern const u8 EventScript_DoLinkRoomExit[]; -extern const u8 gEventScript_TradeRoom_TooBusyToNotice[]; -extern const u8 gEventScript_TradeRoom_ReadTrainerCard_NoColor[]; -extern const u8 gEventScript_TradeRoom_ReadTrainerCard_Normal[]; +extern const u8 CableClub_EventScript_TooBusyToNotice[]; +extern const u8 CableClub_EventScript_ReadTrainerCard[]; +extern const u8 CableClub_EventScript_ReadTrainerCardColored[]; extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot0[]; extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot1[]; extern const u8 EventScript_DoubleBattleColosseum_PlayerSpot2[]; @@ -1183,7 +1183,7 @@ void Overworld_ClearSavedMusic(void) static void sub_8085810(void) { - if (FlagGet(FLAG_SPECIAL_FLAG_0x4001) != TRUE) + if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE) { u16 newMusic = GetWarpDestinationMusic(); u16 currentMusic = GetCurrentMapMusic(); @@ -1231,7 +1231,7 @@ void TryFadeOutOldMapMusic(void) { u16 currentMusic = GetCurrentMapMusic(); u16 warpMusic = GetWarpDestinationMusic(); - if (FlagGet(FLAG_SPECIAL_FLAG_0x4001) != TRUE && warpMusic != GetCurrentMapMusic()) + if (FlagGet(FLAG_DONT_TRANSITION_MUSIC) != TRUE && warpMusic != GetCurrentMapMusic()) { if (currentMusic == MUS_NAMINORI && VarGet(VAR_SKY_PILLAR_STATE) == 2 @@ -2742,7 +2742,7 @@ static bool32 PlayerIsAtSouthExit(struct TradeRoomPlayer *player) return FALSE; else if (!MetatileBehavior_IsSouthArrowWarp(player->field_C)) return FALSE; - else if (player->facing != 1) + else if (player->facing != DIR_SOUTH) return FALSE; else return TRUE; @@ -2765,13 +2765,13 @@ static const u8 *TryInteractWithPlayer(struct TradeRoomPlayer *player) if (linkPlayerId != 4) { if (!player->isLocalPlayer) - return gEventScript_TradeRoom_TooBusyToNotice; + return CableClub_EventScript_TooBusyToNotice; else if (sPlayerTradingStates[linkPlayerId] != PLAYER_TRADING_STATE_IDLE) - return gEventScript_TradeRoom_TooBusyToNotice; + return CableClub_EventScript_TooBusyToNotice; else if (!GetLinkTrainerCardColor(linkPlayerId)) - return gEventScript_TradeRoom_ReadTrainerCard_NoColor; + return CableClub_EventScript_ReadTrainerCard; else - return gEventScript_TradeRoom_ReadTrainerCard_Normal; + return CableClub_EventScript_ReadTrainerCardColored; } return GetInteractedLinkPlayerScript(&otherPlayerPos, player->field_C, player->facing); diff --git a/src/party_menu.c b/src/party_menu.c index f4b749bde..c711881b0 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_anim.h" #include "battle_controllers.h" @@ -72,11 +72,26 @@ #include "constants/items.h" #include "constants/maps.h" #include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" #include "constants/species.h" #include "constants/vars.h" +#define PARTY_PAL_SELECTED (1 << 0) +#define PARTY_PAL_FAINTED (1 << 1) +#define PARTY_PAL_TO_SWITCH (1 << 2) +#define PARTY_PAL_MULTI_ALT (1 << 3) +#define PARTY_PAL_SWITCHING (1 << 4) +#define PARTY_PAL_TO_SOFTBOIL (1 << 5) +#define PARTY_PAL_NO_MON (1 << 6) +#define PARTY_PAL_UNUSED (1 << 7) + +#define MENU_DIR_DOWN 1 +#define MENU_DIR_UP -1 +#define MENU_DIR_RIGHT 2 +#define MENU_DIR_LEFT -2 + enum { CAN_LEARN_MOVE, @@ -85,28 +100,28 @@ enum CANNOT_LEARN_MOVE_IS_EGG }; -struct Unk_Rodata1 +struct PartyMenuBoxInfoRects { - void (*unk0)(u8, u8, u8, u8, u8, u8); - u8 unk4[24]; - u8 unk1C; - u8 unk1D; - u8 unk1E; - u8 unk1F; + void (*blitFunc)(u8, u8, u8, u8, u8, u8); + u8 dimensions[24]; + u8 descTextLeft; + u8 descTextTop; + u8 descTextWidth; + u8 descTextHeight; }; -struct Struct203CEC4 +struct PartyMenuInternal { TaskFunc task; MainCallback exitCallback; - u32 unk8_0:1; - u32 unk8_1:3; - u32 unk8_2:7; - u32 unk9_0:7; + u32 chooseHalf:1; + u32 lastSelectedSlot:3; // Used to return to same slot when going left/right bewtween columns + u32 spriteIdConfirmPokeball:7; + u32 spriteIdCancelPokeball:7; u32 messageId:14; u8 windowId[3]; u8 actions[8]; - u8 listSize; + u8 numActions; // In vanilla Emerald, only the first 0xB0 hwords (0x160 bytes) are actually used. // However, a full 0x100 hwords (0x200 bytes) are allocated. // It is likely that the 0x160 value used below is a constant defined by @@ -115,10 +130,10 @@ struct Struct203CEC4 s16 data[16]; }; -struct Struct203CEDC +struct PartyMenuBox { - const struct Unk_Rodata1 *unk0; - const u8 *unk4; + const struct PartyMenuBoxInfoRects *infoRects; + const u8 *spriteCoords; u8 windowId; u8 monSpriteId; u8 itemSpriteId; @@ -127,268 +142,267 @@ struct Struct203CEDC }; // EWRAM vars -static EWRAM_DATA struct Struct203CEC4 *gUnknown_0203CEC4 = NULL; -EWRAM_DATA struct Struct203CEC8 gUnknown_0203CEC8 = {0}; -static EWRAM_DATA struct Struct203CEDC *gUnknown_0203CEDC = NULL; -static EWRAM_DATA u8 *gUnknown_0203CEE0 = NULL; -static EWRAM_DATA u8 *gUnknown_0203CEE4 = NULL; -EWRAM_DATA u8 gUnknown_0203CEE8 = 0; -EWRAM_DATA u8 gUnknown_0203CEE9 = 0; +static EWRAM_DATA struct PartyMenuInternal *sPartyMenuInternal = NULL; +EWRAM_DATA struct PartyMenu gPartyMenu = {0}; +static EWRAM_DATA struct PartyMenuBox *sPartyMenuBoxes = NULL; +static EWRAM_DATA u8 *sPartyBgGfxTilemap = NULL; +static EWRAM_DATA u8 *sPartyBgTilemapBuffer = NULL; +EWRAM_DATA bool8 gPartyMenuUseExitCallback = 0; +EWRAM_DATA u8 gSelectedMonPartyId = 0; EWRAM_DATA MainCallback gPostMenuFieldCallback = NULL; -static EWRAM_DATA u16 *gUnknown_0203CEF0 = 0; -static EWRAM_DATA u16 *gUnknown_0203CEF4 = 0; +static EWRAM_DATA u16 *sSlot1TilemapBuffer = 0; // for switching party slots +static EWRAM_DATA u16 *sSlot2TilemapBuffer = 0; // EWRAM_DATA u8 gSelectedOrderFromParty[4] = {0}; -static EWRAM_DATA u16 gUnknown_0203CEFC = 0; -static EWRAM_DATA u16 gUnknown_0203CEFE = 0; // unused -EWRAM_DATA u8 gUnknown_0203CF00[3] = {0}; +static EWRAM_DATA u16 sPartyMenuItemId = 0; +static EWRAM_DATA u16 sUnused_0203CEFE = 0; +EWRAM_DATA u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2] = {0}; // bits 0-3 are the current pos of Slot 1, 4-7 are Slot 2, and so on // IWRAM common -void (*gUnknown_03006328)(u8, TaskFunc); +void (*gItemUseCB)(u8, TaskFunc); -static void reset_brm(void); -static void PartyMenuInitCallback(void); -static bool8 PartyMenuSetup(void); -static void sub_81B209C(void); -static void PartyMenuExit(void); +static void ResetPartyMenu(void); +static void CB2_InitPartyMenu(void); +static bool8 ShowPartyMenu(void); +static void SetPartyMonsAllowedInMinigame(void); +static void ExitPartyMenu(void); static bool8 AllocPartyMenuBg(void); -static bool8 AllocPartyMiscGfx(void); -static void sub_81B239C(u8); -static void PartyMenuInitHelperStructs(u8); +static bool8 AllocPartyMenuBgGfx(void); +static void InitPartyMenuWindows(u8); +static void InitPartyMenuBoxes(u8); static void LoadPartyMenuPokeballGfx(void); static void LoadPartyMenuAilmentGfx(void); -static bool8 party_menu_add_per_mon_objects(void); +static bool8 CreatePartyMonSpritesLoop(void); static bool8 RenderPartyMenuBoxes(void); -static void sub_81B0F28(void); -static void sub_81B2428(u8); -static void PartyMenuExitTask(u8); +static void CreateCancelConfirmPokeballSprites(void); +static void CreateCancelConfirmWindows(u8); +static void Task_ExitPartyMenu(u8); static void FreePartyPointers(void); static void PartyPaletteBufferCopy(u8); -static void sub_81B0CEC(u8); -static void UpdateSelectedPartyBox(struct Struct203CEDC *, u8); +static void DisplayPartyPokemonDataForMultiBattle(u8); +static void LoadPartyBoxPalette(struct PartyMenuBox *, u8); static void DrawEmptySlot(u8 windowId); -static void DisplayPartyPokemonSelectForRelearner(u8); -static void DisplayPartyPokemonSelectForContest(u8); -static void DisplayPartyPokemonSelectForBattle(u8); -static void sub_81B0B98(u8); -static void DisplayPartyPokemonSelectHeldItemRelated(u8); -static bool8 sub_81B0BFC(u8); +static void DisplayPartyPokemonDataForRelearner(u8); +static void DisplayPartyPokemonDataForContest(u8); +static void DisplayPartyPokemonDataForChooseHalf(u8); +static void DisplayPartyPokemonDataForWirelessMinigame(u8); +static void DisplayPartyPokemonDataForBattlePyramidHeldItem(u8); +static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8); static void DisplayPartyPokemonData(u8); -static void DisplayPartyPokemonNickname(struct Pokemon *, struct Struct203CEDC *, u8); -static void DisplayPartyPokemonLevelCheck(struct Pokemon *, struct Struct203CEDC *, u8); -static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *, struct Struct203CEDC *, u8); -static void DisplayPartyPokemonHPCheck(struct Pokemon *, struct Struct203CEDC *, u8); -static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *, struct Struct203CEDC *, u8); -static void DisplayPartyPokemonHPBarCheck(struct Pokemon *, struct Struct203CEDC *); -static void DisplayPartyPokemonOtherText(u8, struct Struct203CEDC *, u8); -static u8 sub_81B8830(void); -static bool8 GetBattleEntryEligibility(struct Pokemon *); -static bool8 sub_81B218C(u8); -static void DisplayPartyPokemonSelectToTeachMove(u8, u16, u8); +static void DisplayPartyPokemonNickname(struct Pokemon *, struct PartyMenuBox *, u8); +static void DisplayPartyPokemonLevelCheck(struct Pokemon *, struct PartyMenuBox *, u8); +static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *, struct PartyMenuBox *, u8); +static void DisplayPartyPokemonHPCheck(struct Pokemon *, struct PartyMenuBox *, u8); +static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *, struct PartyMenuBox *, u8); +static void DisplayPartyPokemonHPBarCheck(struct Pokemon *, struct PartyMenuBox *); +static void DisplayPartyPokemonDescriptionText(u8, struct PartyMenuBox *, u8); +static bool8 IsMonAllowedInMinigame(u8); +static void DisplayPartyPokemonDataToTeachMove(u8, u16, u8); static u8 CanMonLearnTMTutor(struct Pokemon *, u16, u8); static void DisplayPartyPokemonBarDetail(u8, const u8*, u8, const u8*); -static void DisplayPartyPokemonLevel(u8, struct Struct203CEDC *); -static void DisplayPartyPokemonGender(u8, u16, u8*, struct Struct203CEDC *); -static void DisplayPartyPokemonHP(u16, struct Struct203CEDC *); -static void DisplayPartyPokemonMaxHP(u16, struct Struct203CEDC *); -static void DisplayPartyPokemonHPBar(u16, u16, struct Struct203CEDC *); -static void party_menu_link_mon_icon_anim(u16, u32, struct Struct203CEDC *, u8, u32); -static void party_menu_link_mon_held_item_object(u16, u16, struct Struct203CEDC *); -static void party_menu_link_mon_pokeball_object(u16, struct Struct203CEDC *); -static void party_menu_link_mon_status_condition_object(u16, u8, struct Struct203CEDC *); -static void party_menu_held_item_object(struct Pokemon *, struct Struct203CEDC *); -static void party_menu_pokeball_object(struct Pokemon *, struct Struct203CEDC *); -static void party_menu_icon_anim(struct Pokemon *, struct Struct203CEDC *, u32); -static void party_menu_status_condition_object(struct Pokemon *, struct Struct203CEDC *); -static u8 sub_81B5F74(u8, u8); -static void sub_81B120C(void); -static u8 sub_81B5F34(u8, u8); +static void DisplayPartyPokemonLevel(u8, struct PartyMenuBox *); +static void DisplayPartyPokemonGender(u8, u16, u8*, struct PartyMenuBox *); +static void DisplayPartyPokemonHP(u16, struct PartyMenuBox *); +static void DisplayPartyPokemonMaxHP(u16, struct PartyMenuBox *); +static void DisplayPartyPokemonHPBar(u16, u16, struct PartyMenuBox *); +static void CreatePartyMonIconSpriteParameterized(u16, u32, struct PartyMenuBox *, u8, u32); +static void CreatePartyMonHeldItemSpriteParameterized(u16, u16, struct PartyMenuBox *); +static void CreatePartyMonPokeballSpriteParameterized(u16, struct PartyMenuBox *); +static void CreatePartyMonStatusSpriteParameterized(u16, u8, struct PartyMenuBox *); +// These next 4 functions are essentially redundant with the above 4 +// The only difference is that rather than receive the data directly they retrieve it from the mon struct +static void CreatePartyMonHeldItemSprite(struct Pokemon *, struct PartyMenuBox *); +static void CreatePartyMonPokeballSprite(struct Pokemon *, struct PartyMenuBox *); +static void CreatePartyMonIconSprite(struct Pokemon *, struct PartyMenuBox *, u32); +static void CreatePartyMonStatusSprite(struct Pokemon *, struct PartyMenuBox *); +static u8 CreateSmallPokeballButtonSprite(u8, u8); +static void DrawCancelConfirmButtons(void); +static u8 CreatePokeballButtonSprite(u8, u8); static void AnimateSelectedPartyIcon(u8, u8); -static void sub_81B5F98(u8, u8); -static u8 GetPartyBoxPalBitfield(u8, u8); +static void PartyMenuStartSpriteAnim(u8, u8); +static u8 GetPartyBoxPaletteFlags(u8, u8); static bool8 PartyBoxPal_ParnterOrDisqualifiedInArena(u8); -static u8 sub_81B8F38(u8); -static void c3_0811FAB4(u8); -static void sub_81B9080(void); -static void sub_81B4F88(void); -static void sub_81B15D0(u8, s8*); -static void sub_81B140C(u8, s8*); +static u8 GetPartyIdFromBattleSlot(u8); +static void Task_ClosePartyMenuAndSetCB2(u8); +static void UpdatePartyToFieldOrder(void); +static void MoveCursorToConfirm(void); +static void HandleChooseMonCancel(u8, s8*); +static void HandleChooseMonSelection(u8, s8*); static u16 PartyMenuButtonHandler(s8*); -static s8* sub_81B13EC(void); -static bool8 sub_81B15A4(u8*); -static void sub_81B302C(u8*); -static void sub_81B9140(void); -static void sub_81B6794(u8); -static void sub_81B7E4C(u8); -static void sub_81B8474(u8); -static void sub_81B7FAC(u8); -static void sub_81B3938(u8); -static void sub_81B21AC(u8, u8); -static void sub_81B36FC(u8); -static void sub_81B407C(u8); -static void sub_81B2210(u8); -static bool8 sub_81B1660(u8); -static const u8* sub_81B88BC(void); -static void sub_81B16D4(u8); -static void sub_81B334C(void); -static void sub_81B1708(u8); -static void sub_81B1C1C(u8); +static s8* GetCurrentPartySlotPtr(void); +static bool8 IsSelectedMonNotEgg(u8*); +static void PartyMenuRemoveWindow(u8*); +static void CB2_SetUpExitToBattleScreen(void); +static void Task_ClosePartyMenuAfterText(u8); +static void TryTutorSelectedMon(u8); +static void TryGiveMailToSelectedMon(u8); +static void TryGiveItemOrMailToSelectedMon(u8); +static void SwitchSelectedMons(u8); +static void TryEnterMonForMinigame(u8, u8); +static void Task_TryCreateSelectionWindow(u8); +static void FinishTwoMonAction(u8); +static void CancelParticipationPrompt(u8); +static bool8 DisplayCancelChooseMonYesNo(u8); +static const u8* GetFacilityCancelString(void); +static void Task_CancelChooseMonYesNo(u8); +static void PartyMenuDisplayYesNoMenu(void); +static void Task_HandleCancelChooseMonYesNoInput(u8); +static void Task_ReturnToChooseMonAfterText(u8); static void UpdateCurrentPartySelection(s8*, s8); -static void SetNewPartySelectTarget1(s8*, s8); -static void SetNewPartySelectTarget2(s8*, s8); -static s8 sub_81B1B00(s8, s8); -static void sub_81B3300(const u8*); -static void sub_81B1B8C(u8); -static void DisplayPartyPokemonHPCheck(struct Pokemon*, struct Struct203CEDC*, u8); -static void DisplayPartyPokemonHPBarCheck(struct Pokemon*, struct Struct203CEDC*); -static bool16 sub_81B2134(struct Pokemon*); -static bool16 sub_81B2164(struct Pokemon*); -static void sub_81B2248(u8); -static void sub_81B227C(u8); +static void UpdatePartySelectionSingleLayout(s8*, s8); +static void UpdatePartySelectionDoubleLayout(s8*, s8); +static s8 GetNewSlotDoubleLayout(s8, s8); +static void PartyMenuPrintText(const u8*); +static void Task_PrintAndWaitForText(u8); +static bool16 IsMonAllowedInPokemonJump(struct Pokemon*); +static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon*); +static void Task_CancelParticipationYesNo(u8); +static void Task_HandleCancelParticipationYesNoInput(u8); static bool8 CanLearnTutorMove(u16, u8); static u16 GetTutorMove(u8); -static bool8 sub_81B314C(void); -static void CreateActionList(struct Pokemon*, u8); -static u8 sub_81B8A2C(struct Pokemon*); -static u8 sub_81B856C(s8); -static void sub_81B469C(u8); -static void HandleMenuInput(u8); -static void sub_81B3828(void); -static void pokemon_change_order(void); -static void sub_81B3894(void); -static void sub_81B3CC0(u8); -static void sub_81B3D48(u8); -static void swap_pokemon_and_oams(void); -static void sub_81B3E60(u8); -static void sub_81B41C4(void); -static void c2_8123744(void); -static void sub_81B452C(void); -static void sub_81B4350(u8); -static void sub_81B42D0(u8); -static void sub_81B43A8(u8); -static void sub_81B43DC(u8); -static void sub_81B44FC(u8); -static void sub_81B4578(void); -static void sub_81B4624(u8); -static void sub_81B5C94(struct Pokemon*, struct Struct203CEDC*); -static void sub_81B48A8(u8); -static void sub_81B48DC(u8); -static void sub_81B4988(u8); -static void sub_81B4A98(void); -static void sub_81B4AE0(void); -static void sub_81B4B6C(u8); -static void sub_81B4BA0(u8); -static void sub_81B4C60(u8); -static void sub_81B4C94(u8); -static bool8 sub_81B8A7C(void); -static void sub_81B53FC(u8); -static void sub_81B5430(u8); -static void task_brm_cancel_1_on_keypad_a_or_b(u8); -static void sub_81B5674(u8); -static void sub_81B57DC(void); -static void sub_81B5864(void); -static void sub_81B56A4(u8); -static void sub_81B56D8(u8); -static void task_launch_hm_phase_2(u8); -static u16 brm_get_selected_species(void); -static void sub_81B5B38(u8, struct Pokemon*); -static void UpdatePartyMonIconFrame(struct Sprite*); -static void UpdatePartyMonIconFrameAndBounce(struct Sprite*); -static void sub_81B5CB0(u16, struct Struct203CEDC*); -static void sub_81B5DF0(u8, u8); +static bool8 ShouldUseChooseMonText(void); +static void SetPartyMonFieldSelectionActions(struct Pokemon*, u8); +static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon*); +static u8 GetPartySlotEntryStatus(s8); +static void Task_UpdateHeldItemSprite(u8); +static void Task_HandleSelectionMenuInput(u8); +static void CB2_ShowPokemonSummaryScreen(void); +static void UpdatePartyToBattleOrder(void); +static void CB2_ReturnToPartyMenuFromSummaryScreen(void); +static void SlidePartyMenuBoxOneStep(u8); +static void Task_SlideSelectedSlotsOffscreen(u8); +static void SwitchPartyMon(void); +static void Task_SlideSelectedSlotsOnscreen(u8); +static void CB2_SelectBagItemToGive(void); +static void CB2_GiveHoldItem(void); +static void CB2_WriteMailToGiveMon(void); +static void Task_SwitchHoldItemsPrompt(u8); +static void Task_GiveHoldItem(u8); +static void Task_SwitchItemsYesNo(u8); +static void Task_HandleSwitchItemsYesNoInput(u8); +static void Task_WriteMailToGiveMonAfterText(u8); +static void CB2_ReturnToPartyMenuFromWritingMail(void); +static void Task_DisplayGaveMailFromPartyMessage(u8); +static void UpdatePartyMonHeldItemSprite(struct Pokemon*, struct PartyMenuBox*); +static void Task_TossHeldItemYesNo(u8 taskId); +static void Task_HandleTossHeldItemYesNoInput(u8); +static void Task_TossHeldItem(u8); +static void CB2_ReadHeldMail(void); +static void CB2_ReturnToPartyMenuFromReadingMail(void); +static void Task_SendMailToPCYesNo(u8); +static void Task_HandleSendMailToPCYesNoInput(u8); +static void Task_LoseMailMessageYesNo(u8); +static void Task_HandleLoseMailMessageYesNoInput(u8); +static bool8 TrySwitchInPokemon(void); +static void Task_SpinTradeYesNo(u8); +static void Task_HandleSpinTradeYesNoInput(u8); +static void Task_CancelAfterAorBPress(u8); +static void DisplayFieldMoveExitAreaMessage(u8); +static void DisplayCantUseFlashMessage(void); +static void DisplayCantUseSurfMessage(void); +static void Task_FieldMoveExitAreaYesNo(u8); +static void Task_HandleFieldMoveExitAreaYesNoInput(u8); +static void Task_FieldMoveWaitForFade(u8); +static u16 GetFieldMoveMonSpecies(void); +static void UpdatePartyMonHPBar(u8, struct Pokemon*); +static void SpriteCB_UpdatePartyMonIcon(struct Sprite*); +static void SpriteCB_BouncePartyMonIcon(struct Sprite*); +static void ShowOrHideHeldItemSprite(u16, struct PartyMenuBox*); +static void CreateHeldItemSpriteForTrade(u8, bool8); static void SpriteCB_HeldItem(struct Sprite*); -static void party_menu_get_status_condition_and_update_object(struct Pokemon*, struct Struct203CEDC*); -static void party_menu_update_status_condition_object(u8, struct Struct203CEDC*); -static u8 sub_81B8984(void); -static void sub_81B6280(u8); -static void c2_815ABFC(void); -static void sub_81B672C(u8); +static void SetPartyMonAilmentGfx(struct Pokemon*, struct PartyMenuBox*); +static void UpdatePartyMonAilmentGfx(u8, struct PartyMenuBox*); +static u8 GetPartyLayoutFromBattleType(void); +static void Task_SetSacredAshCB(u8); +static void CB2_ReturnToBagMenu(void); +static void Task_DisplayHPRestoredMessage(u8); static u16 ItemEffectToMonEv(struct Pokemon*, u8); static void ItemEffectToStatString(u8, u8*); -static void sub_81B6BB4(u8); -static void ether_effect_related_2(u8); -static void ether_effect_related(u8); -static void sub_81B6EB4(u8); -static void sub_81B6FF4(u8); -static void sub_81B6F60(u8); -static void sub_81B6F98(u8); -static void sub_81B77AC(u8); -static void sub_81B7028(u8); -static void sub_81B7088(u8); -static void sub_81B7230(u8); -static void sub_81B70B8(void); -static void sub_81B70F0(void); -static void sub_81B711C(u8); -static void sub_81B7154(u8); -static void sub_81B71D4(u8); -static void sub_81B7294(u8); -static void sub_81B72C8(u8); -static void sub_81B73E4(u8); -static void sub_81B79A0(struct Pokemon*, s16*); -static void sub_81B754C(u8, struct Pokemon*); -static void sub_81B75D4(u8); -static void sub_81B767C(u8); -static void sub_81B7634(u8); -static void sub_81B76C8(u8); -static void sub_81B7704(u8); -static void sub_81B7810(u8); -static void sub_81B787C(u8); -static void sub_81B7910(u8, u16); -static void sub_81B7A28(u8); -static void task_sacred_ash_party_loop(u8); -static void sub_81B7C10(u8); -static void sub_81B8044(u8); -static void sub_81B83B8(u8); -static void sub_81B82A0(u8); -static void sub_81B83F0(u16); -static void sub_81B814C(void); -static void sub_81B8088(u8); -static void sub_81B8104(u8); -static void sub_81B81A8(void); -static bool8 sub_81B841C(u16); -static void sub_81B8230(u8); -static void sub_81B82D4(u8); -static void sub_81B879C(u8); +static void ReturnToUseOnWhichMon(u8); +static void SetSelectedMoveForPPItem(u8); +static void TryUsePPItem(u8); +static void Task_LearnedMove(u8); +static void Task_ReplaceMoveYesNo(u8); +static void Task_DoLearnedMoveFanfareAfterText(u8); +static void Task_LearnNextMoveOrClosePartyMenu(u8); +static void Task_TryLearningNextMove(u8); +static void Task_HandleReplaceMoveYesNoInput(u8); +static void Task_ShowSummaryScreenToForgetMove(u8); +static void StopLearningMovePrompt(u8); +static void CB2_ShowSummaryScreenToForgetMove(void); +static void CB2_ReturnToPartyMenuWhileLearningMove(void); +static void Task_ReturnToPartyMenuWhileLearningMove(u8); +static void DisplayPartyMenuForgotMoveMessage(u8); +static void Task_PartyMenuReplaceMove(u8); +static void Task_StopLearningMoveYesNo(u8); +static void Task_HandleStopLearningMoveYesNoInput(u8); +static void Task_TryLearningNextMoveAfterText(u8); +static void BufferMonStatsToTaskData(struct Pokemon*, s16*); +static void UpdateMonDisplayInfoAfterRareCandy(u8, struct Pokemon*); +static void Task_DisplayLevelUpStatsPg1(u8); +static void DisplayLevelUpStatsPg1(u8); +static void Task_DisplayLevelUpStatsPg2(u8); +static void DisplayLevelUpStatsPg2(u8); +static void Task_TryLearnNewMoves(u8); +static void PartyMenuTryEvolution(u8); +static void DisplayMonNeedsToReplaceMove(u8); +static void DisplayMonLearnedMove(u8, u16); +static void UseSacredAsh(u8); +static void Task_SacredAshLoop(u8); +static void Task_SacredAshDisplayHPRestored(u8); +static void GiveItemOrMailToSelectedMon(u8); +static void DisplayItemMustBeRemovedFirstMessage(u8); +static void Task_SwitchItemsFromBagYesNo(u8); +static void RemoveItemToGiveFromBag(u16); +static void CB2_WriteMailToGiveMonFromBag(void); +static void GiveItemToSelectedMon(u8); +static void Task_UpdateHeldItemSpriteAndClosePartyMenu(u8); +static void CB2_ReturnToPartyOrBagMenuFromWritingMail(void); +static bool8 ReturnGiveItemToBagOrPC(u16); +static void Task_DisplayGaveMailFromBagMessage(u8); +static void Task_HandleSwitchItemsFromBagYesNoInput(u8); +static void Task_ValidateChosenHalfParty(u8); static bool8 GetBattleEntryEligibility(struct Pokemon*); -static bool8 sub_81B8770(u8); -static u8 sub_81B8888(void); -static u8 sub_81B885C(void); -static void sub_81B87E8(u8); -static void sub_81B8C88(u8*, bool8); -static void sub_81B8D88(u8*, u8, u8); -static void sub_81B917C(u8); -static void sub_81B91B4(u8); -static void sub_81B9294(u8); -static void sub_81B9240(u8); -static void sub_81B9390(void); -static void task_hm_without_phase_2(u8); -static void sub_81B9424(u8); -static void sub_81B9470(void); -static void sub_81B94D0(u8); -static void sub_81B953C(u8); -static void sub_81B9588(void); -static void sub_81B9640(u8); -static void sub_81B97DC(struct Pokemon*, u8, u8); -static void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f); -static void BlitBitmapToPartyWindow_Default2(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f); -static void CursorCb_Summary(u8 taskId); -static void CursorCb_Switch(u8 taskId); -static void CursorCb_Cancel1(u8 taskId); -static void CursorCb_Item(u8 taskId); -static void CursorCb_Give(u8 taskId); -static void CursorCb_TakeItem(u8 taskId); -static void CursorCb_Mail(u8 taskId); -static void CursorCb_Read(u8 taskId); -static void CursorCb_TakeMail(u8 taskId); -static void CursorCb_Cancel2(u8 taskId); -static void CursorCb_SendMon(u8 taskId); -static void CursorCb_Enter(u8 taskId); -static void CursorCb_NoEntry(u8 taskId); -static void CursorCb_Store(u8 taskId); -static void CursorCb_Register(u8 taskId); -static void CursorCb_Trade1(u8 taskId); -static void CursorCb_Trade2(u8 taskId); -static void CursorCb_Toss(u8 taskId); -static void CursorCb_FieldMove(u8 taskId); +static bool8 HasPartySlotAlreadyBeenSelected(u8); +static u8 GetBattleEntryLevelCap(void); +static u8 GetMaxBattleEntries(void); +static u8 GetMinBattleEntries(void); +static void Task_ContinueChoosingHalfParty(u8); +static void BufferBattlePartyOrder(u8*, bool8); +static void BufferBattlePartyOrderBySide(u8*, u8, u8); +static void Task_InitMultiPartnerPartySlideIn(u8); +static void Task_MultiPartnerPartySlideIn(u8); +static void SlideMultiPartyMenuBoxSpritesOneStep(u8); +static void Task_WaitAfterMultiPartnerPartySlideIn(u8); +static void BufferMonSelection(void); +static void Task_PartyMenuWaitForFade(u8 taskId); +static void Task_ChooseContestMon(u8 taskId); +static void CB2_ChooseContestMon(void); +static void Task_ChoosePartyMon(u8 taskId); +static void Task_ChooseMonForMoveRelearner(u8); +static void CB2_ChooseMonForMoveRelearner(void); +static void Task_BattlePyramidChooseMonHeldItems(u8); +static void ShiftMoveSlot(struct Pokemon*, u8, u8); +static void BlitBitmapToPartyWindow_LeftColumn(u8, u8, u8, u8, u8, u8); +static void BlitBitmapToPartyWindow_RightColumn(u8, u8, u8, u8, u8, u8); +static void CursorCb_Summary(u8); +static void CursorCb_Switch(u8); +static void CursorCb_Cancel1(u8); +static void CursorCb_Item(u8); +static void CursorCb_Give(u8); +static void CursorCb_TakeItem(u8); +static void CursorCb_Mail(u8); +static void CursorCb_Read(u8); +static void CursorCb_TakeMail(u8); +static void CursorCb_Cancel2(u8); +static void CursorCb_SendMon(u8); +static void CursorCb_Enter(u8); +static void CursorCb_NoEntry(u8); +static void CursorCb_Store(u8); +static void CursorCb_Register(u8); +static void CursorCb_Trade1(u8); +static void CursorCb_Trade2(u8); +static void CursorCb_Toss(u8); +static void CursorCb_FieldMove(u8); static bool8 SetUpFieldMove_Surf(void); static bool8 SetUpFieldMove_Fly(void); static bool8 SetUpFieldMove_Waterfall(void); @@ -396,1234 +410,56 @@ static bool8 SetUpFieldMove_Dive(void); // static const data #include "data/pokemon/tutor_learnsets.h" - -static const struct BgTemplate gUnknown_086156B8[] = -{ - { - .bg = 0, - .charBaseIndex = 0, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 1, - .charBaseIndex = 0, - .mapBaseIndex = 30, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 0, - .mapBaseIndex = 28, - .screenSize = 1, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, -}; - -static const struct Unk_Rodata1 gUnknown_086156C4[] = -{ - {BlitBitmapToPartyWindow_Default1, {0x18, 0xB, 0x28, 0xD, 0x20, 0x14, 0x20, 8, 0x40, 0x14, 8, 8, 0x26, 0x25, 0x18, 8, 0x35, 0x25, 0x18, 8, 0x18, 0x23, 0x30, 3}, 0xC, 0x22, 0x40, 0x10}, - {BlitBitmapToPartyWindow_Default2, {0x16, 3, 0x28, 0xD, 0x1E, 0xC, 0x20, 8, 0x3E, 0xC, 8, 8, 0x66, 0xC, 0x18, 8, 0x75, 0xC, 0x18, 8, 0x58, 0xA, 0x30, 3}, 0x4D, 4, 0x40, 0x10}, -}; - -static const u8 gUnknown_08615704[][6][8] = -{ - { - {16, 40, 20, 50, 50, 52, 16, 34}, - {104, 18, 108, 28, 136, 27, 102, 25}, - {104, 42, 108, 52, 136, 51, 102, 49}, - {104, 66, 108, 76, 136, 75, 102, 73}, - {104, 90, 108, 100, 136, 99, 102, 97}, - {104, 114, 108, 124, 136, 123, 102, 121}, - }, - { - {16, 24, 20, 34, 50, 36, 16, 18}, - {16, 80, 20, 90, 50, 92, 16, 74}, - {104, 18, 108, 28, 136, 27, 102, 25}, - {104, 50, 108, 60, 136, 59, 102, 57}, - {104, 82, 108, 92, 136, 91, 102, 89}, - {104, 114, 108, 124, 136, 123, 102, 121}, - }, - { - {16, 24, 20, 34, 50, 36, 16, 18}, - {16, 80, 20, 90, 50, 92, 16, 74}, - {104, 26, 106, 36, 136, 35, 102, 33}, - {104, 50, 106, 60, 136, 59, 102, 57}, - {104, 82, 106, 92, 136, 91, 102, 89}, - {104, 106, 106, 116, 136, 115, 102, 113}, - }, - { - {16, 32, 20, 42, 50, 44, 16, 26}, - {104, 34, 106, 44, 136, 43, 102, 41}, - {104, 58, 106, 68, 136, 67, 102, 65}, - {16, 104, 20, 114, 50, 116, 16, 98}, - {104, 106, 106, 116, 136, 115, 102, 113}, - {104, 130, 106, 140, 136, 139, 102, 137}, - }, -}; - -static const u32 gUnknown_086157C4[] = INCBIN_U32("graphics/interface/unknown_6157C4.bin"); -static const u32 gUnknown_086157E0[] = INCBIN_U32("graphics/interface/unknown_6157E0.bin"); - -static const u8 sFontColorTable[][3] = -{ - {0, 3, 2}, - {0, 1, 6}, - {0, 11, 12}, - {1, 2, 3}, - {1, 8, 9}, - {0, 1, 2}, -}; - -static const struct WindowTemplate gUnknown_08615810[] = -{ - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 3, - .width = 10, - .height = 7, - .paletteNum = 3, - .baseBlock = 0x63, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 1, - .width = 18, - .height = 3, - .paletteNum = 4, - .baseBlock = 0xA9, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 4, - .width = 18, - .height = 3, - .paletteNum = 5, - .baseBlock = 0xDF, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 7, - .width = 18, - .height = 3, - .paletteNum = 6, - .baseBlock = 0x115, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 10, - .width = 18, - .height = 3, - .paletteNum = 7, - .baseBlock = 0x14B, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 13, - .width = 18, - .height = 3, - .paletteNum = 8, - .baseBlock = 0x181, - }, - { - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 15, - .width = 28, - .height = 4, - .paletteNum = 14, - .baseBlock = 0x1DF, - }, - DUMMY_WIN_TEMPLATE -}; - -static const struct WindowTemplate gUnknown_08615850[] = -{ - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 10, - .height = 7, - .paletteNum = 3, - .baseBlock = 0x63, - }, - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 8, - .width = 10, - .height = 7, - .paletteNum = 4, - .baseBlock = 0xA9, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 1, - .width = 18, - .height = 3, - .paletteNum = 5, - .baseBlock = 0xEF, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 5, - .width = 18, - .height = 3, - .paletteNum = 6, - .baseBlock = 0x125, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 9, - .width = 18, - .height = 3, - .paletteNum = 7, - .baseBlock = 0x15B, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 13, - .width = 18, - .height = 3, - .paletteNum = 8, - .baseBlock = 0x191, - }, - { - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 15, - .width = 28, - .height = 4, - .paletteNum = 14, - .baseBlock = 0x1DF, - }, - DUMMY_WIN_TEMPLATE -}; - -static const struct WindowTemplate gUnknown_08615890[] = -{ - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 1, - .width = 10, - .height = 7, - .paletteNum = 3, - .baseBlock = 0x63, - }, - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 8, - .width = 10, - .height = 7, - .paletteNum = 4, - .baseBlock = 0xA9, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 2, - .width = 18, - .height = 3, - .paletteNum = 5, - .baseBlock = 0xEF, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 5, - .width = 18, - .height = 3, - .paletteNum = 6, - .baseBlock = 0x125, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 9, - .width = 18, - .height = 3, - .paletteNum = 7, - .baseBlock = 0x15B, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 12, - .width = 18, - .height = 3, - .paletteNum = 8, - .baseBlock = 0x191, - }, - { - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 15, - .width = 28, - .height = 4, - .paletteNum = 14, - .baseBlock = 0x1DF, - }, - DUMMY_WIN_TEMPLATE -}; - -static const struct WindowTemplate gUnknown_086158D0[] = -{ - { - .bg = 0, - .tilemapLeft = 1, - .tilemapTop = 2, - .width = 10, - .height = 7, - .paletteNum = 3, - .baseBlock = 0x63, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 3, - .width = 18, - .height = 3, - .paletteNum = 5, - .baseBlock = 0xA9, - }, - { - .bg = 0, - .tilemapLeft = 12, - .tilemapTop = 6, - .width = 18, - .height = 3, - .paletteNum = 6, - .baseBlock = 0xDF, - }, - { - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 11, - .width = 10, - .height = 7, - .paletteNum = 4, - .baseBlock = 0x115, - }, - { - .bg = 2, - .tilemapLeft = 12, - .tilemapTop = 12, - .width = 18, - .height = 3, - .paletteNum = 7, - .baseBlock = 0x16B, - }, - { - .bg = 2, - .tilemapLeft = 12, - .tilemapTop = 15, - .width = 18, - .height = 3, - .paletteNum = 8, - .baseBlock = 0x1A1, - }, - DUMMY_WIN_TEMPLATE -}; - -static const struct WindowTemplate gUnknown_08615908 = -{ - .bg = 0, - .tilemapLeft = 24, - .tilemapTop = 17, - .width = 6, - .height = 2, - .paletteNum = 3, - .baseBlock = 0x1C7, -}; - -static const struct WindowTemplate gUnknown_08615910 = -{ - .bg = 0, - .tilemapLeft = 24, - .tilemapTop = 18, - .width = 6, - .height = 2, - .paletteNum = 3, - .baseBlock = 0x1C7, -}; - -static const struct WindowTemplate gUnknown_08615918 = -{ - .bg = 0, - .tilemapLeft = 24, - .tilemapTop = 16, - .width = 6, - .height = 2, - .paletteNum = 3, - .baseBlock = 0x1D3, -}; - -static const struct WindowTemplate gUnknown_08615920 = -{ - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 17, - .width = 21, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x24F, -}; - -static const struct WindowTemplate gUnknown_08615928 = -{ - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 17, - .width = 16, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x279, -}; - -static const struct WindowTemplate gUnknown_08615930 = -{ - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 17, - .width = 20, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x299, -}; - -static const struct WindowTemplate gUnknown_08615938 = -{ - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 17, - .width = 18, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x299, -}; - -static const struct WindowTemplate gUnknown_08615940 = -{ - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 17, - .width = 16, - .height = 2, - .paletteNum = 15, - .baseBlock = 0x299, -}; - -static const struct WindowTemplate gUnknown_08615948 = -{ - .bg = 2, - .tilemapLeft = 1, - .tilemapTop = 15, - .width = 20, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x299, -}; - -static const struct WindowTemplate gUnknown_08615950 = -{ - .bg = 2, - .tilemapLeft = 23, - .tilemapTop = 13, - .width = 6, - .height = 6, - .paletteNum = 14, - .baseBlock = 0x39D, -}; - -static const struct WindowTemplate gUnknown_08615958 = -{ - .bg = 2, - .tilemapLeft = 21, - .tilemapTop = 13, - .width = 8, - .height = 6, - .paletteNum = 14, - .baseBlock = 0x39D, -}; - -static const struct WindowTemplate gUnknown_08615960 = -{ - .bg = 2, - .tilemapLeft = 19, - .tilemapTop = 11, - .width = 10, - .height = 8, - .paletteNum = 14, - .baseBlock = 0x2E9, -}; - -static const struct WindowTemplate gUnknown_08615968 = -{ - .bg = 2, - .tilemapLeft = 21, - .tilemapTop = 9, - .width = 5, - .height = 4, - .paletteNum = 14, - .baseBlock = 0x2E9, -}; - -static const struct WindowTemplate gUnknown_08615970 = -{ - .bg = 2, - .tilemapLeft = 19, - .tilemapTop = 1, - .width = 10, - .height = 11, - .paletteNum = 14, - .baseBlock = 0x2E9, -}; - -// Unused. -static const struct WindowTemplate gUnknown_08615978 = -{ - .bg = 2, - .tilemapLeft = 2, - .tilemapTop = 15, - .width = 27, - .height = 4, - .paletteNum = 14, - .baseBlock = 0x1DF, -}; - -// Unused. -static const struct WindowTemplate gUnknown_08615980 = -{ - .bg = 2, - .tilemapLeft = 0, - .tilemapTop = 13, - .width = 18, - .height = 3, - .paletteNum = 12, - .baseBlock = 0x39D, -}; - -static const u8 sMainSlotTileNums[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 40, 59, 60, 58, 58, 58, 58, 58, 58, 61, - 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, - 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; - -static const u8 sMainSlotTileNums_Egg[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, - 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, - 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, - 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; - -static const u8 sOtherSlotsTileNums[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, - 49, 33, 33, 33, 33, 33, 33, 33, 33, 52, 53, 51, 51, 51, 51, 51, 51, 54, - 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; - -static const u8 sOtherSlotsTileNums_Egg[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, - 49, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 50, - 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; - -static const u8 sEmptySlotTileNums[] = {21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, - 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39}; -static const u8 gUnknown_08615AB6[] = {11, 12}; -static const u8 gUnknown_08615AB8[] = {9, 10}; -static const u8 gUnknown_08615ABA[] = {4, 5, 6}; -static const u8 gUnknown_08615ABD[] = {1, 7, 8}; -static const u8 gUnknown_08615AC0[] = {1, 11, 12}; -static const u8 gUnknown_08615AC3[] = {59, 60}; -static const u8 gUnknown_08615AC5[] = {75, 76}; -static const u8 gUnknown_08615AC7[] = {57, 58}; -static const u8 gUnknown_08615AC9[] = {73, 74}; -static const u8 gUnknown_08615ACB[] = {89, 90}; -static const u8 gUnknown_08615ACD[] = {52, 53, 54}; -static const u8 gUnknown_08615AD0[] = {68, 69, 70}; -static const u8 gUnknown_08615AD3[] = {84, 85, 86}; -static const u8 gUnknown_08615AD6[] = {116, 117, 118}; -static const u8 gUnknown_08615AD9[] = {132, 133, 134}; -static const u8 gUnknown_08615ADC[] = {148, 149, 150}; -static const u8 gUnknown_08615ADF[] = {100, 101, 102}; -static const u8 gUnknown_08615AE2[] = {49, 55, 56}; -static const u8 gUnknown_08615AE5[] = {65, 71, 72}; -static const u8 gUnknown_08615AE8[] = {81, 87, 88}; -static const u8 gUnknown_08615AEB[] = {97, 103, 104}; -static const u8 gUnknown_08615AEE[] = {161, 167, 168}; -static const u8 gUnknown_08615AF1[] = {17, 27, 28}; - -static const u8 *const sActionStringTable[] = -{ - gText_ChoosePokemon, - gText_ChoosePokemonCancel, - gText_ChoosePokemonConfirm, - gText_MoveToWhere, - gText_TeachWhichPokemon, - gText_UseOnWhichPokemon, - gText_GiveToWhichPokemon, - gText_NothingToCut, - gText_CantSurfHere, - gText_AlreadySurfing, - gText_CurrentIsTooFast, - gText_EnjoyCycling, - gText_InUseAlready_PM, - gText_CantUseHere, - gText_NoPokemonForBattle, - gText_ChoosePokemon2, - gText_NotEnoughHp, - gText_PokemonAreNeeded, - gText_PokemonCantBeSame, - gText_NoIdenticalHoldItems, - gText_EmptyString2, - gText_DoWhatWithPokemon, - gText_RestoreWhichMove, - gText_BoostPp, - gText_DoWhatWithItem, - gText_DoWhatWithMail, - gText_AlreadyHoldingOne, -}; - -static const u8 *const sSelectionStringTable[] = -{ - gText_NoUse, - gText_Able, - gText_First_PM, - gText_Second_PM, - gText_Third_PM, - gText_Fourth, - gText_Able2, - gText_NotAble, - gText_Able3, - gText_NotAble2, - gText_Learned, - gText_Have, - gText_DontHave, -}; - -// Unknown unused data. Feel free to remove. -static const u16 gUnknown_08615B94[] = -{ - 0x0108, 0x0151, 0x0160, 0x015b, 0x002e, 0x005c, 0x0102, 0x0153, 0x014b, 0x00ed, 0x00f1, 0x010d, 0x003a, 0x003b, 0x003f, 0x0071, - 0x00b6, 0x00f0, 0x00ca, 0x00db, 0x00da, 0x004c, 0x00e7, 0x0055, 0x0057, 0x0059, 0x00d8, 0x005b, 0x005e, 0x00f7, 0x0118, 0x0068, - 0x0073, 0x015f, 0x0035, 0x00bc, 0x00c9, 0x007e, 0x013d, 0x014c, 0x0103, 0x0107, 0x0122, 0x009c, 0x00d5, 0x00a8, 0x00d3, 0x011d, - 0x0121, 0x013b, 0x000f, 0x0013, 0x0039, 0x0046, 0x0094, 0x00f9, 0x007f, 0x0123, -}; - -enum -{ - MENU_SUMMARY, - MENU_SWITCH, - MENU_CANCEL1, - MENU_ITEM, - MENU_GIVE, - MENU_TAKE_ITEM, - MENU_MAIL, - MENU_TAKE_MAIL, - MENU_READ, - MENU_CANCEL2, - MENU_SHIFT, - MENU_SEND_OUT, - MENU_ENTER, - MENU_NO_ENTRY, - MENU_STORE, - MENU_REGISTER, - MENU_TRADE1, - MENU_TRADE2, - MENU_TOSS, - MENU_FIELD_MOVES, -}; - -enum -{ - FIELD_MOVE_CUT, - FIELD_MOVE_FLASH, - FIELD_MOVE_ROCK_SMASH, - FIELD_MOVE_STRENGTH, - FIELD_MOVE_SURF, - FIELD_MOVE_FLY, - FIELD_MOVE_DIVE, - FIELD_MOVE_WATERFALL, - FIELD_MOVE_TELEPORT, - FIELD_MOVE_DIG, - FIELD_MOVE_SECRET_POWER, - FIELD_MOVE_MILK_DRINK, - FIELD_MOVE_SOFT_BOILED, - FIELD_MOVE_SWEET_SCENT, -}; - -// What a weird choice of table termination; -#define FIELD_MOVE_TERMINATOR MOVE_SWORDS_DANCE - -struct -{ - const u8 *text; - TaskFunc func; -} static const sCursorOptions[] = -{ - [MENU_SUMMARY] = {gText_Summary5, CursorCb_Summary}, - [MENU_SWITCH] = {gText_Switch2, CursorCb_Switch}, - [MENU_CANCEL1] = {gText_Cancel2, CursorCb_Cancel1}, - [MENU_ITEM] = {gText_Item, CursorCb_Item}, - [MENU_GIVE] = {gMenuText_Give, CursorCb_Give}, - [MENU_TAKE_ITEM] = {gText_Take, CursorCb_TakeItem}, - [MENU_MAIL] = {gText_Mail, CursorCb_Mail}, - [MENU_TAKE_MAIL] = {gText_Take2, CursorCb_TakeMail}, - [MENU_READ] = {gText_Read2, CursorCb_Read}, - [MENU_CANCEL2] = {gText_Cancel2, CursorCb_Cancel2}, - [MENU_SHIFT] = {gText_Shift, CursorCb_SendMon}, - [MENU_SEND_OUT] = {gText_SendOut, CursorCb_SendMon}, - [MENU_ENTER] = {gText_Enter, CursorCb_Enter}, - [MENU_NO_ENTRY] = {gText_NoEntry, CursorCb_NoEntry}, - [MENU_STORE] = {gText_Store, CursorCb_Store}, - [MENU_REGISTER] = {gText_Register, CursorCb_Register}, - [MENU_TRADE1] = {gText_Trade4, CursorCb_Trade1}, - [MENU_TRADE2] = {gText_Trade4, CursorCb_Trade2}, - [MENU_TOSS] = {gMenuText_Toss, CursorCb_Toss}, - [MENU_FIELD_MOVES + FIELD_MOVE_CUT] = {gMoveNames[MOVE_CUT], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_FLASH] = {gMoveNames[MOVE_FLASH], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_SMASH] = {gMoveNames[MOVE_ROCK_SMASH], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_STRENGTH] = {gMoveNames[MOVE_STRENGTH], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_SURF] = {gMoveNames[MOVE_SURF], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_FLY] = {gMoveNames[MOVE_FLY], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_DIVE] = {gMoveNames[MOVE_DIVE], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_WATERFALL] = {gMoveNames[MOVE_WATERFALL], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_TELEPORT] = {gMoveNames[MOVE_TELEPORT], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_DIG] = {gMoveNames[MOVE_DIG], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_SECRET_POWER] = {gMoveNames[MOVE_SECRET_POWER], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCb_FieldMove}, - [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCb_FieldMove}, -}; - -static const u8 gUnknown_08615D10[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1}; -static const u8 gUnknown_08615D13[] = {MENU_SHIFT, MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D16[] = {MENU_SEND_OUT, MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D19[] = {MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D1B[] = {MENU_ENTER, MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D1E[] = {MENU_NO_ENTRY, MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D21[] = {MENU_STORE, MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D24[] = {MENU_GIVE, MENU_TAKE_ITEM, MENU_CANCEL2}; -static const u8 gUnknown_08615D27[] = {MENU_READ, MENU_TAKE_MAIL, MENU_CANCEL2}; -static const u8 gUnknown_08615D2A[] = {MENU_REGISTER, MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D2D[] = {MENU_TRADE1, MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D30[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1}; -static const u8 gUnknown_08615D33[] = {MENU_TAKE_ITEM, MENU_TOSS, MENU_CANCEL1}; - -static const u8 *const sActionTable[] = -{ - NULL, - gUnknown_08615D10, - gUnknown_08615D13, - gUnknown_08615D16, - gUnknown_08615D1B, - gUnknown_08615D1E, - gUnknown_08615D21, - gUnknown_08615D19, - gUnknown_08615D24, - gUnknown_08615D27, - gUnknown_08615D2A, - gUnknown_08615D2D, - gUnknown_08615D30, - gUnknown_08615D33, -}; - -static const u8 sListSizeTable[] = -{ - 0x00, - ARRAY_COUNT(gUnknown_08615D10), - ARRAY_COUNT(gUnknown_08615D13), - ARRAY_COUNT(gUnknown_08615D16), - ARRAY_COUNT(gUnknown_08615D1B), - ARRAY_COUNT(gUnknown_08615D1E), - ARRAY_COUNT(gUnknown_08615D21), - ARRAY_COUNT(gUnknown_08615D19), - ARRAY_COUNT(gUnknown_08615D24), - ARRAY_COUNT(gUnknown_08615D27), - ARRAY_COUNT(gUnknown_08615D2A), - ARRAY_COUNT(gUnknown_08615D2D), - ARRAY_COUNT(gUnknown_08615D30), - ARRAY_COUNT(gUnknown_08615D33) -}; - -static const u16 sFieldMoves[] = -{ - MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, MOVE_TELEPORT, - MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, FIELD_MOVE_TERMINATOR -}; - -struct -{ - bool8 (*fieldMoveFunc)(void); - u8 msgId; -} static const sFieldMoveCursorCallbacks[] = -{ - [FIELD_MOVE_CUT] = {SetUpFieldMove_Cut, 0x07}, - [FIELD_MOVE_FLASH] = {SetUpFieldMove_Flash, 0x0d}, - [FIELD_MOVE_ROCK_SMASH] = {SetUpFieldMove_RockSmash, 0x0d}, - [FIELD_MOVE_STRENGTH] = {SetUpFieldMove_Strength, 0x0d}, - [FIELD_MOVE_SURF] = {SetUpFieldMove_Surf, 0x08}, - [FIELD_MOVE_FLY] = {SetUpFieldMove_Fly, 0x0d}, - [FIELD_MOVE_DIVE] = {SetUpFieldMove_Dive, 0x0d}, - [FIELD_MOVE_WATERFALL] = {SetUpFieldMove_Waterfall, 0x0d}, - [FIELD_MOVE_TELEPORT] = {SetUpFieldMove_Teleport, 0x0d}, - [FIELD_MOVE_DIG] = {SetUpFieldMove_Dig, 0x0d}, - [FIELD_MOVE_SECRET_POWER] = {SetUpFieldMove_SecretPower, 0x0d}, - [FIELD_MOVE_MILK_DRINK] = {SetUpFieldMove_SoftBoiled, 0x10}, - [FIELD_MOVE_SOFT_BOILED] = {SetUpFieldMove_SoftBoiled, 0x10}, - [FIELD_MOVE_SWEET_SCENT] = {SetUpFieldMove_SweetScent, 0x0d}, -}; - -static const u8 *const gUnknown_08615E0C[] = -{ - gText_NotPkmnOtherTrainerWants, - gText_ThatIsntAnEgg, - gText_PkmnCantBeTradedNow, - gText_PkmnCantBeTradedNow, - gText_OtherTrainersPkmnCantBeTraded, - gText_EggCantBeTradedNow, - gText_OtherTrainerCantAcceptPkmn, - gText_CantTradeWithTrainer, - gText_CantTradeWithTrainer, -}; - -static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp"); -static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal"); - -static const struct OamData sOamData_HeldItem = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(8x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(8x8), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd sSpriteAnim_HeldItem[] = -{ - ANIMCMD_FRAME(0, 1), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_HeldMail[] = -{ - ANIMCMD_FRAME(1, 1), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_HeldItem[] = -{ - sSpriteAnim_HeldItem, - sSpriteAnim_HeldMail, -}; - -static const struct SpriteSheet sSpriteSheet_HeldItem = -{ - sHeldItemGfx, sizeof(sHeldItemGfx), 0xd750 -}; - -static const struct SpritePalette sSpritePalette_HeldItem = -{ - sHeldItemPalette, 0xd750 -}; - -static const struct SpriteTemplate sSpriteTemplate_HeldItem = -{ - 0xd750, - 0xd750, - &sOamData_HeldItem, - sSpriteAnimTable_HeldItem, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy -}; - -static const struct OamData sOamData_MenuPokeball = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(32x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x32), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0 -}; - -static const union AnimCmd sPokeballAnim_Closed[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; - -static const union AnimCmd sPokeballAnim_Open[] = -{ - ANIMCMD_FRAME(16, 0), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_Pokeball[] = -{ - sPokeballAnim_Closed, - sPokeballAnim_Open -}; - -static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeball = -{ - gPartyMenuPokeball_Gfx, 0x400, 0x04b0 -}; - -static const struct CompressedSpritePalette sSpritePalette_MenuPokeball = -{ - gPartyMenuPokeball_Pal, 0x04b0 -}; - -static const struct SpriteTemplate sSpriteTemplate_MenuPokeball = -{ - .tileTag = 0x04b0, - .paletteTag = 0x04b0, - .oam = &sOamData_MenuPokeball, - .anims = sSpriteAnimTable_Pokeball, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -static const struct OamData sOamData_8615F20 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(16x16), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x16), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0 -}; - -static const union AnimCmd sSpriteAnim_8615F28[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_8615F30[] = -{ - ANIMCMD_FRAME(4, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_8615F38[] = -{ - ANIMCMD_FRAME(8, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_8615F40[] = -{ - ANIMCMD_FRAME(12, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_8615F48[] = -{ - ANIMCMD_FRAME(16, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_8615F50[] = -{ - ANIMCMD_FRAME(20, 0), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_8615F58[] = -{ - sSpriteAnim_8615F28, - sSpriteAnim_8615F30, - sSpriteAnim_8615F38, - sSpriteAnim_8615F40, - sSpriteAnim_8615F48, - sSpriteAnim_8615F50 -}; - -static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall = -{ - gPartyMenuPokeballSmall_Gfx, 0x0300, 0x04b1 -}; - -static const struct SpriteTemplate gSpriteTemplate_8615F78 = -{ - .tileTag = 1201, - .paletteTag = 1200, - .oam = &sOamData_8615F20, - .anims = sSpriteAnimTable_8615F58, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -static const struct OamData sOamData_StatusCondition = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(32x8), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(32x8), - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0 -}; - -static const union AnimCmd sSpriteAnim_StatusPoison[] = -{ - ANIMCMD_FRAME(0, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_StatusParalyzed[] = -{ - ANIMCMD_FRAME(4, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_StatusSleep[] = -{ - ANIMCMD_FRAME(8, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_StatusFrozen[] = -{ - ANIMCMD_FRAME(12, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_StatusBurn[] = -{ - ANIMCMD_FRAME(16, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_StatusPokerus[] = -{ - ANIMCMD_FRAME(20, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_StatusFaint[] = -{ - ANIMCMD_FRAME(24, 0), - ANIMCMD_END -}; - -static const union AnimCmd sSpriteAnim_Blank[] = -{ - ANIMCMD_FRAME(28, 0), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteTemplate_StatusCondition[] = -{ - sSpriteAnim_StatusPoison, - sSpriteAnim_StatusParalyzed, - sSpriteAnim_StatusSleep, - sSpriteAnim_StatusFrozen, - sSpriteAnim_StatusBurn, - sSpriteAnim_StatusPokerus, - sSpriteAnim_StatusFaint, - sSpriteAnim_Blank -}; - -static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons = -{ - gStatusGfx_Icons, 0x400, 1202 -}; - -static const struct CompressedSpritePalette sSpritePalette_StatusIcons = -{ - gStatusPal_Icons, 1202 -}; - -static const struct SpriteTemplate sSpriteTemplate_StatusIcons = -{ - .tileTag = 1202, - .paletteTag = 1202, - .oam = &sOamData_StatusCondition, - .anims = sSpriteTemplate_StatusCondition, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -static const u8 gUnknown_08616020[] = {0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00}; - -// Unused table of pointers to strings of statistics. -static const u8 *const gUnknown_08616028[] = -{ - gText_HP4, - gText_Attack3, - gText_Defense3, - gText_SpAtk4, - gText_SpDef4, - gText_Speed2 -}; - -static const u16 gTMHMMoves[] = -{ - MOVE_FOCUS_PUNCH, - MOVE_DRAGON_CLAW, - MOVE_WATER_PULSE, - MOVE_CALM_MIND, - MOVE_ROAR, - MOVE_TOXIC, - MOVE_HAIL, - MOVE_BULK_UP, - MOVE_BULLET_SEED, - MOVE_HIDDEN_POWER, - MOVE_SUNNY_DAY, - MOVE_TAUNT, - MOVE_ICE_BEAM, - MOVE_BLIZZARD, - MOVE_HYPER_BEAM, - MOVE_LIGHT_SCREEN, - MOVE_PROTECT, - MOVE_RAIN_DANCE, - MOVE_GIGA_DRAIN, - MOVE_SAFEGUARD, - MOVE_FRUSTRATION, - MOVE_SOLAR_BEAM, - MOVE_IRON_TAIL, - MOVE_THUNDERBOLT, - MOVE_THUNDER, - MOVE_EARTHQUAKE, - MOVE_RETURN, - MOVE_DIG, - MOVE_PSYCHIC, - MOVE_SHADOW_BALL, - MOVE_BRICK_BREAK, - MOVE_DOUBLE_TEAM, - MOVE_REFLECT, - MOVE_SHOCK_WAVE, - MOVE_FLAMETHROWER, - MOVE_SLUDGE_BOMB, - MOVE_SANDSTORM, - MOVE_FIRE_BLAST, - MOVE_ROCK_TOMB, - MOVE_AERIAL_ACE, - MOVE_TORMENT, - MOVE_FACADE, - MOVE_SECRET_POWER, - MOVE_REST, - MOVE_ATTRACT, - MOVE_THIEF, - MOVE_STEEL_WING, - MOVE_SKILL_SWAP, - MOVE_SNATCH, - MOVE_OVERHEAT, - MOVE_CUT, - MOVE_FLY, - MOVE_SURF, - MOVE_STRENGTH, - MOVE_FLASH, - MOVE_ROCK_SMASH, - MOVE_WATERFALL, - MOVE_DIVE, -}; +#include "data/party_menu.h" // code -static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback) +static void InitPartyMenu(u8 menuType, u8 layout, u8 partyAction, bool8 keepCursorPos, u8 messageId, TaskFunc task, MainCallback callback) { u16 i; - reset_brm(); - gUnknown_0203CEC4 = Alloc(sizeof(struct Struct203CEC4)); - if (gUnknown_0203CEC4 == NULL) + ResetPartyMenu(); + sPartyMenuInternal = Alloc(sizeof(struct PartyMenuInternal)); + if (sPartyMenuInternal == NULL) { SetMainCallback2(callback); } else { - gUnknown_0203CEC8.unk8_0 = a; - gUnknown_0203CEC8.exitCallback = callback; - gUnknown_0203CEC8.unkB = c; - gUnknown_0203CEC4->messageId = messageId; - gUnknown_0203CEC4->task = task; - gUnknown_0203CEC4->exitCallback = NULL; - gUnknown_0203CEC4->unk8_1 = 0; - gUnknown_0203CEC4->unk8_2 = 0x7F; - gUnknown_0203CEC4->unk9_0 = 0x7F; - - if (a == 4) - gUnknown_0203CEC4->unk8_0 = TRUE; + gPartyMenu.menuType = menuType; + gPartyMenu.exitCallback = callback; + gPartyMenu.action = partyAction; + sPartyMenuInternal->messageId = messageId; + sPartyMenuInternal->task = task; + sPartyMenuInternal->exitCallback = NULL; + sPartyMenuInternal->lastSelectedSlot = 0; + sPartyMenuInternal->spriteIdConfirmPokeball = 0x7F; + sPartyMenuInternal->spriteIdCancelPokeball = 0x7F; + + if (menuType == PARTY_MENU_TYPE_CHOOSE_HALF) + sPartyMenuInternal->chooseHalf = TRUE; else - gUnknown_0203CEC4->unk8_0 = FALSE; + sPartyMenuInternal->chooseHalf = FALSE; - if (b != 0xFF) - gUnknown_0203CEC8.mode = b; + if (layout != KEEP_PARTY_LAYOUT) + gPartyMenu.layout = layout; - for (i = 0; i <= 15; i++) - gUnknown_0203CEC4->data[i] = 0; - for (i = 0; i < ARRAY_COUNT(gUnknown_0203CEC4->windowId); i++) - gUnknown_0203CEC4->windowId[i] = 0xFF; + for (i = 0; i < ARRAY_COUNT(sPartyMenuInternal->data); i++) + sPartyMenuInternal->data[i] = 0; + for (i = 0; i < ARRAY_COUNT(sPartyMenuInternal->windowId); i++) + sPartyMenuInternal->windowId[i] = 0xFF; - if (d == 0) - gUnknown_0203CEC8.slotId = 0; - else if (gUnknown_0203CEC8.slotId > 5 || GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES) == SPECIES_NONE) - gUnknown_0203CEC8.slotId = 0; // wut why is this else if? + if (!keepCursorPos) + gPartyMenu.slotId = 0; + else if (gPartyMenu.slotId > PARTY_SIZE - 1 || GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES) == SPECIES_NONE) + gPartyMenu.slotId = 0; gTextFlags.autoScroll = 0; CalculatePlayerPartyCount(); - SetMainCallback2(PartyMenuInitCallback); + SetMainCallback2(CB2_InitPartyMenu); } } -static void PartyMenuCallback(void) +static void CB2_UpdatePartyMenu(void) { RunTasks(); AnimateSprites(); @@ -1632,23 +468,23 @@ static void PartyMenuCallback(void) UpdatePaletteFade(); } -static void PartyMenuVBlankCallback(void) +static void VBlankCB_PartyMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void PartyMenuInitCallback(void) +static void CB2_InitPartyMenu(void) { while (TRUE) { - if (sub_81221EC() == TRUE || PartyMenuSetup() == TRUE || sub_81221AC() == TRUE) + if (sub_81221EC() == TRUE || ShowPartyMenu() == TRUE || sub_81221AC() == TRUE) break; } } -static bool8 PartyMenuSetup(void) +static bool8 ShowPartyMenu(void) { switch (gMain.state) { @@ -1681,32 +517,32 @@ static bool8 PartyMenuSetup(void) gMain.state++; break; case 6: - sub_81B209C(); + SetPartyMonsAllowedInMinigame(); gMain.state++; break; case 7: if (!AllocPartyMenuBg()) { - PartyMenuExit(); + ExitPartyMenu(); return TRUE; } else { - gUnknown_0203CEC4->data[0] = 0; + sPartyMenuInternal->data[0] = 0; gMain.state++; } break; case 8: - if (AllocPartyMiscGfx()) + if (AllocPartyMenuBgGfx()) gMain.state++; break; case 9: - sub_81B239C(gUnknown_0203CEC8.mode); + InitPartyMenuWindows(gPartyMenu.layout); gMain.state++; break; case 10: - PartyMenuInitHelperStructs(gUnknown_0203CEC8.mode); - gUnknown_0203CEC4->data[0] = 0; + InitPartyMenuBoxes(gPartyMenu.layout); + sPartyMenuInternal->data[0] = 0; gMain.state++; break; case 11: @@ -1726,33 +562,33 @@ static bool8 PartyMenuSetup(void) gMain.state++; break; case 15: - if (party_menu_add_per_mon_objects()) + if (CreatePartyMonSpritesLoop()) { - gUnknown_0203CEC4->data[0] = 0; + sPartyMenuInternal->data[0] = 0; gMain.state++; } break; case 16: if (RenderPartyMenuBoxes()) { - gUnknown_0203CEC4->data[0] = 0; + sPartyMenuInternal->data[0] = 0; gMain.state++; } break; case 17: - sub_81B0F28(); + CreateCancelConfirmPokeballSprites(); gMain.state++; break; case 18: - sub_81B2428(gUnknown_0203CEC4->unk8_0); + CreateCancelConfirmWindows(sPartyMenuInternal->chooseHalf); gMain.state++; break; case 19: gMain.state++; break; case 20: - CreateTask(gUnknown_0203CEC4->task, 0); - display_pokemon_menu_message(gUnknown_0203CEC4->messageId); + CreateTask(sPartyMenuInternal->task, 0); + DisplayPartyMenuStdMessage(sPartyMenuInternal->messageId); gMain.state++; break; case 21: @@ -1765,49 +601,49 @@ static bool8 PartyMenuSetup(void) gMain.state++; break; default: - SetVBlankCallback(PartyMenuVBlankCallback); - SetMainCallback2(PartyMenuCallback); + SetVBlankCallback(VBlankCB_PartyMenu); + SetMainCallback2(CB2_UpdatePartyMenu); return TRUE; } return FALSE; } -static void PartyMenuExit(void) +static void ExitPartyMenu(void) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - CreateTask(PartyMenuExitTask, 0); - SetVBlankCallback(PartyMenuVBlankCallback); - SetMainCallback2(PartyMenuCallback); + CreateTask(Task_ExitPartyMenu, 0); + SetVBlankCallback(VBlankCB_PartyMenu); + SetMainCallback2(CB2_UpdatePartyMenu); } -static void PartyMenuExitTask(u8 taskId) +static void Task_ExitPartyMenu(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(gUnknown_0203CEC8.exitCallback); + SetMainCallback2(gPartyMenu.exitCallback); FreePartyPointers(); DestroyTask(taskId); } } -static void reset_brm(void) +static void ResetPartyMenu(void) { - gUnknown_0203CEC4 = NULL; - gUnknown_0203CEE4 = NULL; - gUnknown_0203CEDC = NULL; - gUnknown_0203CEE0 = NULL; + sPartyMenuInternal = NULL; + sPartyBgTilemapBuffer = NULL; + sPartyMenuBoxes = NULL; + sPartyBgGfxTilemap = NULL; } static bool8 AllocPartyMenuBg(void) { - gUnknown_0203CEE4 = Alloc(0x800); - if (gUnknown_0203CEE4 == NULL) + sPartyBgTilemapBuffer = Alloc(0x800); + if (sPartyBgTilemapBuffer == NULL) return FALSE; - memset(gUnknown_0203CEE4, 0, 0x800); + memset(sPartyBgTilemapBuffer, 0, 0x800); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_086156B8, ARRAY_COUNT(gUnknown_086156B8)); - SetBgTilemapBuffer(1, gUnknown_0203CEE4); + InitBgsFromTemplates(0, sPartyMenuBgTemplates, ARRAY_COUNT(sPartyMenuBgTemplates)); + SetBgTilemapBuffer(1, sPartyBgTilemapBuffer); ResetAllBgsCoordinates(); schedule_bg_copy_tilemap_to_vram(1); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); @@ -1818,48 +654,48 @@ static bool8 AllocPartyMenuBg(void) return TRUE; } -static bool8 AllocPartyMiscGfx(void) +static bool8 AllocPartyMenuBgGfx(void) { u32 sizeout; - switch (gUnknown_0203CEC4->data[0]) + switch (sPartyMenuInternal->data[0]) { case 0: - gUnknown_0203CEE0 = malloc_and_decompress(gPartyMenuMisc_Gfx, &sizeout); - LoadBgTiles(1, gUnknown_0203CEE0, sizeout, 0); - gUnknown_0203CEC4->data[0]++; + sPartyBgGfxTilemap = malloc_and_decompress(gPartyMenuBg_Gfx, &sizeout); + LoadBgTiles(1, sPartyBgGfxTilemap, sizeout, 0); + sPartyMenuInternal->data[0]++; break; case 1: if (!IsDma3ManagerBusyWithBgCopy()) { - LZDecompressWram(gPartyMenuMisc_Tilemap, gUnknown_0203CEE4); - gUnknown_0203CEC4->data[0]++; + LZDecompressWram(gPartyMenuBg_Tilemap, sPartyBgTilemapBuffer); + sPartyMenuInternal->data[0]++; } break; case 2: - LoadCompressedPalette(gPartyMenuMisc_Pal, 0, 0x160); - CpuCopy16(gPlttBufferUnfaded, gUnknown_0203CEC4->palBuffer, 0x160); - gUnknown_0203CEC4->data[0]++; + LoadCompressedPalette(gPartyMenuBg_Pal, 0, 0x160); + CpuCopy16(gPlttBufferUnfaded, sPartyMenuInternal->palBuffer, 0x160); + sPartyMenuInternal->data[0]++; break; case 3: PartyPaletteBufferCopy(4); - gUnknown_0203CEC4->data[0]++; + sPartyMenuInternal->data[0]++; break; case 4: PartyPaletteBufferCopy(5); - gUnknown_0203CEC4->data[0]++; + sPartyMenuInternal->data[0]++; break; case 5: PartyPaletteBufferCopy(6); - gUnknown_0203CEC4->data[0]++; + sPartyMenuInternal->data[0]++; break; case 6: PartyPaletteBufferCopy(7); - gUnknown_0203CEC4->data[0]++; + sPartyMenuInternal->data[0]++; break; case 7: PartyPaletteBufferCopy(8); - gUnknown_0203CEC4->data[0]++; + sPartyMenuInternal->data[0]++; break; default: return TRUE; @@ -1876,84 +712,86 @@ static void PartyPaletteBufferCopy(u8 offset) static void FreePartyPointers(void) { - if (gUnknown_0203CEC4) - Free(gUnknown_0203CEC4); - if (gUnknown_0203CEE4) - Free(gUnknown_0203CEE4); - if (gUnknown_0203CEE0) - Free(gUnknown_0203CEE0); - if (gUnknown_0203CEDC) - Free(gUnknown_0203CEDC); + if (sPartyMenuInternal) + Free(sPartyMenuInternal); + if (sPartyBgTilemapBuffer) + Free(sPartyBgTilemapBuffer); + if (sPartyBgGfxTilemap) + Free(sPartyBgGfxTilemap); + if (sPartyMenuBoxes) + Free(sPartyMenuBoxes); FreeAllWindowBuffers(); } -static void PartyMenuInitHelperStructs(u8 a) +static void InitPartyMenuBoxes(u8 layout) { u8 i; - gUnknown_0203CEDC = Alloc(sizeof(struct Struct203CEDC[PARTY_SIZE])); + sPartyMenuBoxes = Alloc(sizeof(struct PartyMenuBox[PARTY_SIZE])); for (i = 0; i < PARTY_SIZE; i++) { - gUnknown_0203CEDC[i].unk0 = &gUnknown_086156C4[1]; - gUnknown_0203CEDC[i].unk4 = gUnknown_08615704[a][i]; - gUnknown_0203CEDC[i].windowId = i; - gUnknown_0203CEDC[i].monSpriteId = 0xFF; - gUnknown_0203CEDC[i].itemSpriteId = 0xFF; - gUnknown_0203CEDC[i].pokeballSpriteId = 0xFF; - gUnknown_0203CEDC[i].statusSpriteId = 0xFF; + sPartyMenuBoxes[i].infoRects = &sPartyBoxInfoRects[PARTY_BOX_RIGHT_COLUMN]; + sPartyMenuBoxes[i].spriteCoords = sPartyMenuSpriteCoords[layout][i]; + sPartyMenuBoxes[i].windowId = i; + sPartyMenuBoxes[i].monSpriteId = 0xFF; + sPartyMenuBoxes[i].itemSpriteId = 0xFF; + sPartyMenuBoxes[i].pokeballSpriteId = 0xFF; + sPartyMenuBoxes[i].statusSpriteId = 0xFF; } - gUnknown_0203CEDC[0].unk0 = &gUnknown_086156C4[0]; - if (a == 3) - gUnknown_0203CEDC[3].unk0 = &gUnknown_086156C4[0]; - else if (a != 0) - gUnknown_0203CEDC[1].unk0 = &gUnknown_086156C4[0]; + // The first party mon goes in the left column + sPartyMenuBoxes[0].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN]; + + if (layout == PARTY_LAYOUT_MULTI_SHOWCASE) + sPartyMenuBoxes[3].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN]; + else if (layout != PARTY_LAYOUT_SINGLE) + sPartyMenuBoxes[1].infoRects = &sPartyBoxInfoRects[PARTY_BOX_LEFT_COLUMN]; } static void RenderPartyMenuBox(u8 slot) { - if (gUnknown_0203CEC8.unk8_0 == 5 && slot > 2) + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE) { - sub_81B0CEC(slot); - if (gUnknown_02022FF8[slot - 3].species == SPECIES_NONE) - UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 0x40); + DisplayPartyPokemonDataForMultiBattle(slot); + if (gMultiPartnerParty[slot - MULTI_PARTY_SIZE].species == SPECIES_NONE) + LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_NO_MON); else - UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 8); - CopyWindowToVram(gUnknown_0203CEDC[slot].windowId, 2); - PutWindowTilemap(gUnknown_0203CEDC[slot].windowId); + LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_MULTI_ALT); + CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2); + PutWindowTilemap(sPartyMenuBoxes[slot].windowId); schedule_bg_copy_tilemap_to_vram(2); } else { if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) == SPECIES_NONE) { - DrawEmptySlot(gUnknown_0203CEDC[slot].windowId); - UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 0x40); - CopyWindowToVram(gUnknown_0203CEDC[slot].windowId, 2); + DrawEmptySlot(sPartyMenuBoxes[slot].windowId); + LoadPartyBoxPalette(&sPartyMenuBoxes[slot], PARTY_PAL_NO_MON); + CopyWindowToVram(sPartyMenuBoxes[slot].windowId, 2); } else { - if (gUnknown_0203CEC8.unk8_0 == 7) - DisplayPartyPokemonSelectForRelearner(slot); - else if (gUnknown_0203CEC8.unk8_0 == 2) - DisplayPartyPokemonSelectForContest(slot); - else if (gUnknown_0203CEC8.unk8_0 == 4) - DisplayPartyPokemonSelectForBattle(slot); - else if (gUnknown_0203CEC8.unk8_0 == 11) - sub_81B0B98(slot); - else if (gUnknown_0203CEC8.unk8_0 == 12) - DisplayPartyPokemonSelectHeldItemRelated(slot); - else if (!sub_81B0BFC(slot)) + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MOVE_RELEARNER) + DisplayPartyPokemonDataForRelearner(slot); + else if (gPartyMenu.menuType == PARTY_MENU_TYPE_CONTEST) + DisplayPartyPokemonDataForContest(slot); + else if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF) + DisplayPartyPokemonDataForChooseHalf(slot); + else if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) + DisplayPartyPokemonDataForWirelessMinigame(slot); + else if (gPartyMenu.menuType == PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS) + DisplayPartyPokemonDataForBattlePyramidHeldItem(slot); + else if (!DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(slot)) DisplayPartyPokemonData(slot); - if (gUnknown_0203CEC8.unk8_0 == 5) - sub_81B0FCC(slot, 0); - else if (gUnknown_0203CEC8.slotId == slot) - sub_81B0FCC(slot, 1); + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE) + AnimatePartySlot(slot, 0); + else if (gPartyMenu.slotId == slot) + AnimatePartySlot(slot, 1); else - sub_81B0FCC(slot, 0); + AnimatePartySlot(slot, 0); } - PutWindowTilemap(gUnknown_0203CEDC[slot].windowId); + PutWindowTilemap(sPartyMenuBoxes[slot].windowId); schedule_bg_copy_tilemap_to_vram(0); } } @@ -1962,249 +800,251 @@ static void DisplayPartyPokemonData(u8 slot) { if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG)) { - gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 1); - DisplayPartyPokemonNickname(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); + sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE); + DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); } else { - gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 0); - DisplayPartyPokemonNickname(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); - DisplayPartyPokemonLevelCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); - DisplayPartyPokemonGenderNidoranCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); - DisplayPartyPokemonHPCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); - DisplayPartyPokemonMaxHPCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); - DisplayPartyPokemonHPBarCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); + sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, FALSE); + DisplayPartyPokemonNickname(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonLevelCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonGenderNidoranCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonMaxHPCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonHPBarCheck(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); } } -static void DisplayPartyPokemonSelectData(u8 slot, u8 stringID) +static void DisplayPartyPokemonDescriptionData(u8 slot, u8 stringID) { struct Pokemon *mon = &gPlayerParty[slot]; - gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 1); - DisplayPartyPokemonNickname(mon, &gUnknown_0203CEDC[slot], 0); + sPartyMenuBoxes[slot].infoRects->blitFunc(sPartyMenuBoxes[slot].windowId, 0, 0, 0, 0, TRUE); + DisplayPartyPokemonNickname(mon, &sPartyMenuBoxes[slot], 0); if (!GetMonData(mon, MON_DATA_IS_EGG)) { - DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[slot], 0); - DisplayPartyPokemonGenderNidoranCheck(mon, &gUnknown_0203CEDC[slot], 0); + DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[slot], 0); + DisplayPartyPokemonGenderNidoranCheck(mon, &sPartyMenuBoxes[slot], 0); } - DisplayPartyPokemonOtherText(stringID, &gUnknown_0203CEDC[slot], 0); + DisplayPartyPokemonDescriptionText(stringID, &sPartyMenuBoxes[slot], 0); } -static void DisplayPartyPokemonSelectForBattle(u8 slot) +static void DisplayPartyPokemonDataForChooseHalf(u8 slot) { u8 i; struct Pokemon *mon = &gPlayerParty[slot]; - u8 *ptr = gSelectedOrderFromParty; + u8 *order = gSelectedOrderFromParty; if (!GetBattleEntryEligibility(mon)) { - DisplayPartyPokemonSelectData(slot, 7); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE); return; } else { - for (i = 0; i < sub_81B8830(); i++) + for (i = 0; i < GetMaxBattleEntries(); i++) { - if (ptr[i] != 0 && (ptr[i] - 1) == slot) + if (order[i] != 0 && (order[i] - 1) == slot) { - DisplayPartyPokemonSelectData(slot, i + 2); + DisplayPartyPokemonDescriptionData(slot, i + PARTYBOX_DESC_FIRST); return; } } - DisplayPartyPokemonSelectData(slot, 1); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_3); } } -static void DisplayPartyPokemonSelectForContest(u8 slot) +static void DisplayPartyPokemonDataForContest(u8 slot) { - switch (sub_80DAE0C(&gPlayerParty[slot])) + switch (GetContestEntryEligibility(&gPlayerParty[slot])) { - case 0: - case 3: - case 4: - DisplayPartyPokemonSelectData(slot, 7); + case CANT_ENTER_CONTEST: + case CANT_ENTER_CONTEST_EGG: + case CANT_ENTER_CONTEST_FAINTED: + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE); break; - case 1: - case 2: - DisplayPartyPokemonSelectData(slot, 6); + case CAN_ENTER_CONTEST_EQUAL_RANK: + case CAN_ENTER_CONTEST_HIGH_RANK: + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE); break; } } -static void DisplayPartyPokemonSelectForRelearner(u8 slot) +static void DisplayPartyPokemonDataForRelearner(u8 slot) { if (GetNumberOfRelearnableMoves(&gPlayerParty[slot]) == 0) - DisplayPartyPokemonSelectData(slot, 9); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE_2); else - DisplayPartyPokemonSelectData(slot, 8); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_2); } -static void sub_81B0B98(u8 slot) +static void DisplayPartyPokemonDataForWirelessMinigame(u8 slot) { - if (sub_81B218C(slot) == TRUE) - DisplayPartyPokemonSelectData(slot, 6); + if (IsMonAllowedInMinigame(slot) == TRUE) + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE); else - DisplayPartyPokemonSelectData(slot, 7); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE); } -static void DisplayPartyPokemonSelectHeldItemRelated(u8 slot) +static void DisplayPartyPokemonDataForBattlePyramidHeldItem(u8 slot) { if (GetMonData(&gPlayerParty[slot], MON_DATA_HELD_ITEM)) - DisplayPartyPokemonSelectData(slot, 11); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_HAVE); else - DisplayPartyPokemonSelectData(slot, 12); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_DONT_HAVE); } -static bool8 sub_81B0BFC(u8 slot) +// Returns TRUE if teaching move or cant evolve with item (i.e. description data is shown), FALSE otherwise +static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot) { struct Pokemon *currentPokemon = &gPlayerParty[slot]; u16 item = gSpecialVar_ItemId; - if (gUnknown_0203CEC8.unkB == 12) + if (gPartyMenu.action == PARTY_ACTION_MOVE_TUTOR) { gSpecialVar_Result = FALSE; - DisplayPartyPokemonSelectToTeachMove(slot, 0, gSpecialVar_0x8005); + DisplayPartyPokemonDataToTeachMove(slot, 0, gSpecialVar_0x8005); } else { - if (gUnknown_0203CEC8.unkB != 3) + if (gPartyMenu.action != PARTY_ACTION_USE_ITEM) return FALSE; switch (CheckIfItemIsTMHMOrEvolutionStone(item)) { default: return FALSE; - case 1: - DisplayPartyPokemonSelectToTeachMove(slot, item, 0); + case 1: // TM/HM + DisplayPartyPokemonDataToTeachMove(slot, item, 0); break; - case 2: + case 2: // Evolution stone if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, 3, item) != SPECIES_NONE) return FALSE; - DisplayPartyPokemonSelectData(slot, 0); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NO_USE); break; } } return TRUE; } -static void DisplayPartyPokemonSelectToTeachMove(u8 slot, u16 item, u8 tutor) +static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor) { switch (CanMonLearnTMTutor(&gPlayerParty[slot], item, tutor)) { case CANNOT_LEARN_MOVE: case CANNOT_LEARN_MOVE_IS_EGG: - DisplayPartyPokemonSelectData(slot, 9); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NOT_ABLE_2); break; case ALREADY_KNOWS_MOVE: - DisplayPartyPokemonSelectData(slot, 10); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_LEARNED); break; default: - DisplayPartyPokemonSelectData(slot, 8); + DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_ABLE_2); break; } } -static void sub_81B0CEC(u8 slot) +static void DisplayPartyPokemonDataForMultiBattle(u8 slot) { - struct Struct203CEDC *structPtr = &gUnknown_0203CEDC[slot]; - u8 actualSlot = slot - 3; + struct PartyMenuBox *menuBox = &sPartyMenuBoxes[slot]; + u8 actualSlot = slot - (3); - if (gUnknown_02022FF8[actualSlot].species == SPECIES_NONE) + if (gMultiPartnerParty[actualSlot].species == SPECIES_NONE) { - DrawEmptySlot(structPtr->windowId); + DrawEmptySlot(menuBox->windowId); } else { - structPtr->unk0->unk0(structPtr->windowId, 0, 0, 0, 0, 0); - StringCopy(gStringVar1, gUnknown_02022FF8[actualSlot].nickname); + menuBox->infoRects->blitFunc(menuBox->windowId, 0, 0, 0, 0, FALSE); + StringCopy(gStringVar1, gMultiPartnerParty[actualSlot].nickname); StringGetEnd10(gStringVar1); sub_81DB52C(gStringVar1); - DisplayPartyPokemonBarDetail(structPtr->windowId, gStringVar1, 0, structPtr->unk0->unk4); - DisplayPartyPokemonLevel(gUnknown_02022FF8[actualSlot].level, structPtr); - DisplayPartyPokemonGender(gUnknown_02022FF8[actualSlot].gender, gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].nickname, structPtr); - DisplayPartyPokemonHP(gUnknown_02022FF8[actualSlot].hp, structPtr); - DisplayPartyPokemonMaxHP(gUnknown_02022FF8[actualSlot].maxhp, structPtr); - DisplayPartyPokemonHPBar(gUnknown_02022FF8[actualSlot].hp, gUnknown_02022FF8[actualSlot].maxhp, structPtr); + DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, menuBox->infoRects->dimensions); + DisplayPartyPokemonLevel(gMultiPartnerParty[actualSlot].level, menuBox); + DisplayPartyPokemonGender(gMultiPartnerParty[actualSlot].gender, gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].nickname, menuBox); + DisplayPartyPokemonHP(gMultiPartnerParty[actualSlot].hp, menuBox); + DisplayPartyPokemonMaxHP(gMultiPartnerParty[actualSlot].maxhp, menuBox); + DisplayPartyPokemonHPBar(gMultiPartnerParty[actualSlot].hp, gMultiPartnerParty[actualSlot].maxhp, menuBox); } } static bool8 RenderPartyMenuBoxes(void) { - RenderPartyMenuBox(gUnknown_0203CEC4->data[0]); - if (++gUnknown_0203CEC4->data[0] == 6) + RenderPartyMenuBox(sPartyMenuInternal->data[0]); + if (++sPartyMenuInternal->data[0] == PARTY_SIZE) return TRUE; else return FALSE; } -static u8* GetPartyMiscGraphicsTile(u16 tileId) +static u8* GetPartyMenuBgTile(u16 tileId) { - return &gUnknown_0203CEE0[tileId << 5]; + return &sPartyBgGfxTilemap[tileId << 5]; } -static void party_menu_add_per_mon_objects_internal(u8 slot) +static void CreatePartyMonSprites(u8 slot) { u8 actualSlot; - if (gUnknown_0203CEC8.unk8_0 == 5 && slot > 2) + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE && slot >= MULTI_PARTY_SIZE) { u8 status; - actualSlot = slot - 3; + actualSlot = slot - MULTI_PARTY_SIZE; - if (gUnknown_02022FF8[actualSlot].species != SPECIES_NONE) + if (gMultiPartnerParty[actualSlot].species != SPECIES_NONE) { - party_menu_link_mon_icon_anim(gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].personality, &gUnknown_0203CEDC[slot], 0, 0); - party_menu_link_mon_held_item_object(gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].heldItem, &gUnknown_0203CEDC[slot]); - party_menu_link_mon_pokeball_object(gUnknown_02022FF8[actualSlot].species, &gUnknown_0203CEDC[slot]); - if (gUnknown_02022FF8[actualSlot].hp == 0) + CreatePartyMonIconSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].personality, &sPartyMenuBoxes[slot], 0, FALSE); + CreatePartyMonHeldItemSpriteParameterized(gMultiPartnerParty[actualSlot].species, gMultiPartnerParty[actualSlot].heldItem, &sPartyMenuBoxes[slot]); + CreatePartyMonPokeballSpriteParameterized(gMultiPartnerParty[actualSlot].species, &sPartyMenuBoxes[slot]); + if (gMultiPartnerParty[actualSlot].hp == 0) status = AILMENT_FNT; else - status = pokemon_ailments_get_primary(gUnknown_02022FF8[actualSlot].status); - party_menu_link_mon_status_condition_object(gUnknown_02022FF8[actualSlot].species, status, &gUnknown_0203CEDC[slot]); + status = GetAilmentFromStatus(gMultiPartnerParty[actualSlot].status); + CreatePartyMonStatusSpriteParameterized(gMultiPartnerParty[actualSlot].species, status, &sPartyMenuBoxes[slot]); } } else if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE) { - party_menu_icon_anim(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], slot); - party_menu_held_item_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); - party_menu_pokeball_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); - party_menu_status_condition_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); + CreatePartyMonIconSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot], slot); + CreatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); + CreatePartyMonPokeballSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); + CreatePartyMonStatusSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); } } -static bool8 party_menu_add_per_mon_objects(void) +static bool8 CreatePartyMonSpritesLoop(void) { - party_menu_add_per_mon_objects_internal(gUnknown_0203CEC4->data[0]); - if (++gUnknown_0203CEC4->data[0] == 6) + CreatePartyMonSprites(sPartyMenuInternal->data[0]); + if (++sPartyMenuInternal->data[0] == PARTY_SIZE) return TRUE; else return FALSE; } -static void sub_81B0F28(void) +static void CreateCancelConfirmPokeballSprites(void) { - if (gUnknown_0203CEC8.unk8_0 == 5) + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MULTI_SHOWCASE) { + // The showcase has no Cancel/Confirm buttons FillBgTilemapBufferRect(1, 14, 23, 17, 7, 2, 1); } else { - if (gUnknown_0203CEC4->unk8_0) + if (sPartyMenuInternal->chooseHalf) { - gUnknown_0203CEC4->unk8_2 = sub_81B5F74(0xBF, 0x88); - sub_81B120C(); - gUnknown_0203CEC4->unk9_0 = sub_81B5F74(0xBF, 0x98); + sPartyMenuInternal->spriteIdConfirmPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x88); + DrawCancelConfirmButtons(); + sPartyMenuInternal->spriteIdCancelPokeball = CreateSmallPokeballButtonSprite(0xBF, 0x98); } else { - gUnknown_0203CEC4->unk9_0 = sub_81B5F34(0xC6, 0x94); + sPartyMenuInternal->spriteIdCancelPokeball = CreatePokeballButtonSprite(198, 148); } - sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); + AnimatePartySlot(gPartyMenu.slotId, 1); } } -void sub_81B0FCC(u8 slot, u8 b) +void AnimatePartySlot(u8 slot, u8 animNum) { u8 spriteId; @@ -2213,79 +1053,80 @@ void sub_81B0FCC(u8 slot, u8 b) default: if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE) { - UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], GetPartyBoxPalBitfield(slot, b)); - AnimateSelectedPartyIcon(gUnknown_0203CEDC[slot].monSpriteId, b); - sub_81B5F98(gUnknown_0203CEDC[slot].pokeballSpriteId, b); + LoadPartyBoxPalette(&sPartyMenuBoxes[slot], GetPartyBoxPaletteFlags(slot, animNum)); + AnimateSelectedPartyIcon(sPartyMenuBoxes[slot].monSpriteId, animNum); + PartyMenuStartSpriteAnim(sPartyMenuBoxes[slot].pokeballSpriteId, animNum); } return; - case 6: - if (b == 0) - sub_8199C30(1, 23, 16, 7, 2, 1); + case PARTY_SIZE: // Confirm + if (animNum == 0) + SetBgTilemapPalette(1, 23, 16, 7, 2, 1); else - sub_8199C30(1, 23, 16, 7, 2, 2); - spriteId = gUnknown_0203CEC4->unk8_2; + SetBgTilemapPalette(1, 23, 16, 7, 2, 2); + spriteId = sPartyMenuInternal->spriteIdConfirmPokeball; break; - case 7: - if (!gUnknown_0203CEC4->unk8_0) + case PARTY_SIZE + 1: // Cancel + // The position of the Cancel button changes if Confirm is present + if (!sPartyMenuInternal->chooseHalf) { - if (b == 0) - sub_8199C30(1, 23, 17, 7, 2, 1); + if (animNum == 0) + SetBgTilemapPalette(1, 23, 17, 7, 2, 1); else - sub_8199C30(1, 23, 17, 7, 2, 2); + SetBgTilemapPalette(1, 23, 17, 7, 2, 2); } - else if (b == 0) + else if (animNum == 0) { - sub_8199C30(1, 23, 18, 7, 2, 1); + SetBgTilemapPalette(1, 23, 18, 7, 2, 1); } else { - sub_8199C30(1, 23, 18, 7, 2, 2); + SetBgTilemapPalette(1, 23, 18, 7, 2, 2); } - spriteId = gUnknown_0203CEC4->unk9_0; + spriteId = sPartyMenuInternal->spriteIdCancelPokeball; break; } - sub_81B5F98(spriteId, b); + PartyMenuStartSpriteAnim(spriteId, animNum); schedule_bg_copy_tilemap_to_vram(1); } -static u8 GetPartyBoxPalBitfield(u8 slot, u8 b) +static u8 GetPartyBoxPaletteFlags(u8 slot, u8 animNum) { - u8 returnVar = 0; + u8 palFlags = 0; - if (b == 1) - returnVar |= 1; + if (animNum == 1) + palFlags |= PARTY_PAL_SELECTED; if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0) - returnVar |= 2; + palFlags |= PARTY_PAL_FAINTED; if (PartyBoxPal_ParnterOrDisqualifiedInArena(slot) == TRUE) - returnVar |= 8; - if (gUnknown_0203CEC8.unkB == 9) - returnVar |= 16; - if (gUnknown_0203CEC8.unkB == 8) + palFlags |= PARTY_PAL_MULTI_ALT; + if (gPartyMenu.action == PARTY_ACTION_SWITCHING) + palFlags |= PARTY_PAL_SWITCHING; + if (gPartyMenu.action == PARTY_ACTION_SWITCH) { - if (slot == gUnknown_0203CEC8.slotId || slot == gUnknown_0203CEC8.unkA) - returnVar |= 4; + if (slot == gPartyMenu.slotId || slot == gPartyMenu.slotId2) + palFlags |= PARTY_PAL_TO_SWITCH; } - if (gUnknown_0203CEC8.unkB == 10 && slot == gUnknown_0203CEC8.slotId ) - returnVar |= 32; + if (gPartyMenu.action == PARTY_ACTION_SOFTBOILED && slot == gPartyMenu.slotId ) + palFlags |= PARTY_PAL_TO_SOFTBOIL; - return returnVar; + return palFlags; } static bool8 PartyBoxPal_ParnterOrDisqualifiedInArena(u8 slot) { - if (gUnknown_0203CEC8.mode == 2 && (slot == 1 || slot == 4 || slot == 5)) + if (gPartyMenu.layout == PARTY_LAYOUT_MULTI && (slot == 1 || slot == 4 || slot == 5)) return TRUE; - if (slot < 3 && (gBattleTypeFlags & BATTLE_TYPE_ARENA) && gMain.inBattle && (gBattleStruct->arenaLostPlayerMons >> sub_81B8F38(slot) & 1)) + if (slot < MULTI_PARTY_SIZE && (gBattleTypeFlags & BATTLE_TYPE_ARENA) && gMain.inBattle && (gBattleStruct->arenaLostPlayerMons >> GetPartyIdFromBattleSlot(slot) & 1)) return TRUE; return FALSE; } -static void sub_81B120C(void) +static void DrawCancelConfirmButtons(void) { - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_086157C4, 23, 16, 7, 2, 17); - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_086157E0, 23, 18, 7, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sConfirmButton_Tilemap, 23, 16, 7, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sCancelButton_Tilemap, 23, 18, 7, 2, 17); schedule_bg_copy_tilemap_to_vram(1); } @@ -2297,34 +1138,34 @@ bool8 IsMultiBattle(void) return FALSE; } -static void sub_81B1288(struct Pokemon *partySlot, struct Pokemon *pokemon) +static void SwapPartyPokemon(struct Pokemon *mon1, struct Pokemon *mon2) { struct Pokemon *temp = Alloc(sizeof(struct Pokemon)); - *temp = *partySlot; - *partySlot = *pokemon; - *pokemon = *temp; + *temp = *mon1; + *mon1 = *mon2; + *mon2 = *temp; Free(temp); } -static void sub_81B12C0(u8 taskId) +static void Task_ClosePartyMenu(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[taskId].func = c3_0811FAB4; + gTasks[taskId].func = Task_ClosePartyMenuAndSetCB2; } -static void c3_0811FAB4(u8 taskId) +static void Task_ClosePartyMenuAndSetCB2(u8 taskId) { if (!gPaletteFade.active) { - if (gUnknown_0203CEC8.unk8_0 == 1) - sub_81B9080(); + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) + UpdatePartyToFieldOrder(); - if (gUnknown_0203CEC4->exitCallback != NULL) - SetMainCallback2(gUnknown_0203CEC4->exitCallback); + if (sPartyMenuInternal->exitCallback != NULL) + SetMainCallback2(sPartyMenuInternal->exitCallback); else - SetMainCallback2(gUnknown_0203CEC8.exitCallback); + SetMainCallback2(gPartyMenu.exitCallback); ResetSpriteData(); FreePartyPointers(); @@ -2334,124 +1175,124 @@ static void c3_0811FAB4(u8 taskId) u8 GetCursorSelectionMonId(void) { - return gUnknown_0203CEC8.slotId; + return gPartyMenu.slotId; } -u8 sub_81B1360(void) +u8 GetPartyMenuType(void) { - return gUnknown_0203CEC8.unk8_0; + return gPartyMenu.menuType; } -void sub_81B1370(u8 taskId) +void Task_HandleChooseMonInput(u8 taskId) { if (!gPaletteFade.active && sub_81221EC() != TRUE) { - s8 *ptr = sub_81B13EC(); + s8 *slotPtr = GetCurrentPartySlotPtr(); - switch (PartyMenuButtonHandler(ptr)) + switch (PartyMenuButtonHandler(slotPtr)) { - case 1: - sub_81B140C(taskId, ptr); + case 1: // Selected mon + HandleChooseMonSelection(taskId, slotPtr); break; - case 2: - sub_81B15D0(taskId, ptr); + case 2: // Selected Cancel + HandleChooseMonCancel(taskId, slotPtr); break; - case 8: - if (gUnknown_0203CEC4->unk8_0) + case 8: // Start button + if (sPartyMenuInternal->chooseHalf) { PlaySE(SE_SELECT); - sub_81B4F88(); + MoveCursorToConfirm(); } break; } } } -static s8* sub_81B13EC(void) +static s8* GetCurrentPartySlotPtr(void) { - if (gUnknown_0203CEC8.unkB == 8 || gUnknown_0203CEC8.unkB == 10) - return &gUnknown_0203CEC8.unkA; + if (gPartyMenu.action == PARTY_ACTION_SWITCH || gPartyMenu.action == PARTY_ACTION_SOFTBOILED) + return &gPartyMenu.slotId2; else - return &gUnknown_0203CEC8.slotId; + return &gPartyMenu.slotId; } -static void sub_81B140C(u8 taskId, s8 *ptr) +static void HandleChooseMonSelection(u8 taskId, s8 *slotPtr) { - if (*ptr == 6) + if (*slotPtr == PARTY_SIZE) { - gUnknown_0203CEC8.unk4(taskId); + gPartyMenu.task(taskId); } else { - switch (gUnknown_0203CEC8.unkB - 3) + switch (gPartyMenu.action - 3) { - case 7: - if (sub_81B15A4((u8*)ptr)) + case PARTY_ACTION_SOFTBOILED - 3: + if (IsSelectedMonNotEgg((u8*)slotPtr)) { - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81615A8(taskId); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + Task_TryUseSoftboiledOnPartyMon(taskId); } break; - case 0: - if (sub_81B15A4((u8*)ptr)) + case PARTY_ACTION_USE_ITEM - 3: + if (IsSelectedMonNotEgg((u8*)slotPtr)) { - if (gUnknown_0203CEC8.unk8_0 == 1) - gUnknown_0203CEC4->exitCallback = sub_81B9140; + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) + sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen; - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - gUnknown_03006328(taskId, sub_81B6794); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + gItemUseCB(taskId, Task_ClosePartyMenuAfterText); } break; - case 9: - if (sub_81B15A4((u8*)ptr)) + case PARTY_ACTION_MOVE_TUTOR - 3: + if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B7E4C(taskId); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + TryTutorSelectedMon(taskId); } break; - case 4: - if (sub_81B15A4((u8*)ptr)) + case PARTY_ACTION_GIVE_MAILBOX_MAIL - 3: + if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B8474(taskId); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + TryGiveMailToSelectedMon(taskId); } break; - case 2: - case 3: - if (sub_81B15A4((u8*)ptr)) + case PARTY_ACTION_GIVE_ITEM - 3: + case PARTY_ACTION_GIVE_PC_ITEM - 3: + if (IsSelectedMonNotEgg((u8*)slotPtr)) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B7FAC(taskId); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + TryGiveItemOrMailToSelectedMon(taskId); } break; - case 5: + case PARTY_ACTION_SWITCH - 3: PlaySE(SE_SELECT); - sub_81B3938(taskId); + SwitchSelectedMons(taskId); break; - case 8: + case PARTY_ACTION_CHOOSE_AND_CLOSE - 3: PlaySE(SE_SELECT); - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); break; - case 10: - if (sub_81B15A4((u8*)ptr)) + case PARTY_ACTION_MINIGAME - 3: + if (IsSelectedMonNotEgg((u8*)slotPtr)) { - sub_81B21AC(taskId, (u8)*ptr); + TryEnterMonForMinigame(taskId, (u8)*slotPtr); } break; default: - case 1: - case 6: + case PARTY_ACTION_ABILITY_PREVENTS - 3: + case PARTY_ACTION_SWITCHING - 3: PlaySE(SE_SELECT); - sub_81B36FC(taskId); + Task_TryCreateSelectionWindow(taskId); break; } } } -static bool8 sub_81B15A4(u8 *slotPtr) +static bool8 IsSelectedMonNotEgg(u8 *slotPtr) { if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_IS_EGG) == TRUE) { @@ -2461,108 +1302,109 @@ static bool8 sub_81B15A4(u8 *slotPtr) return TRUE; } -static void sub_81B15D0(u8 taskId, s8 *ptr) +static void HandleChooseMonCancel(u8 taskId, s8 *slotPtr) { - switch (gUnknown_0203CEC8.unkB) + switch (gPartyMenu.action) { - case 1: + case PARTY_ACTION_SEND_OUT: PlaySE(SE_HAZURE); break; - case 8: - case 10: + case PARTY_ACTION_SWITCH: + case PARTY_ACTION_SOFTBOILED: PlaySE(SE_SELECT); - sub_81B407C(taskId); + FinishTwoMonAction(taskId); break; - case 13: + case PARTY_ACTION_MINIGAME: PlaySE(SE_SELECT); - sub_81B2210(taskId); + CancelParticipationPrompt(taskId); break; default: PlaySE(SE_SELECT); - if (sub_81B1660(taskId) != TRUE) + if (DisplayCancelChooseMonYesNo(taskId) != TRUE) { if (!sub_81221AC()) - gSpecialVar_0x8004 = 7; - gUnknown_0203CEE8 = 0; - *ptr = 7; - sub_81B12C0(taskId); + gSpecialVar_0x8004 = PARTY_SIZE + 1; + gPartyMenuUseExitCallback = FALSE; + *slotPtr = PARTY_SIZE + 1; + Task_ClosePartyMenu(taskId); } break; } } -static bool8 sub_81B1660(u8 taskId) +static bool8 DisplayCancelChooseMonYesNo(u8 taskId) { const u8* stringPtr = NULL; - if (gUnknown_0203CEC8.unk8_0 == 2) + if (gPartyMenu.menuType == PARTY_MENU_TYPE_CONTEST) stringPtr = gText_CancelParticipation; - else if (gUnknown_0203CEC8.unk8_0 == 4) - stringPtr = sub_81B88BC(); + else if (gPartyMenu.menuType == PARTY_MENU_TYPE_CHOOSE_HALF) + stringPtr = GetFacilityCancelString(); if (stringPtr == NULL) return FALSE; - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); StringExpandPlaceholders(gStringVar4, stringPtr); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B16D4; + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_CancelChooseMonYesNo; return TRUE; } -static void sub_81B16D4(u8 taskId) +static void Task_CancelChooseMonYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B1708; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleCancelChooseMonYesNoInput; } } -static void sub_81B1708(u8 taskId) +static void Task_HandleCancelChooseMonYesNoInput(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - gUnknown_0203CEE8 = 0; - gUnknown_0203CEC8.slotId = 7; - sub_81B8558(); - sub_81B12C0(taskId); + gPartyMenuUseExitCallback = FALSE; + gPartyMenu.slotId = PARTY_SIZE + 1; + ClearSelectedPartyOrder(); + Task_ClosePartyMenu(taskId); break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: - sub_81B1C1C(taskId); + Task_ReturnToChooseMonAfterText(taskId); break; } } -static u16 PartyMenuButtonHandler(s8 *ptr) +static u16 PartyMenuButtonHandler(s8 *slotPtr) { s8 movementDir; switch (gMain.newAndRepeatedKeys) { case DPAD_UP: - movementDir = -1; + movementDir = MENU_DIR_UP; break; case DPAD_DOWN: - movementDir = 1; + movementDir = MENU_DIR_DOWN; break; case DPAD_LEFT: - movementDir = -2; + movementDir = MENU_DIR_LEFT; break; case DPAD_RIGHT: - movementDir = 2; + movementDir = MENU_DIR_RIGHT; break; default: - switch (sub_812210C()) + switch (GetLRKeysPressedAndHeld()) { - case 1: - movementDir = -1; + case MENU_L_PRESSED: + movementDir = MENU_DIR_UP; break; - case 2: - movementDir = 1; + case MENU_R_PRESSED: + movementDir = MENU_DIR_DOWN; break; default: movementDir = 0; @@ -2576,203 +1418,207 @@ static u16 PartyMenuButtonHandler(s8 *ptr) if (movementDir) { - UpdateCurrentPartySelection(ptr, movementDir); + UpdateCurrentPartySelection(slotPtr, movementDir); return 0; } - if ((gMain.newKeys & A_BUTTON) && *ptr == 7) + // Pressed Cancel + if ((gMain.newKeys & A_BUTTON) && *slotPtr == PARTY_SIZE + 1) return 2; return gMain.newKeys & (A_BUTTON | B_BUTTON); } -static void UpdateCurrentPartySelection(s8 *ptr, s8 movementDir) +static void UpdateCurrentPartySelection(s8 *slotPtr, s8 movementDir) { - s8 slot = *ptr; - u8 mode = gUnknown_0203CEC8.mode; + s8 newSlotId = *slotPtr; + u8 layout = gPartyMenu.layout; - if (mode == 0) - SetNewPartySelectTarget1(ptr, movementDir); + if (layout == PARTY_LAYOUT_SINGLE) + UpdatePartySelectionSingleLayout(slotPtr, movementDir); else - SetNewPartySelectTarget2(ptr, movementDir); + UpdatePartySelectionDoubleLayout(slotPtr, movementDir); - if (*ptr != slot) + if (*slotPtr != newSlotId) { PlaySE(SE_SELECT); - sub_81B0FCC(slot, 0); - sub_81B0FCC(*ptr, 1); + AnimatePartySlot(newSlotId, 0); + AnimatePartySlot(*slotPtr, 1); } } -static void SetNewPartySelectTarget1(s8 *ptr, s8 b) +static void UpdatePartySelectionSingleLayout(s8 *slotPtr, s8 movementDir) { - switch (b) + // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm + switch (movementDir) { - case -1: - if (*ptr == 0) + case MENU_DIR_UP: + if (*slotPtr == 0) { - *ptr = 7; + *slotPtr = PARTY_SIZE + 1; } - else if (*ptr == 6) + else if (*slotPtr == PARTY_SIZE) { - *ptr = gPlayerPartyCount - 1; + *slotPtr = gPlayerPartyCount - 1; } - else if (*ptr == 7) + else if (*slotPtr == PARTY_SIZE + 1) { - if (gUnknown_0203CEC4->unk8_0) - *ptr = 6; + if (sPartyMenuInternal->chooseHalf) + *slotPtr = PARTY_SIZE; else - *ptr = gPlayerPartyCount - 1; + *slotPtr = gPlayerPartyCount - 1; } else { - (*ptr)--; + (*slotPtr)--; } break; - case 1: - if (*ptr == 7) + case MENU_DIR_DOWN: + if (*slotPtr == PARTY_SIZE + 1) { - *ptr = 0; + *slotPtr = 0; } else { - if (*ptr == gPlayerPartyCount - 1) + if (*slotPtr == gPlayerPartyCount - 1) { - if (gUnknown_0203CEC4->unk8_0) - *ptr = 6; + if (sPartyMenuInternal->chooseHalf) + *slotPtr = PARTY_SIZE; else - *ptr = 7; + *slotPtr = PARTY_SIZE + 1; } else { - (*ptr)++; + (*slotPtr)++; } } break; - case 2: - if (gPlayerPartyCount != 1 && *ptr == 0) + case MENU_DIR_RIGHT: + if (gPlayerPartyCount != 1 && *slotPtr == 0) { - if (gUnknown_0203CEC4->unk8_1 == 0) - *ptr = 1; + if (sPartyMenuInternal->lastSelectedSlot == 0) + *slotPtr = 1; else - *ptr = gUnknown_0203CEC4->unk8_1; + *slotPtr = sPartyMenuInternal->lastSelectedSlot; } break; - case -2: - if (*ptr != 0 && *ptr != 6 && *ptr != 7) + case MENU_DIR_LEFT: + if (*slotPtr != 0 && *slotPtr != PARTY_SIZE && *slotPtr != PARTY_SIZE + 1) { - gUnknown_0203CEC4->unk8_1 = *ptr; - *ptr = 0; + sPartyMenuInternal->lastSelectedSlot = *slotPtr; + *slotPtr = 0; } break; } } -static void SetNewPartySelectTarget2(s8 *ptr, s8 b) +static void UpdatePartySelectionDoubleLayout(s8 *slotPtr, s8 movementDir) { - s8 unk2 = b; + // PARTY_SIZE + 1 is Cancel, PARTY_SIZE is Confirm + // newSlot is used temporarily as a movement direction during its later assignment + s8 newSlot = movementDir; - switch (b) + switch (movementDir) { - case -1: - if (*ptr == 0) + case MENU_DIR_UP: + if (*slotPtr == 0) { - *ptr = 7; + *slotPtr = PARTY_SIZE + 1; break; } - else if (*ptr == 6) + else if (*slotPtr == PARTY_SIZE) { - *ptr = gPlayerPartyCount - 1; + *slotPtr = gPlayerPartyCount - 1; break; } - else if (*ptr == 7) + else if (*slotPtr == PARTY_SIZE + 1) { - if (gUnknown_0203CEC4->unk8_0) + if (sPartyMenuInternal->chooseHalf) { - *ptr = 6; + *slotPtr = PARTY_SIZE; break; } - (*ptr)--; + (*slotPtr)--; } - unk2 = sub_81B1B00(*ptr, unk2); - if (unk2 != -1) - *ptr = unk2; + newSlot = GetNewSlotDoubleLayout(*slotPtr, newSlot); + if (newSlot != -1) + *slotPtr = newSlot; break; - case 1: - if (*ptr == 6) + case MENU_DIR_DOWN: + if (*slotPtr == PARTY_SIZE) { - *ptr = 7; + *slotPtr = PARTY_SIZE + 1; } - else if (*ptr == 7) + else if (*slotPtr == PARTY_SIZE + 1) { - *ptr = 0; + *slotPtr = 0; } else { - unk2 = sub_81B1B00(*ptr, 1); - if (unk2 == -1) + newSlot = GetNewSlotDoubleLayout(*slotPtr, MENU_DIR_DOWN); + if (newSlot == -1) { - if (gUnknown_0203CEC4->unk8_0) - *ptr = 6; + if (sPartyMenuInternal->chooseHalf) + *slotPtr = PARTY_SIZE; else - *ptr = 7; + *slotPtr = PARTY_SIZE + 1; } else { - *ptr = unk2; + *slotPtr = newSlot; } } break; - case 2: - if (*ptr == 0) + case MENU_DIR_RIGHT: + if (*slotPtr == 0) { - if (gUnknown_0203CEC4->unk8_1 == 3) + if (sPartyMenuInternal->lastSelectedSlot == 3) { if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES) != SPECIES_NONE) - *ptr = 3; + *slotPtr = 3; } else if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES) != SPECIES_NONE) { - *ptr = 2; + *slotPtr = 2; } } - else if (*ptr == 1) + else if (*slotPtr == 1) { - if (gUnknown_0203CEC4->unk8_1 == 5) + if (sPartyMenuInternal->lastSelectedSlot == 5) { if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES) != SPECIES_NONE) - *ptr = 5; + *slotPtr = 5; } else if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES) != SPECIES_NONE) { - *ptr = 4; + *slotPtr = 4; } } break; - case -2: - if (*ptr == 2 || *ptr == 3) + case MENU_DIR_LEFT: + if (*slotPtr == 2 || *slotPtr == 3) { - gUnknown_0203CEC4->unk8_1 = *ptr; - *ptr = 0; + sPartyMenuInternal->lastSelectedSlot = *slotPtr; + *slotPtr = 0; } - else if (*ptr == 4 || *ptr == 5) + else if (*slotPtr == 4 || *slotPtr == 5) { - gUnknown_0203CEC4->unk8_1 = *ptr; - *ptr = 1; + sPartyMenuInternal->lastSelectedSlot = *slotPtr; + *slotPtr = 1; } break; } } -static s8 sub_81B1B00(s8 a, s8 b) +static s8 GetNewSlotDoubleLayout(s8 slotId, s8 movementDir) { while (TRUE) { - a += b; - if ((u8)a >= 6) + slotId += movementDir; + if ((u8)slotId >= PARTY_SIZE) return -1; - if (GetMonData(&gPlayerParty[a], MON_DATA_SPECIES) != SPECIES_NONE) - return a; + if (GetMonData(&gPlayerParty[slotId], MON_DATA_SPECIES) != SPECIES_NONE) + return slotId; } } @@ -2782,21 +1628,23 @@ u8* GetMonNickname(struct Pokemon *mon, u8 *dest) return StringGetEnd10(dest); } -u8 sub_81B1B5C(const u8* str, u8 b) +#define tKeepOpen data[0] + +u8 DisplayPartyMenuMessage(const u8* str, bool8 keepOpen) { u8 taskId; - sub_81B3300(str); - taskId = CreateTask(sub_81B1B8C, 1); - gTasks[taskId].data[0] = b; + PartyMenuPrintText(str); + taskId = CreateTask(Task_PrintAndWaitForText, 1); + gTasks[taskId].tKeepOpen = keepOpen; return taskId; } -static void sub_81B1B8C(u8 taskId) +static void Task_PrintAndWaitForText(u8 taskId) { if (RunTextPrintersRetIsActive(6) != TRUE) { - if (gTasks[taskId].data[0] == 0) + if (gTasks[taskId].tKeepOpen == FALSE) { ClearStdWindowAndFrameToTransparent(6, 0); ClearWindowTilemap(6); @@ -2805,75 +1653,77 @@ static void sub_81B1B8C(u8 taskId) } } -bool8 sub_81B1BD4(void) +#undef tKeepOpen + +bool8 IsPartyMenuTextPrinterActive(void) { - return FuncIsActiveTask(sub_81B1B8C); + return FuncIsActiveTask(Task_PrintAndWaitForText); } -static void sub_81B1BE8(u8 taskId) +static void Task_WaitForLinkAndReturnToChooseMon(u8 taskId) { if (sub_81221EC() != TRUE) { - display_pokemon_menu_message(0); - gTasks[taskId].func = sub_81B1370; + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; } } -static void sub_81B1C1C(u8 taskId) +static void Task_ReturnToChooseMonAfterText(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { ClearStdWindowAndFrameToTransparent(6, 0); ClearWindowTilemap(6); if (sub_81221AC() == TRUE) { - gTasks[taskId].func = sub_81B1BE8; + gTasks[taskId].func = Task_WaitForLinkAndReturnToChooseMon; } else { - display_pokemon_menu_message(0); - gTasks[taskId].func = sub_81B1370; + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; } } } -static void sub_81B1C84(struct Pokemon *mon, u16 item, u8 c, u8 unused) +static void DisplayGaveHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen, u8 unused) { GetMonNickname(mon, gStringVar1); CopyItemName(item, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_PkmnWasGivenItem); - sub_81B1B5C(gStringVar4, c); + DisplayPartyMenuMessage(gStringVar4, keepOpen); schedule_bg_copy_tilemap_to_vram(2); } -static void sub_81B1CD0(struct Pokemon *mon, u16 item, u8 c) +static void DisplayTookHeldItemMessage(struct Pokemon *mon, u16 item, bool8 keepOpen) { GetMonNickname(mon, gStringVar1); CopyItemName(item, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_ReceivedItemFromPkmn); - sub_81B1B5C(gStringVar4, c); + DisplayPartyMenuMessage(gStringVar4, keepOpen); schedule_bg_copy_tilemap_to_vram(2); } -static void sub_81B1D1C(struct Pokemon *mon, u16 item, u8 c) +static void DisplayAlreadyHoldingItemSwitchMessage(struct Pokemon *mon, u16 item, bool8 keepOpen) { GetMonNickname(mon, gStringVar1); CopyItemName(item, gStringVar2); - StringExpandPlaceholders(gStringVar4, gText_SwitchPkmnItem); - sub_81B1B5C(gStringVar4, c); + StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyHoldingItemSwitch); + DisplayPartyMenuMessage(gStringVar4, keepOpen); schedule_bg_copy_tilemap_to_vram(2); } -static void sub_81B1D68(u16 item, u16 item2, u8 c) +static void DisplaySwitchedHeldItemMessage(u16 item, u16 item2, bool8 keepOpen) { CopyItemName(item, gStringVar1); CopyItemName(item2, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_SwitchedPkmnItem); - sub_81B1B5C(gStringVar4, c); + DisplayPartyMenuMessage(gStringVar4, keepOpen); schedule_bg_copy_tilemap_to_vram(2); } -static void sub_81B1DB8(struct Pokemon *mon, u16 item) +static void GiveItemToMon(struct Pokemon *mon, u16 item) { u8 itemBytes[2]; @@ -2901,71 +1751,89 @@ static u8 TryTakeMonItem(struct Pokemon* mon) return 2; } -static void pokemon_item_not_removed(u16 itemUnused) +static void BufferBagFullCantTakeItemMessage(u16 itemUnused) { StringExpandPlaceholders(gStringVar4, gText_BagFullCouldNotRemoveItem); } -static void sub_81B1E60(u8 taskId) +#define tHP data[0] +#define tMaxHP data[1] +#define tHPIncrement data[2] +#define tHPToAdd data[3] +#define tPartyId data[4] +#define tStartHP data[5] + +static void Task_PartyMenuModifyHP(u8 taskId) { s16 *data = gTasks[taskId].data; - data[0] += data[2]; - data[3]--; - SetMonData(&gPlayerParty[data[4]], MON_DATA_HP, &data[0]); - DisplayPartyPokemonHPCheck(&gPlayerParty[data[4]], &gUnknown_0203CEDC[data[4]], 1); - DisplayPartyPokemonHPBarCheck(&gPlayerParty[data[4]], &gUnknown_0203CEDC[data[4]]); - if (data[3] == 0 || data[0] == 0 || data[0] == data[1]) + tHP += tHPIncrement; + tHPToAdd--; + SetMonData(&gPlayerParty[tPartyId], MON_DATA_HP, &tHP); + DisplayPartyPokemonHPCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId], 1); + DisplayPartyPokemonHPBarCheck(&gPlayerParty[tPartyId], &sPartyMenuBoxes[tPartyId]); + if (tHPToAdd == 0 || tHP == 0 || tHP == tMaxHP) { - if (data[0] > data[5]) - ConvertIntToDecimalStringN(gStringVar2, data[0] - data[5], 0, 3); + // If HP was recovered, buffer the amount recovered + if (tHP > tStartHP) + ConvertIntToDecimalStringN(gStringVar2, tHP - tStartHP, STR_CONV_MODE_LEFT_ALIGN, 3); + SwitchTaskToFollowupFunc(taskId); } } -void sub_81B1F18(u8 taskId, u8 slot, s8 c, s16 HPDifference, TaskFunc func) +void PartyMenuModifyHP(u8 taskId, u8 slot, s8 hpIncrement, s16 hpDifference, TaskFunc task) { struct Pokemon *mon = &gPlayerParty[slot]; s16 *data = gTasks[taskId].data; - data[0] = GetMonData(mon, MON_DATA_HP); - data[1] = GetMonData(mon, MON_DATA_MAX_HP); - data[2] = c; - data[3] = HPDifference; - data[4] = slot; - data[5] = data[0]; - SetTaskFuncWithFollowupFunc(taskId, sub_81B1E60, func); + tHP = GetMonData(mon, MON_DATA_HP); + tMaxHP = GetMonData(mon, MON_DATA_MAX_HP); + tHPIncrement = hpIncrement; + tHPToAdd = hpDifference; + tPartyId = slot; + tStartHP = tHP; + SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, task); } -static void sub_81B1FA8(u8 taskId, u8 b, u32 hp) +// The usage of hp in this function is mostly nonsense +// Because caseId is always passed 0, none of the other cases ever occur +static void ResetHPTaskData(u8 taskId, u8 caseId, u32 hp) { s16 *data = gTasks[taskId].data; - switch (b) // only case 0 is used + switch (caseId) // always zero { case 0: - data[0] = hp; - data[5] = hp; + tHP = hp; + tStartHP = hp; break; case 1: - data[1] = hp; + tMaxHP = hp; break; case 2: - data[2] = hp; + tHPIncrement = hp; break; case 3: - data[3] = hp; + tHPToAdd = hp; break; case 4: - data[4] = hp; + tPartyId = hp; break; case 5: - SetTaskFuncWithFollowupFunc(taskId, sub_81B1E60, (TaskFunc)hp); // >casting hp as a taskfunc + SetTaskFuncWithFollowupFunc(taskId, Task_PartyMenuModifyHP, (TaskFunc)hp); // >casting hp as a taskfunc break; } } -u8 pokemon_ailments_get_primary(u32 status) +#undef tHP +#undef tMaxHP +#undef tHPIncrement +#undef tHPToAdd +#undef tPartyId +#undef tStartHP + +u8 GetAilmentFromStatus(u32 status) { if (status & STATUS1_PSN_ANY) return AILMENT_PSN; @@ -2986,7 +1854,7 @@ u8 GetMonAilment(struct Pokemon *mon) if (GetMonData(mon, MON_DATA_HP) == 0) return AILMENT_FNT; - ailment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)); + ailment = GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)); if (ailment != AILMENT_NONE) return ailment; if (CheckPartyPokerus(mon, 0)) @@ -2994,97 +1862,97 @@ u8 GetMonAilment(struct Pokemon *mon) return AILMENT_NONE; } -static void sub_81B209C(void) +static void SetPartyMonsAllowedInMinigame(void) { u16 *ptr; - if (gUnknown_0203CEC8.unk8_0 == 11) + if (gPartyMenu.menuType == PARTY_MENU_TYPE_MINIGAME) { u8 i; - ptr = &gUnknown_0203CEC8.unkE; - gUnknown_0203CEC8.unkE = 0; + ptr = &gPartyMenu.data1; + gPartyMenu.data1 = 0; if (gSpecialVar_0x8005 == 0) { for (i = 0; i < gPlayerPartyCount; i++) - *ptr += sub_81B2134(&gPlayerParty[i]) << i; + *ptr += IsMonAllowedInPokemonJump(&gPlayerParty[i]) << i; } else { for (i = 0; i < gPlayerPartyCount; i++) - *ptr += sub_81B2164(&gPlayerParty[i]) << i; + *ptr += IsMonAllowedInDodrioBerryPicking(&gPlayerParty[i]) << i; } } } -static bool16 sub_81B2134(struct Pokemon *mon) +static bool16 IsMonAllowedInPokemonJump(struct Pokemon *mon) { - if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && sub_802C908(GetMonData(mon, MON_DATA_SPECIES))) + if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && IsSpeciesAllowedInPokemonJump(GetMonData(mon, MON_DATA_SPECIES))) return TRUE; return FALSE; } -// Dodrio Berry Picking select? -static bool16 sub_81B2164(struct Pokemon *mon) +static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *mon) { if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_DODRIO) return TRUE; return FALSE; } -static bool8 sub_81B218C(u8 slot) +static bool8 IsMonAllowedInMinigame(u8 slot) { - if (!((gUnknown_0203CEC8.unkE >> slot) & 1)) + if (!((gPartyMenu.data1 >> slot) & 1)) return FALSE; return TRUE; } -static void sub_81B21AC(u8 taskId, u8 slot) +static void TryEnterMonForMinigame(u8 taskId, u8 slot) { - if (sub_81B218C(slot) == TRUE) + if (IsMonAllowedInMinigame(slot) == TRUE) { PlaySE(SE_SELECT); gSpecialVar_0x8004 = slot; - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); } else { PlaySE(SE_HAZURE); - sub_81B1B5C(gText_PkmnCantParticipate, 0); + DisplayPartyMenuMessage(gText_PkmnCantParticipate, FALSE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B1C1C; + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } } -static void sub_81B2210(u8 taskId) +static void CancelParticipationPrompt(u8 taskId) { - sub_81B1B5C(gText_CancelParticipation, 1); + DisplayPartyMenuMessage(gText_CancelParticipation, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B2248; + gTasks[taskId].func = Task_CancelParticipationYesNo; } -static void sub_81B2248(u8 taskId) +static void Task_CancelParticipationYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B227C; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleCancelParticipationYesNoInput; } } -static void sub_81B227C(u8 taskId) +static void Task_HandleCancelParticipationYesNoInput(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - gSpecialVar_0x8004 = 7; - sub_81B12C0(taskId); + gSpecialVar_0x8004 = PARTY_SIZE + 1; + Task_ClosePartyMenu(taskId); break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: - gTasks[taskId].func = sub_81B1C1C; + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; break; } } @@ -3132,23 +2000,23 @@ static bool8 CanLearnTutorMove(u16 species, u8 tutor) return FALSE; } -static void sub_81B239C(u8 a) +static void InitPartyMenuWindows(u8 layout) { u8 i; - switch (a) + switch (layout) { - case 0: - InitWindows(gUnknown_08615810); + case PARTY_LAYOUT_SINGLE: + InitWindows(sSinglePartyMenuWindowTemplate); break; - case 1: - InitWindows(gUnknown_08615850); + case PARTY_LAYOUT_DOUBLE: + InitWindows(sDoublePartyMenuWindowTemplate); break; - case 2: - InitWindows(gUnknown_08615890); + case PARTY_LAYOUT_MULTI: + InitWindows(sMultiPartyMenuWindowTemplate); break; - default: - InitWindows(gUnknown_086158D0); + default: // PARTY_LAYOUT_MULTI_SHOWCASE + InitWindows(sShowcaseMultiPartyMenuWindowTemplate); break; } DeactivateAllTextPrinters(); @@ -3159,51 +2027,53 @@ static void sub_81B239C(u8 a) LoadPalette(gUnknown_0860F074, 0xF0, 0x20); } -static void sub_81B2428(bool8 a) +static void CreateCancelConfirmWindows(bool8 chooseHalf) { - u8 firstWindowId; - u8 windowId; + u8 confirmWindowId; + u8 cancelWindowId; u8 offset; u8 mainOffset; - if (gUnknown_0203CEC8.unk8_0 != 5) + if (gPartyMenu.menuType != PARTY_MENU_TYPE_MULTI_SHOWCASE) { - if (a == TRUE) + if (chooseHalf == TRUE) { - firstWindowId = AddWindow(&gUnknown_08615918); - FillWindowPixelBuffer(firstWindowId, PIXEL_FILL(0)); + confirmWindowId = AddWindow(&sConfirmButtonWindowTemplate); + FillWindowPixelBuffer(confirmWindowId, PIXEL_FILL(0)); mainOffset = GetStringCenterAlignXOffset(0, gMenuText_Confirm, 48); - AddTextPrinterParameterized4(firstWindowId, 0, mainOffset, 1, 0, 0, sFontColorTable[0], -1, gMenuText_Confirm); - PutWindowTilemap(firstWindowId); - CopyWindowToVram(firstWindowId, 2); - windowId = AddWindow(&gUnknown_08615910); + AddTextPrinterParameterized4(confirmWindowId, 0, mainOffset, 1, 0, 0, sFontColorTable[0], -1, gMenuText_Confirm); + PutWindowTilemap(confirmWindowId); + CopyWindowToVram(confirmWindowId, 2); + cancelWindowId = AddWindow(&sMultiCancelButtonWindowTemplate); offset = 0; } else { - windowId = AddWindow(&gUnknown_08615908); + cancelWindowId = AddWindow(&sCancelButtonWindowTemplate); offset = 3; } - FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); - if (gUnknown_0203CEC8.unk8_0 != 10) + FillWindowPixelBuffer(cancelWindowId, PIXEL_FILL(0)); + + // Branches are functionally identical. Second branch is never reached, Spin Trade wasnt fully implemented + if (gPartyMenu.menuType != PARTY_MENU_TYPE_SPIN_TRADE) { mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel, 48); - AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel); + AddTextPrinterParameterized3(cancelWindowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel); } else { mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel2, 48); - AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel2); + AddTextPrinterParameterized3(cancelWindowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel2); } - PutWindowTilemap(windowId); - CopyWindowToVram(windowId, 2); + PutWindowTilemap(cancelWindowId); + CopyWindowToVram(cancelWindowId, 2); schedule_bg_copy_tilemap_to_vram(0); } } -static u16* GetPartyMenuPaletteFromBuffer(u8 paletteId) +static u16* GetPartyMenuPalBufferPtr(u8 paletteId) { - return &gUnknown_0203CEC4->palBuffer[paletteId]; + return &sPartyMenuInternal->palBuffer[paletteId]; } static void BlitBitmapToPartyWindow(u8 windowId, const u8 *b, u8 c, u8 x, u8 y, u8 width, u8 height) @@ -3216,14 +2086,14 @@ static void BlitBitmapToPartyWindow(u8 windowId, const u8 *b, u8 c, u8 x, u8 y, for (i = 0; i < height; i++) { for (j = 0; j < width; j++) - CpuCopy16(GetPartyMiscGraphicsTile(b[x + j + ((y + i) * c)]), &pixels[(i * width + j) * 32], 32); + CpuCopy16(GetPartyMenuBgTile(b[x + j + ((y + i) * c)]), &pixels[(i * width + j) * 32], 32); } BlitBitmapToWindow(windowId, pixels, x * 8, y * 8, width * 8, height * 8); Free(pixels); } } -static void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg) +static void BlitBitmapToPartyWindow_LeftColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg) { if (width == 0 && height == 0) { @@ -3236,7 +2106,7 @@ static void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width, BlitBitmapToPartyWindow(windowId, sMainSlotTileNums_Egg, 10, x, y, width, height); } -static void BlitBitmapToPartyWindow_Default2(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg) +static void BlitBitmapToPartyWindow_RightColumn(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg) { if (width == 0 && height == 0) { @@ -3254,126 +2124,87 @@ static void DrawEmptySlot(u8 windowId) BlitBitmapToPartyWindow(windowId, sEmptySlotTileNums, 18, 0, 0, 18, 3); } -static void UpdateSelectedPartyBox(struct Struct203CEDC *ptr, u8 bitfield) +#define LOAD_PARTY_BOX_PAL(paletteIds, paletteOffsets) \ +{ \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[0]), paletteOffsets[0] + palNum, 2); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[1]), paletteOffsets[1] + palNum, 2); \ + LoadPalette(GetPartyMenuPalBufferPtr(paletteIds[2]), paletteOffsets[2] + palNum, 2); \ +} + +static void LoadPartyBoxPalette(struct PartyMenuBox *menuBox, u8 palFlags) { - u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; - if (bitfield & 0x40) + if (palFlags & PARTY_PAL_NO_MON) { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[0]), gUnknown_08615AC0[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[1]), gUnknown_08615AC0[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[2]), gUnknown_08615AC0[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxNoMonPalIds, sPartyBoxNoMonPalOffsets); } - else if (bitfield & 0x20) + else if (palFlags & PARTY_PAL_TO_SOFTBOIL) { - if (bitfield & 1) + if (palFlags & PARTY_PAL_SELECTED) { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2); } else { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2); } } - else if (bitfield & 0x10) + else if (palFlags & PARTY_PAL_SWITCHING) { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2); } - else if (bitfield & 4) + else if (palFlags & PARTY_PAL_TO_SWITCH) { - if (bitfield & 1) + if (palFlags & PARTY_PAL_SELECTED) { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2); } else { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxSelectedForActionPalIds2, sPartyBoxPalOffsets2); } } - else if (bitfield & 2) + else if (palFlags & PARTY_PAL_FAINTED) { - if (bitfield & 1) + if (palFlags & PARTY_PAL_SELECTED) { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionFaintedPalIds, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2); } else { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxFaintedPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxFaintedPalIds2, sPartyBoxPalOffsets2); } } - else if (bitfield & 8) + else if (palFlags & PARTY_PAL_MULTI_ALT) { - if (bitfield & 1) + if (palFlags & PARTY_PAL_SELECTED) { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionMultiPalIds, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2); } else { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxMultiPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxMultiPalIds2, sPartyBoxPalOffsets2); } } - else if (bitfield & 1) + else if (palFlags & PARTY_PAL_SELECTED) { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxCurrSelectionPalIds2, sPartyBoxPalOffsets2); } else { - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[0]), gUnknown_08615ABA[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[1]), gUnknown_08615ABA[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[2]), gUnknown_08615ABA[2] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[0]), gUnknown_08615ABD[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[1]), gUnknown_08615ABD[1] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[2]), gUnknown_08615ABD[2] + palNum, 2); + LOAD_PARTY_BOX_PAL(sPartyBoxEmptySlotPalIds1, sPartyBoxPalOffsets1); + LOAD_PARTY_BOX_PAL(sPartyBoxEmptySlotPalIds2, sPartyBoxPalOffsets2); } } @@ -3382,20 +2213,20 @@ static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, c AddTextPrinterParameterized3(windowId, 0, align[0], align[1], sFontColorTable[color], 0, str); } -static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c) +static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c) { u8 nickname[POKEMON_NAME_LENGTH + 1]; if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) { if (c == 1) - ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[0] >> 3, ptr->unk0->unk4[1] >> 3, ptr->unk0->unk4[2] >> 3, ptr->unk0->unk4[3] >> 3, 0); + menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[0] >> 3, menuBox->infoRects->dimensions[1] >> 3, menuBox->infoRects->dimensions[2] >> 3, menuBox->infoRects->dimensions[3] >> 3, FALSE); GetMonNickname(mon, nickname); - DisplayPartyPokemonBarDetail(ptr->windowId, nickname, 0, ptr->unk0->unk4); + DisplayPartyPokemonBarDetail(menuBox->windowId, nickname, 0, menuBox->infoRects->dimensions); } } -static void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c) +static void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) { @@ -3403,34 +2234,34 @@ static void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct Struct203C if (ailment == AILMENT_NONE || ailment == AILMENT_PKRS) { if (c != 0) - ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[4] >> 3, (ptr->unk0->unk4[5] >> 3) + 1, ptr->unk0->unk4[6] >> 3, ptr->unk0->unk4[7] >> 3, 0); + menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[4] >> 3, (menuBox->infoRects->dimensions[5] >> 3) + 1, menuBox->infoRects->dimensions[6] >> 3, menuBox->infoRects->dimensions[7] >> 3, FALSE); if (c != 2) - DisplayPartyPokemonLevel(GetMonData(mon, MON_DATA_LEVEL), ptr); + DisplayPartyPokemonLevel(GetMonData(mon, MON_DATA_LEVEL), menuBox); } } } -static void DisplayPartyPokemonLevel(u8 level, struct Struct203CEDC *ptr) +static void DisplayPartyPokemonLevel(u8 level, struct PartyMenuBox *menuBox) { - ConvertIntToDecimalStringN(gStringVar2, level, 0, 3); + ConvertIntToDecimalStringN(gStringVar2, level, STR_CONV_MODE_LEFT_ALIGN, 3); StringCopy(gStringVar1, gText_LevelSymbol); StringAppend(gStringVar1, gStringVar2); - DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[4]); + DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[4]); } -static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c) +static void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c) { u8 nickname[POKEMON_NAME_LENGTH + 1]; if (c == 1) - ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[8] >> 3, (ptr->unk0->unk4[9] >> 3) + 1, ptr->unk0->unk4[10] >> 3, ptr->unk0->unk4[11] >> 3, 0); + menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[8] >> 3, (menuBox->infoRects->dimensions[9] >> 3) + 1, menuBox->infoRects->dimensions[10] >> 3, menuBox->infoRects->dimensions[11] >> 3, FALSE); GetMonNickname(mon, nickname); - DisplayPartyPokemonGender(GetMonGender(mon), GetMonData(mon, MON_DATA_SPECIES), nickname, ptr); + DisplayPartyPokemonGender(GetMonGender(mon), GetMonData(mon, MON_DATA_SPECIES), nickname, menuBox); } -static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct Struct203CEDC *ptr) +static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct PartyMenuBox *menuBox) { - u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; if (species == SPECIES_NONE) return; @@ -3439,111 +2270,111 @@ static void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, stru switch (gender) { case MON_MALE: - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC3[0]), gUnknown_08615AB6[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC3[1]), gUnknown_08615AB6[1] + palNum, 2); - DisplayPartyPokemonBarDetail(ptr->windowId, gText_MaleSymbol, 2, &ptr->unk0->unk4[8]); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[0]), sGenderPalOffsets[0] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderMalePalIds[1]), sGenderPalOffsets[1] + palNum, 2); + DisplayPartyPokemonBarDetail(menuBox->windowId, gText_MaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; case MON_FEMALE: - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC5[0]), gUnknown_08615AB6[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC5[1]), gUnknown_08615AB6[1] + palNum, 2); - DisplayPartyPokemonBarDetail(ptr->windowId, gText_FemaleSymbol, 2, &ptr->unk0->unk4[8]); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[0]), sGenderPalOffsets[0] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sGenderFemalePalIds[1]), sGenderPalOffsets[1] + palNum, 2); + DisplayPartyPokemonBarDetail(menuBox->windowId, gText_FemaleSymbol, 2, &menuBox->infoRects->dimensions[8]); break; } } -static void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c) +static void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) { if (c != 0) - ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[12] >> 3, (ptr->unk0->unk4[13] >> 3) + 1, ptr->unk0->unk4[14] >> 3, ptr->unk0->unk4[15] >> 3, 0); + menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[12] >> 3, (menuBox->infoRects->dimensions[13] >> 3) + 1, menuBox->infoRects->dimensions[14] >> 3, menuBox->infoRects->dimensions[15] >> 3, FALSE); if (c != 2) - DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), ptr); + DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), menuBox); } } -static void DisplayPartyPokemonHP(u16 hp, struct Struct203CEDC *ptr) +static void DisplayPartyPokemonHP(u16 hp, struct PartyMenuBox *menuBox) { - u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, 1, 3); + u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, STR_CONV_MODE_RIGHT_ALIGN, 3); strOut[0] = CHAR_SLASH; strOut[1] = EOS; - DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[12]); + DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[12]); } -static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c) +static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) { if (c != 0) - ptr->unk0->unk0(ptr->windowId, (ptr->unk0->unk4[16] >> 3) + 1, (ptr->unk0->unk4[17] >> 3) + 1, ptr->unk0->unk4[18] >> 3, ptr->unk0->unk4[19] >> 3, 0); + menuBox->infoRects->blitFunc(menuBox->windowId, (menuBox->infoRects->dimensions[16] >> 3) + 1, (menuBox->infoRects->dimensions[17] >> 3) + 1, menuBox->infoRects->dimensions[18] >> 3, menuBox->infoRects->dimensions[19] >> 3, FALSE); if (c != 2) - DisplayPartyPokemonMaxHP(GetMonData(mon, MON_DATA_MAX_HP), ptr); + DisplayPartyPokemonMaxHP(GetMonData(mon, MON_DATA_MAX_HP), menuBox); } } -static void DisplayPartyPokemonMaxHP(u16 maxhp, struct Struct203CEDC *ptr) +static void DisplayPartyPokemonMaxHP(u16 maxhp, struct PartyMenuBox *menuBox) { - ConvertIntToDecimalStringN(gStringVar2, maxhp, 1, 3); + ConvertIntToDecimalStringN(gStringVar2, maxhp, STR_CONV_MODE_RIGHT_ALIGN, 3); StringCopy(gStringVar1, gText_Slash); StringAppend(gStringVar1, gStringVar2); - DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[16]); + DisplayPartyPokemonBarDetail(menuBox->windowId, gStringVar1, 0, &menuBox->infoRects->dimensions[16]); } -static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct Struct203CEDC *ptr) +static void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct PartyMenuBox *menuBox) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) - DisplayPartyPokemonHPBar(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), ptr); + DisplayPartyPokemonHPBar(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), menuBox); } -static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct Struct203CEDC *ptr) +static void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct PartyMenuBox *menuBox) { - u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16; + u8 palNum = GetWindowAttribute(menuBox->windowId, WINDOW_PALETTE_NUM) * 16; u8 hpFraction; switch (GetHPBarLevel(hp, maxhp)) { case HP_BAR_GREEN: case HP_BAR_FULL: - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC7[0]), gUnknown_08615AB8[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC7[1]), gUnknown_08615AB8[1] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[0]), sHPBarPalOffsets[0] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarGreenPalIds[1]), sHPBarPalOffsets[1] + palNum, 2); break; case HP_BAR_YELLOW: - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC9[0]), gUnknown_08615AB8[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC9[1]), gUnknown_08615AB8[1] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[0]), sHPBarPalOffsets[0] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarYellowPalIds[1]), sHPBarPalOffsets[1] + palNum, 2); break; default: - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACB[0]), gUnknown_08615AB8[0] + palNum, 2); - LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACB[1]), gUnknown_08615AB8[1] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[0]), sHPBarPalOffsets[0] + palNum, 2); + LoadPalette(GetPartyMenuPalBufferPtr(sHPBarRedPalIds[1]), sHPBarPalOffsets[1] + palNum, 2); break; } - hpFraction = GetScaledHPFraction(hp, maxhp, ptr->unk0->unk4[22]); - FillWindowPixelRect(ptr->windowId, gUnknown_08615AB8[1], ptr->unk0->unk4[20], ptr->unk0->unk4[21], hpFraction, 1); - FillWindowPixelRect(ptr->windowId, gUnknown_08615AB8[0], ptr->unk0->unk4[20], ptr->unk0->unk4[21] + 1, hpFraction, 2); - if (hpFraction != ptr->unk0->unk4[22]) + hpFraction = GetScaledHPFraction(hp, maxhp, menuBox->infoRects->dimensions[22]); + FillWindowPixelRect(menuBox->windowId, sHPBarPalOffsets[1], menuBox->infoRects->dimensions[20], menuBox->infoRects->dimensions[21], hpFraction, 1); + FillWindowPixelRect(menuBox->windowId, sHPBarPalOffsets[0], menuBox->infoRects->dimensions[20], menuBox->infoRects->dimensions[21] + 1, hpFraction, 2); + if (hpFraction != menuBox->infoRects->dimensions[22]) { // This appears to be an alternating fill - FillWindowPixelRect(ptr->windowId, 0x0D, ptr->unk0->unk4[20] + hpFraction, ptr->unk0->unk4[21], ptr->unk0->unk4[22] - hpFraction, 1); - FillWindowPixelRect(ptr->windowId, 0x02, ptr->unk0->unk4[20] + hpFraction, ptr->unk0->unk4[21] + 1, ptr->unk0->unk4[22] - hpFraction, 2); + FillWindowPixelRect(menuBox->windowId, 0x0D, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21], menuBox->infoRects->dimensions[22] - hpFraction, 1); + FillWindowPixelRect(menuBox->windowId, 0x02, menuBox->infoRects->dimensions[20] + hpFraction, menuBox->infoRects->dimensions[21] + 1, menuBox->infoRects->dimensions[22] - hpFraction, 2); } - CopyWindowToVram(ptr->windowId, 2); + CopyWindowToVram(menuBox->windowId, 2); } -static void DisplayPartyPokemonOtherText(u8 stringID, struct Struct203CEDC *ptr, u8 c) +static void DisplayPartyPokemonDescriptionText(u8 stringID, struct PartyMenuBox *menuBox, u8 c) { - if (c != 0) + if (c) { - int unk = ((ptr->unk0->unk1C % 8) + ptr->unk0->unk1E + 7) / 8; - int unk2 = ((ptr->unk0->unk1D % 8) + ptr->unk0->unk1F + 7) / 8; - ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk1C >> 3, ptr->unk0->unk1D >> 3, unk, unk2, 1); + int width = ((menuBox->infoRects->descTextLeft % 8) + menuBox->infoRects->descTextWidth + 7) / 8; + int height = ((menuBox->infoRects->descTextTop % 8) + menuBox->infoRects->descTextHeight + 7) / 8; + menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->descTextLeft >> 3, menuBox->infoRects->descTextTop >> 3, width, height, TRUE); } if (c != 2) - AddTextPrinterParameterized3(ptr->windowId, 1, ptr->unk0->unk1C, ptr->unk0->unk1D, sFontColorTable[0], 0, sSelectionStringTable[stringID]); + AddTextPrinterParameterized3(menuBox->windowId, 1, menuBox->infoRects->descTextLeft, menuBox->infoRects->descTextTop, sFontColorTable[0], 0, sDescriptionStringTable[stringID]); } -static void sub_81B302C(u8 *ptr) +static void PartyMenuRemoveWindow(u8 *ptr) { if (*ptr != 0xFF) { @@ -3554,166 +2385,169 @@ static void sub_81B302C(u8 *ptr) } } -void display_pokemon_menu_message(u32 stringID) +void DisplayPartyMenuStdMessage(u32 stringId) { - u8 *windowPtr = &gUnknown_0203CEC4->windowId[1]; + u8 *windowPtr = &sPartyMenuInternal->windowId[1]; if (*windowPtr != 0xFF) - sub_81B302C(windowPtr); + PartyMenuRemoveWindow(windowPtr); - if (stringID != 0x7F) + if (stringId != PARTY_MSG_NONE) { - switch (stringID) + switch (stringId) { - case 21: - *windowPtr = AddWindow(&gUnknown_08615928); + case PARTY_MSG_DO_WHAT_WITH_MON: + *windowPtr = AddWindow(&sDoWhatWithMonMsgWindowTemplate); break; - case 24: - *windowPtr = AddWindow(&gUnknown_08615930); + case PARTY_MSG_DO_WHAT_WITH_ITEM: + *windowPtr = AddWindow(&sDoWhatWithItemMsgWindowTemplate); break; - case 25: - *windowPtr = AddWindow(&gUnknown_08615938); + case PARTY_MSG_DO_WHAT_WITH_MAIL: + *windowPtr = AddWindow(&sDoWhatWithMailMsgWindowTemplate); break; - case 22: - case 23: - *windowPtr = AddWindow(&gUnknown_08615940); + case PARTY_MSG_RESTORE_WHICH_MOVE: + case PARTY_MSG_BOOST_PP_WHICH_MOVE: + *windowPtr = AddWindow(&sWhichMoveMsgWindowTemplate); break; - case 26: - *windowPtr = AddWindow(&gUnknown_08615948); + case PARTY_MSG_ALREADY_HOLDING_ONE: + *windowPtr = AddWindow(&sAlreadyHoldingOneMsgWindowTemplate); break; default: - *windowPtr = AddWindow(&gUnknown_08615920); + *windowPtr = AddWindow(&sDefaultPartyMsgWindowTemplate); break; } - if (stringID == 0) + + if (stringId == PARTY_MSG_CHOOSE_MON) { - if (gUnknown_0203CEC4->unk8_0) - stringID = 2; - else if (sub_81B314C() == FALSE) - stringID = 1; + if (sPartyMenuInternal->chooseHalf) + stringId = PARTY_MSG_CHOOSE_MON_AND_CONFIRM; + else if (!ShouldUseChooseMonText()) + stringId = PARTY_MSG_CHOOSE_MON_OR_CANCEL; } DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x4F, 0xD); - StringExpandPlaceholders(gStringVar4, sActionStringTable[stringID]); + StringExpandPlaceholders(gStringVar4, sActionStringTable[stringId]); AddTextPrinterParameterized(*windowPtr, 1, gStringVar4, 0, 1, 0, 0); schedule_bg_copy_tilemap_to_vram(2); } } -static bool8 sub_81B314C(void) +static bool8 ShouldUseChooseMonText(void) { struct Pokemon *party = gPlayerParty; u8 i; - u8 j = 0; + u8 numAliveMons = 0; - if (gUnknown_0203CEC8.unkB == 1) + if (gPartyMenu.action == PARTY_ACTION_SEND_OUT) return TRUE; - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && (GetMonData(&party[i], MON_DATA_HP) != 0 || GetMonData(&party[i], MON_DATA_IS_EGG))) - j++; - if (j > 1) + numAliveMons++; + if (numAliveMons > 1) return TRUE; } return FALSE; } -static u8 sub_81B31B0(u8 a) +static u8 DisplaySelectionWindow(u8 windowType) { struct WindowTemplate window; u8 cursorDimension; u8 fontAttribute; u8 i; - switch (a) + switch (windowType) { - case 0: - SetWindowTemplateFields(&window, 2, 19, 19 - (gUnknown_0203CEC4->listSize * 2), 10, gUnknown_0203CEC4->listSize * 2, 14, 0x2E9); + case SELECTWINDOW_ACTIONS: + SetWindowTemplateFields(&window, 2, 19, 19 - (sPartyMenuInternal->numActions * 2), 10, sPartyMenuInternal->numActions * 2, 14, 0x2E9); break; - case 1: - window = gUnknown_08615950; + case SELECTWINDOW_ITEM: + window = sItemGiveTakeWindowTemplate; break; - case 2: - window = gUnknown_08615958; + case SELECTWINDOW_MAIL: + window = sMailReadTakeWindowTemplate; break; - default: - window = gUnknown_08615960; + default: // SELECTWINDOW_MOVES + window = sMoveSelectWindowTemplate; break; } - gUnknown_0203CEC4->windowId[0] = AddWindow(&window); - DrawStdFrameWithCustomTileAndPalette(gUnknown_0203CEC4->windowId[0], FALSE, 0x4F, 13); - if (a == 3) - return gUnknown_0203CEC4->windowId[0]; + sPartyMenuInternal->windowId[0] = AddWindow(&window); + DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13); + if (windowType == SELECTWINDOW_MOVES) + return sPartyMenuInternal->windowId[0]; cursorDimension = GetMenuCursorDimensionByFont(1, 0); fontAttribute = GetFontAttribute(1, 2); - for (i = 0; i < gUnknown_0203CEC4->listSize; i++) + for (i = 0; i < sPartyMenuInternal->numActions; i++) { - u8 unk = (gUnknown_0203CEC4->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3; - AddTextPrinterParameterized4(gUnknown_0203CEC4->windowId[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, sFontColorTable[unk], 0, sCursorOptions[gUnknown_0203CEC4->actions[i]].text); + u8 fontColorsId = (sPartyMenuInternal->actions[i] >= MENU_FIELD_MOVES) ? 4 : 3; + AddTextPrinterParameterized4(sPartyMenuInternal->windowId[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, sFontColorTable[fontColorsId], 0, sCursorOptions[sPartyMenuInternal->actions[i]].text); } - InitMenuInUpperLeftCorner(gUnknown_0203CEC4->windowId[0], gUnknown_0203CEC4->listSize, 0, 1); + InitMenuInUpperLeftCorner(sPartyMenuInternal->windowId[0], sPartyMenuInternal->numActions, 0, 1); schedule_bg_copy_tilemap_to_vram(2); - return gUnknown_0203CEC4->windowId[0]; + return sPartyMenuInternal->windowId[0]; } -static void sub_81B3300(const u8 *text) +static void PartyMenuPrintText(const u8 *text) { DrawStdFrameWithCustomTileAndPalette(6, FALSE, 0x4F, 13); gTextFlags.canABSpeedUpPrint = TRUE; AddTextPrinterParameterized2(6, 1, text, GetPlayerTextSpeedDelay(), 0, 2, 1, 3); } -static void sub_81B334C(void) +static void PartyMenuDisplayYesNoMenu(void) { - CreateYesNoMenu(&gUnknown_08615968, 0x4F, 13, 0); + CreateYesNoMenu(&sPartyMenuYesNoWindowTemplate, 0x4F, 13, 0); } -static u8 sub_81B3364(void) +static u8 CreateLevelUpStatsWindow(void) { - gUnknown_0203CEC4->windowId[0] = AddWindow(&gUnknown_08615970); - DrawStdFrameWithCustomTileAndPalette(gUnknown_0203CEC4->windowId[0], FALSE, 0x4F, 13); - return gUnknown_0203CEC4->windowId[0]; + sPartyMenuInternal->windowId[0] = AddWindow(&sLevelUpStatsWindowTemplate); + DrawStdFrameWithCustomTileAndPalette(sPartyMenuInternal->windowId[0], FALSE, 0x4F, 13); + return sPartyMenuInternal->windowId[0]; } -static void sub_81B3394(void) +static void RemoveLevelUpStatsWindow(void) { - ClearWindowTilemap(gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + ClearWindowTilemap(sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); } -static void sub_81B33B4(struct Pokemon *mons, u8 slotId, u8 b) +static void SetPartyMonSelectionActions(struct Pokemon *mons, u8 slotId, u8 action) { u8 i; - if (b == 0) + if (action == ACTIONS_NONE) { - CreateActionList(mons, slotId); + SetPartyMonFieldSelectionActions(mons, slotId); } else { - gUnknown_0203CEC4->listSize = sListSizeTable[b]; - for (i = 0; i < gUnknown_0203CEC4->listSize; i++) - gUnknown_0203CEC4->actions[i] = sActionTable[b][i]; + sPartyMenuInternal->numActions = sPartyMenuActionCounts[action]; + for (i = 0; i < sPartyMenuInternal->numActions; i++) + sPartyMenuInternal->actions[i] = sPartyMenuActions[action][i]; } } -static void CreateActionList(struct Pokemon *mons, u8 slotId) +static void SetPartyMonFieldSelectionActions(struct Pokemon *mons, u8 slotId) { u8 i, j; - gUnknown_0203CEC4->listSize = 0; - AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_SUMMARY); + sPartyMenuInternal->numActions = 0; + AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_SUMMARY); + + // Add field moves to action list for (i = 0; i < MAX_MON_MOVES; i++) { for (j = 0; sFieldMoves[j] != FIELD_MOVE_TERMINATOR; j++) { if (GetMonData(&mons[slotId], i + MON_DATA_MOVE1) == sFieldMoves[j]) { - AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, j + MENU_FIELD_MOVES); + AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, j + MENU_FIELD_MOVES); break; } } @@ -3722,118 +2556,124 @@ static void CreateActionList(struct Pokemon *mons, u8 slotId) if (!InBattlePike()) { if (GetMonData(&mons[1], MON_DATA_SPECIES) != SPECIES_NONE) - AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_SWITCH); + AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_SWITCH); if (ItemIsMail(GetMonData(&mons[slotId], MON_DATA_HELD_ITEM))) - AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_MAIL); + AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_MAIL); else - AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_ITEM); + AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_ITEM); } - AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_CANCEL1); + AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, MENU_CANCEL1); } -static u8 sub_81B353C(struct Pokemon *mon) +static u8 GetPartyMenuActionsType(struct Pokemon *mon) { - u32 returnVar; + u32 actionType; - switch (gUnknown_0203CEC8.unk8_0) + switch (gPartyMenu.menuType) { - case 0: + case PARTY_MENU_TYPE_FIELD: if (InMultiBattleRoom() == TRUE || GetMonData(mon, MON_DATA_IS_EGG)) - returnVar = 1; + actionType = ACTIONS_SWITCH; else - returnVar = 0; + actionType = ACTIONS_NONE; // actions populated by SetPartyMonFieldSelectionActions break; - case 1: - returnVar = sub_81B8A2C(mon); + case PARTY_MENU_TYPE_IN_BATTLE: + actionType = GetPartyMenuActionsTypeInBattle(mon); break; - case 4: - switch (sub_81B856C(gUnknown_0203CEC8.slotId)) + case PARTY_MENU_TYPE_CHOOSE_HALF: + switch (GetPartySlotEntryStatus(gPartyMenu.slotId)) { - default: - returnVar = 7; + default: // Not eligible + actionType = ACTIONS_SUMMARY_ONLY; break; - case 0: - returnVar = 4; + case 0: // Eligible + actionType = ACTIONS_ENTER; break; - case 1: - returnVar = 5; + case 1: // Already selected + actionType = ACTIONS_NO_ENTRY; break; } break; - case 6: - returnVar = (GetMonData(mon, MON_DATA_IS_EGG)) ? 7 : 6; + case PARTY_MENU_TYPE_DAYCARE: + actionType = (GetMonData(mon, MON_DATA_IS_EGG)) ? ACTIONS_SUMMARY_ONLY : ACTIONS_STORE; break; - case 8: - returnVar = 10; + case PARTY_MENU_TYPE_UNION_ROOM_REGISTER: + actionType = ACTIONS_REGISTER; break; - case 9: - returnVar = 11; + case PARTY_MENU_TYPE_UNION_ROOM_TRADE: + actionType = ACTIONS_TRADE; break; - case 10: - returnVar = 12; + case PARTY_MENU_TYPE_SPIN_TRADE: + actionType = ACTIONS_SPIN_TRADE; break; - case 12: - returnVar = 13; + case PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS: + actionType = ACTIONS_TAKEITEM_TOSS; break; + // The following have no selection actions (i.e. they exit immediately upon selection) + // PARTY_MENU_TYPE_CONTEST + // PARTY_MENU_TYPE_CHOOSE_MON + // PARTY_MENU_TYPE_MULTI_SHOWCASE + // PARTY_MENU_TYPE_MOVE_RELEARNER + // PARTY_MENU_TYPE_MINIGAME default: - returnVar = 0; + actionType = ACTIONS_NONE; break; } - return returnVar; + return actionType; } -static bool8 sub_81B3608(u8 taskId) +static bool8 CreateSelectionWindow(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item; GetMonNickname(mon, gStringVar1); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - if (gUnknown_0203CEC8.unk8_0 != 12) + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + if (gPartyMenu.menuType != PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS) { - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon)); - sub_81B31B0(0); - display_pokemon_menu_message(21); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon)); + DisplaySelectionWindow(SELECTWINDOW_ACTIONS); + DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MON); } else { item = GetMonData(mon, MON_DATA_HELD_ITEM); if (item != ITEM_NONE) { - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon)); - sub_81B31B0(1); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon)); + DisplaySelectionWindow(SELECTWINDOW_ITEM); CopyItemName(item, gStringVar2); - display_pokemon_menu_message(26); + DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_HOLDING_ONE); } else { StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B469C; + gTasks[taskId].func = Task_UpdateHeldItemSprite; return FALSE; } } return TRUE; } -static void sub_81B36FC(u8 taskId) +static void Task_TryCreateSelectionWindow(u8 taskId) { - if (sub_81B3608(taskId)) + if (CreateSelectionWindow(taskId)) { gTasks[taskId].data[0] = 0xFF; - gTasks[taskId].func = HandleMenuInput; + gTasks[taskId].func = Task_HandleSelectionMenuInput; } } -static void HandleMenuInput(u8 taskId) +static void Task_HandleSelectionMenuInput(u8 taskId) { if (!gPaletteFade.active && sub_81221EC() != TRUE) { s8 input; s16 *data = gTasks[taskId].data; - if (gUnknown_0203CEC4->listSize <= 3) + if (sPartyMenuInternal->numActions <= 3) input = Menu_ProcessInputNoWrapAround_other(); else input = ProcessMenuInput_other(); @@ -3845,12 +2685,12 @@ static void HandleMenuInput(u8 taskId) break; case MENU_B_PRESSED: PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[2]); - sCursorOptions[gUnknown_0203CEC4->actions[gUnknown_0203CEC4->listSize - 1]].func(taskId); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]); + sCursorOptions[sPartyMenuInternal->actions[sPartyMenuInternal->numActions - 1]].func(taskId); break; default: - sub_81B302C(&gUnknown_0203CEC4->windowId[2]); - sCursorOptions[gUnknown_0203CEC4->actions[input]].func(taskId); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[2]); + sCursorOptions[sPartyMenuInternal->actions[input]].func(taskId); break; } } @@ -3859,209 +2699,230 @@ static void HandleMenuInput(u8 taskId) static void CursorCb_Summary(u8 taskId) { PlaySE(SE_SELECT); - gUnknown_0203CEC4->exitCallback = sub_81B3828; - sub_81B12C0(taskId); + sPartyMenuInternal->exitCallback = CB2_ShowPokemonSummaryScreen; + Task_ClosePartyMenu(taskId); } -static void sub_81B3828(void) +static void CB2_ShowPokemonSummaryScreen(void) { - if (gUnknown_0203CEC8.unk8_0 == 1) + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) { - pokemon_change_order(); - ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B3894); + UpdatePartyToBattleOrder(); + ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen); } else { - ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B3894); + ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuFromSummaryScreen); } } -static void sub_81B3894(void) +static void CB2_ReturnToPartyMenuFromSummaryScreen(void) { gPaletteFade.bufferTransferDisabled = TRUE; - gUnknown_0203CEC8.slotId = gLastViewedMonIndex; - InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 21, sub_81B36FC, gUnknown_0203CEC8.exitCallback); + gPartyMenu.slotId = gLastViewedMonIndex; + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_DO_WHAT_WITH_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback); } static void CursorCb_Switch(u8 taskId) { PlaySE(SE_SELECT); - gUnknown_0203CEC8.unkB = 8; - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - display_pokemon_menu_message(3); - sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); - gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.slotId; - gTasks[taskId].func = sub_81B1370; -} - -static void sub_81B3938(u8 taskId) + gPartyMenu.action = PARTY_ACTION_SWITCH; + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + DisplayPartyMenuStdMessage(PARTY_MSG_MOVE_TO_WHERE); + AnimatePartySlot(gPartyMenu.slotId, 1); + gPartyMenu.slotId2 = gPartyMenu.slotId; + gTasks[taskId].func = Task_HandleChooseMonInput; +} + +#define tSlot1Left data[0] +#define tSlot1Top data[1] +#define tSlot1Width data[2] +#define tSlot1Height data[3] +#define tSlot2Left data[4] +#define tSlot2Top data[5] +#define tSlot2Width data[6] +#define tSlot2Height data[7] +#define tSlot1Offset data[8] +#define tSlot2Offset data[9] +#define tSlot1SlideDir data[10] +#define tSlot2SlideDir data[11] + +static void SwitchSelectedMons(u8 taskId) { s16 *data = gTasks[taskId].data; u8 windowIds[2]; - if (gUnknown_0203CEC8.unkA == gUnknown_0203CEC8.slotId) + if (gPartyMenu.slotId2 == gPartyMenu.slotId) { - sub_81B407C(taskId); + FinishTwoMonAction(taskId); } else { - windowIds[0] = gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId; - data[0] = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_LEFT); - data[1] = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_TOP); - data[2] = GetWindowAttribute(windowIds[0], WINDOW_WIDTH); - data[3] = GetWindowAttribute(windowIds[0], WINDOW_HEIGHT); - data[8] = 0; - if (data[2] == 10) - data[10] = -1; + // Initialize switching party mons slide animation + windowIds[0] = sPartyMenuBoxes[gPartyMenu.slotId].windowId; + tSlot1Left = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_LEFT); + tSlot1Top = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_TOP); + tSlot1Width = GetWindowAttribute(windowIds[0], WINDOW_WIDTH); + tSlot1Height = GetWindowAttribute(windowIds[0], WINDOW_HEIGHT); + tSlot1Offset = 0; + if (tSlot1Width == 10) + tSlot1SlideDir = -1; else - data[10] = 1; - windowIds[1] = gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId; - data[4] = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_LEFT); - data[5] = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_TOP); - data[6] = GetWindowAttribute(windowIds[1], WINDOW_WIDTH); - data[7] = GetWindowAttribute(windowIds[1], WINDOW_HEIGHT); - data[9] = 0; - if (data[6] == 10) - data[11] = -1; + tSlot1SlideDir = 1; + windowIds[1] = sPartyMenuBoxes[gPartyMenu.slotId2].windowId; + tSlot2Left = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_LEFT); + tSlot2Top = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_TOP); + tSlot2Width = GetWindowAttribute(windowIds[1], WINDOW_WIDTH); + tSlot2Height = GetWindowAttribute(windowIds[1], WINDOW_HEIGHT); + tSlot2Offset = 0; + if (tSlot2Width == 10) + tSlot2SlideDir = -1; else - data[11] = 1; - gUnknown_0203CEF0 = Alloc(data[2] * (data[3] << 1)); - gUnknown_0203CEF4 = Alloc(data[6] * (data[7] << 1)); - sub_8199CBC(0, gUnknown_0203CEF0, data[0], data[1], data[2], data[3]); - sub_8199CBC(0, gUnknown_0203CEF4, data[4], data[5], data[6], data[7]); + tSlot2SlideDir = 1; + sSlot1TilemapBuffer = Alloc(tSlot1Width * (tSlot1Height << 1)); + sSlot2TilemapBuffer = Alloc(tSlot2Width * (tSlot2Height << 1)); + CopyToBufferFromBgTilemap(0, sSlot1TilemapBuffer, tSlot1Left, tSlot1Top, tSlot1Width, tSlot1Height); + CopyToBufferFromBgTilemap(0, sSlot2TilemapBuffer, tSlot2Left, tSlot2Top, tSlot2Width, tSlot2Height); ClearWindowTilemap(windowIds[0]); ClearWindowTilemap(windowIds[1]); - gUnknown_0203CEC8.unkB = 9; - sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); - sub_81B0FCC(gUnknown_0203CEC8.unkA, 1); - sub_81B3CC0(taskId); - gTasks[taskId].func = sub_81B3D48; + gPartyMenu.action = PARTY_ACTION_SWITCHING; + AnimatePartySlot(gPartyMenu.slotId, 1); + AnimatePartySlot(gPartyMenu.slotId2, 1); + SlidePartyMenuBoxOneStep(taskId); + gTasks[taskId].func = Task_SlideSelectedSlotsOffscreen; } } -static bool8 sub_81B3AD8(s16 a, s16 b, u8 *c, u8 *d, u8 *e) +// returns FALSE if the slot has slid fully offscreen / back onscreen +static bool8 TryMovePartySlot(s16 x, s16 width, u8 *leftMove, u8 *newX, u8 *newWidth) { - if ((a + b) < 0) + if ((x + width) < 0) return FALSE; - if (a > 31) + if (x > 31) return FALSE; - if (a < 0) + if (x < 0) { - *c = a * -1; - *d = 0; - *e = b + a; + *leftMove = x * -1; + *newX = 0; + *newWidth = width + x; } else { - *c = 0; - *d = a; - if ((a + b) > 31) - *e = 32 - a; + *leftMove = 0; + *newX = x; + if ((x + width) > 31) + *newWidth = 32 - x; else - *e = b; + *newWidth = width; } return TRUE; } -static void sub_81B3B40(const void *rectSrc, s16 a, s16 b, s16 c, s16 d, s16 e) +static void MoveAndBufferPartySlot(const void *rectSrc, s16 x, s16 y, s16 width, s16 height, s16 dir) { - u8 f, g, h; + // The use of the dimension parameters here is a mess + u8 leftMove, newX, newWidth; // leftMove is used as a srcX, newX is used as both x and srcHeight, newWidth is used as both width and destY - if (sub_81B3AD8(a, c, &f, &g, &h)) + if (TryMovePartySlot(x, width, &leftMove, &newX, &newWidth)) { - FillBgTilemapBufferRect_Palette0(0, 0, g, b, h, d); - if (sub_81B3AD8(a + e, c, &f, &g, &h)) - CopyRectToBgTilemapBufferRect(0, rectSrc, f, 0, c, d, g, b, h, d, 17, 0, 0); + FillBgTilemapBufferRect_Palette0(0, 0, newX, y, newWidth, height); + if (TryMovePartySlot(x + dir, width, &leftMove, &newX, &newWidth)) + CopyRectToBgTilemapBufferRect(0, rectSrc, leftMove, 0, width, height, newX, y, newWidth, height, 17, 0, 0); } } -static void sub_81B3C0C(struct Struct203CEDC *ptr, s16 a) +static void MovePartyMenuBoxSprites(struct PartyMenuBox *menuBox, s16 offset) { - gSprites[ptr->pokeballSpriteId].pos2.x += a * 8; - gSprites[ptr->itemSpriteId].pos2.x += a * 8; - gSprites[ptr->monSpriteId].pos2.x += a * 8; - gSprites[ptr->statusSpriteId].pos2.x += a * 8; + gSprites[menuBox->pokeballSpriteId].pos2.x += offset * 8; + gSprites[menuBox->itemSpriteId].pos2.x += offset * 8; + gSprites[menuBox->monSpriteId].pos2.x += offset * 8; + gSprites[menuBox->statusSpriteId].pos2.x += offset * 8; } -static void sub_81B3C60(u8 taskId) +static void SlidePartyMenuBoxSpritesOneStep(u8 taskId) { s16 *data = gTasks[taskId].data; - if (data[10] != 0) - sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], data[10]); - if (data[11] != 0) - sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.unkA], data[11]); + if (tSlot1SlideDir != 0) + MovePartyMenuBoxSprites(&sPartyMenuBoxes[gPartyMenu.slotId], tSlot1SlideDir); + if (tSlot2SlideDir != 0) + MovePartyMenuBoxSprites(&sPartyMenuBoxes[gPartyMenu.slotId2], tSlot2SlideDir); } -static void sub_81B3CC0(u8 taskId) +static void SlidePartyMenuBoxOneStep(u8 taskId) { s16 *data = gTasks[taskId].data; - if (data[10] != 0) - sub_81B3B40(gUnknown_0203CEF0, data[0] + data[8], data[1], data[2], data[3], data[10]); - if (data[11] != 0) - sub_81B3B40(gUnknown_0203CEF4, data[4] + data[9], data[5], data[6], data[7], data[11]); + if (tSlot1SlideDir != 0) + MoveAndBufferPartySlot(sSlot1TilemapBuffer, tSlot1Left + tSlot1Offset, tSlot1Top, tSlot1Width, tSlot1Height, tSlot1SlideDir); + if (tSlot2SlideDir != 0) + MoveAndBufferPartySlot(sSlot2TilemapBuffer, tSlot2Left + tSlot2Offset, tSlot2Top, tSlot2Width, tSlot2Height, tSlot2SlideDir); schedule_bg_copy_tilemap_to_vram(0); } -static void sub_81B3D48(u8 taskId) +static void Task_SlideSelectedSlotsOffscreen(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 tilemapRelatedMaybe[2]; + u16 slidingSlotPositions[2]; - sub_81B3CC0(taskId); - sub_81B3C60(taskId); - data[8] += data[10]; - data[9] += data[11]; - tilemapRelatedMaybe[0] = data[0] + data[8]; - tilemapRelatedMaybe[1] = data[4] + data[9]; - if (tilemapRelatedMaybe[0] > 33 && tilemapRelatedMaybe[1] > 33) + SlidePartyMenuBoxOneStep(taskId); + SlidePartyMenuBoxSpritesOneStep(taskId); + tSlot1Offset += tSlot1SlideDir; + tSlot2Offset += tSlot2SlideDir; + slidingSlotPositions[0] = tSlot1Left + tSlot1Offset; + slidingSlotPositions[1] = tSlot2Left + tSlot2Offset; + + // Both slots have slid offscreen + if (slidingSlotPositions[0] > 33 && slidingSlotPositions[1] > 33) { - data[10] *= -1; - data[11] *= -1; - swap_pokemon_and_oams(); - DisplayPartyPokemonData(gUnknown_0203CEC8.slotId); - DisplayPartyPokemonData(gUnknown_0203CEC8.unkA); - PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId); - PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId); - sub_8199CBC(0, gUnknown_0203CEF0, data[0], data[1], data[2], data[3]); - sub_8199CBC(0, gUnknown_0203CEF4, data[4], data[5], data[6], data[7]); - ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId); - ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId); - gTasks[taskId].func = sub_81B3E60; + tSlot1SlideDir *= -1; + tSlot2SlideDir *= -1; + SwitchPartyMon(); + DisplayPartyPokemonData(gPartyMenu.slotId); + DisplayPartyPokemonData(gPartyMenu.slotId2); + PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId); + PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId); + CopyToBufferFromBgTilemap(0, sSlot1TilemapBuffer, tSlot1Left, tSlot1Top, tSlot1Width, tSlot1Height); + CopyToBufferFromBgTilemap(0, sSlot2TilemapBuffer, tSlot2Left, tSlot2Top, tSlot2Width, tSlot2Height); + ClearWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId); + ClearWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId); + gTasks[taskId].func = Task_SlideSelectedSlotsOnscreen; } } -static void sub_81B3E60(u8 taskId) +static void Task_SlideSelectedSlotsOnscreen(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_81B3CC0(taskId); - sub_81B3C60(taskId); - if (data[10] == 0 && data[11] == 0) + SlidePartyMenuBoxOneStep(taskId); + SlidePartyMenuBoxSpritesOneStep(taskId); + + // Both slots have slid back onscreen + if (tSlot1SlideDir == 0 && tSlot2SlideDir == 0) { - PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId); - PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId); + PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId].windowId); + PutWindowTilemap(sPartyMenuBoxes[gPartyMenu.slotId2].windowId); schedule_bg_copy_tilemap_to_vram(0); - Free(gUnknown_0203CEF0); - Free(gUnknown_0203CEF4); - sub_81B407C(taskId); + Free(sSlot1TilemapBuffer); + Free(sSlot2TilemapBuffer); + FinishTwoMonAction(taskId); } + // Continue sliding else { - data[8] += data[10]; - data[9] += data[11]; - if (data[8] == 0) - data[10] = 0; - if (data[9] == 0) - data[11] = 0; + tSlot1Offset += tSlot1SlideDir; + tSlot2Offset += tSlot2SlideDir; + if (tSlot1Offset == 0) + tSlot1SlideDir = 0; + if (tSlot2Offset == 0) + tSlot2SlideDir = 0; } } -static void oamt_swap_pos(u8 *spriteIdPtr1, u8 *spriteIdPtr2) +static void SwitchMenuBoxSprites(u8 *spriteIdPtr1, u8 *spriteIdPtr2) { u8 spriteIdBuffer = *spriteIdPtr1; u16 xBuffer1, yBuffer1, xBuffer2, yBuffer2; @@ -4082,684 +2943,719 @@ static void oamt_swap_pos(u8 *spriteIdPtr1, u8 *spriteIdPtr2) gSprites[*spriteIdPtr2].pos2.y = yBuffer2; } -static void swap_pokemon_and_oams(void) +static void SwitchPartyMon(void) { - struct Struct203CEDC *structPtrs[2]; + struct PartyMenuBox *menuBoxes[2]; struct Pokemon *mon1, *mon2; struct Pokemon *monBuffer; - structPtrs[0] = &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]; - structPtrs[1] = &gUnknown_0203CEDC[gUnknown_0203CEC8.unkA]; - mon1 = &gPlayerParty[gUnknown_0203CEC8.slotId]; - mon2 = &gPlayerParty[gUnknown_0203CEC8.unkA]; + menuBoxes[0] = &sPartyMenuBoxes[gPartyMenu.slotId]; + menuBoxes[1] = &sPartyMenuBoxes[gPartyMenu.slotId2]; + mon1 = &gPlayerParty[gPartyMenu.slotId]; + mon2 = &gPlayerParty[gPartyMenu.slotId2]; monBuffer = Alloc(sizeof(struct Pokemon)); *monBuffer = *mon1; *mon1 = *mon2; *mon2 = *monBuffer; Free(monBuffer); - oamt_swap_pos(&structPtrs[0]->pokeballSpriteId, &structPtrs[1]->pokeballSpriteId); - oamt_swap_pos(&structPtrs[0]->itemSpriteId, &structPtrs[1]->itemSpriteId); - oamt_swap_pos(&structPtrs[0]->monSpriteId, &structPtrs[1]->monSpriteId); - oamt_swap_pos(&structPtrs[0]->statusSpriteId, &structPtrs[1]->statusSpriteId); -} - -static void sub_81B407C(u8 taskId) -{ - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - gUnknown_0203CEC8.unkB = 0; - sub_81B0FCC(gUnknown_0203CEC8.slotId, 0); - gUnknown_0203CEC8.slotId = gUnknown_0203CEC8.unkA; - sub_81B0FCC(gUnknown_0203CEC8.unkA, 1); - display_pokemon_menu_message(0); - gTasks[taskId].func = sub_81B1370; -} + SwitchMenuBoxSprites(&menuBoxes[0]->pokeballSpriteId, &menuBoxes[1]->pokeballSpriteId); + SwitchMenuBoxSprites(&menuBoxes[0]->itemSpriteId, &menuBoxes[1]->itemSpriteId); + SwitchMenuBoxSprites(&menuBoxes[0]->monSpriteId, &menuBoxes[1]->monSpriteId); + SwitchMenuBoxSprites(&menuBoxes[0]->statusSpriteId, &menuBoxes[1]->statusSpriteId); +} + +// Finish switching mons or using Softboiled +static void FinishTwoMonAction(u8 taskId) +{ + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + gPartyMenu.action = PARTY_ACTION_CHOOSE_MON; + AnimatePartySlot(gPartyMenu.slotId, 0); + gPartyMenu.slotId = gPartyMenu.slotId2; + AnimatePartySlot(gPartyMenu.slotId2, 1); + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; +} + +#undef tSlot1Left +#undef tSlot1Top +#undef tSlot1Width +#undef tSlot1Height +#undef tSlot2Left +#undef tSlot2Top +#undef tSlot2Width +#undef tSlot2Height +#undef tSlot1Offset +#undef tSlot2Offset +#undef tSlot1SlideDir +#undef tSlot2SlideDir static void CursorCb_Cancel1(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - if (gUnknown_0203CEC8.unk8_0 == 6) - display_pokemon_menu_message(15); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + if (gPartyMenu.menuType == PARTY_MENU_TYPE_DAYCARE) + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON_2); else - display_pokemon_menu_message(0); - gTasks[taskId].func = sub_81B1370; + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; } static void CursorCb_Item(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, 8); - sub_81B31B0(1); - display_pokemon_menu_message(24); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_ITEM); + DisplaySelectionWindow(SELECTWINDOW_ITEM); + DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_ITEM); gTasks[taskId].data[0] = 0xFF; - gTasks[taskId].func = HandleMenuInput; + gTasks[taskId].func = Task_HandleSelectionMenuInput; } static void CursorCb_Give(u8 taskId) { PlaySE(SE_SELECT); - gUnknown_0203CEC4->exitCallback = sub_81B41C4; - sub_81B12C0(taskId); + sPartyMenuInternal->exitCallback = CB2_SelectBagItemToGive; + Task_ClosePartyMenu(taskId); } -static void sub_81B41C4(void) +static void CB2_SelectBagItemToGive(void) { if (InBattlePyramid() == FALSE) - GoToBagMenu(RETURN_LOCATION_POKEMON_LIST, POCKETS_COUNT, c2_8123744); + GoToBagMenu(RETURN_LOCATION_POKEMON_LIST, POCKETS_COUNT, CB2_GiveHoldItem); else - sub_81C4F98(2, c2_8123744); + GoToBattlePyramidBagMenu(2, CB2_GiveHoldItem); } -static void c2_8123744(void) +static void CB2_GiveHoldItem(void) { if (gSpecialVar_ItemId == ITEM_NONE) { - InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B36FC, gUnknown_0203CEC8.exitCallback); + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback); } else { - gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM); - if (gUnknown_0203CEFC != ITEM_NONE) + sPartyMenuItemId = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM); + + // Already holding item + if (sPartyMenuItemId != ITEM_NONE) { - InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B4350, gUnknown_0203CEC8.exitCallback); + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_SwitchHoldItemsPrompt, gPartyMenu.exitCallback); } + // Give mail else if (ItemIsMail(gSpecialVar_ItemId)) { RemoveBagItem(gSpecialVar_ItemId, 1); - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId); - sub_81B452C(); + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId); + CB2_WriteMailToGiveMon(); } + // Give item else { - InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B42D0, gUnknown_0203CEC8.exitCallback); + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_GiveHoldItem, gPartyMenu.exitCallback); } } } -static void sub_81B42D0(u8 taskId) +static void Task_GiveHoldItem(u8 taskId) { u16 item; if (!gPaletteFade.active) { item = gSpecialVar_ItemId; - sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], item, 0, 0); - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item); + DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], item, FALSE, 0); + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item); RemoveBagItem(item, 1); - gTasks[taskId].func = sub_81B469C; + gTasks[taskId].func = Task_UpdateHeldItemSprite; } } -static void sub_81B4350(u8 taskId) +static void Task_SwitchHoldItemsPrompt(u8 taskId) { if (!gPaletteFade.active) { - sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEFC, 1); - gTasks[taskId].func = sub_81B43A8; + DisplayAlreadyHoldingItemSwitchMessage(&gPlayerParty[gPartyMenu.slotId], sPartyMenuItemId, TRUE); + gTasks[taskId].func = Task_SwitchItemsYesNo; } } -static void sub_81B43A8(u8 taskId) +static void Task_SwitchItemsYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B43DC; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleSwitchItemsYesNoInput; } } -static void sub_81B43DC(u8 taskId) +static void Task_HandleSwitchItemsYesNoInput(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: + case 0: // Yes, switch items RemoveBagItem(gSpecialVar_ItemId, 1); - if (AddBagItem(gUnknown_0203CEFC, 1) == FALSE) + + // No room to return held item to bag + if (AddBagItem(sPartyMenuItemId, 1) == FALSE) { AddBagItem(gSpecialVar_ItemId, 1); - pokemon_item_not_removed(gUnknown_0203CEFC); - sub_81B1B5C(gStringVar4, 0); - gTasks[taskId].func = sub_81B1C1C; + BufferBagFullCantTakeItemMessage(sPartyMenuItemId); + DisplayPartyMenuMessage(gStringVar4, FALSE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } + // Giving mail else if (ItemIsMail(gSpecialVar_ItemId)) { - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId); - gTasks[taskId].func = sub_81B44FC; + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId); + gTasks[taskId].func = Task_WriteMailToGiveMonAfterText; } + // Giving item else { - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId); - sub_81B1D68(gSpecialVar_ItemId, gUnknown_0203CEFC, 1); - gTasks[taskId].func = sub_81B469C; + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId); + DisplaySwitchedHeldItemMessage(gSpecialVar_ItemId, sPartyMenuItemId, TRUE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; } break; case MENU_B_PRESSED: PlaySE(SE_SELECT); - case 1: - gTasks[taskId].func = sub_81B1C1C; + // fallthrough + case 1: // No + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; break; } } -static void sub_81B44FC(u8 taskId) +static void Task_WriteMailToGiveMonAfterText(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - gUnknown_0203CEC4->exitCallback = sub_81B452C; - sub_81B12C0(taskId); + sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMon; + Task_ClosePartyMenu(taskId); } } -static void sub_81B452C(void) +static void CB2_WriteMailToGiveMon(void) { - u8 mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL); + u8 mail = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL); DoEasyChatScreen( - EASY_CHAT_TYPE_MAIL, - gSaveBlock1Ptr->mail[mail].words, - sub_81B4578, - EASY_CHAT_PERSON_DISPLAY_NONE); + EASY_CHAT_TYPE_MAIL, + gSaveBlock1Ptr->mail[mail].words, + CB2_ReturnToPartyMenuFromWritingMail, + EASY_CHAT_PERSON_DISPLAY_NONE); } -static void sub_81B4578(void) +static void CB2_ReturnToPartyMenuFromWritingMail(void) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); + // Canceled writing mail if (gSpecialVar_Result == FALSE) { TakeMailFromMon(mon); - SetMonData(mon, MON_DATA_HELD_ITEM, &gUnknown_0203CEFC); - RemoveBagItem(gUnknown_0203CEFC, 1); + SetMonData(mon, MON_DATA_HELD_ITEM, &sPartyMenuItemId); + RemoveBagItem(sPartyMenuItemId, 1); AddBagItem(item, 1); - InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0, sub_81B36FC, gUnknown_0203CEC8.exitCallback); + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_CHOOSE_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback); } + // Wrote mail else { - InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B4624, gUnknown_0203CEC8.exitCallback); + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_DisplayGaveMailFromPartyMessage, gPartyMenu.exitCallback); } } -static void sub_81B4624(u8 taskId) +// Nearly redundant with Task_DisplayGaveMailFromBagMessgae +static void Task_DisplayGaveMailFromPartyMessage(u8 taskId) { if (!gPaletteFade.active) { - if (gUnknown_0203CEFC == ITEM_NONE) - sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId, 0, 0); + if (sPartyMenuItemId == ITEM_NONE) + DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], gSpecialVar_ItemId, FALSE, 0); else - sub_81B1D68(gSpecialVar_ItemId, gUnknown_0203CEFC, 0); - gTasks[taskId].func = sub_81B469C; + DisplaySwitchedHeldItemMessage(gSpecialVar_ItemId, sPartyMenuItemId, FALSE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; } } -static void sub_81B469C(u8 taskId) +static void Task_UpdateHeldItemSprite(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]); - if (gUnknown_0203CEC8.unk8_0 == 12) + UpdatePartyMonHeldItemSprite(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); + if (gPartyMenu.menuType == PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS) { if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE) - DisplayPartyPokemonOtherText(11, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); + DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_HAVE, &sPartyMenuBoxes[gPartyMenu.slotId], 1); else - DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); + DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_DONT_HAVE, &sPartyMenuBoxes[gPartyMenu.slotId], 1); } - sub_81B1C1C(taskId); + Task_ReturnToChooseMonAfterText(taskId); } } static void CursorCb_TakeItem(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); switch (TryTakeMonItem(mon)) { - case 0: + case 0: // Not holding item GetMonNickname(mon, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); break; - case 1: - pokemon_item_not_removed(item); - sub_81B1B5C(gStringVar4, 1); + case 1: // No room to take item + BufferBagFullCantTakeItemMessage(item); + DisplayPartyMenuMessage(gStringVar4, TRUE); break; - default: - sub_81B1CD0(mon, item, 1); + default: // Took item + DisplayTookHeldItemMessage(mon, item, TRUE); break; } schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B469C; + gTasks[taskId].func = Task_UpdateHeldItemSprite; } static void CursorCb_Toss(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); if (item == ITEM_NONE) { GetMonNickname(mon, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B469C; + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; } else { CopyItemName(item, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_ThrowAwayItem); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B48A8; + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_TossHeldItemYesNo; } } -static void sub_81B48A8(u8 taskId) +static void Task_TossHeldItemYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B48DC; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleTossHeldItemYesNoInput; } } -static void sub_81B48DC(u8 taskId) +static void Task_HandleTossHeldItemYesNoInput(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: CopyItemName(GetMonData(mon, MON_DATA_HELD_ITEM), gStringVar1); StringExpandPlaceholders(gStringVar4, gText_ItemThrownAway); - sub_81B1B5C(gStringVar4, 0); - gTasks[taskId].func = sub_81B4988; + DisplayPartyMenuMessage(gStringVar4, FALSE); + gTasks[taskId].func = Task_TossHeldItem; break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: - gTasks[taskId].func = sub_81B1C1C; + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; break; } } -static void sub_81B4988(u8 taskId) +static void Task_TossHeldItem(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { u16 item = ITEM_NONE; SetMonData(mon, MON_DATA_HELD_ITEM, &item); - sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]); - DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); - gTasks[taskId].func = sub_81B1C1C; + UpdatePartyMonHeldItemSprite(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); + DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_DONT_HAVE, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } } static void CursorCb_Mail(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, 9); - sub_81B31B0(2); - display_pokemon_menu_message(25); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, ACTIONS_MAIL); + DisplaySelectionWindow(SELECTWINDOW_MAIL); + DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MAIL); gTasks[taskId].data[0] = 0xFF; - gTasks[taskId].func = HandleMenuInput; + gTasks[taskId].func = Task_HandleSelectionMenuInput; } static void CursorCb_Read(u8 taskId) { PlaySE(SE_SELECT); - gUnknown_0203CEC4->exitCallback = sub_81B4A98; - sub_81B12C0(taskId); + sPartyMenuInternal->exitCallback = CB2_ReadHeldMail; + Task_ClosePartyMenu(taskId); } -static void sub_81B4A98(void) +static void CB2_ReadHeldMail(void) { - ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL)], sub_81B4AE0, 1); + ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL)], CB2_ReturnToPartyMenuFromReadingMail, 1); } -static void sub_81B4AE0(void) +static void CB2_ReturnToPartyMenuFromReadingMail(void) { gPaletteFade.bufferTransferDisabled = TRUE; - InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 21, sub_81B36FC, gUnknown_0203CEC8.exitCallback); + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_DO_WHAT_WITH_MON, Task_TryCreateSelectionWindow, gPartyMenu.exitCallback); } static void CursorCb_TakeMail(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B1B5C(gText_SendMailToPC, 1); - gTasks[taskId].func = sub_81B4B6C; + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + DisplayPartyMenuMessage(gText_SendMailToPC, TRUE); + gTasks[taskId].func = Task_SendMailToPCYesNo; } -static void sub_81B4B6C(u8 taskId) +static void Task_SendMailToPCYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B4BA0; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleSendMailToPCYesNoInput; } } -static void sub_81B4BA0(u8 taskId) +static void Task_HandleSendMailToPCYesNoInput(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: - if (TakeMailFromMon2(&gPlayerParty[gUnknown_0203CEC8.slotId]) != 0xFF) + case 0: // Yes, send to PC + if (TakeMailFromMon2(&gPlayerParty[gPartyMenu.slotId]) != 0xFF) { - sub_81B1B5C(gText_MailSentToPC, 0); - gTasks[taskId].func = sub_81B469C; + DisplayPartyMenuMessage(gText_MailSentToPC, FALSE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; } else { - sub_81B1B5C(gText_PCMailboxFull, 0); - gTasks[taskId].func = sub_81B1C1C; + DisplayPartyMenuMessage(gText_PCMailboxFull, FALSE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: - sub_81B1B5C(gText_MailMessageWillBeLost, 1); - gTasks[taskId].func = sub_81B4C60; + DisplayPartyMenuMessage(gText_MailMessageWillBeLost, TRUE); + gTasks[taskId].func = Task_LoseMailMessageYesNo; break; } } -static void sub_81B4C60(u8 taskId) +static void Task_LoseMailMessageYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B4C94; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleLoseMailMessageYesNoInput; } } -static void sub_81B4C94(u8 taskId) +static void Task_HandleLoseMailMessageYesNoInput(u8 taskId) { u16 item; switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: - item = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM); + case 0: // Yes, lose mail message + item = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM); if (AddBagItem(item, 1) == TRUE) { - TakeMailFromMon(&gPlayerParty[gUnknown_0203CEC8.slotId]); - sub_81B1B5C(gText_MailTakenFromPkmn, 0); - gTasks[taskId].func = sub_81B469C; + TakeMailFromMon(&gPlayerParty[gPartyMenu.slotId]); + DisplayPartyMenuMessage(gText_MailTakenFromPkmn, FALSE); + gTasks[taskId].func = Task_UpdateHeldItemSprite; } else { - pokemon_item_not_removed(item); - sub_81B1B5C(gStringVar4, 0); - gTasks[taskId].func = sub_81B1C1C; + BufferBagFullCantTakeItemMessage(item); + DisplayPartyMenuMessage(gStringVar4, FALSE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: - gTasks[taskId].func = sub_81B1C1C; + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; break; } } static void CursorCb_Cancel2(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon)); - if (gUnknown_0203CEC8.unk8_0 != 12) + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + SetPartyMonSelectionActions(gPlayerParty, gPartyMenu.slotId, GetPartyMenuActionsType(mon)); + if (gPartyMenu.menuType != PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS) { - sub_81B31B0(0); - display_pokemon_menu_message(21); + DisplaySelectionWindow(SELECTWINDOW_ACTIONS); + DisplayPartyMenuStdMessage(PARTY_MSG_DO_WHAT_WITH_MON); } else { - sub_81B31B0(1); + DisplaySelectionWindow(SELECTWINDOW_ITEM); CopyItemName(GetMonData(mon, MON_DATA_HELD_ITEM), gStringVar2); - display_pokemon_menu_message(26); + DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_HOLDING_ONE); } gTasks[taskId].data[0] = 0xFF; - gTasks[taskId].func = HandleMenuInput; + gTasks[taskId].func = Task_HandleSelectionMenuInput; } static void CursorCb_SendMon(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - if (sub_81B8A7C() == TRUE) + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + if (TrySwitchInPokemon() == TRUE) { - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); } else { - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B1C1C; + // gStringVar4 below is the error message buffered by TrySwitchInPokemon + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } } static void CursorCb_Enter(u8 taskId) { - u8 unk; + u8 maxBattlers; u8 i; - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - unk = sub_81B8830(); - for (i = 0; i < unk; i++) + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + maxBattlers = GetMaxBattleEntries(); + for (i = 0; i < maxBattlers; i++) { if (gSelectedOrderFromParty[i] == 0) { PlaySE(SE_SELECT); - gSelectedOrderFromParty[i] = gUnknown_0203CEC8.slotId + 1; - DisplayPartyPokemonOtherText(i + 2, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); - if (i == (unk - 1)) - sub_81B4F88(); - display_pokemon_menu_message(0); - gTasks[taskId].func = sub_81B1370; + gSelectedOrderFromParty[i] = gPartyMenu.slotId + 1; + DisplayPartyPokemonDescriptionText(i + PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + if (i == (maxBattlers - 1)) + MoveCursorToConfirm(); + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; return; } } - ConvertIntToDecimalStringN(gStringVar1, unk, 0, 1); + ConvertIntToDecimalStringN(gStringVar1, maxBattlers, STR_CONV_MODE_LEFT_ALIGN, 1); StringExpandPlaceholders(gStringVar4, gText_NoMoreThanVar1Pkmn); PlaySE(SE_HAZURE); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B1C1C; + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } -static void sub_81B4F88(void) +static void MoveCursorToConfirm(void) { - sub_81B0FCC(gUnknown_0203CEC8.slotId, 0); - gUnknown_0203CEC8.slotId = 6; - sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); + AnimatePartySlot(gPartyMenu.slotId, 0); + gPartyMenu.slotId = PARTY_SIZE; + AnimatePartySlot(gPartyMenu.slotId, 1); } static void CursorCb_NoEntry(u8 taskId) { - u8 unk; + u8 maxBattlers; u8 i, j; PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - unk = sub_81B8830(); - for (i = 0; i < unk; i++) + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + maxBattlers = GetMaxBattleEntries(); + for (i = 0; i < maxBattlers; i++) { - if (gSelectedOrderFromParty[i] == (gUnknown_0203CEC8.slotId + 1)) + if (gSelectedOrderFromParty[i] == (gPartyMenu.slotId + 1)) { - for (j = i; j < (unk - 1); j++) + for (j = i; j < (maxBattlers - 1); j++) gSelectedOrderFromParty[j] = gSelectedOrderFromParty[j + 1]; gSelectedOrderFromParty[j] = 0; break; } } - DisplayPartyPokemonOtherText(1, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); - for (i = 0; i < (unk - 1); i++) + DisplayPartyPokemonDescriptionText(PARTYBOX_DESC_ABLE_3, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + for (i = 0; i < (maxBattlers - 1); i++) { if (gSelectedOrderFromParty[i] != 0) - DisplayPartyPokemonOtherText(i + 2, &gUnknown_0203CEDC[gSelectedOrderFromParty[i] - 1], 1); + DisplayPartyPokemonDescriptionText(i + PARTYBOX_DESC_FIRST, &sPartyMenuBoxes[gSelectedOrderFromParty[i] - 1], 1); } - display_pokemon_menu_message(0); - gTasks[taskId].func = sub_81B1370; + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; } static void CursorCb_Store(u8 taskId) { PlaySE(SE_SELECT); - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); } +// Register mon for the Trading Board in Union Room static void CursorCb_Register(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES2); - u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES); - u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_OBEDIENCE); + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); + u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); - switch (sub_807A8D0(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), species2, species, obedience)) + switch (CanRegisterMonForTradingBoard(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), species2, species, obedience)) { - case 1: + case CANT_REGISTER_MON: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); break; - case 2: + case CANT_REGISTER_EGG: StringExpandPlaceholders(gStringVar4, gText_EggCantBeTradedNow); break; default: PlaySE(SE_SELECT); - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); return; } PlaySE(SE_HAZURE); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); StringAppend(gStringVar4, gText_PauseUntilPress); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B1C1C; + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } static void CursorCb_Trade1(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES2); - u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES); - u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_OBEDIENCE); - u32 stringId = sub_807A7E0(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), gUnknown_02022C38, species2, gUnknown_02022C3C, gUnknown_02022C3E, species, obedience); + u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); + u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); + u32 stringId = GetUnionRoomTradeMessageId(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), gUnknown_02022C38, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience); - if (stringId != 0) + if (stringId != UR_TRADE_MSG_NONE) { - StringExpandPlaceholders(gStringVar4, gUnknown_08615E0C[stringId - 1]); + StringExpandPlaceholders(gStringVar4, sUnionRoomTradeMessages[stringId - 1]); PlaySE(SE_HAZURE); - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); StringAppend(gStringVar4, gText_PauseUntilPress); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B1C1C; + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } else { PlaySE(SE_SELECT); - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); } } +// Spin Trade (based on the translation of the Japanese trade prompt) +// Not fully implemented, and normally unreachable because PARTY_MENU_TYPE_SPIN_TRADE is never used static void CursorCb_Trade2(u8 taskId) { - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - switch (sub_807A918(gPlayerParty, gUnknown_0203CEC8.slotId)) + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + switch (CanSpinTradeMon(gPlayerParty, gPartyMenu.slotId)) { - case 1: + case CANT_TRADE_LAST_MON: StringExpandPlaceholders(gStringVar4, gText_OnlyPkmnForBattle); break; - case 2: + case CANT_TRADE_NATIONAL: StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); break; - case 3: + case CANT_TRADE_EGG_YET: StringExpandPlaceholders(gStringVar4, gText_EggCantBeTradedNow); break; - default: + default: // CAN_TRADE_MON PlaySE(SE_SELECT); - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); - StringExpandPlaceholders(gStringVar4, gJPText_PutVar1IntoSpinner); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B53FC; + GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1); + StringExpandPlaceholders(gStringVar4, gJPText_AreYouSureYouWantToSpinTradeMon); + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_SpinTradeYesNo; return; } PlaySE(SE_HAZURE); StringAppend(gStringVar4, gText_PauseUntilPress); - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B1C1C; + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } -static void sub_81B53FC(u8 taskId) +static void Task_SpinTradeYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B5430; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleSpinTradeYesNoInput; } } -static void sub_81B5430(u8 taskId) +// See comment on CursorCb_Trade2. Because no callback is set, selecting YES (0) to spin trade just closes the party menu +static void Task_HandleSpinTradeYesNoInput(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: - sub_81B1C1C(taskId); + Task_ReturnToChooseMonAfterText(taskId); break; } } static void CursorCb_FieldMove(u8 taskId) { - u8 fieldMove = gUnknown_0203CEC4->actions[Menu_GetCursorPos()] - MENU_FIELD_MOVES; + u8 fieldMove = sPartyMenuInternal->actions[Menu_GetCursorPos()] - MENU_FIELD_MOVES; const struct MapHeader *mapHeader; PlaySE(SE_SELECT); if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc == NULL) return; - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); if (sub_81221AC() == TRUE || InUnionRoom() == TRUE) { if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED) - display_pokemon_menu_message(13); + DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE); else - display_pokemon_menu_message(sFieldMoveCursorCallbacks[fieldMove].msgId); + DisplayPartyMenuStdMessage(sFieldMoveCursorCallbacks[fieldMove].msgId); - gTasks[taskId].func = task_brm_cancel_1_on_keypad_a_or_b; + gTasks[taskId].func = Task_CancelAfterAorBPress; } else { // All field moves before WATERFALL are HMs. if (fieldMove <= FIELD_MOVE_WATERFALL && FlagGet(FLAG_BADGE01_GET + fieldMove) != TRUE) { - sub_81B1B5C(gText_CantUseUntilNewBadge, 1); - gTasks[taskId].func = sub_81B1C1C; + DisplayPartyMenuMessage(gText_CantUseUntilNewBadge, TRUE); + gTasks[taskId].func = Task_ReturnToChooseMonAfterText; } else if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc() == TRUE) { @@ -4767,80 +3663,82 @@ static void CursorCb_FieldMove(u8 taskId) { case FIELD_MOVE_MILK_DRINK: case FIELD_MOVE_SOFT_BOILED: - sub_8161560(taskId); + ChooseMonForSoftboiled(taskId); break; case FIELD_MOVE_TELEPORT: mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum); - sub_81245DC(gStringVar1, mapHeader->regionMapSectionId); + GetMapNameGeneric(gStringVar1, mapHeader->regionMapSectionId); StringExpandPlaceholders(gStringVar4, gText_ReturnToHealingSpot); - sub_81B5674(taskId); - gUnknown_0203CEC4->data[0] = fieldMove; + DisplayFieldMoveExitAreaMessage(taskId); + sPartyMenuInternal->data[0] = fieldMove; break; case FIELD_MOVE_DIG: mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->escapeWarp.mapGroup, gSaveBlock1Ptr->escapeWarp.mapNum); - sub_81245DC(gStringVar1, mapHeader->regionMapSectionId); + GetMapNameGeneric(gStringVar1, mapHeader->regionMapSectionId); StringExpandPlaceholders(gStringVar4, gText_EscapeFromHere); - sub_81B5674(taskId); - gUnknown_0203CEC4->data[0] = fieldMove; + DisplayFieldMoveExitAreaMessage(taskId); + sPartyMenuInternal->data[0] = fieldMove; break; case FIELD_MOVE_FLY: - gUnknown_0203CEC8.exitCallback = MCB2_FlyMap; - sub_81B12C0(taskId); + gPartyMenu.exitCallback = MCB2_FlyMap; + Task_ClosePartyMenu(taskId); break; default: - gUnknown_0203CEC8.exitCallback = CB2_ReturnToField; - sub_81B12C0(taskId); + gPartyMenu.exitCallback = CB2_ReturnToField; + Task_ClosePartyMenu(taskId); break; } } + // Cant use Field Move else { switch (fieldMove) { case FIELD_MOVE_SURF: - sub_81B5864(); + DisplayCantUseSurfMessage(); break; case FIELD_MOVE_FLASH: - sub_81B57DC(); + DisplayCantUseFlashMessage(); break; default: - display_pokemon_menu_message(sFieldMoveCursorCallbacks[fieldMove].msgId); + DisplayPartyMenuStdMessage(sFieldMoveCursorCallbacks[fieldMove].msgId); break; } - gTasks[taskId].func = task_brm_cancel_1_on_keypad_a_or_b; + gTasks[taskId].func = Task_CancelAfterAorBPress; } } } -static void sub_81B5674(u8 taskId) +static void DisplayFieldMoveExitAreaMessage(u8 taskId) { - sub_81B1B5C(gStringVar4, 1); - gTasks[taskId].func = sub_81B56A4; + DisplayPartyMenuMessage(gStringVar4, TRUE); + gTasks[taskId].func = Task_FieldMoveExitAreaYesNo; } -static void sub_81B56A4(u8 taskId) +static void Task_FieldMoveExitAreaYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B56D8; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleFieldMoveExitAreaYesNoInput; } } -static void sub_81B56D8(u8 taskId) +static void Task_HandleFieldMoveExitAreaYesNoInput(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - gUnknown_0203CEC8.exitCallback = CB2_ReturnToField; - sub_81B12C0(taskId); + gPartyMenu.exitCallback = CB2_ReturnToField; + Task_ClosePartyMenu(taskId); break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: gFieldCallback2 = NULL; gPostMenuFieldCallback = NULL; - sub_81B1C1C(taskId); + Task_ReturnToChooseMonAfterText(taskId); break; } } @@ -4848,40 +3746,40 @@ static void sub_81B56D8(u8 taskId) bool8 FieldCallback_PrepareFadeInFromMenu(void) { pal_fill_black(); - CreateTask(task_launch_hm_phase_2, 8); + CreateTask(Task_FieldMoveWaitForFade, 8); return TRUE; } -static void task_launch_hm_phase_2(u8 taskId) +static void Task_FieldMoveWaitForFade(u8 taskId) { if (IsWeatherNotFadingIn() == TRUE) { - gFieldEffectArguments[0] = brm_get_selected_species(); + gFieldEffectArguments[0] = GetFieldMoveMonSpecies(); gPostMenuFieldCallback(); DestroyTask(taskId); } } -static u16 brm_get_selected_species(void) +static u16 GetFieldMoveMonSpecies(void) { - return GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES); + return GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); } -static void task_brm_cancel_1_on_keypad_a_or_b(u8 taskId) +static void Task_CancelAfterAorBPress(u8 taskId) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) CursorCb_Cancel1(taskId); } -static void sub_81B57DC(void) +static void DisplayCantUseFlashMessage(void) { if (FlagGet(FLAG_SYS_USE_FLASH) == TRUE) - display_pokemon_menu_message(12); + DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_IN_USE); else - display_pokemon_menu_message(13); + DisplayPartyMenuStdMessage(PARTY_MSG_CANT_USE_HERE); } -static void hm_surf_run_dp02scr(void) +static void FieldCallback_Surf(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); FieldEffectStart(FLDEFF_USE_SURF); @@ -4892,18 +3790,18 @@ static bool8 SetUpFieldMove_Surf(void) if (PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = hm_surf_run_dp02scr; + gPostMenuFieldCallback = FieldCallback_Surf; return TRUE; } return FALSE; } -static void sub_81B5864(void) +static void DisplayCantUseSurfMessage(void) { if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING)) - display_pokemon_menu_message(9); + DisplayPartyMenuStdMessage(PARTY_MSG_ALREADY_SURFING); else - display_pokemon_menu_message(8); + DisplayPartyMenuStdMessage(PARTY_MSG_CANT_SURF_HERE); } static bool8 SetUpFieldMove_Fly(void) @@ -4914,12 +3812,12 @@ static bool8 SetUpFieldMove_Fly(void) return FALSE; } -void sub_81B58A8(void) +void CB2_ReturnToPartyMenuFromFlyMap(void) { - InitPartyMenu(0, 0, 0, 1, 0, sub_81B1370, CB2_ReturnToFieldWithOpenMenu); + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldWithOpenMenu); } -static void hm2_waterfall(void) +static void FieldCallback_Waterfall(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); FieldEffectStart(FLDEFF_USE_WATERFALL); @@ -4933,13 +3831,13 @@ static bool8 SetUpFieldMove_Waterfall(void) if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE && IsPlayerSurfingNorth() == TRUE) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = hm2_waterfall; + gPostMenuFieldCallback = FieldCallback_Waterfall; return TRUE; } return FALSE; } -static void sub_81B5958(void) +static void FieldCallback_Dive(void) { gFieldEffectArguments[0] = GetCursorSelectionMonId(); FieldEffectStart(FLDEFF_USE_DIVE); @@ -4951,64 +3849,66 @@ static bool8 SetUpFieldMove_Dive(void) if (gFieldEffectArguments[1] != 0) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; - gPostMenuFieldCallback = sub_81B5958; + gPostMenuFieldCallback = FieldCallback_Dive; return TRUE; } return FALSE; } -static void party_menu_icon_anim(struct Pokemon *mon, struct Struct203CEDC *ptr, u32 a) +static void CreatePartyMonIconSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox, u32 slot) { - u32 bit = 1; + bool32 handleDeoxys = TRUE; u16 species2; + // If in a multi battle, show partners Deoxys icon as Normal forme if (IsMultiBattle() == TRUE && gMain.inBattle) - bit = (gUnknown_08616020[a] ^ bit) ? 1 : 0; + handleDeoxys = (sMultiBattlePartnersPartyMask[slot] ^ handleDeoxys) ? TRUE : FALSE; + species2 = GetMonData(mon, MON_DATA_SPECIES2); - party_menu_link_mon_icon_anim(species2, GetMonData(mon, MON_DATA_PERSONALITY), ptr, 1, bit); - sub_81B5B38(ptr->monSpriteId, mon); + CreatePartyMonIconSpriteParameterized(species2, GetMonData(mon, MON_DATA_PERSONALITY), menuBox, 1, handleDeoxys); + UpdatePartyMonHPBar(menuBox->monSpriteId, mon); } -static void party_menu_link_mon_icon_anim(u16 species, u32 pid, struct Struct203CEDC *ptr, u8 priority, u32 bit) +static void CreatePartyMonIconSpriteParameterized(u16 species, u32 pid, struct PartyMenuBox *menuBox, u8 priority, bool32 handleDeoxys) { if (species != SPECIES_NONE) { - ptr->monSpriteId = CreateMonIcon(species, sub_80D3014, ptr->unk4[0], ptr->unk4[1], 4, pid, bit); - gSprites[ptr->monSpriteId].oam.priority = priority; + menuBox->monSpriteId = CreateMonIcon(species, SpriteCB_MonIcon, menuBox->spriteCoords[0], menuBox->spriteCoords[1], 4, pid, handleDeoxys); + gSprites[menuBox->monSpriteId].oam.priority = priority; } } -static void sub_81B5A8C(u8 spriteId, u16 hp, u16 maxhp) +static void UpdateHPBar(u8 spriteId, u16 hp, u16 maxhp) { switch (GetHPBarLevel(hp, maxhp)) { case HP_BAR_FULL: - sub_80D32C8(&gSprites[spriteId], 0); + SetPartyHPBarSprite(&gSprites[spriteId], 0); break; case HP_BAR_GREEN: - sub_80D32C8(&gSprites[spriteId], 1); + SetPartyHPBarSprite(&gSprites[spriteId], 1); break; case HP_BAR_YELLOW: - sub_80D32C8(&gSprites[spriteId], 2); + SetPartyHPBarSprite(&gSprites[spriteId], 2); break; case HP_BAR_RED: - sub_80D32C8(&gSprites[spriteId], 3); + SetPartyHPBarSprite(&gSprites[spriteId], 3); break; default: - sub_80D32C8(&gSprites[spriteId], 4); + SetPartyHPBarSprite(&gSprites[spriteId], 4); break; } } -static void sub_81B5B38(u8 spriteId, struct Pokemon *mon) +static void UpdatePartyMonHPBar(u8 spriteId, struct Pokemon *mon) { - sub_81B5A8C(spriteId, GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP)); + UpdateHPBar(spriteId, GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP)); } -static void AnimateSelectedPartyIcon(u8 spriteId, u8 a) +static void AnimateSelectedPartyIcon(u8 spriteId, u8 animNum) { gSprites[spriteId].data[0] = 0; - if (a == 0) + if (animNum == 0) { if (gSprites[spriteId].pos1.x == 16) { @@ -5020,71 +3920,71 @@ static void AnimateSelectedPartyIcon(u8 spriteId, u8 a) gSprites[spriteId].pos2.x = -4; gSprites[spriteId].pos2.y = 0; } - gSprites[spriteId].callback = UpdatePartyMonIconFrame; + gSprites[spriteId].callback = SpriteCB_UpdatePartyMonIcon; } else { gSprites[spriteId].pos2.x = 0; gSprites[spriteId].pos2.y = 0; - gSprites[spriteId].callback = UpdatePartyMonIconFrameAndBounce; + gSprites[spriteId].callback = SpriteCB_BouncePartyMonIcon; } } -static void UpdatePartyMonIconFrameAndBounce(struct Sprite *sprite) +static void SpriteCB_BouncePartyMonIcon(struct Sprite *sprite) { - u8 unk = UpdateMonIconFrame(sprite); + u8 animCmd = UpdateMonIconFrame(sprite); - if (unk != 0) + if (animCmd != 0) { - if (unk & 1) + if (animCmd & 1) // % 2 also matches sprite->pos2.y = -3; else sprite->pos2.y = 1; } } -static void UpdatePartyMonIconFrame(struct Sprite *sprite) +static void SpriteCB_UpdatePartyMonIcon(struct Sprite *sprite) { UpdateMonIconFrame(sprite); } -static void party_menu_held_item_object(struct Pokemon *mon, struct Struct203CEDC *ptr) +static void CreatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) { - ptr->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, ptr->unk4[2], ptr->unk4[3], 0); - sub_81B5C94(mon, ptr); + menuBox->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, menuBox->spriteCoords[2], menuBox->spriteCoords[3], 0); + UpdatePartyMonHeldItemSprite(mon, menuBox); } } -static void party_menu_link_mon_held_item_object(u16 species, u16 item, struct Struct203CEDC *ptr) +static void CreatePartyMonHeldItemSpriteParameterized(u16 species, u16 item, struct PartyMenuBox *menuBox) { if (species != SPECIES_NONE) { - ptr->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, ptr->unk4[2], ptr->unk4[3], 0); - gSprites[ptr->itemSpriteId].oam.priority = 0; - sub_81B5CB0(item, ptr); + menuBox->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, menuBox->spriteCoords[2], menuBox->spriteCoords[3], 0); + gSprites[menuBox->itemSpriteId].oam.priority = 0; + ShowOrHideHeldItemSprite(item, menuBox); } } -static void sub_81B5C94(struct Pokemon *mon, struct Struct203CEDC *ptr) +static void UpdatePartyMonHeldItemSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox) { - sub_81B5CB0(GetMonData(mon, MON_DATA_HELD_ITEM), ptr); + ShowOrHideHeldItemSprite(GetMonData(mon, MON_DATA_HELD_ITEM), menuBox); } -static void sub_81B5CB0(u16 item, struct Struct203CEDC *ptr) +static void ShowOrHideHeldItemSprite(u16 item, struct PartyMenuBox *menuBox) { if (item == ITEM_NONE) { - gSprites[ptr->itemSpriteId].invisible = TRUE; + gSprites[menuBox->itemSpriteId].invisible = TRUE; } else { if (ItemIsMail(item)) - StartSpriteAnim(&gSprites[ptr->itemSpriteId], 1); + StartSpriteAnim(&gSprites[menuBox->itemSpriteId], 1); else - StartSpriteAnim(&gSprites[ptr->itemSpriteId], 0); - gSprites[ptr->itemSpriteId].invisible = FALSE; + StartSpriteAnim(&gSprites[menuBox->itemSpriteId], 0); + gSprites[menuBox->itemSpriteId].invisible = FALSE; } } @@ -5094,33 +3994,33 @@ void LoadHeldItemIcons(void) LoadSpritePalette(&sSpritePalette_HeldItem); } -void sub_81B5D4C(u8 *a, u8 *b, u8 c) +void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty) { u16 i; u16 item; - switch (c) + switch (whichParty) { - case 0: - for (i = 0; i < a[0]; i++) + case TRADE_PLAYER: + for (i = 0; i < partyCounts[TRADE_PLAYER]; i++) { item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); if (item != ITEM_NONE) - sub_81B5DF0(b[i], ItemIsMail(item)); + CreateHeldItemSpriteForTrade(partySpriteIds[i], ItemIsMail(item)); } break; - case 1: - for (i = 0; i < a[1]; i++) + case TRADE_PARTNER: + for (i = 0; i < partyCounts[TRADE_PARTNER]; i++) { item = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM); if (item != ITEM_NONE) - sub_81B5DF0(b[i + 6], ItemIsMail(item)); + CreateHeldItemSpriteForTrade(partySpriteIds[i + PARTY_SIZE], ItemIsMail(item)); } break; } } -static void sub_81B5DF0(u8 spriteId, u8 isMail) +static void CreateHeldItemSpriteForTrade(u8 spriteId, bool8 isMail) { u8 subpriority = gSprites[spriteId].subpriority; u8 newSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, 250, 170, subpriority - 1); @@ -5149,22 +4049,23 @@ static void SpriteCB_HeldItem(struct Sprite *sprite) } } -static void party_menu_pokeball_object(struct Pokemon *mon, struct Struct203CEDC *ptr) +static void CreatePartyMonPokeballSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) - ptr->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, ptr->unk4[6], ptr->unk4[7], 8); + menuBox->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, menuBox->spriteCoords[6], menuBox->spriteCoords[7], 8); } -static void party_menu_link_mon_pokeball_object(u16 species, struct Struct203CEDC *ptr) +static void CreatePartyMonPokeballSpriteParameterized(u16 species, struct PartyMenuBox *menuBox) { if (species != SPECIES_NONE) { - ptr->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, ptr->unk4[6], ptr->unk4[7], 8); - gSprites[ptr->pokeballSpriteId].oam.priority = 0; + menuBox->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, menuBox->spriteCoords[6], menuBox->spriteCoords[7], 8); + gSprites[menuBox->pokeballSpriteId].oam.priority = 0; } } -static u8 sub_81B5F34(u8 x, u8 y) +// For Cancel when Confirm isnt present +static u8 CreatePokeballButtonSprite(u8 x, u8 y) { u8 spriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, x, y, 8); @@ -5172,19 +4073,22 @@ static u8 sub_81B5F34(u8 x, u8 y) return spriteId; } -static u8 sub_81B5F74(u8 x, u8 y) +// For Confirm and Cancel when both are present +static u8 CreateSmallPokeballButtonSprite(u8 x, u8 y) { - return CreateSprite(&gSpriteTemplate_8615F78, x, y, 8); + return CreateSprite(&sSpriteTemplate_MenuPokeballSmall, x, y, 8); } -static void sub_81B5F98(u8 spriteId, u8 a) +static void PartyMenuStartSpriteAnim(u8 spriteId, u8 animNum) { - StartSpriteAnim(&gSprites[spriteId], a); + StartSpriteAnim(&gSprites[spriteId], animNum); } -static void sub_81B5FBC(u8 spriteId, u8 spriteId2, u8 a) +// Unused. Might explain the large blank section in gPartyMenuPokeballSmall_Gfx +// At the very least this is how the unused anim cmds for sSpriteAnimTable_MenuPokeballSmall were meant to be accessed +static void SpriteCB_BounceConfirmCancelButton(u8 spriteId, u8 spriteId2, u8 animNum) { - if (a == 0) + if (animNum == 0) { StartSpriteAnim(&gSprites[spriteId], 2); StartSpriteAnim(&gSprites[spriteId2], 4); @@ -5207,41 +4111,41 @@ static void LoadPartyMenuPokeballGfx(void) LoadCompressedSpritePalette(&sSpritePalette_MenuPokeball); } -static void party_menu_status_condition_object(struct Pokemon *mon, struct Struct203CEDC *ptr) +static void CreatePartyMonStatusSprite(struct Pokemon *mon, struct PartyMenuBox *menuBox) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) { - ptr->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, ptr->unk4[4], ptr->unk4[5], 0); - party_menu_get_status_condition_and_update_object(mon, ptr); + menuBox->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, menuBox->spriteCoords[4], menuBox->spriteCoords[5], 0); + SetPartyMonAilmentGfx(mon, menuBox); } } -static void party_menu_link_mon_status_condition_object(u16 species, u8 status, struct Struct203CEDC *ptr) +static void CreatePartyMonStatusSpriteParameterized(u16 species, u8 status, struct PartyMenuBox *menuBox) { if (species != SPECIES_NONE) { - ptr->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, ptr->unk4[4], ptr->unk4[5], 0); - party_menu_update_status_condition_object(status, ptr); - gSprites[ptr->statusSpriteId].oam.priority = 0; + menuBox->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, menuBox->spriteCoords[4], menuBox->spriteCoords[5], 0); + UpdatePartyMonAilmentGfx(status, menuBox); + gSprites[menuBox->statusSpriteId].oam.priority = 0; } } -static void party_menu_get_status_condition_and_update_object(struct Pokemon *mon, struct Struct203CEDC *ptr) +static void SetPartyMonAilmentGfx(struct Pokemon *mon, struct PartyMenuBox *menuBox) { - party_menu_update_status_condition_object(GetMonAilment(mon), ptr); + UpdatePartyMonAilmentGfx(GetMonAilment(mon), menuBox); } -static void party_menu_update_status_condition_object(u8 status, struct Struct203CEDC *ptr) +static void UpdatePartyMonAilmentGfx(u8 status, struct PartyMenuBox *menuBox) { switch (status) { case AILMENT_NONE: case AILMENT_PKRS: - gSprites[ptr->statusSpriteId].invisible = TRUE; + gSprites[menuBox->statusSpriteId].invisible = TRUE; break; default: - StartSpriteAnim(&gSprites[ptr->statusSpriteId], status - 1); - gSprites[ptr->statusSpriteId].invisible = FALSE; + StartSpriteAnim(&gSprites[menuBox->statusSpriteId], status - 1); + gSprites[menuBox->statusSpriteId].invisible = FALSE; break; } } @@ -5252,68 +4156,68 @@ static void LoadPartyMenuAilmentGfx(void) LoadCompressedSpritePalette(&sSpritePalette_StatusIcons); } -void sub_81B617C(void) +void CB2_ShowPartyMenuForItemUse(void) { - MainCallback callback = c2_815ABFC; - u8 doubleBattleStatus; - bool8 inBattle; + MainCallback callback = CB2_ReturnToBagMenu; + u8 partyLayout; + u8 menuType; u8 i; - u8 msgIdMaybe; + u8 msgId; TaskFunc task; if (gMain.inBattle) { - inBattle = TRUE; - doubleBattleStatus = sub_81B8984(); + menuType = PARTY_MENU_TYPE_IN_BATTLE; + partyLayout = GetPartyLayoutFromBattleType(); } else { - inBattle = FALSE; - doubleBattleStatus = 0; + menuType = PARTY_MENU_TYPE_FIELD; + partyLayout = PARTY_LAYOUT_SINGLE; } if (GetItemEffectType(gSpecialVar_ItemId) == ITEM_EFFECT_SACRED_ASH) { - gUnknown_0203CEC8.slotId = 0; + gPartyMenu.slotId = 0; for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { - gUnknown_0203CEC8.slotId = i; + gPartyMenu.slotId = i; break; } } - task = sub_81B6280; - msgIdMaybe = 0x7F; + task = Task_SetSacredAshCB; + msgId = PARTY_MSG_NONE; } else { if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_TM_HM) - msgIdMaybe = 4; + msgId = PARTY_MSG_TEACH_WHICH_MON; else - msgIdMaybe = 5; + msgId = PARTY_MSG_USE_ON_WHICH_MON; - task = sub_81B1370; + task = Task_HandleChooseMonInput; } - InitPartyMenu(inBattle, doubleBattleStatus, 3, 1, msgIdMaybe, task, callback); + InitPartyMenu(menuType, partyLayout, PARTY_ACTION_USE_ITEM, TRUE, msgId, task, callback); } -static void c2_815ABFC(void) +static void CB2_ReturnToBagMenu(void) { if (InBattlePyramid() == FALSE) GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL); else - sub_81C4F98(4, gPyramidBagCursorData.callback); + GoToBattlePyramidBagMenu(4, gPyramidBagCursorData.callback); } -static void sub_81B6280(u8 taskId) +static void Task_SetSacredAshCB(u8 taskId) { if (!gPaletteFade.active) { - if (gUnknown_0203CEC8.unk8_0 == 1) - gUnknown_0203CEC4->exitCallback = sub_81B9140; - gUnknown_03006328(taskId, sub_81B6794); + if (gPartyMenu.menuType == PARTY_MENU_TYPE_IN_BATTLE) + sPartyMenuInternal->exitCallback = CB2_SetUpExitToBattleScreen; + gItemUseCB(taskId, Task_ClosePartyMenuAfterText); // ItemUseCB_SacredAsh in this case } } @@ -5397,7 +4301,7 @@ static void GetMedicineItemEffectMessage(u16 item) } } -static bool8 UsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item) +static bool8 NotUsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item) { if (GetItemEffectType(item) == ITEM_EFFECT_HP_EV && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_SHEDINJA) return FALSE; @@ -5411,10 +4315,10 @@ static bool8 IsItemFlute(u16 item) return FALSE; } -static bool8 ExecuteTableBasedItemEffect__(u8 partyMonIndex, u16 item, u8 monMoveIndex) +static bool8 ExecuteTableBasedItemEffect_(u8 partyMonIndex, u16 item, u8 monMoveIndex) { if (gMain.inBattle) - return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, sub_81B8F38(partyMonIndex), monMoveIndex); + return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, GetPartyIdFromBattleSlot(partyMonIndex), monMoveIndex); else return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex); } @@ -5422,11 +4326,11 @@ static bool8 ExecuteTableBasedItemEffect__(u8 partyMonIndex, u16 item, u8 monMov void ItemUseCB_Medicine(u8 taskId, TaskFunc task) { u16 hp = 0; - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = gSpecialVar_ItemId; bool8 canHeal; - if (UsingHPEVItemOnShedinja(mon, item)) + if (NotUsingHPEVItemOnShedinja(mon, item)) { canHeal = IsHPRecoveryItem(item); if (canHeal == TRUE) @@ -5435,12 +4339,12 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (hp == GetMonData(mon, MON_DATA_MAX_HP)) canHeal = FALSE; } - if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, item, 0)) + if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0)) { iTriedHonestlyIDid: - gUnknown_0203CEE8 = 0; + gPartyMenuUseExitCallback = FALSE; PlaySE(SE_SELECT); - sub_81B1B5C(gText_WontHaveEffect, 1); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); schedule_bg_copy_tilemap_to_vram(2); gTasks[taskId].func = task; return; @@ -5448,89 +4352,89 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) } else { - goto iTriedHonestlyIDid; + goto iTriedHonestlyIDid; //TODO: resolve this goto } - gUnknown_0203CEE8 = 1; - if (IsItemFlute(item) == FALSE) + gPartyMenuUseExitCallback = TRUE; + if (!IsItemFlute(item)) { PlaySE(SE_KAIFUKU); - if (gUnknown_0203CEC8.unkB != 14) + if (gPartyMenu.action != PARTY_ACTION_REUSABLE_ITEM) RemoveBagItem(item, 1); } else { PlaySE(SE_BIDORO); } - party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]); - if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].statusSpriteId].invisible) - DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); + SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); + if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible) + DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1); if (canHeal == TRUE) { if (hp == 0) - sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); - sub_81B1F18(taskId, gUnknown_0203CEC8.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B672C); - sub_81B1FA8(taskId, 0, hp); + AnimatePartySlot(gPartyMenu.slotId, 1); + PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_DisplayHPRestoredMessage); + ResetHPTaskData(taskId, 0, hp); return; } else { GetMonNickname(mon, gStringVar1); GetMedicineItemEffectMessage(item); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); gTasks[taskId].func = task; } } -static void sub_81B672C(u8 taskId) +static void Task_DisplayHPRestoredMessage(u8 taskId) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); + GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2); - sub_81B1B5C(gStringVar4, 0); + DisplayPartyMenuMessage(gStringVar4, FALSE); schedule_bg_copy_tilemap_to_vram(2); HandleBattleLowHpMusicChange(); - gTasks[taskId].func = sub_81B6794; + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } -static void sub_81B6794(u8 taskId) +static void Task_ClosePartyMenuAfterText(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - if (gUnknown_0203CEE8 == 0) - gUnknown_0203CEC4->exitCallback = NULL; - sub_81B12C0(taskId); + if (gPartyMenuUseExitCallback == FALSE) + sPartyMenuInternal->exitCallback = NULL; + Task_ClosePartyMenu(taskId); } } -void sub_81B67C8(u8 taskId, TaskFunc task) +void ItemUseCB_ReduceEV(u8 taskId, TaskFunc task) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = gSpecialVar_ItemId; u8 effectType = GetItemEffectType(item); u16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); - u16 relevantEV = ItemEffectToMonEv(mon, effectType); - bool8 cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, item, 0); + u16 ev = ItemEffectToMonEv(mon, effectType); + bool8 cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, item, 0); u16 newFriendship = GetMonData(mon, MON_DATA_FRIENDSHIP); - u16 newRelevantEV = ItemEffectToMonEv(mon, effectType); + u16 newEv = ItemEffectToMonEv(mon, effectType); - if (cannotUseEffect || (friendship == newFriendship && relevantEV == newRelevantEV)) + if (cannotUseEffect || (friendship == newFriendship && ev == newEv)) { - gUnknown_0203CEE8 = 0; + gPartyMenuUseExitCallback = FALSE; PlaySE(SE_SELECT); - sub_81B1B5C(gText_WontHaveEffect, 1); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); schedule_bg_copy_tilemap_to_vram(2); gTasks[taskId].func = task; } else { - gUnknown_0203CEE8 = 1; + gPartyMenuUseExitCallback = TRUE; PlaySE(SE_KAIFUKU); RemoveBagItem(item, 1); GetMonNickname(mon, gStringVar1); ItemEffectToStatString(effectType, gStringVar2); if (friendship != newFriendship) { - if (relevantEV != newRelevantEV) + if (ev != newEv) StringExpandPlaceholders(gStringVar4, gText_PkmnFriendlyBaseVar2Fell); else StringExpandPlaceholders(gStringVar4, gText_PkmnFriendlyBaseVar2CantFall); @@ -5539,7 +4443,7 @@ void sub_81B67C8(u8 taskId, TaskFunc task) { StringExpandPlaceholders(gStringVar4, gText_PkmnAdoresBaseVar2Fell); } - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); gTasks[taskId].func = task; } @@ -5592,18 +4496,18 @@ static void ItemEffectToStatString(u8 effectType, u8 *dest) } } -static void sub_81B6A10(u8 slot) +static void ShowMoveSelectWindow(u8 slot) { u8 i; u8 moveCount = 0; u8 fontId = 1; - u8 windowId = sub_81B31B0(3); + u8 windowId = DisplaySelectionWindow(SELECTWINDOW_MOVES); u16 move; for (i = 0; i < MAX_MON_MOVES; i++) { move = GetMonData(&gPlayerParty[slot], MON_DATA_MOVE1 + i); - AddTextPrinterParameterized(windowId, fontId, gMoveNames[move], 8, (i * 16) + 1, 0xFF, NULL); + AddTextPrinterParameterized(windowId, fontId, gMoveNames[move], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL); if (move != MOVE_NONE) moveCount++; } @@ -5611,7 +4515,7 @@ static void sub_81B6A10(u8 slot) schedule_bg_copy_tilemap_to_vram(2); } -static void ether_effect_related_3(u8 taskId) +static void Task_HandleWhichMoveInput(u8 taskId) { s8 input = Menu_ProcessInput(); @@ -5620,17 +4524,17 @@ static void ether_effect_related_3(u8 taskId) if (input == MENU_B_PRESSED) { PlaySE(SE_SELECT); - sub_81B6BB4(taskId); + ReturnToUseOnWhichMon(taskId); } else { - sub_81B302C(&gUnknown_0203CEC4->windowId[1]); - ether_effect_related_2(taskId); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]); + SetSelectedMoveForPPItem(taskId); } } } -void dp05_ether(u8 taskId, TaskFunc task) +void ItemUseCB_PPRecovery(u8 taskId, TaskFunc task) { const u8 *effect; u16 item = gSpecialVar_ItemId; @@ -5642,76 +4546,76 @@ void dp05_ether(u8 taskId, TaskFunc task) if (!(effect[4] & ITEM4_HEAL_PP_ONE)) { - gUnknown_0203CEC8.unkE = 0; - ether_effect_related(taskId); + gPartyMenu.data1 = 0; + TryUsePPItem(taskId); } else { PlaySE(SE_SELECT); - display_pokemon_menu_message(22); - sub_81B6A10(gUnknown_0203CEC8.slotId); - gTasks[taskId].func = ether_effect_related_3; + DisplayPartyMenuStdMessage(PARTY_MSG_RESTORE_WHICH_MOVE); + ShowMoveSelectWindow(gPartyMenu.slotId); + gTasks[taskId].func = Task_HandleWhichMoveInput; } } -static void ether_effect_related_2(u8 taskId) +static void SetSelectedMoveForPPItem(u8 taskId) { - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - gUnknown_0203CEC8.unkE = Menu_GetCursorPos(); - ether_effect_related(taskId); + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + gPartyMenu.data1 = Menu_GetCursorPos(); + TryUsePPItem(taskId); } -static void sub_81B6BB4(u8 taskId) +static void ReturnToUseOnWhichMon(u8 taskId) { - gTasks[taskId].func = sub_81B1370; - gUnknown_0203CEC4->exitCallback = NULL; - sub_81B302C(&gUnknown_0203CEC4->windowId[0]); - display_pokemon_menu_message(5); + gTasks[taskId].func = Task_HandleChooseMonInput; + sPartyMenuInternal->exitCallback = NULL; + PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); + DisplayPartyMenuStdMessage(PARTY_MSG_USE_ON_WHICH_MON); } -static void ether_effect_related(u8 taskId) +static void TryUsePPItem(u8 taskId) { u16 move = MOVE_NONE; - s16 *moveslot = &gUnknown_0203CEC8.unkE; + s16 *moveSlot = &gPartyMenu.data1; u16 item = gSpecialVar_ItemId; - struct Struct203CEC8 *ptr = &gUnknown_0203CEC8; + struct PartyMenu *ptr = &gPartyMenu; struct Pokemon *mon; - if (ExecuteTableBasedItemEffect__(ptr->slotId, item, *moveslot)) + if (ExecuteTableBasedItemEffect_(ptr->slotId, item, *moveSlot)) { - gUnknown_0203CEE8 = 0; + gPartyMenuUseExitCallback = FALSE; PlaySE(SE_SELECT); - sub_81B1B5C(gText_WontHaveEffect, 1); + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B6794; + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } else { - gUnknown_0203CEE8 = 1; + gPartyMenuUseExitCallback = TRUE; mon = &gPlayerParty[ptr->slotId]; PlaySE(SE_KAIFUKU); RemoveBagItem(item, 1); - move = GetMonData(mon, MON_DATA_MOVE1 + *moveslot); + move = GetMonData(mon, MON_DATA_MOVE1 + *moveSlot); StringCopy(gStringVar1, gMoveNames[move]); GetMedicineItemEffectMessage(item); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B6794; + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } } -void dp05_pp_up(u8 taskId, TaskFunc task) +void ItemUseCB_PPUp(u8 taskId, TaskFunc task) { PlaySE(SE_SELECT); - display_pokemon_menu_message(23); - sub_81B6A10(gUnknown_0203CEC8.slotId); - gTasks[taskId].func = ether_effect_related_3; + DisplayPartyMenuStdMessage(PARTY_MSG_BOOST_PP_WHICH_MOVE); + ShowMoveSelectWindow(gPartyMenu.slotId); + gTasks[taskId].func = Task_HandleWhichMoveInput; } u16 ItemIdToBattleMoveId(u16 item) { u16 tmNumber = item - ITEM_TM01_FOCUS_PUNCH; - return gTMHMMoves[tmNumber]; + return sTMHMMoves[tmNumber]; } bool8 IsMoveHm(u16 move) @@ -5720,7 +4624,7 @@ bool8 IsMoveHm(u16 move) for (i = 0; i < NUM_HIDDEN_MACHINES; i++) { - if (gTMHMMoves[i + NUM_TECHNICAL_MACHINES] == move) + if (sTMHMMoves[i + NUM_TECHNICAL_MACHINES] == move) return TRUE; } return FALSE; @@ -5738,30 +4642,30 @@ bool8 MonKnowsMove(struct Pokemon *mon, u16 move) return FALSE; } -static void sub_81B6D74(const u8 *str) +static void DisplayLearnMoveMessage(const u8 *str) { StringExpandPlaceholders(gStringVar4, str); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); } -static void sub_81B6D98(u8 taskId, const u8 *str) +static void DisplayLearnMoveMessageAndClose(u8 taskId, const u8 *str) { - sub_81B6D74(str); - gTasks[taskId].func = sub_81B6794; + DisplayLearnMoveMessage(str); + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } // move[1] doesn't use constants cause I don't know if it's actually a move ID storage -void sub_81B6DC4(u8 taskId, TaskFunc task) +void ItemUseCB_TMHM(u8 taskId, TaskFunc task) { struct Pokemon *mon; s16 *move; u16 item; PlaySE(SE_SELECT); - mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; - move = &gUnknown_0203CEC8.unkE; + mon = &gPlayerParty[gPartyMenu.slotId]; + move = &gPartyMenu.data1; item = gSpecialVar_ItemId; GetMonNickname(mon, gStringVar1); move[0] = ItemIdToBattleMoveId(item); @@ -5771,28 +4675,28 @@ void sub_81B6DC4(u8 taskId, TaskFunc task) switch (CanMonLearnTMTutor(mon, item, 0)) { case CANNOT_LEARN_MOVE: - sub_81B6D98(taskId, gText_PkmnCantLearnMove); + DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove); return; case ALREADY_KNOWS_MOVE: - sub_81B6D98(taskId, gText_PkmnAlreadyKnows); + DisplayLearnMoveMessageAndClose(taskId, gText_PkmnAlreadyKnows); return; } - if (GiveMoveToMon(mon, move[0]) != 0xFFFF) + if (GiveMoveToMon(mon, move[0]) != MON_HAS_MAX_MOVES) { - gTasks[taskId].func = sub_81B6EB4; + gTasks[taskId].func = Task_LearnedMove; } else { - sub_81B6D74(gText_PkmnNeedsToReplaceMove); - gTasks[taskId].func = sub_81B6FF4; + DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove); + gTasks[taskId].func = Task_ReplaceMoveYesNo; } } -static void sub_81B6EB4(u8 taskId) +static void Task_LearnedMove(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; - s16 *move = &gUnknown_0203CEC8.unkE; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + s16 *move = &gPartyMenu.data1; u16 item = gSpecialVar_ItemId; if (move[1] == 0) @@ -5804,186 +4708,188 @@ static void sub_81B6EB4(u8 taskId) GetMonNickname(mon, gStringVar1); StringCopy(gStringVar2, gMoveNames[move[0]]); StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B6F60; + gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText; } -static void sub_81B6F60(u8 taskId) +static void Task_DoLearnedMoveFanfareAfterText(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { PlayFanfare(MUS_FANFA1); - gTasks[taskId].func = sub_81B6F98; + gTasks[taskId].func = Task_LearnNextMoveOrClosePartyMenu; } } -static void sub_81B6F98(u8 taskId) +static void Task_LearnNextMoveOrClosePartyMenu(u8 taskId) { if (IsFanfareTaskInactive() && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) { - if (gUnknown_0203CEC8.unk10 == 1) - sub_81B77AC(taskId); + if (gPartyMenu.learnMoveState == 1) + Task_TryLearningNextMove(taskId); else { - if (gUnknown_0203CEC8.unk10 == 2) + if (gPartyMenu.learnMoveState == 2) // never occurs gSpecialVar_Result = TRUE; - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); } } } -static void sub_81B6FF4(u8 taskId) +static void Task_ReplaceMoveYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B7028; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleReplaceMoveYesNoInput; } } -static void sub_81B7028(u8 taskId) +static void Task_HandleReplaceMoveYesNoInput(u8 taskId) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - sub_81B1B5C(gText_WhichMoveToForget, 1); - gTasks[taskId].func = sub_81B7088; + DisplayPartyMenuMessage(gText_WhichMoveToForget, TRUE); + gTasks[taskId].func = Task_ShowSummaryScreenToForgetMove; break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: - sub_81B7230(taskId); + StopLearningMovePrompt(taskId); break; } } -static void sub_81B7088(u8 taskId) +static void Task_ShowSummaryScreenToForgetMove(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - gUnknown_0203CEC4->exitCallback = sub_81B70B8; - sub_81B12C0(taskId); + sPartyMenuInternal->exitCallback = CB2_ShowSummaryScreenToForgetMove; + Task_ClosePartyMenu(taskId); } } -static void sub_81B70B8(void) +static void CB2_ShowSummaryScreenToForgetMove(void) { - ShowSelectMovePokemonSummaryScreen(gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B70F0, gUnknown_0203CEC8.unkE); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gPartyMenu.slotId, gPlayerPartyCount - 1, CB2_ReturnToPartyMenuWhileLearningMove, gPartyMenu.data1); } -static void sub_81B70F0(void) +static void CB2_ReturnToPartyMenuWhileLearningMove(void) { - InitPartyMenu(0, 0, 0, 1, 0x7F, sub_81B711C, gUnknown_0203CEC8.exitCallback); + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, TRUE, PARTY_MSG_NONE, Task_ReturnToPartyMenuWhileLearningMove, gPartyMenu.exitCallback); } -static void sub_81B711C(u8 taskId) +static void Task_ReturnToPartyMenuWhileLearningMove(u8 taskId) { if (!gPaletteFade.active) { - if (sub_81C1B94() != 4) - sub_81B7154(taskId); + if (GetMoveSlotToReplace() != MAX_MON_MOVES) + DisplayPartyMenuForgotMoveMessage(taskId); else - sub_81B7230(taskId); + StopLearningMovePrompt(taskId); } } -static void sub_81B7154(u8 taskId) +static void DisplayPartyMenuForgotMoveMessage(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; - u16 move = GetMonData(mon, MON_DATA_MOVE1 + sub_81C1B94()); + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + u16 move = GetMonData(mon, MON_DATA_MOVE1 + GetMoveSlotToReplace()); GetMonNickname(mon, gStringVar1); StringCopy(gStringVar2, gMoveNames[move]); - sub_81B6D74(gText_12PoofForgotMove); - gTasks[taskId].func = sub_81B71D4; + DisplayLearnMoveMessage(gText_12PoofForgotMove); + gTasks[taskId].func = Task_PartyMenuReplaceMove; } -static void sub_81B71D4(u8 taskId) +static void Task_PartyMenuReplaceMove(u8 taskId) { struct Pokemon *mon; u16 move; - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; - RemoveMonPPBonus(mon, sub_81C1B94()); - move = gUnknown_0203CEC8.unkE; - SetMonMoveSlot(mon, move, sub_81C1B94()); - sub_81B6EB4(taskId); + mon = &gPlayerParty[gPartyMenu.slotId]; + RemoveMonPPBonus(mon, GetMoveSlotToReplace()); + move = gPartyMenu.data1; + SetMonMoveSlot(mon, move, GetMoveSlotToReplace()); + Task_LearnedMove(taskId); } } -static void sub_81B7230(u8 taskId) +static void StopLearningMovePrompt(u8 taskId) { - StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]); + StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]); StringExpandPlaceholders(gStringVar4, gText_StopLearningMove2); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B7294; + gTasks[taskId].func = Task_StopLearningMoveYesNo; } -static void sub_81B7294(u8 taskId) +static void Task_StopLearningMoveYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B72C8; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleStopLearningMoveYesNoInput; } } -static void sub_81B72C8(u8 taskId) +static void Task_HandleStopLearningMoveYesNoInput(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: GetMonNickname(mon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]); + StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]); StringExpandPlaceholders(gStringVar4, gText_MoveNotLearned); - sub_81B1B5C(gStringVar4, 1); - if (gUnknown_0203CEC8.unk10 == 1) + DisplayPartyMenuMessage(gStringVar4, TRUE); + if (gPartyMenu.learnMoveState == 1) { - gTasks[taskId].func = sub_81B73E4; + gTasks[taskId].func = Task_TryLearningNextMoveAfterText; } else { - if (gUnknown_0203CEC8.unk10 == 2) + if (gPartyMenu.learnMoveState == 2) // never occurs gSpecialVar_Result = FALSE; - gTasks[taskId].func = sub_81B6794; + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } break; case MENU_B_PRESSED: PlaySE(SE_SELECT); + // fallthrough case 1: GetMonNickname(mon, gStringVar1); - StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]); - sub_81B6D74(gText_PkmnNeedsToReplaceMove); - gTasks[taskId].func = sub_81B6FF4; + StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]); + DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove); + gTasks[taskId].func = Task_ReplaceMoveYesNo; break; } } -static void sub_81B73E4(u8 taskId) +static void Task_TryLearningNextMoveAfterText(u8 taskId) { - if (sub_81B1BD4() != TRUE) - sub_81B77AC(taskId); + if (IsPartyMenuTextPrinterActive() != TRUE) + Task_TryLearningNextMove(taskId); } -void dp05_rare_candy(u8 taskId, TaskFunc task) +void ItemUseCB_RareCandy(u8 taskId, TaskFunc task) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; - struct Struct203CEC4 *ptr = gUnknown_0203CEC4; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; + struct PartyMenuInternal *ptr = sPartyMenuInternal; s16 *arrayPtr = ptr->data; u16 *itemPtr = &gSpecialVar_ItemId; bool8 cannotUseEffect; if (GetMonData(mon, MON_DATA_LEVEL) != MAX_LEVEL) { - sub_81B79A0(mon, arrayPtr); - cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, *itemPtr, 0); - sub_81B79A0(mon, &ptr->data[6]); + BufferMonStatsToTaskData(mon, arrayPtr); + cannotUseEffect = ExecuteTableBasedItemEffect_(gPartyMenu.slotId, *itemPtr, 0); + BufferMonStatsToTaskData(mon, &ptr->data[NUM_STATS]); } else { @@ -5992,166 +4898,166 @@ void dp05_rare_candy(u8 taskId, TaskFunc task) PlaySE(SE_SELECT); if (cannotUseEffect) { - gUnknown_0203CEE8 = 0; - sub_81B1B5C(gText_WontHaveEffect, 1); + gPartyMenuUseExitCallback = FALSE; + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); schedule_bg_copy_tilemap_to_vram(2); gTasks[taskId].func = task; } else { - gUnknown_0203CEE8 = 1; + gPartyMenuUseExitCallback = TRUE; PlayFanfareByFanfareNum(0); - sub_81B754C(gUnknown_0203CEC8.slotId, mon); + UpdateMonDisplayInfoAfterRareCandy(gPartyMenu.slotId, mon); RemoveBagItem(gSpecialVar_ItemId, 1); GetMonNickname(mon, gStringVar1); - ConvertIntToDecimalStringN(gStringVar2, GetMonData(mon, MON_DATA_LEVEL), 0, 3); + ConvertIntToDecimalStringN(gStringVar2, GetMonData(mon, MON_DATA_LEVEL), STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_PkmnElevatedToLvVar2); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B75D4; + gTasks[taskId].func = Task_DisplayLevelUpStatsPg1; } } -static void sub_81B754C(u8 slot, struct Pokemon *mon) +static void UpdateMonDisplayInfoAfterRareCandy(u8 slot, struct Pokemon *mon) { - party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[slot]); - if (gSprites[gUnknown_0203CEDC[slot].statusSpriteId].invisible) - DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[slot], 1); - DisplayPartyPokemonHPCheck(mon, &gUnknown_0203CEDC[slot], 1); - DisplayPartyPokemonMaxHPCheck(mon, &gUnknown_0203CEDC[slot], 1); - DisplayPartyPokemonHPBarCheck(mon, &gUnknown_0203CEDC[slot]); - sub_81B5B38(gUnknown_0203CEDC[slot].monSpriteId, mon); - sub_81B0FCC(slot, 1); + SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[slot]); + if (gSprites[sPartyMenuBoxes[slot].statusSpriteId].invisible) + DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[slot], 1); + DisplayPartyPokemonHPCheck(mon, &sPartyMenuBoxes[slot], 1); + DisplayPartyPokemonMaxHPCheck(mon, &sPartyMenuBoxes[slot], 1); + DisplayPartyPokemonHPBarCheck(mon, &sPartyMenuBoxes[slot]); + UpdatePartyMonHPBar(sPartyMenuBoxes[slot].monSpriteId, mon); + AnimatePartySlot(slot, 1); schedule_bg_copy_tilemap_to_vram(0); } -static void sub_81B75D4(u8 taskId) +static void Task_DisplayLevelUpStatsPg1(u8 taskId) { - if (WaitFanfare(FALSE) && sub_81B1BD4() != TRUE && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) + if (WaitFanfare(FALSE) && IsPartyMenuTextPrinterActive() != TRUE && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) { PlaySE(SE_SELECT); - sub_81B767C(taskId); - gTasks[taskId].func = sub_81B7634; + DisplayLevelUpStatsPg1(taskId); + gTasks[taskId].func = Task_DisplayLevelUpStatsPg2; } } -static void sub_81B7634(u8 taskId) +static void Task_DisplayLevelUpStatsPg2(u8 taskId) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { PlaySE(SE_SELECT); - sub_81B76C8(taskId); - gTasks[taskId].func = sub_81B7704; + DisplayLevelUpStatsPg2(taskId); + gTasks[taskId].func = Task_TryLearnNewMoves; } } -static void sub_81B767C(u8 taskId) +static void DisplayLevelUpStatsPg1(u8 taskId) { - s16 *arrayPtr = gUnknown_0203CEC4->data; + s16 *arrayPtr = sPartyMenuInternal->data; - arrayPtr[12] = sub_81B3364(); + arrayPtr[12] = CreateLevelUpStatsWindow(); DrawLevelUpWindowPg1(arrayPtr[12], arrayPtr, &arrayPtr[6], 1, 2, 3); CopyWindowToVram(arrayPtr[12], 2); schedule_bg_copy_tilemap_to_vram(2); } -static void sub_81B76C8(u8 taskId) +static void DisplayLevelUpStatsPg2(u8 taskId) { - s16 *arrayPtr = gUnknown_0203CEC4->data; + s16 *arrayPtr = sPartyMenuInternal->data; DrawLevelUpWindowPg2(arrayPtr[12], &arrayPtr[6], 1, 2, 3); CopyWindowToVram(arrayPtr[12], 2); schedule_bg_copy_tilemap_to_vram(2); } -static void sub_81B7704(u8 taskId) +static void Task_TryLearnNewMoves(u8 taskId) { - u16 result; + u16 learnMove; if (WaitFanfare(0) && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) { - sub_81B3394(); - result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.slotId], 1); - gUnknown_0203CEC8.unk10 = 1; - switch (result) + RemoveLevelUpStatsWindow(); + learnMove = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], TRUE); + gPartyMenu.learnMoveState = 1; + switch (learnMove) { - case 0: - sub_81B7810(taskId); + case 0: // No moves to learn + PartyMenuTryEvolution(taskId); break; - case 0xFFFF: - sub_81B787C(taskId); + case MON_HAS_MAX_MOVES: + DisplayMonNeedsToReplaceMove(taskId); break; - case 0xFFFE: - gTasks[taskId].func = sub_81B77AC; + case MON_ALREADY_KNOWS_MOVE: + gTasks[taskId].func = Task_TryLearningNextMove; break; default: - sub_81B7910(taskId, result); + DisplayMonLearnedMove(taskId, learnMove); break; } } } -static void sub_81B77AC(u8 taskId) +static void Task_TryLearningNextMove(u8 taskId) { - u16 result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.slotId], 0); + u16 result = MonTryLearningNewMove(&gPlayerParty[gPartyMenu.slotId], FALSE); switch (result) { - case 0: - sub_81B7810(taskId); + case 0: // No moves to learn + PartyMenuTryEvolution(taskId); break; - case 0xFFFF: - sub_81B787C(taskId); + case MON_HAS_MAX_MOVES: + DisplayMonNeedsToReplaceMove(taskId); break; - case 0xFFFE: + case MON_ALREADY_KNOWS_MOVE: return; default: - sub_81B7910(taskId, result); + DisplayMonLearnedMove(taskId, result); break; } } -static void sub_81B7810(u8 taskId) +static void PartyMenuTryEvolution(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 targetSpecies = GetEvolutionTargetSpecies(mon, 0, 0); if (targetSpecies != SPECIES_NONE) { FreePartyPointers(); - gCB2_AfterEvolution = gUnknown_0203CEC8.exitCallback; - BeginEvolutionScene(mon, targetSpecies, 1, gUnknown_0203CEC8.slotId); + gCB2_AfterEvolution = gPartyMenu.exitCallback; + BeginEvolutionScene(mon, targetSpecies, 1, gPartyMenu.slotId); DestroyTask(taskId); } else { - gTasks[taskId].func = sub_81B6794; + gTasks[taskId].func = Task_ClosePartyMenuAfterText; } } -static void sub_81B787C(u8 taskId) +static void DisplayMonNeedsToReplaceMove(u8 taskId) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); + GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1); StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); StringExpandPlaceholders(gStringVar4, gText_PkmnNeedsToReplaceMove); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gUnknown_0203CEC8.unkE = gMoveToLearn; - gTasks[taskId].func = sub_81B6FF4; + gPartyMenu.data1 = gMoveToLearn; + gTasks[taskId].func = Task_ReplaceMoveYesNo; } -static void sub_81B7910(u8 taskId, u16 move) +static void DisplayMonLearnedMove(u8 taskId, u16 move) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); + GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1); StringCopy(gStringVar2, gMoveNames[move]); StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3); - sub_81B1B5C(gStringVar4, 1); + DisplayPartyMenuMessage(gStringVar4, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gUnknown_0203CEC8.unkE = move; - gTasks[taskId].func = sub_81B6F60; + gPartyMenu.data1 = move; + gTasks[taskId].func = Task_DoLearnedMoveFanfareAfterText; } -static void sub_81B79A0(struct Pokemon *mon, s16 *data) +static void BufferMonStatsToTaskData(struct Pokemon *mon, s16 *data) { data[0] = GetMonData(mon, MON_DATA_MAX_HP); data[1] = GetMonData(mon, MON_DATA_ATK); @@ -6161,93 +5067,101 @@ static void sub_81B79A0(struct Pokemon *mon, s16 *data) data[3] = GetMonData(mon, MON_DATA_SPEED); } -void sub_81B79E8(u8 taskId, TaskFunc task) +#define tUsedOnSlot data[0] +#define tHadEffect data[1] +#define tLastSlotUsed data[2] + +void ItemUseCB_SacredAsh(u8 taskId, TaskFunc task) { - gUnknown_0203CEC4->data[0] = 0; - gUnknown_0203CEC4->data[1] = 0; - gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.slotId; - sub_81B7A28(taskId); + sPartyMenuInternal->tUsedOnSlot = FALSE; + sPartyMenuInternal->tHadEffect = FALSE; + sPartyMenuInternal->tLastSlotUsed = gPartyMenu.slotId; + UseSacredAsh(taskId); } -static void sub_81B7A28(u8 taskId) +static void UseSacredAsh(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 hp; if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE) { - gTasks[taskId].func = task_sacred_ash_party_loop; + gTasks[taskId].func = Task_SacredAshLoop; return; } hp = GetMonData(mon, MON_DATA_HP); - if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, gSpecialVar_ItemId, 0)) + if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0)) { - gTasks[taskId].func = task_sacred_ash_party_loop; + gTasks[taskId].func = Task_SacredAshLoop; return; } PlaySE(SE_KAIFUKU); - party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]); - if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].statusSpriteId].invisible) - DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); - sub_81B0FCC(gUnknown_0203CEC4->data[2], 0); - sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); - sub_81B1F18(taskId, gUnknown_0203CEC8.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B7C10); - sub_81B1FA8(taskId, 0, hp); - gUnknown_0203CEC4->data[0] = 1; - gUnknown_0203CEC4->data[1] = 1; + SetPartyMonAilmentGfx(mon, &sPartyMenuBoxes[gPartyMenu.slotId]); + if (gSprites[sPartyMenuBoxes[gPartyMenu.slotId].statusSpriteId].invisible) + DisplayPartyPokemonLevelCheck(mon, &sPartyMenuBoxes[gPartyMenu.slotId], 1); + AnimatePartySlot(sPartyMenuInternal->tLastSlotUsed, 0); + AnimatePartySlot(gPartyMenu.slotId, 1); + PartyMenuModifyHP(taskId, gPartyMenu.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, Task_SacredAshDisplayHPRestored); + ResetHPTaskData(taskId, 0, hp); + sPartyMenuInternal->tUsedOnSlot = TRUE; + sPartyMenuInternal->tHadEffect = TRUE; } -static void task_sacred_ash_party_loop(u8 taskId) +static void Task_SacredAshLoop(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - if (gUnknown_0203CEC4->data[0] == 1) + if (sPartyMenuInternal->tUsedOnSlot == TRUE) { - gUnknown_0203CEC4->data[0] = 0; - gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.slotId; + sPartyMenuInternal->tUsedOnSlot = FALSE; + sPartyMenuInternal->tLastSlotUsed = gPartyMenu.slotId; } - if (++(gUnknown_0203CEC8.slotId) == PARTY_SIZE) + if (++(gPartyMenu.slotId) == PARTY_SIZE) { - if (gUnknown_0203CEC4->data[1] == 0) + if (sPartyMenuInternal->tHadEffect == FALSE) { - gUnknown_0203CEE8 = 0; - sub_81B1B5C(gText_WontHaveEffect, 1); + gPartyMenuUseExitCallback = FALSE; + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); schedule_bg_copy_tilemap_to_vram(2); } else { - gUnknown_0203CEE8 = 1; + gPartyMenuUseExitCallback = TRUE; RemoveBagItem(gSpecialVar_ItemId, 1); } - gTasks[taskId].func = sub_81B6794; - gUnknown_0203CEC8.slotId = 0; + gTasks[taskId].func = Task_ClosePartyMenuAfterText; + gPartyMenu.slotId = 0; } else { - sub_81B7A28(taskId); + UseSacredAsh(taskId); } } } -static void sub_81B7C10(u8 taskId) +static void Task_SacredAshDisplayHPRestored(u8 taskId) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); + GetMonNickname(&gPlayerParty[gPartyMenu.slotId], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2); - sub_81B1B5C(gStringVar4, 0); + DisplayPartyMenuMessage(gStringVar4, FALSE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = task_sacred_ash_party_loop; + gTasks[taskId].func = Task_SacredAshLoop; } -void sub_81B7C74(u8 taskId, TaskFunc task) +#undef tUsedOnSlot +#undef tHadEffect +#undef tLastSlotUsed + +void ItemUseCB_EvolutionStone(u8 taskId, TaskFunc task) { PlaySE(SE_SELECT); - gCB2_AfterEvolution = gUnknown_0203CEC8.exitCallback; - if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, gSpecialVar_ItemId, 0)) + gCB2_AfterEvolution = gPartyMenu.exitCallback; + if (ExecuteTableBasedItemEffect_(gPartyMenu.slotId, gSpecialVar_ItemId, 0)) { - gUnknown_0203CEE8 = 0; - sub_81B1B5C(gText_WontHaveEffect, 1); + gPartyMenuUseExitCallback = FALSE; + DisplayPartyMenuMessage(gText_WontHaveEffect, TRUE); schedule_bg_copy_tilemap_to_vram(2); gTasks[taskId].func = task; } @@ -6326,264 +5240,271 @@ u8 GetItemEffectType(u16 item) return ITEM_EFFECT_NONE; } -static void sub_81B7E4C(u8 taskId) +static void TryTutorSelectedMon(u8 taskId) { struct Pokemon *mon; s16 *move; if (!gPaletteFade.active) { - mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; - move = &gUnknown_0203CEC8.unkE; + mon = &gPlayerParty[gPartyMenu.slotId]; + move = &gPartyMenu.data1; GetMonNickname(mon, gStringVar1); - gUnknown_0203CEC8.unkE = GetTutorMove(gSpecialVar_0x8005); - StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]); + gPartyMenu.data1 = GetTutorMove(gSpecialVar_0x8005); + StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]); move[1] = 2; switch (CanMonLearnTMTutor(mon, 0, gSpecialVar_0x8005)) { case CANNOT_LEARN_MOVE: - sub_81B6D98(taskId, gText_PkmnCantLearnMove); + DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove); return; case ALREADY_KNOWS_MOVE: - sub_81B6D98(taskId, gText_PkmnAlreadyKnows); + DisplayLearnMoveMessageAndClose(taskId, gText_PkmnAlreadyKnows); return; default: - if (GiveMoveToMon(mon, gUnknown_0203CEC8.unkE) != 0xFFFF) + if (GiveMoveToMon(mon, gPartyMenu.data1) != MON_HAS_MAX_MOVES) { - sub_81B6EB4(taskId); + Task_LearnedMove(taskId); return; } break; } - sub_81B6D74(gText_PkmnNeedsToReplaceMove); - gTasks[taskId].func = sub_81B6FF4; + DisplayLearnMoveMessage(gText_PkmnNeedsToReplaceMove); + gTasks[taskId].func = Task_ReplaceMoveYesNo; } } void CB2_PartyMenuFromStartMenu(void) { - InitPartyMenu(0, 0, 0, 0, 0, sub_81B1370, CB2_ReturnToFieldWithOpenMenu); + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldWithOpenMenu); } -void sub_81B7F60(void) +// Giving an item by selecting Give from the bag menu +// As opposted to by selecting Give in the party menu, which is handled by CursorCb_Give +void CB2_ChooseMonToGiveItem(void) { - MainCallback callback = (InBattlePyramid() == FALSE) ? c2_815ABFC : sub_81C4F84; - InitPartyMenu(0, 0, 5, 0, 6, sub_81B1370, callback); - gUnknown_0203CEC8.unkC = gSpecialVar_ItemId; + MainCallback callback = (InBattlePyramid() == FALSE) ? CB2_ReturnToBagMenu : CB2_ReturnToPyramidBagMenu; + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_GIVE_ITEM, FALSE, PARTY_MSG_GIVE_TO_WHICH_MON, Task_HandleChooseMonInput, callback); + gPartyMenu.bagItem = gSpecialVar_ItemId; } -static void sub_81B7FAC(u8 taskId) +static void TryGiveItemOrMailToSelectedMon(u8 taskId) { - gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM); - if (gUnknown_0203CEFC == ITEM_NONE) + sPartyMenuItemId = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_HELD_ITEM); + if (sPartyMenuItemId == ITEM_NONE) { - sub_81B8044(taskId); + GiveItemOrMailToSelectedMon(taskId); } - else if (ItemIsMail(gUnknown_0203CEFC)) + else if (ItemIsMail(sPartyMenuItemId)) { - sub_81B83B8(taskId); + DisplayItemMustBeRemovedFirstMessage(taskId); } else { - sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEFC, 1); - gTasks[taskId].func = sub_81B82A0; + DisplayAlreadyHoldingItemSwitchMessage(&gPlayerParty[gPartyMenu.slotId], sPartyMenuItemId, TRUE); + gTasks[taskId].func = Task_SwitchItemsFromBagYesNo; } } -static void sub_81B8044(u8 taskId) +static void GiveItemOrMailToSelectedMon(u8 taskId) { - if (ItemIsMail(gUnknown_0203CEC8.unkC)) + if (ItemIsMail(gPartyMenu.bagItem)) { - sub_81B83F0(gUnknown_0203CEC8.unkC); - gUnknown_0203CEC4->exitCallback = sub_81B814C; - sub_81B12C0(taskId); + RemoveItemToGiveFromBag(gPartyMenu.bagItem); + sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMonFromBag; + Task_ClosePartyMenu(taskId); } else { - sub_81B8088(taskId); + GiveItemToSelectedMon(taskId); } } -static void sub_81B8088(u8 taskId) +static void GiveItemToSelectedMon(u8 taskId) { u16 item; if (!gPaletteFade.active) { - item = gUnknown_0203CEC8.unkC; - sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], item, 0, 1); - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item); - sub_81B83F0(item); - gTasks[taskId].func = sub_81B8104; + item = gPartyMenu.bagItem; + DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], item, FALSE, 1); + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item); + RemoveItemToGiveFromBag(item); + gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu; } } -static void sub_81B8104(u8 taskId) +static void Task_UpdateHeldItemSpriteAndClosePartyMenu(u8 taskId) { - s8 slot = gUnknown_0203CEC8.slotId; + s8 slot = gPartyMenu.slotId; - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B5C94(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); - sub_81B12C0(taskId); + UpdatePartyMonHeldItemSprite(&gPlayerParty[slot], &sPartyMenuBoxes[slot]); + Task_ClosePartyMenu(taskId); } } -static void sub_81B814C(void) +static void CB2_WriteMailToGiveMonFromBag(void) { u8 mail; - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEC8.unkC); - mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL); + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], gPartyMenu.bagItem); + mail = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_MAIL); DoEasyChatScreen( - EASY_CHAT_TYPE_MAIL, - gSaveBlock1Ptr->mail[mail].words, - sub_81B81A8, - EASY_CHAT_PERSON_DISPLAY_NONE); + EASY_CHAT_TYPE_MAIL, + gSaveBlock1Ptr->mail[mail].words, + CB2_ReturnToPartyOrBagMenuFromWritingMail, + EASY_CHAT_PERSON_DISPLAY_NONE); } -static void sub_81B81A8(void) +static void CB2_ReturnToPartyOrBagMenuFromWritingMail(void) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); + // Canceled writing mail if (gSpecialVar_Result == FALSE) { TakeMailFromMon(mon); - SetMonData(mon, MON_DATA_HELD_ITEM, &gUnknown_0203CEFC); - RemoveBagItem(gUnknown_0203CEFC, 1); - sub_81B841C(item); - SetMainCallback2(gUnknown_0203CEC8.exitCallback); + SetMonData(mon, MON_DATA_HELD_ITEM, &sPartyMenuItemId); + RemoveBagItem(sPartyMenuItemId, 1); + ReturnGiveItemToBagOrPC(item); + SetMainCallback2(gPartyMenu.exitCallback); } + // Wrote mail else { - InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B8230, gUnknown_0203CEC8.exitCallback); + InitPartyMenu(gPartyMenu.menuType, KEEP_PARTY_LAYOUT, gPartyMenu.action, TRUE, PARTY_MSG_NONE, Task_DisplayGaveMailFromBagMessage, gPartyMenu.exitCallback); } } -static void sub_81B8230(u8 taskId) +static void Task_DisplayGaveMailFromBagMessage(u8 taskId) { if (!gPaletteFade.active) { - if (gUnknown_0203CEFC != ITEM_NONE) - sub_81B1D68(gUnknown_0203CEC8.unkC, gUnknown_0203CEFC, 0); + if (sPartyMenuItemId != ITEM_NONE) + DisplaySwitchedHeldItemMessage(gPartyMenu.bagItem, sPartyMenuItemId, FALSE); else - sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEC8.unkC, 0, 1); - gTasks[taskId].func = sub_81B8104; + DisplayGaveHeldItemMessage(&gPlayerParty[gPartyMenu.slotId], gPartyMenu.bagItem, FALSE, 1); + gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu; } } -static void sub_81B82A0(u8 taskId) +static void Task_SwitchItemsFromBagYesNo(u8 taskId) { - if (sub_81B1BD4() != TRUE) + if (IsPartyMenuTextPrinterActive() != TRUE) { - sub_81B334C(); - gTasks[taskId].func = sub_81B82D4; + PartyMenuDisplayYesNoMenu(); + gTasks[taskId].func = Task_HandleSwitchItemsFromBagYesNoInput; } } -static void sub_81B82D4(u8 taskId) +static void Task_HandleSwitchItemsFromBagYesNoInput(u8 taskId) { u16 item; switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: - item = gUnknown_0203CEC8.unkC; - sub_81B83F0(item); - if (AddBagItem(gUnknown_0203CEFC, 1) == FALSE) + case 0: // Yes, switch items + item = gPartyMenu.bagItem; + RemoveItemToGiveFromBag(item); + if (AddBagItem(sPartyMenuItemId, 1) == FALSE) { - sub_81B841C(item); - pokemon_item_not_removed(gUnknown_0203CEFC); - sub_81B1B5C(gStringVar4, 0); - gTasks[taskId].func = sub_81B8104; + ReturnGiveItemToBagOrPC(item); + BufferBagFullCantTakeItemMessage(sPartyMenuItemId); + DisplayPartyMenuMessage(gStringVar4, FALSE); + gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu; } else if (ItemIsMail(item)) { - gUnknown_0203CEC4->exitCallback = sub_81B814C; - sub_81B12C0(taskId); + sPartyMenuInternal->exitCallback = CB2_WriteMailToGiveMonFromBag; + Task_ClosePartyMenu(taskId); } else { - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item); - sub_81B1D68(item, gUnknown_0203CEFC, 1); - gTasks[taskId].func = sub_81B8104; + GiveItemToMon(&gPlayerParty[gPartyMenu.slotId], item); + DisplaySwitchedHeldItemMessage(item, sPartyMenuItemId, TRUE); + gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu; } break; case MENU_B_PRESSED: PlaySE(SE_SELECT); - case 1: - gTasks[taskId].func = sub_81B8104; + // fallthrough + case 1: // No, dont switch items + gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu; break; } } -static void sub_81B83B8(u8 taskId) +static void DisplayItemMustBeRemovedFirstMessage(u8 taskId) { - sub_81B1B5C(gText_RemoveMailBeforeItem, 1); + DisplayPartyMenuMessage(gText_RemoveMailBeforeItem, TRUE); schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B8104; + gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu; } -static void sub_81B83F0(u16 item) +static void RemoveItemToGiveFromBag(u16 item) { - if (gUnknown_0203CEC8.unkB == 6) + if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM) // Unused, never occurs RemovePCItem(item, 1); else RemoveBagItem(item, 1); } -static bool8 sub_81B841C(u16 item) +// Returns FALSE if there was no space to return the item +// but there always should be, and the return is ignored in all uses +static bool8 ReturnGiveItemToBagOrPC(u16 item) { - if (gUnknown_0203CEC8.unkB == 5) + if (gPartyMenu.action == PARTY_ACTION_GIVE_ITEM) return AddBagItem(item, 1); else return AddPCItem(item, 1); } -void sub_81B8448(void) +void ChooseMonToGiveMailFromMailbox(void) { - InitPartyMenu(0, 0, 7, 0, 6, sub_81B1370, Mailbox_ReturnToMailListAfterDeposit); + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_GIVE_MAILBOX_MAIL, FALSE, PARTY_MSG_GIVE_TO_WHICH_MON, Task_HandleChooseMonInput, Mailbox_ReturnToMailListAfterDeposit); } -static void sub_81B8474(u8 taskId) +static void TryGiveMailToSelectedMon(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; + struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; struct MailStruct *mail; - gUnknown_0203CEE8 = 0; + gPartyMenuUseExitCallback = FALSE; mail = &gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos]; if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE) { - sub_81B1B5C(gText_PkmnHoldingItemCantHoldMail, 1); + DisplayPartyMenuMessage(gText_PkmnHoldingItemCantHoldMail, TRUE); } else { GiveMailToMon2(mon, mail); ClearMailStruct(mail); - sub_81B1B5C(gText_MailTransferredFromMailbox, 1); + DisplayPartyMenuMessage(gText_MailTransferredFromMailbox, TRUE); } schedule_bg_copy_tilemap_to_vram(2); - gTasks[taskId].func = sub_81B8104; + gTasks[taskId].func = Task_UpdateHeldItemSpriteAndClosePartyMenu; } void InitChooseHalfPartyForBattle(u8 unused) { - sub_81B8558(); - InitPartyMenu(4, 0, 0, 0, 0, sub_81B1370, gMain.savedCallback); - gUnknown_0203CEC8.unk4 = sub_81B879C; + ClearSelectedPartyOrder(); + InitPartyMenu(PARTY_MENU_TYPE_CHOOSE_HALF, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, gMain.savedCallback); + gPartyMenu.task = Task_ValidateChosenHalfParty; } -void sub_81B8558(void) +void ClearSelectedPartyOrder(void) { memset(gSelectedOrderFromParty, 0, sizeof(gSelectedOrderFromParty)); } -static u8 sub_81B856C(s8 slot) +static u8 GetPartySlotEntryStatus(s8 slot) { if (GetBattleEntryEligibility(&gPlayerParty[slot]) == FALSE) return 2; - if (sub_81B8770(slot + 1) == TRUE) + if (HasPartySlotAlreadyBeenSelected(slot + 1) == TRUE) return 1; return 0; } @@ -6594,7 +5515,7 @@ static bool8 GetBattleEntryEligibility(struct Pokemon *mon) u16 species; if (GetMonData(mon, MON_DATA_IS_EGG) - || GetMonData(mon, MON_DATA_LEVEL) > sub_81B8888() + || GetMonData(mon, MON_DATA_LEVEL) > GetBattleEntryLevelCap() || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY) && GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE)) @@ -6602,15 +5523,15 @@ static bool8 GetBattleEntryEligibility(struct Pokemon *mon) return FALSE; } - switch (VarGet(VAR_FRONTIER_FACILITY)) // oddly the specific cases are beyond 6, turns out case 9 is apparently related to link battles + switch (VarGet(VAR_FRONTIER_FACILITY)) { - case 9: + case FACILITY_MULTI_OR_EREADER: if (GetMonData(mon, MON_DATA_HP) != 0) return TRUE; return FALSE; - case 8: + case FACILITY_UNION_ROOM: return TRUE; - default: + default: // Battle Frontier species = GetMonData(mon, MON_DATA_SPECIES); for (; gFrontierBannedSpecies[i] != 0xFFFF; i++) { @@ -6621,49 +5542,49 @@ static bool8 GetBattleEntryEligibility(struct Pokemon *mon) } } -static u8 sub_81B865C(void) +static u8 CheckBattleEntriesAndGetMessage(void) { - u8 unk2; + u8 maxBattlers; u8 i, j; u8 facility; struct Pokemon *party = gPlayerParty; - u8 unk = sub_81B885C(); + u8 minBattlers = GetMinBattleEntries(); u8 *order = gSelectedOrderFromParty; - if (order[unk - 1] == 0) + if (order[minBattlers - 1] == 0) { - if (unk == 1) - return 14; - ConvertIntToDecimalStringN(gStringVar1, unk, 0, 1); - return 17; + if (minBattlers == 1) + return PARTY_MSG_NO_MON_FOR_BATTLE; + ConvertIntToDecimalStringN(gStringVar1, minBattlers, STR_CONV_MODE_LEFT_ALIGN, 1); + return PARTY_MSG_X_MONS_ARE_NEEDED; } facility = VarGet(VAR_FRONTIER_FACILITY); - if (facility == 8 || facility == 9) + if (facility == FACILITY_UNION_ROOM || facility == FACILITY_MULTI_OR_EREADER) return 0xFF; - unk2 = sub_81B8830(); - for (i = 0; i < unk2 - 1; i++) + maxBattlers = GetMaxBattleEntries(); + for (i = 0; i < maxBattlers - 1; i++) { u16 species = GetMonData(&party[order[i] - 1], MON_DATA_SPECIES); u16 item = GetMonData(&party[order[i] - 1], MON_DATA_HELD_ITEM); - for (j = i + 1; j < unk2; j++) + for (j = i + 1; j < maxBattlers; j++) { if (species == GetMonData(&party[order[j] - 1], MON_DATA_SPECIES)) - return 18; + return PARTY_MSG_MONS_CANT_BE_SAME; if (item != ITEM_NONE && item == GetMonData(&party[order[j] - 1], MON_DATA_HELD_ITEM)) - return 19; + return PARTY_MSG_NO_SAME_HOLD_ITEMS; } } return 0xFF; } -static bool8 sub_81B8770(u8 slot) +static bool8 HasPartySlotAlreadyBeenSelected(u8 slot) { u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(gSelectedOrderFromParty); i++) { if (gSelectedOrderFromParty[i] == slot) return TRUE; @@ -6671,79 +5592,79 @@ static bool8 sub_81B8770(u8 slot) return FALSE; } -static void sub_81B879C(u8 taskId) +static void Task_ValidateChosenHalfParty(u8 taskId) { - u8 msgId = sub_81B865C(); + u8 msgId = CheckBattleEntriesAndGetMessage(); if (msgId != 0xFF) { PlaySE(SE_HAZURE); - display_pokemon_menu_message(msgId); - gTasks[taskId].func = sub_81B87E8; + DisplayPartyMenuStdMessage(msgId); + gTasks[taskId].func = Task_ContinueChoosingHalfParty; } else { PlaySE(SE_SELECT); - sub_81B12C0(taskId); + Task_ClosePartyMenu(taskId); } } -static void sub_81B87E8(u8 taskId) +static void Task_ContinueChoosingHalfParty(u8 taskId) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { PlaySE(SE_SELECT); - display_pokemon_menu_message(0); - gTasks[taskId].func = sub_81B1370; + DisplayPartyMenuStdMessage(PARTY_MSG_CHOOSE_MON); + gTasks[taskId].func = Task_HandleChooseMonInput; } } -static u8 sub_81B8830(void) +static u8 GetMaxBattleEntries(void) { switch (VarGet(VAR_FRONTIER_FACILITY)) { - case 9: + case FACILITY_MULTI_OR_EREADER: return 3; - case 8: + case FACILITY_UNION_ROOM: return 2; - default: + default: // Battle Frontier return gSpecialVar_0x8005; } } -static u8 sub_81B885C(void) +static u8 GetMinBattleEntries(void) { switch (VarGet(VAR_FRONTIER_FACILITY)) { - case 9: + case FACILITY_MULTI_OR_EREADER: return 1; - case 8: + case FACILITY_UNION_ROOM: return 2; - default: + default: // Battle Frontier return gSpecialVar_0x8005; } } -static u8 sub_81B8888(void) +static u8 GetBattleEntryLevelCap(void) { switch (VarGet(VAR_FRONTIER_FACILITY)) { - case 9: - return 100; - case 8: + case FACILITY_MULTI_OR_EREADER: + return MAX_LEVEL; + case FACILITY_UNION_ROOM: return 30; - default: - if (gSpecialVar_0x8004 == 0) + default: // Battle Frontier + if (gSpecialVar_0x8004 == FRONTIER_LVL_50) return 50; - return 100; + return MAX_LEVEL; } } -static const u8* sub_81B88BC(void) +static const u8* GetFacilityCancelString(void) { u8 facilityNum = VarGet(VAR_FRONTIER_FACILITY); - if (!(facilityNum != 8 && facilityNum != 9)) + if (!(facilityNum != FACILITY_UNION_ROOM && facilityNum != FACILITY_MULTI_OR_EREADER)) return gText_CancelBattle; else if (facilityNum == FRONTIER_FACILITY_DOME && gSpecialVar_0x8005 == 2) return gText_ReturnToWaitingRoom; @@ -6751,62 +5672,63 @@ static const u8* sub_81B88BC(void) return gText_CancelChallenge; } -void sub_81B8904(u8 initArg, MainCallback callback) +void ChooseMonForTradingBoard(u8 menuType, MainCallback callback) { - InitPartyMenu(initArg, 0, 0, 0, 0, sub_81B1370, callback); + InitPartyMenu(menuType, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, callback); } -void sub_81B892C(void) +void ChooseMonForMoveTutor(void) { - InitPartyMenu(0, 0, 12, 0, 4, sub_81B1370, CB2_ReturnToFieldContinueScriptPlayMapMusic); + InitPartyMenu(PARTY_MENU_TYPE_FIELD, PARTY_LAYOUT_SINGLE, PARTY_ACTION_MOVE_TUTOR, FALSE, PARTY_MSG_TEACH_WHICH_MON, Task_HandleChooseMonInput, CB2_ReturnToFieldContinueScriptPlayMapMusic); } -void sub_81B8958(void) +void ChooseMonForWirelessMinigame(void) { - InitPartyMenu(11, 0, 13, 0, 1, sub_81B1370, CB2_ReturnToFieldContinueScriptPlayMapMusic); + InitPartyMenu(PARTY_MENU_TYPE_MINIGAME, PARTY_LAYOUT_SINGLE, PARTY_ACTION_MINIGAME, FALSE, PARTY_MSG_CHOOSE_MON_OR_CANCEL, Task_HandleChooseMonInput, CB2_ReturnToFieldContinueScriptPlayMapMusic); } -static u8 sub_81B8984(void) +static u8 GetPartyLayoutFromBattleType(void) { if (IsDoubleBattle() == FALSE) - return 0; + return PARTY_LAYOUT_SINGLE; if (IsMultiBattle() == TRUE) - return 2; - return 1; + return PARTY_LAYOUT_MULTI; + return PARTY_LAYOUT_DOUBLE; } -void OpenPartyMenuInBattle(u8 arg) +void OpenPartyMenuInBattle(u8 partyAction) { - InitPartyMenu(1, sub_81B8984(), arg, 0, 0, sub_81B1370, SetCB2ToReshowScreenAfterMenu); + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_SetUpReshowBattleScreenAfterMenu); nullsub_35(); - pokemon_change_order(); + UpdatePartyToBattleOrder(); } -void sub_81B89F0(void) +void ChooseMonForInBattleItem(void) { - InitPartyMenu(1, sub_81B8984(), 3, 0, 5, sub_81B1370, c2_815ABFC); + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_USE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, Task_HandleChooseMonInput, CB2_ReturnToBagMenu); nullsub_35(); - pokemon_change_order(); + UpdatePartyToBattleOrder(); } -static u8 sub_81B8A2C(struct Pokemon *mon) +static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon *mon) { if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(mon, MON_DATA_IS_EGG) == FALSE) { - if (gUnknown_0203CEC8.unkB == 1) - return 3; + if (gPartyMenu.action == PARTY_ACTION_SEND_OUT) + return ACTIONS_SEND_OUT; if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA)) - return 2; + return ACTIONS_SHIFT; } - return 7; + return ACTIONS_SUMMARY_ONLY; } -static bool8 sub_81B8A7C(void) +static bool8 TrySwitchInPokemon(void) { u8 slot = GetCursorSelectionMonId(); u8 newSlot; u8 i; + // In a multi battle, slots 1, 4, and 5 are the partner's pokemon if (IsMultiBattle() == TRUE && (slot == 1 || slot == 4 || slot == 5)) { StringCopy(gStringVar1, GetTrainerPartnerName()); @@ -6821,7 +5743,7 @@ static bool8 sub_81B8A7C(void) } for (i = 0; i < gBattlersCount; i++) { - if (GetBattlerSide(i) == B_SIDE_PLAYER && sub_81B8F38(slot) == gBattlerPartyIndexes[i]) + if (GetBattlerSide(i) == B_SIDE_PLAYER && GetPartyIdFromBattleSlot(slot) == gBattlerPartyIndexes[i]) { GetMonNickname(&gPlayerParty[slot], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyInBattle); @@ -6833,67 +5755,69 @@ static bool8 sub_81B8A7C(void) StringExpandPlaceholders(gStringVar4, gText_EggCantBattle); return FALSE; } - if (sub_81B8F38(slot) == gBattleStruct->field_8B) + if (GetPartyIdFromBattleSlot(slot) == gBattleStruct->field_8B) { GetMonNickname(&gPlayerParty[slot], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadySelected); return FALSE; } - if (gUnknown_0203CEC8.unkB == 4) + if (gPartyMenu.action == PARTY_ACTION_ABILITY_PREVENTS) { SetMonPreventsSwitchingString(); return FALSE; } - if (gUnknown_0203CEC8.unkB == 2) + if (gPartyMenu.action == PARTY_ACTION_CANT_SWITCH) { u8 currBattler = gBattlerInMenuId; - GetMonNickname(&gPlayerParty[pokemon_order_func(gBattlerPartyIndexes[currBattler])], gStringVar1); + GetMonNickname(&gPlayerParty[GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[currBattler])], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnCantSwitchOut); return FALSE; } - gUnknown_0203CEE9 = sub_81B8F38(slot); - gUnknown_0203CEE8 = 1; - newSlot = pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]); - sub_81B8FB0(newSlot, slot); - sub_81B1288(&gPlayerParty[newSlot], &gPlayerParty[slot]); + gSelectedMonPartyId = GetPartyIdFromBattleSlot(slot); + gPartyMenuUseExitCallback = TRUE; + newSlot = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId]); + SwitchPartyMonSlots(newSlot, slot); + SwapPartyPokemon(&gPlayerParty[newSlot], &gPlayerParty[slot]); return TRUE; } -void sub_81B8C68(void) +void BufferBattlePartyCurrentOrder(void) { - sub_81B8C88(gUnknown_0203CF00, sub_806D7EC()); + BufferBattlePartyOrder(gBattlePartyCurrentOrder, GetPlayerFlankId()); } -static void sub_81B8C88(u8 *ptr, bool8 multiplayerFlag) +static void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId) { - u8 partyIndexes[6]; + u8 partyIds[PARTY_SIZE]; int i, j; if (IsMultiBattle() == TRUE) { - if (multiplayerFlag) + // Party ids are packed in 4 bits at a time + // i.e. the party id order below would be 0, 3, 5, 4, 2, 1, and the two parties would be 0,5,4 and 3,2,1 + if (flankId != 0) { - ptr[0] = 0 | (3 << 4); - ptr[1] = 5 | (4 << 4); - ptr[2] = 2 | (1 << 4); + partyBattleOrder[0] = 0 | (3 << 4); + partyBattleOrder[1] = 5 | (4 << 4); + partyBattleOrder[2] = 2 | (1 << 4); } else { - ptr[0] = 3 | (0 << 4); - ptr[1] = 2 | (1 << 4); - ptr[2] = 5 | (4 << 4); + partyBattleOrder[0] = 3 | (0 << 4); + partyBattleOrder[1] = 2 | (1 << 4); + partyBattleOrder[2] = 5 | (4 << 4); } return; } else if (IsDoubleBattle() == FALSE) { j = 1; - partyIndexes[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]; + partyIds[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]; for (i = 0; i < PARTY_SIZE; i++) { - if (i != partyIndexes[0]) + if (i != partyIds[0]) { - partyIndexes[j] = i; + partyIds[j] = i; j++; } } @@ -6901,29 +5825,30 @@ static void sub_81B8C88(u8 *ptr, bool8 multiplayerFlag) else { j = 2; - partyIndexes[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]; - partyIndexes[1] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]; + partyIds[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]; + partyIds[1] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)]; for (i = 0; i < PARTY_SIZE; i++) { - if (i != partyIndexes[0] && i != partyIndexes[1]) + if (i != partyIds[0] && i != partyIds[1]) { - partyIndexes[j] = i; + partyIds[j] = i; j++; } } } - for (i = 0; i < 3; i++) - ptr[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)]; + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + partyBattleOrder[i] = (partyIds[0 + (i * 2)] << 4) | partyIds[1 + (i * 2)]; } -void sub_81B8D64(u8 battlerId, u8 multiplayerFlag) +void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId) { - sub_81B8D88(gBattleStruct->field_60[battlerId], multiplayerFlag, battlerId); + BufferBattlePartyOrderBySide(gBattleStruct->field_60[battlerId], flankId, battlerId); } -static void sub_81B8D88(u8 *ptr, bool8 multiplayerFlag, u8 battlerId) +// when GetBattlerSide(battlerId) == B_SIDE_PLAYER, this function is identical the one above +static void BufferBattlePartyOrderBySide(u8 *partyBattleOrder, u8 flankId, u8 battlerId) { - u8 partyIndexes[6]; + u8 partyIndexes[PARTY_SIZE]; int i, j; u8 leftBattler; u8 rightBattler; @@ -6941,17 +5866,17 @@ static void sub_81B8D88(u8 *ptr, bool8 multiplayerFlag, u8 battlerId) if (IsMultiBattle() == TRUE) { - if (multiplayerFlag) + if (flankId != 0) { - ptr[0] = 0 | (3 << 4); - ptr[1] = 5 | (4 << 4); - ptr[2] = 2 | (1 << 4); + partyBattleOrder[0] = 0 | (3 << 4); + partyBattleOrder[1] = 5 | (4 << 4); + partyBattleOrder[2] = 2 | (1 << 4); } else { - ptr[0] = 3 | (0 << 4); - ptr[1] = 2 | (1 << 4); - ptr[2] = 5 | (4 << 4); + partyBattleOrder[0] = 3 | (0 << 4); + partyBattleOrder[1] = 2 | (1 << 4); + partyBattleOrder[2] = 5 | (4 << 4); } return; } @@ -6984,87 +5909,87 @@ static void sub_81B8D88(u8 *ptr, bool8 multiplayerFlag, u8 battlerId) } for (i = 0; i < 3; i++) - ptr[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)]; + partyBattleOrder[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)]; } -void sub_81B8E80(u8 battlerId, u8 unk, u8 arrayIndex) +void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2) { - u8 possiblePartyIndexes[6]; - u8 unk2 = 0; + u8 partyIds[PARTY_SIZE]; + u8 tempSlot = 0; int i, j; - u8 *battleStructRelated; - u8 possiblePartyIndexBuffer; + u8 *partyBattleOrder; + u8 partyIdBuffer; if (IsMultiBattle()) { - battleStructRelated = gBattleStruct->field_60[battlerId]; + partyBattleOrder = gBattleStruct->field_60[battlerId]; for (i = j = 0; i < 3; j++, i++) { - possiblePartyIndexes[j] = battleStructRelated[i] >> 4; + partyIds[j] = partyBattleOrder[i] >> 4; j++; - possiblePartyIndexes[j] = battleStructRelated[i] & 0xF; + partyIds[j] = partyBattleOrder[i] & 0xF; } - possiblePartyIndexBuffer = possiblePartyIndexes[arrayIndex]; + partyIdBuffer = partyIds[slot2]; for (i = 0; i < PARTY_SIZE; i++) { - if (possiblePartyIndexes[i] == unk) + if (partyIds[i] == slot) { - unk2 = possiblePartyIndexes[i]; - possiblePartyIndexes[i] = possiblePartyIndexBuffer; + tempSlot = partyIds[i]; + partyIds[i] = partyIdBuffer; break; } } if (i != PARTY_SIZE) { - possiblePartyIndexes[arrayIndex] = unk2; - battleStructRelated[0] = (possiblePartyIndexes[0] << 4) | possiblePartyIndexes[1]; - battleStructRelated[1] = (possiblePartyIndexes[2] << 4) | possiblePartyIndexes[3]; - battleStructRelated[2] = (possiblePartyIndexes[4] << 4) | possiblePartyIndexes[5]; + partyIds[slot2] = tempSlot; + partyBattleOrder[0] = (partyIds[0] << 4) | partyIds[1]; + partyBattleOrder[1] = (partyIds[2] << 4) | partyIds[3]; + partyBattleOrder[2] = (partyIds[4] << 4) | partyIds[5]; } } } -static u8 sub_81B8F38(u8 slot) +static u8 GetPartyIdFromBattleSlot(u8 slot) { u8 modResult = slot & 1; u8 retVal; slot /= 2; if (modResult != 0) - retVal = gUnknown_0203CF00[slot] & 0xF; + retVal = gBattlePartyCurrentOrder[slot] & 0xF; else - retVal = gUnknown_0203CF00[slot] >> 4; + retVal = gBattlePartyCurrentOrder[slot] >> 4; return retVal; } -static void sub_81B8F6C(u8 slot, u8 setVal) +static void SetPartyIdAtBattleSlot(u8 slot, u8 setVal) { bool32 modResult = slot & 1; slot /= 2; if (modResult != 0) - gUnknown_0203CF00[slot] = (gUnknown_0203CF00[slot] & 0xF0) | setVal; + gBattlePartyCurrentOrder[slot] = (gBattlePartyCurrentOrder[slot] & 0xF0) | setVal; else - gUnknown_0203CF00[slot] = (gUnknown_0203CF00[slot] & 0xF) | (setVal << 4); + gBattlePartyCurrentOrder[slot] = (gBattlePartyCurrentOrder[slot] & 0xF) | (setVal << 4); } -void sub_81B8FB0(u8 slot, u8 slot2) +void SwitchPartyMonSlots(u8 slot, u8 slot2) { - u8 valBuffer = sub_81B8F38(slot); - sub_81B8F6C(slot, sub_81B8F38(slot2)); - sub_81B8F6C(slot2, valBuffer); + u8 partyId = GetPartyIdFromBattleSlot(slot); + SetPartyIdAtBattleSlot(slot, GetPartyIdFromBattleSlot(slot2)); + SetPartyIdAtBattleSlot(slot2, partyId); } -u8 pokemon_order_func(u8 slot) +u8 GetPartyIdFromBattlePartyId(u8 battlePartyId) { u8 i, j; - for (j = i = 0; i < 3; j++, i++) + for (j = i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); j++, i++) { - if ((gUnknown_0203CF00[i] >> 4) != slot) + if ((gBattlePartyCurrentOrder[i] >> 4) != battlePartyId) { j++; - if ((gUnknown_0203CF00[i] & 0xF) == slot) + if ((gBattlePartyCurrentOrder[i] & 0xF) == battlePartyId) return j; } else @@ -7075,147 +6000,155 @@ u8 pokemon_order_func(u8 slot) return 0; } -static void pokemon_change_order(void) +static void UpdatePartyToBattleOrder(void) { struct Pokemon *partyBuffer = Alloc(sizeof(gPlayerParty)); u8 i; memcpy(partyBuffer, gPlayerParty, sizeof(gPlayerParty)); for (i = 0; i < PARTY_SIZE; i++) - memcpy(&gPlayerParty[pokemon_order_func(i)], &partyBuffer[i], sizeof(struct Pokemon)); + memcpy(&gPlayerParty[GetPartyIdFromBattlePartyId(i)], &partyBuffer[i], sizeof(struct Pokemon)); Free(partyBuffer); } -static void sub_81B9080(void) +static void UpdatePartyToFieldOrder(void) { struct Pokemon *partyBuffer = Alloc(sizeof(gPlayerParty)); u8 i; memcpy(partyBuffer, gPlayerParty, sizeof(gPlayerParty)); for (i = 0; i < PARTY_SIZE; i++) - memcpy(&gPlayerParty[sub_81B8F38(i)], &partyBuffer[i], sizeof(struct Pokemon)); + memcpy(&gPlayerParty[GetPartyIdFromBattleSlot(i)], &partyBuffer[i], sizeof(struct Pokemon)); Free(partyBuffer); } -static void sub_81B90D0(void) +// Unused +static void SwitchAliveMonIntoLeadSlot(void) { u8 i; struct Pokemon *mon; - u8 leadVal; + u8 partyId; for (i = 1; i < PARTY_SIZE; i++) { - mon = &gPlayerParty[sub_81B8F38(i)]; + mon = &gPlayerParty[GetPartyIdFromBattleSlot(i)]; if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(mon, MON_DATA_HP) != 0) { - leadVal = sub_81B8F38(0); - sub_81B8FB0(0, i); - sub_81B1288(&gPlayerParty[leadVal], mon); + partyId = GetPartyIdFromBattleSlot(0); + SwitchPartyMonSlots(0, i); + SwapPartyPokemon(&gPlayerParty[partyId], mon); break; } } } -static void sub_81B9140(void) +static void CB2_SetUpExitToBattleScreen(void) { - SetMainCallback2(SetCB2ToReshowScreenAfterMenu); + SetMainCallback2(CB2_SetUpReshowBattleScreenAfterMenu); } -void sub_81B9150(void) +void ShowPartyMenuToShowcaseMultiBattleParty(void) { - InitPartyMenu(5, 3, 0, 0, 0x7F, sub_81B917C, gMain.savedCallback); + InitPartyMenu(PARTY_MENU_TYPE_MULTI_SHOWCASE, PARTY_LAYOUT_MULTI_SHOWCASE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_NONE, Task_InitMultiPartnerPartySlideIn, gMain.savedCallback); } -static void sub_81B917C(u8 taskId) +#define tXPos data[0] + +static void Task_InitMultiPartnerPartySlideIn(u8 taskId) { - gTasks[taskId].data[0] = 256; - sub_81B9294(taskId); + // The first slide step also sets the sprites offscreen + gTasks[taskId].tXPos = 256; + SlideMultiPartyMenuBoxSpritesOneStep(taskId); ChangeBgX(2, 0x10000, 0); - gTasks[taskId].func = sub_81B91B4; + gTasks[taskId].func = Task_MultiPartnerPartySlideIn; } -static void sub_81B91B4(u8 taskId) +static void Task_MultiPartnerPartySlideIn(u8 taskId) { s16 *data = gTasks[taskId].data; u8 i; if (!gPaletteFade.active) { - data[0] -= 8; - sub_81B9294(taskId); - if (data[0] == 0) + tXPos -= 8; + SlideMultiPartyMenuBoxSpritesOneStep(taskId); + if (tXPos == 0) { for (i = 3; i < PARTY_SIZE; i++) { - if (gUnknown_02022FF8[i - 3].species != SPECIES_NONE) - AnimateSelectedPartyIcon(gUnknown_0203CEDC[i].monSpriteId, 0); + if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE) + AnimateSelectedPartyIcon(sPartyMenuBoxes[i].monSpriteId, 0); } - PlaySE(SE_W231); // Harden SE? - gTasks[taskId].func = sub_81B9240; + PlaySE(SE_W231); // The Harden SE plays once the partners party mons have slid on screen + gTasks[taskId].func = Task_WaitAfterMultiPartnerPartySlideIn; } } } -static void sub_81B9240(u8 taskId) +static void Task_WaitAfterMultiPartnerPartySlideIn(u8 taskId) { s16 *data = gTasks[taskId].data; - if (++data[0] == 0x100) - sub_81B12C0(taskId); + // data[0] used as a timer afterwards rather than the x pos + if (++data[0] == 256) + Task_ClosePartyMenu(taskId); } -static void sub_81B9270(u8 spriteId, s16 x) +static void MoveMultiPartyMenuBoxSprite(u8 spriteId, s16 x) { if (x >= 0) gSprites[spriteId].pos2.x = x; } -static void sub_81B9294(u8 taskId) +static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId) { s16 *data = gTasks[taskId].data; u8 i; for (i = 3; i < PARTY_SIZE; i++) { - if (gUnknown_02022FF8[i - 3].species != SPECIES_NONE) + if (gMultiPartnerParty[i - MULTI_PARTY_SIZE].species != SPECIES_NONE) { - sub_81B9270(gUnknown_0203CEDC[i].monSpriteId, data[0] - 8); - sub_81B9270(gUnknown_0203CEDC[i].itemSpriteId, data[0] - 8); - sub_81B9270(gUnknown_0203CEDC[i].pokeballSpriteId, data[0] - 8); - sub_81B9270(gUnknown_0203CEDC[i].statusSpriteId, data[0] - 8); + MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].monSpriteId, tXPos - 8); + MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].itemSpriteId, tXPos - 8); + MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].pokeballSpriteId, tXPos - 8); + MoveMultiPartyMenuBoxSprite(sPartyMenuBoxes[i].statusSpriteId, tXPos - 8); } } ChangeBgX(2, 0x800, 1); } -void sub_81B9328(void) +#undef tXpos + +void ChooseMonForDaycare(void) { - InitPartyMenu(6, 0, 0, 0, 15, sub_81B1370, sub_81B9390); + InitPartyMenu(PARTY_MENU_TYPE_DAYCARE, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON_2, Task_HandleChooseMonInput, BufferMonSelection); } -static void sub_81B9354(u8 arg1) +// Unused +static void ChoosePartyMonByMenuType(u8 menuType) { - gFieldCallback2 = hm_add_c3_without_phase_2; - InitPartyMenu(arg1, 0, 11, 0, 0, sub_81B1370, CB2_ReturnToField); + gFieldCallback2 = CB2_FadeFromPartyMenu; + InitPartyMenu(menuType, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ReturnToField); } -static void sub_81B9390(void) +static void BufferMonSelection(void) { gSpecialVar_0x8004 = GetCursorSelectionMonId(); if (gSpecialVar_0x8004 >= PARTY_SIZE) gSpecialVar_0x8004 = 0xFF; - gFieldCallback2 = hm_add_c3_without_phase_2; + gFieldCallback2 = CB2_FadeFromPartyMenu; SetMainCallback2(CB2_ReturnToField); } -bool8 hm_add_c3_without_phase_2(void) // might not be bool +bool8 CB2_FadeFromPartyMenu(void) { pal_fill_black(); - CreateTask(task_hm_without_phase_2, 10); + CreateTask(Task_PartyMenuWaitForFade, 10); return TRUE; } -static void task_hm_without_phase_2(u8 taskId) +static void Task_PartyMenuWaitForFade(u8 taskId) { if (IsWeatherNotFadingIn()) { @@ -7225,84 +6158,85 @@ static void task_hm_without_phase_2(u8 taskId) } } -void sub_81B9404(void) +void ChooseContestMon(void) { ScriptContext2_Enable(); FadeScreen(FADE_TO_BLACK, 0); - CreateTask(sub_81B9424, 10); + CreateTask(Task_ChooseContestMon, 10); } -static void sub_81B9424(u8 taskId) +static void Task_ChooseContestMon(u8 taskId) { if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - InitPartyMenu(2, 0, 11, 0, 0, sub_81B1370, sub_81B9470); + InitPartyMenu(PARTY_MENU_TYPE_CONTEST, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ChooseContestMon); DestroyTask(taskId); } } -static void sub_81B9470(void) +static void CB2_ChooseContestMon(void) { gContestMonPartyIndex = GetCursorSelectionMonId(); if (gContestMonPartyIndex >= PARTY_SIZE) gContestMonPartyIndex = 0xFF; gSpecialVar_0x8004 = gContestMonPartyIndex; - gFieldCallback2 = hm_add_c3_without_phase_2; + gFieldCallback2 = CB2_FadeFromPartyMenu; SetMainCallback2(CB2_ReturnToField); } -void sub_81B94B0(void) +// Used as a script special for showing a party mon to various npcs (e.g. in-game trades, move deleter) +void ChoosePartyMon(void) { ScriptContext2_Enable(); FadeScreen(FADE_TO_BLACK, 0); - CreateTask(sub_81B94D0, 10); + CreateTask(Task_ChoosePartyMon, 10); } -static void sub_81B94D0(u8 taskId) +static void Task_ChoosePartyMon(u8 taskId) { if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - InitPartyMenu(3, 0, 11, 0, 0, sub_81B1370, sub_81B9390); + InitPartyMenu(PARTY_MENU_TYPE_CHOOSE_MON, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, BufferMonSelection); DestroyTask(taskId); } } -void sub_81B951C(void) +void ChooseMonForMoveRelearner(void) { ScriptContext2_Enable(); FadeScreen(FADE_TO_BLACK, 0); - CreateTask(sub_81B953C, 10); + CreateTask(Task_ChooseMonForMoveRelearner, 10); } -static void sub_81B953C(u8 taskId) +static void Task_ChooseMonForMoveRelearner(u8 taskId) { if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - InitPartyMenu(7, 0, 11, 0, 0, sub_81B1370, sub_81B9588); + InitPartyMenu(PARTY_MENU_TYPE_MOVE_RELEARNER, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_AND_CLOSE, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, CB2_ChooseMonForMoveRelearner); DestroyTask(taskId); } } -static void sub_81B9588(void) +static void CB2_ChooseMonForMoveRelearner(void) { gSpecialVar_0x8004 = GetCursorSelectionMonId(); if (gSpecialVar_0x8004 >= PARTY_SIZE) gSpecialVar_0x8004 = 0xFF; else gSpecialVar_0x8005 = GetNumberOfRelearnableMoves(&gPlayerParty[gSpecialVar_0x8004]); - gFieldCallback2 = hm_add_c3_without_phase_2; + gFieldCallback2 = CB2_FadeFromPartyMenu; SetMainCallback2(CB2_ReturnToField); } -void sub_81B95E0(void) +void DoBattlePyramidMonsHaveHeldItem(void) { u8 i; gSpecialVar_Result = FALSE; - for (i = 0; i < 3; i++) + for (i = 0; i < FRONTIER_PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) != ITEM_NONE) { @@ -7312,42 +6246,44 @@ void sub_81B95E0(void) } } -void sub_81B9620(void) +// Can be called if the Battle Pyramid Bag is full on exiting and at least one party mon still has held items +// The player can then select to toss items from the bag or take/toss held items from the party +void BattlePyramidChooseMonHeldItems(void) { ScriptContext2_Enable(); FadeScreen(FADE_TO_BLACK, 0); - CreateTask(sub_81B9640, 10); + CreateTask(Task_BattlePyramidChooseMonHeldItems, 10); } -static void sub_81B9640(u8 taskId) +static void Task_BattlePyramidChooseMonHeldItems(u8 taskId) { if (!gPaletteFade.active) { CleanupOverworldWindowsAndTilemaps(); - InitPartyMenu(12, 0, 0, 0, 0, sub_81B1370, sub_81B9390); + InitPartyMenu(PARTY_MENU_TYPE_STORE_PYRAMID_HELD_ITEMS, PARTY_LAYOUT_SINGLE, PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_HandleChooseMonInput, BufferMonSelection); DestroyTask(taskId); } } -void sub_81B968C(void) +void MoveDeleterChooseMoveToForget(void) { ShowPokemonSummaryScreen(PSS_MODE_SELECT_MOVE, gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField); gFieldCallback = FieldCallback_ReturnToEventScript2; } -void sub_81B96D0(void) +void GetNumMovesSelectedMonHas(void) { u8 i; gSpecialVar_Result = 0; for (i = 0; i < MAX_MON_MOVES; i++) { - if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i) != ITEM_NONE) + if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i) != MOVE_NONE) gSpecialVar_Result++; } } -void sub_81B9718(void) +void BufferMoveDeleterNicknameAndMove(void) { struct Pokemon *mon = &gPlayerParty[gSpecialVar_0x8004]; u16 move = GetMonData(mon, MON_DATA_MOVE1 + gSpecialVar_0x8005); @@ -7356,17 +6292,17 @@ void sub_81B9718(void) StringCopy(gStringVar2, gMoveNames[move]); } -void sub_81B9770(void) +void MoveDeleterForgetMove(void) { u16 i; SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], MOVE_NONE, gSpecialVar_0x8005); RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005); for (i = gSpecialVar_0x8005; i < MAX_MON_MOVES - 1; i++) - sub_81B97DC(&gPlayerParty[gSpecialVar_0x8004], i, i + 1); + ShiftMoveSlot(&gPlayerParty[gSpecialVar_0x8004], i, i + 1); } -static void sub_81B97DC(struct Pokemon *mon, u8 slotTo, u8 slotFrom) +static void ShiftMoveSlot(struct Pokemon *mon, u8 slotTo, u8 slotFrom) { u16 move1 = GetMonData(mon, MON_DATA_MOVE1 + slotTo); u16 move0 = GetMonData(mon, MON_DATA_MOVE1 + slotFrom); @@ -7387,7 +6323,7 @@ static void sub_81B97DC(struct Pokemon *mon, u8 slotTo, u8 slotFrom) SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses); } -void sub_81B98DC(void) +void IsSelectedMonEgg(void) { if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_IS_EGG)) gSpecialVar_Result = TRUE; @@ -7395,7 +6331,7 @@ void sub_81B98DC(void) gSpecialVar_Result = FALSE; } -void sub_81B9918(void) +void IsLastMonThatKnowsSurf(void) { u16 move; u32 i, j; diff --git a/src/player_pc.c b/src/player_pc.c index 08f24d379..94484ab72 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -14,7 +14,7 @@ #include "list_menu.h" #include "mail.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "menu_helpers.h" #include "overworld.h" @@ -419,12 +419,12 @@ static void PlayerPC_Decoration(u8 taskId) static void PlayerPC_TurnOff(u8 taskId) { - if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC and not player PC, so do gender specific handling. + if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC, so do gender specific handling. { if (gSaveBlock2Ptr->playerGender == MALE) - ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_1F863F); + ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_TurnOffPlayerPC); else - ScriptContext1_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_1F958F); + ScriptContext1_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_TurnOffPlayerPC); } else { @@ -824,7 +824,7 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId) { sub_81D1EC0(); CleanupOverworldWindowsAndTilemaps(); - sub_81B8448(); + ChooseMonToGiveMailFromMailbox(); DestroyTask(taskId); } } diff --git a/src/poison.c b/src/poison.c index 9af981694..42e7d6a58 100644 --- a/src/poison.c +++ b/src/poison.c @@ -33,11 +33,11 @@ const struct SpriteTemplate gUnknown_08596134 = { .tileTag = ANIM_TAG_TOXIC_BUBBLE, .paletteTag = ANIM_TAG_TOXIC_BUBBLE, - .oam = &gUnknown_08524954, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gUnknown_08596130, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; const union AnimCmd gUnknown_0859614C[] = @@ -101,7 +101,7 @@ const struct SpriteTemplate gUnknown_085961A8 = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gUnknown_085249CC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gUnknown_08596164, .images = NULL, .affineAnims = gUnknown_085961A0, @@ -112,7 +112,7 @@ const struct SpriteTemplate gUnknown_085961C0 = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gUnknown_085249CC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gUnknown_08596164, .images = NULL, .affineAnims = gUnknown_085961A0, @@ -123,7 +123,7 @@ const struct SpriteTemplate gUnknown_085961D8 = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gUnknown_0859616C, .images = NULL, .affineAnims = gUnknown_085961A4, @@ -146,7 +146,7 @@ const struct SpriteTemplate gUnknown_0859620C = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gUnknown_085249CC, + .oam = &gOamData_AffineDouble_ObjNormal_16x16, .anims = gUnknown_08596168, .images = NULL, .affineAnims = gUnknown_08596208, @@ -169,7 +169,7 @@ const struct SpriteTemplate gPoisonBubbleSpriteTemplate = { .tileTag = ANIM_TAG_POISON_BUBBLE, .paletteTag = ANIM_TAG_POISON_BUBBLE, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gUnknown_08596164, .images = NULL, .affineAnims = gUnknown_0859623C, @@ -180,7 +180,7 @@ const struct SpriteTemplate gWaterBubbleSpriteTemplate = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_08524A8C, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, .anims = gUnknown_08595200, .images = NULL, .affineAnims = gUnknown_0859623C, diff --git a/src/pokeball.c b/src/pokeball.c index 793609ec2..f10bbd49c 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1097,7 +1097,7 @@ static void sub_80765E0(struct Sprite *sprite) } } -u8 sub_807671C(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h) +u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h) { u8 spriteId; diff --git a/src/pokeblock.c b/src/pokeblock.c index 30e630d9a..4c744b537 100644 --- a/src/pokeblock.c +++ b/src/pokeblock.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_controllers.h" #include "battle_message.h" @@ -462,7 +462,7 @@ void OpenPokeblockCase(u8 caseId, void (*callback)(void)) void OpenPokeblockCaseInBattle(void) { - OpenPokeblockCase(PBLOCK_CASE_BATTLE, SetCB2ToReshowScreenAfterMenu2); + OpenPokeblockCase(PBLOCK_CASE_BATTLE, CB2_SetUpReshowBattleScreenAfterMenu2); } void OpenPokeblockCaseOnFeeder(void) diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c index 4ad15414d..2c0b68dc6 100644 --- a/src/pokeblock_feed.c +++ b/src/pokeblock_feed.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "bg.h" #include "data.h" diff --git a/src/pokedex.c b/src/pokedex.c index c1787ef6a..0b04ae3b9 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -8,7 +8,7 @@ #include "graphics.h" #include "international_string_util.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "m4a.h" #include "overworld.h" @@ -1347,13 +1347,13 @@ void CB2_Pokedex(void) sPokedexView->selectedScreen = 0; if (!IsNationalPokedexEnabled()) { - sPokedexView->seenCount = GetHoennPokedexCount(0); - sPokedexView->ownCount = GetHoennPokedexCount(1); + sPokedexView->seenCount = GetHoennPokedexCount(FLAG_GET_SEEN); + sPokedexView->ownCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); } else { - sPokedexView->seenCount = GetNationalPokedexCount(0); - sPokedexView->ownCount = GetNationalPokedexCount(1); + sPokedexView->seenCount = GetNationalPokedexCount(FLAG_GET_SEEN); + sPokedexView->ownCount = GetNationalPokedexCount(FLAG_GET_CAUGHT); } sPokedexView->initialVOffset = 8; gMain.state++; @@ -2583,7 +2583,7 @@ static void CreateInterfaceSprites(u8 a) spriteId = CreateSprite(&gUnknown_0855D20C, 17, 91, 1); StartSpriteAnim(&gSprites[spriteId], 1); - r6 = GetHoennPokedexCount(0); + r6 = GetHoennPokedexCount(FLAG_GET_SEEN); _a = 0; spriteId = CreateSprite(&gUnknown_0855D23C, 40, 45, 1); @@ -2626,7 +2626,7 @@ static void CreateInterfaceSprites(u8 a) r5 = (sPokedexView->seenCount % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); - r6 = GetHoennPokedexCount(1); + r6 = GetHoennPokedexCount(FLAG_GET_CAUGHT); _a = 0; spriteId = CreateSprite(&gUnknown_0855D23C, 40, 81, 1); @@ -3889,7 +3889,7 @@ void sub_80C020C(u32 num, u32 value, u32 c, u32 d) value = NationalToHoennOrder(num); else value = num; - ConvertIntToDecimalStringN(StringCopy(str, gText_UnkCtrlF908Clear01), value, 2, 3); + ConvertIntToDecimalStringN(StringCopy(str, gText_UnkCtrlF908Clear01), value, STR_CONV_MODE_LEADING_ZEROS, 3); sub_80BE8DC(str, 0x60, 0x19); natNum = NationalPokedexNumToSpecies(num); if (natNum) diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index dc69b5d54..697fdb792 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -4,7 +4,7 @@ #include "gpu_regs.h" #include "graphics.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "overworld.h" #include "palette.h" diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c index 487db6d58..0b35b00ee 100644 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -2,7 +2,7 @@ #include "bg.h" #include "m4a.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "palette.h" #include "pokedex_cry_screen.h" #include "sound.h" diff --git a/src/pokemon.c b/src/pokemon.c index 8812e5bc4..a30e20ea2 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "apprentice.h" #include "battle.h" #include "battle_anim.h" @@ -60,6 +60,7 @@ static void EncryptBoxMon(struct BoxPokemon *boxMon); static void DecryptBoxMon(struct BoxPokemon *boxMon); static void sub_806E6CC(u8 taskId); static bool8 ShouldGetStatBadgeBoost(u16 flagId, u8 battlerId); +static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move); // EWRAM vars EWRAM_DATA static u8 sLearningMoveTableID = 0; @@ -2879,22 +2880,22 @@ u16 GiveMoveToMon(struct Pokemon *mon, u16 move) return GiveMoveToBoxMon(&mon->box, move); } -u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) +static u16 GiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move) { s32 i; for (i = 0; i < MAX_MON_MOVES; i++) { u16 existingMove = GetBoxMonData(boxMon, MON_DATA_MOVE1 + i, NULL); - if (!existingMove) + if (existingMove == MOVE_NONE) { SetBoxMonData(boxMon, MON_DATA_MOVE1 + i, &move); SetBoxMonData(boxMon, MON_DATA_PP1 + i, &gBattleMoves[move].pp); return move; } if (existingMove == move) - return -2; + return MON_ALREADY_KNOWS_MOVE; } - return 0xFFFF; + return MON_HAS_MAX_MOVES; } u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move) @@ -2949,7 +2950,7 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) move = (gLevelUpLearnsets[species][i] & 0x1FF); - if (GiveMoveToBoxMon(boxMon, move) == 0xFFFF) + if (GiveMoveToBoxMon(boxMon, move) == MON_HAS_MAX_MOVES) DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move); } } @@ -4860,7 +4861,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (battlerId != 4) { gAbsentBattlerFlags &= ~gBitTable[battlerId]; - CopyPlayerPartyMonToBattleData(battlerId, pokemon_order_func(gBattlerPartyIndexes[battlerId])); + CopyPlayerPartyMonToBattleData(battlerId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battlerId])); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) gBattleResults.numRevivesUsed++; } @@ -5657,21 +5658,23 @@ void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies) SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[newSpecies]); } -bool8 sub_806D7EC(void) +// The below two functions determine which side of a multi battle the trainer battles on +// 0 is the left (top in party menu), 1 is right (bottom in party menu) +u8 GetPlayerFlankId(void) { - bool8 retVal = FALSE; + u8 flankId = 0; switch (gLinkPlayers[GetMultiplayerId()].id) { case 0: case 3: - retVal = FALSE; + flankId = 0; break; case 1: case 2: - retVal = TRUE; + flankId = 1; break; } - return retVal; + return flankId; } u16 GetLinkTrainerFlankId(u8 linkPlayerId) @@ -5704,7 +5707,7 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId) { if (InBattlePyramid()) return GetBattlePyramindTrainerEncounterMusicId(trainerOpponentId); - else if (sub_81D5C18()) + else if (InTrainerHillChallenge()) return GetTrainerEncounterMusicIdInTrainerHill(trainerOpponentId); else return TRAINER_ENCOUNTER_MUSIC(trainerOpponentId); @@ -5724,9 +5727,9 @@ u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex) switch (gNatureStatTable[nature][statIndex - 1]) { case 1: - return (u16)(n * 110) / 100; + return (u16)(n * 110) / 100; // NOTE: will overflow for n > 595 because the intermediate value is cast to u16 before the division. Fix by removing (u16) cast case -1: - return (u16)(n * 90) / 100; + return (u16)(n * 90) / 100; // NOTE: will overflow for n > 728, see above } return n; @@ -6439,11 +6442,11 @@ void SetMonPreventsSwitchingString(void) gBattleTextBuff1[4] = B_BUFF_EOS; if (GetBattlerSide(gBattleStruct->battlerPreventingSwitchout) == B_SIDE_PLAYER) - gBattleTextBuff1[3] = pokemon_order_func(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]); + gBattleTextBuff1[3] = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]); else gBattleTextBuff1[3] = gBattlerPartyIndexes[gBattleStruct->battlerPreventingSwitchout]; - PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId])) + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff2, gBattlerInMenuId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[gBattlerInMenuId])) BattleStringExpandPlaceholders(gText_PkmnsXPreventsSwitching, gStringVar4); } diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index ee68de326..70af9f956 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1029,13 +1029,13 @@ const u16 sSpriteImageSizes[3][4] = }, }; -u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra) +u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 handleDeoxys) { u8 spriteId; struct MonIconSpriteTemplate iconTemplate = { .oam = &sMonIconOamData, - .image = GetMonIconPtr(species, personality, extra), + .image = GetMonIconPtr(species, personality, handleDeoxys), .anims = sMonIconAnims, .affineAnims = sMonIconAffineAnims, .callback = callback, @@ -1125,9 +1125,9 @@ u16 sub_80D2E84(u16 species) } } -const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 extra) +const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 handleDeoxys) { - return GetMonIconTiles(GetIconSpecies(species, personality), extra); + return GetMonIconTiles(GetIconSpecies(species, personality), handleDeoxys); } void sub_80D2EF8(struct Sprite *sprite) @@ -1184,17 +1184,17 @@ void FreeMonIconPalette(u16 species) FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag); } -void sub_80D3014(struct Sprite *sprite) +void SpriteCB_MonIcon(struct Sprite *sprite) { UpdateMonIconFrame(sprite); } -const u8* GetMonIconTiles(u16 species, bool32 extra) +const u8* GetMonIconTiles(u16 species, bool32 handleDeoxys) { const u8* iconSprite = gMonIconTable[species]; - if (species == SPECIES_DEOXYS && extra == TRUE) + if (species == SPECIES_DEOXYS && handleDeoxys == TRUE) { - iconSprite = (const u8*)(0x400 + (u32)iconSprite); //WTF? + iconSprite = (const u8*)(0x400 + (u32)iconSprite); // use the specific Deoxys form icon (Speed in this case) } return iconSprite; } @@ -1302,7 +1302,7 @@ void sub_80D328C(struct Sprite *sprite) DestroySprite(sprite); } -void sub_80D32C8(struct Sprite *sprite, u8 animNum) +void SetPartyHPBarSprite(struct Sprite *sprite, u8 animNum) { sprite->animNum = animNum; sprite->animDelayCounter = 0; diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 8f16e1ce2..ccf64b8a2 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle_anim.h" #include "bg.h" #include "data.h" @@ -158,7 +158,7 @@ static void sub_802AA60(struct PokemonJump1 *); static void sub_802AA94(struct PokemonJump1 *); static void sub_802AB20(void); static void sub_802AB98(void); -static s16 sub_802AC00(u16 species); +static s16 GetPokemonJumpSpeciesIdx(u16 species); static void sub_802AC2C(struct PokemonJump1_MonInfo *monInfo, struct Pokemon *mon); static void sub_802AC6C(void); static void sub_802ACA0(u8 taskId); @@ -288,7 +288,7 @@ static void sub_802D598(void); static void sub_802D5E4(void); static void sub_802D72C(void); static void sub_802D688(void); -static void sub_802E3E4(u8 taskId); +static void Task_ShowPokemonJumpRecords(u8 taskId); static void sub_802E6D0(u8 taskId); static void sub_802EB98(u8 taskId); static void sub_802E500(u16 windowId, int width); @@ -501,7 +501,7 @@ static void sub_802AB20(void) for (i = 0; i < MAX_RFU_PLAYERS; i++) { - index = sub_802AC00(gUnknown_02022CFC->unk82A8[i].species); + index = GetPokemonJumpSpeciesIdx(gUnknown_02022CFC->unk82A8[i].species); gUnknown_02022CFC->unk82E4[i].unkC = gPkmnJumpSpecies[index].unk2; } @@ -524,7 +524,7 @@ static void sub_802AB98(void) } } -static s16 sub_802AC00(u16 species) +static s16 GetPokemonJumpSpeciesIdx(u16 species) { u32 i; for (i = 0; i < ARRAY_COUNT(gPkmnJumpSpecies); i++) @@ -533,7 +533,7 @@ static s16 sub_802AC00(u16 species) return i; } - return -1; + return -1; // species isnt allowed } static void sub_802AC2C(struct PokemonJump1_MonInfo *monInfo, struct Pokemon *mon) @@ -2204,12 +2204,12 @@ static u8 *sub_802C8E8(u8 multiplayerId) return gUnknown_02022CFC->unk82E4[multiplayerId].unk1C; } -bool32 sub_802C908(u16 species) +bool32 IsSpeciesAllowedInPokemonJump(u16 species) { - return sub_802AC00(species) > -1; + return GetPokemonJumpSpeciesIdx(species) > -1; } -void sub_802C920(void) +void IsPokemonJumpSpeciesInParty(void) { int i; @@ -2218,15 +2218,15 @@ void sub_802C920(void) if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES)) { u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - if (sub_802C908(species)) + if (IsSpeciesAllowedInPokemonJump(species)) { - gSpecialVar_Result = 1; + gSpecialVar_Result = TRUE; return; } } } - gSpecialVar_Result = 0; + gSpecialVar_Result = FALSE; } // Large group of data. @@ -3922,10 +3922,10 @@ static void sub_802E3A8(void) pokeJump->field6++; } -void sub_802E3C4(void) +void ShowPokemonJumpRecords(void) { - u8 taskId = CreateTask(sub_802E3E4, 0); - sub_802E3E4(taskId); + u8 taskId = CreateTask(Task_ShowPokemonJumpRecords, 0); + Task_ShowPokemonJumpRecords(taskId); } static const struct WindowTemplate gUnknown_082FE270 = @@ -3941,7 +3941,7 @@ static const struct WindowTemplate gUnknown_082FE270 = static const u8 *const gUnknown_082FE278[] = {gText_JumpsInARow, gText_BestScore2, gText_ExcellentsInARow}; -static void sub_802E3E4(u8 taskId) +static void Task_ShowPokemonJumpRecords(u8 taskId) { struct WindowTemplate window; int i, width, widthCurr; @@ -4093,7 +4093,7 @@ static const struct SpriteTemplate gUnknown_082FE730[] = { .tileTag = 0x2000, .paletteTag = 0x2000, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = sSpriteAnimTable_82FE718, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index f63e1ccba..914d68925 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -100,9 +100,9 @@ static void FormatMonSizeRecord(u8 *string, u32 size) size = (double)(size * 10) / (CM_PER_INCH * 10); #endif - string = ConvertIntToDecimalStringN(string, size / 10, 0, 8); + string = ConvertIntToDecimalStringN(string, size / 10, STR_CONV_MODE_LEFT_ALIGN, 8); string = StringAppend(string, gText_DecimalPoint); - ConvertIntToDecimalStringN(string, size % 10, 0, 1); + ConvertIntToDecimalStringN(string, size % 10, STR_CONV_MODE_LEFT_ALIGN, 1); } static u8 CompareMonSize(u16 species, u16 *sizeRecord) diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index fa9e61504..69a0161e1 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "data.h" #include "decompress.h" @@ -1540,9 +1540,9 @@ static const u8 gHandCursorTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cu static const u8 gHandCursorShadowTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp"); // code -void sub_80C6D80(const u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4) +void DrawTextWindowAndBufferTiles(const u8 *string, void *dst, u8 zero1, u8 zero2, s32 bytesToBuffer) { - s32 i, val, val2; + s32 i, tileBytesToBuffer, remainingBytes; u16 windowId; u8 txtColor[3]; u8 *tileData1, *tileData2; @@ -1551,25 +1551,25 @@ void sub_80C6D80(const u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4) winTemplate.width = 24; winTemplate.height = 2; windowId = AddWindow(&winTemplate); - FillWindowPixelBuffer(windowId, PIXEL_FILL(arg3)); + FillWindowPixelBuffer(windowId, PIXEL_FILL(zero2)); tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA); tileData2 = (winTemplate.width * 32) + tileData1; - if (!arg2) - txtColor[0] = 0; + if (!zero1) + txtColor[0] = TEXT_COLOR_TRANSPARENT; else - txtColor[0] = arg3; - txtColor[1] = 0xF; - txtColor[2] = 0xE; + txtColor[0] = zero2; + txtColor[1] = TEXT_DYNAMIC_COLOR_6; + txtColor[2] = TEXT_DYNAMIC_COLOR_5; AddTextPrinterParameterized4(windowId, 1, 0, 1, 0, 0, txtColor, -1, string); - val = arg4; - if (val > 6u) - val = 6; - val2 = arg4 - 6; - if (val > 0) + tileBytesToBuffer = bytesToBuffer; + if (tileBytesToBuffer > 6u) + tileBytesToBuffer = 6; + remainingBytes = bytesToBuffer - 6; + if (tileBytesToBuffer > 0) { - for (i = val; i != 0; i--) + for (i = tileBytesToBuffer; i != 0; i--) { CpuCopy16(tileData1, dst, 0x80); CpuCopy16(tileData2, dst + 0x80, 0x80); @@ -1579,8 +1579,9 @@ void sub_80C6D80(const u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4) } } - if (val2 > 0) - CpuFill16((arg3 << 4) | arg3, dst, (u32)(val2) * 0x100); + // Never used. bytesToBuffer is always passed <= 6, so remainingBytes is always <= 0 here + if (remainingBytes > 0) + CpuFill16((zero2 << 4) | zero2, dst, (u32)(remainingBytes) * 0x100); RemoveWindow(windowId); } @@ -2107,7 +2108,7 @@ static void sub_80C7BE4(void) center = GetStringCenterAlignXOffset(1, boxName, 64); AddTextPrinterParameterized3(windowId, 1, center, 1, gUnknown_08571734, TEXT_SPEED_FF, boxName); - ConvertIntToDecimalStringN(text, nPokemonInBox, 1, 2); + ConvertIntToDecimalStringN(text, nPokemonInBox, STR_CONV_MODE_RIGHT_ALIGN, 2); StringAppend(text, gUnknown_08571737); center = GetStringCenterAlignXOffset(1, text, 64); AddTextPrinterParameterized3(windowId, 1, center, 17, gUnknown_08571734, TEXT_SPEED_FF, text); @@ -5518,7 +5519,7 @@ static void sub_80CCB50(u8 boxId) sPSSData->field_738 |= 0x10000 << tagIndex; StringCopyPadded(sPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8); - sub_80C6D80(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2); + DrawTextWindowAndBufferTiles(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2); LoadSpriteSheet(&spriteSheet); r6 = sub_80CD00C(GetBoxNamePtr(boxId)); @@ -5554,7 +5555,7 @@ static void sub_80CCCFC(u8 boxId, s8 direction) } StringCopyPadded(sPSSData->field_21B8, GetBoxNamePtr(boxId), 0, 8); - sub_80C6D80(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2); + DrawTextWindowAndBufferTiles(sPSSData->field_21B8, sPSSData->field_2F8, 0, 0, 2); LoadSpriteSheet(&spriteSheet); LoadPalette(gUnknown_08577574[GetBoxWallpaper(boxId)], r8, 4); x = sub_80CD00C(GetBoxNamePtr(boxId)); diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 8697c557f..41c48d008 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -20,7 +20,7 @@ #include "item.h" #include "link.h" #include "m4a.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "menu_helpers.h" #include "mon_markings.h" @@ -42,6 +42,7 @@ #include "window.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/party_menu.h" #include "constants/region_map_sections.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -162,7 +163,7 @@ static EWRAM_DATA struct PokemonSummaryScreenData u8 unk_filler4[6]; } *sMonSummaryScreen = NULL; EWRAM_DATA u8 gLastViewedMonIndex = 0; -static EWRAM_DATA u8 sUnknown_0203CF21 = 0; +static EWRAM_DATA u8 sMoveSlotToReplace = 0; ALIGNED(4) static EWRAM_DATA u8 sUnknownTaskId = 0; struct UnkStruct_61CC04 @@ -1491,11 +1492,11 @@ static void HandleInput(u8 taskId) { ChangeSummaryPokemon(taskId, 1); } - else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysState() == 1) + else if ((gMain.newKeys & DPAD_LEFT) || GetLRKeysPressed() == MENU_L_PRESSED) { ChangePage(taskId, -1); } - else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysState() == 2) + else if ((gMain.newKeys & DPAD_RIGHT) || GetLRKeysPressed() == MENU_R_PRESSED) { ChangePage(taskId, 1); } @@ -2159,11 +2160,11 @@ static void HandleReplaceMoveInput(u8 taskId) data[0] = 4; sub_81C1070(data, 1, &sMonSummaryScreen->firstMoveIndex); } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { ChangePage(taskId, -1); } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { ChangePage(taskId, 1); } @@ -2173,8 +2174,8 @@ static void HandleReplaceMoveInput(u8 taskId) { StopPokemonAnimations(); PlaySE(SE_SELECT); - sUnknown_0203CF21 = sMonSummaryScreen->firstMoveIndex; - gSpecialVar_0x8005 = sUnknown_0203CF21; + sMoveSlotToReplace = sMonSummaryScreen->firstMoveIndex; + gSpecialVar_0x8005 = sMoveSlotToReplace; BeginCloseSummaryScreen(taskId); } else @@ -2188,8 +2189,8 @@ static void HandleReplaceMoveInput(u8 taskId) u32 var1; StopPokemonAnimations(); PlaySE(SE_SELECT); - sUnknown_0203CF21 = 4; - gSpecialVar_0x8005 = 4; + sMoveSlotToReplace = MAX_MON_MOVES; + gSpecialVar_0x8005 = MAX_MON_MOVES; BeginCloseSummaryScreen(taskId); } } @@ -2238,7 +2239,7 @@ static void HandleHMMovesCantBeForgottenInput(u8 taskId) data[1] = 0; gTasks[taskId].func = HandleReplaceMoveInput; } - else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1) + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysPressed() == MENU_L_PRESSED) { if (sMonSummaryScreen->currPageIndex != 2) { @@ -2252,7 +2253,7 @@ static void HandleHMMovesCantBeForgottenInput(u8 taskId) sub_81C1EFC(9, -2, move); } } - else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2) + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysPressed() == MENU_R_PRESSED) { if (sMonSummaryScreen->currPageIndex != 3) { @@ -2281,9 +2282,9 @@ static void HandleHMMovesCantBeForgottenInput(u8 taskId) } } -u8 sub_81C1B94(void) +u8 GetMoveSlotToReplace(void) { - return sUnknown_0203CF21; + return sMoveSlotToReplace; } static void DrawPagination(void) // Updates the pagination dots at the top of the summary screen @@ -2574,9 +2575,9 @@ static void DrawPokerusCuredSymbol(struct Pokemon *mon) // This checks if the mo static void SetDexNumberColor(bool8 isMonShiny) { if (!isMonShiny) - sub_8199C30(3, 1, 4, 8, 8, 0); + SetBgTilemapPalette(3, 1, 4, 8, 8, 0); else - sub_8199C30(3, 1, 4, 8, 8, 5); + SetBgTilemapPalette(3, 1, 4, 8, 8, 5); schedule_bg_copy_tilemap_to_vram(3); } @@ -2716,7 +2717,7 @@ static void PrintNotEggInfo(void) if (dexNum != 0xFFFF) { StringCopy(gStringVar1, &gText_UnkCtrlF908Clear01[0]); - ConvertIntToDecimalStringN(gStringVar2, dexNum, 2, 3); + ConvertIntToDecimalStringN(gStringVar2, dexNum, STR_CONV_MODE_LEADING_ZEROS, 3); StringAppend(gStringVar1, gStringVar2); if (!IsMonShiny(mon)) { @@ -2739,7 +2740,7 @@ static void PrintNotEggInfo(void) SetDexNumberColor(TRUE); } StringCopy(gStringVar1, &gText_LevelSymbol[0]); - ConvertIntToDecimalStringN(gStringVar2, summary->level, 0, 3); + ConvertIntToDecimalStringN(gStringVar2, summary->level, STR_CONV_MODE_LEFT_ALIGN, 3); StringAppend(gStringVar1, gStringVar2); SummaryScreen_PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, gStringVar1, 0x18, 17, 0, 1); GetMonNickname(mon, gStringVar1); @@ -3054,7 +3055,7 @@ static void PrintMonOTID(void) int xPos; if (InBattleFactory() != TRUE && InSlateportBattleTent() != TRUE) { - ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)sMonSummaryScreen->summary.OTID, 2, 5); + ConvertIntToDecimalStringN(StringCopy(gStringVar1, gText_UnkCtrlF907F908), (u16)sMonSummaryScreen->summary.OTID, STR_CONV_MODE_LEADING_ZEROS, 5); xPos = GetStringRightAlignXOffset(1, gStringVar1, 56); SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ID), gStringVar1, xPos, 1, 0, 1); } @@ -3141,7 +3142,7 @@ static void GetMetLevelString(u8 *output) u8 level = sMonSummaryScreen->summary.metLevel; if (level == 0) level = EGG_HATCH_LEVEL; - ConvertIntToDecimalStringN(output, level, 0, 3); + ConvertIntToDecimalStringN(output, level, STR_CONV_MODE_LEFT_ALIGN, 3); DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, output); } @@ -3336,7 +3337,7 @@ static void PrintRibbonCount(void) } else { - ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.ribbonCount, 1, 2); + ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.ribbonCount, STR_CONV_MODE_RIGHT_ALIGN, 2); StringExpandPlaceholders(gStringVar4, gText_RibbonsVar1); text = gStringVar4; } @@ -3352,10 +3353,10 @@ static void BufferLeftColumnStats(void) u8 *attackString = Alloc(8); u8 *defenseString = Alloc(8); - ConvertIntToDecimalStringN(currentHPString, sMonSummaryScreen->summary.currentHP, 1, 3); - ConvertIntToDecimalStringN(maxHPString, sMonSummaryScreen->summary.maxHP, 1, 3); - ConvertIntToDecimalStringN(attackString, sMonSummaryScreen->summary.atk, 1, 7); - ConvertIntToDecimalStringN(defenseString, sMonSummaryScreen->summary.def, 1, 7); + ConvertIntToDecimalStringN(currentHPString, sMonSummaryScreen->summary.currentHP, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(maxHPString, sMonSummaryScreen->summary.maxHP, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(attackString, sMonSummaryScreen->summary.atk, STR_CONV_MODE_RIGHT_ALIGN, 7); + ConvertIntToDecimalStringN(defenseString, sMonSummaryScreen->summary.def, STR_CONV_MODE_RIGHT_ALIGN, 7); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, currentHPString); @@ -3377,9 +3378,9 @@ static void PrintLeftColumnStats(void) static void BufferRightColumnStats(void) { - ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.spatk, 1, 3); - ConvertIntToDecimalStringN(gStringVar2, sMonSummaryScreen->summary.spdef, 1, 3); - ConvertIntToDecimalStringN(gStringVar3, sMonSummaryScreen->summary.speed, 1, 3); + ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.spatk, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, sMonSummaryScreen->summary.spdef, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar3, sMonSummaryScreen->summary.speed, STR_CONV_MODE_RIGHT_ALIGN, 3); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); @@ -3400,7 +3401,7 @@ static void PrintExpPointsNextLevel(void) int offset; u32 expToNextLevel; - ConvertIntToDecimalStringN(gStringVar1, sum->exp, 1, 7); + ConvertIntToDecimalStringN(gStringVar1, sum->exp, STR_CONV_MODE_RIGHT_ALIGN, 7); offset = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2; SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 1, 0, 0); @@ -3409,7 +3410,7 @@ static void PrintExpPointsNextLevel(void) else expToNextLevel = 0; - ConvertIntToDecimalStringN(gStringVar1, expToNextLevel, 1, 6); + ConvertIntToDecimalStringN(gStringVar1, expToNextLevel, STR_CONV_MODE_RIGHT_ALIGN, 6); offset = GetStringRightAlignXOffset(1, gStringVar1, 42) + 2; SummaryScreen_PrintTextOnWindow(windowId, gStringVar1, offset, 17, 0, 0); } @@ -3496,8 +3497,8 @@ static void PrintMoveNameAndPP(u8 moveIndex) { pp = CalculatePPWithBonus(move, summaryStruct->summary.ppBonuses, moveIndex); SummaryScreen_PrintTextOnWindow(moveNameWindowId, gMoveNames[move], 0, moveIndex * 16 + 1, 0, 1); - ConvertIntToDecimalStringN(gStringVar1, summaryStruct->summary.pp[moveIndex], 1, 2); - ConvertIntToDecimalStringN(gStringVar2, pp, 1, 2); + ConvertIntToDecimalStringN(gStringVar1, summaryStruct->summary.pp[moveIndex], STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar2, pp, STR_CONV_MODE_RIGHT_ALIGN, 2); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar2); @@ -3530,7 +3531,7 @@ static void PrintMovePowerAndAccuracy(u16 moveIndex) } else { - ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].power, 1, 3); + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].power, STR_CONV_MODE_RIGHT_ALIGN, 3); text = gStringVar1; } @@ -3542,7 +3543,7 @@ static void PrintMovePowerAndAccuracy(u16 moveIndex) } else { - ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].accuracy, 1, 3); + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveIndex].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); text = gStringVar1; } @@ -3660,7 +3661,7 @@ static void PrintNewMoveDetailsOrCancelText(void) else SummaryScreen_PrintTextOnWindow(windowId1, gMoveNames[move], 0, 65, 0, 5); - ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, 1, 2); + ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[move].pp, STR_CONV_MODE_RIGHT_ALIGN, 2); DynamicPlaceholderTextUtil_Reset(); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar1); diff --git a/src/pokenav.c b/src/pokenav.c index a5bb51789..2a1647a6f 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "task.h" #include "main.h" #include "overworld.h" diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index 1c40e146f..cb9467a9c 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "bg.h" #include "palette.h" diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c index 3cbf6ecd2..41ad37fbf 100644 --- a/src/post_battle_event_funcs.c +++ b/src/post_battle_event_funcs.c @@ -86,7 +86,7 @@ int GameClear(void) return 0; } -bool8 sp0C8_whiteout_maybe(void) +bool8 SetCB2WhiteOut(void) { SetMainCallback2(CB2_WhiteOut); return FALSE; diff --git a/src/psychic.c b/src/psychic.c index 6f808b547..7ad8e14cb 100644 --- a/src/psychic.c +++ b/src/psychic.c @@ -45,18 +45,18 @@ const struct SpriteTemplate gUnknown_08596548 = { .tileTag = ANIM_TAG_SPIRAL, .paletteTag = ANIM_TAG_SPIRAL, - .oam = &gUnknown_08524A9C, + .oam = &gOamData_AffineNormal_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596544, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; const struct SpriteTemplate gUnknown_08596560 = { .tileTag = ANIM_TAG_GREEN_LIGHT_WALL, .paletteTag = ANIM_TAG_GREEN_LIGHT_WALL, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -67,7 +67,7 @@ const struct SpriteTemplate gUnknown_08596578 = { .tileTag = ANIM_TAG_BLUE_LIGHT_WALL, .paletteTag = ANIM_TAG_BLUE_LIGHT_WALL, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -78,7 +78,7 @@ const struct SpriteTemplate gUnknown_08596590 = { .tileTag = ANIM_TAG_RED_LIGHT_WALL, .paletteTag = ANIM_TAG_RED_LIGHT_WALL, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -89,7 +89,7 @@ const struct SpriteTemplate gUnknown_085965A8 = { .tileTag = ANIM_TAG_GRAY_LIGHT_WALL, .paletteTag = ANIM_TAG_GRAY_LIGHT_WALL, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -100,7 +100,7 @@ const struct SpriteTemplate gUnknown_085965C0 = { .tileTag = ANIM_TAG_ORANGE_LIGHT_WALL, .paletteTag = ANIM_TAG_ORANGE_LIGHT_WALL, - .oam = &gUnknown_08524A3C, + .oam = &gOamData_AffineOff_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -126,7 +126,7 @@ const struct SpriteTemplate gUnknown_085965F4 = { .tileTag = ANIM_TAG_SPARKLE_4, .paletteTag = ANIM_TAG_SPARKLE_4, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085965F0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -151,7 +151,7 @@ const struct SpriteTemplate gUnknown_08596624 = { .tileTag = ANIM_TAG_SPARKLE_3, .paletteTag = ANIM_TAG_SPARKLE_3, - .oam = &gUnknown_0852490C, + .oam = &gOamData_AffineOff_ObjNormal_16x16, .anims = gUnknown_08596620, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -162,7 +162,7 @@ const struct SpriteTemplate gUnknown_0859663C = { .tileTag = ANIM_TAG_GOLD_RING, .paletteTag = ANIM_TAG_GOLD_RING, - .oam = &gUnknown_08524954, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -219,7 +219,7 @@ const struct SpriteTemplate gUnknown_085966DC = { .tileTag = ANIM_TAG_BENT_SPOON, .paletteTag = ANIM_TAG_BENT_SPOON, - .oam = &gUnknown_08524954, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gUnknown_085966D4, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -261,7 +261,7 @@ const struct SpriteTemplate gUnknown_08596744 = { .tileTag = ANIM_TAG_AMNESIA, .paletteTag = ANIM_TAG_AMNESIA, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596714, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -287,7 +287,7 @@ const struct SpriteTemplate gUnknown_08596794 = { .tileTag = ANIM_TAG_HOLLOW_ORB, .paletteTag = ANIM_TAG_HOLLOW_ORB, - .oam = &gUnknown_08524A2C, + .oam = &gOamData_AffineOff_ObjBlend_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -298,7 +298,7 @@ const struct SpriteTemplate gUnknown_085967AC = { .tileTag = 10250, .paletteTag = 10250, - .oam = &gUnknown_0852491C, + .oam = &gOamData_AffineOff_ObjNormal_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -351,7 +351,7 @@ const struct SpriteTemplate gUnknown_08596864 = { .tileTag = ANIM_TAG_BLUEGREEN_ORB, .paletteTag = ANIM_TAG_BLUEGREEN_ORB, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596854, @@ -374,11 +374,11 @@ const struct SpriteTemplate gUnknown_08596898 = { .tileTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_WHITE_CIRCLE_OF_LIGHT, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596894, - .callback = sub_80A77C8, + .callback = AnimSpriteOnMonPos, }; const union AffineAnimCmd gUnknown_085968B0[] = @@ -412,7 +412,7 @@ const struct SpriteTemplate gUnknown_08596920 = { .tileTag = ANIM_TAG_CIRCLE_OF_LIGHT, .paletteTag = ANIM_TAG_CIRCLE_OF_LIGHT, - .oam = &gUnknown_08524AFC, + .oam = &gOamData_AffineDouble_ObjBlend_64x64, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gUnknown_08596918, diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index fc2860797..4e5e492f2 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -5,7 +5,7 @@ #include "graphics.h" #include "bg.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "palette.h" #include "scanline_effect.h" #include "menu.h" diff --git a/src/record_mixing.c b/src/record_mixing.c index 32e0404b9..8a1e8b1ee 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "random.h" #include "constants/items.h" #include "text.h" @@ -631,7 +631,7 @@ static void ReceiveOldManData(OldMan *oldMan, size_t recordSize, u8 which) u8 version; u16 language; OldMan *dest; - u32 mixIndices[4]; + u32 mixIndices[MAX_LINK_PLAYERS]; ShufflePlayerIndices(mixIndices); dest = (void *)oldMan + recordSize * mixIndices[which]; diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 432c5dbe6..bd1974d48 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -10,7 +10,7 @@ #include "string_util.h" #include "palette.h" #include "save.h" -#include "alloc.h" +#include "malloc.h" #include "util.h" #include "task.h" #include "text.h" diff --git a/src/region_map.c b/src/region_map.c index ea2cbfa6a..b6133ee0d 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -2,7 +2,7 @@ #include "main.h" #include "text.h" #include "menu.h" -#include "alloc.h" +#include "malloc.h" #include "gpu_regs.h" #include "palette.h" #include "party_menu.h" @@ -55,7 +55,7 @@ static EWRAM_DATA struct { /*0x008*/ struct RegionMap regionMap; /*0x88c*/ u8 unk_88c[0x1c0]; /*0xa4c*/ u8 unk_a4c[0x26]; - /*0xa72*/ bool8 unk_a72; + /*0xa72*/ bool8 choseFlyLocation; } *sFlyMap = NULL; // a74 static bool32 gUnknown_03001180; @@ -1605,7 +1605,8 @@ u8 *GetMapName(u8 *dest, u16 regionMapId, u16 padLength) return str; } -u8 *sub_81245DC(u8 *dest, u16 mapSecId) +// TODO: probably needs a better name +u8 *GetMapNameGeneric(u8 *dest, u16 mapSecId) { switch (mapSecId) { @@ -1626,7 +1627,7 @@ u8 *sub_8124610(u8 *dest, u16 mapSecId) } else { - return sub_81245DC(dest, mapSecId); + return GetMapNameGeneric(dest, mapSecId); } } @@ -1972,13 +1973,13 @@ static void sub_8124D64(void) if (sFlyMap->regionMap.iconDrawType == MAPSECTYPE_CITY_CANFLY || sFlyMap->regionMap.iconDrawType == MAPSECTYPE_BATTLE_FRONTIER) { m4aSongNumStart(SE_SELECT); - sFlyMap->unk_a72 = TRUE; + sFlyMap->choseFlyLocation = TRUE; sub_81248F4(sub_8124E0C); } break; case INPUT_EVENT_B_BUTTON: m4aSongNumStart(SE_SELECT); - sFlyMap->unk_a72 = FALSE; + sFlyMap->choseFlyLocation = FALSE; sub_81248F4(sub_8124E0C); break; } @@ -1997,7 +1998,7 @@ static void sub_8124E0C(void) if (!UpdatePaletteFade()) { FreeRegionMapIconResources(); - if (sFlyMap->unk_a72) + if (sFlyMap->choseFlyLocation) { switch (sFlyMap->regionMap.mapSecId) { @@ -2024,11 +2025,11 @@ static void sub_8124E0C(void) } break; } - sub_80B69DC(); + ReturnToFieldFromFlyMapSelect(); } else { - SetMainCallback2(sub_81B58A8); + SetMainCallback2(CB2_ReturnToPartyMenuFromFlyMap); } if (sFlyMap != NULL) { diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index 1fe9f2279..eebaab52f 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -300,19 +300,19 @@ static void PrintTime(u8 windowId, u8 x, u8 y, u16 days, u8 hours, u8 minutes, u { u8 *dest = gStringVar4; - ConvertIntToDecimalStringN(gStringVar1, days, 1, 4); + ConvertIntToDecimalStringN(gStringVar1, days, STR_CONV_MODE_RIGHT_ALIGN, 4); dest = StringCopy(dest, gStringVar1); dest = StringCopy(dest, gText_Day); - ConvertIntToDecimalStringN(gStringVar1, hours, 1, 3); + ConvertIntToDecimalStringN(gStringVar1, hours, STR_CONV_MODE_RIGHT_ALIGN, 3); dest = StringCopy(dest, gStringVar1); dest = StringCopy(dest, gText_Colon3); - ConvertIntToDecimalStringN(gStringVar1, minutes, 2, 2); + ConvertIntToDecimalStringN(gStringVar1, minutes, STR_CONV_MODE_LEADING_ZEROS, 2); dest = StringCopy(dest, gStringVar1); dest = StringCopy(dest, gText_Colon3); - ConvertIntToDecimalStringN(gStringVar1, seconds, 2, 2); + ConvertIntToDecimalStringN(gStringVar1, seconds, STR_CONV_MODE_LEADING_ZEROS, 2); dest = StringCopy(dest, gStringVar1); AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, TEXT_SPEED_FF, NULL); diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c index beba742f5..5a54a2177 100644 --- a/src/reset_save_heap.c +++ b/src/reset_save_heap.c @@ -6,7 +6,7 @@ #include "save.h" #include "new_game.h" #include "overworld.h" -#include "alloc.h" +#include "malloc.h" void sub_81700F8(void) { diff --git a/src/rock.c b/src/rock.c index 6f6e20955..7bba6f603 100644 --- a/src/rock.c +++ b/src/rock.c @@ -59,7 +59,7 @@ const struct SpriteTemplate gUnknown_08596B04 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596AF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -70,7 +70,7 @@ const struct SpriteTemplate gUnknown_08596B1C = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596AF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -81,7 +81,7 @@ const struct SpriteTemplate gUnknown_08596B34 = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -105,7 +105,7 @@ const struct SpriteTemplate gUnknown_08596B70 = { .tileTag = ANIM_TAG_WATER_ORB, .paletteTag = ANIM_TAG_WATER_ORB, - .oam = &gUnknown_08524A8C, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, .anims = gUnknown_085950E0, .images = NULL, .affineAnims = gUnknown_08596B6C, @@ -116,7 +116,7 @@ const struct SpriteTemplate gUnknown_08596B88 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_085954D0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -127,7 +127,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8596BA0 = { .tileTag = ANIM_TAG_FLYING_DIRT, .paletteTag = ANIM_TAG_FLYING_DIRT, - .oam = &gUnknown_08524934, + .oam = &gOamData_AffineOff_ObjNormal_32x16, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -203,7 +203,7 @@ const struct SpriteTemplate gUnknown_08596C10 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -214,7 +214,7 @@ const struct SpriteTemplate gUnknown_08596C28 = { .tileTag = ANIM_TAG_MUD_SAND, .paletteTag = ANIM_TAG_MUD_SAND, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -225,7 +225,7 @@ const struct SpriteTemplate gUnknown_08596C40 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -236,7 +236,7 @@ const struct SpriteTemplate gUnknown_08596C58 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596BF8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -265,7 +265,7 @@ const struct SpriteTemplate gUnknown_08596C98 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_08596BF8, .images = NULL, .affineAnims = gUnknown_08596C90, @@ -276,7 +276,7 @@ const struct SpriteTemplate gUnknown_08596CB0 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_08596BF8, .images = NULL, .affineAnims = gUnknown_08596C90, @@ -287,7 +287,7 @@ const struct SpriteTemplate gUnknown_08596CC8 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08596C08, .images = NULL, .affineAnims = gUnknown_08596C90, @@ -298,7 +298,7 @@ const struct SpriteTemplate gUnknown_08596CE0 = { .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524974, + .oam = &gOamData_AffineNormal_ObjNormal_32x32, .anims = gUnknown_08596C00, .images = NULL, .affineAnims = gUnknown_08596C90, diff --git a/src/rom_8034C54.c b/src/rom_8034C54.c index 42817fc2b..7cc30c775 100644 --- a/src/rom_8034C54.c +++ b/src/rom_8034C54.c @@ -1,6 +1,6 @@ #include "global.h" #include "rom_8034C54.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "main.h" #include "battle_main.h" diff --git a/src/rom_81520A8.c b/src/rom_81520A8.c index f06823594..f6d14d49c 100644 --- a/src/rom_81520A8.c +++ b/src/rom_81520A8.c @@ -1,6 +1,6 @@ #include "global.h" #include "rom_81520A8.h" -#include "alloc.h" +#include "malloc.h" #include "main.h" #include "rom_8034C54.h" diff --git a/src/rotating_tile_puzzle.c b/src/rotating_tile_puzzle.c new file mode 100644 index 000000000..7238ec751 --- /dev/null +++ b/src/rotating_tile_puzzle.c @@ -0,0 +1,338 @@ +#include "global.h" +#include "event_object_movement.h" +#include "fieldmap.h" +#include "malloc.h" +#include "rotating_tile_puzzle.h" +#include "script_movement.h" +#include "constants/event_object_movement_constants.h" +#include "constants/event_objects.h" +#include "constants/metatile_labels.h" + +extern const u8 RotatingTilePuzzle_Movement_ShiftRight[]; +extern const u8 RotatingTilePuzzle_Movement_ShiftDown[]; +extern const u8 RotatingTilePuzzle_Movement_ShiftLeft[]; +extern const u8 RotatingTilePuzzle_Movement_ShiftUp[]; +extern const u8 RotatingTilePuzzle_Movement_FaceRight[]; +extern const u8 RotatingTilePuzzle_Movement_FaceDown[]; +extern const u8 RotatingTilePuzzle_Movement_FaceLeft[]; +extern const u8 RotatingTilePuzzle_Movement_FaceUp[]; + +#define ROTATE_COUNTERCLOCKWISE 0 +#define ROTATE_CLOCKWISE 1 +#define ROTATE_NONE 2 + +struct RotatingTileObject +{ + u8 prevPuzzleTileNum; + u8 eventTemplateId; +}; + +struct RotatingTilePuzzle +{ + struct RotatingTileObject objects[EVENT_OBJECTS_COUNT]; + u8 numObjects; + bool8 isTrickHouse; +}; + +// This file's functions. +static void SaveRotatingTileObject(u8 eventTemplateId, u8 arg1); +static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 arg1); + +// EWRAM vars +EWRAM_DATA static struct RotatingTilePuzzle *sRotatingTilePuzzle = NULL; + +// code +void InitRotatingTilePuzzle(bool8 isTrickHouse) +{ + if (sRotatingTilePuzzle == NULL) + sRotatingTilePuzzle = AllocZeroed(sizeof(*sRotatingTilePuzzle)); + + sRotatingTilePuzzle->isTrickHouse = isTrickHouse; +} + +void FreeRotatingTilePuzzle(void) +{ + u8 id; + + if (sRotatingTilePuzzle != NULL) + FREE_AND_SET_NULL(sRotatingTilePuzzle); + + id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); + EventObjectClearHeldMovementIfFinished(&gEventObjects[id]); + ScriptMovement_UnfreezeEventObjects(); +} + +u16 MoveRotatingTileObjects(u8 puzzleNumber) +{ + u8 i; + struct EventObjectTemplate *eventObjects = gSaveBlock1Ptr->eventObjectTemplates; + u16 localId = 0; + + for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++) + { + s32 puzzleTileStart; + u8 puzzleTileNum; + s16 x = eventObjects[i].x + 7; + s16 y = eventObjects[i].y + 7; + u16 metatile = MapGridGetMetatileIdAt(x, y); + + if (!sRotatingTilePuzzle->isTrickHouse) + puzzleTileStart = METATILE_MossdeepGym_YellowArrow_Right; + else + puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right; + + // Object is on a metatile before the puzzle tile section + // UB: Because this is not if (metatile < puzzleTileStart), for the trick house (metatile - puzzleTileStart) below can result in casting a negative value to u8 + if (metatile < METATILE_MossdeepGym_YellowArrow_Right) + continue; + + // Object is on a metatile after the puzzle tile section (never occurs, in both cases the puzzle tiles are last) + if ((u8)((metatile - puzzleTileStart) / 8) >= 5) + continue; + + // Object is on a metatile in puzzle tile section, but not one of the currently rotating color + if ((u8)((metatile - puzzleTileStart) / 8) != puzzleNumber) + continue; + + puzzleTileNum = (u8)((metatile - puzzleTileStart) % 8); + + // First 4 puzzle tiles are the colored arrows + if (puzzleTileNum < 4) + { + s8 x = 0; + s8 y = 0; + const u8 *movementScript; + + switch (puzzleTileNum) + { + case 0: // Right Arrow + movementScript = RotatingTilePuzzle_Movement_ShiftRight; + x = 1; + break; + case 1: // Down Arrow + movementScript = RotatingTilePuzzle_Movement_ShiftDown; + y = 1; + break; + case 2: // Left Arrow + movementScript = RotatingTilePuzzle_Movement_ShiftLeft; + x = -1; + break; + case 3: // Up Arrow + movementScript = RotatingTilePuzzle_Movement_ShiftUp; + y = -1; + break; + default: + continue; + } + + eventObjects[i].x += x; + eventObjects[i].y += y; + if (GetEventObjectIdByLocalIdAndMap(eventObjects[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup) != EVENT_OBJECTS_COUNT) + { + SaveRotatingTileObject(i, puzzleTileNum); + localId = eventObjects[i].localId; + ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript); + } + // Never reached in normal gameplay + else + { + TurnUnsavedRotatingTileObject(i, puzzleTileNum); + } + } + } + + return localId; +} + +void TurnRotatingTileObjects(void) +{ + u8 i; + s32 puzzleTileStart; + struct EventObjectTemplate *eventObjects; + + if (sRotatingTilePuzzle == NULL) + return; + + if (!sRotatingTilePuzzle->isTrickHouse) + puzzleTileStart = METATILE_MossdeepGym_YellowArrow_Right; + else + puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right; + + eventObjects = gSaveBlock1Ptr->eventObjectTemplates; + for (i = 0; i < sRotatingTilePuzzle->numObjects; i++) + { + s32 rotation; + s8 tileDifference; + u8 eventObjectId; + s16 x = eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].x + 7; + s16 y = eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].y + 7; + u16 metatile = MapGridGetMetatileIdAt(x, y); + + // NOTE: The following 2 assignments and if else could all be replaced with rotation = ROTATE_COUNTERCLOCKWISE + // For an object to be saved in sRotatingTilePuzzle->objects, it must have been on a colored arrow tile + // After the first assignment, tileDifference will always be a number [0-3] representing which arrow tile the object is on now (0: right, 1: down, 2: left, 3: up) + // prevPuzzleTileNum will similarly be a number [0-3] representing the arrow tile the object just moved from + // All the puzzles are oriented counter-clockwise and can only move 1 step at a time, so the difference between the current tile and the previous tile will always either be -1 or 3 (0-1, 1-2, 2-3, 3-0) + // Which means tileDifference will always either be -1 or 3 after the below subtraction, and rotation will always be ROTATE_COUNTERCLOCKWISE after the following conditionals + tileDifference = (u8)((metatile - puzzleTileStart) % 8); + tileDifference -= (sRotatingTilePuzzle->objects[i].prevPuzzleTileNum); + + // Always true, see above + if (tileDifference < 0 || tileDifference == 3) + { + // Always false, see above + if (tileDifference == -3) + rotation = ROTATE_CLOCKWISE; + else + rotation = ROTATE_COUNTERCLOCKWISE; + } + else + { + if (tileDifference > 0) + rotation = ROTATE_CLOCKWISE; + else + rotation = ROTATE_NONE; + } + + eventObjectId = GetEventObjectIdByLocalIdAndMap(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + if (eventObjectId != EVENT_OBJECTS_COUNT) + { + const u8 *movementScript; + u8 direction = gEventObjects[eventObjectId].facingDirection; + if (rotation == ROTATE_COUNTERCLOCKWISE) + { + switch (direction) + { + case DIR_EAST: + movementScript = RotatingTilePuzzle_Movement_FaceUp; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; + break; + case DIR_SOUTH: + movementScript = RotatingTilePuzzle_Movement_FaceRight; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + case DIR_WEST: + movementScript = RotatingTilePuzzle_Movement_FaceDown; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; + break; + case DIR_NORTH: + movementScript = RotatingTilePuzzle_Movement_FaceLeft; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + default: + continue; + } + ScriptMovement_StartObjectMovementScript(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId, + gSaveBlock1Ptr->location.mapNum, + gSaveBlock1Ptr->location.mapGroup, + movementScript); + } + // Never reached + else if (rotation == ROTATE_CLOCKWISE) + { + switch (direction) + { + case DIR_EAST: + movementScript = RotatingTilePuzzle_Movement_FaceDown; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; + break; + case DIR_SOUTH: + movementScript = RotatingTilePuzzle_Movement_FaceLeft; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + case DIR_WEST: + movementScript = RotatingTilePuzzle_Movement_FaceUp; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; + break; + case DIR_NORTH: + movementScript = RotatingTilePuzzle_Movement_FaceRight; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + default: + continue; + } + ScriptMovement_StartObjectMovementScript(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId, + gSaveBlock1Ptr->location.mapNum, + gSaveBlock1Ptr->location.mapGroup, + movementScript); + } + } + } +} + +static void SaveRotatingTileObject(u8 eventTemplateId, u8 puzzleTileNum) +{ + sRotatingTilePuzzle->objects[sRotatingTilePuzzle->numObjects].eventTemplateId = eventTemplateId; + sRotatingTilePuzzle->objects[sRotatingTilePuzzle->numObjects].prevPuzzleTileNum = puzzleTileNum; + sRotatingTilePuzzle->numObjects++; +} + +// Functionally unused +static void TurnUnsavedRotatingTileObject(u8 eventTemplateId, u8 puzzleTileNum) +{ + s8 tileDifference; + s32 rotation; + s32 puzzleTileStart; + u16 movementType; + struct EventObjectTemplate *eventObjects = gSaveBlock1Ptr->eventObjectTemplates; + s16 x = eventObjects[eventTemplateId].x + 7; + s16 y = eventObjects[eventTemplateId].y + 7; + u16 metatile = MapGridGetMetatileIdAt(x, y); + + if (!sRotatingTilePuzzle->isTrickHouse) + puzzleTileStart = METATILE_MossdeepGym_YellowArrow_Right; + else + puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right; + + tileDifference = (u8)((metatile - puzzleTileStart) % 8); + tileDifference -= puzzleTileNum; + + if (tileDifference < 0 || tileDifference == 3) + rotation = ROTATE_COUNTERCLOCKWISE; + else if (tileDifference > 0 || tileDifference == -3) + rotation = ROTATE_CLOCKWISE; + else + rotation = ROTATE_NONE; + + movementType = eventObjects[eventTemplateId].movementType; + if (rotation == ROTATE_COUNTERCLOCKWISE) + { + switch (movementType) + { + case MOVEMENT_TYPE_FACE_RIGHT: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; + break; + case MOVEMENT_TYPE_FACE_DOWN: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + case MOVEMENT_TYPE_FACE_LEFT: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; + break; + case MOVEMENT_TYPE_FACE_UP: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + default: + break; + } + } + else if (rotation == ROTATE_CLOCKWISE) + { + switch (movementType) + { + case MOVEMENT_TYPE_FACE_RIGHT: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; + break; + case MOVEMENT_TYPE_FACE_DOWN: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + case MOVEMENT_TYPE_FACE_LEFT: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; + break; + case MOVEMENT_TYPE_FACE_UP: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + default: + break; + } + } +} diff --git a/src/roulette.c b/src/roulette.c index 662522aae..26002e773 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "coins.h" #include "decompress.h" @@ -188,18 +188,18 @@ static void sub_8144A24(struct Sprite *); static void sub_8144E60(struct Sprite *); static void sub_8145294(struct Sprite *); -extern const u8 gUnknown_082A5B89[]; -extern const u8 gUnknown_082A5C13[]; -extern const u8 gUnknown_082A5BD7[]; -extern const u8 gUnknown_082A5BCB[]; -extern const u8 gUnknown_082A5BE0[]; -extern const u8 gUnknown_082A5BEF[]; -extern const u8 gUnknown_082A5C21[]; -extern const u8 gUnknown_082A5C61[]; -extern const u8 gUnknown_082A5C04[]; -extern const u8 gUnknown_082A5B12[]; -extern const u8 gUnknown_082A5B6B[]; -extern const u8 gUnknown_082A5B4E[]; +extern const u8 Roulette_Text_ControlsInstruction[]; +extern const u8 Roulette_Text_KeepPlaying[]; +extern const u8 Roulette_Text_Jackpot[]; +extern const u8 Roulette_Text_ItsAHit[]; +extern const u8 Roulette_Text_NothingDoing[]; +extern const u8 Roulette_Text_YouveWonXCoins[]; +extern const u8 Roulette_Text_BoardWillBeCleared[]; +extern const u8 Roulette_Text_CoinCaseIsFull[]; +extern const u8 Roulette_Text_NoCoinsLeft[]; +extern const u8 Roulette_Text_PlayMinimumWagerIsX[]; +extern const u8 Roulette_Text_SpecialRateTable[]; +extern const u8 Roulette_Text_NotEnoughCoins[]; static const u16 gUnknown_085B5BFC[] = INCBIN_U16("graphics/roulette/85B5BFC.gbapal"); static const u32 gUnknown_085B5DFC[] = INCBIN_U32("graphics/roulette/85B5DFC.bin.lz"); @@ -974,7 +974,7 @@ static void sub_81405CC(void) sub_81436D0(0); sub_81424FC(0); DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5B89, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_ControlsInstruction, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); gSpriteCoordOffsetX = -60; gSpriteCoordOffsetY = 0; @@ -1045,7 +1045,7 @@ static void sub_8140914(u8 taskId) { DisplayYesNoMenuDefaultYes(); DrawStdWindowFrame(gUnknown_0203AB8C, 0); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C13, 0, 1, TEXT_SPEED_FF, 0); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_KeepPlaying, 0, 1, TEXT_SPEED_FF, 0); CopyWindowToVram(gUnknown_0203AB8C, 3); DoYesNoFuncWithChoice(taskId, &gUnknown_085B6410); } @@ -1213,7 +1213,7 @@ static void sub_8140D6C(u8 r0) static void sub_8140F6C(u8 r0) { - sub_80EECA4(); + IncrementDailyRouletteUses(); gUnknown_0203AB88->var28 = 0xFF; if (gUnknown_0203AB88->var19 == 1) gUnknown_0203AB88->var23 = 1; @@ -1552,14 +1552,14 @@ static void sub_814189C(u8 taskId) { PlayFanfare(MUS_ME_B_BIG); DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5BD7, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_Jackpot, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); } else { PlayFanfare(MUS_ME_B_SMALL); DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5BCB, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_ItsAHit, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); } break; @@ -1567,7 +1567,7 @@ static void sub_814189C(u8 taskId) default: m4aSongNumStart(SE_HAZURE); DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5BE0, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_NothingDoing, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); break; } @@ -1609,7 +1609,7 @@ static void sub_8141984(u8 taskId) static void sub_8141A18(u8 taskId) { ConvertIntToDecimalStringN(gStringVar1, (gUnknown_0203AB88->var19 * gTasks[taskId].data[2]), STR_CONV_MODE_LEFT_ALIGN, 2); - StringExpandPlaceholders(gStringVar4, gUnknown_082A5BEF); + StringExpandPlaceholders(gStringVar4, Roulette_Text_YouveWonXCoins); DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); @@ -1644,14 +1644,14 @@ static void sub_8141B58(u8 taskId) if (gTasks[taskId].data[6] == 6) { DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C21, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_BoardWillBeCleared, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); sub_8141F7C(taskId, dp01t_12_3_battle_menu, 0xFFFF, 3); } else if (gTasks[taskId].data[13] == 9999) { DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C61, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); sub_8141F7C(taskId, sub_8140914, 0xFFFF, 0x3); } @@ -1663,7 +1663,7 @@ static void sub_8141B58(u8 taskId) else { DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C04, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_NoCoinsLeft, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); sub_8141F7C(taskId, sub_8140994, 0x3C, 0x3); } @@ -1688,7 +1688,7 @@ static void dp01t_12_3_battle_menu(u8 taskId) if (gTasks[taskId].data[13] == 9999) { DrawStdWindowFrame(gUnknown_0203AB8C, FALSE); - AddTextPrinterParameterized(gUnknown_0203AB8C, 1, gUnknown_082A5C61, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_0203AB8C, 1, Roulette_Text_CoinCaseIsFull, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(gUnknown_0203AB8C, 3); sub_8141F7C(taskId, sub_8140914, 0xFFFF, 3); } @@ -3121,7 +3121,7 @@ static void sub_81429F0(u8 taskId) { u32 temp = gUnknown_085B6344[(gSpecialVar_0x8004 & 1) + (gSpecialVar_0x8004 >> 7 << 1)]; ConvertIntToDecimalStringN(gStringVar1, temp, STR_CONV_MODE_LEADING_ZEROS, 1); - StringExpandPlaceholders(gStringVar4, gUnknown_082A5B12); + StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX); DrawStdWindowFrame(0, FALSE); AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(0, 3); @@ -3134,19 +3134,19 @@ static void Task_Roulette_0(u8 taskId) s32 temp; PrintCoinsString(gTasks[taskId].data[13]); temp = gUnknown_085B6344[(gSpecialVar_0x8004 & 1) + (gSpecialVar_0x8004 >> 7 << 1)]; - ConvertIntToDecimalStringN(gStringVar1, temp, 2, 1); + ConvertIntToDecimalStringN(gStringVar1, temp, STR_CONV_MODE_LEADING_ZEROS, 1); if (gTasks[taskId].data[13] >= temp) { if ((gSpecialVar_0x8004 & 0x80) && (gSpecialVar_0x8004 & 1)) { DrawStdWindowFrame(0, FALSE); - AddTextPrinterParameterized(0, 1, gUnknown_082A5B6B, 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(0, 1, Roulette_Text_SpecialRateTable, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(0, 3); gTasks[taskId].func = sub_81429F0; } else { - StringExpandPlaceholders(gStringVar4, gUnknown_082A5B12); + StringExpandPlaceholders(gStringVar4, Roulette_Text_PlayMinimumWagerIsX); DrawStdWindowFrame(0, FALSE); AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(0, 3); @@ -3155,7 +3155,7 @@ static void Task_Roulette_0(u8 taskId) } else { - StringExpandPlaceholders(gStringVar4, gUnknown_082A5B4E); + StringExpandPlaceholders(gStringVar4, Roulette_Text_NotEnoughCoins); DrawStdWindowFrame(0, FALSE); AddTextPrinterParameterized(0, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); CopyWindowToVram(0, 3); diff --git a/src/safari_zone.c b/src/safari_zone.c index 703c3d0cd..e8827e124 100644 --- a/src/safari_zone.c +++ b/src/safari_zone.c @@ -23,10 +23,10 @@ struct PokeblockFeeder #define NUM_POKEBLOCK_FEEDERS 10 -extern const u8 EventScript_2A4B8A[]; -extern const u8 EventScript_2A4B6F[]; -extern const u8 EventScript_2A4B4C[]; -extern const u8 EventScript_2A4B9B[]; +extern const u8 SafariZone_EventScript_TimesUp[]; +extern const u8 SafariZone_EventScript_RetirePrompt[]; +extern const u8 SafariZone_EventScript_OutOfBallsMidBattle[]; +extern const u8 SafariZone_EventScript_OutOfBalls[]; EWRAM_DATA u8 gNumSafariBalls = 0; EWRAM_DATA static u16 sSafariZoneStepCounter = 0; @@ -83,7 +83,7 @@ bool8 SafariZoneTakeStep(void) sSafariZoneStepCounter--; if (sSafariZoneStepCounter == 0) { - ScriptContext1_SetupScript(EventScript_2A4B8A); + ScriptContext1_SetupScript(SafariZone_EventScript_TimesUp); return TRUE; } return FALSE; @@ -91,7 +91,7 @@ bool8 SafariZoneTakeStep(void) void SafariZoneRetirePrompt(void) { - ScriptContext1_SetupScript(EventScript_2A4B6F); + ScriptContext1_SetupScript(SafariZone_EventScript_RetirePrompt); } void CB2_EndSafariBattle(void) @@ -105,14 +105,14 @@ void CB2_EndSafariBattle(void) } else if (gBattleOutcome == B_OUTCOME_NO_SAFARI_BALLS) { - ScriptContext2_RunNewScript(EventScript_2A4B4C); + ScriptContext2_RunNewScript(SafariZone_EventScript_OutOfBallsMidBattle); WarpIntoMap(); gFieldCallback = sub_80AF6F0; SetMainCallback2(CB2_LoadMap); } else if (gBattleOutcome == B_OUTCOME_CAUGHT) { - ScriptContext1_SetupScript(EventScript_2A4B9B); + ScriptContext1_SetupScript(SafariZone_EventScript_OutOfBalls); ScriptContext1_Stop(); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } diff --git a/src/scrcmd.c b/src/scrcmd.c index 4c8895ab8..610547dd8 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -27,19 +27,18 @@ #include "event_obj_lock.h" #include "menu.h" #include "money.h" -#include "mossdeep_gym.h" #include "mystery_event_script.h" #include "palette.h" #include "party_menu.h" #include "pokemon_storage_system.h" #include "random.h" #include "overworld.h" +#include "rotating_tile_puzzle.h" #include "rtc.h" #include "script.h" #include "script_menu.h" #include "script_movement.h" #include "script_pokemon_80F8.h" -#include "script_pokemon_81B9.h" #include "shop.h" #include "slot_machine.h" #include "sound.h" @@ -68,7 +67,7 @@ extern const SpecialFunc gSpecials[]; extern const u8 *gStdScripts[]; extern const u8 *gStdScripts_End[]; -void sub_809BDB4(void); +static void CloseBrailleWindow(void); // This is defined in here so the optimizer can't see its value when compiling // script.c. @@ -607,7 +606,7 @@ bool8 ScrCmd_incrementgamestat(struct ScriptContext *ctx) bool8 ScrCmd_animateflash(struct ScriptContext *ctx) { - sub_80B009C(ScriptReadByte(ctx)); + AnimateFlash(ScriptReadByte(ctx)); ScriptContext1_Stop(); return TRUE; } @@ -815,7 +814,7 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_warpD7(struct ScriptContext *ctx) +bool8 ScrCmd_warpmossdeepgym(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -824,7 +823,7 @@ bool8 ScrCmd_warpD7(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); SetWarpDestination(mapGroup, mapNum, warpId, x, y); - sub_80AF87C(); + DoMossdeepGymWarp(); ResetInitialPlayerAvatarState(); return TRUE; } @@ -1528,9 +1527,9 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_cmdDA(struct ScriptContext *ctx) +bool8 ScrCmd_closebraillemessage(struct ScriptContext *ctx) { - sub_809BDB4(); + CloseBrailleWindow(); return FALSE; } @@ -1612,10 +1611,10 @@ bool8 ScrCmd_buffermovename(struct ScriptContext *ctx) bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); - u16 v1 = VarGet(ScriptReadHalfword(ctx)); - u8 v2 = CountDigits(v1); + u16 num = VarGet(ScriptReadHalfword(ctx)); + u8 numDigits = CountDigits(num); - ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2); + ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], num, STR_CONV_MODE_LEFT_ALIGN, numDigits); return FALSE; } @@ -1930,15 +1929,15 @@ bool8 ScrCmd_setberrytree(struct ScriptContext *ctx) bool8 ScrCmd_getpricereduction(struct ScriptContext *ctx) { - u16 value = VarGet(ScriptReadHalfword(ctx)); + u16 newsKind = VarGet(ScriptReadHalfword(ctx)); - gSpecialVar_Result = GetPriceReduction(value); + gSpecialVar_Result = GetPriceReduction(newsKind); return FALSE; } bool8 ScrCmd_choosecontestmon(struct ScriptContext *ctx) { - sub_81B9404(); + ChooseContestMon(); ScriptContext1_Stop(); return TRUE; } @@ -2149,31 +2148,31 @@ bool8 ScrCmd_takecoins(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_mossdeepgym1(struct ScriptContext *ctx) +bool8 ScrCmd_moverotatingtileobjects(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u16 puzzleNumber = VarGet(ScriptReadHalfword(ctx)); - sMovingNpcId = MossdeepGym_MoveEvents(v1); + sMovingNpcId = MoveRotatingTileObjects(puzzleNumber); return FALSE; } -bool8 ScrCmd_mossdeepgym2(struct ScriptContext *ctx) +bool8 ScrCmd_turnrotatingtileobjects(struct ScriptContext *ctx) { - MossdeepGym_TurnEvents(); + TurnRotatingTileObjects(); return FALSE; } -bool8 ScrCmd_mossdeepgym3(struct ScriptContext *ctx) +bool8 ScrCmd_initrotatingtilepuzzle(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u16 isTrickHouse = VarGet(ScriptReadHalfword(ctx)); - InitMossdeepGymTiles(v1); + InitRotatingTilePuzzle(isTrickHouse); return FALSE; } -bool8 ScrCmd_mossdeepgym4(struct ScriptContext *ctx) +bool8 ScrCmd_freerotatingtilepuzzle(struct ScriptContext *ctx) { - FinishMossdeepGymTiles(); + FreeRotatingTilePuzzle(); return FALSE; } @@ -2218,6 +2217,8 @@ bool8 ScrCmd_checkmonobedience(struct ScriptContext *ctx) return FALSE; } +// TODO: Should be renamed. Name implies general usage, but its specifically for Wonder Card +// See GetSavedRamScriptIfValid, which is NULL if ValidateReceivedWonderCard returns FALSE bool8 ScrCmd_gotoram(struct ScriptContext *ctx) { const u8* v1 = GetSavedRamScriptIfValid(); @@ -2255,7 +2256,7 @@ bool8 ScrCmd_setmonmetlocation(struct ScriptContext *ctx) return FALSE; } -void sub_809BDB4(void) +static void CloseBrailleWindow(void) { ClearStdWindowAndFrame(gBrailleWindowId, 1); RemoveWindow(gBrailleWindowId); @@ -2279,7 +2280,7 @@ bool8 ScrCmd_buffertrainername(struct ScriptContext *ctx) return FALSE; } -void sub_809BE48(u16 npcId) +void SetMovingNpcId(u16 npcId) { sMovingNpcId = npcId; } diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index a80fe49ff..16c5d477a 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -610,7 +610,7 @@ static bool8 CheckPartyMonHasHeldItem(u16 item) return FALSE; } -bool8 sub_80F9370(void) +bool8 DoesPartyHaveEnigmaBerry(void) { bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY); if (hasItem == TRUE) @@ -646,7 +646,7 @@ void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot) void ChooseHalfPartyForBattle(void) { gMain.savedCallback = CB2_ReturnFromChooseHalfParty; - VarSet(VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_DOUBLE_COLOSSEUM); + VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER); InitChooseHalfPartyForBattle(0); } diff --git a/src/secret_base.c b/src/secret_base.c index 861a987e2..76dbe7668 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_setup.h" #include "decoration.h" @@ -82,7 +82,7 @@ static void ShowRegistryMenuDeleteYesNo(u8 taskId); static void DeleteRegistry_Yes(u8 taskId); static void DeleteRegistry_No(u8 taskId); static void ReturnToMainRegistryMenu(u8 taskId); -static void GoToSecretBasePCMainMenu(u8 taskId); +static void GoToSecretBasePCRegisterMenu(u8 taskId); static u8 GetSecretBaseOwnerType(u8 secretBaseId); static const struct SecretBaseEntranceMetatiles sSecretBaseEntranceMetatiles[] = @@ -650,7 +650,7 @@ void WarpIntoSecretBase(const struct MapPosition *position, const struct MapEven { SetCurSecretBaseIdFromPosition(position, events); TrySetCurSecretBaseIndex(); - ScriptContext1_SetupScript(EventScript_275BB7); + ScriptContext1_SetupScript(SecretBase_EventScript_Enter); } bool8 TrySetCurSecretBase(void) @@ -894,7 +894,7 @@ static void Task_ShowSecretBaseRegistryMenu(u8 taskId) } else { - DisplayItemMessageOnField(taskId, gText_NoRegistry, GoToSecretBasePCMainMenu); + DisplayItemMessageOnField(taskId, gText_NoRegistry, GoToSecretBasePCRegisterMenu); } } @@ -974,7 +974,7 @@ static void HandleRegistryMenuInput(u8 taskId) RemoveWindow(data[6]); schedule_bg_copy_tilemap_to_vram(0); free(sRegistryMenu); - GoToSecretBasePCMainMenu(taskId); + GoToSecretBasePCRegisterMenu(taskId); break; default: PlaySE(SE_SELECT); @@ -1074,12 +1074,12 @@ static void ReturnToMainRegistryMenu(u8 taskId) gTasks[taskId].func = HandleRegistryMenuInput; } -static void GoToSecretBasePCMainMenu(u8 taskId) +static void GoToSecretBasePCRegisterMenu(u8 taskId) { if (VarGet(VAR_CURRENT_SECRET_BASE) == 0) - ScriptContext1_SetupScript(gUnknown_0823B4E8); + ScriptContext1_SetupScript(SecretBase_EventScript_PCCancel); else - ScriptContext1_SetupScript(gUnknown_0823B5E9); + ScriptContext1_SetupScript(SecretBase_EventScript_ShowRegisterMenu); DestroyTask(taskId); } @@ -1094,25 +1094,25 @@ const u8 *GetSecretBaseTrainerLoseText(void) { u8 ownerType = GetSecretBaseOwnerType(VarGet(VAR_CURRENT_SECRET_BASE)); if (ownerType == 0) - return SecretBase_RedCave1_Text_274966; + return SecretBase_Text_Trainer0Defeated; else if (ownerType == 1) - return SecretBase_RedCave1_Text_274D13; + return SecretBase_Text_Trainer1Defeated; else if (ownerType == 2) - return SecretBase_RedCave1_Text_274FFE; + return SecretBase_Text_Trainer2Defeated; else if (ownerType == 3) - return SecretBase_RedCave1_Text_275367; + return SecretBase_Text_Trainer3Defeated; else if (ownerType == 4) - return SecretBase_RedCave1_Text_2756C7; + return SecretBase_Text_Trainer4Defeated; else if (ownerType == 5) - return SecretBase_RedCave1_Text_274B24; + return SecretBase_Text_Trainer5Defeated; else if (ownerType == 6) - return SecretBase_RedCave1_Text_274E75; + return SecretBase_Text_Trainer6Defeated; else if (ownerType == 7) - return SecretBase_RedCave1_Text_2751E1; + return SecretBase_Text_Trainer7Defeated; else if (ownerType == 8) - return SecretBase_RedCave1_Text_2754F6; + return SecretBase_Text_Trainer8Defeated; else - return SecretBase_RedCave1_Text_2758CC; + return SecretBase_Text_Trainer9Defeated; } void PrepSecretBaseBattleFlags(void) @@ -1122,12 +1122,12 @@ void PrepSecretBaseBattleFlags(void) gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_SECRET_BASE; } -void sub_80EA30C(void) +void SetBattledOwnerFromResult(void) { gSaveBlock1Ptr->secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].battledOwnerToday = gSpecialVar_Result; } -void GetSecretBaseOwnerInteractionState(void) +void GetSecretBaseOwnerAndState(void) { u16 secretBaseId; u8 i; @@ -1719,7 +1719,7 @@ void ClearJapaneseSecretBases(struct SecretBase *bases) } } -void sub_80EB1AC(void) +void InitSecretBaseVars(void) { VarSet(VAR_SECRET_BASE_STEP_COUNTER, 0); VarSet(VAR_SECRET_BASE_LAST_ITEM_USED, 0); diff --git a/src/shop.c b/src/shop.c index bf15568fb..c9cd1919a 100755 --- a/src/shop.c +++ b/src/shop.c @@ -17,7 +17,7 @@ #include "item_menu.h" #include "list_menu.h" #include "main.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "menu_helpers.h" #include "money.h" @@ -38,6 +38,7 @@ #include "constants/metatile_behaviors.h" #include "constants/rgb.h" #include "constants/songs.h" +#include "constants/tv.h" EWRAM_DATA struct MartInfo gMartInfo = {0}; EWRAM_DATA struct ShopData *gShopDataPtr = NULL; @@ -560,7 +561,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { ConvertIntToDecimalStringN( gStringVar1, - ItemId_GetPrice(item) >> GetPriceReduction(1), + ItemId_GetPrice(item) >> GetPriceReduction(POKENEWS_SLATEPORT), STR_CONV_MODE_LEFT_ALIGN, 5); } @@ -932,7 +933,7 @@ static void Task_BuyMenu(u8 taskId) if (gMartInfo.martType == MART_TYPE_NORMAL) { - gShopDataPtr->totalCost = (ItemId_GetPrice(itemId) >> GetPriceReduction(1)); + gShopDataPtr->totalCost = (ItemId_GetPrice(itemId) >> GetPriceReduction(POKENEWS_SLATEPORT)); } else { @@ -1011,7 +1012,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopDataPtr->maxQuantity) == TRUE) { - gShopDataPtr->totalCost = (ItemId_GetPrice(tItemId) >> GetPriceReduction(1)) * tItemCount; + gShopDataPtr->totalCost = (ItemId_GetPrice(tItemId) >> GetPriceReduction(POKENEWS_SLATEPORT)) * tItemCount; BuyMenuPrintItemQuantityAndPrice(taskId); } else @@ -1147,7 +1148,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) FillWindowPixelBuffer(4, PIXEL_FILL(1)); PrintMoneyAmount(4, 38, 1, gShopDataPtr->totalCost, TEXT_SPEED_FF); - ConvertIntToDecimalStringN(gStringVar1, tItemCount, 2, 2); + ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(gStringVar4, gText_xVar1); BuyMenuPrint(4, gStringVar4, 0, 1, 0, 0); } diff --git a/src/slot_machine.c b/src/slot_machine.c index 003ac3327..742ec6120 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -14,7 +14,7 @@ #include "util.h" #include "text.h" #include "menu.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "gpu_regs.h" #include "coins.h" @@ -1060,7 +1060,7 @@ static bool8 SlotAction9(struct Task *task) ReelTasks_SetUnkTaskData(1); ReelTasks_SetUnkTaskData(2); - sub_80EEC80(); // something with daily slot variable + IncrementDailySlotsUses(); task->data[0] = 0; if (sSlotMachine->luckyFlags & LUCKY_BIAS_REELTIME) diff --git a/src/sprite.c b/src/sprite.c deleted file mode 100644 index e25eac62e..000000000 --- a/src/sprite.c +++ /dev/null @@ -1,1758 +0,0 @@ -#include "global.h" -#include "sprite.h" -#include "main.h" -#include "palette.h" - -#define MAX_SPRITE_COPY_REQUESTS 64 - -#define OAM_MATRIX_COUNT 32 - -#define SET_SPRITE_TILE_RANGE(index, start, count) \ -{ \ - sSpriteTileRanges[index * 2] = start; \ - (sSpriteTileRanges + 1)[index * 2] = count; \ -} - -#define ALLOC_SPRITE_TILE(n) \ -{ \ - sSpriteTileAllocBitmap[(n) / 8] |= (1 << ((n) % 8)); \ -} - -#define FREE_SPRITE_TILE(n) \ -{ \ - sSpriteTileAllocBitmap[(n) / 8] &= ~(1 << ((n) % 8)); \ -} - -#define SPRITE_TILE_IS_ALLOCATED(n) ((sSpriteTileAllocBitmap[(n) / 8] >> ((n) % 8)) & 1) - - -struct SpriteCopyRequest -{ - const u8 *src; - u8 *dest; - u16 size; -}; - -struct OamDimensions -{ - s8 width; - s8 height; -}; - -static void UpdateOamCoords(void); -static void BuildSpritePriorities(void); -static void SortSprites(void); -static void CopyMatricesToOamBuffer(void); -static void AddSpritesToOamBuffer(void); -static u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority); -static void ResetOamMatrices(void); -static void ResetSprite(struct Sprite *sprite); -static s16 AllocSpriteTiles(u16 tileCount); -static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images); -static void ResetAllSprites(void); -static void BeginAnim(struct Sprite *sprite); -static void ContinueAnim(struct Sprite *sprite); -static void AnimCmd_frame(struct Sprite *sprite); -static void AnimCmd_end(struct Sprite *sprite); -static void AnimCmd_jump(struct Sprite *sprite); -static void AnimCmd_loop(struct Sprite *sprite); -static void BeginAnimLoop(struct Sprite *sprite); -static void ContinueAnimLoop(struct Sprite *sprite); -static void JumpToTopOfAnimLoop(struct Sprite *sprite); -static void BeginAffineAnim(struct Sprite *sprite); -static void ContinueAffineAnim(struct Sprite *sprite); -static void AffineAnimDelay(u8 matrixNum, struct Sprite *sprite); -static void AffineAnimCmd_loop(u8 matrixNum, struct Sprite *sprite); -static void BeginAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); -static void ContinueAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); -static void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); -static void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite); -static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite); -static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite); -static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix); -static u8 GetSpriteMatrixNum(struct Sprite *sprite); -static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); -static void AffineAnimStateRestartAnim(u8 matrixNum); -static void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum); -static void AffineAnimStateReset(u8 matrixNum); -static void ApplyAffineAnimFrameAbsolute(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); -static void DecrementAnimDelayCounter(struct Sprite *sprite); -static bool8 DecrementAffineAnimDelayCounter(struct Sprite *sprite, u8 matrixNum); -static void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); -static s16 ConvertScaleParam(s16 scale); -static void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd); -static void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd); -static u8 IndexOfSpriteTileTag(u16 tag); -static void AllocSpriteTileRange(u16 tag, u16 start, u16 count); -static void DoLoadSpritePalette(const u16 *src, u16 paletteOffset); -static void obj_update_pos2(struct Sprite* sprite, s32 a1, s32 a2); - -typedef void (*AnimFunc)(struct Sprite *); -typedef void (*AnimCmdFunc)(struct Sprite *); -typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *); - -#define DUMMY_OAM_DATA \ -{ \ - .y = 160, \ - .affineMode = 0, \ - .objMode = 0, \ - .mosaic = 0, \ - .bpp = 0, \ - .shape = SPRITE_SHAPE(8x8), \ - .x = 304, \ - .matrixNum = 0, \ - .size = SPRITE_SIZE(8x8), \ - .tileNum = 0, \ - .priority = 3, /* lowest priority */ \ - .paletteNum = 0, \ - .affineParam = 0 \ -} - -#define ANIM_END 0xFFFF -#define AFFINE_ANIM_END 0x7FFF - -// forward declarations -const union AnimCmd * const gDummySpriteAnimTable[]; -const union AffineAnimCmd * const gDummySpriteAffineAnimTable[]; -const struct SpriteTemplate gDummySpriteTemplate; - -// Unreferenced data. Also unreferenced in R/S. -static const u8 sUnknownData[24] = -{ - 0x01, 0x04, 0x10, 0x40, - 0x02, 0x04, 0x08, 0x20, - 0x02, 0x04, 0x08, 0x20, - 0x01, 0x04, 0x10, 0x40, - 0x02, 0x04, 0x08, 0x20, - 0x02, 0x04, 0x08, 0x20, -}; - -static const u8 sCenterToCornerVecTable[3][4][2] = -{ - { // square - { -4, -4 }, - { -8, -8 }, - { -16, -16 }, - { -32, -32 }, - }, - { // horizontal rectangle - { -8, -4 }, - { -16, -4 }, - { -16, -8 }, - { -32, -16 }, - }, - { // vertical rectangle - { -4, -8 }, - { -4, -16 }, - { -8, -16 }, - { -16, -32 }, - }, -}; - -static const struct Sprite sDummySprite = -{ - .oam = DUMMY_OAM_DATA, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .template = &gDummySpriteTemplate, - .subspriteTables = NULL, - .callback = SpriteCallbackDummy, - .pos1 = { 304, 160 }, - .pos2 = { 0, 0 }, - .centerToCornerVecX = 0, - .centerToCornerVecY = 0, - .animNum = 0, - .animCmdIndex = 0, - .animDelayCounter = 0, - .animPaused = 0, - .affineAnimPaused = 0, - .animLoopCounter = 0, - .data = {0, 0, 0, 0, 0, 0, 0}, - .inUse = 0, - .coordOffsetEnabled = 0, - .invisible = FALSE, - .flags_3 = 0, - .flags_4 = 0, - .flags_5 = 0, - .flags_6 = 0, - .flags_7 = 0, - .hFlip = 0, - .vFlip = 0, - .animBeginning = 0, - .affineAnimBeginning = 0, - .animEnded = 0, - .affineAnimEnded = 0, - .usingSheet = 0, - .flags_f = 0, - .sheetTileStart = 0, - .subspriteTableNum = 0, - .subspriteMode = 0, - .subpriority = 0xFF -}; - -const struct OamData gDummyOamData = DUMMY_OAM_DATA; - -static const union AnimCmd sDummyAnim = { ANIM_END }; - -const union AnimCmd * const gDummySpriteAnimTable[] = { &sDummyAnim }; - -static const union AffineAnimCmd sDummyAffineAnim = { AFFINE_ANIM_END }; - -const union AffineAnimCmd * const gDummySpriteAffineAnimTable[] = { &sDummyAffineAnim }; - -const struct SpriteTemplate gDummySpriteTemplate = -{ - .tileTag = 0, - .paletteTag = 0xFFFF, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy -}; - -static const AnimFunc sAnimFuncs[] = -{ - ContinueAnim, - BeginAnim, -}; - -static const AnimFunc sAffineAnimFuncs[] = -{ - ContinueAffineAnim, - BeginAffineAnim, -}; - -static const AnimCmdFunc sAnimCmdFuncs[] = -{ - AnimCmd_loop, - AnimCmd_jump, - AnimCmd_end, - AnimCmd_frame, -}; - -static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] = -{ - AffineAnimCmd_loop, - AffineAnimCmd_jump, - AffineAnimCmd_end, - AffineAnimCmd_frame, -}; - -static const s32 sUnknown_082EC6F4[3][4][2] = -{ - { - {8, 8}, - {0x10, 0x10}, - {0x20, 0x20}, - {0x40, 0x40}, - }, - { - {0x10, 8}, - {0x20, 8}, - {0x20, 0x10}, - {0x40, 0x20}, - }, - { - {8, 0x10}, - {8, 0x20}, - {0x10, 0x20}, - {0x20, 0x40}, - }, -}; - -static const struct OamDimensions sOamDimensions[3][4] = -{ - { // square - { 8, 8 }, - { 16, 16 }, - { 32, 32 }, - { 64, 64 }, - }, - { // horizontal rectangle - { 16, 8 }, - { 32, 8 }, - { 32, 16 }, - { 64, 32 }, - }, - { // vertical rectangle - { 8, 16 }, - { 8, 32 }, - { 16, 32 }, - { 32, 64 }, - }, -}; - -// iwram bss -static u16 sSpriteTileRangeTags[MAX_SPRITES]; -static u16 sSpriteTileRanges[MAX_SPRITES * 2]; -static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; -static u16 sSpritePaletteTags[16]; - -// iwram common -u32 gOamMatrixAllocBitmap; -u8 gReservedSpritePaletteCount; - -EWRAM_DATA struct Sprite gSprites[MAX_SPRITES + 1] = {0}; -EWRAM_DATA static u16 sSpritePriorities[MAX_SPRITES] = {0}; -EWRAM_DATA static u8 sSpriteOrder[MAX_SPRITES] = {0}; -EWRAM_DATA static bool8 sShouldProcessSpriteCopyRequests = 0; -EWRAM_DATA static u8 sSpriteCopyRequestCount = 0; -EWRAM_DATA static struct SpriteCopyRequest sSpriteCopyRequests[MAX_SPRITES] = {0}; -EWRAM_DATA u8 gOamLimit = 0; -EWRAM_DATA u16 gReservedSpriteTileCount = 0; -EWRAM_DATA static u8 sSpriteTileAllocBitmap[128] = {0}; -EWRAM_DATA s16 gSpriteCoordOffsetX = 0; -EWRAM_DATA s16 gSpriteCoordOffsetY = 0; -EWRAM_DATA struct OamMatrix gOamMatrices[OAM_MATRIX_COUNT] = {0}; -EWRAM_DATA bool8 gAffineAnimsDisabled = FALSE; - -void ResetSpriteData(void) -{ - ResetOamRange(0, 128); - ResetAllSprites(); - ClearSpriteCopyRequests(); - ResetAffineAnimData(); - FreeSpriteTileRanges(); - gOamLimit = 64; - gReservedSpriteTileCount = 0; - AllocSpriteTiles(0); - gSpriteCoordOffsetX = 0; - gSpriteCoordOffsetY = 0; -} - -void AnimateSprites(void) -{ - u8 i; - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - - if (sprite->inUse) - { - sprite->callback(sprite); - - if (sprite->inUse) - AnimateSprite(sprite); - } - } -} - -void BuildOamBuffer(void) -{ - u8 temp; - UpdateOamCoords(); - BuildSpritePriorities(); - SortSprites(); - temp = gMain.oamLoadDisabled; - gMain.oamLoadDisabled = TRUE; - AddSpritesToOamBuffer(); - CopyMatricesToOamBuffer(); - gMain.oamLoadDisabled = temp; - sShouldProcessSpriteCopyRequests = TRUE; -} - -void UpdateOamCoords(void) -{ - u8 i; - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - if (sprite->inUse && !sprite->invisible) - { - if (sprite->coordOffsetEnabled) - { - sprite->oam.x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; - sprite->oam.y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; - } - else - { - sprite->oam.x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; - sprite->oam.y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; - } - } - } -} - -void BuildSpritePriorities(void) -{ - u16 i; - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - u16 priority = sprite->subpriority | (sprite->oam.priority << 8); - sSpritePriorities[i] = priority; - } -} - -void SortSprites(void) -{ - u8 i; - for (i = 1; i < MAX_SPRITES; i++) - { - u8 j = i; - struct Sprite *sprite1 = &gSprites[sSpriteOrder[i - 1]]; - struct Sprite *sprite2 = &gSprites[sSpriteOrder[i]]; - u16 sprite1Priority = sSpritePriorities[sSpriteOrder[i - 1]]; - u16 sprite2Priority = sSpritePriorities[sSpriteOrder[i]]; - s16 sprite1Y = sprite1->oam.y; - s16 sprite2Y = sprite2->oam.y; - - if (sprite1Y >= DISPLAY_HEIGHT) - sprite1Y = sprite1Y - 256; - - if (sprite2Y >= DISPLAY_HEIGHT) - sprite2Y = sprite2Y - 256; - - if (sprite1->oam.affineMode == ST_OAM_AFFINE_DOUBLE - && sprite1->oam.size == 3) - { - u32 shape = sprite1->oam.shape; - if (shape == ST_OAM_SQUARE || shape == 2) - { - if (sprite1Y > 128) - sprite1Y = sprite1Y - 256; - } - } - - if (sprite2->oam.affineMode == ST_OAM_AFFINE_DOUBLE - && sprite2->oam.size == 3) - { - u32 shape = sprite2->oam.shape; - if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) - { - if (sprite2Y > 128) - sprite2Y = sprite2Y - 256; - } - } - - while (j > 0 - && ((sprite1Priority > sprite2Priority) - || (sprite1Priority == sprite2Priority && sprite1Y < sprite2Y))) - { - u8 temp = sSpriteOrder[j]; - sSpriteOrder[j] = sSpriteOrder[j - 1]; - sSpriteOrder[j - 1] = temp; - - // UB: If j equals 1, then j-- makes j equal 0. - // Then, sSpriteOrder[-1] gets accessed below. - // Although this doesn't result in a bug in the ROM, - // the behavior is undefined. - j--; - - sprite1 = &gSprites[sSpriteOrder[j - 1]]; - sprite2 = &gSprites[sSpriteOrder[j]]; - sprite1Priority = sSpritePriorities[sSpriteOrder[j - 1]]; - sprite2Priority = sSpritePriorities[sSpriteOrder[j]]; - sprite1Y = sprite1->oam.y; - sprite2Y = sprite2->oam.y; - - if (sprite1Y >= DISPLAY_HEIGHT) - sprite1Y = sprite1Y - 256; - - if (sprite2Y >= DISPLAY_HEIGHT) - sprite2Y = sprite2Y - 256; - - if (sprite1->oam.affineMode == ST_OAM_AFFINE_DOUBLE - && sprite1->oam.size == 3) - { - u32 shape = sprite1->oam.shape; - if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) - { - if (sprite1Y > 128) - sprite1Y = sprite1Y - 256; - } - } - - if (sprite2->oam.affineMode == ST_OAM_AFFINE_DOUBLE - && sprite2->oam.size == 3) - { - u32 shape = sprite2->oam.shape; - if (shape == ST_OAM_SQUARE || shape == ST_OAM_V_RECTANGLE) - { - if (sprite2Y > 128) - sprite2Y = sprite2Y - 256; - } - } - } - } -} - -void CopyMatricesToOamBuffer(void) -{ - u8 i; - for (i = 0; i < OAM_MATRIX_COUNT; i++) - { - u32 base = 4 * i; - gMain.oamBuffer[base + 0].affineParam = gOamMatrices[i].a; - gMain.oamBuffer[base + 1].affineParam = gOamMatrices[i].b; - gMain.oamBuffer[base + 2].affineParam = gOamMatrices[i].c; - gMain.oamBuffer[base + 3].affineParam = gOamMatrices[i].d; - } -} - -void AddSpritesToOamBuffer(void) -{ - u8 i = 0; - u8 oamIndex = 0; - - while (i < MAX_SPRITES) - { - struct Sprite *sprite = &gSprites[sSpriteOrder[i]]; - if (sprite->inUse && !sprite->invisible && AddSpriteToOamBuffer(sprite, &oamIndex)) - return; - i++; - } - - while (oamIndex < gOamLimit) - { - gMain.oamBuffer[oamIndex] = gDummyOamData; - oamIndex++; - } -} - -u8 CreateSprite(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - if (!gSprites[i].inUse) - return CreateSpriteAt(i, template, x, y, subpriority); - - return MAX_SPRITES; -} - -u8 CreateSpriteAtEnd(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) -{ - s16 i; - - for (i = MAX_SPRITES - 1; i > -1; i--) - if (!gSprites[i].inUse) - return CreateSpriteAt(i, template, x, y, subpriority); - - return MAX_SPRITES; -} - -u8 CreateInvisibleSprite(void (*callback)(struct Sprite *)) -{ - u8 index = CreateSprite(&gDummySpriteTemplate, 0, 0, 31); - - if (index == MAX_SPRITES) - { - return MAX_SPRITES; - } - else - { - gSprites[index].invisible = TRUE; - gSprites[index].callback = callback; - return index; - } -} - -u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) -{ - struct Sprite *sprite = &gSprites[index]; - - ResetSprite(sprite); - - sprite->inUse = TRUE; - sprite->animBeginning = TRUE; - sprite->affineAnimBeginning = TRUE; - sprite->usingSheet = TRUE; - - sprite->subpriority = subpriority; - sprite->oam = *template->oam; - sprite->anims = template->anims; - sprite->affineAnims = template->affineAnims; - sprite->template = template; - sprite->callback = template->callback; - sprite->pos1.x = x; - sprite->pos1.y = y; - - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - - if (template->tileTag == 0xFFFF) - { - s16 tileNum; - sprite->images = template->images; - tileNum = AllocSpriteTiles((u8)(sprite->images->size / TILE_SIZE_4BPP)); - if (tileNum == -1) - { - ResetSprite(sprite); - return MAX_SPRITES; - } - sprite->oam.tileNum = tileNum; - sprite->usingSheet = FALSE; - sprite->sheetTileStart = 0; - } - else - { - sprite->sheetTileStart = GetSpriteTileStartByTag(template->tileTag); - SetSpriteSheetFrameTileNum(sprite); - } - - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - InitSpriteAffineAnim(sprite); - - if (template->paletteTag != 0xFFFF) - sprite->oam.paletteNum = IndexOfSpritePaletteTag(template->paletteTag); - - return index; -} - -u8 CreateSpriteAndAnimate(const struct SpriteTemplate *template, s16 x, s16 y, u8 subpriority) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - { - struct Sprite *sprite = &gSprites[i]; - - if (!gSprites[i].inUse) - { - u8 index = CreateSpriteAt(i, template, x, y, subpriority); - - if (index == MAX_SPRITES) - return MAX_SPRITES; - - gSprites[i].callback(sprite); - - if (gSprites[i].inUse) - AnimateSprite(sprite); - - return index; - } - } - - return MAX_SPRITES; -} - -void DestroySprite(struct Sprite *sprite) -{ - if (sprite->inUse) - { - if (!sprite->usingSheet) - { - u16 i; - u16 tileEnd = (sprite->images->size / TILE_SIZE_4BPP) + sprite->oam.tileNum; - for (i = sprite->oam.tileNum; i < tileEnd; i++) - FREE_SPRITE_TILE(i); - } - ResetSprite(sprite); - } -} - -void ResetOamRange(u8 a, u8 b) -{ - u8 i; - - for (i = a; i < b; i++) - { - struct OamData *oamBuffer = gMain.oamBuffer; - oamBuffer[i] = *(struct OamData *)&gDummyOamData; - } -} - -void LoadOam(void) -{ - if (!gMain.oamLoadDisabled) - CpuCopy32(gMain.oamBuffer, (void *)OAM, sizeof(gMain.oamBuffer)); -} - -void ClearSpriteCopyRequests(void) -{ - u8 i; - - sShouldProcessSpriteCopyRequests = FALSE; - sSpriteCopyRequestCount = 0; - - for (i = 0; i < MAX_SPRITE_COPY_REQUESTS; i++) - { - sSpriteCopyRequests[i].src = 0; - sSpriteCopyRequests[i].dest = 0; - sSpriteCopyRequests[i].size = 0; - } -} - -void ResetOamMatrices(void) -{ - u8 i; - for (i = 0; i < OAM_MATRIX_COUNT; i++) - { - // set to identity matrix - gOamMatrices[i].a = 0x0100; - gOamMatrices[i].b = 0x0000; - gOamMatrices[i].c = 0x0000; - gOamMatrices[i].d = 0x0100; - } -} - -void SetOamMatrix(u8 matrixNum, u16 a, u16 b, u16 c, u16 d) -{ - gOamMatrices[matrixNum].a = a; - gOamMatrices[matrixNum].b = b; - gOamMatrices[matrixNum].c = c; - gOamMatrices[matrixNum].d = d; -} - -void ResetSprite(struct Sprite *sprite) -{ - *sprite = sDummySprite; -} - -void CalcCenterToCornerVec(struct Sprite *sprite, u8 shape, u8 size, u8 affineMode) -{ - u8 x = sCenterToCornerVecTable[shape][size][0]; - u8 y = sCenterToCornerVecTable[shape][size][1]; - - if (affineMode & ST_OAM_AFFINE_DOUBLE_MASK) - { - x *= 2; - y *= 2; - } - - sprite->centerToCornerVecX = x; - sprite->centerToCornerVecY = y; -} - -s16 AllocSpriteTiles(u16 tileCount) -{ - u16 i; - s16 start; - u16 numTilesFound; - - if (tileCount == 0) - { - // Free all unreserved tiles if the tile count is 0. - for (i = gReservedSpriteTileCount; i < TOTAL_OBJ_TILE_COUNT; i++) - FREE_SPRITE_TILE(i); - - return 0; - } - - i = gReservedSpriteTileCount; - - for (;;) - { - while (SPRITE_TILE_IS_ALLOCATED(i)) - { - i++; - - if (i == TOTAL_OBJ_TILE_COUNT) - return -1; - } - - start = i; - numTilesFound = 1; - - while (numTilesFound != tileCount) - { - i++; - - if (i == TOTAL_OBJ_TILE_COUNT) - return -1; - - if (!SPRITE_TILE_IS_ALLOCATED(i)) - numTilesFound++; - else - break; - } - - if (numTilesFound == tileCount) - break; - } - - for (i = start; i < tileCount + start; i++) - ALLOC_SPRITE_TILE(i); - - return start; -} - -u8 SpriteTileAllocBitmapOp(u16 bit, u8 op) -{ - u8 index = bit / 8; - u8 shift = bit % 8; - u8 val = bit % 8; - u8 retVal = 0; - - if (op == 0) - { - val = ~(1 << val); - sSpriteTileAllocBitmap[index] &= val; - } - else if (op == 1) - { - val = (1 << val); - sSpriteTileAllocBitmap[index] |= val; - } - else - { - retVal = 1 << shift; - retVal &= sSpriteTileAllocBitmap[index]; - } - - return retVal; -} - -void SpriteCallbackDummy(struct Sprite *sprite) -{ -} - -void ProcessSpriteCopyRequests(void) -{ - if (sShouldProcessSpriteCopyRequests) - { - u8 i = 0; - - while (sSpriteCopyRequestCount > 0) - { - CpuCopy16(sSpriteCopyRequests[i].src, sSpriteCopyRequests[i].dest, sSpriteCopyRequests[i].size); - sSpriteCopyRequestCount--; - i++; - } - - sShouldProcessSpriteCopyRequests = FALSE; - } -} - -void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images) -{ - if (sSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) - { - sSpriteCopyRequests[sSpriteCopyRequestCount].src = images[index].data; - sSpriteCopyRequests[sSpriteCopyRequestCount].dest = (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileNum; - sSpriteCopyRequests[sSpriteCopyRequestCount].size = images[index].size; - sSpriteCopyRequestCount++; - } -} - -void RequestSpriteCopy(const u8 *src, u8 *dest, u16 size) -{ - if (sSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) - { - sSpriteCopyRequests[sSpriteCopyRequestCount].src = src; - sSpriteCopyRequests[sSpriteCopyRequestCount].dest = dest; - sSpriteCopyRequests[sSpriteCopyRequestCount].size = size; - sSpriteCopyRequestCount++; - } -} - -void CopyFromSprites(u8 *dest) -{ - u32 i; - u8 *src = (u8 *)gSprites; - for (i = 0; i < sizeof(struct Sprite) * MAX_SPRITES; i++) - { - *dest = *src; - dest++; - src++; - } -} - -void CopyToSprites(u8 *src) -{ - u32 i; - u8 *dest = (u8 *)gSprites; - for (i = 0; i < sizeof(struct Sprite) * MAX_SPRITES; i++) - { - *dest = *src; - src++; - dest++; - } -} - -void ResetAllSprites(void) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - { - ResetSprite(&gSprites[i]); - sSpriteOrder[i] = i; - } - - ResetSprite(&gSprites[i]); -} - -void FreeSpriteTiles(struct Sprite *sprite) -{ - if (sprite->template->tileTag != 0xFFFF) - FreeSpriteTilesByTag(sprite->template->tileTag); -} - -void FreeSpritePalette(struct Sprite *sprite) -{ - FreeSpritePaletteByTag(sprite->template->paletteTag); -} - -void FreeSpriteOamMatrix(struct Sprite *sprite) -{ - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - { - FreeOamMatrix(sprite->oam.matrixNum); - sprite->oam.affineMode = ST_OAM_AFFINE_OFF; - } -} - -void DestroySpriteAndFreeResources(struct Sprite *sprite) -{ - FreeSpriteTiles(sprite); - FreeSpritePalette(sprite); - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); -} - -void AnimateSprite(struct Sprite *sprite) -{ - sAnimFuncs[sprite->animBeginning](sprite); - - if (!gAffineAnimsDisabled) - sAffineAnimFuncs[sprite->affineAnimBeginning](sprite); -} - -void BeginAnim(struct Sprite *sprite) -{ - s16 imageValue; - u8 duration; - u8 hFlip; - u8 vFlip; - - sprite->animCmdIndex = 0; - sprite->animEnded = FALSE; - sprite->animLoopCounter = 0; - imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - - if (imageValue != -1) - { - sprite->animBeginning = FALSE; - duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; - vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; - - if (duration) - duration--; - - sprite->animDelayCounter = duration; - - if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) - SetSpriteOamFlipBits(sprite, hFlip, vFlip); - - if (sprite->usingSheet) - sprite->oam.tileNum = sprite->sheetTileStart + imageValue; - else - RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); - } -} - -void ContinueAnim(struct Sprite *sprite) -{ - if (sprite->animDelayCounter) - { - u8 hFlip; - u8 vFlip; - DecrementAnimDelayCounter(sprite); - hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; - vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; - if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) - SetSpriteOamFlipBits(sprite, hFlip, vFlip); - } - else if (!sprite->animPaused) - { - s16 type; - s16 funcIndex; - sprite->animCmdIndex++; - type = sprite->anims[sprite->animNum][sprite->animCmdIndex].type; - funcIndex = 3; - if (type < 0) - funcIndex = type + 3; - sAnimCmdFuncs[funcIndex](sprite); - } -} - -void AnimCmd_frame(struct Sprite *sprite) -{ - s16 imageValue; - u8 duration; - u8 hFlip; - u8 vFlip; - - imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; - vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; - - if (duration) - duration--; - - sprite->animDelayCounter = duration; - - if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) - SetSpriteOamFlipBits(sprite, hFlip, vFlip); - - if (sprite->usingSheet) - sprite->oam.tileNum = sprite->sheetTileStart + imageValue; - else - RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); -} - -void AnimCmd_end(struct Sprite *sprite) -{ - sprite->animCmdIndex--; - sprite->animEnded = TRUE; -} - -void AnimCmd_jump(struct Sprite *sprite) -{ - s16 imageValue; - u8 duration; - u8 hFlip; - u8 vFlip; - - sprite->animCmdIndex = sprite->anims[sprite->animNum][sprite->animCmdIndex].jump.target; - - imageValue = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - duration = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - hFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.hFlip; - vFlip = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.vFlip; - - if (duration) - duration--; - - sprite->animDelayCounter = duration; - - if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) - SetSpriteOamFlipBits(sprite, hFlip, vFlip); - - if (sprite->usingSheet) - sprite->oam.tileNum = sprite->sheetTileStart + imageValue; - else - RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images); -} - -void AnimCmd_loop(struct Sprite *sprite) -{ - if (sprite->animLoopCounter) - ContinueAnimLoop(sprite); - else - BeginAnimLoop(sprite); -} - -void BeginAnimLoop(struct Sprite *sprite) -{ - sprite->animLoopCounter = sprite->anims[sprite->animNum][sprite->animCmdIndex].loop.count; - JumpToTopOfAnimLoop(sprite); - ContinueAnim(sprite); -} - -void ContinueAnimLoop(struct Sprite *sprite) -{ - sprite->animLoopCounter--; - JumpToTopOfAnimLoop(sprite); - ContinueAnim(sprite); -} - -void JumpToTopOfAnimLoop(struct Sprite *sprite) -{ - if (sprite->animLoopCounter) - { - sprite->animCmdIndex--; - - while (sprite->anims[sprite->animNum][sprite->animCmdIndex - 1].type != -3) - { - if (sprite->animCmdIndex == 0) - break; - sprite->animCmdIndex--; - } - - sprite->animCmdIndex--; - } -} - -void BeginAffineAnim(struct Sprite *sprite) -{ - if ((sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) && sprite->affineAnims[0][0].type != 32767) - { - struct AffineAnimFrameCmd frameCmd; - u8 matrixNum = GetSpriteMatrixNum(sprite); - AffineAnimStateRestartAnim(matrixNum); - GetAffineAnimFrame(matrixNum, sprite, &frameCmd); - sprite->affineAnimBeginning = FALSE; - sprite->affineAnimEnded = FALSE; - ApplyAffineAnimFrame(matrixNum, &frameCmd); - sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; - if (sprite->flags_f) - obj_update_pos2(sprite, sprite->data[6], sprite->data[7]); - } -} - -void ContinueAffineAnim(struct Sprite *sprite) -{ - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - { - u8 matrixNum = GetSpriteMatrixNum(sprite); - - if (sAffineAnimStates[matrixNum].delayCounter) - AffineAnimDelay(matrixNum, sprite); - else if (sprite->affineAnimPaused) - return; - else - { - s16 type; - s16 funcIndex; - sAffineAnimStates[matrixNum].animCmdIndex++; - type = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].type; - funcIndex = 3; - if (type >= 32765) - funcIndex = type - 32765; - sAffineAnimCmdFuncs[funcIndex](matrixNum, sprite); - } - if (sprite->flags_f) - obj_update_pos2(sprite, sprite->data[6], sprite->data[7]); - } -} - -void AffineAnimDelay(u8 matrixNum, struct Sprite *sprite) -{ - if (!DecrementAffineAnimDelayCounter(sprite, matrixNum)) - { - struct AffineAnimFrameCmd frameCmd; - GetAffineAnimFrame(matrixNum, sprite, &frameCmd); - ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &frameCmd); - } -} - -void AffineAnimCmd_loop(u8 matrixNum, struct Sprite *sprite) -{ - if (sAffineAnimStates[matrixNum].loopCounter) - ContinueAffineAnimLoop(matrixNum, sprite); - else - BeginAffineAnimLoop(matrixNum, sprite); -} - -void BeginAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) -{ - sAffineAnimStates[matrixNum].loopCounter = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].loop.count; - JumpToTopOfAffineAnimLoop(matrixNum, sprite); - ContinueAffineAnim(sprite); -} - -void ContinueAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) -{ - sAffineAnimStates[matrixNum].loopCounter--; - JumpToTopOfAffineAnimLoop(matrixNum, sprite); - ContinueAffineAnim(sprite); -} - -void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite) -{ - if (sAffineAnimStates[matrixNum].loopCounter) - { - sAffineAnimStates[matrixNum].animCmdIndex--; - - while (sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex - 1].type != 32765) - { - if (sAffineAnimStates[matrixNum].animCmdIndex == 0) - break; - sAffineAnimStates[matrixNum].animCmdIndex--; - } - - sAffineAnimStates[matrixNum].animCmdIndex--; - } -} - -void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite) -{ - struct AffineAnimFrameCmd frameCmd; - sAffineAnimStates[matrixNum].animCmdIndex = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].jump.target; - GetAffineAnimFrame(matrixNum, sprite, &frameCmd); - ApplyAffineAnimFrame(matrixNum, &frameCmd); - sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; -} - -void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite) -{ - struct AffineAnimFrameCmd dummyFrameCmd = {0}; - sprite->affineAnimEnded = TRUE; - sAffineAnimStates[matrixNum].animCmdIndex--; - ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &dummyFrameCmd); -} - -void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite) -{ - struct AffineAnimFrameCmd frameCmd; - GetAffineAnimFrame(matrixNum, sprite, &frameCmd); - ApplyAffineAnimFrame(matrixNum, &frameCmd); - sAffineAnimStates[matrixNum].delayCounter = frameCmd.duration; -} - -void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix) -{ - gOamMatrices[destMatrixIndex].a = srcMatrix->a; - gOamMatrices[destMatrixIndex].b = srcMatrix->b; - gOamMatrices[destMatrixIndex].c = srcMatrix->c; - gOamMatrices[destMatrixIndex].d = srcMatrix->d; -} - -u8 GetSpriteMatrixNum(struct Sprite *sprite) -{ - u8 matrixNum = 0; - if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) - matrixNum = sprite->oam.matrixNum; - return matrixNum; -} - -void sub_8007E18(struct Sprite* sprite, s16 a2, s16 a3) -{ - sprite->data[6] = a2; - sprite->data[7] = a3; - sprite->flags_f = 1; -} - -s32 sub_8007E28(s32 a0, s32 a1, s32 a2) -{ - s32 subResult, var1; - - subResult = a1 - a0; - if (subResult < 0) - var1 = -(subResult) >> 9; - else - var1 = -(subResult >> 9); - return a2 - ((u32)(a2 * a1) / (u32)(a0) + var1); -} - -void obj_update_pos2(struct Sprite *sprite, s32 a1, s32 a2) -{ - s32 var0, var1, var2; - - u32 matrixNum = sprite->oam.matrixNum; - if (a1 != 0x800) - { - var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][0]; - var1 = var0 << 8; - var2 = (var0 << 16) / gOamMatrices[matrixNum].a; - sprite->pos2.x = sub_8007E28(var1, var2, a1); - } - if (a2 != 0x800) - { - var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][1]; - var1 = var0 << 8; - var2 = (var0 << 16) / gOamMatrices[matrixNum].d; - sprite->pos2.y = sub_8007E28(var1, var2, a2); - } -} - -void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip) -{ - sprite->oam.matrixNum &= 0x7; - sprite->oam.matrixNum |= (((hFlip ^ sprite->hFlip) & 1) << 3); - sprite->oam.matrixNum |= (((vFlip ^ sprite->vFlip) & 1) << 4); -} - -void AffineAnimStateRestartAnim(u8 matrixNum) -{ - sAffineAnimStates[matrixNum].animCmdIndex = 0; - sAffineAnimStates[matrixNum].delayCounter = 0; - sAffineAnimStates[matrixNum].loopCounter = 0; -} - -void AffineAnimStateStartAnim(u8 matrixNum, u8 animNum) -{ - sAffineAnimStates[matrixNum].animNum = animNum; - sAffineAnimStates[matrixNum].animCmdIndex = 0; - sAffineAnimStates[matrixNum].delayCounter = 0; - sAffineAnimStates[matrixNum].loopCounter = 0; - sAffineAnimStates[matrixNum].xScale = 0x0100; - sAffineAnimStates[matrixNum].yScale = 0x0100; - sAffineAnimStates[matrixNum].rotation = 0; -} - -void AffineAnimStateReset(u8 matrixNum) -{ - sAffineAnimStates[matrixNum].animNum = 0; - sAffineAnimStates[matrixNum].animCmdIndex = 0; - sAffineAnimStates[matrixNum].delayCounter = 0; - sAffineAnimStates[matrixNum].loopCounter = 0; - sAffineAnimStates[matrixNum].xScale = 0x0100; - sAffineAnimStates[matrixNum].yScale = 0x0100; - sAffineAnimStates[matrixNum].rotation = 0; -} - -void ApplyAffineAnimFrameAbsolute(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) -{ - sAffineAnimStates[matrixNum].xScale = frameCmd->xScale; - sAffineAnimStates[matrixNum].yScale = frameCmd->yScale; - sAffineAnimStates[matrixNum].rotation = frameCmd->rotation << 8; -} - -void DecrementAnimDelayCounter(struct Sprite *sprite) -{ - if (!sprite->animPaused) - sprite->animDelayCounter--; -} - -bool8 DecrementAffineAnimDelayCounter(struct Sprite *sprite, u8 matrixNum) -{ - if (!sprite->affineAnimPaused) - --sAffineAnimStates[matrixNum].delayCounter; - return sprite->affineAnimPaused; -} - -void ApplyAffineAnimFrameRelativeAndUpdateMatrix(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) -{ - struct ObjAffineSrcData srcData; - struct OamMatrix matrix; - sAffineAnimStates[matrixNum].xScale += frameCmd->xScale; - sAffineAnimStates[matrixNum].yScale += frameCmd->yScale; - sAffineAnimStates[matrixNum].rotation = (sAffineAnimStates[matrixNum].rotation + (frameCmd->rotation << 8)) & ~0xFF; - srcData.xScale = ConvertScaleParam(sAffineAnimStates[matrixNum].xScale); - srcData.yScale = ConvertScaleParam(sAffineAnimStates[matrixNum].yScale); - srcData.rotation = sAffineAnimStates[matrixNum].rotation; - ObjAffineSet(&srcData, &matrix, 1, 2); - CopyOamMatrix(matrixNum, &matrix); -} - -s16 ConvertScaleParam(s16 scale) -{ - s32 val = 0x10000; - return val / scale; -} - -void GetAffineAnimFrame(u8 matrixNum, struct Sprite *sprite, struct AffineAnimFrameCmd *frameCmd) -{ - frameCmd->xScale = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.xScale; - frameCmd->yScale = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.yScale; - frameCmd->rotation = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.rotation; - frameCmd->duration = sprite->affineAnims[sAffineAnimStates[matrixNum].animNum][sAffineAnimStates[matrixNum].animCmdIndex].frame.duration; -} - -void ApplyAffineAnimFrame(u8 matrixNum, struct AffineAnimFrameCmd *frameCmd) -{ - struct AffineAnimFrameCmd dummyFrameCmd = {0}; - - if (frameCmd->duration) - { - frameCmd->duration--; - ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, frameCmd); - } - else - { - ApplyAffineAnimFrameAbsolute(matrixNum, frameCmd); - ApplyAffineAnimFrameRelativeAndUpdateMatrix(matrixNum, &dummyFrameCmd); - } -} - -void StartSpriteAnim(struct Sprite *sprite, u8 animNum) -{ - sprite->animNum = animNum; - sprite->animBeginning = TRUE; - sprite->animEnded = FALSE; -} - -void StartSpriteAnimIfDifferent(struct Sprite *sprite, u8 animNum) -{ - if (sprite->animNum != animNum) - StartSpriteAnim(sprite, animNum); -} - -void SeekSpriteAnim(struct Sprite *sprite, u8 animCmdIndex) -{ - u8 temp = sprite->animPaused; - sprite->animCmdIndex = animCmdIndex - 1; - sprite->animDelayCounter = 0; - sprite->animBeginning = FALSE; - sprite->animEnded = FALSE; - sprite->animPaused = FALSE; - ContinueAnim(sprite); - if (sprite->animDelayCounter) - sprite->animDelayCounter++; - sprite->animPaused = temp; -} - -void StartSpriteAffineAnim(struct Sprite *sprite, u8 animNum) -{ - u8 matrixNum = GetSpriteMatrixNum(sprite); - AffineAnimStateStartAnim(matrixNum, animNum); - sprite->affineAnimBeginning = TRUE; - sprite->affineAnimEnded = FALSE; -} - -void StartSpriteAffineAnimIfDifferent(struct Sprite *sprite, u8 animNum) -{ - u8 matrixNum = GetSpriteMatrixNum(sprite); - if (sAffineAnimStates[matrixNum].animNum != animNum) - StartSpriteAffineAnim(sprite, animNum); -} - -void ChangeSpriteAffineAnim(struct Sprite *sprite, u8 animNum) -{ - u8 matrixNum = GetSpriteMatrixNum(sprite); - sAffineAnimStates[matrixNum].animNum = animNum; - sprite->affineAnimBeginning = TRUE; - sprite->affineAnimEnded = FALSE; -} - -void ChangeSpriteAffineAnimIfDifferent(struct Sprite *sprite, u8 animNum) -{ - u8 matrixNum = GetSpriteMatrixNum(sprite); - if (sAffineAnimStates[matrixNum].animNum != animNum) - ChangeSpriteAffineAnim(sprite, animNum); -} - -void SetSpriteSheetFrameTileNum(struct Sprite *sprite) -{ - if (sprite->usingSheet) - { - s16 tileOffset = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - if (tileOffset < 0) - tileOffset = 0; - sprite->oam.tileNum = sprite->sheetTileStart + tileOffset; - } -} - -void ResetAffineAnimData(void) -{ - u8 i; - - gAffineAnimsDisabled = FALSE; - gOamMatrixAllocBitmap = 0; - - ResetOamMatrices(); - - for (i = 0; i < OAM_MATRIX_COUNT; i++) - AffineAnimStateReset(i); -} - -u8 AllocOamMatrix(void) -{ - u8 i = 0; - u32 bit = 1; - u32 bitmap = gOamMatrixAllocBitmap; - - while (i < OAM_MATRIX_COUNT) - { - if (!(bitmap & bit)) - { - gOamMatrixAllocBitmap |= bit; - return i; - } - - i++; - bit <<= 1; - } - - return 0xFF; -} - -void FreeOamMatrix(u8 matrixNum) -{ - u8 i = 0; - u32 bit = 1; - - while (i < matrixNum) - { - i++; - bit <<= 1; - } - - gOamMatrixAllocBitmap &= ~bit; - SetOamMatrix(matrixNum, 0x100, 0, 0, 0x100); -} - -void InitSpriteAffineAnim(struct Sprite *sprite) -{ - u8 matrixNum = AllocOamMatrix(); - if (matrixNum != 0xFF) - { - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - sprite->oam.matrixNum = matrixNum; - sprite->affineAnimBeginning = TRUE; - AffineAnimStateReset(matrixNum); - } -} - -void SetOamMatrixRotationScaling(u8 matrixNum, s16 xScale, s16 yScale, u16 rotation) -{ - struct ObjAffineSrcData srcData; - struct OamMatrix matrix; - srcData.xScale = ConvertScaleParam(xScale); - srcData.yScale = ConvertScaleParam(yScale); - srcData.rotation = rotation; - ObjAffineSet(&srcData, &matrix, 1, 2); - CopyOamMatrix(matrixNum, &matrix); -} - -u16 LoadSpriteSheet(const struct SpriteSheet *sheet) -{ - s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP); - - if (tileStart < 0) - { - return 0; - } - else - { - AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP); - CpuCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size); - return (u16)tileStart; - } -} - -void LoadSpriteSheets(const struct SpriteSheet *sheets) -{ - u8 i; - for (i = 0; sheets[i].data != NULL; i++) - LoadSpriteSheet(&sheets[i]); -} - -void FreeSpriteTilesByTag(u16 tag) -{ - u8 index = IndexOfSpriteTileTag(tag); - if (index != 0xFF) - { - u16 i; - u16 *rangeStarts; - u16 *rangeCounts; - u16 start; - u16 count; - rangeStarts = sSpriteTileRanges; - start = rangeStarts[index * 2]; - rangeCounts = sSpriteTileRanges + 1; - count = rangeCounts[index * 2]; - - for (i = start; i < start + count; i++) - FREE_SPRITE_TILE(i); - - sSpriteTileRangeTags[index] = 0xFFFF; - } -} - -void FreeSpriteTileRanges(void) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - { - sSpriteTileRangeTags[i] = 0xFFFF; - SET_SPRITE_TILE_RANGE(i, 0, 0); - } -} - -u16 GetSpriteTileStartByTag(u16 tag) -{ - u8 index = IndexOfSpriteTileTag(tag); - if (index == 0xFF) - return 0xFFFF; - return sSpriteTileRanges[index * 2]; -} - -u8 IndexOfSpriteTileTag(u16 tag) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - if (sSpriteTileRangeTags[i] == tag) - return i; - - return 0xFF; -} - -u16 GetSpriteTileTagByTileStart(u16 start) -{ - u8 i; - - for (i = 0; i < MAX_SPRITES; i++) - { - if (sSpriteTileRangeTags[i] != 0xFFFF && sSpriteTileRanges[i * 2] == start) - return sSpriteTileRangeTags[i]; - } - - return 0xFFFF; -} - -void AllocSpriteTileRange(u16 tag, u16 start, u16 count) -{ - u8 freeIndex = IndexOfSpriteTileTag(0xFFFF); - sSpriteTileRangeTags[freeIndex] = tag; - SET_SPRITE_TILE_RANGE(freeIndex, start, count); -} - -void FreeAllSpritePalettes(void) -{ - u8 i; - gReservedSpritePaletteCount = 0; - for (i = 0; i < 16; i++) - sSpritePaletteTags[i] = 0xFFFF; -} - -u8 LoadSpritePalette(const struct SpritePalette *palette) -{ - u8 index = IndexOfSpritePaletteTag(palette->tag); - - if (index != 0xFF) - return index; - - index = IndexOfSpritePaletteTag(0xFFFF); - - if (index == 0xFF) - { - return 0xFF; - } - else - { - sSpritePaletteTags[index] = palette->tag; - DoLoadSpritePalette(palette->data, index * 16); - return index; - } -} - -void LoadSpritePalettes(const struct SpritePalette *palettes) -{ - u8 i; - for (i = 0; palettes[i].data != NULL; i++) - if (LoadSpritePalette(&palettes[i]) == 0xFF) - break; -} - -void DoLoadSpritePalette(const u16 *src, u16 paletteOffset) -{ - LoadPalette(src, paletteOffset + 0x100, 32); -} - -u8 AllocSpritePalette(u16 tag) -{ - u8 index = IndexOfSpritePaletteTag(0xFFFF); - if (index == 0xFF) - { - return 0xFF; - } - else - { - sSpritePaletteTags[index] = tag; - return index; - } -} - -u8 IndexOfSpritePaletteTag(u16 tag) -{ - u8 i; - for (i = gReservedSpritePaletteCount; i < 16; i++) - if (sSpritePaletteTags[i] == tag) - return i; - - return 0xFF; -} - -u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum) -{ - return sSpritePaletteTags[paletteNum]; -} - -void FreeSpritePaletteByTag(u16 tag) -{ - u8 index = IndexOfSpritePaletteTag(tag); - if (index != 0xFF) - sSpritePaletteTags[index] = 0xFFFF; -} - -void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables) -{ - sprite->subspriteTables = subspriteTables; - sprite->subspriteTableNum = 0; - sprite->subspriteMode = SUBSPRITES_ON; -} - -bool8 AddSpriteToOamBuffer(struct Sprite *sprite, u8 *oamIndex) -{ - if (*oamIndex >= gOamLimit) - return 1; - - if (!sprite->subspriteTables || sprite->subspriteMode == SUBSPRITES_OFF) - { - gMain.oamBuffer[*oamIndex] = sprite->oam; - (*oamIndex)++; - return 0; - } - else - { - return AddSubspritesToOamBuffer(sprite, &gMain.oamBuffer[*oamIndex], oamIndex); - } -} - -bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u8 *oamIndex) -{ - const struct SubspriteTable *subspriteTable; - struct OamData *oam; - - if (*oamIndex >= gOamLimit) - return 1; - - subspriteTable = &sprite->subspriteTables[sprite->subspriteTableNum]; - oam = &sprite->oam; - - if (!subspriteTable || !subspriteTable->subsprites) - { - *destOam = *oam; - (*oamIndex)++; - return 0; - } - else - { - u16 tileNum; - u16 baseX; - u16 baseY; - u8 subspriteCount; - u8 hFlip; - u8 vFlip; - u8 i; - - tileNum = oam->tileNum; - subspriteCount = subspriteTable->subspriteCount; - hFlip = ((s32)oam->matrixNum >> 3) & 1; - vFlip = ((s32)oam->matrixNum >> 4) & 1; - baseX = oam->x - sprite->centerToCornerVecX; - baseY = oam->y - sprite->centerToCornerVecY; - - for (i = 0; i < subspriteCount; i++, (*oamIndex)++) - { - u16 x; - u16 y; - - if (*oamIndex >= gOamLimit) - return 1; - - x = subspriteTable->subsprites[i].x; - y = subspriteTable->subsprites[i].y; - - if (hFlip) - { - s8 width = sOamDimensions[subspriteTable->subsprites[i].shape][subspriteTable->subsprites[i].size].width; - s16 right = x; - right += width; - x = right; - x = ~x + 1; - } - - if (vFlip) - { - s8 height = sOamDimensions[subspriteTable->subsprites[i].shape][subspriteTable->subsprites[i].size].height; - s16 bottom = y; - bottom += height; - y = bottom; - y = ~y + 1; - } - - destOam[i] = *oam; - destOam[i].shape = subspriteTable->subsprites[i].shape; - destOam[i].size = subspriteTable->subsprites[i].size; - destOam[i].x = (s16)baseX + (s16)x; - destOam[i].y = baseY + y; - destOam[i].tileNum = tileNum + subspriteTable->subsprites[i].tileOffset; - - if (sprite->subspriteMode != SUBSPRITES_IGNORE_PRIORITY) - destOam[i].priority = subspriteTable->subsprites[i].priority; - } - } - - return 0; -} diff --git a/src/start_menu.c b/src/start_menu.c index fcde176ac..c24497d74 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -570,7 +570,7 @@ static bool8 HandleStartMenuInput(void) PlaySE(SE_SELECT); if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback) { - if (GetNationalPokedexCount(0) == 0) + if (GetNationalPokedexCount(FLAG_GET_SEEN) == 0) return FALSE; } diff --git a/src/string_util.c b/src/string_util.c deleted file mode 100644 index bce299057..000000000 --- a/src/string_util.c +++ /dev/null @@ -1,784 +0,0 @@ -#include "global.h" -#include "string_util.h" -#include "text.h" - -EWRAM_DATA u8 gStringVar1[0x100] = {0}; -EWRAM_DATA u8 gStringVar2[0x100] = {0}; -EWRAM_DATA u8 gStringVar3[0x100] = {0}; -EWRAM_DATA u8 gStringVar4[0x3E8] = {0}; -EWRAM_DATA static u8 sUnknownStringVar[16] = {0}; - -static const u8 sDigits[] = __("0123456789ABCDEF"); - -static const s32 sPowersOfTen[] = -{ - 1, - 10, - 100, - 1000, - 10000, - 100000, - 1000000, - 10000000, - 100000000, - 1000000000, -}; - -extern const u8 gExpandedPlaceholder_Empty[]; -extern const u8 gExpandedPlaceholder_Kun[]; -extern const u8 gExpandedPlaceholder_Chan[]; -extern const u8 gExpandedPlaceholder_Sapphire[]; -extern const u8 gExpandedPlaceholder_Ruby[]; -extern const u8 gExpandedPlaceholder_Emerald[]; -extern const u8 gExpandedPlaceholder_Aqua[]; -extern const u8 gExpandedPlaceholder_Magma[]; -extern const u8 gExpandedPlaceholder_Archie[]; -extern const u8 gExpandedPlaceholder_Maxie[]; -extern const u8 gExpandedPlaceholder_Kyogre[]; -extern const u8 gExpandedPlaceholder_Groudon[]; -extern const u8 gExpandedPlaceholder_Brendan[]; -extern const u8 gExpandedPlaceholder_May[]; - -u8 *StringCopy10(u8 *dest, const u8 *src) -{ - u8 i; - u32 limit = 10; - - for (i = 0; i < limit; i++) - { - dest[i] = src[i]; - - if (dest[i] == EOS) - return &dest[i]; - } - - dest[i] = EOS; - return &dest[i]; -} - -u8 *StringGetEnd10(u8 *str) -{ - u8 i; - u32 limit = 10; - - for (i = 0; i < limit; i++) - if (str[i] == EOS) - return &str[i]; - - str[i] = EOS; - return &str[i]; -} - -u8 *StringCopy7(u8 *dest, const u8 *src) -{ - s32 i; - s32 limit = 7; - - for (i = 0; i < limit; i++) - { - dest[i] = src[i]; - - if (dest[i] == EOS) - return &dest[i]; - } - - dest[i] = EOS; - return &dest[i]; -} - -u8 *StringCopy(u8 *dest, const u8 *src) -{ - while (*src != EOS) - { - *dest = *src; - dest++; - src++; - } - - *dest = EOS; - return dest; -} - -u8 *StringAppend(u8 *dest, const u8 *src) -{ - while (*dest != EOS) - dest++; - - return StringCopy(dest, src); -} - -u8 *StringCopyN(u8 *dest, const u8 *src, u8 n) -{ - u16 i; - - for (i = 0; i < n; i++) - dest[i] = src[i]; - - return &dest[n]; -} - -u8 *StringAppendN(u8 *dest, const u8 *src, u8 n) -{ - while (*dest != EOS) - dest++; - - return StringCopyN(dest, src, n); -} - -u16 StringLength(const u8 *str) -{ - u16 length = 0; - - while (str[length] != EOS) - length++; - - return length; -} - -s32 StringCompare(const u8 *str1, const u8 *str2) -{ - while (*str1 == *str2) - { - if (*str1 == EOS) - return 0; - str1++; - str2++; - } - - return *str1 - *str2; -} - -s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n) -{ - while (*str1 == *str2) - { - if (*str1 == EOS) - return 0; - str1++; - str2++; - if (--n == 0) - return 0; - } - - return *str1 - *str2; -} - -bool8 IsStringLengthAtLeast(const u8 *str, s32 n) -{ - u8 i; - - for (i = 0; i < n; i++) - if (str[i] && str[i] != EOS) - return TRUE; - - return FALSE; -} - -u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n) -{ - enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; - s32 powerOfTen; - s32 largestPowerOfTen = sPowersOfTen[n - 1]; - - state = WAITING_FOR_NONZERO_DIGIT; - - if (mode == STR_CONV_MODE_RIGHT_ALIGN) - state = WRITING_SPACES; - - if (mode == STR_CONV_MODE_LEADING_ZEROS) - state = WRITING_DIGITS; - - for (powerOfTen = largestPowerOfTen; powerOfTen > 0; powerOfTen /= 10) - { - u8 c; - u16 digit = value / powerOfTen; - s32 temp = value - (powerOfTen * digit); - - if (state == WRITING_DIGITS) - { - u8 *out = dest++; - - if (digit <= 9) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (digit != 0 || powerOfTen == 1) - { - u8 *out; - state = WRITING_DIGITS; - out = dest++; - - if (digit <= 9) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (state == WRITING_SPACES) - { - *dest++ = 0x77; - } - - value = temp; - } - - *dest = EOS; - return dest; -} - -u8 *ConvertUIntToDecimalStringN(u8 *dest, u32 value, enum StringConvertMode mode, u8 n) -{ - enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; - s32 powerOfTen; - s32 largestPowerOfTen = sPowersOfTen[n - 1]; - - state = WAITING_FOR_NONZERO_DIGIT; - - if (mode == STR_CONV_MODE_RIGHT_ALIGN) - state = WRITING_SPACES; - - if (mode == STR_CONV_MODE_LEADING_ZEROS) - state = WRITING_DIGITS; - - for (powerOfTen = largestPowerOfTen; powerOfTen > 0; powerOfTen /= 10) - { - u8 c; - u16 digit = value / powerOfTen; - u32 temp = value - (powerOfTen * digit); - - if (state == WRITING_DIGITS) - { - u8 *out = dest++; - - if (digit <= 9) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (digit != 0 || powerOfTen == 1) - { - u8 *out; - state = WRITING_DIGITS; - out = dest++; - - if (digit <= 9) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (state == WRITING_SPACES) - { - *dest++ = 0x77; - } - - value = temp; - } - - *dest = EOS; - return dest; -} - -u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n) -{ - enum { WAITING_FOR_NONZERO_DIGIT, WRITING_DIGITS, WRITING_SPACES } state; - u8 i; - s32 powerOfSixteen; - s32 largestPowerOfSixteen = 1; - - for (i = 1; i < n; i++) - largestPowerOfSixteen *= 16; - - state = WAITING_FOR_NONZERO_DIGIT; - - if (mode == STR_CONV_MODE_RIGHT_ALIGN) - state = WRITING_SPACES; - - if (mode == STR_CONV_MODE_LEADING_ZEROS) - state = WRITING_DIGITS; - - for (powerOfSixteen = largestPowerOfSixteen; powerOfSixteen > 0; powerOfSixteen /= 16) - { - u8 c; - u32 digit = value / powerOfSixteen; - s32 temp = value % powerOfSixteen; - - if (state == WRITING_DIGITS) - { - char *out = dest++; - - if (digit <= 0xF) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (digit != 0 || powerOfSixteen == 1) - { - char *out; - state = WRITING_DIGITS; - out = dest++; - - if (digit <= 0xF) - c = sDigits[digit]; - else - c = CHAR_QUESTION_MARK; - - *out = c; - } - else if (state == WRITING_SPACES) - { - *dest++ = 0x77; - } - - value = temp; - } - - *dest = EOS; - return dest; -} - -u8 *StringExpandPlaceholders(u8 *dest, const u8 *src) -{ - for (;;) - { - u8 c = *src++; - u8 placeholderId; - const u8 *expandedString; - - switch (c) - { - case PLACEHOLDER_BEGIN: - placeholderId = *src++; - expandedString = GetExpandedPlaceholder(placeholderId); - dest = StringExpandPlaceholders(dest, expandedString); - break; - case EXT_CTRL_CODE_BEGIN: - *dest++ = c; - c = *src++; - *dest++ = c; - - switch (c) - { - case 0x07: - case 0x09: - case 0x0F: - case 0x15: - case 0x16: - case 0x17: - case 0x18: - break; - case 0x04: - *dest++ = *src++; - case 0x0B: - *dest++ = *src++; - default: - *dest++ = *src++; - } - break; - case EOS: - *dest = EOS; - return dest; - case CHAR_PROMPT_SCROLL: - case CHAR_PROMPT_CLEAR: - case CHAR_NEWLINE: - default: - *dest++ = c; - } - } -} - -u8 *StringBraille(u8 *dest, const u8 *src) -{ - u8 setBrailleFont[] = { EXT_CTRL_CODE_BEGIN, 0x06, 0x06, EOS }; - u8 gotoLine2[] = { CHAR_NEWLINE, EXT_CTRL_CODE_BEGIN, 0x0E, 0x02, EOS }; - - dest = StringCopy(dest, setBrailleFont); - - for (;;) - { - u8 c = *src++; - - switch (c) - { - case EOS: - *dest = c; - return dest; - case CHAR_NEWLINE: - dest = StringCopy(dest, gotoLine2); - break; - default: - *dest++ = c; - *dest++ = c + 0x40; - break; - } - } -} - -static const u8 *ExpandPlaceholder_UnknownStringVar(void) -{ - return sUnknownStringVar; -} - -static const u8 *ExpandPlaceholder_PlayerName(void) -{ - return gSaveBlock2Ptr->playerName; -} - -static const u8 *ExpandPlaceholder_StringVar1(void) -{ - return gStringVar1; -} - -static const u8 *ExpandPlaceholder_StringVar2(void) -{ - return gStringVar2; -} - -static const u8 *ExpandPlaceholder_StringVar3(void) -{ - return gStringVar3; -} - -static const u8 *ExpandPlaceholder_KunChan(void) -{ - if (gSaveBlock2Ptr->playerGender == MALE) - return gExpandedPlaceholder_Kun; - else - return gExpandedPlaceholder_Chan; -} - -static const u8 *ExpandPlaceholder_RivalName(void) -{ - if (gSaveBlock2Ptr->playerGender == MALE) - return gExpandedPlaceholder_May; - else - return gExpandedPlaceholder_Brendan; -} - -static const u8 *ExpandPlaceholder_Version(void) -{ - return gExpandedPlaceholder_Emerald; -} - -static const u8 *ExpandPlaceholder_Aqua(void) -{ - return gExpandedPlaceholder_Aqua; -} - -static const u8 *ExpandPlaceholder_Magma(void) -{ - return gExpandedPlaceholder_Magma; -} - -static const u8 *ExpandPlaceholder_Archie(void) -{ - return gExpandedPlaceholder_Archie; -} - -static const u8 *ExpandPlaceholder_Maxie(void) -{ - return gExpandedPlaceholder_Maxie; -} - -static const u8 *ExpandPlaceholder_Kyogre(void) -{ - return gExpandedPlaceholder_Kyogre; -} - -static const u8 *ExpandPlaceholder_Groudon(void) -{ - return gExpandedPlaceholder_Groudon; -} - -const u8 *GetExpandedPlaceholder(u32 id) -{ - typedef const u8 *(*ExpandPlaceholderFunc)(void); - - static const ExpandPlaceholderFunc funcs[] = - { - [PLACEHOLDER_ID_UNKNOWN] = ExpandPlaceholder_UnknownStringVar, - [PLACEHOLDER_ID_PLAYER] = ExpandPlaceholder_PlayerName, - [PLACEHOLDER_ID_STRING_VAR_1] = ExpandPlaceholder_StringVar1, - [PLACEHOLDER_ID_STRING_VAR_2] = ExpandPlaceholder_StringVar2, - [PLACEHOLDER_ID_STRING_VAR_3] = ExpandPlaceholder_StringVar3, - [PLACEHOLDER_ID_KUN] = ExpandPlaceholder_KunChan, - [PLACEHOLDER_ID_RIVAL] = ExpandPlaceholder_RivalName, - [PLACEHOLDER_ID_VERSION] = ExpandPlaceholder_Version, - [PLACEHOLDER_ID_AQUA] = ExpandPlaceholder_Aqua, - [PLACEHOLDER_ID_MAGMA] = ExpandPlaceholder_Magma, - [PLACEHOLDER_ID_ARCHIE] = ExpandPlaceholder_Archie, - [PLACEHOLDER_ID_MAXIE] = ExpandPlaceholder_Maxie, - [PLACEHOLDER_ID_KYOGRE] = ExpandPlaceholder_Kyogre, - [PLACEHOLDER_ID_GROUDON] = ExpandPlaceholder_Groudon, - }; - - if (id >= ARRAY_COUNT(funcs)) - return gExpandedPlaceholder_Empty; - else - return funcs[id](); -} - -u8 *StringFill(u8 *dest, u8 c, u16 n) -{ - u16 i; - - for (i = 0; i < n; i++) - *dest++ = c; - - *dest = EOS; - return dest; -} - -u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n) -{ - while (*src != EOS) - { - *dest++ = *src++; - - if (n) - n--; - } - - n--; - - while (n != (u16)-1) - { - *dest++ = c; - n--; - } - - *dest = EOS; - return dest; -} - -u8 *StringFillWithTerminator(u8 *dest, u16 n) -{ - return StringFill(dest, EOS, n); -} - -u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n) -{ - u32 i; - - for (i = n - 1; i != (u32)-1; i--) - { - if (*src == EOS) - { - break; - } - else - { - *dest++ = *src++; - if (*(src - 1) == CHAR_SPECIAL_F9) - *dest++ = *src++; - } - } - - *dest = EOS; - return dest; -} - -u32 StringLength_Multibyte(const u8 *str) -{ - u32 length = 0; - - while (*str != EOS) - { - if (*str == CHAR_SPECIAL_F9) - str++; - str++; - length++; - } - - return length; -} - -u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color) -{ - *dest = EXT_CTRL_CODE_BEGIN; - dest++; - - switch (colorType) - { - case 0: - *dest = 1; - dest++; - break; - case 1: - *dest = 3; - dest++; - break; - case 2: - *dest = 2; - dest++; - break; - } - - *dest = color; - dest++; - *dest = EOS; - return dest; -} - -bool32 IsStringJapanese(u8 *str) -{ - while (*str != EOS) - { - if (*str <= 0xA0) - if (*str != CHAR_SPACE) - return TRUE; - str++; - } - - return FALSE; -} - -bool32 sub_800924C(u8 *str, s32 n) -{ - s32 i; - - for (i = 0; *str != EOS && i < n; i++) - { - if (*str <= 0xA0) - if (*str != CHAR_SPACE) - return TRUE; - str++; - } - - return FALSE; -} - -u8 GetExtCtrlCodeLength(u8 code) -{ - static const u8 lengths[] = - { - 1, - 2, - 2, - 2, - 4, - 2, - 2, - 1, - 2, - 1, - 1, - 3, - 2, - 2, - 2, - 1, - 3, - 2, - 2, - 2, - 2, - 1, - 1, - 1, - 1, - }; - - u8 length = 0; - if (code < ARRAY_COUNT(lengths)) - length = lengths[code]; - return length; -} - -static const u8 *SkipExtCtrlCode(const u8 *s) -{ - while (*s == EXT_CTRL_CODE_BEGIN) - { - s++; - s += GetExtCtrlCodeLength(*s); - } - - return s; -} - -s32 StringCompareWithoutExtCtrlCodes(const u8 *str1, const u8 *str2) -{ - s32 retVal = 0; - - while (1) - { - str1 = SkipExtCtrlCode(str1); - str2 = SkipExtCtrlCode(str2); - - if (*str1 > *str2) - break; - - if (*str1 < *str2) - { - retVal = -1; - if (*str2 == EOS) - retVal = 1; - } - - if (*str1 == EOS) - return retVal; - - str1++; - str2++; - } - - retVal = 1; - - if (*str1 == EOS) - retVal = -1; - - return retVal; -} - -void ConvertInternationalString(u8 *s, u8 language) -{ - if (language == LANGUAGE_JAPANESE) - { - u8 i; - - StripExtCtrlCodes(s); - i = StringLength(s); - s[i++] = EXT_CTRL_CODE_BEGIN; - s[i++] = 22; - s[i++] = EOS; - - i--; - - while (i != (u8)-1) - { - s[i + 2] = s[i]; - i--; - } - - s[0] = EXT_CTRL_CODE_BEGIN; - s[1] = 21; - } -} - -void StripExtCtrlCodes(u8 *str) -{ - u16 srcIndex = 0; - u16 destIndex = 0; - while (str[srcIndex] != EOS) - { - if (str[srcIndex] == EXT_CTRL_CODE_BEGIN) - { - srcIndex++; - srcIndex += GetExtCtrlCodeLength(str[srcIndex]); - } - else - { - str[destIndex++] = str[srcIndex++]; - } - } - str[destIndex] = EOS; -} diff --git a/src/strings.c b/src/strings.c index ed702958e..ef63b52c4 100644 --- a/src/strings.c +++ b/src/strings.c @@ -388,7 +388,7 @@ const u8 gText_PCMailboxFull[] = _("Your PC's MAILBOX is full.{PAUSE_UNTIL_PRESS const u8 gText_MailMessageWillBeLost[] = _("If the MAIL is removed, the\nmessage will be lost. Okay?"); const u8 gText_RemoveMailBeforeItem[] = _("MAIL must be removed before\nholding an item.{PAUSE_UNTIL_PRESS}"); const u8 gText_PkmnWasGivenItem[] = _("{STR_VAR_1} was given the\n{STR_VAR_2} to hold.{PAUSE_UNTIL_PRESS}"); -const u8 gText_SwitchPkmnItem[] = _("{STR_VAR_1} is already holding\none {STR_VAR_2}.\pWould you like to switch the\ntwo items?"); +const u8 gText_PkmnAlreadyHoldingItemSwitch[] = _("{STR_VAR_1} is already holding\none {STR_VAR_2}.\pWould you like to switch the\ntwo items?"); const u8 gText_PkmnNotHolding[] = _("{STR_VAR_1} isn't holding\nanything.{PAUSE_UNTIL_PRESS}"); const u8 gText_ReceivedItemFromPkmn[] = _("Received the {STR_VAR_2}\nfrom {STR_VAR_1}.{PAUSE_UNTIL_PRESS}"); const u8 gText_MailTakenFromPkmn[] = _("MAIL was taken from the\nPOKéMON.{PAUSE_UNTIL_PRESS}"); @@ -471,7 +471,7 @@ const u8 gText_CancelChallenge[] = _("Cancel the challenge?"); const u8 gText_EscapeFromHere[] = _("Want to escape from here and return\nto {STR_VAR_1}?"); const u8 gText_ReturnToHealingSpot[] = _("Want to return to the healing spot\nused last in {STR_VAR_1}?"); const u8 gText_PauseUntilPress[] = _("{PAUSE_UNTIL_PRESS}"); -const u8 gJPText_PutVar1IntoSpinner[] = _("{STR_VAR_1}を ぐるぐるこうかんに\nだして よろしいですか?"); +const u8 gJPText_AreYouSureYouWantToSpinTradeMon[] = _("{STR_VAR_1}を ぐるぐるこうかんに\nだして よろしいですか?"); ALIGNED(4) const u8 gText_OnlyPkmnForBattle[] = _("That's your only\nPOKéMON for battle."); ALIGNED(4) const u8 gText_PkmnCantBeTradedNow[] = _("That POKéMON can't be traded\nnow."); ALIGNED(4) const u8 gText_EggCantBeTradedNow[] = _("An EGG can't be traded now."); diff --git a/src/text.c b/src/text.c deleted file mode 100644 index 7e4fa7104..000000000 --- a/src/text.c +++ /dev/null @@ -1,2540 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "main.h" -#include "m4a.h" -#include "palette.h" -#include "sound.h" -#include "constants/songs.h" -#include "string_util.h" -#include "window.h" -#include "text.h" -#include "blit.h" -#include "menu.h" -#include "dynamic_placeholder_text_util.h" - -EWRAM_DATA struct TextPrinter gTempTextPrinter = {0}; -EWRAM_DATA struct TextPrinter gTextPrinters[NUM_TEXT_PRINTERS] = {0}; - -static u16 gFontHalfRowLookupTable[0x51]; -static u16 gLastTextBgColor; -static u16 gLastTextFgColor; -static u16 gLastTextShadowColor; - -const struct FontInfo *gFonts; -u8 gUnknown_03002F84; -struct Struct_03002F90 gUnknown_03002F90; -TextFlags gTextFlags; - -const u8 gFontHalfRowOffsets[] = -{ - 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, - 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09, - 0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12, - 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, - 0x1B, 0x1C, 0x1D, 0x1B, 0x1E, 0x1F, 0x20, 0x1E, 0x21, 0x22, 0x23, 0x21, 0x1B, 0x1C, 0x1D, 0x1B, - 0x24, 0x25, 0x26, 0x24, 0x27, 0x28, 0x29, 0x27, 0x2A, 0x2B, 0x2C, 0x2A, 0x24, 0x25, 0x26, 0x24, - 0x2D, 0x2E, 0x2F, 0x2D, 0x30, 0x31, 0x32, 0x30, 0x33, 0x34, 0x35, 0x33, 0x2D, 0x2E, 0x2F, 0x2D, - 0x1B, 0x1C, 0x1D, 0x1B, 0x1E, 0x1F, 0x20, 0x1E, 0x21, 0x22, 0x23, 0x21, 0x1B, 0x1C, 0x1D, 0x1B, - 0x36, 0x37, 0x38, 0x36, 0x39, 0x3A, 0x3B, 0x39, 0x3C, 0x3D, 0x3E, 0x3C, 0x36, 0x37, 0x38, 0x36, - 0x3F, 0x40, 0x41, 0x3F, 0x42, 0x43, 0x44, 0x42, 0x45, 0x46, 0x47, 0x45, 0x3F, 0x40, 0x41, 0x3F, - 0x48, 0x49, 0x4A, 0x48, 0x4B, 0x4C, 0x4D, 0x4B, 0x4E, 0x4F, 0x50, 0x4E, 0x48, 0x49, 0x4A, 0x48, - 0x36, 0x37, 0x38, 0x36, 0x39, 0x3A, 0x3B, 0x39, 0x3C, 0x3D, 0x3E, 0x3C, 0x36, 0x37, 0x38, 0x36, - 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00, - 0x09, 0x0A, 0x0B, 0x09, 0x0C, 0x0D, 0x0E, 0x0C, 0x0F, 0x10, 0x11, 0x0F, 0x09, 0x0A, 0x0B, 0x09, - 0x12, 0x13, 0x14, 0x12, 0x15, 0x16, 0x17, 0x15, 0x18, 0x19, 0x1A, 0x18, 0x12, 0x13, 0x14, 0x12, - 0x00, 0x01, 0x02, 0x00, 0x03, 0x04, 0x05, 0x03, 0x06, 0x07, 0x08, 0x06, 0x00, 0x01, 0x02, 0x00 -}; - -const u8 gDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow.4bpp"); -const u8 gDarkDownArrowTiles[] = INCBIN_U8("data/graphics/fonts/down_arrow_RS.4bpp"); -const u8 gUnusedFRLGBlankedDownArrow[] = INCBIN_U8("data/graphics/fonts/unused_frlg_blanked_down_arrow.4bpp"); -const u8 gUnusedFRLGDownArrow[] = INCBIN_U8("data/graphics/fonts/unused_frlg_down_arrow.4bpp"); -const u8 gDownArrowYCoords[] = { 0x0, 0x1, 0x2, 0x1 }; -const u8 gWindowVerticalScrollSpeeds[] = { 0x1, 0x2, 0x4, 0x0 }; - -const struct GlyphWidthFunc gGlyphWidthFuncs[] = -{ - { 0x0, GetGlyphWidthFont0 }, - { 0x1, GetGlyphWidthFont1 }, - { 0x2, GetGlyphWidthFont2 }, - { 0x3, GetGlyphWidthFont2 }, - { 0x4, GetGlyphWidthFont2 }, - { 0x5, GetGlyphWidthFont2 }, - { 0x6, GetGlyphWidthFont6 }, - { 0x7, GetGlyphWidthFont7 }, - { 0x8, GetGlyphWidthFont8 } -}; - -const struct KeypadIcon gKeypadIcons[] = -{ - { 0x0, 0x8, 0xC }, - { 0x1, 0x8, 0xC }, - { 0x2, 0x10, 0xC }, - { 0x4, 0x10, 0xC }, - { 0x6, 0x18, 0xC }, - { 0x9, 0x18, 0xC }, - { 0xC, 0x8, 0xC }, - { 0xD, 0x8, 0xC }, - { 0xE, 0x8, 0xC }, - { 0xF, 0x8, 0xC }, - { 0x20, 0x8, 0xC }, - { 0x21, 0x8, 0xC }, - { 0x22, 0x8, 0xC } -}; - -const u8 gKeypadIconTiles[] = INCBIN_U8("data/graphics/fonts/keypad_icons.4bpp"); - -const struct FontInfo gFontInfos[] = -{ - { Font0Func, 0x5, 0xC, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font1Func, 0x6, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font2Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font3Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font4Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font5Func, 0x6, 0xE, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font6Func, 0x8, 0x10, 0x0, 0x8, 0x0, 0x2, 0x1, 0x3 }, - { Font7Func, 0x5, 0x10, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { Font8Func, 0x5, 0x8, 0x0, 0x0, 0x0, 0x2, 0x1, 0x3 }, - { NULL, 0x8, 0x8, 0x0, 0x0, 0x0, 0x1, 0x2, 0xF } -}; - -const u8 gMenuCursorDimensions[][2] = -{ - { 0x8, 0xC }, - { 0x8, 0xF }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0xE }, - { 0x8, 0x10 }, - { 0x8, 0xF }, - { 0x8, 0x8 }, - { 0x0, 0x0 } -}; - -const u16 gFont9JapaneseGlyphs[] = INCBIN_U16("data/graphics/fonts/font9.hwjpnfont"); - -extern const u16 gFont8LatinGlyphs[]; -extern const u8 gFont8LatinGlyphWidths[]; -extern const u16 gFont0LatinGlyphs[]; -extern const u8 gFont0LatinGlyphWidths[]; -extern const u16 gFont7LatinGlyphs[]; -extern const u8 gFont7LatinGlyphWidths[]; -extern const u16 gFont2LatinGlyphs[]; -extern const u8 gFont2LatinGlyphWidths[]; -extern const u16 gFont1LatinGlyphs[]; -extern const u8 gFont1LatinGlyphWidths[]; -extern const u16 gFont0JapaneseGlyphs[]; -extern const u16 gFont1JapaneseGlyphs[]; -extern const u16 gFont2JapaneseGlyphs[]; -extern const u8 gFont2JapaneseGlyphWidths[]; - -void SetFontsPointer(const struct FontInfo *fonts) -{ - gFonts = fonts; -} - -void DeactivateAllTextPrinters(void) -{ - int printer; - for (printer = 0; printer < NUM_TEXT_PRINTERS; ++printer) - gTextPrinters[printer].active = 0; -} - -u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) -{ - struct TextPrinterTemplate printerTemplate; - - printerTemplate.currentChar = str; - printerTemplate.windowId = windowId; - printerTemplate.fontId = fontId; - printerTemplate.x = x; - printerTemplate.y = y; - printerTemplate.currentX = x; - printerTemplate.currentY = y; - printerTemplate.letterSpacing = gFonts[fontId].letterSpacing; - printerTemplate.lineSpacing = gFonts[fontId].lineSpacing; - printerTemplate.unk = gFonts[fontId].unk; - printerTemplate.fgColor = gFonts[fontId].fgColor; - printerTemplate.bgColor = gFonts[fontId].bgColor; - printerTemplate.shadowColor = gFonts[fontId].shadowColor; - return AddTextPrinter(&printerTemplate, speed, callback); -} - -bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, void (*callback)(struct TextPrinterTemplate *, u16)) -{ - int i; - u16 j; - u8 *ptr; - - if (!gFonts) - return FALSE; - - gTempTextPrinter.active = 1; - gTempTextPrinter.state = 0; - gTempTextPrinter.textSpeed = speed; - gTempTextPrinter.delayCounter = 0; - gTempTextPrinter.scrollDistance = 0; - - for (i = 0; i < 7; i++) - { - gTempTextPrinter.subUnion.fields[i] = 0; - } - - gTempTextPrinter.printerTemplate = *printerTemplate; - gTempTextPrinter.callback = callback; - gTempTextPrinter.minLetterSpacing = 0; - gTempTextPrinter.japanese = 0; - - GenerateFontHalfRowLookupTable(printerTemplate->fgColor, printerTemplate->bgColor, printerTemplate->shadowColor); - if (speed != TEXT_SPEED_FF && speed != 0x0) - { - --gTempTextPrinter.textSpeed; - gTextPrinters[printerTemplate->windowId] = gTempTextPrinter; - } - else - { - gTempTextPrinter.textSpeed = 0; - for (j = 0; j < 0x400; ++j) - { - if (RenderFont(&gTempTextPrinter) == 1) - break; - } - - if (speed != TEXT_SPEED_FF) - CopyWindowToVram(gTempTextPrinter.printerTemplate.windowId, 2); - gTextPrinters[printerTemplate->windowId].active = 0; - } - gUnknown_03002F84 = 0; - return TRUE; -} - -void RunTextPrinters(void) -{ - int i; - - if (gUnknown_03002F84 == 0) - { - for (i = 0; i < 0x20; ++i) - { - if (gTextPrinters[i].active) - { - u16 temp = RenderFont(&gTextPrinters[i]); - switch (temp) - { - case 0: - CopyWindowToVram(gTextPrinters[i].printerTemplate.windowId, 2); - case 3: - if (gTextPrinters[i].callback != 0) - gTextPrinters[i].callback(&gTextPrinters[i].printerTemplate, temp); - break; - case 1: - gTextPrinters[i].active = 0; - break; - } - } - } - } -} - -bool16 IsTextPrinterActive(u8 id) -{ - return gTextPrinters[id].active; -} - -u32 RenderFont(struct TextPrinter *textPrinter) -{ - u32 ret; - while (TRUE) - { - ret = gFonts[textPrinter->printerTemplate.fontId].fontFunction(textPrinter); - if (ret != 2) - return ret; - } -} - -void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor) -{ - u32 fg12, bg12, shadow12; - u32 temp; - - u16 *current = gFontHalfRowLookupTable; - - gLastTextBgColor = bgColor; - gLastTextFgColor = fgColor; - gLastTextShadowColor = shadowColor; - - bg12 = bgColor << 12; - fg12 = fgColor << 12; - shadow12 = shadowColor << 12; - - temp = (bgColor << 8) | (bgColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (bgColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (bgColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (bgColor << 8) | (fgColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (fgColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (fgColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (bgColor << 8) | (shadowColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (shadowColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (shadowColor << 4) | bgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (bgColor << 8) | (bgColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (bgColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (bgColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (bgColor << 8) | (fgColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (fgColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (fgColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (bgColor << 8) | (shadowColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (shadowColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (shadowColor << 4) | fgColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (bgColor << 8) | (bgColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (bgColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (bgColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (bgColor << 8) | (fgColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (fgColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (fgColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (bgColor << 8) | (shadowColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (fgColor << 8) | (shadowColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; - - temp = (shadowColor << 8) | (shadowColor << 4) | shadowColor; - *(current++) = (bg12) | temp; - *(current++) = (fg12) | temp; - *(current++) = (shadow12) | temp; -} - -void SaveTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor) -{ - *bgColor = gLastTextBgColor; - *fgColor = gLastTextFgColor; - *shadowColor = gLastTextShadowColor; -} - -void RestoreTextColors(u8 *fgColor, u8 *bgColor, u8 *shadowColor) -{ - GenerateFontHalfRowLookupTable(*fgColor, *bgColor, *shadowColor); -} - -void DecompressGlyphTile(const void *src_, void *dest_) -{ - u32 temp; - const u16 *src = src_; - u32 *dest = dest_; - - temp = *(src++); - *(dest)++ = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); - - temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); - - temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); - - temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); - - temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); - - temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); - - temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); - - temp = *(src++); - *(dest++) = ((gFontHalfRowLookupTable[gFontHalfRowOffsets[temp & 0xFF]]) << 16) | (gFontHalfRowLookupTable[gFontHalfRowOffsets[temp >> 8]]); -} - -u8 GetLastTextColor(u8 colorType) -{ - switch (colorType) - { - case 0: - return gLastTextFgColor; - case 2: - return gLastTextBgColor; - case 1: - return gLastTextShadowColor; - default: - return 0; - } -} - -#ifdef NONMATCHING - -#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ -{ \ - u32 i, j, *ptr, toY, fromX, toX, r5, toOrr, bits; \ - u8 *dst; \ - \ - j = fromX_; \ - i = fromY_; \ - ptr = unk; \ - toX = toX_; \ - toY = toY_; \ - fromX = fromX_; \ - \ - for (; i < toY; i++) \ - { \ - r5 = *(ptr++); \ - for (j = fromX; j < toX; j++) \ - { \ - toOrr = r5 & 0xF; \ - if (toOrr) \ - { \ - dst = windowTiles + ((j / 8) * 32) + ((j & 7) / 2) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ - bits = ((j & 1) << 2); \ - *dst = ((toOrr << bits) | (*dst & (0xF0 >> bits))); \ - } \ - r5 >>= 4; \ - } \ - } \ -} - -void CopyGlyphToWindow(struct TextPrinter *textPrinter) -{ - struct Window *win; - struct WindowTemplate *winTempl; - struct Struct_03002F90 *unkStruct; - u32 currX, widthOffset, currY; - s32 r4, r0; - u8 *windowTiles; - - win = &gWindows[textPrinter->printerTemplate.windowId]; - winTempl = &win->window; - - r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX; - if (r4 > gUnknown_03002F90.unk80) - r4 = gUnknown_03002F90.unk80; - - r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY; - if (r0 > gUnknown_03002F90.unk81) - r0 = gUnknown_03002F90.unk81; - - currX = textPrinter->printerTemplate.currentX; - currY = textPrinter->printerTemplate.currentY; - unkStruct = &gUnknown_03002F90; - windowTiles = win->tileData; - widthOffset = winTempl->width * 32; - - if (r4 <= 8) - { - if (r0 <= 8) - { - GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0); - } - else - { - u32 temp; - GLYPH_COPY(currY, currY + 8, currX, currX + r4, unkStruct->unk0); - - temp = currY + 8; - GLYPH_COPY(temp, (temp - 8) + r0, currX, currX + r4, unkStruct->unk40); - } - } - else - { - if (r0 <= 8) - { - u32 temp; - GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0); - - temp = currX + 8; - GLYPH_COPY(currY, currY + r0, temp, (temp - 8) + r4, unkStruct->unk20); - } - else - { - u32 temp; - GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0); - - temp = currX + 8; - GLYPH_COPY(currY, currY + 8, temp, temp - 8 + r4, unkStruct->unk20); - - temp = currY + 8; - GLYPH_COPY(temp, temp - 8 + r0, currX, currX + 8, unkStruct->unk40); - { - u32 tempX, tempY; - tempX = currX + 8; - tempY = currY + 8; - GLYPH_COPY(tempY, tempY - 8 + r0, tempX, tempX - 8 + r4, unkStruct->unk60); - } - } - } -} -#else -NAKED -void CopyGlyphToWindow(struct TextPrinter *x) -{ - asm("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, #0x8C\n\ - add r3, r0, #0\n\ - ldrb r1, [r3, #0x4]\n\ - lsl r0, r1, #1\n\ - add r0, r1\n\ - lsl r0, #2\n\ - ldr r1, =gWindows\n\ - add r1, r0, r1\n\ - add r2, r1, #0\n\ - ldrb r7, [r1, #0x3]\n\ - lsl r0, r7, #3\n\ - ldrb r6, [r3, #0x8]\n\ - sub r4, r0, r6\n\ - ldr r5, =gUnknown_03002F90\n\ - add r0, r5, #0\n\ - add r0, #0x80\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - ble _08004DD2\n\ - add r4, r0, #0\n\ -_08004DD2:\n\ - ldrb r0, [r1, #0x4]\n\ - lsl r0, #3\n\ - ldrb r3, [r3, #0x9]\n\ - sub r0, r3\n\ - add r1, r5, #0\n\ - add r1, #0x81\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - ble _08004DE6\n\ - add r0, r1, #0\n\ -_08004DE6:\n\ - str r6, [sp]\n\ - mov r8, r3\n\ - add r3, r5, #0\n\ - ldr r2, [r2, #0x8]\n\ - mov r9, r2\n\ - lsl r1, r7, #5\n\ - str r1, [sp, #0x4]\n\ - cmp r4, #0x8\n\ - ble _08004DFA\n\ - b _08004F94\n\ -_08004DFA:\n\ - cmp r0, #0x8\n\ - bgt _08004E84\n\ - mov r1, r8\n\ - str r3, [sp, #0x8]\n\ - add r2, r6, #0\n\ - add r2, r4\n\ - mov r8, r2\n\ - add r0, r1, r0\n\ - str r0, [sp, #0xC]\n\ - str r6, [sp, #0x10]\n\ - cmp r1, r0\n\ - bcc _08004E14\n\ - b _080052AA\n\ -_08004E14:\n\ - ldr r3, [sp, #0x8]\n\ - ldm r3!, {r5}\n\ - str r3, [sp, #0x8]\n\ - ldr r4, [sp, #0x10]\n\ - add r0, r1, #0x1\n\ - mov r10, r0\n\ - cmp r4, r8\n\ - bcs _08004E72\n\ - mov r2, #0x7\n\ - mov r12, r2\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, r12\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08004E38:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _08004E6A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004E6A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08004E38\n\ -_08004E72:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0xC]\n\ - cmp r1, r2\n\ - bcc _08004E14\n\ - b _080052AA\n\ - .pool\n\ -_08004E84:\n\ - mov r1, r8\n\ - str r3, [sp, #0x14]\n\ - ldr r3, [sp]\n\ - add r3, r4\n\ - mov r12, r3\n\ - add r2, r1, #0\n\ - add r2, #0x8\n\ - str r2, [sp, #0x18]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x1C]\n\ - mov r2, r12\n\ - str r2, [sp, #0x74]\n\ - ldr r3, [sp, #0x18]\n\ - str r3, [sp, #0x88]\n\ - sub r0, #0x8\n\ - str r0, [sp, #0x80]\n\ - cmp r1, r3\n\ - bcs _08004F0E\n\ -_08004EA8:\n\ - ldr r0, [sp, #0x14]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x14]\n\ - ldr r4, [sp, #0x1C]\n\ - add r2, r1, #0x1\n\ - mov r8, r2\n\ - cmp r4, r12\n\ - bcs _08004F06\n\ - mov r3, #0x7\n\ - mov r10, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r10\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_08004ECC:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _08004EFE\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r10\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004EFE:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _08004ECC\n\ -_08004F06:\n\ - mov r1, r8\n\ - ldr r2, [sp, #0x18]\n\ - cmp r1, r2\n\ - bcc _08004EA8\n\ -_08004F0E:\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x40\n\ - str r3, [sp, #0x20]\n\ - ldr r0, [sp, #0x74]\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x24]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x28]\n\ - cmp r1, r2\n\ - bcc _08004F28\n\ - b _080052AA\n\ -_08004F28:\n\ - ldr r0, [sp, #0x20]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x20]\n\ - ldr r4, [sp, #0x28]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r8\n\ - bcs _08004F86\n\ - mov r3, #0x7\n\ - mov r12, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_08004F4C:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _08004F7E\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_08004F7E:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08004F4C\n\ -_08004F86:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x24]\n\ - cmp r1, r2\n\ - bcc _08004F28\n\ - b _080052AA\n\ - .pool\n\ -_08004F94:\n\ - cmp r0, #0x8\n\ - ble _08004F9A\n\ - b _080050A4\n\ -_08004F9A:\n\ - mov r1, r8\n\ - str r3, [sp, #0x2C]\n\ - ldr r3, [sp]\n\ - add r3, #0x8\n\ - mov r12, r3\n\ - add r0, r8\n\ - str r0, [sp, #0x30]\n\ - ldr r0, [sp]\n\ - str r0, [sp, #0x34]\n\ - ldr r2, [sp, #0x30]\n\ - str r2, [sp, #0x78]\n\ - str r3, [sp, #0x84]\n\ - sub r4, #0x8\n\ - str r4, [sp, #0x7C]\n\ - cmp r8, r2\n\ - bcs _0800501C\n\ -_08004FBA:\n\ - ldr r0, [sp, #0x2C]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x2C]\n\ - ldr r4, [sp, #0x34]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r12\n\ - bcs _08005014\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, #0x7\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08004FDA:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _0800500C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, #0x7\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800500C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _08004FDA\n\ -_08005014:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x30]\n\ - cmp r1, r2\n\ - bcc _08004FBA\n\ -_0800501C:\n\ - mov r1, r8\n\ - ldr r3, =gUnknown_03002F90 + 0x20\n\ - str r3, [sp, #0x38]\n\ - ldr r0, [sp, #0x84]\n\ - ldr r2, [sp, #0x7C]\n\ - add r0, r2\n\ - mov r8, r0\n\ - ldr r3, [sp, #0x78]\n\ - str r3, [sp, #0x3C]\n\ - ldr r0, [sp, #0x84]\n\ - str r0, [sp, #0x40]\n\ - cmp r1, r3\n\ - bcc _08005038\n\ - b _080052AA\n\ -_08005038:\n\ - ldr r2, [sp, #0x38]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x38]\n\ - ldr r4, [sp, #0x40]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r8\n\ - bcs _08005096\n\ - mov r0, #0x7\n\ - mov r12, r0\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_0800505C:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800508E\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800508E:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _0800505C\n\ -_08005096:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x3C]\n\ - cmp r1, r2\n\ - bcc _08005038\n\ - b _080052AA\n\ - .pool\n\ -_080050A4:\n\ - mov r1, r8\n\ - str r5, [sp, #0x44]\n\ - ldr r3, [sp]\n\ - add r3, #0x8\n\ - mov r12, r3\n\ - mov r2, r8\n\ - add r2, #0x8\n\ - str r2, [sp, #0x48]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x4C]\n\ - str r2, [sp, #0x88]\n\ - sub r0, #0x8\n\ - str r0, [sp, #0x80]\n\ - mov r0, r12\n\ - str r0, [sp, #0x84]\n\ - sub r4, #0x8\n\ - str r4, [sp, #0x7C]\n\ - cmp r8, r2\n\ - bcs _0800512C\n\ -_080050CA:\n\ - ldr r2, [sp, #0x44]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x44]\n\ - ldr r4, [sp, #0x4C]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r12\n\ - bcs _08005124\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, #0x7\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_080050EA:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800511C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, #0x7\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800511C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r12\n\ - bcc _080050EA\n\ -_08005124:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x48]\n\ - cmp r1, r2\n\ - bcc _080050CA\n\ -_0800512C:\n\ - mov r1, r8\n\ - ldr r3, =gUnknown_03002F90 + 0x20\n\ - str r3, [sp, #0x50]\n\ - ldr r0, [sp, #0x84]\n\ - ldr r2, [sp, #0x7C]\n\ - add r0, r2\n\ - mov r8, r0\n\ - ldr r3, [sp, #0x88]\n\ - str r3, [sp, #0x54]\n\ - ldr r0, [sp, #0x84]\n\ - str r0, [sp, #0x58]\n\ - cmp r1, r3\n\ - bcs _080051AC\n\ -_08005146:\n\ - ldr r2, [sp, #0x50]\n\ - ldm r2!, {r5}\n\ - str r2, [sp, #0x50]\n\ - ldr r4, [sp, #0x58]\n\ - add r3, r1, #0x1\n\ - mov r10, r3\n\ - cmp r4, r8\n\ - bcs _080051A4\n\ - mov r0, #0x7\n\ - mov r12, r0\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_0800516A:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800519C\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800519C:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _0800516A\n\ -_080051A4:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x54]\n\ - cmp r1, r2\n\ - bcc _08005146\n\ -_080051AC:\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x40\n\ - str r3, [sp, #0x5C]\n\ - ldr r0, [sp, #0x84]\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x60]\n\ - ldr r3, [sp]\n\ - str r3, [sp, #0x64]\n\ - cmp r1, r2\n\ - bcs _0800522A\n\ -_080051C4:\n\ - ldr r0, [sp, #0x5C]\n\ - ldm r0!, {r5}\n\ - str r0, [sp, #0x5C]\n\ - ldr r4, [sp, #0x64]\n\ - add r2, r1, #0x1\n\ - mov r10, r2\n\ - cmp r4, r8\n\ - bcs _08005222\n\ - mov r3, #0x7\n\ - mov r12, r3\n\ - lsr r0, r1, #3\n\ - ldr r3, [sp, #0x4]\n\ - add r2, r0, #0\n\ - mul r2, r3\n\ - add r7, r2, #0\n\ - mov r0, r12\n\ - and r1, r0\n\ - lsl r6, r1, #2\n\ -_080051E8:\n\ - add r3, r5, #0\n\ - mov r1, #0xF\n\ - and r3, r1\n\ - cmp r3, #0\n\ - beq _0800521A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800521A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _080051E8\n\ -_08005222:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x60]\n\ - cmp r1, r2\n\ - bcc _080051C4\n\ -_0800522A:\n\ - ldr r4, [sp, #0x84]\n\ - ldr r1, [sp, #0x88]\n\ - ldr r3, =gUnknown_03002F90 + 0x60\n\ - str r3, [sp, #0x68]\n\ - ldr r0, [sp, #0x7C]\n\ - add r0, r4\n\ - mov r8, r0\n\ - ldr r2, [sp, #0x80]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x6C]\n\ - str r4, [sp, #0x70]\n\ - cmp r1, r2\n\ - bcs _080052AA\n\ -_08005244:\n\ - ldr r3, [sp, #0x68]\n\ - ldm r3!, {r5}\n\ - str r3, [sp, #0x68]\n\ - ldr r4, [sp, #0x70]\n\ - add r0, r1, #0x1\n\ - mov r10, r0\n\ - cmp r4, r8\n\ - bcs _080052A2\n\ - mov r2, #0x7\n\ - mov r12, r2\n\ - lsr r0, r1, #3\n\ - ldr r2, [sp, #0x4]\n\ - add r3, r0, #0\n\ - mul r3, r2\n\ - add r7, r3, #0\n\ - mov r3, r12\n\ - and r1, r3\n\ - lsl r6, r1, #2\n\ -_08005268:\n\ - add r3, r5, #0\n\ - mov r0, #0xF\n\ - and r3, r0\n\ - cmp r3, #0\n\ - beq _0800529A\n\ - lsr r2, r4, #3\n\ - lsl r2, #5\n\ - add r2, r9\n\ - add r0, r4, #0\n\ - mov r1, r12\n\ - and r0, r1\n\ - lsr r0, #1\n\ - add r2, r0\n\ - add r2, r7\n\ - add r2, r6\n\ - mov r1, #0x1\n\ - and r1, r4\n\ - lsl r1, #2\n\ - lsl r3, r1\n\ - mov r0, #0xF0\n\ - asr r0, r1\n\ - ldrb r1, [r2]\n\ - and r0, r1\n\ - orr r3, r0\n\ - strb r3, [r2]\n\ -_0800529A:\n\ - lsr r5, #4\n\ - add r4, #0x1\n\ - cmp r4, r8\n\ - bcc _08005268\n\ -_080052A2:\n\ - mov r1, r10\n\ - ldr r2, [sp, #0x6C]\n\ - cmp r1, r2\n\ - bcc _08005244\n\ -_080052AA:\n\ - add sp, #0x8C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); -} -#endif // NONMATCHING - -void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) -{ - struct Window *window; - struct Bitmap pixels_data; - struct Struct_03002F90 *gUnk; - u8* glyphHeight; - - if (gLastTextBgColor != 0) - { - window = &gWindows[textPrinter->printerTemplate.windowId]; - pixels_data.pixels = window->tileData; - pixels_data.width = window->window.width << 3; - pixels_data.height = window->window.height << 3; - - gUnk = &gUnknown_03002F90; - glyphHeight = &gUnk->unk81; - - FillBitmapRect4Bit( - &pixels_data, - textPrinter->printerTemplate.currentX, - textPrinter->printerTemplate.currentY, - width, - *glyphHeight, - gLastTextBgColor); - } -} - -u16 Font0Func(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->hasGlyphIdBeenSet == FALSE) - { - textPrinter->subUnion.sub.glyphId = 0; - subStruct->hasGlyphIdBeenSet = TRUE; - } - return RenderText(textPrinter); -} - -u16 Font1Func(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->hasGlyphIdBeenSet == FALSE) - { - textPrinter->subUnion.sub.glyphId = 1; - subStruct->hasGlyphIdBeenSet = TRUE; - } - return RenderText(textPrinter); -} - -u16 Font2Func(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->hasGlyphIdBeenSet == FALSE) - { - textPrinter->subUnion.sub.glyphId = 2; - subStruct->hasGlyphIdBeenSet = TRUE; - } - return RenderText(textPrinter); -} - -u16 Font3Func(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->hasGlyphIdBeenSet == FALSE) - { - textPrinter->subUnion.sub.glyphId = 3; - subStruct->hasGlyphIdBeenSet = TRUE; - } - return RenderText(textPrinter); -} - -u16 Font4Func(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->hasGlyphIdBeenSet == FALSE) - { - textPrinter->subUnion.sub.glyphId = 4; - subStruct->hasGlyphIdBeenSet = TRUE; - } - return RenderText(textPrinter); -} - -u16 Font5Func(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->hasGlyphIdBeenSet == FALSE) - { - textPrinter->subUnion.sub.glyphId = 5; - subStruct->hasGlyphIdBeenSet = TRUE; - } - return RenderText(textPrinter); -} - -u16 Font7Func(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->hasGlyphIdBeenSet == FALSE) - { - textPrinter->subUnion.sub.glyphId = 7; - subStruct->hasGlyphIdBeenSet = TRUE; - } - return RenderText(textPrinter); -} - -u16 Font8Func(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->hasGlyphIdBeenSet == FALSE) - { - textPrinter->subUnion.sub.glyphId = 8; - subStruct->hasGlyphIdBeenSet = TRUE; - } - return RenderText(textPrinter); -} - -void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (gTextFlags.autoScroll == 1) - subStruct->autoScrollDelay = 0; - else - { - subStruct->downArrowYPosIdx = 0; - subStruct->downArrowDelay = 0; - } -} - -void TextPrinterDrawDownArrow(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - const u8 *arrowTiles; - - if (gTextFlags.autoScroll == 0) - { - if (subStruct->downArrowDelay != 0) - { - subStruct->downArrowDelay = ((*(u32*)&textPrinter->subUnion.sub) << 19 >> 27) - 1; // convoluted way of getting downArrowDelay, necessary to match - } - else - { - FillWindowPixelRect( - textPrinter->printerTemplate.windowId, - textPrinter->printerTemplate.bgColor << 4 | textPrinter->printerTemplate.bgColor, - textPrinter->printerTemplate.currentX, - textPrinter->printerTemplate.currentY, - 0x8, - 0x10); - - switch (gTextFlags.useAlternateDownArrow) - { - case 0: - default: - arrowTiles = gDownArrowTiles; - break; - case 1: - arrowTiles = gDarkDownArrowTiles; - break; - } - - BlitBitmapRectToWindow( - textPrinter->printerTemplate.windowId, - arrowTiles, - 0, - gDownArrowYCoords[*(u32*)subStruct << 17 >> 30], // subStruct->downArrowYPosIdx but again, stupidly retrieved - 0x8, - 0x10, - textPrinter->printerTemplate.currentX, - textPrinter->printerTemplate.currentY, - 0x8, - 0x10); - CopyWindowToVram(textPrinter->printerTemplate.windowId, 0x2); - - subStruct->downArrowDelay = 0x8; - subStruct->downArrowYPosIdx = (*(u32*)subStruct << 17 >> 30) + 1; - } - } -} - -void TextPrinterClearDownArrow(struct TextPrinter *textPrinter) -{ - FillWindowPixelRect( - textPrinter->printerTemplate.windowId, - textPrinter->printerTemplate.bgColor << 4 | textPrinter->printerTemplate.bgColor, - textPrinter->printerTemplate.currentX, - textPrinter->printerTemplate.currentY, - 0x8, - 0x10); - CopyWindowToVram(textPrinter->printerTemplate.windowId, 0x2); -} - -bool8 TextPrinterWaitAutoMode(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - - if (subStruct->autoScrollDelay == 49) - { - return TRUE; - } - else - { - ++subStruct->autoScrollDelay; - return FALSE; - } -} - -bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter) -{ - bool8 result = FALSE; - if (gTextFlags.autoScroll != 0) - { - result = TextPrinterWaitAutoMode(textPrinter); - } - else - { - TextPrinterDrawDownArrow(textPrinter); - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - result = TRUE; - PlaySE(SE_SELECT); - } - } - return result; -} - -bool16 TextPrinterWait(struct TextPrinter *textPrinter) -{ - bool16 result = FALSE; - if (gTextFlags.autoScroll != 0) - { - result = TextPrinterWaitAutoMode(textPrinter); - } - else - { - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - result = TRUE; - PlaySE(SE_SELECT); - } - } - return result; -} - -void DrawDownArrow(u8 windowId, u16 x, u16 y, u8 bgColor, bool8 drawArrow, u8 *counter, u8 *yCoordIndex) -{ - const u8 *arrowTiles; - - if (*counter != 0) - { - --*counter; - } - else - { - FillWindowPixelRect(windowId, (bgColor << 4) | bgColor, x, y, 0x8, 0x10); - if (drawArrow == 0) - { - switch (gTextFlags.useAlternateDownArrow) - { - case 0: - default: - arrowTiles = gDownArrowTiles; - break; - case 1: - arrowTiles = gDarkDownArrowTiles; - break; - } - - BlitBitmapRectToWindow( - windowId, - arrowTiles, - 0, - gDownArrowYCoords[*yCoordIndex & 3], - 0x8, - 0x10, - x, - y - 2, - 0x8, - 0x10); - CopyWindowToVram(windowId, 0x2); - *counter = 8; - ++*yCoordIndex; - } - } -} - -u16 RenderText(struct TextPrinter *textPrinter) -{ - struct TextPrinterSubStruct *subStruct = &textPrinter->subUnion.sub; - u16 currChar; - s32 width; - s32 widthHelper; - - switch (textPrinter->state) - { - case 0: - if ((gMain.heldKeys & (A_BUTTON | B_BUTTON)) && subStruct->hasPrintBeenSpedUp) - textPrinter->delayCounter = 0; - - if (textPrinter->delayCounter && textPrinter->textSpeed) - { - textPrinter->delayCounter--; - if (gTextFlags.canABSpeedUpPrint && (gMain.newKeys & (A_BUTTON | B_BUTTON))) - { - subStruct->hasPrintBeenSpedUp = TRUE; - textPrinter->delayCounter = 0; - } - return 3; - } - - if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED) && gTextFlags.autoScroll) - textPrinter->delayCounter = 3; - else - textPrinter->delayCounter = textPrinter->textSpeed; - - currChar = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - - switch (currChar) - { - case CHAR_NEWLINE: - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentY += (gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing); - return 2; - case PLACEHOLDER_BEGIN: - textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_BEGIN: - currChar = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - switch (currChar) - { - case 1: - textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case 2: - textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case 3: - textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case 4: - textPrinter->printerTemplate.fgColor = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - textPrinter->printerTemplate.bgColor = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - textPrinter->printerTemplate.shadowColor = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - GenerateFontHalfRowLookupTable(textPrinter->printerTemplate.fgColor, textPrinter->printerTemplate.bgColor, textPrinter->printerTemplate.shadowColor); - return 2; - case 5: - textPrinter->printerTemplate.currentChar++; - return 2; - case 6: - subStruct->glyphId = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_UNKNOWN_7: - return 2; - case 8: - textPrinter->delayCounter = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - textPrinter->state = 6; - return 2; - case 9: - textPrinter->state = 1; - if (gTextFlags.autoScroll) - subStruct->autoScrollDelay = 0; - return 3; - case 10: - textPrinter->state = 5; - return 3; - case 11: - currChar = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - currChar |= *textPrinter->printerTemplate.currentChar << 8; - textPrinter->printerTemplate.currentChar++; - PlayBGM(currChar); - return 2; - case 12: - currChar = *textPrinter->printerTemplate.currentChar | 0x100; - textPrinter->printerTemplate.currentChar++; - break; - case 16: - currChar = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - currChar |= (*textPrinter->printerTemplate.currentChar << 8); - textPrinter->printerTemplate.currentChar++; - PlaySE(currChar); - return 2; - case 13: - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x + *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - return 2; - case 14: - textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y + *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - return 2; - case 15: - FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; - return 2; - case 23: - m4aMPlayStop(&gMPlayInfo_BGM); - return 2; - case 24: - m4aMPlayContinue(&gMPlayInfo_BGM); - return 2; - case EXT_CTRL_CODE_CLEAR: - width = *textPrinter->printerTemplate.currentChar; - textPrinter->printerTemplate.currentChar++; - if (width > 0) - { - ClearTextSpan(textPrinter, width); - textPrinter->printerTemplate.currentX += width; - return 0; - } - return 2; - case 18: - textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_CLEAR_TO: - { - widthHelper = *textPrinter->printerTemplate.currentChar; - widthHelper += textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentChar++; - width = widthHelper - textPrinter->printerTemplate.currentX; - if (width > 0) - { - ClearTextSpan(textPrinter, width); - textPrinter->printerTemplate.currentX += width; - return 0; - } - } - return 2; - case EXT_CTRL_CODE_MIN_LETTER_SPACING: - textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; - return 2; - case EXT_CTRL_CODE_JPN: - textPrinter->japanese = 1; - return 2; - case EXT_CTRL_CODE_ENG: - textPrinter->japanese = 0; - return 2; - } - break; - case CHAR_PROMPT_CLEAR: - textPrinter->state = 2; - TextPrinterInitDownArrowCounters(textPrinter); - return 3; - case CHAR_PROMPT_SCROLL: - textPrinter->state = 3; - TextPrinterInitDownArrowCounters(textPrinter); - return 3; - case CHAR_SPECIAL_F9: - currChar = *textPrinter->printerTemplate.currentChar | 0x100; - textPrinter->printerTemplate.currentChar++; - break; - case CHAR_SPECIAL_F8: - currChar = *textPrinter->printerTemplate.currentChar++; - gUnknown_03002F90.unk80 = DrawKeypadIcon(textPrinter->printerTemplate.windowId, currChar, textPrinter->printerTemplate.currentX, textPrinter->printerTemplate.currentY); - textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing; - return 0; - case EOS: - return 1; - } - - switch (subStruct->glyphId) - { - case 0: - DecompressGlyphFont0(currChar, textPrinter->japanese); - break; - case 1: - DecompressGlyphFont1(currChar, textPrinter->japanese); - break; - case 2: - case 3: - case 4: - case 5: - DecompressGlyphFont2(currChar, textPrinter->japanese); - break; - case 7: - DecompressGlyphFont7(currChar, textPrinter->japanese); - break; - case 8: - DecompressGlyphFont8(currChar, textPrinter->japanese); - break; - case 6: - break; - } - - CopyGlyphToWindow(textPrinter); - - if (textPrinter->minLetterSpacing) - { - textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80; - width = textPrinter->minLetterSpacing - gUnknown_03002F90.unk80; - if (width > 0) - { - ClearTextSpan(textPrinter, width); - textPrinter->printerTemplate.currentX += width; - } - } - else - { - if (textPrinter->japanese) - textPrinter->printerTemplate.currentX += (gUnknown_03002F90.unk80 + textPrinter->printerTemplate.letterSpacing); - else - textPrinter->printerTemplate.currentX += gUnknown_03002F90.unk80; - } - return 0; - case 1: - if (TextPrinterWait(textPrinter)) - textPrinter->state = 0; - return 3; - case 2: - if (TextPrinterWaitWithDownArrow(textPrinter)) - { - FillWindowPixelBuffer(textPrinter->printerTemplate.windowId, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->printerTemplate.currentY = textPrinter->printerTemplate.y; - textPrinter->state = 0; - } - return 3; - case 3: - if (TextPrinterWaitWithDownArrow(textPrinter)) - { - TextPrinterClearDownArrow(textPrinter); - textPrinter->scrollDistance = gFonts[textPrinter->printerTemplate.fontId].maxLetterHeight + textPrinter->printerTemplate.lineSpacing; - textPrinter->printerTemplate.currentX = textPrinter->printerTemplate.x; - textPrinter->state = 4; - } - return 3; - case 4: - if (textPrinter->scrollDistance) - { - int scrollSpeed = GetPlayerTextSpeed(); - int speed = gWindowVerticalScrollSpeeds[scrollSpeed]; - if (textPrinter->scrollDistance < speed) - { - ScrollWindow(textPrinter->printerTemplate.windowId, 0, textPrinter->scrollDistance, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->scrollDistance = 0; - } - else - { - ScrollWindow(textPrinter->printerTemplate.windowId, 0, speed, PIXEL_FILL(textPrinter->printerTemplate.bgColor)); - textPrinter->scrollDistance -= speed; - } - CopyWindowToVram(textPrinter->printerTemplate.windowId, 2); - } - else - { - textPrinter->state = 0; - } - return 3; - case 5: - if (!IsSEPlaying()) - textPrinter->state = 0; - return 3; - case 6: - if (textPrinter->delayCounter != 0) - textPrinter->delayCounter--; - else - textPrinter->state = 0; - return 3; - } - - return 1; -} - -u32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing) -{ - int i; - u8 width; - int temp; - int temp2; - u8 line; - int strPos; - u8 lineWidths[8]; - const u8 *strLocal; - - for (i = 0; i < 8; i++) - { - lineWidths[i] = 0; - } - - width = 0; - line = 0; - strLocal = str; - strPos = 0; - - do - { - temp = strLocal[strPos++]; - switch (temp) - { - case CHAR_NEWLINE: - case EOS: - lineWidths[line] = width; - width = 0; - line++; - break; - case EXT_CTRL_CODE_BEGIN: - temp2 = strLocal[strPos++]; - switch (temp2) - { - case 0x4: - ++strPos; - case 0xB: - case 0x10: - ++strPos; - case 0x1: - case 0x2: - case 0x3: - case 0x5: - case 0x6: - case 0x8: - case 0xC: - case 0xD: - case 0xE: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - ++strPos; - break; - case EXT_CTRL_CODE_UNKNOWN_7: - case 0x9: - case 0xA: - case 0xF: - case EXT_CTRL_CODE_JPN: - case EXT_CTRL_CODE_ENG: - default: - break; - } - break; - case CHAR_SPECIAL_F7: - case PLACEHOLDER_BEGIN: - ++strPos; - break; - case CHAR_PROMPT_SCROLL: - case CHAR_PROMPT_CLEAR: - break; - case CHAR_SPECIAL_F8: - case CHAR_SPECIAL_F9: - ++strPos; - default: - ++width; - break; - } - } while (temp != EOS); - - for (width = 0, strPos = 0; strPos < 8; ++strPos) - { - if (width < lineWidths[strPos]) - width = lineWidths[strPos]; - } - - return (u8)(GetFontAttribute(fontId, FONTATTR_MAX_LETTER_WIDTH) + letterSpacing) * width; -} - -u32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32) -{ - u32 i; - - for (i = 0; i < 9; ++i) - { - if (glyphId == gGlyphWidthFuncs[i].fontId) - return gGlyphWidthFuncs[i].func; - } - - return NULL; -} - -s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing) -{ - bool8 isJapanese; - int minGlyphWidth; - u32 (*func)(u16 glyphId, bool32 isJapanese); - s32 result; - int localLetterSpacing; - u32 lineWidth; - const u8 *bufferPointer; - int glyphWidth; - s32 width; - - isJapanese = 0; - minGlyphWidth = 0; - - func = GetFontWidthFunc(fontId); - if (func == NULL) - return 0; - - if (letterSpacing == -1) - localLetterSpacing = GetFontAttribute(fontId, FONTATTR_LETTER_SPACING); - else - localLetterSpacing = letterSpacing; - - width = 0; - lineWidth = 0; - bufferPointer = 0; - - while (*str != EOS) - { - switch (*str) - { - case CHAR_NEWLINE: - if (lineWidth > width) - width = lineWidth; - lineWidth = 0; - break; - case PLACEHOLDER_BEGIN: - switch (*++str) - { - case 0x2: - bufferPointer = gStringVar1; - break; - case 0x3: - bufferPointer = gStringVar2; - break; - case 0x4: - bufferPointer = gStringVar3; - break; - default: - return 0; - } - case CHAR_SPECIAL_F7: - if (bufferPointer == NULL) - bufferPointer = DynamicPlaceholderTextUtil_GetPlaceholderPtr(*++str); - while (*bufferPointer != EOS) - { - glyphWidth = func(*bufferPointer++, isJapanese); - if (minGlyphWidth > 0) - { - if (glyphWidth < minGlyphWidth) - glyphWidth = minGlyphWidth; - lineWidth += glyphWidth; - } - else - { - lineWidth += glyphWidth; - if (isJapanese && str[1] != EOS) - lineWidth += localLetterSpacing; - } - } - bufferPointer = 0; - break; - case EXT_CTRL_CODE_BEGIN: - switch (*++str) - { - case 0x4: - ++str; - case 0xB: - case 0x10: - ++str; - case 0x1: - case 0x2: - case 0x3: - case 0x5: - case 0x8: - case 0xC: - case 0xD: - case 0xE: - ++str; - break; - case 0x6: - func = GetFontWidthFunc(*++str); - if (func == NULL) - return 0; - if (letterSpacing == -1) - localLetterSpacing = GetFontAttribute(*str, FONTATTR_LETTER_SPACING); - break; - case 0x11: - glyphWidth = *++str; - lineWidth += glyphWidth; - break; - case 0x12: - lineWidth = *++str; - break; - case 0x13: - if (*++str > lineWidth) - lineWidth = *str; - break; - case 0x14: - minGlyphWidth = *++str; - break; - case EXT_CTRL_CODE_JPN: - isJapanese = 1; - break; - case EXT_CTRL_CODE_ENG: - isJapanese = 0; - break; - case EXT_CTRL_CODE_UNKNOWN_7: - case 0x9: - case 0xA: - case 0xF: - default: - break; - } - break; - case CHAR_SPECIAL_F8: - case CHAR_SPECIAL_F9: - if (*str == CHAR_SPECIAL_F9) - glyphWidth = func(*++str | 0x100, isJapanese); - else - glyphWidth = GetKeypadIconWidth(*++str); - - if (minGlyphWidth > 0) - { - if (glyphWidth < minGlyphWidth) - glyphWidth = minGlyphWidth; - lineWidth += glyphWidth; - } - else - { - lineWidth += glyphWidth; - if (isJapanese && str[1] != EOS) - lineWidth += localLetterSpacing; - } - break; - case CHAR_PROMPT_SCROLL: - case CHAR_PROMPT_CLEAR: - break; - default: - glyphWidth = func(*str, isJapanese); - if (minGlyphWidth > 0) - { - if (glyphWidth < minGlyphWidth) - glyphWidth = minGlyphWidth; - lineWidth += glyphWidth; - } - else - { - lineWidth += glyphWidth; - if (isJapanese && str[1] != EOS) - lineWidth += localLetterSpacing; - } - break; - } - ++str; - } - - if (lineWidth > width) - return lineWidth; - else - return width; -} - -u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str) -{ - u8 shadowColor; - u8 *strLocal; - int strPos; - int temp; - int temp2; - u8 colorBackup[3]; - u8 fgColor; - u8 bgColor; - - SaveTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]); - - fgColor = 1; - bgColor = 0; - shadowColor = 3; - - GenerateFontHalfRowLookupTable(1, 0, 3); - strLocal = str; - strPos = 0; - - do - { - temp = strLocal[strPos++]; - switch (temp) - { - case EXT_CTRL_CODE_BEGIN: - temp2 = strLocal[strPos++]; - switch (temp2) - { - case 0x4: - fgColor = strLocal[strPos++]; - bgColor = strLocal[strPos++]; - shadowColor = strLocal[strPos++]; - GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); - continue; - case 0x1: - fgColor = strLocal[strPos++]; - GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); - continue; - case 0x2: - bgColor = strLocal[strPos++]; - GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); - continue; - case 0x3: - shadowColor = strLocal[strPos++]; - GenerateFontHalfRowLookupTable(fgColor, bgColor, shadowColor); - continue; - case 0x6: - fontId = strLocal[strPos++]; - break; - case 0xB: - case 0x10: - ++strPos; - case 0x5: - case 0x8: - case 0xC: - case 0xD: - case 0xE: - case 0x11: - case 0x12: - case 0x13: - case 0x14: - ++strPos; - break; - case EXT_CTRL_CODE_UNKNOWN_7: - case 0x9: - case 0xA: - case 0xF: - case EXT_CTRL_CODE_JPN: - case EXT_CTRL_CODE_ENG: - default: - continue; - } - break; - case CHAR_SPECIAL_F7: - case CHAR_SPECIAL_F8: - case CHAR_SPECIAL_F9: - case PLACEHOLDER_BEGIN: - ++strPos; - break; - case CHAR_PROMPT_SCROLL: - case CHAR_PROMPT_CLEAR: - case CHAR_NEWLINE: - case EOS: - break; - default: - switch (fontId) - { - case 9: - DecompressGlyphFont9(temp); - break; - case 1: - default: - DecompressGlyphFont1(temp, 1); - break; - } - CpuCopy32(gUnknown_03002F90.unk0, pixels, 0x20); - CpuCopy32(gUnknown_03002F90.unk40, pixels + 0x20, 0x20); - pixels += 0x40; - break; - } - } - while (temp != EOS); - - RestoreTextColors(&colorBackup[0], &colorBackup[1], &colorBackup[2]); - return 1; -} - -u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y) -{ - BlitBitmapRectToWindow( - windowId, - gKeypadIconTiles + (gKeypadIcons[keypadIconId].tileOffset * 0x20), - 0, - 0, - 0x80, - 0x80, - x, - y, - gKeypadIcons[keypadIconId].width, - gKeypadIcons[keypadIconId].height); - return gKeypadIcons[keypadIconId].width; -} - -u8 GetKeypadIconTileOffset(u8 keypadIconId) -{ - return gKeypadIcons[keypadIconId].tileOffset; -} - -u8 GetKeypadIconWidth(u8 keypadIconId) -{ - return gKeypadIcons[keypadIconId].width; -} - -u8 GetKeypadIconHeight(u8 keypadIconId) -{ - return gKeypadIcons[keypadIconId].height; -} - -void SetDefaultFontsPointer(void) -{ - SetFontsPointer(&gFontInfos[0]); -} - -u8 GetFontAttribute(u8 fontId, u8 attributeId) -{ - int result = 0; - switch (attributeId) - { - case FONTATTR_MAX_LETTER_WIDTH: - result = gFontInfos[fontId].maxLetterWidth; - break; - case FONTATTR_MAX_LETTER_HEIGHT: - result = gFontInfos[fontId].maxLetterHeight; - break; - case FONTATTR_LETTER_SPACING: - result = gFontInfos[fontId].letterSpacing; - break; - case FONTATTR_LINE_SPACING: - result = gFontInfos[fontId].lineSpacing; - break; - case FONTATTR_UNKNOWN: - result = gFontInfos[fontId].unk; - break; - case FONTATTR_COLOR_FOREGROUND: - result = gFontInfos[fontId].fgColor; - break; - case FONTATTR_COLOR_BACKGROUND: - result = gFontInfos[fontId].bgColor; - break; - case FONTATTR_COLOR_SHADOW: - result = gFontInfos[fontId].shadowColor; - break; - } - return result; -} - -u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension) -{ - return gMenuCursorDimensions[fontId][whichDimension]; -} - -void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese) -{ - const u16* glyphs; - - if (isJapanese == 1) - { - glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.unk80 = 8; // gGlyphWidth - gUnknown_03002F90.unk81 = 12; // gGlyphHeight - } - else - { - glyphs = gFont0LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont0LatinGlyphWidths[glyphId]; - - if (gUnknown_03002F90.unk80 <= 8) - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - } - else - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); - } - - gUnknown_03002F90.unk81 = 13; - } -} - -u32 GetGlyphWidthFont0(u16 glyphId, bool32 isJapanese) -{ - if (isJapanese == TRUE) - return 8; - else - return gFont0LatinGlyphWidths[glyphId]; -} - -void DecompressGlyphFont7(u16 glyphId, bool32 isJapanese) -{ - const u16* glyphs; - - if (isJapanese == TRUE) - { - int eff; - glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.unk80 = 8; // gGlyphWidth - gUnknown_03002F90.unk81 = 15; // gGlyphHeight - } - else - { - glyphs = gFont7LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont7LatinGlyphWidths[glyphId]; - - if (gUnknown_03002F90.unk80 <= 8) - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - } - else - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); - } - - gUnknown_03002F90.unk81 = 15; - } -} - -u32 GetGlyphWidthFont7(u16 glyphId, bool32 isJapanese) -{ - if (isJapanese == TRUE) - return 8; - else - return gFont7LatinGlyphWidths[glyphId]; -} - -void DecompressGlyphFont8(u16 glyphId, bool32 isJapanese) -{ - const u16* glyphs; - - if (isJapanese == TRUE) - { - glyphs = gFont0JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & 0xF)); - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.unk80 = 8; // gGlyphWidth - gUnknown_03002F90.unk81 = 12; // gGlyphHeight - } - else - { - glyphs = gFont8LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont8LatinGlyphWidths[glyphId]; - - if (gUnknown_03002F90.unk80 <= 8) - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - } - else - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); - } - - gUnknown_03002F90.unk81 = 12; - } -} - -u32 GetGlyphWidthFont8(u16 glyphId, bool32 isJapanese) -{ - if (isJapanese == TRUE) - return 8; - else - return gFont8LatinGlyphWidths[glyphId]; -} - -void DecompressGlyphFont2(u16 glyphId, bool32 isJapanese) -{ - const u16* glyphs; - - if (isJapanese == TRUE) - { - glyphs = gFont2JapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7)); - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); // gUnknown_03002F90 + 0x40 - DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x20 - DecompressGlyphTile(glyphs + 0x88, gUnknown_03002F90.unk60); // gUnknown_03002F90 + 0x60 - gUnknown_03002F90.unk80 = gFont2JapaneseGlyphWidths[glyphId]; // gGlyphWidth - gUnknown_03002F90.unk81 = 14; // gGlyphHeight - } - else - { - glyphs = gFont2LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont2LatinGlyphWidths[glyphId]; - - if (gUnknown_03002F90.unk80 <= 8) - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - } - else - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); - } - - gUnknown_03002F90.unk81 = 14; - } -} - -u32 GetGlyphWidthFont2(u16 glyphId, bool32 isJapanese) -{ - if (isJapanese == TRUE) - return gFont2JapaneseGlyphWidths[glyphId]; - else - return gFont2LatinGlyphWidths[glyphId]; -} - -void DecompressGlyphFont1(u16 glyphId, bool32 isJapanese) -{ - const u16* glyphs; - - if (isJapanese == TRUE) - { - int eff; - glyphs = gFont1JapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId & (eff = 0xF))); // shh, no questions, only matching now - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); // gUnknown_03002F90 + 0x40 - gUnknown_03002F90.unk80 = 8; // gGlyphWidth - gUnknown_03002F90.unk81 = 15; // gGlyphHeight - } - else - { - glyphs = gFont1LatinGlyphs + (0x20 * glyphId); - gUnknown_03002F90.unk80 = gFont1LatinGlyphWidths[glyphId]; - - if (gUnknown_03002F90.unk80 <= 8) - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - } - else - { - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x8, gUnknown_03002F90.unk20); - DecompressGlyphTile(glyphs + 0x10, gUnknown_03002F90.unk40); - DecompressGlyphTile(glyphs + 0x18, gUnknown_03002F90.unk60); - } - - gUnknown_03002F90.unk81 = 15; - } -} - -u32 GetGlyphWidthFont1(u16 glyphId, bool32 isJapanese) -{ - if (isJapanese == TRUE) - return 8; - else - return gFont1LatinGlyphWidths[glyphId]; -} - -void DecompressGlyphFont9(u16 glyphId) -{ - const u16* glyphs; - - glyphs = gFont9JapaneseGlyphs + (0x100 * (glyphId >> 4)) + (0x8 * (glyphId & 0xF)); - DecompressGlyphTile(glyphs, gUnknown_03002F90.unk0); - DecompressGlyphTile(glyphs + 0x80, gUnknown_03002F90.unk40); - gUnknown_03002F90.unk80 = 8; - gUnknown_03002F90.unk81 = 12; -} diff --git a/src/trade.c b/src/trade.c index c29fe54c3..909abe540 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle_anim.h" #include "battle_interface.h" #include "bg.h" @@ -44,1359 +44,204 @@ #include "union_room.h" #include "util.h" #include "window.h" +#include "constants/contest.h" #include "constants/easy_chat.h" #include "constants/items.h" #include "constants/moves.h" +#include "constants/region_map_sections.h" +#include "constants/rgb.h" #include "constants/species.h" #include "constants/songs.h" -#include "constants/rgb.h" #define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20)) struct InGameTrade { - /*0x00*/ u8 name[11]; + /*0x00*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x0C*/ u16 species; - /*0x0E*/ u8 ivs[6]; - /*0x14*/ bool8 secondAbility; + /*0x0E*/ u8 ivs[NUM_STATS]; + /*0x14*/ u8 abilityNum; /*0x18*/ u32 otId; - /*0x1C*/ u8 stats[5]; + /*0x1C*/ u8 conditions[CONTEST_CATEGORIES_COUNT]; /*0x24*/ u32 personality; /*0x28*/ u16 heldItem; /*0x2A*/ u8 mailNum; /*0x2B*/ u8 otName[11]; /*0x36*/ u8 otGender; /*0x37*/ u8 sheen; - /*0x38*/ u16 playerSpecies; + /*0x38*/ u16 requestedSpecies; }; -static EWRAM_DATA u8 *gUnknown_02032184 = NULL; -static EWRAM_DATA u8 *gUnknown_02032188[14] = {NULL}; -EWRAM_DATA struct MailStruct gUnknown_020321C0[PARTY_SIZE] = {0}; -EWRAM_DATA u8 gUnknown_02032298[2] = {0}; +static EWRAM_DATA u8 *sMessageBoxAllocBuffer = NULL; + +// Bytes 0-2 are used for the player's name box +// Bytes 3-5 are used for the partner's name box +// Bytes 6-7 are used for the Cancel box +// Bytes 8-13 are used for the Choose a Pokemon box +static EWRAM_DATA u8 *sMessageBoxTileBuffers[14] = {NULL}; + +EWRAM_DATA struct MailStruct gTradeMail[PARTY_SIZE] = {0}; +EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; static EWRAM_DATA struct { - /*0x0000*/ u8 unk_0; - /*0x0001*/ u8 unk_1; + /*0x0000*/ u8 bg2hofs; + /*0x0001*/ u8 bg3hofs; /*0x0002*/ u8 filler_2[0x28 - 2]; - /*0x0028*/ u8 partyIcons[2][PARTY_SIZE]; - /*0x0034*/ u8 tradeMenuCursorSpriteIdx; - /*0x0035*/ u8 tradeMenuCursorPosition; + /*0x0028*/ u8 partySpriteIds[2][PARTY_SIZE]; + /*0x0034*/ u8 cursorSpriteIdx; + /*0x0035*/ u8 cursorPosition; /*0x0036*/ u8 partyCounts[2]; - /*0x0038*/ bool8 tradeMenuOptionsActive[12]; - /*0x0044*/ u8 unk_44; - /*0x0045*/ u8 unk_45[2][PARTY_SIZE]; - /*0x0051*/ u8 unk_51[2][PARTY_SIZE]; - /*0x005D*/ u8 unk_5D[2][PARTY_SIZE]; - /*0x0069*/ u8 unk_69; + /*0x0038*/ bool8 monPresent[PARTY_SIZE * 2]; + /*0x0044*/ bool8 neverRead_44; + /*0x0045*/ bool8 isLiveMon[2][PARTY_SIZE]; + /*0x0051*/ bool8 isEgg[2][PARTY_SIZE]; + /*0x005D*/ u8 hpBarLevels[2][PARTY_SIZE]; + /*0x0069*/ u8 bufferPartyState; /*0x006A*/ u8 filler_6A[0x6F - 0x6A]; - /*0x006F*/ u8 unk_6F; - /*0x0070*/ u8 unk_70; + /*0x006F*/ u8 tradeMenuFunc; + /*0x0070*/ u8 neverRead_70; /*0x0071*/ u8 filler_71; - /*0x0072*/ u16 unk_72; - /*0x0074*/ u8 unk_74[2]; - /*0x0076*/ u8 unk_76[2]; - /*0x0078*/ u8 unk_78; - /*0x0079*/ u8 unk_79; - /*0x007A*/ u8 unk_7A; - /*0x007B*/ u8 unk_7B; + /*0x0072*/ u16 bottomTextTileStart; + /*0x0074*/ u8 drawPartyState[2]; + /*0x0076*/ u8 selectedMonIdx[2]; + /*0x0078*/ u8 playerLinkFlagChoseAction; + /*0x0079*/ u8 partnerLinkFlagChoseAction; + /*0x007A*/ u8 playerLinkFlagStatus; + /*0x007B*/ u8 partnerLinkFlagStatus; /*0x007C*/ u8 filler_7C[0x7E - 0x7C]; - /*0x007E*/ u8 unk_7E; - /*0x007F*/ u8 filler_7F; + /*0x007E*/ u8 partnerCursorPosition; + /*0x007F*/ u8 unused_7F; /*0x0080*/ u16 linkData[20]; - /*0x00A8*/ u8 unk_A8; - /*0x00A9*/ u8 unk_A9[11]; + /*0x00A8*/ u8 timer; + /*0x00A9*/ u8 giftRibbons[11]; /*0x00B4*/ u8 filler_B4[0x8D0-0xB4]; /*0x08D0*/ struct { - bool8 unk_0; - u16 unk_2; - u8 unk_4; - } unk_8D0[4]; + bool8 queued; + u16 queueDelay; + u8 actionId; + } queuedActions[4]; /*0x08F0*/ u16 tilemapBuffer[0x400]; -} *gUnknown_0203229C = {NULL}; +} *sTradeMenuData = {NULL}; static EWRAM_DATA struct { /*0x00*/ struct Pokemon mon; /*0x64*/ u32 timer; - /*0x68*/ u32 unk_68[2]; + /*0x68*/ u32 monPersonalities[2]; /*0x70*/ u8 filler_70[2]; - /*0x72*/ u8 unk_72; - /*0x73*/ u8 unk_73; + /*0x72*/ u8 playerLinkFlagFinishTrade; + /*0x73*/ u8 partnerLinkFlagFinishTrade; /*0x74*/ u16 linkData[10]; - /*0x88*/ u8 unk_88; - /*0x89*/ u8 unk_89; - /*0x8A*/ u16 unk_8A; - /*0x8C*/ u16 unk_8C; + /*0x88*/ u8 alwaysZero_88; + /*0x89*/ u8 alwaysZero_89; + /*0x8A*/ u16 linkTimeoutCounter; + /*0x8C*/ u16 neverRead_8C; /*0x8E*/ u8 pokePicSpriteIdxs[2]; - /*0x90*/ u8 unk_90; - /*0x91*/ u8 unk_91; - /*0x92*/ u8 unk_92; - /*0x93*/ u8 unk_93; + /*0x90*/ u8 unk_90; //sprite id + /*0x91*/ u8 unk_91; //sprite id + /*0x92*/ u8 unk_92; //sprite id + /*0x93*/ u8 sendTradeFinishState; /*0x94*/ u16 state; /*0x96*/ u8 filler_96[0xD2 - 0x96]; - /*0xD2*/ u8 unk_D2; - /*0xD3*/ u8 unk_D3; - /*0xD4*/ u16 unk_D4; - /*0xD6*/ u16 unk_D6; - /*0xD8*/ u16 unk_D8; - /*0xDA*/ u16 unk_DA; - /*0xDC*/ u16 unk_DC; - /*0xDE*/ u16 unk_DE; + /*0xD2*/ u8 pokeballSpriteId; + /*0xD3*/ u8 unk_D3; //sprite id + /*0xD4*/ u16 texX; + /*0xD6*/ u16 texY; + /*0xD8*/ u16 neverRead_D8; + /*0xDA*/ u16 neverRead_DA; + /*0xDC*/ u16 scrX; + /*0xDE*/ u16 scrY; /*0xE0*/ s16 bg1vofs; /*0xE2*/ s16 bg1hofs; /*0xE4*/ s16 bg2vofs; /*0xE6*/ s16 bg2hofs; - /*0xE8*/ u16 unk_E8; - /*0xEA*/ u16 unk_EA; - /*0xEC*/ u16 unk_EC; + /*0xE8*/ u16 sXY; + /*0xEA*/ u16 unk_EA; //sXY divisor + /*0xEC*/ u16 alpha; /*0xEE*/ bool8 isLinkTrade; - /*0xF0*/ u16 tradeSpecies[2]; + /*0xF0*/ u16 monSpecies[2]; /*0xF4*/ u16 cachedMapMusic; - /*0xF6*/ u8 unk_F6[3]; + /*0xF6*/ u8 textColors[3]; /*0xF9*/ u8 filler_F9; - /*0xFA*/ u8 unk_FA; - /*0xFB*/ u8 unk_FB; - /*0xFC*/ u8 unk_FC; - /*0xFD*/ u8 unk_FD; - /*0xFE*/ u8 unk_FE; -} *gUnknown_020322A0 = {NULL}; + /*0xFA*/ bool8 isCableTrade; + /*0xFB*/ u8 wirelessWinLeft; + /*0xFC*/ u8 wirelessWinTop; + /*0xFD*/ u8 wirelessWinRight; + /*0xFE*/ u8 wirelessWinBottom; +} *sTradeData = {NULL}; #if !defined(NONMATCHING) && MODERN #define static #endif -static bool32 sub_8077260(void); -static void sub_80773D0(void); -static void sub_807811C(void); -static void sub_807825C(void); -static void sub_80782B8(u8); -static void sub_8078388(void); -static bool8 shedinja_maker_maybe(void); -static void sub_8078C34(void); -static void sub_80795AC(void); -static void sub_807967C(u8); -static void sub_80796B4(u8); -static u8 sub_8079A3C(u8 *, u8, u8); -static void sub_8079AA4(u8 *, u8, u8); -static void sub_8079BE0(u8); -static void sub_8079C4C(u8, u8, u8, u8, u8, u8); -static void sub_8079E44(u8); -static void sub_8079F74(void); -static void sub_8079F88(u8); -static void sub_807A000(u8 taskId); -static void sub_807A024(u8 taskId); -static void sub_807A048(u16, u8); -static u32 sub_807A09C(void); -static void sub_807A0C4(void); -static void sub_807A19C(u8); -static bool8 sub_807A1F0(void); -static void sub_807A308(const u8 *, u8 *, u8); -static void sub_807A320(u8); -static void sub_807A468(u8); -static void sub_807A53C(void); -static void sub_807A5B0(void); -static u32 sub_807A5F4(struct Pokemon *, int, int); +static bool32 IsWirelessTrade(void); +static void CB2_CreateTradeMenu(void); +static void VBlankCB_TradeMenu(void); +static void CB2_TradeMenu(void); +static void LoadTradeBgGfx(u8); +static void SetTradePartyMonsVisible(void); +static bool8 BufferTradeParties(void); +static void CB1_SendOrReactToLinkTradeData(void); +static void CallTradeMenuFunc(void); +static void SetSelectedMon(u8); +static void DrawTradeMenuParty(u8); +static u8 GetMonNicknameWidth(u8 *, u8, u8); +static void BufferTradeMonMoves(u8 *, u8, u8); +static void PrintPartyNicknamesForTradeMenu(u8); +static void DrawTradeMenuPartyMonInfo(u8, u8, u8, u8, u8, u8); +static void DrawTradeMenuPartyInfo(u8); +static void PrintNicknamesForTradeMenu(void); +static void RedrawTradeMenuParty(u8); +static void Task_DrawSelectionSummary(u8 taskId); +static void Task_DrawSelectionTrade(u8 taskId); +static void QueueAction(u16, u8); +static u32 GetNumQueuedActions(void); +static void DoQueuedActions(void); +static void PrintTradeMessage(u8); +static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void); +static void DrawTextWindowAndBuffer6Bytes(const u8 *, u8 *, u8); +static void SetTradePartyLiveStatuses(u8); +static void GetTradePartyHPBarLevels(u8); +static void SetTradePartyHPBarSprites(void); +static void SaveTradeGiftRibbons(void); +static u32 CanTradeSelectedMon(struct Pokemon *, int, int); static void sub_807AA28(struct Sprite *sprite); static void sub_807AA7C(struct Sprite *sprite); static void sub_807AABC(struct Sprite *sprite); static void sub_807AAE0(struct Sprite *sprite); static void sub_807AB04(struct Sprite *sprite); -static void sub_807B170(void); -static void sub_807B60C(void); -static void sub_807B62C(u8); -static void sub_807BA94(void); -static void SetTradeSceneStrings(void); -static u8 sub_807BBC8(void); -static u8 sub_807BBEC(void); -static u8 sub_807CFC8(void); +static void InitTradeBgInternal(void); +static void CB2_UpdateInGameTrade(void); +static void SetTradeSequenceBgGpuRegs(u8); +static void LoadTradeSequenceSpriteSheetsAndPalettes(void); +static void BufferTradeSceneStrings(void); +static bool8 AnimateTradeSequence(void); +static bool8 AnimateTradeSequenceCable(void); +static bool8 AnimateTradeSequenceWireless(void); static void sub_807E55C(struct Sprite *sprite); static void sub_807E5D8(struct Sprite *sprite); static void sub_807E64C(struct Sprite *sprite); static void sub_807E6AC(struct Sprite *sprite); -static void sub_807E784(void); -static void sub_807E974(struct MailStruct *mail, const struct InGameTrade *trade); -static void sub_807EA2C(void); -static void sub_807EACC(void); -static void sub_807EB50(void); -static void c2_080543C4(void); -static void sub_807F110(u8); -static void sub_807F14C(void); -static void c3_08054588(u8); +static void BuffeInGameTradeMonName(void); +static void SetInGameTradeMail(struct MailStruct *mail, const struct InGameTrade *trade); +static void CB2_UpdateLinkTrade(void); +static void CB2_TryFinishTrade(void); +static void CB2_SaveAndEndTrade(void); +static void CB2_FreeTradeData(void); +static void Task_InGameTrade(u8); +static void CheckPartnersMonForRibbons(void); +static void Task_AnimateWirelessSignal(u8); static void c3_0805465C(u8); static void sub_807F39C(u8); -static void sub_807F464(void); - -static const u32 sUnref_0832C6A8[] = -{ - 0x00000F2C, - 0x00003D88, - 0x0000001C, - 0x00000024, - 0x00000064, - 0x00000528 -}; -static const u16 gTradeMovesBoxTilemap[] = INCBIN_U16("graphics/trade/moves_box_map.bin"); -static const u16 gTradePartyBoxTilemap[] = INCBIN_U16("graphics/trade/party_box_map.bin"); -static const u8 gTradeStripesBG2Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg2_map.bin"); -static const u8 gTradeStripesBG3Tilemap[] = INCBIN_U8("graphics/trade/stripes_bg3_map.bin"); -static const u8 gText_EmptyString7[] = _(""); -static const u8 gText_ClrWhtHltTrspntShdwDrkGry[] = _("{COLOR WHITE}{HIGHLIGHT TRANSPARENT}{SHADOW DARK_GREY}"); -const u8 gText_MaleSymbol4[] = _("♂"); -const u8 gText_FemaleSymbol4[] = _("♀"); -const u8 gText_GenderlessSymbol[] = _(""); -static const u8 gText_SpaceMove[] = _(" MOVE"); -static const u8 gText_NewLine3[] = _("\n"); -static const u8 gText_Slash2[] = _("/"); -static const u8 gText_Lv2[] = _("Lv. "); -static const u8 gText_ThreeDashes2[] = _("---"); -static const u8 gText_FourQuestionMarks[] = _("????"); -static const u8 gText_832DAE4[] = _(""); -static const u8 gText_IsThisTradeOkay[] = _("Is this trade okay?"); -static const u8 gText_Cancel6[] = _("CANCEL"); -static const u8 gText_ChooseAPkmn[] = _("Choose a POKéMON."); -static const u8 gText_Summary3[] = _("SUMMARY"); -static const u8 gText_Trade2[] = _("TRADE"); -static const u8 gText_CancelTrade[] = _("Cancel trade?"); -static const u8 gJPText_832DB2E[] = _("Bボタン で もどります"); -static const u8 gText_Summary4[] = _("SUMMARY"); -static const u8 gText_Trade3[] = _("TRADE"); -static const u8 gText_CommunicationStandby6[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Communication standby…\nPlease wait."); -static const u8 gText_TheTradeHasBeenCanceled[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}The trade has\nbeen canceled."); -static const u8 gText_YourOnlyPkmnForBattle[] = _("That's your only\nPOKéMON for battle."); -static const u8 gText_WaitingForYourFriend[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE}{SHADOW LIGHT_GREY}Waiting for your friend\nto finish…"); -static const u8 gText_YourFriendWantsToTrade[] = _("Your friend wants\nto trade POKéMON."); - -static const struct OamData gOamData_832DC14 = -{ - .shape = SPRITE_SHAPE(32x16), - .size = SPRITE_SIZE(32x16), - .priority = 1 -}; - -static const struct OamData gOamData_832DC1C = -{ - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .priority = 1 -}; - -static const union AnimCmd gSpriteAnim_832DC24[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_832DC2C[] = -{ - ANIMCMD_FRAME(32, 5), - ANIMCMD_END -}; - -static const union AnimCmd *const gSpriteAnimTable_832DC34[] = -{ - gSpriteAnim_832DC24, - gSpriteAnim_832DC2C -}; - -static const struct SpriteSheet gUnknown_0832DC3C = -{ - .data = gUnknown_08DDC6E4, - .size = 0x800, - .tag = 300 -}; - -static const struct SpritePalette gUnknown_0832DC44 = -{ - .data = gUnknown_08DDB444, - .tag = 2345 -}; - -static const union AnimCmd gSpriteAnim_832DC4C[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_832DC54[] = -{ - ANIMCMD_FRAME(8, 5), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_832DC5C[] = -{ - ANIMCMD_FRAME(16, 5), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_832DC64[] = -{ - ANIMCMD_FRAME(24, 5), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_832DC6C[] = -{ - ANIMCMD_FRAME(32, 5), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_832DC74[] = -{ - ANIMCMD_FRAME(40, 5), - ANIMCMD_END -}; - -static const union AnimCmd *const gSpriteAnimTable_832DC7C[] = -{ - gSpriteAnim_832DC4C, - gSpriteAnim_832DC54, - gSpriteAnim_832DC5C, - gSpriteAnim_832DC64, - gSpriteAnim_832DC6C, - gSpriteAnim_832DC74 -}; - -static const struct SpriteTemplate gSpriteTemplate_832DC94 = -{ - .tileTag = 300, - .paletteTag = 2345, - .oam = &gOamData_832DC1C, - .anims = gSpriteAnimTable_832DC34, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -static const struct SpriteTemplate gSpriteTemplate_832DCAC = -{ - .tileTag = 200, - .paletteTag = 4925, - .oam = &gOamData_832DC14, - .anims = gSpriteAnimTable_832DC7C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -static const u16 TradeScreenTextPalette[] = INCBIN_U16("graphics/trade/text.gbapal"); -static const struct SpritePalette gSpritePalette_TradeScreenText = -{ - .data = TradeScreenTextPalette, - .tag = 4925 -}; - -// This is used to determine the next mon to select when the D-Pad is -// pressed in a given direction. -// Note that the mons are laid out like this. -// 0-5 are the player's party and 6-11 are the trading partner's party. -// 12 is the cancel button. -// 0 1 6 7 -// 2 3 8 9 -// 4 5 10 11 -// 12 -static const u8 gTradeNextSelectedMonTable[][4][6] = -{ - { - {4, 2, 12, 12, 0, 0}, - {2, 4, 12, 12, 0, 0}, - {7, 6, 1, 0, 0, 0}, - {1, 6, 7, 0, 0, 0} - }, - { - {5, 3, 12, 12, 0, 0}, - {3, 5, 12, 12, 0, 0}, - {0, 7, 6, 1, 0, 0}, - {6, 7, 0, 1, 0, 0} - }, - { - {0, 0, 0, 0, 0, 0}, - {4, 0, 0, 0, 0, 0}, - {9, 8, 7, 6, 0, 0}, - {3, 1, 0, 0, 0, 0} - }, - { - {1, 1, 1, 1, 0, 0}, - {5, 1, 1, 1, 0, 0}, - {2, 9, 8, 7, 0, 0}, - {8, 9, 6, 6, 0, 0} - }, - { - {2, 2, 2, 2, 0, 0}, - {0, 0, 0, 0, 0, 0}, - {11, 10, 9, 8, 7, 6}, - {5, 3, 1, 0, 0, 0} - }, - { - {3, 3, 3, 3, 0, 0}, - {1, 1, 1, 1, 0, 0}, - {4, 4, 4, 4, 0, 0}, - {10, 8, 6, 0, 0, 0} - }, - { - {10, 8, 12, 0, 0, 0}, - {8, 10, 12, 0, 0, 0}, - {1, 0, 0, 0, 0, 0}, - {7, 0, 1, 0, 0, 0} - }, - { - {12, 0, 0, 0, 0, 0}, - {9, 12, 0, 0, 0, 0}, - {6, 0, 0, 0, 0, 0}, - {0, 0, 0, 0, 0, 0} - }, - { - {6, 0, 0, 0, 0, 0}, - {10, 6, 0, 0, 0, 0}, - {3, 2, 1, 0, 0, 0}, - {9, 7, 0, 0, 0, 0} - }, - { - {7, 0, 0, 0, 0, 0}, - {11, 12, 0, 0, 0, 0}, - {8, 0, 0, 0, 0, 0}, - {2, 1, 0, 0, 0, 0} - }, - { - {8, 0, 0, 0, 0, 0}, - {6, 0, 0, 0, 0, 0}, - {5, 4, 3, 2, 1, 0}, - {11, 9, 7, 0, 0, 0} - }, - { - {9, 0, 0, 0, 0, 0}, - {12, 0, 0, 0, 0, 0}, - {10, 0, 0, 0, 0, 0}, - {4, 2, 0, 0, 0, 0} - }, - { - {11, 9, 7, 6, 0, 0}, - {7, 6, 0, 0, 0, 0}, - {12, 0, 0, 0, 0, 0}, - {12, 0, 0, 0, 0, 0} - } -}; - -static const u8 gTradeMonSpriteCoords[][2] = -{ - // Your party - {1, 5 }, - {8, 5 }, - {1, 10}, - {8, 10}, - {1, 15}, - {8, 15}, - - // Friend's party - {16, 5 }, - {23, 5 }, - {16, 10}, - {23, 10}, - {16, 15}, - {23, 15}, - - {23, 18} // CANCEL -}; - -static const u8 gTradeLevelDisplayCoords[][6][2] = -{ - { - // Your party - {5, 4}, - {12, 4}, - {5, 9}, - {12, 9}, - {5, 14}, - {12, 14}, - }, - { - // Friend's party - {20, 4}, - {27, 4}, - {20, 9}, - {27, 9}, - {20, 14}, - {27, 14} - } -}; - -static const u8 gTradeMonBoxCoords[][6][2] = -{ - { - // Your party - {1, 3}, - {8, 3}, - {1, 8}, - {8, 8}, - {1, 13}, - {8, 13}, - }, - { - // Friend's party - {16, 3}, - {23, 3}, - {16, 8}, - {23, 8}, - {16, 13}, - {23, 13} - } -}; - -static const u8 sUnref_0832DE6E[] = -{ - 0x00, 0x0e, - 0x0f, 0x1d, - 0x03, 0x05, - 0x03, 0x07, - 0x12, 0x05, - 0x12, 0x07, - 0x08, 0x07, - 0x16, 0x0c, - 0x08, 0x07, - 0x16, 0x0c, - 0x06, 0x07, - 0x18, 0x0c, - 0x06, 0x07, - 0x18, 0x0c, - 0x08, 0x07, - 0x16, 0x0c, - 0x07, 0x07, - 0x17, 0x0c -}; - -static const u8 *const gUnknown_0832DE94[] = -{ - gText_Cancel6, - gText_ChooseAPkmn, - gText_Summary3, - gText_Trade2, - gText_CancelTrade, - gJPText_832DB2E -}; - -static const struct MenuAction gUnknown_0832DEAC[] = -{ - {gText_Summary4, sub_807A000}, - {gText_Trade3, sub_807A024} -}; - -static const u8 *const gUnknown_0832DEBC[] = { - gText_CommunicationStandby6, - gText_TheTradeHasBeenCanceled, - gText_YourOnlyPkmnForBattle, - gText_OnlyPkmnForBattle, - gText_WaitingForYourFriend, - gText_YourFriendWantsToTrade, - gText_PkmnCantBeTradedNow, - gText_EggCantBeTradedNow, - gText_OtherTrainersPkmnCantBeTraded -}; - -static const u8 gUnknown_0832DEE0[] = { 0, 1, 2 }; - -static const struct BgTemplate gUnknown_0832DEE4[] = -{ - { - .bg = 0, - .charBaseIndex = 2, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - { - .bg = 1, - .charBaseIndex = 0, - .mapBaseIndex = 5, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 0, - .mapBaseIndex = 6, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, - { - .bg = 3, - .charBaseIndex = 0, - .mapBaseIndex = 7, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 - }, -}; - -static const struct WindowTemplate gUnknown_0832DEF4[] = -{ - { - .bg = 0, - .tilemapLeft = 4, - .tilemapTop = 7, - .width = 22, - .height = 4, - .paletteNum = 15, - .baseBlock = 30 - }, - { - .bg = 0, - .tilemapLeft = 19, - .tilemapTop = 15, - .width = 10, - .height = 4, - .paletteNum = 15, - .baseBlock = 118 - }, - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 5, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 158 - }, - { - .bg = 0, - .tilemapLeft = 7, - .tilemapTop = 5, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 174 - }, - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 10, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 190 - }, - { - .bg = 0, - .tilemapLeft = 7, - .tilemapTop = 10, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 206 - }, - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 15, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 222 - }, - { - .bg = 0, - .tilemapLeft = 7, - .tilemapTop = 15, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 238 - }, - { - .bg = 0, - .tilemapLeft = 15, - .tilemapTop = 5, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 254 - }, - { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 5, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 270 - }, - { - .bg = 0, - .tilemapLeft = 15, - .tilemapTop = 10, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 286 - }, - { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 10, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 302 - }, - { - .bg = 0, - .tilemapLeft = 15, - .tilemapTop = 15, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 318 - }, - { - .bg = 0, - .tilemapLeft = 22, - .tilemapTop = 15, - .width = 8, - .height = 2, - .paletteNum = 13, - .baseBlock = 334 - }, - { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 5, - .width = 14, - .height = 2, - .paletteNum = 13, - .baseBlock = 350 - }, - { - .bg = 0, - .tilemapLeft = 3, - .tilemapTop = 8, - .width = 11, - .height = 8, - .paletteNum = 15, - .baseBlock = 378 - }, - { - .bg = 0, - .tilemapLeft = 17, - .tilemapTop = 5, - .width = 14, - .height = 2, - .paletteNum = 15, - .baseBlock = 466 - }, - { - .bg = 0, - .tilemapLeft = 18, - .tilemapTop = 8, - .width = 11, - .height = 8, - .paletteNum = 15, - .baseBlock = 494 - }, - DUMMY_WIN_TEMPLATE, -}; - -static const struct WindowTemplate gUnknown_0832DF8C = -{ - .bg = 0, - .tilemapLeft = 23, - .tilemapTop = 13, - .width = 5, - .height = 4, - .paletteNum = 15, - .baseBlock = 582 -}; - -static const u8 gJPText_Shedinja[] = _("ヌケニン"); -static const u8 gUnknown_0832DF99[][2] = -{ - {4, 3}, - {19, 3}, - {0, 0} -}; - -static const u16 gTradeBallPalette[] = INCBIN_U16("graphics/trade/ball.gbapal"); -static const u8 gTradeBallTiles[] = INCBIN_U8("graphics/trade/ball.4bpp"); -static const u8 gUnknown_832E5C0[] = INCBIN_U8("graphics/trade/pokeball_symbol.8bpp"); -static const u16 gUnknown_0832FFC0[] = INCBIN_U16("graphics/trade/cable_closeup_map.bin"); -static const u16 gUnknown_083307C0[] = INCBIN_U16("graphics/trade/pokeball_symbol_map.bin"); -static const u16 sUnref_083308C0[] = INCBIN_U16("graphics/trade/unknown_3308C0.gbapal"); -static const u16 gUnknown_083308E0[] = INCBIN_U16("graphics/trade/gba.gbapal"); -static const u16 gUnref_08330900[] = INCBIN_U16("graphics/trade/shadow.gbapal"); -static const u16 gUnref_08330920[] = INCBIN_U16("graphics/trade/black.gbapal"); -static const u16 gUnknown_08330940[] = INCBIN_U16("graphics/trade/misc.gbapal"); -static const u8 gTradeGlow1Tiles[] = INCBIN_U8("graphics/trade/glow1.4bpp"); -static const u8 gTradeGlow2Tiles[] = INCBIN_U8("graphics/trade/glow2.4bpp"); -static const u8 gTradeCableEndTiles[] = INCBIN_U8("graphics/trade/cable_end.4bpp"); -static const u8 gTradeGBAScreenTiles[] = INCBIN_U8("graphics/trade/gba_screen.4bpp"); -const u16 gUnknown_08331F60[] = INCBIN_U16("graphics/trade/shadow_map.bin"); -static const u8 gUnknown_08332F60[] = INCBIN_U8("graphics/trade/gba_affine.8bpp"); -static const u8 sFiller_08335760[64] = {}; -static const u8 gUnknown_083357A0[] = INCBIN_U8("graphics/trade/gba_affine_map_cable.bin"); -static const u8 gUnknown_083358A0[] = INCBIN_U8("graphics/trade/gba_affine_map_wireless.bin"); -static const u16 gUnknown_083359A0[] = INCBIN_U16("graphics/trade/gba_map_wireless.bin"); -static const u16 gUnknown_083369A0[] = INCBIN_U16("graphics/trade/gba_map_cable.bin"); -static const u32 gUnknown_083379A0[] = INCBIN_U32("graphics/trade/unknown_3379A0.bin.lz"); -static const u16 gUnknown_08337AA0[] = INCBIN_U16("graphics/trade/wireless_signal_send.gbapal"); -static const u16 gUnknown_08337CA0[] = INCBIN_U16("graphics/trade/wireless_signal_receive.gbapal"); -static const u16 gUnknown_08337EA0[] = INCBIN_U16("graphics/trade/black.gbapal"); -static const u32 gUnknown_08337EC0[] = INCBIN_U32("graphics/trade/wireless_signal.4bpp.lz"); -static const u32 gUnknown_08338550[] = INCBIN_U32("graphics/trade/wireless_signal.bin.lz"); - -static const struct OamData gOamData_8338C44 = -{ - .affineMode = 1, - .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16) -}; - -static const union AnimCmd gSpriteAnim_8338C4C[] = -{ - ANIMCMD_FRAME( 0, 3), - ANIMCMD_FRAME( 4, 3), - ANIMCMD_FRAME( 8, 3), - ANIMCMD_FRAME(12, 3), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(20, 3), - ANIMCMD_FRAME(24, 3), - ANIMCMD_FRAME(28, 3), - ANIMCMD_FRAME(32, 3), - ANIMCMD_FRAME(36, 3), - ANIMCMD_FRAME(40, 3), - ANIMCMD_FRAME(44, 3), - ANIMCMD_LOOP(1), - ANIMCMD_FRAME( 0, 3), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_8338C88[] = -{ - ANIMCMD_FRAME( 0, 3), - ANIMCMD_FRAME( 4, 3), - ANIMCMD_FRAME( 8, 3), - ANIMCMD_FRAME(12, 3), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(20, 3), - ANIMCMD_FRAME(24, 3), - ANIMCMD_FRAME(28, 3), - ANIMCMD_FRAME(32, 3), - ANIMCMD_FRAME(36, 3), - ANIMCMD_FRAME(40, 3), - ANIMCMD_FRAME(44, 3), - ANIMCMD_LOOP(2), - ANIMCMD_FRAME( 0, 3), - ANIMCMD_END -}; - -static const union AnimCmd *const gSpriteAnimTable_8338C88[] = -{ - gSpriteAnim_8338C4C, - gSpriteAnim_8338C88 -}; - -static const union AffineAnimCmd gSpriteAffineAnim_8338CCC[] = -{ - AFFINEANIMCMD_FRAME(0, 0, 0, 1), - AFFINEANIMCMD_END -}; +static void CB2_SaveAndEndWirelessTrade(void); -static const union AffineAnimCmd gSpriteAffineAnim_8338CDC[] = -{ - AFFINEANIMCMD_FRAME(-8, 0, 0, 20), - AFFINEANIMCMD_END -}; - -static const union AffineAnimCmd gSpriteAffineAnim_8338CEC[] = -{ - AFFINEANIMCMD_FRAME(0x60, 0x100, 0, 0), - AFFINEANIMCMD_FRAME( 0, 0, 0, 5), - AFFINEANIMCMD_FRAME( 8, 0, 0, 20), - AFFINEANIMCMD_END -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D0C[] = -{ - gSpriteAffineAnim_8338CCC, - gSpriteAffineAnim_8338CDC, - gSpriteAffineAnim_8338CEC -}; - -static const struct SpriteSheet gUnknown_08338D18 = -{ - .data = gTradeBallTiles, - .size = 0x600, - .tag = 5557 -}; - -static const struct SpritePalette gUnknown_08338D20 = -{ - .data = gTradeBallPalette, - .tag = 5558 -}; - -static const struct SpriteTemplate gSpriteTemplate_8338D28 = -{ - .tileTag = 5557, - .paletteTag = 5558, - .oam = &gOamData_8338C44, - .anims = gSpriteAnimTable_8338C88, - .images = NULL, - .affineAnims = gSpriteAffineAnimTable_8338D0C, - .callback = sub_807E55C -}; - -static const struct OamData gOamData_8338D40 = -{ - .affineMode = 1, - .objMode = 1, - .shape = SPRITE_SHAPE(32x32), - .size = SPRITE_SIZE(32x32), - .priority = 1 -}; - -static const union AnimCmd gSpriteAnim_8338D48[] = -{ - ANIMCMD_FRAME(0, 5, .hFlip = TRUE, .vFlip = TRUE), - ANIMCMD_END -}; - -static const union AnimCmd *const gSpriteAnimTable_8338D50[] = -{ - gSpriteAnim_8338D48 -}; - -static const union AffineAnimCmd gSpriteAffineAnim_8338D54[] = -{ - AFFINEANIMCMD_FRAME(-10, -10, 0, 5), - AFFINEANIMCMD_FRAME(10, 10, 0, 5), - AFFINEANIMCMD_JUMP(0) -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338D6C[] = -{ - gSpriteAffineAnim_8338D54 -}; - -static const struct SpriteSheet gUnknown_08338D70 = -{ - .data = gTradeGlow1Tiles, - .size = 0x200, - .tag = 5550 -}; - -static const struct SpritePalette gUnknown_08338D78 = -{ - .data = gUnknown_08330940, - .tag = 5551 -}; - -static const struct SpritePalette gUnknown_08338D80 = -{ - .data = gUnknown_083308E0, - .tag = 5555 -}; - -static const struct SpriteTemplate gUnknown_08338D88 = -{ - .tileTag = 5550, - .paletteTag = 5551, - .oam = &gOamData_8338D40, - .anims = gSpriteAnimTable_8338D50, - .images = NULL, - .affineAnims = gSpriteAffineAnimTable_8338D6C, - .callback = sub_807AA28 -}; - -static const struct OamData gOamData_8338DA0 = -{ - .shape = SPRITE_SHAPE(16x32), - .size = SPRITE_SIZE(16x32), - .priority = 1 -}; - -static const union AnimCmd gSpriteAnim_8338DA8[] = -{ - ANIMCMD_FRAME(0, 5, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_8338DB0[] = -{ - ANIMCMD_FRAME(8, 5, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_END -}; +#include "data/trade.h" -static const union AnimCmd *const gSpriteAnimTable_8338DB8[] = -{ - gSpriteAnim_8338DA8, - gSpriteAnim_8338DB0 -}; - -static const struct SpriteSheet gUnknown_08338DC0 = -{ - .data = gTradeGlow2Tiles, - .size = 0x300, - .tag = 5552 -}; - -static const struct SpriteTemplate gSpriteTemplate_8338DC8 = -{ - .tileTag = 5552, - .paletteTag = 5551, - .oam = &gOamData_8338DA0, - .anims = gSpriteAnimTable_8338DB8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807AA7C -}; - -static const struct OamData gOamData_8338DE0 = -{ - .shape = SPRITE_SHAPE(16x32), - .size = SPRITE_SIZE(16x32), - .priority = 1 -}; - -static const union AnimCmd gSpriteAnim_8338DE8[] = -{ - ANIMCMD_FRAME(0, 10), - ANIMCMD_END -}; - -static const union AnimCmd *const gSpriteAnimTable_8338DF0[] = -{ - gSpriteAnim_8338DE8 -}; - -static const struct SpriteSheet gUnknown_08338DF4 = -{ - .data = gTradeCableEndTiles, - .size = 0x100, - .tag = 5554 -}; - -static const struct SpriteTemplate gSpriteTemplate_8338DFC = -{ - .tileTag = 5554, - .paletteTag = 5555, - .oam = &gOamData_8338DE0, - .anims = gSpriteAnimTable_8338DF0, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807AABC -}; - -static const struct OamData gOamData_8338E14 = -{ - .shape = SPRITE_SHAPE(64x32), - .size = SPRITE_SIZE(64x32), - .priority = 1 -}; - -static const union AnimCmd gSpriteAnim_8338E1C[] = -{ - ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_LOOP(8), - ANIMCMD_END -}; - -static const union AnimCmd gSpriteAnim_8338E40[] = -{ - ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(96, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(64, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME(32, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_FRAME( 0, 2, .vFlip = TRUE, .hFlip = TRUE), - ANIMCMD_LOOP(2), - ANIMCMD_END -}; - -static const union AnimCmd *const gSpriteAnimTable_8338E64[] = -{ - gSpriteAnim_8338E1C -}; - -static const union AnimCmd *const gSpriteAnimTable_8338E68[] = -{ - gSpriteAnim_8338E40 -}; - -static const struct SpriteSheet gUnknown_08338E6C = -{ - .data = gTradeGBAScreenTiles, - .size = 0x1000, - .tag = 5556 -}; - -static const struct SpriteTemplate gSpriteTemplate_8338E74 = -{ - .tileTag = 5556, - .paletteTag = 5555, - .oam = &gOamData_8338E14, - .anims = gSpriteAnimTable_8338E64, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807AB04 -}; - -static const struct SpriteTemplate gSpriteTemplate_8338E8C = -{ - .tileTag = 5556, - .paletteTag = 5555, - .oam = &gOamData_8338E14, - .anims = gSpriteAnimTable_8338E68, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807AB04 -}; - -static const u16 gUnknown_08338EA4[] = INCBIN_U16("graphics/trade/unknown_338EA4.gbapal"); - -static const union AffineAnimCmd gSpriteAffineAnim_8338EBC[] = -{ - AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0), - AFFINEANIMCMD_JUMP(0) -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_8338ECC[] = -{ - gSpriteAffineAnim_8338EBC -}; - -static const struct InGameTrade gIngameTrades[] = -{ - { - _("DOTS"), SPECIES_SEEDOT, - 5, 4, 5, 4, 4, 4, - TRUE, 38726, - 30, 5, 5, 5, 5, - 0x84, - ITEM_CHESTO_BERRY, -1, - _("KOBE"), MALE, 10, - SPECIES_RALTS - }, { - _("PLUSES"), SPECIES_PLUSLE, - 4, 4, 4, 5, 5, 4, - FALSE, 73996, - 5, 5, 30, 5, 5, - 0x6F, - ITEM_WOOD_MAIL, 0, - _("ROMAN"), MALE, 10, - SPECIES_VOLBEAT - }, { - _("SEASOR"), - SPECIES_HORSEA, - 5, 4, 4, 4, 5, 4, - FALSE, 46285, - 5, 5, 5, 5, 30, - 0x7F, - ITEM_WAVE_MAIL, 1, - _("SKYLAR"), MALE, 10, - SPECIES_BAGON - }, { - _("MEOWOW"), - SPECIES_MEOWTH, - 4, 5, 4, 5, 4, 4, - FALSE, 91481, - 5, 5, 5, 30, 5, - 0x8B, - ITEM_RETRO_MAIL, 2, - _("ISIS"), FEMALE, 10, - SPECIES_SKITTY - } -}; - -static const u16 gIngameTradeMail[][10] = -{ - { - EC_WORD_BE, - EC_WORD_NICE, - EC_WORD_TO, - EC_POKEMON(PLUSLE), - EC_WORD_EXCL, - EC_POKEMON(VOLBEAT), - EC_WORD_WILL, - EC_WORD_BE, - EC_WORD_FANTASTIC, - 0 - }, { - EC_WORD_I, - EC_WORD_WILL, - EC_WORD_MAKE, - EC_POKEMON(BAGON), - EC_WORD_TOUGH, - EC_WORD_PLEASE, - EC_WORD_TRAIN, - EC_POKEMON(HORSEA), - EC_WORD_WELL, - 0 - }, { - EC_WORD_THANK_YOU, - EC_WORD_FOR, - EC_POKEMON(SKITTY), - EC_POKEMON2(MEOWTH), - EC_WORD_CRIES, - EC_WORD_IN, - EC_WORD_A, - EC_WORD_CUTE, - EC_WORD_WAY, - 0 - } -}; - -static const struct WindowTemplate gUnknown_08338FFC[] = -{ - { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 15, - .width = 26, - .height = 4, - .paletteNum = 0, - .baseBlock = 64 - }, - DUMMY_WIN_TEMPLATE -}; - -const struct WindowTemplate gUnknown_0833900C = -{ - .bg = 0, - .tilemapLeft = 21, - .tilemapTop = 9, - .width = 5, - .height = 4, - .paletteNum = 15, - .baseBlock = 188 -}; - -static const struct BgTemplate gUnknown_08339014[] = -{ - { - .bg = 0, - .charBaseIndex = 3, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 - }, - { - .bg = 1, - .charBaseIndex = 0, - .mapBaseIndex = 5, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, - { - .bg = 2, - .charBaseIndex = 1, - .mapBaseIndex = 18, - .screenSize = 1, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 - }, - { - .bg = 3, - .charBaseIndex = 0, - .mapBaseIndex = 6, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 - }, -}; - -static const s8 gTradeBallVerticalVelocityTable[] = -{ - 0, 0, 1, 0, - 1, 0, 1, 1, - 1, 1, 2, 2, - 2, 2, 3, 3, - 3, 3, 4, 4, - 4, 4, -4, -4, - -4, -3, -3, -3, - -3, -2, -2, -2, - -2, -1, -1, -1, - -1, 0, -1, 0, - -1, 0, 0, 0, - 0, 0, 1, 0, - 1, 0, 1, 1, - 1, 1, 2, 2, - 2, 2, 3, 3, - 3, 3, 4, 4, - 4, 4, -4, -3, - -3, -2, -2, -1, - -1, -1, 0, -1, - 0, 0, 0, 0, - 0, 0, 1, 0, - 1, 1, 1, 2, - 2, 3, 3, 4, - -4, -3, -2, -1, - -1, -1, 0, 0, - 0, 0, 1, 0, - 1, 1, 2, 3 -}; - -static const u8 gUnknown_08339090[][2] = -{ - {0, 1}, - {1, 1}, - {2, 1}, - {3, 1}, - {4, 1}, - {5, 2}, - {6, 2}, - {7, 2}, - {8, 2}, - {9, 2}, - {10, 3}, - {11, 3}, - {12, 3}, - {13, 4}, - {14, 5}, - {15, 2}, - {0, 1}, - {1, 1}, - {2, 1}, - {3, 1}, - {4, 1}, - {5, 2}, - {6, 2}, - {7, 2}, - {8, 2}, - {9, 2}, - {10, 3}, - {11, 3}, - {12, 3}, - {13, 4}, - {14, 5}, - {16, 1}, - {16, -1}, - {0, 0} -}; - -static bool8 sub_8077170(const void *a0, u32 a1) +static bool8 SendLinkData(const void *linkData, u32 size) { if (gUnknown_02022C2C == 29) { - rfu_NI_setSendData(gUnknown_03004140.unk_00, 84, a0, a1); + rfu_NI_setSendData(gUnknown_03004140.unk_00, 84, linkData, size); return TRUE; } else { - return SendBlock(0, a0, a1); + return SendBlock(0, linkData, size); } } @@ -1410,13 +255,9 @@ static bool32 sub_80771BC(void) if (gUnknown_02022C2C == 29) { if (gUnknown_03007880[sub_800E87C(gUnknown_03004140.unk_00)]->unk_0 == 0) - { return TRUE; - } else - { return FALSE; - } } else { @@ -1429,40 +270,28 @@ static u32 _GetBlockReceivedStatus(void) return GetBlockReceivedStatus(); } -static void sub_8077210(void) +static void TradeResetReceivedFlags(void) { - if (sub_8077260()) - { + if (IsWirelessTrade()) rfu_clearSlot(12, gUnknown_03004140.unk_00); - } else - { ResetBlockReceivedFlags(); - } } -static void sub_8077234(u32 a0) +static void TradeResetReceivedFlag(u32 who) { - if (sub_8077260()) - { + if (IsWirelessTrade()) rfu_clearSlot(12, gUnknown_03004140.unk_00); - } else - { - ResetBlockReceivedFlag(a0); - } + ResetBlockReceivedFlag(who); } -static bool32 sub_8077260(void) +static bool32 IsWirelessTrade(void) { if (gWirelessCommType && gUnknown_02022C2C == 29) - { return TRUE; - } else - { return FALSE; - } } static void sub_8077288(u8 unused) @@ -1475,7 +304,7 @@ static bool32 _IsLinkTaskFinished(void) return IsLinkTaskFinished(); } -static void sub_80772A4(void) +static void InitTradeMenu(void) { ResetSpriteData(); FreeAllSpritePalettes(); @@ -1484,14 +313,14 @@ static void sub_80772A4(void) gPaletteFade.bufferTransferDisabled = TRUE; - SetVBlankCallback(sub_807811C); + SetVBlankCallback(VBlankCB_TradeMenu); LoadPalette(gUnknown_0860F074, 0xF0, 20); LoadPalette(gUnknown_0860F074, 0xD0, 20); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_0832DEE4, ARRAY_COUNT(gUnknown_0832DEE4)); - SetBgTilemapBuffer(1, gUnknown_0203229C->tilemapBuffer); + InitBgsFromTemplates(0, sTradeMenuBgTemplates, ARRAY_COUNT(sTradeMenuBgTemplates)); + SetBgTilemapBuffer(1, sTradeMenuData->tilemapBuffer); - if (InitWindows(gUnknown_0832DEF4)) + if (InitWindows(sTradeMenuWindowTemplates)) { u32 i; @@ -1507,25 +336,25 @@ static void sub_80772A4(void) LoadUserWindowBorderGfx_(0, 20, 0xC0); LoadUserWindowBorderGfx(2, 1, 0xE0); LoadMonIconPalettes(); - gUnknown_0203229C->unk_69 = 0; - gUnknown_0203229C->unk_6F = 0; - gUnknown_0203229C->unk_70 = 0; - gUnknown_0203229C->unk_74[0] = 0; - gUnknown_0203229C->unk_74[1] = 0; - gUnknown_0203229C->unk_7A = 0; - gUnknown_0203229C->unk_7B = 0; - gUnknown_0203229C->unk_A8 = 0; + sTradeMenuData->bufferPartyState = 0; + sTradeMenuData->tradeMenuFunc = 0; + sTradeMenuData->neverRead_70 = 0; + sTradeMenuData->drawPartyState[TRADE_PLAYER] = 0; + sTradeMenuData->drawPartyState[TRADE_PARTNER] = 0; + sTradeMenuData->playerLinkFlagStatus = 0; + sTradeMenuData->partnerLinkFlagStatus = 0; + sTradeMenuData->timer = 0; } } -void sub_80773AC(void) +void CB2_StartCreateTradeMenu(void) { - SetMainCallback2(sub_80773D0); + SetMainCallback2(CB2_CreateTradeMenu); gMain.callback1 = NULL; gEnemyPartyCount = 0; } -static void sub_80773D0(void) +static void CB2_CreateTradeMenu(void) { int i; struct SpriteTemplate temp; @@ -1535,13 +364,13 @@ static void sub_80773D0(void) switch (gMain.state) { case 0: - gUnknown_0203229C = AllocZeroed(sizeof(*gUnknown_0203229C)); - sub_80772A4(); - gUnknown_02032184 = AllocZeroed(0xE00); + sTradeMenuData = AllocZeroed(sizeof(*sTradeMenuData)); + InitTradeMenu(); + sMessageBoxAllocBuffer = AllocZeroed(ARRAY_COUNT(sMessageBoxTileBuffers) * 256); - for (i = 0; i < 14; i++) + for (i = 0; i < (int)ARRAY_COUNT(sMessageBoxTileBuffers); i++) { - gUnknown_02032188[i] = &gUnknown_02032184[i * 256]; + sMessageBoxTileBuffers[i] = &sMessageBoxAllocBuffer[i * 256]; } gMain.state++; @@ -1551,16 +380,16 @@ static void sub_80773D0(void) for (i = 0; i < PARTY_SIZE; i++) { - CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 0x20, FALSE, 0, OT_ID_PLAYER_ID, 0); + CreateMon(&gEnemyParty[i], SPECIES_NONE, 0, 32, FALSE, 0, OT_ID_PLAYER_ID, 0); } - sub_807A19C(0); + PrintTradeMessage(TRADE_MSG_STANDBY); ShowBg(0); if (!gReceivedRemoteLinkPlayers) { - gLinkType = 0x1122; - gUnknown_0203229C->unk_A8 = 0; + gLinkType = LINKTYPE_0x1122; + sTradeMenuData->timer = 0; if (gWirelessCommType) { @@ -1581,10 +410,10 @@ static void sub_80773D0(void) } break; case 2: - gUnknown_0203229C->unk_A8++; - if (gUnknown_0203229C->unk_A8 > 11) + sTradeMenuData->timer++; + if (sTradeMenuData->timer > 11) { - gUnknown_0203229C->unk_A8 = 0; + sTradeMenuData->timer = 0; gMain.state++; } break; @@ -1593,7 +422,7 @@ static void sub_80773D0(void) { if (IsLinkMaster()) { - if (++gUnknown_0203229C->unk_A8 > 30) + if (++sTradeMenuData->timer > 30) { CheckShouldAdvanceLinkState(); gMain.state++; @@ -1611,7 +440,7 @@ static void sub_80773D0(void) sub_8011BD0(); CalculatePlayerPartyCount(); gMain.state++; - gUnknown_0203229C->unk_A8 = 0; + sTradeMenuData->timer = 0; if (gWirelessCommType) { sub_801048C(TRUE); @@ -1622,7 +451,7 @@ static void sub_80773D0(void) case 5: if (gWirelessCommType) { - if (sub_8010500()) + if (IsLinkRfuTaskFinished()) { gMain.state++; LoadWirelessStatusIndicatorSpriteGfx(); @@ -1635,9 +464,9 @@ static void sub_80773D0(void) } break; case 6: - if (shedinja_maker_maybe()) + if (BufferTradeParties()) { - sub_807A5B0(); + SaveTradeGiftRibbons(); gMain.state++; } break; @@ -1645,28 +474,28 @@ static void sub_80773D0(void) CalculateEnemyPartyCount(); SetGpuReg(REG_OFFSET_DISPCNT, 0); SetGpuReg(REG_OFFSET_BLDCNT, 0); - gUnknown_0203229C->partyCounts[0] = gPlayerPartyCount; - gUnknown_0203229C->partyCounts[1] = gEnemyPartyCount; + sTradeMenuData->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; + sTradeMenuData->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; - for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - gUnknown_0203229C->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), - sub_80D3014, - (gTradeMonSpriteCoords[i][0] * 8) + 14, - (gTradeMonSpriteCoords[i][1] * 8) - 12, + sTradeMenuData->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2), + SpriteCB_MonIcon, + (sTradeMonSpriteCoords[i][0] * 8) + 14, + (sTradeMonSpriteCoords[i][1] * 8) - 12, 1, GetMonData(mon, MON_DATA_PERSONALITY), TRUE); } - for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - gUnknown_0203229C->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), - sub_80D3014, - (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, - (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, + sTradeMenuData->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + SpriteCB_MonIcon, + (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, + (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, 1, GetMonData(mon, MON_DATA_PERSONALITY), FALSE); @@ -1675,24 +504,24 @@ static void sub_80773D0(void) break; case 8: LoadHeldItemIcons(); - sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 0); + DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PLAYER); gMain.state++; break; case 9: - sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 1); + DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PARTNER); gMain.state++; break; case 10: - sub_80C6D80(gSaveBlock2Ptr->playerName, gUnknown_02032188[0], 0, 0, 3); + DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMessageBoxTileBuffers[0], 0, 0, 3); id = GetMultiplayerId(); - sub_80C6D80(gLinkPlayers[id ^ 1].name, gUnknown_02032188[3], 0, 0, 3); - sub_80C6D80(gUnknown_0832DE94[0], gUnknown_02032188[6], 0, 0, 2); - sub_807A308(gUnknown_0832DE94[1], gUnknown_02032188[8], 24); + DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMessageBoxTileBuffers[3], 0, 0, 3); + DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMessageBoxTileBuffers[6], 0, 0, 2); + DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMessageBoxTileBuffers[8], 24); gMain.state++; - gUnknown_0203229C->unk_A8 = 0; + sTradeMenuData->timer = 0; break; case 11: - if (sub_807A1F0()) + if (LoadTradeMenuSpriteSheetsAndPalettes()) gMain.state++; break; case 12: @@ -1728,31 +557,31 @@ static void sub_80773D0(void) CreateSprite(&temp, (i * 32) + 24, 150, 1); } - gUnknown_0203229C->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, gTradeMonSpriteCoords[0][0] * 8 + 32, gTradeMonSpriteCoords[0][1] * 8, 2); - gUnknown_0203229C->tradeMenuCursorPosition = 0; + sTradeMenuData->cursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, sTradeMonSpriteCoords[0][0] * 8 + 32, sTradeMonSpriteCoords[0][1] * 8, 2); + sTradeMenuData->cursorPosition = 0; gMain.state++; rbox_fill_rectangle(0); break; case 14: - sub_807A320(0); - sub_8079BE0(0); - gUnknown_0203229C->unk_0 = 0; - gUnknown_0203229C->unk_1 = 0; - sub_8078388(); + SetTradePartyLiveStatuses(TRADE_PLAYER); + PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); + sTradeMenuData->bg2hofs = 0; + sTradeMenuData->bg3hofs = 0; + SetTradePartyMonsVisible(); gMain.state++; PlayBGM(MUS_P_SCHOOL); break; case 15: - sub_807A320(1); - sub_8079BE0(1); + SetTradePartyLiveStatuses(TRADE_PARTNER); + PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); gMain.state++; // fallthrough case 16: - sub_80782B8(0); + LoadTradeBgGfx(0); gMain.state++; break; case 17: - sub_80782B8(1); + LoadTradeBgGfx(1); gMain.state++; break; case 18: @@ -1761,23 +590,23 @@ static void sub_80773D0(void) break; case 19: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); - sub_80782B8(2); + LoadTradeBgGfx(2); gMain.state++; break; case 20: - sub_807A468(0); + GetTradePartyHPBarLevels(TRADE_PLAYER); gMain.state++; break; case 21: - sub_807A468(1); - sub_807A53C(); + GetTradePartyHPBarLevels(TRADE_PARTNER); + SetTradePartyHPBarSprites(); gMain.state++; break; case 22: if (!gPaletteFade.active) { - gMain.callback1 = sub_8078C34; - SetMainCallback2(sub_807825C); + gMain.callback1 = CB1_SendOrReactToLinkTradeData; + SetMainCallback2(CB2_TradeMenu); } break; } @@ -1789,7 +618,7 @@ static void sub_80773D0(void) UpdatePaletteFade(); } -static void sub_8077B74(void) +static void CB2_ReturnToTradeMenu(void) { int i; struct SpriteTemplate temp; @@ -1799,12 +628,12 @@ static void sub_8077B74(void) switch (gMain.state) { case 0: - sub_80772A4(); + InitTradeMenu(); gMain.state++; break; case 1: gMain.state++; - gUnknown_0203229C->unk_A8 = 0; + sTradeMenuData->timer = 0; break; case 2: gMain.state++; @@ -1829,31 +658,31 @@ static void sub_8077B74(void) break; case 7: CalculateEnemyPartyCount(); - gUnknown_0203229C->partyCounts[0] = gPlayerPartyCount; - gUnknown_0203229C->partyCounts[1] = gEnemyPartyCount; + sTradeMenuData->partyCounts[TRADE_PLAYER] = gPlayerPartyCount; + sTradeMenuData->partyCounts[TRADE_PARTNER] = gEnemyPartyCount; ClearWindowTilemap(0); - sub_8079BE0(0); - sub_8079BE0(1); + PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); + PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); - for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) { struct Pokemon *mon = &gPlayerParty[i]; - gUnknown_0203229C->partyIcons[0][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), - sub_80D3014, - (gTradeMonSpriteCoords[i][0] * 8) + 14, - (gTradeMonSpriteCoords[i][1] * 8) - 12, + sTradeMenuData->partySpriteIds[TRADE_PLAYER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + SpriteCB_MonIcon, + (sTradeMonSpriteCoords[i][0] * 8) + 14, + (sTradeMonSpriteCoords[i][1] * 8) - 12, 1, GetMonData(mon, MON_DATA_PERSONALITY), TRUE); } - for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) { struct Pokemon *mon = &gEnemyParty[i]; - gUnknown_0203229C->partyIcons[1][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), - sub_80D3014, - (gTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, - (gTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, + sTradeMenuData->partySpriteIds[TRADE_PARTNER][i] = CreateMonIcon(GetMonData(mon, MON_DATA_SPECIES2, NULL), + SpriteCB_MonIcon, + (sTradeMonSpriteCoords[i + PARTY_SIZE][0] * 8) + 14, + (sTradeMonSpriteCoords[i + PARTY_SIZE][1] * 8) - 12, 1, GetMonData(mon, MON_DATA_PERSONALITY), FALSE); @@ -1862,24 +691,24 @@ static void sub_8077B74(void) break; case 8: LoadHeldItemIcons(); - sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 0); + DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PLAYER); gMain.state++; break; case 9: - sub_81B5D4C(&gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->partyIcons[0], 1); + DrawHeldItemIconsForTrade(&sTradeMenuData->partyCounts[0], sTradeMenuData->partySpriteIds[0], TRADE_PARTNER); gMain.state++; break; case 10: - sub_80C6D80(gSaveBlock2Ptr->playerName, gUnknown_02032188[0], 0, 0, 3); + DrawTextWindowAndBufferTiles(gSaveBlock2Ptr->playerName, sMessageBoxTileBuffers[0], 0, 0, 3); id = GetMultiplayerId(); - sub_80C6D80(gLinkPlayers[id ^ 1].name, gUnknown_02032188[3], 0, 0, 3); - sub_80C6D80(gUnknown_0832DE94[0], gUnknown_02032188[6], 0, 0, 2); - sub_807A308(gUnknown_0832DE94[1], gUnknown_02032188[8], 24); + DrawTextWindowAndBufferTiles(gLinkPlayers[id ^ 1].name, sMessageBoxTileBuffers[3], 0, 0, 3); + DrawTextWindowAndBufferTiles(sTradeActionTexts[TRADE_TEXT_CANCEL], sMessageBoxTileBuffers[6], 0, 0, 2); + DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], sMessageBoxTileBuffers[8], 24); gMain.state++; - gUnknown_0203229C->unk_A8 = 0; + sTradeMenuData->timer = 0; break; case 11: - if (sub_807A1F0()) + if (LoadTradeMenuSpriteSheetsAndPalettes()) gMain.state++; break; case 12: @@ -1915,23 +744,23 @@ static void sub_8077B74(void) CreateSprite(&temp, (i * 32) + 24, 150, 1); } - if (gUnknown_0203229C->tradeMenuCursorPosition < PARTY_SIZE) - gUnknown_0203229C->tradeMenuCursorPosition = gLastViewedMonIndex; + if (sTradeMenuData->cursorPosition < PARTY_SIZE) + sTradeMenuData->cursorPosition = gLastViewedMonIndex; else - gUnknown_0203229C->tradeMenuCursorPosition = gLastViewedMonIndex + PARTY_SIZE; + sTradeMenuData->cursorPosition = gLastViewedMonIndex + PARTY_SIZE; - gUnknown_0203229C->tradeMenuCursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, gTradeMonSpriteCoords[gUnknown_0203229C->tradeMenuCursorPosition][0] * 8 + 32, gTradeMonSpriteCoords[gUnknown_0203229C->tradeMenuCursorPosition][1] * 8, 2); + sTradeMenuData->cursorSpriteIdx = CreateSprite(&gSpriteTemplate_832DC94, sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][0] * 8 + 32, sTradeMonSpriteCoords[sTradeMenuData->cursorPosition][1] * 8, 2); gMain.state = 16; break; case 16: - sub_80782B8(0); + LoadTradeBgGfx(0); gMain.state++; break; case 17: - sub_80782B8(1); - gUnknown_0203229C->unk_0 = 0; - gUnknown_0203229C->unk_1 = 0; - sub_8078388(); + LoadTradeBgGfx(1); + sTradeMenuData->bg2hofs = 0; + sTradeMenuData->bg3hofs = 0; + SetTradePartyMonsVisible(); gMain.state++; break; case 18: @@ -1942,20 +771,20 @@ static void sub_8077B74(void) break; case 19: SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); - sub_80782B8(2); + LoadTradeBgGfx(2); gMain.state++; break; case 20: gMain.state++; break; case 21: - sub_807A53C(); + SetTradePartyHPBarSprites(); gMain.state++; break; case 22: if (!gPaletteFade.active) { - SetMainCallback2(sub_807825C); + SetMainCallback2(CB2_TradeMenu); } break; } @@ -1966,81 +795,81 @@ static void sub_8077B74(void) UpdatePaletteFade(); } -static void sub_807811C(void) +static void VBlankCB_TradeMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void sub_8078130(void) +static void LinkTradeFadeOut(void) { - if (++gUnknown_0203229C->unk_A8 > 15) + if (++sTradeMenuData->timer > 15) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_0203229C->unk_6F = 10; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_FADE; } } -static void sub_807816C(void) +static void LinkTradeWaitForFade(void) { if (!gPaletteFade.active) { - gUnknown_02032298[0] = gUnknown_0203229C->tradeMenuCursorPosition; - gUnknown_02032298[1] = gUnknown_0203229C->unk_7E; + gSelectedTradeMonPositions[TRADE_PLAYER] = sTradeMenuData->cursorPosition; + gSelectedTradeMonPositions[TRADE_PARTNER] = sTradeMenuData->partnerCursorPosition; if (gWirelessCommType) { - gUnknown_0203229C->unk_6F = 16; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE; } else { sub_800ABF4(32); - gUnknown_0203229C->unk_6F = 13; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; } } } -static void sub_80781C8(void) +static void SetLinkTradeCallbacks(void) { - gMain.savedCallback = sub_80773AC; + gMain.savedCallback = CB2_StartCreateTradeMenu; + // Wireless Link Trade if (gWirelessCommType) { - if (sub_8010500()) + if (IsLinkRfuTaskFinished()) { - Free(gUnknown_02032184); + Free(sMessageBoxAllocBuffer); FreeAllWindowBuffers(); - Free(gUnknown_0203229C); + Free(sTradeMenuData); gMain.callback1 = NULL; DestroyWirelessStatusIndicatorSprite(); - SetMainCallback2(sub_807AE50); + SetMainCallback2(CB2_LinkTrade); } } + // Cable Link Trade else { if (!gReceivedRemoteLinkPlayers) { - Free(gUnknown_02032184); + Free(sMessageBoxAllocBuffer); FreeAllWindowBuffers(); - Free(gUnknown_0203229C); + Free(sTradeMenuData); gMain.callback1 = NULL; - SetMainCallback2(sub_807AE50); + SetMainCallback2(CB2_LinkTrade); } } } -static void sub_807825C(void) +static void CB2_TradeMenu(void) { - u8 temp; - - sub_80795AC(); - sub_807A0C4(); - sub_80796B4(0); - sub_80796B4(1); + CallTradeMenuFunc(); + DoQueuedActions(); + DrawTradeMenuParty(TRADE_PLAYER); + DrawTradeMenuParty(TRADE_PARTNER); - SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_0203229C->unk_0++); - SetGpuReg(REG_OFFSET_BG3HOFS, gUnknown_0203229C->unk_1--); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeMenuData->bg2hofs++); + SetGpuReg(REG_OFFSET_BG3HOFS, sTradeMenuData->bg3hofs--); RunTextPrintersAndIsPrinter0Active(); RunTasks(); @@ -2049,22 +878,22 @@ static void sub_807825C(void) UpdatePaletteFade(); } -static void sub_80782B8(u8 a0) +static void LoadTradeBgGfx(u8 state) { int i; - switch (a0) + switch (state) { case 0: - LoadPalette(gUnknown_08DDB3E4, 0, 0x60); - LoadBgTiles(1, gUnknown_08DDB464, 0x1280, 0); + LoadPalette(gTradeMenu_Pal, 0, 0x60); + LoadBgTiles(1, gTradeMenu_Gfx, 0x1280, 0); CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DDCF04, 0, 0, 32, 20, 0); - LoadBgTilemap(2, gTradeStripesBG2Tilemap, 0x800, 0); + LoadBgTilemap(2, sTradeStripesBG2Tilemap, 0x800, 0); break; case 1: - LoadBgTilemap(3, gTradeStripesBG3Tilemap, 0x800, 0); - sub_8079E44(0); - sub_8079E44(1); + LoadBgTilemap(3, sTradeStripesBG3Tilemap, 0x800, 0); + DrawTradeMenuPartyInfo(TRADE_PLAYER); + DrawTradeMenuPartyInfo(TRADE_PARTNER); CopyBgTilemapBufferToVram(1); break; case 2: @@ -2080,34 +909,34 @@ static void sub_80782B8(u8 a0) } } -static void sub_8078388(void) +static void SetTradePartyMonsVisible(void) { int i; for (i = 0; i < PARTY_SIZE; i++) { - if (i < gUnknown_0203229C->partyCounts[0]) + if (i < sTradeMenuData->partyCounts[TRADE_PLAYER]) { - gSprites[gUnknown_0203229C->partyIcons[0][i]].invisible = FALSE; - gUnknown_0203229C->tradeMenuOptionsActive[i] = TRUE; + gSprites[sTradeMenuData->partySpriteIds[TRADE_PLAYER][i]].invisible = FALSE; + sTradeMenuData->monPresent[i] = TRUE; } else { - gUnknown_0203229C->tradeMenuOptionsActive[i] = FALSE; + sTradeMenuData->monPresent[i] = FALSE; } - if (i < gUnknown_0203229C->partyCounts[1]) + if (i < sTradeMenuData->partyCounts[TRADE_PARTNER]) { - gSprites[gUnknown_0203229C->partyIcons[1][i]].invisible = FALSE; - gUnknown_0203229C->tradeMenuOptionsActive[i + PARTY_SIZE] = TRUE; + gSprites[sTradeMenuData->partySpriteIds[TRADE_PARTNER][i]].invisible = FALSE; + sTradeMenuData->monPresent[i + PARTY_SIZE] = TRUE; } else { - gUnknown_0203229C->tradeMenuOptionsActive[i + PARTY_SIZE] = FALSE; + sTradeMenuData->monPresent[i + PARTY_SIZE] = FALSE; } } - gUnknown_0203229C->unk_44 = 1; + sTradeMenuData->neverRead_44 = TRUE; } // why not just use memcpy? @@ -2123,30 +952,30 @@ static void Trade_Memcpy(void *dataDest, const void *dataSrc, u32 count) } } -static bool8 shedinja_maker_maybe(void) +static bool8 BufferTradeParties(void) { u8 id = GetMultiplayerId(); int i; struct Pokemon *mon; - switch (gUnknown_0203229C->unk_69) + switch (sTradeMenuData->bufferPartyState) { case 0: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[0], 2 * sizeof(struct Pokemon)); - gUnknown_0203229C->unk_69++; - gUnknown_0203229C->unk_A8 = 0; + sTradeMenuData->bufferPartyState++; + sTradeMenuData->timer = 0; break; case 1: if (sub_80771BC()) { if (_GetBlockReceivedStatus() == 0) { - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; } else { - sub_8077210(); - gUnknown_0203229C->unk_69++; + TradeResetReceivedFlags(); + sTradeMenuData->bufferPartyState++; } } break; @@ -2155,90 +984,90 @@ static bool8 shedinja_maker_maybe(void) { sub_80771AC(1); } - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; break; case 4: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[0], gBlockRecvBuffer[id ^ 1], 2 * sizeof(struct Pokemon)); - sub_8077210(); - gUnknown_0203229C->unk_69++; + TradeResetReceivedFlags(); + sTradeMenuData->bufferPartyState++; } break; case 5: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[2], 2 * sizeof(struct Pokemon)); - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; break; case 7: if (id == 0) { sub_80771AC(1); } - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; break; case 8: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[2], gBlockRecvBuffer[id ^ 1], 200); - sub_8077210(); - gUnknown_0203229C->unk_69++; + TradeResetReceivedFlags(); + sTradeMenuData->bufferPartyState++; } break; case 9: Trade_Memcpy(gBlockSendBuffer, &gPlayerParty[4], 200); - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; break; case 11: if (id == 0) { sub_80771AC(1); } - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; break; case 12: if (_GetBlockReceivedStatus() == 3) { Trade_Memcpy(&gEnemyParty[4], gBlockRecvBuffer[id ^ 1], 200); - sub_8077210(); - gUnknown_0203229C->unk_69++; + TradeResetReceivedFlags(); + sTradeMenuData->bufferPartyState++; } break; case 13: Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, 220); - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; break; case 15: if (id == 0) { sub_80771AC(3); } - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; break; case 16: if (_GetBlockReceivedStatus() == 3) { - Trade_Memcpy(gUnknown_020321C0, gBlockRecvBuffer[id ^ 1], 216); - sub_8077210(); - gUnknown_0203229C->unk_69++; + Trade_Memcpy(gTradeMail, gBlockRecvBuffer[id ^ 1], 216); + TradeResetReceivedFlags(); + sTradeMenuData->bufferPartyState++; } break; case 17: - Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, 11); - gUnknown_0203229C->unk_69++; + Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->giftRibbons, ARRAY_COUNT(sTradeMenuData->giftRibbons)); + sTradeMenuData->bufferPartyState++; break; case 19: if (id == 0) { sub_80771AC(4); } - gUnknown_0203229C->unk_69++; + sTradeMenuData->bufferPartyState++; break; case 20: if (_GetBlockReceivedStatus() == 3) { - Trade_Memcpy(gUnknown_0203229C->unk_A9, gBlockRecvBuffer[id ^ 1], 11); - sub_8077210(); - gUnknown_0203229C->unk_69++; + Trade_Memcpy(sTradeMenuData->giftRibbons, gBlockRecvBuffer[id ^ 1], ARRAY_COUNT(sTradeMenuData->giftRibbons)); + TradeResetReceivedFlags(); + sTradeMenuData->bufferPartyState++; } break; case 21: @@ -2253,7 +1082,7 @@ static bool8 shedinja_maker_maybe(void) { GetMonData(mon, MON_DATA_NICKNAME, name); - if (!StringCompareWithoutExtCtrlCodes(name, gJPText_Shedinja)) + if (!StringCompareWithoutExtCtrlCodes(name, sJPText_Shedinja)) { SetMonData(mon, MON_DATA_NICKNAME, gSpeciesNames[SPECIES_SHEDINJA]); } @@ -2261,189 +1090,198 @@ static bool8 shedinja_maker_maybe(void) } } return TRUE; + // Delay until next state case 2: case 6: case 10: case 14: case 18: - gUnknown_0203229C->unk_A8++; - if (gUnknown_0203229C->unk_A8 > 10) + sTradeMenuData->timer++; + if (sTradeMenuData->timer > 10) { - gUnknown_0203229C->unk_A8 = 0; - gUnknown_0203229C->unk_69++; + sTradeMenuData->timer = 0; + sTradeMenuData->bufferPartyState++; } break; } return FALSE; } -static void sub_80787B8(void) +static void PrintAndBufferIsThisTradeOkay(void) { - sub_807A308(gText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (gUnknown_0203229C->unk_72 * 32)), 24); + DrawTextWindowAndBuffer6Bytes(sText_IsThisTradeOkay, (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24); } -static void sub_80787E0(u8 a0, u8 a1) +// mpId is unused +static void UpdateLinkTradeFlags(u8 mpId, u8 status) { - if (a1 & 1) + if (status & 1) { switch (gBlockRecvBuffer[0][0]) { - case 0xEEAA: - gUnknown_0203229C->unk_78 = 2; + case LINKCMD_REQUEST_CANCEL: + sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_CANCEL; break; - case 0xAABB: - gUnknown_0203229C->unk_78 = 1; + case LINKCMD_READY_TO_TRADE: + sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_TRADE; break; - case 0xBBBB: - gUnknown_0203229C->unk_7A = 1; + case LINKCMD_INIT_BLOCK: + sTradeMenuData->playerLinkFlagStatus = INITIATE_TRADE; break; - case 0xBBCC: - gUnknown_0203229C->unk_7A = 2; + case LINKCMD_READY_CANCEL_TRADE: + sTradeMenuData->playerLinkFlagStatus = CANCEL_TRADE; break; } - sub_8077234(0); + TradeResetReceivedFlag(0); } - if (a1 & 2) + if (status & 2) { switch (gBlockRecvBuffer[1][0]) { - case 0xEEAA: - gUnknown_0203229C->unk_79 = 2; + case LINKCMD_REQUEST_CANCEL: + sTradeMenuData->partnerLinkFlagChoseAction = WANTS_TO_CANCEL; break; - case 0xAABB: - gUnknown_0203229C->unk_7E = gBlockRecvBuffer[1][1] + 6; - gUnknown_0203229C->unk_79 = 1; + case LINKCMD_READY_TO_TRADE: + sTradeMenuData->partnerCursorPosition = gBlockRecvBuffer[1][1] + 6; + sTradeMenuData->partnerLinkFlagChoseAction = WANTS_TO_TRADE; break; - case 0xBBBB: - gUnknown_0203229C->unk_7B = 1; + case LINKCMD_INIT_BLOCK: + sTradeMenuData->partnerLinkFlagStatus = INITIATE_TRADE; break; - case 0xBBCC: - gUnknown_0203229C->unk_7B = 2; + case LINKCMD_READY_CANCEL_TRADE: + sTradeMenuData->partnerLinkFlagStatus = CANCEL_TRADE; break; } - sub_8077234(1); + TradeResetReceivedFlag(1); } } -static void sub_8078900(u8 a0, u8 a1) +// mpId is unused +static void ReactToLinkTradeData(u8 mpId, u8 status) { - if (a1 & 1) + if (status & 1) { switch (gBlockRecvBuffer[0][0]) { - case 0xEEBB: + case LINKCMD_CANCEL_TRADE: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - sub_807A19C(4); - gUnknown_0203229C->unk_6F = 11; + PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_1; break; - case 0xEECC: - sub_807A19C(5); - gUnknown_0203229C->unk_6F = 8; + case LINKCMD_0xEECC: + PrintTradeMessage(TRADE_MSG_FRIEND_WANTS_TO_TRADE); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; break; - case 0xDDDD: - gUnknown_0203229C->unk_7E = gBlockRecvBuffer[0][1] + 6; + case LINKCMD_SET_MONS_TO_TRADE: + sTradeMenuData->partnerCursorPosition = gBlockRecvBuffer[0][1] + 6; rbox_fill_rectangle(0); - sub_807967C(gUnknown_0203229C->tradeMenuCursorPosition); - sub_807967C(gUnknown_0203229C->unk_7E); - gUnknown_0203229C->unk_6F = 7; + SetSelectedMon(sTradeMenuData->cursorPosition); + SetSelectedMon(sTradeMenuData->partnerCursorPosition); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_TRADE_PROMPT; break; - case 0xCCDD: + case LINKCMD_START_TRADE: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_0203229C->unk_6F = 10; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_WAIT_FADE; break; - case 0xDDEE: - sub_807A19C(1); - gUnknown_0203229C->unk_6F = 8; + case LINKCMD_0xDDEE: + PrintTradeMessage(TRADE_MSG_CANCELED); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; } - sub_8077234(0); + TradeResetReceivedFlag(0); } - if (a1 & 2) - sub_8077234(1); + if (status & 2) + TradeResetReceivedFlag(1); } -static void sub_80789FC(void) +static void QueueLinkTradeData(void) { - if (gUnknown_0203229C->unk_78 && gUnknown_0203229C->unk_79) + if (sTradeMenuData->playerLinkFlagChoseAction && sTradeMenuData->partnerLinkFlagChoseAction) { - if (gUnknown_0203229C->unk_78 == 1 && gUnknown_0203229C->unk_79 == 1) + if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_TRADE + && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_TRADE) { - gUnknown_0203229C->unk_6F = 6; - gUnknown_0203229C->linkData[0] = 0xDDDD; - gUnknown_0203229C->linkData[1] = gUnknown_0203229C->tradeMenuCursorPosition; - sub_807A048(5, 0); - gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_BOTH_MONS_SELECTED; + sTradeMenuData->linkData[0] = LINKCMD_SET_MONS_TO_TRADE; + sTradeMenuData->linkData[1] = sTradeMenuData->cursorPosition; + QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); + sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; } - else if (gUnknown_0203229C->unk_78 == 1 && gUnknown_0203229C->unk_79 == 2) + else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_TRADE + && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_CANCEL) { - sub_807A19C(1); - gUnknown_0203229C->linkData[0] = 0xEECC; - gUnknown_0203229C->linkData[1] = 0; - sub_807A048(5, 0); - gUnknown_0203229C->unk_7A = gUnknown_0203229C->unk_7B = 0; - gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0; - gUnknown_0203229C->unk_6F = 8; + PrintTradeMessage(TRADE_MSG_CANCELED); + sTradeMenuData->linkData[0] = LINKCMD_0xEECC; + sTradeMenuData->linkData[1] = 0; + QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); + sTradeMenuData->playerLinkFlagStatus = sTradeMenuData->partnerLinkFlagStatus = 0; + sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; } - else if (gUnknown_0203229C->unk_78 == 2 && gUnknown_0203229C->unk_79 == 1) + else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_CANCEL + && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_TRADE) { - sub_807A19C(5); - gUnknown_0203229C->linkData[0] = 0xDDEE; - gUnknown_0203229C->linkData[1] = 0; - sub_807A048(5, 0); - gUnknown_0203229C->unk_7A = gUnknown_0203229C->unk_7B = 0; - gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0; - gUnknown_0203229C->unk_6F = 8; + PrintTradeMessage(TRADE_MSG_FRIEND_WANTS_TO_TRADE); + sTradeMenuData->linkData[0] = LINKCMD_0xDDEE; + sTradeMenuData->linkData[1] = 0; + QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); + sTradeMenuData->playerLinkFlagStatus = sTradeMenuData->partnerLinkFlagStatus = 0; + sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; } - else if (gUnknown_0203229C->unk_78 == 2 && gUnknown_0203229C->unk_79 == 2) + else if (sTradeMenuData->playerLinkFlagChoseAction == WANTS_TO_CANCEL + && sTradeMenuData->partnerLinkFlagChoseAction == WANTS_TO_CANCEL) { - gUnknown_0203229C->linkData[0] = 0xEEBB; - gUnknown_0203229C->linkData[1] = 0; - sub_807A048(5, 0); + sTradeMenuData->linkData[0] = LINKCMD_CANCEL_TRADE; + sTradeMenuData->linkData[1] = 0; + QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_0203229C->unk_78 = gUnknown_0203229C->unk_79 = 0; - gUnknown_0203229C->unk_6F = 11; + sTradeMenuData->playerLinkFlagChoseAction = sTradeMenuData->partnerLinkFlagChoseAction = 0; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_1; } } - if (gUnknown_0203229C->unk_7A && gUnknown_0203229C->unk_7B) + if (sTradeMenuData->playerLinkFlagStatus && sTradeMenuData->partnerLinkFlagStatus) { - if (gUnknown_0203229C->unk_7A == 1 && gUnknown_0203229C->unk_7B == 1) + if (sTradeMenuData->playerLinkFlagStatus == INITIATE_TRADE + && sTradeMenuData->partnerLinkFlagStatus == INITIATE_TRADE) { - gUnknown_0203229C->linkData[0] = 0xCCDD; - gUnknown_0203229C->linkData[1] = 0; - sub_807A048(5, 0); - gUnknown_0203229C->unk_7A = 0; - gUnknown_0203229C->unk_7B = 0; - gUnknown_0203229C->unk_6F = 9; + sTradeMenuData->linkData[0] = LINKCMD_START_TRADE; + sTradeMenuData->linkData[1] = 0; + QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); + sTradeMenuData->playerLinkFlagStatus = 0; + sTradeMenuData->partnerLinkFlagStatus = 0; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_LINK_TRADE_FADE_OUT; } - if (gUnknown_0203229C->unk_7A == 2 || gUnknown_0203229C->unk_7B == 2) + if (sTradeMenuData->playerLinkFlagStatus == CANCEL_TRADE + || sTradeMenuData->partnerLinkFlagStatus == CANCEL_TRADE) { - sub_807A19C(1); - gUnknown_0203229C->linkData[0] = 0xDDEE; - gUnknown_0203229C->linkData[1] = 0; - sub_807A048(5, 0); - gUnknown_0203229C->unk_7A = 0; - gUnknown_0203229C->unk_7B = 0; - gUnknown_0203229C->unk_6F = 8; + PrintTradeMessage(TRADE_MSG_CANCELED); + sTradeMenuData->linkData[0] = LINKCMD_0xDDEE; + sTradeMenuData->linkData[1] = 0; + QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); + sTradeMenuData->playerLinkFlagStatus = 0; + sTradeMenuData->partnerLinkFlagStatus = 0; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; } } } -static void sub_8078BFC(u16 *a0, u16 a1, u16 a2) +static void _SetLinkData(u16 *linkData, u16 linkCmd, u16 cursorPosition) { - a0[0] = a1; - a0[1] = a2; - sub_807A048(5, 0); + linkData[0] = linkCmd; + linkData[1] = cursorPosition; + QueueAction(QUEUE_DELAY_DATA, QUEUE_SEND_DATA); } -static void sub_8078C10(u16 a0, u16 a1) +static void SetLinkData(u16 linkCmd, u16 cursorPosition) { - sub_8078BFC(gUnknown_0203229C->linkData, a0, a1); + _SetLinkData(sTradeMenuData->linkData, linkCmd, cursorPosition); } -static void sub_8078C34(void) +static void CB1_SendOrReactToLinkTradeData(void) { u8 mpId = GetMultiplayerId(); u8 status; @@ -2451,25 +1289,25 @@ static void sub_8078C34(void) if ((status = _GetBlockReceivedStatus())) { if (mpId == 0) - sub_80787E0(mpId, status); + UpdateLinkTradeFlags(mpId, status); else - sub_8078900(mpId, status); + ReactToLinkTradeData(mpId, status); } if (mpId == 0) - sub_80789FC(); + QueueLinkTradeData(); } -static u8 sub_8078C6C(u8 oldPosition, u8 direction) +static u8 GetNewTradeMenuPosition(u8 oldPosition, u8 direction) { int i; u8 newPosition = 0; for (i = 0; i < PARTY_SIZE; i++) { - if (gUnknown_0203229C->tradeMenuOptionsActive[gTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE) + if (sTradeMenuData->monPresent[sTradeNextSelectedMonTable[oldPosition][direction][i]] == TRUE) { - newPosition = gTradeNextSelectedMonTable[oldPosition][direction][i]; + newPosition = sTradeNextSelectedMonTable[oldPosition][direction][i]; break; } } @@ -2477,258 +1315,247 @@ static u8 sub_8078C6C(u8 oldPosition, u8 direction) return newPosition; } -static void TradeMenuMoveCursor(u8 *tradeMenuCursorPosition, u8 direction) +static void TradeMenuMoveCursor(u8 *cursorPosition, u8 direction) { - u8 newPosition = sub_8078C6C(*tradeMenuCursorPosition, direction); + u8 newPosition = GetNewTradeMenuPosition(*cursorPosition, direction); - if (newPosition == 12) // CANCEL + if (newPosition == (PARTY_SIZE * 2)) // CANCEL { - StartSpriteAnim(&gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx], 1); - gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.x = 224; - gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.y = 160; + StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteIdx], 1); + gSprites[sTradeMenuData->cursorSpriteIdx].pos1.x = 224; + gSprites[sTradeMenuData->cursorSpriteIdx].pos1.y = 160; } else { - StartSpriteAnim(&gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx], 0); - gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.x = gTradeMonSpriteCoords[newPosition][0] * 8 + 32; - gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].pos1.y = gTradeMonSpriteCoords[newPosition][1] * 8; + StartSpriteAnim(&gSprites[sTradeMenuData->cursorSpriteIdx], 0); + gSprites[sTradeMenuData->cursorSpriteIdx].pos1.x = sTradeMonSpriteCoords[newPosition][0] * 8 + 32; + gSprites[sTradeMenuData->cursorSpriteIdx].pos1.y = sTradeMonSpriteCoords[newPosition][1] * 8; } - if (*tradeMenuCursorPosition != newPosition) + if (*cursorPosition != newPosition) { PlaySE(SE_SELECT); } - *tradeMenuCursorPosition = newPosition; + *cursorPosition = newPosition; } -static void sub_8078D78(void) +static void SetReadyToTrade(void) { - sub_807A19C(0); - gUnknown_0203229C->unk_6F = 100; + PrintTradeMessage(TRADE_MSG_STANDBY); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; if (GetMultiplayerId() == 1) - { - sub_8078C10(0xAABB, gUnknown_0203229C->tradeMenuCursorPosition); - } + SetLinkData(LINKCMD_READY_TO_TRADE, sTradeMenuData->cursorPosition); else - { - gUnknown_0203229C->unk_78 = 1; - } + sTradeMenuData->playerLinkFlagChoseAction = WANTS_TO_TRADE; } -static void sub_8078DBC(void) +static void TradeMenuProcessInput(void) { if (gMain.newAndRepeatedKeys & DPAD_UP) { - TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 0); + TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 0); } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 1); + TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 1); } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 2); + TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 2); } else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - TradeMenuMoveCursor(&gUnknown_0203229C->tradeMenuCursorPosition, 3); + TradeMenuMoveCursor(&sTradeMenuData->cursorPosition, 3); } if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - if (gUnknown_0203229C->tradeMenuCursorPosition < 6) + // Cursor is in player's party + if (sTradeMenuData->cursorPosition < PARTY_SIZE) { DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); - PrintMenuTable(1, 2, gUnknown_0832DEAC); + PrintMenuTable(1, ARRAY_COUNT(sSelectTradeMonActions), sSelectTradeMonActions); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0); PutWindowTilemap(1); CopyWindowToVram(1, 3); - gUnknown_0203229C->unk_6F = 1; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SELECTED_MON; } - else if (gUnknown_0203229C->tradeMenuCursorPosition < 12) + // Cursor is in partner's party + else if (sTradeMenuData->cursorPosition < PARTY_SIZE * 2) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_0203229C->unk_6F = 2; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SHOW_MON_SUMMARY; } - else if (gUnknown_0203229C->tradeMenuCursorPosition == 12) + // Cursor is on Cancel + else if (sTradeMenuData->cursorPosition == PARTY_SIZE * 2) { - CreateYesNoMenu(&gUnknown_0832DF8C, 1, 14, 0); - gUnknown_0203229C->unk_6F = 4; - sub_807A308(gUnknown_0832DE94[4], (void *)(OBJ_VRAM0 + gUnknown_0203229C->unk_72 * 32), 24); + CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_PROMPT; + DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CANCEL_TRADE], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24); } } } -static void sub_8078EF8(void) +static void TradeMenuChooseMon(void) { - sub_8079F74(); - gUnknown_0203229C->unk_6F = 0; - gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = FALSE; - sub_807A308(gUnknown_0832DE94[1], (void *)(OBJ_VRAM0 + gUnknown_0203229C->unk_72 * 32), 24); + PrintNicknamesForTradeMenu(); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU; + gSprites[sTradeMenuData->cursorSpriteIdx].invisible = FALSE; + DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + sTradeMenuData->bottomTextTileStart * 32), 24); } -static void sub_8078F50(void) +static void TradeMenuProcessInput_SelectedMon(void) { switch (Menu_ProcessInputNoWrap()) { - case MENU_B_PRESSED: - PlaySE(SE_SELECT); - sub_8078EF8(); + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + TradeMenuChooseMon(); + break; + case MENU_NOTHING_CHOSEN: + break; + case 0: // Summary + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_SHOW_MON_SUMMARY; + break; + case 1: // Trade + switch (CanTradeSelectedMon(gPlayerParty, gPlayerPartyCount, sTradeMenuData->cursorPosition)) + { + case CAN_TRADE_MON: + SetReadyToTrade(); + gSprites[sTradeMenuData->cursorSpriteIdx].invisible = TRUE; break; - case MENU_NOTHING_CHOSEN: + case CANT_TRADE_LAST_MON: + QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; break; - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_0203229C->unk_6F = 2; + case CANT_TRADE_NATIONAL: + case CANT_TRADE_INVALID_MON: + QueueAction(QUEUE_DELAY_MSG, QUEUE_MON_CANT_BE_TRADED); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; break; - case 1: - switch (sub_807A5F4(gPlayerParty, gPlayerPartyCount, gUnknown_0203229C->tradeMenuCursorPosition)) - { - case 0: - sub_8078D78(); - gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = TRUE; - break; - case 1: - sub_807A048(3, 3); - gUnknown_0203229C->unk_6F = 8; - break; - case 2: - case 4: - sub_807A048(3, 6); - gUnknown_0203229C->unk_6F = 8; - break; - case 3: - case 5: - sub_807A048(3, 7); - gUnknown_0203229C->unk_6F = 8; - break; - } + case CANT_TRADE_EGG_YET: + case CANT_TRADE_EGG_YET2: + QueueAction(QUEUE_DELAY_MSG, QUEUE_EGG_CANT_BE_TRADED); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_REDRAW_MAIN_MENU; break; + } + break; } } -static void sub_8079034(void) +static void ChooseMonAfterButtonPress(void) { if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { PlaySE(SE_SELECT); - sub_8078EF8(); + TradeMenuChooseMon(); } } -static void sub_807905C(void) +static void TradeMenuShowMonSummaryScreen(void) { if (!gPaletteFade.active) { - if (gUnknown_0203229C->tradeMenuCursorPosition < PARTY_SIZE) - { - ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gUnknown_0203229C->tradeMenuCursorPosition, gUnknown_0203229C->partyCounts[0] - 1, sub_8077B74); - } + // Player's party + if (sTradeMenuData->cursorPosition < PARTY_SIZE) + ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, sTradeMenuData->cursorPosition, sTradeMenuData->partyCounts[TRADE_PLAYER] - 1, CB2_ReturnToTradeMenu); + // Partner's party else - { - ShowPokemonSummaryScreen(PSS_MODE_UNK1, gEnemyParty, gUnknown_0203229C->tradeMenuCursorPosition - PARTY_SIZE, gUnknown_0203229C->partyCounts[1] - 1, sub_8077B74); - } + ShowPokemonSummaryScreen(PSS_MODE_UNK1, gEnemyParty, sTradeMenuData->cursorPosition - PARTY_SIZE, sTradeMenuData->partyCounts[TRADE_PARTNER] - 1, CB2_ReturnToTradeMenu); FreeAllWindowBuffers(); } } -static u8 sub_80790D4(u8 *a0, u8 a1, u8 a2, u8 a3) +static u8 CheckValidityOfTradeMons(u8 *aliveMons, u8 playerPartyCount, u8 playerMonIdx, u8 partnerMonIdx) { int i; - u16 species; - u8 res = 0; + u16 partnerSpecies; + u8 hasLiveMon = 0; - for (i = 0; i < a1; i++) + // Make sure mon to be traded isn't player's last alive mon + for (i = 0; i < playerPartyCount; i++) { - if (a2 != i) - { - res += a0[i]; - } + if (playerMonIdx != i) + hasLiveMon += aliveMons[i]; } + partnerMonIdx %= PARTY_SIZE; + partnerSpecies = GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_SPECIES); - a3 %= PARTY_SIZE; - species = GetMonData(&gEnemyParty[a3], MON_DATA_SPECIES); - - if (species == SPECIES_DEOXYS || species == SPECIES_MEW) + // Partner cant trade illegitimate Deoxys or Mew + if (partnerSpecies == SPECIES_DEOXYS || partnerSpecies == SPECIES_MEW) { - if (!GetMonData(&gEnemyParty[a3], MON_DATA_OBEDIENCE)) - { - return 2; - } + if (!GetMonData(&gEnemyParty[partnerMonIdx], MON_DATA_OBEDIENCE)) + return PARTNER_MON_INVALID; } + // Partner cant trade Egg or non-Hoenn mon if player doesn't have National Dex if (!IsNationalPokedexEnabled()) { - if (gUnknown_0203229C->unk_51[1][a3] || !IsSpeciesInHoennDex(species)) - { - return 2; - } + if (sTradeMenuData->isEgg[TRADE_PARTNER][partnerMonIdx] || !IsSpeciesInHoennDex(partnerSpecies)) + return PARTNER_MON_INVALID; } - if (res) - { - res = 1; - } + if (hasLiveMon) + hasLiveMon = BOTH_MONS_VALID; - return res; + return hasLiveMon; //PLAYER_MON_INVALID or BOTH_MONS_VALID } -static bool32 sub_8079174(void) +// Returns TRUE if the partner's selected mon is invalid, FALSE otherwise +static bool32 CheckMonsBeforeTrade(void) { int i; - u8 arr[12]; + u8 aliveMons[PARTY_SIZE * 2]; - for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) { - arr[i] = gUnknown_0203229C->unk_45[0][i]; + aliveMons[i] = sTradeMenuData->isLiveMon[TRADE_PLAYER][i]; } - switch (sub_80790D4(arr, gUnknown_0203229C->partyCounts[0], gUnknown_0203229C->tradeMenuCursorPosition, gUnknown_0203229C->unk_7E)) + switch (CheckValidityOfTradeMons(aliveMons, sTradeMenuData->partyCounts[TRADE_PLAYER], sTradeMenuData->cursorPosition, sTradeMenuData->partnerCursorPosition)) { - case 0: - sub_807A048(3, 3); - sub_8078C10(0xBBCC, 0); - break; - case 1: - sub_807A048(3, 1); - sub_8078C10(0xBBBB, 0); - break; - case 2: - sub_807A048(3, 8); - return TRUE; + case PLAYER_MON_INVALID: + QueueAction(QUEUE_DELAY_MSG, QUEUE_ONLY_MON2); + SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); + break; + case BOTH_MONS_VALID: + QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY); + SetLinkData(LINKCMD_INIT_BLOCK, 0); + break; + case PARTNER_MON_INVALID: + QueueAction(QUEUE_DELAY_MSG, QUEUE_FRIENDS_MON_CANT_BE_TRADED); + return TRUE; } return FALSE; } -static void sub_8079218(void) +static void ConfirmOrCancelTrade(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: - if (!sub_8079174()) - { - gUnknown_0203229C->unk_6F = 100; - } - else - { - gUnknown_0203229C->unk_6F = 17; - } - PutWindowTilemap(17); - break; - case 1: - case MENU_B_PRESSED: - sub_807A048(3, 1); - if (sub_80771BC()) - sub_8078C10(0xBBCC, 0); - gUnknown_0203229C->unk_6F = 100; - PutWindowTilemap(17); - break; + case 0: // Confirm Trade + if (!CheckMonsBeforeTrade()) + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + else + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_PARTNER_MON_INVALID; + + PutWindowTilemap(17); + break; + case 1: // Cancel Trade + case MENU_B_PRESSED: + QueueAction(QUEUE_DELAY_MSG, QUEUE_STANDBY); + if (sub_80771BC()) + SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + PutWindowTilemap(17); + break; } } @@ -2736,65 +1563,66 @@ static void sub_807929C(void) { int i; - for (i = 0; i < gUnknown_0203229C->partyCounts[1] - 4; i++) + for (i = 0; i < sTradeMenuData->partyCounts[1] - 4; i++) { PutWindowTilemap(i + 12); CopyWindowToVram(i + 12, 1); } } -static void sub_80792E4(void) +static void CancelTradeYesNo(void) { switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case 0: - sub_807A19C(4); - sub_8078C10(0xEEAA, 0); - gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = TRUE; - gUnknown_0203229C->unk_6F = 100; - sub_807929C(); - break; - case 1: - case MENU_B_PRESSED: - PlaySE(SE_SELECT); - sub_8078EF8(); - break; + case 0: // YES, Cancel + PrintTradeMessage(TRADE_MSG_WAITING_FOR_FRIEND); + SetLinkData(LINKCMD_REQUEST_CANCEL, 0); + gSprites[sTradeMenuData->cursorSpriteIdx].invisible = TRUE; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; + sub_807929C(); + break; + case 1: // NO, Continue + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + TradeMenuChooseMon(); + break; } } -static void sub_807935C(void) +static void SetBothSelectedMons(void) { if (GetMultiplayerId() == 0) { rbox_fill_rectangle(0); - sub_807967C(gUnknown_0203229C->tradeMenuCursorPosition); - sub_807967C(gUnknown_0203229C->unk_7E); + SetSelectedMon(sTradeMenuData->cursorPosition); + SetSelectedMon(sTradeMenuData->partnerCursorPosition); } - gUnknown_0203229C->unk_6F = 7; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_TRADE_PROMPT; } -static void sub_8079398(void) +static void ConfirmTradePrompt(void) { - if (gUnknown_0203229C->unk_74[0] == 5 && gUnknown_0203229C->unk_74[1] == 5) + if (sTradeMenuData->drawPartyState[TRADE_PLAYER] == DRAW_PARTY_FINISH + && sTradeMenuData->drawPartyState[TRADE_PARTNER] == DRAW_PARTY_FINISH) { - sub_80787B8(); - gUnknown_0203229C->unk_6F = 14; + PrintAndBufferIsThisTradeOkay(); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_DELAY_TRADE_CONFIRM; } } -static void Wait2SecondsAndCreateYesNoMenu(void) +static void DelayTradeConfirmation(void) { - gUnknown_0203229C->unk_A8++; + sTradeMenuData->timer++; - if (gUnknown_0203229C->unk_A8 > 120) + if (sTradeMenuData->timer > 120) { - CreateYesNoMenu(&gUnknown_0832DF8C, 1, 14, 0); - gUnknown_0203229C->unk_A8 = 0; - gUnknown_0203229C->unk_6F = 3; + CreateYesNoMenu(&sTradeYesNoWindowTemplate, 1, 14, 0); + sTradeMenuData->timer = 0; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE; } } -static void sub_8079408(void) +static void RedrawTradeMenuAfterPressA(void) { int i; @@ -2810,14 +1638,14 @@ static void sub_8079408(void) rbox_fill_rectangle(i + 14); } - sub_8079F88(0); - sub_8079F88(1); - gUnknown_0203229C->unk_6F = 0; - gSprites[gUnknown_0203229C->tradeMenuCursorSpriteIdx].invisible = FALSE; + RedrawTradeMenuParty(TRADE_PLAYER); + RedrawTradeMenuParty(TRADE_PARTNER); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_MAIN_MENU; + gSprites[sTradeMenuData->cursorSpriteIdx].invisible = FALSE; } } -static void sub_8079490(void) +static void CancelTrade_1(void) { if (!gPaletteFade.active) { @@ -2830,18 +1658,18 @@ static void sub_8079490(void) sub_800ABF4(12); } - gUnknown_0203229C->unk_6F = 12; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2; } } -static void sub_80794CC(void) +static void CancelTrade_2(void) { if (gWirelessCommType) { - if (sub_80771BC() && sub_807A09C() == 0) + if (sub_80771BC() && GetNumQueuedActions() == 0) { - Free(gUnknown_02032184); - Free(gUnknown_0203229C); + Free(sMessageBoxAllocBuffer); + Free(sTradeMenuData); FreeAllWindowBuffers(); DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); @@ -2851,177 +1679,183 @@ static void sub_80794CC(void) { if (!gReceivedRemoteLinkPlayers) { - Free(gUnknown_02032184); - Free(gUnknown_0203229C); + Free(sMessageBoxAllocBuffer); + Free(sTradeMenuData); FreeAllWindowBuffers(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); } } } -static void sub_8079550(void) +static void LinkTradeWaitForQueue(void) { - if (!sub_801048C(FALSE) && sub_807A09C() == 0) + if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0) { sub_800ADF8(); - gUnknown_0203229C->unk_6F = 13; + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE; } } -static void sub_807957C(void) +static void PartnersMonWasInvalid(void) { if (gMain.newKeys & A_BUTTON) { - sub_8078C10(0xBBCC, 0); - gUnknown_0203229C->unk_6F = 100; + SetLinkData(LINKCMD_READY_CANCEL_TRADE, 0); + sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_STANDBY; } } -static void sub_80795AC(void) +static void CallTradeMenuFunc(void) { - switch (gUnknown_0203229C->unk_6F) + switch (sTradeMenuData->tradeMenuFunc) { - case 0: - sub_8078DBC(); - break; - case 1: - sub_8078F50(); - break; - case 2: - sub_807905C(); - break; - case 3: - sub_8079218(); - break; - case 4: - sub_80792E4(); - break; - case 6: - sub_807935C(); - break; - case 7: - sub_8079398(); - break; - case 8: - sub_8079408(); - break; - case 9: - sub_8078130(); - break; - case 10: - sub_807816C(); - break; - case 11: - sub_8079490(); - break; - case 12: - sub_80794CC(); - break; - case 13: - sub_80781C8(); - break; - case 14: - Wait2SecondsAndCreateYesNoMenu(); - break; - case 15: - sub_8079034(); - break; - case 16: - sub_8079550(); - break; - case 17: - sub_807957C(); - break; + case TRADEMENUFUNC_MAIN_MENU: + TradeMenuProcessInput(); + break; + case TRADEMENUFUNC_SELECTED_MON: + TradeMenuProcessInput_SelectedMon(); + break; + case TRADEMENUFUNC_SHOW_MON_SUMMARY: + TradeMenuShowMonSummaryScreen(); + break; + case TRADEMENUFUNC_CONFIRM_OR_CANCEL_TRADE: + ConfirmOrCancelTrade(); + break; + case TRADEMENUFUNC_CANCEL_TRADE_PROMPT: + CancelTradeYesNo(); + break; + case TRADEMENUFUNC_BOTH_MONS_SELECTED: + SetBothSelectedMons(); + break; + case TRADEMENUFUNC_CONFIRM_TRADE_PROMPT: + ConfirmTradePrompt(); + break; + case TRADEMENUFUNC_REDRAW_MAIN_MENU: + RedrawTradeMenuAfterPressA(); + break; + case TRADEMENUFUNC_LINK_TRADE_FADE_OUT: + LinkTradeFadeOut(); + break; + case TRADEMENUFUNC_LINK_TRADE_WAIT_FADE: + LinkTradeWaitForFade(); + break; + case TRADEMENUFUNC_CANCEL_TRADE_1: + CancelTrade_1(); + break; + case TRADEMENUFUNC_CANCEL_TRADE_2: + CancelTrade_2(); + break; + case TRADEMENUFUNC_START_LINK_TRADE: + SetLinkTradeCallbacks(); + break; + case TRADEMENUFUNC_DELAY_TRADE_CONFIRM: + DelayTradeConfirmation(); + break; + case TRADEMENUFUNC_UNUSED_15: + ChooseMonAfterButtonPress(); + break; + case TRADEMENUFUNC_LINK_TRADE_WAIT_QUEUE: + LinkTradeWaitForQueue(); + break; + case TRADEMENUFUNC_PARTNER_MON_INVALID: + PartnersMonWasInvalid(); + break; + //case TRADEMENUFUNC_STANDBY: is nop } } -static void sub_807967C(u8 a0) +static void SetSelectedMon(u8 cursorPosition) { - u8 whichParty = a0 / PARTY_SIZE; + //cursorPosition 0-5 are the player's mons, 6-11 are the partner's + u8 whichParty = cursorPosition / PARTY_SIZE; - if (gUnknown_0203229C->unk_74[whichParty] == 0) + if (sTradeMenuData->drawPartyState[whichParty] == 0) { - gUnknown_0203229C->unk_74[whichParty] = 1; - gUnknown_0203229C->unk_76[whichParty] = a0; + sTradeMenuData->drawPartyState[whichParty] = 1; + sTradeMenuData->selectedMonIdx[whichParty] = cursorPosition; } } -static void sub_80796B4(u8 a0) +static void DrawTradeMenuParty(u8 whichParty) { s8 nameStringWidth; u8 nickname[20]; u8 movesString[56]; u8 i; u8 partyIdx; - u8 whichParty; - u8 monIdx = gUnknown_0203229C->unk_76[a0]; + u8 selectedMonParty; + u8 selectedMonIdx = sTradeMenuData->selectedMonIdx[whichParty]; - whichParty = 1; - if (gUnknown_0203229C->unk_76[a0] < PARTY_SIZE) - whichParty = 0; - partyIdx = monIdx % PARTY_SIZE; + selectedMonParty = TRADE_PARTNER; + if (sTradeMenuData->selectedMonIdx[whichParty] < PARTY_SIZE) + selectedMonParty = TRADE_PLAYER; + partyIdx = selectedMonIdx % PARTY_SIZE; nameStringWidth = 0; - switch (gUnknown_0203229C->unk_74[a0]) + switch (sTradeMenuData->drawPartyState[whichParty]) { case 1: - for (i = 0; i < gUnknown_0203229C->partyCounts[a0]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) { - gSprites[gUnknown_0203229C->partyIcons[0][i + (whichParty * PARTY_SIZE)]].invisible = TRUE; + gSprites[sTradeMenuData->partySpriteIds[0][i + (selectedMonParty * PARTY_SIZE)]].invisible = TRUE; } for (i = 0; i < 6; i++) { - ClearWindowTilemap(i + (a0 * 6 + 2)); + ClearWindowTilemap(i + (whichParty * PARTY_SIZE + 2)); } - gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].invisible = FALSE; - gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[0] = 20; - gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[2] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].data[4] = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; - StoreSpriteCallbackInData6(&gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]], sub_80D3014); - gUnknown_0203229C->unk_74[a0]++; - sub_80A6DEC(&gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]]); - CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); + gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].invisible = FALSE; + gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[0] = 20; + gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[2] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].data[4] = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; + StoreSpriteCallbackInData6(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]], SpriteCB_MonIcon); + sTradeMenuData->drawPartyState[whichParty]++; + TradeMenuBouncePartySprites(&gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]]); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(0); - if (whichParty == 0) - sub_8079F74(); + if (selectedMonParty == TRADE_PLAYER) + PrintNicknamesForTradeMenu(); break; case 2: - if (gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].callback == sub_80D3014) - gUnknown_0203229C->unk_74[a0] = 3; + if (gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].callback == SpriteCB_MonIcon) + sTradeMenuData->drawPartyState[whichParty] = 3; break; case 3: - CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMovesBoxTilemap, whichParty * 15, 0, 15, 17, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradeMovesBoxTilemap, selectedMonParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.x = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][0] + gTradeMonSpriteCoords[whichParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; - gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos1.y = (gTradeMonSpriteCoords[whichParty * PARTY_SIZE][1] * 8) - 12; - gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.x = 0; - gSprites[gUnknown_0203229C->partyIcons[0][partyIdx + (whichParty * PARTY_SIZE)]].pos2.y = 0; - nameStringWidth = sub_8079A3C(nickname, whichParty, partyIdx); - AddTextPrinterParameterized3((a0 * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, gUnknown_0832DEE0, 0, nickname); - sub_8079AA4(movesString, whichParty, partyIdx); - AddTextPrinterParameterized4((a0 * 2) + 15, 1, 0, 0, 0, 0, gUnknown_0832DEE0, 0, movesString); - PutWindowTilemap((a0 * 2) + 14); - CopyWindowToVram((a0 * 2) + 14, 3); - PutWindowTilemap((a0 * 2) + 15); - CopyWindowToVram((a0 * 2) + 15, 3); - gUnknown_0203229C->unk_74[a0]++; + gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos1.x = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][0] + sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE + 1][0]) / 2 * 8 + 14; + gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos1.y = (sTradeMonSpriteCoords[selectedMonParty * PARTY_SIZE][1] * 8) - 12; + gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos2.x = 0; + gSprites[sTradeMenuData->partySpriteIds[0][partyIdx + (selectedMonParty * PARTY_SIZE)]].pos2.y = 0; + nameStringWidth = GetMonNicknameWidth(nickname, selectedMonParty, partyIdx); + AddTextPrinterParameterized3((whichParty * 2) + 14, 0, (80 - nameStringWidth) / 2, 4, sTradeTextColors, 0, nickname); + BufferTradeMonMoves(movesString, selectedMonParty, partyIdx); + AddTextPrinterParameterized4((whichParty * 2) + 15, 1, 0, 0, 0, 0, sTradeTextColors, 0, movesString); + PutWindowTilemap((whichParty * 2) + 14); + CopyWindowToVram((whichParty * 2) + 14, 3); + PutWindowTilemap((whichParty * 2) + 15); + CopyWindowToVram((whichParty * 2) + 15, 3); + sTradeMenuData->drawPartyState[whichParty]++; break; case 4: - sub_8079C4C(a0, partyIdx, gUnknown_0832DF99[a0][0] + 4, gUnknown_0832DF99[a0][1] + 1, gUnknown_0832DF99[a0][0], gUnknown_0832DF99[a0][1]); - gUnknown_0203229C->unk_74[a0]++; + DrawTradeMenuPartyMonInfo(whichParty, partyIdx, + sTradeMenuPartyMonBoxDimensions[whichParty][0] + 4, + sTradeMenuPartyMonBoxDimensions[whichParty][1] + 1, + sTradeMenuPartyMonBoxDimensions[whichParty][0], + sTradeMenuPartyMonBoxDimensions[whichParty][1]); + sTradeMenuData->drawPartyState[whichParty]++; break; } } -static u8 sub_8079A3C(u8 *str, u8 whichParty, u8 monIdx) +static u8 GetMonNicknameWidth(u8 *str, u8 whichParty, u8 monIdx) { u8 nickname[12]; - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname); else GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname); @@ -3030,104 +1864,104 @@ static u8 sub_8079A3C(u8 *str, u8 whichParty, u8 monIdx) return GetStringWidth(0, str, GetFontAttribute(0, FONTATTR_LETTER_SPACING)); } -static void sub_8079AA4(u8 *a0, u8 a1, u8 a2) +static void BufferTradeMonMoves(u8 *str, u8 whichParty, u8 partyIdx) { u16 moves[MAX_MON_MOVES]; u16 i; - if (!gUnknown_0203229C->unk_51[a1][a2]) + if (!sTradeMenuData->isEgg[whichParty][partyIdx]) { for (i = 0; i < MAX_MON_MOVES; i++) { - if (!a1) + if (whichParty == TRADE_PLAYER) { - moves[i] = GetMonData(&gPlayerParty[a2], i + MON_DATA_MOVE1, NULL); + moves[i] = GetMonData(&gPlayerParty[partyIdx], i + MON_DATA_MOVE1, NULL); } else { - moves[i] = GetMonData(&gEnemyParty[a2], i + MON_DATA_MOVE1, NULL); + moves[i] = GetMonData(&gEnemyParty[partyIdx], i + MON_DATA_MOVE1, NULL); } } - StringCopy(a0, gText_EmptyString7); + StringCopy(str, sText_EmptyString); for (i = 0; i < MAX_MON_MOVES; i++) { if (moves[i] != MOVE_NONE) { - StringAppend(a0, gMoveNames[moves[i]]); + StringAppend(str, gMoveNames[moves[i]]); } - StringAppend(a0, gText_NewLine3); + StringAppend(str, sText_NewLine); } } else { - StringCopy(a0, gText_EmptyString7); - StringAppend(a0, gText_FourQuestionMarks); + StringCopy(str, sText_EmptyString); + StringAppend(str, sText_FourQuestionMarks); } } -static void sub_8079B84(u8 whichParty, u8 windowId, u8 *str) +static void PrintMonNicknameForTradeMenu(u8 whichParty, u8 windowId, u8 *nickname) { u8 xPos; windowId += (whichParty * PARTY_SIZE) + 2; - xPos = GetStringCenterAlignXOffset(0, str, 64); - AddTextPrinterParameterized3(windowId, 0, xPos, 4, gUnknown_0832DEE0, 0, str); + xPos = GetStringCenterAlignXOffset(0, nickname, 64); + AddTextPrinterParameterized3(windowId, 0, xPos, 4, sTradeTextColors, 0, nickname); PutWindowTilemap(windowId); CopyWindowToVram(windowId, 3); } -static void sub_8079BE0(u8 whichParty) +static void PrintPartyNicknamesForTradeMenu(u8 whichParty) { u8 i; - u8 sp[20]; - u8 sp14[32]; - struct Pokemon *mons = whichParty == 0 ? gPlayerParty : gEnemyParty; + u8 nickname[20]; + u8 str[32]; + struct Pokemon *party = (whichParty == TRADE_PLAYER) ? gPlayerParty : gEnemyParty; - for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) { - GetMonData(&mons[i], MON_DATA_NICKNAME, sp); - StringCopy10(sp14, sp); - sub_8079B84(whichParty, i, sp14); + GetMonData(&party[i], MON_DATA_NICKNAME, nickname); + StringCopy10(str, nickname); + PrintMonNicknameForTradeMenu(whichParty, i, str); } } -static void sub_8079C4C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) +static void DrawTradeMenuPartyMonInfo(u8 whichParty, u8 monIdx, u8 x, u8 y, u8 width, u8 height) { u8 level; - u32 r2; + u32 symbolTile; u8 gender; u8 nickname[12]; - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DDD704, a4, a5, 6, 3, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, gTradeMenuMonBox_Tilemap, width, height, 6, 3, 0); CopyBgTilemapBufferToVram(1); - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) level = GetMonData(&gPlayerParty[monIdx], MON_DATA_LEVEL, NULL); else level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); - if (gUnknown_0203229C->unk_51[whichParty][monIdx] == 0) + if (!sTradeMenuData->isEgg[whichParty][monIdx]) { if (level / 10 != 0) - gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60; + sTradeMenuData->tilemapBuffer[x + (y * 32)] = (level / 10) + 0x60; - gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70; + sTradeMenuData->tilemapBuffer[x + (y * 32) + 1] = (level % 10) + 0x70; } else { - gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 32] = gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 33]; - gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 31] = gUnknown_0203229C->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400; + sTradeMenuData->tilemapBuffer[x + (y * 32) - 32] = sTradeMenuData->tilemapBuffer[x + (y * 32) - 33]; + sTradeMenuData->tilemapBuffer[x + (y * 32) - 31] = sTradeMenuData->tilemapBuffer[x + (y * 32) - 36] | 0x400; } - if (gUnknown_0203229C->unk_51[whichParty][monIdx] != 0) + if (sTradeMenuData->isEgg[whichParty][monIdx]) { - r2 = 0x480; + symbolTile = 0x480; } else { - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) { gender = GetMonGender(&gPlayerParty[monIdx]); GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname); @@ -3140,41 +1974,45 @@ static void sub_8079C4C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) switch (gender) { - case MON_MALE: - r2 = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83; - break; - case MON_FEMALE: - r2 = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83; - break; - default: - r2 = 0x83; - break; + case MON_MALE: + symbolTile = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83; + break; + case MON_FEMALE: + symbolTile = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83; + break; + default: + symbolTile = 0x83; + break; } } - gUnknown_0203229C->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2; + sTradeMenuData->tilemapBuffer[(y - 1) * 32 + x + 1] = symbolTile; } // Very close but loop preamble not working. #ifdef NONMATCHING -static void sub_8079E44(u8 whichParty) +static void DrawTradeMenuPartyInfo(u8 whichParty) { int i; - for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) { - sub_8079C4C(whichParty, i, gTradeLevelDisplayCoords[whichParty][i][0], gTradeLevelDisplayCoords[whichParty][i][1], gTradeMonBoxCoords[whichParty][i][0], gTradeMonBoxCoords[whichParty][i][1]); + DrawTradeMenuPartyMonInfo(whichParty, i, + sTradeMonLevelCoords[whichParty][i][0], + sTradeMonLevelCoords[whichParty][i][1], + sTradeMonBoxCoords[whichParty][i][0], + sTradeMonBoxCoords[whichParty][i][1]); } } #else NAKED -static void sub_8079E44(u8 whichParty) +static void DrawTradeMenuPartyInfo(u8 whichParty) { asm_unified("push {r4-r7,lr}\n\ sub sp, 0x8\n\ lsls r0, 24\n\ lsrs r6, r0, 24\n\ movs r7, 0\n\ - ldr r0, =gUnknown_0203229C\n\ + ldr r0, =sTradeMenuData\n\ ldr r0, [r0]\n\ adds r0, 0x36\n\ adds r0, r6\n\ @@ -3183,10 +2021,10 @@ static void sub_8079E44(u8 whichParty) bge _08079E94\n\ lsls r0, r6, 1\n\ adds r0, r6\n\ - ldr r1, =gTradeLevelDisplayCoords\n\ + ldr r1, =sTradeMonLevelCoords\n\ lsls r0, 2\n\ adds r5, r0, r1\n\ - ldr r1, =gTradeMonBoxCoords\n\ + ldr r1, =sTradeMonBoxCoords\n\ adds r4, r0, r1\n\ _08079E6A:\n\ lsls r1, r7, 24\n\ @@ -3198,11 +2036,11 @@ _08079E6A:\n\ ldrb r0, [r4, 0x1]\n\ str r0, [sp, 0x4]\n\ adds r0, r6, 0\n\ - bl sub_8079C4C\n\ + bl DrawTradeMenuPartyMonInfo\n\ adds r5, 0x2\n\ adds r4, 0x2\n\ adds r7, 0x1\n\ - ldr r0, =gUnknown_0203229C\n\ + ldr r0, =sTradeMenuData\n\ ldr r0, [r0]\n\ adds r0, 0x36\n\ adds r0, r6\n\ @@ -3218,405 +2056,388 @@ _08079E94:\n\ } #endif // NONMATCHING -static void sub_8079EA8(u8 whichParty) +static void ResetTradeMenuPartyPositions(u8 whichParty) { int i; - for (i = 0; i < gUnknown_0203229C->partyCounts[whichParty]; i++) + for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) { - gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].invisible = FALSE; - gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; - gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; - gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos2.x = 0; - gSprites[gUnknown_0203229C->partyIcons[whichParty][i]].pos2.y = 0; + gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].invisible = FALSE; + gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].pos1.x = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].pos1.y = sTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].pos2.x = 0; + gSprites[sTradeMenuData->partySpriteIds[whichParty][i]].pos2.y = 0; } } -static void sub_8079F74(void) +static void PrintNicknamesForTradeMenu(void) { rbox_fill_rectangle(1); - sub_8079BE0(1); + //PrintPartyNicknamesForTradeMenu(TRADE_PLAYER); ? + PrintPartyNicknamesForTradeMenu(TRADE_PARTNER); } -static void sub_8079F88(u8 a0) +static void RedrawTradeMenuParty(u8 whichParty) { - CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, a0 * 15, 0, 15, 17, 0); + CopyToBgTilemapBufferRect_ChangePalette(1, sTradePartyBoxTilemap, whichParty * 15, 0, 15, 17, 0); CopyBgTilemapBufferToVram(1); - sub_8079E44(a0); - sub_8079BE0(a0); - sub_8079EA8(a0); - sub_807A308(gUnknown_0832DE94[1], (void *)(OBJ_VRAM0 + (gUnknown_0203229C->unk_72 * 32)), 24); - gUnknown_0203229C->unk_74[a0] = 0; + DrawTradeMenuPartyInfo(whichParty); + PrintPartyNicknamesForTradeMenu(whichParty); + ResetTradeMenuPartyPositions(whichParty); + DrawTextWindowAndBuffer6Bytes(sTradeActionTexts[TRADE_TEXT_CHOOSE_MON], (void *)(OBJ_VRAM0 + (sTradeMenuData->bottomTextTileStart * 32)), 24); + sTradeMenuData->drawPartyState[whichParty] = 0; } -static void sub_807A000(u8 taskId) +static void Task_DrawSelectionSummary(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -static void sub_807A024(u8 taskId) +static void Task_DrawSelectionTrade(u8 taskId) { FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); CopyBgTilemapBufferToVram(0); } -static void sub_807A048(u16 a0, u8 a1) +static void QueueAction(u16 delay, u8 actionId) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) { - if (!gUnknown_0203229C->unk_8D0[i].unk_0) + if (!sTradeMenuData->queuedActions[i].queued) { - gUnknown_0203229C->unk_8D0[i].unk_2 = a0; - gUnknown_0203229C->unk_8D0[i].unk_4 = a1; - gUnknown_0203229C->unk_8D0[i].unk_0 = TRUE; + sTradeMenuData->queuedActions[i].queueDelay = delay; + sTradeMenuData->queuedActions[i].actionId = actionId; + sTradeMenuData->queuedActions[i].queued = TRUE; break; } } } -static u32 sub_807A09C(void) +static u32 GetNumQueuedActions(void) { - u32 acc = 0; + u32 numActions = 0; int i; - for (i = 0; i < 4; i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) { - acc += gUnknown_0203229C->unk_8D0[i].unk_0; + numActions += sTradeMenuData->queuedActions[i].queued; } - return acc; + return numActions; } -static void sub_807A0C4(void) +static void DoQueuedActions(void) { int i; - for (i = 0; i < 4; i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->queuedActions); i++) { - if (gUnknown_0203229C->unk_8D0[i].unk_0) + if (sTradeMenuData->queuedActions[i].queued) { - if (gUnknown_0203229C->unk_8D0[i].unk_2) + if (sTradeMenuData->queuedActions[i].queueDelay) { - gUnknown_0203229C->unk_8D0[i].unk_2--; + sTradeMenuData->queuedActions[i].queueDelay--; } else { - switch (gUnknown_0203229C->unk_8D0[i].unk_4) + switch (sTradeMenuData->queuedActions[i].actionId) { - case 0: - sub_8077170(gUnknown_0203229C->linkData, 20); - break; - case 1: - sub_807A19C(0); - break; - case 2: - sub_807A19C(2); - break; - case 3: - case 4: - case 5: - sub_807A19C(3); - break; - case 6: - sub_807A19C(6); - break; - case 7: - sub_807A19C(7); - break; - case 8: - sub_807A19C(8); - break; + case QUEUE_SEND_DATA: + SendLinkData(sTradeMenuData->linkData, 20); + break; + case QUEUE_STANDBY: + PrintTradeMessage(TRADE_MSG_STANDBY); + break; + case QUEUE_ONLY_MON1: + PrintTradeMessage(TRADE_MSG_ONLY_MON1); + break; + case QUEUE_ONLY_MON2: + case QUEUE_UNUSED1: + case QUEUE_UNUSED2: + PrintTradeMessage(TRADE_MSG_ONLY_MON2); + break; + case QUEUE_MON_CANT_BE_TRADED: + PrintTradeMessage(TRADE_MSG_MON_CANT_BE_TRADED); + break; + case QUEUE_EGG_CANT_BE_TRADED: + PrintTradeMessage(TRADE_MSG_EGG_CANT_BE_TRADED); + break; + case QUEUE_FRIENDS_MON_CANT_BE_TRADED: + PrintTradeMessage(TRADE_MSG_FRIENDS_MON_CANT_BE_TRADED); + break; } - gUnknown_0203229C->unk_8D0[i].unk_0 = 0; + sTradeMenuData->queuedActions[i].queued = FALSE; } } } } -static void sub_807A19C(u8 a0) +static void PrintTradeMessage(u8 messageId) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized(0, 1, gUnknown_0832DEBC[a0], 0, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(0, 1, sTradeMessages[messageId], 0, 1, TEXT_SPEED_FF, NULL); DrawTextBorderOuter(0, 20, 12); PutWindowTilemap(0); CopyWindowToVram(0, 3); } -static bool8 sub_807A1F0(void) +static bool8 LoadTradeMenuSpriteSheetsAndPalettes(void) { struct SpriteSheet sheet; - if (gUnknown_0203229C->unk_A8 < 14) + if (sTradeMenuData->timer < (int)ARRAY_COUNT(sMessageBoxTileBuffers)) { - sheet.data = gUnknown_02032188[gUnknown_0203229C->unk_A8]; + sheet.data = sMessageBoxTileBuffers[sTradeMenuData->timer]; sheet.size = 0x100; - sheet.tag = 200 + gUnknown_0203229C->unk_A8; + sheet.tag = 200 + sTradeMenuData->timer; } - switch (gUnknown_0203229C->unk_A8) + switch (sTradeMenuData->timer) { - case 0 ... 7: - LoadSpriteSheet(&sheet); - gUnknown_0203229C->unk_A8++; - break; - case 8: - gUnknown_0203229C->unk_72 = LoadSpriteSheet(&sheet); - gUnknown_0203229C->unk_A8++; - break; - case 9 ... 13: - LoadSpriteSheet(&sheet); - gUnknown_0203229C->unk_A8++; - break; - case 14: - LoadSpritePalette(&gSpritePalette_TradeScreenText); - gUnknown_0203229C->unk_A8++; - break; - case 15: - LoadSpritePalette(&gUnknown_0832DC44); - gUnknown_0203229C->unk_A8++; - break; - case 16: - LoadSpriteSheet(&gUnknown_0832DC3C); - gUnknown_0203229C->unk_A8++; - break; - case 17: - gUnknown_0203229C->unk_A8 = 0; - return TRUE; + case 0 ... 7: + LoadSpriteSheet(&sheet); + sTradeMenuData->timer++; + break; + case 8: + sTradeMenuData->bottomTextTileStart = LoadSpriteSheet(&sheet); + sTradeMenuData->timer++; + break; + case 9 ... 13: + LoadSpriteSheet(&sheet); + sTradeMenuData->timer++; + break; + case 14: + LoadSpritePalette(&gSpritePalette_TradeScreenText); + sTradeMenuData->timer++; + break; + case 15: + LoadSpritePalette(&gUnknown_0832DC44); + sTradeMenuData->timer++; + break; + case 16: + LoadSpriteSheet(&sTradeButtonsSpriteSheet); + sTradeMenuData->timer++; + break; + case 17: + sTradeMenuData->timer = 0; + return TRUE; } return FALSE; } -static void sub_807A308(const u8 *a0, u8 *a1, u8 unused) +static void DrawTextWindowAndBuffer6Bytes(const u8 *str, u8 *dest, u8 unused) { - sub_80C6D80(a0, a1, 0, 0, 6); + DrawTextWindowAndBufferTiles(str, dest, 0, 0, 6); } -static void sub_807A320(u8 who) +static void SetTradePartyLiveStatuses(u8 whichParty) { int i; - switch (who) + switch (whichParty) { - case 0: - for (i = 0; i < gUnknown_0203229C->partyCounts[who]; i++) + case TRADE_PLAYER: + for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) { - if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) - { - gUnknown_0203229C->unk_45[who][i] = 0; - gUnknown_0203229C->unk_51[who][i] = 1; - } - else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) - { - gUnknown_0203229C->unk_45[who][i] = 0; - gUnknown_0203229C->unk_51[who][i] = 0; - } - else - { - gUnknown_0203229C->unk_45[who][i] = 1; - gUnknown_0203229C->unk_51[who][i] = 0; - } + sTradeMenuData->isLiveMon[whichParty][i] = FALSE; + sTradeMenuData->isEgg[whichParty][i] = TRUE; } - break; - case 1: - for (i = 0; i < gUnknown_0203229C->partyCounts[who]; i++) + else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { - if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) - { - gUnknown_0203229C->unk_45[who][i] = 0; - gUnknown_0203229C->unk_51[who][i] = 1; - } - else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) - { - gUnknown_0203229C->unk_45[who][i] = 0; - gUnknown_0203229C->unk_51[who][i] = 0; - } - else - { - gUnknown_0203229C->unk_45[who][i] = 1; - gUnknown_0203229C->unk_51[who][i] = 0; - } + sTradeMenuData->isLiveMon[whichParty][i] = FALSE; + sTradeMenuData->isEgg[whichParty][i] = FALSE; } - break; + else + { + sTradeMenuData->isLiveMon[whichParty][i] = TRUE; + sTradeMenuData->isEgg[whichParty][i] = FALSE; + } + } + break; + case TRADE_PARTNER: + for (i = 0; i < sTradeMenuData->partyCounts[whichParty]; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) + { + sTradeMenuData->isLiveMon[whichParty][i] = FALSE; + sTradeMenuData->isEgg[whichParty][i] = TRUE; + } + else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) + { + sTradeMenuData->isLiveMon[whichParty][i] = FALSE; + sTradeMenuData->isEgg[whichParty][i] = FALSE; + } + else + { + sTradeMenuData->isLiveMon[whichParty][i] = TRUE; + sTradeMenuData->isEgg[whichParty][i] = FALSE; + } + } + break; } } -static void sub_807A468(u8 who) +static void GetTradePartyHPBarLevels(u8 who) { u16 i, curHp, maxHp; switch (who) { - case 0: - for (i = 0; i < gUnknown_0203229C->partyCounts[0]; i++) - { - curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); - gUnknown_0203229C->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp); - } - break; - case 1: - for (i = 0; i < gUnknown_0203229C->partyCounts[1]; i++) - { - curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); - maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); - gUnknown_0203229C->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp); - } - break; + case TRADE_PLAYER: + for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PLAYER]; i++) + { + curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + sTradeMenuData->hpBarLevels[TRADE_PLAYER][i] = GetHPBarLevel(curHp, maxHp); + } + break; + case TRADE_PARTNER: + for (i = 0; i < sTradeMenuData->partyCounts[TRADE_PARTNER]; i++) + { + curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); + sTradeMenuData->hpBarLevels[TRADE_PARTNER][i] = GetHPBarLevel(curHp, maxHp); + } + break; } } -static void sub_807A53C(void) +static void SetTradePartyHPBarSprites(void) { int i, j; for (i = 0; i < 2; i++) { - for (j = 0; j < gUnknown_0203229C->partyCounts[i]; j++) + for (j = 0; j < sTradeMenuData->partyCounts[i]; j++) { - sub_80D32C8(&gSprites[gUnknown_0203229C->partyIcons[i][j]], 4 - gUnknown_0203229C->unk_5D[i][j]); + SetPartyHPBarSprite(&gSprites[sTradeMenuData->partySpriteIds[i][j]], 4 - sTradeMenuData->hpBarLevels[i][j]); } } } -static void sub_807A5B0(void) +static void SaveTradeGiftRibbons(void) { int i; - for (i = 0; i < 11; i++) + for (i = 0; i < (int)ARRAY_COUNT(sTradeMenuData->giftRibbons); i++) { - if (gSaveBlock1Ptr->giftRibbons[i] == 0 && gUnknown_0203229C->unk_A9[i] != 0) + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && sTradeMenuData->giftRibbons[i] != 0) { - if (gUnknown_0203229C->unk_A9[i] < 64) - gSaveBlock1Ptr->giftRibbons[i] = gUnknown_0203229C->unk_A9[i]; + if (sTradeMenuData->giftRibbons[i] < 64) + gSaveBlock1Ptr->giftRibbons[i] = sTradeMenuData->giftRibbons[i]; } } } -static u32 sub_807A5F4(struct Pokemon *monList, int a1, int monIdx) +static u32 CanTradeSelectedMon(struct Pokemon *playerParty, int partyCount, int monIdx) { - int i, sum; + int i, numMonsLeft; struct LinkPlayer *player; - u32 species[6]; - u32 species2[6]; + u32 species[PARTY_SIZE]; + u32 species2[PARTY_SIZE]; - for (i = 0; i < a1; i++) + for (i = 0; i < partyCount; i++) { - species2[i] = GetMonData(&monList[i], MON_DATA_SPECIES2); - species[i] = GetMonData(&monList[i], MON_DATA_SPECIES); + species2[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES2); + species[i] = GetMonData(&playerParty[i], MON_DATA_SPECIES); } + // Cant trade Eggs or non-Hoenn mons if player doesn't have National Dex if (!IsNationalPokedexEnabled()) { if (species2[monIdx] == SPECIES_EGG) - { - return 3; - } + return CANT_TRADE_EGG_YET; if (!IsSpeciesInHoennDex(species2[monIdx])) - { - return 2; - } + return CANT_TRADE_NATIONAL; } player = &gLinkPlayers[GetMultiplayerId() ^ 1]; if ((player->version & 0xFF) != VERSION_RUBY && (player->version & 0xFF) != VERSION_SAPPHIRE) { - if ((player->name[10] & 0xF) == 0) + // Does partner not have National Dex + if (!(player->progressFlagsCopy & 0xF)) { if (species2[monIdx] == SPECIES_EGG) - { - return 5; - } + return CANT_TRADE_EGG_YET2; if (!IsSpeciesInHoennDex(species2[monIdx])) - { - return 4; - } + return CANT_TRADE_INVALID_MON; } } if (species[monIdx] == SPECIES_DEOXYS || species[monIdx] == SPECIES_MEW) { - if (!GetMonData(&monList[monIdx], MON_DATA_OBEDIENCE)) - { - return 4; - } + if (!GetMonData(&playerParty[monIdx], MON_DATA_OBEDIENCE)) + return CANT_TRADE_INVALID_MON; } - for (i = 0; i < a1; i++) + // Make Eggs not count for numMonsLeft + for (i = 0; i < partyCount; i++) { if (species2[i] == SPECIES_EGG) - { species2[i] = SPECIES_NONE; - } } - for (sum = 0, i = 0; i < a1; i++) + // Count alive mons in party, excluding selected trade mon + for (numMonsLeft = 0, i = 0; i < partyCount; i++) { if (i != monIdx) - { - sum += species2[i]; - } + numMonsLeft += species2[i]; } - if (sum != 0) - { - return 0; - } + if (numMonsLeft != 0) + return CAN_TRADE_MON; else - { - return 1; - } + return CANT_TRADE_LAST_MON; } -s32 sub_807A728(void) +s32 GetGameProgressForLinkTrade(void) { - s32 val; + // isGameFrLg could have been a bool but they use 2 and > 0 instead + // possible other checks (for other game versions?) were planned/removed + s32 isGameFrLg; u16 version; if (gReceivedRemoteLinkPlayers != 0) { - val = 0; + isGameFrLg = 0; version = (gLinkPlayers[GetMultiplayerId() ^ 1].version & 0xFF); if (version == VERSION_RUBY || version == VERSION_SAPPHIRE || version == VERSION_EMERALD) - { - // this value could actually be anything 0 or less - val = 0; - } + isGameFrLg = 0; else if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) - { - val = 2; - } + isGameFrLg = 2; - if (val > 0) + // If trading with FRLG, both players must be champion + if (isGameFrLg > 0) { - if (gLinkPlayers[GetMultiplayerId()].name[10] & 0xF0) + // Is player champion + if (gLinkPlayers[GetMultiplayerId()].progressFlagsCopy & 0xF0) { - if (val == 2) + if (isGameFrLg == 2) //unnecessary check, isGameFrLg always 2 here { - if (gLinkPlayers[GetMultiplayerId() ^ 1].name[10] & 0xF0) - { - return 0; - } + // Is partner champion + if (gLinkPlayers[GetMultiplayerId() ^ 1].progressFlagsCopy & 0xF0) + return TRADE_BOTH_PLAYERS_READY; else - { - return 2; - } + return TRADE_PARTNER_NOT_READY; } } else { - return 1; + return TRADE_PLAYER_NOT_READY; } } } - return 0; + return TRADE_BOTH_PLAYERS_READY; } static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) @@ -3629,122 +2450,118 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) return FALSE; } -int sub_807A7E0(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet) +int GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, struct UnkLinkRfuStruct_02022B14Substruct rfuPartner, u16 playerSpecies2, u16 partnerSpecies, u8 requestedType, u16 playerSpecies, u8 isObedientBitSet) { - u8 r9 = a0.unk_01_0; - u8 r2 = a0.unk_00_7; - u8 r10 = a1.unk_01_0; - u8 r0 = a1.unk_00_7; - u8 r1 = a1.unk_01_2; + bool8 playerHasNationalDex = rfuPlayer.hasNationalDex; + bool8 playerIsChampion = rfuPlayer.isChampion; + bool8 partnerHasNationalDex = rfuPartner.hasNationalDex; + bool8 partnerIsChampion = rfuPartner.isChampion; + u8 r1 = rfuPartner.unk_01_2; if (r1 != 3) { - if (!r2) + if (!playerIsChampion) { - return 8; + return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_1; } - else if (!r0) + else if (!partnerIsChampion) { - return 9; + return UR_TRADE_MSG_CANT_TRADE_WITH_PARTNER_2; } } - if (IsDeoxysOrMewUntradable(species3, isObedientBitSet)) + if (IsDeoxysOrMewUntradable(playerSpecies, isObedientBitSet)) { - return 4; + return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; } - if (species2 == SPECIES_EGG) + if (partnerSpecies == SPECIES_EGG) { - if (species1 != species2) + if (playerSpecies2 != partnerSpecies) { - return 2; + return UR_TRADE_MSG_NOT_EGG; } } else { - if (gBaseStats[species1].type1 != type && gBaseStats[species1].type2 != type) + if (gBaseStats[playerSpecies2].type1 != requestedType && gBaseStats[playerSpecies2].type2 != requestedType) { - return 1; + return UR_TRADE_MSG_NOT_MON_PARTNER_WANTS; } } - if (species1 == SPECIES_EGG && species1 != species2) + if (playerSpecies2 == SPECIES_EGG && playerSpecies2 != partnerSpecies) { - return 3; + return UR_TRADE_MSG_MON_CANT_BE_TRADED_1; } - if (!r9) + if (!playerHasNationalDex) { - if (species1 == SPECIES_EGG) + if (playerSpecies2 == SPECIES_EGG) { - return 6; + return UR_TRADE_MSG_EGG_CANT_BE_TRADED; } - if (!IsSpeciesInHoennDex(species1)) + if (!IsSpeciesInHoennDex(playerSpecies2)) { - return 4; + return UR_TRADE_MSG_MON_CANT_BE_TRADED_2; } - if (!IsSpeciesInHoennDex(species2)) + if (!IsSpeciesInHoennDex(partnerSpecies)) { - return 5; + return UR_TRADE_MSG_PARTNERS_MON_CANT_BE_TRADED; } } - if (!r10 && !IsSpeciesInHoennDex(species1)) + if (!partnerHasNationalDex && !IsSpeciesInHoennDex(playerSpecies2)) { - return 7; + return UR_TRADE_MSG_PARTNER_CANT_ACCEPT_MON; } - return 0; + return UR_TRADE_MSG_NONE; } -int sub_807A8D0(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3) +int CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct rfuPlayer, u16 species2, u16 species, u8 isObedientBitSet) { - u8 unk = a0.unk_01_0; + bool8 hasNationalDex = rfuPlayer.hasNationalDex; - if (IsDeoxysOrMewUntradable(a2, a3)) - { - return 1; - } + if (IsDeoxysOrMewUntradable(species, isObedientBitSet)) + return CANT_REGISTER_MON; - if (unk) - { - return 0; - } + if (hasNationalDex) + return CAN_REGISTER_MON; - if (species == SPECIES_EGG) - { - return 2; - } + // Eggs can only be traded if the player has the National Dex + if (species2 == SPECIES_EGG) + return CANT_REGISTER_EGG; - if (IsSpeciesInHoennDex(species)) - { - return 0; - } + if (IsSpeciesInHoennDex(species2)) + return CAN_REGISTER_MON; - return 1; + return CANT_REGISTER_MON; } // r6/r7 flip. Ugh. +// Spin Trade wasnt fully implemented, but this checks if a mon would be valid to Spin Trade +// Unlike later generations, this version of Spin Trade isnt only for Eggs #ifdef NONMATCHING -int sub_807A918(struct Pokemon *mon, u16 monIdx) +int CanSpinTradeMon(struct Pokemon *mon, u16 monIdx) { - int i, version, versions, unk, unk2; + int i, version, versions, canTradeAnyMon, numMonsLeft; int speciesArray[PARTY_SIZE]; + // Make Eggs not count for numMonsLeft for (i = 0; i < gPlayerPartyCount; i++) { speciesArray[i] = GetMonData(&mon[i], MON_DATA_SPECIES2); if (speciesArray[i] == SPECIES_EGG) { - speciesArray[i] = 0; + speciesArray[i] = SPECIES_NONE; } } + canTradeAnyMon = TRUE; versions = 0; - unk = 1; for (i = 0; i < GetLinkPlayerCount(); i++) { version = gLinkPlayers[i].version & 0xFF; @@ -3762,51 +2579,41 @@ int sub_807A918(struct Pokemon *mon, u16 monIdx) for (i = 0; i < GetLinkPlayerCount(); i++) { struct LinkPlayer *player = &gLinkPlayers[i]; - if ((player->name[8] & 0xF) == 0) - { - unk = 0; - } - if (versions && (player->name[8] / 16)) - { - unk = 0; - } + // Does player not have National Dex + if (!(player->progressFlags & 0xF)) + canTradeAnyMon = FALSE; + + if (versions && (player->progressFlags / 16)) + canTradeAnyMon = FALSE; } - if (unk == 0) + if (canTradeAnyMon == FALSE) { if (!IsSpeciesInHoennDex(speciesArray[monIdx])) - { - return 2; - } + return CANT_TRADE_NATIONAL; if (speciesArray[monIdx] == SPECIES_NONE) - { - return 3; - } + return CANT_TRADE_EGG_YET; } - unk2 = 0; + numMonsLeft = 0; for (i = 0; i < gPlayerPartyCount; i++) { if (monIdx != i) { - unk2 += speciesArray[i]; + numMonsLeft += speciesArray[i]; } } - if (!unk2) - { - return 1; - } + if (!numMonsLeft) + return CANT_TRADE_LAST_MON; else - { - return 0; - } + return CAN_TRADE_MON; } #else NAKED -int sub_807A918(struct Pokemon *mon, u16 a1) +int CanSpinTradeMon(struct Pokemon *mon, u16 a1) { asm_unified("push {r4-r7,lr}\n\ mov r7, r8\n\ @@ -4009,11 +2816,11 @@ static void sub_807AB04(struct Sprite *sprite) } } -static void sub_807AB28(void) +static void SetTradeBGAffine(void) { struct BgAffineDstData affine; - DoBgAffineSet(&affine, gUnknown_020322A0->unk_D4 * 0x100, gUnknown_020322A0->unk_D6 * 0x100, gUnknown_020322A0->unk_DC, gUnknown_020322A0->unk_DE, gUnknown_020322A0->unk_E8, gUnknown_020322A0->unk_E8, gUnknown_020322A0->unk_EC); + DoBgAffineSet(&affine, sTradeData->texX * 0x100, sTradeData->texY * 0x100, sTradeData->scrX, sTradeData->scrY, sTradeData->sXY, sTradeData->sXY, sTradeData->alpha); SetGpuReg(REG_OFFSET_BG2PA, affine.pa); SetGpuReg(REG_OFFSET_BG2PB, affine.pb); SetGpuReg(REG_OFFSET_BG2PC, affine.pc); @@ -4024,233 +2831,233 @@ static void sub_807AB28(void) SetGpuReg(REG_OFFSET_BG2Y_H, affine.dy >> 16); } -static void sub_807ABCC(void) +static void SetTradeGpuRegs(void) { u16 dispcnt; - SetGpuReg(REG_OFFSET_BG1VOFS, gUnknown_020322A0->bg1vofs); - SetGpuReg(REG_OFFSET_BG1HOFS, gUnknown_020322A0->bg1hofs); + SetGpuReg(REG_OFFSET_BG1VOFS, sTradeData->bg1vofs); + SetGpuReg(REG_OFFSET_BG1HOFS, sTradeData->bg1hofs); dispcnt = GetGpuReg(REG_OFFSET_DISPCNT); if ((dispcnt & 7) == DISPCNT_MODE_0) { - SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_020322A0->bg2vofs); - SetGpuReg(REG_OFFSET_BG2HOFS, gUnknown_020322A0->bg2hofs); + SetGpuReg(REG_OFFSET_BG2VOFS, sTradeData->bg2vofs); + SetGpuReg(REG_OFFSET_BG2HOFS, sTradeData->bg2hofs); } else { - sub_807AB28(); + SetTradeBGAffine(); } } -static void sub_807AC24(void) +static void VBlankCB_Trade(void) { - sub_807ABCC(); + SetTradeGpuRegs(); LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -static void sub_807AC3C(void) +static void ClearLinkTimeoutCounter(void) { - gUnknown_020322A0->unk_8A = 0; - gUnknown_020322A0->unk_88 = 0; - gUnknown_020322A0->unk_89 = 0; + sTradeData->linkTimeoutCounter = 0; + sTradeData->alwaysZero_88 = 0; + sTradeData->alwaysZero_89 = 0; } -static void sub_807AC64(void) +static void CheckForLinkTimeout(void) { - if (gUnknown_020322A0->unk_88 == gUnknown_020322A0->unk_89) - gUnknown_020322A0->unk_8A++; + if (sTradeData->alwaysZero_88 == sTradeData->alwaysZero_89) + sTradeData->linkTimeoutCounter++; else - gUnknown_020322A0->unk_8A = 0; + sTradeData->linkTimeoutCounter = 0; - if (gUnknown_020322A0->unk_8A > 300) + if (sTradeData->linkTimeoutCounter > LINK_TRADE_TIMEOUT) { CloseLink(); SetMainCallback2(CB2_LinkError); - gUnknown_020322A0->unk_8A = 0; - gUnknown_020322A0->unk_89 = 0; - gUnknown_020322A0->unk_88 = 0; + sTradeData->linkTimeoutCounter = 0; + sTradeData->alwaysZero_89 = 0; + sTradeData->alwaysZero_88 = 0; } - gUnknown_020322A0->unk_89 = gUnknown_020322A0->unk_88; + sTradeData->alwaysZero_89 = sTradeData->alwaysZero_88; } -static u32 sub_807ACDC(void) +static u32 TradeGetMultiplayerId(void) { if (gReceivedRemoteLinkPlayers) return GetMultiplayerId(); return 0; } -static void sub_807ACFC(u8 whichParty, u8 a1) +static void LoadTradeMonPic(u8 whichParty, u8 state) { int pos = 0; struct Pokemon *mon = NULL; u16 species; u32 personality; - if (whichParty == 0) + if (whichParty == TRADE_PLAYER) { - mon = &gPlayerParty[gUnknown_02032298[0]]; - pos = 1; + mon = &gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]]; + pos = B_POSITION_OPPONENT_LEFT; } - if (whichParty == 1) + if (whichParty == TRADE_PARTNER) { - mon = &gEnemyParty[gUnknown_02032298[1] % PARTY_SIZE]; - pos = 3; + mon = &gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE]; + pos = B_POSITION_OPPONENT_RIGHT; } - switch (a1) + switch (state) { - case 0: - species = GetMonData(mon, MON_DATA_SPECIES2); - personality = GetMonData(mon, MON_DATA_PERSONALITY); + case 0: + species = GetMonData(mon, MON_DATA_SPECIES2); + personality = GetMonData(mon, MON_DATA_PERSONALITY); - if (whichParty == 0) - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); - else - HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); + if (whichParty == TRADE_PLAYER) + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality); + else + HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[whichParty * 2 + 1], species, personality); - LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); - gUnknown_020322A0->tradeSpecies[whichParty] = species; - gUnknown_020322A0->unk_68[whichParty] = personality; - break; - case 1: - SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); - gUnknown_020322A0->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[whichParty]].invisible = TRUE; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; - break; + LoadCompressedSpritePalette(GetMonSpritePalStruct(mon)); + sTradeData->monSpecies[whichParty] = species; + sTradeData->monPersonalities[whichParty] = personality; + break; + case 1: + SetMultiuseSpriteTemplateToPokemon(GetMonSpritePalStruct(mon)->tag, pos); + sTradeData->pokePicSpriteIdxs[whichParty] = CreateSprite(&gMultiuseSpriteTemplate, 120, 60, 6); + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[whichParty]].callback = SpriteCallbackDummy; + break; } } -void sub_807AE50(void) +void CB2_LinkTrade(void) { switch (gMain.state) { - case 0: - if (!gReceivedRemoteLinkPlayers) - { - gLinkType = 0x1144; - CloseLink(); - } - gUnknown_020322A0 = AllocZeroed(sizeof(*gUnknown_020322A0)); - AllocateMonSpritesGfx(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(sub_807AC24); - sub_807B170(); - sub_807AC3C(); + case 0: + if (!gReceivedRemoteLinkPlayers) + { + gLinkType = LINKTYPE_0x1144; + CloseLink(); + } + sTradeData = AllocZeroed(sizeof(*sTradeData)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_Trade); + InitTradeBgInternal(); + ClearLinkTimeoutCounter(); + gMain.state++; + sTradeData->neverRead_8C = 0; + sTradeData->state = 0; + sTradeData->isLinkTrade = TRUE; + sTradeData->texX = 64; + sTradeData->texY = 64; + sTradeData->neverRead_D8 = 0; + sTradeData->neverRead_DA = 0; + sTradeData->scrX = 120; + sTradeData->scrY = 80; + sTradeData->sXY = 256; + sTradeData->alpha = 0; + break; + case 1: + if (!gReceivedRemoteLinkPlayers) + { + sTradeData->isCableTrade = TRUE; + OpenLink(); gMain.state++; - gUnknown_020322A0->unk_8C = 0; - gUnknown_020322A0->state = 0; - gUnknown_020322A0->isLinkTrade = TRUE; - gUnknown_020322A0->unk_D4 = 64; - gUnknown_020322A0->unk_D6 = 64; - gUnknown_020322A0->unk_D8 = 0; - gUnknown_020322A0->unk_DA = 0; - gUnknown_020322A0->unk_DC = 120; - gUnknown_020322A0->unk_DE = 80; - gUnknown_020322A0->unk_E8 = 256; - gUnknown_020322A0->unk_EC = 0; - break; - case 1: - if (!gReceivedRemoteLinkPlayers) - { - gUnknown_020322A0->unk_FA = 1; - OpenLink(); - gMain.state++; - gUnknown_020322A0->timer = 0; - } - else - { - gMain.state = 4; - } - break; - case 2: - if (++gUnknown_020322A0->timer > 60) - { - gUnknown_020322A0->timer = 0; - gMain.state++; - } - break; - case 3: - if (IsLinkMaster()) + sTradeData->timer = 0; + } + else + { + gMain.state = 4; + } + break; + case 2: + if (++sTradeData->timer > 60) + { + sTradeData->timer = 0; + gMain.state++; + } + break; + case 3: + if (IsLinkMaster()) + { + if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) { - if (GetLinkPlayerCount_2() >= GetSavedPlayerCount()) - { - if (++gUnknown_020322A0->timer > 30) - { - CheckShouldAdvanceLinkState(); - gMain.state++; - } - } - else + if (++sTradeData->timer > 30) { - sub_807AC64(); + CheckShouldAdvanceLinkState(); + gMain.state++; } } else { - gMain.state++; + CheckForLinkTimeout(); } - break; - case 4: - sub_807AC64(); - if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) - gMain.state++; - break; - case 5: - gUnknown_020322A0->unk_72 = 0; - gUnknown_020322A0->unk_73 = 0; - gUnknown_020322A0->unk_93 = 0; - sub_807ACFC(0, 0); - gMain.state++; - break; - case 6: - sub_807ACFC(0, 1); - gMain.state++; - break; - case 7: - sub_807ACFC(1, 0); - gMain.state++; - break; - case 8: - sub_807ACFC(1, 1); - sub_807B154(); - gMain.state++; - break; - case 9: - sub_807BA94(); - LoadSpriteSheet(&gUnknown_08338D18); - LoadSpritePalette(&gUnknown_08338D20); - gMain.state++; - break; - case 10: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - ShowBg(0); + } + else + { gMain.state++; - break; - case 11: - sub_807B140(); - SetTradeSceneStrings(); + } + break; + case 4: + CheckForLinkTimeout(); + if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) gMain.state++; - break; - case 12: - if (!gPaletteFade.active) + break; + case 5: + sTradeData->playerLinkFlagFinishTrade = 0; + sTradeData->partnerLinkFlagFinishTrade = 0; + sTradeData->sendTradeFinishState = 0; + LoadTradeMonPic(TRADE_PLAYER, 0); + gMain.state++; + break; + case 6: + LoadTradeMonPic(TRADE_PLAYER, 1); + gMain.state++; + break; + case 7: + LoadTradeMonPic(TRADE_PARTNER, 0); + gMain.state++; + break; + case 8: + LoadTradeMonPic(TRADE_PARTNER, 1); + LinkTradeDrawWindow(); + gMain.state++; + break; + case 9: + LoadTradeSequenceSpriteSheetsAndPalettes(); + LoadSpriteSheet(&sPokeBallSpriteSheet); + LoadSpritePalette(&sPokeBallSpritePalette); + gMain.state++; + break; + case 10: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + gMain.state++; + break; + case 11: + InitTradeSequenceBgGpuRegs(); + BufferTradeSceneStrings(); + gMain.state++; + break; + case 12: + if (!gPaletteFade.active) + { + if (gWirelessCommType) { - if (gWirelessCommType) - { - LoadWirelessStatusIndicatorSpriteGfx(); - CreateWirelessStatusIndicatorSprite(0, 0); - } - SetMainCallback2(sub_807EA2C); + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); } - break; + SetMainCallback2(CB2_UpdateLinkTrade); + } + break; } RunTasks(); RunTextPrinters(); @@ -4259,24 +3066,24 @@ void sub_807AE50(void) UpdatePaletteFade(); } -void sub_807B140(void) +void InitTradeSequenceBgGpuRegs(void) { - sub_807B62C(5); - sub_807B62C(0); + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); } -void sub_807B154(void) +void LinkTradeDrawWindow(void) { FillWindowPixelBuffer(0, PIXEL_FILL(15)); PutWindowTilemap(0); CopyWindowToVram(0, 3); } -static void sub_807B170(void) +static void InitTradeBgInternal(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_08339014, ARRAY_COUNT(gUnknown_08339014)); + InitBgsFromTemplates(0, sTradeSequenceBgTemplates, ARRAY_COUNT(sTradeSequenceBgTemplates)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); SetBgTilemapBuffer(0, Alloc(0x800)); @@ -4287,88 +3094,87 @@ static void sub_807B170(void) LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer); CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0); LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); - InitWindows(gUnknown_08338FFC); + InitWindows(sTradeSequenceWindowTemplates); DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); LZDecompressWram(gBattleTextboxTilemap, gDecompressionBuffer); CopyToBgTilemapBuffer(0, gDecompressionBuffer, 0x800, 0); LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); } -// In-game trade init -static void sub_807B270(void) +static void CB2_InGameTrade(void) { u8 otName[11]; switch (gMain.state) { - case 0: - gUnknown_02032298[0] = gSpecialVar_0x8005; - gUnknown_02032298[1] = 6; - StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); - GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); - StringCopy(gLinkPlayers[1].name, otName); - gLinkPlayers[0].language = LANGUAGE_ENGLISH; - gLinkPlayers[1].language = GetMonData(&gEnemyParty[0], MON_DATA_LANGUAGE); - gUnknown_020322A0 = AllocZeroed(sizeof(*gUnknown_020322A0)); - AllocateMonSpritesGfx(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - SetVBlankCallback(sub_807AC24); - sub_807B170(); - gUnknown_020322A0->isLinkTrade = FALSE; - gUnknown_020322A0->unk_8C = 0; - gUnknown_020322A0->state = 0; - gUnknown_020322A0->unk_D4 = 64; - gUnknown_020322A0->unk_D6 = 64; - gUnknown_020322A0->unk_D8 = 0; - gUnknown_020322A0->unk_DA = 0; - gUnknown_020322A0->unk_DC = 120; - gUnknown_020322A0->unk_DE = 80; - gUnknown_020322A0->unk_E8 = 256; - gUnknown_020322A0->unk_EC = 0; - gUnknown_020322A0->timer = 0; - gMain.state = 5; - break; - case 5: - sub_807ACFC(0, 0); - gMain.state++; - break; - case 6: - sub_807ACFC(0, 1); - gMain.state++; - break; - case 7: - sub_807ACFC(1, 0); - ShowBg(0); - gMain.state++; - break; - case 8: - sub_807ACFC(1, 1); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - PutWindowTilemap(0); - CopyWindowToVram(0, 3); - gMain.state++; - break; - case 9: - sub_807BA94(); - LoadSpriteSheet(&gUnknown_08338D18); - LoadSpritePalette(&gUnknown_08338D20); - gMain.state++; - break; - case 10: - ShowBg(0); - gMain.state++; - break; - case 11: - sub_807B62C(5); - sub_807B62C(0); - SetTradeSceneStrings(); - gMain.state++; - break; - case 12: - SetMainCallback2(sub_807B60C); - break; + case 0: + gSelectedTradeMonPositions[TRADE_PLAYER] = gSpecialVar_0x8005; + gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE; + StringCopy(gLinkPlayers[0].name, gSaveBlock2Ptr->playerName); + GetMonData(&gEnemyParty[0], MON_DATA_OT_NAME, otName); + StringCopy(gLinkPlayers[1].name, otName); + gLinkPlayers[0].language = LANGUAGE_ENGLISH; + gLinkPlayers[1].language = GetMonData(&gEnemyParty[0], MON_DATA_LANGUAGE); + sTradeData = AllocZeroed(sizeof(*sTradeData)); + AllocateMonSpritesGfx(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_Trade); + InitTradeBgInternal(); + sTradeData->isLinkTrade = FALSE; + sTradeData->neverRead_8C = 0; + sTradeData->state = 0; + sTradeData->texX = 64; + sTradeData->texY = 64; + sTradeData->neverRead_D8 = 0; + sTradeData->neverRead_DA = 0; + sTradeData->scrX = 120; + sTradeData->scrY = 80; + sTradeData->sXY = 256; + sTradeData->alpha = 0; + sTradeData->timer = 0; + gMain.state = 5; + break; + case 5: + LoadTradeMonPic(TRADE_PLAYER, 0); + gMain.state++; + break; + case 6: + LoadTradeMonPic(TRADE_PLAYER, 1); + gMain.state++; + break; + case 7: + LoadTradeMonPic(TRADE_PARTNER, 0); + ShowBg(0); + gMain.state++; + break; + case 8: + LoadTradeMonPic(TRADE_PARTNER, 1); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + gMain.state++; + break; + case 9: + LoadTradeSequenceSpriteSheetsAndPalettes(); + LoadSpriteSheet(&sPokeBallSpriteSheet); + LoadSpritePalette(&sPokeBallSpritePalette); + gMain.state++; + break; + case 10: + ShowBg(0); + gMain.state++; + break; + case 11: + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(0); + BufferTradeSceneStrings(); + gMain.state++; + break; + case 12: + SetMainCallback2(CB2_UpdateInGameTrade); + break; } RunTasks(); @@ -4378,7 +3184,7 @@ static void sub_807B270(void) UpdatePaletteFade(); } -static void sub_807B464(u8 partyIdx) +static void UpdatePokedexForReceivedMon(u8 partyIdx) { struct Pokemon *mon = &gPlayerParty[partyIdx]; @@ -4392,7 +3198,8 @@ static void sub_807B464(u8 partyIdx) } } -static void sub_807B4C4(void) +// Functionally nop after commented code +static void TryEnableNationalDexFromLinkPartner(void) { u8 mpId = GetMultiplayerId(); // Originally in Ruby but commented out @@ -4400,56 +3207,55 @@ static void sub_807B4C4(void) EnableNationalPokedex();*/ } -static void sub_807B4D0(u8 a0, u8 a1) +static void TradeMons(u8 playerPartyIdx, u8 partnerPartyIdx) { u8 friendship; - struct Pokemon *playerMon = &gPlayerParty[a0]; + struct Pokemon *playerMon = &gPlayerParty[playerPartyIdx]; u16 playerMail = GetMonData(playerMon, MON_DATA_MAIL); - struct Pokemon *partnerMon = &gEnemyParty[a1]; + struct Pokemon *partnerMon = &gEnemyParty[partnerPartyIdx]; u16 partnerMail = GetMonData(partnerMon, MON_DATA_MAIL); if (playerMail != 0xFF) ClearMailStruct(&gSaveBlock1Ptr->mail[playerMail]); - // This is where the actual trade happens!! - gUnknown_020322A0->mon = *playerMon; + sTradeData->mon = *playerMon; *playerMon = *partnerMon; - *partnerMon = gUnknown_020322A0->mon; + *partnerMon = sTradeData->mon; friendship = 70; if (!GetMonData(playerMon, MON_DATA_IS_EGG)) SetMonData(playerMon, MON_DATA_FRIENDSHIP, &friendship); if (partnerMail != 0xFF) - GiveMailToMon2(playerMon, &gUnknown_020321C0[partnerMail]); + GiveMailToMon2(playerMon, &gTradeMail[partnerMail]); - sub_807B464(a0); + UpdatePokedexForReceivedMon(playerPartyIdx); if (gReceivedRemoteLinkPlayers) - sub_807B4C4(); + TryEnableNationalDexFromLinkPartner(); } -static void sub_807B5B8(void) +static void TrySendTradeFinishData(void) { - switch (gUnknown_020322A0->unk_93) + switch (sTradeData->sendTradeFinishState) { - case 1: - if (IsLinkTaskFinished()) - { - Trade_SendData(gUnknown_020322A0); - gUnknown_020322A0->unk_93++; - } - // fallthrough - case 2: - gUnknown_020322A0->unk_93 = 0; - break; + case 1: + if (IsLinkTaskFinished()) + { + Trade_SendData(sTradeData); + sTradeData->sendTradeFinishState++; + } + // fallthrough + case 2: + sTradeData->sendTradeFinishState = 0; + break; } } -static void sub_807B60C(void) +static void CB2_UpdateInGameTrade(void) { - sub_807BBC8(); + AnimateTradeSequence(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -4457,1244 +3263,1238 @@ static void sub_807B60C(void) UpdatePaletteFade(); } -static void sub_807B62C(u8 a0) +static void SetTradeSequenceBgGpuRegs(u8 state) { - switch (a0) + switch (state) { - case 0: - gUnknown_020322A0->bg2vofs = 0; - gUnknown_020322A0->bg2hofs = 180; - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG0_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | - BGCNT_CHARBASE(1) | - BGCNT_16COLOR | - BGCNT_SCREENBASE(18) | - BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, 16, 0x60); - DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); - DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000); - break; - case 1: - gUnknown_020322A0->bg1hofs = 0; - gUnknown_020322A0->bg1vofs = 348; - SetGpuReg(REG_OFFSET_BG1VOFS, 348); - SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | - BGCNT_CHARBASE(0) | - BGCNT_16COLOR | - BGCNT_SCREENBASE(5) | - BGCNT_TXT256x512); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | - BGCNT_CHARBASE(1) | - BGCNT_16COLOR | - BGCNT_SCREENBASE(18) | - BGCNT_TXT256x512); - - if (gUnknown_020322A0->unk_FA) - { - DmaCopy16Defvars(3, gUnknown_083369A0, (void *) BG_SCREEN_ADDR(5), 0x1000); - } - else - { - DmaCopy16Defvars(3, gUnknown_083359A0, (void *) BG_SCREEN_ADDR(5), 0x1000); - } + case 0: + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 180; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | + BGCNT_CHARBASE(1) | + BGCNT_16COLOR | + BGCNT_SCREENBASE(18) | + BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, 16, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000); + break; + case 1: + sTradeData->bg1hofs = 0; + sTradeData->bg1vofs = 348; + SetGpuReg(REG_OFFSET_BG1VOFS, 348); + SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | + BGCNT_CHARBASE(0) | + BGCNT_16COLOR | + BGCNT_SCREENBASE(5) | + BGCNT_TXT256x512); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | + BGCNT_CHARBASE(1) | + BGCNT_16COLOR | + BGCNT_SCREENBASE(18) | + BGCNT_TXT256x512); + + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, sTradeTilemap_GbaCable, (void *) BG_SCREEN_ADDR(5), 0x1000); + } + else + { + DmaCopy16Defvars(3, sTradeTilemap_GbaWireless, (void *) BG_SCREEN_ADDR(5), 0x1000); + } - DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(0), 0x1420, 0x1000); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - break; - case 2: - gUnknown_020322A0->bg1vofs = 0; - gUnknown_020322A0->bg1hofs = 0; - if (!gUnknown_020322A0->unk_FA) - { - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - LZ77UnCompVram(gUnknown_083379A0, (void *) BG_SCREEN_ADDR(5)); - BlendPalettes(0x8, 16, RGB_BLACK); - } - else - { - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - DmaCopy16Defvars(3, gUnknown_0832FFC0, (void *) BG_SCREEN_ADDR(5), 0x800); - BlendPalettes(0x1, 16, RGB_BLACK); - } - break; - case 3: - LoadPalette(gUnknown_08337EA0, 48, 0x20); - LZ77UnCompVram(gUnknown_08337EC0, (void *) BG_CHAR_ADDR(1)); - LZ77UnCompVram(gUnknown_08338550, (void *) BG_SCREEN_ADDR(18)); - gUnknown_020322A0->bg2vofs = 80; - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - break; - case 4: + DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(0), 0x1420, 0x1000); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 2: + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; + if (!sTradeData->isCableTrade) + { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | - DISPCNT_BG2_ON | + DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | - BGCNT_CHARBASE(1) | - BGCNT_256COLOR | - BGCNT_SCREENBASE(18) | - BGCNT_AFF128x128); - gUnknown_020322A0->unk_D4 = 64; - gUnknown_020322A0->unk_D6 = 92; - gUnknown_020322A0->unk_E8 = 32; - gUnknown_020322A0->unk_EA = 1024; - gUnknown_020322A0->unk_EC = 0; - - DmaCopyLarge16(3, gUnknown_08332F60, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000); - - if (gUnknown_020322A0->unk_FA) - { - DmaCopy16Defvars(3, gUnknown_083357A0, (void *) BG_SCREEN_ADDR(18), 0x100); - } - else - { - DmaCopy16Defvars(3, gUnknown_083358A0, (void *) BG_SCREEN_ADDR(18), 0x100); - } - break; - case 5: - gUnknown_020322A0->bg1vofs = 0; - gUnknown_020322A0->bg1hofs = 0; - break; - case 6: + LZ77UnCompVram(gUnknown_083379A0, (void *) BG_SCREEN_ADDR(5)); + BlendPalettes(0x8, 16, RGB_BLACK); + } + else + { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | - DISPCNT_BG2_ON | + DISPCNT_BG1_ON | DISPCNT_OBJ_ON); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | - BGCNT_CHARBASE(1) | - BGCNT_256COLOR | - BGCNT_SCREENBASE(18) | - BGCNT_AFF128x128); - gUnknown_020322A0->unk_D4 = 64; - gUnknown_020322A0->unk_D6 = 92; - gUnknown_020322A0->unk_E8 = 256; - gUnknown_020322A0->unk_EA = 128; - gUnknown_020322A0->unk_DC = 120; - gUnknown_020322A0->unk_DE = 80; - gUnknown_020322A0->unk_EC = 0; - - DmaCopyLarge16(3, gUnknown_08332F60, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000); - - if (gUnknown_020322A0->unk_FA) - { - DmaCopy16Defvars(3, gUnknown_083357A0, (void *) BG_SCREEN_ADDR(18), 0x100); - } - else - { - DmaCopy16Defvars(3, gUnknown_083358A0, (void *) BG_SCREEN_ADDR(18), 0x100); - } - break; - case 7: - gUnknown_020322A0->bg2vofs = 0; - gUnknown_020322A0->bg2hofs = 0; - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | - BGCNT_CHARBASE(1) | - BGCNT_16COLOR | - BGCNT_SCREENBASE(18) | - BGCNT_TXT512x256); - LoadPalette(gTradeGba2_Pal, 16, 0x60); - DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); - DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000); - break; + DmaCopy16Defvars(3, sTradeTilemap_Cable, (void *) BG_SCREEN_ADDR(5), 0x800); + BlendPalettes(0x1, 16, RGB_BLACK); + } + break; + case 3: + LoadPalette(sTradePal_Black, 48, 0x20); + LZ77UnCompVram(sTradeGfx_WirelessSignal, (void *) BG_CHAR_ADDR(1)); + LZ77UnCompVram(sTradeTilemap_WirelessSignal, (void *) BG_SCREEN_ADDR(18)); + sTradeData->bg2vofs = 80; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + break; + case 4: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | + BGCNT_CHARBASE(1) | + BGCNT_256COLOR | + BGCNT_SCREENBASE(18) | + BGCNT_AFF128x128); + sTradeData->texX = 64; + sTradeData->texY = 92; + sTradeData->sXY = 32; + sTradeData->unk_EA = 1024; + sTradeData->alpha = 0; + + DmaCopyLarge16(3, sTradeAffine_Gba, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000); + + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, sTradeAffineMap_GbaCable, (void *) BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, sTradeAffineMap_GbaWireless, (void *) BG_SCREEN_ADDR(18), 0x100); + } + break; + case 5: + sTradeData->bg1vofs = 0; + sTradeData->bg1hofs = 0; + break; + case 6: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | + BGCNT_CHARBASE(1) | + BGCNT_256COLOR | + BGCNT_SCREENBASE(18) | + BGCNT_AFF128x128); + sTradeData->texX = 64; + sTradeData->texY = 92; + sTradeData->sXY = 256; + sTradeData->unk_EA = 128; + sTradeData->scrX = 120; + sTradeData->scrY = 80; + sTradeData->alpha = 0; + + DmaCopyLarge16(3, sTradeAffine_Gba, (void *) BG_CHAR_ADDR(1), 0x2840, 0x1000); + + if (sTradeData->isCableTrade) + { + DmaCopy16Defvars(3, sTradeAffineMap_GbaCable, (void *) BG_SCREEN_ADDR(18), 0x100); + } + else + { + DmaCopy16Defvars(3, sTradeAffineMap_GbaWireless, (void *) BG_SCREEN_ADDR(18), 0x100); + } + break; + case 7: + sTradeData->bg2vofs = 0; + sTradeData->bg2hofs = 0; + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | + BGCNT_CHARBASE(1) | + BGCNT_16COLOR | + BGCNT_SCREENBASE(18) | + BGCNT_TXT512x256); + LoadPalette(gTradeGba2_Pal, 16, 0x60); + DmaCopyLarge16(3, gTradeGba_Gfx, (void *) BG_CHAR_ADDR(1), 0x1420, 0x1000); + DmaCopy16Defvars(3, gUnknown_08331F60, (void *) BG_SCREEN_ADDR(18), 0x1000); + break; } } -static void sub_807BA94(void) +static void LoadTradeSequenceSpriteSheetsAndPalettes(void) { - LoadSpriteSheet(&gUnknown_08338D70); - LoadSpriteSheet(&gUnknown_08338DC0); - LoadSpriteSheet(&gUnknown_08338DF4); - LoadSpriteSheet(&gUnknown_08338E6C); - LoadSpritePalette(&gUnknown_08338D78); - LoadSpritePalette(&gUnknown_08338D80); + LoadSpriteSheet(&sGlow1SpriteSheet); + LoadSpriteSheet(&sGlow2SpriteSheet); + LoadSpriteSheet(&sCableEndSpriteSheet); + LoadSpriteSheet(&sGbaScreenSpriteSheet); + LoadSpritePalette(&sMiscTradeSpritePalette); + LoadSpritePalette(&sGbaSpritePalette); } -static void SetTradeSceneStrings(void) +// Buffers "[Pokemon] will be sent to [Trainer]" strings +static void BufferTradeSceneStrings(void) { - /*Sets the variable strings printed on the - *actual trading screen. For use in strings - *like "[Pokemon] will be sent to [Trainer]." - */ u8 mpId; u8 name[20]; const struct InGameTrade *ingameTrade; - if (gUnknown_020322A0->isLinkTrade) + if (sTradeData->isLinkTrade) { mpId = GetMultiplayerId(); StringCopy(gStringVar1, gLinkPlayers[mpId ^ 1].name); - GetMonData(&gEnemyParty[gUnknown_02032298[1] % PARTY_SIZE], MON_DATA_NICKNAME, name); + GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_NICKNAME, name); StringCopy10(gStringVar3, name); - GetMonData(&gPlayerParty[gUnknown_02032298[0]], MON_DATA_NICKNAME, name); + GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_NICKNAME, name); StringCopy10(gStringVar2, name); } else { - ingameTrade = &gIngameTrades[gSpecialVar_0x8004]; + ingameTrade = &sIngameTrades[gSpecialVar_0x8004]; StringCopy(gStringVar1, ingameTrade->otName); - StringCopy10(gStringVar3, ingameTrade->name); + StringCopy10(gStringVar3, ingameTrade->nickname); GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, name); StringCopy10(gStringVar2, name); } } -static u8 sub_807BBC8(void) +// returns TRUE if it was a link trade, FALSE if it was an in-game trade +static bool8 AnimateTradeSequence(void) { - if (gUnknown_020322A0->unk_FA) - { - return sub_807BBEC(); - } + if (sTradeData->isCableTrade) + return AnimateTradeSequenceCable(); else - { - return sub_807CFC8(); - } + return AnimateTradeSequenceWireless(); } -static bool8 sub_807BBEC(void) +static bool8 AnimateTradeSequenceCable(void) { u16 evoTarget; - switch (gUnknown_020322A0->state) + switch (sTradeData->state) { - case 0: - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = -180; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[0]].y_offset; - gUnknown_020322A0->state++; - gUnknown_020322A0->cachedMapMusic = GetCurrentMapMusic(); - PlayNewMapMusic(MUS_SHINKA); - break; - case 1: - if (gUnknown_020322A0->bg2hofs > 0) - { - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x += 3; - gUnknown_020322A0->bg2hofs -= 3; - } - else - { - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = 0; - gUnknown_020322A0->bg2hofs = 0; - gUnknown_020322A0->state = 10; - } - break; - case 10: - StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); - sub_807F1A8(0, gStringVar4, 0); + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); - if (gUnknown_020322A0->tradeSpecies[0] != SPECIES_EGG) - { - PlayCry1(gUnknown_020322A0->tradeSpecies[0], 0); - } + if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) + { + PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0); + } - gUnknown_020322A0->state = 11; - gUnknown_020322A0->timer = 0; - break; - case 11: - if (++gUnknown_020322A0->timer == 80) - { - gUnknown_020322A0->unk_D2 = sub_807671C(gUnknown_020322A0->pokePicSpriteIdxs[0], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - gUnknown_020322A0->state++; - StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); - sub_807F1A8(0, gStringVar4, 0); - } - break; - case 12: - if (gSprites[gUnknown_020322A0->unk_D2].callback == SpriteCallbackDummy) - { - gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0); - gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E5D8; - DestroySprite(&gSprites[gUnknown_020322A0->unk_D2]); - gUnknown_020322A0->state++; - } - break; - case 13: - // The game waits here for the sprite to finish its animation sequence. - break; - case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_020322A0->state = 20; - break; - case 20: - if (!gPaletteFade.active) - { - sub_807B62C(4); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - CopyWindowToVram(0, 3); - gUnknown_020322A0->state++; - } - break; - case 21: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - gUnknown_020322A0->state++; - break; - case 22: - if (!gPaletteFade.active) - { - gUnknown_020322A0->state = 23; - } - break; - case 23: - if (gUnknown_020322A0->unk_EA > 0x100) - { - gUnknown_020322A0->unk_EA -= 0x34; - } - else - { - sub_807B62C(1); - gUnknown_020322A0->unk_EA = 0x80; - gUnknown_020322A0->state++; - gUnknown_020322A0->timer = 0; - } - gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA; - break; - case 24: - if (++gUnknown_020322A0->timer > 20) - { - sub_807AB28(); - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0); - gUnknown_020322A0->state++; - } - break; - case 25: - if (gSprites[gUnknown_020322A0->unk_91].animEnded) - { - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | - BLDCNT_TGT2_BG1 | - BLDCNT_TGT2_BG2); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); - gUnknown_020322A0->state++; - } - break; - case 26: - if (--gUnknown_020322A0->bg1vofs == 316) - { - gUnknown_020322A0->state++; - } - if (gUnknown_020322A0->bg1vofs == 328) - { - gUnknown_020322A0->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0); - } - break; - case 27: - gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 128, 80, 3); - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 128, 80, 0); - StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1); - gUnknown_020322A0->state++; - break; - case 28: - if ((gUnknown_020322A0->bg1vofs -= 2) == 166) - { - gUnknown_020322A0->state = 200; - } - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - break; - case 200: - gSprites[gUnknown_020322A0->unk_90].pos1.y -= 2; - gSprites[gUnknown_020322A0->unk_91].pos1.y -= 2; - if (gSprites[gUnknown_020322A0->unk_90].pos1.y < -8) - { - gUnknown_020322A0->state = 29; - } - break; - case 29: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - gUnknown_020322A0->state = 30; - break; - case 30: - if (!gPaletteFade.active) - { - DestroySprite(&gSprites[gUnknown_020322A0->unk_90]); - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - sub_807B62C(2); - gUnknown_020322A0->state++; - } - break; - case 31: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - gUnknown_020322A0->unk_90 = CreateSprite(&gSpriteTemplate_8338DC8, 111, 170, 0); - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 129, -10, 0); - gUnknown_020322A0->state++; - break; - case 32: - if (!gPaletteFade.active) - { - PlaySE(SE_TK_WARPOUT); - gUnknown_020322A0->state++; - } - gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3; - gSprites[gUnknown_020322A0->unk_91].pos2.y += 3; - break; - case 33: - gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3; - gSprites[gUnknown_020322A0->unk_91].pos2.y += 3; - if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -90) - { - gSprites[gUnknown_020322A0->unk_90].data[1] = 1; - gSprites[gUnknown_020322A0->unk_91].data[1] = 1; - gUnknown_020322A0->state++; - } - break; - case 34: - BlendPalettes(0x1, 16, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - break; - case 35: + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = sub_807E5D8; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state++; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 24: + if (++sTradeData->timer > 20) + { + SetTradeBGAffine(); + sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0); + sTradeData->state++; + } + break; + case 25: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG1 | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 4)); + sTradeData->state++; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328) + { + sTradeData->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0); + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 128, 80, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 2) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + } + break; + case 34: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x1, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x1, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER])) + { + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].affineAnims = gSpriteAffineAnimTable_8338ECC; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.x = 60; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 180; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = TRUE; BlendPalettes(0x1, 0, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - break; - case 36: - BlendPalettes(0x1, 16, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - break; - case 37: - if (!IsMonSpriteNotFlipped(gUnknown_020322A0->tradeSpecies[0])) - { - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].affineAnims = gSpriteAffineAnimTable_8338ECC; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0); - } - else - { - StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0); - } - StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0); - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.x = 60; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 180; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.y = 192; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = -32; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = FALSE; - gUnknown_020322A0->state++; - break; - case 38: - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y -= 3; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y += 3; - if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y >= -163) - { - PlaySE(SE_TK_WARPIN); - } - if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -222) - { - gSprites[gUnknown_020322A0->unk_90].data[1] = 0; - gSprites[gUnknown_020322A0->unk_91].data[1] = 0; - gUnknown_020322A0->state++; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = TRUE; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = TRUE; - BlendPalettes(0x1, 0, RGB_WHITEALPHA); - } - break; - case 39: - gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3; - gSprites[gUnknown_020322A0->unk_91].pos2.y += 3; - if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -222) - { - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - gUnknown_020322A0->state++; - DestroySprite(&gSprites[gUnknown_020322A0->unk_90]); - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - } - break; - case 40: - if (!gPaletteFade.active) - { - gUnknown_020322A0->state++; - sub_807B62C(1); - gUnknown_020322A0->bg1vofs = 166; - gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 128, -20, 3); - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 128, -20, 0); - StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1); - } - break; - case 41: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - gUnknown_020322A0->state++; - break; - case 42: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - gUnknown_020322A0->state++; - } - break; - case 43: - gSprites[gUnknown_020322A0->unk_90].pos2.y += 3; - gSprites[gUnknown_020322A0->unk_91].pos2.y += 3; - if (gSprites[gUnknown_020322A0->unk_90].pos2.y + gSprites[gUnknown_020322A0->unk_90].pos1.y == 64) - { - gUnknown_020322A0->state++; - } - break; - case 44: - if ((gUnknown_020322A0->bg1vofs += 2) > 316) - { - gUnknown_020322A0->bg1vofs = 316; - gUnknown_020322A0->state++; - } - break; - case 45: - DestroySprite(&gSprites[gUnknown_020322A0->unk_90]); - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - gUnknown_020322A0->state++; - gUnknown_020322A0->timer = 0; - break; - case 46: - if (++gUnknown_020322A0->timer == 10) - { - gUnknown_020322A0->state++; - } - break; - case 47: - if (++gUnknown_020322A0->bg1vofs > 348) - { - gUnknown_020322A0->bg1vofs = 348; - gUnknown_020322A0->state++; - } - if (gUnknown_020322A0->bg1vofs == 328 && gUnknown_020322A0->unk_FA) - { - gUnknown_020322A0->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0); - gSprites[gUnknown_020322A0->unk_92].callback = sub_807AAE0; - } - break; - case 48: - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0); - gUnknown_020322A0->state = 50; - break; - case 50: - if (gSprites[gUnknown_020322A0->unk_91].animEnded) - { - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - sub_807B62C(6); - gUnknown_020322A0->state++; - PlaySE(SE_W028); - } - break; - case 51: - if (gUnknown_020322A0->unk_EA < 0x400) - { - gUnknown_020322A0->unk_EA += 0x34; - } - else - { - gUnknown_020322A0->unk_EA = 0x400; - gUnknown_020322A0->state++; - } - gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA; - break; - case 52: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_020322A0->state = 60; - break; + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 128, -20, 3); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 128, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state++; + } + break; + case 44: + if ((sTradeData->bg1vofs += 2) > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 45: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + if (sTradeData->bg1vofs == 328 && sTradeData->isCableTrade) + { + sTradeData->unk_92 = CreateSprite(&gSpriteTemplate_8338DFC, 128, 65, 0); + gSprites[sTradeData->unk_92].callback = sub_807AAE0; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; - case 60: - if (!gPaletteFade.active) - { - sub_807B62C(5); - sub_807B62C(7); - gPaletteFade.bufferTransferDisabled = TRUE; - gUnknown_020322A0->state++; - } - break; - case 61: - gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - gUnknown_020322A0->state++; - break; - case 62: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - gUnknown_020322A0->state++; - } - break; - case 63: - gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0); - gSprites[gUnknown_020322A0->unk_D3].data[3] = 74; - gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E6AC; - StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - gUnknown_020322A0->timer = 0; - break; - case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - break; - case 65: - if (gSprites[gUnknown_020322A0->unk_D3].callback == SpriteCallbackDummy) - { - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[gUnknown_020322A0->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], gUnknown_020322A0->tradeSpecies[1], gUnknown_020322A0->unk_68[1]); - gUnknown_020322A0->state++; - } - break; - case 66: - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 120; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[1]].y_offset + 60; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.x = 0; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y = 0; - StartSpriteAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0); - CreatePokeballSpriteToReleaseMon(gUnknown_020322A0->pokePicSpriteIdxs[1], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, gUnknown_020322A0->tradeSpecies[1]); - FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->unk_D3]); - DestroySprite(&gSprites[gUnknown_020322A0->unk_D3]); - gUnknown_020322A0->state++; - break; - case 67: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG0_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - StringExpandPlaceholders(gStringVar4, gText_XSentOverY); - sub_807F1A8(0, gStringVar4, 0); - gUnknown_020322A0->state = 167; - gUnknown_020322A0->timer = 0; - break; - // 167 and 267 are extra cases added in for animations - case 167: - if (++gUnknown_020322A0->timer > 60) - { - gUnknown_020322A0->state = 267; - gUnknown_020322A0->timer = 0; - } - break; - case 267: - if (IsCryFinished()) - { - gUnknown_020322A0->state = 68; - } - break; - case 68: - if (++gUnknown_020322A0->timer == 10) - { - PlayFanfare(MUS_FANFA5); - } - if (gUnknown_020322A0->timer == 250) - { - gUnknown_020322A0->state++; - StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); - sub_807F1A8(0, gStringVar4, 0); - gUnknown_020322A0->timer = 0; - } - break; - case 69: - if (++gUnknown_020322A0->timer == 60) - { - gUnknown_020322A0->state++; - } - break; - case 70: - sub_807F14C(); - gUnknown_020322A0->state++; - break; - case 71: - if (gUnknown_020322A0->isLinkTrade) - { - return TRUE; - } - else if (gMain.newKeys & A_BUTTON) - { - gUnknown_020322A0->state++; - } - break; - case 72: // Only if in-game trade - sub_807B4D0(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = sub_807B60C; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE); - if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]); - } - gUnknown_020322A0->state++; - break; - case 73: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_020322A0->state++; - break; - case 74: - if (!gPaletteFade.active) - { - PlayNewMapMusic(gUnknown_020322A0->cachedMapMusic); - if (gUnknown_020322A0) - { - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(3)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(0)); - FreeMonSpritesGfx(); - FREE_AND_SET_NULL(gUnknown_020322A0); - } - SetMainCallback2(CB2_ReturnToField); - sub_807E784(); - } - break; + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = sub_807E6AC; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (gMain.newKeys & A_BUTTON) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_UpdateInGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BuffeInGameTradeMonName(); + } + break; } return FALSE; } -static bool8 sub_807CFC8(void) +static bool8 AnimateTradeSequenceWireless(void) { u16 evoTarget; - switch (gUnknown_020322A0->state) + switch (sTradeData->state) { - case 0: - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = -180; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[0]].y_offset; - gUnknown_020322A0->state++; - gUnknown_020322A0->cachedMapMusic = GetCurrentMapMusic(); - PlayNewMapMusic(MUS_SHINKA); - break; - case 1: - if (gUnknown_020322A0->bg2hofs > 0) - { - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x += 3; - gUnknown_020322A0->bg2hofs -= 3; - } - else - { - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.x = 0; - gUnknown_020322A0->bg2hofs = 0; - gUnknown_020322A0->state = 10; - } - break; - case 10: - StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); - sub_807F1A8(0, gStringVar4, 0); + case 0: + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = -180; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PLAYER]].y_offset; + sTradeData->state++; + sTradeData->cachedMapMusic = GetCurrentMapMusic(); + PlayNewMapMusic(MUS_SHINKA); + break; + case 1: + if (sTradeData->bg2hofs > 0) + { + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x += 3; + sTradeData->bg2hofs -= 3; + } + else + { + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.x = 0; + sTradeData->bg2hofs = 0; + sTradeData->state = 10; + } + break; + case 10: + StringExpandPlaceholders(gStringVar4, gText_XWillBeSentToY); + DrawTextOnTradeWindow(0, gStringVar4, 0); - if (gUnknown_020322A0->tradeSpecies[0] != SPECIES_EGG) - { - PlayCry1(gUnknown_020322A0->tradeSpecies[0], 0); - } + if (sTradeData->monSpecies[TRADE_PLAYER] != SPECIES_EGG) + { + PlayCry1(sTradeData->monSpecies[TRADE_PLAYER], 0); + } - gUnknown_020322A0->state = 11; - gUnknown_020322A0->timer = 0; - break; - case 11: - if (++gUnknown_020322A0->timer == 80) - { - gUnknown_020322A0->unk_D2 = sub_807671C(gUnknown_020322A0->pokePicSpriteIdxs[0], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); - gUnknown_020322A0->state++; - StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); - sub_807F1A8(0, gStringVar4, 0); - } - break; - case 12: - if (gSprites[gUnknown_020322A0->unk_D2].callback == SpriteCallbackDummy) - { - gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0); - gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E5D8; - DestroySprite(&gSprites[gUnknown_020322A0->unk_D2]); - gUnknown_020322A0->state++; - } - break; - case 13: - // The game waits here for the sprite to finish its animation sequence. - break; - case 14: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_020322A0->state = 20; - break; - case 20: - if (!gPaletteFade.active) - { - sub_807B62C(4); - FillWindowPixelBuffer(0, PIXEL_FILL(15)); - CopyWindowToVram(0, 3); - gUnknown_020322A0->state++; - } - break; - case 21: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - gUnknown_020322A0->state++; - break; - case 22: - if (!gPaletteFade.active) - { - gUnknown_020322A0->state = 23; - } - break; - case 23: - if (gUnknown_020322A0->unk_EA > 0x100) - { - gUnknown_020322A0->unk_EA -= 0x34; - } - else - { - sub_807B62C(1); - gUnknown_020322A0->unk_EA = 0x80; - gUnknown_020322A0->state = 124; - gUnknown_020322A0->timer = 0; - } - gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA; - break; - case 124: - if (++gUnknown_020322A0->timer > 20) - { - sub_807B62C(3); - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E8C, 120, 80, 0); - gUnknown_020322A0->state++; - } - break; - case 125: - if (gSprites[gUnknown_020322A0->unk_91].animEnded) - { - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | - BLDCNT_TGT1_OBJ | - BLDCNT_EFFECT_BLEND | - BLDCNT_TGT2_BG2); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); - CreateTask(c3_08054588, 5); - gUnknown_020322A0->state++; - } - break; - case 126: - if (!FuncIsActiveTask(c3_08054588)) - { - gUnknown_020322A0->state = 26; - } - break; - case 26: - if (--gUnknown_020322A0->bg1vofs == 316) - { - gUnknown_020322A0->state++; - } - break; - case 27: - gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 120, 80, 3); - gSprites[gUnknown_020322A0->unk_90].callback = sub_807AA4C; - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 120, 80, 0); - StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1); - gUnknown_020322A0->state++; - break; - case 28: - if ((gUnknown_020322A0->bg1vofs -= 3) == 166) - { - gUnknown_020322A0->state = 200; - } - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - break; - case 200: - gSprites[gUnknown_020322A0->unk_90].pos1.y -= 2; - gSprites[gUnknown_020322A0->unk_91].pos1.y -= 2; - if (gSprites[gUnknown_020322A0->unk_90].pos1.y < -8) - { - gUnknown_020322A0->state = 29; - } - break; - case 29: + sTradeData->state = 11; + sTradeData->timer = 0; + break; + case 11: + if (++sTradeData->timer == 80) + { + sTradeData->pokeballSpriteId = CreateTradePokeballSprite(sTradeData->pokePicSpriteIdxs[0], gSprites[sTradeData->pokePicSpriteIdxs[0]].oam.paletteNum, 120, 32, 2, 1, 0x14, 0xfffff); + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_ByeByeVar1); + DrawTextOnTradeWindow(0, gStringVar4, 0); + } + break; + case 12: + if (gSprites[sTradeData->pokeballSpriteId].callback == SpriteCallbackDummy) + { + sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, 32, 0); + gSprites[sTradeData->unk_D3].callback = sub_807E5D8; + DestroySprite(&gSprites[sTradeData->pokeballSpriteId]); + sTradeData->state++; + } + break; + case 13: + // The game waits here for the sprite to finish its animation sequence. + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 20; + break; + case 20: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(4); + FillWindowPixelBuffer(0, PIXEL_FILL(15)); + CopyWindowToVram(0, 3); + sTradeData->state++; + } + break; + case 21: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 22: + if (!gPaletteFade.active) + { + sTradeData->state = 23; + } + break; + case 23: + if (sTradeData->unk_EA > 0x100) + { + sTradeData->unk_EA -= 0x34; + } + else + { + SetTradeSequenceBgGpuRegs(1); + sTradeData->unk_EA = 0x80; + sTradeData->state = 124; + sTradeData->timer = 0; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 124: + if (++sTradeData->timer > 20) + { + SetTradeSequenceBgGpuRegs(3); + sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E8C, 120, 80, 0); + sTradeData->state++; + } + break; + case 125: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | + BLDCNT_TGT1_OBJ | + BLDCNT_EFFECT_BLEND | + BLDCNT_TGT2_BG2); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 4)); + CreateTask(Task_AnimateWirelessSignal, 5); + sTradeData->state++; + } + break; + case 126: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 26; + } + break; + case 26: + if (--sTradeData->bg1vofs == 316) + { + sTradeData->state++; + } + break; + case 27: + sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 120, 80, 3); + gSprites[sTradeData->unk_90].callback = sub_807AA4C; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, 80, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + sTradeData->state++; + break; + case 28: + if ((sTradeData->bg1vofs -= 3) == 166) + { + sTradeData->state = 200; + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + break; + case 200: + gSprites[sTradeData->unk_90].pos1.y -= 2; + gSprites[sTradeData->unk_91].pos1.y -= 2; + if (gSprites[sTradeData->unk_90].pos1.y < -8) + { + sTradeData->state = 29; + } + break; + case 29: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sTradeData->state = 30; + break; + case 30: + if (!gPaletteFade.active) + { + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(2); + sTradeData->state++; + } + break; + case 31: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->unk_90 = CreateSprite(&sGlowBallSpriteTemplate, 111, 170, 0); + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 129, -10, 0); + sTradeData->state++; + break; + case 32: + if (!gPaletteFade.active) + { + PlaySE(SE_TK_WARPOUT); + sTradeData->state++; + } + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + break; + case 33: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -90) + { + gSprites[sTradeData->unk_90].data[1] = 1; + gSprites[sTradeData->unk_91].data[1] = 1; + sTradeData->state++; + CreateTask(c3_0805465C, 5); + } + break; + case 34: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 35: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 36: + BlendPalettes(0x8, 16, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 37: + if (!IsMonSpriteNotFlipped(sTradeData->monSpecies[TRADE_PLAYER])) + { + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].affineAnims = gSpriteAffineAnimTable_8338ECC; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].oam.affineMode = 3; + CalcCenterToCornerVec(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0, 3, 3); + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0); + } + else + { + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]], 0); + } + StartSpriteAffineAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0); + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.x = 40; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 200; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos1.y = 192; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = -32; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = FALSE; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = FALSE; + sTradeData->state++; + break; + case 38: + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y -= 3; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y += 3; + if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -160 && gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y >= -163) + { + PlaySE(SE_TK_WARPIN); + } + if (gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].pos2.y < -222) + { + gSprites[sTradeData->unk_90].data[1] = 0; + gSprites[sTradeData->unk_91].data[1] = 0; + sTradeData->state++; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]].invisible = TRUE; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].invisible = TRUE; + CreateTask(sub_807F39C, 5); + } + break; + case 39: + gSprites[sTradeData->unk_90].pos2.y -= 3; + gSprites[sTradeData->unk_91].pos2.y += 3; + if (gSprites[sTradeData->unk_90].pos2.y <= -222) + { BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - gUnknown_020322A0->state = 30; - break; - case 30: - if (!gPaletteFade.active) - { - DestroySprite(&gSprites[gUnknown_020322A0->unk_90]); - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - sub_807B62C(2); - gUnknown_020322A0->state++; - } - break; - case 31: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - gUnknown_020322A0->unk_90 = CreateSprite(&gSpriteTemplate_8338DC8, 111, 170, 0); - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 129, -10, 0); - gUnknown_020322A0->state++; - break; - case 32: - if (!gPaletteFade.active) - { - PlaySE(SE_TK_WARPOUT); - gUnknown_020322A0->state++; - } - gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3; - gSprites[gUnknown_020322A0->unk_91].pos2.y += 3; - break; - case 33: - gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3; - gSprites[gUnknown_020322A0->unk_91].pos2.y += 3; - if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -90) - { - gSprites[gUnknown_020322A0->unk_90].data[1] = 1; - gSprites[gUnknown_020322A0->unk_91].data[1] = 1; - gUnknown_020322A0->state++; - CreateTask(c3_0805465C, 5); - } - break; - case 34: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - break; - case 35: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - break; - case 36: - BlendPalettes(0x8, 16, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - break; - case 37: - if (!IsMonSpriteNotFlipped(gUnknown_020322A0->tradeSpecies[0])) - { - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].affineAnims = gSpriteAffineAnimTable_8338ECC; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].oam.affineMode = 3; - CalcCenterToCornerVec(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0, 3, 3); - StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0); - } - else - { - StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]], 0); - } - StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0); - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.x = 40; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 200; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos1.y = 192; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = -32; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = FALSE; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = FALSE; - gUnknown_020322A0->state++; - break; - case 38: - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y -= 3; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y += 3; - if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -160 && gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y >= -163) - { - PlaySE(SE_TK_WARPIN); - } - if (gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].pos2.y < -222) - { - gSprites[gUnknown_020322A0->unk_90].data[1] = 0; - gSprites[gUnknown_020322A0->unk_91].data[1] = 0; - gUnknown_020322A0->state++; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]].invisible = TRUE; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].invisible = TRUE; - CreateTask(sub_807F39C, 5); - } - break; - case 39: - gSprites[gUnknown_020322A0->unk_90].pos2.y -= 3; - gSprites[gUnknown_020322A0->unk_91].pos2.y += 3; - if (gSprites[gUnknown_020322A0->unk_90].pos2.y <= -222) - { - BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); - gUnknown_020322A0->state++; - DestroySprite(&gSprites[gUnknown_020322A0->unk_90]); - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - } - break; - case 40: - if (!gPaletteFade.active) - { - gUnknown_020322A0->state++; - sub_807B62C(1); - gUnknown_020322A0->bg1vofs = 166; - sub_807B62C(3); - gUnknown_020322A0->bg2vofs = 412; - gUnknown_020322A0->unk_90 = CreateSprite(&gUnknown_08338D88, 120, -20, 3); - gSprites[gUnknown_020322A0->unk_90].callback = sub_807AA4C; - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338DC8, 120, -20, 0); - StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_91], 1); - } - break; - case 41: - BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); - gUnknown_020322A0->state++; - break; - case 42: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - gUnknown_020322A0->state++; - } - break; - case 43: - gSprites[gUnknown_020322A0->unk_90].pos2.y += 4; - gSprites[gUnknown_020322A0->unk_91].pos2.y += 4; - if (gSprites[gUnknown_020322A0->unk_90].pos2.y + gSprites[gUnknown_020322A0->unk_90].pos1.y == 64) - { - gUnknown_020322A0->state = 144; - gUnknown_020322A0->timer = 0; - } - break; - case 144: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG1_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - gUnknown_020322A0->bg1vofs += 3; - gUnknown_020322A0->bg2vofs += 3; - if (++gUnknown_020322A0->timer == 10) - { - u8 taskId = CreateTask(c3_08054588, 5); - gTasks[taskId].data[2] = 1; - } - if (gUnknown_020322A0->bg1vofs > 316) - { - gUnknown_020322A0->bg1vofs = 316; - gUnknown_020322A0->state++; - } - break; - case 145: - DestroySprite(&gSprites[gUnknown_020322A0->unk_90]); - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - gUnknown_020322A0->state++; - gUnknown_020322A0->timer = 0; - break; - case 146: - if (!FuncIsActiveTask(c3_08054588)) - { - gUnknown_020322A0->state = 46; - gUnknown_020322A0->timer = 0; - } - break; - case 46: - if (++gUnknown_020322A0->timer == 10) - { - gUnknown_020322A0->state++; - } - break; - case 47: - if (++gUnknown_020322A0->bg1vofs > 348) - { - gUnknown_020322A0->bg1vofs = 348; - gUnknown_020322A0->state++; - } - break; - case 48: - gUnknown_020322A0->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0); - gUnknown_020322A0->state = 50; - break; - case 50: - if (gSprites[gUnknown_020322A0->unk_91].animEnded) - { - DestroySprite(&gSprites[gUnknown_020322A0->unk_91]); - sub_807B62C(6); - gUnknown_020322A0->state++; - PlaySE(SE_W028); - } - break; - case 51: - if (gUnknown_020322A0->unk_EA < 0x400) - { - gUnknown_020322A0->unk_EA += 0x34; - } - else - { - gUnknown_020322A0->unk_EA = 0x400; - gUnknown_020322A0->state++; - } - gUnknown_020322A0->unk_E8 = 0x8000 / gUnknown_020322A0->unk_EA; - break; - case 52: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_020322A0->state = 60; - break; - case 60: - if (!gPaletteFade.active) - { - sub_807B62C(5); - sub_807B62C(7); - gPaletteFade.bufferTransferDisabled = TRUE; - gUnknown_020322A0->state++; - } - break; - case 61: - gPaletteFade.bufferTransferDisabled = FALSE; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); - gUnknown_020322A0->state++; - break; - case 62: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - if (!gPaletteFade.active) - { - gUnknown_020322A0->state++; - } - break; - case 63: - gUnknown_020322A0->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0); - gSprites[gUnknown_020322A0->unk_D3].data[3] = 74; - gSprites[gUnknown_020322A0->unk_D3].callback = sub_807E6AC; - StartSpriteAnim(&gSprites[gUnknown_020322A0->unk_D3], 1); - StartSpriteAffineAnim(&gSprites[gUnknown_020322A0->unk_D3], 2); - BlendPalettes(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - gUnknown_020322A0->timer = 0; - break; - case 64: - BeginNormalPaletteFade(1 << (16 + gSprites[gUnknown_020322A0->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); - gUnknown_020322A0->state++; - break; - case 65: - if (gSprites[gUnknown_020322A0->unk_D3].callback == SpriteCallbackDummy) - { - HandleLoadSpecialPokePic_2(&gMonFrontPicTable[gUnknown_020322A0->tradeSpecies[1]], gMonSpritesGfxPtr->sprites[3], gUnknown_020322A0->tradeSpecies[1], gUnknown_020322A0->unk_68[1]); - gUnknown_020322A0->state++; - } - break; - case 66: - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.x = 120; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos1.y = gMonFrontPicCoords[gUnknown_020322A0->tradeSpecies[1]].y_offset + 60; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.x = 0; - gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].pos2.y = 0; - StartSpriteAnim(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]], 0); - CreatePokeballSpriteToReleaseMon(gUnknown_020322A0->pokePicSpriteIdxs[1], gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, gUnknown_020322A0->tradeSpecies[1]); - FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->unk_D3]); - DestroySprite(&gSprites[gUnknown_020322A0->unk_D3]); - gUnknown_020322A0->state++; - break; - case 67: - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_BG0_ON | - DISPCNT_BG2_ON | - DISPCNT_OBJ_ON); - StringExpandPlaceholders(gStringVar4, gText_XSentOverY); - sub_807F1A8(0, gStringVar4, 0); - gUnknown_020322A0->state = 167; - gUnknown_020322A0->timer = 0; - break; - // 167 and 267 are extra cases added in for animations - case 167: - if (++gUnknown_020322A0->timer > 60) - { - gUnknown_020322A0->state = 267; - gUnknown_020322A0->timer = 0; - } - break; - case 267: - if (IsCryFinished()) - { - gUnknown_020322A0->state = 68; - } - break; - case 68: - if (++gUnknown_020322A0->timer == 10) - { - PlayFanfare(MUS_FANFA5); - } - if (gUnknown_020322A0->timer == 250) - { - gUnknown_020322A0->state++; - StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); - sub_807F1A8(0, gStringVar4, 0); - gUnknown_020322A0->timer = 0; - } - break; - case 69: - if (++gUnknown_020322A0->timer == 60) - { - gUnknown_020322A0->state++; - } - break; - case 70: - sub_807F14C(); - gUnknown_020322A0->state++; - break; - case 71: - if (gUnknown_020322A0->isLinkTrade) - { - return TRUE; - } - else if (gMain.newKeys & A_BUTTON) - { - gUnknown_020322A0->state++; - } - break; - case 72: // Only if in-game trade - sub_807B4D0(gSpecialVar_0x8005, 0); - gCB2_AfterEvolution = sub_807B60C; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE); - if (evoTarget != SPECIES_NONE) - { - TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]); - } - gUnknown_020322A0->state++; - break; - case 73: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gUnknown_020322A0->state++; - break; - case 74: - if (!gPaletteFade.active) - { - PlayNewMapMusic(gUnknown_020322A0->cachedMapMusic); - if (gUnknown_020322A0) - { - FreeAllWindowBuffers(); - Free(GetBgTilemapBuffer(3)); - Free(GetBgTilemapBuffer(1)); - Free(GetBgTilemapBuffer(0)); - FreeMonSpritesGfx(); - FREE_AND_SET_NULL(gUnknown_020322A0); - } - SetMainCallback2(CB2_ReturnToField); - sub_807E784(); - } - break; + sTradeData->state++; + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + } + break; + case 40: + if (!gPaletteFade.active) + { + sTradeData->state++; + SetTradeSequenceBgGpuRegs(1); + sTradeData->bg1vofs = 166; + SetTradeSequenceBgGpuRegs(3); + sTradeData->bg2vofs = 412; + sTradeData->unk_90 = CreateSprite(&gUnknown_08338D88, 120, -20, 3); + gSprites[sTradeData->unk_90].callback = sub_807AA4C; + sTradeData->unk_91 = CreateSprite(&sGlowBallSpriteTemplate, 120, -20, 0); + StartSpriteAnim(&gSprites[sTradeData->unk_91], 1); + } + break; + case 41: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 42: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 43: + gSprites[sTradeData->unk_90].pos2.y += 4; + gSprites[sTradeData->unk_91].pos2.y += 4; + if (gSprites[sTradeData->unk_90].pos2.y + gSprites[sTradeData->unk_90].pos1.y == 64) + { + sTradeData->state = 144; + sTradeData->timer = 0; + } + break; + case 144: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG1_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + sTradeData->bg1vofs += 3; + sTradeData->bg2vofs += 3; + if (++sTradeData->timer == 10) + { + u8 taskId = CreateTask(Task_AnimateWirelessSignal, 5); + gTasks[taskId].data[2] = TRUE; + } + if (sTradeData->bg1vofs > 316) + { + sTradeData->bg1vofs = 316; + sTradeData->state++; + } + break; + case 145: + DestroySprite(&gSprites[sTradeData->unk_90]); + DestroySprite(&gSprites[sTradeData->unk_91]); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 146: + if (!FuncIsActiveTask(Task_AnimateWirelessSignal)) + { + sTradeData->state = 46; + sTradeData->timer = 0; + } + break; + case 46: + if (++sTradeData->timer == 10) + { + sTradeData->state++; + } + break; + case 47: + if (++sTradeData->bg1vofs > 348) + { + sTradeData->bg1vofs = 348; + sTradeData->state++; + } + break; + case 48: + sTradeData->unk_91 = CreateSprite(&gSpriteTemplate_8338E74, 120, 80, 0); + sTradeData->state = 50; + break; + case 50: + if (gSprites[sTradeData->unk_91].animEnded) + { + DestroySprite(&gSprites[sTradeData->unk_91]); + SetTradeSequenceBgGpuRegs(6); + sTradeData->state++; + PlaySE(SE_W028); + } + break; + case 51: + if (sTradeData->unk_EA < 0x400) + { + sTradeData->unk_EA += 0x34; + } + else + { + sTradeData->unk_EA = 0x400; + sTradeData->state++; + } + sTradeData->sXY = 0x8000 / sTradeData->unk_EA; + break; + case 52: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state = 60; + break; + case 60: + if (!gPaletteFade.active) + { + SetTradeSequenceBgGpuRegs(5); + SetTradeSequenceBgGpuRegs(7); + gPaletteFade.bufferTransferDisabled = TRUE; + sTradeData->state++; + } + break; + case 61: + gPaletteFade.bufferTransferDisabled = FALSE; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + sTradeData->state++; + break; + case 62: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + if (!gPaletteFade.active) + { + sTradeData->state++; + } + break; + case 63: + sTradeData->unk_D3 = CreateSprite(&gSpriteTemplate_8338D28, 120, -8, 0); + gSprites[sTradeData->unk_D3].data[3] = 74; + gSprites[sTradeData->unk_D3].callback = sub_807E6AC; + StartSpriteAnim(&gSprites[sTradeData->unk_D3], 1); + StartSpriteAffineAnim(&gSprites[sTradeData->unk_D3], 2); + BlendPalettes(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 16, RGB_WHITEALPHA); + sTradeData->state++; + sTradeData->timer = 0; + break; + case 64: + BeginNormalPaletteFade(1 << (16 + gSprites[sTradeData->unk_D3].oam.paletteNum), 1, 16, 0, RGB_WHITEALPHA); + sTradeData->state++; + break; + case 65: + if (gSprites[sTradeData->unk_D3].callback == SpriteCallbackDummy) + { + HandleLoadSpecialPokePic_2(&gMonFrontPicTable[sTradeData->monSpecies[TRADE_PARTNER]], gMonSpritesGfxPtr->sprites[3], sTradeData->monSpecies[TRADE_PARTNER], sTradeData->monPersonalities[TRADE_PARTNER]); + sTradeData->state++; + } + break; + case 66: + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.x = 120; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos1.y = gMonFrontPicCoords[sTradeData->monSpecies[TRADE_PARTNER]].y_offset + 60; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.x = 0; + gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].pos2.y = 0; + StartSpriteAnim(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]], 0); + CreatePokeballSpriteToReleaseMon(sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]].oam.paletteNum, 120, 84, 2, 1, 20, 0xFFFFF, sTradeData->monSpecies[TRADE_PARTNER]); + FreeSpriteOamMatrix(&gSprites[sTradeData->unk_D3]); + DestroySprite(&gSprites[sTradeData->unk_D3]); + sTradeData->state++; + break; + case 67: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_BG0_ON | + DISPCNT_BG2_ON | + DISPCNT_OBJ_ON); + StringExpandPlaceholders(gStringVar4, gText_XSentOverY); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->state = 167; + sTradeData->timer = 0; + break; + // 167 and 267 are extra cases added in for animations + case 167: + if (++sTradeData->timer > 60) + { + sTradeData->state = 267; + sTradeData->timer = 0; + } + break; + case 267: + if (IsCryFinished()) + { + sTradeData->state = 68; + } + break; + case 68: + if (++sTradeData->timer == 10) + { + PlayFanfare(MUS_FANFA5); + } + if (sTradeData->timer == 250) + { + sTradeData->state++; + StringExpandPlaceholders(gStringVar4, gText_TakeGoodCareOfX); + DrawTextOnTradeWindow(0, gStringVar4, 0); + sTradeData->timer = 0; + } + break; + case 69: + if (++sTradeData->timer == 60) + { + sTradeData->state++; + } + break; + case 70: + CheckPartnersMonForRibbons(); + sTradeData->state++; + break; + case 71: + if (sTradeData->isLinkTrade) + { + return TRUE; + } + else if (gMain.newKeys & A_BUTTON) + { + sTradeData->state++; + } + break; + case 72: // Only if in-game trade + TradeMons(gSpecialVar_0x8005, 0); + gCB2_AfterEvolution = CB2_UpdateInGameTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + { + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + } + sTradeData->state++; + break; + case 73: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sTradeData->state++; + break; + case 74: + if (!gPaletteFade.active) + { + PlayNewMapMusic(sTradeData->cachedMapMusic); + if (sTradeData) + { + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(3)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(0)); + FreeMonSpritesGfx(); + FREE_AND_SET_NULL(sTradeData); + } + SetMainCallback2(CB2_ReturnToField); + BuffeInGameTradeMonName(); + } + break; } return FALSE; } -static void c2_08053788(void) +static void CB2_TryTradeEvolution(void) { u16 evoTarget; switch (gMain.state) { - case 0: - gMain.state = 4; - gSoftResetDisabled = TRUE; - break; - case 4: - gCB2_AfterEvolution = sub_807EB50; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gUnknown_02032298[0]], TRUE, ITEM_NONE); - if (evoTarget != SPECIES_NONE) - TradeEvolutionScene(&gPlayerParty[gUnknown_02032298[0]], evoTarget, gUnknown_020322A0->pokePicSpriteIdxs[1], gUnknown_02032298[0]); - else if (sub_8077260()) - SetMainCallback2(sub_807F464); - else - SetMainCallback2(sub_807EB50); - gUnknown_02032298[0] = 255; - break; + case 0: + gMain.state = 4; + gSoftResetDisabled = TRUE; + break; + case 4: + gCB2_AfterEvolution = CB2_SaveAndEndTrade; + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], TRUE, ITEM_NONE); + if (evoTarget != SPECIES_NONE) + TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], evoTarget, sTradeData->pokePicSpriteIdxs[TRADE_PARTNER], gSelectedTradeMonPositions[TRADE_PLAYER]); + else if (IsWirelessTrade()) + SetMainCallback2(CB2_SaveAndEndWirelessTrade); + else + SetMainCallback2(CB2_SaveAndEndTrade); + gSelectedTradeMonPositions[TRADE_PLAYER] = 255; + break; } if (!HasLinkErrorOccurred()) RunTasks(); @@ -5703,29 +4503,26 @@ static void c2_08053788(void) UpdatePaletteFade(); } -static void sub_807E4DC(void) +static void UpdateTradeFinishFlags(void) { u8 blockReceivedStatus; - sub_807ACDC(); + TradeGetMultiplayerId(); // no effect call, ret val ignored blockReceivedStatus = GetBlockReceivedStatus(); if (blockReceivedStatus & 0x01) { - if (gBlockRecvBuffer[0][0] == 0xDCBA) - { - SetMainCallback2(c2_08053788); - } - if (gBlockRecvBuffer[0][0] == 0xABCD) - { - gUnknown_020322A0->unk_72 = 1; - } + if (gBlockRecvBuffer[0][0] == LINKCMD_CONFIRM_FINISH_TRADE) + SetMainCallback2(CB2_TryTradeEvolution); + + if (gBlockRecvBuffer[0][0] == LINKCMD_READY_FINISH_TRADE) + sTradeData->playerLinkFlagFinishTrade = READY_FINISH_TRADE; + ResetBlockReceivedFlag(0); } if (blockReceivedStatus & 0x02) { - if (gBlockRecvBuffer[1][0] == 0xABCD) - { - gUnknown_020322A0->unk_73 = 1; - } + if (gBlockRecvBuffer[1][0] == LINKCMD_READY_FINISH_TRADE) + sTradeData->partnerLinkFlagFinishTrade = READY_FINISH_TRADE; + ResetBlockReceivedFlag(1); } } @@ -5753,7 +4550,7 @@ static void sub_807E55C(struct Sprite *sprite) static void sub_807E5D8(struct Sprite *sprite) { - sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]]; if (sprite->data[0] == 22) PlaySE(SE_KON); if (++ sprite->data[0] == 44) @@ -5771,11 +4568,11 @@ static void sub_807E64C(struct Sprite *sprite) StartSpriteAffineAnim(sprite, 1); if (++ sprite->data[1] > 20) { - sprite->pos2.y -= gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y -= sTradeBallVerticalVelocityTable[sprite->data[0]]; if (++ sprite->data[0] == 23) { DestroySprite(sprite); - gUnknown_020322A0->state = 14; // Resume the master trade animation + sTradeData->state = 14; // Resume the master trade animation } } } @@ -5799,7 +4596,7 @@ static void sub_807E6AC(struct Sprite *sprite) PlaySE(SE_KON3); if (sprite->data[0] == 0x6b) PlaySE(SE_KON4); - sprite->pos2.y += gTradeBallVerticalVelocityTable[sprite->data[0]]; + sprite->pos2.y += sTradeBallVerticalVelocityTable[sprite->data[0]]; if (++sprite->data[0] == 0x6c) sprite->callback = SpriteCallbackDummy; } @@ -5807,16 +4604,16 @@ static void sub_807E6AC(struct Sprite *sprite) u16 GetInGameTradeSpeciesInfo(void) { - const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; - StringCopy(gStringVar1, gSpeciesNames[inGameTrade->playerSpecies]); + const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004]; + StringCopy(gStringVar1, gSpeciesNames[inGameTrade->requestedSpecies]); StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); - return inGameTrade->playerSpecies; + return inGameTrade->requestedSpecies; } -static void sub_807E784(void) +static void BuffeInGameTradeMonName(void) { u8 nickname[32]; - const struct InGameTrade *inGameTrade = &gIngameTrades[gSpecialVar_0x8004]; + const struct InGameTrade *inGameTrade = &sIngameTrades[gSpecialVar_0x8004]; GetMonData(&gPlayerParty[gSpecialVar_0x8005], MON_DATA_NICKNAME, nickname); StringCopy10(gStringVar1, nickname); StringCopy(gStringVar2, gSpeciesNames[inGameTrade->species]); @@ -5824,11 +4621,11 @@ static void sub_807E784(void) static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) { - const struct InGameTrade *inGameTrade = &gIngameTrades[whichInGameTrade]; + const struct InGameTrade *inGameTrade = &sIngameTrades[whichInGameTrade]; u8 level = GetMonData(&gPlayerParty[whichPlayerMon], MON_DATA_LEVEL); struct MailStruct mail; - u8 metLocation = 0xFE; + u8 metLocation = METLOC_IN_GAME_TRADE; u8 isMail; struct Pokemon *pokemon = &gEnemyParty[0]; @@ -5840,15 +4637,15 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) SetMonData(pokemon, MON_DATA_SPEED_IV, &inGameTrade->ivs[3]); SetMonData(pokemon, MON_DATA_SPATK_IV, &inGameTrade->ivs[4]); SetMonData(pokemon, MON_DATA_SPDEF_IV, &inGameTrade->ivs[5]); - SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->name); + SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->nickname); SetMonData(pokemon, MON_DATA_OT_NAME, inGameTrade->otName); SetMonData(pokemon, MON_DATA_OT_GENDER, &inGameTrade->otGender); - SetMonData(pokemon, MON_DATA_ABILITY_NUM, &inGameTrade->secondAbility); - SetMonData(pokemon, MON_DATA_BEAUTY, &inGameTrade->stats[1]); - SetMonData(pokemon, MON_DATA_CUTE, &inGameTrade->stats[2]); - SetMonData(pokemon, MON_DATA_COOL, &inGameTrade->stats[0]); - SetMonData(pokemon, MON_DATA_SMART, &inGameTrade->stats[3]); - SetMonData(pokemon, MON_DATA_TOUGH, &inGameTrade->stats[4]); + SetMonData(pokemon, MON_DATA_ABILITY_NUM, &inGameTrade->abilityNum); + SetMonData(pokemon, MON_DATA_BEAUTY, &inGameTrade->conditions[1]); + SetMonData(pokemon, MON_DATA_CUTE, &inGameTrade->conditions[2]); + SetMonData(pokemon, MON_DATA_COOL, &inGameTrade->conditions[0]); + SetMonData(pokemon, MON_DATA_SMART, &inGameTrade->conditions[3]); + SetMonData(pokemon, MON_DATA_TOUGH, &inGameTrade->conditions[4]); SetMonData(pokemon, MON_DATA_SHEEN, &inGameTrade->sheen); SetMonData(pokemon, MON_DATA_MET_LOCATION, &metLocation); @@ -5857,8 +4654,8 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) { if (ItemIsMail(inGameTrade->heldItem)) { - sub_807E974(&mail, inGameTrade); - gUnknown_020321C0[0] = mail; + SetInGameTradeMail(&mail, inGameTrade); + gTradeMail[0] = mail; SetMonData(pokemon, MON_DATA_MAIL, &isMail); SetMonData(pokemon, MON_DATA_HELD_ITEM, &inGameTrade->heldItem); } @@ -5870,12 +4667,12 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) CalculateMonStats(&gEnemyParty[0]); } -static void sub_807E974(struct MailStruct *mail, const struct InGameTrade *trade) { +static void SetInGameTradeMail(struct MailStruct *mail, const struct InGameTrade *trade) { s32 i; - for (i = 0; i < 9; i++) + for (i = 0; i < MAIL_WORDS_COUNT; i++) { - mail->words[i] = gIngameTradeMail[trade->mailNum][i]; + mail->words[i] = sIngameTradeMail[trade->mailNum][i]; } StringCopy(mail->playerName, trade->otName); @@ -5901,22 +4698,22 @@ void CreateInGameTradePokemon(void) _CreateInGameTradePokemon(gSpecialVar_0x8005, gSpecialVar_0x8004); } -static void sub_807EA2C(void) +static void CB2_UpdateLinkTrade(void) { - if (sub_807BBC8() == TRUE) + if (AnimateTradeSequence() == TRUE) { - DestroySprite(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[0]]); - FreeSpriteOamMatrix(&gSprites[gUnknown_020322A0->pokePicSpriteIdxs[1]]); - sub_807B4D0(gUnknown_02032298[0], gUnknown_02032298[1] % 6); - if (!sub_8077260()) + DestroySprite(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PLAYER]]); + FreeSpriteOamMatrix(&gSprites[sTradeData->pokePicSpriteIdxs[TRADE_PARTNER]]); + TradeMons(gSelectedTradeMonPositions[TRADE_PLAYER], gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE); + if (!IsWirelessTrade()) { - gUnknown_020322A0->linkData[0] = 0xABCD; - gUnknown_020322A0->unk_93 = 1; + sTradeData->linkData[0] = LINKCMD_READY_FINISH_TRADE; + sTradeData->sendTradeFinishState = 1; } - SetMainCallback2(sub_807EACC); + SetMainCallback2(CB2_TryFinishTrade); } - sub_807B5B8(); - sub_807E4DC(); + TrySendTradeFinishData(); + UpdateTradeFinishFlags(); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -5924,22 +4721,24 @@ static void sub_807EA2C(void) UpdatePaletteFade(); } -static void sub_807EACC(void) +static void CB2_TryFinishTrade(void) { - u8 mpId = sub_807ACDC(); - if (sub_8077260()) + u8 mpId = TradeGetMultiplayerId(); + if (IsWirelessTrade()) { - SetMainCallback2(c2_08053788); + SetMainCallback2(CB2_TryTradeEvolution); } else { - sub_807E4DC(); - if (mpId == 0 && gUnknown_020322A0->unk_72 == 1 && gUnknown_020322A0->unk_73 == 1) + UpdateTradeFinishFlags(); + if (mpId == 0 + && sTradeData->playerLinkFlagFinishTrade == READY_FINISH_TRADE + && sTradeData->partnerLinkFlagFinishTrade == READY_FINISH_TRADE) { - gUnknown_020322A0->linkData[0] = 0xDCBA; - Trade_SendData(gUnknown_020322A0); - gUnknown_020322A0->unk_72 = 2; - gUnknown_020322A0->unk_73 = 2; + sTradeData->linkData[0] = LINKCMD_CONFIRM_FINISH_TRADE; + Trade_SendData(sTradeData); + sTradeData->playerLinkFlagFinishTrade = FINISH_TRADE; + sTradeData->partnerLinkFlagFinishTrade = FINISH_TRADE; } } RunTasks(); @@ -5948,159 +4747,159 @@ static void sub_807EACC(void) UpdatePaletteFade(); } -static void sub_807EB50(void) +static void CB2_SaveAndEndTrade(void) { switch (gMain.state) { - case 0: - gMain.state++; - StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5); - sub_807F1A8(0, gStringVar4, 0); - break; - case 1: - sub_8077288(0); - gMain.state = 100; - gUnknown_020322A0->timer = 0; - break; - case 100: - if (++gUnknown_020322A0->timer > 180) - { - gMain.state = 101; - gUnknown_020322A0->timer = 0; - } - if (_IsLinkTaskFinished()) - { - gMain.state = 2; - } - break; - case 101: - if (_IsLinkTaskFinished()) - { - gMain.state = 2; - } - break; - case 2: - gMain.state = 50; - StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower); - sub_807F1A8(0, gStringVar4, 0); - break; - case 50: - if (!InUnionRoom()) - IncrementGameStat(GAME_STAT_POKEMON_TRADES); - if (gWirelessCommType) - { - sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); - } - SetContinueGameWarpStatusToDynamicWarp(); - sub_8153380(); + case 0: + gMain.state++; + StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 1: + sub_8077288(0); + gMain.state = 100; + sTradeData->timer = 0; + break; + case 100: + if (++sTradeData->timer > 180) + { + gMain.state = 101; + sTradeData->timer = 0; + } + if (_IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 101: + if (_IsLinkTaskFinished()) + { + gMain.state = 2; + } + break; + case 2: + gMain.state = 50; + StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 50: + if (!InUnionRoom()) + IncrementGameStat(GAME_STAT_POKEMON_TRADES); + if (gWirelessCommType) + { + sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + } + SetContinueGameWarpStatusToDynamicWarp(); + sub_8153380(); + gMain.state++; + sTradeData->timer = 0; + break; + case 51: + if (++sTradeData->timer == 5) + { gMain.state++; - gUnknown_020322A0->timer = 0; - break; - case 51: - if (++gUnknown_020322A0->timer == 5) - { - gMain.state++; - } - break; - case 52: - if (sub_81533AC()) + } + break; + case 52: + if (sub_81533AC()) + { + ClearContinueGameWarpStatus2(); + gMain.state = 4; + } + else + { + sTradeData->timer = 0; + gMain.state = 51; + } + break; + case 4: + sub_81533E0(); + gMain.state = 40; + sTradeData->timer = 0; + break; + case 40: + if (++sTradeData->timer > 50) + { + if (GetMultiplayerId() == 0) { - ClearContinueGameWarpStatus2(); - gMain.state = 4; + sTradeData->timer = Random() % 30; } else { - gUnknown_020322A0->timer = 0; - gMain.state = 51; + sTradeData->timer = 0; } - break; - case 4: - sub_81533E0(); - gMain.state = 40; - gUnknown_020322A0->timer = 0; - break; - case 40: - if (++gUnknown_020322A0->timer > 50) - { - if (GetMultiplayerId() == 0) - { - gUnknown_020322A0->timer = Random() % 30; - } - else - { - gUnknown_020322A0->timer = 0; - } - gMain.state = 41; - } - break; - case 41: - if (gUnknown_020322A0->timer == 0) + gMain.state = 41; + } + break; + case 41: + if (sTradeData->timer == 0) + { + sub_8077288(1); + gMain.state = 42; + } + else + { + sTradeData->timer--; + } + break; + case 42: + if (_IsLinkTaskFinished()) + { + sub_8153408(); + gMain.state = 5; + } + break; + case 5: + if (++sTradeData->timer > 60) + { + gMain.state++; + sub_8077288(2); + } + break; + case 6: + if (_IsLinkTaskFinished()) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gMain.state ++; + } + break; + case 7: + if (!gPaletteFade.active) + { + FadeOutBGM(3); + gMain.state++; + } + break; + case 8: + if (IsBGMStopped() == TRUE) + { + if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu) { - sub_8077288(1); - gMain.state = 42; + sub_8077288(3); } else { - gUnknown_020322A0->timer--; - } - break; - case 42: - if (_IsLinkTaskFinished()) - { - sub_8153408(); - gMain.state = 5; + sub_800AC34(); } - break; - case 5: - if (++gUnknown_020322A0->timer > 60) - { - gMain.state++; - sub_8077288(2); - } - break; - case 6: + gMain.state++; + } + break; + case 9: + if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu) + { if (_IsLinkTaskFinished()) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gMain.state ++; - } - break; - case 7: - if (!gPaletteFade.active) - { - FadeOutBGM(3); - gMain.state++; - } - break; - case 8: - if (IsBGMStopped() == TRUE) - { - if (gWirelessCommType && gMain.savedCallback == sub_80773AC) - { - sub_8077288(3); - } - else - { - sub_800AC34(); - } - gMain.state++; - } - break; - case 9: - if (gWirelessCommType && gMain.savedCallback == sub_80773AC) - { - if (_IsLinkTaskFinished()) - { - gSoftResetDisabled = FALSE; - SetMainCallback2(c2_080543C4); - } - } - else if (!gReceivedRemoteLinkPlayers) - { gSoftResetDisabled = FALSE; - SetMainCallback2(c2_080543C4); + SetMainCallback2(CB2_FreeTradeData); } - break; + } + else if (!gReceivedRemoteLinkPlayers) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(CB2_FreeTradeData); + } + break; } if (!HasLinkErrorOccurred()) { @@ -6111,7 +4910,7 @@ static void sub_807EB50(void) UpdatePaletteFade(); } -static void c2_080543C4(void) +static void CB2_FreeTradeData(void) { if (!gPaletteFade.active) { @@ -6120,7 +4919,7 @@ static void c2_080543C4(void) Free(GetBgTilemapBuffer(1)); Free(GetBgTilemapBuffer(0)); FreeMonSpritesGfx(); - FREE_AND_SET_NULL(gUnknown_020322A0); + FREE_AND_SET_NULL(sTradeData); if (gWirelessCommType) DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(gMain.savedCallback); @@ -6134,95 +4933,103 @@ static void c2_080543C4(void) void DoInGameTradeScene(void) { ScriptContext2_Enable(); - CreateTask(sub_807F110, 10); + CreateTask(Task_InGameTrade, 10); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); } -static void sub_807F110(u8 taskId) +static void Task_InGameTrade(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(sub_807B270); + SetMainCallback2(CB2_InGameTrade); gFieldCallback = FieldCallback_ReturnToEventScript2; DestroyTask(taskId); } } -static void sub_807F14C(void) +static void CheckPartnersMonForRibbons(void) { u8 i; u8 numRibbons = 0; for (i = 0; i < 12; i ++) { - numRibbons += GetMonData(&gEnemyParty[gUnknown_02032298[1] % 6], MON_DATA_CHAMPION_RIBBON + i); + numRibbons += GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_CHAMPION_RIBBON + i); } if (numRibbons != 0) FlagSet(FLAG_SYS_RIBBON_GET); } -void sub_807F19C(void) +void InitTradeBg(void) { - sub_807B170(); + InitTradeBgInternal(); } -void sub_807F1A8(u8 windowId, const u8 *str, u8 speed) +void DrawTextOnTradeWindow(u8 windowId, const u8 *str, u8 speed) { FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - gUnknown_020322A0->unk_F6[0] = 15; - gUnknown_020322A0->unk_F6[1] = 1; - gUnknown_020322A0->unk_F6[2] = 6; - AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, gUnknown_020322A0->unk_F6, speed, str); + sTradeData->textColors[0] = TEXT_DYNAMIC_COLOR_6; + sTradeData->textColors[1] = TEXT_COLOR_WHITE; + sTradeData->textColors[2] = TEXT_COLOR_GREEN; + AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, sTradeData->textColors, speed, str); CopyWindowToVram(windowId, 3); } -static void c3_08054588(u8 taskId) +#define idx data[0] +#define counter data[1] +#define signalComingBack data[2] + +static void Task_AnimateWirelessSignal(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 unk = gUnknown_08339090[data[0]][0] * 16; + u16 paletteIdx = sWirelessSignalTiming[idx][0] * 16; - if (!data[2]) + if (!signalComingBack) { - if (unk == 0x100) - LoadPalette(gUnknown_08337EA0, 0x30, 32); + if (paletteIdx == 256) + LoadPalette(sTradePal_Black, 0x30, 32); else - LoadPalette(&gUnknown_08337AA0[unk], 0x30, 32); + LoadPalette(&sTradePal_WirelessSignalSend[paletteIdx], 0x30, 32); } else { - if (unk == 0x100) - LoadPalette(gUnknown_08337EA0, 0x30, 32); + if (paletteIdx == 256) + LoadPalette(sTradePal_Black, 0x30, 32); else - LoadPalette(&gUnknown_08337CA0[unk], 0x30, 32); + LoadPalette(&sTradePal_WirelessSignalReceive[paletteIdx], 0x30, 32); } - if (gUnknown_08339090[data[0]][0] == 0 && data[1] == 0) + if (sWirelessSignalTiming[idx][0] == 0 && counter == 0) PlaySE(SE_W215); - if (data[1] == gUnknown_08339090[data[0]][1]) + if (counter == sWirelessSignalTiming[idx][1]) { - data[0]++; - data[1] = 0; - if (gUnknown_08339090[data[0]][1] == 0xFF) + idx++; + counter = 0; + if (sWirelessSignalTiming[idx][1] == 0xFF) { DestroyTask(taskId); } } else { - data[1]++; + counter++; } } +#undef idx +#undef counter +#undef signalComingBack + static void c3_0805465C(u8 taskId) { s16 *data = gTasks[taskId].data; if (data[0] == 0) { - gUnknown_020322A0->unk_FB = gUnknown_020322A0->unk_FD = 120; - gUnknown_020322A0->unk_FC = 0; - gUnknown_020322A0->unk_FE = 160; + sTradeData->wirelessWinLeft = sTradeData->wirelessWinRight = 120; + sTradeData->wirelessWinTop = 0; + sTradeData->wirelessWinBottom = 160; SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | @@ -6230,14 +5037,14 @@ static void c3_0805465C(u8 taskId) WININ_WIN0_OBJ); } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(gUnknown_020322A0->unk_FB, gUnknown_020322A0->unk_FD)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(gUnknown_020322A0->unk_FC, gUnknown_020322A0->unk_FE)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom)); data[0]++; - gUnknown_020322A0->unk_FB -= 5; - gUnknown_020322A0->unk_FD += 5; + sTradeData->wirelessWinLeft -= 5; + sTradeData->wirelessWinRight += 5; - if (gUnknown_020322A0->unk_FB < 80) + if (sTradeData->wirelessWinLeft < 80) { DestroyTask(taskId); } @@ -6249,24 +5056,24 @@ static void sub_807F39C(u8 taskId) if (data[0] == 0) { - gUnknown_020322A0->unk_FB = 80; - gUnknown_020322A0->unk_FD = 160; + sTradeData->wirelessWinLeft = 80; + sTradeData->wirelessWinRight = 160; SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_OBJ); } - SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(gUnknown_020322A0->unk_FB, gUnknown_020322A0->unk_FD)); - SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(gUnknown_020322A0->unk_FC, gUnknown_020322A0->unk_FE)); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE2(sTradeData->wirelessWinLeft, sTradeData->wirelessWinRight)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE2(sTradeData->wirelessWinTop, sTradeData->wirelessWinBottom)); - if (gUnknown_020322A0->unk_FB != 120) + if (sTradeData->wirelessWinLeft != 120) { data[0]++; - gUnknown_020322A0->unk_FB += 5; - gUnknown_020322A0->unk_FD -= 5; + sTradeData->wirelessWinLeft += 5; + sTradeData->wirelessWinRight -= 5; - if (gUnknown_020322A0->unk_FB >= 116) + if (sTradeData->wirelessWinLeft >= 116) BlendPalettes(0x8, 0, RGB_WHITEALPHA); } else @@ -6276,114 +5083,108 @@ static void sub_807F39C(u8 taskId) } } -static void sub_807F464(void) +static void CB2_SaveAndEndWirelessTrade(void) { switch (gMain.state) { - case 0: - gMain.state = 1; - StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5); - sub_807F1A8(0, gStringVar4, 0); - break; - case 1: - sub_8077288(0); - gMain.state = 2; - gUnknown_020322A0->timer = 0; - break; - case 2: - if (_IsLinkTaskFinished()) - { - gMain.state = 3; - StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower); - sub_807F1A8(0, gStringVar4, 0); - IncrementGameStat(GAME_STAT_POKEMON_TRADES); - sub_8153380(); - gUnknown_020322A0->timer = 0; - } - break; - case 3: - if (++gUnknown_020322A0->timer == 5) - { - gMain.state = 4; - } - break; - case 4: - if (sub_81533AC()) - { - gMain.state = 5; - } - else - { - gUnknown_020322A0->timer = 0; - gMain.state = 3; - } - break; - case 5: - sub_81533E0(); - gMain.state = 6; - gUnknown_020322A0->timer = 0; - break; - case 6: - if (++gUnknown_020322A0->timer > 10) - { - if (GetMultiplayerId() == 0) - { - gUnknown_020322A0->timer = Random() % 30; - } - else - { - gUnknown_020322A0->timer = 0; - } - gMain.state = 7; - } - break; - case 7: - if (gUnknown_020322A0->timer == 0) - { - sub_8077288(1); - gMain.state = 8; - } + case 0: + gMain.state = 1; + StringExpandPlaceholders(gStringVar4, gText_CommunicationStandby5); + DrawTextOnTradeWindow(0, gStringVar4, 0); + break; + case 1: + sub_8077288(0); + gMain.state = 2; + sTradeData->timer = 0; + break; + case 2: + if (_IsLinkTaskFinished()) + { + gMain.state = 3; + StringExpandPlaceholders(gStringVar4, gText_SavingDontTurnOffPower); + DrawTextOnTradeWindow(0, gStringVar4, 0); + IncrementGameStat(GAME_STAT_POKEMON_TRADES); + sub_8153380(); + sTradeData->timer = 0; + } + break; + case 3: + if (++sTradeData->timer == 5) + gMain.state = 4; + break; + case 4: + if (sub_81533AC()) + { + gMain.state = 5; + } + else + { + sTradeData->timer = 0; + gMain.state = 3; + } + break; + case 5: + sub_81533E0(); + gMain.state = 6; + sTradeData->timer = 0; + break; + case 6: + if (++sTradeData->timer > 10) + { + if (GetMultiplayerId() == 0) + sTradeData->timer = Random() % 30; else - { - gUnknown_020322A0->timer--; - } - break; - case 8: - if (_IsLinkTaskFinished()) - { - sub_8153408(); - gMain.state = 9; - } - break; - case 9: - if (++gUnknown_020322A0->timer > 60) - { - gMain.state++; - sub_8077288(2); - } - break; - case 10: - if (_IsLinkTaskFinished()) - { - FadeOutBGM(3); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gMain.state = 11; - } - break; - case 11: - if (!gPaletteFade.active && IsBGMStopped() == TRUE) - { - sub_8077288(3); - gMain.state = 12; - } - break; - case 12: - if (_IsLinkTaskFinished()) - { - gSoftResetDisabled = FALSE; - SetMainCallback2(c2_080543C4); - } - break; + sTradeData->timer = 0; + gMain.state = 7; + } + break; + case 7: + if (sTradeData->timer == 0) + { + sub_8077288(1); + gMain.state = 8; + } + else + { + sTradeData->timer--; + } + break; + case 8: + if (_IsLinkTaskFinished()) + { + sub_8153408(); + gMain.state = 9; + } + break; + case 9: + if (++sTradeData->timer > 60) + { + gMain.state++; + sub_8077288(2); + } + break; + case 10: + if (_IsLinkTaskFinished()) + { + FadeOutBGM(3); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gMain.state = 11; + } + break; + case 11: + if (!gPaletteFade.active && IsBGMStopped() == TRUE) + { + sub_8077288(3); + gMain.state = 12; + } + break; + case 12: + if (_IsLinkTaskFinished()) + { + gSoftResetDisabled = FALSE; + SetMainCallback2(CB2_FreeTradeData); + } + break; } if (!HasLinkErrorOccurred()) diff --git a/src/trader.c b/src/trader.c index a3794a539..e0b780d25 100644 --- a/src/trader.c +++ b/src/trader.c @@ -1,6 +1,6 @@ #include "global.h" #include "constants/decorations.h" -#include "constants/mauville_man.h" +#include "constants/mauville_old_man.h" #include "decoration.h" #include "decoration_inventory.h" #include "event_data.h" @@ -86,7 +86,7 @@ void CreateAvailableDecorationsMenu(u8 taskId) schedule_bg_copy_tilemap_to_vram(0); } -void sub_8133BE4(u8 taskId, u8 decorationId) +void Task_BufferDecorSelectionAndCloseWindow(u8 taskId, u8 decorationId) { s16 * data = gTasks[taskId].data; if (decorationId > NUM_DECORATIONS) @@ -118,14 +118,14 @@ void Task_HandleGetDecorationMenuInput(u8 taskId) case MENU_B_PRESSED: case 4: PlaySE(SE_SELECT); - sub_8133BE4(taskId, 0); + Task_BufferDecorSelectionAndCloseWindow(taskId, 0); break; default: PlaySE(SE_SELECT); gSpecialVar_0x8005 = input; StringCopy(gStringVar1, trader->playerNames[input]); ConvertInternationalString(gStringVar1, trader->language[input]); - sub_8133BE4(taskId, trader->decorIds[input]); + Task_BufferDecorSelectionAndCloseWindow(taskId, trader->decorIds[input]); break; } } diff --git a/src/trainer_card.c b/src/trainer_card.c index 9c4816c42..f3bff3731 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -4,7 +4,7 @@ #include "task.h" #include "main.h" #include "window.h" -#include "alloc.h" +#include "malloc.h" #include "link.h" #include "bg.h" #include "sound.h" @@ -1010,7 +1010,7 @@ static void PrintMoneyOnCard(void) else AddTextPrinterParameterized3(1, 1, 16, 57, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardMoney); - ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, 0, 6); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6); StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); if (!sData->isHoenn) { @@ -1043,7 +1043,7 @@ static void PrintPokedexOnCard(void) AddTextPrinterParameterized3(1, 1, 20, 72, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardPokedex); else AddTextPrinterParameterized3(1, 1, 16, 73, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardPokedex); - StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, 0, 3), gText_EmptyString6); + StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3), gText_EmptyString6); if (!sData->isHoenn) { xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); @@ -1103,12 +1103,12 @@ static void PrintTimeOnCard(void) r7 -= r10; FillWindowPixelRect(1, PIXEL_FILL(0), r7, r4, r10, 15); - ConvertIntToDecimalStringN(gStringVar4, hours, 1, 3); + ConvertIntToDecimalStringN(gStringVar4, hours, STR_CONV_MODE_RIGHT_ALIGN, 3); AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4); r7 += 18; AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB40[sData->var_7], TEXT_SPEED_FF, gText_Colon2); r7 += width; - ConvertIntToDecimalStringN(gStringVar4, minutes, 2, 2); + ConvertIntToDecimalStringN(gStringVar4, minutes, STR_CONV_MODE_LEADING_ZEROS, 2); AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4); } @@ -1151,9 +1151,9 @@ static void PrintHofTimeOnCard(void) { if (sData->hasHofResult) { - ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.hofDebutHours, 1, 3); - ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.hofDebutMinutes, 2, 2); - ConvertIntToDecimalStringN(gStringVar3, sData->trainerCard.hofDebutSeconds, 2, 2); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.hofDebutHours, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.hofDebutMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar3, sData->trainerCard.hofDebutSeconds, STR_CONV_MODE_LEADING_ZEROS, 2); StringExpandPlaceholders(sData->var_93, gUnknown_0856FB4C); } } @@ -1180,8 +1180,8 @@ static void PrintLinkResultsNumsOnCard(void) if (sData->hasLinkResults) { StringCopy(sData->var_D9, gUnknown_0856FB5C[sData->cardType]); - ConvertIntToDecimalStringN(sData->var_165, sData->trainerCard.linkBattleWins, 0, 4); - ConvertIntToDecimalStringN(sData->var_1AB, sData->trainerCard.linkBattleLosses, 0, 4); + ConvertIntToDecimalStringN(sData->var_165, sData->trainerCard.linkBattleWins, STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(sData->var_1AB, sData->trainerCard.linkBattleLosses, STR_CONV_MODE_LEFT_ALIGN, 4); } } @@ -1199,7 +1199,7 @@ static void PrintWinsLossesStringOnCard(void) static void PrintTradesNumOnCard(void) { if (sData->hasTrades) - ConvertIntToDecimalStringN(sData->var_237, sData->trainerCard.pokemonTrades, 1, 5); + ConvertIntToDecimalStringN(sData->var_237, sData->trainerCard.pokemonTrades, STR_CONV_MODE_RIGHT_ALIGN, 5); } static void PrintTradesStringOnCard(void) @@ -1211,7 +1211,7 @@ static void PrintTradesStringOnCard(void) static void PrintBerryCrushNumOnCard(void) { if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints) - ConvertIntToDecimalStringN(sData->var_2C3, sData->trainerCard.berryCrushPoints, 1, 5); + ConvertIntToDecimalStringN(sData->var_2C3, sData->trainerCard.berryCrushPoints, STR_CONV_MODE_RIGHT_ALIGN, 5); } static void PrintBerryCrushStringOnCard(void) @@ -1223,7 +1223,7 @@ static void PrintBerryCrushStringOnCard(void) static void PrintUnionNumOnCard(void) { if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.unionRoomNum) - ConvertIntToDecimalStringN(sData->var_34F, sData->trainerCard.unionRoomNum, 1, 5); + ConvertIntToDecimalStringN(sData->var_34F, sData->trainerCard.unionRoomNum, STR_CONV_MODE_RIGHT_ALIGN, 5); } static void PrintUnionStringOnCard(void) @@ -1236,7 +1236,7 @@ static void PrintPokeblocksNumOnCard(void) { if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.pokeblocksWithFriends) { - ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.pokeblocksWithFriends, 1, 5); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.pokeblocksWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); StringExpandPlaceholders(sData->var_395, gText_Var1DarkGreyShadowLightGrey); } } @@ -1250,7 +1250,7 @@ static void PrintPokeblockStringOnCard(void) static void PrintContestNumOnCard(void) { if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.contestsWithFriends) - ConvertIntToDecimalStringN(sData->var_3DB, sData->trainerCard.contestsWithFriends, 1, 5); + ConvertIntToDecimalStringN(sData->var_3DB, sData->trainerCard.contestsWithFriends, STR_CONV_MODE_RIGHT_ALIGN, 5); } static void PrintContestStringOnCard(void) @@ -1266,15 +1266,15 @@ static void PrintBattleFacilityNumsOnCard(void) case CARD_TYPE_RS: if (sData->hasBattleTowerWins) { - ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.battleTowerWins, 1, 4); - ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.battleTowerStraightWins, 1, 4); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.battleTowerWins, STR_CONV_MODE_RIGHT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.battleTowerStraightWins, STR_CONV_MODE_RIGHT_ALIGN, 4); StringExpandPlaceholders(sData->var_421, gText_WSlashStraightSlash); } break; case CARD_TYPE_EMERALD: if (sData->trainerCard.frontierBP) { - ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.frontierBP, 1, 5); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.frontierBP, STR_CONV_MODE_RIGHT_ALIGN, 5); StringExpandPlaceholders(sData->var_421, gText_Var1DarkLightGreyBP); } break; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 2a7e003d9..af6b0621d 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "battle_tower.h" #include "battle_setup.h" @@ -63,7 +63,7 @@ static void TrainerHillGetChallengeStatus(void); static void sub_81D5B2C(void); static void sub_81D5BBC(void); static void sub_81D5C00(void); -static void sub_81D5C5C(void); +static void GetInTrainerHill(void); static void sub_81D62B4(void); static void sub_81D64AC(void); static void sub_81D64DC(void); @@ -231,7 +231,7 @@ static void (* const sHillFunctions[])(void) = sub_81D5B2C, sub_81D5BBC, sub_81D5C00, - sub_81D5C5C, + GetInTrainerHill, sub_81D62B4, sub_81D64AC, sub_81D64DC, @@ -534,7 +534,7 @@ static void sub_81D5C00(void) FreeDataStruct(); } -bool8 sub_81D5C18(void) +bool8 InTrainerHillChallenge(void) { if (VarGet(VAR_TRAINER_HILL_IS_ACTIVE) == 0) return FALSE; @@ -546,9 +546,9 @@ bool8 sub_81D5C18(void) return FALSE; } -static void sub_81D5C5C(void) +static void GetInTrainerHill(void) { - if (!sub_81D5C18()) + if (!InTrainerHillChallenge()) gSpecialVar_Result = 0; else gSpecialVar_Result = 1; @@ -997,7 +997,7 @@ static void sub_81D6518(void) bool32 sub_81D6534(void) { - if (!sub_81D5C18() || GetCurrentTrainerHillMapId() == 6) + if (!InTrainerHillChallenge() || GetCurrentTrainerHillMapId() == 6) return FALSE; sub_81D5C00(); diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 047783a85..f360ec84c 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -1,7 +1,7 @@ #include "global.h" #include "sprite.h" #include "window.h" -#include "alloc.h" +#include "malloc.h" #include "constants/species.h" #include "palette.h" #include "decompress.h" diff --git a/src/trainer_see.c b/src/trainer_see.c index 22b256a99..72e903728 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -14,6 +14,7 @@ #include "util.h" #include "battle_pyramid.h" #include "constants/battle_setup.h" +#include "constants/event_objects.h" #include "constants/event_object_movement_constants.h" #include "constants/field_effects.h" @@ -47,11 +48,11 @@ static bool8 WaitRevealHiddenTrainer(u8 taskId, struct Task *task, struct EventO static void SpriteCB_TrainerIcons(struct Sprite *sprite); // IWRAM common -u16 gUnknown_03006080; -u8 gUnknown_03006084[4]; +u16 gWhichTrainerToFaceAfterBattle; +u8 gPostBattleMovementScript[4]; struct ApproachingTrainer gApproachingTrainers[2]; u8 gNoOfApproachingTrainers; -u8 gUnknown_030060AC; +bool8 gTrainerApproachedPlayer; // EWRAM EWRAM_DATA u8 gApproachingTrainerId = 0; @@ -205,7 +206,7 @@ bool8 CheckForTrainersWantingBattle(void) ResetTrainerOpponentIds(); ConfigureAndSetUpOneTrainerBattle(gApproachingTrainers[gNoOfApproachingTrainers - 1].eventObjectId, gApproachingTrainers[gNoOfApproachingTrainers - 1].trainerScriptPtr); - gUnknown_030060AC = 1; + gTrainerApproachedPlayer = TRUE; return TRUE; } else if (gNoOfApproachingTrainers == 2) @@ -218,12 +219,12 @@ bool8 CheckForTrainersWantingBattle(void) } SetUpTwoTrainersBattle(); gApproachingTrainerId = 0; - gUnknown_030060AC = 1; + gTrainerApproachedPlayer = TRUE; return TRUE; } else { - gUnknown_030060AC = 0; + gTrainerApproachedPlayer = FALSE; return FALSE; } } @@ -764,24 +765,24 @@ u8 GetChosenApproachingTrainerEventObjectId(u8 arrayId) return gApproachingTrainers[1].eventObjectId; } -void sub_80B4808(void) +void PlayerFaceTrainerAfterBattle(void) { - struct EventObject *trainerObj; + struct EventObject *eventObj; - if (gUnknown_030060AC == 1) + if (gTrainerApproachedPlayer == TRUE) { - trainerObj = &gEventObjects[gApproachingTrainers[gUnknown_03006080].eventObjectId]; - gUnknown_03006084[0] = GetFaceDirectionMovementAction(GetOppositeDirection(trainerObj->facingDirection)); - gUnknown_03006084[1] = 0xFE; - ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gUnknown_03006084); + eventObj = &gEventObjects[gApproachingTrainers[gWhichTrainerToFaceAfterBattle].eventObjectId]; + gPostBattleMovementScript[0] = GetFaceDirectionMovementAction(GetOppositeDirection(eventObj->facingDirection)); + gPostBattleMovementScript[1] = MOVEMENT_ACTION_STEP_END; + ScriptMovement_StartObjectMovementScript(EVENT_OBJ_ID_PLAYER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gPostBattleMovementScript); } else { - trainerObj = &gEventObjects[gPlayerAvatar.eventObjectId]; - gUnknown_03006084[0] = GetFaceDirectionMovementAction(trainerObj->facingDirection); - gUnknown_03006084[1] = 0xFE; - ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gUnknown_03006084); + eventObj = &gEventObjects[gPlayerAvatar.eventObjectId]; + gPostBattleMovementScript[0] = GetFaceDirectionMovementAction(eventObj->facingDirection); + gPostBattleMovementScript[1] = MOVEMENT_ACTION_STEP_END; + ScriptMovement_StartObjectMovementScript(EVENT_OBJ_ID_PLAYER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gPostBattleMovementScript); } - sub_809BE48(0xFF); + SetMovingNpcId(EVENT_OBJ_ID_PLAYER); } @@ -31,7 +31,7 @@ #include "text.h" #include "script_menu.h" #include "naming_screen.h" -#include "alloc.h" +#include "malloc.h" #include "region_map.h" #include "constants/region_map_sections.h" #include "decoration.h" @@ -42,6 +42,7 @@ #include "constants/layouts.h" #include "constants/metatile_behaviors.h" #include "constants/script_menu.h" +#include "constants/tv.h" // Static type declarations @@ -1595,7 +1596,7 @@ void SaveRecordedItemPurchasesForTVShow(void) show->smartshopperShow.itemIds[i] = gMartPurchaseHistory[i].itemId; show->smartshopperShow.itemAmounts[i] = gMartPurchaseHistory[i].quantity; } - show->smartshopperShow.priceReduced = GetPriceReduction(1); + show->smartshopperShow.priceReduced = GetPriceReduction(POKENEWS_SLATEPORT); StringCopy(show->smartshopperShow.playerName, gSaveBlock2Ptr->playerName); tv_store_id_3x(show); show->smartshopperShow.language = gGameLanguage; @@ -1955,11 +1956,11 @@ void sub_80EDB44(void) show->rivalTrainer.badgeCount = nBadges; if (IsNationalPokedexEnabled()) { - show->rivalTrainer.dexCount = GetNationalPokedexCount(0x01); + show->rivalTrainer.dexCount = GetNationalPokedexCount(FLAG_GET_CAUGHT); } else { - show->rivalTrainer.dexCount = GetHoennPokedexCount(0x01); + show->rivalTrainer.dexCount = GetHoennPokedexCount(FLAG_GET_CAUGHT); } show->rivalTrainer.location = gMapHeader.regionMapSectionId; show->rivalTrainer.mapLayoutId = gMapHeader.mapLayoutId; @@ -2002,7 +2003,7 @@ void sub_80EDC60(const u16 *words) } } -void sub_80EDCE8(void) +void TryPutTreasureInvestigatorsOnAir(void) { TVShow *show; @@ -2625,37 +2626,37 @@ static void sub_80EEBF4(u8 actionIdx) } } -void sub_80EEC80(void) +void IncrementDailySlotsUses(void) { VarSet(VAR_DAILY_SLOTS, VarGet(VAR_DAILY_SLOTS) + 1); } -void sub_80EECA4(void) +void IncrementDailyRouletteUses(void) { VarSet(VAR_DAILY_ROULETTE, VarGet(VAR_DAILY_ROULETTE) + 1); } -void sub_80EECC8(void) +void IncrementDailyWildBattles(void) { VarSet(VAR_DAILY_WILDS, VarGet(VAR_DAILY_WILDS) + 1); } -void sub_80EECEC(void) +void IncrementDailyBerryBlender(void) { VarSet(VAR_DAILY_BLENDER, VarGet(VAR_DAILY_BLENDER) + 1); } -void sub_80EED10(void) +void IncrementDailyPlantedBerries(void) { VarSet(VAR_DAILY_PLANTED_BERRIES, VarGet(VAR_DAILY_PLANTED_BERRIES) + 1); } -void sub_80EED34(void) +void IncrementDailyPickedBerries(void) { VarSet(VAR_DAILY_PICKED_BERRIES, VarGet(VAR_DAILY_PICKED_BERRIES) + gSpecialVar_0x8006); } -void sub_80EED60(u16 delta) +void IncrementDailyBattlePoints(u16 delta) { VarSet(VAR_DAILY_BP, VarGet(VAR_DAILY_BP) + delta); } diff --git a/src/union_room.c b/src/union_room.c index 01288c8cc..5952b03eb 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "battle.h" #include "berry_crush.h" #include "bg.h" @@ -44,21 +44,23 @@ #include "union_room_player_avatar.h" #include "window.h" #include "constants/battle_frontier.h" +#include "constants/cable_club.h" #include "constants/game_stat.h" #include "constants/maps.h" +#include "constants/party_menu.h" #include "constants/rgb.h" #include "constants/songs.h" #include "constants/species.h" -EWRAM_DATA u8 gUnknown_02022C20[12] = {}; +EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; EWRAM_DATA u8 gUnknown_02022C2C = 0; EWRAM_DATA u8 gUnknown_02022C2D = 0; EWRAM_DATA union UnkUnion_Main gUnknown_02022C30 = {}; EWRAM_DATA u32 gFiller_02022C34 = 0; EWRAM_DATA struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38 = {}; -EWRAM_DATA u16 gUnknown_02022C3C = 0; -EWRAM_DATA u8 gUnknown_02022C3E = 0; -EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {}; +EWRAM_DATA u16 gUnionRoomOfferedSpecies = 0; +EWRAM_DATA u8 gUnionRoomRequestedMonType = 0; +static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {}; // IWRAM vars static struct UnkStruct_Leader *gUnknown_03000DA0; @@ -96,8 +98,8 @@ void sub_8013BD8(struct UnkStruct_Group *arg0, s32 id); void sub_80173D4(void); void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1); -u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId); -void sub_801807C(struct TradeUnkStruct *arg0); +static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *arg0, u8 multiplayerId); +static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0); void sub_801AC54(void); void sub_80149D8(void); void MG_DrawTextBorder(u8 windowId); @@ -105,8 +107,8 @@ s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u8 *arg1, u8 arg2, cons bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1); u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); void sub_8019F2C(void); -bool32 sub_80180A0(u32 monId, struct TradeUnkStruct *arg1); -void sub_80180E8(u32 monId, struct TradeUnkStruct *arg1); +static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade); +static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *arg1); void sub_80181CC(void); bool32 sub_8017940(void); u8 sub_8016B00(void); @@ -122,7 +124,7 @@ void sub_801818C(bool32 arg0); s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate); s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6); s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1); -bool32 sub_8018024(void); +bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); u32 sub_8017984(s32 arg0); void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2); void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender); @@ -140,1045 +142,7 @@ void sub_8013DF4(u8 windowId, s32 itemId, u8 y); void sub_8017BE8(u8 windowId, s32 itemId, u8 y); void nullsub_14(u8 windowId, s32 itemId, u8 y); -// const rom data - -ALIGNED(4) const u8 gText_EmptyString[] = _(""); -ALIGNED(4) const u8 gText_Colon[] = _(":"); -ALIGNED(4) const u8 gText_UnkCtrlCodeF907[] = _("{ID}"); -ALIGNED(4) const u8 gText_PleaseStartOver[] = _("Please start over from the beginning."); -ALIGNED(4) const u8 gText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled."); -ALIGNED(4) const u8 unref_text_union_room_0[] = _("Awaiting communication\nfrom another player."); -ALIGNED(4) const u8 gText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player."); -ALIGNED(4) const u8 gText_AwaitingLink[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready."); -ALIGNED(4) const u8 gJPText_SingleBattle[] = _("シングルバトルを かいさいする"); -ALIGNED(4) const u8 gJPText_DoubleBattle[] = _("ダブルバトルを かいさいする"); -ALIGNED(4) const u8 gJPText_MultiBattle[] = _("マルチバトルを かいさいする"); -ALIGNED(4) const u8 gJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする"); -ALIGNED(4) const u8 gJPText_Chat[] = _("チャットを かいさいする"); -ALIGNED(4) const u8 gJPText_DistWonderCard[] = _("ふしぎなカードをくばる"); -ALIGNED(4) const u8 gJPText_DistWonderNews[] = _("ふしぎなニュースをくばる"); -ALIGNED(4) const u8 unref_text_union_room_1[] = _("ふしぎなできごとを かいさいする"); -ALIGNED(4) const u8 gJPText_HoldPokemonJump[] = _("なわとびを かいさいする"); -ALIGNED(4) const u8 gJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする"); -ALIGNED(4) const u8 gJPText_HoldBerryPicking[] = _("きのみどりを かいさいする"); -ALIGNED(4) const u8 gJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする"); -ALIGNED(4) const u8 gJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする"); - -const u8 *const unref_text_ptrs_union_room_0[] = { - gJPText_SingleBattle, - gJPText_DoubleBattle, - gJPText_MultiBattle, - gJPText_TradePokemon, - gJPText_Chat, - gJPText_DistWonderCard, - gJPText_DistWonderNews, - gJPText_DistWonderCard, - gJPText_HoldPokemonJump, - gJPText_HoldBerryCrush, - gJPText_HoldBerryPicking, - gJPText_HoldBerryPicking, - gJPText_HoldSpinTrade, - gJPText_HoldSpinShop -}; - -const u8 gText_1PlayerNeeded[] = _("1 player\nneeded."); -const u8 gText_2PlayersNeeded[] = _("2 players\nneeded."); -const u8 gText_3PlayersNeeded[] = _("3 players\nneeded."); -const u8 gText_4PlayersNeeded[] = _("4 players\nneeded."); -const u8 gText_2PlayerMode[] = _("2-PLAYER\nMODE"); -const u8 gText_3PlayerMode[] = _("3-PLAYER\nMODE"); -const u8 gText_4PlayerMode[] = _("4-PLAYER\nMODE"); -const u8 gText_5PlayerMode[] = _("5-PLAYER\nMODE"); - -const u8 *const gUnknown_082EDB60[][5] = { - { - gText_1PlayerNeeded, - gText_2PlayerMode, - NULL, - NULL, - NULL - }, { - gText_3PlayersNeeded, - gText_2PlayersNeeded, - gText_1PlayerNeeded, - gText_4PlayerMode, - NULL - }, { - gText_1PlayerNeeded, - gText_2PlayerMode, - gText_3PlayerMode, - gText_4PlayerMode, - gText_5PlayerMode - }, { - gText_2PlayersNeeded, - gText_1PlayerNeeded, - gText_3PlayerMode, - gText_4PlayerMode, - gText_5PlayerMode - }, { - gText_1PlayerNeeded, - gText_2PlayerMode, - gText_3PlayerMode, - gText_4PlayerMode, - NULL - } -}; - -ALIGNED(4) const u8 gUnknown_082EDBC4[] = _("{B_BUTTON}CANCEL"); -ALIGNED(4) const u8 unref_text_union_room_2[] = _("ため\nさんかしゃ ぼしゅうちゅう です!"); -ALIGNED(4) const u8 gUnknown_082EDBE8[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?"); -ALIGNED(4) const u8 gUnknown_082EDC0C[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?"); -ALIGNED(4) const u8 gUnknown_082EDC34[] = _("{STR_VAR_2} contacted you.\nAdd to the members?"); -ALIGNED(4) const u8 gUnknown_082EDC5C[] = _("{STR_VAR_1}!\nAre these members OK?"); -ALIGNED(4) const u8 gUnknown_082EDC78[] = _("Cancel {STR_VAR_1} MODE\nwith these members?"); -ALIGNED(4) const u8 gUnknown_082EDC9C[] = _("An “OK” was sent\nto {STR_VAR_1}."); -ALIGNED(4) const u8 gUnknown_082EDCB4[] = _("The other TRAINER doesn't appear\nto be available now…\p"); -ALIGNED(4) const u8 gUnknown_082EDCEC[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); -ALIGNED(4) const u8 gUnknown_082EDD24[] = _("The other TRAINER(S) is/are not\nready yet.\p"); - -const u8 *const gUnknown_082EDD50[] = { - gUnknown_082EDCEC, - gUnknown_082EDD24 -}; - -ALIGNED(4) const u8 gUnknown_082EDD58[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EDD8C[] = _("There is a member who can no\nlonger remain available.\p"); - -const u8 *const gUnknown_082EDDC4[] = { - gUnknown_082EDCB4, - gUnknown_082EDD8C -}; - -ALIGNED(4) const u8 gUnknown_082EDDCC[] = _("The other TRAINER appears\nunavailable…\p"); -ALIGNED(4) const u8 gUnknown_082EDDF4[] = _("{STR_VAR_1} sent back an “OK”!"); -ALIGNED(4) const u8 gUnknown_082EDE0C[] = _("{STR_VAR_1} OK'd your registration as\na member."); -ALIGNED(4) const u8 gUnknown_082EDE34[] = _("{STR_VAR_1} replied, “No…”\p"); -ALIGNED(4) const u8 gUnknown_082EDE48[] = _("{STR_VAR_1}!\nAwaiting other members!"); -ALIGNED(4) const u8 gUnknown_082EDE64[] = _("Quit being a member?"); -ALIGNED(4) const u8 gUnknown_082EDE7C[] = _("You stopped being a member.\p"); - -const u8 *const gUnknown_082EDE9C[] = { - NULL, - gUnknown_082EDD8C, - gUnknown_082EDDCC, - NULL, - NULL, - NULL, - gUnknown_082EDE34, - NULL, - NULL, - gUnknown_082EDE7C -}; - -ALIGNED(4) const u8 gUnknown_082EDEC4[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); -ALIGNED(4) const u8 gUnknown_082EDF04[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…"); -ALIGNED(4) const u8 gUnknown_082EDF40[] = _("The link with your friend has been\ndropped…"); -ALIGNED(4) const u8 gUnknown_082EDF6C[] = _("{STR_VAR_1} replied, “No…”"); - -const u8 *const gUnknown_082EDF80[] = { - NULL, - gUnknown_082EDF40, - gUnknown_082EDF40, - NULL, - NULL, - NULL, - gUnknown_082EDF6C, - NULL, - NULL, - NULL -}; - -ALIGNED(4) const u8 gUnknown_082EDFA8[] = _("Do you want the {STR_VAR_2}\nMODE?"); -ALIGNED(4) const u8 gUnknown_082EDFC4[] = _("Do you want the {STR_VAR_2}\nMODE?"); - -const u8 *const unref_text_ptrs_union_room_1[] = { - gUnknown_082EDFA8, - gUnknown_082EDFC4 -}; - -ALIGNED(4) const u8 unref_text_union_room_3[] = _("Communicating…\nPlease wait."); -ALIGNED(4) const u8 gUnknown_082EE004[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…"); -ALIGNED(4) const u8 gUnknown_082EE02C[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); -ALIGNED(4) const u8 gUnknown_082EE098[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); -ALIGNED(4) const u8 gUnknown_082EE104[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); - -const u8 *const gUnknown_082EE17C[] = { - gUnknown_082EE02C, - gUnknown_082EE098, - gUnknown_082EE104 -}; - -ALIGNED(4) const u8 gUnknown_082EE188[] = _("Hiya! Is there something that you\nwanted to do?"); -ALIGNED(4) const u8 gUnknown_082EE1B8[] = _("Hello!\nWould you like to do something?"); -ALIGNED(4) const u8 gUnknown_082EE1E0[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?"); -ALIGNED(4) const u8 gUnknown_082EE218[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?"); - -const u8 *const gUnknown_082EE24C[][2] = { - { - gUnknown_082EE188, - gUnknown_082EE1B8 - }, { - gUnknown_082EE1E0, - gUnknown_082EE218 - } -}; - -ALIGNED(4) const u8 gUnknown_082EE25C[] = _("Want to do something?"); -ALIGNED(4) const u8 gUnknown_082EE274[] = _("Would you like to do something?"); -ALIGNED(4) const u8 gUnknown_082EE294[] = _("{STR_VAR_1}: What would you like to\ndo now?"); -ALIGNED(4) const u8 unref_text_union_room_4[] = _("{STR_VAR_1}: Want to do anything else?"); - -const u8 *const unref_text_ptrs_union_room_2[][2] = { - { - gUnknown_082EE25C, - gUnknown_082EE274 - }, { - gUnknown_082EE294, - gUnknown_082EE294 - } -}; - -ALIGNED(4) const u8 gUnknown_082EE2E8[] = _("Somebody has contacted you.{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EE308[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}"); - -const u8 *const gUnknown_082EE324[] = { - gUnknown_082EE2E8, - gUnknown_082EE308 -}; - -ALIGNED(4) const u8 gUnknown_082EE32C[] = _("Awaiting a response from\nthe other TRAINER…"); -ALIGNED(4) const u8 gUnknown_082EE358[] = _("Awaiting a response from\n{STR_VAR_1}…"); - -const u8 *const gUnknown_082EE378[] = { - gUnknown_082EE32C, - gUnknown_082EE358 -}; - -ALIGNED(4) const u8 gUnknown_082EE380[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?"); -ALIGNED(4) const u8 gUnknown_082EE3DC[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?"); -ALIGNED(4) const u8 gUnknown_082EE430[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?"); -ALIGNED(4) const u8 gUnknown_082EE47C[] = _("There is an offer to trade your\nregistered Lv. {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}\pin exchange for a\nLv. {SPECIAL_F7 0x02} {SPECIAL_F7 0x03}.\pWill you accept this trade\noffer?"); -ALIGNED(4) const u8 gUnknown_082EE4F0[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?"); -ALIGNED(4) const u8 gUnknown_082EE544[] = _("The chat has been dropped.\p"); -ALIGNED(4) const u8 gUnknown_082EE560[] = _("You declined the offer.\p"); -ALIGNED(4) const u8 gUnknown_082EE57C[] = _("You declined the offer.\p"); -ALIGNED(4) const u8 gUnknown_082EE598[] = _("The chat was ended.\p"); - -const u8 *const unref_text_ptrs_union_room_3[] = { - gUnknown_082EE380, - gUnknown_082EE3DC, - gUnknown_082EE430, - gUnknown_082EE47C -}; - -ALIGNED(4) const u8 gUnknown_082EE5C0[] = _("Oh, hey! We're in a chat right now.\nWant to join us?"); -ALIGNED(4) const u8 gUnknown_082EE5F8[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?"); -ALIGNED(4) const u8 gUnknown_082EE638[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?"); -ALIGNED(4) const u8 gUnknown_082EE674[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?"); - -const u8 *const gUnknown_082EE6B8[][2] = { - { - gUnknown_082EE5C0, - gUnknown_082EE638 - }, { - gUnknown_082EE5F8, - gUnknown_082EE674 - } -}; - -ALIGNED(4) const u8 gUnknown_082EE6C8[] = _("……\nThe TRAINER appears to be busy…\p"); -ALIGNED(4) const u8 gUnknown_082EE6EC[] = _("A battle, huh?\nAll right, just give me some time."); -ALIGNED(4) const u8 gUnknown_082EE720[] = _("You want to chat, huh?\nSure, just wait a little."); -ALIGNED(4) const u8 gUnknown_082EE754[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD."); -ALIGNED(4) const u8 gUnknown_082EE78C[] = _("A battle? Of course, but I need\ntime to get ready."); -ALIGNED(4) const u8 gUnknown_082EE7C0[] = _("Did you want to chat?\nOkay, but please wait a moment."); -ALIGNED(4) const u8 gUnknown_082EE7F8[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); - -const u8 *const gUnknown_082EE82C[][4] = { - { - gUnknown_082EE6EC, - gUnknown_082EE720, - NULL, - gUnknown_082EE754 - }, { - gUnknown_082EE78C, - gUnknown_082EE7C0, - NULL, - gUnknown_082EE7F8 - } -}; - -ALIGNED(4) const u8 unref_text_union_room_5[] = _("You want to chat, huh?\nSure, just wait a little."); -ALIGNED(4) const u8 gUnknown_082EE880[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EE8B8[] = _("All right!\nLet's chat!{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EE8D4[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EE904[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EE92C[] = _("The trade will be started.{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EE94C[] = _("The battle will be started.{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EE96C[] = _("Entering the chat…{PAUSE 60}"); - -const u8 *const gUnknown_082EE984[][2][3] = { - { - { - gUnknown_082EE94C, - gUnknown_082EE96C, - gUnknown_082EE92C - }, { - gUnknown_082EE94C, - gUnknown_082EE96C, - gUnknown_082EE92C - } - }, { - { - gUnknown_082EE880, - gUnknown_082EE8B8, - gUnknown_082EE92C - }, { - gUnknown_082EE8D4, - gUnknown_082EE904, - gUnknown_082EE92C - } - } -}; - -ALIGNED(4) const u8 gUnknown_082EE9B4[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p"); -ALIGNED(4) const u8 gUnknown_082EEA14[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p"); - -const u8 *const gUnknown_082EEA68[] = { - gUnknown_082EE9B4, - gUnknown_082EEA14 -}; - -ALIGNED(4) const u8 gUnknown_082EEA70[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p"); -ALIGNED(4) const u8 gUnknown_082EEAC0[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p"); - -const u8 *const gUnknown_082EEB08[] = { - gUnknown_082EEA70, - gUnknown_082EEAC0 -}; - -ALIGNED(4) const u8 gUnknown_082EEB10[] = _("If you want to do something with\nme, just give me a shout!\p"); -ALIGNED(4) const u8 gUnknown_082EEB4C[] = _("If you want to do something with\nme, don't be shy.\p"); - -const u8 *const gUnknown_082EEB80[] = { - gUnknown_082EEB10, - gUnknown_082EEB4C -}; - -ALIGNED(4) const u8 gUnknown_082EEB88[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); -ALIGNED(4) const u8 gUnknown_082EEBD0[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); -ALIGNED(4) const u8 gUnknown_082EEC14[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); -ALIGNED(4) const u8 gUnknown_082EEC50[] = _("Oh, all right.\nCome see me anytime, okay?\p"); -ALIGNED(4) const u8 gUnknown_082EEC7C[] = _("Oh…\nPlease come by anytime.\p"); - -const u8 *const gUnknown_082EEC9C[] = { - gUnknown_082EEC50, - gUnknown_082EEC7C -}; - -ALIGNED(4) const u8 gUnknown_082EECA4[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); -ALIGNED(4) const u8 gUnknown_082EECEC[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); - -const u8 *const gUnknown_082EED3C[] = { - gUnknown_082EECA4, - gUnknown_082EECEC -}; - -ALIGNED(4) const u8 gUnknown_082EED44[] = _("Whoa!\nI can tell you're pretty tough!\p"); -ALIGNED(4) const u8 gUnknown_082EED6C[] = _("You used that move?\nThat's good strategy!\p"); -ALIGNED(4) const u8 gUnknown_082EED98[] = _("Way to go!\nThat was an eye-opener!\p"); -ALIGNED(4) const u8 gUnknown_082EEDBC[] = _("Oh! How could you use that\nPOKéMON in that situation?\p"); -ALIGNED(4) const u8 gUnknown_082EEDF4[] = _("That POKéMON…\nIt's been raised really well!\p"); -ALIGNED(4) const u8 gUnknown_082EEE24[] = _("That's it!\nThis is the right move now!\p"); -ALIGNED(4) const u8 gUnknown_082EEE4C[] = _("That's awesome!\nYou can battle that way?\p"); -ALIGNED(4) const u8 gUnknown_082EEE78[] = _("You have exquisite timing for\nswitching POKéMON!\p"); - -const u8 *const gUnknown_082EEEAC[][4] = { - { - gUnknown_082EED44, - gUnknown_082EED6C, - gUnknown_082EED98, - gUnknown_082EEDBC - }, { - gUnknown_082EEDF4, - gUnknown_082EEE24, - gUnknown_082EEE4C, - gUnknown_082EEE78 - } -}; - -ALIGNED(4) const u8 gUnknown_082EEECC[] = _("Oh, I see!\nThis is educational!\p"); -ALIGNED(4) const u8 gUnknown_082EEEF0[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p"); -ALIGNED(4) const u8 gUnknown_082EEF2C[] = _("Oh?\nSomething like that happened.\p"); -ALIGNED(4) const u8 gUnknown_082EEF50[] = _("Hmhm… What?\nSo is this what you're saying?\p"); -ALIGNED(4) const u8 gUnknown_082EEF7C[] = _("Is that right?\nI didn't know that.\p"); -ALIGNED(4) const u8 gUnknown_082EEFA0[] = _("Ahaha!\nWhat is that about?\p"); -ALIGNED(4) const u8 gUnknown_082EEFBC[] = _("Yes, that's exactly it!\nThat's what I meant.\p"); -ALIGNED(4) const u8 gUnknown_082EEFEC[] = _("In other words…\nYes! That's right!\p"); - -const u8 *const gUnknown_082EF010[][4] = { - { - gUnknown_082EEECC, - gUnknown_082EEEF0, - gUnknown_082EEF2C, - gUnknown_082EEF50 - }, { - gUnknown_082EEF7C, - gUnknown_082EEFA0, - gUnknown_082EEFBC, - gUnknown_082EEFEC - } -}; - -ALIGNED(4) const u8 gUnknown_082EF030[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p"); -ALIGNED(4) const u8 gUnknown_082EF06C[] = _("I hope I get to know you better!\p"); -ALIGNED(4) const u8 gUnknown_082EF090[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p"); -ALIGNED(4) const u8 gUnknown_082EF0D0[] = _("Glad to meet you.\nPlease don't be a stranger!\p"); - -const u8 *const gUnknown_082EF100[][2] = { - { - gUnknown_082EF030, - gUnknown_082EF06C - }, { - gUnknown_082EF090, - gUnknown_082EF0D0 - } -}; - -ALIGNED(4) const u8 gUnknown_082EF110[] = _("Yeahah!\nI really wanted this POKéMON!\p"); -ALIGNED(4) const u8 gUnknown_082EF138[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p"); -ALIGNED(4) const u8 gUnknown_082EF178[] = _("I'm trading POKéMON right now.\p"); -ALIGNED(4) const u8 gUnknown_082EF198[] = _("I finally got that POKéMON I\nwanted in a trade!\p"); - -const u8 *const gUnknown_082EF1CC[][4] = { - { - gUnknown_082EF110, - gUnknown_082EF138, - NULL, - NULL - }, { - gUnknown_082EF178, - gUnknown_082EF198, - NULL, - NULL - } -}; - -ALIGNED(4) const u8 gUnknown_082EF1EC[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p"); -ALIGNED(4) const u8 gUnknown_082EF20C[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?"); -ALIGNED(4) const u8 gUnknown_082EF298[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?"); -ALIGNED(4) const u8 unref_text_union_room_6[] = _("We have registered your POKéMON for\ntrade on the TRADING BOARD.\pThank you for using this service!\p"); -ALIGNED(4) const u8 unref_text_union_room_7[] = _("Nobody has registered any POKéMON\nfor trade on the TRADING BOARD.\p\n"); -ALIGNED(4) const u8 gUnknown_082EF47C[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); -ALIGNED(4) const u8 gUnknown_082EF4C4[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); -ALIGNED(4) const u8 gUnknown_082EF4FC[] = _("Registration has been canceled.\p"); -ALIGNED(4) const u8 gUnknown_082EF520[] = _("Registration has been completed.\p"); -ALIGNED(4) const u8 gUnknown_082EF544[] = _("The trade has been canceled.\p"); -ALIGNED(4) const u8 gUnknown_082EF564[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?"); -ALIGNED(4) const u8 gUnknown_082EF590[] = _("Cancel the registration of your\nEGG?"); -ALIGNED(4) const u8 gUnknown_082EF5B8[] = _("The registration has been canceled.\p"); -ALIGNED(4) const u8 unref_text_union_room_8[] = _("TRAINERS wishing to make a trade\nwill be listed."); -ALIGNED(4) const u8 unref_text_union_room_9[] = _("Please choose the TRAINER with whom\nyou would like to trade POKéMON."); -ALIGNED(4) const u8 gUnknown_082EF65C[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?"); -ALIGNED(4) const u8 unref_text_union_room_10[] = _("Awaiting a response from\nthe other TRAINER…"); -ALIGNED(4) const u8 unref_text_union_room_11[] = _("You have not registered a POKéMON\nfor trading.\p"); -ALIGNED(4) const u8 gUnknown_082EF6E4[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p"); -ALIGNED(4) const u8 gUnknown_082EF718[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p"); -ALIGNED(4) const u8 gUnknown_082EF740[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p"); -ALIGNED(4) const u8 gUnknown_082EF774[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p"); - -const u8 *const unref_text_ptrs_union_room_4[] = { - gUnknown_082EF740, - gUnknown_082EF774 -}; - -ALIGNED(4) const u8 gUnknown_082EF7B0[] = _("Your trade offer was rejected.\p"); -ALIGNED(4) const u8 gUnknown_082EF7D0[] = _("EGG TRADE"); -ALIGNED(4) const u8 gUnknown_082EF7DC[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL"); -ALIGNED(4) const u8 gUnknown_082EF7F8[] = _("Please choose a TRAINER."); -ALIGNED(4) const u8 gUnknown_082EF814[] = _("Please choose a TRAINER for\na SINGLE BATTLE."); -ALIGNED(4) const u8 gUnknown_082EF844[] = _("Please choose a TRAINER for\na DOUBLE BATTLE."); -ALIGNED(4) const u8 gUnknown_082EF874[] = _("Please choose the LEADER\nfor a MULTI BATTLE."); -ALIGNED(4) const u8 gUnknown_082EF8A4[] = _("Please choose the TRAINER to\ntrade with."); -ALIGNED(4) const u8 gUnknown_082EF8D0[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS."); -ALIGNED(4) const u8 gUnknown_082EF908[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS."); -ALIGNED(4) const u8 gUnknown_082EF940[] = _("Jump with mini POKéMON!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EF974[] = _("BERRY CRUSH!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EF99C[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EF9CC[] = _("BERRY BLENDER!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EF9F8[] = _("RECORD CORNER!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EFA24[] = _("COOLNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EFA50[] = _("BEAUTY CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EFA7C[] = _("CUTENESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EFAA8[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EFAD8[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EFB08[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER."); -ALIGNED(4) const u8 gUnknown_082EFB3C[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER."); - -const u8 *const gUnknown_082EFB70[] = { - gUnknown_082EF814, - gUnknown_082EF844, - gUnknown_082EF874, - gUnknown_082EF8A4, - gUnknown_082EF940, - gUnknown_082EF974, - gUnknown_082EF99C, - gUnknown_082EF8D0, - gUnknown_082EF908, - NULL, - NULL, - NULL, - gUnknown_082EF9F8, - gUnknown_082EF9CC, - NULL, - gUnknown_082EFA24, - gUnknown_082EFA50, - gUnknown_082EFA7C, - gUnknown_082EFAA8, - gUnknown_082EFAD8, - gUnknown_082EFB08, - gUnknown_082EFB3C -}; - -ALIGNED(4) const u8 gUnknown_082EFBC8[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait..."); -ALIGNED(4) const u8 unref_text_union_room_12[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p"); -ALIGNED(4) const u8 gUnknown_082EFC3C[] = _("Awaiting {STR_VAR_1}'s response…"); -ALIGNED(4) const u8 gUnknown_082EFC54[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait."); -ALIGNED(4) const u8 gUnknown_082EFC90[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM."); -ALIGNED(4) const u8 unref_text_union_room_13[] = _("Please wait for other TRAINERS to\ngather and get ready."); -ALIGNED(4) const u8 gUnknown_082EFD04[] = _("No CARDS appear to be shared \nright now."); -ALIGNED(4) const u8 gUnknown_082EFD30[] = _("No NEWS appears to be shared\nright now."); - -const u8 *const gUnknown_082EFD58[] = { - gUnknown_082EFD04, - gUnknown_082EFD30 -}; - -ALIGNED(4) const u8 gUnknown_082EFD60[] = _("BATTLE"); -ALIGNED(4) const u8 gUnknown_082EFD68[] = _("CHAT"); -ALIGNED(4) const u8 gUnknown_082EFD70[] = _("GREETINGS"); -ALIGNED(4) const u8 gUnknown_082EFD7C[] = _("EXIT"); -ALIGNED(4) const u8 gUnknown_082EFD84[] = _("EXIT"); -ALIGNED(4) const u8 gUnknown_082EFD8C[] = _("INFO"); -ALIGNED(4) const u8 gUnknown_082EFD94[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV."); -ALIGNED(4) const u8 gUnknown_082EFDB0[] = _("SINGLE BATTLE"); -ALIGNED(4) const u8 gUnknown_082EFDC0[] = _("DOUBLE BATTLE"); -ALIGNED(4) const u8 gUnknown_082EFDD0[] = _("MULTI BATTLE"); -ALIGNED(4) const u8 gUnknown_082EFDE0[] = _("POKéMON TRADES"); -ALIGNED(4) const u8 gUnknown_082EFDF0[] = _("CHAT"); -ALIGNED(4) const u8 gUnknown_082EFDF8[] = _("CARDS"); -ALIGNED(4) const u8 gUnknown_082EFE00[] = _("WONDER CARDS"); -ALIGNED(4) const u8 gUnknown_082EFE10[] = _("WONDER NEWS"); -ALIGNED(4) const u8 gUnknown_082EFE1C[] = _("POKéMON JUMP"); -ALIGNED(4) const u8 gUnknown_082EFE2C[] = _("BERRY CRUSH"); -ALIGNED(4) const u8 gUnknown_082EFE38[] = _("BERRY-PICKING"); -ALIGNED(4) const u8 gUnknown_082EFE48[] = _("SEARCH"); -ALIGNED(4) const u8 gUnknown_082EFE50[] = _("BERRY BLENDER"); -ALIGNED(4) const u8 gUnknown_082EFE60[] = _("RECORD CORNER"); -ALIGNED(4) const u8 gUnknown_082EFE70[] = _("COOL CONTEST"); -ALIGNED(4) const u8 gUnknown_082EFE80[] = _("BEAUTY CONTEST"); -ALIGNED(4) const u8 gUnknown_082EFE90[] = _("CUTE CONTEST"); -ALIGNED(4) const u8 gUnknown_082EFEA0[] = _("SMART CONTEST"); -ALIGNED(4) const u8 gUnknown_082EFEB0[] = _("TOUGH CONTEST"); -ALIGNED(4) const u8 gUnknown_082EFEC0[] = _("BATTLE TOWER LV. 50"); -ALIGNED(4) const u8 gUnknown_082EFED4[] = _("BATTLE TOWER OPEN LEVEL"); -ALIGNED(4) const u8 gUnknown_082EFEEC[] = _("It's a NORMAL CARD."); -ALIGNED(4) const u8 gUnknown_082EFF00[] = _("It's a BRONZE CARD!"); -ALIGNED(4) const u8 gUnknown_082EFF14[] = _("It's a COPPER CARD!"); -ALIGNED(4) const u8 gUnknown_082EFF28[] = _("It's a SILVER CARD!"); -ALIGNED(4) const u8 gUnknown_082EFF3C[] = _("It's a GOLD CARD!"); - -const u8 *const gUnknown_082EFF50[] = { - gUnknown_082EFEEC, - gUnknown_082EFF00, - gUnknown_082EFF14, - gUnknown_082EFF28, - gUnknown_082EFF3C -}; - -ALIGNED(4) const u8 gUnknown_082EFF64[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p"); -ALIGNED(4) const u8 gUnknown_082EFFA4[] = _("BATTLES: WINS: {SPECIAL_F7 0x00} LOSSES: {SPECIAL_F7 0x02}\nTRADES: {SPECIAL_F7 0x03}\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p"); -ALIGNED(4) const u8 gUnknown_082EFFDC[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}"); -ALIGNED(4) const u8 gUnknown_082EFFFC[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}"); - -const u8 *const gUnknown_082F0018[] = { - gUnknown_082EFFDC, - gUnknown_082EFFFC -}; - -ALIGNED(4) const u8 gUnknown_082F0020[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); - -const u8 *const gUnknown_082F0048[] = { - gText_EmptyString, - gUnknown_082EFDB0, - gUnknown_082EFDC0, - gUnknown_082EFDD0, - gUnknown_082EFDE0, - gUnknown_082EFDF0, - gUnknown_082EFE00, - gUnknown_082EFE10, - gUnknown_082EFDF8, - gUnknown_082EFE1C, - gUnknown_082EFE2C, - gUnknown_082EFE38, - gUnknown_082EFE48, - gText_EmptyString, - gUnknown_082EFED4, - gUnknown_082EFE60, - gUnknown_082EFE50, - gText_EmptyString, - gText_EmptyString, - gText_EmptyString, - gText_EmptyString, - gUnknown_082EFE00, - gUnknown_082EFE10, - gUnknown_082EFE70, - gUnknown_082EFE80, - gUnknown_082EFE90, - gUnknown_082EFEA0, - gUnknown_082EFEB0, - gUnknown_082EFEC0 -}; - -const struct WindowTemplate gUnknown_082F00BC = { - .bg = 0x00, - .tilemapLeft = 0x00, - .tilemapTop = 0x00, - .width = 0x1E, - .height = 0x02, - .paletteNum = 0x0F, - .baseBlock = 0x0008 -}; - -const u32 gUnknown_082F00C4[] = { - 0x0201, - 0x0202, - 0x0403, - 0x0204, - 0x2509, - 0x250a, - 0x350b, - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x0000, - 0x240f, - 0x2410, - 0x0000, - 0x2417, - 0x2418, - 0x2419, - 0x241a, - 0x241b, - 0x021c, - 0x020e -}; - -const struct WindowTemplate gUnknown_082F011C = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x03, - .width = 0x0d, - .height = 0x08, - .paletteNum = 0x0f, - .baseBlock = 0x0044 -}; - -const struct WindowTemplate gUnknown_082F0124 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x03, - .width = 0x0d, - .height = 0x0a, - .paletteNum = 0x0f, - .baseBlock = 0x0044 -}; - -const struct WindowTemplate gUnknown_082F012C = { - .bg = 0x00, - .tilemapLeft = 0x10, - .tilemapTop = 0x03, - .width = 0x07, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x00c6 -}; - -const struct ListMenuItem gUnknown_082F0134[] = { - { gText_EmptyString, 0 }, - { gText_EmptyString, 1 }, - { gText_EmptyString, 2 }, - { gText_EmptyString, 3 }, - { gText_EmptyString, 4 } -}; - -const struct ListMenuTemplate gUnknown_082F015C = { - .items = gUnknown_082F0134, - .moveCursorFunc = NULL, - .itemPrintFunc = sub_8013278, - .totalItems = 5, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 0, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 1 -}; - -const struct WindowTemplate gUnknown_082F0174 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x03, - .width = 0x11, - .height = 0x0a, - .paletteNum = 0x0f, - .baseBlock = 0x0044 -}; - -const struct WindowTemplate gUnknown_082F017C = { - .bg = 0x00, - .tilemapLeft = 0x14, - .tilemapTop = 0x03, - .width = 0x07, - .height = 0x04, - .paletteNum = 0x0f, - .baseBlock = 0x00ee -}; - -const struct ListMenuItem gUnknown_082F0184[] = { - { gText_EmptyString, 0 }, - { gText_EmptyString, 1 }, - { gText_EmptyString, 2 }, - { gText_EmptyString, 3 }, - { gText_EmptyString, 4 }, - { gText_EmptyString, 5 }, - { gText_EmptyString, 6 }, - { gText_EmptyString, 7 }, - { gText_EmptyString, 8 }, - { gText_EmptyString, 9 }, - { gText_EmptyString, 10 }, - { gText_EmptyString, 11 }, - { gText_EmptyString, 12 }, - { gText_EmptyString, 13 }, - { gText_EmptyString, 14 }, - { gText_EmptyString, 15 } -}; - -const struct ListMenuTemplate gUnknown_082F0204 = { - .items = gUnknown_082F0184, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = sub_8013DF4, - .totalItems = 16, - .maxShowed = 5, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 1, - .fontId = 1, - .cursorKind = 0 -}; - -const struct WindowTemplate gUnknown_082F021C = { - .bg = 0x00, - .tilemapLeft = 0x14, - .tilemapTop = 0x05, - .width = 0x10, - .height = 0x08, - .paletteNum = 0x0f, - .baseBlock = 0x0001 -}; - -const struct ListMenuItem gUnknown_082F0224[] = { - { gUnknown_082EFD70, 0x208 }, - { gUnknown_082EFD60, 0x241 }, - { gUnknown_082EFD68, 0x245 }, - { gUnknown_082EFD7C, 0x040 } -}; - -const struct ListMenuTemplate gUnknown_082F0244 = { - .items = gUnknown_082F0224, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 4, - .maxShowed = 4, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -const struct WindowTemplate gUnknown_082F025C = { - .bg = 0x00, - .tilemapLeft = 0x12, - .tilemapTop = 0x07, - .width = 0x10, - .height = 0x06, - .paletteNum = 0x0f, - .baseBlock = 0x0001 -}; - -const struct ListMenuItem gUnknown_082F0264[] = { - { gText_Register, 1 }, - { gUnknown_082EFD8C, 2 }, - { gUnknown_082EFD7C, 3 } -}; - -const struct ListMenuTemplate gUnknown_082F027C = { - .items = gUnknown_082F0264, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = 3, - .maxShowed = 3, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -const struct WindowTemplate gUnknown_082F0294 = { - .bg = 0x00, - .tilemapLeft = 0x14, - .tilemapTop = 0x01, - .width = 0x10, - .height = 0x0c, - .paletteNum = 0x0f, - .baseBlock = 0x0001 -}; - -const struct ListMenuItem gUnknown_082F029C[] = { - { gTypeNames[TYPE_NORMAL], TYPE_NORMAL }, - { gTypeNames[TYPE_FIRE], TYPE_FIRE }, - { gTypeNames[TYPE_WATER], TYPE_WATER }, - { gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC }, - { gTypeNames[TYPE_GRASS], TYPE_GRASS }, - { gTypeNames[TYPE_ICE], TYPE_ICE }, - { gTypeNames[TYPE_GROUND], TYPE_GROUND }, - { gTypeNames[TYPE_ROCK], TYPE_ROCK }, - { gTypeNames[TYPE_FLYING], TYPE_FLYING }, - { gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC }, - { gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING }, - { gTypeNames[TYPE_POISON], TYPE_POISON }, - { gTypeNames[TYPE_BUG], TYPE_BUG }, - { gTypeNames[TYPE_GHOST], TYPE_GHOST }, - { gTypeNames[TYPE_DRAGON], TYPE_DRAGON }, - { gTypeNames[TYPE_STEEL], TYPE_STEEL }, - { gTypeNames[TYPE_DARK], TYPE_DARK }, - { gUnknown_082EFD7C, NUMBER_OF_MON_TYPES } -}; - -const struct ListMenuTemplate gUnknown_082F032C = { - .items = gUnknown_082F029C, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = NULL, - .totalItems = NUMBER_OF_MON_TYPES, - .maxShowed = 6, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -const struct WindowTemplate gUnknown_082F0344 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x01, - .width = 0x1c, - .height = 0x02, - .paletteNum = 0x0d, - .baseBlock = 0x0001 -}; - -const struct WindowTemplate gUnknown_082F034C = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x05, - .width = 0x1c, - .height = 0x0c, - .paletteNum = 0x0d, - .baseBlock = 0x0039 -}; - -const struct ListMenuItem gUnknown_082F0354[] = { - { gText_EmptyString, -3 }, - { gText_EmptyString, 0 }, - { gText_EmptyString, 1 }, - { gText_EmptyString, 2 }, - { gText_EmptyString, 3 }, - { gText_EmptyString, 4 }, - { gText_EmptyString, 5 }, - { gText_EmptyString, 6 }, - { gText_EmptyString, 7 }, - { gUnknown_082EFD84, 8 } -}; - -const struct ListMenuTemplate gUnknown_082F03A4 = { - .items = gUnknown_082F0354, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = sub_8017BE8, - .totalItems = 10, - .maxShowed = 6, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 14, - .fillValue = 15, - .cursorShadowPal = 13, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 0, - .fontId = 1, - .cursorKind = 0 -}; - -const struct WindowTemplate UnrefWindowTemplate_082F03B4 = { - .bg = 0x00, - .tilemapLeft = 0x01, - .tilemapTop = 0x05, - .width = 0x1c, - .height = 0x0c, - .paletteNum = 0x0d, - .baseBlock = 0x0039 -}; - -const struct ListMenuItem gUnknown_082F03C4[] = { - { gText_EmptyString, 0 }, - { gText_EmptyString, 1 }, - { gText_EmptyString, 2 }, - { gText_EmptyString, 3 }, - { gText_EmptyString, 4 }, - { gText_EmptyString, 5 }, - { gText_EmptyString, 6 }, - { gText_EmptyString, 7 }, - { gText_EmptyString, 8 }, - { gText_EmptyString, 9 }, - { gText_EmptyString, 10 }, - { gText_EmptyString, 11 }, - { gText_EmptyString, 12 }, - { gText_EmptyString, 13 }, - { gText_EmptyString, 14 }, - { gText_EmptyString, 15 } -}; - -const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = { - .items = gUnknown_082F03C4, - .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = nullsub_14, - .totalItems = 16, - .maxShowed = 4, - .windowId = 0, - .header_X = 0, - .item_X = 8, - .cursor_X = 0, - .upText_Y = 1, - .cursorPal = 2, - .fillValue = 1, - .cursorShadowPal = 3, - .lettersSpacing = 0, - .itemVerticalPadding = 0, - .scrollMultiple = 1, - .fontId = 1, - .cursorKind = 0 -}; - -const struct UnkStruct_Shared gUnknown_082F045C = {0}; - -ALIGNED(4) const u8 gUnknown_082F0474[] = {0x01, 0xff}; -ALIGNED(4) const u8 gUnknown_082F0478[] = {0x02, 0xff}; -ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff}; -ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff}; -ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff}; -ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff}; -ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff}; -ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff}; -ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff}; -ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff}; -ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff}; - -const u8 *const gUnknown_082F04D8[] = { - gUnknown_082F0474, - gUnknown_082F0478, - gUnknown_082F047C, - gUnknown_082F0480, - gUnknown_082F0484, - gUnknown_082F0488, - gUnknown_082F048C, - gUnknown_082F0490, - gUnknown_082F0494, - gUnknown_082F0498, - gUnknown_082F04A4, - gUnknown_082F04A8, - gUnknown_082F04B4, - gUnknown_082F04B8, - NULL, - gUnknown_082F04BC, - gUnknown_082F04C0, - gUnknown_082F04C4, - gUnknown_082F04C8, - gUnknown_082F04CC, - gUnknown_082F04D0, - gUnknown_082F04D4 -}; - -const u8 gUnknown_082F0530[] = { - 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, - 0x16, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x17, - 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x0e, 0x00, 0x00 -}; +#include "data/union_room.h" // code void nullsub_89(u8 taskId) @@ -1249,7 +213,7 @@ bool32 sub_80126CC(u32 caseId) } } -void BerryBlenderLinkBecomeLeader(void) +void TryBecomeLinkLeader(void) { u8 taskId; struct UnkStruct_Leader *dataPtr; @@ -1639,11 +603,11 @@ void sub_8013078(u8 *dst, u8 caseId) { case 65: case 68: - StringExpandPlaceholders(dst, gUnknown_082EE560); + StringExpandPlaceholders(dst, sText_OfferDeclined1); break; case 69: case 72: - StringExpandPlaceholders(dst, gUnknown_082EE57C); + StringExpandPlaceholders(dst, sText_OfferDeclined2); break; } } @@ -1831,7 +795,7 @@ u8 sub_8013398(struct UnkStruct_Main0 *arg0) return ret; } -void BerryBlenderLinkJoinGroup(void) +void TryJoinLinkGroup(void) { u8 taskId; struct UnkStruct_Group *dataPtr; @@ -2116,7 +1080,7 @@ u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id) { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & 0x80)) return 1; - else if (structPtr->unk.field_0.unk_00.unk_00_7) + else if (structPtr->unk.field_0.unk_00.isChampion) return 0; } else @@ -2305,22 +1269,22 @@ u8 sub_8013E44(void) return ret; } -void sub_8013F60(u8 taskId) +static void Task_CreateTradeMenu(u8 taskId) { - sub_80773AC(); + CB2_StartCreateTradeMenu(); DestroyTask(taskId); } u8 sub_8013F78(void) { - u8 taskId = CreateTask(sub_8013F60, 0); + u8 taskId = CreateTask(Task_CreateTradeMenu, 0); return taskId; } void sub_8013F90(u8 taskId) { - u32 monId = sub_8018120(&gUnknown_02022C40, GetMultiplayerId()); + u32 monId = GetPartyPositionOfRegisteredMon(&sUnionRoomTrade, GetMultiplayerId()); switch (gTasks[taskId].data[0]) { @@ -2345,13 +1309,13 @@ void sub_8013F90(u8 taskId) case 3: if (GetBlockReceivedStatus() == 3) { - memcpy(gUnknown_020321C0, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct MailStruct) * PARTY_SIZE); + memcpy(gTradeMail, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct MailStruct) * PARTY_SIZE); ResetBlockReceivedFlags(); - gUnknown_02032298[0] = monId; - gUnknown_02032298[1] = 6; + gSelectedTradeMonPositions[TRADE_PLAYER] = monId; + gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE; gMain.savedCallback = CB2_ReturnToField; - SetMainCallback2(sub_807AE50); - sub_801807C(&gUnknown_02022C40); + SetMainCallback2(CB2_LinkTrade); + ResetUnionRoomTrade(&sUnionRoomTrade); DestroyTask(taskId); } break; @@ -2421,7 +1385,7 @@ void sub_8014210(u16 battleFlags) HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); - gLinkPlayers[0].linkType = 0x2211; + gLinkPlayers[0].linkType = LINKTYPE_BATTLE; gLinkPlayers[GetMultiplayerId()].id = GetMultiplayerId(); gLinkPlayers[GetMultiplayerId() ^ 1].id = GetMultiplayerId() ^ 1; gMain.savedCallback = sub_80B360C; @@ -2429,18 +1393,18 @@ void sub_8014210(u16 battleFlags) PlayBattleBGM(); } -void sub_8014290(u16 arg0, u16 x, u16 y) +static void sub_8014290(u16 linkService, u16 x, u16 y) { - VarSet(VAR_CABLE_CLUB_STATE, arg0); + VarSet(VAR_CABLE_CLUB_STATE, linkService); SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); SetDynamicWarpWithCoords(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); WarpIntoMap(); } -void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 arg4) +void sub_8014304(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) { - gSpecialVar_0x8004 = arg4; - VarSet(VAR_CABLE_CLUB_STATE, arg4); + gSpecialVar_0x8004 = linkService; + VarSet(VAR_CABLE_CLUB_STATE, linkService); gFieldLinkPlayerCount = GetLinkPlayerCount(); gLocalLinkPlayerId = GetMultiplayerId(); SetCableClubWarp(); @@ -2506,7 +1470,7 @@ void sub_801440C(u8 taskId) HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); - sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, 1); + sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, USING_SINGLE_BATTLE); SetMainCallback2(sub_8014384); break; case 2: @@ -2515,7 +1479,7 @@ void sub_801440C(u8 taskId) SavePlayerParty(); LoadPlayerBag(); sub_80143E4(gBlockSendBuffer, TRUE); - sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, 2); + sub_8014304(MAP_GROUP(SINGLE_BATTLE_COLOSSEUM), MAP_NUM(SINGLE_BATTLE_COLOSSEUM), 6, 8, USING_DOUBLE_BATTLE); SetMainCallback2(sub_8014384); break; case 3: @@ -2524,19 +1488,19 @@ void sub_801440C(u8 taskId) SavePlayerParty(); LoadPlayerBag(); sub_80143E4(gBlockSendBuffer, TRUE); - sub_8014304(MAP_GROUP(DOUBLE_BATTLE_COLOSSEUM), MAP_NUM(DOUBLE_BATTLE_COLOSSEUM), 5, 8, 5); + sub_8014304(MAP_GROUP(DOUBLE_BATTLE_COLOSSEUM), MAP_NUM(DOUBLE_BATTLE_COLOSSEUM), 5, 8, USING_MULTI_BATTLE); SetMainCallback2(sub_8014384); break; case 4: sub_80143E4(gBlockSendBuffer, TRUE); CleanupOverworldWindowsAndTilemaps(); - sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, 3); + sub_8014304(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER); SetMainCallback2(sub_8014384); break; case 15: sub_80143E4(gBlockSendBuffer, TRUE); CleanupOverworldWindowsAndTilemaps(); - sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, 4); + sub_8014304(MAP_GROUP(RECORD_CORNER), MAP_NUM(RECORD_CORNER), 8, 9, USING_RECORD_CORNER); SetMainCallback2(sub_8014384); break; case 68: @@ -2562,15 +1526,15 @@ void sub_801440C(u8 taskId) SetMainCallback2(sub_80141A4); break; case 9: - sub_8014290(8, 5, 1); + sub_8014290(USING_MINIGAME, 5, 1); sub_802A9A8(GetCursorSelectionMonId(), CB2_LoadMap); break; case 10: - sub_8014290(7, 9, 1); + sub_8014290(USING_BERRY_CRUSH, 9, 1); sub_8020C70(CB2_LoadMap); break; case 11: - sub_8014290(8, 5, 1); + sub_8014290(USING_MINIGAME, 5, 1); sub_802493C(GetCursorSelectionMonId(), CB2_LoadMap); break; } @@ -2594,7 +1558,7 @@ void sub_8014790(u8 taskId) { case 14: case 28: - gLinkPlayers[0].linkType = 0x2211; + gLinkPlayers[0].linkType = LINKTYPE_BATTLE; gLinkPlayers[0].id = 0; gLinkPlayers[1].id = 2; sendBuff[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES); @@ -2627,7 +1591,7 @@ void sub_8014790(u8 taskId) if (gUnknown_02022C2C == 29) { DestroyTask(taskId); - SetMainCallback2(sub_80773AC); + SetMainCallback2(CB2_StartCreateTradeMenu); } else { @@ -3334,7 +2298,7 @@ void sub_80156E0(u8 taskId) break; case 2: sub_8010F84(0x40, 0, 0); - sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel); + sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); sub_800B488(); OpenLink(); sub_8011C84(); @@ -3345,22 +2309,24 @@ void sub_80156E0(u8 taskId) data->state = 3; break; case 3: - if ((sub_81B1360() == 8 || sub_81B1360() == 9) && gUnknown_02022C40.field_0 != 0) + if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER + || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE) + && sUnionRoomTrade.field_0 != 0) { id = GetCursorSelectionMonId(); - switch (gUnknown_02022C40.field_0) + switch (sUnionRoomTrade.field_0) { case 1: sub_8011090(0x54, 0, 1); if (id >= PARTY_SIZE) { - sub_801807C(&gUnknown_02022C40); + ResetUnionRoomTrade(&sUnionRoomTrade); sub_8010FCC(0, 0, 0); - sub_801568C(gUnknown_082EF4FC); + sub_801568C(sText_RegistrationCanceled); } - else if (!sub_80180A0(GetCursorSelectionMonId(), &gUnknown_02022C40)) + else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade)) { - sub_8015664(0x34, gUnknown_082EF47C); + sub_8015664(0x34, sText_ChooseRequestedMonType); } else { @@ -3369,21 +2335,21 @@ void sub_80156E0(u8 taskId) break; case 2: sub_80156C8(data); - taskData[1] = gUnknown_02022C40.field_8; + taskData[1] = sUnionRoomTrade.field_8; if (id >= PARTY_SIZE) { - sub_801568C(gUnknown_082EF544); + sub_801568C(sText_TradeCanceled); } else { sub_8011090(0x54, 0, 1); gUnknown_02022C2C = 0x44; - sub_80180E8(GetCursorSelectionMonId(), &gUnknown_02022C40); + RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade); data->state = 51; } break; } - gUnknown_02022C40.field_0 = 0; + sUnionRoomTrade.field_0 = 0; } else { @@ -3491,9 +2457,9 @@ void sub_80156E0(u8 taskId) case 1: case 2: if (sub_8011B90() == TRUE) - sub_801568C(gUnknown_082EE6C8); + sub_801568C(sText_TrainerAppearsBusy); else - sub_8015664(30, gUnknown_082EE6C8); + sub_8015664(30, sText_TrainerAppearsBusy); gUnknown_02022C2C = 0x40; break; @@ -3551,9 +2517,9 @@ void sub_80156E0(u8 taskId) { gUnknown_02022C2C = var5; gUnknown_02022C2D = (u32)(var5) >> 8; - if (gUnknown_02022C2C == 0x41 && !sub_8018024()) + if (gUnknown_02022C2C == 0x41 && !HasAtLeastTwoMonsOfLevel30OrLower()) { - sub_8015664(5, gUnknown_082EEBD0); + sub_8015664(5, sText_NeedTwoMonsOfLevel30OrLower1); } else { @@ -3566,7 +2532,7 @@ void sub_80156E0(u8 taskId) } break; case 28: - StringCopy(gStringVar4, gUnknown_082EEB88); + StringCopy(gStringVar4, sText_TrainerBattleBusy); data->state = 36; break; case 27: @@ -3585,15 +2551,15 @@ void sub_80156E0(u8 taskId) break; case 31: data->field_4C[0] = 0x44; - data->field_4C[1] = gUnknown_02022C40.species; - data->field_4C[2] = gUnknown_02022C40.level; + data->field_4C[1] = sUnionRoomTrade.species; + data->field_4C[2] = sUnionRoomTrade.level; sub_800FE50(data->field_4C); data->state = 29; break; case 29: if (gReceivedRemoteLinkPlayers == 0) { - StringCopy(gStringVar4, gUnknown_082EEB88); + StringCopy(gStringVar4, sText_TrainerBattleBusy); data->state = 28; } else @@ -3641,7 +2607,7 @@ void sub_80156E0(u8 taskId) { StringCopy(gStringVar1, gLinkPlayers[GetMultiplayerId() ^ 1].name); id = sub_800E540(gLinkPlayers[1].trainerId, gLinkPlayers[1].name); - StringExpandPlaceholders(gStringVar4, gUnknown_082EE378[id]); + StringExpandPlaceholders(gStringVar4, sUnionRoomTexts_AwaitingResponse[id]); data->state = 33; } else @@ -3665,7 +2631,7 @@ void sub_80156E0(u8 taskId) case 1: case -1: playerGender = sub_8017CF8(taskData[1], data->field_0); - sub_801568C(gUnknown_082EEC9C[playerGender]); + sub_801568C(sUnionRoomTexts_DeclineBattle[playerGender]); break; } break; @@ -3750,7 +2716,7 @@ void sub_80156E0(u8 taskId) if (sub_80168DC(data) && gMain.newKeys & B_BUTTON) { sub_8011DE0(1); - StringCopy(gStringVar4, gUnknown_082EE598); + StringCopy(gStringVar4, sText_ChatEnded); data->state = 36; } break; @@ -3771,12 +2737,12 @@ void sub_80156E0(u8 taskId) taskData[3] = 0; if (gUnknown_02022C2C == 0x41) { - if (!sub_8018024()) + if (!HasAtLeastTwoMonsOfLevel30OrLower()) { data->field_4C[0] = 0x52; sub_800FE50(data->field_4C); data->state = 10; - StringCopy(gStringVar4, gUnknown_082EEC14); + StringCopy(gStringVar4, sText_NeedTwoMonsOfLevel30OrLower2); } else { @@ -3866,19 +2832,19 @@ void sub_80156E0(u8 taskId) { if (sub_800F7DC()->species == SPECIES_EGG) { - StringCopy(gStringVar4, gUnknown_082EF590); + StringCopy(gStringVar4, sText_CancelRegistrationOfEgg); } else { StringCopy(gStringVar1, gSpeciesNames[sub_800F7DC()->species]); - ConvertIntToDecimalStringN(gStringVar2, sub_800F7DC()->unk_0b_1, STR_CONV_MODE_LEFT_ALIGN, 3); - StringExpandPlaceholders(gStringVar4, gUnknown_082EF564); + ConvertIntToDecimalStringN(gStringVar2, sub_800F7DC()->level, STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, sText_CancelRegistrationOfMon); } sub_8015664(44, gStringVar4); } break; case 43: - if (PrintOnTextbox(&data->textState, gUnknown_082EF20C)) + if (PrintOnTextbox(&data->textState, sText_RegisterMonAtTradingBoard)) data->state = 47; break; case 47: @@ -3894,11 +2860,11 @@ void sub_80156E0(u8 taskId) { switch (var5) { - case 1: - sub_8015664(53, gUnknown_082EF4C4); + case 1: // REGISTER + sub_8015664(53, sText_WhichMonWillYouOffer); break; - case 2: - sub_8015664(47, gUnknown_082EF298); + case 2: // INFO + sub_8015664(47, sText_TradingBoardInfo); break; } } @@ -3911,33 +2877,33 @@ void sub_80156E0(u8 taskId) case 54: if (!gPaletteFade.active) { - gUnknown_02022C40.field_0 = 1; + sUnionRoomTrade.field_0 = 1; gFieldCallback = sub_80AF128; - sub_81B8904(8, CB2_ReturnToField); + ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_REGISTER, CB2_ReturnToField); } break; case 52: - var5 = sub_8017178(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_082F0294, &gUnknown_082F032C); + var5 = sub_8017178(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_082F0294, &sMenuTemplate_TradingBoardRequestType); if (var5 != -1) { switch (var5) { case -2: case 18: - sub_801807C(&gUnknown_02022C40); + ResetUnionRoomTrade(&sUnionRoomTrade); sub_8010FCC(0, 0, 0); - sub_801568C(gUnknown_082EF4FC); + sub_801568C(sText_RegistrationCanceled); break; default: - gUnknown_02022C40.type = var5; + sUnionRoomTrade.type = var5; data->state = 55; break; } } break; case 55: - sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel); - sub_801568C(gUnknown_082EF520); + sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + sub_801568C(sText_RegistraionCompleted); break; case 44: switch (sub_80170B8(&data->textState, FALSE)) @@ -3953,16 +2919,16 @@ void sub_80156E0(u8 taskId) } break; case 56: - if (PrintOnTextbox(&data->textState, gUnknown_082EF5B8)) + if (PrintOnTextbox(&data->textState, sText_RegistrationCanceled2)) { sub_8010FCC(0, 0, 0); - sub_801807C(&gUnknown_02022C40); + ResetUnionRoomTrade(&sUnionRoomTrade); sub_801818C(TRUE); data->state = 4; } break; case 45: - if (PrintOnTextbox(&data->textState, gUnknown_082EF1EC)) + if (PrintOnTextbox(&data->textState, sText_XCheckedTradingBoard)) data->state = 46; break; case 46: @@ -3986,18 +2952,18 @@ void sub_80156E0(u8 taskId) { case 0: sub_8018404(gStringVar1, &data->field_0->arr[var5]); - sub_8015664(49, gUnknown_082EF65C); + sub_8015664(49, sText_AskTrainerToMakeTrade); taskData[1] = var5; break; case 1: sub_8018404(gStringVar1, &data->field_0->arr[var5]); StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]); - sub_8015664(46, gUnknown_082EF6E4); + sub_8015664(46, sText_DontHaveTypeTrainerWants); break; case 2: sub_8018404(gStringVar1, &data->field_0->arr[var5]); StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.field_0.type]); - sub_8015664(46, gUnknown_082EF718); + sub_8015664(46, sText_DontHaveEggTrainerWants); break; } break; @@ -4018,16 +2984,16 @@ void sub_80156E0(u8 taskId) } break; case 50: - if (PrintOnTextbox(&data->textState, gUnknown_082EF4C4)) + if (PrintOnTextbox(&data->textState, sText_WhichMonWillYouOffer)) { - gUnknown_02022C40.field_0 = 2; + sUnionRoomTrade.field_0 = 2; memcpy(&gUnknown_02022C38, &data->field_0->arr[taskData[1]].unk.field_0.unk_00, sizeof(gUnknown_02022C38)); - gUnknown_02022C3E = data->field_0->arr[taskData[1]].unk.field_0.type; - gUnknown_02022C3C = data->field_0->arr[taskData[1]].unk.field_0.species; + gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.field_0.type; + gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.field_0.species; gFieldCallback = sub_80AF128; - sub_81B8904(9, CB2_ReturnToField); + ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField); sub_80156B0(data); - gUnknown_02022C40.field_8 = taskData[1]; + sUnionRoomTrade.field_8 = taskData[1]; } break; case 51: @@ -4097,20 +3063,20 @@ bool32 sub_80168DC(struct UnkStruct_URoom *arg0) return TRUE; } -void sub_8016934(void) +void InitUnionRoom(void) { struct UnkStruct_URoom *ptr; - gUnknown_02022C20[0] = EOS; + sUnionRoomPlayerName[0] = EOS; CreateTask(sub_801697C, 0); gUnknown_02022C30.uRoom = gUnknown_02022C30.uRoom; // Needed to match. - gUnknown_02022C30.uRoom = ptr = AllocZeroed(0x26C); + gUnknown_02022C30.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom)); gUnknown_03000DA8 = gUnknown_02022C30.uRoom; ptr->state = 0; ptr->textState = 0; ptr->field_10 = 0; ptr->field_12 = 0; - gUnknown_02022C20[0] = EOS; + sUnionRoomPlayerName[0] = EOS; } void sub_801697C(u8 taskId) @@ -4149,7 +3115,7 @@ void sub_801697C(u8 taskId) { case 1: case 2: - if (gUnknown_02022C20[0] == EOS) + if (sUnionRoomPlayerName[0] == EOS) { for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { @@ -4158,7 +3124,7 @@ void sub_801697C(u8 taskId) sub_8018404(text, &structPtr->field_0->arr[i]); if (sub_800E540(ReadAsU16(structPtr->field_0->arr[i].unk.field_0.unk_00.playerTrainerId), text)) { - StringCopy(gUnknown_02022C20, text); + StringCopy(sUnionRoomPlayerName, text); break; } } @@ -4182,12 +3148,12 @@ void sub_801697C(u8 taskId) } } -bool16 sp182_move_string(void) +bool16 BufferUnionRoomPlayerName(void) { - if (gUnknown_02022C20[0] != EOS) + if (sUnionRoomPlayerName[0] != EOS) { - StringCopy(gStringVar1, gUnknown_02022C20); - gUnknown_02022C20[0] = EOS; + StringCopy(gStringVar1, sUnionRoomPlayerName); + sUnionRoomPlayerName[0] = EOS; return TRUE; } else @@ -4897,7 +3863,7 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender r2 = sub_800E540(ReadAsU16(r5->unk.field_0.unk_00.playerTrainerId), gStringVar1); if (r5->unk.field_0.unk_0a_0 == 0x45) { - StringExpandPlaceholders(gStringVar4, gUnknown_082EE6B8[r2][playerGender]); + StringExpandPlaceholders(gStringVar4, sUnionRoomTexts_JoinChat[r2][playerGender]); return 2; } else @@ -4919,7 +3885,7 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender StringExpandPlaceholders(gStringVar4, gUnknown_082EEEAC[playerGender][Random() % 4]); break; case 4: - StringExpandPlaceholders(gStringVar4, gUnknown_082EF1CC[playerGender][Random() % 2]); + StringExpandPlaceholders(gStringVar4, sUnionRoomTexts_Traded[playerGender][Random() % 2]); break; case 5: StringExpandPlaceholders(gStringVar4, gUnknown_082EF010[playerGender][Random() % 4]); @@ -4928,7 +3894,7 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender StringExpandPlaceholders(gStringVar4, gUnknown_082EF100[playerGender][Random() % 2]); break; default: - StringExpandPlaceholders(gStringVar4, gUnknown_082EE6C8); + StringExpandPlaceholders(gStringVar4, sText_TrainerAppearsBusy); break; } return 0; @@ -4945,12 +3911,12 @@ void sub_8017B3C(u8 arg0, u8 arg1, struct UnkLinkRfuStruct_02022B14 * arg2, cons u8 sp8[4]; u16 r8 = arg2->species; u8 r7 = arg2->type; - u8 r9 = arg2->unk_0b_1; + u8 r9 = arg2->level; sub_80173E0(arg0, 1, str, 8, arg1, arg4); if (r8 == SPECIES_EGG) { - sub_80173E0(arg0, 1, gUnknown_082EF7D0, 0x44, arg1, arg4); + sub_80173E0(arg0, 1, sText_EggTrade, 0x44, arg1, arg4); } else { @@ -5061,7 +4027,7 @@ void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender) StringExpandPlaceholders(dst, gUnknown_082EED3C[playerGender]); break; case 0x44: - StringExpandPlaceholders(dst, gUnknown_082EF7B0); + StringExpandPlaceholders(dst, sText_TradeOfferRejected); break; case 0x48: StringExpandPlaceholders(dst, gUnknown_082EEB08[playerGender]); @@ -5097,16 +4063,16 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) switch (arg2[0]) { case 0x41: - StringExpandPlaceholders(dst, gUnknown_082EE3DC); + StringExpandPlaceholders(dst, sText_BattleChallenge); result = 1; break; case 0x45: - StringExpandPlaceholders(dst, gUnknown_082EE430); + StringExpandPlaceholders(dst, sText_ChatInvitation); result = 1; break; case 0x44: - ConvertIntToDecimalStringN(arg3->field_58 + 0x00, gUnknown_02022C40.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3); - StringCopy(arg3->field_58 + 0x10, gSpeciesNames[gUnknown_02022C40.playerSpecies]); + ConvertIntToDecimalStringN(arg3->field_58 + 0x00, sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(arg3->field_58 + 0x10, gSpeciesNames[sUnionRoomTrade.playerSpecies]); for (i = 0; i < 4; i++) { if (gUnknown_03007890->unk_14[i].unk_04 == 2) @@ -5119,7 +4085,7 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) } if (species == SPECIES_EGG) { - StringCopy(dst, gUnknown_082EE4F0); + StringCopy(dst, sText_OfferToTradeEgg); } else { @@ -5127,16 +4093,16 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) { DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->field_58 + 0x10 * i); } - DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, gUnknown_082EE47C); + DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, sText_OfferToTradeMon); } result = 1; break; case 0x48: - StringExpandPlaceholders(dst, gUnknown_082EE380); + StringExpandPlaceholders(dst, sText_ShowTrainerCard); result = 1; break; case 0x40: - StringExpandPlaceholders(dst, gUnknown_082EE544); + StringExpandPlaceholders(dst, sText_ChatDropped); result = 2; break; } @@ -5169,14 +4135,14 @@ bool32 InUnionRoom(void) ? TRUE : FALSE; } -bool32 sub_8018024(void) +bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) { s32 i; s32 count = 0; for (i = 0; i < gPlayerPartyCount; i++) { - if ( GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30 + if (GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) { count++; @@ -5184,16 +4150,12 @@ bool32 sub_8018024(void) } if (count > 1) - { return TRUE; - } else - { return FALSE; - } } -void sub_801807C(struct TradeUnkStruct *arg0) +static void ResetUnionRoomTrade(struct UnionRoomTrade *arg0) { arg0->field_0 = 0; arg0->type = 0; @@ -5205,34 +4167,30 @@ void sub_801807C(struct TradeUnkStruct *arg0) arg0->personality = 0; } -void sub_8018090(void) +void Script_ResetUnionRoomTrade(void) { - sub_801807C(&gUnknown_02022C40); + ResetUnionRoomTrade(&sUnionRoomTrade); } -bool32 sub_80180A0(u32 monId, struct TradeUnkStruct *arg1) +static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade *trade) { - arg1->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); - arg1->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - arg1->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - if (arg1->playerSpecies == SPECIES_EGG) - { + trade->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + trade->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); + if (trade->playerSpecies == SPECIES_EGG) return TRUE; - } else - { return FALSE; - } } -void sub_80180E8(u32 monId, struct TradeUnkStruct *arg1) +static void RegisterTradeMon(u32 monId, struct UnionRoomTrade *trade) { - arg1->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); - arg1->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - arg1->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); + trade->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + trade->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + trade->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); } -u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId) +static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade *trade, u8 multiplayerId) { u16 response = 0; u16 species; @@ -5241,15 +4199,17 @@ u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId) u16 cur_species; s32 i; + // player if (multiplayerId == 0) { - species = arg0->playerSpecies; - personality = arg0->playerPersonality; + species = trade->playerSpecies; + personality = trade->playerPersonality; } + // partner else { - species = arg0->species; - personality = arg0->personality; + species = trade->species; + personality = trade->personality; } for (i = 0; i < gPlayerPartyCount; i++) @@ -5279,7 +4239,7 @@ void sub_801818C(bool32 arg0) gUnknown_02022C2C = 0; if (arg0) { - sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel); + sub_8010FCC(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); sub_8011090(0x40, 0, 0); } } diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 79d12291d..b49406eac 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -6,7 +6,7 @@ #include "bg.h" #include "palette.h" #include "gpu_regs.h" -#include "alloc.h" +#include "malloc.h" #include "menu.h" #include "window.h" #include "text_window.h" diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 4afeb99cf..f8ea1b781 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1,5 +1,5 @@ #include "global.h" -#include "alloc.h" +#include "malloc.h" #include "bg.h" #include "decompress.h" #include "dma3.h" @@ -22,6 +22,7 @@ #include "task.h" #include "text.h" #include "text_window.h" +#include "union_room_chat.h" #include "window.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -37,9 +38,9 @@ struct UnionRoomChat u8 unkD; u8 unkE; u8 unkF; - u8 unk10; + u8 currentPage; u8 unk11; - u8 unk12; + u8 currentRow; u8 unk13; u8 unk14; u8 unk15; @@ -50,7 +51,7 @@ struct UnionRoomChat u8 unk1A[0x1F]; u8 unk39[0x40]; u8 unk79[0x40]; - u8 unkB9[10][21]; + u8 unkB9[UNION_ROOM_KB_ROW_COUNT][21]; u8 filler18B[0x5]; u8 unk190[0x28]; u16 unk1B8; @@ -232,7 +233,13 @@ void (*const gUnknown_082F2A7C[])(void) = sub_801E978, }; -static const u8 sUnknown_082F2AA4[] = {9, 9, 9, 9}; +static const u8 sKeyboardPageMaxRow[] = +{ + [UNION_ROOM_KB_PAGE_UPPER] = 9, + [UNION_ROOM_KB_PAGE_LOWER] = 9, + [UNION_ROOM_KB_PAGE_EMOJI] = 9, + 9 +}; static const u8 gUnknown_082F2AA8[] = { CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, @@ -269,10 +276,47 @@ static const u8 gUnknown_082F2AA8[] = { CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE }; -const u8 *const gUnknown_082F2BA8[][10] = { - {gUnknown_0862B9F9, gUnknown_0862B9FF, gUnknown_0862BA05, gUnknown_0862BA0B, gUnknown_0862BA11, gUnknown_0862BA17, gUnknown_0862BA1D, gUnknown_0862BA23, gUnknown_0862BA29, gUnknown_0862BA2F}, - {gUnknown_0862BA35, gUnknown_0862BA3B, gUnknown_0862BA41, gUnknown_0862BA47, gUnknown_0862BA4D, gUnknown_0862BA53, gUnknown_0862BA59, gUnknown_0862BA5F, gUnknown_0862BA65, gUnknown_0862BA6B}, - {gUnknown_0862BA79, gUnknown_0862BA84, gUnknown_0862BA8F, gUnknown_0862BA9A, gUnknown_0862BAA3, gUnknown_0862BAAE, gUnknown_0862BAB9, gUnknown_0862BAC4, gUnknown_0862BACF, gUnknown_0862BADA} +static const u8 *const sUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = +{ + [UNION_ROOM_KB_PAGE_UPPER] = + { + gText_UnionRoomChatKeyboard_ABCDE, + gText_UnionRoomChatKeyboard_FGHIJ, + gText_UnionRoomChatKeyboard_KLMNO, + gText_UnionRoomChatKeyboard_PQRST, + gText_UnionRoomChatKeyboard_UVWXY, + gText_UnionRoomChatKeyboard_Z, + gText_UnionRoomChatKeyboard_01234Upper, + gText_UnionRoomChatKeyboard_56789Upper, + gText_UnionRoomChatKeyboard_PunctuationUpper, + gText_UnionRoomChatKeyboard_SymbolsUpper + }, + [UNION_ROOM_KB_PAGE_LOWER] = + { + gText_UnionRoomChatKeyboard_abcde, + gText_UnionRoomChatKeyboard_fghij, + gText_UnionRoomChatKeyboard_klmno, + gText_UnionRoomChatKeyboard_pqrst, + gText_UnionRoomChatKeyboard_uvwxy, + gText_UnionRoomChatKeyboard_z, + gText_UnionRoomChatKeyboard_01234Lower, + gText_UnionRoomChatKeyboard_56789Lower, + gText_UnionRoomChatKeyboard_PunctuationLower, + gText_UnionRoomChatKeyboard_SymbolsLower + }, + [UNION_ROOM_KB_PAGE_EMOJI] = + { + gText_UnionRoomChatKeyboard_Emoji1, + gText_UnionRoomChatKeyboard_Emoji2, + gText_UnionRoomChatKeyboard_Emoji3, + gText_UnionRoomChatKeyboard_Emoji4, + gText_UnionRoomChatKeyboard_Emoji5, + gText_UnionRoomChatKeyboard_Emoji6, + gText_UnionRoomChatKeyboard_Emoji7, + gText_UnionRoomChatKeyboard_Emoji8, + gText_UnionRoomChatKeyboard_Emoji9, + gText_UnionRoomChatKeyboard_Emoji10 + } }; const u16 gUnknown_082F2C20[] = INCBIN_U16("graphics/interface/unk_palette1.gbapal"); @@ -559,9 +603,9 @@ static void sub_801DDD0(struct UnionRoomChat *unionRoomChat) unionRoomChat->unk4 = 0; unionRoomChat->unk6 = 0; - unionRoomChat->unk10 = 0; + unionRoomChat->currentPage = 0; unionRoomChat->unk11 = 0; - unionRoomChat->unk12 = 0; + unionRoomChat->currentRow = 0; unionRoomChat->unk14 = 0; unionRoomChat->unk15 = 0; unionRoomChat->unk16 = 0; @@ -571,7 +615,7 @@ static void sub_801DDD0(struct UnionRoomChat *unionRoomChat) unionRoomChat->unk17 = 0; unionRoomChat->unk18 = 0; sub_801EF1C(unionRoomChat->unk190); - for (i = 0; i < 10; i++) + for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3C88[i]); } @@ -715,7 +759,7 @@ static void sub_801E030(void) } else if (gMain.newKeys & R_BUTTON) { - if (gUnknown_02022C84->unk10 != 3) + if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT) { sub_801ED94(); sub_801F5EC(8, 0); @@ -763,7 +807,7 @@ static void sub_801E120(void) default: sub_801F5EC(4, 0); var0 = 1; - if (gUnknown_02022C84->unk10 == input || input > 3) + if (gUnknown_02022C84->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT) var0 = 0; break; case MENU_NOTHING_CHOSEN: @@ -786,9 +830,9 @@ static void sub_801E120(void) } gUnknown_02022C84->unk11 = 0; - gUnknown_02022C84->unk12 = 0; + gUnknown_02022C84->currentRow = 0; sub_801F5EC(5, 1); - gUnknown_02022C84->unk10 = input; + gUnknown_02022C84->currentPage = input; gUnknown_02022C84->unk6 = 4; break; case 3: @@ -1260,15 +1304,15 @@ static bool32 sub_801EBE4(void) { if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if (gUnknown_02022C84->unk12 < sUnknown_082F2AA4[gUnknown_02022C84->unk10]) - gUnknown_02022C84->unk12++; + if (gUnknown_02022C84->currentRow < sKeyboardPageMaxRow[gUnknown_02022C84->currentPage]) + gUnknown_02022C84->currentRow++; else - gUnknown_02022C84->unk12 = 0; + gUnknown_02022C84->currentRow = 0; return TRUE; } - if (gUnknown_02022C84->unk10 != 3) + if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT) { if (gMain.newAndRepeatedKeys & DPAD_LEFT) { @@ -1296,10 +1340,10 @@ static bool32 sub_801EBE4(void) } else { - if (gUnknown_02022C84->unk12) - gUnknown_02022C84->unk12--; + if (gUnknown_02022C84->currentRow) + gUnknown_02022C84->currentRow--; else - gUnknown_02022C84->unk12 = sUnknown_082F2AA4[gUnknown_02022C84->unk10]; + gUnknown_02022C84->currentRow = sKeyboardPageMaxRow[gUnknown_02022C84->currentPage]; return TRUE; } @@ -1313,9 +1357,9 @@ static void sub_801EC94(void) u8 *str; u8 buffer[21]; - if (gUnknown_02022C84->unk10 != 3) + if (gUnknown_02022C84->currentPage != UNION_ROOM_KB_PAGE_COUNT) { - charsStr = gUnknown_082F2BA8[gUnknown_02022C84->unk10][gUnknown_02022C84->unk12]; + charsStr = sUnionRoomKeyboardText[gUnknown_02022C84->currentPage][gUnknown_02022C84->currentRow]; for (i = 0; i < gUnknown_02022C84->unk11; i++) { if (*charsStr == CHAR_SPECIAL_F9) @@ -1327,7 +1371,7 @@ static void sub_801EC94(void) } else { - u8 *tempStr = StringCopy(buffer, gUnknown_02022C84->unkB9[gUnknown_02022C84->unk12]); + u8 *tempStr = StringCopy(buffer, gUnknown_02022C84->unkB9[gUnknown_02022C84->currentRow]); tempStr[0] = CHAR_SPACE; tempStr[1] = EOS; charsStr = buffer; @@ -1395,7 +1439,7 @@ static bool32 sub_801EDC4(void) static void sub_801EDE0(void) { u8 *src = sub_801F114(); - StringCopy(gUnknown_02022C84->unkB9[gUnknown_02022C84->unk12], src); + StringCopy(gUnknown_02022C84->unkB9[gUnknown_02022C84->currentRow], src); gUnknown_02022C84->unk18 = 1; } @@ -1409,7 +1453,7 @@ static void sub_801EE10(void) static void sub_801EE2C(void) { int i; - for (i = 0; i < 10; i++) + for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) StringCopy(gSaveBlock1Ptr->unk3C88[i], gUnknown_02022C84->unkB9[i]); } @@ -1551,15 +1595,15 @@ static bool32 sub_801EFF8(u8 *arg0, u8 *arg1) return FALSE; } -static u8 sub_801F0B0(void) +static u8 GetCurrentKeyboardPage(void) { - return gUnknown_02022C84->unk10; + return gUnknown_02022C84->currentPage; } static void sub_801F0BC(u8 *arg0, u8 *arg1) { *arg0 = gUnknown_02022C84->unk11; - *arg1 = gUnknown_02022C84->unk12; + *arg1 = gUnknown_02022C84->currentRow; } static u8 *sub_801F0D0(void) @@ -2528,7 +2572,7 @@ static void sub_8020118(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) static void sub_80201A4(void) { - u8 var0; + u8 page; int i; int var1; u16 left; @@ -2538,11 +2582,11 @@ static void sub_80201A4(void) u8 *str2; FillWindowPixelBuffer(2, PIXEL_FILL(15)); - var0 = sub_801F0B0(); + page = GetCurrentKeyboardPage(); sp[0] = 0; sp[1] = 14; sp[2] = 13; - if (var0 != 3) + if (page != UNION_ROOM_KB_PAGE_COUNT) { str = &sp[4]; str[0] = EXT_CTRL_CODE_BEGIN; @@ -2550,15 +2594,15 @@ static void sub_80201A4(void) var1 = 8; str[2] = var1; left = var1; - if (var0 == 2) + if (page == UNION_ROOM_KB_PAGE_EMOJI) left = 6; - for (i = 0, top = 0; i < 10; i++, top += 12) + for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12) { - if (!gUnknown_082F2BA8[var0][i]) + if (!sUnionRoomKeyboardText[page][i]) return; - StringCopy(&sp[7], gUnknown_082F2BA8[var0][i]); + StringCopy(&sp[7], sUnionRoomKeyboardText[page][i]); AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); } } @@ -2631,7 +2675,7 @@ static void sub_80203B0(void) FillWindowPixelBuffer(3, PIXEL_FILL(1)); DrawTextBorderOuter(3, 1, 13); PrintTextArray(3, 2, 8, 1, 14, 5, gUnknown_082F2DC8); - sub_81983AC(3, 2, 0, 1, 14, 5, sub_801F0B0()); + sub_81983AC(3, 2, 0, 1, 14, 5, GetCurrentKeyboardPage()); PutWindowTilemap(3); } @@ -2820,9 +2864,9 @@ static void sub_802091C(bool32 invisible) static void sub_802093C(void) { u8 x, y; - u8 var2 = sub_801F0B0(); + u8 page = GetCurrentKeyboardPage(); sub_801F0BC(&x, &y); - if (var2 != 3) + if (page != UNION_ROOM_KB_PAGE_COUNT) { StartSpriteAnim(gUnknown_02022C8C->unk0, 0); gUnknown_02022C8C->unk0->pos1.x = x * 8 + 10; @@ -2845,7 +2889,7 @@ static void sub_80209AC(int arg0) static void sub_80209E0(void) { - if (sub_801F0B0() != 3) + if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) StartSpriteAnim(gUnknown_02022C8C->unk0, 1); else StartSpriteAnim(gUnknown_02022C8C->unk0, 3); @@ -2860,7 +2904,7 @@ static bool32 sub_8020A1C(void) if (++gUnknown_02022C8C->unk14 > 3) { - if (sub_801F0B0() != 3) + if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) StartSpriteAnim(gUnknown_02022C8C->unk0, 0); else StartSpriteAnim(gUnknown_02022C8C->unk0, 2); @@ -2914,7 +2958,7 @@ static void sub_8020B20(void) static void sub_8020B80(void) { - if (sub_801F0B0() == 3) + if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT) { if (sub_801F0DC() != 0) { diff --git a/src/unk_pokedex_area_screen_helper.c b/src/unk_pokedex_area_screen_helper.c index 0041d628c..9b2401cb2 100644 --- a/src/unk_pokedex_area_screen_helper.c +++ b/src/unk_pokedex_area_screen_helper.c @@ -2,7 +2,7 @@ #include "main.h" #include "menu.h" #include "bg.h" -#include "alloc.h" +#include "malloc.h" #include "palette.h" #include "unk_pokedex_area_screen_helper.h" diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 655f38def..4d7605c50 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -1,7 +1,7 @@ #include "global.h" #include "main.h" #include "pokeblock.h" -#include "alloc.h" +#include "malloc.h" #include "decompress.h" #include "graphics.h" #include "palette.h" diff --git a/src/water.c b/src/water.c index 4480c3f43..a2fe4c56f 100644 --- a/src/water.c +++ b/src/water.c @@ -39,7 +39,7 @@ void sub_8108B94(struct Sprite *); void sub_8108BE0(struct Sprite *); void sub_8108C08(struct Sprite *); void sub_8108C54(struct Sprite *); -void sub_8108CDC(struct Sprite *); +void AnimWaterPulseRing_Step(struct Sprite *); void sub_810756C(u8); void sub_81076F4(u8); void sub_8107B84(u8); @@ -54,7 +54,7 @@ void sub_810871C(struct Task*, u8); void sub_8108AC0(struct Task*); void sub_8108D54(struct Sprite*, int, int); -extern const union AffineAnimCmd *const gUnknown_08593420[]; +extern const union AffineAnimCmd *const gGrowingRingAffineAnimTable[]; extern const union AffineAnimCmd *const gUnknown_08596208[]; extern const union AnimCmd *const gUnknown_08595AB8[]; @@ -83,7 +83,7 @@ const struct SpriteTemplate gUnknown_08595020 = { .tileTag = ANIM_TAG_RAIN_DROPS, .paletteTag = ANIM_TAG_RAIN_DROPS, - .oam = &gUnknown_08524954, + .oam = &gOamData_AffineOff_ObjNormal_16x32, .anims = gUnknown_0859501C, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -119,7 +119,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_8595068 = { .tileTag = ANIM_TAG_BUBBLE, .paletteTag = ANIM_TAG_BUBBLE, - .oam = &gUnknown_08524A8C, + .oam = &gOamData_AffineNormal_ObjBlend_16x16, .anims = gUnknown_08595064, .images = NULL, .affineAnims = gUnknown_08595050, @@ -161,7 +161,7 @@ const struct SpriteTemplate gUnknown_085950B4 = { .tileTag = ANIM_TAG_RAINBOW_RINGS, .paletteTag = ANIM_TAG_RAINBOW_RINGS, - .oam = &gUnknown_08524A04, + .oam = &gOamData_AffineDouble_ObjNormal_8x16, .anims = gUnknown_08595090, .images = NULL, .affineAnims = gUnknown_085950B0, @@ -186,7 +186,7 @@ const struct SpriteTemplate gUnknown_085950E4 = { .tileTag = ANIM_TAG_WATER_ORB, .paletteTag = ANIM_TAG_WATER_ORB, - .oam = &gUnknown_08524A2C, + .oam = &gOamData_AffineOff_ObjBlend_16x16, .anims = gUnknown_085950E0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -197,7 +197,7 @@ const struct SpriteTemplate gUnknown_085950FC = { .tileTag = ANIM_TAG_BROWN_ORB, .paletteTag = ANIM_TAG_BROWN_ORB, - .oam = &gUnknown_08524A2C, + .oam = &gOamData_AffineOff_ObjBlend_16x16, .anims = gUnknown_085950E0, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -208,7 +208,7 @@ const struct SpriteTemplate gUnknown_08595114 = { .tileTag = ANIM_TAG_GLOWY_RED_ORB, .paletteTag = ANIM_TAG_GLOWY_RED_ORB, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -219,7 +219,7 @@ const struct SpriteTemplate gUnknown_0859512C = { .tileTag = ANIM_TAG_GLOWY_GREEN_ORB, .paletteTag = ANIM_TAG_GLOWY_GREEN_ORB, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -243,7 +243,7 @@ const struct SpriteTemplate gUnknown_08595158 = { .tileTag = ANIM_TAG_SMALL_EMBER, .paletteTag = ANIM_TAG_SMALL_EMBER, - .oam = &gUnknown_08524914, + .oam = &gOamData_AffineOff_ObjNormal_32x32, .anims = gUnknown_08595154, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -254,10 +254,10 @@ const struct SpriteTemplate gUnknown_08595170 = { .tileTag = ANIM_TAG_BLUE_RING, .paletteTag = ANIM_TAG_BLUE_RING, - .oam = &gUnknown_08524A14, + .oam = &gOamData_AffineDouble_ObjNormal_16x32, .anims = gDummySpriteAnimTable, .images = NULL, - .affineAnims = gUnknown_08593420, + .affineAnims = gGrowingRingAffineAnimTable, .callback = sub_81075EC, }; @@ -289,7 +289,7 @@ const struct SpriteTemplate gUnknown_085951C0 = { .tileTag = ANIM_TAG_WATER_ORB, .paletteTag = ANIM_TAG_WATER_ORB, - .oam = &gUnknown_08524AEC, + .oam = &gOamData_AffineDouble_ObjBlend_16x16, .anims = gUnknown_085950E0, .images = NULL, .affineAnims = gUnknown_085951B8, @@ -300,7 +300,7 @@ const struct SpriteTemplate gUnknown_085951D8 = { .tileTag = ANIM_TAG_WATER_ORB, .paletteTag = ANIM_TAG_WATER_ORB, - .oam = &gUnknown_08524AEC, + .oam = &gOamData_AffineDouble_ObjBlend_16x16, .anims = gUnknown_085950E0, .images = NULL, .affineAnims = gUnknown_085951BC, @@ -333,18 +333,18 @@ const struct SpriteTemplate gUnknown_08595208 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_08524A2C, + .oam = &gOamData_AffineOff_ObjBlend_16x16, .anims = gUnknown_08595200, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A78AC, + .callback = AnimThrowProjectile, }; const struct SpriteTemplate gUnknown_08595220 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_08524AEC, + .oam = &gOamData_AffineDouble_ObjBlend_16x16, .anims = gUnknown_08595204, .images = NULL, .affineAnims = gUnknown_08596208, @@ -355,7 +355,7 @@ const struct SpriteTemplate gUnknown_08595238 = { .tileTag = ANIM_TAG_ICE_CRYSTALS, .paletteTag = ANIM_TAG_ICE_CRYSTALS, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_08595AB8, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -366,7 +366,7 @@ const struct SpriteTemplate gUnknown_08595250 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -377,7 +377,7 @@ const struct SpriteTemplate gUnknown_08595268 = { .tileTag = ANIM_TAG_GLOWY_BLUE_ORB, .paletteTag = ANIM_TAG_GLOWY_BLUE_ORB, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -449,7 +449,7 @@ const struct SpriteTemplate gUnknown_085952F8 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_08524904, + .oam = &gOamData_AffineOff_ObjNormal_8x8, .anims = gUnknown_08595298, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, @@ -460,7 +460,7 @@ const struct SpriteTemplate gUnknown_08595310 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_08524964, + .oam = &gOamData_AffineNormal_ObjNormal_8x8, .anims = gUnknown_08595298, .images = NULL, .affineAnims = gUnknown_085952EC, @@ -471,7 +471,7 @@ const struct SpriteTemplate gUnknown_08595328 = { .tileTag = ANIM_TAG_SMALL_BUBBLES, .paletteTag = ANIM_TAG_SMALL_BUBBLES, - .oam = &gUnknown_0852496C, + .oam = &gOamData_AffineNormal_ObjNormal_16x16, .anims = gUnknown_085952A0, .images = NULL, .affineAnims = gUnknown_085952F4, @@ -1975,17 +1975,17 @@ void sub_8108C54(struct Sprite *sprite) } } -void sub_8108C94(struct Sprite *sprite) +void AnimWaterPulseRing(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); sprite->data[3] = gBattleAnimArgs[2]; sprite->data[4] = gBattleAnimArgs[3]; - sprite->callback = sub_8108CDC; + sprite->callback = AnimWaterPulseRing_Step; } -void sub_8108CDC(struct Sprite *sprite) +void AnimWaterPulseRing_Step(struct Sprite *sprite) { int xDiff = sprite->data[1] - sprite->pos1.x; int yDiff = sprite->data[2] - sprite->pos1.y; diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 332bbfb99..530e5e323 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -197,34 +197,35 @@ enum static u8 ChooseWildMonIndex_Fishing(u8 rod) { u8 wildMonIndex = 0; - u8 rand = Random() % ENCOUNTER_CHANCE_FISHING_MONS_TOTAL; + u8 rand = Random() % max(max(ENCOUNTER_CHANCE_FISHING_MONS_OLD_ROD_TOTAL, ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_TOTAL), + ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_TOTAL); switch (rod) { case OLD_ROD: - if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_0) + if (rand < ENCOUNTER_CHANCE_FISHING_MONS_OLD_ROD_SLOT_0) wildMonIndex = 0; else wildMonIndex = 1; break; case GOOD_ROD: - if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_2) + if (rand < ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_2) wildMonIndex = 2; - if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_2 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_3) + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_2 && rand < ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_3) wildMonIndex = 3; - if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_3 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_4) + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_3 && rand < ENCOUNTER_CHANCE_FISHING_MONS_GOOD_ROD_SLOT_4) wildMonIndex = 4; break; case SUPER_ROD: - if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_5) + if (rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_5) wildMonIndex = 5; - if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_5 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_6) + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_5 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_6) wildMonIndex = 6; - if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_6 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_7) + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_6 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_7) wildMonIndex = 7; - if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SLOT_7 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SLOT_8) + if (rand >= ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_7 && rand < ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_8) wildMonIndex = 8; - if (rand == ENCOUNTER_CHANCE_FISHING_MONS_SLOT_8) + if (rand == ENCOUNTER_CHANCE_FISHING_MONS_SUPER_ROD_SLOT_8) wildMonIndex = 9; break; } diff --git a/src/window.c b/src/window.c deleted file mode 100644 index fbce57743..000000000 --- a/src/window.c +++ /dev/null @@ -1,721 +0,0 @@ -#include "global.h" -#include "window.h" -#include "alloc.h" -#include "bg.h" -#include "blit.h" - -u32 filler_03002F58; -u32 filler_03002F5C; -// This global is set to 0 and never changed. -u8 gTransparentTileNumber; -u32 filler_03002F64; -void *gUnknown_03002F70[4]; -extern u32 gUnneededFireRedVariable; - -#define WINDOWS_MAX 32 - -EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0}; -EWRAM_DATA static struct Window* sWindowPtr = NULL; -EWRAM_DATA static u16 sWindowSize = 0; - -static u8 GetNumActiveWindowsOnBg(u8 bgId); -static u8 GetNumActiveWindowsOnBg8Bit(u8 bgId); - -static const struct WindowTemplate sDummyWindowTemplate = DUMMY_WIN_TEMPLATE; - -static void nullsub_8(void) -{ - -} - -bool16 InitWindows(const struct WindowTemplate *templates) -{ - int i; - void *bgTilemapBuffer; - int j; - u8 bgLayer; - u16 attrib; - u8* allocatedTilemapBuffer; - int allocatedBaseBlock; - - for (i = 0; i < 0x4; ++i) - { - bgTilemapBuffer = GetBgTilemapBuffer(i); - if (bgTilemapBuffer != NULL) - gUnknown_03002F70[i] = nullsub_8; - else - gUnknown_03002F70[i] = bgTilemapBuffer; - } - - for (i = 0; i < 0x20; ++i) - { - gWindows[i].window = sDummyWindowTemplate; - gWindows[i].tileData = NULL; - } - - for (i = 0, allocatedBaseBlock = 0, bgLayer = templates[i].bg; bgLayer != 0xFF && i < 0x20; ++i, bgLayer = templates[i].bg) - { - if (gUnneededFireRedVariable == 1) - { - allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, templates[i].width * templates[i].height, 0); - if (allocatedBaseBlock == -1) - return FALSE; - } - - if (gUnknown_03002F70[bgLayer] == NULL) - { - attrib = GetBgAttribute(bgLayer, BG_ATTR_METRIC); - - if (attrib != 0xFFFF) - { - allocatedTilemapBuffer = AllocZeroed(attrib); - - if (allocatedTilemapBuffer == NULL) - { - FreeAllWindowBuffers(); - return FALSE; - } - - for (j = 0; j < attrib; ++j) - allocatedTilemapBuffer[j] = 0; - - gUnknown_03002F70[bgLayer] = allocatedTilemapBuffer; - SetBgTilemapBuffer(bgLayer, allocatedTilemapBuffer); - } - } - - allocatedTilemapBuffer = AllocZeroed((u16)(0x20 * (templates[i].width * templates[i].height))); - - if (allocatedTilemapBuffer == NULL) - { - if ((GetNumActiveWindowsOnBg(bgLayer) == 0) && (gUnknown_03002F70[bgLayer] != nullsub_8)) - { - Free(gUnknown_03002F70[bgLayer]); - gUnknown_03002F70[bgLayer] = allocatedTilemapBuffer; - } - - return FALSE; - } - - gWindows[i].tileData = allocatedTilemapBuffer; - gWindows[i].window = templates[i]; - - if (gUnneededFireRedVariable == 1) - { - gWindows[i].window.baseBlock = allocatedBaseBlock; - DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, templates[i].width * templates[i].height, 1); - } - } - - gTransparentTileNumber = 0; - return TRUE; -} - -u16 AddWindow(const struct WindowTemplate *template) -{ - u16 win; - u8 bgLayer; - int allocatedBaseBlock; - u16 attrib; - u8 *allocatedTilemapBuffer; - int i; - - for (win = 0; win < WINDOWS_MAX; ++win) - { - if ((bgLayer = gWindows[win].window.bg) == 0xFF) - break; - } - - if (win == WINDOWS_MAX) - return 0xFF; - - bgLayer = template->bg; - allocatedBaseBlock = 0; - - if (gUnneededFireRedVariable == 1) - { - allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, template->width * template->height, 0); - - if (allocatedBaseBlock == -1) - return 0xFF; - } - - if (gUnknown_03002F70[bgLayer] == NULL) - { - attrib = GetBgAttribute(bgLayer, BG_ATTR_METRIC); - - if (attrib != 0xFFFF) - { - allocatedTilemapBuffer = AllocZeroed(attrib); - - if (allocatedTilemapBuffer == NULL) - return 0xFF; - - for (i = 0; i < attrib; ++i) - allocatedTilemapBuffer[i] = 0; - - gUnknown_03002F70[bgLayer] = allocatedTilemapBuffer; - SetBgTilemapBuffer(bgLayer, allocatedTilemapBuffer); - } - } - - allocatedTilemapBuffer = AllocZeroed((u16)(0x20 * (template->width * template->height))); - - if (allocatedTilemapBuffer == NULL) - { - if ((GetNumActiveWindowsOnBg(bgLayer) == 0) && (gUnknown_03002F70[bgLayer] != nullsub_8)) - { - Free(gUnknown_03002F70[bgLayer]); - gUnknown_03002F70[bgLayer] = allocatedTilemapBuffer; - } - return 0xFF; - } - - gWindows[win].tileData = allocatedTilemapBuffer; - gWindows[win].window = *template; - - if (gUnneededFireRedVariable == 1) - { - gWindows[win].window.baseBlock = allocatedBaseBlock; - DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, gWindows[win].window.width * gWindows[win].window.height, 1); - } - - return win; -} - -int AddWindowWithoutTileMap(const struct WindowTemplate *template) -{ - u16 win; - u8 bgLayer; - int allocatedBaseBlock; - - for (win = 0; win < WINDOWS_MAX; ++win) - { - if (gWindows[win].window.bg == 0xFF) - break; - } - - if (win == WINDOWS_MAX) - return 0xFF; - - bgLayer = template->bg; - allocatedBaseBlock = 0; - - if (gUnneededFireRedVariable == 1) - { - allocatedBaseBlock = DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, 0, template->width * template->height, 0); - - if (allocatedBaseBlock == -1) - return 0xFF; - } - - gWindows[win].window = *template; - - if (gUnneededFireRedVariable == 1) - { - gWindows[win].window.baseBlock = allocatedBaseBlock; - DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, allocatedBaseBlock, gWindows[win].window.width * gWindows[win].window.height, 1); - } - - return win; -} - -void RemoveWindow(u8 windowId) -{ - u8 bgLayer = gWindows[windowId].window.bg; - - if (gUnneededFireRedVariable == 1) - { - DummiedOutFireRedLeafGreenTileAllocFunc(bgLayer, gWindows[windowId].window.baseBlock, gWindows[windowId].window.width * gWindows[windowId].window.height, 2); - } - - gWindows[windowId].window = sDummyWindowTemplate; - - if (GetNumActiveWindowsOnBg(bgLayer) == 0) - { - if (gUnknown_03002F70[bgLayer] != nullsub_8) - { - Free(gUnknown_03002F70[bgLayer]); - gUnknown_03002F70[bgLayer] = 0; - } - } - - if (gWindows[windowId].tileData != NULL) - { - Free(gWindows[windowId].tileData); - gWindows[windowId].tileData = NULL; - } -} - -void FreeAllWindowBuffers(void) -{ - int i; - - for (i = 0; i < 4; ++i) - { - if (gUnknown_03002F70[i] != NULL && gUnknown_03002F70[i] != nullsub_8) - { - Free(gUnknown_03002F70[i]); - gUnknown_03002F70[i] = NULL; - } - } - - for (i = 0; i < 0x20; ++i) - { - if (gWindows[i].tileData != NULL) - { - Free(gWindows[i].tileData); - gWindows[i].tileData = NULL; - } - } -} - -void CopyWindowToVram(u8 windowId, u8 mode) -{ - struct Window windowLocal = gWindows[windowId]; - u16 windowSize = 32 * (windowLocal.window.width * windowLocal.window.height); - - switch (mode) - { - case 1: - CopyBgTilemapBufferToVram(windowLocal.window.bg); - break; - case 2: - LoadBgTiles(windowLocal.window.bg, windowLocal.tileData, windowSize, windowLocal.window.baseBlock); - break; - case 3: - LoadBgTiles(windowLocal.window.bg, windowLocal.tileData, windowSize, windowLocal.window.baseBlock); - CopyBgTilemapBufferToVram(windowLocal.window.bg); - break; - } -} - -void CopyWindowRectToVram(u32 windowId, u32 mode, u32 x, u32 y, u32 w, u32 h) -{ - struct Window windowLocal; - int rectSize; - int rectPos; - - if (w != 0 && h != 0) - { - windowLocal = gWindows[windowId]; - - rectSize = ((h - 1) * windowLocal.window.width); - rectSize += (windowLocal.window.width - x); - rectSize -= (windowLocal.window.width - (x + w)); - rectSize *= 32; - - rectPos = (y * windowLocal.window.width) + x; - - switch (mode) - { - case 1: - CopyBgTilemapBufferToVram(windowLocal.window.bg); - break; - case 2: - LoadBgTiles(windowLocal.window.bg, windowLocal.tileData + (rectPos * 32), rectSize, windowLocal.window.baseBlock + rectPos); - break; - case 3: - LoadBgTiles(windowLocal.window.bg, windowLocal.tileData + (rectPos * 32), rectSize, windowLocal.window.baseBlock + rectPos); - CopyBgTilemapBufferToVram(windowLocal.window.bg); - break; - } - } -} - -void PutWindowTilemap(u8 windowId) -{ - struct Window windowLocal = gWindows[windowId]; - - WriteSequenceToBgTilemapBuffer( - windowLocal.window.bg, - GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE) + windowLocal.window.baseBlock, - windowLocal.window.tilemapLeft, - windowLocal.window.tilemapTop, - windowLocal.window.width, - windowLocal.window.height, - windowLocal.window.paletteNum, - 1); -} - -void PutWindowRectTilemapOverridePalette(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 palette) -{ - struct Window windowLocal = gWindows[windowId]; - u16 currentRow = windowLocal.window.baseBlock + (y * windowLocal.window.width) + x + GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE); - int i; - - for (i = 0; i < height; ++i) - { - WriteSequenceToBgTilemapBuffer( - windowLocal.window.bg, - currentRow, - windowLocal.window.tilemapLeft + x, - windowLocal.window.tilemapTop + y + i, - width, - 1, - palette, - 1); - - currentRow += windowLocal.window.width; - } -} - -// Fills a window with transparent tiles. -void ClearWindowTilemap(u8 windowId) -{ - struct Window windowLocal = gWindows[windowId]; - - FillBgTilemapBufferRect( - windowLocal.window.bg, - gTransparentTileNumber, - windowLocal.window.tilemapLeft, - windowLocal.window.tilemapTop, - windowLocal.window.width, - windowLocal.window.height, - windowLocal.window.paletteNum); -} - -void PutWindowRectTilemap(u8 windowId, u8 x, u8 y, u8 width, u8 height) -{ - struct Window windowLocal = gWindows[windowId]; - u16 currentRow = windowLocal.window.baseBlock + (y * windowLocal.window.width) + x + GetBgAttribute(windowLocal.window.bg, BG_ATTR_BASETILE); - int i; - - for (i = 0; i < height; ++i) - { - WriteSequenceToBgTilemapBuffer( - windowLocal.window.bg, - currentRow, - windowLocal.window.tilemapLeft + x, - windowLocal.window.tilemapTop + y + i, - width, - 1, - windowLocal.window.paletteNum, - 1); - - currentRow += windowLocal.window.width; - } -} - -void BlitBitmapToWindow(u8 windowId, const u8 *pixels, u16 x, u16 y, u16 width, u16 height) -{ - BlitBitmapRectToWindow(windowId, pixels, 0, 0, width, height, x, y, width, height); -} - -void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight) -{ - struct Bitmap sourceRect; - struct Bitmap destRect; - - sourceRect.pixels = (u8*)pixels; - sourceRect.width = srcWidth; - sourceRect.height = srcHeight; - - destRect.pixels = gWindows[windowId].tileData; - destRect.width = 8 * gWindows[windowId].window.width; - destRect.height = 8 * gWindows[windowId].window.height; - - BlitBitmapRect4Bit(&sourceRect, &destRect, srcX, srcY, destX, destY, rectWidth, rectHeight, 0); -} - -static void BlitBitmapRectToWindowWithColorKey(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 colorKey) -{ - struct Bitmap sourceRect; - struct Bitmap destRect; - - sourceRect.pixels = (u8*)pixels; - sourceRect.width = srcWidth; - sourceRect.height = srcHeight; - - destRect.pixels = gWindows[windowId].tileData; - destRect.width = 8 * gWindows[windowId].window.width; - destRect.height = 8 * gWindows[windowId].window.height; - - BlitBitmapRect4Bit(&sourceRect, &destRect, srcX, srcY, destX, destY, rectWidth, rectHeight, colorKey); -} - -void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height) -{ - struct Bitmap pixelRect; - - pixelRect.pixels = gWindows[windowId].tileData; - pixelRect.width = 8 * gWindows[windowId].window.width; - pixelRect.height = 8 * gWindows[windowId].window.height; - - FillBitmapRect4Bit(&pixelRect, x, y, width, height, fillValue); -} - -void CopyToWindowPixelBuffer(u8 windowId, const void *src, u16 size, u16 tileOffset) -{ - if (size != 0) - CpuCopy16(src, gWindows[windowId].tileData + (0x20 * tileOffset), size); - else - LZ77UnCompWram(src, gWindows[windowId].tileData + (0x20 * tileOffset)); -} - -// Sets all pixels within the window to the fillValue color. -void FillWindowPixelBuffer(u8 windowId, u8 fillValue) -{ - int fillSize = gWindows[windowId].window.width * gWindows[windowId].window.height; - CpuFastFill8(fillValue, gWindows[windowId].tileData, 0x20 * fillSize); -} - -#define MOVE_TILES_DOWN(a) \ -{ \ - destOffset = i + (a); \ - srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \ - if (srcOffset < size) \ - *(u32*)(tileData + destOffset) = *(u32*)(tileData + srcOffset); \ - else \ - *(u32*)(tileData + destOffset) = fillValue32; \ - distanceLoop++; \ -} - -#define MOVE_TILES_UP(a) \ -{ \ - destOffset = i + (a); \ - srcOffset = i + (((width * (distanceLoop & ~7)) | (distanceLoop & 7)) * 4); \ - if (srcOffset < size) \ - *(u32*)(tileData - destOffset) = *(u32*)(tileData - srcOffset); \ - else \ - *(u32*)(tileData - destOffset) = fillValue32; \ - distanceLoop++; \ -} - -void ScrollWindow(u8 windowId, u8 direction, u8 distance, u8 fillValue) -{ - struct WindowTemplate window = gWindows[windowId].window; - u8 *tileData = gWindows[windowId].tileData; - u32 fillValue32 = (fillValue << 24) | (fillValue << 16) | (fillValue << 8) | fillValue; - s32 size = window.height * window.width * 32; - u32 width = window.width; - s32 i; - s32 srcOffset, destOffset; - u32 distanceLoop; - - switch (direction) - { - case 0: - for (i = 0; i < size; i += 32) - { - distanceLoop = distance; - MOVE_TILES_DOWN(0) - MOVE_TILES_DOWN(4) - MOVE_TILES_DOWN(8) - MOVE_TILES_DOWN(12) - MOVE_TILES_DOWN(16) - MOVE_TILES_DOWN(20) - MOVE_TILES_DOWN(24) - MOVE_TILES_DOWN(28) - } - break; - case 1: - tileData += size - 4; - for (i = 0; i < size; i += 32) - { - distanceLoop = distance; - MOVE_TILES_UP(0) - MOVE_TILES_UP(4) - MOVE_TILES_UP(8) - MOVE_TILES_UP(12) - MOVE_TILES_UP(16) - MOVE_TILES_UP(20) - MOVE_TILES_UP(24) - MOVE_TILES_UP(28) - } - break; - case 2: - break; - } -} - -void CallWindowFunction(u8 windowId, void ( *func)(u8, u8, u8, u8, u8, u8)) -{ - struct WindowTemplate window = gWindows[windowId].window; - func(window.bg, window.tilemapLeft, window.tilemapTop, window.width, window.height, window.paletteNum); -} - -bool8 SetWindowAttribute(u8 windowId, u8 attributeId, u32 value) -{ - switch (attributeId) - { - case WINDOW_TILEMAP_LEFT: - gWindows[windowId].window.tilemapLeft = value; - return FALSE; - case WINDOW_TILEMAP_TOP: - gWindows[windowId].window.tilemapTop = value; - return FALSE; - case WINDOW_PALETTE_NUM: - gWindows[windowId].window.paletteNum = value; - return FALSE; - case WINDOW_BASE_BLOCK: - gWindows[windowId].window.baseBlock = value; - return FALSE; - case WINDOW_TILE_DATA: - gWindows[windowId].tileData = (u8*)(value); - return TRUE; - case WINDOW_BG: - case WINDOW_WIDTH: - case WINDOW_HEIGHT: - default: - return TRUE; - } -} - -u32 GetWindowAttribute(u8 windowId, u8 attributeId) -{ - switch (attributeId) - { - case WINDOW_BG: - return gWindows[windowId].window.bg; - case WINDOW_TILEMAP_LEFT: - return gWindows[windowId].window.tilemapLeft; - case WINDOW_TILEMAP_TOP: - return gWindows[windowId].window.tilemapTop; - case WINDOW_WIDTH: - return gWindows[windowId].window.width; - case WINDOW_HEIGHT: - return gWindows[windowId].window.height; - case WINDOW_PALETTE_NUM: - return gWindows[windowId].window.paletteNum; - case WINDOW_BASE_BLOCK: - return gWindows[windowId].window.baseBlock; - case WINDOW_TILE_DATA: - return (u32)(gWindows[windowId].tileData); - default: - return 0; - } -} - -static u8 GetNumActiveWindowsOnBg(u8 bgId) -{ - u8 windowsNum = 0; - s32 i; - for (i = 0; i < WINDOWS_MAX; i++) - { - if (gWindows[i].window.bg == bgId) - windowsNum++; - } - return windowsNum; -} - -static void nullsub_9(void) -{ - -} - -u16 AddWindow8Bit(const struct WindowTemplate *template) -{ - u16 windowId; - u8* memAddress; - u8 bgLayer; - - for (windowId = 0; windowId < 32; windowId++) - { - if (gWindows[windowId].window.bg == 0xFF) - break; - } - if (windowId == WINDOWS_MAX) - return 0xFF; - bgLayer = template->bg; - if (gUnknown_03002F70[bgLayer] == 0) - { - u16 attribute = GetBgAttribute(bgLayer, BG_ATTR_METRIC); - if (attribute != 0xFFFF) - { - s32 i; - memAddress = Alloc(attribute); - if (memAddress == NULL) - return 0xFF; - for (i = 0; i < attribute; i++) // if we're going to zero out the memory anyway, why not call AllocZeroed? - memAddress[i] = 0; - gUnknown_03002F70[bgLayer] = memAddress; - SetBgTilemapBuffer(bgLayer, memAddress); - } - } - memAddress = Alloc((u16)(0x40 * (template->width * template->height))); - if (memAddress == NULL) - { - if (GetNumActiveWindowsOnBg8Bit(bgLayer) == 0 && gUnknown_03002F70[bgLayer] != nullsub_9) - { - Free(gUnknown_03002F70[bgLayer]); - gUnknown_03002F70[bgLayer] = NULL; - } - return 0xFF; - } - else - { - gWindows[windowId].tileData = memAddress; - gWindows[windowId].window = *template; - return windowId; - } -} - -void FillWindowPixelBuffer8Bit(u8 windowId, u8 fillValue) -{ - s32 i; - s32 size; - - size = (u16)(0x40 * (gWindows[windowId].window.width * gWindows[windowId].window.height)); - for (i = 0; i < size; i++) - gWindows[windowId].tileData[i] = fillValue; -} - -void FillWindowPixelRect8Bit(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height) -{ - struct Bitmap pixelRect; - - pixelRect.pixels = gWindows[windowId].tileData; - pixelRect.width = 8 * gWindows[windowId].window.width; - pixelRect.height = 8 * gWindows[windowId].window.height; - - FillBitmapRect8Bit(&pixelRect, x, y, width, height, fillValue); -} - -void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum) -{ - struct Bitmap sourceRect; - struct Bitmap destRect; - - sourceRect.pixels = (u8*) pixels; - sourceRect.width = srcWidth; - sourceRect.height = srcHeight; - - destRect.pixels = gWindows[windowId].tileData; - destRect.width = 8 * gWindows[windowId].window.width; - destRect.height = 8 * gWindows[windowId].window.height; - - BlitBitmapRect4BitTo8Bit(&sourceRect, &destRect, srcX, srcY, destX, destY, rectWidth, rectHeight, 0, paletteNum); -} - -void CopyWindowToVram8Bit(u8 windowId, u8 mode) -{ - sWindowPtr = &gWindows[windowId]; - sWindowSize = 0x40 * (sWindowPtr->window.width * sWindowPtr->window.height); - - switch (mode) - { - case 1: - CopyBgTilemapBufferToVram(sWindowPtr->window.bg); - break; - case 2: - LoadBgTiles(sWindowPtr->window.bg, sWindowPtr->tileData, sWindowSize, sWindowPtr->window.baseBlock); - break; - case 3: - LoadBgTiles(sWindowPtr->window.bg, sWindowPtr->tileData, sWindowSize, sWindowPtr->window.baseBlock); - CopyBgTilemapBufferToVram(sWindowPtr->window.bg); - break; - } -} - -static u8 GetNumActiveWindowsOnBg8Bit(u8 bgId) -{ - u8 windowsNum = 0; - s32 i; - for (i = 0; i < WINDOWS_MAX; i++) - { - if (gWindows[i].window.bg == bgId) - windowsNum++; - } - return windowsNum; -} |