mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-24 13:31:19 -05:00
194 lines
3.6 KiB
C
194 lines
3.6 KiB
C
#include "global.h"
|
|
#include "dungeon.h"
|
|
|
|
|
|
struct MissionText
|
|
{
|
|
u8 *text;
|
|
u8 unk4;
|
|
u8 unk5;
|
|
u8 unk6;
|
|
u8 unk7;
|
|
};
|
|
|
|
extern struct MissionText gStoryMissionText[];
|
|
extern const u8 gUnknown_8109CC0[];
|
|
extern const u8 gDummyScenarioText[];
|
|
extern const char gFinalScenarioText[];
|
|
extern const char gMeetNinetalesText[];
|
|
extern const char gAvoidCaptureText[];
|
|
|
|
extern u8 sub_80A270C();
|
|
extern void sub_80015C0(u8, u8);
|
|
extern u8 sub_80A2728(s16);
|
|
extern bool8 sub_8001D08(u32, u32 ,s32);
|
|
extern u32 sub_8001784(u32, u32, u16);
|
|
extern void sub_800199C(u32, u32, u32, u32);
|
|
extern bool8 sub_80023E4(u32);
|
|
|
|
const u8 *sub_809747C(s16 index)
|
|
{
|
|
if(index == 0xD)
|
|
{
|
|
return gDummyScenarioText;
|
|
}
|
|
else
|
|
{
|
|
return GetDungeonName1(sub_80A270C(index));
|
|
}
|
|
}
|
|
|
|
const u8 *sub_80974A0(s16 index)
|
|
{
|
|
if(index == 0xD)
|
|
{
|
|
return gDummyScenarioText;
|
|
}
|
|
else
|
|
{
|
|
return GetDungeonName1(sub_80A270C(index));
|
|
}
|
|
}
|
|
|
|
const u8 *GetCurrentMissionText(s16 index)
|
|
{
|
|
if(index < 0x1F)
|
|
{
|
|
struct MissionText *mt = &gStoryMissionText[index];
|
|
return mt->text;
|
|
}
|
|
else
|
|
{
|
|
return gUnknown_8109CC0;
|
|
}
|
|
}
|
|
|
|
void sub_80974E8(void)
|
|
{
|
|
sub_80015C0(0, 0x2E);
|
|
sub_80015C0(0, 0x2F);
|
|
}
|
|
|
|
void nullsub_208(void)
|
|
{
|
|
}
|
|
|
|
bool8 sub_8097504(s16 mazeIndex)
|
|
{
|
|
s32 mazeIndex_s32;
|
|
|
|
#ifndef NONMATCHING
|
|
register s32 mazeIndex_s32_1 asm("r1");
|
|
#else
|
|
s32 mazeIndex_s32_1;
|
|
#endif
|
|
s32 uVar3;
|
|
|
|
mazeIndex_s32 = mazeIndex;
|
|
mazeIndex_s32_1 = mazeIndex_s32;
|
|
|
|
if(mazeIndex_s32 < 17)
|
|
{
|
|
switch(mazeIndex_s32) {
|
|
case 2:
|
|
case 10:
|
|
case 11:
|
|
case 12:
|
|
uVar3 = 14;
|
|
break;
|
|
case 0:
|
|
case 1:
|
|
case 5:
|
|
case 7:
|
|
case 9:
|
|
case 14:
|
|
uVar3 = 15;
|
|
break;
|
|
case 3:
|
|
case 4:
|
|
case 6:
|
|
case 8:
|
|
return TRUE;
|
|
case 13:
|
|
uVar3 = 6;
|
|
break;
|
|
default:
|
|
return TRUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (mazeIndex_s32_1 > 22) return FALSE;
|
|
if (mazeIndex_s32_1 == 22) return FALSE;
|
|
if (mazeIndex_s32_1 == 21) return FALSE;
|
|
uVar3 = 6;
|
|
}
|
|
|
|
if (!sub_80023E4(uVar3)) {
|
|
return FALSE;
|
|
}
|
|
else {
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
// TODO: this should probably be bool8 but can't get a match just yet
|
|
bool32 IsMazeCompleted(s16 mazeIndex)
|
|
{
|
|
bool32 mazeCompletion;
|
|
|
|
mazeCompletion = sub_8001784(0, 0x2e, mazeIndex);
|
|
if (mazeCompletion) {
|
|
mazeCompletion = TRUE;
|
|
}
|
|
return mazeCompletion;
|
|
}
|
|
|
|
void sub_80975A8(s16 param_1,u8 param_2)
|
|
{
|
|
u16 param_1_u16 = param_1;
|
|
sub_800199C(0,0x2e,param_1_u16,param_2);
|
|
}
|
|
|
|
const u8 *sub_80975C4(s16 index)
|
|
{
|
|
return GetDungeonName1(sub_80A2728(index));
|
|
}
|
|
|
|
const char *sub_80975DC(u32 r0)
|
|
{
|
|
// TODO: slight hack but matches
|
|
r0 <<= 16;
|
|
if((0xffe90000 + r0) >> 16 < 2)
|
|
if(sub_8001D08(0x3, 0xE, -1))
|
|
return gMeetNinetalesText;
|
|
else
|
|
return gAvoidCaptureText;
|
|
else
|
|
return gFinalScenarioText;
|
|
}
|
|
|
|
bool8 HasCompletedAllMazes(void)
|
|
{
|
|
s32 index;
|
|
for(index = 0; index < 17; index++)
|
|
{
|
|
if(!(bool8)IsMazeCompleted(index))
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
bool8 sub_8097640(void)
|
|
{
|
|
if(sub_8001784(0, 0x2E, 0x1F) == 0 && HasCompletedAllMazes())
|
|
{
|
|
sub_800199C(0, 0x2E, 0x1F, 1);
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|