pmd-red/src/code_809C5C4.c
AnonymousRandomPerson 86157a2c5c Label sub_80099F0 as SetFontsBaseColor
Per @Kermalis
2024-11-01 19:44:07 -04:00

428 lines
9.3 KiB
C

#include "global.h"
#include "items.h"
#include "memory.h"
#include "game_options.h"
#include "event_flag.h"
#include "ground_main.h"
#include "code_80A26CC.h"
struct unkStruct_3001B68
{
u32 unk0;
u32 unk4;
u16 unk8;
u16 unkA;
u8 unkC;
u8 unkD;
u8 unkE;
u32 unk10;
s16 unk14;
s16 unk16;
u8 unk18;
u8 unk19;
u32 unk1C;
u8 unk20;
};
IWRAM_DATA struct unkStruct_3001B68 *gUnknown_3001B68 = {0};
struct unkStruct_20399E0
{
u32 unk0;
s32 unk4;
u32 unk8;
};
extern struct unkStruct_20399E0 *gUnknown_20399E0;
void sub_809C63C();
u8 sub_809C740(void);
void nullsub_107();
void nullsub_108();
void nullsub_109();
void nullsub_110();
void nullsub_111();
void nullsub_112();
void nullsub_113();
void nullsub_114();
void nullsub_115();
void nullsub_116();
void sub_809C5C4(void)
{
gUnknown_3001B68 = MemoryAlloc(sizeof(struct unkStruct_3001B68), 6);
gUnknown_3001B68->unk0 = 0;
gUnknown_3001B68->unk4 = 0;
gUnknown_3001B68->unk8 = 0;
gUnknown_3001B68->unkA = 0;
gUnknown_3001B68->unkD = 0;
gUnknown_3001B68->unkE = 0;
gUnknown_3001B68->unk10 = 0;
gUnknown_3001B68->unk14 = 0xffff;
gUnknown_3001B68->unk16 = 0x23;
gUnknown_3001B68->unk18 = 0;
gUnknown_3001B68->unk19 = 0x3f;
gUnknown_3001B68->unk1C = 0;
gUnknown_3001B68->unk20 = 0;
nullsub_107();
sub_809C63C();
}
void sub_809C618(void)
{
sub_809C63C();
nullsub_107();
nullsub_108();
MemoryFree(gUnknown_3001B68);
gUnknown_3001B68 = NULL;
}
void sub_809C63C(void)
{
nullsub_108();
gUnknown_3001B68->unk1C = 0;
gUnknown_3001B68->unk20 = 0;
}
void sub_809C658(void)
{
switch(gUnknown_3001B68->unkA) {
case 3:
nullsub_111();
nullsub_112();
nullsub_113();
break;
case 4:
nullsub_114();
nullsub_115();
nullsub_116();
break;
case 2:
nullsub_109();
nullsub_110();
break;
case 5:
nullsub_107();
nullsub_108();
break;
case 0:
case 1:
nullsub_107();
nullsub_108();
break;
}
}
void sub_809C6CC(u16 param_1)
{
if(gUnknown_3001B68->unk8 != param_1)
{
gUnknown_3001B68->unk8 = param_1;
gUnknown_3001B68->unkE = 0;
}
}
void sub_809C6EC(void)
{
if (sub_8098F88() == 0) {
if (gGameOptionsRef->unkC == 0) {
sub_809C6CC(4);
}
else {
sub_809C6CC(3);
}
}
else {
sub_809C6CC(5);
}
}
u16 sub_809C724(void)
{
return gUnknown_3001B68->unk8;
}
u8 sub_809C730(void)
{
return sub_809C740();
}
u8 sub_809C740(void)
{
if(gUnknown_3001B68->unk0 == 0)
return 1;
else
return 0;
}
// Called in a number of places, like when the player changes the team leader in sub_80278B4().
void nullsub_104(void)
{ }
void sub_809C760(void)
{
gUnknown_3001B68->unkE = 1;
}
void sub_809C770(s16 param_1, s16 param_2)
{
u8 uVar2;
u8 uVar3;
s32 iVar5;
u32 uVar6;
s32 param_1_s32;
s32 param_2_s32;
param_1_s32 = param_1;
param_2_s32 = param_2;
if (gUnknown_3001B68->unkE != 0) {
gUnknown_3001B68->unkE = 0;
return;
}
if (gUnknown_3001B68->unk8 == 0) {
sub_809C6EC();
}
uVar2 = gUnknown_3001B68->unk18;
uVar3 = gUnknown_3001B68->unk19;
switch(param_2_s32) {
case 9:
uVar2 = sub_8002658(param_1_s32);
if (uVar2 == 0) {
return;
}
uVar6 = 1;
break;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 10:
case 0xb:
uVar6 = 1;
uVar2 = 0;
break;
case 0x23:
switch((s16)(param_1_s32)) {
case 0xA4:
case 0xA5:
case 0xA8:
case 0xA9:
case 0xAA:
case 0xAE:
case 0xAF:
case 0xB0:
case 0xB1:
uVar6 = 0;
break;
default:
return;
}
break;
case 0x24:
case 0x25:
case 0x26:
uVar6 = 0;
break;
default:
switch((s16)(param_2_s32 - 0xc)) {
case 1:
iVar5 = 0;
break;
case 6:
case 7:
iVar5 = 7;
break;
case 8:
case 9:
iVar5 = 9;
break;
case 10:
iVar5 = 10;
break;
case 0xc:
case 0xd:
iVar5 = 0xb;
break;
case 0xe:
case 0xf:
iVar5 = 0xd;
break;
case 0x10:
case 0x11:
iVar5 = 0xf;
break;
case 0x12:
case 0x13:
iVar5 = 0x11;
break;
case 0x14:
case 0x15:
iVar5 = 0x13;
break;
case 0x16:
iVar5 = 0x20;
break;
case 0:
default:
iVar5 = (s16)GetScriptVarValue(NULL,DUNGEON_ENTER);
break;
}
if (iVar5 == -1) {
return;
}
uVar3 = sub_80A2740(iVar5);
uVar6 = 2;
break;
}
if (gUnknown_3001B68->unk10 != uVar6) {
gUnknown_3001B68->unk0 = 2;
gUnknown_3001B68->unkC = 1;
gUnknown_3001B68->unk20 = 1;
}
else
{
if (uVar6 == 1) {
if ((uVar2 != gUnknown_3001B68->unk18) ||
(gUnknown_3001B68->unk14 != param_1_s32)) {
gUnknown_3001B68->unkC = 1;
gUnknown_3001B68->unk20 = 1;
}
else {
if ((uVar2 == 0) && (gUnknown_3001B68->unk16 != param_2_s32)) {
gUnknown_3001B68->unkC = 1;
}
}
}
else if ((uVar6 == 2) &&
((uVar3 != gUnknown_3001B68->unk19 || (gUnknown_3001B68->unk16 != param_2_s32))))
{
gUnknown_3001B68->unkC = 1;
gUnknown_3001B68->unk20 = 1;
}
}
if (gUnknown_3001B68->unkC != 0) {
gUnknown_3001B68->unk10 = uVar6;
gUnknown_3001B68->unk14 = param_1_s32;
gUnknown_3001B68->unk16 = param_2_s32;
gUnknown_3001B68->unk18 = uVar2;
gUnknown_3001B68->unk19 = uVar3;
if (gUnknown_3001B68->unk8 != 4) {
gUnknown_3001B68->unkC = 0;
gUnknown_3001B68->unk20 = 0;
}
}
}
void nullsub_105(void) {}
void sub_809CA20(void)
{
u16 *puVar1;
if (gUnknown_3001B68->unk0 != 0) {
gUnknown_3001B68->unk0 = 0;
gUnknown_3001B68->unk4 = 0x1f;
gUnknown_3001B68->unkC = 1;
}
if (gUnknown_3001B68->unkC != 0) {
puVar1 = &gUnknown_3001B68->unk8;
gUnknown_3001B68->unkA = *puVar1;
if ((*puVar1 == 4) && (gUnknown_3001B68->unk10 == 0)) {
gUnknown_3001B68->unkA = 2;
gUnknown_3001B68->unk1C = 0;
gUnknown_3001B68->unk20 = 0;
}
switch(gUnknown_3001B68->unkA) {
case 3:
nullsub_111();
nullsub_113();
nullsub_112();
gUnknown_3001B68->unkD = 1;
break;
case 4:
nullsub_114();
nullsub_115();
nullsub_116();
break;
case 2:
nullsub_109();
nullsub_110();
break;
case 5:
nullsub_107();
nullsub_108();
break;
case 0:
case 1:
nullsub_107();
nullsub_108();
break;
}
gUnknown_3001B68->unkC = 0;
}
else {
switch(gUnknown_3001B68->unkA) {
case 3:
nullsub_113();
break;
case 4:
nullsub_116();
case 0:
case 1:
case 2:
case 5:
break;
}
}
}
void nullsub_106(void) {}
void nullsub_107(void) {}
void nullsub_108(void) {}
void nullsub_109(void) {}
void nullsub_110(void) {}
void nullsub_111(void) {}
void nullsub_112(void) {}
void nullsub_113(void) {}
void nullsub_114(void) {}
void nullsub_115(void) {}
void nullsub_116(void) {}
void sub_809CB50(void)
{
gUnknown_20399E0 = MemoryAlloc(sizeof(struct unkStruct_20399E0), 6);
gUnknown_20399E0->unk4 = -1;
gUnknown_20399E0->unk8 = 0;
}
void sub_809CB74(void) {
MemoryFree(gUnknown_20399E0);
gUnknown_20399E0 = NULL;
}
void sub_809CB8C(void) {
ClearScriptVarArray(NULL, STATION_ITEM_TEMP);
ClearScriptVarArray(NULL, DELIVER_ITEM_TEMP);
}
bool8 HasItemInInventory(u8 item)
{
if(FindItemInInventory(item) >= 0)
return TRUE;
else
return FALSE;
}