diff options
| author | 21aslade <21aslade@go.dsdmail.net> | 2020-06-19 13:31:59 -0600 |
|---|---|---|
| committer | 21aslade <21aslade@go.dsdmail.net> | 2020-06-19 13:31:59 -0600 |
| commit | a27bcf72c600d9355cafe01b3863fa7756f8a15f (patch) | |
| tree | aa3fa59da576e3ddae3345665647842fa5711a6c /src | |
| parent | ebe4a20bf790133541cb2477138ea16f0d3c1b0e (diff) | |
mask.c OK
Not updated to latest changes to header files yet
Diffstat (limited to 'src')
| -rw-r--r-- | src/mask.c | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/src/mask.c b/src/mask.c new file mode 100644 index 00000000..87e1f1a8 --- /dev/null +++ b/src/mask.c @@ -0,0 +1,127 @@ +#include "global.h" +#include "entity.h" +#include "room.h" +#include "random.h" + +#define COORD_TO_TILE(entity) ((((entity->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3fU) | (((entity->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6) + +extern void (*gUnk_081227A4[])(Entity *); +extern void DeleteThisEntity(); +extern u16 gUnk_030010A0[]; +extern bool32 CheckFlags(u16); +extern void ClearFlag(u16); +extern s16 sub_080001DA(u16, u32); +extern void SetTile(u32, u16, u32); +extern u16 sub_080002E0(u16, u32); +extern void sub_08000148(u16, u16, u32); +extern Entity gLinkEntity; +extern void sub_08004488(u32); +extern void sub_080044EC(Entity *, u16); +extern void CreateFx(Entity *, u16, u16); +extern void sub_0805457C(Entity *, s32); +extern void SetFlag(u16); + +void Mask(Entity *this) { + gUnk_081227A4[this->action](this); +} + +void sub_080929A4(Entity *this) { + if (this->entityType.parameter2 & 0xC0) { + if (CheckFlags(this->field_0x86)) { + s32 field_0x0a; + switch (this->entityType.parameter2 & 0xC0) { + case 0x40: + field_0x0a = gUnk_030010A0[0x5]; + + switch (field_0x0a) { + default: + break; + case 0x44D ... 0x44F: + case 0x182: + DeleteThisEntity(); + goto switchEnd; + } + + ClearFlag(this->field_0x86); + break; + case 0x80: + DeleteThisEntity(); + break; + } + switchEnd: + } + } + + this->action = 1; + this->field_0x20 = 0x18000; + + this->field_0x78 = ((Random() & 7) << 10) | 0x2000; + + this->field_0xf = this->parameter3 >> 1; + this->parameter3 = 0; + + this->animationList = this->entityType.parameter2 & 0x3f; + + this->field_0x7c.HALF.HI = COORD_TO_TILE(this); + this->field_0x7c.HALF.LO = sub_080001DA(this->field_0x7c.HALF.HI, 1); + + this->itemCooldown = sub_080002E0(this->field_0x7c.HALF.HI, 1); + + SetTile(0x4022, this->field_0x7c.HALF.HI, 1); +} + +void sub_08092A94(Entity *this) { + if (gLinkEntity.action != 6) { + return; + } + + if (gLinkEntity.animationState != 0) { + return; + } + + if (this->y.HALF.HI + 40 < gLinkEntity.y.HALF.HI) { + return; + } + + if (this->x.HALF.HI - gLinkEntity.x.HALF.HI >= this->field_0xf || this->x.HALF.HI - gLinkEntity.x.HALF.HI <= -this->field_0xf) { + return; + } + + SetTile((u16)this->field_0x7c.HALF.LO, this->field_0x7c.HALF.HI, 1); + + sub_08000148(this->itemCooldown, this->field_0x7c.HALF.HI, 1); + + this->action = 2; + this->height.HALF.HI -= 0x20; + this->y.HALF.HI += 0x20; + this->spriteOrder.b3 = 2; +} + +void sub_08092B0C(Entity *this) { + if (this->parameter3 == 1) { + this->action = 3; + this->parameter3 = 0; + switch (this->entityType.parameter2 & 0xC0) + { + case 0x80: + sub_08004488(0x72); + case 0x40: + SetFlag(this->field_0x86); + break; + + } + CreateFx(this, 5, 0); + sub_0805457C(this, 3); + } + else { + sub_080044EC(this, this->field_0x78); + + if (this->height.HALF.HI == 0) { + this->parameter3++; + } + } +} + +void sub_08092B6C(Entity *this) { + DeleteThisEntity(); +}
\ No newline at end of file |
