merge and nonmatching PokemonUseItemEffects2
This commit is contained in:
@@ -0,0 +1,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(0x4028, 0);
|
||||
}
|
||||
|
||||
void sub_8146CA4(void)
|
||||
{
|
||||
u16 *r4 = sub_806E454(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 = &gUnknown_20370D0;
|
||||
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;
|
||||
}
|
||||
}
|
||||
+1534
-539
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user