blob: ec93d293edbc940271de4c5be34269213bf93721 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
#include "global.h"
#include "mystery_gift.h"
#include "random.h"
#include "event_data.h"
#include "wonder_news.h"
/*
Wonder News related functions.
Because this feature is largely unused, the names in here are
mostly nebulous and without a real indication of purpose.
*/
enum {
NEWS_VAL_INVALID,
NEWS_VAL_RECV_FRIEND,
NEWS_VAL_RECV_WIRELESS,
NEWS_VAL_NONE,
NEWS_VAL_SENT,
NEWS_VAL_SENT_MAX,
NEWS_VAL_GET_MAX,
};
static u32 GetNewsId(struct WonderNewsMetadata *);
static void IncrementGetNewsCounter(struct WonderNewsMetadata *);
static u32 GetNewsValByNewsType(struct WonderNewsMetadata *);
static void IncrementSentNewsCounter(struct WonderNewsMetadata *);
static void ResetSentNewsCounter(struct WonderNewsMetadata *);
void GenerateRandomWonderNews(u32 newsType)
{
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
data->newsType = newsType;
switch (newsType)
{
case WONDER_NEWS_NONE:
break;
case WONDER_NEWS_RECV_FRIEND:
case WONDER_NEWS_RECV_WIRELESS:
data->rand = (Random() % 15) + 16;
break;
case WONDER_NEWS_SENT:
data->rand = (Random() % 15) + 1;
break;
}
}
void InitSavedWonderNews(void)
{
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
data->newsType = WONDER_NEWS_NONE;
data->sentCounter = 0;
data->getCounter = 0;
data->rand = 0;
VarSet(VAR_WONDER_NEWS_COUNTER, 0);
}
// Unused
static void TryIncrementWonderNewsVar(void)
{
u16 *var = GetVarPointer(VAR_WONDER_NEWS_COUNTER);
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
if (data->getCounter > 4 && ++(*var) >= 500)
{
data->getCounter = 0;
*var = 0;
}
}
// Unused
u16 RetrieveWonderNewsVal(void)
{
u16 *result = &gSpecialVar_Result;
struct WonderNewsMetadata *data = GetSavedWonderNewsMetadata();
u16 newsVal;
// Checks if Mystery Event is enabled, not Mystery Gift?
if (!IsMysteryEventEnabled() || !ValidateSavedWonderNews())
return 0;
newsVal = GetNewsValByNewsType(data);
switch (newsVal)
{
case NEWS_VAL_RECV_FRIEND:
*result = GetNewsId(data);
break;
case NEWS_VAL_RECV_WIRELESS:
*result = GetNewsId(data);
break;
case NEWS_VAL_SENT:
*result = GetNewsId(data);
IncrementSentNewsCounter(data);
break;
case NEWS_VAL_SENT_MAX:
*result = GetNewsId(data);
ResetSentNewsCounter(data);
break;
case NEWS_VAL_INVALID:
case NEWS_VAL_NONE:
case NEWS_VAL_GET_MAX:
break;
}
return newsVal;
}
static u32 GetNewsId(struct WonderNewsMetadata *data)
{
u32 id;
data->newsType = WONDER_NEWS_NONE;
id = data->rand + 132;
data->rand = 0;
IncrementGetNewsCounter(data);
return id;
}
static void ResetSentNewsCounter(struct WonderNewsMetadata *data)
{
data->sentCounter = 0;
}
static void IncrementSentNewsCounter(struct WonderNewsMetadata *data)
{
data->sentCounter++;
if (data->sentCounter > 4)
data->sentCounter = 4;
}
static void IncrementGetNewsCounter(struct WonderNewsMetadata *data)
{
data->getCounter++;
if (data->getCounter > 5)
data->getCounter = 5;
}
static u32 GetNewsValByNewsType(struct WonderNewsMetadata *data)
{
if (data->getCounter == 5)
return NEWS_VAL_GET_MAX;
switch (data->newsType)
{
case WONDER_NEWS_NONE:
return NEWS_VAL_NONE;
case WONDER_NEWS_RECV_FRIEND:
return NEWS_VAL_RECV_FRIEND;
case WONDER_NEWS_RECV_WIRELESS:
return NEWS_VAL_RECV_WIRELESS;
case WONDER_NEWS_SENT:
if (data->sentCounter < 3)
return NEWS_VAL_SENT;
return NEWS_VAL_SENT_MAX;
default:
AGB_ASSERT(0);
return NEWS_VAL_INVALID;
}
}
|