-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCheckerGen6XY.cs
More file actions
300 lines (234 loc) · 12.4 KB
/
CheckerGen6XY.cs
File metadata and controls
300 lines (234 loc) · 12.4 KB
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
namespace MissingEventFlagsCheckerPlugin
{
internal class CheckerGen6XY : EventFlagsChecker
{
static string? s_chkdb_res = null;
const int Src_EventFlags = 0;
const int Src_WorkArea = 1;
const int Src_BadgeFlags = 2;
const int Src_EvtEX = 5;
const int Src_TrainerEX = 6;
const int Src_GiftEX = 7;
const int Src_Dex = 8;
protected override void InitData(SaveFile savFile)
{
m_savFile = savFile;
#if DEBUG
// Force refresh
s_chkdb_res = null;
#endif
s_chkdb_res ??= ReadResFile("chkdb_gen6xy");
m_flagsSourceInfo["0"] = 0; // TODO: remove this
m_flagsSourceInfo["EvtFlags"] = Src_EventFlags;
m_flagsSourceInfo["WorkArea"] = Src_WorkArea;
m_flagsSourceInfo["BadgeFlags"] = Src_BadgeFlags;
m_flagsSourceInfo["EvtEX"] = Src_EvtEX;
m_flagsSourceInfo["TrainerEX"] = Src_TrainerEX;
m_flagsSourceInfo["GiftEX"] = Src_GiftEX;
m_flagsSourceInfo["-"] = -1;
ParseChecklist(s_chkdb_res);
}
protected override bool IsEvtSet(EventDetail evtDetail)
{
bool isEvtSet = false;
int idx = (int)evtDetail.EvtId;
SAV6XY savHelper = (m_savFile as SAV6XY)!;
var eventWorkHelper = ((IEventFlagProvider37)m_savFile!).EventWork;
switch (evtDetail.EvtSource)
{
case Src_EventFlags:
isEvtSet = eventWorkHelper.GetEventFlag(idx);
break;
case Src_WorkArea:
{
switch (idx)
{
case 0x07C: // Delivered Prof's Letter to Mom
isEvtSet = eventWorkHelper.GetWork(idx) >= 7;
break;
case 0x07F: // Poké Flute event
isEvtSet = eventWorkHelper.GetWork(idx) >= 3;
break;
case 0x08B: // Unlocked Coastal Kalos Dex
isEvtSet = eventWorkHelper.GetWork(idx) >= 1;
break;
case 0x0AE: // Kalos Hotels Hiker
case 0x0AF: // Kalos Hotels Waiter
case 0x0B0: // Kalos Hotels Madame
case 0x0B1: // Kalos Hotels Maid
case 0x0B3: // Kalos Hotels Backpacker
isEvtSet = eventWorkHelper.GetWork(idx) == 5;
break;
case 0x0B2: // Kalos Hotels Tourist
isEvtSet = eventWorkHelper.GetWork(idx) >= 4;
break;
case 0x0E1: // Berry fields - berry mutation event
isEvtSet = eventWorkHelper.GetWork(idx) >= 2;
break;
case 0x0F8: // Unlocked Mountain Kalos Dex
isEvtSet = eventWorkHelper.GetWork(idx) >= 2;
break;
default:
isEvtSet = false;
break;
}
}
break;
case Src_BadgeFlags:
isEvtSet = (savHelper.Badges & (1 << idx)) != 0;
break;
case Src_EvtEX:
{
switch (idx)
{
case 1: // Unlock roamer
isEvtSet = savHelper.Blocks.Encount.Roamer.RoamStatus != Roamer6State.Inactive;
break;
case 2: // Captured roamer
isEvtSet = savHelper.Blocks.Encount.Roamer.RoamStatus == Roamer6State.Captured;
break;
default:
isEvtSet = false;
break;
}
}
break;
case Src_TrainerEX:
{
switch (idx)
{
case 1: // Shauna in Aquacorde Town
isEvtSet = eventWorkHelper.GetWork(0x074) >= 3;
break;
case 2: // Prof. Sycamore for a Kanto partner
isEvtSet = eventWorkHelper.GetWork(0x0D5) >= 3;
break;
case 3: // Tierno in Route 5
isEvtSet = eventWorkHelper.GetWork(0x07D) >= 2;
break;
case 4: // Multi-battle against Trevor and Tierno in Route 7
isEvtSet = eventWorkHelper.GetWork(0x07F) >= 13;
break;
case 5: // Team Flare Grunt 1 in Glittering Cave
isEvtSet = eventWorkHelper.GetWork(0x088) >= 2;
break;
case 6: // Multi-Battle Team Flare Grunts in Glittering Cave
isEvtSet = eventWorkHelper.GetWork(0x088) >= 4;
break;
case 7: // Team Flare Grunt 1 in Route 10
isEvtSet = eventWorkHelper.GetWork(0x0A0) >= 2;
break;
case 8: // Korrina in Geosenge Town
isEvtSet = eventWorkHelper.GetWork(0x09F) >= 4;
break;
case 9: // Calem/Serena in Tower of Mastery
isEvtSet = eventWorkHelper.GetWork(0x09E) >= 7;
break;
case 10: // Korrina in Tower of Mastery
isEvtSet = eventWorkHelper.GetWork(0x098) >= 2;
break;
case 11: // Calem/Serena in Coumarine City
isEvtSet = eventWorkHelper.GetWork(0x08C) >= 1;
break;
default:
isEvtSet = false;
break;
}
}
break;
case Src_GiftEX:
{
switch (idx)
{
case 1: // Town map from Mom
isEvtSet = eventWorkHelper.GetWork(0x07C) >= 7;
break;
case 2: // Poké Balls gift in Route 2
isEvtSet = eventWorkHelper.GetWork(0x075) == 2;
break;
case 3: // Paralyze Heal gift in Santalune Forest
isEvtSet = eventWorkHelper.GetWork(0x077) >= 3;
break;
case 4: // Adventure Rules gift in Route 3
isEvtSet = eventWorkHelper.GetWork(0x078) >= 2;
break;
case 5: // Exp. Share from Alexa
isEvtSet = eventWorkHelper.GetWork(0x093) == 1;
break;
case 6: // TM27 (Return) from Dexio
isEvtSet = eventWorkHelper.GetWork(0x09D) > 0;
break;
case 7: // Kanto partner megastone from Prof. Sycamore
isEvtSet = eventWorkHelper.GetWork(0x03B) != 0;
break;
case 8: // Has Poké Radar
isEvtSet = HasItemInBag(savHelper.Inventory.Pouches, 0x01AF);
break;
case 9: // O-Powers from Mr. Bonding at Lumiose Gate Route 5
isEvtSet = eventWorkHelper.GetWork(0x0D3) > 0;
break;
case 10: // Honey from Trevor in Route 5
isEvtSet = eventWorkHelper.GetWork(0x07D) >= 2;
break;
case 11: // Item gifts in Berry Fields
isEvtSet = eventWorkHelper.GetWork(0x0E1) >= 1;
break;
case 12: // TM47 (Protect) from Buttler in Parfum Palace
isEvtSet = eventWorkHelper.GetWork(0x07F) >= 3;
break;
case 13: // Has Old Rod
isEvtSet = HasItemInBag(savHelper.Inventory.Pouches, 0x01BD);
break;
case 14: // Fossil in Glittering Cave
isEvtSet = eventWorkHelper.GetWork(0x088) >= 5;
break;
case 15: // Dowsing Machine in Route 8
isEvtSet = eventWorkHelper.GetWork(0x08B) >= 3;
break;
case 16: // Bicycle in Cyllage City
isEvtSet = eventWorkHelper.GetWork(0x08A) >= 1;
break;
case 17: // HM04 (Strength) in Cyllage City
isEvtSet = eventWorkHelper.GetWork(0x089) >= 1;
break;
case 18: // TM70 (Flash) in Reflection Cave
isEvtSet = eventWorkHelper.GetWork(0x0DE) >= 1;
break;
case 19: // Intriguing Stone in Shalour City
isEvtSet = eventWorkHelper.GetWork(0x097) >= 2;
break;
case 20: // HM03 (Surf) in Shalour City
isEvtSet = eventWorkHelper.GetWork(0x097) == 8;
break;
case 21: // Mega Ring in Tower of Mastery
isEvtSet = eventWorkHelper.GetWork(0x098) >= 2;
break;
case 22: // Lapras in Route 12
isEvtSet = eventWorkHelper.GetWork(0x0CC) >= 2;
break;
case 23: // TM62 (Acrobatics) in Coumarine City
isEvtSet = HasItemInBag(savHelper.Inventory.Pouches, 0x0185);
break;
case 24: // TM63 (Embargo) in Coumarine City
isEvtSet = HasItemInBag(savHelper.Inventory.Pouches, 0x0186);
break;
case 25: // TM92 (Trick Room) in Coumarine City
isEvtSet = HasItemInBag(savHelper.Inventory.Pouches, 0x01A3);
break;
case 26: // TM100 (Confide) in Coumarine City
isEvtSet = HasItemInBag(savHelper.Inventory.Pouches, 0x02B6);
break;
case 27: // HM02 (Fly) in Coumarine City
isEvtSet = eventWorkHelper.GetWork(0x0DF) >= 1;
break;
}
}
break;
default:
isEvtSet = false;
break;
}
return isEvtSet;
}
}
}