summaryrefslogtreecommitdiff
path: root/src/menews_jisan.c
blob: b4fe080bfbbdb47c81fd10a6970bf11f55b27684 (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
#include "global.h"
#include "mevent.h"
#include "random.h"
#include "event_data.h"
#include "menews_jisan.h"

static u32 sub_8146D74(struct MysteryEventStruct *);
static void sub_8146DD8(struct MysteryEventStruct *);
static u32 sub_8146E0C(struct MysteryEventStruct *);
static void sub_8146DA0(struct MysteryEventStruct *);
static void sub_8146D94(struct MysteryEventStruct *);

#ifdef NONMATCHING
void sub_8146C30(u32 a0)
{
    struct MysteryEventStruct *r5 = sub_8143D94();

    r5->unk_0_0 = a0;
    asm_comment("The switch logic does not match.  Specifically, the \"bhi\" is replaced with a \"bls\" and the comparisons with 1 and 3 are swapped chronologically.");
    switch (a0)
    {
        case 0:
            r5->unk_1 = (Random() % 15) + 16;
            break;
        case 1:
            break;
        case 2:
            break;
        case 3:
            r5->unk_1 = (Random() % 15) + 1;
            break;
    }
}
#else
NAKED
void sub_8146C30(u32 a0)
{
    asm_unified("\tpush {r4,r5,lr}\n"
                "\tadds r4, r0, 0\n"
                "\tbl sub_8143D94\n"
                "\tadds r5, r0, 0\n"
                "\tmovs r0, 0x3\n"
                "\tadds r1, r4, 0\n"
                "\tands r1, r0\n"
                "\tldrb r2, [r5]\n"
                "\tmovs r0, 0x4\n"
                "\tnegs r0, r0\n"
                "\tands r0, r2\n"
                "\torrs r0, r1\n"
                "\tstrb r0, [r5]\n"
                "\tcmp r4, 0x2\n"
                "\tbhi _08146C56\n"
                "\tcmp r4, 0x1\n"
                "\tbcs _08146C5C\n"
                "\tb _08146C80\n"
                "_08146C56:\n"
                "\tcmp r4, 0x3\n"
                "\tbeq _08146C6E\n"
                "\tb _08146C80\n"
                "_08146C5C:\n"
                "\tbl Random\n"
                "\tlsls r0, 16\n"
                "\tlsrs r0, 16\n"
                "\tmovs r1, 0xF\n"
                "\tbl __umodsi3\n"
                "\tadds r0, 0x10\n"
                "\tb _08146C7E\n"
                "_08146C6E:\n"
                "\tbl Random\n"
                "\tlsls r0, 16\n"
                "\tlsrs r0, 16\n"
                "\tmovs r1, 0xF\n"
                "\tbl __umodsi3\n"
                "\tadds r0, 0x1\n"
                "_08146C7E:\n"
                "\tstrb r0, [r5, 0x1]\n"
                "_08146C80:\n"
                "\tpop {r4,r5}\n"
                "\tpop {r0}\n"
                "\tbx r0");
}
#endif

void sub_8146C88(void)
{
    struct MysteryEventStruct *r5 = sub_8143D94();

    r5->unk_0_0 = 0;
    r5->unk_0_2 = 0;
    r5->unk_0_5 = 0;
    r5->unk_1 = 0;
    VarSet(VAR_0x4028, 0);
}

void sub_8146CA4(void)
{
    u16 *r4 = GetVarPointer(VAR_0x4028);
    struct MysteryEventStruct *r2 = sub_8143D94();
    struct MysteryEventStruct r0 = *r2;

    if ((u8)r0.unk_0_5 > 4 && ++(*r4) > 0x1f3)
    {
        r2->unk_0_5 = 0;
        *r4 = 0;
    }
}

u16 sub_8146CE8(void)
{
    u16 *r6 = &gSpecialVar_Result;
    struct MysteryEventStruct *r4 = sub_8143D94();
    u16 r5;

    if (!sub_806E2BC() || !sub_8143E1C())
        return 0;

    r5 = sub_8146E0C(r4);

    switch (r5)
    {
        case 0:
            break;
        case 1:
            *r6 = sub_8146D74(r4);
            break;
        case 2:
            *r6 = sub_8146D74(r4);
            break;
        case 3:
            break;
        case 4:
            *r6 = sub_8146D74(r4);
            sub_8146DA0(r4);
            break;
        case 5:
            *r6 = sub_8146D74(r4);
            sub_8146D94(r4);
            break;
        case 6:
            break;
    }

    return r5;
}

static u32 sub_8146D74(struct MysteryEventStruct *a0)
{
    u32 r4;

    a0->unk_0_0 = 0;
    r4 = a0->unk_1 + 0x84;
    a0->unk_1 = 0;
    sub_8146DD8(a0);
    return r4;
}

static void sub_8146D94(struct MysteryEventStruct *a0)
{
    a0->unk_0_2 = 0;
}

static void sub_8146DA0(struct MysteryEventStruct *a0)
{
    a0->unk_0_2++;
    if ((u8)a0->unk_0_2 > 4)
        a0->unk_0_2 = 4;
}

static void sub_8146DD8(struct MysteryEventStruct *a0)
{
    a0->unk_0_5++;
    if ((u8)a0->unk_0_5 > 5)
        a0->unk_0_5 = 5;
}

static u32 sub_8146E0C(struct MysteryEventStruct *a0)
{
    struct MysteryEventStruct r0;
    if ((u8)a0->unk_0_5 == 5)
        return 6;

    r0 = *a0;
    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_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/menews_jisan.c", 383);
            return 0;
    }
}