diff options
author | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-08-12 01:26:29 -0400 |
---|---|---|
committer | ProjectRevoTPP <projectrevotpp@hotmail.com> | 2017-08-12 01:26:29 -0400 |
commit | 1a8fe435e7deabf06029c8e50201136518e3af73 (patch) | |
tree | 9746f2f4f4901e81496465da485d0f5c8a647586 /src/pokemon_size_record.c | |
parent | bb0cad7c072703f5a540e8c22c8e137267331f4d (diff) |
split out src/ directory into categorized subdirectories.
Diffstat (limited to 'src/pokemon_size_record.c')
-rw-r--r-- | src/pokemon_size_record.c | 217 |
1 files changed, 0 insertions, 217 deletions
diff --git a/src/pokemon_size_record.c b/src/pokemon_size_record.c deleted file mode 100644 index f2222bd3b..000000000 --- a/src/pokemon_size_record.c +++ /dev/null @@ -1,217 +0,0 @@ -#include "global.h" -#include "pokemon_size_record.h" -#include "data2.h" -#include "event_data.h" -#include "pokedex.h" -#include "species.h" -#include "string_util.h" -#include "strings2.h" -#include "text.h" - -struct UnknownStruct -{ - u16 unk0; - u8 unk2; - u16 unk4; -}; - -extern u16 gScriptResult; - -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) -{ - // UB: Too few arguments for function 'GetMonData' - u16 personality = GetMonData(pkmn, MON_DATA_PERSONALITY); - u16 hpIV = GetMonData(pkmn, MON_DATA_HP_IV) & 0xF; - u16 attackIV = GetMonData(pkmn, MON_DATA_ATK_IV) & 0xF; - u16 defenseIV = GetMonData(pkmn, MON_DATA_DEF_IV) & 0xF; - u16 speedIV = GetMonData(pkmn, MON_DATA_SPD_IV) & 0xF; - u16 spAtkIV = GetMonData(pkmn, MON_DATA_SPATK_IV) & 0xF; - 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++) - { - if (a < sBigMonSizeTable[i].unk4) - return i - 1; - } - return i; -} - -static u32 GetMonSize(u16 species, u16 b) -{ - u64 unk2; - u64 unk4; - u64 unk0; - u32 height; - u32 var; - - height = GetPokedexHeightWeight(SpeciesToNationalPokedexNum(species), 0); - var = TranslateBigMonSizeTableIndex(b); - unk0 = sBigMonSizeTable[var].unk0; - unk2 = sBigMonSizeTable[var].unk2; - unk4 = sBigMonSizeTable[var].unk4; - unk0 += (b - unk4) / unk2; - return height * unk0 / 10; -} - -static void FormatMonSizeRecord(u8 *string, u32 size) -{ -#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) - { - 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) - { - return 1; - } - else - { - u32 oldSize; - u32 newSize; - u16 sizeParams; - - *(&sizeParams) = GetMonSizeHash(pkmn); - newSize = GetMonSize(species, sizeParams); - oldSize = GetMonSize(species, *sizeRecord); - FormatMonSizeRecord(gStringVar2, newSize); - if (newSize <= oldSize) - { - return 2; - } - else - { - *sizeRecord = sizeParams; - return 3; - } - } - } -} - -//Stores species name in gStringVar1, trainer's name in gStringVar2, and size in gStringVar3 -static void GetMonSizeRecordInfo(u16 species, u16 *sizeRecord) -{ - u32 size = GetMonSize(species, *sizeRecord); - - FormatMonSizeRecord(gStringVar3, size); - StringCopy(gStringVar1, gSpeciesNames[species]); - if (*sizeRecord == 0x8100) - StringCopy(gStringVar2, gOtherText_Marco); - else - StringCopy(gStringVar2, gSaveBlock2.playerName); -} - -void InitShroomishSizeRecord(void) -{ - VarSet(VAR_SHROOMISH_SIZE_RECORD, 0x8100); -} - -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); -} - -void InitBarboachSizeRecord(void) -{ - VarSet(VAR_BARBOACH_SIZE_RECORD, 0x8100); -} - -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; - bool32 gotRibbon = FALSE; - u8 data = 1; - u8 arr[] = { 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E }; - - if (index < 11 && ribbonId < 65) - { - gSaveBlock1.giftRibbons[index] = ribbonId; - 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) - { - SetMonData(pkmn, arr[index], &data); - gotRibbon = TRUE; - } - } - if (gotRibbon) - FlagSet(SYS_RIBBON_GET); - } -} |