summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle/anim/shadow_minimize.c182
-rw-r--r--src/battle/anim/unused_9.c69
-rw-r--r--src/data/heal_locations.h44
-rw-r--r--src/data/object_events/object_event_graphics_info.h8
-rw-r--r--src/data/object_events/object_event_subsprites.h103
-rw-r--r--src/decompress.c144
-rw-r--r--src/event_object_movement.c11
-rw-r--r--src/field_effect_helpers.c238
-rw-r--r--src/field_player_avatar.c3
-rw-r--r--src/heal_location.c2
-rw-r--r--src/pokedex.c9
-rw-r--r--src/region_map.c6
-rw-r--r--src/trainer_see.c9
-rw-r--r--src/tv.c254
-rw-r--r--src/wild_encounter.c12
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
diff --git a/src/tv.c b/src/tv.c
index dd4116bf6..b425ebf0f 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -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;