From b3dc734ad8a809a378c00fabf988bf5298ce8f98 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Sat, 8 Aug 2020 17:01:13 +0200 Subject: partial managerA.c ok first three functions decomped --- src/manager/managerA.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/manager/managerA.c (limited to 'src') diff --git a/src/manager/managerA.c b/src/manager/managerA.c new file mode 100644 index 00000000..35729c55 --- /dev/null +++ b/src/manager/managerA.c @@ -0,0 +1,39 @@ +#include "global.h" +#include "entity.h" + +extern void (*gUnk_081081F4[])(Entity*); + +void sub_08058380(Entity* this) { + gUnk_081081F4[this->action](this); +} + + +extern u32 CheckFlags(u32); +extern void DeleteThisEntity(); +extern void sub_0805E3A0(Manager*, u32); + +void sub_08058398(Manager* this) { + + if (CheckFlags(this->unk_3c) != 0) { + DeleteThisEntity(); + } + this->unk_24 = this->unk_3a<<3; + this->unk_26 = this->unk_3b<<3; + this->unk_20 = this->unk_24 + (this->unk_38<<4); + this->unk_22 = this->unk_26 + (this->unk_39<<4); + sub_0805E3A0(this, 0x06); + if (this->unk_3e == 0) { + this->unk_0c = 2; + } else { + this->unk_0c = 1; + } +} + +extern void sub_08058408(Manager* this); + +void sub_080583EC(Manager* this) { + if (CheckFlags(this->unk_3e) != 0) { + this->unk_0c = 2; + sub_08058408(this); + } +} -- cgit v1.2.3 From 6e9908b9c97f933ab0949b08b9d480dbc1c032ef Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 9 Aug 2020 03:12:45 -0700 Subject: ezloReminder.c --- src/ezloReminder.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/object/object48.c | 1 - src/sub_08070680.c | 53 ++++++++++++++++++++++ 3 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 src/ezloReminder.c (limited to 'src') diff --git a/src/ezloReminder.c b/src/ezloReminder.c new file mode 100644 index 00000000..d82cfb75 --- /dev/null +++ b/src/ezloReminder.c @@ -0,0 +1,123 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "textbox.h" + +typedef struct { + s8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + u16 unkC; + u16 unkE; + u16 unk10; + u8 unk12; + u8 unk13; +} Element; + +typedef struct { + u8 unk0[0x24]; + u8 ezloNagFuncIndex; +} struct_0200AF00; + +extern struct_0200AF00 gUnk_0200AF00; + +/////////////////////////////////////////////////////////////// + +extern void sub_0805ECEC(u32, u32, u32, u32); +extern void sub_0801CAD0(Element*); + +extern void (*const gUnk_080C904C[])(Element*); + +extern u16 gUnk_080C9058[]; + +void EzloReminder(Element* arg0) { + gUnk_080C904C[arg0->unk4](arg0); +} + +#ifdef NON_MATCHING // REG SWAP +extern u32 gUnk_080C9094; + +void sub_0801CED8(Element* arg0) { + if (gUnk_0200AF00.ezloNagFuncIndex == 1) { + gUnk_0200AF00.ezloNagFuncIndex = 2; + arg0->unkC = 0x10; + arg0->unkE = 0x90; + arg0->unk6 = 0; + arg0->unk1 = 7; + arg0->unk4 = 1; + arg0->unk0 |= 2; + sub_0801CAB8(arg0, &gUnk_080C9094); + } +} +#else +NAKED +void sub_0801CED8(Element* arg0) { + asm_unified("\ + push {r4, lr}\n\ + adds r3, r0, #0\n\ + ldr r0, _0801CF10 @ =gUnk_0200AF00\n\ + adds r1, r0, #0\n\ + adds r1, #0x24\n\ + ldrb r4, [r1]\n\ + cmp r4, #1\n\ + bne _0801CF0E\n\ + movs r2, #2\n\ + movs r0, #2\n\ + strb r0, [r1]\n\ + movs r1, #0\n\ + movs r0, #0x10\n\ + strh r0, [r3, #0xc]\n\ + movs r0, #0x90\n\ + strh r0, [r3, #0xe]\n\ + strb r1, [r3, #6]\n\ + movs r0, #7\n\ + strb r0, [r3, #1]\n\ + strb r4, [r3, #4]\n\ + ldrb r0, [r3]\n\ + orrs r0, r2\n\ + strb r0, [r3]\n\ + ldr r1, _0801CF14 @ =gUnk_080C9094\n\ + adds r0, r3, #0\n\ + bl sub_0801CAB8\n\ + _0801CF0E:\n\ + pop {r4, pc}\n\ + .align 2, 0\n\ + _0801CF10: .4byte gUnk_0200AF00\n\ + _0801CF14: .4byte gUnk_080C9094"); +} +#endif + +void sub_0801CF18(Element* arg0) { + u32 temp; + + temp = gUnk_080C9058[arg0->unk6++]; + sub_0805ECEC(0, temp, temp, 0); + if (temp == 0) { + arg0->unk4 = 2; + arg0->unk1 = 8; + gUnk_0200AF00.ezloNagFuncIndex = 3; + PlaySFX(0x173); + } +} + +void sub_0801CF60(Element* arg0) { + + if ((gUnk_0200AF00.ezloNagFuncIndex >= 5) || (gTextBox.doTextBox & 0x7f)) { + arg0->unk4 = 0; + arg0->unk0 &= -3; + return; + } + sub_0801CAD0(arg0); + if (arg0->unk13 == 1) { + gUnk_0200AF00.ezloNagFuncIndex = 4; + } +} \ No newline at end of file diff --git a/src/object/object48.c b/src/object/object48.c index c2a25071..57d772a9 100755 --- a/src/object/object48.c +++ b/src/object/object48.c @@ -9,7 +9,6 @@ #include "readKeyInput.h" #include "structures.h" -extern bool32 sub_080AE008(Entity*, int, int); extern int sub_0807A094(int); extern u32 sub_0801D754(const u8*, u8, u8); extern u32 sub_080041EC(int, int); diff --git a/src/sub_08070680.c b/src/sub_08070680.c index d5b5b517..642167df 100644 --- a/src/sub_08070680.c +++ b/src/sub_08070680.c @@ -1,9 +1,62 @@ #include "global.h" #include "entity.h" +#include "player.h" +#include "functions.h" extern void (*gUnk_0811B9E0[])(Entity*); +extern BoundingBox gUnk_08114F88; + // inject void sub_08070680(Entity* this) { gUnk_0811B9E0[this->action](this); } + + +void sub_08070698(Entity *this) +{ + u32 uVar1; + int iVar2; + Entity *ent; + + gPlayerState.field_0x0[0] = 0xff; + gPlayerState.field_0x14[1] = gPlayerEntity.x.HALF.HI; + gPlayerState.field_0x14[2] = gPlayerEntity.y.HALF.HI; + this->flags = this->flags | 0x80; + this->spritePriority.b0 = 0xc; + this->spritePriority.b1 = 1; + this->spriteSettings.b.shadow = 1; + this->field_0x16 = 0x20; + this->flags2 = 8; + this->damageType = 0x79; + this->boundingBox = &gUnk_08114F88; + this->spriteIndex = 1; + gPlayerState.field_0x8 = 0x100; + sub_0806FDA0(this); + sub_080AE008(this, 1, 2); + InitAnimationForceUpdate(this, 2); + if (this->collisionLayer == 0) { + sub_08016A30(this); + } + uVar1 = IsItemEquipped(0x10); + if (uVar1 != 2) { + sub_08077728(); + } + sub_0807A108(); + sub_0807AEE4(); + iVar2 = sub_08078EFC(); + if (iVar2 == 0) { + sub_0807921C(); + sub_0807A1B8(); + if (gPlayerState.swimState != 0) { + gPlayerState.swimState = 1; + sub_08079938(); + gPlayerState.field_0xa8[0] = 7; + sub_0807ACCC(this); + ent = sub_0805EB2C(0x6, 0xf, 0x6, 0xb, 0x0); + if (ent != NULL) { + DeleteEntity(ent); + } + } + } +} \ No newline at end of file -- cgit v1.2.3 From a609afcf8372ff837564c16fb0ba1ed1e9004a39 Mon Sep 17 00:00:00 2001 From: Ibot02 Date: Sun, 9 Aug 2020 12:13:02 +0200 Subject: managerA.c ok --- src/manager/managerA.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 135 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/manager/managerA.c b/src/manager/managerA.c index 35729c55..5eb869e5 100644 --- a/src/manager/managerA.c +++ b/src/manager/managerA.c @@ -1,15 +1,19 @@ #include "global.h" #include "entity.h" +#include "link.h" +#include "manager.h" +#include "flags.h" +#include "area.h" -extern void (*gUnk_081081F4[])(Entity*); -void sub_08058380(Entity* this) { - gUnk_081081F4[this->action](this); +extern void (*gUnk_081081F4[])(Manager*); + +void sub_08058380(Manager* this) { + gUnk_081081F4[this->unk_0c](this); } -extern u32 CheckFlags(u32); -extern void DeleteThisEntity(); + extern void sub_0805E3A0(Manager*, u32); void sub_08058398(Manager* this) { @@ -29,7 +33,8 @@ void sub_08058398(Manager* this) { } } -extern void sub_08058408(Manager* this); + +void sub_08058408(Manager*); void sub_080583EC(Manager* this) { if (CheckFlags(this->unk_3e) != 0) { @@ -37,3 +42,127 @@ void sub_080583EC(Manager* this) { sub_08058408(this); } } + +extern u32 CheckPlayerInRegion(u32, u32, u32, u32); +extern void sub_0805E544(void); +extern void sub_08078A90(u32); +extern void sub_08078AA8(u32, u32); +extern void sub_080186C0(u16); +extern void sub_08078B48(void); + +u32 sub_0805848C(Manager*); +void sub_080585DC(Manager*); + +void sub_08058408(Manager* this){ + u32 tmp2; + tmp2 = (gLinkState.flags.all & 0x08); + if (tmp2 != 0) return; + if (!CheckPlayerInRegion(this->unk_20, this->unk_22, this->unk_24, this->unk_26)) return; + switch (this->unk_0a) { + case 1: + return; + case 2: + sub_080585DC(this); + if ((gLinkState.flags.all & 0x80) == 0) return; + case 0: + default: + sub_080585DC(this); + if (sub_0805848C(this) == 0) return; + sub_08078A90(3); + sub_08078B48(); + sub_0805E544(); + this->unk_0c = 3; + this->unk_0d = 0; + this->unk_0e = 0x1e; + return; + case 3: + this->unk_0c = 4; + this->unk_0d = tmp2; + sub_080186C0(this->unk_36); + return; + } +} + + +u32 sub_0805848C(Manager* this) { + switch (gLinkState.field_0xa8[0]-5) { + case 0: + case 2: + case 3: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 22: + case 23: + return 0; + case 1: + case 4: + case 20: + case 21: + default: + return 1; + } +} + + +extern void UnfreezeTime(void); + +void sub_08058514(Manager* this) { + switch (this->unk_0d) { + case 1: + if ((gLinkState.flags.all & 0x1235) != 0) + return; + if (gLinkEntity.height.HALF.HI != 0) + return; + gLinkState.jumpStatus = 0; + sub_08078AA8(this->unk_36, this->unk_35); + this->unk_0d++; + this->unk_0e = 0x1E; + return; + case 0: + case 2: + if (((--this->unk_0e)<<0x18) == 0) { + this->unk_0d++; + } + return; + case 3: + if (gLinkEntity.action != 1 && gLinkEntity.action != 9) return; + gLinkState.field_0x8b = 1; + UnfreezeTime(); + SetFlag(this->unk_3c); + DeleteThisEntity(); + return; + default: + return; + } +} + + +extern void sub_0801855C(void); + +void sub_080585B0(Manager* this) { + if (gArea.filler4[0] != 0xFF) { + DeleteThisEntity(); + } + if (CheckFlags(this->unk_3c)) { + sub_0801855C(); + DeleteThisEntity(); + } +} +void sub_080585DC(Manager* this) { + if (CheckFlags(this->unk_3c)) { + DeleteThisEntity(); + } +} -- cgit v1.2.3 From 944ec95f5477c6cb42d6b33a9590aa03064f3053 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 9 Aug 2020 03:13:34 -0700 Subject: renamed to ezloNag.c --- src/ezloNag.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ezloReminder.c | 123 ----------------------------------------------------- 2 files changed, 123 insertions(+), 123 deletions(-) create mode 100644 src/ezloNag.c delete mode 100644 src/ezloReminder.c (limited to 'src') diff --git a/src/ezloNag.c b/src/ezloNag.c new file mode 100644 index 00000000..bce5c8d5 --- /dev/null +++ b/src/ezloNag.c @@ -0,0 +1,123 @@ +#include "global.h" +#include "entity.h" +#include "functions.h" +#include "textbox.h" + +typedef struct { + s8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + u16 unkC; + u16 unkE; + u16 unk10; + u8 unk12; + u8 unk13; +} Element; + +typedef struct { + u8 unk0[0x24]; + u8 ezloNagFuncIndex; +} struct_0200AF00; + +extern struct_0200AF00 gUnk_0200AF00; + +/////////////////////////////////////////////////////////////// + +extern void sub_0805ECEC(u32, u32, u32, u32); +extern void sub_0801CAD0(Element*); + +extern void (*const gUnk_080C904C[])(Element*); + +extern u16 gUnk_080C9058[]; + +void EzloNag(Element* arg0) { + gUnk_080C904C[arg0->unk4](arg0); +} + +#ifdef NON_MATCHING // REG SWAP +extern u32 gUnk_080C9094; + +void sub_0801CED8(Element* arg0) { + if (gUnk_0200AF00.ezloNagFuncIndex == 1) { + gUnk_0200AF00.ezloNagFuncIndex = 2; + arg0->unkC = 0x10; + arg0->unkE = 0x90; + arg0->unk6 = 0; + arg0->unk1 = 7; + arg0->unk4 = 1; + arg0->unk0 |= 2; + sub_0801CAB8(arg0, &gUnk_080C9094); + } +} +#else +NAKED +void sub_0801CED8(Element* arg0) { + asm_unified("\ + push {r4, lr}\n\ + adds r3, r0, #0\n\ + ldr r0, _0801CF10 @ =gUnk_0200AF00\n\ + adds r1, r0, #0\n\ + adds r1, #0x24\n\ + ldrb r4, [r1]\n\ + cmp r4, #1\n\ + bne _0801CF0E\n\ + movs r2, #2\n\ + movs r0, #2\n\ + strb r0, [r1]\n\ + movs r1, #0\n\ + movs r0, #0x10\n\ + strh r0, [r3, #0xc]\n\ + movs r0, #0x90\n\ + strh r0, [r3, #0xe]\n\ + strb r1, [r3, #6]\n\ + movs r0, #7\n\ + strb r0, [r3, #1]\n\ + strb r4, [r3, #4]\n\ + ldrb r0, [r3]\n\ + orrs r0, r2\n\ + strb r0, [r3]\n\ + ldr r1, _0801CF14 @ =gUnk_080C9094\n\ + adds r0, r3, #0\n\ + bl sub_0801CAB8\n\ + _0801CF0E:\n\ + pop {r4, pc}\n\ + .align 2, 0\n\ + _0801CF10: .4byte gUnk_0200AF00\n\ + _0801CF14: .4byte gUnk_080C9094"); +} +#endif + +void sub_0801CF18(Element* arg0) { + u32 temp; + + temp = gUnk_080C9058[arg0->unk6++]; + sub_0805ECEC(0, temp, temp, 0); + if (temp == 0) { + arg0->unk4 = 2; + arg0->unk1 = 8; + gUnk_0200AF00.ezloNagFuncIndex = 3; + PlaySFX(0x173); + } +} + +void sub_0801CF60(Element* arg0) { + + if ((gUnk_0200AF00.ezloNagFuncIndex >= 5) || (gTextBox.doTextBox & 0x7f)) { + arg0->unk4 = 0; + arg0->unk0 &= -3; + return; + } + sub_0801CAD0(arg0); + if (arg0->unk13 == 1) { + gUnk_0200AF00.ezloNagFuncIndex = 4; + } +} \ No newline at end of file diff --git a/src/ezloReminder.c b/src/ezloReminder.c deleted file mode 100644 index d82cfb75..00000000 --- a/src/ezloReminder.c +++ /dev/null @@ -1,123 +0,0 @@ -#include "global.h" -#include "entity.h" -#include "functions.h" -#include "textbox.h" - -typedef struct { - s8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; - u8 unk4; - u8 unk5; - u8 unk6; - u8 unk7; - u8 unk8; - u8 unk9; - u8 unkA; - u8 unkB; - u16 unkC; - u16 unkE; - u16 unk10; - u8 unk12; - u8 unk13; -} Element; - -typedef struct { - u8 unk0[0x24]; - u8 ezloNagFuncIndex; -} struct_0200AF00; - -extern struct_0200AF00 gUnk_0200AF00; - -/////////////////////////////////////////////////////////////// - -extern void sub_0805ECEC(u32, u32, u32, u32); -extern void sub_0801CAD0(Element*); - -extern void (*const gUnk_080C904C[])(Element*); - -extern u16 gUnk_080C9058[]; - -void EzloReminder(Element* arg0) { - gUnk_080C904C[arg0->unk4](arg0); -} - -#ifdef NON_MATCHING // REG SWAP -extern u32 gUnk_080C9094; - -void sub_0801CED8(Element* arg0) { - if (gUnk_0200AF00.ezloNagFuncIndex == 1) { - gUnk_0200AF00.ezloNagFuncIndex = 2; - arg0->unkC = 0x10; - arg0->unkE = 0x90; - arg0->unk6 = 0; - arg0->unk1 = 7; - arg0->unk4 = 1; - arg0->unk0 |= 2; - sub_0801CAB8(arg0, &gUnk_080C9094); - } -} -#else -NAKED -void sub_0801CED8(Element* arg0) { - asm_unified("\ - push {r4, lr}\n\ - adds r3, r0, #0\n\ - ldr r0, _0801CF10 @ =gUnk_0200AF00\n\ - adds r1, r0, #0\n\ - adds r1, #0x24\n\ - ldrb r4, [r1]\n\ - cmp r4, #1\n\ - bne _0801CF0E\n\ - movs r2, #2\n\ - movs r0, #2\n\ - strb r0, [r1]\n\ - movs r1, #0\n\ - movs r0, #0x10\n\ - strh r0, [r3, #0xc]\n\ - movs r0, #0x90\n\ - strh r0, [r3, #0xe]\n\ - strb r1, [r3, #6]\n\ - movs r0, #7\n\ - strb r0, [r3, #1]\n\ - strb r4, [r3, #4]\n\ - ldrb r0, [r3]\n\ - orrs r0, r2\n\ - strb r0, [r3]\n\ - ldr r1, _0801CF14 @ =gUnk_080C9094\n\ - adds r0, r3, #0\n\ - bl sub_0801CAB8\n\ - _0801CF0E:\n\ - pop {r4, pc}\n\ - .align 2, 0\n\ - _0801CF10: .4byte gUnk_0200AF00\n\ - _0801CF14: .4byte gUnk_080C9094"); -} -#endif - -void sub_0801CF18(Element* arg0) { - u32 temp; - - temp = gUnk_080C9058[arg0->unk6++]; - sub_0805ECEC(0, temp, temp, 0); - if (temp == 0) { - arg0->unk4 = 2; - arg0->unk1 = 8; - gUnk_0200AF00.ezloNagFuncIndex = 3; - PlaySFX(0x173); - } -} - -void sub_0801CF60(Element* arg0) { - - if ((gUnk_0200AF00.ezloNagFuncIndex >= 5) || (gTextBox.doTextBox & 0x7f)) { - arg0->unk4 = 0; - arg0->unk0 &= -3; - return; - } - sub_0801CAD0(arg0); - if (arg0->unk13 == 1) { - gUnk_0200AF00.ezloNagFuncIndex = 4; - } -} \ No newline at end of file -- cgit v1.2.3 From 133984ad5b5b85c339095dcec2a0dc1a18533231 Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 9 Aug 2020 16:16:57 -0700 Subject: miniFireballGuy.c fixed nonmatching --- src/enemy/miniFireballGuy.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src') diff --git a/src/enemy/miniFireballGuy.c b/src/enemy/miniFireballGuy.c index a4c169d7..9ca6ad24 100644 --- a/src/enemy/miniFireballGuy.c +++ b/src/enemy/miniFireballGuy.c @@ -56,4 +56,21 @@ void sub_08045654(Entity *this) if (sub_08003FC4(this, 0x1800) == 0) { sub_08045678(this); } +} + +void sub_08045678(Entity *this) +{ + + this->field_0x20 = 0x1c000; + if (this->actionDelay != 0) { + this->actionDelay--; + } else { + this->actionDelay = Random() & 3; + if ((sub_08049FA0(this) == 0) && (Random() & 3)) { + this->direction = (sub_08049EE4(this) - 4 + (Random() & 8)) & 0x18; + } + else { + this->direction = Random() & 0x18; + } + } } \ No newline at end of file -- cgit v1.2.3 From 4a4ac6fc9139cf9373a0307cb85ae6dc72de5c3c Mon Sep 17 00:00:00 2001 From: theo3 Date: Sun, 9 Aug 2020 16:23:03 -0700 Subject: fixes --- src/object/pot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/object/pot.c b/src/object/pot.c index a31a5567..39a7b4c1 100755 --- a/src/object/pot.c +++ b/src/object/pot.c @@ -34,7 +34,7 @@ void sub_0808222C(Entity* this) { this->boundingBox = &gUnk_080FD338; this->nonPlanarMovement = 0x80; this->y.HALF.HI += 3; - this->possibleBool = 0; + this->field_0x16 = 0; this->flags |= 0x80; this->currentHealth = 1; this->field_0x3c = 7; -- cgit v1.2.3