Assortment of Rates and Information

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!

What is 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.

Catalogued Items

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 order

The order in which GrowUp processes various things is:

Lily-of-the-valley

Spawn Rate

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,

Then, 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.

Spawn Location

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,

Other Notes

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).

Weeds

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.

Rates for a weed to grow

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.

Rates for a weed to spread

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 new weeds spawned randomly each day

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.

Fossils

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

Growth

Trees are partitioned into two groups.

A tree is permitted to grow only if:

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.

Axe Hits

During Bunny Day Event

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

Normal Rates

Type of Tree soft wood wood hard wood
Cedar 35% 35% 30%
Palm 35% 30% 35%
Hardwood* 30% 35% 35%

*including Fruit/Money trees

Bamboo rates

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.

Shake

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…

Non-decorated trees, Acorn/Pinecone season

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.

Non-decorated trees, other seasons

There is a 70% chance of nothing dropping, and a 30% chance of a tree branch dropping.

Decorated cedar tree

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.

Rocks

Axe/Shovel hit

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.

Money Rock

Hit Count Coin/Bag dropped
1 100
2 200
3 300
4 500
5 1000
6 2000
7 4000
8 8000

Normal rates

Item Name Your Island NMT Island
stone 50% 9%
iron nugget 34% 50%
clay 15% 40%
gold nugget 1% 1%

Bunny Day rates

Nook’s Cranny built (MarketBuilt = 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%
Nook’s Cranny not built (MarketBuilt = 0)
Item Name Your Island NMT Island
stone egg 20% 30%
stone 30% 4%
iron nugget 34% 50%
clay 15% 15%
gold nugget 1% 1%

Axe/Shovel hit with Fruit Powerup

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%

Spawn Locations

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.

Terminology

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.

Basic Criteria

The following are conditions for a tile to be able to spawn a rock:

Visual Obstruction

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

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.

Reachability

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:

*unsure what this condition is checking, but it’s probably along the lines of “reachable from plaza without a vaulting pole”

Variants

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.

Mushrooms

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%

Shells

During Summer

Shell Name Rate
summer shell 10%
conch 6%
giant clam 10%
coral 10%
venus comb 10%
sea snail 10%
cowrie 17%
sand dollar 27%

Other Seasons

Shell Name Rate
summer shell 0%
conch 5%
giant clam 11%
coral 11%
venus comb 11%
sea snail 11%
cowrie 20%
sand dollar 31%

Star Fragments on Beach

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:

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:

Celeste

First Visit

If this is the first time talking to Celeste, you get the DIY recipe for a star wand.

Zodiac DIYs

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

Non-Zodiac DIYs

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.

Star Fragments

If you are not eligible for any DIY, then,

Snowboy DIYs

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.

Message Bottles

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.

Fossils and Message Bottles on NMT Islands

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.

Water Eggs

During Bunny Day, there is a flat 30% chance of a water egg spawning instead of a fish.

Wisp

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).

1.3.0 and later

Category

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).

Something I don’t have

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

Something expensive

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

1.2.0

Category

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.

Something I don’t have

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

Something expensive

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

1.0.0 - 1.1.4

Category

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%

Something I don’t have

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

Something expensive

Category Min Value Max Value
furniture 0 14999
wallpaper 0 14999
flooring 0 14999
clothing 0 14999

Pascal

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”.

Balloons

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.

Seasonal DIYs available, not all learned

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%

Seasonal DIYs available, all learned

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%

Seasonal DIYs not available

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%

Friendship Consecutive Talk Bonus

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.

Friendship Return Gifts

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.

Friendship Level 1/2

The return gift satisfies:

Friendship Level 3/4

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:

Friendship Level 5/6

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:

If possible, the return gift will be an item that you have not yet cataloged. Otherwise, the return gift must also satisfy Price >= 2000.

General Restrictions

There are some additional restrictions which apply for non-wallpaper/flooring return gifts:

Furniture Variant

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

Wallpaper/Flooring return gifts satisfy:

The gory little details on which MarketingRoute is chosen:

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.

Other notes

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.

Cupcake Gifts

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.

The reward you get depends on your friendship level with the villager.

Friendship Level 1/2

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.

Friendship Level 3/4

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.

Friendship Level 5/6

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.

Museum Donations

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).

Fleas

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:

(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.