Merge pull request #339 from DizzyEggg/moltres

Match MoltresScreenFlash functions and sub_80861F8
This commit is contained in:
Seth Barberee
2025-02-25 07:30:05 -08:00
committed by GitHub
2 changed files with 82 additions and 190 deletions

View File

@@ -23,7 +23,7 @@ void sub_800EF64();
void sub_803E46C(s32);
s32 sub_800E700(s32);
void sub_800569C(DungeonPos *, axdata *, u8);
void sub_8085F44(void);
void sub_8085F44(s32);
void sub_8052FB8(const u8 *);
@@ -74,50 +74,46 @@ void sub_80861EC(Entity *a0)
GetEntInfo(a0)->unkFE = 0x63;
}
s32 sub_80861F8(s16 param_1,Entity *param_2,bool32 param_3)
s32 sub_80861F8(s32 param_1,Entity *param_2,bool32 param_3)
{
EntityInfo *info;
s32 uVar2;
s32 uStack_38;
DungeonPos pos;
unkStruct_80416E0 stack;
unkStruct_2039DB0 stack1C;
EntityInfo *info;
s32 uVar2;
s32 uStack_38;
DungeonPos pos;
unkStruct_80416E0 stack;
unkStruct_2039DB0 stack1C;
#ifdef NONMATCHING
s32 param_1_s32 = param_1;
#else
register s32 param_1_s32 asm("r5") = param_1;
#endif
// Needed to match.
s32 param_1Copy2 = (s16) param_1;
s32 param_1Copy = param_1Copy2;
u8 param_3_bool32 = param_3;
u8 param_3_bool32 = param_3;
sub_800EE5C(param_1Copy2);
sub_800EF64();
sub_803E46C(0x46);
info = GetEntInfo(param_2);
pos.x = 0;
pos.y = 0;
uStack_38 = sub_800E700(param_1Copy);
if (uStack_38 != -1) {
sub_800569C(&pos,&param_2->axObj.axdata,uStack_38);
}
stack.unk0 = param_1Copy;
stack.unk4 = 0;
stack.dir = info->action.direction;
stack.x = (param_2->pixelPos).x / 256;
stack.y = (param_2->pixelPos).y / 256;
sub_800EE5C(param_1);
sub_800EF64();
sub_803E46C(0x46);
info = GetEntInfo(param_2);
pos.x = 0;
pos.y = 0;
uStack_38 = sub_800E700(param_1_s32);
if (uStack_38 != -1) {
sub_800569C(&pos,&param_2->axObj.axdata,
uStack_38);
}
stack.unk0 = param_1_s32;
stack.unk4 = 0;
stack.dir = (u32)(info->action).direction;
stack.x = (param_2->pixelPos).x / 256;
stack.y = (param_2->pixelPos).y / 256;
stack.unk10 = pos.x;
stack.unk12 = pos.y;
stack.unk14 = uStack_38;
stack.unk18 = 0xffff;
stack1C = gUnknown_8107380;
stack.unk10 = pos.x;
stack.unk12 = pos.y;
stack.unk14 = uStack_38;
stack.unk18 = 0xffff;
stack1C = gUnknown_8107380;
uVar2 = sub_800E890(&stack);
if (param_3_bool32 != '\0') {
sub_8085F44();
uVar2 = -1;
}
return uVar2;
uVar2 = sub_800E890(&stack);
if (param_3_bool32) {
sub_8085F44(uVar2);
uVar2 = -1;
}
return uVar2;
}

View File

@@ -395,6 +395,7 @@ extern void sub_80460F8(DungeonPos *, Item *, u8);
extern u8 sub_8044B28(void);
extern bool8 sub_8085B80(struct_8085B80 *);
void sub_8085F44(s32);
void sub_808BBA8(Entity * );
void DeoxysScreenFlash(void);
void sub_8086A54(Entity *);
@@ -1264,158 +1265,53 @@ void MoltresDropInEffect(Entity * moltresEntity)
}
}
NAKED
void MoltresScreenFlash1(s32 r0, s32 r1)
void MoltresScreenFlash1(s32 xArg, s32 yArg)
{
asm_unified("\tpush {lr}\n"
"\tsub sp, 0x8\n"
"\tadds r3, r1, 0\n"
"\tlsls r1, r0, 1\n"
"\tadds r1, r0\n"
"\tlsls r1, 11\n"
"\tmovs r2, 0xC0\n"
"\tlsls r2, 4\n"
"\tadds r0, r1, r2\n"
"\tcmp r0, 0\n"
"\tbge _08087D98\n"
"\tadds r0, 0xFF\n"
"_08087D98:\n"
"\tlsls r0, 8\n"
"\tlsrs r0, 16\n"
"\tldr r1, _08087DE0\n"
"\tldr r2, [sp, 0x4]\n"
"\tands r2, r1\n"
"\torrs r2, r0\n"
"\tstr r2, [sp, 0x4]\n"
"\tlsls r0, r3, 1\n"
"\tadds r0, r3\n"
"\tlsls r0, 11\n"
"\tmovs r1, 0x80\n"
"\tlsls r1, 5\n"
"\tadds r0, r1\n"
"\tcmp r0, 0\n"
"\tbge _08087DB8\n"
"\tadds r0, 0xFF\n"
"_08087DB8:\n"
"\tlsls r0, 8\n"
"\tlsrs r0, 16\n"
"\tlsls r0, 16\n"
"\tldr r1, _08087DE4\n"
"\tands r2, r1\n"
"\torrs r2, r0\n"
"\tstr r2, [sp, 0x4]\n"
"\tmovs r0, 0xB9\n"
"\tlsls r0, 1\n"
"\tmovs r1, 0\n"
"\tstr r1, [sp]\n"
"\tmovs r1, 0x10\n"
"\tmovs r2, 0\n"
"\tadd r3, sp, 0x4\n"
"\tbl sub_8085EC8\n"
"\tadd sp, 0x8\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_08087DE0: .4byte 0xffff0000\n"
"_08087DE4: .4byte 0x0000ffff");
s32 x, y;
DungeonPos newPos;
x = (xArg * 3) << 11;
x += 0xC00;
newPos.x = x / 256;
y = (yArg * 3) << 11;
y += 0x1000;
newPos.y = y / 256;
sub_8085EC8(370,16,0,&newPos,0);
}
NAKED
void MoltresScreenFlash2(s32 r0, s32 r1)
void MoltresScreenFlash2(s32 xArg, s32 yArg)
{
asm_unified("\tpush {r4-r6,lr}\n"
"\tsub sp, 0x8\n"
"\tadds r3, r1, 0\n"
"\tlsls r1, r0, 1\n"
"\tadds r1, r0\n"
"\tlsls r1, 11\n"
"\tmovs r2, 0xC0\n"
"\tlsls r2, 4\n"
"\tadds r0, r1, r2\n"
"\tcmp r0, 0\n"
"\tbge _08087E00\n"
"\tadds r0, 0xFF\n"
"_08087E00:\n"
"\tlsls r0, 8\n"
"\tlsrs r0, 16\n"
"\tldr r1, _08087EA8\n"
"\tldr r2, [sp, 0x4]\n"
"\tands r2, r1\n"
"\torrs r2, r0\n"
"\tstr r2, [sp, 0x4]\n"
"\tlsls r0, r3, 1\n"
"\tadds r0, r3\n"
"\tlsls r0, 11\n"
"\tmovs r1, 0x80\n"
"\tlsls r1, 5\n"
"\tadds r0, r1\n"
"\tcmp r0, 0\n"
"\tbge _08087E20\n"
"\tadds r0, 0xFF\n"
"_08087E20:\n"
"\tlsls r0, 8\n"
"\tlsrs r0, 16\n"
"\tlsls r0, 16\n"
"\tldr r1, _08087EAC\n"
"\tands r2, r1\n"
"\torrs r2, r0\n"
"\tstr r2, [sp, 0x4]\n"
"\tmovs r0, 0xB9\n"
"\tlsls r0, 1\n"
"\tmovs r1, 0\n"
"\tstr r1, [sp]\n"
"\tmovs r1, 0x16\n"
"\tmovs r2, 0\n"
"\tadd r3, sp, 0x4\n"
"\tbl sub_8085EC8\n"
"\tadds r6, r0, 0\n"
"\tmovs r0, 0xF6\n"
"\tlsls r0, 1\n"
"\tbl PlaySoundEffect\n"
"\tmovs r4, 0xFA\n"
"\tmovs r5, 0x1\n"
"_08087E4E:\n"
"\tstr r5, [sp]\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0\n"
"\tmovs r3, 0x1\n"
"\tbl SetDungeonBGColorRGB\n"
"\tmovs r0, 0x46\n"
"\tbl sub_803E46C\n"
"\tsubs r4, 0xA\n"
"\tcmp r4, 0x13\n"
"\tbgt _08087E4E\n"
"\tmovs r0, 0xA\n"
"\tmovs r1, 0x46\n"
"\tbl sub_803E708\n"
"\tmovs r4, 0xFA\n"
"\tmovs r5, 0x1\n"
"_08087E74:\n"
"\tstr r5, [sp]\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0\n"
"\tmovs r3, 0x1\n"
"\tbl SetDungeonBGColorRGB\n"
"\tmovs r0, 0x46\n"
"\tbl sub_803E46C\n"
"\tsubs r4, 0xA\n"
"\tcmp r4, 0\n"
"\tbge _08087E74\n"
"\tmovs r0, 0xA\n"
"\tmovs r1, 0x46\n"
"\tbl sub_803E708\n"
"\tbl sub_8085EB0\n"
"\tadds r0, r6, 0\n"
"\tbl sub_8085F44\n"
"\tadd sp, 0x8\n"
"\tpop {r4-r6}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_08087EA8: .4byte 0xffff0000\n"
"_08087EAC: .4byte 0x0000ffff");
s32 r6;
s32 i, x, y;
DungeonPos newPos;
x = (xArg * 3) << 11;
x += 0xC00;
newPos.x = x / 256;
y = (yArg * 3) << 11;
y += 0x1000;
newPos.y = y / 256;
r6 = sub_8085EC8(370,22,0,&newPos,0);
PlaySoundEffect(0x1EC);
for (i = 250; i >= 20; i -= 10) {
SetDungeonBGColorRGB(i, 0, 0, 1, 1);
sub_803E46C(0x46);
}
sub_803E708(0xA, 0x46);
for (i = 250; i >= 0; i -= 10) {
SetDungeonBGColorRGB(i, 0, 0, 1, 1);
sub_803E46C(0x46);
}
sub_803E708(0xA, 0x46);
sub_8085EB0();
sub_8085F44(r6);
}
void MoltresScreenFlash3(void)