diff --git a/asm/pokemon_1.s b/asm/pokemon_1.s index 18aff18a3..ed97cd672 100644 --- a/asm/pokemon_1.s +++ b/asm/pokemon_1.s @@ -7,235 +7,6 @@ - - thumb_func_start sub_8068338 -sub_8068338: @ 8068338 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x58 - adds r7, r0, 0 - adds r6, r1, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r0, =gSaveBlock2Ptr - ldr r0, [r0] - ldr r1, =0x00000ca9 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08068374 - lsls r0, r1, 30 - lsrs r0, 30 - bl sub_8165C90 - lsls r0, 24 - lsrs r3, r0, 24 - b _0806837C - .pool -_08068374: - movs r3, 0x32 - cmp r2, 0 - bne _0806837C - ldrb r3, [r6, 0xC] -_0806837C: - ldrh r1, [r6] - movs r2, 0x1 - str r2, [sp] - ldr r0, [r6, 0x1C] - str r0, [sp, 0x4] - str r2, [sp, 0x8] - ldr r0, [r6, 0x14] - str r0, [sp, 0xC] - adds r0, r7, 0 - adds r2, r3, 0 - movs r3, 0 - bl CreateMon - movs r5, 0 - movs r0, 0xD - adds r0, r6 - mov r10, r0 - adds r1, r6, 0x2 - str r1, [sp, 0x38] - adds r0, r6, 0 - adds r0, 0x2B - str r0, [sp, 0x34] - adds r1, 0x1E - str r1, [sp, 0x54] - add r0, sp, 0x30 - mov r9, r0 - subs r1, 0x12 - str r1, [sp, 0x3C] - adds r0, r6, 0 - adds r0, 0xF - str r0, [sp, 0x40] - adds r1, 0x2 - str r1, [sp, 0x44] - adds r0, 0x2 - str r0, [sp, 0x48] - adds r1, 0x2 - str r1, [sp, 0x4C] - adds r0, 0x2 - str r0, [sp, 0x50] - movs r1, 0x31 - add r1, sp - mov r8, r1 - adds r4, r6, 0x4 -_080683D2: - ldrh r1, [r4] - lsls r2, r5, 24 - lsrs r2, 24 - adds r0, r7, 0 - bl SetMonMoveSlot - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _080683D2 - adds r0, r7, 0 - movs r1, 0x15 - mov r2, r10 - bl SetMonData - adds r0, r7, 0 - movs r1, 0xC - ldr r2, [sp, 0x38] - bl SetMonData - adds r0, r7, 0 - movs r1, 0x20 - ldr r2, [sp, 0x34] - bl SetMonData - add r0, sp, 0x10 - ldr r1, [sp, 0x54] - bl StringCopy - add r0, sp, 0x10 - ldrb r0, [r0] - cmp r0, 0xFC - bne _0806842A - add r0, sp, 0x10 - ldrb r0, [r0, 0x1] - cmp r0, 0x15 - bne _0806842A - movs r0, 0x1 - mov r1, r9 - strb r0, [r1] - add r0, sp, 0x10 - bl StripExtCtrlCodes - b _08068430 -_0806842A: - movs r0, 0x2 - mov r1, r9 - strb r0, [r1] -_08068430: - adds r0, r7, 0 - movs r1, 0x3 - mov r2, r9 - bl SetMonData - adds r0, r7, 0 - movs r1, 0x2 - add r2, sp, 0x10 - bl SetMonData - adds r0, r7, 0 - movs r1, 0x1A - ldr r2, [sp, 0x3C] - bl SetMonData - adds r0, r7, 0 - movs r1, 0x1B - ldr r2, [sp, 0x40] - bl SetMonData - adds r0, r7, 0 - movs r1, 0x1C - ldr r2, [sp, 0x44] - bl SetMonData - adds r0, r7, 0 - movs r1, 0x1D - ldr r2, [sp, 0x48] - bl SetMonData - adds r0, r7, 0 - movs r1, 0x1E - ldr r2, [sp, 0x4C] - bl SetMonData - adds r0, r7, 0 - movs r1, 0x1F - ldr r2, [sp, 0x50] - bl SetMonData - ldrb r0, [r6, 0x1B] - lsrs r0, 7 - mov r1, r8 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x2E - mov r2, r8 - bl SetMonData - ldrb r0, [r6, 0x18] - lsls r0, 27 - lsrs r0, 27 - mov r1, r8 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x27 - mov r2, r8 - bl SetMonData - ldrh r0, [r6, 0x18] - lsls r0, 22 - lsrs r0, 27 - mov r1, r8 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x28 - mov r2, r8 - bl SetMonData - ldrb r0, [r6, 0x19] - lsls r0, 25 - lsrs r0, 27 - mov r1, r8 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x29 - mov r2, r8 - bl SetMonData - ldr r0, [r6, 0x18] - lsls r0, 12 - lsrs r0, 27 - mov r1, r8 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x2A - mov r2, r8 - bl SetMonData - ldrh r0, [r6, 0x1A] - lsls r0, 23 - lsrs r0, 27 - mov r1, r8 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x2B - mov r2, r8 - bl SetMonData - ldrb r0, [r6, 0x1B] - lsls r0, 26 - lsrs r0, 27 - mov r1, r8 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x2C - mov r2, r8 - bl SetMonData - adds r0, r7, 0 - bl MonRestorePP - adds r0, r7, 0 - bl CalculateMonStats - add sp, 0x58 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8068338 - thumb_func_start sub_8068528 sub_8068528: @ 8068528 push {r4-r7,lr} @@ -284,7 +55,7 @@ sub_8068528: @ 8068528 subs r0, 0x1 lsls r0, 24 lsrs r0, 24 - bl sub_8165C90 + bl BattleFrontierGetOpponentLvl adds r2, r0, 0 lsls r2, 24 lsrs r2, 24 diff --git a/asm/rom_8161F74.s b/asm/rom_8161F74.s index 011560d37..2dbc96408 100644 --- a/asm/rom_8161F74.s +++ b/asm/rom_8161F74.s @@ -391,7 +391,7 @@ _081622B2: adds r4, r1, r0 mov r0, r10 str r2, [sp, 0x38] - bl sub_8165C90 + bl BattleFrontierGetOpponentLvl ldrb r1, [r4] lsls r0, 24 lsrs r0, 24 @@ -3979,7 +3979,7 @@ _081641E6: lsls r0, r1, 24 lsrs r0, 24 str r2, [sp, 0x18] - bl sub_8165C90 + bl BattleFrontierGetOpponentLvl ldrb r1, [r4] lsls r0, 24 lsrs r0, 24 @@ -4464,7 +4464,7 @@ _081645B8: lsls r0, r1, 24 lsrs r0, 24 str r3, [sp, 0x48] - bl sub_8165C90 + bl BattleFrontierGetOpponentLvl ldrb r1, [r4] lsls r0, 24 lsrs r0, 24 @@ -7104,7 +7104,7 @@ sub_8165C40: @ 8165C40 ldrb r0, [r2] lsls r0, 30 lsrs r0, 30 - bl sub_8165C90 + bl BattleFrontierGetOpponentLvl b _08165C88 .pool _08165C84: @@ -7116,8 +7116,8 @@ _08165C88: bx r1 thumb_func_end sub_8165C40 - thumb_func_start sub_8165C90 -sub_8165C90: @ 8165C90 + thumb_func_start BattleFrontierGetOpponentLvl +BattleFrontierGetOpponentLvl: @ 8165C90 push {lr} lsls r0, 24 lsrs r0, 24 @@ -7138,7 +7138,7 @@ _08165CA2: _08165CB0: pop {r1} bx r1 - thumb_func_end sub_8165C90 + thumb_func_end BattleFrontierGetOpponentLvl thumb_func_start sub_8165CB4 sub_8165CB4: @ 8165CB4 diff --git a/include/global.h b/include/global.h index 32c13d86c..2dfabeb6a 100644 --- a/include/global.h +++ b/include/global.h @@ -184,7 +184,8 @@ struct SaveBlock2 // All below could be a one giant struct /*0x64C*/ u8 field_64C[1629]; - /*0xCA9*/ u8 frontierChosenLvl; + /*0xCA9*/ u8 frontierChosenLvl : 2; + /*0xCA9*/ u8 field_CA9_a : 6; /*0xCAA*/ u8 field_CAA[368]; /*0xE1A*/ u16 battlePyramidFloor; // possibly? /*0xE1C*/ u8 field_E1C[16]; diff --git a/src/pokemon_1.c b/src/pokemon_1.c index e28c56252..fe7809826 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -296,7 +296,73 @@ void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src) StripExtCtrlCodes(nickname); } else + { language = GAME_LANGUAGE; + } + + SetMonData(mon, MON_DATA_LANGUAGE, &language); + SetMonData(mon, MON_DATA_NICKNAME, nickname); + SetMonData(mon, MON_DATA_HP_EV, &src->hpEV); + SetMonData(mon, MON_DATA_ATK_EV, &src->attackEV); + SetMonData(mon, MON_DATA_DEF_EV, &src->defenseEV); + SetMonData(mon, MON_DATA_SPD_EV, &src->speedEV); + SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV); + SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV); + value = src->altAbility; + SetMonData(mon, MON_DATA_ALT_ABILITY, &value); + value = src->hpIV; + SetMonData(mon, MON_DATA_HP_IV, &value); + value = src->attackIV; + SetMonData(mon, MON_DATA_ATK_IV, &value); + value = src->defenseIV; + SetMonData(mon, MON_DATA_DEF_IV, &value); + value = src->speedIV; + SetMonData(mon, MON_DATA_SPD_IV, &value); + value = src->spAttackIV; + SetMonData(mon, MON_DATA_SPATK_IV, &value); + value = src->spDefenseIV; + SetMonData(mon, MON_DATA_SPDEF_IV, &value); + MonRestorePP(mon); + CalculateMonStats(mon); +} + +u8 BattleFrontierGetOpponentLvl(u8); + +void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50) +{ + s32 i; + u8 nickname[30]; + u8 level; + u8 language; + u8 value; + + if (gSaveBlock2Ptr->frontierChosenLvl != 0) + level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontierChosenLvl); + else if (lvl50) + level = 50; + else + level = src->level; + + CreateMon(mon, src->species, level, 0, 1, src->personality, 1, src->otId); + + for (i = 0; i < 4; i++) + SetMonMoveSlot(mon, src->moves[i], i); + + SetMonData(mon, MON_DATA_PP_BONUSES, &src->ppBonuses); + SetMonData(mon, MON_DATA_HELD_ITEM, &src->heldItem); + SetMonData(mon, MON_DATA_FRIENDSHIP, &src->friendship); + + StringCopy(nickname, src->nickname); + + if (nickname[0] == EXT_CTRL_CODE_BEGIN && nickname[1] == EXT_CTRL_CODE_JPN) + { + language = LANGUAGE_JAPANESE; + StripExtCtrlCodes(nickname); + } + else + { + language = GAME_LANGUAGE; + } SetMonData(mon, MON_DATA_LANGUAGE, &language); SetMonData(mon, MON_DATA_NICKNAME, nickname);