diff options
| author | octorock <79596758+octorock@users.noreply.github.com> | 2022-06-06 12:42:25 +0200 |
|---|---|---|
| committer | octorock <79596758+octorock@users.noreply.github.com> | 2022-06-11 22:58:02 +0200 |
| commit | e11cfed066a3c7cc2fdbbdb34ca15e80b224997b (patch) | |
| tree | dafeda60efe80c74e94c1e073b7c80f0578dd70b /src/scroll.c | |
| parent | 06d6f7aaa4502698ddef83821c258f835ea41fbd (diff) | |
Decompile some functions
Diffstat (limited to 'src/scroll.c')
| -rw-r--r-- | src/scroll.c | 91 |
1 files changed, 71 insertions, 20 deletions
diff --git a/src/scroll.c b/src/scroll.c index 4a3c4742..7a4abdc0 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -13,8 +13,8 @@ extern void sub_08080BC4(void); extern void sub_080197D4(const void*); -extern void sub_0807C8B0(u8*, u32, u32); -extern void sub_0801AB08(u8*, u8*); +extern void sub_0807C8B0(u16*, u32, u32); +extern void sub_0801AB08(u8*, LayerStruct*); extern void sub_0807C810(); extern void DeleteSleepingEntities(void); extern void sub_0807BBE4(); @@ -24,10 +24,8 @@ extern void sub_0805E248(); extern u8 gUpdateVisibleTiles; extern u16 gUnk_0200B640; extern u32** gUnk_08109194[]; -extern u8 gMapDataTop[]; -extern u8 gMapDataBottom[]; extern u8 gUnk_02022830[]; -extern u8 gUnk_020246B0[]; +extern u16 gUnk_020246B0[]; void sub_0807FC64(RoomControls*); void sub_0807FC7C(RoomControls*); @@ -51,7 +49,7 @@ u32 sub_080803D0(); u32 sub_08080278(); void sub_08080C80(u32*); void sub_08080368(); -void sub_08080B60(u8*); +void sub_08080B60(LayerStruct*); bool32 sub_08080794(const Transition* transition, u32 param_2, u32 param_3, u32 param_4); bool32 sub_08080808(const Transition* transition, u32 param_2, u32 param_3, u32 param_4); void sub_080808D8(s32); @@ -61,6 +59,8 @@ void sub_08080910(s32); extern u8 gMapDataTopSpecial[]; +extern const s8 gUnk_080169A4[]; + void UpdateScroll(void) { static void (*const gUnk_0811E768[])(RoomControls*) = { sub_0807FC64, sub_0807FC7C, sub_0807FDB0, NULL, sub_0807FEF0, sub_0807FF54, @@ -214,8 +214,8 @@ void sub_0807FFE4(RoomControls* controls) { controls->filler2[0] = sub_080803D0() + 6; gUnk_0200B640 = sub_08080278(); sub_080197D4(*gUnk_08109194[gDiggingCaveEntranceTransition.entrance->type]); - sub_0807C8B0(gMapDataTop, controls->width >> 4, controls->height >> 4); - sub_0801AB08(gMapDataTopSpecial, gMapDataTop - 4); + sub_0807C8B0(gMapTop.mapData, controls->width >> 4, controls->height >> 4); + sub_0801AB08(gMapDataTopSpecial, &gMapTop); } void sub_08080040(RoomControls* controls) { @@ -262,18 +262,18 @@ void sub_08080040(RoomControls* controls) { void sub_08080108(RoomControls* controls) { controls->unk4 = 4; - MemCopy(gMapDataBottom, gMapDataBottom + 0x3000, 0x2000); - MemCopy(gMapDataTop, gMapDataTop + 0x3000, 0x2000); + MemCopy(gMapBottom.mapData, gMapBottom.mapDataClone, sizeof(gMapBottom.mapData)); + MemCopy(gMapTop.mapData, gMapTop.mapDataClone, sizeof(gMapTop.mapData)); sub_08080368(); gUnk_02034480.unk_00 = gUnk_0200B640; MemCopy(gUnk_02022830, gUnk_020246B0, 0x1800); - sub_08080B60(gMapDataBottom - 4); - sub_08080B60(gMapDataTop - 4); + sub_08080B60(&gMapBottom); + sub_08080B60(&gMapTop); sub_0807BBE4(); sub_0807BC84(); sub_0805E248(); - sub_0801AB08((u8*)&gMapDataBottomSpecial, gMapDataBottom - 4); - sub_0801AB08(gMapDataTopSpecial, gMapDataTop - 4); + sub_0801AB08((u8*)&gMapDataBottomSpecial, &gMapBottom); + sub_0801AB08(gMapDataTopSpecial, &gMapTop); } void sub_08080198(RoomControls* controls) { @@ -332,7 +332,26 @@ void sub_080801BC(RoomControls* controls) { ASM_FUNC("asm/non_matching/scroll/sub_08080278.inc", u32 sub_08080278()) -ASM_FUNC("asm/non_matching/scroll/sub_08080368.inc", void sub_08080368()) +void sub_08080368(void) { + u32 tmp; + u32 index; + u16* ptr; + + if ((gDiggingCaveEntranceTransition.previousArea != gRoomControls.area) && + (gDiggingCaveEntranceTransition.previousArea != 0xff)) { + gUnk_02034480.unk_00 = 0; + } else { + ptr = gUnk_020246B0; + tmp = gUnk_02034480.unk_00 << 1; + index = 0; + while (index < tmp) { + sub_0807B9B8(ptr[1], ptr[0] & 0xfff, (ptr[0] >> 0xe)); + ptr += 2; + index += 2; + } + gUpdateVisibleTiles = 0; + } +} ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", u32 sub_080803D0()) @@ -614,14 +633,46 @@ void sub_080809D4(void) { ASM_FUNC("asm/non_matching/scroll/UpdateDoorTransition.inc", void UpdateDoorTransition()) -ASM_FUNC("asm/non_matching/scroll/sub_08080B60.inc", void sub_08080B60(u8* param_1)) - -ASM_FUNC("asm/non_matching/scroll/sub_08080BC4.inc", void sub_08080BC4()) +ASM_FUNC("asm/non_matching/scroll/sub_08080B60.inc", void sub_08080B60(LayerStruct* param_1)) + +void sub_08080BC4(void) { + const s8* ptr; + s32 tmpX; + s32 tmpY; + + tmpX = (gRoomControls.scroll_x - gRoomControls.origin_x) & 0xf; + tmpY = ((gRoomControls.scroll_y - gRoomControls.origin_y) & 0xf) + 8; + if (gRoomControls.shake_duration != 0) { + gRoomControls.shake_duration--; + ptr = &gUnk_080169A4[gRoomControls.shake_magnitude * 0x10 + (gRoomControls.shake_duration & 0xe)]; + if (gMapBottom.bgSettings != NULL) { + gMapBottom.bgSettings->xOffset = ptr[0] + tmpX; + gMapBottom.bgSettings->yOffset = ptr[1] + tmpY; + } + if (gMapTop.bgSettings != NULL) { + gMapTop.bgSettings->xOffset = ptr[0] + tmpX; + gMapTop.bgSettings->yOffset = ptr[1] + tmpY; + } + gRoomControls.aff_x = ptr[0]; + gRoomControls.aff_y = ptr[1]; + } else { + if (gMapBottom.bgSettings != NULL) { + gMapBottom.bgSettings->xOffset = tmpX; + gMapBottom.bgSettings->yOffset = tmpY; + } + if (gMapTop.bgSettings != NULL) { + gMapTop.bgSettings->xOffset = tmpX; + gMapTop.bgSettings->yOffset = tmpY; + } + gRoomControls.aff_x = 0; + gRoomControls.aff_y = 0; + } +} void sub_08080C80(u32* param_1) { sub_080197D4(param_1); - sub_0807C8B0(gMapDataBottom, gRoomControls.width >> 4, gRoomControls.height >> 4); - sub_0807C8B0(gMapDataTop, gRoomControls.width >> 4, gRoomControls.height >> 4); + sub_0807C8B0(gMapBottom.mapData, gRoomControls.width >> 4, gRoomControls.height >> 4); + sub_0807C8B0(gMapTop.mapData, gRoomControls.width >> 4, gRoomControls.height >> 4); } ASM_FUNC("asm/non_matching/scroll/sub_08080CB4.inc", void sub_08080CB4(Entity* a)) |
