pmd-red/src/code_80869E4.c
2023-06-25 16:37:48 -07:00

497 lines
9.7 KiB
C

#include "global.h"
#include "constants/direction.h"
#include "dungeon_entity.h"
#include "dungeon_global_data.h"
#include "dungeon_util_1.h"
#include "random.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 Entity *entity, u32, u8, s8);
extern void sub_803E46C(u32);
extern void sub_803E9D0(void);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
extern void PlaySoundEffect(u32);
void SpriteLookAroundEffect(struct Entity *entity);
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 s32 GetCameraXPos(void);
extern s32 GetCameraYPos(void);
extern void sub_803F878(u32, u32);
extern void sub_8086384(struct Entity *entity);
extern void IncreaseEntityPixelPos(struct Entity *, u32, u32);
extern void sub_806CE68(struct Entity *, u32);
extern void sub_806CDD4(struct Entity *, u8, u32);
extern void sub_804535C(struct Entity *, struct Position32 *);
extern void sub_8086A54(struct Entity *);
extern void sub_8086A3C(struct Entity *);
extern void PlaySoundEffect(u32);
extern void sub_80861F8(u32, struct Entity *, u32);
void SpriteShockEffect(struct Entity *entity)
{
PlaySoundEffect(0xE8 << 1);
sub_80861F8(0x143, entity, 0);
}
void sub_80862DC(struct Entity *entity)
{
struct Position32 pos;
pos.x = entity->pixelPos.x;
pos.y = entity->pixelPos.y + 0x3800;
sub_804535C(entity, &pos);
sub_806CDD4(entity, 0, DIRECTION_NORTH);
sub_8086A54(entity);
}
void sub_8086310(struct Entity *entity)
{
struct Position32 pos;
pos.x = entity->pixelPos.x;
pos.y = entity->pixelPos.y + 0x9000;
sub_804535C(entity, &pos);
sub_806CE68(entity, DIRECTION_SOUTH);
sub_8086A3C(entity);
entity->isVisible = 0;
}
void sub_8086348(struct Entity *entity)
{
struct Position32 pos;
pos.x = entity->pixelPos.x + 0x7800;
pos.y = entity->pixelPos.y - 0x2000;
sub_804535C(entity, &pos);
sub_806CDD4(entity, 0, DIRECTION_WEST);
sub_8086A54(entity);
}
void sub_8086384(struct Entity *entity)
{
struct Position32 pos;
pos.x = entity->pixelPos.x + 0x7800;
pos.y = entity->pixelPos.y;
sub_804535C(entity, &pos);
sub_806CDD4(entity, 0, DIRECTION_WEST);
sub_8086A54(entity);
}
void sub_80863B8(struct Entity *entity)
{
sub_806CDD4(entity, 0, DIRECTION_NORTH);
}
void sub_80863C8(struct Entity *entity)
{
sub_806CDD4(entity, 0, DIRECTION_SOUTH);
}
void sub_80863D8(struct Entity *entity)
{
sub_806CDD4(entity, 0, DIRECTION_WEST);
}
void sub_80863E8(struct Entity *entity)
{
sub_806CDD4(entity, 6, DIRECTION_NORTH);
}
void sub_80863F8(struct Entity *entity)
{
sub_806CE68(entity, DIRECTION_NORTH);
}
void sub_8086404(struct Entity *entity)
{
sub_806CE68(entity, DIRECTION_WEST);
}
void sub_8086410(struct Entity *entity)
{
IncreaseEntityPixelPos(entity, 0, -0x100);
}
void sub_8086424(struct Entity *entity)
{
IncreaseEntityPixelPos(entity, 0, 0x100);
}
void sub_8086434(struct Entity *entity)
{
IncreaseEntityPixelPos(entity, -0x100, 0);
}
void sub_8086448(void)
{
s32 index;
u32 XPos;
u32 YPos;
sub_80855E4(sub_80862DC);
for(index = 0; index < 0x38; index++)
{
XPos = GetCameraXPos();
YPos = GetCameraYPos();
YPos += (0x80 << 1);
sub_803F878(XPos, YPos);
sub_80855E4(sub_8086410);
sub_803E46C(0x46);
}
sub_80855E4(sub_80863F8);
}
void sub_8086494(void)
{
s32 index;
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(index = 0; index < 0x90; index++)
{
sub_80855E4(sub_8086424);
sub_803E46C(0x46);
}
sub_80855E4(sub_8086310);
}
void sub_8086500(void)
{
s32 index;
u32 XPos;
u32 YPos;
sub_80855E4(sub_8086348);
for(index = 0; index < 0x48; index++)
{
XPos = GetCameraXPos();
XPos += (0x80 << 1);
YPos = GetCameraYPos();
sub_803F878(XPos, YPos);
sub_80855E4(sub_8086434);
sub_803E46C(0x46);
}
sub_80855E4(sub_8086404);
}
void sub_808654C(void)
{
s32 index;
u32 XPos;
u32 YPos;
sub_80855E4(sub_8086384);
for(index = 0; index < 0x78; index++)
{
XPos = GetCameraXPos();
XPos += (0x80 << 1);
YPos = GetCameraYPos();
sub_803F878(XPos, YPos);
sub_80855E4(sub_8086434);
sub_803E46C(0x46);
}
sub_80855E4(sub_8086404);
}
void sub_8086598(void)
{
s32 index;
u32 XPos;
u32 YPos;
sub_80855E4(sub_80863B8);
for(index = 0; index < 0x18; index++)
{
XPos = GetCameraXPos();
YPos = GetCameraYPos();
sub_803F878(XPos, YPos + (0xffffff00));
sub_80855E4(sub_8086410);
sub_803E46C(0x46);
}
sub_80855E4(sub_80863F8);
}
void sub_80865E8(void)
{
s32 index;
u32 XPos;
u32 YPos;
sub_80855E4(sub_80863E8);
for(index = 0; index < 0xC; index++)
{
XPos = GetCameraXPos();
YPos = GetCameraYPos();
sub_803F878(XPos, YPos + (0x80 << 2));
sub_80855E4(sub_8086424);
sub_80855E4(sub_8086424);
sub_803E46C(0x46);
}
sub_80855E4(sub_80863F8);
}
void sub_808663C(void)
{
s32 index;
u32 XPos;
u32 YPos;
sub_80855E4(sub_80863E8);
for(index = 0; index < 0x10; index++)
{
XPos = GetCameraXPos();
YPos = GetCameraYPos();
sub_803F878(XPos, YPos + (0x80 << 2));
sub_80855E4(sub_8086424);
sub_80855E4(sub_8086424);
sub_803E46C(0x46);
}
sub_80855E4(sub_80863F8);
}
void sub_8086690(void)
{
s32 index;
sub_80855E4(sub_80863D8);
for(index = 0; index < 0x30; index++)
{
sub_80855E4(sub_8086434);
sub_803E46C(0x46);
}
sub_80855E4(sub_8086404);
}
void sub_80866C4(u32 dialogue)
{
SpriteLookAroundEffect(xxx_call_GetLeader());
sub_803E708(0xA, 0x46);
DisplayDungeonDialogue(dialogue);
sub_803E708(0xA, 0x46);
sub_8086494();
gDungeon->unk2 = 1;
}
void sub_80866FC(void)
{
s32 index;
for(index = 0; index >= -0xFA; index -= 0xA)
{
SetDungeonBGColorRGB(index, index, index, 1, 0);
sub_803E46C(0x46);
}
}
void sub_808627C(void)
{
sub_803E748();
}
void sub_8086738(void)
{
s32 index;
for(index = 0; index < 0xFA; index += 0xA)
{
SetDungeonBGColorRGB(index, index, index, 1, 0);
sub_803E46C(0x46);
}
}
void sub_8086764(void)
{
s32 index;
for(index = 0xFA; index >= 0; index -= 5)
{
SetDungeonBGColorRGB(index, index, index, 1, 0);
sub_803E46C(0x46);
}
sub_8085EB0();
}
void sub_8086794(void)
{
s32 index;
gUnknown_202EDC8 = 0;
for(index = 0; index < 0xC8; index++)
{
SetDungeonBGColorRGB(0, 0, 0, 1, 0);
sub_803E9D0();
sub_803E46C(0x46);
if((index & 3) == 0)
{
gUnknown_202EDC8++;
if(gUnknown_202EDC8 == 0x1F)
break;
}
}
sub_803E46C(0x46);
gDungeon->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 entity)
{
gUnknown_202F3D0.unk0 = 0;
}
void sub_8086838(u8 entity, u8 r1, u8 r2)
{
gUnknown_202F3D0.unk1 = entity;
gUnknown_202F3D0.unk2 = r1;
gUnknown_202F3D0.unk3 = r2;
}
void sub_8086848(u8 entity, u8 r1)
{
gUnknown_202F3D0.unk4 = entity;
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 = RandInt(0x6) + 2;
gUnknown_202F3D0.unk5 = RandInt(0x6) + 2;
}
if(gUnknown_202F3D0.unk3 != 0)
PlaySoundEffect(0x1F9);
}
else
{
gUnknown_202F3D0.unk4--;
}
if(gUnknown_202F3D0.unk5 != 0)
gUnknown_202F3D0.unk5--;
gDungeon->unk181FC = gUnknown_8107314[gUnknown_202F3D0.unk5];
}
else
{
gDungeon->unk181FC = 0;
}
}
void sub_80868F4(struct Entity *entity)
{
entity->info->unk15C = 1;
entity->info->unk15D = 1;
}
void sub_8086910(struct Entity *entity)
{
entity->info->unk15C = 0;
entity->info->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 Entity *entity)
{
s8 r4;
s8 r3;
r4 = sub_8002984(entity->info->action.direction, 4);
sub_80869E4(entity, 4, 2, r4);
sub_803E708(0xF, 0x46);
r4 = sub_8002984(r4, 5);
sub_80869E4(entity, 4, 1, r4);
sub_803E708(0xF, 0x46);
r3 = sub_8002984(r4, 4);
sub_80869E4(entity, 4, 2, r3);
sub_803E708(0xF, 0x46);
}