summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2019-01-08 10:20:51 -0500
committerscnorton <scnorton@biociphers.org>2019-01-08 10:20:51 -0500
commit7738fcee638985656b7cf376ec6936f04f53c255 (patch)
tree440fc41a1736bd37a48d98420ce933691acc5e79
parent9c5f01fc8efb546fa6ef546cd1c627befcfd6740 (diff)
through sub_815E9FC
-rw-r--r--asm/trainer_tower.s241
-rw-r--r--common_syms/fieldmap.txt2
-rw-r--r--include/global.h27
-rw-r--r--include/pokemon.h49
-rw-r--r--src/pokemon.c4
-rw-r--r--src/trainer_tower.c52
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;
+ }
+}