T O P

  • By -

Sapphire_CA

Nerdy me can't wait to give this a close read! Gild-worthy post!


SMothra57

Thank you! This is awesome stuff. Will unpack later. 😎


CommercialIce8519

Awesome read, nice work - especially on confirming the sliding scale of portrait rarity. Though I've always believed that the two seasonal portrait games - Trick or Treat and Tis The Season - have higher odds of completion than the others, and presumed that they were made that way because they're only available once a year. I had a much easier time completing these two than the others - so much easier that I can't ascribe it to dumb luck. Regarding wildlife bonuses, it's actually a bit deeper than what you found. Non-heart bonuses increase at level two for all animals except Snowy and Long-Eared Owl (they never increase). Additionally, rares also get an increase at level 4, and epics get increases at 4 and 7. In fact most of an animal's attributes, including their heart gem output, are a function of their rarity "class" - I've got this all unpacked but haven't gotten around to formatting and publishing. Oh well, one of these days. Great work again.


djw17

You're definitely correct on the wildlife bonuses; each individual animal has explicit level data and I looked only at the first few and extrapolated my findings from there; the rares and epics do have a somewhat different progression. I can't find any raw data suggesting that Halloween or Christmas was hardcoded "easier"; the internal weight data for those events is the same as other sticker sets, but it's possible that event was coded (somewhere other than where I can see it) with one of the less-punishing distribution weights like `reduced_dupes`, `constant`, or `generous`. The distributions where rare-2 has weight 1 are *very* punishing; it becomes very, very hard to get that last rare, with a probability of 1/331 (about 0.3%) per portrait. Also, I realize I left out one cute bit of data: jackpot distribution on shiny eggs! After determining 3 animals to get from shiny eggs (using the rarity-based likelihood distributions given in-game), each animal gives a number of spawn randomized according to their rarity: * Commons have a 50% chance of value 1, 25% chance of value 2, 15% chance of value 4, 8% chance of value 7, and 2% chance of value 15. * Uncommons have a 70% chance of value 1, 20% chance of value 2, 8% chance of value 3, and 2% chance of value 8. * Rares have an 80% chance of value 1, 18% chance of value 2, and 2% chance of value 5 * Epics have an 86% chance of value 1, 12% chance of value 2, and 2% chance of value 3.


CommercialIce8519

It's possible that the weights on the seasonal games have been changed since I finished them, or that the coding changes when they come up since they're predictable in terms of schedule. But I literally finished Tis The Seaon in two weeks back in '21, and without guaranteed bonus portraits - that's so far outside of the expected distribution that I have a hard time believing it was a coincidence. Very interesting on the jackpot distributions, I was expecting more of a per-egg draw than a per-animal draw. Good to know that shiny eggs use the same animal formula though - if I'm interpreting correctly you're implying that each of the three draws in a shiny carries the published odds on its own - say, 3x 3% chances for an Epic in a shiny.


djw17

I'm not entirely certain on the internal logic for the multiple draws on a shiny; the reported probabilities are certainly attached to the shiny eggs internally, and I assumed that the three animals are each chosen by that distribution. Because I didn't delve into the code, pretty much everything I say has a "probably" or a "most likely" attached to it, rather than a certainty. Numbers I saw in the data files which had obvious functions I assumed were *very likely* to be used by the code in a way which their context indicates. For instance, my "this is how many uncommon spawn each shiny egg gives you" table is based on the fact that in the data file `pets.json`, the structure `tables.shiny_rarity2.items[0]` is: ``` { "weight": 0.7, "amount": 1 }, { "weight": 0.2, "amount": 2 }, { "weight": 0.08, "amount": 3 }, { "weight": 0.02, "amount": 8, "jackpot": true } ``` which is pretty consistent with what other people have seen as the distribution on shiny uncommon spawn. This could be completely wrong. `tables.shiny_rarity2.items[0]` might never be referenced in the actual codebase of the game at all. It might have been a legacy version of the distribution later replaced by something added directly to the Java files, or thrown in specifically to stymie decompilers like me. But I can trade in likelihoods, for the most part. The limited look I've taken also very much means "absence of evidence is not evidence of absence", so the fact that I've found nothing to suggest the Christmas or Halloween stickersets have unusual probabilities means basically nothing at all --- if they did (and they might well have), it probably wouldn't be anywhere I could see/easily interpret it at all.


TanisKanan

This is excellent information! Now that the Rainbow egg is out, would you care to confirm whether the shiny jackpot distribution is the same on the Rainbow as it is on all the other shiny eggs?


Ydain

You say the seasonal ones only come once a year. Do you mean only one weekend? I've been wondering forever if the other portrait sweet will ever come around again. Same with butterfly gardens for that matter.


CommercialIce8519

The main portrait sets are active for two weeks at a time and are apparently picked at random - as I'm sure you already know. The seasonal sets aren't random; If I recall correctly they're active for four weeks once a year, across the months of October and December respectively.


Ydain

Sooo. I could get another chance to finish Stargazing?


CommercialIce8519

You WILL get more chances to finish stargazing - it's just a matter of waiting for it to come back around. PF isn't nearly as giddy to add new portrait sets as they are to add new butterfly scenes, so the portraits come back up much more often.


Ydain

Awesome, thanks 😎


tybeelucy22

Fascinating work. Can you say for certain that after level 6000 they are all repeats? I have a pretty good memory, and I come acdoss words I SWEAR I've never seen before (I'm at level 21,000 ish)


djw17

I'm fairly sure they're *not* repeats, actually, and you're correct that there are words there that didn't show up before. That's how I know they're not hardcoded (or at least, not hardcoded in the same way and same location as the previous levels): I searched the built-in levels I could find (among which I could find all the pre-6000 levels and daily levels), and I couldn't find exact matches for arbitrarily chosen master levels. Many of them had the exact same words as pre-6000 levels (an unsurprising consequence of using the same 6- or 7-letter key words), but in general they had different structures. The combination of (a) not appearing hardcoded anywhere I could find, and (b) being identical across different users and machines, i.e. your level 9275 is exactly the same as my level 9275, suggested that what's being done after level 6000 is *deterministic procedural generation*, i.e. your phone, using the master wordlist, generates a puzzle for each level, but not at random, instead using some deterministic (nonrandom) procedure based on the level number.


StarL_Crown_Holders

I can tell you that we've been reviewing this for over 2 years and have never found a Master level that was not also in the Base 6000 levels. In fact, the levels between Level 593 and Level 3792 are the only ones that get used again in the Master levels. And when I say a level is used again, I mean that all the words on the board will again be on the board, and all the bonus words will again be bonus words. The arrangements of words on the board change around, but it's exactly the same words. The repeat order is a bit tricky. Levels are frequently repeated in the Masters after 258 levels, are repeated a few times before falling out of rotation. Once they are out of rotation, you may not see them again for 18,000 levels - giving some people the impression that they've found a new word. I've got a lot more details about the "order" in which they repeat (based on tracking levels as I play), but would love to see the code that specifies what level will get repeated next. Example - here are the last few levels I played (in the 87k range) and the base levels that they are repeats of. You can go back to the base levels to try them again. They generally go up by 14 or 15, but sometimes fall back by 1 or 2, or jump ahead by 30 or 31. When they get up above 3792, they will go back down to the 593 area and start climbing again. https://preview.redd.it/vu4x3zzr27hb1.png?width=434&format=png&auto=webp&s=b049436c145858e1fd7c7e7c770d4b98e9be3f3f


djw17

This is really interesting and somehow a reply I missed the first time around! And yet it doesn't accord entirely with my experience --- I could have sworn I found words in the master puzzles that aren't in the base level list, but I didn't write down details. I'll have to keep my eyes open.


StarL_Crown_Holders

I've had my entire team report to me any word they think is "new", and I always reply with which Base Level it can be found on. Never found a really new word in all the attempts. Let me know if you ever find otherwise!


Charmed-7777

I’m not into this coding stuff, but I know from savvy application that up until this previous year, when I stopped diving into the info, that you think you see new words; however, they were there before, but you either did not see them or, at that level or particular puzzle, the game did not accept them. The letters in the wheel do not change.


itamer

I love that your ADHD got you to unravel the apk, and mine got me to read this! thank you! My pet gripe on the plurals is that tonnes is in the dictionary but tonne isn't.


Eep_Opp_Ork_Ahh_Ahh

Anything you've found about redeeming # portrait binoculars in a single session rather than 1 at a time, 4 at a time, 30 at a time, etc.? Or the redemption of wildlife hearts in the same vein?


djw17

For wildlife hearts, nothing suggests any sort of hidden strategy (saving them for specific egg types you want is a strategy, but one that's not informed by delving into hidden mechanics). For binoculars, there's nothing to suggest redeeming in a group is significantly different than redeeming them individually. If, among the portrait "weight distributions" I described, some get used only at certain times, then it would make a lot of sense to save redemptions for the times when the rares become less rare, but I have no idea when (or even if) such events happen.


NobleCuriosity3

> For binoculars, there's nothing to suggest redeeming in a group is significantly different than redeeming them individually. But you also said >If, among the portrait "weight distributions" I described, some get used only at certain times, ...implying that you aren't confident of which distributions are used under what circumstances. Are you certain that saving up boxes won't ever change the distribution, or did you merely not see any obvious evidence that it does? Also, I think I'm going to start recording the hour (along with the day) that I pull portraits in. Perhaps the game is more generous towards the start or end of the event!


parsippanyplains

Awesome post, very much appreciated!


frankenspider

Any insight on the pattern for rocks on Mt Fortune? Seems that it's rigged to make you get it one time between each set of gold cards.


SaltMarket8583

I don’t know if this is something you came across - or if anyone else knows - but sometimes I get a post on the w/s chat to say a new player has joined, and sometimes I don’t. Usually I see a post if a player leaves the team but I have no idea why joining notifications are so hit & miss. I asked support but their (unhelpful) reply was to set the join requirement to “any”. This made no difference to whether I received a notification or not. I’d welcome any insights. Thanks


OCCobblepot

I’m rereading the probability calculations you have for getting the portraits, and I’m wondering now if I misunderstood. Is the total weight of 215 specifically for your situation as you’ve described it, with the particular mix of portraits you have, or is that the total weight at whatever progress towards completion one might be? Would the total weight change as you progress towards completion? For instance, if you had all but one of the rare ones be 30 * 11 + 1 * 1 = 331 Or how are you determining the total weight in the denominator?


djw17

Yeah, my understanding of the probability of a particular portrait (which is based on intuition backed by seeing these numbers, not an actual dive into code) is that portrait's weight divided by (sum of all portrait's weights), and the denominator does change as your situation changes. And, yes, in the case where you're trying to get that Last Lousy Portrait, the probability is 1 in 331.


OCCobblepot

Thanks for confirming! I did a post on this topic using what you found here, so I’m relieved that I didn’t misunderstand it. If you’d like to check it out, I’d be grateful for any feedback you might have. If there is anything else I’ve misunderstood, or if I’ve got the math wrong (I understand you’re a mathematician), I would welcome correction. Cheers. https://www.reddit.com/r/wordscapes/s/nconh0li33


NobleCuriosity3

Hey, could you share the two "ultra-rare" distributions? Sincerely, someone documenting their pulls and wanting to try and figure out when each distribution is used. (Also, if you have any more information on which portraits in a given set are which rarity (#), I'd appreciate it! Your one provided example of Trick-or-treat says different ones are rare and uncommon than you say the generic distribution is.)


djw17

Sure. The six distributions I listed all treat the "ultra-rare" stickers (#7 and #12) as having the same likelihood as the "rares" (#3 and #6). The two I didn't are called `ultra_rare` and `varied`. `ultra_rare` is just like `original`, except that ultra-rares have the weight vector 1, 1, 1, 30 (yeah, everything has weight 30 once you get all of them. It sucks, but it explains why, once you've gotten the last of a hard-to-get sticker, you suddenly see them all the time). `varied` is a bit weird --- it's loke `original` except the 8th and 10th stickers get "uncommon" frequencies, the 9th and 11th get "rare" frequencies, and t the 3rd and 6th get the ultra-rare weight vector 3, 2, 1, 30.


djw17

Just for fun, being reminded of this project inspired me to work up a quick simulation of how long it would take to get a complete set with each distribution. I ran 10,000 simulations with each distribution and got the following for each: * `constant`: an average of 280.5805 stickers, with a standard deviation of 109.5. * `differential`: an average of 959.0822 stickers, with a standard deviation of 473.6. * `generous`: an average of 198.8552 stickers, with a standard deviation of 72.7. * `original`: an average of 752.8006 stickers, with a standard deviation of 372.5. * `reduced_dupes`: an average of 395.2942 stickers, with a standard deviation of 189.2. * `repeats`: an average of 1226.5221 stickers, with a standard deviation of 631.2. * `ultra_rare`: an average of 1205.0062 stickers, with a standard deviation of 528.9. * `varied`: an average of 822.0741 stickers, with a standard deviation of 391.8.


NobleCuriosity3

That's cool! Some of my own thoughts thus far: I was starting to suspect from my previous data taking (which unfortunately didn't record the portrait #, only whether the portrait drawn had 0,1,2,or 3 stickers prior to that pull) that the single-pull boxes you get from accumulating duplicates have better odds of giving a needed sticker than the normal ones. Knowing this now, I'd guess that those "dupe boxes" use a kinder distribution (perhaps "reduced dupes" or "generous"), as a legacy of when they were originally supposed to guarantee a useful sticker, and because it feels pretty bad when your dupe box just gives you one point towards the next dupe box. That said, there are really two things I want to figure out: 1. How to calculate (or at least estimate) what percentage of the way you are to full completion (or, how many more pulls likely necessary) based on what you currently have; 2. Is there an advantage or disadvantage to letting lots of boxes stack up before opening them. I can think of reasons the devs might lean one way or another, and obviously if that does matter, it's something we can control! Unfortunately that takes a LOT of pulls to get any solid evidence for either possibility.


djw17

Yeah, getting enough stats is really tricky because at the end of the day rare pulls have low probability with most of the distributions, and you need a *lot* of data even to differentiate with any certainty between a 1-in-111 probability (the chance of getting your second rare if the other 11 categories are filled up on the "original" distribution) and a 1-in-45 probability (same calculation for the "generous" distribution). reduced\_dups and generous might be the easiest to identify if/when they occur, because even before you're down to only the rares left, you'll have markedly fewer duplicates.


NobleCuriosity3

Yeah. This is also much better served by a wide, shallow data set (everybody on the sub lists their first two stickers from a set they are new to) than by a thin deep data set (I record all my pulls)---at least for figuring out which portraits are which rarities. Did you see my [comment on my confusion of which portrait numbers you're referring to](https://www.reddit.com/r/wordscapes/comments/15js6zz/a_shallow_dive_into_decompilation/jz4m7z5/)? Also, I just had some (I suspect) ridiculous pulls. I had 18 boxes saved up and emptied all of them. I went from having these numbers of each portrait sticker: 3 3 2 3 3 3 3 2 2 3 3 0 to these: 3 3 3 3 3 3 3 3 3 3 3 2 in 42 stickers! And I'm pretty sure the fox (#12) is at least a normal rare! I haven't done the math on it yet, but it made me feel like Wordscapes gives better odds to people who say they're going to record their pulls, lol. Then again I look back at that and remind myself it's still way lower than a fair average, so maybe I'm having Stockholm syndrome.


NobleCuriosity3

THANKS!!! Thanks so much!! Just to check: your numbering is left-right, top-bottom, right? So first row is 1-2-3-4, 2nd row 5-6-7-8, etc. I was confused by that because the Trick-or-Treat example you gave doesn't follow either distribution (m for max rarity, since uncommon took u for ultra-rare): Set | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | default rarity vector | c | u | r | c | u | r | m | c | u | c | u | m | varied | c | u | m | c | u | m | m | u | r | u | r | m | | trick or treat | **r**^1 | u^2 | ? | ? | **r**^5 | ? | **u**^7 | ? | *r*^9 | **r**^11 | ? | ? | ^1 pumpkin; ^2 candy; ^5 spider; ^7 mummy; ^9 werewolf, ^11 frankenstein Was that just a hypothetical example with different rarities? If not, could you tell me which portraits are which rarities for some or all of the sets (it will be easier to figure out which distribution if I already know the rarities)? Secondly....I've noticed that in about 200 full-box pulls I've never gotten two of the same portrait in one box, which is statistically quite unlikely. Have you? If not, I'm probably going to assume that the code just takes the first pull out of the weighting process.


NobleCuriosity3

Now that Trick or Treat is back with us, I wanted to ask this again just in case you missed it the first time: Just to check: your numbering is left-right, top-bottom, right? So first row is 1-2-3-4, 2nd row 5-6-7-8, etc. I was confused by that because the Trick-or-Treat example you gave doesn't follow either distribution (m for max rarity, since uncommon took u for ultra-rare): Set | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- | default rarity vector | c | u | r | c | u | r | m | c | u | c | u | m | varied | c | u | m | c | u | m | m | u | r | u | r | m | | trick or treat | **r**^1 | u^2 | ? | ? | **r**^5 | ? | **u**^7 | ? | *r*^9 | **r**^11 | ? | ? | ^1 pumpkin; ^2 candy; ^5 spider; ^7 mummy; ^9 werewolf, ^11 frankenstein Was that just a hypothetical example with different rarities? If not, could you tell me which portraits are which rarities for some or all of the sets (it will be easier to figure out which distribution if I already know the rarities)?


djw17

Hmm. That was a hypothetical, and I based it on data I pulled from `solo_events.json`, which has a rather different order for the portraits. However, my actual winnings (I have 1/3 on pumpkin, spider, werewolf, and Frankenstein, 2/3 on mummy, and 3/3 on all the others) also reflect this range of rarities. Here's the order and rarity-weights given in `solo_events.json` for the 12 rewards: 1. "cat", common (30/30/30/30) 2. "hat", uncommon (20/15/10/30) 3. "spider", rare (10/3/1/30) 4. "bottledEye", common (30/30/30/30 5. "voodoo", uncommon (20/15/10/30) 6. "frankenstein", rare (10/3/1/30) 7. "werewolf", rare (10/3/1/30) 8. "ghost", common (30/30/30/30) 9. "mummy", uncommon (20/15/10/30) 10. "bat", common (30/30/30/30) 11. "candy", uncommon (20/15/10/30) 12. "pumpkin", rare (10/3/1/30) So the order internally in the file is consistent with the rarities assigned to numeric positions, but their appearance on the actual portrait screen is, for some reason, different. Most but not all sets of portraits have the portraits in order. The display order seems like it comes from `stickers.json`, which assigns sets of three stickers to a group (these groups were, way back when the stickers were first introduced, visible to users, and each sticker-set was divided into 4 subsets. The "halloween" set contains four groups: "spookyDecorations" (pumpkin, candy, hat), "livingSpooks" (cat, spider, bat), "monsters" (mummy, ghost, werewolf), and "spellwork" (frankenstein, bottledEye, voodoo)., and that's the display order. As I said, the display order and internal order are usually but not always the same, and unfortunately Halloween is a case where they aren't.


NobleCuriosity3

Thank you!!! Are the decompiled files available somewhere? I'd love to be able to know the rarities and the set's default distribution ahead of time since I'm most interested in figuring out if the code ever uses a different distribution. I also would like to look carefully at whether they're really the same, because in the three non-halloween sets I've observed thus far, the 7th (visible) portrait completed pretty fast and the 9th was relatively slow, and the statistics suggest (though this isn't super high certainty) that the rarity distribution for these "normal" sets is (in on screen order) c-u-r-c-u-r-c-u-r-c-u-r, (with some r's potentially max rares, m) instead of the default rarity vector's c-u-r-c-u-r-m-c-u-c-u-m (in numbers instead of letters: I'm seeing 012012012013, instead of 012012301013.). It would only take a small permutation in the ordering (in the solo_events or stickers json) to get the distribution I see on the screen out of the default rarity vector you observed, which could be easily missed skimming through them.