sovereignx/src/mevent_news.c

149 lines
2.8 KiB
C
Raw Normal View History

2019-03-26 19:11:55 +00:00
#include "global.h"
#include "mevent.h"
#include "random.h"
#include "event_data.h"
#include "mevent_news.h"
static u32 sub_801DCAC(struct WonderNewsMetadata *);
static void sub_801DD10(struct WonderNewsMetadata *);
static u32 sub_801DD44(struct WonderNewsMetadata *);
static void sub_801DCD8(struct WonderNewsMetadata *);
static void sub_801DCCC(struct WonderNewsMetadata *);
2019-03-26 19:11:55 +00:00
void GenerateRandomWonderNews(u32 a0)
2019-03-26 19:11:55 +00:00
{
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
2019-03-26 19:11:55 +00:00
data->unk_0_0 = a0;
2019-03-26 19:11:55 +00:00
switch (a0)
{
case 0:
break;
case 1:
case 2:
data->unk_1 = (Random() % 15) + 16;
2019-03-26 19:11:55 +00:00
break;
case 3:
data->unk_1 = (Random() % 15) + 1;
2019-03-26 19:11:55 +00:00
break;
}
}
void InitSavedWonderNews(void)
2019-03-26 19:11:55 +00:00
{
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
2019-03-26 19:11:55 +00:00
data->unk_0_0 = 0;
data->unk_0_2 = 0;
data->unk_0_5 = 0;
data->unk_1 = 0;
2019-03-26 19:11:55 +00:00
VarSet(VAR_0x402E, 0);
}
void sub_801DBDC(void)
{
u16 *r4 = GetVarPointer(VAR_0x402E);
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
struct WonderNewsMetadata r0 = *data;
2019-03-26 19:11:55 +00:00
if ((u8)r0.unk_0_5 > 4 && ++(*r4) > 0x1f3)
{
data->unk_0_5 = 0;
2019-03-26 19:11:55 +00:00
*r4 = 0;
}
}
// Unused
2019-03-26 19:11:55 +00:00
u16 sub_801DC20(void)
{
u16 *r6 = &gSpecialVar_Result;
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
2019-03-26 19:11:55 +00:00
u16 r5;
if (!IsMysteryEventEnabled() || !ValidateSavedWonderNews())
2019-03-26 19:11:55 +00:00
return 0;
r5 = sub_801DD44(data);
2019-03-26 19:11:55 +00:00
switch (r5)
{
case 0:
break;
case 1:
*r6 = sub_801DCAC(data);
2019-03-26 19:11:55 +00:00
break;
case 2:
*r6 = sub_801DCAC(data);
2019-03-26 19:11:55 +00:00
break;
case 3:
break;
case 4:
*r6 = sub_801DCAC(data);
sub_801DCD8(data);
2019-03-26 19:11:55 +00:00
break;
case 5:
*r6 = sub_801DCAC(data);
sub_801DCCC(data);
2019-03-26 19:11:55 +00:00
break;
case 6:
break;
}
return r5;
}
static u32 sub_801DCAC(struct WonderNewsMetadata *data)
2019-03-26 19:11:55 +00:00
{
u32 r4;
data->unk_0_0 = 0;
r4 = data->unk_1 + 0x84;
data->unk_1 = 0;
sub_801DD10(data);
2019-03-26 19:11:55 +00:00
return r4;
}
static void sub_801DCCC(struct WonderNewsMetadata *data)
2019-03-26 19:11:55 +00:00
{
data->unk_0_2 = 0;
2019-03-26 19:11:55 +00:00
}
static void sub_801DCD8(struct WonderNewsMetadata *data)
2019-03-26 19:11:55 +00:00
{
data->unk_0_2++;
if ((u8)data->unk_0_2 > 4)
data->unk_0_2 = 4;
2019-03-26 19:11:55 +00:00
}
static void sub_801DD10(struct WonderNewsMetadata *data)
2019-03-26 19:11:55 +00:00
{
data->unk_0_5++;
if ((u8)data->unk_0_5 > 5)
data->unk_0_5 = 5;
2019-03-26 19:11:55 +00:00
}
static u32 sub_801DD44(struct WonderNewsMetadata *data)
2019-03-26 19:11:55 +00:00
{
struct WonderNewsMetadata r0;
if ((u8)data->unk_0_5 == 5)
2019-03-26 19:11:55 +00:00
return 6;
r0 = *data;
2019-03-26 19:11:55 +00:00
switch (r0.unk_0_0)
{
case 0:
return 3;
case 1:
return 1;
case 2:
return 2;
case 3:
if ((u8)r0.unk_0_2 < 3)
return 4;
return 5;
default:
AGB_ASSERT(0);
return 0;
}
}