diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-05-16 22:06:23 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-05-16 22:06:23 -0400 |
commit | 651630d5dc8e2b79e522e07863f0c35965752e9b (patch) | |
tree | fe919ed2809cb06bf48fe19e0f3a255c793a3fcc | |
parent | 4d342bcd670ae4f4ff0b24184bceb8369b974c61 (diff) |
sub_80BC300 (nonmatching)
-rw-r--r-- | asm/secret_base.s | 153 | ||||
-rw-r--r-- | include/global.h | 10 | ||||
-rw-r--r-- | src/secret_base.c | 189 |
3 files changed, 194 insertions, 158 deletions
diff --git a/asm/secret_base.s b/asm/secret_base.s index 56f9ef3d4..17b5cb665 100644 --- a/asm/secret_base.s +++ b/asm/secret_base.s @@ -6,159 +6,6 @@ .section .text_80BC1D0 - thumb_func_start sub_80BC300 -sub_80BC300: @ 80BC300 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - movs r0, 0 - mov r10, r0 - movs r6, 0 - mov r9, r6 -_080BC314: - movs r4, 0 - lsls r3, r6, 2 - lsls r2, r6, 1 - ldr r7, _080BC424 @ =gPlayerParty - adds r1, r6, 0x1 - str r1, [sp] - adds r1, r3, 0 -_080BC322: - adds r0, r1, r4 - lsls r0, 1 - ldr r5, _080BC428 @ =gSaveBlock1 + 0x1A54 - adds r0, r5, r0 - mov r5, r9 - strh r5, [r0] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _080BC322 - ldr r1, _080BC42C @ =gSaveBlock1 + 0x1A84 - adds r0, r1, r2 - strh r5, [r0] - ldr r5, _080BC430 @ =gSaveBlock1 + 0x1A90 - adds r0, r5, r2 - mov r1, r9 - strh r1, [r0] - ldr r2, _080BC434 @ =gSaveBlock1 + 0x1A9C - adds r0, r2, r6 - mov r5, r9 - strb r5, [r0] - ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C - adds r0, r1, r3 - mov r2, r9 - str r2, [r0] - ldr r3, _080BC43C @ =gSaveBlock1 + 0x1AA2 - adds r0, r3, r6 - strb r2, [r0] - movs r0, 0x64 - adds r5, r6, 0 - muls r5, r0 - adds r4, r5, r7 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _080BC408 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _080BC408 - movs r4, 0 - mov r0, r10 - lsls r0, 2 - mov r8, r0 - mov r1, r10 - lsls r7, r1, 1 - adds r1, 0x1 - str r1, [sp, 0x4] - ldr r2, _080BC424 @ =gPlayerParty -_080BC38E: - adds r1, r4, 0 - adds r1, 0xD - adds r0, r5, r2 - str r2, [sp, 0x8] - bl GetMonData - mov r3, r8 - adds r1, r3, r4 - lsls r1, 1 - ldr r3, _080BC428 @ =gSaveBlock1 + 0x1A54 - adds r1, r3, r1 - strh r0, [r1] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r2, [sp, 0x8] - cmp r4, 0x3 - bls _080BC38E - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _080BC424 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - ldr r5, _080BC42C @ =gSaveBlock1 + 0x1A84 - adds r1, r5, r7 - strh r0, [r1] - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - ldr r2, _080BC430 @ =gSaveBlock1 + 0x1A90 - adds r1, r2, r7 - strh r0, [r1] - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - ldr r1, _080BC434 @ =gSaveBlock1 + 0x1A9C - add r1, r10 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C - add r1, r8 - str r0, [r1] - adds r0, r4, 0 - bl sub_80BC298 - ldr r1, _080BC43C @ =gSaveBlock1 + 0x1AA2 - add r1, r10 - strb r0, [r1] - ldr r3, [sp, 0x4] - lsls r0, r3, 16 - lsrs r0, 16 - mov r10, r0 -_080BC408: - ldr r5, [sp] - lsls r0, r5, 16 - lsrs r6, r0, 16 - cmp r6, 0x5 - bls _080BC314 - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080BC424: .4byte gPlayerParty -_080BC428: .4byte gSaveBlock1 + 0x1A54 -_080BC42C: .4byte gSaveBlock1 + 0x1A84 -_080BC430: .4byte gSaveBlock1 + 0x1A90 -_080BC434: .4byte gSaveBlock1 + 0x1A9C -_080BC438: .4byte gSaveBlock1 + 0x1A3C -_080BC43C: .4byte gSaveBlock1 + 0x1AA2 - thumb_func_end sub_80BC300 - thumb_func_start sub_80BC440 sub_80BC440: @ 80BC440 push {r4,r5,lr} diff --git a/include/global.h b/include/global.h index c8b07cf69..8e6be79da 100644 --- a/include/global.h +++ b/include/global.h @@ -107,11 +107,11 @@ struct SecretBaseRecord /*0x1A1A*/ u8 decorations[16]; /*0x1A2A*/ u8 decorationPos[16]; /*0x1A3A*/ u32 partyPersonality[6]; - /*0x1A52*/ u16 partyMoves[6 * 4]; - /*0x1A6A*/ u16 partySpecies[6]; - /*0x1A76*/ u16 partyHeldItems[6]; - /*0x1A82*/ u8 partyLevels[6]; - /*0x1A88*/ u8 partyEVs[6]; + /*0x1A54*/ u16 partyMoves[6 * 4]; + /*0x1A84*/ u16 partySpecies[6]; + /*0x1A90*/ u16 partyHeldItems[6]; + /*0x1A9C*/ u8 partyLevels[6]; + /*0x1AA2*/ u8 partyEVs[6]; }; #include "game_stat.h" diff --git a/src/secret_base.c b/src/secret_base.c index 4fd6bf30a..a405ec337 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -15,6 +15,7 @@ #include "decoration.h" #include "field_weather.h" #include "metatile_behavior.h" +#include "pokemon.h" extern u8 gUnknown_020387DC; extern u16 gSpecialVar_0x8004; @@ -865,3 +866,191 @@ u8 sub_80BC298(struct Pokemon *mon) { // 80bc298 evsum += GetMonData(mon, MON_DATA_SPDEF_EV); return (u8)(evsum / 6); } + +#ifdef NONMATCHING +void sub_80BC300(void) +{ + u16 moveidx; + u16 sbpartyidx = 0; + int resetVal = 0; + u16 partyidx = 0; + while (partyidx < 6) { + partyidx ++; + for (moveidx=0; moveidx<4; moveidx++) { + gSaveBlock1.secretBases[0].partyMoves[(partyidx - 1) * 6 + moveidx] = resetVal; + } + gSaveBlock1.secretBases[0].partySpecies[partyidx - 1] = resetVal; + gSaveBlock1.secretBases[0].partyHeldItems[partyidx - 1] = resetVal; + gSaveBlock1.secretBases[0].partyLevels[partyidx - 1] = resetVal; + gSaveBlock1.secretBases[0].partyPersonality[partyidx - 1] = resetVal; + gSaveBlock1.secretBases[0].partyEVs[partyidx - 1] = resetVal; + if (GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES) != 0 && !GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_IS_EGG)) { + sbpartyidx ++; + for (moveidx=0; moveidx<4; moveidx++) { + gSaveBlock1.secretBases[0].partyMoves[(sbpartyidx - 1) * 6 + moveidx] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_MOVE1 + moveidx); + } + gSaveBlock1.secretBases[0].partySpecies[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_SPECIES); + gSaveBlock1.secretBases[0].partyHeldItems[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_HELD_ITEM); + gSaveBlock1.secretBases[0].partyLevels[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_LEVEL); + gSaveBlock1.secretBases[0].partyPersonality[sbpartyidx - 1] = GetMonData(&(gPlayerParty[partyidx - 1]), MON_DATA_PERSONALITY); + gSaveBlock1.secretBases[0].partyEVs[sbpartyidx - 1] = sub_80BC298(&(gPlayerParty[partyidx - 1])); + } + } +} +#else +__attribute__((naked)) +void sub_80BC300(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, 0xC\n\ + movs r0, 0\n\ + mov r10, r0\n\ + movs r6, 0\n\ + mov r9, r6\n\ +_080BC314:\n\ + movs r4, 0\n\ + lsls r3, r6, 2\n\ + lsls r2, r6, 1\n\ + ldr r7, _080BC424 @ =gPlayerParty\n\ + adds r1, r6, 0x1\n\ + str r1, [sp]\n\ + adds r1, r3, 0\n\ +_080BC322:\n\ + adds r0, r1, r4\n\ + lsls r0, 1\n\ + ldr r5, _080BC428 @ =gSaveBlock1 + 0x1A54\n\ + adds r0, r5, r0\n\ + mov r5, r9\n\ + strh r5, [r0]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0x3\n\ + bls _080BC322\n\ + ldr r1, _080BC42C @ =gSaveBlock1 + 0x1A84\n\ + adds r0, r1, r2\n\ + strh r5, [r0]\n\ + ldr r5, _080BC430 @ =gSaveBlock1 + 0x1A90\n\ + adds r0, r5, r2\n\ + mov r1, r9\n\ + strh r1, [r0]\n\ + ldr r2, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\ + adds r0, r2, r6\n\ + mov r5, r9\n\ + strb r5, [r0]\n\ + ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\ + adds r0, r1, r3\n\ + mov r2, r9\n\ + str r2, [r0]\n\ + ldr r3, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\ + adds r0, r3, r6\n\ + strb r2, [r0]\n\ + movs r0, 0x64\n\ + adds r5, r6, 0\n\ + muls r5, r0\n\ + adds r4, r5, r7\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _080BC408\n\ + adds r0, r4, 0\n\ + movs r1, 0x2D\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + bne _080BC408\n\ + movs r4, 0\n\ + mov r0, r10\n\ + lsls r0, 2\n\ + mov r8, r0\n\ + mov r1, r10\n\ + lsls r7, r1, 1\n\ + adds r1, 0x1\n\ + str r1, [sp, 0x4]\n\ + ldr r2, _080BC424 @ =gPlayerParty\n\ +_080BC38E:\n\ + adds r1, r4, 0\n\ + adds r1, 0xD\n\ + adds r0, r5, r2\n\ + str r2, [sp, 0x8]\n\ + bl GetMonData\n\ + mov r3, r8\n\ + adds r1, r3, r4\n\ + lsls r1, 1\n\ + ldr r3, _080BC428 @ =gSaveBlock1 + 0x1A54\n\ + adds r1, r3, r1\n\ + strh r0, [r1]\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r2, [sp, 0x8]\n\ + cmp r4, 0x3\n\ + bls _080BC38E\n\ + movs r0, 0x64\n\ + adds r4, r6, 0\n\ + muls r4, r0\n\ + ldr r0, _080BC424 @ =gPlayerParty\n\ + adds r4, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + ldr r5, _080BC42C @ =gSaveBlock1 + 0x1A84\n\ + adds r1, r5, r7\n\ + strh r0, [r1]\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + ldr r2, _080BC430 @ =gSaveBlock1 + 0x1A90\n\ + adds r1, r2, r7\n\ + strh r0, [r1]\n\ + adds r0, r4, 0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + ldr r1, _080BC434 @ =gSaveBlock1 + 0x1A9C\n\ + add r1, r10\n\ + strb r0, [r1]\n\ + adds r0, r4, 0\n\ + movs r1, 0\n\ + bl GetMonData\n\ + ldr r1, _080BC438 @ =gSaveBlock1 + 0x1A3C\n\ + add r1, r8\n\ + str r0, [r1]\n\ + adds r0, r4, 0\n\ + bl sub_80BC298\n\ + ldr r1, _080BC43C @ =gSaveBlock1 + 0x1AA2\n\ + add r1, r10\n\ + strb r0, [r1]\n\ + ldr r3, [sp, 0x4]\n\ + lsls r0, r3, 16\n\ + lsrs r0, 16\n\ + mov r10, r0\n\ +_080BC408:\n\ + ldr r5, [sp]\n\ + lsls r0, r5, 16\n\ + lsrs r6, r0, 16\n\ + cmp r6, 0x5\n\ + bls _080BC314\n\ + add sp, 0xC\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\ +_080BC424: .4byte gPlayerParty\n\ +_080BC428: .4byte gSaveBlock1 + 0x1A54\n\ +_080BC42C: .4byte gSaveBlock1 + 0x1A84\n\ +_080BC430: .4byte gSaveBlock1 + 0x1A90\n\ +_080BC434: .4byte gSaveBlock1 + 0x1A9C\n\ +_080BC438: .4byte gSaveBlock1 + 0x1A3C\n\ +_080BC43C: .4byte gSaveBlock1 + 0x1AA2\n\ +.syntax divided\n"); +} +#endif |