summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalax1@gmail.com>2017-05-16 19:49:00 -0400
committerPikalaxALT <pikalax1@gmail.com>2017-05-16 19:49:00 -0400
commit40c81240b45b43e5f904bcd0b6b91c69b1f70e3c (patch)
treec8405ac7de8a19565768be93eae1ecf1545ae00e
parentca26346cff5ca1448896a499072255100cedeb66 (diff)
sub_80BBDD0 (nonmatching)
-rw-r--r--asm/secret_base.s228
-rw-r--r--include/decoration.h4
-rw-r--r--include/global.h2
-rwxr-xr-xsrc/secret_base_80bb4ac.c284
4 files changed, 285 insertions, 233 deletions
diff --git a/asm/secret_base.s b/asm/secret_base.s
index 006f8c4a9..e36ee9791 100644
--- a/asm/secret_base.s
+++ b/asm/secret_base.s
@@ -6,234 +6,6 @@
.section .text_b
- thumb_func_start sub_80BBDD0
-sub_80BBDD0: @ 80BBDD0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r0, _080BBE00 @ =0x00004054
- bl VarGet
- lsls r0, 16
- lsrs r4, r0, 16
- bl CurrentMapIsSecretBase
- lsls r0, 24
- cmp r0, 0
- bne _080BBE08
- ldr r0, _080BBE04 @ =gSaveBlock1 + 0x2688
- str r0, [sp, 0x4]
- adds r0, 0xC
- str r0, [sp, 0x8]
- movs r1, 0xC
- str r1, [sp, 0xC]
- b _080BBE1E
- .align 2, 0
-_080BBE00: .4byte 0x00004054
-_080BBE04: .4byte gSaveBlock1 + 0x2688
-_080BBE08:
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 5
- ldr r0, _080BBF7C @ =gSaveBlock1 + 0x1A1A
- adds r2, r1, r0
- str r2, [sp, 0x4]
- adds r0, 0x10
- adds r1, r0
- str r1, [sp, 0x8]
- movs r3, 0x10
- str r3, [sp, 0xC]
-_080BBE1E:
- movs r6, 0
- ldr r4, [sp, 0xC]
- cmp r6, r4
- bcc _080BBE28
- b _080BBF6C
-_080BBE28:
- ldr r5, _080BBF80 @ =gSaveBlock1
- mov r10, r5
-_080BBE2C:
- ldr r1, [sp, 0x4]
- adds r0, r1, r6
- ldrb r1, [r0]
- mov r9, r0
- adds r2, r6, 0x1
- str r2, [sp, 0x10]
- cmp r1, 0
- bne _080BBE3E
- b _080BBF5E
-_080BBE3E:
- ldrb r0, [r0]
- lsls r0, 5
- ldr r3, _080BBF84 @ =gDecorations
- adds r0, r3
- ldrb r0, [r0, 0x11]
- cmp r0, 0x4
- beq _080BBE4E
- b _080BBF5E
-_080BBE4E:
- movs r5, 0
- ldr r0, _080BBF88 @ =gMapHeader
- ldr r2, [r0, 0x4]
- ldrb r3, [r2]
- mov r8, r0
- cmp r5, r3
- bcs _080BBE8E
- ldr r0, [r2, 0x4]
- ldrh r1, [r0, 0x14]
- ldr r4, _080BBF8C @ =gSpecialVar_0x8004
- ldrh r0, [r4]
- adds r0, 0xAE
- adds r7, r4, 0
- cmp r1, r0
- beq _080BBE8E
- adds r4, r2, 0
- adds r2, r3, 0
-_080BBE70:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, r2
- bcs _080BBE8E
- ldr r1, [r4, 0x4]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x14]
- ldrh r0, [r7]
- adds r0, 0xAE
- cmp r1, r0
- bne _080BBE70
-_080BBE8E:
- mov r1, r8
- ldr r0, [r1, 0x4]
- ldrb r0, [r0]
- cmp r5, r0
- beq _080BBF5E
- ldr r7, _080BBF90 @ =gSpecialVar_0x8006
- ldr r2, [sp, 0x8]
- adds r1, r2, r6
- ldrb r0, [r1]
- lsrs r0, 4
- strh r0, [r7]
- ldr r6, _080BBF94 @ =gSpecialVar_0x8007
- ldrb r1, [r1]
- movs r0, 0xF
- ands r0, r1
- strh r0, [r6]
- ldrh r0, [r7]
- adds r0, 0x7
- ldrh r1, [r6]
- adds r1, 0x7
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_80572D8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080BBEDA
- adds r0, r4, 0
- bl sub_80572EC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080BBF5E
-_080BBEDA:
- mov r3, r8
- ldr r0, [r3, 0x4]
- ldr r1, [r0, 0x4]
- lsls r4, r5, 1
- adds r4, r5
- lsls r4, 3
- adds r1, r4, r1
- ldr r5, _080BBF98 @ =0x00003f20
- adds r0, r5, 0
- ldrb r1, [r1, 0x1]
- adds r0, r1
- ldr r1, _080BBF9C @ =gScriptResult
- strh r0, [r1]
- ldrh r0, [r1]
- mov r2, r9
- ldrb r1, [r2]
- lsls r1, 5
- ldr r3, _080BBFA0 @ =gDecorations + 0x1C
- adds r1, r3
- ldr r1, [r1]
- ldrh r1, [r1]
- bl VarSet
- mov r5, r8
- ldr r0, [r5, 0x4]
- ldr r0, [r0, 0x4]
- adds r4, r0
- ldrb r0, [r4]
- ldr r1, _080BBF9C @ =gScriptResult
- strh r0, [r1]
- ldr r2, _080BBF8C @ =gSpecialVar_0x8004
- ldrh r0, [r2]
- adds r0, 0xAE
- lsls r0, 16
- lsrs r0, 16
- bl FlagReset
- ldr r3, _080BBF9C @ =gScriptResult
- ldrb r0, [r3]
- mov r4, r10
- ldrb r1, [r4, 0x5]
- ldrb r2, [r4, 0x4]
- bl show_sprite
- ldr r5, _080BBF9C @ =gScriptResult
- ldrb r0, [r5]
- ldrb r1, [r4, 0x5]
- ldrb r2, [r4, 0x4]
- movs r4, 0
- ldrsh r3, [r7, r4]
- movs r5, 0
- ldrsh r4, [r6, r5]
- str r4, [sp]
- bl sub_805C0F8
- ldr r1, _080BBF9C @ =gScriptResult
- ldrb r0, [r1]
- mov r2, r10
- ldrb r1, [r2, 0x5]
- ldrb r2, [r2, 0x4]
- bl sub_805C78C
- ldr r3, _080BBF8C @ =gSpecialVar_0x8004
- ldrh r0, [r3]
- adds r0, 0x1
- strh r0, [r3]
-_080BBF5E:
- ldr r4, [sp, 0x10]
- lsls r0, r4, 24
- lsrs r6, r0, 24
- ldr r5, [sp, 0xC]
- cmp r6, r5
- bcs _080BBF6C
- b _080BBE2C
-_080BBF6C:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080BBF7C: .4byte gSaveBlock1 + 0x1A1A
-_080BBF80: .4byte gSaveBlock1
-_080BBF84: .4byte gDecorations
-_080BBF88: .4byte gMapHeader
-_080BBF8C: .4byte gSpecialVar_0x8004
-_080BBF90: .4byte gSpecialVar_0x8006
-_080BBF94: .4byte gSpecialVar_0x8007
-_080BBF98: .4byte 0x00003f20
-_080BBF9C: .4byte gScriptResult
-_080BBFA0: .4byte gDecorations + 0x1C
- thumb_func_end sub_80BBDD0
-
thumb_func_start sub_80BBFA4
sub_80BBFA4: @ 80BBFA4
push {r4,r5,lr}
diff --git a/include/decoration.h b/include/decoration.h
index 4f24d451d..d041a8007 100644
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -9,8 +9,8 @@ struct Decoration
/*0x12*/ u8 decor_field_12;
/*0x13*/ u8 decor_field_13;
/*0x14*/ u16 price;
- /*0x16*/ u8 *description;
- /*0x1A*/ void *tiles;
+ /*0x18*/ u8 *description;
+ /*0x1c*/ u16 *tiles;
};
extern struct Decoration gDecorations[0x77];
diff --git a/include/global.h b/include/global.h
index 28d7b1c96..c8b07cf69 100644
--- a/include/global.h
+++ b/include/global.h
@@ -105,7 +105,7 @@ struct SecretBaseRecord
/*0x1A18*/ u8 sbr_field_10;
/*0x1A19*/ u8 sbr_field_11;
/*0x1A1A*/ u8 decorations[16];
- /*0x1A2A*/ u8 sbr_field_22[16];
+ /*0x1A2A*/ u8 decorationPos[16];
/*0x1A3A*/ u32 partyPersonality[6];
/*0x1A52*/ u16 partyMoves[6 * 4];
/*0x1A6A*/ u16 partySpecies[6];
diff --git a/src/secret_base_80bb4ac.c b/src/secret_base_80bb4ac.c
index a0fbb1212..2c0b7a388 100755
--- a/src/secret_base_80bb4ac.c
+++ b/src/secret_base_80bb4ac.c
@@ -13,9 +13,12 @@
#include "palette.h"
#include "decoration.h"
#include "field_weather.h"
+#include "metatile_behavior.h"
extern u8 gUnknown_020387DC;
extern u16 gSpecialVar_0x8004;
+extern u16 gSpecialVar_0x8005;
+extern u16 gSpecialVar_0x8006;
extern u16 gSpecialVar_0x8007;
extern u16 gScriptResult;
extern const struct
@@ -46,7 +49,7 @@ void sub_80BB4AC(struct SecretBaseRecord *record) // 080bb4ac
record->sbr_field_1_6 = 0;
for (i=0; i<16; i++) {
record->decorations[i] = 0;
- record->sbr_field_22[i] = 0;
+ record->decorationPos[i] = 0;
}
for (i=0; i<6; i++) {
for (j=0; j<4; j++) {
@@ -321,7 +324,7 @@ void sub_80BBCCC(u8 flagIn)
curBaseId = VarGet(VAR_0x4054);
for (x=0; x<16; x++) {
if ((u8)(gSaveBlock1.secretBases[curBaseId].decorations[x] - 1) <= 0x77 && gDecorations[gSaveBlock1.secretBases[curBaseId].decorations[x]].decor_field_11 != 4) {
- sub_80FF394((gSaveBlock1.secretBases[0].sbr_field_22[x] >> 4) + 7, (gSaveBlock1.secretBases[0].sbr_field_22[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]);
+ sub_80FF394((gSaveBlock1.secretBases[0].decorationPos[x] >> 4) + 7, (gSaveBlock1.secretBases[0].decorationPos[x] & 0xF) + 7, gSaveBlock1.secretBases[curBaseId].decorations[x]);
}
}
if (curBaseId != 0) {
@@ -333,6 +336,52 @@ void sub_80BBCCC(u8 flagIn)
}
}
}
+
+void sub_80BBDD0(void)
+{
+ u8 *roomdecor;
+ u8 *roomdecorpos;
+ u8 ndecor;
+ u8 decidx;
+ u8 objid = 0;
+ u8 metatile;
+ u16 curBase = VarGet(VAR_0x4054);
+ if (!CurrentMapIsSecretBase()) {
+ roomdecor = gSaveBlock1.playerRoomDecor;
+ roomdecorpos = gSaveBlock1.playerRoomDecorPos;
+ ndecor = 12;
+ } else {
+ roomdecor = gSaveBlock1.secretBases[curBase].decorations;
+ roomdecorpos = gSaveBlock1.secretBases[curBase].decorationPos;
+ ndecor = 16;
+ }
+ for (decidx=0; decidx<ndecor; decidx++) {
+ if (roomdecor[decidx] == 0)
+ continue;
+ if (gDecorations[roomdecor[decidx]].decor_field_11 != 4)
+ continue;
+ for (objid=0; objid<gMapHeader.events->mapObjectCount; objid++) {
+ if (gMapHeader.events->mapObjects[objid].flagId == gSpecialVar_0x8004 + 0xAE)
+ break;
+ }
+ if (objid != gMapHeader.events->mapObjectCount) {
+ gSpecialVar_0x8006 = roomdecorpos[decidx] >> 4;
+ gSpecialVar_0x8007 = roomdecorpos[decidx] & 0xF;
+ metatile = MapGridGetMetatileBehaviorAt(gSpecialVar_0x8006 + 7, gSpecialVar_0x8007 + 7);
+ if (sub_80572D8(metatile) == 1 || sub_80572EC(metatile) == 1) {
+ gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + 0x3f20;
+ VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]);
+ gScriptResult = gMapHeader.events->mapObjects[objid].localId;
+ FlagReset(gSpecialVar_0x8004 + 0xAE);
+ show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007);
+ sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ gSpecialVar_0x8004 ++;
+ }
+ }
+ }
+}
+
#else
__attribute__((naked))
void sub_80BBCCC(u8 flagIn)
@@ -459,4 +508,235 @@ _080BBDC8: .4byte 0x00004089\n\
_080BBDCC: .4byte 0x00000e0a\n\
.syntax divided\n");
}
+
+__attribute__((naked))
+void sub_80BBDD0(void)
+{
+ 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, 0x14\n\
+ ldr r0, _080BBE00 @ =0x00004054\n\
+ bl VarGet\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ bl CurrentMapIsSecretBase\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080BBE08\n\
+ ldr r0, _080BBE04 @ =gSaveBlock1 + 0x2688\n\
+ str r0, [sp, 0x4]\n\
+ adds r0, 0xC\n\
+ str r0, [sp, 0x8]\n\
+ movs r1, 0xC\n\
+ str r1, [sp, 0xC]\n\
+ b _080BBE1E\n\
+ .align 2, 0\n\
+_080BBE00: .4byte 0x00004054\n\
+_080BBE04: .4byte gSaveBlock1 + 0x2688\n\
+_080BBE08:\n\
+ lsls r1, r4, 2\n\
+ adds r1, r4\n\
+ lsls r1, 5\n\
+ ldr r0, _080BBF7C @ =gSaveBlock1 + 0x1A1A\n\
+ adds r2, r1, r0\n\
+ str r2, [sp, 0x4]\n\
+ adds r0, 0x10\n\
+ adds r1, r0\n\
+ str r1, [sp, 0x8]\n\
+ movs r3, 0x10\n\
+ str r3, [sp, 0xC]\n\
+_080BBE1E:\n\
+ movs r6, 0\n\
+ ldr r4, [sp, 0xC]\n\
+ cmp r6, r4\n\
+ bcc _080BBE28\n\
+ b _080BBF6C\n\
+_080BBE28:\n\
+ ldr r5, _080BBF80 @ =gSaveBlock1\n\
+ mov r10, r5\n\
+_080BBE2C:\n\
+ ldr r1, [sp, 0x4]\n\
+ adds r0, r1, r6\n\
+ ldrb r1, [r0]\n\
+ mov r9, r0\n\
+ adds r2, r6, 0x1\n\
+ str r2, [sp, 0x10]\n\
+ cmp r1, 0\n\
+ bne _080BBE3E\n\
+ b _080BBF5E\n\
+_080BBE3E:\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 5\n\
+ ldr r3, _080BBF84 @ =gDecorations\n\
+ adds r0, r3\n\
+ ldrb r0, [r0, 0x11]\n\
+ cmp r0, 0x4\n\
+ beq _080BBE4E\n\
+ b _080BBF5E\n\
+_080BBE4E:\n\
+ movs r5, 0\n\
+ ldr r0, _080BBF88 @ =gMapHeader\n\
+ ldr r2, [r0, 0x4]\n\
+ ldrb r3, [r2]\n\
+ mov r8, r0\n\
+ cmp r5, r3\n\
+ bcs _080BBE8E\n\
+ ldr r0, [r2, 0x4]\n\
+ ldrh r1, [r0, 0x14]\n\
+ ldr r4, _080BBF8C @ =gSpecialVar_0x8004\n\
+ ldrh r0, [r4]\n\
+ adds r0, 0xAE\n\
+ adds r7, r4, 0\n\
+ cmp r1, r0\n\
+ beq _080BBE8E\n\
+ adds r4, r2, 0\n\
+ adds r2, r3, 0\n\
+_080BBE70:\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, r2\n\
+ bcs _080BBE8E\n\
+ ldr r1, [r4, 0x4]\n\
+ lsls r0, r5, 1\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ ldrh r1, [r0, 0x14]\n\
+ ldrh r0, [r7]\n\
+ adds r0, 0xAE\n\
+ cmp r1, r0\n\
+ bne _080BBE70\n\
+_080BBE8E:\n\
+ mov r1, r8\n\
+ ldr r0, [r1, 0x4]\n\
+ ldrb r0, [r0]\n\
+ cmp r5, r0\n\
+ beq _080BBF5E\n\
+ ldr r7, _080BBF90 @ =gSpecialVar_0x8006\n\
+ ldr r2, [sp, 0x8]\n\
+ adds r1, r2, r6\n\
+ ldrb r0, [r1]\n\
+ lsrs r0, 4\n\
+ strh r0, [r7]\n\
+ ldr r6, _080BBF94 @ =gSpecialVar_0x8007\n\
+ ldrb r1, [r1]\n\
+ movs r0, 0xF\n\
+ ands r0, r1\n\
+ strh r0, [r6]\n\
+ ldrh r0, [r7]\n\
+ adds r0, 0x7\n\
+ ldrh r1, [r6]\n\
+ adds r1, 0x7\n\
+ bl MapGridGetMetatileBehaviorAt\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ adds r0, r4, 0\n\
+ bl sub_80572D8\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ beq _080BBEDA\n\
+ adds r0, r4, 0\n\
+ bl sub_80572EC\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _080BBF5E\n\
+_080BBEDA:\n\
+ mov r3, r8\n\
+ ldr r0, [r3, 0x4]\n\
+ ldr r1, [r0, 0x4]\n\
+ lsls r4, r5, 1\n\
+ adds r4, r5\n\
+ lsls r4, 3\n\
+ adds r1, r4, r1\n\
+ ldr r5, _080BBF98 @ =0x00003f20\n\
+ adds r0, r5, 0\n\
+ ldrb r1, [r1, 0x1]\n\
+ adds r0, r1\n\
+ ldr r1, _080BBF9C @ =gScriptResult\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r1]\n\
+ mov r2, r9\n\
+ ldrb r1, [r2]\n\
+ lsls r1, 5\n\
+ ldr r3, _080BBFA0 @ =gDecorations + 0x1C\n\
+ adds r1, r3\n\
+ ldr r1, [r1]\n\
+ ldrh r1, [r1]\n\
+ bl VarSet\n\
+ mov r5, r8\n\
+ ldr r0, [r5, 0x4]\n\
+ ldr r0, [r0, 0x4]\n\
+ adds r4, r0\n\
+ ldrb r0, [r4]\n\
+ ldr r1, _080BBF9C @ =gScriptResult\n\
+ strh r0, [r1]\n\
+ ldr r2, _080BBF8C @ =gSpecialVar_0x8004\n\
+ ldrh r0, [r2]\n\
+ adds r0, 0xAE\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ bl FlagReset\n\
+ ldr r3, _080BBF9C @ =gScriptResult\n\
+ ldrb r0, [r3]\n\
+ mov r4, r10\n\
+ ldrb r1, [r4, 0x5]\n\
+ ldrb r2, [r4, 0x4]\n\
+ bl show_sprite\n\
+ ldr r5, _080BBF9C @ =gScriptResult\n\
+ ldrb r0, [r5]\n\
+ ldrb r1, [r4, 0x5]\n\
+ ldrb r2, [r4, 0x4]\n\
+ movs r4, 0\n\
+ ldrsh r3, [r7, r4]\n\
+ movs r5, 0\n\
+ ldrsh r4, [r6, r5]\n\
+ str r4, [sp]\n\
+ bl sub_805C0F8\n\
+ ldr r1, _080BBF9C @ =gScriptResult\n\
+ ldrb r0, [r1]\n\
+ mov r2, r10\n\
+ ldrb r1, [r2, 0x5]\n\
+ ldrb r2, [r2, 0x4]\n\
+ bl sub_805C78C\n\
+ ldr r3, _080BBF8C @ =gSpecialVar_0x8004\n\
+ ldrh r0, [r3]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3]\n\
+_080BBF5E:\n\
+ ldr r4, [sp, 0x10]\n\
+ lsls r0, r4, 24\n\
+ lsrs r6, r0, 24\n\
+ ldr r5, [sp, 0xC]\n\
+ cmp r6, r5\n\
+ bcs _080BBF6C\n\
+ b _080BBE2C\n\
+_080BBF6C:\n\
+ add sp, 0x14\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\
+ .align 2, 0\n\
+_080BBF7C: .4byte gSaveBlock1 + 0x1A1A\n\
+_080BBF80: .4byte gSaveBlock1\n\
+_080BBF84: .4byte gDecorations\n\
+_080BBF88: .4byte gMapHeader\n\
+_080BBF8C: .4byte gSpecialVar_0x8004\n\
+_080BBF90: .4byte gSpecialVar_0x8006\n\
+_080BBF94: .4byte gSpecialVar_0x8007\n\
+_080BBF98: .4byte 0x00003f20\n\
+_080BBF9C: .4byte gScriptResult\n\
+_080BBFA0: .4byte gDecorations + 0x1C\n\
+.syntax divided\n");
+}
#endif