diff options
-rw-r--r-- | asm/secret_base.s | 177 | ||||
-rw-r--r-- | include/vars.h | 4 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/secret_base.c | 11 | ||||
-rwxr-xr-x | src/secret_base_80bb4ac.c | 229 |
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 |