diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | asm/secret_base.s | 240 | ||||
-rw-r--r-- | src/secret_base.c | 16 | ||||
-rwxr-xr-x | src/secret_base_80bb4ac.c | 146 |
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; } |