My wife was out of town all week, so I was left with the task of being a full-time parent as well as a game developer. I did manage to get a few things done, though.
First, there was the question of Eve frequency, and how that tends to spread civilizations out over time. Eve placement is related to baby placement (we place an Eve instead of a baby under certain conditions), and in thinking about the baby placement code, I realized it had grown into a multi-scarred monster over the years of trying different methods inside and outside the rift. Seemed like a good time to start clean and really think about what baby placement is supposed to accomplish.
Our highest priority in placing a baby should be to make sure there's at least one family in each of the specialist skin tones, and if all of them are already present, bolster the population of the weakest skin tone. After that, our next priority is to bolster the population of the weakest family, and place girl babies when the number of potentially fertile females in a given family gets too low. Of course, we also want to respect each mother's birth cool-down when possible, and also each player's previous-life area bans (so they don't get born to the same family over and over). But we should also be willing to ignore cool-downs and area bans if there are no other mothers available. No one should be able to area ban themselves, through suicide, into being an Eve, and we'd rather overload a mother on cool-down than spawn an Eve.
Finally, we need to make sure that the server is never overloaded with babies relative to the adult population (more than 2/3 babies), nor that a few remaining mothers are overloaded with babies (more than 4 babies per mother).
And of course, through out all of this, we respect curses, never placing a cursed baby near a player who cursed them, ever ever ever. If there's no place for a cursed baby to go, they are sent to donkey town.
With those priorities cleanly stated, we can see that we only place Eves in two situations. First, if there are too many babies for the existing adult population or population of mothers. And second, if we're missing one of the specialist skin tones.
Those cases should be relatively rare, which means that new Eves should be rare.
With the simplified code in place, the behavior is much easier to reason about. If there seem to be too many Eves in the future, I'll be able to figure out exactly why.
Next, the Genetic Fitness leaderboard has clearly been getting out of hand, with top scores climbing into the 500s. In looking closely at the top-scoring players, I found something distressing: many of them had very low average lifespans themselves. By keeping their own lifespans low through regular suicide, the were able to farm points whenever they lived an occasional long life. Furthermore, they were essentially handing out free points to everyone else through these occasional long lives. It was also clear that quantity was trumping quality. When scores are potentially infinite, playing a lot of lives is the only way to reach the top.
Implementing a suggestion from Wondible, we're now back to scores that are asymptotically capped at 60, while still solving the problems that the older capped system had (where you got punished for having a new player as a baby). You now gain points whenever you help an offspring player live longer than expected, but the amount you gain is scaled relative to your own score. Thus, the closer you are to 60, the less you can gain from each offspring, but the more you stand to lose if you actually hurt an offspring and cause them to live a shorter life than we expect for them. You also gain points for yourself when you live longer than expected, with your score approximating how long we expect you to live.
Thus, there's no longer an exploit possible through suicide. The best way to get a very high score is to live very long lives yourself, and never suicide, and help all of your offspring to live as long as possible, too.
Returning to a capped score demands a new formula for mapping score to tool slots, which can be seen in this graph:
As part of this investigation, I made more of the leaderboard data public. You can now click on the top-scoring players and see the recent lives that contributed to their score:
Thus, if another exploitative way to boost score emerges in the future, it will be easier for everyone to study and identify it.
But looking at the data now, we're off to a good start. All of the top-scoring folks have very high average lifespans themselves.
There are also a bunch of little fixes. More stuff can be bottled, and bottles are a bit easier to work with.