summaryrefslogtreecommitdiff
path: root/src/trainer_hill.c
diff options
context:
space:
mode:
authorhondew <pokehondew@gmail.com>2020-08-30 14:14:38 -0400
committerhondew <pokehondew@gmail.com>2020-08-30 14:14:38 -0400
commite46b35455d1e2af8c8c2d291ce1cc28e682d9095 (patch)
tree76855f3dedad94ba34a8f8b40811a1005107b5ae /src/trainer_hill.c
parent328aecc96e690c437e52663a1445417e8aa78df6 (diff)
parenta9719c92bfa4c6b6dcf57e9516f184721152ad80 (diff)
Merge branch 'master' into pokeball-doc
Diffstat (limited to 'src/trainer_hill.c')
-rw-r--r--src/trainer_hill.c98
1 files changed, 26 insertions, 72 deletions
diff --git a/src/trainer_hill.c b/src/trainer_hill.c
index d6cb49837..bed8df2e0 100644
--- a/src/trainer_hill.c
+++ b/src/trainer_hill.c
@@ -64,7 +64,7 @@ static void TrainerHillSetPlayerLost(void);
static void TrainerHillGetChallengeStatus(void);
static void BufferChallengeTime(void);
static void GetAllFloorsUsed(void);
-static void ClearVarResult(void);
+static void GetInEReaderMode(void);
static void IsTrainerHillChallengeActive(void);
static void ShowTrainerHillPostBattleText(void);
static void SetAllTrainerFlags(void);
@@ -202,7 +202,7 @@ static const u16 *const *const sPrizeListSets[] =
sPrizeLists2
};
-static const u16 sUnknown_0862A5D4[] = INCBIN_U16("graphics/pokenav/862A5D4.gbapal");
+static const u16 sEReader_Pal[] = INCBIN_U16("graphics/misc/trainer_hill_ereader.gbapal");
static const u8 sRecordWinColors[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GREY, TEXT_COLOR_LIGHT_GREY};
static const struct TrHillTag *const sDataPerTag[] =
@@ -233,7 +233,7 @@ static void (* const sHillFunctions[])(void) =
[TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS] = TrainerHillGetChallengeStatus,
[TRAINER_HILL_FUNC_GET_CHALLENGE_TIME] = BufferChallengeTime,
[TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED] = GetAllFloorsUsed,
- [TRAINER_HILL_FUNC_CLEAR_RESULT] = ClearVarResult,
+ [TRAINER_HILL_FUNC_GET_IN_EREADER_MODE] = GetInEReaderMode,
[TRAINER_HILL_FUNC_IN_CHALLENGE] = IsTrainerHillChallengeActive,
[TRAINER_HILL_FUNC_POST_BATTLE_TEXT] = ShowTrainerHillPostBattleText,
[TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS] = SetAllTrainerFlags,
@@ -356,7 +356,7 @@ static void SetUpDataStruct(void)
{
if (sHillData == NULL)
{
- sHillData = AllocZeroed(sizeof(*sHillData));
+ sHillData = AllocZeroed(sizeof(struct TrHillStruct2));
sHillData->floorId = gMapHeader.mapLayoutId - LAYOUT_TRAINER_HILL_1F;
CpuCopy32(sDataPerTag[gSaveBlock1Ptr->trainerHill.tag], &sHillData->tag, sizeof(sHillData->tag) + 4 * sizeof(struct TrHillFloor));
nullsub_2();
@@ -546,10 +546,11 @@ static void GetAllFloorsUsed(void)
}
// May have been dummied. Every time this is called a conditional for var result occurs afterwards
-static void ClearVarResult(void)
+// Relation to E-Reader is an assumption, most dummied Trainer Hill code seems to be JP E-Reader mode related
+static void GetInEReaderMode(void)
{
SetUpDataStruct();
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
FreeDataStruct();
}
@@ -671,70 +672,23 @@ bool32 LoadTrainerHillFloorObjectEventScripts(void)
return TRUE;
}
-// Functionally equivalent.
-#ifdef NONMATCHING
static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
{
- u32 var0, var1, var2, var3;
+ u16 var0, var1;
+ #ifndef NONMATCHING
+ register u16 var2 asm("r3"); //compiler keeps wanting to "mov r3, 0x80" instead of "mov r2 0x80" and then later "add r3, r2, 0"
+ #else
+ u16 var2;
+ #endif
+ u16 var3;
- var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit)) & 1;
- var1 = sHillData->floors[floorId].display.data[arg2 * arg3 + bit];
- var3 = 0x200;
- var2 = 0x3000;
+ var0 = (sHillData->floors[floorId].display.unk3A0[arg2] >> (15 - bit) & 1);
+ var1 = sHillData->floors[floorId].display.data[arg3 * arg2 + bit];
+ var2 = 0x200;
+ var3 = 0x3000;
- return ((var0 << 10) | var2) | (var1 | var3);
-}
-#else
-NAKED
-static u32 sub_81D5F58(u8 floorId, u32 bit, u32 arg2, u32 arg3)
-{
- asm_unified("\n\
- push {r4,r5,lr}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- ldr r4, =sHillData\n\
- ldr r4, [r4]\n\
- mov r12, r4\n\
- lsls r4, r2, 1\n\
- lsls r5, r0, 4\n\
- subs r5, r0\n\
- lsls r5, 3\n\
- subs r5, r0\n\
- lsls r5, 3\n\
- adds r4, r5\n\
- movs r0, 0xE8\n\
- lsls r0, 2\n\
- add r0, r12\n\
- adds r0, r4\n\
- ldrh r0, [r0]\n\
- movs r4, 0xF\n\
- subs r4, r1\n\
- asrs r0, r4\n\
- movs r4, 0x1\n\
- ands r0, r4\n\
- muls r2, r3\n\
- adds r2, r1\n\
- adds r2, r5\n\
- movs r1, 0xA8\n\
- lsls r1, 2\n\
- add r1, r12\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- movs r2, 0x80\n\
- lsls r2, 2\n\
- adds r3, r2, 0\n\
- movs r2, 0xC0\n\
- lsls r2, 6\n\
- lsls r0, 10\n\
- orrs r0, r2\n\
- orrs r1, r3\n\
- orrs r0, r1\n\
- pop {r4,r5}\n\
- pop {r1}\n\
- bx r1\n\
- .pool");
+ return ((var0 << 10) | var3) | (var1 | var2);
}
-#endif // NONMATCHING
void GenerateTrainerHillFloorLayout(u16 *mapArg)
{
@@ -997,11 +951,11 @@ static void SetAllTrainerFlags(void)
gSaveBlock2Ptr->frontier.trainerFlags = 0xFF;
}
-// Palette never loaded, sub_81D6534 always FALSE
-void sub_81D64C0(void)
+// Palette never loaded, OnTrainerHillEReaderChallengeFloor always FALSE
+void TryLoadTrainerHillEReaderPalette(void)
{
- if (sub_81D6534() == TRUE)
- LoadPalette(sUnknown_0862A5D4, 0x70, 0x20);
+ if (OnTrainerHillEReaderChallengeFloor() == TRUE)
+ LoadPalette(sEReader_Pal, 0x70, 0x20);
}
static void GetGameSaved(void)
@@ -1020,13 +974,13 @@ static void ClearGameSaved(void)
}
// Always FALSE
-bool32 sub_81D6534(void)
+bool32 OnTrainerHillEReaderChallengeFloor(void)
{
if (!InTrainerHillChallenge() || GetCurrentTrainerHillMapId() == TRAINER_HILL_ENTRANCE)
return FALSE;
- ClearVarResult();
- if (gSpecialVar_Result == 0)
+ GetInEReaderMode();
+ if (gSpecialVar_Result == FALSE)
return FALSE;
else
return TRUE;