mirror of
https://github.com/pret/pmd-red.git
synced 2026-06-03 06:18:45 -05:00
more documentation of pokemonStruct based on other decomp func tries
This commit is contained in:
parent
23c23f5d33
commit
4f21cb26ea
|
|
@ -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)
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
122
src/pokemon.c
122
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;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user