summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/secret_base.s177
-rw-r--r--include/vars.h4
-rw-r--r--ld_script.txt2
-rw-r--r--src/secret_base.c11
-rwxr-xr-xsrc/secret_base_80bb4ac.c229
5 files changed, 145 insertions, 278 deletions
diff --git a/asm/secret_base.s b/asm/secret_base.s
index 834a63350..d3f8f7d86 100644
--- a/asm/secret_base.s
+++ b/asm/secret_base.s
@@ -4,182 +4,7 @@
.syntax unified
- .text
-
- thumb_func_start sub_80BB764
-sub_80BB764: @ 80BB764
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- mov r10, r1
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- movs r0, 0
- mov r12, r0
- ldr r1, _080BB7C8 @ =gMapHeader
- ldr r0, [r1]
- ldr r3, [r0, 0x4]
- cmp r12, r3
- bge _080BB7EE
- ldr r0, [r0]
- str r0, [sp, 0x4]
- str r3, [sp]
-_080BB78E:
- movs r2, 0
- mov r1, r12
- lsls r7, r1, 16
- ldr r0, [sp, 0x4]
- cmp r2, r0
- bge _080BB7DC
- ldr r0, _080BB7C8 @ =gMapHeader
- ldr r1, [r0]
- asrs r0, r7, 16
- ldr r4, [r1]
- adds r6, r0, 0
- muls r6, r4
- ldr r5, [r1, 0xC]
-_080BB7A8:
- lsls r0, r2, 16
- asrs r3, r0, 16
- adds r0, r6, r3
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r0, _080BB7CC @ =0x000003ff
- ands r0, r1
- cmp r0, r8
- bne _080BB7D0
- mov r1, r9
- strh r2, [r1]
- mov r1, r12
- mov r0, r10
- strh r1, [r0]
- b _080BB7EE
- .align 2, 0
-_080BB7C8: .4byte gMapHeader
-_080BB7CC: .4byte 0x000003ff
-_080BB7D0:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, r4
- blt _080BB7A8
-_080BB7DC:
- movs r1, 0x80
- lsls r1, 9
- adds r0, r7, r1
- lsrs r1, r0, 16
- mov r12, r1
- asrs r0, 16
- ldr r1, [sp]
- cmp r0, r1
- blt _080BB78E
-_080BB7EE:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80BB764
-
- thumb_func_start sub_80BB800
-sub_80BB800: @ 80BB800
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileIdAt
- movs r5, 0
- mov r12, r4
- lsls r0, 16
- asrs r3, r0, 16
- ldr r1, _080BB84C @ =gUnknown_083D1358
- mov r8, r1
- adds r7, r0, 0
- mov r4, sp
- mov r6, r12
-_080BB834:
- ldr r0, _080BB84C @ =gUnknown_083D1358
- lsls r1, r5, 2
- adds r2, r1, r0
- ldrh r0, [r2]
- cmp r0, r3
- bne _080BB850
- movs r3, 0
- ldrsh r0, [r4, r3]
- movs r5, 0
- ldrsh r1, [r6, r5]
- ldrh r3, [r2, 0x2]
- b _080BB878
- .align 2, 0
-_080BB84C: .4byte gUnknown_083D1358
-_080BB850:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x6
- bls _080BB834
- movs r5, 0
- mov r4, sp
- mov r6, r12
-_080BB860:
- lsls r0, r5, 2
- mov r1, r8
- adds r3, r0, r1
- ldrh r1, [r3, 0x2]
- asrs r0, r7, 16
- cmp r1, r0
- bne _080BB892
- movs r2, 0
- ldrsh r0, [r4, r2]
- movs r5, 0
- ldrsh r1, [r6, r5]
- ldrh r3, [r3]
-_080BB878:
- movs r5, 0xC0
- lsls r5, 4
- adds r2, r5, 0
- orrs r2, r3
- bl MapGridSetMetatileIdAt
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0
- ldrsh r1, [r6, r2]
- bl CurrentMapDrawMetatileAt
- b _080BB89C
-_080BB892:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x6
- bls _080BB860
-_080BB89C:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80BB800
+ .section .text_b
thumb_func_start sub_80BB8A8
sub_80BB8A8: @ 80BB8A8
diff --git a/include/vars.h b/include/vars.h
index 55df0a5e3..07c96482e 100644
--- a/include/vars.h
+++ b/include/vars.h
@@ -26,6 +26,8 @@
#define VAR_BARBOACH_SIZE_RECORD 0x404F
-#define VAR_PORTHOLE 0x40B4
+#define VAR_0x4054 0x4054
+
+#define VAR_PORTHOLE 0x40B4
#endif // GUARD_VARS_H
diff --git a/ld_script.txt b/ld_script.txt
index 99b19b5e0..a7fe92237 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -175,7 +175,7 @@ SECTIONS {
asm/record_mixing.o(.text);
asm/sound_check_menu.o(.text);
src/secret_base_80bb4ac.o(.text);
- asm/secret_base.o(.text);
+ asm/secret_base.o(.text_b);
src/secret_base.o(.text);
asm/secret_base.o(.text_80BC1D0);
asm/tv.o(.text);
diff --git a/src/secret_base.c b/src/secret_base.c
index ccedcfe0c..be1bfb026 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -3,6 +3,7 @@
#include "strings.h"
#include "text.h"
#include "event_data.h"
+#include "vars.h"
extern u8 gUnknown_020387DC;
@@ -20,13 +21,13 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) { // 80bc190
return StringAppend(dest, gOtherText_PlayersBase);
}
-u8 *GetSecretBaseMapName(u8 *dest) { // 80bc1d0
- gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(0x4054)].sbr_field_0;
- return sub_80BC190(dest, VarGet(0x4054));
+u8 *GetSecretBaseMapName(u8 *dest) {
+ gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_0;
+ return sub_80BC190(dest, VarGet(VAR_0x4054));
}
-void sub_80BC224(void) { // 80bc224
- u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(0x4054)].sbr_field_2;
+void sub_80BC224(void) {
+ u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(VAR_0x4054)].sbr_field_2;
u8 *var1 = gStringVar1;
u8 var2 = sub_80BB8A8(var0);
u8 *var3 = StringCopyN(var1, var0, var2);
diff --git a/src/secret_base_80bb4ac.c b/src/secret_base_80bb4ac.c
index ebd93f008..e936df7fa 100755
--- a/src/secret_base_80bb4ac.c
+++ b/src/secret_base_80bb4ac.c
@@ -1,12 +1,15 @@
#include "global.h"
#include "event_data.h"
#include "asm.h"
+#include "vars.h"
#include "field_player_avatar.h"
+#include "field_camera.h"
extern u8 gUnknown_020387DC;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8007;
extern u16 gScriptResult;
+extern u16 gUnknown_083D1358[16];
void sub_80BB4AC(struct SecretBaseRecord *record) { // 080bb4ac
u16 i;
@@ -57,10 +60,10 @@ void sub_80BB5E4(void) { // 80bb5e4
u16 idx;
gScriptResult = 0;
for (idx=0; idx<20; idx++) {
- if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0)
+ if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0)
continue;
gScriptResult = 1;
- VarSet(0x4054, idx);
+ VarSet(VAR_0x4054, idx);
break;
}
}
@@ -72,10 +75,9 @@ void sub_80BB63C(void) { // 80bb63c
gScriptResult = 0;
}
-#ifdef NONMATCHING
u8 sub_80BB66C(void) { // 80bb66c
s16 x, y;
- u16 v0;
+ s16 v0;
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
v0 = MapGridGetMetatileBehaviorAt(x, y) & 0xFFF;
if (v0 == 0x90 || v0 == 0x91)
@@ -92,97 +94,6 @@ u8 sub_80BB66C(void) { // 80bb66c
return 6;
return 0;
}
-#else
-__attribute__((naked))
-u8 sub_80BB66C(void) {
- asm(".syntax unified\n\
- push {r4,lr}\n\
- sub sp, 0x4\n\
- mov r4, sp\n\
- adds r4, 0x2\n\
- mov r0, sp\n\
- adds r1, r4, 0\n\
- bl GetXYCoordsOneStepInFrontOfPlayer\n\
- mov r0, sp\n\
- movs r1, 0\n\
- ldrsh r0, [r0, r1]\n\
- movs r2, 0\n\
- ldrsh r1, [r4, r2]\n\
- bl MapGridGetMetatileBehaviorAt\n\
- adds r1, r0, 0\n\
- ldr r2, _080BB6A4 @ =0x00000fff\n\
- adds r0, r2, 0\n\
- ands r1, r0\n\
- adds r0, r1, 0\n\
- subs r0, 0x90\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _080BB6A8\n\
- movs r0, 0x1\n\
- b _080BB702\n\
- .align 2, 0\n\
- _080BB6A4: .4byte 0x00000fff\n\
- _080BB6A8:\n\
- adds r0, r1, 0\n\
- subs r0, 0x92\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _080BB6B8\n\
- movs r0, 0x2\n\
- b _080BB702\n\
- _080BB6B8:\n\
- adds r0, r1, 0\n\
- subs r0, 0x9A\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _080BB6C8\n\
- movs r0, 0x3\n\
- b _080BB702\n\
- _080BB6C8:\n\
- adds r0, r1, 0\n\
- subs r0, 0x94\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _080BB6D8\n\
- movs r0, 0x4\n\
- b _080BB702\n\
- _080BB6D8:\n\
- adds r0, r1, 0\n\
- subs r0, 0x96\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bls _080BB6EC\n\
- cmp r1, 0x9C\n\
- beq _080BB6EC\n\
- cmp r1, 0x9D\n\
- bne _080BB6F0\n\
- _080BB6EC:\n\
- movs r0, 0x5\n\
- b _080BB702\n\
- _080BB6F0:\n\
- adds r0, r1, 0\n\
- subs r0, 0x98\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bls _080BB700\n\
- movs r0, 0\n\
- b _080BB702\n\
- _080BB700:\n\
- movs r0, 0x6\n\
- _080BB702:\n\
- add sp, 0x4\n\
- pop {r4}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif
void sub_80BB70C(void) { // 80bb70c
gSpecialVar_0x8007 = sub_80BB66C();
@@ -196,3 +107,131 @@ s16 unref_sub_80BB724(u16 *a0, u8 a1) {
}
return -1;
}
+
+void sub_80BB764(s16 *arg1, s16 *arg2, u16 arg3) {
+ s16 x, y;
+ for (y=0; y<gMapHeader.mapData->height; y++) {
+ for (x=0; x<gMapHeader.mapData->width; x++) {
+ if ((gMapHeader.mapData->map[y * gMapHeader.mapData->width + x] & 0x3ff) == arg3) {
+ *arg1 = x;
+ *arg2 = y;
+ return;
+ }
+ }
+ }
+}
+
+#ifdef NONMATCHING
+void sub_80BB800(void) {
+ s16 x, y;
+ u16 v0, v1;
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ v1 = MapGridGetMetatileIdAt(x, y);
+ for (v0=0; v0<7; v0++) {
+ if (gUnknown_083D1358[v0] == v1) {
+ MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[v0 + 1] | 0x300);
+ CurrentMapDrawMetatileAt(x, y);
+ break;
+ }
+ }
+ for (v0=0; v0<7; v0++) {
+ if (gUnknown_083D1358[v0 + 1] == v1) {
+ MapGridSetMetatileIdAt(x, y, gUnknown_083D1358[v0] | 0x300);
+ CurrentMapDrawMetatileAt(x, y);
+ break;
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_80BB800(void) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0x4\n\
+ mov r4, sp\n\
+ adds r4, 0x2\n\
+ mov r0, sp\n\
+ adds r1, r4, 0\n\
+ bl GetXYCoordsOneStepInFrontOfPlayer\n\
+ mov r0, sp\n\
+ movs r1, 0\n\
+ ldrsh r0, [r0, r1]\n\
+ movs r2, 0\n\
+ ldrsh r1, [r4, r2]\n\
+ bl MapGridGetMetatileIdAt\n\
+ movs r5, 0\n\
+ mov r12, r4\n\
+ lsls r0, 16\n\
+ asrs r3, r0, 16\n\
+ ldr r1, _080BB84C @ =gUnknown_083D1358\n\
+ mov r8, r1\n\
+ adds r7, r0, 0\n\
+ mov r4, sp\n\
+ mov r6, r12\n\
+_080BB834:\n\
+ ldr r0, _080BB84C @ =gUnknown_083D1358\n\
+ lsls r1, r5, 2\n\
+ adds r2, r1, r0\n\
+ ldrh r0, [r2]\n\
+ cmp r0, r3\n\
+ bne _080BB850\n\
+ movs r3, 0\n\
+ ldrsh r0, [r4, r3]\n\
+ movs r5, 0\n\
+ ldrsh r1, [r6, r5]\n\
+ ldrh r3, [r2, 0x2]\n\
+ b _080BB878\n\
+ .align 2, 0\n\
+_080BB84C: .4byte gUnknown_083D1358\n\
+_080BB850:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x6\n\
+ bls _080BB834\n\
+ movs r5, 0\n\
+ mov r4, sp\n\
+ mov r6, r12\n\
+_080BB860:\n\
+ lsls r0, r5, 2\n\
+ mov r1, r8\n\
+ adds r3, r0, r1\n\
+ ldrh r1, [r3, 0x2]\n\
+ asrs r0, r7, 16\n\
+ cmp r1, r0\n\
+ bne _080BB892\n\
+ movs r2, 0\n\
+ ldrsh r0, [r4, r2]\n\
+ movs r5, 0\n\
+ ldrsh r1, [r6, r5]\n\
+ ldrh r3, [r3]\n\
+_080BB878:\n\
+ movs r5, 0xC0\n\
+ lsls r5, 4\n\
+ adds r2, r5, 0\n\
+ orrs r2, r3\n\
+ bl MapGridSetMetatileIdAt\n\
+ movs r1, 0\n\
+ ldrsh r0, [r4, r1]\n\
+ movs r2, 0\n\
+ ldrsh r1, [r6, r2]\n\
+ bl CurrentMapDrawMetatileAt\n\
+ b _080BB89C\n\
+_080BB892:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x6\n\
+ bls _080BB860\n\
+_080BB89C:\n\
+ add sp, 0x4\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif