Friendship in Stardew Valley is measured by points. The more points you have with villagers, the better your relationship with them is. Villagers with better relationships will send you gifts in the mail, talk friendlier to you, and even give you recipes.
Above is a screenshot of the friendship menu from the game. Instead of seeing points, the player sees hearts. Each heart represents 250 points. Any remaining points will not partially fill a heart, so it is hard to tell in-game how many points a relationship with a villager has.
It is also worth noting that number of maximum hearts vary depending on the villager.
If the villager is not romanceable, then they have 10 hearts (or 2500 points).
If the villager is romanceable, then they start with 8 hearts (or 2000 points). This expands to 10 (or 2500 points) and eventually to 14 (or 3500 points) hearts if the player chooses to romance that villager.
Regardless of the number maximum hearts, the method of increasing friendships is the same for all villagers.
Talking to a villager (+20 points, or +10 points if the villager is in the middle of a special animation. Only once per day)
Completing an item delivery quest (+150 points)
Giving loved/liked/neutral gifts (see Gift-Giving)
Decay over time (see Decay)
Giving disliked/hated gifts (see Gift-Giving)
Hitting the villager with a slingshot (-30 points)
Rummaging through a trashcan with a villager nearby (-25 points)
Everyday, friendship with villagers decays. This decay is determined by the level of friendship. Also depending on this level, friendship will stop decaying when all hearts are full.
Relationship Type | Decay Rate | When Decay Stops |
---|---|---|
Not romanceable | -2 points / day | 10 hearts (or 2500 points) |
Romanceable, pre-bouquet | -2 points / day | 8 hearts (or 2000 points) |
Romanceable, post-bouquet | -10 points / day | 10 hearts (or 2500 points) |
Romanceable, married | -20 points / day | Never |
You can give gifts to villagers to increase or decrease friendship, how much so is determined by the gift type and the quality of the gift. The quality of the gift only affects liked and loved gifts, while neutral, disliked, and hated gifts are just their gift worth. Gifts can be given to villagers once per day and up to two gifts per week. Additionally, if maximum gifts were given in one week, then the friendship will receive a bonus of +10 points at the end of the week. Each villager has their own set of loved, liked, neutral, disliked, and hated gifts, which the wiki lists out for each.
Gift Type | Points |
---|---|
Loved | +80 |
Liked | +45 |
Neutral | +20 |
Disliked | -20 |
Hated | -40 |
Quality | Multiplier |
---|---|
Normal | x1 |
Silver | x1.1 |
Gold | x1.25 |
Iridium | x1.5 |
There are two events that affect friendship levels: the Feast of the Winter Star and birthdays. A gift given on the Feast of the Winter Star has a multiplier of x5. A gift given on a villager's birthday has a multiplier of x8. These multipliers will enlarge the point value of the given gift, no matter if it is an increase or decrease in overall friendship.
Relationship type:
Talk times per week
Give quality gifts each week
Timeout after days
No Graph Data
Time (Days) | Points |
---|
I decided to pick a situation to model for this project after viewing several different graphs using the algorithm I created. I am modelling talking to a non-romanceable villager once a day for the first 5 days in each week. The goal is to get the villager up to 10 hearts (or 2500 points), so the friendship doesn't decay anymore. According to my calculations, this would take 204 in-game days, or 1 year and 3.286 seasons.
After lots of adjusting, I reached this equation because:
sin(x)
Knew it needed "stairs"
* (2 / 7)
Knew the period needed to be a week, so 7 days
+ 12.285x
Knew it needed some linear growth
(x - 2.5)
Knew it needed a horizontal shift
+ 15
Knew it needed a vertical shift
18 *
Knew sin(x) needed a multiplier a value
p(x) calculates the total points in the relationship for the xth day since first talking to the villager.
r(x) calculates the rate of change of the total points in the relationship for the xth day since first talking to the villager.
a(x) calculates the acceleration of the total points in the relationship for the xth day since first talking to the villager.
The integral, P(x) doesn't really mean anything in the context of this problem, as the total number of points given by p(x) is really the only thing needed to compute the friendship in-game.
On the interval [0, 7] the derivative of the continuous function p(x), r(x), equals 0 at the x-values of 5.212 and 6.788. These correspond to the critical points (5.212, 90.726) and (6.788, 86.694).
On the interval [0, 7] the relative maximum is (5.212, 90.726). This maximum corresponds to the 5th day in the week, which represents the last day in the given week that the player talks to the villager. The relative minimums are (6.788, 86.694) and (0, 0.927). These minimums both represent the 7th day of the week, which is the last day in the given week that the friendship is decaying from the player not talking to the villager.
On the interval [0, 7] the second derivative of the continuous function p(x), a(x), equals 0 at the x-values of 2.5 and 6. This means that the inflection points are at (2.5, 45.712) and (6, 88.71).
Looking at the interval [0, 7], the inflection point x-values can be used to find the concavity of the function p(x).
Interval | [0, 2.5] | [2.5, 6] | [6, 7] |
---|---|---|---|
Sign of a(x) | + | - | + |
Concavity of p(x) | up | down | up |
X-intercept at (-2.684, 0)
This x-intercept is outside of the domain of the function p(x), as you can't have negative time.
Y-intercept at (0, 0.927)
This y-intercept is very close to the first collected data point, (0, 0), only being about a point off. The first data point is at zero because no time has passed, so no actions were taken at that time, not even decay.
I choose to change the linear growth parameter, as in the 12.285x. I changed this to 20x.
This made the graph increase faster than the original p(x). This change represents giving a greater point value to talking. It is also worth noting that the friendship doesn't decay with this new parameter, which adds to the graph increasing faster than the original. This can also be seen in the first derivative of the new function, where now there is no negative rate of change to be found. This means that there are no minimum and maximum extrema, as the first derivative doesn't cross the x-axis. The second derivative is the same with or without the parameter change, as the parameter in question is absent from both. This also means that the inflection points are spread out across the same x-values as before. The y-intercept is the same as before. The x-intercept is (-0.0988, 0), which is closer to (0, 0), but still out of the domain.