summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/secret_base.s40
-rw-r--r--src/secret_base.c8
-rwxr-xr-xsrc/secret_base_80bb4ac.c92
3 files changed, 100 insertions, 40 deletions
diff --git a/asm/secret_base.s b/asm/secret_base.s
index c0d7a0974..3d4305b38 100644
--- a/asm/secret_base.s
+++ b/asm/secret_base.s
@@ -1317,46 +1317,6 @@ _080BC18A:
.section .text_80BC1D0
- thumb_func_start GetSecretBaseMapName
-GetSecretBaseMapName: @ 80BC1D0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- ldr r6, _080BC214 @ =gUnknown_020387DC
- ldr r5, _080BC218 @ =gSaveBlock1
- ldr r4, _080BC21C @ =0x00004054
- adds r0, r4, 0
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 5
- adds r1, r5
- ldr r0, _080BC220 @ =0x00001a08
- adds r1, r0
- ldrb r0, [r1]
- strb r0, [r6]
- adds r0, r4, 0
- bl VarGet
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r0, r8
- bl sub_80BC190
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_080BC214: .4byte gUnknown_020387DC
-_080BC218: .4byte gSaveBlock1
-_080BC21C: .4byte 0x00004054
-_080BC220: .4byte 0x00001a08
- thumb_func_end GetSecretBaseMapName
-
thumb_func_start sub_80BC224
sub_80BC224: @ 80BC224
push {r4,r5,lr}
diff --git a/src/secret_base.c b/src/secret_base.c
index 572dfaa1d..9955fd242 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -2,6 +2,9 @@
#include "string_util.h"
#include "strings.h"
#include "text.h"
+#include "event_data.h"
+
+extern u8 gUnknown_020387DC;
u8 sub_80BB8A8(void *);
@@ -16,3 +19,8 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) {
return StringAppend(dest, gOtherText_PlayersBase);
}
+
+u8 *GetSecretBaseMapName(u8 *dest) {
+ gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(0x4054)].sbr_field_0;
+ return sub_80BC190(dest, VarGet(0x4054));
+}
diff --git a/src/secret_base_80bb4ac.c b/src/secret_base_80bb4ac.c
index 8955441eb..ebd93f008 100755
--- a/src/secret_base_80bb4ac.c
+++ b/src/secret_base_80bb4ac.c
@@ -72,6 +72,7 @@ void sub_80BB63C(void) { // 80bb63c
gScriptResult = 0;
}
+#ifdef NONMATCHING
u8 sub_80BB66C(void) { // 80bb66c
s16 x, y;
u16 v0;
@@ -91,6 +92,97 @@ 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();