summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--asm/secret_base.s240
-rw-r--r--src/secret_base.c16
-rwxr-xr-xsrc/secret_base_80bb4ac.c146
4 files changed, 156 insertions, 247 deletions
diff --git a/.gitignore b/.gitignore
index 78af8c737..13752b437 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,7 +16,6 @@
*.bat
sound/**/*.bin
src/*.s
-tools/agbcc
ld_script_ruby.txt
ld_script_sapphire.txt
*.map
diff --git a/asm/secret_base.s b/asm/secret_base.s
index 6685bc826..b6684b9fe 100644
--- a/asm/secret_base.s
+++ b/asm/secret_base.s
@@ -6,173 +6,6 @@
.text
- thumb_func_start sub_80BB63C
-sub_80BB63C: @ 80BB63C
- push {lr}
- ldr r0, _080BB654 @ =gSaveBlock1
- ldr r1, _080BB658 @ =0x00001a08
- adds r0, r1
- ldrb r1, [r0]
- cmp r1, 0
- beq _080BB660
- ldr r1, _080BB65C @ =gScriptResult
- movs r0, 0x1
- strh r0, [r1]
- b _080BB664
- .align 2, 0
-_080BB654: .4byte gSaveBlock1
-_080BB658: .4byte 0x00001a08
-_080BB65C: .4byte gScriptResult
-_080BB660:
- ldr r0, _080BB668 @ =gScriptResult
- strh r1, [r0]
-_080BB664:
- pop {r0}
- bx r0
- .align 2, 0
-_080BB668: .4byte gScriptResult
- thumb_func_end sub_80BB63C
-
- thumb_func_start sub_80BB66C
-sub_80BB66C: @ 80BB66C
- push {r4,lr}
- 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 MapGridGetMetatileBehaviorAt
- adds r1, r0, 0
- ldr r2, _080BB6A4 @ =0x00000fff
- adds r0, r2, 0
- ands r1, r0
- adds r0, r1, 0
- subs r0, 0x90
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _080BB6A8
- movs r0, 0x1
- b _080BB702
- .align 2, 0
-_080BB6A4: .4byte 0x00000fff
-_080BB6A8:
- adds r0, r1, 0
- subs r0, 0x92
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _080BB6B8
- movs r0, 0x2
- b _080BB702
-_080BB6B8:
- adds r0, r1, 0
- subs r0, 0x9A
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _080BB6C8
- movs r0, 0x3
- b _080BB702
-_080BB6C8:
- adds r0, r1, 0
- subs r0, 0x94
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _080BB6D8
- movs r0, 0x4
- b _080BB702
-_080BB6D8:
- adds r0, r1, 0
- subs r0, 0x96
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bls _080BB6EC
- cmp r1, 0x9C
- beq _080BB6EC
- cmp r1, 0x9D
- bne _080BB6F0
-_080BB6EC:
- movs r0, 0x5
- b _080BB702
-_080BB6F0:
- adds r0, r1, 0
- subs r0, 0x98
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bls _080BB700
- movs r0, 0
- b _080BB702
-_080BB700:
- movs r0, 0x6
-_080BB702:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80BB66C
-
- thumb_func_start sub_80BB70C
-sub_80BB70C: @ 80BB70C
- push {r4,lr}
- ldr r4, _080BB720 @ =gSpecialVar_0x8007
- bl sub_80BB66C
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080BB720: .4byte gSpecialVar_0x8007
- thumb_func_end sub_80BB70C
-
- thumb_func_start unref_sub_80BB724
-unref_sub_80BB724: @ 80BB724
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- movs r2, 0
- ldr r6, _080BB748 @ =0x00000fff
- lsrs r3, r1, 24
- ldr r5, _080BB74C @ =0x000001ff
-_080BB732:
- lsls r0, r2, 1
- adds r0, r4
- ldrh r1, [r0]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, r3
- bne _080BB750
- lsls r0, r2, 16
- asrs r0, 16
- b _080BB75E
- .align 2, 0
-_080BB748: .4byte 0x00000fff
-_080BB74C: .4byte 0x000001ff
-_080BB750:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, r5
- bls _080BB732
- movs r0, 0x1
- negs r0, r0
-_080BB75E:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end unref_sub_80BB724
-
thumb_func_start sub_80BB764
sub_80BB764: @ 80BB764
push {r4-r7,lr}
@@ -1483,79 +1316,6 @@ _080BC18A:
thumb_func_end sub_80BC14C
.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}
- ldr r0, _080BC25C @ =0x00004054
- bl VarGet
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 5
- ldr r0, _080BC260 @ =gSaveBlock1 + 0x1A0A
- adds r4, r0
- ldr r5, _080BC264 @ =gStringVar1
- adds r0, r4, 0
- bl sub_80BB8A8
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl StringCopyN
- movs r1, 0xFF
- strb r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080BC25C: .4byte 0x00004054
-_080BC260: .4byte gSaveBlock1 + 0x1A0A
-_080BC264: .4byte gStringVar1
- thumb_func_end sub_80BC224
-
thumb_func_start sub_80BC268
sub_80BC268: @ 80BC268
push {lr}
diff --git a/src/secret_base.c b/src/secret_base.c
index 572dfaa1d..63c08d629 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,16 @@ 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));
+}
+
+void sub_80BC224(void) {
+ u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(0x4054)].sbr_field_2;
+ u8 *var1 = gStringVar1;
+ u8 var2 = sub_80BB8A8(var0);
+ u8 *var3 = StringCopyN(var1, var0, var2);
+ *var3 = EOS;
+}
diff --git a/src/secret_base_80bb4ac.c b/src/secret_base_80bb4ac.c
index 9bf6d216a..cdf609cbc 100755
--- a/src/secret_base_80bb4ac.c
+++ b/src/secret_base_80bb4ac.c
@@ -1,9 +1,11 @@
#include "global.h"
#include "event_data.h"
-#include "vars.h"
+#include "asm.h"
+#include "field_player_avatar.h"
extern u8 gUnknown_020387DC;
extern u16 gSpecialVar_0x8004;
+extern u16 gSpecialVar_0x8007;
extern u16 gScriptResult;
void sub_80BB4AC(struct SecretBaseRecord *record) { // 080bb4ac
@@ -55,10 +57,142 @@ void sub_80BB5E4(void) { // 80bb5e4
u16 idx;
gScriptResult = 0;
for (idx=0; idx<20; idx++) {
- if (gUnknown_020387DC == gSaveBlock1.secretBases[idx].sbr_field_0) {
- gScriptResult = 1;
- VarSet(0x4054, idx);
- return;
- }
+ if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0)
+ continue;
+ gScriptResult = 1;
+ VarSet(0x4054, idx);
+ break;
+ }
+}
+
+void sub_80BB63C(void) { // 80bb63c
+ if (gSaveBlock1.secretBases[0].sbr_field_0)
+ gScriptResult = 1;
+ else
+ gScriptResult = 0;
+}
+
+#ifdef NONMATCHING
+u8 sub_80BB66C(void) { // 80bb66c
+ s16 x, y;
+ u16 v0;
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ v0 = MapGridGetMetatileBehaviorAt(x, y) & 0xFFF;
+ if (v0 == 0x90 || v0 == 0x91)
+ return 1;
+ else if (v0 == 0x92 || v0 == 0x93)
+ return 2;
+ else if (v0 == 0x9a || v0 == 0x9b)
+ return 3;
+ else if (v0 == 0x94 || v0 == 0x95)
+ return 4;
+ else if (v0 == 0x96 || v0 == 0x97 || v0 == 0x9c || v0 == 0x9d)
+ return 5;
+ else if (v0 == 0x98 || v0 == 0x99)
+ 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();
+}
+
+s16 unref_sub_80BB724(u16 *a0, u8 a1) {
+ u16 v2;
+ for (v2=0; v2<0x200; v2++) {
+ if ((a0[v2] & 0xFFF) == a1)
+ return (s16)v2;
}
+ return -1;
}