Looking at the EnvironmentScore XML file in GameplayData.package, I managed to draw a few conclusions. See the code below:
<kOutdoorEnvironmentRange value="10">
<!--Range: Positive floats. Description: When outdoors, this value is the distance in tiles from the Sim at which environment objects are included in the area of effect calculation.-->
</kOutdoorEnvironmentRange>
<kBrokenPenalty value="-10" />
<kPenaltyPerPuddleInRoom value="-8">
<!--Score decrement per puddle in the Sim's current room.-->
</kPenaltyPerPuddleInRoom>
<kCharredPenalty value="-10" />
<kTilePartsOfSmallRoom value="5">
<!--Range: Tile parts. Description: Square root of the room size that is counted as the smallest room for purposes of contributions.-->
</kTilePartsOfSmallRoom>
<kTilePartsOfLargeRoom value="15">
<!--Range: Tile parts. Description: Square root of the room size that is counted as the largest room for purposes of contributions.-->
</kTilePartsOfLargeRoom>
<kContributionPercentageSmallRoom value="1">
<!--Range: Float under 1.0f. Description: Contribution percentage of the best object in the smallest room.-->
</kContributionPercentageSmallRoom>
<kContributionPercentageLargeRoom value=".6">
<!--Range: Float under 1.0f. Description: Contribution percentage of the best object in the largest room.-->
</kContributionPercentageLargeRoom>
<kContributionPercentageOutside value="1">
<!--Range: Float under 1.0f. Description: Contribution percentage of the best object while outside.-->
</kContributionPercentageOutside>
<kNumberOfObjectsSmallRoom value="5">
<!--Range: Number of objects. Description: Number of objects in a room before the lowest contributing one would contribute minimally in the smallest room.-->
</kNumberOfObjectsSmallRoom>
<kNumberOfObjectsLargeRoom value="15">
<!--Range: Number of objects. Description: Number of objects in a room before the lowest contributing one would contribute minimally in the largest room.-->
</kNumberOfObjectsLargeRoom>
<kNumberOfObjectsOutside value="10">
<!--Range: Number of objects. Description: Number of objects in a room before the lowest contributing one would contribute minimally in the outside.-->
</kNumberOfObjectsOutside>
<kMinimumContributionPercentage value="0.2">
<!--Range: Percentage under 1.0f. Description: Minimum percent that any object can ever contribute of its full score.-->
</kMinimumContributionPercentage>
The code is consistent with Branr's Puck's Soliloquy finding (when outdoors, if more than 10 tiles away or 7-diagonal it doesn't count) - however it's true outdoors only. I tested a 25 x 1 closed box with a Puck's Soliloquy at the other end of the box and this still triggers the moodlet. It seems that in a room of whatever size, the objects are ranked in terms of their environment scores. The highest object has its score multiplied by a number (1.0 for small rooms <25 tiles, 0.6 for larger ones >225 tiles - no idea how the pattern is for rooms in between), and each successive object after that contributes less until it reaches 0.2. This takes five objects for a small room and 15 for a large room.
Note that what you see in buy mode e.g. "Environment: 6" is NOT the actual value of EnvironmentScore as used in the game code. It's indicative, with 1 meaning 0 - 4 points, 2 meaning 5 - 9, 3 meaning 10 - 14 etc.
Will do some more testing and report the results soon.
Edit: Okay, some testing done. All testing was completed in a 5 x 5 room. I compiled a bit of data on the bigger fountains, but those were done outside and should be disregarded because the scaling rate is different. Environment scores are pulled from GameplayData.package.
(D = Decorated, ND = Nicely Decorated, BD = Beautifully Decorated. The numbers are the number of that item in a room required to produce the moodlet.)
F-Class Hunter-Killer (environment score: 100) - BD 1
Puck's Soliloquy (environment score: 75) - ND 1 BD 2
Mission at Noon, Lance Ng (environment score: 55) - ND 1 BD 2
Errant Guard (environment score: 45) - ND 1 BD 3
Grand Piano (environment score: 40) - D 1 ND 2 BD 4
Large Heavy Metal Titans of Doom Poster (environment score: 35) - D 1 ND 2 BD 5
Key to the City (environment score: 25) - D 1 ND 2 BD 10
Peekaboo Partition (environment score: 17) - D 1
Looking Glass Supreme (environment score: 16) - D 1
Simmy Award (environment score: 15) - D 2 ND 4 BD 23
Monstrously Cute OctoCat (environment score: 1) - D 71
Tested Outside:
Landgraab Science Facility Fountain (environment score: 90) - ND 1 BD 2
The Plaza Gusher (environment score: 85) - ND 1 BD 2
Hypothesis: There is a certain 'environment score' required for triggering each of the moodlets.
D lies between 15 and 16, ND between 40 and 45, and BD between 90 and 100.
For D, I tested a Simmy Award (15) plus one OctoCat (less than 1 as it's the second item) which doesn't give a moodlet. The Looking Glass does - probably, the requirement is at least 16 points. (EnvironmentScore is a float variable - so those decimals do matter.)
For ND, I tested a Grand Piano (40) plus one Space Bottle Cabinet (less than 5). This yielded ND, so I tried:
Grand Piano (40) + Eternal Bloomer Vase (<4) - ND
Grand Piano (40) + Towel Ring (<2) - ND
Grand Piano (40) + OctoCat (<1) - D. Hence we're probably looking for at least/more than 41.
For BD, I tested Puck's Soliloquy (75).
Puck's Soliloquy (75) + Key to the City (<25) - ND
Puck's Soliloquy (75) + Grand Piano (<40) - BD
Puck's Soliloquy (75) + La Ninjas del Toro Concert Collection (<30) - BD
Puck's Soliloquy (75) + Large Heavy Metal Titans of Doom Poster (<35) - BD
Puck's Soliloquy (75) + Philippe of Anzac (<29) - ND
It looks like the cut-off for Beautifully Decorated is 99 points or more, if we consider the below hypothesis.
I suspect the following: In a 5 x 5 room, the first item counts 100% of its score, the second 80%, the third 60%, the fourth 40% and the fifth onwards 20% each.
It agrees for most the above few cases, at least, though is off by 1 on the OctoCats.
Large Heavy Metal Titans of Doom Poster (environment score: 35) - D 1 ND 2 BD 5
At 1 item, we have environment score 35 which gives D.
At two, we have 35 + 28 = 63, ND.
At four, we have 35 + 28 + 21 + 14 = 98, not quite enough, so still ND.
At five we have 35 + 28 + 21 + 14 + 7 = 105 which gives us our BD.
Key to the City (environment score: 25) - D 1 ND 2 BD 10
At 1 item, we have environment score 25 which gives D.
At two, we have 25 + 20 = 45 which corresponds to ND.
At nine, we have 25 + 20 + 15 + 10 + (5 x 5) = 95 which corresponds to ND still.
Finally at ten, we have 25 + 20 + 15 + 10 + (6 x 5) = 100 and this is where we get our BD.
Simmy Award (environment score: 15) - D 2 ND 4 BD 23
At 1 item we have 15 which is not enough.
At two, we have 15 + 12 = 27 which gives D.
At three, we have 15 + 12 + 9 = 36, still D.
At 4, we have 15 + 12 + 9 + 6 = 42, which is ND.
At 22, we have 15 + 12 + 9 + 6 + (18 x 3) = 96. ND.
Our 23rd one adds three points to give us 99 and the BD.
OctoCat (environment score: 1) - Does not seem to agree with the model.
If we have 70 octocats, we should have 1 + .8 + .6 + .4 + (66 x .2) = 16 which SHOULD give us our D.
However, for some reason I needed 71 to trigger the D. It shouldn't be that more than 16 is required as the full-length mirror (Looking Glass Supreme) which is 16 points by itself does give the correct behaviour of triggering D when it alone is in a small room.
The rate of decrease of counting is most probably linear, regardless of the size of the room - I did some testing in the open with the Landgraab fountain, and found that
Landgraab Fountain (90) + Ivy Box (<9) - ND.
Landgraab Fountain (90) + Horse Says Nay (<10) - BD.
Since it takes 10 items to decrease the multiplier to 0.2x outdoors based on the XML file, 90 + (9 x 0.9111) = 98.2 for the ivy box, but we have 99.111 score for the horse sculpture which clears 99 which is consistent with our data so far. This one's not too tested yet though.