summaryrefslogtreecommitdiff
path: root/src/code_0808091C.c
diff options
context:
space:
mode:
author21aslade <21aslade@go.dsdmail.net>2020-11-07 15:22:02 -0700
committer21aslade <21aslade@go.dsdmail.net>2020-11-07 15:22:02 -0700
commitd04dc143fbbef8feef61daf39d110703f4dfda9b (patch)
tree626b7ee4279b2224aa06bef8231fd6daa4363998 /src/code_0808091C.c
parent4b6f822829d6dd771ed995030f1bf1d24f204536 (diff)
parentf1bfe499de0afdd8e93c5e3e0e6c9e12b3343e1b (diff)
Merge branch 'master' of https://github.com/zeldaret/tmc
Diffstat (limited to 'src/code_0808091C.c')
-rw-r--r--src/code_0808091C.c75
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;
+}