diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/anim/shadow_minimize.c | 182 | ||||
-rw-r--r-- | src/battle/anim/unused_9.c | 69 | ||||
-rw-r--r-- | src/data/heal_locations.h | 44 | ||||
-rw-r--r-- | src/data/object_events/object_event_graphics_info.h | 8 | ||||
-rw-r--r-- | src/data/object_events/object_event_subsprites.h | 103 | ||||
-rw-r--r-- | src/decompress.c | 144 | ||||
-rw-r--r-- | src/event_object_movement.c | 11 | ||||
-rw-r--r-- | src/field_effect_helpers.c | 238 | ||||
-rw-r--r-- | src/field_player_avatar.c | 3 | ||||
-rw-r--r-- | src/heal_location.c | 2 | ||||
-rw-r--r-- | src/pokedex.c | 9 | ||||
-rw-r--r-- | src/region_map.c | 6 | ||||
-rw-r--r-- | src/trainer_see.c | 9 | ||||
-rw-r--r-- | src/tv.c | 254 | ||||
-rw-r--r-- | src/wild_encounter.c | 12 |
15 files changed, 328 insertions, 766 deletions
diff --git a/src/battle/anim/shadow_minimize.c b/src/battle/anim/shadow_minimize.c index a4589f096..913e58bc4 100644 --- a/src/battle/anim/shadow_minimize.c +++ b/src/battle/anim/shadow_minimize.c @@ -8,14 +8,14 @@ extern s16 gBattleAnimArgs[]; extern u8 gBattleAnimAttacker; extern u8 gBattleAnimTarget; -static void sub_80D04E0(u8 taskId); -void sub_80D0614(struct Task* task, u8 taskId); -void sub_80D0704(struct Sprite* sprite); +static void AnimTask_Minimize_Step(u8 taskId); +void CreateMinimizeSprite(struct Task* task, u8 taskId); +void ClonedMinimizeSprite_Step(struct Sprite* sprite); // shadow_minimize (the minimizing-like shadow over the Pokemon effect.) // Used in Minimize. -void sub_80D0488(u8 taskId) +void AnimTask_Minimize(u8 taskId) { struct Task* task = &gTasks[taskId]; u8 spriteId = GetAnimBattlerSpriteId(0); @@ -28,17 +28,17 @@ void sub_80D0488(u8 taskId) task->data[5] = 0; task->data[6] = 0; task->data[7] = GetBattlerSubpriority(gBattleAnimAttacker); - task->func = sub_80D04E0; + task->func = AnimTask_Minimize_Step; } -void sub_80D04E0(u8 taskId) +void AnimTask_Minimize_Step(u8 taskId) { struct Task* task = &gTasks[taskId]; switch (task->data[1]) { case 0: if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6) - sub_80D0614(task, taskId); + CreateMinimizeSprite(task, taskId); task->data[2]++; task->data[4] += 0x28; obj_id_set_rotscale(task->data[0], task->data[4], task->data[4], 0); @@ -97,164 +97,40 @@ void sub_80D04E0(u8 taskId) } } -#ifdef NONMATCHING -void sub_80D0614(struct Task* task, u8 taskId) +void CreateMinimizeSprite(struct Task* task, u8 taskId) { - s16 r8 = duplicate_obj_of_side_rel2move_in_transparent_mode(0); - if (r8 >= 0) + s16 matrixNum; // u16 in Emerald + s16 spriteId = duplicate_obj_of_side_rel2move_in_transparent_mode(0); + + if (spriteId >= 0) { - u8 r6 = AllocOamMatrix(); - if (r6 == 0xFF) + matrixNum = AllocOamMatrix(); + if (matrixNum == 0xFF) { - obj_delete_but_dont_free_vram(&gSprites[r8]); + obj_delete_but_dont_free_vram(&gSprites[spriteId]); + return; } else { - gSprites[r8].oam.objMode = ST_OAM_OBJ_BLEND; - gSprites[r8].oam.affineMode = ST_OAM_AFFINE_DOUBLE; - gSprites[r8].affineAnimPaused = TRUE; - r6 &= 0x1f; - - gSprites[r8].oam.matrixNum = r6; // need to inhibit optimizing out the mov r0, 0x3f / neg r0, r0 - // current code does subs r0, #94 (0x1f - 94 = 0xc1, !0x3f = 0xc1) - gSprites[r8].subpriority = task->data[7] - task->data[3]; + gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + gSprites[spriteId].affineAnimPaused = TRUE; + gSprites[spriteId].oam.matrixNum = matrixNum; + gSprites[spriteId].subpriority = task->data[7] - task->data[3]; task->data[3]++; task->data[6]++; - gSprites[r8].data[0] = 16; - gSprites[r8].data[1] = taskId; - gSprites[r8].data[2] = 6; - gSprites[r8].callback = sub_80D0704; - obj_id_set_rotscale(r8, task->data[4], task->data[4], 0); - gSprites[r8].oam.affineMode = 1; - CalcCenterToCornerVec(&gSprites[r8], gSprites[r8].oam.shape, gSprites[r8].oam.size, gSprites[r8].oam.affineMode); + gSprites[spriteId].data[0] = 16; + gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].data[2] = 6; + gSprites[spriteId].callback = ClonedMinimizeSprite_Step; + obj_id_set_rotscale(spriteId, task->data[4], task->data[4], 0); + gSprites[spriteId].oam.affineMode = 1; + CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); } } } -#else -NAKED -void sub_80D0614(struct Task* task, u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6,r7}\n\ - adds r7, r0, 0 @r7 is task\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r9, r1 @r9 is taskId\n\ - movs r0, 0\n\ - bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - lsls r0, 16\n\ - asrs r4, r0, 16\n\ - cmp r4, 0\n\ - blt _080D06EE @jump to bottom\n\ - bl AllocOamMatrix\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - cmp r6, 0xFF\n\ - bne _080D0658\n\ - lsls r0, r4, 4\n\ - adds r0, r4\n\ - lsls r0, 2\n\ - ldr r1, _080D0654 @ =gSprites\n\ - adds r0, r1\n\ - bl obj_delete_but_dont_free_vram\n\ - b _080D06EE @ jump to bottom\n\ - .align 2, 0\n\ -_080D0654: .4byte gSprites\n\ -_080D0658:\n\ - ldr r5, _080D06FC @ =gSprites\n\ - lsls r3, r4, 4\n\ - adds r3, r4\n\ - lsls r3, 2\n\ - adds r4, r3, r5\n\ - ldrb r1, [r4, 0x1]\n\ - movs r0, 0xD\n\ - negs r0, r0\n\ - ands r0, r1\n\ - movs r1, 0x4\n\ - orrs r0, r1\n\ - movs r1, 0x3\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x1]\n\ - adds r2, r4, 0\n\ - adds r2, 0x2C\n\ - ldrb r0, [r2]\n\ - movs r1, 0x80\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - movs r0, 0x1F\n\ - ands r6, r0\n\ - lsls r2, r6, 1\n\ - ldrb r1, [r4, 0x3]\n\ - movs r0, 0x3F\n\ - negs r0, r0\n\ - ands r0, r1\n\ - orrs r0, r2\n\ - strb r0, [r4, 0x3]\n\ - ldrb r0, [r7, 0x16]\n\ - ldrb r1, [r7, 0xE]\n\ - subs r0, r1\n\ - adds r1, r4, 0\n\ - adds r1, 0x43\n\ - strb r0, [r1]\n\ - ldrh r0, [r7, 0xE]\n\ - adds r0, 0x1\n\ - strh r0, [r7, 0xE]\n\ - ldrh r0, [r7, 0x14]\n\ - adds r0, 0x1\n\ - strh r0, [r7, 0x14]\n\ - movs r0, 0x10\n\ - strh r0, [r4, 0x2E]\n\ - mov r0, r9\n\ - strh r0, [r4, 0x30]\n\ - movs r0, 0x6\n\ - strh r0, [r4, 0x32]\n\ - adds r5, 0x1C\n\ - adds r3, r5\n\ - ldr r0, _080D0700 @ =sub_80D0704\n\ - str r0, [r3]\n\ - mov r1, r8 @duplicate_obj_of_side_rel2move_in_transparent_mode(0)\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - movs r1, 0x10\n\ - ldrsh r2, [r7, r1]\n\ - adds r1, r2, 0\n\ - movs r3, 0\n\ - bl obj_id_set_rotscale\n\ - ldrb r0, [r4, 0x1]\n\ - movs r3, 0x4\n\ - negs r3, r3\n\ - ands r3, r0\n\ - movs r0, 0x1\n\ - orrs r3, r0\n\ - strb r3, [r4, 0x1]\n\ - lsrs r1, r3, 6\n\ - ldrb r2, [r4, 0x3]\n\ - lsrs r2, 6\n\ - lsls r3, 30\n\ - lsrs r3, 30\n\ - adds r0, r4, 0\n\ - bl CalcCenterToCornerVec\n\ -_080D06EE:\n\ - pop {r3,r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080D06FC: .4byte gSprites\n\ -_080D0700: .4byte sub_80D0704\n\ -.syntax divided\n"); -} -#endif -void sub_80D0704(struct Sprite* sprite) +void ClonedMinimizeSprite_Step(struct Sprite* sprite) { if (--sprite->data[0] == 0) { diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c index a9a42a695..23012fe8a 100644 --- a/src/battle/anim/unused_9.c +++ b/src/battle/anim/unused_9.c @@ -33,7 +33,6 @@ void sub_80CFDFC(struct Sprite* sprite) sprite->callback = sub_80CFE2C; } -#ifdef NONMATCHING static void sub_80CFE2C(struct Sprite* sprite) { u16 r7; @@ -44,9 +43,9 @@ static void sub_80CFE2C(struct Sprite* sprite) sprite->data[1] = 0; r5 = sprite->data[0]; r7 = gPlttBufferFaded[r5 + 8]; - for (i = 0; i < 8; i++) + for (i = 8; i < 16; i++) { - gPlttBufferFaded[r5 + i + 8] = gPlttBufferFaded[r5 + i + 9]; + gPlttBufferFaded[r5 + i] = gPlttBufferFaded[r5 + i + 1]; } gPlttBufferFaded[r5 + 15] = r7; @@ -54,67 +53,3 @@ static void sub_80CFE2C(struct Sprite* sprite) DestroyAnimSprite(sprite); } } -#else -NAKED -static void sub_80CFE2C(struct Sprite* sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - adds r4, r0, 0\n\ - ldrh r0, [r4, 0x30]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x30]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - bne _080CFE90\n\ - movs r0, 0\n\ - strh r0, [r4, 0x30]\n\ - ldrh r5, [r4, 0x2E]\n\ - ldr r1, _080CFE98 @ =gPlttBufferFaded\n\ - adds r0, r5, 0\n\ - adds r0, 0x8\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r7, [r0]\n\ - adds r6, r1, 0 @puts gPlttBufferFaded in r6\n\ - adds r1, r5, 0\n\ - adds r1, 0x9\n\ - lsls r0, r5, 1\n\ - adds r0, r6 \n\ - adds r2, r0, 0\n\ - adds r2, 0x10\n\ - movs r3, 0x7\n\ - lsls r1, 1\n\ - adds r1, r6 \n\ -_080CFE64:\n\ - ldrh r0, [r1]\n\ - strh r0, [r2]\n\ - adds r1, 0x2\n\ - adds r2, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _080CFE64\n\ - adds r0, r5, 0\n\ - adds r0, 0xF\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - strh r7, [r0]\n\ - ldrh r0, [r4, 0x32]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x32]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x18\n\ - bne _080CFE90\n\ - adds r0, r4, 0\n\ - bl DestroyAnimSprite\n\ -_080CFE90:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080CFE98: .4byte gPlttBufferFaded\n\ -.syntax divided\n"); -} -#endif diff --git a/src/data/heal_locations.h b/src/data/heal_locations.h index f764981bf..a6bdbdd15 100644 --- a/src/data/heal_locations.h +++ b/src/data/heal_locations.h @@ -1,25 +1,25 @@ static const struct HealLocation sHealLocations[] = { - {MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), 4, 2}, - {MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_2F), 4, 2}, - {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), 20, 17}, - {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), 19, 20}, - {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), 22, 6}, - {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), 16, 39}, - {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), 5, 7}, - {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), 24, 15}, - {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), 28, 17}, - {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), 43, 32}, - {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 27, 49}, - {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 5, 9}, - {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 14, 9}, - {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), 6, 17}, - {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), 2, 11}, - {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), 9, 7}, - {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), 14, 8}, - {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), 16, 4}, - {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), 8, 16}, - {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 18, 6}, - {MAP_GROUP(BATTLE_TOWER_OUTSIDE), MAP_NUM(BATTLE_TOWER_OUTSIDE), 14, 9}, - {MAP_GROUP(SOUTHERN_ISLAND_EXTERIOR), MAP_NUM(SOUTHERN_ISLAND_EXTERIOR), 15, 20}, + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F - 1] = {MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), 4, 2}, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F - 1] = {MAP_GROUP(LITTLEROOT_TOWN_MAYS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_MAYS_HOUSE_2F), 4, 2}, + [HEAL_LOCATION_PETALBURG_CITY - 1] = {MAP_GROUP(PETALBURG_CITY), MAP_NUM(PETALBURG_CITY), 20, 17}, + [HEAL_LOCATION_SLATEPORT_CITY - 1] = {MAP_GROUP(SLATEPORT_CITY), MAP_NUM(SLATEPORT_CITY), 19, 20}, + [HEAL_LOCATION_MAUVILLE_CITY - 1] = {MAP_GROUP(MAUVILLE_CITY), MAP_NUM(MAUVILLE_CITY), 22, 6}, + [HEAL_LOCATION_RUSTBORO_CITY - 1] = {MAP_GROUP(RUSTBORO_CITY), MAP_NUM(RUSTBORO_CITY), 16, 39}, + [HEAL_LOCATION_FORTREE_CITY - 1] = {MAP_GROUP(FORTREE_CITY), MAP_NUM(FORTREE_CITY), 5, 7}, + [HEAL_LOCATION_LILYCOVE_CITY - 1] = {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), 24, 15}, + [HEAL_LOCATION_MOSSDEEP_CITY - 1] = {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), 28, 17}, + [HEAL_LOCATION_SOOTOPOLIS_CITY - 1] = {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), 43, 32}, + [HEAL_LOCATION_EVER_GRANDE_CITY - 1] = {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 27, 49}, + [HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE - 1] = {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 5, 9}, + [HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE - 1] = {MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN), 14, 9}, + [HEAL_LOCATION_OLDALE_TOWN - 1] = {MAP_GROUP(OLDALE_TOWN), MAP_NUM(OLDALE_TOWN), 6, 17}, + [HEAL_LOCATION_DEWFORD_TOWN - 1] = {MAP_GROUP(DEWFORD_TOWN), MAP_NUM(DEWFORD_TOWN), 2, 11}, + [HEAL_LOCATION_LAVARIDGE_TOWN - 1] = {MAP_GROUP(LAVARIDGE_TOWN), MAP_NUM(LAVARIDGE_TOWN), 9, 7}, + [HEAL_LOCATION_FALLARBOR_TOWN - 1] = {MAP_GROUP(FALLARBOR_TOWN), MAP_NUM(FALLARBOR_TOWN), 14, 8}, + [HEAL_LOCATION_VERDANTURF_TOWN - 1] = {MAP_GROUP(VERDANTURF_TOWN), MAP_NUM(VERDANTURF_TOWN), 16, 4}, + [HEAL_LOCATION_PACIFIDLOG_TOWN - 1] = {MAP_GROUP(PACIFIDLOG_TOWN), MAP_NUM(PACIFIDLOG_TOWN), 8, 16}, + [HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE - 1] = {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), 18, 6}, + [HEAL_LOCATION_BATTLE_TOWER_OUTSIDE - 1] = {MAP_GROUP(BATTLE_TOWER_OUTSIDE), MAP_NUM(BATTLE_TOWER_OUTSIDE), 14, 9}, + [HEAL_LOCATION_SOUTHERN_ISLAND_EXTERIOR - 1] = {MAP_GROUP(SOUTHERN_ISLAND_EXTERIOR), MAP_NUM(SOUTHERN_ISLAND_EXTERIOR), 15, 20}, }; diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index 87b26da64..687193566 100644 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -99,7 +99,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayMachBike = {0xf const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayAcroBike = {0xffff, 0x1110, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_AcroBike, gObjectEventPicTable_MayAcroBike, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MaySurfing = {0xffff, 0x1110, 0x11ff, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_Surfing, gObjectEventPicTable_MaySurfing, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFieldMove = {0xffff, 0x1110, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_FieldMove, gObjectEventPicTable_MayFieldMove, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {0xffff, 0x110d, 0x11ff, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gObjectEventSubspriteTables_Truck, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Truck, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {0xffff, 0x110d, 0x11ff, 1152, 48, 48, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_32x32, gObjectEventSubspriteTables_48x48, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_Truck, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MachokeCarryingBox = {0xffff, 0x110e, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MachokeCarryingBox, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MachokeFacingAway = {0xffff, 0x110e, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MachokeFacingAway, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirchsBag = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gObjectEventSubspriteTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_BirchsBag, gDummySpriteAffineAnimTable}; @@ -119,7 +119,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cameraman = {0xfff const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanUnderwater = {0xffff, 0x1115, 0x11ff, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_BrendanUnderwater, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayUnderwater = {0xffff, 0x1115, 0x11ff, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, TRUE, TRACKS_FOOT, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_MayUnderwater, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MovingBox = {0xffff, 0x1112, 0x11ff, 128, 16, 16, 10, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gObjectEventSubspriteTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MovingBox, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {0xffff, 0x1113, 0x11ff, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_64x64, gObjectEventSubspriteTables_CableCar, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CableCar, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {0xffff, 0x1113, 0x11ff, 2048, 64, 64, 10, SHADOW_SIZE_M, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_64x64, gObjectEventSubspriteTables_64x64, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_CableCar, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist2 = {0xffff, 0x1103, 0x11ff, 256, 16, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gObjectEventSubspriteTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Scientist2, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man7 = {0xffff, 0x1104, 0x11ff, 256, 16, 32, 3, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gObjectEventSubspriteTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_Man7, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberM = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gObjectEventSubspriteTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_AquaMemberM, gDummySpriteAffineAnimTable}; @@ -145,8 +145,8 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleBoy3 = {0xff const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFishing = {0xffff, 0x1100, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_BrendanFishing, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFishing = {0xffff, 0x1110, 0x1102, 512, 32, 32, 0, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_32x32, gObjectEventSubspriteTables_32x32, gObjectEventImageAnimTable_Fishing, gObjectEventPicTable_MayFishing, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HotSpringsOldWoman = {0xffff, 0x1106, 0x11ff, 256, 16, 32, 5, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gFieldOamData_16x32, gObjectEventSubspriteTables_16x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_HotSpringsOldWoman, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {0xffff, 0x1114, 0x11ff, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_8x8, gObjectEventSubspriteTables_SSTidal, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SSTidal, gDummySpriteAffineAnimTable}; -const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow = {0xffff, 0x111a, 0x11ff, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_8x8, gObjectEventSubspriteTables_SubmarineShadow, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {0xffff, 0x1114, 0x11ff, 1920, 96, 40, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_8x8, gObjectEventSubspriteTables_96x40, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SSTidal, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow = {0xffff, 0x111a, 0x11ff, 1408, 88, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gFieldOamData_8x8, gObjectEventSubspriteTables_88x32, gObjectEventImageAnimTable_Standard, gObjectEventPicTable_SubmarineShadow, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PichuDoll = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gObjectEventSubspriteTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PichuDoll, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikachuDoll = {0xffff, 0x1104, 0x11ff, 128, 16, 16, 3, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gObjectEventSubspriteTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_PikachuDoll, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MarillDoll = {0xffff, 0x1103, 0x11ff, 128, 16, 16, 2, SHADOW_SIZE_S, TRUE, FALSE, TRACKS_NONE, &gFieldOamData_16x16, gObjectEventSubspriteTables_16x16, gObjectEventImageAnimTable_Inanimate, gObjectEventPicTable_MarillDoll, gDummySpriteAffineAnimTable}; diff --git a/src/data/object_events/object_event_subsprites.h b/src/data/object_events/object_event_subsprites.h index 49238f674..b9b05165f 100644 --- a/src/data/object_events/object_event_subsprites.h +++ b/src/data/object_events/object_event_subsprites.h @@ -103,7 +103,7 @@ const struct SubspriteTable gObjectEventSubspriteTables_32x32[] = { {2, gObjectEventSubspriteTable_32x32_4} }; -const struct Subsprite gObjectEventSubspriteTable_Truck_0[] = { +const struct Subsprite gObjectEventSubspriteTable_48x48[] = { {-24, -24, 1, 1, 0, 2}, { 8, -24, 1, 0, 4, 2}, {-24, -16, 1, 1, 6, 2}, @@ -118,66 +118,67 @@ const struct Subsprite gObjectEventSubspriteTable_Truck_0[] = { { 8, 16, 1, 0, 34, 2} }; -const struct SubspriteTable gObjectEventSubspriteTables_Truck[] = { - {12, gObjectEventSubspriteTable_Truck_0}, - {12, gObjectEventSubspriteTable_Truck_0}, - {12, gObjectEventSubspriteTable_Truck_0}, - {12, gObjectEventSubspriteTable_Truck_0}, - {12, gObjectEventSubspriteTable_Truck_0}, - {12, gObjectEventSubspriteTable_Truck_0} +const struct SubspriteTable gObjectEventSubspriteTables_48x48[] = { + {12, gObjectEventSubspriteTable_48x48}, + {12, gObjectEventSubspriteTable_48x48}, + {12, gObjectEventSubspriteTable_48x48}, + {12, gObjectEventSubspriteTable_48x48}, + {12, gObjectEventSubspriteTable_48x48}, + {12, gObjectEventSubspriteTable_48x48} }; -const struct Subsprite gObjectEventSubspriteTable_Unused_0[] = { +const struct Subsprite gObjectEventSubspriteTable_64x32_0[] = { {-32, -16, 1, 3, 0, 2} }; -const struct Subsprite gObjectEventSubspriteTable_Unused_1[] = { +const struct Subsprite gObjectEventSubspriteTable_64x32_1[] = { {-32, -16, 1, 3, 0, 1} }; -const struct Subsprite gObjectEventSubspriteTable_Unused_2[] = { +const struct Subsprite gObjectEventSubspriteTable_64x32_2[] = { {-32, -16, 1, 3, 0, 2} }; -const struct Subsprite gObjectEventSubspriteTable_Unused_3[] = { +const struct Subsprite gObjectEventSubspriteTable_64x32_3[] = { {-32, -16, 1, 3, 0, 2} }; -const struct SubspriteTable gObjectEventSubspriteTables_Unused[] = { +// Unused +const struct SubspriteTable gObjectEventSubspriteTables_64x32[] = { {0, NULL}, - {1, gObjectEventSubspriteTable_Unused_0}, - {1, gObjectEventSubspriteTable_Unused_1}, - {1, gObjectEventSubspriteTable_Unused_2}, - {1, gObjectEventSubspriteTable_Unused_3}, - {1, gObjectEventSubspriteTable_Unused_3} + {1, gObjectEventSubspriteTable_64x32_0}, + {1, gObjectEventSubspriteTable_64x32_1}, + {1, gObjectEventSubspriteTable_64x32_2}, + {1, gObjectEventSubspriteTable_64x32_3}, + {1, gObjectEventSubspriteTable_64x32_3} }; -const struct Subsprite gObjectEventSubspriteTable_CableCar_0[] = { +const struct Subsprite gObjectEventSubspriteTable_64x64_0[] = { {-32, -32, 0, 3, 0, 2} }; -const struct Subsprite gObjectEventSubspriteTable_CableCar_1[] = { +const struct Subsprite gObjectEventSubspriteTable_64x64_1[] = { {-32, -32, 0, 3, 0, 1} }; -const struct Subsprite gObjectEventSubspriteTable_CableCar_2[] = { +const struct Subsprite gObjectEventSubspriteTable_64x64_2[] = { {-32, -32, 0, 3, 0, 2} }; -const struct Subsprite gObjectEventSubspriteTable_CableCar_3[] = { +const struct Subsprite gObjectEventSubspriteTable_64x64_3[] = { {-32, -32, 0, 3, 0, 2} }; -const struct SubspriteTable gObjectEventSubspriteTables_CableCar[] = { +const struct SubspriteTable gObjectEventSubspriteTables_64x64[] = { {0, NULL}, - {1, gObjectEventSubspriteTable_CableCar_0}, - {1, gObjectEventSubspriteTable_CableCar_1}, - {1, gObjectEventSubspriteTable_CableCar_2}, - {1, gObjectEventSubspriteTable_CableCar_3}, - {1, gObjectEventSubspriteTable_CableCar_3} + {1, gObjectEventSubspriteTable_64x64_0}, + {1, gObjectEventSubspriteTable_64x64_1}, + {1, gObjectEventSubspriteTable_64x64_2}, + {1, gObjectEventSubspriteTable_64x64_3}, + {1, gObjectEventSubspriteTable_64x64_3} }; -const struct Subsprite gObjectEventSubspriteTable_SSTidal_0[] = { +const struct Subsprite gObjectEventSubspriteTable_96x40_0[] = { {-48, -20, 1, 1, 0, 2}, {-16, -20, 1, 1, 4, 2}, { 16, -20, 1, 1, 8, 2}, @@ -195,7 +196,7 @@ const struct Subsprite gObjectEventSubspriteTable_SSTidal_0[] = { { 16, 12, 1, 1, 56, 2} }; -const struct Subsprite gObjectEventSubspriteTable_SSTidal_1[] = { +const struct Subsprite gObjectEventSubspriteTable_96x40_1[] = { {-48, -20, 1, 1, 0, 1}, {-16, -20, 1, 1, 4, 1}, { 16, -20, 1, 1, 8, 1}, @@ -213,7 +214,7 @@ const struct Subsprite gObjectEventSubspriteTable_SSTidal_1[] = { { 16, 12, 1, 1, 56, 1} }; -const struct Subsprite gObjectEventSubspriteTable_SSTidal_2[] = { +const struct Subsprite gObjectEventSubspriteTable_96x40_2[] = { {-48, -20, 1, 1, 0, 2}, {-16, -20, 1, 1, 4, 2}, { 16, -20, 1, 1, 8, 2}, @@ -231,7 +232,7 @@ const struct Subsprite gObjectEventSubspriteTable_SSTidal_2[] = { { 16, 12, 1, 1, 56, 2} }; -const struct Subsprite gObjectEventSubspriteTable_SSTidal_3[] = { +const struct Subsprite gObjectEventSubspriteTable_96x40_3[] = { {-48, -20, 1, 1, 0, 1}, {-16, -20, 1, 1, 4, 1}, { 16, -20, 1, 1, 8, 1}, @@ -249,16 +250,17 @@ const struct Subsprite gObjectEventSubspriteTable_SSTidal_3[] = { { 16, 12, 1, 1, 56, 2} }; -const struct SubspriteTable gObjectEventSubspriteTables_SSTidal[] = { - {15, gObjectEventSubspriteTable_SSTidal_0}, - {15, gObjectEventSubspriteTable_SSTidal_0}, - {15, gObjectEventSubspriteTable_SSTidal_1}, - {15, gObjectEventSubspriteTable_SSTidal_2}, - {15, gObjectEventSubspriteTable_SSTidal_3}, - {15, gObjectEventSubspriteTable_SSTidal_3} +// Used by SS Tidal +const struct SubspriteTable gObjectEventSubspriteTables_96x40[] = { + {15, gObjectEventSubspriteTable_96x40_0}, + {15, gObjectEventSubspriteTable_96x40_0}, + {15, gObjectEventSubspriteTable_96x40_1}, + {15, gObjectEventSubspriteTable_96x40_2}, + {15, gObjectEventSubspriteTable_96x40_3}, + {15, gObjectEventSubspriteTable_96x40_3} }; -const struct Subsprite gObjectEventSubspriteTable_SubmarineShadow_0[] = { +const struct Subsprite gObjectEventSubspriteTable_88x32_0[] = { {-48, -20, 1, 1, 0, 2}, {-16, -20, 1, 1, 4, 2}, { 16, -20, 1, 0, 8, 2}, @@ -277,7 +279,7 @@ const struct Subsprite gObjectEventSubspriteTable_SubmarineShadow_0[] = { { 32, 4, 0, 0, 43, 2} }; -const struct Subsprite gObjectEventSubspriteTable_SubmarineShadow_1[] = { +const struct Subsprite gObjectEventSubspriteTable_88x32_1[] = { {-48, -20, 1, 1, 0, 1}, {-16, -20, 1, 1, 4, 1}, { 16, -20, 1, 0, 8, 1}, @@ -296,7 +298,7 @@ const struct Subsprite gObjectEventSubspriteTable_SubmarineShadow_1[] = { { 32, 4, 0, 0, 43, 1} }; -const struct Subsprite gObjectEventSubspriteTable_SubmarineShadow_2[] = { +const struct Subsprite gObjectEventSubspriteTable_88x32_2[] = { {-48, -20, 1, 1, 0, 2}, {-16, -20, 1, 1, 4, 2}, { 16, -20, 1, 0, 8, 2}, @@ -315,7 +317,7 @@ const struct Subsprite gObjectEventSubspriteTable_SubmarineShadow_2[] = { { 32, 4, 0, 0, 43, 2} }; -const struct Subsprite gObjectEventSubspriteTable_SubmarineShadow_3[] = { +const struct Subsprite gObjectEventSubspriteTable_88x32_3[] = { {-48, -20, 1, 1, 0, 1}, {-16, -20, 1, 1, 4, 1}, { 16, -20, 1, 0, 8, 1}, @@ -334,12 +336,13 @@ const struct Subsprite gObjectEventSubspriteTable_SubmarineShadow_3[] = { { 32, 4, 0, 0, 43, 2} }; -const struct SubspriteTable gObjectEventSubspriteTables_SubmarineShadow[] = { - {16, gObjectEventSubspriteTable_SubmarineShadow_0}, - {16, gObjectEventSubspriteTable_SubmarineShadow_0}, - {16, gObjectEventSubspriteTable_SubmarineShadow_1}, - {16, gObjectEventSubspriteTable_SubmarineShadow_2}, - {16, gObjectEventSubspriteTable_SubmarineShadow_3}, - {16, gObjectEventSubspriteTable_SubmarineShadow_3} +// Used by the submarine shadow +const struct SubspriteTable gObjectEventSubspriteTables_88x32[] = { + {16, gObjectEventSubspriteTable_88x32_0}, + {16, gObjectEventSubspriteTable_88x32_0}, + {16, gObjectEventSubspriteTable_88x32_1}, + {16, gObjectEventSubspriteTable_88x32_2}, + {16, gObjectEventSubspriteTable_88x32_3}, + {16, gObjectEventSubspriteTable_88x32_3} }; #endif //POKERUBY_OBJECT_EVENT_SUBSPRITES_H diff --git a/src/decompress.c b/src/decompress.c index d6c52439f..c0158ada8 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -111,3 +111,147 @@ void Unused_LZDecompressWramIndirect(const void **src, void *dest) { LZ77UnCompWram(*src, dest); } + +void unref_sub_800D42C(s32 object_size, s32 object_count, u8 *src_tiles, u8 *dest_tiles) +{ + /* + This function appears to emulate behaviour found in the GB(C) versions regarding how the Pokemon images + are stitched together to be displayed on the battle screen. + Given "compacted" tiles, an object count and a bounding box/object size, place the tiles in such a way + that the result will have each object centered in a 8x8 tile canvas. + */ + s32 i, j, k, l; + u8 *src = src_tiles, *dest = dest_tiles; + u8 bottom_off; + + if (object_size & 1) + { + // Object size is odd + bottom_off = (object_size >> 1) + 4; + for (l = 0; l < object_count; l++) + { + // Clear all unused rows of tiles plus the half-tile required due to centering + for (j = 0; j < 8-object_size; j++) + { + for (k = 0; k < 8; k++) + { + for (i = 0; i < 16; i++) + { + if (j % 2 == 0) + { + // Clear top half of top tile and bottom half of bottom tile when on even j + ((dest+i) + (k << 5))[((j >> 1) << 8)] = 0; + ((bottom_off << 8) + (dest+i) + (k << 5) + 16)[((j >> 1) << 8)] = 0; + } + else + { + // Clear bottom half of top tile and top half of tile following bottom tile when on odd j + ((dest+i) + (k << 5) + 16)[((j >> 1) << 8)] = 0; + ((bottom_off << 8) + (dest+i) + (k << 5) + 256)[((j >> 1) << 8)] = 0; + } + } + } + } + + // Clear the columns to the left and right that wont be used completely + // Unlike the previous loops, this will clear the later used space as well + for (j = 0; j < 2; j++) + { + for (i = 0; i < 8; i++) + { + for (k = 0; k < 32; k++) + { + // Left side + ((dest+k) + (i << 8))[(j << 5)] = 0; + // Right side + ((dest+k) + (i << 8))[(j << 5)+192] = 0; + } + } + } + + // Skip the top row and first tile on the second row for objects of size 5 + if (object_size == 5) dest += 0x120; + + // Copy tile data + for (j = 0; j < object_size; j++) + { + for (k = 0; k < object_size; k++) + { + for (i = 0; i < 4; i++) + { + // Offset the tile by +4px in both x and y directions + (dest + (i << 2))[18] = (src + (i << 2))[0]; + (dest + (i << 2))[19] = (src + (i << 2))[1]; + (dest + (i << 2))[48] = (src + (i << 2))[2]; + (dest + (i << 2))[49] = (src + (i << 2))[3]; + + (dest + (i << 2))[258] = (src + (i << 2))[16]; + (dest + (i << 2))[259] = (src + (i << 2))[17]; + (dest + (i << 2))[288] = (src + (i << 2))[18]; + (dest + (i << 2))[289] = (src + (i << 2))[19]; + } + src += 32; + dest += 32; + } + + // At the end of a row, skip enough tiles to get to the beginning of the next row + if (object_size == 7) dest += 0x20; + else if (object_size == 5) dest += 0x60; + } + + // Skip remaining unused space to go to the beginning of the next object + if (object_size == 7) dest += 0x100; + else if (object_size == 5) dest += 0x1e0; + } + } + else + { + // Object size is even + for (i = 0; i < object_count; i++) + { + // For objects of size 6, the first and last row and column will be cleared + // While the remaining space will be filled with actual data + if (object_size == 6) + { + for (k = 0; k < 256; k++) { + *dest = 0; + dest++; + } + } + + for (j = 0; j < object_size; j++) + { + if (object_size == 6) + { + for (k = 0; k < 32; k++) { + *dest = 0; + dest++; + } + } + + // Copy tile data + for (k = 0; k < 32 * object_size; k++) { + *dest = *src; + src++; + dest++; + } + + if (object_size == 6) + { + for (k = 0; k < 32; k++) { + *dest = 0; + dest++; + } + } + } + + if (object_size == 6) + { + for (k = 0; k < 256; k++) { + *dest = 0; + dest++; + } + } + } + } +} diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 81e352e70..91e9da961 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -17,6 +17,7 @@ #include "constants/maps.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" +#include "constants/trainer_types.h" // this file was known as evobjmv.c in Game Freak's original source @@ -1386,7 +1387,7 @@ u8 SpawnSpecialObjectEventParametrized(u8 graphicsId, u8 movementType, u8 localI objectEventTemplate.movementType = movementType; objectEventTemplate.movementRangeX = 0; objectEventTemplate.movementRangeY = 0; - objectEventTemplate.trainerType = 0; + objectEventTemplate.trainerType = TRAINER_TYPE_NONE; objectEventTemplate.trainerRange_berryTreeId = 0; return SpawnSpecialObjectEvent(&objectEventTemplate); } @@ -2225,7 +2226,8 @@ static u16 GetObjectEventFlagIdByObjectEventId(u8 objectEventId) return GetObjectEventFlagIdByLocalIdAndMap(gObjectEvents[objectEventId].localId, gObjectEvents[objectEventId].mapNum, gObjectEvents[objectEventId].mapGroup); } -u8 unref_sub_805C5D0(u8 localId, u8 mapNum, u8 mapGroup) +// Unused +u8 GetObjectTrainerTypeByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { u8 objectEventId; @@ -2235,7 +2237,8 @@ u8 unref_sub_805C5D0(u8 localId, u8 mapNum, u8 mapGroup) return gObjectEvents[objectEventId].trainerType; } -u8 unref_sub_805C60C(u8 objectEventId) +// Unused +u8 GetObjectTrainerTypeByObjectEventId(u8 objectEventId) { return gObjectEvents[objectEventId].trainerType; } @@ -2435,7 +2438,7 @@ bool8 ObjectEventIsTrainerAndCloseToPlayer(struct ObjectEvent *objectEvent) { return FALSE; } - if (objectEvent->trainerType != 1 && objectEvent->trainerType != 3) + if (objectEvent->trainerType != TRAINER_TYPE_NORMAL && objectEvent->trainerType != TRAINER_TYPE_BURIED) { return FALSE; } diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 4e4ff7432..c757a4798 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1009,19 +1009,19 @@ static void sub_8127FD4(struct ObjectEvent *objectEvent, struct Sprite *sprite) StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[objectEvent->movementDirection]); } -#ifdef NONMATCHING static void sub_812800C(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - s16 x; - s16 y; u8 i; + s16 x = objectEvent->currentCoords.x; + s16 y = objectEvent->currentCoords.y; + s32 spriteY = sprite->pos2.y; - x = objectEvent->currentCoords.x; - y = objectEvent->currentCoords.y; - if (sprite->pos2.y == 0 && (x != sprite->data[6] || y != sprite->data[7])) + if (spriteY == 0 && (x != sprite->data[6] || y != sprite->data[7])) { - sprite->data[5] = sprite->pos2.y; - for (sprite->data[6] = x, sprite->data[7] = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data[6], y = sprite->data[7]) + sprite->data[5] = spriteY; + sprite->data[6] = x; + sprite->data[7] = y; + for (i = DIR_SOUTH; i <= DIR_EAST; i++, x = sprite->data[6], y = sprite->data[7]) { MoveCoords(i, &x, &y); if (MapGridGetZCoordAt(x, y) == 3) @@ -1032,87 +1032,6 @@ static void sub_812800C(struct ObjectEvent *objectEvent, struct Sprite *sprite) } } } -#else -NAKED static void sub_812800C(struct ObjectEvent *objectEvent, struct Sprite *sprite) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r8\n" - "\tpush {r7}\n" - "\tsub sp, 0x4\n" - "\tadds r4, r1, 0\n" - "\tldrh r2, [r0, 0x10]\n" - "\tmov r1, sp\n" - "\tstrh r2, [r1]\n" - "\tldrh r1, [r0, 0x12]\n" - "\tmov r0, sp\n" - "\tadds r0, 0x2\n" - "\tstrh r1, [r0]\n" - "\tmovs r2, 0x26\n" - "\tldrsh r3, [r4, r2]\n" - "\tmov r8, r0\n" - "\tcmp r3, 0\n" - "\tbne _08128094\n" - "\tmov r0, sp\n" - "\tmovs r5, 0\n" - "\tldrsh r2, [r0, r5]\n" - "\tmovs r5, 0x3A\n" - "\tldrsh r0, [r4, r5]\n" - "\tcmp r2, r0\n" - "\tbne _08128048\n" - "\tlsls r0, r1, 16\n" - "\tasrs r0, 16\n" - "\tmovs r5, 0x3C\n" - "\tldrsh r1, [r4, r5]\n" - "\tcmp r0, r1\n" - "\tbeq _08128094\n" - "_08128048:\n" - "\tstrh r3, [r4, 0x38]\n" - "\tstrh r2, [r4, 0x3A]\n" - "\tmov r1, r8\n" - "\tmovs r2, 0\n" - "\tldrsh r0, [r1, r2]\n" - "\tstrh r0, [r4, 0x3C]\n" - "\tmovs r5, 0x1\n" - "\tmov r7, r8\n" - "\tmov r6, sp\n" - "_0812805A:\n" - "\tadds r0, r5, 0\n" - "\tmov r1, sp\n" - "\tadds r2, r7, 0\n" - "\tbl MoveCoords\n" - "\tmovs r1, 0\n" - "\tldrsh r0, [r6, r1]\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r7, r2]\n" - "\tbl MapGridGetZCoordAt\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x3\n" - "\tbne _08128080\n" - "\tldrh r0, [r4, 0x38]\n" - "\tadds r0, 0x1\n" - "\tstrh r0, [r4, 0x38]\n" - "\tb _08128094\n" - "_08128080:\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tldrh r0, [r4, 0x3A]\n" - "\tstrh r0, [r6]\n" - "\tldrh r0, [r4, 0x3C]\n" - "\tmov r1, r8\n" - "\tstrh r0, [r1]\n" - "\tcmp r5, 0x4\n" - "\tbls _0812805A\n" - "_08128094:\n" - "\tadd sp, 0x4\n" - "\tpop {r3}\n" - "\tmov r8, r3\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); -} -#endif static void sub_81280A0(struct ObjectEvent *objectEvent, struct Sprite *linkedSprite, struct Sprite *sprite) { @@ -1453,152 +1372,35 @@ void WaitFieldEffectSpriteAnim(struct Sprite *sprite) UpdateObjectEventSpriteVisibility(sprite, FALSE); } -#ifdef NONMATCHING static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset) { u8 i; - s16 xlo; - s16 xhi; - s16 lx; - s16 lyhi; - s16 ly; - s16 ylo; - s16 yhi; - struct ObjectEvent *objectEvent; // r4 - const struct ObjectEventGraphicsInfo *graphicsInfo; // destroyed - struct Sprite *linkedSprite; // r5 + s16 var, xhi, lyhi, yhi, ylo; + const struct ObjectEventGraphicsInfo *graphicsInfo; // Unused Variable + struct Sprite *linkedSprite; SetObjectSubpriorityByZCoord(z, sprite, offset); - for (i = 0; i < 16; i ++) + for (i = 0; i < OBJECT_EVENTS_COUNT; i ++) { - objectEvent = &gObjectEvents[i]; + struct ObjectEvent *objectEvent = &gObjectEvents[i]; if (objectEvent->active) { graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); linkedSprite = &gSprites[objectEvent->spriteId]; xhi = sprite->pos1.x + sprite->centerToCornerVecX; - xlo = sprite->pos1.x - sprite->centerToCornerVecX; - lx = linkedSprite->pos1.x; - if (xhi < lx && xlo > lx) + var = sprite->pos1.x - sprite->centerToCornerVecX; + if (xhi < linkedSprite->pos1.x && var > linkedSprite->pos1.x) { lyhi = linkedSprite->pos1.y + linkedSprite->centerToCornerVecY; - ly = linkedSprite->pos1.y; + var = linkedSprite->pos1.y; ylo = sprite->pos1.y - sprite->centerToCornerVecY; yhi = ylo + linkedSprite->centerToCornerVecY; - if ((lyhi < yhi || lyhi < ylo) && ly > yhi) + if ((lyhi < yhi || lyhi < ylo) && var > yhi && sprite->subpriority <= linkedSprite->subpriority) { - if (sprite->subpriority <= linkedSprite->subpriority) - { - sprite->subpriority = linkedSprite->subpriority + 2; - break; - } + sprite->subpriority = linkedSprite->subpriority + 2; + break; } } } } -} -#else -NAKED static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tadds r6, r0, 0\n" - "\tadds r0, r1, 0\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tadds r1, r6, 0\n" - "\tbl SetObjectSubpriorityByZCoord\n" - "\tmovs r7, 0\n" - "_08128842:\n" - "\tlsls r0, r7, 3\n" - "\tadds r0, r7\n" - "\tlsls r0, 2\n" - "\tldr r1, _081288DC @ =gObjectEvents\n" - "\tadds r4, r0, r1\n" - "\tldrb r0, [r4]\n" - "\tlsls r0, 31\n" - "\tcmp r0, 0\n" - "\tbeq _081288E4\n" - "\tldrb r0, [r4, 0x5]\n" - "\tbl GetObjectEventGraphicsInfo\n" - "\tldrb r1, [r4, 0x4]\n" - "\tlsls r0, r1, 4\n" - "\tadds r0, r1\n" - "\tlsls r0, 2\n" - "\tldr r1, _081288E0 @ =gSprites\n" - "\tadds r5, r0, r1\n" - "\tadds r0, r6, 0\n" - "\tadds r0, 0x28\n" - "\tmovs r2, 0\n" - "\tldrsb r2, [r0, r2]\n" - "\tldrh r0, [r6, 0x20]\n" - "\tadds r1, r0, r2\n" - "\tsubs r0, r2\n" - "\tlsls r0, 16\n" - "\tlsrs r4, r0, 16\n" - "\tlsls r1, 16\n" - "\tasrs r1, 16\n" - "\tmovs r0, 0x20\n" - "\tldrsh r2, [r5, r0]\n" - "\tcmp r1, r2\n" - "\tbge _081288E4\n" - "\tlsls r0, r4, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, r2\n" - "\tble _081288E4\n" - "\tadds r0, r5, 0\n" - "\tadds r0, 0x29\n" - "\tmovs r3, 0\n" - "\tldrsb r3, [r0, r3]\n" - "\tldrh r2, [r5, 0x22]\n" - "\tadds r2, r3\n" - "\tldrh r4, [r5, 0x22]\n" - "\tadds r0, r6, 0\n" - "\tadds r0, 0x29\n" - "\tmovs r1, 0\n" - "\tldrsb r1, [r0, r1]\n" - "\tldrh r0, [r6, 0x22]\n" - "\tsubs r0, r1\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tadds r3, r0, r3\n" - "\tlsls r2, 16\n" - "\tasrs r2, 16\n" - "\tlsls r3, 16\n" - "\tasrs r3, 16\n" - "\tcmp r2, r3\n" - "\tblt _081288BC\n" - "\tcmp r2, r0\n" - "\tbge _081288E4\n" - "_081288BC:\n" - "\tlsls r0, r4, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, r3\n" - "\tble _081288E4\n" - "\tadds r2, r6, 0\n" - "\tadds r2, 0x43\n" - "\tadds r0, r5, 0\n" - "\tadds r0, 0x43\n" - "\tldrb r1, [r0]\n" - "\tldrb r0, [r2]\n" - "\tcmp r0, r1\n" - "\tbhi _081288E4\n" - "\tadds r0, r1, 0x2\n" - "\tstrb r0, [r2]\n" - "\tb _081288EE\n" - "\t.align 2, 0\n" - "_081288DC: .4byte gObjectEvents\n" - "_081288E0: .4byte gSprites\n" - "_081288E4:\n" - "\tadds r0, r7, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tcmp r7, 0xF\n" - "\tbls _08128842\n" - "_081288EE:\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0"); -} -#endif +}
\ No newline at end of file diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 324dab9c8..cd6e67c8c 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -26,6 +26,7 @@ #include "constants/moves.h" #include "constants/songs.h" #include "constants/species.h" +#include "constants/trainer_types.h" EWRAM_DATA struct PlayerAvatar gPlayerAvatar = {0}; @@ -1197,7 +1198,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) playerObjEventTemplate.movementType = MOVEMENT_TYPE_PLAYER; playerObjEventTemplate.movementRangeX = 0; playerObjEventTemplate.movementRangeY = 0; - playerObjEventTemplate.trainerType = 0; + playerObjEventTemplate.trainerType = TRAINER_TYPE_NONE; playerObjEventTemplate.trainerRange_berryTreeId = 0; playerObjEventTemplate.script = NULL; playerObjEventTemplate.flagId = 0; diff --git a/src/heal_location.c b/src/heal_location.c index 3bb24e1a1..5eda24d67 100644 --- a/src/heal_location.c +++ b/src/heal_location.c @@ -1,6 +1,8 @@ #include "global.h" #include "heal_location.h" #include "constants/maps.h" +#include "constants/heal_locations.h" + #include "data/heal_locations.h" u32 GetHealLocationIndexByMap(u16 mapGroup, u16 mapNum) diff --git a/src/pokedex.c b/src/pokedex.c index 8d7ecb896..ea6c69478 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1961,8 +1961,8 @@ static void sub_808D640(void) static void SortPokedex(u8 dexMode, u8 sortMode) { + s16 i, r5, r10; u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever. - s16 i; gPokedexView->pokemonListCount = 0; @@ -2004,18 +2004,13 @@ static void SortPokedex(u8 dexMode, u8 sortMode) } else { - bool32 r10; - s16 r5; - - r10 = r5 = i = 0; - for (i = 0; i < vars[0]; i++) + for (i = 0, r5= 0, r10 = 0; i < vars[0]; i++) { vars[2] = i + 1; if (GetSetPokedexFlag(vars[2], 0)) r10 = 1; if (r10) { - asm(""); //Needed to match for some reason gPokedexView->unk0[r5].dexNum = vars[2]; gPokedexView->unk0[r5].seen = GetSetPokedexFlag(vars[2], 0); gPokedexView->unk0[r5].owned = GetSetPokedexFlag(vars[2], 1); diff --git a/src/region_map.c b/src/region_map.c index 7ec1b1976..8c4e694bc 100644 --- a/src/region_map.c +++ b/src/region_map.c @@ -1187,7 +1187,7 @@ static const u8 sMapHealLocations[][3] = {MAP_GROUP(LILYCOVE_CITY), MAP_NUM(LILYCOVE_CITY), HEAL_LOCATION_LILYCOVE_CITY}, {MAP_GROUP(MOSSDEEP_CITY), MAP_NUM(MOSSDEEP_CITY), HEAL_LOCATION_MOSSDEEP_CITY}, {MAP_GROUP(SOOTOPOLIS_CITY), MAP_NUM(SOOTOPOLIS_CITY), HEAL_LOCATION_SOOTOPOLIS_CITY}, - {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), HEAL_LOCATION_EVER_GRANDE_CITY_1}, + {MAP_GROUP(EVER_GRANDE_CITY), MAP_NUM(EVER_GRANDE_CITY), HEAL_LOCATION_EVER_GRANDE_CITY}, {MAP_GROUP(ROUTE101), MAP_NUM(ROUTE101), 0}, {MAP_GROUP(ROUTE102), MAP_NUM(ROUTE102), 0}, {MAP_GROUP(ROUTE103), MAP_NUM(ROUTE103), 0}, @@ -1633,10 +1633,10 @@ void sub_80FC69C(void) sub_8053538(HEAL_LOCATION_BATTLE_TOWER_OUTSIDE); break; case MAPSEC_LITTLEROOT_TOWN: - sub_8053538((gSaveBlock2.playerGender == MALE) ? HEAL_LOCATION_LITTLEROOT_TOWN_1 : HEAL_LOCATION_LITTLEROOT_TOWN_2); + sub_8053538((gSaveBlock2.playerGender == MALE) ? HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE : HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE); break; case MAPSEC_EVER_GRANDE_CITY: - sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && sFlyDataPtr->regionMap.everGrandeCityArea == 0) ? HEAL_LOCATION_EVER_GRANDE_CITY_2 : HEAL_LOCATION_EVER_GRANDE_CITY_1); + sub_8053538((FlagGet(FLAG_SYS_POKEMON_LEAGUE_FLY) && sFlyDataPtr->regionMap.everGrandeCityArea == 0) ? HEAL_LOCATION_EVER_GRANDE_CITY_POKEMON_LEAGUE : HEAL_LOCATION_EVER_GRANDE_CITY); break; default: if (sMapHealLocations[sFlyDataPtr->regionMap.mapSectionId][2] != 0) diff --git a/src/trainer_see.c b/src/trainer_see.c index 5fc0a346d..caeb22a79 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -10,6 +10,7 @@ #include "util.h" #include "constants/event_object_movement.h" #include "constants/field_effects.h" +#include "constants/trainer_types.h" static bool8 CheckTrainer(u8); static void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3); @@ -43,7 +44,7 @@ bool8 CheckTrainers(void) for (objEventId = 0; objEventId < 16; objEventId++) { if (gObjectEvents[objEventId].active - && (gObjectEvents[objEventId].trainerType == 1 || gObjectEvents[objEventId].trainerType == 3) + && (gObjectEvents[objEventId].trainerType == TRAINER_TYPE_NORMAL || gObjectEvents[objEventId].trainerType == TRAINER_TYPE_BURIED) && CheckTrainer(objEventId)) return TRUE; } @@ -83,14 +84,14 @@ static bool8 TrainerCanApproachPlayer(struct ObjectEvent *trainerObj) u8 approachDistance; PlayerGetDestCoords(&x, &y); - if (trainerObj->trainerType == 1) // can only see in one direction + if (trainerObj->trainerType == TRAINER_TYPE_NORMAL) // can only see in one direction { approachDistance = sDirectionalApproachDistanceFuncs[trainerObj->facingDirection - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); return CheckPathBetweenTrainerAndPlayer(trainerObj, approachDistance, trainerObj->facingDirection); } - else // can see in all directions + else // TRAINER_TYPE_SEE_ALL_DIRECTIONS, TRAINER_TYPE_BURIED { - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(sDirectionalApproachDistanceFuncs); i++) { approachDistance = sDirectionalApproachDistanceFuncs[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); if (CheckPathBetweenTrainerAndPlayer(trainerObj, approachDistance, i + 1)) // directions are 1-4 instead of 0-3. south north west east @@ -2366,11 +2366,12 @@ s8 sub_80C019C(TVShow tvShows[]) return -1; } -#ifdef NONMATCHING void sub_80C01D4(void) { u16 i; - for (i=0; i<24; i++) + u16 j; + + for (i = 0; i < 24; i++) { switch (gSaveBlock1.tvShows[i].common.kind) { @@ -2380,251 +2381,58 @@ void sub_80C01D4(void) case TVSHOW_MASS_OUTBREAK: break; case TVSHOW_FAN_CLUB_LETTER: - sub_80C03C8((&gSaveBlock1.tvShows[i])->fanclubLetter.species, i); + j = (&gSaveBlock1.tvShows[i])->fanclubLetter.species; + sub_80C03C8(j, i); break; case TVSHOW_PKMN_FAN_CLUB_OPINIONS: - sub_80C03C8((&gSaveBlock1.tvShows[i])->fanclubOpinions.var02, i); + j = (&gSaveBlock1.tvShows[i])->fanclubOpinions.var02; + sub_80C03C8(j, i); break; case TVSHOW_UNKN_SHOWTYPE_04: - sub_80C03C8((&gSaveBlock1.tvShows[i])->unkShow04.var06, i); + j = (&gSaveBlock1.tvShows[i])->unkShow04.var06; + sub_80C03C8(j, i); break; case TVSHOW_NAME_RATER_SHOW: - sub_80C03C8((&gSaveBlock1.tvShows[i])->nameRaterShow.species, i); - sub_80C03C8((&gSaveBlock1.tvShows[i])->nameRaterShow.var1C, i); + j = (&gSaveBlock1.tvShows[i])->nameRaterShow.species; + sub_80C03C8(j, i); + j = (&gSaveBlock1.tvShows[i])->nameRaterShow.var1C; + sub_80C03C8(j, i); break; case TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE: - sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainer.species, i); + j = (&gSaveBlock1.tvShows[i])->bravoTrainer.species; + sub_80C03C8(j, i); break; case TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE: - sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainerTower.species, i); - sub_80C03C8((&gSaveBlock1.tvShows[i])->bravoTrainerTower.defeatedSpecies, i); + j = (&gSaveBlock1.tvShows[i])->bravoTrainerTower.species; + sub_80C03C8(j, i); + j = (&gSaveBlock1.tvShows[i])->bravoTrainerTower.defeatedSpecies; + sub_80C03C8(j, i); break; case TVSHOW_POKEMON_TODAY_CAUGHT: - sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonToday.species, i); + j = (&gSaveBlock1.tvShows[i])->pokemonToday.species; + sub_80C03C8(j, i); break; case TVSHOW_POKEMON_TODAY_FAILED: - sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonTodayFailed.species, i); - sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonTodayFailed.species2, i); + j = (&gSaveBlock1.tvShows[i])->pokemonTodayFailed.species; + sub_80C03C8(j, i); + j = (&gSaveBlock1.tvShows[i])->pokemonTodayFailed.species2; + sub_80C03C8(j, i); break; case TVSHOW_FISHING_ADVICE: - sub_80C03C8((&gSaveBlock1.tvShows[i])->pokemonAngler.var04, i); + j = (&gSaveBlock1.tvShows[i])->pokemonAngler.var04; + sub_80C03C8(j, i); break; case TVSHOW_WORLD_OF_MASTERS: - sub_80C03C8((&gSaveBlock1.tvShows[i])->worldOfMasters.var08, i); - sub_80C03C8((&gSaveBlock1.tvShows[i])->worldOfMasters.var04, i); + j = (&gSaveBlock1.tvShows[i])->worldOfMasters.var08; + sub_80C03C8(j, i); + j = (&gSaveBlock1.tvShows[i])->worldOfMasters.var04; + sub_80C03C8(j, i); break; default: sub_80C03A8(i); } } } -#else -NAKED -void sub_80C01D4(void) { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - movs r6, 0\n\ -_080C01D8:\n\ - ldr r0, _080C01F8 @ =gSaveBlock1\n\ - lsls r2, r6, 3\n\ - adds r1, r2, r6\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldr r0, _080C01FC @ =0x00002738\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x29\n\ - bls _080C01EE\n\ - b _default\n\ -_080C01EE:\n\ - lsls r0, 2\n\ - ldr r1, _080C0200 @ =_080C0204\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_080C01F8: .4byte gSaveBlock1\n\ -_080C01FC: .4byte 0x00002738\n\ -_080C0200: .4byte _080C0204\n\ - .align 2, 0\n\ -_080C0204:\n\ - .4byte _break\n\ - .4byte _fanclubLetter @ TVSHOW_FAN_CLUB_LETTER\n\ - .4byte _break @ TVSHOW_RECENT_HAPPENINGS\n\ - .4byte _fanclubOpinions @ TVSHOW_PKMN_FAN_CLUB_OPINIONS\n\ - .4byte _showtype4 @ TVSHOW_UNKN_SHOWTYPE_04\n\ - .4byte _nameRater @ TVSHOW_NAME_RATER_SHOW\n\ - .4byte _bravoTrainerContest @ TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE\n\ - .4byte _bravoTrainerTower @ TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _pokemonTodayS @ TVSHOW_POKEMON_TODAY_CAUGHT\n\ - .4byte _break @ TVSHOW_SMART_SHOPPER\n\ - .4byte _pokemonTodayF @ TVSHOW_POKEMON_TODAY_FAILED\n\ - .4byte _fishing @ TVSHOW_FISHING_ADVICE\n\ - .4byte _worldOfMasters @ TVSHOW_WORLD_OF_MASTERS\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _default\n\ - .4byte _break @ TVSHOW_MASS_OUTBREAK\n\ -_fanclubLetter:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C02B8 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x2]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C02B8: .4byte gSaveBlock1 + 0x2738\n\ -_fanclubOpinions:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C02C8 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x2]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C02C8: .4byte gSaveBlock1 + 0x2738\n\ -_showtype4:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C02D8 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x6]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C02D8: .4byte gSaveBlock1 + 0x2738\n\ -_nameRater:\n\ - adds r4, r2, r6\n\ - lsls r4, 2\n\ - ldr r0, _080C02F4 @ =gSaveBlock1 + 0x2738\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0x2]\n\ - lsls r5, r6, 24\n\ - lsrs r5, 24\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - ldrh r0, [r4, 0x1C]\n\ - b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C02F4: .4byte gSaveBlock1 + 0x2738\n\ -_bravoTrainerContest:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C0304 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x2]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C0304: .4byte gSaveBlock1 + 0x2738\n\ -_bravoTrainerTower:\n\ - adds r4, r2, r6\n\ - lsls r4, 2\n\ - ldr r0, _080C0320 @ =gSaveBlock1 + 0x2738\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0xA]\n\ - lsls r5, r6, 24\n\ - lsrs r5, 24\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - ldrh r0, [r4, 0x14]\n\ - b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C0320: .4byte gSaveBlock1 + 0x2738\n\ -_pokemonTodayS:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C0330 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x10]\n\ - b _checkSpecies1 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C0330: .4byte gSaveBlock1 + 0x2738\n\ -_pokemonTodayF:\n\ - adds r4, r2, r6\n\ - lsls r4, 2\n\ - ldr r0, _080C034C @ =gSaveBlock1 + 0x2738\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0xC]\n\ - lsls r5, r6, 24\n\ - lsrs r5, 24\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - ldrh r0, [r4, 0xE]\n\ - b _checkSpecies2 @ sub_80C03C8(r0, i)\n\ - .align 2, 0\n\ -_080C034C: .4byte gSaveBlock1 + 0x2738\n\ -_fishing:\n\ - adds r0, r2, r6\n\ - lsls r0, 2\n\ - ldr r1, _080C0364 @ =gSaveBlock1 + 0x2738\n\ - adds r0, r1\n\ - ldrh r0, [r0, 0x4]\n\ -_checkSpecies1:\n\ - lsls r1, r6, 24\n\ - lsrs r1, 24\n\ - bl sub_80C03C8\n\ - b _break\n\ - .align 2, 0\n\ -_080C0364: .4byte gSaveBlock1 + 0x2738\n\ -_worldOfMasters:\n\ - adds r4, r2, r6\n\ - lsls r4, 2\n\ - ldr r0, _080C0388 @ =gSaveBlock1 + 0x2738\n\ - adds r4, r0\n\ - ldrh r0, [r4, 0x8]\n\ - lsls r5, r6, 24\n\ - lsrs r5, 24\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - ldrh r0, [r4, 0x4]\n\ -_checkSpecies2:\n\ - adds r1, r5, 0\n\ - bl sub_80C03C8\n\ - b _break\n\ - .align 2, 0\n\ -_080C0388: .4byte gSaveBlock1 + 0x2738\n\ -_default:\n\ - lsls r0, r6, 24\n\ - lsrs r0, 24\n\ - bl sub_80C03A8\n\ -_break:\n\ - adds r0, r6, 0x1\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - cmp r6, 0x17\n\ - bhi _080C03A0\n\ - b _080C01D8\n\ -_080C03A0:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ -.syntax divided\n"); -} -#endif void sub_80C03A8(u8 showidx) { diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 47eb81541..1ad55dbee 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -86,20 +86,12 @@ static bool8 CheckFeebas(void) x -= 7; y -= 7; -#ifdef NONMATCHING + if (y >= gRoute119WaterTileData[3 * 0 + 0] && y <= gRoute119WaterTileData[3 * 0 + 1]) + route119section = 0; if (y >= gRoute119WaterTileData[3 * 1 + 0] && y <= gRoute119WaterTileData[3 * 1 + 1]) route119section = 1; if (y >= gRoute119WaterTileData[3 * 2 + 0] && y <= gRoute119WaterTileData[3 * 2 + 1]) route119section = 2; -#else - { - register const u16 *arr asm("r0"); - if (y >= (arr = gRoute119WaterTileData)[3 * 1 + 0] && y <= arr[3 * 1 + 1]) - route119section = 1; - if (y >= arr[3 * 2 + 0] && y <= arr[3 * 2 + 1]) - route119section = 2; - } -#endif if (Random() % 100 > 49) //50% chance of encountering Feebas return FALSE; |