diff options
author | YamaArashi <shadow962@live.com> | 2016-09-10 01:59:10 -0700 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2016-09-10 01:59:10 -0700 |
commit | 19bffecc4deb401aa51add3b95163b72686f40ee (patch) | |
tree | be5ff81cfaeb53b8c386147877fef8ceeb2ec283 /src | |
parent | 69ca60ca91e3cf0d3dc323bf30bb7d79c77464d8 (diff) |
decompile more pokemon functions
Diffstat (limited to 'src')
-rw-r--r-- | src/main_menu.c | 4 | ||||
-rw-r--r-- | src/pokemon_1.c | 7 | ||||
-rw-r--r-- | src/pokemon_2.c | 65 |
3 files changed, 71 insertions, 5 deletions
diff --git a/src/main_menu.c b/src/main_menu.c index 559bf5a0a..692267c64 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -8,6 +8,7 @@ #include "palette.h" #include "string_util.h" #include "species.h" +#include "pokemon.h" extern u8 MenuUpdateWindowText(void); extern void MenuPrint(u8 *, u8, u8); @@ -41,7 +42,6 @@ void CB2_MainMenu(void); void VBlankCB_MainMenu(void); void DecompressPicFromTable_2(const struct SpriteSheet *, u8, u8, void *, void *, u32); void LoadCompressedObjectPalette(const struct SpritePalette *); -void gpu_pal_obj_decompress_and_apply(u16, u8); u8 AddNewGameBirchObject(u8, u8, u8); u8 sub_80859BC(u8, u16, u16, u8, void *); void MenuDrawTextWindow(u8 a, u8 b, u8 c, u8 d); @@ -1426,7 +1426,7 @@ u8 CreateAzurillSprite(u8 a1, u8 a2) gUnknown_081FAF4C[1], SPECIES_AZURILL); LoadCompressedObjectPalette(&gMonPaletteTable[SPECIES_AZURILL]); - gpu_pal_obj_decompress_and_apply(SPECIES_AZURILL, 1); + GetMonSpriteTemplate_803C56C(SPECIES_AZURILL, 1); return CreateSprite(&gUnknown_02024E8C, a1, a2, 0); } diff --git a/src/pokemon_1.c b/src/pokemon_1.c index 02ae1533f..566db2e68 100644 --- a/src/pokemon_1.c +++ b/src/pokemon_1.c @@ -4,6 +4,7 @@ #include "pokemon.h" #include "species.h" #include "main.h" +#include "sprite.h" extern u8 sav1_map_get_name(); @@ -203,7 +204,7 @@ void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, actualLetter = ((((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | personality & 0x3) % 28); } while (nature != GetNatureFromPersonality(personality) - || gender != pokemon_species_get_gender_info(species, personality) + || gender != GetGenderFromSpeciesAndPersonality(species, personality) || actualLetter != unownLetter - 1); } else @@ -214,7 +215,7 @@ void CreateMonWithGenderNatureLetter(struct Pokemon *mon, u16 species, u8 level, personality = (u16)r | (Random() << 16); } while (nature != GetNatureFromPersonality(personality) - || gender != pokemon_species_get_gender_info(species, personality)); + || gender != GetGenderFromSpeciesAndPersonality(species, personality)); } CreateMon(mon, species, level, fixedIV, 1, personality, 0, 0); @@ -234,7 +235,7 @@ void CreateMaleMon(struct Pokemon *mon, u16 species, u8 level) r2 = Random(); personality = (u16)r2 | (Random() << 16); } - while (pokemon_species_get_gender_info(species, personality) != MALE); + while (GetGenderFromSpeciesAndPersonality(species, personality) != MON_MALE); CreateMon(mon, species, level, 32, 1, personality, 1, otId); } diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 9f9fc3911..647808d14 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -4,10 +4,75 @@ #include "pokemon.h" #include "species.h" #include "main.h" +#include "sprite.h" + +extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gBadEggNickname[]; extern u8 gEggNickname[]; extern u32 gBitTable[]; +extern struct BaseStats gBaseStats[]; +extern struct SpriteTemplate gSpriteTemplate_8208288[]; +extern union AmimCmd *gSpriteAnimTable_81E7C64[]; +extern union AnimCmd **gUnknown_081EC2A4[]; +extern union AnimCmd **gUnknown_081ECACC[]; + +u8 GetMonGender(struct Pokemon *mon) +{ + return GetBoxMonGender(&mon->box); +} + +u8 GetBoxMonGender(struct BoxPokemon *boxMon) +{ + u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL); + u32 personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY, NULL); + + switch (gBaseStats[species].genderRatio) + { + case MON_MALE: + case MON_FEMALE: + case MON_GENDERLESS: + return gBaseStats[species].genderRatio; + } + + if (gBaseStats[species].genderRatio > (personality & 0xFF)) + return MON_FEMALE; + else + return MON_MALE; +} + +u8 GetGenderFromSpeciesAndPersonality(u16 species, u32 personality) +{ + switch (gBaseStats[species].genderRatio) + { + case MON_MALE: + case MON_FEMALE: + case MON_GENDERLESS: + return gBaseStats[species].genderRatio; + } + + if (gBaseStats[species].genderRatio > (personality & 0xFF)) + return MON_FEMALE; + else + return MON_MALE; +} + +void GetMonSpriteTemplate_803C56C(u16 species, u8 a2) +{ + gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; + gUnknown_02024E8C.paletteTag = species; + gUnknown_02024E8C.anims = (union AnimCmd **)gSpriteAnimTable_81E7C64; +} + +void GetMonSpriteTemplate_803C5A0(u16 species, u8 a2) +{ + gUnknown_02024E8C = gSpriteTemplate_8208288[a2]; + gUnknown_02024E8C.paletteTag = species; + if (a2 == 0 || a2 == 2) + gUnknown_02024E8C.anims = gUnknown_081ECACC[species]; + else + gUnknown_02024E8C.anims = gUnknown_081EC2A4[species]; +} void EncryptBoxMon(struct BoxPokemon *boxMon) { |