summaryrefslogtreecommitdiff
path: root/src/berry.c
diff options
context:
space:
mode:
authorCameron Hall <camthesaxman@users.noreply.github.com>2016-11-06 23:02:20 -0600
committerYamaArashi <YamaArashi@users.noreply.github.com>2016-11-06 21:02:20 -0800
commit7b1e836e9b48fd54a227931942d231f1c0823626 (patch)
tree7a987a7be6724b10704ac106d522ba6366671b07 /src/berry.c
parent7f5332c12025c36c90c647184a5a4b1a3433d200 (diff)
cleanup (#93)
* cleanup * cleanup
Diffstat (limited to 'src/berry.c')
-rw-r--r--src/berry.c251
1 files changed, 104 insertions, 147 deletions
diff --git a/src/berry.c b/src/berry.c
index 79e716480..e00015477 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "text.h"
#define FIRST_BERRY 0x85 // ITEM_CHERI_BERRY
#define LAST_BERRY 0xaf // ITEM_ENIGMA_BERRY
@@ -35,15 +36,11 @@ void unref_sub_80B4884(void)
// setEnigmaBerry
void sub_80B48A8(u8 *src)
{
- u8 *dest;
- struct SaveBlock1 *saveBlock;
unsigned int i;
- dest = (u8*)&gSaveBlock1.enigmaBerry;
- saveBlock = &gSaveBlock1;
+ u8 *dest = (u8*)&gSaveBlock1.enigmaBerry;
+
for (i = 0; i < sizeof(gSaveBlock1.enigmaBerry); i++)
- {
dest[i] = src[i];
- }
gSaveBlock1.enigmaBerry.berry.description1 = gSaveBlock1.enigmaBerry.description1;
gSaveBlock1.enigmaBerry.berry.description2 = gSaveBlock1.enigmaBerry.description2;
}
@@ -75,29 +72,27 @@ u32 sub_80B48F8(struct EnigmaBerry *enigmaBerry)
return checksum;
}
-int sub_80B4940(void)
+bool32 sub_80B4940(void)
{
if (!gSaveBlock1.enigmaBerry.berry.stageDuration)
- return 0;
+ return FALSE;
if (!gSaveBlock1.enigmaBerry.berry.maxYield)
- return 0;
+ return FALSE;
if (sub_80B48F8(&gSaveBlock1.enigmaBerry) != gSaveBlock1.enigmaBerry.checksum)
- return 0;
- return 1;
+ return FALSE;
+ return TRUE;
}
struct Berry *GetBerryInfo(u8 berry)
{
- if ((u8)berry == 0x2b)
- {
- if (sub_80B4940())
- return &gSaveBlock1.enigmaBerry.berry;
- }
- if ((u8)(berry - 1) > 0x2a)
+ if (berry == 0x2B && sub_80B4940())
+ return &gSaveBlock1.enigmaBerry.berry;
+ else
{
- berry = 1;
+ if (berry == 0 || berry > 0x2B)
+ berry = 1;
+ return &gBerries[berry - 1];
}
- return &gBerries[berry - 1];
}
struct BerryTree *GetBerryTreeInfo(u8 id)
@@ -105,42 +100,45 @@ struct BerryTree *GetBerryTreeInfo(u8 id)
return &gSaveBlock1.berryTrees[id];
}
-int FieldObjectInteractionWaterBerryTree(void)
+bool32 FieldObjectInteractionWaterBerryTree(void)
{
struct BerryTree *tree = GetBerryTreeInfo(FieldObjectGetBerryTreeId(gSelectedMapObject));
+
switch (tree->stage)
{
case 1:
- tree->watered1 = 1;
+ tree->watered1 = TRUE;
break;
case 2:
- tree->watered2 = 1;
+ tree->watered2 = TRUE;
break;
case 3:
- tree->watered3 = 1;
+ tree->watered3 = TRUE;
break;
case 4:
- tree->watered4 = 1;
+ tree->watered4 = TRUE;
break;
default:
- return 0;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
-int IsPlayerFacingPlantedBerryTree(void)
+bool32 IsPlayerFacingPlantedBerryTree(void)
{
- if (GetFieldObjectScriptPointerForComparison() == &BerryTreeScript)
- if (GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0)
- return 1;
- return 0;
+ if (GetFieldObjectScriptPointerForComparison() == &BerryTreeScript
+ && GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0)
+ return TRUE;
+ else
+ return FALSE;
}
u8 WaterBerryTree(void)
{
if (GetFieldObjectScriptPointerForComparison() != &BerryTreeScript)
return 0;
- return FieldObjectInteractionWaterBerryTree();
+ else
+ return FieldObjectInteractionWaterBerryTree();
}
void sub_80B4A90(void)
@@ -148,20 +146,19 @@ void sub_80B4A90(void)
int i;
struct SaveBlock1 *saveBlock1 = &gSaveBlock1;
struct BerryTree berryTree = gUnknown_083CD780;
- for (i = 127; i >= 0; i--)
- {
+
+ for (i = 0; i < 128; i++)
saveBlock1->berryTrees[i] = berryTree;
- }
}
-int BerryTreeGrow(struct BerryTree *tree)
+bool32 BerryTreeGrow(struct BerryTree *tree)
{
if (tree->growthSparkle)
- return 0;
+ return FALSE;
switch (tree->stage)
{
case 0:
- return 0;
+ return FALSE;
case 4:
tree->berryYield = CalcBerryYield(tree);
case 1:
@@ -180,75 +177,51 @@ int BerryTreeGrow(struct BerryTree *tree)
*tree = gUnknown_083CD780;
break;
}
- return 1;
+ return TRUE;
}
void BerryTreeTimeUpdate(int time)
{
int i;
struct BerryTree *tree;
- int time2;
- for (i = 0; i <= 0x7f; i++)
+
+ for (i = 0; i < 128; i++)
{
tree = &gSaveBlock1.berryTrees[i];
- if (tree->berry == 0)
- continue;
- if (tree->stage == 0)
- continue;
- if (tree->growthSparkle)
- continue;
-
- if (time >= GetStageDurationByBerryType(tree->berry) * 71)
+ if (tree->berry && tree->stage && !tree->growthSparkle)
{
- *tree = gUnknown_083CD780;
- continue;
- }
-
- time2 = time;
- if (!time2)
- continue;
-
- if (tree->secondsUntilNextStage > time2)
- {
- tree->secondsUntilNextStage -= time2;
- time2 = tree->secondsUntilNextStage;
- continue;
- }
-
- while (1)
- {
- time2 -= tree->secondsUntilNextStage;
- tree->secondsUntilNextStage = GetStageDurationByBerryType(tree->berry);
- if (BerryTreeGrow(tree))
+ if (time >= GetStageDurationByBerryType(tree->berry) * 71)
{
- if (tree->stage == 5)
- {
- tree->secondsUntilNextStage *= 4;
- }
- if (!time2)
- {
- break;
- }
+ *tree = gUnknown_083CD780;
}
else
{
- break;
- }
- if (tree->secondsUntilNextStage > time2)
- {
- tree->secondsUntilNextStage -= time2;
- time2 = tree->secondsUntilNextStage;
- break;
+ int time2 = time;
+
+ while (time2 != 0)
+ {
+ if (tree->secondsUntilNextStage > time2)
+ {
+ tree->secondsUntilNextStage -= time2;
+ break;
+ }
+ time2 -= tree->secondsUntilNextStage;
+ tree->secondsUntilNextStage = GetStageDurationByBerryType(tree->berry);
+ if (!BerryTreeGrow(tree))
+ break;
+ if (tree->stage == 5)
+ tree->secondsUntilNextStage *= 4;
+ }
}
}
}
}
-void PlantBerryTree(u8 id, u8 berry, u8 stage, u8 sparkle)
+void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle)
{
- struct BerryTree *tree;
- tree = GetBerryTreeInfo(id);
+ struct BerryTree *tree = GetBerryTreeInfo(id);
+
*tree = gUnknown_083CD780;
tree->berry = berry;
tree->secondsUntilNextStage = GetStageDurationByBerryType(berry);
@@ -258,9 +231,9 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, u8 sparkle)
tree->berryYield = CalcBerryYield(tree);
tree->secondsUntilNextStage *= 4;
}
- if (sparkle == 0)
+ if (!sparkle)
{
- tree->growthSparkle = 1;
+ tree->growthSparkle = TRUE;
}
}
@@ -282,39 +255,38 @@ u8 GetStageByBerryTreeId(u8 id)
u8 ItemIdToBerryType(u16 item)
{
u16 berry = item - FIRST_BERRY;
+
if (berry > LAST_BERRY - FIRST_BERRY)
return 1;
- return item - FIRST_BERRY + 1;
+ else
+ return item - FIRST_BERRY + 1;
}
u16 BerryTypeToItemId(u16 berry)
{
- u16 item = berry;
- item -= 1;
+ u16 item = berry - 1;
+
if (item > LAST_BERRY - FIRST_BERRY)
return FIRST_BERRY;
- item = berry;
- return item + FIRST_BERRY - 1;
+ else
+ return berry + FIRST_BERRY - 1;
}
void GetBerryNameByBerryType(u8 berry, u8 *string)
{
- struct Berry *info;
- info = GetBerryInfo(berry);
- memcpy(string, info->name, 6);
- string[6] = 0xff;
+ memcpy(string, GetBerryInfo(berry)->name, 6);
+ string[6] = EOS;
}
void ResetBerryTreeSparkleFlag(u8 id)
{
- struct BerryTree *tree;
- tree = GetBerryTreeInfo(id);
- tree->growthSparkle = 0;
+ GetBerryTreeInfo(id)->growthSparkle = 0;
}
u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
{
u8 count = 0;
+
if (tree->watered1)
count++;
if (tree->watered2)
@@ -331,33 +303,26 @@ u8 GetNumStagesWateredByBerryTreeId(u8 id)
return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id));
}
-u8 CalcBerryYieldInternal(u16 a1, u16 a2, u8 a3)
-{
- u32 v6;
- u32 v1;
- u32 v5;
- u32 v4;
- u16 random;
- u32 ret;
- v6 = a2;
- if (a3 == 0)
- return v6;
- v1 = a1 - v6;
- v5 = v1 * (a3 - 1);
- v4 = v1 * a3;
- random = Random();
- v4 -= v5;
- v4 += 1;
- v5 += random % v4;
- if ((v5 & 3) <= 1)
- {
- ret = v5 / 4;
- return ret + v6;
- }
+u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
+{
+ u32 randMin;
+ u32 randMax;
+ u32 rand;
+ u32 extraYield;
+
+ if (water == 0)
+ return min;
else
{
- ret = v5 / 4 + 1;
- return ret + v6;
+ randMin = (max - min) * (water - 1);
+ randMax = (max - min) * (water);
+ rand = randMin + Random() % (randMax - randMin + 1);
+
+ if ((rand & 3) > 1)
+ extraYield = rand / 4 + 1;
+ else
+ extraYield = rand / 4;
+ return extraYield + min;
}
}
@@ -366,6 +331,7 @@ u8 CalcBerryYield(struct BerryTree *tree)
struct Berry *berry = GetBerryInfo(tree->berry);
u8 min = berry->minYield;
u8 max = berry->maxYield;
+
return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree));
}
@@ -386,20 +352,19 @@ void FieldObjectInteractionGetBerryTreeData(void)
u8 unk;
u8 group;
u8 num;
+
id = FieldObjectGetBerryTreeId(gSelectedMapObject);
berry = GetBerryTypeByBerryTreeId(id);
ResetBerryTreeSparkleFlag(id);
unk = gScriptLastTalked;
num = gSaveBlock1.location.mapNum;
group = gSaveBlock1.location.mapGroup;
-
if (sub_8060234(unk, num, group))
- gSpecialVar_0x8004 = 0xff;
+ gSpecialVar_0x8004 = 0xFF;
else
- gSpecialVar_0x8004 = (u8)GetStageByBerryTreeId(id);
-
- gSpecialVar_0x8005 = (u8)GetNumStagesWateredByBerryTreeId(id);
- gSpecialVar_0x8006 = (u8)GetBerryCountByBerryTreeId(id);
+ gSpecialVar_0x8004 = GetStageByBerryTreeId(id);
+ gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id);
+ gSpecialVar_0x8006 = GetBerryCountByBerryTreeId(id);
GetBerryNameByBerryType(berry, gStringVar1);
}
@@ -411,30 +376,23 @@ void sub_80B4EE4(void)
void FieldObjectInteractionPlantBerryTree(void)
{
u8 berry = ItemIdToBerryType(gScriptItemId);
- PlantBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject), berry, 1, 1);
+
+ PlantBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject), berry, 1, TRUE);
FieldObjectInteractionGetBerryTreeData();
}
void FieldObjectInteractionPickBerryTree(void)
{
- u8 id;
- u8 berry;
- id = FieldObjectGetBerryTreeId(gSelectedMapObject);
- berry = GetBerryTypeByBerryTreeId(id);
+ u8 id = FieldObjectGetBerryTreeId(gSelectedMapObject);
+ u8 berry = GetBerryTypeByBerryTreeId(id);
+
gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id));
}
void FieldObjectInteractionRemoveBerryTree(void)
{
- u8 id;
- u8 unk;
- u8 group, num;
- id = FieldObjectGetBerryTreeId(gSelectedMapObject);
- RemoveBerryTree(id);
- unk = gScriptLastTalked;
- num = gSaveBlock1.location.mapNum;
- group = gSaveBlock1.location.mapGroup;
- sub_8060288(unk, num, group);
+ RemoveBerryTree(FieldObjectGetBerryTreeId(gSelectedMapObject));
+ sub_8060288(gScriptLastTalked, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
}
u8 PlayerHasBerries(void)
@@ -457,7 +415,6 @@ void ResetBerryTreeSparkleFlags(void)
top = cam_top + 3;
right = cam_left + 14;
bottom = top + 8;
-
for (i = 0; i < 16; i++)
{
if (gMapObjects[i].active && gMapObjects[i].animPattern == 12)