diff options
| author | Henny022p <info@henny022.de> | 2022-01-31 17:30:51 +0100 |
|---|---|---|
| committer | Henny022p <info@henny022.de> | 2022-01-31 17:30:51 +0100 |
| commit | 2a53ee4bf2ee7eea617280118c2188bffec77ae5 (patch) | |
| tree | 85ed631ab330f9ca3734bb77253a374e3ef0de21 /src/manager | |
| parent | 9b60d9c5e24ed592524c25a9dc013417d6e7ee0c (diff) | |
| parent | 2b8d880ffc0a4548d25dc613d53a908d36362d84 (diff) | |
merge master
Diffstat (limited to 'src/manager')
| -rw-r--r-- | src/manager/manager1.c | 232 | ||||
| -rw-r--r-- | src/manager/manager1A.c | 6 | ||||
| -rw-r--r-- | src/manager/manager22.c | 2 | ||||
| -rw-r--r-- | src/manager/manager28.c | 2 | ||||
| -rw-r--r-- | src/manager/manager2C.c | 2 | ||||
| -rw-r--r-- | src/manager/manager4.c | 8 | ||||
| -rw-r--r-- | src/manager/manager7.c | 57 | ||||
| -rw-r--r-- | src/manager/managerB.c | 2 | ||||
| -rw-r--r-- | src/manager/managerC.c | 3 | ||||
| -rw-r--r-- | src/manager/managerF.c | 6 |
10 files changed, 280 insertions, 40 deletions
diff --git a/src/manager/manager1.c b/src/manager/manager1.c index a47dd57b..8664caab 100644 --- a/src/manager/manager1.c +++ b/src/manager/manager1.c @@ -3,23 +3,39 @@ #include "screen.h" #include "functions.h" #include "common.h" +#include "main.h" extern void sub_08056250(void); -extern void (*const gUnk_08107C5C[])(Entity*); -extern void (*const gUnk_08107C48[])(Entity*); +void (*const gUnk_08107C5C[])(Entity*); +void (*const gUnk_08107C48[])(Entity*); +const u16 gUnk_08107C1C[]; +const u16 gUnk_08107C30[]; +const u8 gManager1GfxGroups[]; -extern u8 gUnk_08107C40[]; +extern u16 gUnk_02017AA0[]; +extern u16 gUnk_085B4180[]; + +typedef struct { + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; + u8 unk4; +} PACKED Manager1Prop; + +#define ZV(this) ((u8*)&this->zVelocity) +#define ZS(this) ((u8*)&this->speed) void Manager1_Main(Entity* this) { u8 bVar1; u8* pbVar2; gUnk_08107C5C[this->action](this); - gUnk_08107C48[((u8*)&this->zVelocity)[1]](this); - bVar1 = gUnk_08107C40[((u8*)&this->zVelocity)[1]]; - if ((bVar1 != 0) && (*(u8*)&this->zVelocity != bVar1)) { - ((u8*)&this->zVelocity)[0] = bVar1; + gUnk_08107C48[ZV(this)[1]](this); + bVar1 = gManager1GfxGroups[ZV(this)[1]]; + if ((bVar1 != 0) && (ZV(this)[0] != bVar1)) { + ZV(this)[0] = bVar1; LoadGfxGroup(bVar1); } } @@ -27,9 +43,9 @@ void Manager1_Main(Entity* this) { static void sub_080570B8(Entity* this) { u8* pbVar1; - LoadGfxGroup(((u8*)&this->zVelocity)[0]); + LoadGfxGroup(ZV(this)[0]); this->z.WORD = 0; - pbVar1 = ((u8*)&this->zVelocity + 1); + pbVar1 = &ZV(this)[1]; if (*pbVar1 == 3) { gScreen.bg3.updated = 1; } else { @@ -45,9 +61,9 @@ static void sub_080570F8(void) { void sub_08057118(Entity* this) { this->actionDelay = 0; - *(u8*)&this->zVelocity = 0; - ((u8*)&this->zVelocity)[1] = 0; - ((u8*)&this->zVelocity)[2] = 0; + ZV(this)[0] = 0; + ZV(this)[1] = 0; + ZV(this)[2] = 0; this->action = 1; gScreen.bg3.control = 0x1e04; gScreen.lcd.displayControl |= DISPCNT_BG3_ON; @@ -56,16 +72,194 @@ void sub_08057118(Entity* this) { RegisterTransitionManager(this, sub_080570B8, sub_080570F8); } -ASM_FUNC("asm/non_matching/manager1/sub_08057174.inc", void sub_08057174()) +// regalloc +NONMATCH("asm/non_matching/manager1/sub_08057174.inc", void sub_08057174(Entity* this)) { + Manager1Prop* prop = GetCurrentRoomProperty(this->type); + s32 temp; + s32 x; + s32 y; + + if (prop->unk0 == 0xff) + return; + temp = gPlayerEntity.x.HALF.HI; + if (temp < 0) { + temp += 0xf; + } + + x = temp >> 4; + temp = gPlayerEntity.y.HALF.HI; + if (temp < 0) { + temp += 0xf; + } + + y = temp >> 4; + + for (; prop->unk0 != 0xff; prop++) { + if (prop->unk0 != ZV(this)[1]) { + u32 x2 = (gRoomControls.origin_x >> 4) + prop->unk1; + u32 y2 = (gRoomControls.origin_y >> 4) + prop->unk2; + + if (y - y2 < prop->unk4 && x - x2 < prop->unk3) { + switch (prop->unk0) { + case 1: + if (ZV(this)[1] == 2) { + this->action = 3; + this->actionDelay = 9; + } + break; + case 5: + if (ZV(this)[1] == 6) { + this->action = 3; + this->actionDelay = 9; + } + break; + case 2: + if (ZV(this)[1] == 0) { + this->action = 2; + this->actionDelay = 0; + ZV(this)[0] = 0; + } + break; + case 6: + if (ZV(this)[1] == 0) { + this->action = 2; + this->actionDelay = 0; + } + break; + case 4: + if (ZV(this)[1] == 0) { + this->action = 2; + this->actionDelay = 0; + this->z.WORD = 0; + } + break; + case 3: + if (ZV(this)[1] == 4) { + this->action = 3; + this->actionDelay = 9; + } + break; + } + + if (this->action != 1) { + this->field_0xf = 8; + ZV(this)[1] = prop->unk0; + ZV(this)[2] = 1; + return; + } + } + } + } +} +END_NONMATCH + +void sub_0805728C(Entity* this) { + if (--this->field_0xf == 0) { + this->field_0xf = 8; + gScreen.controls.alphaBlend = gUnk_08107C1C[this->actionDelay++]; + + if (this->actionDelay == 10) { + this->action = 1; + ZV(this)[2] = 0; + } + } +} + +void sub_080572D4(Entity* this) { + if (--this->field_0xf == 0) { + this->field_0xf = 8; + gScreen.controls.alphaBlend = gUnk_08107C1C[this->actionDelay--]; + + if (this->actionDelay == 0xff) { + this->action = 1; + ZV(this)[2] = 0; + ZV(this)[1] = 0; + gScreen._6c = 0; + } + } +} + +void sub_0805732C(u32 param_1, u32 param_2) { + u32 index; + u16* ptr = &gUnk_02017AA0[gUnk_03003DE4 * 0x500]; + + for (index = 0; index < 0xa0; ptr++, index++) { + *ptr = gSineTable[(param_2 + index) & 0xff] * param_1 / 0x100 + gScreen.bg3.xOffset; + } + + sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4 * 0x500], REG_ADDR_BG3HOFS, 0xa2600001UL); +} + +void nullsub_494() { +} + +void sub_080573AC(Entity* this) { + s32 sin, frameCount; + gRoomControls.bg3OffsetX.WORD -= 0x2000; + gRoomControls.bg3OffsetY.WORD -= 0x1000; + gScreen.bg3.xOffset = ((gRoomControls.scroll_x - gRoomControls.origin_x) >> 1) + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.bg3.yOffset = ((gRoomControls.scroll_y - gRoomControls.origin_y) >> 1) + gRoomControls.bg3OffsetY.HALF.HI; + sin = gSineTable[(gRoomTransition.frameCount & 0xff) + 0x40]; + sub_0805732C((sin >> 5) + 0x10, gRoomTransition.frameCount); + if (ZV(this)[2] == 0) { + if ((gRoomTransition.frameCount & 0x1f) == 0) { + ZS(this)[0] = (ZS(this)[0] + 1) & 7; + gScreen.controls.alphaBlend = gUnk_08107C30[ZS(this)[0]]; + } + } +} + +void sub_08057450(Entity* this) { + s32 y; + gScreen.bg3.xOffset = 0x10; + y = gRoomControls.scroll_y; + y -= gRoomControls.origin_y; + y >>= 2; + + gScreen.bg3.yOffset = y & 0x3f; + gScreen.bg3.tilemap = &gBG3Buffer[(y / 0x40) << 8]; + if ((void*)this->z.WORD != gScreen.bg3.tilemap) { + this->z.WORD = (u32)gScreen.bg3.tilemap; + gScreen.bg3.updated = 1; + } + + if (ZV(this)[2] == 0 && (gRoomTransition.frameCount & 0x1f) == 0) { + ZS(this)[0] = (ZS(this)[0] + 1) & 7; + gScreen.controls.alphaBlend = gUnk_08107C30[ZS(this)[0]]; + } + + if ((gRoomTransition.frameCount & 0x7) == 0) { + u32 index; + u16* ptr = &gUnk_085B4180[(ZV(this)[3] << 4)]; + + for (index = 0, ptr = ptr + 7; index <= 3; index++) { + SetColor(index + 0x87, *(ptr + index)); + SetColor(index + 0x8c, *(ptr + index + 5)); + } -ASM_FUNC("asm/non_matching/manager1/sub_0805728C.inc", void sub_0805728C()) + ZV(this)[3] = (ZV(this)[3] + 1) & 3; + } +} -ASM_FUNC("asm/non_matching/manager1/sub_080572D4.inc", void sub_080572D4()) +const u16 gUnk_08107C1C[] = { + 0x1000, 0xF01, 0xE02, 0xD03, 0xC04, 0xB05, 0xA06, 0x907, 0x908, 0x909, +}; -ASM_FUNC("asm/non_matching/manager1/sub_0805732C.inc", void sub_0805732C()) +const u16 gUnk_08107C30[] = { + 0x909, 0xA08, 0xB07, 0xC06, 0xD05, 0xC06, 0xB07, 0xA08, +}; -ASM_FUNC("asm/non_matching/manager1/nullsub_494.inc", void nullsub_494()) +const u8 gManager1GfxGroups[] = { + 0x25, 0x00, 0x24, 0x00, 0x25, 0x00, 0x00, 0x00, +}; -ASM_FUNC("asm/non_matching/manager1/sub_080573AC.inc", void sub_080573AC()) +void (*const gUnk_08107C48[])(Entity*) = { + nullsub_494, nullsub_494, sub_080573AC, nullsub_494, sub_08057450, +}; -ASM_FUNC("asm/non_matching/manager1/sub_08057450.inc", void sub_08057450()) +void (*const gUnk_08107C5C[])(Entity*) = { + sub_08057118, + sub_08057174, + sub_0805728C, + sub_080572D4, +}; diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c index 9aea4722..cb8c6eeb 100644 --- a/src/manager/manager1A.c +++ b/src/manager/manager1A.c @@ -155,9 +155,9 @@ void sub_0805B210(Manager1A* this) { gRoomTransition.player_status.room_next = tmp->unk_02; gRoomTransition.player_status.layer = tmp->unk_03; if (gPlayerState.flags & PL_MINISH) { - gRoomTransition.player_status.spawn_type = 6; + gRoomTransition.player_status.spawn_type = PL_SPAWN_DROP_MINISH; } else { - gRoomTransition.player_status.spawn_type = 2; + gRoomTransition.player_status.spawn_type = PL_SPAWN_DROP; } switch (tmp->unk_00) { case 0: @@ -171,7 +171,7 @@ void sub_0805B210(Manager1A* this) { case 2: gRoomTransition.player_status.start_pos_x = tmp->unk_04; gRoomTransition.player_status.start_pos_y = tmp->unk_06; - gRoomTransition.player_status.spawn_type = 6; + gRoomTransition.player_status.spawn_type = PL_SPAWN_DROP_MINISH; break; } } diff --git a/src/manager/manager22.c b/src/manager/manager22.c index b06295e2..5faa1a2c 100644 --- a/src/manager/manager22.c +++ b/src/manager/manager22.c @@ -11,7 +11,7 @@ ASM_FUNC("asm/non_matching/manager22/sub_0805BB00.inc", void sub_0805BB00()) ASM_FUNC("asm/non_matching/manager22/sub_0805BB74.inc", void sub_0805BB74()) -ASM_FUNC("asm/non_matching/manager22/sub_0805BBBC.inc", void UpdateLightLevel()) +ASM_FUNC("asm/non_matching/manager22/UpdateLightLevel.inc", void UpdateLightLevel()) ASM_FUNC("asm/non_matching/manager22/sub_0805BC04.inc", void sub_0805BC04()) diff --git a/src/manager/manager28.c b/src/manager/manager28.c index 98bfa916..c921d4a5 100644 --- a/src/manager/manager28.c +++ b/src/manager/manager28.c @@ -113,7 +113,7 @@ Entity* Manager28_FindMatchingEntity(EntityData* unk1) { y = unk1->yPos + gRoomControls.origin_y; tmp = &gEntityLists[4]; for (i = tmp->first; (u32)i != (u32)tmp; i = i->next) { - if (x == i->x.HALF.HI && y == i->y.HALF.HI && unk1->id == i->id && 3 == i->kind && unk1->type == i->type) { + if (x == i->x.HALF.HI && y == i->y.HALF.HI && unk1->id == i->id && ENEMY == i->kind && unk1->type == i->type) { return i; } } diff --git a/src/manager/manager2C.c b/src/manager/manager2C.c index 3ad27242..83601282 100644 --- a/src/manager/manager2C.c +++ b/src/manager/manager2C.c @@ -25,7 +25,7 @@ void Manager2C_Main(Manager2C* manager) { MemClear(&gRoomTransition.player_status, 0x20); gRoomTransition.transitioningOut = 1; gRoomTransition.type = TRANSITION_DEFAULT; - gRoomTransition.player_status.spawn_type = 0xb; + gRoomTransition.player_status.spawn_type = PL_SPAWN_PARACHUTE_UP; gRoomTransition.player_status.area_next = manager->manager.unk_0b; gRoomTransition.player_status.room_next = manager->manager.unk_0e; gRoomTransition.player_status.start_anim = manager->field_0x37; diff --git a/src/manager/manager4.c b/src/manager/manager4.c index f73c9514..7568960d 100644 --- a/src/manager/manager4.c +++ b/src/manager/manager4.c @@ -91,9 +91,6 @@ u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) { extern void sub_08080930(u32); -#ifdef EU -ASM_FUNC("asm/non_matching/eu/sub_08057A18.inc", void sub_08057A18(Manager* this, DiggingCaveEntrance* entr)) -#else void sub_08057A18(Manager* this, DiggingCaveEntrance* entr) { u16 tmp; SetInitializationPriority(); @@ -106,6 +103,8 @@ void sub_08057A18(Manager* this, DiggingCaveEntrance* entr) { gUnk_03004030.unk_00 = entr; gUnk_03004030.unk_04 = gPlayerEntity.x.HALF.HI - gRoomControls.origin_x - ((entr->unk_00 & 0x3F) * 16); gUnk_03004030.unk_06 = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y - ((entr->unk_00 & 0xFC0) >> 2); + +#ifndef EU tmp = gUnk_03004030.unk_08; if (!tmp) { if ((entr->target_room | 0x80) != gUnk_03004030.unk_0b) { @@ -113,10 +112,11 @@ void sub_08057A18(Manager* this, DiggingCaveEntrance* entr) { } gUnk_03004030.unk_0b = entr->target_room | 0x80; } +#endif + sub_08080930(entr->unk_03); DeleteManager(this); } -#endif DiggingCaveEntrance* sub_08057AA8(DiggingCaveEntrance* entr, int room) { for (; entr->unk_00 != 0xFFFF; entr++) { diff --git a/src/manager/manager7.c b/src/manager/manager7.c index 0560a005..25a73eb4 100644 --- a/src/manager/manager7.c +++ b/src/manager/manager7.c @@ -55,7 +55,54 @@ const u32 gUnk_081080A4[0x50] = { const u8 gUnk_081081E4[] = { 0x16, 0x17, 0x17, 0x18, 0x18 }; #ifdef EU -ASM_FUNC("asm/non_matching/eu/Manager7_Main.inc", void Manager7_Main(Manager7* this)) +void Manager7_Main(Manager7* this) { + u32 tmp; + const u32* tmp2; + s32 tmp3; + if (!this->manager.action) { + this->manager.action = 1; + this->manager.unk_0e = 8; + this->unk_20 = 0xFF; + + RegisterTransitionManager(this, sub_08057E30, 0); + } + if (gRoomControls.reload_flags) + return; + + if (sub_08057E40(this)) { + tmp = (u32)gRoomVars.unk_10[0]; + if (this->unk_20 != tmp) { + this->unk_20 = tmp; + this->manager.unk_0e = 0; + } + } + + tmp2 = &gUnk_081080A4[tmp << 4]; + tmp3 = this->manager.unk_0e; + if (tmp3 == 0) { + gUnk_02034490.unk0 = 1; + LoadResourceAsync(&gGlobalGfxAndPalettes[tmp2[0]], tmp2[1], 0x1000); + LoadPaletteGroup(gUnk_081081E4[tmp]); + this->manager.unk_0e++; + } else { + switch (tmp3) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + LoadResourceAsync(&gGlobalGfxAndPalettes[tmp2[(this->manager.unk_0e << 1)]], + tmp2[(this->manager.unk_0e << 1) + 1], 0x1000); + this->manager.unk_0e++; + gUnk_02034490.unk0 = 0; + case 8: + break; + } + } +} #else void Manager7_Main(Manager7* this) { u32 tmp; @@ -129,14 +176,15 @@ void sub_08057E64(void) { } } -#ifdef EU -ASM_FUNC("asm/non_matching/eu/sub_08057E7C.inc", void sub_08057E7C(u32 unk1)) -#else void sub_08057E7C(u32 unk1) { u32 tmp; const u32* tmp2; + +#ifndef EU if (unk1 > 4) return; +#endif + LoadPaletteGroup(gUnk_081081E4[unk1]); tmp2 = &gUnk_081080A4[unk1 << 4]; for (tmp = 0; tmp < 8; tmp++, tmp2 += 2) { @@ -144,4 +192,3 @@ void sub_08057E7C(u32 unk1) { } gRoomVars.unk_10[0] = unk1; } -#endif diff --git a/src/manager/managerB.c b/src/manager/managerB.c index a476efe7..a54ae310 100644 --- a/src/manager/managerB.c +++ b/src/manager/managerB.c @@ -98,7 +98,7 @@ void ManagerB_LoadFight(Manager* this) { if (prop) { while (*((u8*)prop) != 0xFF) { ent = LoadRoomEntity(prop++); - if (ent && (ent->kind == 3)) { + if (ent && (ent->kind == ENEMY)) { ent->field_0x6c.HALF.HI |= 0x40; ManagerBHelper_Monitor(monitor, ent, counter++); } diff --git a/src/manager/managerC.c b/src/manager/managerC.c index 5f498695..c3fdaa8a 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -46,7 +46,6 @@ u32 sub_08058B08(ManagerC*, u32, u32, const struct_08108228*); void sub_08058B5C(ManagerC*, u32); extern void sub_0805622C(struct BgAffineDstData*, u32, u32); -extern void sub_080044AE(Entity*, u32, u32); extern u8 gUnk_03003DE4[0xC]; @@ -207,7 +206,7 @@ const u16 gUnk_081082E8[0xC] = { 0xB8, 0x80, 0x0, 0xB8, 0x110, 0x2, 0x118, 0x80, void sub_08058B5C(ManagerC* this, u32 unk1) { gRoomTransition.transitioningOut = 1; gRoomTransition.type = TRANSITION_DEFAULT; - gRoomTransition.player_status.spawn_type = 4; + gRoomTransition.player_status.spawn_type = PL_SPAWN_STEP_IN; gRoomTransition.player_status.area_next = gRoomControls.area; gRoomTransition.player_status.room_next = 6; gRoomTransition.player_status.start_anim = unk1 & 1 ? 4 : 0; diff --git a/src/manager/managerF.c b/src/manager/managerF.c index 93724172..39f3ca47 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -361,7 +361,7 @@ void sub_0805938C(ManagerF* this) { u32 sub_080593CC(ManagerF* this) { if (!(gPlayerState.flags & PL_MINISH) && gPlayerState.swim_state != 0 && gPlayerEntity.animationState == 0 && (gPlayerState.field_0x90 & 0xF00) == 0x400) { - return sub_0806FCB8(&gPlayerEntity, this->unk_38, this->unk_3a + 0xC, 6); + return EntityWithinDistance(&gPlayerEntity, this->unk_38, this->unk_3a + 0xC, 6); } return 0; } @@ -379,7 +379,7 @@ void sub_08059424(ManagerF* this) { tmp->collisionLayer = 2; tmp->x.HALF.HI = this->unk_38 + gRoomControls.origin_x; tmp->y.HALF.HI = this->unk_3a + gRoomControls.origin_y; - EnqueueSFX(0x1B0); + EnqueueSFX(SFX_1B0); DeleteThisEntity(); } @@ -427,7 +427,7 @@ void sub_080594DC(ManagerF* this) { #if defined(USA) || defined(DEMO_USA) || defined(DEMO_JP) void sub_08059548(ManagerF* this) { SetDefaultPriority((Entity*)this, PRIO_PLAYER_EVENT); - if (gPlayerEntity.action == 0x16) { + if (gPlayerEntity.action == PLAYER_TALKEZLO) { DeleteThisEntity(); } gInput.heldKeys |= 0x4; |
