These rates and information are all datamined from the game executable and EventFlow files.
Special thanks to @_Ninji for their scripts and tools which saved me a tremendous amount of time and energy getting everything set up!
GrowUp
?This page refers to GrowUp
a lot. This is the routine that runs right before Isabelle’s announcement. It only runs once for each time you see her announcement.
This page occasionally talks about “items that you have not catalogued,” which, unless otherwise specified, refers to item IDs for which your save file has ItemCollectBit[itemId] = 0
.
Generally speaking, clothing variants (e.g. red giant ribbon vs blue giant ribbon) have different item IDs, whereas furniture variants have the same item ID.
GrowUp
orderThe order in which GrowUp
processes various things is:
System_GrowUp::Continue
flow runsGrowUp
roll for reproduction (reproduction rolled only once per GrowUp
)GrowUp
)GrowUp
, up to 30 cap)The spawn rate for lily-of-the-valley is influenced by the cLand:FlwLilyGrowCounter
counter and the cLand:FlwLilyFirstGrow
flag.
During GrowUp
, your island evaluation is recalculated. Then,
cLand:FlwLilyGrowCounter
is incremented by 1cLand:FlwLilyGrowCounter
is set to 0Then, if cLand:FlwLilyGrowCounter
is not 0, the game rolls to spawn a lily-of-the-valley. Consequently, if you are not at 5 stars, as recalculated at the start of the day, no lily-of-the-valley can appear.
If your island has never spawned a lily-of-the-valley before, then cLand:FlwLilyFirstGrow
is 0, and you have a 50% chance to spawn a lily-of-the-valley. This rate does not change until your first lily-of-the-valley has appeared.
Once you have spawned a lily-of-the-valley, cLand:FlwLilyFirstGrow
is set to 1, and the rate each day is instead cLand:FlwLilyGrowCounter
^2 + 6%. That is,
cLand:FlwLilyGrowCounter |
Rate |
---|---|
1 | 7% |
2 | 10% |
3 | 15% |
4 | 22% |
5 | 31% |
6 | 42% |
7 | 55% |
8 | 70% |
9 | 87% |
10 | 100% |
If a lily-of-the-valley is spawned, then cLand:FlwLilyGrowCounter
is set to 0. If there are no valid spawn spaces for a lily-of-the-valley, the counter is not reset.
This is a list of conditions for a lily-of-the-valley to appear on a specific tile. It is not entirely comprehensive (there are a few obscure conditions on top which I am not sure about) but should convey the general idea of where a lily-of-the-valley may spawn.
Consider the following layout (tiles labeled A are the three adjacent tiles behind the tile labeled T):
| | | |
---+---+---+---+---
| A | A | A |
---+---+---+---+---
| B | T | B |
---+---+---+---+---
| | B | |
---+---+---+---+---
| | | |
For the tile T to be a valid spawn location for a lily-of-the-valley,
Lily-of-the-valley spawning only happens once per GrowUp
. If you do not open the game for a week, this is still only counted as one day passing for the purposes of lily-of-the-valley spawning (i.e. counter only increments once, and at most one lily-of-the-valley may appear).
Existing weeds may grow (advance in stage) and spread (new weeds appearing in an adjacent tile), and new weeds may randomly appear on your island, in that order. The moment you hit 150 weeds, all processing stops. If you do not open the game for a while, up to 20 days’ worth of missed weed processing occurs, as follows:
for (int i = 0; i < min(20, numDaysSinceLastGrowUp); ++i) {
if (numWeeds >= 150) return;
for (weed : island) {
roll_for_weed_to_grow(weed);
}
for (weed: island) {
if (roll_for_weed_to_spread(weed)) {
if (++numWeeds >= 150) return;
}
}
for (int j = 0; j < numWeedsToSpawn; ++j) {
spawn_new_weed(weed);
if (++numWeeds >= 150) return;
}
}
If multiple days have passed, tile watering information is only considered for the first day’s processing.
There is (at least as of 1.4.2) an off-by-one error when rolling for anything related to weeds, which is why the following rates are not nice multiples of 5.
Current Stage | Not Watered | Watered |
---|---|---|
1 | 21% | 51% |
2 | 6% | 11% |
3 | 0% | 0% |
Each of the three variants of Stage 1 weeds has a specific Stage 2 weed it grows into. All Stage 2 weeds grow into the same Stage 3 weed.
Current Stage | Not Watered | Watered |
---|---|---|
1 | 1% | 6% |
2 | 11% | 21% |
3 | 81% | 100% |
Adjacent tiles at the same level as the original weed are preferred, but weeds will grow up and down cliffs if no such tile is free. The type of Stage 1 weed is randomly picked with equal odds.
Number of Weeds on Island | Number of New Weeds |
---|---|
0 ~ 30 | 2 |
31 ~ 149 | 1 |
150+ | 0 |
Random weed spawns will not occur in visually-obstructed locations (criteria for visual obstruction is the same as for rock spawns). The type of Stage 1 weed is randomly picked with equal odds.
There is a cap of 6 buried fossils - any more and no new fossils will appear during GrowUp
. The fossil that the unassessed fossil will be assessed to is picked when the fossil is generated, and not changed afterwards. Up to 4 fossils will spawn each day.
Fossils will not spawn in visually-obstructed locations (criteria for visual obstruction is the same as for rock spawns).
Trees are partitioned into two groups.
A tree is permitted to grow only if:
GrowUp
First, all Group 1 trees (in random order) are processed for growth. When processed, if multiple days have elapsed since the last GrowUp
, the tree may grow up multiple stages at once.
Then, all Group 2 trees (in random order) are processed for growth. When processed, if multiple days have elapsed since the last GrowUp
, the tree may grow up multiple stages at once. The Group 2 tree is immediately converted to a Group 1 tree on growth, and may affect processing of later trees’ growth.
Type of Tree | soft wood | wood | hard wood | wood egg |
---|---|---|---|---|
Cedar | 30% | 25% | 25% | 20% |
Palm | 20% | 15% | 20% | 45% |
Hardwood* | 25% | 25% | 30% | 20% |
*including Fruit/Money/Leaf Egg trees
Type of Tree | soft wood | wood | hard wood |
---|---|---|---|
Cedar | 35% | 35% | 30% |
Palm | 35% | 30% | 35% |
Hardwood* | 30% | 35% | 35% |
*including Fruit/Money trees
During Spring, there is a 30% chance of young spring bamboo, and 70% chance of bamboo.
During other seasons, there is a 100% chance of bamboo.
Up to 5 wasp nests, 2 pieces of furniture, and 15 100-bell coins are added to your trees during GrowUp
, in that order. If you already have 3 wasp nests in your trees (e.g. because you didn’t shake them all), then only 2 new wasp nests are added.
Then, if it is the correct time of year (December 15 - January 6 for both hemispheres), random cedar trees are converted into decorated cedar trees one by one until at least half of the now-fully-grown cedar trees with no items in them, rounded up, are decorated.
The furniture placed inside a tree is determined by picking (uniformly at random) an item ID with ItemKind=Ftr
and ItemFrom in (ShopDefault, ShopMiscGoods, ShopLargeGoods, ShopLv1, ShopLv2)
.
When you shake a tree, if there is an item in the tree, or if the tree is a fruit/money tree with fruits/money on it, the item/fruits/money bags are dropped. Otherwise…
There is a 70% chance of nothing dropping, 27% chance of a tree branch dropping, and 3% chance of a pinecone (cedar tree) or acorn (other trees) dropping.
There is a 70% chance of nothing dropping, and a 30% chance of a tree branch dropping.
There is a 80% chance of nothing dropping, 7.5% chance of a red ornament dropping, 7.5% chance of a blue ornament dropping, and a 5% chance of a gold ornament dropping.
There are two types of decorated cedar trees, which are chosen randomly (50%/50%) when the cedar tree is decorated. This is entirely cosmetic and does not affect ornament rates at all.
As of 1.4.0, if a gold nugget is spawned from a rock, the cPlayer:PopDiyGoldFromStoneToday
flag is set. If any gold nugget is picked up while cPlayer:PopDiyGoldFromStoneToday
is set, the player learns the DIY for king tut’s mask.
Hit Count | Coin/Bag dropped |
---|---|
1 | 100 |
2 | 200 |
3 | 300 |
4 | 500 |
5 | 1000 |
6 | 2000 |
7 | 4000 |
8 | 8000 |
Item Name | Your Island | NMT Island |
---|---|---|
stone | 50% | 9% |
iron nugget | 34% | 50% |
clay | 15% | 40% |
gold nugget | 1% | 1% |
Item Name | Your Island | NMT Island |
---|---|---|
stone egg | 20% | 35% |
stone | 40% | 5% |
iron nugget | 29% | 35% |
clay | 10% | 24% |
gold nugget | 1% | 1% |
Item Name | Your Island | NMT Island |
---|---|---|
stone egg | 20% | 30% |
stone | 30% | 4% |
iron nugget | 34% | 50% |
clay | 15% | 15% |
gold nugget | 1% | 1% |
These rates apply for when you break a rock that you have not hit before, in which case one item is rolled and dropped, along with a guaranteed stone.
Item Name | Normal Rock | Money Rock |
---|---|---|
clay | 49% | 0% |
iron nugget | 49% | 0% |
gold nugget | 2% | 0% |
8000 bells | 0% | 100% |
This is not a comprehensive list of criteria for rock spawn locations, but it covers most cases. These criteria were datamined using version 1.4, and have not changed with version 1.5.
This section is fairly technical, and not recommended reading for people who are only interested in making a rock garden.
Special thanks to Zertolurian#9617 for helping test/verify rock spawning criteria.
For the sake of brevity, this section uses the following abbreviations:
The game allows players to move things in 0.5-tile increments. Collision data (files with pbc in their name in romfs/Models) is maintained in 0.25-tile increments - the pbc file stores row indices of ColGroundAttributeParam.bcsv rows (not UniqueIds) for each 0.25-tile.
For each 0.25-tile, the game maintains two ColGroundAttributeParam indices - one for the foreground (e.g. part of a building) and one for the background (e.g. the grass under the building). Unless otherwise stated, the ColGroundAttributeParam this section refers to is always the foreground if not Null (index 7), and background if the foreground is Null.
The following are conditions for a tile to be able to spawn a rock:
WaterCheck=0
(i.e. tile is not water).PlayerNoEntry=0
(i.e. tile can be walked over by the player).Sand=0
(i.e. tile is not beach).WaterCheck=0
(i.e. no adjacent tile is water).Height
for placed furniture whose ItemAct
has Collision = 1
, and CollisionHeight
for Fg objects (such as trees, flowers, etc.)Various objects obstruct more area than the space they take up. There are five classes of visual obstruction used internally (names not official), which are applied at 0.5-tile granularity.
The following image shows the five obstruction classes, applied on the red 0.5-tile:
Obstruction classes are calculated for each 0.5-tile, but only 0.5-tiles which are the top left corner of a tile are processed (the red 0.5-tile in the above image would therefore not actually block anything).
The top left 0.5-tile (and only the top left 0.5-tile) of tiles occupied by…
All occupied 0.5-tiles of furniture whose Height
(column in ItemParam.bcsv, which is calculated by taking the highest point in the model) is…
All 0.5-tiles of structures that satisfy either of the following criteria obstruct 4-vertical:
Most (if not all) structures one would normally consider as a “building” satisfy the second condition for the entire top row, and therefore the entire structure effectively blocks 4 tiles vertically from the back. The same thing happens with inclines (in any orientation).
The plaza itself (not the resident services tent/building), as well as bridges, are placed in the background, and thus, do not satisfy either of the two conditions (and do not obstruct vertically).
Finally, any tile whose top left 0.5-tile is obstructed is considered to be obstructed.
Certain tiles are marked as unreachable during earlier stages of the game (e.g. before you unlock the ladder), and certain tiles are always marked as unreachable (e.g. highest level of cliff).
A tile is considered reachable if all the following are true:
PlayerNoEntry=0
VillageExtensionLevel2
set or ???*VillageExtensionLevel2
not set or VillageExtensionLevel3
set or it is not on a cliff (of any level)*unsure what this condition is checking, but it’s probably along the lines of “reachable from plaza without a vaulting pole”
There are five different variants of rocks. The difference is entirely aesthetic, and each variant has an equal chance of being chosen when a rock is spawned.
Up to 5 mushrooms will spawn each GrowUp
, but only up to a maximum of 30 mushrooms on the island. The rates of each type of mushroom depend on your island evaluation, as calculated at the start of GrowUp
.
Item Name | 1~3 Stars | 4 Stars | 5 Stars |
---|---|---|---|
skinny mushroom | 35% | 30% | 25% |
flat mushroom | 30% | 30% | 25% |
round mushroom | 30% | 25% | 25% |
elegant mushroom | 4% | 10% | 15% |
rare mushroom | 1% | 5% | 10% |
Shell Name | Rate |
---|---|
summer shell | 10% |
conch | 6% |
giant clam | 10% |
coral | 10% |
venus comb | 10% |
sea snail | 10% |
cowrie | 17% |
sand dollar | 27% |
Shell Name | Rate |
---|---|
summer shell | 0% |
conch | 5% |
giant clam | 11% |
coral | 11% |
venus comb | 11% |
sea snail | 11% |
cowrie | 20% |
sand dollar | 31% |
The zodiac star fragments that appear on the beach are always of the zodiac of the night before, on your own island (regardless of where you wished).
If the zodiac (of the previous night) is the same zodiac as the zodiac of your birthday, your rates are:
Item Name | Rate |
---|---|
star fragment | 70% |
large star fragment | 10% |
zodiac fragment | 20% |
Otherwise, your rates are:
Item Name | Rate |
---|---|
star fragment | 85% |
large star fragment | 5% |
zodiac fragment | 10% |
The game keeps track of the following during the night before, which determines how many fragments can spawn:
cPlayer:PrayStarToday
- the number of times a player wished, capped at 20. This is per resident.cLand:VisitorPrayStarToday
- the number of times that a visitor wished on your island, capped at 100. This is per island.During GrowUp
, cPlayer:StarPieceGrowCount
for each resident is set to cPlayer:PrayStarToday + cLand:VisitorPrayStarToday / 5
. This is the number of star fragments that each resident can spawn during the day - whenever a star fragment spawns, the current player’s cPlayer:StarPieceGrowCount
is decremented once.
There is a cap of 10 star fragments on the beach at any given time. That is, if there are 10 star fragments, no more fragments will appear until they are picked up. If the current player’s cPlayer:StarPieceGrowCount
is nonzero, and there are fewer than 10 star fragments on the beach, more star fragments will slowly appear on the beach, regardless of the number of shells on your beach, or the time of day (as long as the next day’s GrowUp
has not run yet).
During GrowUp
, as many star fragments as possible are spawned, for the current player.
Things to note:
cPlayer:StarPieceGrowCount
, but do count toward the “10 star fragments at a time” cap.cPlayer:StarPieceGrowCount
, it is necessary to open the game on both profiles to spawn all the star fragments.cLand:VisitorPrayStarToday
is per island, so having a visitor wish 100 times results in 20 star fragments per profile, even if you don’t open the game on each profile the night before.cPlayer:StarPieceGrowCount
is set at GrowUp
, so profiles made the day after your meteor shower get no star fragments.If this is the first time talking to Celeste, you get the DIY recipe for a star wand.
If you have not received a zodiac DIY from Celeste since the last time the zodiac changed on your island*, and you do not have the zodiac DIY for the current zodiac**, then you get the current zodiac’s DIY**.
*since the last time GrowUp
ran, where the zodiac was different from the zodiac of the date the GrowUp
before that ran
**based on the date of the island Celeste is on, not the date of your island
If you are not eligible for a zodiac DIY, and have not learned all of Celeste’s non-zodiac DIYs, then you get a non-zodiac DIY, as follows:
Note: this means that star head is always the last DIY, unless you obtain it earlier via trading.
If you are not eligible for any DIY, then,
Snowboy DIYs function similarly to Celeste DIYs.
Note: this means that snowperson head is always the last DIY, unless you obtain it earlier via trading.
First, a random villager is picked (equal odds for all villagers, must not be living on your island).
Then, the game rolls whether to give a personality-specific or general DIY recipe:
A recipe is then picked from the personality category (or ALL_NPC), uniformly at random with no consideration to learned recipes.
The very first message bottle generated on your island is special-cased to be one of wooden full-length mirror and wooden table mirror (50%/50% chance). This is controlled by the cLand:PickedUpMessageBottle
flag.
There is a 30% chance for there to be a fossil buried on an NMT island.
There is a 30% chance for there to be a message bottle on the beach of an NMT island.
During Bunny Day, there is a flat 30% chance of a water egg spawning instead of a fish.
Wisp’s rates and logic changed with the 1.2.0 update, and with the 1.3.0 update. Min Value/Max Value refer to the item’s buy price (Price
column in ItemParam.bcsv
).
The rate of each category depends on whether you have a tent or a house.
Category | Tent Rates | House Rates |
---|---|---|
furniture | 75% | 40% |
wallpaper | 0% | 24% |
flooring | 0% | 24% |
clothing | 25% | 12% |
Pieces of furniture are determined by picking (uniformly at random) an item ID with ItemKind=Ftr
, ItemCatalogType=Sale
, and ItemFrom in (ShopDefault, ShopMiscGoods, ShopLargeGoods, ShopHighClass, ShopLv1, ShopLv2)
that is in the price range and (if Something new is picked) not cataloged.
Wallpaper is determined by picking (uniformly at random) an item ID with ItemKind=RoomWall
, ItemCatalogType=Sale
, and ItemFrom in (MarketingRouteA, MarketingRouteB, MarketingRouteC, MarketingRouteD)
that is in the price range and (if Something new is picked) not cataloged.
Flooring is determined by picking (uniformly at random) an item ID with ItemKind=RoomFloor
, ItemCatalogType=Sale
, and ItemFrom in (MarketingRouteA, MarketingRouteB, MarketingRouteC, MarketingRouteD)
that is in the price range and (if Something new is picked) not cataloged.
Clothing is determined by picking (uniformly at random) an item ID with ItemKind in (Tops, OnePiece, Bottoms, Accessory, Cap, Helmet, Shoes, Socks)
, ItemCatalogType=Sale
, and ItemFrom in (Tailor, TailorMarketOnly)
that is in the price range and (if Something new is picked) not cataloged.
The item variant is always of the native variant (based on your VillageLotID
).
The item is always an item that you have not cataloged yet, unless you have cataloged everything in the pool of items, in which case it picks randomly from the pool of items.
Category | Min Value | Max Value |
---|---|---|
furniture | 300 | 2999 |
wallpaper | 300 | 2499 |
flooring | 300 | 2499 |
clothing | 300 | 1999 |
There is a 90% chance of using the first table, and a 10% chance of using the second table.
Table 1
Category | Min Value | Max Value |
---|---|---|
furniture | 2000 | 14999 |
wallpaper | 1850 | 9999 |
flooring | 1850 | 9999 |
clothing | 1800 | 9999 |
Table 2
Category | Min Value | Max Value |
---|---|---|
furniture | 10 | 14999 |
wallpaper | 10 | 2999 |
flooring | 10 | 2999 |
clothing | 10 | 4999 |
The rate of each category depends on whether you have a tent or a house.
Category | Tent Rates | House Rates |
---|---|---|
furniture | 75% | 40% |
wallpaper | 0% | 24% |
flooring | 0% | 24% |
clothing | 25% | 12% |
If you request something expensive, and it’s the first time you request something expensive since updating to 1.2.0, then you are instead guaranteed a piece of furniture.
The item is always an item that you have not cataloged yet, unless you have cataloged everything in the pool of items, in which case it picks randomly from the pool of items.
Category | Min Value | Max Value |
---|---|---|
furniture | 300 | 2999 |
wallpaper | 300 | 2499 |
flooring | 300 | 2499 |
clothing | 300 | 1999 |
There is a 90% chance of using the first table, and a 10% chance of using the second table. If this is the first time you request something expensive since updating to 1.2.0, then the first table is always used.
Table 1
Category | Min Value | Max Value |
---|---|---|
furniture | 2000 | 14999 |
wallpaper | 1850 | 9999 |
flooring | 1850 | 9999 |
clothing | 1800 | 9999 |
Table 2
Category | Min Value | Max Value |
---|---|---|
furniture | 10 | 14999 |
wallpaper | 10 | 2999 |
flooring | 10 | 2999 |
clothing | 10 | 4999 |
The rate of each category depends on whether you have a tent or a house.
Category | Tent Rates | House Rates |
---|---|---|
furniture | 75% | 40% |
wallpaper | 0% | 24% |
flooring | 0% | 24% |
clothing | 25% | 12% |
The item is always an item that you have not cataloged yet, unless you have cataloged everything in the pool of items, in which case it picks randomly from the pool of items.
Category | Min Value | Max Value |
---|---|---|
furniture | 0 | 1999 |
wallpaper | 0 | 1499 |
flooring | 0 | 1499 |
clothing | 0 | 1499 |
Category | Min Value | Max Value |
---|---|---|
furniture | 0 | 14999 |
wallpaper | 0 | 14999 |
flooring | 0 | 14999 |
clothing | 0 | 14999 |
The first time you give Pascal a scallop, you will always get a mermaid furniture DIY (ItemFrom = DIYPearl
), even if you have already learned all the DIYs (e.g. by trading).
Otherwise, if you have not learned all the DIYs* and cataloged all the mermaid clothing, there is a 50% chance of receiving a pearl, and a 50% chance of receiving either a DIY you don’t have or a piece of mermaid clothing you have not cataloged (equal chance of receiving any particular reward).
Otherwise, there is an 80% chance of receiving a pearl and 20% chance of receiving a piece of mermaid clothing.
*before 1.4.0, this condition was “have not cataloged all the DIYs”.
Once you pop 300 balloons, a golden balloon will appear containing the golden slingshot DIY. After this, every 20th balloon that appears (not every 20th balloon you actually pop, just every 20th that appears) will be a golden balloon until you have learned the golden slingshot DIY.
The following table contains rates for different items in balloons (original table from @cestislife with rates datamined by @_Ninji; I have also double-checked the information myself).
Furniture is determined by picking (uniformly at random) an item ID with ItemFrom in (ShopDefault, ShopMiscGoods, ShopLargeGoods, ShopLv1, ShopLv2)
.
Clothing is determined by picking (uniformly at random) an item ID with ItemFrom in (Tailor, TailorMarketOnly)
with Price <= 4000
.
cPlayer:BalloonShootCountToday
contains the number of balloons shot down by the player on the current day.
Category | cPlayer:BalloonShootCountToday <10 |
cPlayer:BalloonShootCountToday >=10 |
---|---|---|
furniture | 35% | 5% |
clothing | 20% | 5% |
5x iron nugget | 5% | 15% |
5x clay | 5% | 15% |
gold nugget | 1% | 1% |
unlearned DIY | 15% | 15% |
random DIY | 5% | 5% |
1000 bells | 0% | 25% |
5000 bells | 8% | 8% |
10000 bells | 5% | 5% |
30000 bells | 1% | 1% |
Category | cPlayer:BalloonShootCountToday <10 |
cPlayer:BalloonShootCountToday >=10 |
---|---|---|
furniture | 45% | 5% |
clothing | 25% | 5% |
5x iron nugget | 5% | 20% |
5x clay | 5% | 20% |
gold nugget | 1% | 1% |
unlearned DIY | 0% | 0% |
random DIY | 5% | 5% |
1000 bells | 0% | 30% |
5000 bells | 8% | 8% |
10000 bells | 5% | 5% |
30000 bells | 1% | 1% |
Category | cPlayer:BalloonShootCountToday <10 |
cPlayer:BalloonShootCountToday >=10 |
---|---|---|
furniture | 50% | 5% |
clothing | 25% | 5% |
5x iron nugget | 5% | 23% |
5x clay | 5% | 22% |
gold nugget | 1% | 1% |
unlearned DIY | 0% | 0% |
random DIY | 0% | 0% |
1000 bells | 0% | 30% |
5000 bells | 8% | 8% |
10000 bells | 5% | 5% |
30000 bells | 1% | 1% |
There is a bonus for talking to villagers for several days in a row:
Days in a Row | Friendship Increase |
---|---|
1 | 1 |
2 | 2 |
3 or more | 3 |
Due to a bug in the game's programming, the counter (cNpcMemory:ConsecutiveTalkDays
) was reset upon loading the game from 1.0.0 to 1.4.2, resulting in the increase in Friendship always being 1. This was fixed with the 1.5.0 patch, and daily increases in Friendship up to 3 are now possible.
This section pertains to the gifts that villagers give you when you give them a gift worth at least 250 bells. This data has only been checked for 1.4.0+, and not for earlier versions.
The return gift is based on your friendship level with the villager if your gift is worth at least 750 bells. Otherwise, it is treated the same as a friendship level 1/2 gift.
The return gift satisfies:
ItemFrom in (ShopMiscGoods, ShopLv1, ShopLv2, Tailor, TailorMarketOnly*)
(TailorMarketOnly is only included if Able Sisters is built)Price <= 1999
ItemKind in (Tops, OnePiece)
or (ItemKind=Ftr
and layout is not Wall/Rug)There is a 10% chance of getting a wallpaper/flooring instead of a normal gift if the return gift is handed back to you (instead of mailed to you).
Normal return gifts satisfy:
ItemFrom in (ShopMiscGoods, ShopLv1, ShopLv2, Tailor, TailorMarketOnly*)
(TailorMarketOnly is only included if Able Sisters is built), or ItemKind=Ftr
and Seasonality
is the current season (not AllYear
)Price <= 2999
ItemKind in (Tops, OnePiece, Cap)
or (ItemKind=Ftr
and layout is not Rug)There is a 15% chance of getting a wallpaper/flooring instead of a normal gift or photo if the return gift is handed back to you (instead of mailed to you).
There is a floor(4 * friendshipPoints / 100)%
chance of receiving the villager’s framed photo instead of a normal gift, if the return gift is not rolled to be a wallpaper/flooring.
Normal return gifts satisfy:
ItemFrom in (ShopMiscGoods, ShopLv1, ShopLv2, ShopLargeGoods, Tailor, TailorMarketOnly*)
(TailorMarketOnly is only included if Able Sisters is built)Price <= 2999
if ItemKind != Ftr
, Price <= 4999
otherwiseItemKind in (Tops, OnePiece, Cap, Accessory)
or (ItemKind=Ftr
and layout is not Rug)If possible, the return gift will be an item that you have not yet cataloged. Otherwise, the return gift must also satisfy Price >= 2000
.
There are some additional restrictions which apply for non-wallpaper/flooring return gifts:
ItemCatalogType = NotForSale
FtrStockList
and NpcHouse.FtrList
(i.e. it cannot be furniture that is currently placed in the house)TopData
, AccessoryData
, or CapData
(i.e. the villager cannot currently be wearing the gift)Seasonality
must either be the current season or AllYear
(i.e. the gift cannot be out of season)NpcGender
or ItemGender
set), then it must match both the villager’s gender and the player’s genderWearStockList
or FtrStockList
with PastDays < 2
(should mainly apply to default furniture not being gifted before the third day of coming into existence)WearStockList
or FtrStockList
with SavePlayerBaseId
equal to the player’s ID (i.e. cannot be an item from the current player)WearStockList
or FtrStockList
with SavePlayerBaseId
not equal to the player’s ID and PastDays < 11
(i.e. cannot be an item gifted from another player within the last 10 days)ReleaseItemList
with SavePlayerBaseId
equal to the player’s ID (i.e. cannot be an item that the villager remembers giving to the player in the past)ReleaseItemList
with SavePlayerBaseId
not equal to the player’s ID and PastDays < 11
(i.e. cannot be an item that the villager remembers giving to another player in the past 10 days)Furniture return gifts will always be your island variant (the ReBodyPatternNum
is set based on your island’s VillageLotId
) unless you are receiving a friendship level 5-6 gift not in your catalogue, in which case it be random.
The variant for framed photos is fixed (variant 0).
Wallpaper/Flooring return gifts satisfy:
ItemKind in (RoomWall, RoomFloor)
ItemCatalogType = Sale
Price <= 2000
ItemFrom=MarketingRouteX
where X
is one of A
, B
, C
, or D
, picked randomly with weights depending on your island’s VillageMarketingType
.The gory little details on which MarketingRoute is chosen:
VillageMarketingType
is an unsigned 8-bit integer, which should be a permutation of the four dibits (00, 01, 10, 11).In summary: the distribution of the four marketing routes is 40%/30%/20%/10%, but which route is assigned to which percentage depends on your island.
The return gift is added to the villager’s ReleaseItemList
when you receive it (either when the mail reaches your mailbox, or when the gift is handed to you). The ReleaseItemList
is effectively a 64-item queue of gifts that the villager remembers giving to a player - oldest item gets removed to make space for a new item. There is only one list per villager, not one list per villager per resident.
This section pertains to the item received in return for a cupcake, on your birthday.
The game keeps track of several flags, which represent whether you have gotten a particular type of item before.
cPlayer:GetBirthdayTable
- whether you have received a birthday table beforecPlayer:GetBirthdayHat
- whether you have received a birthday hat beforecPlayer:GetBirthdayBoard
- whether you have received a birthday board beforecPlayer:GetBirthdayCandle
- whether you have received a birthday candle beforecPlayer:GetBirthdaySunglasses
- whether you have received birthday sunglasses beforecPlayer:GetBirthdayCake
- whether you have received a birthday cake beforecPlayer:GetBirthdayFloorParty
- whether you have received a birthday flooring beforecPlayer:GetBirthdayWallParty
- whether you have received a birthday wallpaper beforeThe reward you get depends on your friendship level with the villager.
The cupcake is simply treated as a Level 3/4 normal friendship gift (see Friendship Return Gifts), except that it can be an item that you are currently wearing.
If cPlayer:GetBirthdayCandle
and cPlayer:GetBirthdaySunglasses
are both set, the cupcake is simply treated as a Level 3/4 normal friendship gift (see Friendship Return Gifts), except that it can be an item that you are currently wearing.
If neither flag is not set, the gift pool contains: candle, board, cake, flooring, wallpaper, and sunglasses.
Otherwise, if cPlayer:GetBirthdayCandle
is not set, the gift pool contains: candle, board, cake, flooring, and wallpaper.
Otherwise, the gift pool contains: cake, flooring, wallpaper, and sunglasses.
Each type of gift has equal weight, and variants are randomized after picking a type.
If any flag is not set, the corresponding type of item is added to the pool. Then, a type of gift is picked (with each type of gift having equal weight), and variants are randomized after picking a type.
If all flags are set (i.e. you have received one of everything), the cupcake is simply treated as a Level 3/4 normal friendship gift (see Friendship Return Gifts), except that it can be an item that you are currently wearing.
The EventFlow query OwlDonationItemType
returns the following values, for the type of item you
just donated to the museum:
Value | Type of Item Donated |
---|---|
0 | Bug |
1 | never returned |
2 | Unidentified Fossil |
3 | Fossil |
4 | Fish (as of 1.4.0, including sea creatures obtained via diving) |
5 | Art (as of 1.2.0) |
6 | Fake Art (as of 1.2.0) |
Notably, there is an unused gap (value=1) present since 1.0.0 that is both never returned by the executable and never used in the game’s EventFlow (through 1.11.0).
Note: I’m not 100% confident about everything here, but it should give a good idea of how fleas spawn.
TL;DR: assuming you are far enough in the game, it is probably the case that when in season, there is a 0.5-1.0% chance of a single flea spawning on one of your villagers, each hour if fleas are in season.
Fleas are spawned entirely separately from the normal bug spawning system.
They cannot spawn (on any of your villagers) if any of the following is true:
FinishiPC1Prologue
flag is off(there may be a few more conditions)
If all conditions are met, a flea is spawned with (bcsv spawn rate / 1000)
chance. As fleas have a spawn rate of 0, 5, or 10 depending on the month, this corresponds to a 0% (out of season), 0.5%, or 1.0% chance of spawning.
This routine appears to be tied to other handling of villager activity, and likely runs once an hour regardless of whether a flea was successfully spawned.