summaryrefslogtreecommitdiff
path: root/src/pokemon_size_record.c
diff options
context:
space:
mode:
authorJaceCearK1 <JaceCearK1@users.noreply.github.com>2017-07-01 21:04:18 +0200
committerGitHub <noreply@github.com>2017-07-01 21:04:18 +0200
commit0dd804a99e5455a0eac8ff6ed87d9de16c7380b7 (patch)
tree7b3567978b63ee6548a7b945e075ea8ba37bef51 /src/pokemon_size_record.c
parentf1344efd2aff92292f58f7323bd9297a38fe9b02 (diff)
parent8d82578d3a101b06f9d2ced31738021007c4e533 (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.c121
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);
}
}