From 4f21cb26eae07262cd952b90aefac67837d04c69 Mon Sep 17 00:00:00 2001 From: Seth Barberee Date: Fri, 4 Aug 2023 15:59:55 -0700 Subject: [PATCH] more documentation of pokemonStruct based on other decomp func tries --- include/pokemon.h | 26 +++++----- src/code_8094F88.c | 12 ++--- src/debug_menu4.c | 6 +-- src/pokemon.c | 122 +++++++++++++++++++++++---------------------- src/pokemon_1.c | 75 ---------------------------- src/pokemon_3.c | 34 ++++++------- src/pokemon_mid.c | 26 +++++----- 7 files changed, 113 insertions(+), 188 deletions(-) delete mode 100644 src/pokemon_1.c diff --git a/include/pokemon.h b/include/pokemon.h index b27c6f1a4..4c64a0cdb 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -20,7 +20,7 @@ struct Offense // size: 0x4 struct unkPokeSubStruct_C { - u8 unk0; + u8 level; u8 fill1[3]; }; @@ -29,17 +29,16 @@ struct PokemonStruct { u16 unk0; // recruited?? /* 0x2 */ bool8 isTeamLeader; - /* 0x3 */ u8 unkHasNextStage; // set to a random value? + /* 0x3 */ u8 level; /* 0x4 */ struct DungeonLocation dungeonLocation; /* 0x8 */ s16 speciesNum; // species # struct unkPokeSubStruct_C unkC[2]; /* 0x14 */ s16 IQ; /* 0x16 */ u16 pokeHP; /* 0x18 */ struct Offense offense; - u32 unk1C; + /* 0x1C */ u32 currExp; /* 0x20 */ u32 IQSkills; - u8 unk24; - u8 fill25[3]; + /* 0x24 */ u8 tacticIndex; /* 0x28 */ struct BulkItem heldItem; /* 0x2C */ struct Move moves[MAX_MON_MOVES]; /* 0x4C */ u8 name[POKEMON_NAME_LENGTH]; @@ -56,7 +55,7 @@ struct unkStruct_808E6F4 struct EvolveStage { /* 0x0 */ s16 speciesNum; - /* 0x2 */ u8 unkHasNextStage; + /* 0x2 */ u8 level; }; // size: 0x24 @@ -70,24 +69,23 @@ struct unkStruct_8094184 struct PokemonStruct2 { u16 unk0; // corresponds to unk0 in PokemonStruct - /* 0x2 */ bool8 isTeamLeader; // unk2 - /* 0x3 */ u8 unkHasNextStage; // unk3 - /* 0x4 */ struct DungeonLocation dungeonLocation; // unk4 - /* 0x8 */ u16 IQ; // IQ (other offset) + /* 0x2 */ bool8 isTeamLeader; + /* 0x3 */ u8 level; + /* 0x4 */ struct DungeonLocation dungeonLocation; + /* 0x8 */ u16 IQ; s16 unkA; u16 unkC; - /* 0xE */ s16 speciesNum; // speciesNum (other offset) + /* 0xE */ s16 speciesNum; u16 unk10; // pokeHP u16 unk12; // pokeHP /* 0x14 */ struct Offense offense; // offense (other offset) - u32 unk18; // unk1C + /* 0x18 */ u32 currExp; /* 0x1C */ struct unkStruct_8094184 moves; /* 0x40 */ struct Item itemSlot; // heldItem u32 unk44; // some struct u32 unk48; // some struct (same type as 44) /* 0x4C */ u32 IQSkills; // unk20 - u8 unk50; // unk24 - u8 fill51[3]; + /* 0x50 */ u8 tacticIndex; struct unkStruct_808E6F4 unk54; /* 0x58 */ u8 name[POKEMON_NAME_LENGTH]; // name (other offset) }; diff --git a/src/code_8094F88.c b/src/code_8094F88.c index 123eef2da..40a48c9e0 100644 --- a/src/code_8094F88.c +++ b/src/code_8094F88.c @@ -346,7 +346,7 @@ u32 sub_80954CC(u8 *a, u32 b) memset(temp, 0, sizeof(struct PokemonStruct)); RestoreIntegerBits(&backup, &temp->unk0, 2); RestoreIntegerBits(&backup, &temp->isTeamLeader, 1); - RestoreIntegerBits(&backup, &temp->unkHasNextStage, 7); + RestoreIntegerBits(&backup, &temp->level, 7); RestoreDungeonLocation(&backup, &temp->dungeonLocation); RestoreIntegerBits(&backup, &temp->speciesNum, 9); xxx_restore_poke_sub_c_808F410(&backup, &temp->unkC[0]); @@ -357,9 +357,9 @@ u32 sub_80954CC(u8 *a, u32 b) RestoreIntegerBits(&backup, &temp->offense.att[1], 8); RestoreIntegerBits(&backup, &temp->offense.def[0], 8); RestoreIntegerBits(&backup, &temp->offense.def[1], 8); - RestoreIntegerBits(&backup, &temp->unk1C, 0x18); + RestoreIntegerBits(&backup, &temp->currExp, 0x18); RestoreIntegerBits(&backup, &temp->IQSkills, 0x18); - RestoreIntegerBits(&backup, &temp->unk24, 4); + RestoreIntegerBits(&backup, &temp->tacticIndex, 4); RestoreHeldItem(&backup, &temp->heldItem); RestorePokemonMoves(&backup, temp->moves); RestoreIntegerBits(&backup, temp->name, 0x50); @@ -388,7 +388,7 @@ u32 sub_8095624(u8 *a, u32 b) temp = &gUnknown_203B484->unk4; SaveIntegerBits(&backup, &temp->unk0, 2); SaveIntegerBits(&backup, &temp->isTeamLeader, 1); - SaveIntegerBits(&backup, &temp->unkHasNextStage, 7); + SaveIntegerBits(&backup, &temp->level, 7); SaveDungeonLocation(&backup, &temp->dungeonLocation); SaveIntegerBits(&backup, &temp->speciesNum, 9); xxx_save_poke_sub_c_808F41C(&backup, &temp->unkC[0]); @@ -399,9 +399,9 @@ u32 sub_8095624(u8 *a, u32 b) SaveIntegerBits(&backup, &temp->offense.att[1], 8); SaveIntegerBits(&backup, &temp->offense.def[0], 8); SaveIntegerBits(&backup, &temp->offense.def[1], 8); - SaveIntegerBits(&backup, &temp->unk1C, 0x18); + SaveIntegerBits(&backup, &temp->currExp, 0x18); SaveIntegerBits(&backup, &temp->IQSkills, 0x18); - SaveIntegerBits(&backup, &temp->unk24, 4); + SaveIntegerBits(&backup, &temp->tacticIndex, 4); SaveHeldItem(&backup, &temp->heldItem); SavePokemonMoves(&backup, temp->moves); SaveIntegerBits(&backup, temp->name, 0x50); diff --git a/src/debug_menu4.c b/src/debug_menu4.c index 17d180b27..a21d2a90a 100644 --- a/src/debug_menu4.c +++ b/src/debug_menu4.c @@ -146,7 +146,7 @@ void sub_803AD88(void) sUnknown_203B3F8->unk70 = 3; sUnknown_203B3F8->unk68 = 1; sUnknown_203B3F8->unk6C = 100; - sUnknown_203B3F8->unk64 = sUnknown_203B3F8->pokemon->unkHasNextStage; + sUnknown_203B3F8->unk64 = sUnknown_203B3F8->pokemon->level; sUnknown_203B3F8->unk74 = 3; sUnknown_203B3F8->unk78 = &sUnknown_203B3F8->unkE0[3]; sUnknown_203B3F8->unk7C = 44; @@ -256,7 +256,7 @@ void sub_803AFE8(void) default: break; case 3: - sUnknown_203B3F8->pokemon->unkHasNextStage = sUnknown_203B3F8->unk60; + sUnknown_203B3F8->pokemon->level = sUnknown_203B3F8->unk60; // Fallthrough is needed to match case 2: sub_803ACD0(2); @@ -276,4 +276,4 @@ void sub_803B034(void) sub_803ACD0(2); break; } -} \ No newline at end of file +} diff --git a/src/pokemon.c b/src/pokemon.c index bbd331e35..18daecf7a 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -47,63 +47,65 @@ void InitializeRecruitedPokemon(void) } } -// void sub_808CE74(s32 _species, u8 a2, u8* a3) -// { -// struct PokemonStruct pokemon; -// u8 name_buffer[20]; -// u8 friend_area; -// s32 i; -// register s16 species asm("r7") = (s16)_species; -// s32 cond = a2 << 24; - -// pokemon.unk0 = 3; -// if (cond) { -// pokemon.unk2 = 1; -// pokemon.unk4.unk4 = 64; -// } -// else { -// pokemon.unk2 = 1; -// pokemon.unk4.unk4 = 65; -// } -// pokemon.unkHasNextStage = 1; -// pokemon.pokeHP = GetBaseHP(species); -// pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0); -// pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1); -// pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0); -// pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1); -// pokemon.IQ = 1; -// pokemon.unkC[0].unk0 = 0; -// pokemon.unkC[1].unk0 = 0; -// SetDefaultIQSkills((u8*)&pokemon.IQSkills, 0); -// pokemon.speciesNum = species; -// pokemon.heldItem.id = 0; -// pokemon.heldItem.quantity = 0; -// pokemon.unk1C = 0; -// pokemon.unk24 = 0; -// pokemon.unk4.unk5 = 0; -// sub_808E490(pokemon.moves, species); - -// // mostly incorrect below this: -// if (!a3) { -// CopyMonsterNametoBuffer(name_buffer, species); -// BoundedCopyStringtoBuffer(pokemon.name, name_buffer, 10); -// } -// else { -// s32 j; -// for (j = 0; j < 10; j++) { -// pokemon.name[j] = a3[j]; -// } -// } -// friend_area = gMonsterParameters[species].friend_area; -// for (i = 0; i < 413; i++) { -// if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) { -// u8 species_friend_area = sub_80923D4(i); -// if (species_friend_area == friend_area) { -// gRecruitedPokemonRef->pokemon[i] = pokemon; -// gFriendAreas[species_friend_area] = 1; -// sub_80980B4(species); -// break; -// } -// } -// } -// } +// https://decomp.me/scratch/wQbZB + // void sub_808CE74(s16 _species, bool8 _isLeader, u8* name) + // { + // struct PokemonStruct pokemon; + // struct PokemonStruct *temp; + // u8 name_buffer[20]; + // u32 friendArea; + // s32 i; + // s32 species = _species; + // bool32 isLeader = _isLeader << 24; + // + // pokemon.unk0 = 3; + // if (isLeader) { + // pokemon.isTeamLeader = TRUE; + // pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_LEADER; + // } + // else { + // pokemon.isTeamLeader = FALSE; + // pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_PARTNER; + // } + // pokemon.level = 1; + // pokemon.pokeHP = GetBaseHP(species); + // pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0); + // pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1); + // pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0); + // pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1); + // pokemon.IQ = 1; + // pokemon.unkC[0].level = 0; + // pokemon.unkC[1].level = 0; + // SetDefaultIQSkills((u8*)&pokemon.IQSkills, FALSE); + // pokemon.speciesNum = species; + // pokemon.heldItem.id = ITEM_NOTHING; + // pokemon.heldItem.quantity = 0; + // pokemon.currExp = 0; + // pokemon.tacticIndex = 0; // TACTIC_LETS_GO_TOGETHER + // pokemon.dungeonLocation.floor = 0; + // sub_808E490(pokemon.moves, species); + // + // if (name == NULL) { + // CopyMonsterNametoBuffer(name_buffer, species); + // BoundedCopyStringtoBuffer(pokemon.name, name_buffer, POKEMON_NAME_LENGTH); + // } + // else { + // s32 j; + // for (j = 0; j < POKEMON_NAME_LENGTH; j++) { + // pokemon.name[j] = name[j]; + // } + // } + // friendArea = gMonsterParameters[species].friendArea; + // for (i = 0; i < NUM_MONSTERS; i++) { + // temp = &gRecruitedPokemonRef->pokemon[i]; + // if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) { + // u8 speciesFriendArea = sub_80923D4(i); + // if (speciesFriendArea == friendArea) { + // gRecruitedPokemonRef->pokemon[i] = pokemon; + // gFriendAreas[speciesFriendArea] = TRUE; + // sub_80980B4(species); + // break; + // } + // } + // } + // } diff --git a/src/pokemon_1.c b/src/pokemon_1.c deleted file mode 100644 index ff10f023d..000000000 --- a/src/pokemon_1.c +++ /dev/null @@ -1,75 +0,0 @@ -#include "global.h" -#include "pokemon.h" - -extern struct MonsterDataEntry *gMonsterParameters; -extern bool8 *gFriendAreas; -void SetDefaultIQSkills(u8 *param_1, bool8 enableSelfCurer); -void sub_808E490(struct Move* a1, s32 species); -void BoundedCopyStringtoBuffer(u8 *, u8 *, u32); -void sub_80980B4(s32); -u8 sub_80923D4(s32); - -#define DUNGEON_JOIN_LOCATION_LEADER 64 -#define DUNGEON_JOIN_LOCATION_PARTNER 65 - - void sub_808CE74(s16 _species, bool8 _isLeader, u8* name) - { - struct PokemonStruct pokemon; - struct PokemonStruct *temp; - u8 name_buffer[20]; - u32 friendArea; - s32 i; - s32 species = _species; - bool32 isLeader = _isLeader << 24; - - pokemon.unk0 = 3; - if (isLeader) { - pokemon.isTeamLeader = TRUE; - pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_LEADER; - } - else { - pokemon.isTeamLeader = FALSE; - pokemon.dungeonLocation.id = DUNGEON_JOIN_LOCATION_PARTNER; - } - pokemon.unkHasNextStage = 1; - pokemon.pokeHP = GetBaseHP(species); - pokemon.offense.att[0] = GetBaseOffensiveStat(species, 0); - pokemon.offense.att[1] = GetBaseOffensiveStat(species, 1); - pokemon.offense.def[0] = GetBaseDefensiveStat(species, 0); - pokemon.offense.def[1] = GetBaseDefensiveStat(species, 1); - pokemon.IQ = 1; - pokemon.unkC[0].unk0 = 0; - pokemon.unkC[1].unk0 = 0; - SetDefaultIQSkills((u8*)&pokemon.IQSkills, FALSE); - pokemon.speciesNum = species; - pokemon.heldItem.id = ITEM_NOTHING; - pokemon.heldItem.quantity = 0; - pokemon.unk1C = 0; - pokemon.unk24 = 0; - pokemon.dungeonLocation.floor = 0; - sub_808E490(pokemon.moves, species); - - if (name == NULL) { - CopyMonsterNametoBuffer(name_buffer, species); - BoundedCopyStringtoBuffer(pokemon.name, name_buffer, POKEMON_NAME_LENGTH); - } - else { - s32 j; - for (j = 0; j < POKEMON_NAME_LENGTH; j++) { - pokemon.name[j] = name[j]; - } - } - friendArea = gMonsterParameters[species].friendArea; - for (i = 0; i < NUM_MONSTERS; i++) { - temp = &gRecruitedPokemonRef->pokemon[i]; - if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) { - u8 speciesFriendArea = sub_80923D4(i); - if (speciesFriendArea == friendArea) { - gRecruitedPokemonRef->pokemon[i] = pokemon; - gFriendAreas[speciesFriendArea] = TRUE; - sub_80980B4(species); - break; - } - } - } - } diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 133eca18e..07ae1fb8d 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -691,7 +691,7 @@ s32 SaveRecruitedPokemon(u8 *a1, s32 a2) } } else { - pokemon->unkHasNextStage = 0; + pokemon->level = 0; } SavePokemonStruct(&backup, pokemon); } @@ -754,7 +754,7 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2) void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokemon) { - SaveIntegerBits(a1, &pokemon->unkHasNextStage, 7); + SaveIntegerBits(a1, &pokemon->level, 7); SaveIntegerBits(a1, &pokemon->speciesNum, 9); SaveDungeonLocation(a1, &pokemon->dungeonLocation); xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[0]); @@ -765,9 +765,9 @@ void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokem SaveIntegerBits(a1, &pokemon->offense.att[1], 8); SaveIntegerBits(a1, &pokemon->offense.def[0], 8); SaveIntegerBits(a1, &pokemon->offense.def[1], 8); - SaveIntegerBits(a1, &pokemon->unk1C, 24); + SaveIntegerBits(a1, &pokemon->currExp, 24); SaveIntegerBits(a1, &pokemon->IQSkills, 24); - SaveIntegerBits(a1, &pokemon->unk24, 4); + SaveIntegerBits(a1, &pokemon->tacticIndex, 4); SaveHeldItem(a1, &pokemon->heldItem); SavePokemonMoves(a1, pokemon->moves); SaveIntegerBits(a1, pokemon->name, 80); @@ -778,8 +778,8 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po memset(pokemon, 0, sizeof(struct PokemonStruct)); pokemon->unk0 = 0; pokemon->isTeamLeader = 0; - RestoreIntegerBits(a1, &pokemon->unkHasNextStage, 7); - if (pokemon->unkHasNextStage) { + RestoreIntegerBits(a1, &pokemon->level, 7); + if (pokemon->level) { pokemon->unk0 |= 1; } RestoreIntegerBits(a1, &pokemon->speciesNum, 9); @@ -792,9 +792,9 @@ void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* po RestoreIntegerBits(a1, &pokemon->offense.att[1], 8); RestoreIntegerBits(a1, &pokemon->offense.def[0], 8); RestoreIntegerBits(a1, &pokemon->offense.def[1], 8); - RestoreIntegerBits(a1, &pokemon->unk1C, 24); + RestoreIntegerBits(a1, &pokemon->currExp, 24); RestoreIntegerBits(a1, &pokemon->IQSkills, 24); - RestoreIntegerBits(a1, &pokemon->unk24, 4); + RestoreIntegerBits(a1, &pokemon->tacticIndex, 4); RestoreHeldItem(a1, &pokemon->heldItem); RestorePokemonMoves(a1, pokemon->moves); RestoreIntegerBits(a1, pokemon->name, 80); @@ -816,7 +816,7 @@ s32 SavePokemonStruct2(u8* a1, s32 size) SaveIntegerBits(&backup, &pokemon2->unk0, 2); SaveIntegerBits(&backup, pokemon2->isTeamLeader ? &data_u8_neg1 : &data_u8_zero, 1); - SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); + SaveIntegerBits(&backup, &pokemon2->level, 7); SaveDungeonLocation(&backup, &pokemon2->dungeonLocation); SaveIntegerBits(&backup, &pokemon2->IQ, 10); @@ -829,13 +829,13 @@ s32 SavePokemonStruct2(u8* a1, s32 size) SaveIntegerBits(&backup, &pokemon2->offense.att[1], 8); SaveIntegerBits(&backup, &pokemon2->offense.def[0], 8); SaveIntegerBits(&backup, &pokemon2->offense.def[1], 8); - SaveIntegerBits(&backup, &pokemon2->unk18, 24); + SaveIntegerBits(&backup, &pokemon2->currExp, 24); sub_8094184(&backup, &pokemon2->moves); SaveItemSlot(&backup, &pokemon2->itemSlot); sub_809449C(&backup, &pokemon2->unk44); sub_809449C(&backup, &pokemon2->unk48); SaveIntegerBits(&backup, &pokemon2->IQSkills, 24); - SaveIntegerBits(&backup, &pokemon2->unk50, 4); + SaveIntegerBits(&backup, &pokemon2->tacticIndex, 4); sub_808F448(&backup, &pokemon2->unk54); SaveIntegerBits(&backup, &pokemon2->name, 80); } @@ -864,7 +864,7 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) else { pokemon2->isTeamLeader = FALSE; } - RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7); + RestoreIntegerBits(&backup, &pokemon2->level, 7); RestoreDungeonLocation(&backup, &pokemon2->dungeonLocation); RestoreIntegerBits(&backup, &pokemon2->IQ, 10); @@ -877,13 +877,13 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) RestoreIntegerBits(&backup, &pokemon2->offense.att[1], 8); RestoreIntegerBits(&backup, &pokemon2->offense.def[0], 8); RestoreIntegerBits(&backup, &pokemon2->offense.def[1], 8); - RestoreIntegerBits(&backup, &pokemon2->unk18, 24); + RestoreIntegerBits(&backup, &pokemon2->currExp, 24); sub_80941FC(&backup, &pokemon2->moves); RestoreItemSlot(&backup, &pokemon2->itemSlot); sub_809447C(&backup, &pokemon2->unk44); sub_809447C(&backup, &pokemon2->unk48); RestoreIntegerBits(&backup, &pokemon2->IQSkills, 24); - RestoreIntegerBits(&backup, &pokemon2->unk50, 4); + RestoreIntegerBits(&backup, &pokemon2->tacticIndex, 4); sub_808F428(&backup, &pokemon2->unk54); RestoreIntegerBits(&backup, &pokemon2->name, 80); } @@ -893,12 +893,12 @@ s32 RestorePokemonStruct2(u8* a1, s32 size) void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC) { - RestoreIntegerBits(a1, &unkC->unk0, 7); + RestoreIntegerBits(a1, &unkC->level, 7); } void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC) { - SaveIntegerBits(a1, &unkC->unk0, 7); + SaveIntegerBits(a1, &unkC->level, 7); } void sub_808F428(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2) @@ -969,7 +969,7 @@ void sub_808F468(struct PokemonStruct *param_1, struct EvolveStatus *evolveStatu } if (evolveConditions.preEvolution.evolveType == EVOLVE_TYPE_LEVEL) { if ((evolveStatus->evolutionConditionStatus & EVOLUTION_GOOD)) continue; - if (param_1->unkHasNextStage < evolveConditions.evolutionRequirements.mainRequirement) { + if (param_1->level < evolveConditions.evolutionRequirements.mainRequirement) { evolveStatus->evolutionConditionStatus |= EVOLUTION_LACK_LEVEL; evolFlag = TRUE; } diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 7f30686c2..597215a65 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -524,7 +524,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po u32 somestruct2_80943A0; a1->unk0 = pokemon->unk0; - a1->unkHasNextStage = pokemon->unkHasNextStage; + a1->level = pokemon->level; a1->IQ = pokemon->IQ; a1->IQSkills = pokemon->IQSkills; sub_808E6F4(&a1->unk54); @@ -532,7 +532,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po a1->isTeamLeader = pokemon->isTeamLeader; a1->unkA = a3; a1->speciesNum = pokemon->speciesNum; - a1->unk50 = pokemon->unk24; + a1->tacticIndex = pokemon->tacticIndex; a1->unk12 = pokemon->pokeHP; a1->unk10 = pokemon->pokeHP; @@ -541,7 +541,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct Po a1->offense.def[i] = pokemon->offense.def[i]; } - a1->unk18 = pokemon->unk1C; + a1->currExp = pokemon->currExp; CopyAndResetMoves(&a1->moves, &pokemon->moves); for (i = 0; i < POKEMON_NAME_LENGTH; i++) { @@ -578,13 +578,13 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct s32 i; pokemon->unk0 = a2->unk0; - pokemon->unkHasNextStage = a2->unkHasNextStage; + pokemon->level = a2->level; pokemon->IQ = a2->IQ; pokemon->IQSkills = a2->IQSkills; pokemon->dungeonLocation = a2->dungeonLocation; pokemon->isTeamLeader = a2->isTeamLeader; pokemon->speciesNum = a2->speciesNum; - pokemon->unk24 = a2->unk50; + pokemon->tacticIndex = a2->tacticIndex; pokemon->pokeHP = a2->unk12; for (i = 0; i < 2; i++) { @@ -592,7 +592,7 @@ void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct pokemon->offense.def[i] = a2->offense.def[i]; } - pokemon->unk1C = a2->unk18; + pokemon->currExp = a2->currExp; CopyBareMoveData(pokemon->moves, &a2->moves); for (i = 0; i < POKEMON_NAME_LENGTH; i++) { @@ -771,7 +771,7 @@ s32 sub_808E218(struct unkStruct_808E218_arg* a1, struct PokemonStruct* pokemon) ptr = DecompressMoveID(ptr, &result); value = *ptr++; - if (value > evolve_sequence[i].unkHasNextStage) { + if (value > evolve_sequence[i].level) { break; } @@ -815,14 +815,14 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) s32 i; a2[0].specesNum = pokemon->speciesNum; - a2[0].unkHasNextStage = pokemon->unkHasNextStage; + a2[0].level = pokemon->level; count = 1; species = pokemon->speciesNum; i = 0; for (; i < 2; i++) { - if (!pokemon->unkC[i].unk0) { + if (!pokemon->unkC[i].level) { break; } species = GetPokemonEvolveFrom(species); @@ -830,7 +830,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) break; } a2[1 + i].speciesNum = species; - a2[1 + i].unkHasNextStage = pokemon->unkC[i].unk0; + a2[1 + i].level = pokemon->unkC[i].level; // wrong increment order: count++; } @@ -843,7 +843,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) struct unkPokeSubStruct_C* has_next_stage; a2[0].speciesNum = pokemon->speciesNum; - a2[0].unkHasNextStage = pokemon->unkHasNextStage; + a2[0].level = pokemon->level; count = 1; species = pokemon->speciesNum; @@ -852,7 +852,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) stage = &a2[1]; for (; i < 2; i++) { - if (!has_next_stage->unk0) { + if (!has_next_stage->level) { break; } species = GetPokemonEvolveFrom(species); @@ -860,7 +860,7 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2) break; } stage->speciesNum = species; - stage->unkHasNextStage = has_next_stage->unk0; + stage->level = has_next_stage->level; stage++; count++; has_next_stage++;