diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/secret_base.c | 7 | ||||
-rwxr-xr-x | src/secret_base_80bb4ac.c | 110 |
2 files changed, 113 insertions, 4 deletions
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 |