mirror of
https://github.com/pret/pmd-red.git
synced 2026-07-07 04:16:59 -05:00
499 lines
9.8 KiB
C
499 lines
9.8 KiB
C
#include "global.h"
|
|
#include "dungeon_entity.h"
|
|
#include "dungeon_global_data.h"
|
|
#include "random.h"
|
|
#include "constants/direction.h"
|
|
|
|
struct unkStruct_202F3D0
|
|
{
|
|
u8 unk0;
|
|
u8 unk1;
|
|
u8 unk2;
|
|
u8 unk3;
|
|
u8 unk4;
|
|
u8 unk5;
|
|
};
|
|
|
|
EWRAM_DATA struct unkStruct_202F3D0 gUnknown_202F3D0;
|
|
|
|
s8 sub_8002984(s8, u8);
|
|
void sub_803E708(u32, u32);
|
|
void sub_80869E4(struct DungeonEntity *r0, u32, u8, s8);
|
|
extern void sub_80859F0(u32);
|
|
extern void sub_803E46C(u32);
|
|
extern void sub_803E9D0(void);
|
|
extern void sub_8085C54(u32, u32, u32, u32, u32);
|
|
extern void PlaySoundEffect(u32);
|
|
extern struct DungeonEntity *xxx_call_GetLeaderEntity(void);
|
|
void SpriteLookAroundEffect(struct DungeonEntity *r0);
|
|
extern void DisplayDungeonDialogue(u32);
|
|
void sub_8086494();
|
|
|
|
extern u32 gUnknown_8107314[];
|
|
extern u32 gUnknown_202EDC8;
|
|
|
|
|
|
extern void sub_8085EB0(void);
|
|
extern void sub_803E748(void);
|
|
extern void sub_80855E4(void *);
|
|
extern u32 sub_803F994(void);
|
|
extern u32 sub_803F9B0(void);
|
|
extern void sub_803F878(u32, u32);
|
|
extern void sub_8086384(struct DungeonEntity *r0);
|
|
extern void sub_8085930(u32);
|
|
extern void sub_804539C(struct DungeonEntity *, u32, u32);
|
|
extern void sub_806CE68(struct DungeonEntity *, u32);
|
|
extern void sub_806CDD4(struct DungeonEntity *, u8, u32);
|
|
extern void sub_804535C(struct DungeonEntity *, u32 *);
|
|
extern void sub_8086A54(struct DungeonEntity *);
|
|
extern void sub_8086A3C(struct DungeonEntity *);
|
|
extern void PlaySoundEffect(u32);
|
|
extern void sub_80861F8(u32, struct DungeonEntity *, u32);
|
|
|
|
void sub_80862BC(struct DungeonEntity *r0)
|
|
{
|
|
PlaySoundEffect(0xE8 << 1);
|
|
sub_80861F8(0x143, r0, 0);
|
|
}
|
|
|
|
void sub_80862DC(struct DungeonEntity *r0)
|
|
{
|
|
u32 array[2];
|
|
array[0] = r0->posPixel.x;
|
|
array[1] = r0->posPixel.y + (0xE0 << 6);
|
|
|
|
sub_804535C(r0, array);
|
|
sub_806CDD4(r0, 0, DIRECTION_NORTH);
|
|
sub_8086A54(r0);
|
|
}
|
|
|
|
void sub_8086310(struct DungeonEntity *r0)
|
|
{
|
|
u32 array[2];
|
|
array[0] = r0->posPixel.x;
|
|
array[1] = r0->posPixel.y + (0x90 << 8);
|
|
|
|
sub_804535C(r0, array);
|
|
sub_806CE68(r0, DIRECTION_SOUTH);
|
|
sub_8086A3C(r0);
|
|
r0->visible = 0;
|
|
}
|
|
|
|
void sub_8086348(struct DungeonEntity *r0)
|
|
{
|
|
u32 array[2];
|
|
array[0] = r0->posPixel.x + (0xF0 << 7);
|
|
array[1] = r0->posPixel.y + 0xffffe000;
|
|
|
|
sub_804535C(r0, array);
|
|
sub_806CDD4(r0, 0, DIRECTION_WEST);
|
|
sub_8086A54(r0);
|
|
}
|
|
|
|
void sub_8086384(struct DungeonEntity *r0)
|
|
{
|
|
u32 array[2];
|
|
array[0] = r0->posPixel.x + (0xF0 << 7);
|
|
array[1] = r0->posPixel.y;
|
|
|
|
sub_804535C(r0, array);
|
|
sub_806CDD4(r0, 0, DIRECTION_WEST);
|
|
sub_8086A54(r0);
|
|
}
|
|
|
|
void sub_80863B8(struct DungeonEntity *r0)
|
|
{
|
|
sub_806CDD4(r0, 0, DIRECTION_NORTH);
|
|
}
|
|
|
|
void sub_80863C8(struct DungeonEntity *r0)
|
|
{
|
|
sub_806CDD4(r0, 0, DIRECTION_SOUTH);
|
|
}
|
|
|
|
void sub_80863D8(struct DungeonEntity *r0)
|
|
{
|
|
sub_806CDD4(r0, 0, DIRECTION_WEST);
|
|
}
|
|
|
|
void sub_80863E8(struct DungeonEntity *r0)
|
|
{
|
|
sub_806CDD4(r0, 6, DIRECTION_NORTH);
|
|
}
|
|
|
|
void sub_80863F8(struct DungeonEntity *r0)
|
|
{
|
|
sub_806CE68(r0, DIRECTION_NORTH);
|
|
}
|
|
|
|
void sub_8086404(struct DungeonEntity *r0)
|
|
{
|
|
sub_806CE68(r0, DIRECTION_WEST);
|
|
}
|
|
|
|
void sub_8086410(struct DungeonEntity *r0)
|
|
{
|
|
sub_804539C(r0, 0, 0xffffff00);
|
|
}
|
|
|
|
void sub_8086424(struct DungeonEntity *r0)
|
|
{
|
|
sub_804539C(r0, 0, 0x80 << 1);
|
|
}
|
|
|
|
void sub_8086434(struct DungeonEntity *r0)
|
|
{
|
|
sub_804539C(r0, 0xffffff00, 0);
|
|
}
|
|
|
|
void sub_8086448(void)
|
|
{
|
|
s32 iVar1;
|
|
u32 retVar;
|
|
u32 retVar2;
|
|
|
|
sub_80855E4(sub_80862DC);
|
|
|
|
for(iVar1 = 0; iVar1 < 0x38; iVar1++)
|
|
{
|
|
retVar = sub_803F994();
|
|
retVar2 = sub_803F9B0();
|
|
retVar2 += (0x80 << 1);
|
|
sub_803F878(retVar, retVar2);
|
|
sub_80855E4(sub_8086410);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_80855E4(sub_80863F8);
|
|
}
|
|
|
|
void sub_8086494(void)
|
|
{
|
|
s32 iVar1;
|
|
|
|
sub_8085930(DIRECTION_NORTHEAST);
|
|
sub_803E708(4, 0x46);
|
|
|
|
sub_8085930(DIRECTION_EAST);
|
|
sub_803E708(4, 0x46);
|
|
|
|
sub_8085930(DIRECTION_SOUTHEAST);
|
|
sub_803E708(4, 0x46);
|
|
|
|
sub_8085930(DIRECTION_SOUTH);
|
|
sub_803E708(4, 0x46);
|
|
|
|
sub_80855E4(sub_80863C8);
|
|
for(iVar1 = 0; iVar1 < 0x90; iVar1++)
|
|
{
|
|
sub_80855E4(sub_8086424);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_80855E4(sub_8086310);
|
|
}
|
|
|
|
void sub_8086500(void)
|
|
{
|
|
s32 iVar1;
|
|
u32 retVar;
|
|
u32 retVar2;
|
|
|
|
sub_80855E4(sub_8086348);
|
|
|
|
for(iVar1 = 0; iVar1 < 0x48; iVar1++)
|
|
{
|
|
retVar = sub_803F994();
|
|
retVar += (0x80 << 1);
|
|
retVar2 = sub_803F9B0();
|
|
sub_803F878(retVar, retVar2);
|
|
sub_80855E4(sub_8086434);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_80855E4(sub_8086404);
|
|
}
|
|
|
|
void sub_808654C(void)
|
|
{
|
|
s32 iVar1;
|
|
u32 retVar;
|
|
u32 retVar2;
|
|
|
|
sub_80855E4(sub_8086384);
|
|
|
|
for(iVar1 = 0; iVar1 < 0x78; iVar1++)
|
|
{
|
|
retVar = sub_803F994();
|
|
retVar += (0x80 << 1);
|
|
retVar2 = sub_803F9B0();
|
|
sub_803F878(retVar, retVar2);
|
|
sub_80855E4(sub_8086434);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_80855E4(sub_8086404);
|
|
}
|
|
|
|
void sub_8086598(void)
|
|
{
|
|
s32 iVar1;
|
|
u32 retVar;
|
|
u32 retVar2;
|
|
|
|
sub_80855E4(sub_80863B8);
|
|
|
|
for(iVar1 = 0; iVar1 < 0x18; iVar1++)
|
|
{
|
|
retVar = sub_803F994();
|
|
retVar2 = sub_803F9B0();
|
|
sub_803F878(retVar, retVar2 + (0xffffff00));
|
|
sub_80855E4(sub_8086410);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_80855E4(sub_80863F8);
|
|
}
|
|
|
|
void sub_80865E8(void)
|
|
{
|
|
s32 iVar1;
|
|
u32 retVar;
|
|
u32 retVar2;
|
|
|
|
sub_80855E4(sub_80863E8);
|
|
|
|
for(iVar1 = 0; iVar1 < 0xC; iVar1++)
|
|
{
|
|
retVar = sub_803F994();
|
|
retVar2 = sub_803F9B0();
|
|
sub_803F878(retVar, retVar2 + (0x80 << 2));
|
|
sub_80855E4(sub_8086424);
|
|
sub_80855E4(sub_8086424);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_80855E4(sub_80863F8);
|
|
}
|
|
|
|
void sub_808663C(void)
|
|
{
|
|
s32 iVar1;
|
|
u32 retVar;
|
|
u32 retVar2;
|
|
|
|
sub_80855E4(sub_80863E8);
|
|
|
|
for(iVar1 = 0; iVar1 < 0x10; iVar1++)
|
|
{
|
|
retVar = sub_803F994();
|
|
retVar2 = sub_803F9B0();
|
|
sub_803F878(retVar, retVar2 + (0x80 << 2));
|
|
sub_80855E4(sub_8086424);
|
|
sub_80855E4(sub_8086424);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_80855E4(sub_80863F8);
|
|
}
|
|
|
|
|
|
void sub_8086690(void)
|
|
{
|
|
s32 iVar1;
|
|
|
|
sub_80855E4(sub_80863D8);
|
|
|
|
for(iVar1 = 0; iVar1 < 0x30; iVar1++)
|
|
{
|
|
sub_80855E4(sub_8086434);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_80855E4(sub_8086404);
|
|
}
|
|
|
|
|
|
void sub_80866C4(u32 r0)
|
|
{
|
|
|
|
SpriteLookAroundEffect(xxx_call_GetLeaderEntity());
|
|
sub_803E708(0xA, 0x46);
|
|
DisplayDungeonDialogue(r0);
|
|
sub_803E708(0xA, 0x46);
|
|
sub_8086494();
|
|
gDungeonGlobalData->unk2 = 1;
|
|
}
|
|
|
|
void sub_80866FC(void)
|
|
{
|
|
s32 iVar1;
|
|
|
|
for(iVar1 = 0; iVar1 >= -0xFA; iVar1 -= 0xA)
|
|
{
|
|
sub_8085C54(iVar1, iVar1, iVar1, 1, 0);
|
|
sub_803E46C(0x46);
|
|
}
|
|
}
|
|
|
|
void sub_808627C(void)
|
|
{
|
|
sub_803E748();
|
|
}
|
|
|
|
void sub_8086738(void)
|
|
{
|
|
s32 iVar1;
|
|
|
|
for(iVar1 = 0; iVar1 < 0xFA; iVar1 += 0xA)
|
|
{
|
|
sub_8085C54(iVar1, iVar1, iVar1, 1, 0);
|
|
sub_803E46C(0x46);
|
|
}
|
|
}
|
|
|
|
void sub_8086764(void)
|
|
{
|
|
s32 iVar1;
|
|
|
|
for(iVar1 = 0xFA; iVar1 >= 0; iVar1 -= 5)
|
|
{
|
|
sub_8085C54(iVar1, iVar1, iVar1, 1, 0);
|
|
sub_803E46C(0x46);
|
|
}
|
|
sub_8085EB0();
|
|
}
|
|
|
|
void sub_8086794(void)
|
|
{
|
|
s32 iVar1;
|
|
|
|
gUnknown_202EDC8 = 0;
|
|
|
|
for(iVar1 = 0; iVar1 < 0xC8; iVar1++)
|
|
{
|
|
sub_8085C54(0, 0, 0, 1, 0);
|
|
sub_803E9D0();
|
|
sub_803E46C(0x46);
|
|
if((iVar1 & 3) == 0)
|
|
{
|
|
gUnknown_202EDC8++;
|
|
if(gUnknown_202EDC8 == 0x1F)
|
|
break;
|
|
}
|
|
}
|
|
sub_803E46C(0x46);
|
|
gDungeonGlobalData->unk7 = 0;
|
|
}
|
|
|
|
void sub_80867F4(void)
|
|
{
|
|
gUnknown_202F3D0.unk0 = 0;
|
|
gUnknown_202F3D0.unk1 = 0;
|
|
gUnknown_202F3D0.unk2 = 0;
|
|
gUnknown_202F3D0.unk3 = 0;
|
|
gUnknown_202F3D0.unk4 = 0;
|
|
gUnknown_202F3D0.unk5 = 0;
|
|
}
|
|
|
|
void sub_808680C(void)
|
|
{
|
|
gUnknown_202F3D0.unk0 = 1;
|
|
if(gUnknown_202F3D0.unk3 != 0)
|
|
PlaySoundEffect(0x1F9);
|
|
}
|
|
|
|
void sub_808682C(u8 r0)
|
|
{
|
|
gUnknown_202F3D0.unk0 = 0;
|
|
}
|
|
|
|
void sub_8086838(u8 r0, u8 r1, u8 r2)
|
|
{
|
|
gUnknown_202F3D0.unk1 = r0;
|
|
gUnknown_202F3D0.unk2 = r1;
|
|
gUnknown_202F3D0.unk3 = r2;
|
|
}
|
|
|
|
void sub_8086848(u8 r0, u8 r1)
|
|
{
|
|
gUnknown_202F3D0.unk4 = r0;
|
|
gUnknown_202F3D0.unk5 = r1;
|
|
}
|
|
|
|
void sub_8086854(void)
|
|
{
|
|
if(gUnknown_202F3D0.unk0 != 0)
|
|
{
|
|
if(gUnknown_202F3D0.unk4 == 0)
|
|
{
|
|
if(gUnknown_202F3D0.unk1 != 0)
|
|
{
|
|
gUnknown_202F3D0.unk4 = 0x50;
|
|
gUnknown_202F3D0.unk5 = 0x10;
|
|
}
|
|
else
|
|
{
|
|
gUnknown_202F3D0.unk4 = RandomCapped(0x6) + 2;
|
|
gUnknown_202F3D0.unk5 = RandomCapped(0x6) + 2;
|
|
}
|
|
if(gUnknown_202F3D0.unk3 != 0)
|
|
PlaySoundEffect(0x1F9);
|
|
}
|
|
else
|
|
{
|
|
gUnknown_202F3D0.unk4--;
|
|
}
|
|
if(gUnknown_202F3D0.unk5 != 0)
|
|
gUnknown_202F3D0.unk5--;
|
|
gDungeonGlobalData->unk181FC = gUnknown_8107314[gUnknown_202F3D0.unk5];
|
|
}
|
|
else
|
|
{
|
|
gDungeonGlobalData->unk181FC = 0;
|
|
}
|
|
}
|
|
|
|
void sub_80868F4(struct DungeonEntity *r0)
|
|
{
|
|
r0->entityData->unk15C = 1;
|
|
r0->entityData->unk15D = 1;
|
|
}
|
|
|
|
void sub_8086910(struct DungeonEntity *r0)
|
|
{
|
|
r0->entityData->unk15C = 0;
|
|
r0->entityData->unk15D = 0;
|
|
}
|
|
|
|
void sub_808692C(void)
|
|
{
|
|
sub_80859F0(DIRECTION_NORTHWEST);
|
|
sub_803E708(0x4, 0x46);
|
|
|
|
sub_80859F0(DIRECTION_WEST);
|
|
sub_803E708(0x4, 0x46);
|
|
|
|
sub_80859F0(DIRECTION_SOUTHWEST);
|
|
sub_803E708(0x4, 0x46);
|
|
|
|
sub_80859F0(DIRECTION_SOUTH);
|
|
sub_803E708(0x4, 0x46);
|
|
}
|
|
|
|
void SpriteLookAroundEffect(struct DungeonEntity *r0)
|
|
{
|
|
s8 r4;
|
|
s8 r3;
|
|
|
|
r4 = sub_8002984(r0->entityData->action.facingDir, 4);
|
|
|
|
sub_80869E4(r0, 4, 2, r4);
|
|
|
|
sub_803E708(0xF, 0x46);
|
|
|
|
r4 = sub_8002984(r4, 5);
|
|
|
|
sub_80869E4(r0, 4, 1, r4);
|
|
|
|
sub_803E708(0xF, 0x46);
|
|
|
|
r3 = sub_8002984(r4, 4);
|
|
|
|
sub_80869E4(r0, 4, 2, r3);
|
|
|
|
sub_803E708(0xF, 0x46);
|
|
}
|