summaryrefslogtreecommitdiff
path: root/src/wonder_mail_3.c
blob: 4cc2e0e77c5105a80ea72613011b0569ef53fa92 (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
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
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
#include "global.h"
#include "memory.h"
#include "text.h"
#include "input.h"
#include "mailbox.h"
#include "menu.h"
#include "constants/dungeon.h"
#include "wonder_mail.h"

struct unkSubStruct_203B2F8
{
    struct WonderMail wonderMail;
    u8 *unk14;
    u8 *unk18;
};

struct unkStruct_203B2F8
{
    // size: 0x208
    s32 state; // state
    u32 unk4;
    u8 unk8;
    u8 unk9;
    u8 unkA;
    u8 unkB;
    struct unkSubStruct_203B2F8 *unkC;
    u8 unk10;
    u8 fill11[0x14 - 0x11];
    u32 unk14;
    u8 fill18[0x58 - 0x18];
    u8 unk58;
    u8 fill59[0x64 - 0x59];
    u8 *unk64;
    u32 unk68;
    u32 unk6C;
    u32 unk70;
    u32 unk74;
    u8 unk78[0xC8 - 0x78];
    u8 unkC8[4];
    u8 fillCC[0x118 - 0xCC];
    struct MenuItem unk118[8];
    struct MenuItem unk158[8];
    u16 unk198[8];
    struct UnkTextStruct2 unk1A8[4];
    u32 unk1E4;
};
extern struct unkStruct_203B2F8 *gUnknown_203B2F8;
extern struct UnkTextStruct2 gUnknown_80DFE04;
extern struct UnkTextStruct2 gUnknown_80DFE1C;
extern struct UnkTextStruct2 gUnknown_80DFDD4;
extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
extern void sub_802D63C(void);
extern void sub_802D5A4(void);

extern u8 sub_8099328(u8 *);
extern u32 sub_8011C1C();
extern void sub_802D1A0(u32);

extern void sub_802D7D0();
extern void sub_802D8CC();
extern void sub_802D940();
extern void sub_802D9F0();
extern void sub_802DA60();
extern void sub_802D82C();
extern void sub_802DA84();
extern void sub_802D1B8();
extern void sub_802D2A8();

extern u8 gUnknown_80E0010[];
extern u8 gUnknown_80DFFA4[];
extern u8 gUnknown_80DFF2C[];
extern u8 gUnknown_80DFED0[];
extern u8 gUnknown_80DFE9C[];
extern u8 gUnknown_80DFE4C[];
extern u8 gUnknown_80E0108[];
extern u8 gUnknown_80E0094[];
extern u8 gUnknown_80E0074[];

extern u8 sub_80968B0(void *);
extern u8 sub_8096F50(void *);
extern u8 sub_802DAA8(void);
extern u8 sub_802DADC(void);
extern u8 *sub_8096DD8(void);
extern u8 sub_8096C08(u8 *);
extern void sub_802C750(void);
extern void sub_802D1A0(u32);
extern void sub_8012EA4(u8 *, u32);
extern struct WonderMail* GetJobSlotInfo(u8);
extern void sub_803B35C(void *, u32*);
extern void sub_802DE84(u32 *);
extern void sub_802D73C(void);
extern void sub_802C640(u32);
extern void sub_802C4C8(u32, u32, u32);
extern void sub_8097418(u32, u32);
extern void sub_802D690(void);
extern void sub_8096C80(void);
extern void sub_8096D24(void);
extern void sub_80141B4(u8 *, u32, u32, u32);
extern void sub_8012D60(u8 *, struct MenuItem *, u32, u16 *, u32, u32);
extern u8 *sub_8096DE8(void);
extern void sub_8096A78(struct unkSubStruct_203B2F8 *);
extern void sub_8014248(const char *text, u32, u32, struct MenuItem *r0, u32, u32, u32, u32, u32);


u32 sub_802D098(struct unkSubStruct_203B2F8 *param_1)
{
  gUnknown_203B2F8 = MemoryAlloc(0x208,8);
  gUnknown_203B2F8->unk6C = 0;
  gUnknown_203B2F8->unk70 = 0;
  gUnknown_203B2F8->unk74 = 0;
  gUnknown_203B2F8->unkC  = param_1;
  gUnknown_203B2F8->unk8 = 0;
  gUnknown_203B2F8->unk9 = sub_8099328(&gUnknown_203B2F8->unkA);
  if (sub_8011C1C() != 2) {
    gUnknown_203B2F8->unk9 = 0;
  }
  sub_802D1A0(0);
  return 1;
}

u32 sub_802D0E0(void)
{
  switch(gUnknown_203B2F8->state) {
    case 0:
        break;
    case 1:
        sub_802D7D0();
        break;
    case 0xb:
    case 0xc:
        sub_802D8CC();
        break;
    case 0xd:
        sub_802D940();
        break;
    case 0xe:
        sub_802D9F0();
        break;
    case 0xf:
    case 0x10:
        sub_802DA60();
        break;
    case 9:
        sub_802D82C();
        break;
    case 2:
        return 3;
    default:
        sub_802DA84();
        break;
  }
  return 0;
}

u8 sub_802D178(void)
{
    return gUnknown_203B2F8->unk8;
}

void sub_802D184(void)
{
    if(gUnknown_203B2F8 != NULL)
    {
        MemoryFree(gUnknown_203B2F8);
        gUnknown_203B2F8 = NULL;
    }
}

void sub_802D1A0(u32 newState)
{
    gUnknown_203B2F8->state = newState;
    sub_802D1B8();
    sub_802D2A8();
}

void sub_802D1B8(void)
{
    s32 iVar2;
    sub_8006518(gUnknown_203B2F8->unk1A8);
    switch(gUnknown_203B2F8->state)
    {
        case 0xD:
           sub_802D5A4();
           gUnknown_203B2F8->unk1A8[2] = gUnknown_80DFE04;
           sub_8012CAC(&gUnknown_203B2F8->unk1A8[2], gUnknown_203B2F8->unk118);
           gUnknown_203B2F8->unk1A8[2].unk0c = 6;
           break;
        case 0xE:
           sub_802D63C();
           gUnknown_203B2F8->unk1A8[3] = gUnknown_80DFE1C;
           sub_8012CAC(&gUnknown_203B2F8->unk1A8[3], gUnknown_203B2F8->unk158);
           gUnknown_203B2F8->unk1A8[3].unk0c = 6;
           break;
        default:
           for(iVar2 = 0; iVar2 < 4; iVar2++)
           {
               gUnknown_203B2F8->unk1A8[iVar2] = gUnknown_80DFDD4;
           }
           break;
        case 2:
           break;
    }
    ResetUnusedInputStruct();
    sub_800641C(gUnknown_203B2F8->unk1A8, 1, 1);
}

void sub_802D2A8(void)
{
  
  switch(gUnknown_203B2F8->state) {
  case 0:
    if (sub_80968B0(gUnknown_203B2F8->unkC) != 0) {
        sub_802D1A0(3);
    }
    else
    {
      if (sub_8096F50(gUnknown_203B2F8->unkC) != 0) {
        sub_802D1A0(4);
      }
      else
      {
        if ((gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) && (sub_8096C08(&gUnknown_203B2F8->unk10) != 0)) {
          if (sub_802DAA8() != 0) {
              sub_802D1A0(9);
          }
          else {
              sub_802D1A0(5);
          }
        }
        else {
          if (GetNumAcceptedJobs() >= MAX_ACCEPTED_JOBS) {
            if (sub_802DADC() != 0) {
                sub_802D1A0(10);
            }
            else {
               sub_802D1A0(6);
            }
          }
          else
          {
              sub_802D1A0(8);
          }
        }
      }
    }
    break;
  case 1:
    sub_802D73C();
    sub_8014248(gUnknown_80DFE4C,0,gUnknown_203B2F8->unk70,gUnknown_203B2F8->unk158,0,4,0,0,0);
    break;
  case 3:
    gUnknown_203B2F8->unk4 = 2;
    sub_80141B4(gUnknown_80DFE9C,0,0,0x101);
    break;
  case 4:
    gUnknown_203B2F8->unk4 = 2;
    sub_80141B4(gUnknown_80DFED0,0,0,0x101);
    break;
  case 5:
    gUnknown_203B2F8->unk4 = 2;
    sub_80141B4(gUnknown_80DFF2C,0,0,0x101);
    break;
  case 6:
    gUnknown_203B2F8->unk4 = 2;
    sub_80141B4(gUnknown_80DFFA4,0,0,0x101);
    break;
  case 7:
    gUnknown_203B2F8->unk4 = 0xc;
    sub_80141B4(gUnknown_80E0010,0,0,0x101);
    break;
  case 8:
    gUnknown_203B2F8->unk8 = 1;
    sub_8096A78(gUnknown_203B2F8->unkC);
    sub_8096C80();
    sub_8096D24();
    if (gUnknown_203B2F8->unkC->wonderMail.unk2 == 4) {
      MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->unkC->unk14,0x28);
      MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->unkC->unk18,0x78);
    }
    switch(gUnknown_203B2F8->unkC->wonderMail.dungeon)
    {
        // NOTE: subtract 1 from each of the case as the input??
        case DUNGEON_ODDITY_CAVE: // 0x2B
            sub_8097418(0x2A, 1);
            break;
        case DUNGEON_REMAINS_ISLAND:
            sub_8097418(0x2B, 1);
            break;
        case DUNGEON_MARVELOUS_SEA:
            sub_8097418(0x2C, 1);
            break;
        case DUNGEON_FANTASY_STRAIT: // 0x2E
            sub_8097418(0x2D, 1);
            break;
    }
    gUnknown_203B2F8->unk4 = 2;
    sub_80141B4(gUnknown_80E0074,0,0,0x101);
    break;
  case 9:
    sub_802D690();
    sub_8014248(gUnknown_80E0094,0,gUnknown_203B2F8->unk74,gUnknown_203B2F8->unk158,0,4,0,0,0);
    break;
  case 10:
    gUnknown_203B2F8->unk4 = 0xb;
    sub_80141B4(gUnknown_80E0108,0,0,0x101);
    break;
  case 0xb:
    sub_802C4C8(0,0,4);
    break;
  case 0xc:
    sub_802C640(1);
    break;
  case 0xd:
    sub_802C750();
    sub_8012D60(gUnknown_203B2F8->unk78,gUnknown_203B2F8->unk118,0,gUnknown_203B2F8->unk198,
                gUnknown_203B2F8->unk6C,2);
    break;
  case 0xe:
    sub_802C750();
    sub_8012EA4(gUnknown_203B2F8->unk78,0);
    sub_8012D60(gUnknown_203B2F8->unkC8,gUnknown_203B2F8->unk158,0,0,4,3);
    break;
  case 0xf:
    sub_803B35C(GetJobSlotInfo(gUnknown_203B2F8->unk10),&gUnknown_203B2F8->unk14);
    gUnknown_203B2F8->unk14 = 3;
    sub_802DE84(&gUnknown_203B2F8->unk14);
    break;
  case 0x10:
    sub_803B35C(gUnknown_203B2F8->unkC,&gUnknown_203B2F8->unk14);
    gUnknown_203B2F8->unk14 = 3;
    gUnknown_203B2F8->unk58 = 0;
    gUnknown_203B2F8->unk64 = gUnknown_203B2F8->unkC->unk18;
    sub_802DE84(&gUnknown_203B2F8->unk14);
  }
}