diff options
| author | 21aslade <21aslade@go.dsdmail.net> | 2020-11-07 15:22:02 -0700 |
|---|---|---|
| committer | 21aslade <21aslade@go.dsdmail.net> | 2020-11-07 15:22:02 -0700 |
| commit | d04dc143fbbef8feef61daf39d110703f4dfda9b (patch) | |
| tree | 626b7ee4279b2224aa06bef8231fd6daa4363998 /src/code_0808091C.c | |
| parent | 4b6f822829d6dd771ed995030f1bf1d24f204536 (diff) | |
| parent | f1bfe499de0afdd8e93c5e3e0e6c9e12b3343e1b (diff) | |
Merge branch 'master' of https://github.com/zeldaret/tmc
Diffstat (limited to 'src/code_0808091C.c')
| -rw-r--r-- | src/code_0808091C.c | 75 |
1 files changed, 73 insertions, 2 deletions
diff --git a/src/code_0808091C.c b/src/code_0808091C.c index dcb86728..ae04dcad 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -5,10 +5,12 @@ #include "room.h" extern void sub_0805E5A8(); +extern void sub_08080BC4(void); extern RoomControls gRoomControls; extern u32 gUnk_0200B650; extern u32 gUnk_02025EB0; +extern u8 gUnk_02000070; extern void DoExitTransition(ScreenTransitionData*); extern void sub_080809D4(); @@ -53,7 +55,6 @@ void sub_08080930(void) } u32* GetLayerByIndex(u32 param_1) - { if (param_1 == 2) { @@ -64,9 +65,79 @@ u32* GetLayerByIndex(u32 param_1) } void sub_08080964(u16 time, u32 magnitude) - { gRoomControls.screenShakeTime = time; gRoomControls.screenShakeMagnitude = magnitude & 7; return; } + +void sub_08080974(u32 arg0, u32 arg1) { + u32 var0, var1; + RoomControls* roomControls = &gRoomControls; + + var0 = roomControls->roomOriginX; + if (arg0 <= var0 + 120) { + roomControls->roomScrollX = var0; + } else { + var0 += roomControls->width; + var1 = var0 - 120; + if (arg0 < var1) { + var1 = arg0; + } + roomControls->roomScrollX = var1 - 120; + } + + var0 = roomControls->roomOriginY; + if (arg1 <= var0 + 80) { + roomControls->roomScrollY = var0; + } else { + var0 += roomControls->height; + var1 = var0 - 80; + if (arg1 < var1) { + var1 = arg1; + } + roomControls->roomScrollY = var1 - 80; + } + + sub_080809D4(); + gUnk_02000070 = 1; +} + +void sub_080809D4(void) { + register Entity* target asm("r4"); + int x, y; + int var1, var0; + RoomControls* roomControls = &gRoomControls; + roomControls->unk6 &= 0xFB; + + target = roomControls->cameraTarget; + x = target->x.HALF.HI; + var0 = roomControls->roomOriginX; + if (x <= var0 + 120) { + roomControls->roomScrollX = var0; + } else { + var0 += roomControls->width; + var1 = var0 - 120; + if (x < var1) { + var1 = (u16)target->x.HALF.HI; + } + roomControls->roomScrollX = var1 - 120; + } + + target = roomControls->cameraTarget; + y = target->y.HALF.HI; + var0 = roomControls->roomOriginY; + if (y <= var0 + 80) { + roomControls->roomScrollY = var0; + } else { + var0 += roomControls->height; + var1 = var0 - 80; + if (y < var1) { + var1 = (u16)target->y.HALF.HI; + } + roomControls->roomScrollY = var1 - 80; + } + + sub_08080BC4(); + gUnk_02000070 = 1; +} |
