diff options
author | JaceCearK1 <JaceCearK1@users.noreply.github.com> | 2017-07-01 21:04:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-01 21:04:18 +0200 |
commit | 0dd804a99e5455a0eac8ff6ed87d9de16c7380b7 (patch) | |
tree | 7b3567978b63ee6548a7b945e075ea8ba37bef51 /src/pokemon_size_record.c | |
parent | f1344efd2aff92292f58f7323bd9297a38fe9b02 (diff) | |
parent | 8d82578d3a101b06f9d2ced31738021007c4e533 (diff) |
Merge pull request #1 from pret/master
Update fork to match main fork.
Diffstat (limited to 'src/pokemon_size_record.c')
-rw-r--r-- | src/pokemon_size_record.c | 121 |
1 files changed, 72 insertions, 49 deletions
diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c index 21f386f2d..f2222bd3b 100644 --- a/src/pokemon_size_record.c +++ b/src/pokemon_size_record.c @@ -1,12 +1,12 @@ #include "global.h" #include "pokemon_size_record.h" -#include "string_util.h" +#include "data2.h" +#include "event_data.h" +#include "pokedex.h" #include "species.h" -#include "flag.h" -#include "var.h" - -extern u16 SpeciesToNationalPokedexNum(u16); -extern u16 sub_8090D54(u16, u8); +#include "string_util.h" +#include "strings2.h" +#include "text.h" struct UnknownStruct { @@ -15,15 +15,28 @@ struct UnknownStruct u16 unk4; }; -extern struct UnknownStruct gUnknown_083D180C[]; -extern u8 gOtherText_DecimalPoint[]; -extern u8 gOtherText_Marco[]; extern u16 gScriptResult; -extern u8 gSpeciesNames[][11]; -extern u8 gUnknown_083D188E[]; -#define VAR_SHROOMISH_SIZE_RECORD 0x4047 -#define VAR_BARBOACH_SIZE_RECORD 0x404F +static const struct UnknownStruct sBigMonSizeTable[] = +{ + { 290, 1, 0 }, + { 300, 1, 10 }, + { 400, 2, 110 }, + { 500, 4, 310 }, + { 600, 20, 710 }, + { 700, 50, 2710 }, + { 800, 100, 7710 }, + { 900, 150, 17710 }, + { 1000, 150, 32710 }, + { 1100, 100, -17826 }, + { 1200, 50, -7826 }, + { 1300, 20, -2826 }, + { 1400, 5, -826 }, + { 1500, 2, -326 }, + { 1600, 1, -126 }, + { 1700, 1, -26 }, +}; + #define CM_PER_INCH 2.54 static u32 GetMonSizeHash(struct Pokemon *pkmn) @@ -38,17 +51,17 @@ static u32 GetMonSizeHash(struct Pokemon *pkmn) u16 spDefIV = GetMonData(pkmn, MON_DATA_SPDEF_IV) & 0xF; u32 hibyte = ((attackIV ^ defenseIV) * hpIV) ^ (personality & 0xFF); u32 lobyte = ((spAtkIV ^ spDefIV) * speedIV) ^ (personality >> 8); - + return (hibyte << 8) + lobyte; } static u8 TranslateBigMonSizeTableIndex(u16 a) { u8 i; - - for(i = 1; i < 15; i++) + + for (i = 1; i < 15; i++) { - if(a < gUnknown_083D180C[i].unk4) + if (a < sBigMonSizeTable[i].unk4) return i - 1; } return i; @@ -59,54 +72,65 @@ static u32 GetMonSize(u16 species, u16 b) u64 unk2; u64 unk4; u64 unk0; - u32 r7; + u32 height; u32 var; - - r7 = sub_8090D54(SpeciesToNationalPokedexNum(species), 0); + + height = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(species), 0); var = TranslateBigMonSizeTableIndex(b); - unk0 = gUnknown_083D180C[var].unk0; - unk2 = gUnknown_083D180C[var].unk2; - unk4 = gUnknown_083D180C[var].unk4; + unk0 = sBigMonSizeTable[var].unk0; + unk2 = sBigMonSizeTable[var].unk2; + unk4 = sBigMonSizeTable[var].unk4; unk0 += (b - unk4) / unk2; - return r7 * unk0 / 10; + return height * unk0 / 10; } static void FormatMonSizeRecord(u8 *string, u32 size) { - u8 decimalPoint[2]; - - memcpy(decimalPoint, gOtherText_DecimalPoint, 2); +#if ENGLISH + u8 decimalPoint[] = _("."); +#elif GERMAN + u8 decimalPoint[] = _(","); +#endif + +#ifdef UNITS_IMPERIAL //Convert size from centimeters to inches size = (double)(size * 10) / (CM_PER_INCH * 10); +#endif + string = ConvertIntToDecimalStringN(string, size / 10, 0, 8); string = StringAppend(string, decimalPoint); ConvertIntToDecimalStringN(string, size % 10, 0, 1); } static u8 CompareMonSize(u16 species, u16 *sizeRecord) -{ - if(gScriptResult == 0xFF) +{ + if (gScriptResult == 0xFF) + { return 0; + } else { struct Pokemon *pkmn = &gPlayerParty[gScriptResult]; - + // UB: Too few arguments for function 'GetMonData' - if(GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species) + if (GetMonData(pkmn, MON_DATA_IS_EGG) == TRUE || GetMonData(pkmn, MON_DATA_SPECIES) != species) + { return 1; + } else { u32 oldSize; u32 newSize; u16 sizeParams; - u16 *ptr = &sizeParams; //Why the pointer? - - *ptr = GetMonSizeHash(pkmn); + + *(&sizeParams) = GetMonSizeHash(pkmn); newSize = GetMonSize(species, sizeParams); oldSize = GetMonSize(species, *sizeRecord); FormatMonSizeRecord(gStringVar2, newSize); - if(newSize <= oldSize) + if (newSize <= oldSize) + { return 2; + } else { *sizeRecord = sizeParams; @@ -120,10 +144,10 @@ static u8 CompareMonSize(u16 species, u16 *sizeRecord) static void GetMonSizeRecordInfo(u16 species, u16 *sizeRecord) { u32 size = GetMonSize(species, *sizeRecord); - + FormatMonSizeRecord(gStringVar3, size); StringCopy(gStringVar1, gSpeciesNames[species]); - if(*sizeRecord == 0x8100) + if (*sizeRecord == 0x8100) StringCopy(gStringVar2, gOtherText_Marco); else StringCopy(gStringVar2, gSaveBlock2.playerName); @@ -137,14 +161,14 @@ void InitShroomishSizeRecord(void) void GetShroomishSizeRecordInfo(void) { u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD); - + GetMonSizeRecordInfo(SPECIES_SHROOMISH, sizeRecord); } void CompareShroomishSize(void) { u16 *sizeRecord = GetVarPointer(VAR_SHROOMISH_SIZE_RECORD); - + gScriptResult = CompareMonSize(SPECIES_SHROOMISH, sizeRecord); } @@ -156,39 +180,38 @@ void InitBarboachSizeRecord(void) void GetBarboachSizeRecordInfo(void) { u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD); - + GetMonSizeRecordInfo(SPECIES_BARBOACH, sizeRecord); } void CompareBarboachSize(void) { u16 *sizeRecord = GetVarPointer(VAR_BARBOACH_SIZE_RECORD); - + gScriptResult = CompareMonSize(SPECIES_BARBOACH, sizeRecord); } void GiveGiftRibbonToParty(u8 index, u8 ribbonId) { s32 i; - u8 arr[7]; bool32 gotRibbon = FALSE; u8 data = 1; - - memcpy(arr, gUnknown_083D188E, 7); - if(index < 11 && ribbonId < 65) + u8 arr[] = { 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E }; + + if (index < 11 && ribbonId < 65) { gSaveBlock1.giftRibbons[index] = ribbonId; - for(i = 0; i < 6; i++) + for (i = 0; i < 6; i++) { struct Pokemon *pkmn = &gPlayerParty[i]; - - if(GetMonData(pkmn, MON_DATA_SPECIES) != 0 && GetMonData(pkmn, MON_DATA_SANITY_BIT3) == 0) + + if (GetMonData(pkmn, MON_DATA_SPECIES) != 0 && GetMonData(pkmn, MON_DATA_SANITY_BIT3) == 0) { SetMonData(pkmn, arr[index], &data); gotRibbon = TRUE; } } - if(gotRibbon) + if (gotRibbon) FlagSet(SYS_RIBBON_GET); } } |