diff options
author | scnorton <scnorton@biociphers.org> | 2019-01-08 10:20:51 -0500 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2019-01-08 10:20:51 -0500 |
commit | 7738fcee638985656b7cf376ec6936f04f53c255 (patch) | |
tree | 440fc41a1736bd37a48d98420ce933691acc5e79 | |
parent | 9c5f01fc8efb546fa6ef546cd1c627befcfd6740 (diff) |
through sub_815E9FC
-rw-r--r-- | asm/trainer_tower.s | 241 | ||||
-rw-r--r-- | common_syms/fieldmap.txt | 2 | ||||
-rw-r--r-- | include/global.h | 27 | ||||
-rw-r--r-- | include/pokemon.h | 49 | ||||
-rw-r--r-- | src/pokemon.c | 4 | ||||
-rw-r--r-- | src/trainer_tower.c | 52 |
6 files changed, 80 insertions, 295 deletions
diff --git a/asm/trainer_tower.s b/asm/trainer_tower.s index 4b1bfdfe0..2336ec48a 100644 --- a/asm/trainer_tower.s +++ b/asm/trainer_tower.s @@ -5,247 +5,6 @@ .text - thumb_func_start sub_815E9C8 -sub_815E9C8: @ 815E9C8 - ldr r3, _0815E9EC @ =gSpecialVar_Result - ldr r0, _0815E9F0 @ =gSaveBlock1Ptr - ldr r1, [r0] - ldr r2, _0815E9F4 @ =0x00003d34 - adds r0, r1, r2 - ldr r2, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r0 - ldr r0, _0815E9F8 @ =0x00003d42 - adds r1, r0 - ldrb r0, [r1] - lsls r0, 29 - lsrs r0, 31 - strh r0, [r3] - bx lr - .align 2, 0 -_0815E9EC: .4byte gSpecialVar_Result -_0815E9F0: .4byte gSaveBlock1Ptr -_0815E9F4: .4byte 0x00003d34 -_0815E9F8: .4byte 0x00003d42 - thumb_func_end sub_815E9C8 - - thumb_func_start sub_815E9FC -sub_815E9FC: @ 815E9FC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _0815EABC @ =0x00004001 - bl VarGet - lsls r0, 16 - lsrs r4, r0, 16 - bl sub_815EBB8 - mov r9, r0 - ldr r0, _0815EAC0 @ =gSaveBlock1Ptr - ldr r1, [r0] - ldr r2, _0815EAC4 @ =0x00003d34 - adds r0, r1, r2 - ldr r2, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r0 - movs r0, 0xF5 - lsls r0, 6 - adds r1, r0 - ldrb r5, [r1] - bl ZeroEnemyPartyMons - ldr r1, _0815EAC8 @ =gUnknown_203F458 - mov r10, r1 - ldr r6, [r1] - ldrb r1, [r6] - lsls r0, r1, 5 - subs r0, r1 - lsls r7, r0, 5 - adds r0, r6, r7 - ldrb r0, [r0, 0xE] - cmp r0, 0x1 - beq _0815EAD4 - cmp r0, 0x1 - ble _0815EA56 - cmp r0, 0x2 - bne _0815EA56 - b _0815EB58 -_0815EA56: - movs r6, 0 - lsls r5, 1 - str r5, [sp] - lsls r0, r4, 2 - mov r5, r10 - adds r0, r4 - lsls r0, 3 - adds r0, r4 - lsls r7, r0, 3 - adds r2, r7, 0x4 - mov r8, r2 -_0815EA6C: - ldr r1, _0815EACC @ =gUnknown_847A2EE - ldr r2, [sp] - adds r0, r6, r2 - adds r0, r1 - ldrb r2, [r0] - ldr r3, [r5] - movs r0, 0x2C - adds r4, r2, 0 - muls r4, r0 - adds r2, r4, r7 - ldrb r1, [r3] - lsls r0, r1, 5 - subs r0, r1 - lsls r0, 5 - adds r2, r0 - adds r3, r2 - adds r3, 0x5C - mov r0, r9 - strb r0, [r3] - movs r0, 0x64 - muls r0, r6 - ldr r1, _0815EAD0 @ =gEnemyParty - adds r0, r1 - ldr r1, [r5] - ldrb r3, [r1] - lsls r2, r3, 5 - subs r2, r3 - lsls r2, 5 - adds r2, 0xC - adds r1, r2 - add r1, r8 - adds r4, 0x40 - adds r1, r4 - bl sub_803E0A4 - adds r6, 0x1 - cmp r6, 0x1 - ble _0815EA6C - b _0815EB9E - .align 2, 0 -_0815EABC: .4byte 0x00004001 -_0815EAC0: .4byte gSaveBlock1Ptr -_0815EAC4: .4byte 0x00003d34 -_0815EAC8: .4byte gUnknown_203F458 -_0815EACC: .4byte gUnknown_847A2EE -_0815EAD0: .4byte gEnemyParty -_0815EAD4: - ldr r4, _0815EB50 @ =gUnknown_847A2FE - lsls r5, 1 - adds r0, r5, r4 - ldrb r2, [r0] - movs r1, 0x2C - mov r8, r1 - mov r3, r8 - muls r3, r2 - adds r0, r3, r7 - adds r0, r6, r0 - adds r0, 0x5C - mov r2, r9 - strb r2, [r0] - ldr r6, _0815EB54 @ =gEnemyParty - mov r0, r10 - ldr r1, [r0] - ldrb r2, [r1] - lsls r0, r2, 5 - subs r0, r2 - lsls r0, 5 - adds r0, 0xC - adds r1, r0 - adds r3, 0x44 - adds r1, r3 - adds r0, r6, 0 - bl sub_803E0A4 - adds r4, 0x1 - adds r5, r4 - ldrb r2, [r5] - mov r0, r10 - ldr r1, [r0] - mov r3, r8 - muls r3, r2 - ldrb r2, [r1] - lsls r0, r2, 5 - subs r0, r2 - lsls r0, 5 - adds r0, r3, r0 - adds r1, r0 - movs r2, 0xD2 - lsls r2, 1 - adds r1, r2 - mov r0, r9 - strb r0, [r1] - adds r6, 0x64 - mov r2, r10 - ldr r1, [r2] - ldrb r2, [r1] - lsls r0, r2, 5 - subs r0, r2 - lsls r0, 5 - adds r0, 0xC - adds r1, r0 - movs r0, 0xC6 - lsls r0, 1 - adds r3, r0 - adds r1, r3 - adds r0, r6, 0 - bl sub_803E0A4 - b _0815EB9E - .align 2, 0 -_0815EB50: .4byte gUnknown_847A2FE -_0815EB54: .4byte gEnemyParty -_0815EB58: - ldr r1, _0815EBB0 @ =gUnknown_847A30E - lsls r0, r5, 1 - adds r0, r5 - adds r0, r4, r0 - adds r0, r1 - ldrb r2, [r0] - movs r0, 0x2C - adds r5, r2, 0 - muls r5, r0 - lsls r3, r4, 2 - adds r3, r4 - lsls r3, 3 - adds r3, r4 - lsls r3, 3 - adds r0, r5, r3 - adds r0, r7 - adds r0, r6, r0 - adds r0, 0x5C - mov r1, r9 - strb r1, [r0] - ldr r0, _0815EBB4 @ =gEnemyParty - mov r2, r10 - ldr r1, [r2] - ldrb r4, [r1] - lsls r2, r4, 5 - subs r2, r4 - lsls r2, 5 - adds r2, 0xC - adds r1, r2 - adds r3, 0x4 - adds r1, r3 - adds r5, 0x40 - adds r1, r5 - bl sub_803E0A4 -_0815EB9E: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815EBB0: .4byte gUnknown_847A30E -_0815EBB4: .4byte gEnemyParty - thumb_func_end sub_815E9FC - thumb_func_start sub_815EBB8 sub_815EBB8: @ 815EBB8 push {r4-r6,lr} diff --git a/common_syms/fieldmap.txt b/common_syms/fieldmap.txt index b593fc3f2..dedf055bd 100644 --- a/common_syms/fieldmap.txt +++ b/common_syms/fieldmap.txt @@ -1 +1 @@ -VMap
\ No newline at end of file +VMap diff --git a/include/global.h b/include/global.h index 26ce4a8cc..8e85b3123 100644 --- a/include/global.h +++ b/include/global.h @@ -241,33 +241,6 @@ struct LinkBattleRecords u8 languages[LINK_B_RECORDS_COUNT]; }; -struct BattleTowerPokemon -{ - u16 species; - u16 heldItem; - u16 moves[4]; - u8 level; - u8 ppBonuses; - u8 hpEV; - u8 attackEV; - u8 defenseEV; - u8 speedEV; - u8 spAttackEV; - u8 spDefenseEV; - u32 otId; - u32 hpIV:5; - u32 attackIV:5; - u32 defenseIV:5; - u32 speedIV:5; - u32 spAttackIV:5; - u32 spDefenseIV:5; - u32 gap:1; - u32 altAbility:1; - u32 personality; - u8 nickname[POKEMON_NAME_LENGTH + 1]; - u8 friendship; -}; - struct UnknownSaveBlock2Struct { u8 field_0; diff --git a/include/pokemon.h b/include/pokemon.h index 6a9b85e71..f1f04c9eb 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -310,31 +310,31 @@ struct PokemonStorage /*0x83C2*/ u8 boxWallpapers[14]; }; -struct UnknownPokemonStruct +struct BattleTowerPokemon { - u16 species; - u16 heldItem; - u16 moves[4]; - u8 level; - u8 ppBonuses; - u8 hpEV; - u8 attackEV; - u8 defenseEV; - u8 speedEV; - u8 spAttackEV; - u8 spDefenseEV; - u32 otId; - u32 hpIV:5; - u32 attackIV:5; - u32 defenseIV:5; - u32 speedIV:5; - u32 spAttackIV:5; - u32 spDefenseIV:5; - u32 gap:1; - u32 altAbility:1; - u32 personality; - u8 nickname[POKEMON_NAME_LENGTH + 1]; - u8 friendship; + /*0x00*/ u16 species; + /*0x02*/ u16 heldItem; + /*0x04*/ u16 moves[4]; + /*0x0C*/ u8 level; + /*0x0D*/ u8 ppBonuses; + /*0x0E*/ u8 hpEV; + /*0x0F*/ u8 attackEV; + /*0x10*/ u8 defenseEV; + /*0x11*/ u8 speedEV; + /*0x12*/ u8 spAttackEV; + /*0x13*/ u8 spDefenseEV; + /*0x14*/ u32 otId; + /*0x18*/ u32 hpIV:5; + u32 attackIV:5; + u32 defenseIV:5; + u32 speedIV:5; + u32 spAttackIV:5; + u32 spDefenseIV:5; + u32 gap:1; + u32 altAbility:1; + /*0x1C*/ u32 personality; + /*0x20*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x2B*/ u8 friendship; }; #define BATTLE_STATS_NO 8 @@ -672,5 +672,6 @@ void BattleAnimateBackSprite(struct Sprite* sprite, u16 species); void PlayMapChosenOrBattleBGM(u16 songId); u8 GetMonsStateToDoubles(void); +void sub_803E0A4(struct Pokemon *mon, struct BattleTowerPokemon *src); #endif // GUARD_POKEMON_H diff --git a/src/pokemon.c b/src/pokemon.c index 5cd2cd2d7..9d902f901 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -351,7 +351,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI CalculateMonStats(mon); } -void sub_803E0A4(struct Pokemon *mon, struct UnknownPokemonStruct *src) +void sub_803E0A4(struct Pokemon *mon, struct BattleTowerPokemon *src) { s32 i; u8 value; @@ -410,7 +410,7 @@ void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u SetMonData(mon, MON_DATA_OBEDIENCE, &obedient); } -void sub_803E23C(struct Pokemon *mon, struct UnknownPokemonStruct *dest) +void sub_803E23C(struct Pokemon *mon, struct BattleTowerPokemon *dest) { s32 i; u16 heldItem; diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 8ced159c5..889d90696 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -139,6 +139,7 @@ void sub_815E908(void); void sub_815E948(void); void sub_815E9C8(void); void sub_815E9FC(void); +s32 sub_815EBB8(void); void sub_815EC0C(void); u32 sub_815EDDC(u32 *); void sub_815EDF4(u32 *, u32); @@ -158,6 +159,9 @@ extern const struct UnkSubstruct_203F458_000C *const gUnknown_84827B4[][8]; extern const u16 gUnknown_847A284[8][3]; extern const u16 gUnknown_847A2B4[]; extern const u16 gUnknown_847A2D2[]; +extern const u8 gUnknown_847A2EE[][2]; +extern const u8 gUnknown_847A2FE[][2]; +extern const u8 gUnknown_847A30E[][3]; bool32 sub_815D7BC(void * dest, void * buffer) { @@ -1005,3 +1009,51 @@ void sub_815E948(void) } PlayNewMapMusic(gUnknown_847A2D2[var_4001]); } + +void sub_815E9C8(void) +{ + gSpecialVar_Result = gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_2; +} + +void sub_815E9FC(void) +{ + u16 r4 = VarGet(VAR_0x4001); + s32 r9 = sub_815EBB8(); + u8 r5 = gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8; + s32 r6; + u8 r2; + + ZeroEnemyPartyMons(); + + switch (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002) + { + case 0: + default: + for (r6 = 0; r6 < 2; r6++) + /* + * sp+0 := r5 * 2 + * r5 := gUnknown_203F458 + * r7 := r4 * 72 + * r8 := r7 + 4 + */ + { + r2 = gUnknown_847A2EE[r5][r6]; + gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9; + sub_803E0A4(&gEnemyParty[r6], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]); + } + break; + case 1: + r2 = gUnknown_847A2FE[r5][0]; + gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2].level = r9; + sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_040[r2]); + r2 = gUnknown_847A2FE[r5][1]; + gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2].level = r9; + sub_803E0A4(&gEnemyParty[1], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[1].unk_040[r2]); + break; + case 2: + r2 = gUnknown_847A30E[r5][r4]; + gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9; + sub_803E0A4(&gEnemyParty[0], &gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2]); + break; + } +} |