summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-05-15 21:39:34 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-05-15 21:39:34 -0400
commitd091a292b1159f3cd798c7c259e75c6fe6e27460 (patch)
tree82bd429b80ed8d4fd3d59c5b84dcf9c70aec6116
parentfc799578a0aa261e1a807c74efbf30c82a6e3f15 (diff)
First pass at sub_80BB764 (not matching)
-rw-r--r--asm/secret_base.s87
-rw-r--r--include/vars.h4
-rw-r--r--ld_script.txt2
-rw-r--r--src/secret_base.c7
-rwxr-xr-xsrc/secret_base_80bb4ac.c110
5 files changed, 118 insertions, 92 deletions
diff --git a/asm/secret_base.s b/asm/secret_base.s
index b6684b9fe..d740882ec 100644
--- a/asm/secret_base.s
+++ b/asm/secret_base.s
@@ -4,92 +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
+ .section .text_b
thumb_func_start sub_80BB800
sub_80BB800: @ 80BB800
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 63c08d629..013715f56 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;
@@ -21,12 +22,12 @@ u8 *sub_80BC190(u8 *dest, u8 arg1) {
}
u8 *GetSecretBaseMapName(u8 *dest) {
- gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(0x4054)].sbr_field_0;
- return sub_80BC190(dest, VarGet(0x4054));
+ gUnknown_020387DC = gSaveBlock1.secretBases[VarGet(VAR_0x4054)].sbr_field_0;
+ return sub_80BC190(dest, VarGet(VAR_0x4054));
}
void sub_80BC224(void) {
- u8 *var0 = gSaveBlock1.secretBases[(u8)VarGet(0x4054)].sbr_field_2;
+ 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 12cf72560..5a07e8b65 100755
--- a/src/secret_base_80bb4ac.c
+++ b/src/secret_base_80bb4ac.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "event_data.h"
#include "asm.h"
+#include "vars.h"
#include "field_player_avatar.h"
extern u8 gUnknown_020387DC;
@@ -60,7 +61,7 @@ void sub_80BB5E4(void) { // 80bb5e4
if (gUnknown_020387DC != gSaveBlock1.secretBases[idx].sbr_field_0)
continue;
gScriptResult = 1;
- VarSet(0x4054, idx);
+ VarSet(VAR_0x4054, idx);
break;
}
}
@@ -104,3 +105,110 @@ s16 unref_sub_80BB724(u16 *a0, u8 a1) {
}
return -1;
}
+
+#ifdef NONMATCHING
+void sub_80BB764(s16 *arg1, s16 *arg2, u16 arg3) {
+ s16 height = gMapHeader.mapData->height;
+ s16 width = gMapHeader.mapData->width;
+ s16 x;
+ s16 y;
+ u16 *row;
+ for (y=0; y<height; y++) {
+ row = &(gMapHeader.mapData->map[y * width]);
+ for (x=0; x<width; x++) {
+ if ((row[x] & 0x3ff) == arg3) {
+ *arg1 = x;
+ *arg2 = y;
+ return;
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_80BB764(s16 *arg1, s16 *arg2, u16 arg3) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x8\n\
+ mov r9, r0\n\
+ mov r10, r1\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ mov r8, r2\n\
+ movs r0, 0\n\
+ mov r12, r0\n\
+ ldr r1, _080BB7C8 @ =gMapHeader\n\
+ ldr r0, [r1]\n\
+ ldr r3, [r0, 0x4]\n\
+ cmp r12, r3\n\
+ bge _080BB7EE\n\
+ ldr r0, [r0]\n\
+ str r0, [sp, 0x4]\n\
+ str r3, [sp]\n\
+ _080BB78E:\n\
+ movs r2, 0\n\
+ mov r1, r12\n\
+ lsls r7, r1, 16\n\
+ ldr r0, [sp, 0x4]\n\
+ cmp r2, r0\n\
+ bge _080BB7DC\n\
+ ldr r0, _080BB7C8 @ =gMapHeader\n\
+ ldr r1, [r0]\n\
+ asrs r0, r7, 16\n\
+ ldr r4, [r1]\n\
+ adds r6, r0, 0\n\
+ muls r6, r4\n\
+ ldr r5, [r1, 0xC]\n\
+ _080BB7A8:\n\
+ lsls r0, r2, 16\n\
+ asrs r3, r0, 16\n\
+ adds r0, r6, r3\n\
+ lsls r0, 1\n\
+ adds r0, r5\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _080BB7CC @ =0x000003ff\n\
+ ands r0, r1\n\
+ cmp r0, r8\n\
+ bne _080BB7D0\n\
+ mov r1, r9\n\
+ strh r2, [r1]\n\
+ mov r1, r12\n\
+ mov r0, r10\n\
+ strh r1, [r0]\n\
+ b _080BB7EE\n\
+ .align 2, 0\n\
+ _080BB7C8: .4byte gMapHeader\n\
+ _080BB7CC: .4byte 0x000003ff\n\
+ _080BB7D0:\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, r4\n\
+ blt _080BB7A8\n\
+ _080BB7DC:\n\
+ movs r1, 0x80\n\
+ lsls r1, 9\n\
+ adds r0, r7, r1\n\
+ lsrs r1, r0, 16\n\
+ mov r12, r1\n\
+ asrs r0, 16\n\
+ ldr r1, [sp]\n\
+ cmp r0, r1\n\
+ blt _080BB78E\n\
+ _080BB7EE:\n\
+ add sp, 0x8\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .syntax divided\n");
+}
+#endif