diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-09 09:26:21 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-05-09 09:26:21 -0400 |
commit | d850ef92c66080733746a4a8253d384603e064f5 (patch) | |
tree | 3423ad6d586ee1a495805feb6fe40db782673621 | |
parent | 0035d25cfc4c2b9a0d9d427ccfad322037ef8464 (diff) |
decomp unk_810C3A4 as part of vs_seeker
-rw-r--r-- | asm/unk_810C3A4.s | 389 | ||||
-rw-r--r-- | include/global.h | 8 | ||||
-rw-r--r-- | include/map_obj_80688E4.h | 1 | ||||
-rw-r--r-- | include/map_obj_lock.h | 1 | ||||
-rw-r--r-- | include/unk_810c3a4.h | 19 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/vs_seeker.c | 230 |
7 files changed, 256 insertions, 393 deletions
diff --git a/asm/unk_810C3A4.s b/asm/unk_810C3A4.s deleted file mode 100644 index cabaac727..000000000 --- a/asm/unk_810C3A4.s +++ /dev/null @@ -1,389 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_810C3A4 -sub_810C3A4: @ 810C3A4 - push {lr} - ldr r0, _0810C3B4 @ =sub_810C3B8 - movs r1, 0x50 - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_0810C3B4: .4byte sub_810C3B8 - thumb_func_end sub_810C3A4 - - thumb_func_start sub_810C3B8 -sub_810C3B8: @ 810C3B8 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _0810C43C @ =gTasks - adds r5, r0, r1 - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0810C3E2 - bl walkrun_is_standing_still - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _0810C3E2 - bl sub_805C270 - strh r4, [r5, 0x8] -_0810C3E2: - movs r1, 0xA - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _0810C41C - movs r4, 0 - ldr r7, _0810C440 @ =gMapObjects -_0810C3EE: - adds r0, r4, 0 - bl sub_810CF04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810C412 - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - adds r1, r0, r7 - ldrb r0, [r1] - lsls r0, 30 - cmp r0, 0 - blt _0810C436 - adds r0, r1, 0 - bl FreezeMapObject -_0810C412: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _0810C3EE -_0810C41C: - movs r0, 0x1 - strh r0, [r5, 0xA] - movs r1, 0x8 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _0810C436 - adds r0, r6, 0 - bl DestroyTask - bl sub_805C780 - bl EnableBothScriptContexts -_0810C436: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810C43C: .4byte gTasks -_0810C440: .4byte gMapObjects - thumb_func_end sub_810C3B8 - - thumb_func_start sub_810C444 -sub_810C444: @ 810C444 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - ldr r0, _0810C4E0 @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 4 - adds r1, r0 - mov r8, r1 - movs r7, 0 - ldr r0, _0810C4E4 @ =gMapHeader - ldr r1, [r0, 0x4] - adds r2, r0, 0 - ldrb r1, [r1] - cmp r7, r1 - bcs _0810C4D2 -_0810C466: - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 3 - mov r1, r8 - adds r5, r0, r1 - ldrh r0, [r5, 0xC] - cmp r0, 0x1 - beq _0810C47A - cmp r0, 0x3 - bne _0810C4C4 -_0810C47A: - ldrb r0, [r5, 0x9] - subs r0, 0x4D - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bhi _0810C4C4 - bl sub_810CF54 - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r0, [r5] - ldr r1, _0810C4E0 @ =gSaveBlock1Ptr - ldr r2, [r1] - ldrb r1, [r2, 0x5] - ldrb r2, [r2, 0x4] - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - mov r0, sp - ldrb r0, [r0] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r2, _0810C4E8 @ =gMapObjects - adds r4, r1, r2 - bl sub_810CF04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810C4C0 - adds r0, r4, 0 - adds r1, r6, 0 - bl npc_set_running_behaviour_etc -_0810C4C0: - strb r6, [r5, 0x9] - ldr r2, _0810C4E4 @ =gMapHeader -_0810C4C4: - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, [r2, 0x4] - ldrb r0, [r0] - cmp r7, r0 - bcc _0810C466 -_0810C4D2: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810C4E0: .4byte gSaveBlock1Ptr -_0810C4E4: .4byte gMapHeader -_0810C4E8: .4byte gMapObjects - thumb_func_end sub_810C444 - - thumb_func_start sub_810C4EC -sub_810C4EC: @ 810C4EC - push {r4-r7,lr} - movs r0, 0xB5 - lsls r0, 1 - movs r1, 0x1 - bl CheckBagHasItem - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810C516 - ldr r0, _0810C568 @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r2, 0xC7 - lsls r2, 3 - adds r1, r0, r2 - ldrh r2, [r1] - ldrb r0, [r1] - cmp r0, 0x63 - bhi _0810C516 - adds r0, r2, 0x1 - strh r0, [r1] -_0810C516: - ldr r7, _0810C56C @ =0x00000801 - adds r0, r7, 0 - bl FlagGet - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810C570 - ldr r6, _0810C568 @ =gSaveBlock1Ptr - ldr r0, [r6] - movs r5, 0xC7 - lsls r5, 3 - adds r3, r0, r5 - ldrh r2, [r3] - lsrs r1, r2, 8 - movs r4, 0xFF - cmp r1, 0x63 - bhi _0810C548 - adds r1, 0x1 - lsls r1, 24 - movs r0, 0xFF - ands r0, r2 - lsrs r1, 16 - orrs r0, r1 - strh r0, [r3] -_0810C548: - ldr r0, [r6] - adds r0, r5 - ldrh r0, [r0] - lsrs r0, 8 - ands r0, r4 - cmp r0, 0x64 - bne _0810C570 - adds r0, r7, 0 - bl FlagClear - bl sub_810C640 - bl sub_810D0D0 - movs r0, 0x1 - b _0810C572 - .align 2, 0 -_0810C568: .4byte gSaveBlock1Ptr -_0810C56C: .4byte 0x00000801 -_0810C570: - movs r0, 0 -_0810C572: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_810C4EC - - thumb_func_start sub_810C578 -sub_810C578: @ 810C578 - push {lr} - ldr r0, _0810C590 @ =0x00000801 - bl FlagClear - bl sub_810C640 - bl sub_810D0D0 - bl sub_810C594 - pop {r0} - bx r0 - .align 2, 0 -_0810C590: .4byte 0x00000801 - thumb_func_end sub_810C578 - - thumb_func_start sub_810C594 -sub_810C594: @ 810C594 - push {r4-r7,lr} - movs r5, 0 - movs r6, 0 -_0810C59A: - lsls r0, r5, 3 - adds r0, r5 - lsls r0, 2 - ldr r1, _0810C5FC @ =gMapObjects - adds r4, r0, r1 - ldrb r0, [r4, 0x6] - subs r0, 0x4D - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bhi _0810C5EA - bl sub_810CF54 - lsls r0, 24 - lsrs r3, r0, 24 - ldrb r0, [r4] - lsls r0, 31 - cmp r0, 0 - beq _0810C5EA - ldr r2, _0810C600 @ =gSprites - ldrb r0, [r4, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - movs r7, 0x2E - ldrsh r0, [r1, r7] - cmp r0, r5 - bne _0810C5EA - strh r6, [r1, 0x24] - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - strh r6, [r0, 0x26] - adds r0, r4, 0 - adds r1, r3, 0 - bl npc_set_running_behaviour_etc -_0810C5EA: - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0xF - bls _0810C59A - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810C5FC: .4byte gMapObjects -_0810C600: .4byte gSprites - thumb_func_end sub_810C594 - - thumb_func_start sub_810C604 -sub_810C604: @ 810C604 - ldr r0, _0810C61C @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0xC7 - lsls r0, 3 - adds r1, r0 - ldrh r2, [r1] - movs r0, 0xFF - lsls r0, 8 - ands r0, r2 - strh r0, [r1] - bx lr - .align 2, 0 -_0810C61C: .4byte gSaveBlock1Ptr - thumb_func_end sub_810C604 - - thumb_func_start sub_810C620 -sub_810C620: @ 810C620 - ldr r0, _0810C63C @ =gSaveBlock1Ptr - ldr r2, [r0] - movs r0, 0xC7 - lsls r0, 3 - adds r2, r0 - ldrh r1, [r2] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - movs r1, 0x64 - orrs r0, r1 - strh r0, [r2] - bx lr - .align 2, 0 -_0810C63C: .4byte gSaveBlock1Ptr - thumb_func_end sub_810C620 - - thumb_func_start sub_810C640 -sub_810C640: @ 810C640 - ldr r0, _0810C650 @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0xC7 - lsls r1, 3 - adds r0, r1 - ldrb r1, [r0] - strh r1, [r0] - bx lr - .align 2, 0 -_0810C650: .4byte gSaveBlock1Ptr - thumb_func_end sub_810C640 - - thumb_func_start sub_810C654 -sub_810C654: @ 810C654 - ldr r0, _0810C66C @ =gSaveBlock1Ptr - ldr r1, [r0] - movs r0, 0xC7 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - movs r3, 0xC8 - lsls r3, 7 - adds r2, r3, 0 - orrs r0, r2 - strh r0, [r1] - bx lr - .align 2, 0 -_0810C66C: .4byte gSaveBlock1Ptr - thumb_func_end sub_810C654 - - .align 2, 0 @ Don't pad with nop. diff --git a/include/global.h b/include/global.h index 60185af00..461402f1f 100644 --- a/include/global.h +++ b/include/global.h @@ -692,6 +692,12 @@ struct TrainerTowerLog u8 unkA_6:2; }; +struct TrainerRematchState +{ + u16 stepCounter; + u8 rematches[100]; +}; + struct SaveBlock1 { /*0x0000*/ struct Coords16 pos; @@ -719,7 +725,7 @@ struct SaveBlock1 /*0x05F8*/ u8 seen1[DEX_FLAGS_NO]; /*0x062C*/ u16 berryBlenderRecords[3]; // unused /*0x0632*/ u8 field_632[6]; // unused? - /*0x0638*/ u8 trainerRematchStepCounter; + /*0x0638*/ u16 trainerRematchStepCounter; /*0x063A*/ u8 ALIGNED(2) trainerRematches[100]; /*0x06A0*/ struct MapObject mapObjects[MAP_OBJECTS_COUNT]; /*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64]; diff --git a/include/map_obj_80688E4.h b/include/map_obj_80688E4.h index 9ab76646d..de871fd64 100644 --- a/include/map_obj_80688E4.h +++ b/include/map_obj_80688E4.h @@ -4,5 +4,6 @@ #include "global.h" void player_bitmagic(void); +void FreezeMapObject(struct MapObject *); #endif //GUARD_MAP_OBJ_80688E4_H diff --git a/include/map_obj_lock.h b/include/map_obj_lock.h index 2927ca26d..0d130973b 100644 --- a/include/map_obj_lock.h +++ b/include/map_obj_lock.h @@ -10,5 +10,6 @@ void LockSelectedMapObject(void); void sub_8098630(void); bool8 sub_8098734(void); void sub_80696C0(void); +bool8 walkrun_is_standing_still(void); #endif // GUARD_MAP_OBJ_LOCK_H diff --git a/include/unk_810c3a4.h b/include/unk_810c3a4.h index 3f85ab00f..11a91b5ef 100644 --- a/include/unk_810c3a4.h +++ b/include/unk_810c3a4.h @@ -1,6 +1,25 @@ #ifndef GUARD_UNK_810C3A4_H #define GUARD_UNK_810C3A4_H +#define GET_VS_SEEKER_COUNTER_0() (gSaveBlock1Ptr->trainerRematch.stepCounter & 0xFF) +#define GET_VS_SEEKER_COUNTER_1() (gSaveBlock1Ptr->trainerRematch.stepCounter >> 8) +#define SET_VS_SEEKER_COUNTER_0(x) ({\ + gSaveBlock1Ptr->trainerRematch.stepCounter &= 0xFF00;\ + gSaveBlock1Ptr->trainerRematch.stepCounter |= (x);\ +}) +#define SET_VS_SEEKER_COUNTER_1(x) ({\ + gSaveBlock1Ptr->trainerRematch.stepCounter &= 0x00FF;\ + gSaveBlock1Ptr->trainerRematch.stepCounter |= ((x) << 8);\ +}) +#define INC_VS_SEEKER_COUNTER_0() ({\ + u8 x = GET_VS_SEEKER_COUNTER_0();\ + if (x < 100) gSaveBlock1Ptr->trainerRematch.stepCounter++;\ +}) +#define INC_VS_SEEKER_COUNTER_1() ({\ + u8 x = GET_VS_SEEKER_COUNTER_1();\ + if (x < 100) {x++; SET_VS_SEEKER_COUNTER_1(x);}\ +}) + void sub_810C604(void); void sub_810C640(void); diff --git a/ld_script.txt b/ld_script.txt index 2f9804b4a..bf5ce7fd2 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -213,7 +213,6 @@ SECTIONS { asm/save_location.o(.text); src/bag.o(.text); src/trainer_pokemon_sprites.o(.text); - asm/unk_810C3A4.o(.text); src/vs_seeker.o(.text); asm/item_pc.o(.text); asm/mailbox_pc.o(.text); diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 9cf6a6e04..bd5b9c7ea 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -19,6 +19,7 @@ #include "random.h" #include "field_map_obj.h" #include "field_player_avatar.h" +#include "map_obj_80688E4.h" #include "map_obj_8097404.h" #include "unk_810c3a4.h" #include "constants/movement_commands.h" @@ -70,6 +71,8 @@ extern u8 gSelectedEventObject; // static declarations static EWRAM_DATA struct VsSeekerStruct *sVsSeeker = NULL; +static void sub_810C3B8(u8 taskId); +static void sub_810C594(void); static void Task_VsSeeker_1(u8 taskId); static void Task_VsSeeker_2(u8 taskId); static void GatherNearbyTrainerInfo(void); @@ -565,6 +568,229 @@ static const u8 gUnknown_8453F67[] = { 0x08, 0x08, 0x07, 0x09, 0x0a }; // text + + +void sub_810C3A4(void) +{ + CreateTask(sub_810C3B8, 80); +} + +static void sub_810C3B8(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + u8 i; + + if (task->data[0] == 0 && walkrun_is_standing_still() == TRUE) + { + sub_805C270(); + task->data[0] = 1; + } + + if (task->data[1] == 0) + { + for (i = 0; i < MAP_OBJECTS_COUNT; i++) + { + if (sub_810CF04(i) == TRUE) + { + if (gMapObjects[i].mapobj_bit_1) + return; + FreezeMapObject(&gMapObjects[i]); + } + } + } + + task->data[1] = 1; + if (task->data[0] != 0) + { + DestroyTask(taskId); + sub_805C780(); + EnableBothScriptContexts(); + } +} + +void sub_810C444(void) +{ + struct MapObjectTemplate * templates = gSaveBlock1Ptr->mapObjectTemplates; + u8 i; + u8 r6; + u8 sp0; + struct MapObject * mapObject; + + for (i = 0; i < gMapHeader.events->mapObjectCount; i++) + { + if ((templates[i].unkC == 1 || templates[i].unkC == 3) && (templates[i].movementType == 0x4D || templates[i].movementType == 0x4E || templates[i].movementType == 0x4F)) + { + r6 = sub_810CF54(); + TryGetFieldObjectIdByLocalIdAndMap(templates[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &sp0); + mapObject = &gMapObjects[sp0]; + if (sub_810CF04(sp0) == TRUE) + { + npc_set_running_behaviour_etc(mapObject, r6); + } + templates[i].movementType = r6; + } + } +} + +#ifdef NONMATCHING +bool8 sub_810C4EC(void) +{ + if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE) + { + if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100) + gSaveBlock1Ptr->trainerRematchStepCounter++; + } + + if (FlagGet(0x801) == TRUE) + { + u16 x; + do { + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; + } while (0); + if (x < 100) + { + x++; + gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF); + } + do { + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; + } while (0); + if (x == 100) + { + FlagClear(0x801); + sub_810C640(); + sub_810D0D0(); + return TRUE; + } + } + + return FALSE; +} +#else +NAKED +bool8 sub_810C4EC(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmovs r0, 0xB5\n" + "\tlsls r0, 1\n" + "\tmovs r1, 0x1\n" + "\tbl CheckBagHasItem\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbne _0810C516\n" + "\tldr r0, _0810C568 @ =gSaveBlock1Ptr\n" + "\tldr r0, [r0]\n" + "\tmovs r2, 0xC7\n" + "\tlsls r2, 3\n" + "\tadds r1, r0, r2\n" + "\tldrh r2, [r1]\n" + "\tldrb r0, [r1]\n" + "\tcmp r0, 0x63\n" + "\tbhi _0810C516\n" + "\tadds r0, r2, 0x1\n" + "\tstrh r0, [r1]\n" + "_0810C516:\n" + "\tldr r7, _0810C56C @ =0x00000801\n" + "\tadds r0, r7, 0\n" + "\tbl FlagGet\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x1\n" + "\tbne _0810C570\n" + "\tldr r6, _0810C568 @ =gSaveBlock1Ptr\n" + "\tldr r0, [r6]\n" + "\tmovs r5, 0xC7\n" + "\tlsls r5, 3\n" + "\tadds r3, r0, r5\n" + "\tldrh r2, [r3]\n" + "\tlsrs r1, r2, 8\n" + "\tmovs r4, 0xFF\n" + "\tcmp r1, 0x63\n" + "\tbhi _0810C548\n" + "\tadds r1, 0x1\n" + "\tlsls r1, 24\n" + "\tmovs r0, 0xFF\n" + "\tands r0, r2\n" + "\tlsrs r1, 16\n" + "\torrs r0, r1\n" + "\tstrh r0, [r3]\n" + "_0810C548:\n" + "\tldr r0, [r6]\n" + "\tadds r0, r5\n" + "\tldrh r0, [r0]\n" + "\tlsrs r0, 8\n" + "\tands r0, r4\n" + "\tcmp r0, 0x64\n" + "\tbne _0810C570\n" + "\tadds r0, r7, 0\n" + "\tbl FlagClear\n" + "\tbl sub_810C640\n" + "\tbl sub_810D0D0\n" + "\tmovs r0, 0x1\n" + "\tb _0810C572\n" + "\t.align 2, 0\n" + "_0810C568: .4byte gSaveBlock1Ptr\n" + "_0810C56C: .4byte 0x00000801\n" + "_0810C570:\n" + "\tmovs r0, 0\n" + "_0810C572:\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif + +void sub_810C578(void) +{ + FlagClear(0x801); + sub_810C640(); + sub_810D0D0(); + sub_810C594(); +} + +static void sub_810C594(void) +{ + u8 i; + + for (i = 0; i < MAP_OBJECTS_COUNT; i++) + { + struct MapObject * mapObject = &gMapObjects[i]; + if (mapObject->animPattern == 0x4D || mapObject->animPattern == 0x4E || mapObject->animPattern == 0x4F) + { + u8 r3 = sub_810CF54(); + if (mapObject->active && gSprites[mapObject->spriteId].data[0] == i) + { + gSprites[mapObject->spriteId].pos2.x = 0; + gSprites[mapObject->spriteId].pos2.y = 0; + npc_set_running_behaviour_etc(mapObject, r3); + } + } + } +} + +void sub_810C604(void) +{ + gSaveBlock1Ptr->trainerRematchStepCounter &= 0xFF00; +} + +void sub_810C620(void) +{ + gSaveBlock1Ptr->trainerRematchStepCounter &= 0xFF00; + gSaveBlock1Ptr->trainerRematchStepCounter |= 100; +} + +void sub_810C640(void) +{ + gSaveBlock1Ptr->trainerRematchStepCounter &= 0x00FF; +} + +void sub_810C654(void) +{ + gSaveBlock1Ptr->trainerRematchStepCounter &= 0x00FF; + gSaveBlock1Ptr->trainerRematchStepCounter |= (100 << 8); +} + void Task_VsSeeker_0(u8 taskId) { u8 i; @@ -1225,7 +1451,7 @@ static u16 GetTrainerFlagFromScript(const u8 *script) * because the ARM processor requires shorts to be 16-bit * aligned, this function needs to perform explicit bitwise * operations to get the correct flag. - * + * * 5c XX YY ZZ ... * -- -- */ @@ -1360,7 +1586,7 @@ static void StartAllRespondantIdleMovements(void) u8 dummy = 0; s32 i; s32 j; - + for (i = 0; i < sVsSeeker->numRematchableTrainers; i++) { for (j = 0; sVsSeeker->trainerInfo[j].localId != 0xFF; j++) |