Store mutation as mutation id instead of berry id

This commit is contained in:
Bassoonian 2023-12-05 20:07:00 +01:00
parent ddcd0dbb78
commit e4fd7845ee
2 changed files with 10 additions and 8 deletions

View file

@ -82,7 +82,7 @@ struct BerryTree
u8 watered4:1; u8 watered4:1;
u16 moistureLevel:7; u16 moistureLevel:7;
u16 moistureClock:6; u16 moistureClock:6;
u16 mutationC:3; u16 padding:3;
}; };
#endif // GUARD_GLOBAL_BERRY_H #endif // GUARD_GLOBAL_BERRY_H

View file

@ -2083,6 +2083,7 @@ static const u8 sBerryMutations[][3] = {
{ITEM_TO_BERRY(ITEM_KELPSY_BERRY), ITEM_TO_BERRY(ITEM_WACAN_BERRY), ITEM_TO_BERRY(ITEM_APICOT_BERRY)}, {ITEM_TO_BERRY(ITEM_KELPSY_BERRY), ITEM_TO_BERRY(ITEM_WACAN_BERRY), ITEM_TO_BERRY(ITEM_APICOT_BERRY)},
{ITEM_TO_BERRY(ITEM_GANLON_BERRY), ITEM_TO_BERRY(ITEM_LIECHI_BERRY), ITEM_TO_BERRY(ITEM_KEE_BERRY)}, {ITEM_TO_BERRY(ITEM_GANLON_BERRY), ITEM_TO_BERRY(ITEM_LIECHI_BERRY), ITEM_TO_BERRY(ITEM_KEE_BERRY)},
{ITEM_TO_BERRY(ITEM_SALAC_BERRY), ITEM_TO_BERRY(ITEM_PETAYA_BERRY), ITEM_TO_BERRY(ITEM_MARANGA_BERRY)}, {ITEM_TO_BERRY(ITEM_SALAC_BERRY), ITEM_TO_BERRY(ITEM_PETAYA_BERRY), ITEM_TO_BERRY(ITEM_MARANGA_BERRY)},
// Up to one more Mutation can be added here for a total of 15 (only 4 bits are allocated)
}; };
static u8 GetMutationOutcome(u8 berry1, u8 berry2) static u8 GetMutationOutcome(u8 berry1, u8 berry2)
@ -2092,7 +2093,7 @@ static u8 GetMutationOutcome(u8 berry1, u8 berry2)
{ {
if ((sBerryMutations[i][0] == berry1 && sBerryMutations[i][1] == berry2) if ((sBerryMutations[i][0] == berry1 && sBerryMutations[i][1] == berry2)
||(sBerryMutations[i][0] == berry2 && sBerryMutations[i][1] == berry1)) ||(sBerryMutations[i][0] == berry2 && sBerryMutations[i][1] == berry1))
return sBerryMutations[i][2]; return (i + 1);
} }
return 0; return 0;
} }
@ -2138,8 +2139,7 @@ static u8 TryForMutation(u8 berryTreeId, u8 berry)
struct TreeMutationBitfield { struct TreeMutationBitfield {
u8 a: 2; u8 a: 2;
u8 b: 2; u8 b: 2;
u8 c: 3; u8 unused: 4;
u8 unused: 1;
}; };
union TreeMutation { union TreeMutation {
@ -2149,14 +2149,17 @@ union TreeMutation {
static u8 GetTreeMutationValue(u8 id) static u8 GetTreeMutationValue(u8 id)
{ {
#if OW_BERRY_MUTATIONS
struct BerryTree *tree = GetBerryTreeInfo(id); struct BerryTree *tree = GetBerryTreeInfo(id);
union TreeMutation myMutation; union TreeMutation myMutation;
if (!OW_BERRY_MUTATIONS || tree->stopGrowth) // Pre-generated trees shouldn't have mutations if (tree->stopGrowth) // Pre-generated trees shouldn't have mutations
return 0; return 0;
myMutation.asField.a = tree->mutationA; myMutation.asField.a = tree->mutationA;
myMutation.asField.b = tree->mutationB; myMutation.asField.b = tree->mutationB;
myMutation.asField.c = tree->mutationC; return sBerryMutations[myMutation.value - 1][2];
return myMutation.value; #else
return 0;
#endif
} }
static void SetTreeMutations(u8 id, u8 berry) static void SetTreeMutations(u8 id, u8 berry)
@ -2168,7 +2171,6 @@ static void SetTreeMutations(u8 id, u8 berry)
myMutation.value = TryForMutation(id, berry); myMutation.value = TryForMutation(id, berry);
tree->mutationA = myMutation.asField.a; tree->mutationA = myMutation.asField.a;
tree->mutationB = myMutation.asField.b; tree->mutationB = myMutation.asField.b;
tree->mutationC = myMutation.asField.c;
#endif #endif
} }