summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2022-03-23 11:05:34 -0700
committerGitHub <noreply@github.com>2022-03-23 11:05:34 -0700
commitfc3dc169519bc30da79d89ac9afaff7ca71b8eed (patch)
treee95982c237db55850670f1170bfe24dc5dc9b601
parent8986a26008b182d734acc534010ad3f52ea64378 (diff)
parent60eb3e1d9201ad07fb184dd0de6c51bc3c136817 (diff)
Merge pull request #462 from hatal175/scroll
-rw-r--r--asm/beanstalkSubtask.s2
-rw-r--r--asm/non_matching/scroll/sub_0807FDF8.inc110
-rw-r--r--asm/non_matching/scroll/sub_0807FF6C.inc57
-rw-r--r--asm/non_matching/scroll/sub_0807FFE4.inc39
-rw-r--r--asm/non_matching/scroll/sub_08080040.inc102
-rw-r--r--asm/non_matching/scroll/sub_08080108.inc56
-rw-r--r--asm/non_matching/scroll/sub_080801BC.inc100
-rw-r--r--data/data_0811E750.s28
-rw-r--r--include/manager.h2
-rw-r--r--linker.ld1
-rw-r--r--src/manager/manager4.c12
-rw-r--r--src/scroll.c282
12 files changed, 262 insertions, 529 deletions
diff --git a/asm/beanstalkSubtask.s b/asm/beanstalkSubtask.s
index 8086e86e..0d925e49 100644
--- a/asm/beanstalkSubtask.s
+++ b/asm/beanstalkSubtask.s
@@ -3181,7 +3181,7 @@ sub_0801AE44: @ 0x0801AE44
bl LoadRoomGfx
_0801AE5A:
bl sub_080809D4
- bl sub_080805F8
+ bl UpdateIsDiggingCave
ldr r0, _0801AEE4 @ =gRoomTransition
adds r0, #0x2d
ldrb r0, [r0]
diff --git a/asm/non_matching/scroll/sub_0807FDF8.inc b/asm/non_matching/scroll/sub_0807FDF8.inc
deleted file mode 100644
index 2bd0510a..00000000
--- a/asm/non_matching/scroll/sub_0807FDF8.inc
+++ /dev/null
@@ -1,110 +0,0 @@
- .syntax unified
- push {r4, lr}
- adds r4, r0, #0
- ldr r1, _0807FE18 @ =gUpdateVisibleTiles
- movs r0, #2
- strb r0, [r1]
- ldrh r0, [r4, #0x18]
- adds r0, #1
- strh r0, [r4, #0x18]
- ldrb r0, [r4, #0x10]
- cmp r0, #1
- beq _0807FE44
- cmp r0, #1
- bgt _0807FE1C
- cmp r0, #0
- beq _0807FE26
- b _0807FEB6
- .align 2, 0
-_0807FE18: .4byte gUpdateVisibleTiles
-_0807FE1C:
- cmp r0, #2
- beq _0807FE68
- cmp r0, #3
- beq _0807FE94
- b _0807FEB6
-_0807FE26:
- ldrh r0, [r4, #0xc]
- subs r0, #4
- strh r0, [r4, #0xc]
- ldr r1, [r4, #0x30]
- ldr r0, _0807FE3C @ =gPlayerEntity
- cmp r1, r0
- bne _0807FE80
- ldr r0, [r1, #0x30]
- ldr r2, _0807FE40 @ =0xFFFFA000
- b _0807FE7C
- .align 2, 0
-_0807FE3C: .4byte gPlayerEntity
-_0807FE40: .4byte 0xFFFFA000
-_0807FE44:
- ldrh r0, [r4, #0xa]
- adds r0, #4
- strh r0, [r4, #0xa]
- ldr r1, [r4, #0x30]
- ldr r0, _0807FE64 @ =gPlayerEntity
- cmp r1, r0
- bne _0807FE5C
- ldr r0, [r1, #0x2c]
- movs r2, #0x80
- lsls r2, r2, #7
- adds r0, r0, r2
- str r0, [r1, #0x2c]
-_0807FE5C:
- ldrh r0, [r4, #0x18]
- cmp r0, #0x3c
- bne _0807FEB6
- b _0807FE86
- .align 2, 0
-_0807FE64: .4byte gPlayerEntity
-_0807FE68:
- ldrh r0, [r4, #0xc]
- adds r0, #4
- strh r0, [r4, #0xc]
- ldr r1, [r4, #0x30]
- ldr r0, _0807FE90 @ =gPlayerEntity
- cmp r1, r0
- bne _0807FE80
- ldr r0, [r1, #0x30]
- movs r2, #0xc0
- lsls r2, r2, #7
-_0807FE7C:
- adds r0, r0, r2
- str r0, [r1, #0x30]
-_0807FE80:
- ldrh r0, [r4, #0x18]
- cmp r0, #0x28
- bne _0807FEB6
-_0807FE86:
- adds r0, r4, #0
- bl sub_0807FEC8
- b _0807FEB6
- .align 2, 0
-_0807FE90: .4byte gPlayerEntity
-_0807FE94:
- ldrh r0, [r4, #0xa]
- subs r0, #4
- strh r0, [r4, #0xa]
- ldr r1, [r4, #0x30]
- ldr r0, _0807FEC0 @ =gPlayerEntity
- cmp r1, r0
- bne _0807FEAA
- ldr r0, [r1, #0x2c]
- ldr r2, _0807FEC4 @ =0xFFFFC000
- adds r0, r0, r2
- str r0, [r1, #0x2c]
-_0807FEAA:
- ldrh r0, [r4, #0x18]
- cmp r0, #0x3c
- bne _0807FEB6
- adds r0, r4, #0
- bl sub_0807FEC8
-_0807FEB6:
- movs r0, #0
- strh r0, [r4, #0x16]
- bl sub_08080BC4
- pop {r4, pc}
- .align 2, 0
-_0807FEC0: .4byte gPlayerEntity
-_0807FEC4: .4byte 0xFFFFC000
- .syntax divided
diff --git a/asm/non_matching/scroll/sub_0807FF6C.inc b/asm/non_matching/scroll/sub_0807FF6C.inc
deleted file mode 100644
index 665d72e0..00000000
--- a/asm/non_matching/scroll/sub_0807FF6C.inc
+++ /dev/null
@@ -1,57 +0,0 @@
- .syntax unified
- push {r4, lr}
- movs r1, #1
- strb r1, [r0, #3]
- ldr r3, _0807FFC8 @ =gScreen
- ldrh r1, [r3]
- movs r2, #0x80
- lsls r2, r2, #7
- adds r0, r2, #0
- orrs r0, r1
- strh r0, [r3]
- adds r2, r3, #0
- adds r2, #0x60
- ldrb r0, [r2]
- movs r4, #0xb8
- lsls r4, r4, #5
- adds r1, r4, #0
- orrs r0, r1
- strh r0, [r2]
- adds r2, #2
- ldrh r1, [r2]
- movs r0, #0xff
- lsls r0, r0, #8
- ands r0, r1
- movs r1, #7
- movs r4, #0
- orrs r0, r1
- strh r0, [r2]
- adds r0, r3, #0
- adds r0, #0x5a
- movs r1, #0xf0
- strh r1, [r0]
- adds r0, #4
- strh r1, [r0]
- bl ResetPlayer
- bl ResetPlayerAnimationAndAction
- ldr r0, _0807FFCC @ =gUnk_03004030
- ldrb r0, [r0, #8]
- cmp r0, #0
- beq _0807FFD4
- ldr r1, _0807FFD0 @ =gPlayerEntity
- movs r0, #4
- strb r0, [r1, #0x14]
- b _0807FFD8
- .align 2, 0
-_0807FFC8: .4byte gScreen
-_0807FFCC: .4byte gUnk_03004030
-_0807FFD0: .4byte gPlayerEntity
-_0807FFD4:
- ldr r0, _0807FFE0 @ =gPlayerEntity
- strb r4, [r0, #0x14]
-_0807FFD8:
- bl sub_080809D4
- pop {r4, pc}
- .align 2, 0
-_0807FFE0: .4byte gPlayerEntity
- .syntax divided
diff --git a/asm/non_matching/scroll/sub_0807FFE4.inc b/asm/non_matching/scroll/sub_0807FFE4.inc
deleted file mode 100644
index b7bf033b..00000000
--- a/asm/non_matching/scroll/sub_0807FFE4.inc
+++ /dev/null
@@ -1,39 +0,0 @@
- .syntax unified
- push {r4, r5, lr}
- adds r5, r0, #0
- movs r0, #2
- strb r0, [r5, #3]
- bl sub_080803D0
- adds r0, #6
- strh r0, [r5, #0x18]
- ldr r4, _0808002C @ =gUnk_0200B640
- bl sub_08080278
- strh r0, [r4]
- ldr r1, _08080030 @ =gUnk_08109194
- ldr r0, _08080034 @ =gUnk_03004030
- ldr r0, [r0]
- ldrb r0, [r0, #3]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r0, [r0]
- ldr r0, [r0]
- bl sub_080197D4
- ldr r4, _08080038 @ =gMapDataTop
- ldrh r1, [r5, #0x1e]
- lsrs r1, r1, #4
- ldrh r2, [r5, #0x20]
- lsrs r2, r2, #4
- adds r0, r4, #0
- bl sub_0807C8B0
- ldr r0, _0808003C @ =gMapDataTopSpecial
- subs r4, #4
- adds r1, r4, #0
- bl sub_0801AB08
- pop {r4, r5, pc}
- .align 2, 0
-_0808002C: .4byte gUnk_0200B640
-_08080030: .4byte gUnk_08109194
-_08080034: .4byte gUnk_03004030
-_08080038: .4byte gMapDataTop
-_0808003C: .4byte gMapDataTopSpecial
- .syntax divided
diff --git a/asm/non_matching/scroll/sub_08080040.inc b/asm/non_matching/scroll/sub_08080040.inc
deleted file mode 100644
index 36ecbde3..00000000
--- a/asm/non_matching/scroll/sub_08080040.inc
+++ /dev/null
@@ -1,102 +0,0 @@
- .syntax unified
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- ldrh r4, [r5, #0x18]
- subs r4, #6
- strh r4, [r5, #0x18]
- ldrh r0, [r5, #0x18]
- lsls r0, r0, #1
- movs r1, #3
- bl __divsi3
- strh r0, [r5, #0x1a]
- lsls r4, r4, #0x10
- lsrs r4, r4, #0x10
- cmp r4, #0x2a
- bls _080800C6
- ldr r3, [r5, #0x30]
- movs r1, #0x2e
- ldrsh r0, [r3, r1]
- movs r2, #0xa
- ldrsh r1, [r5, r2]
- subs r2, r0, r1
- ldrh r1, [r5, #0x18]
- subs r0, r2, r1
- adds r7, r0, #0
- adds r7, #8
- cmp r7, #0
- bge _08080078
- movs r7, #0
-_08080078:
- adds r0, r2, r1
- adds r6, r0, #0
- subs r6, #8
- cmp r6, #0xf0
- ble _08080084
- movs r6, #0xf0
-_08080084:
- movs r1, #0x32
- ldrsh r0, [r3, r1]
- movs r2, #0xc
- ldrsh r1, [r5, r2]
- subs r2, r0, r1
- ldrh r1, [r5, #0x1a]
- subs r0, r2, r1
- adds r4, r0, #0
- adds r4, #8
- cmp r4, #0
- bge _0808009C
- movs r4, #0
-_0808009C:
- adds r0, r2, r1
- adds r3, r0, #0
- subs r3, #8
- cmp r3, #0xa0
- ble _080800A8
- movs r3, #0xa0
-_080800A8:
- ldr r2, _080800F0 @ =gScreen
- movs r1, #0xff
- ands r7, r1
- lsls r0, r7, #8
- ands r6, r1
- orrs r0, r6
- adds r6, r2, #0
- adds r6, #0x5a
- strh r0, [r6]
- ands r4, r1
- lsls r0, r4, #8
- ands r3, r1
- orrs r0, r3
- adds r2, #0x5e
- strh r0, [r2]
-_080800C6:
- ldrh r0, [r5, #0x18]
- cmp r0, #0
- bne _080800FC
- movs r0, #3
- strb r0, [r5, #3]
- bl DeleteSleepingEntities
- bl sub_0807C810
- ldr r1, _080800F4 @ =gUnk_08109194
- ldr r0, _080800F8 @ =gUnk_03004030
- ldr r0, [r0]
- ldrb r0, [r0, #3]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r0, [r0]
- ldr r0, [r0, #4]
- bl sub_08080C80
- b _08080102
- .align 2, 0
-_080800F0: .4byte gScreen
-_080800F4: .4byte gUnk_08109194
-_080800F8: .4byte gUnk_03004030
-_080800FC:
- ldr r1, _08080104 @ =gUpdateVisibleTiles
- movs r0, #4
- strb r0, [r1]
-_08080102:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08080104: .4byte gUpdateVisibleTiles
- .syntax divided
diff --git a/asm/non_matching/scroll/sub_08080108.inc b/asm/non_matching/scroll/sub_08080108.inc
deleted file mode 100644
index 195a563e..00000000
--- a/asm/non_matching/scroll/sub_08080108.inc
+++ /dev/null
@@ -1,56 +0,0 @@
- .syntax unified
- push {r4, r5, r6, lr}
- movs r1, #4
- strb r1, [r0, #3]
- ldr r5, _08080178 @ =gMapDataBottom
- movs r0, #0xc0
- lsls r0, r0, #6
- adds r1, r5, r0
- movs r6, #0x80
- lsls r6, r6, #6
- adds r0, r5, #0
- adds r2, r6, #0
- bl MemCopy
- ldr r4, _0808017C @ =gMapDataTop
- movs r0, #0xc0
- lsls r0, r0, #6
- adds r1, r4, r0
- adds r0, r4, #0
- adds r2, r6, #0
- bl MemCopy
- bl sub_08080368
- ldr r1, _08080180 @ =gUnk_02034480
- ldr r0, _08080184 @ =gUnk_0200B640
- ldrh r0, [r0]
- strh r0, [r1]
- ldr r0, _08080188 @ =gUnk_02022830
- ldr r1, _0808018C @ =gUnk_020246B0
- movs r2, #0xc0
- lsls r2, r2, #5
- bl MemCopy
- subs r5, #4
- adds r0, r5, #0
- bl sub_08080B60
- subs r4, #4
- adds r0, r4, #0
- bl sub_08080B60
- bl sub_0807BBE4
- bl sub_0807BC84
- bl sub_0805E248
- ldr r0, _08080190 @ =gMapDataBottomSpecial
- adds r1, r5, #0
- bl sub_0801AB08
- ldr r0, _08080194 @ =gMapDataTopSpecial
- adds r1, r4, #0
- bl sub_0801AB08
- pop {r4, r5, r6, pc}
- .align 2, 0
-_08080178: .4byte gMapDataBottom
-_0808017C: .4byte gMapDataTop
-_08080180: .4byte gUnk_02034480
-_08080184: .4byte gUnk_0200B640
-_08080188: .4byte gUnk_02022830
-_0808018C: .4byte gUnk_020246B0
-_08080190: .4byte gMapDataBottomSpecial
-_08080194: .4byte gMapDataTopSpecial
- .syntax divided
diff --git a/asm/non_matching/scroll/sub_080801BC.inc b/asm/non_matching/scroll/sub_080801BC.inc
deleted file mode 100644
index efa96fb5..00000000
--- a/asm/non_matching/scroll/sub_080801BC.inc
+++ /dev/null
@@ -1,100 +0,0 @@
- .syntax unified
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- ldrh r4, [r5, #0x18]
- adds r4, #6
- strh r4, [r5, #0x18]
- ldrh r0, [r5, #0x18]
- lsls r0, r0, #1
- movs r1, #3
- bl __divsi3
- strh r0, [r5, #0x1a]
- lsls r4, r4, #0x10
- lsrs r4, r4, #0x10
- cmp r4, #0x1e
- bls _08080232
- ldr r2, [r5, #0x30]
- movs r0, #0x2e
- ldrsh r1, [r2, r0]
- movs r3, #0xa
- ldrsh r0, [r5, r3]
- subs r0, r1, r0
- ldrh r1, [r5, #0x18]
- subs r7, r0, r1
- cmp r7, #0
- bge _080801F0
- movs r7, #0
-_080801F0:
- adds r6, r0, r1
- cmp r6, #0xf0
- ble _080801F8
- movs r6, #0xf0
-_080801F8:
- movs r0, #0x32
- ldrsh r1, [r2, r0]
- movs r2, #0xc
- ldrsh r0, [r5, r2]
- subs r0, r1, r0
- ldrh r1, [r5, #0x1a]
- subs r4, r0, r1
- cmp r4, #0
- bge _0808020C
- movs r4, #0
-_0808020C:
- adds r3, r0, r1
- cmp r3, #0xa0
- ble _08080214
- movs r3, #0xa0
-_08080214:
- ldr r2, _08080260 @ =gScreen
- movs r1, #0xff
- ands r7, r1
- lsls r0, r7, #8
- ands r6, r1
- orrs r0, r6
- adds r6, r2, #0
- adds r6, #0x5a
- strh r0, [r6]
- ands r4, r1
- lsls r0, r4, #8
- ands r3, r1
- orrs r0, r3
- adds r2, #0x5e
- strh r0, [r2]
-_08080232:
- ldrh r0, [r5, #0x1c]
- cmp r0, #0
- bne _08080268
- strb r0, [r5, #2]
- strh r0, [r5]
- bl ResetSystemPriority
- ldr r1, _08080260 @ =gScreen
- ldrh r2, [r1]
- ldr r0, _08080264 @ =0x0000BFFF
- ands r0, r2
- strh r0, [r1]
- adds r2, r1, #0
- adds r2, #0x60
- ldrb r0, [r2]
- strh r0, [r2]
- adds r1, #0x62
- ldrh r2, [r1]
- movs r0, #0xff
- lsls r0, r0, #8
- ands r0, r2
- strh r0, [r1]
- b _08080272
- .align 2, 0
-_08080260: .4byte gScreen
-_08080264: .4byte 0x0000BFFF
-_08080268:
- ldr r0, _08080274 @ =gUpdateVisibleTiles
- movs r1, #4
- strb r1, [r0]
- movs r0, #0
- strh r0, [r5, #0x1c]
-_08080272:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_08080274: .4byte gUpdateVisibleTiles
- .syntax divided
diff --git a/data/data_0811E750.s b/data/data_0811E750.s
index df1745c8..fe86f629 100644
--- a/data/data_0811E750.s
+++ b/data/data_0811E750.s
@@ -4,30 +4,10 @@
.section .rodata
.align 2
-gUnk_0811E768:: @ 0811E768
- .4byte sub_0807FC64
- .4byte sub_0807FC7C
- .4byte sub_0807FDB0
- .4byte 00000000
- .4byte sub_0807FEF0
- .4byte sub_0807FF54
-
-gUnk_0811E780:: @ 0811E780
- .4byte sub_0807FDC8
- .4byte sub_0807FDE4
- .4byte sub_0807FDF8
-
-gUnk_0811E78C:: @ 0811E78C
- .4byte sub_0807FF08
- .4byte sub_0807FF1C
-
-gUnk_0811E794:: @ 0811E794
- .4byte sub_0807FF6C
- .4byte sub_0807FFE4
- .4byte sub_08080040
- .4byte sub_08080108
- .4byte sub_08080198
- .4byte sub_080801BC
+
+
+
+
gUnk_0811E7AC:: @ 0811E7AC
.4byte sub_08080794
diff --git a/include/manager.h b/include/manager.h
index 4835a712..131e9967 100644
--- a/include/manager.h
+++ b/include/manager.h
@@ -141,7 +141,7 @@ typedef struct {
DiggingCaveEntrance* unk_00;
u16 unk_04;
u16 unk_06;
- u8 unk_08;
+ u8 isDiggingCave;
u8 unk_09;
u8 unk_0a;
u8 unk_0b;
diff --git a/linker.ld b/linker.ld
index e1eee1ea..10439cb4 100644
--- a/linker.ld
+++ b/linker.ld
@@ -1329,6 +1329,7 @@ SECTIONS {
src/flags.o(.rodata);
src/save.o(.rodata);
src/script.o(.rodata);
+ src/scroll.o(.rodata);
data/data_0811E750.o(.rodata);
data/const/object/itemOnGround.o(.rodata);
src/object/deathFx.o(.rodata);
diff --git a/src/manager/manager4.c b/src/manager/manager4.c
index 7568960d..7ed53807 100644
--- a/src/manager/manager4.c
+++ b/src/manager/manager4.c
@@ -12,7 +12,7 @@ void Manager4_Main(Manager* this) {
gUnk_08107C70[this->action](this);
}
-extern void sub_080805F8(void);
+extern void UpdateIsDiggingCave(void);
extern DiggingCaveEntrance* sub_08057AA8(DiggingCaveEntrance*, int);
@@ -21,8 +21,8 @@ void sub_0805786C(Manager* this) {
u8 room;
u8 area;
u16 uVar = 0x81 << 7;
- sub_080805F8();
- if (gUnk_03004030.unk_08 != 0) {
+ UpdateIsDiggingCave();
+ if (gUnk_03004030.isDiggingCave != 0) {
if (gUnk_03004030.unk_00 == 0) {
gUnk_03004030.unk_0a = 0xFF;
room = gRoomControls.room;
@@ -66,7 +66,7 @@ void sub_08057A18(Manager*, DiggingCaveEntrance*);
u32 sub_0805795C(Manager* this, DiggingCaveEntrance* entr) {
u16 offsetX, offsetY, offsetX2, offsetY2;
u32 tmp, tmp2;
- if (gUnk_03004030.unk_08) {
+ if (gUnk_03004030.isDiggingCave) {
offsetX = gPlayerEntity.x.HALF.HI - gRoomControls.origin_x;
offsetY = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y;
offsetX2 = (entr->unk_00 & 0x3F) * 16 + 8;
@@ -105,10 +105,10 @@ void sub_08057A18(Manager* this, DiggingCaveEntrance* entr) {
gUnk_03004030.unk_06 = gPlayerEntity.y.HALF.HI - gRoomControls.origin_y - ((entr->unk_00 & 0xFC0) >> 2);
#ifndef EU
- tmp = gUnk_03004030.unk_08;
+ tmp = gUnk_03004030.isDiggingCave;
if (!tmp) {
if ((entr->target_room | 0x80) != gUnk_03004030.unk_0b) {
- gUnk_02034480.unk_00 = gUnk_03004030.unk_08;
+ gUnk_02034480.unk_00 = gUnk_03004030.isDiggingCave;
}
gUnk_03004030.unk_0b = entr->target_room | 0x80;
}
diff --git a/src/scroll.c b/src/scroll.c
index e751a412..e1f2050e 100644
--- a/src/scroll.c
+++ b/src/scroll.c
@@ -7,23 +7,58 @@
#include "asm.h"
#include "common.h"
#include "fileselect.h"
+#include "screen.h"
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_0807C810();
+extern void DeleteSleepingEntities(void);
+extern void sub_0807BBE4();
+extern void sub_0807BC84();
+extern void sub_0805E248();
extern u8 gUpdateVisibleTiles;
-
-extern void (*const gUnk_0811E768[])(RoomControls*);
-
+extern u16 gUnk_0200B640;
+extern u32** gUnk_08109194[];
+extern u8 gMapDataTop[];
+extern u8 gMapDataBottom[];
+extern u8 gUnk_02022830[];
+extern u8 gUnk_020246B0[];
+
+void sub_0807FC64(RoomControls*);
void sub_0807FC7C(RoomControls*);
-void sub_080805F8(void);
-
-extern void (*const gUnk_0811E780[])(RoomControls*);
-
-extern void (*const gUnk_0811E794[])(RoomControls*);
+void sub_0807FDB0(RoomControls*);
+void sub_0807FEF0(RoomControls*);
+void sub_0807FF54(RoomControls*);
+void sub_0807FDC8(RoomControls*);
+void sub_0807FDE4(RoomControls*);
+void sub_0807FDF8(RoomControls*);
+void sub_0807FEC8(RoomControls*);
+void sub_0807FF08(RoomControls*);
+void sub_0807FF1C(RoomControls*);
+
+void sub_0807FF6C(RoomControls*);
+void sub_0807FFE4(RoomControls*);
+void sub_08080040(RoomControls*);
+void sub_08080108(RoomControls*);
+void sub_08080198(RoomControls*);
+void sub_080801BC(RoomControls*);
+void UpdateIsDiggingCave(void);
+u32 sub_080803D0();
+u32 sub_08080278();
+void sub_08080C80(u32*);
+void sub_08080368();
+void sub_08080B60(u8*);
extern u8 gMapDataTopSpecial[];
void UpdateScroll(void) {
+ static void (*const gUnk_0811E768[])(RoomControls*) = {
+ sub_0807FC64, sub_0807FC7C, sub_0807FDB0, NULL, sub_0807FEF0, sub_0807FF54,
+ };
+
gRoomControls.scroll_flags &= 0xfb;
gUnk_0811E768[gRoomControls.unk3](&gRoomControls);
}
@@ -33,12 +68,17 @@ void sub_0807FC64(RoomControls* controls) {
controls->reload_flags = 0;
controls->unk5 = 4;
sub_0807FC7C(controls);
- sub_080805F8();
+ UpdateIsDiggingCave();
}
ASM_FUNC("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomControls* controls))
void sub_0807FDB0(RoomControls* controls) {
+ static void (*const gUnk_0811E780[])(RoomControls*) = {
+ sub_0807FDC8,
+ sub_0807FDE4,
+ sub_0807FDF8,
+ };
gUnk_0811E780[controls->unk4](controls);
}
@@ -55,17 +95,70 @@ void sub_0807FDE4(RoomControls* controls) {
gUpdateVisibleTiles = 2;
}
-ASM_FUNC("asm/non_matching/scroll/sub_0807FDF8.inc", void sub_0807FDF8())
+void sub_0807FDF8(RoomControls* controls) {
+ u32 bVar1;
+ Entity* pEVar2;
+ int iVar3;
+
+ gUpdateVisibleTiles = 2;
+ controls->filler2[0]++;
+ switch (controls->scroll_direction) {
+ case 0:
+ controls->scroll_y -= 4;
+ pEVar2 = controls->camera_target;
+ if (pEVar2 == &gPlayerEntity) {
+ pEVar2->y.WORD = gPlayerEntity.y.WORD - 0x6000;
+ }
+ if (controls->filler2[0] == 0x28) {
+ sub_0807FEC8(controls);
+ }
+ break;
+ case 1:
+ controls->scroll_x = controls->scroll_x + 4;
+ if (controls->camera_target == &gPlayerEntity) {
+ gPlayerEntity.x.WORD += 0x4000;
+ }
+ if (controls->filler2[0] == 0x3c) {
+ sub_0807FEC8(controls);
+ }
+ break;
+ case 2:
+ controls->scroll_y = controls->scroll_y + 4;
+ pEVar2 = controls->camera_target;
+ if (pEVar2 == &gPlayerEntity) {
+ pEVar2->y.WORD = gPlayerEntity.y.WORD + 0x6000;
+ }
+ if (controls->filler2[0] == 0x28) {
+ sub_0807FEC8(controls);
+ }
+ break;
+ case 3:
+ controls->scroll_x -= 4;
+ if (controls->camera_target == &gPlayerEntity) {
+ gPlayerEntity.x.WORD -= 0x4000;
+ }
+ if (controls->filler2[0] == 0x3c) {
+ sub_0807FEC8(controls);
+ }
+ break;
+ }
+
+ controls->shake_duration = 0;
+ sub_08080BC4();
+}
void sub_0807FEC8(RoomControls* this) {
this->unk3 = 0;
- MemFill32(0xffffffff, gPlayerState.path_memory, 0x40);
+ MemFill32(0xffffffff, gPlayerState.path_memory, sizeof(gPlayerState.path_memory));
gPlayerState.startPosX = this->camera_target->x.HALF.HI;
gPlayerState.startPosY = this->camera_target->y.HALF.HI;
}
void sub_0807FEF0(RoomControls* controls) {
- extern void (*const gUnk_0811E78C[])(RoomControls*);
+ static void (*const gUnk_0811E78C[])(RoomControls*) = {
+ sub_0807FF08,
+ sub_0807FF1C,
+ };
gUnk_0811E78C[controls->unk4](controls);
}
@@ -86,16 +179,95 @@ void sub_0807FF1C(RoomControls* controls) {
}
void sub_0807FF54(RoomControls* controls) {
+ static void (*const gUnk_0811E794[])(RoomControls*) = {
+ sub_0807FF6C, sub_0807FFE4, sub_08080040, sub_08080108, sub_08080198, sub_080801BC,
+ };
gUnk_0811E794[controls->unk4](controls);
}
-ASM_FUNC("asm/non_matching/scroll/sub_0807FF6C.inc", void sub_0807FF6C())
+void sub_0807FF6C(RoomControls* controls) {
+ controls->unk4 = 1;
+ gScreen.lcd.displayControl |= DISPCNT_WIN1_ON;
+ gScreen.controls.windowInsideControl = (u8)gScreen.controls.windowInsideControl | 0x1700;
+ gScreen.controls.windowOutsideControl = (gScreen.controls.windowOutsideControl & 0xff00) | 7;
+ gScreen.controls.window1HorizontalDimensions = 0xf0;
+ gScreen.controls.window1VerticalDimensions = 0xf0;
+ ResetPlayer();
+ ResetPlayerAnimationAndAction();
+ if (gUnk_03004030.isDiggingCave) {
+ gPlayerEntity.animationState = 4;
+ } else {
+ gPlayerEntity.animationState = 0;
+ }
+ sub_080809D4();
+}
-ASM_FUNC("asm/non_matching/scroll/sub_0807FFE4.inc", void sub_0807FFE4())
+void sub_0807FFE4(RoomControls* controls) {
+ controls->unk4 = 2;
+ controls->filler2[0] = sub_080803D0() + 6;
+ gUnk_0200B640 = sub_08080278();
+ sub_080197D4(*gUnk_08109194[gUnk_03004030.unk_00->unk_03]);
+ sub_0807C8B0(gMapDataTop, controls->width >> 4, controls->height >> 4);
+ sub_0801AB08(gMapDataTopSpecial, gMapDataTop - 4);
+}
-ASM_FUNC("asm/non_matching/scroll/sub_08080040.inc", void sub_08080040())
+void sub_08080040(RoomControls* controls) {
+ int iVar2;
+ int iVar3;
+ int uVar5;
+ int uVar6;
+ int iVar7;
+ int temp;
+
+ controls->filler2[0] -= 6;
+ controls->filler2[1] = (controls->filler2[0] << 1) / 3;
+ if (0x2a < controls->filler2[0]) {
+ iVar2 = controls->camera_target->x.HALF.HI - controls->scroll_x;
+ uVar6 = (iVar2 - controls->filler2[0]) + 8;
+ if (uVar6 < 0) {
+ uVar6 = 0;
+ }
+ iVar7 = iVar2 + controls->filler2[0] - 8;
+ if (0xf0 < iVar7) {
+ iVar7 = 0xf0;
+ }
+ temp = controls->camera_target->y.HALF.HI - controls->scroll_y;
+ uVar5 = (temp - controls->filler2[1]) + 8;
+ if (uVar5 < 0) {
+ uVar5 = 0;
+ }
+ iVar3 = temp + controls->filler2[1] - 8;
+ if (0xa0 < iVar3) {
+ iVar3 = 0xa0;
+ }
+ gScreen.controls.window1HorizontalDimensions = ((uVar6 & 0xff) << 8) | (iVar7 & 0xff);
+ gScreen.controls.window1VerticalDimensions = ((uVar5 & 0xff) << 8) | (iVar3 & 0xff);
+ }
+ if (controls->filler2[0] == 0) {
+ controls->unk4 = 3;
+ DeleteSleepingEntities();
+ sub_0807C810();
+ sub_08080C80(*(gUnk_08109194[gUnk_03004030.unk_00->unk_03] + 1));
+ } else {
+ gUpdateVisibleTiles = 4;
+ }
+}
-ASM_FUNC("asm/non_matching/scroll/sub_08080108.inc", void sub_08080108())
+void sub_08080108(RoomControls* controls) {
+ controls->unk4 = 4;
+ MemCopy(gMapDataBottom, gMapDataBottom + 0x3000, 0x2000);
+ MemCopy(gMapDataTop, gMapDataTop + 0x3000, 0x2000);
+ sub_08080368();
+ gUnk_02034480.unk_00 = gUnk_0200B640;
+ MemCopy(gUnk_02022830, gUnk_020246B0, 0x1800);
+ sub_08080B60(gMapDataBottom - 4);
+ sub_08080B60(gMapDataTop - 4);
+ sub_0807BBE4();
+ sub_0807BC84();
+ sub_0805E248();
+ sub_0801AB08((u8*)&gMapDataBottomSpecial, gMapDataBottom - 4);
+ sub_0801AB08(gMapDataTopSpecial, gMapDataTop - 4);
+}
void sub_08080198(RoomControls* controls) {
controls->unk4 = 5;
@@ -103,35 +275,79 @@ void sub_08080198(RoomControls* controls) {
LoadRoom();
CallRoomProp5And7();
gUpdateVisibleTiles = 0;
- sub_080805F8();
+ UpdateIsDiggingCave();
}
-ASM_FUNC("asm/non_matching/scroll/sub_080801BC.inc", void sub_080801BC())
+void sub_080801BC(RoomControls* controls) {
+ int iVar2;
+ int iVar3;
+ int uVar5;
+ int uVar6;
+ int iVar7;
+ int temp;
+
+ controls->filler2[0] += 6;
+ controls->filler2[1] = (controls->filler2[0] << 1) / 3;
+ if (0x1e < controls->filler2[0]) {
+ iVar2 = controls->camera_target->x.HALF.HI - controls->scroll_x;
+ uVar6 = (iVar2 - controls->filler2[0]);
+ if (uVar6 < 0) {
+ uVar6 = 0;
+ }
+ iVar7 = iVar2 + controls->filler2[0];
+ if (0xf0 < iVar7) {
+ iVar7 = 0xf0;
+ }
+ temp = controls->camera_target->y.HALF.HI - controls->scroll_y;
+ uVar5 = (temp - controls->filler2[1]);
+ if (uVar5 < 0) {
+ uVar5 = 0;
+ }
+ iVar3 = temp + controls->filler2[1];
+ if (0xa0 < iVar3) {
+ iVar3 = 0xa0;
+ }
+ gScreen.controls.window1HorizontalDimensions = ((uVar6 & 0xff) << 8) | (iVar7 & 0xff);
+ gScreen.controls.window1VerticalDimensions = ((uVar5 & 0xff) << 8) | (iVar3 & 0xff);
+ }
+ if (controls->filler2[2] == 0) {
+ controls->unk3 = 0;
+ controls->reload_flags = 0;
+ ResetSystemPriority();
+ gScreen.lcd.displayControl &= ~DISPCNT_WIN1_ON;
+ gScreen.controls.windowInsideControl &= 0xff;
+ gScreen.controls.windowOutsideControl &= 0xff00;
+ } else {
+ gUpdateVisibleTiles = 4;
+ controls->filler2[2] = 0;
+ }
+}
-ASM_FUNC("asm/non_matching/scroll/sub_08080278.inc", void sub_08080278())
+ASM_FUNC("asm/non_matching/scroll/sub_08080278.inc", u32 sub_08080278())
ASM_FUNC("asm/non_matching/scroll/sub_08080368.inc", void sub_08080368())
-ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", void sub_080803D0())
+ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", u32 sub_080803D0())
-void sub_080805F8(void) {
+void UpdateIsDiggingCave(void) {
switch (gRoomControls.area) {
- case 0xc:
- case 0x0f:
- case 0x13:
- case 0x14:
- case 0x16:
- case 0x17:
- case 0x19:
- gUnk_03004030.unk_08 = 1;
+ case AREA_LAKE_WOODS_CAVE:
+ case AREA_HYRULE_DIG_CAVES:
+ case AREA_DIG_CAVES_1:
+ case AREA_CRENEL_DIG_CAVE:
+ case AREA_VEIL_FALLS_DIG_CAVE:
+ case AREA_CASTOR_WILDS_DIG_CAVE:
+ case AREA_HYLIA_DIG_CAVES:
+ gUnk_03004030.isDiggingCave = 1;
return;
}
- gUnk_03004030.unk_08 = 0;
+ gUnk_03004030.isDiggingCave = 0;
}
void ClearTilemaps(void) {
+ // Is gRoomControls 4 bytes bigger?
MemClear(&gRoomControls, 0x38);
- MemClear(&gUnk_03004030, 0xc);
+ MemClear(&gUnk_03004030, sizeof(gUnk_03004030));
gRoomControls.filler3 = 0xffff;
gUnk_03004030.unk_0a = 0xff;
gUnk_02034480.unk_00 = 0;
@@ -265,10 +481,10 @@ 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())
+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_08080C80.inc", void sub_08080C80())
+ASM_FUNC("asm/non_matching/scroll/sub_08080C80.inc", void sub_08080C80(u32* param_1))
ASM_FUNC("asm/non_matching/scroll/sub_08080CB4.inc", void sub_08080CB4(Entity* a))