Update: The Apocalypse April 6, 2018
The end is coming.
Or maybe it's not coming.
It's up to you.
Long term carrot farming has a limit now. A few content fixes (you can't wear saddles as big fuzzy shoes anymore, sorry).
A bunch of little client fixes. The client will now complain if its version mismatches with the server (to help customServer folks notice that an update is available). Speech no longer disappears off the top of the screen. Mac fullscreen mode should be working (try it and see... let me know if it works).
| Update: A Horse with No Name March 31, 2018
Hot desert. Wild horses.
Murder evidence is now more flagrant and more long-lasting. Bows can't be used to kill from off-screen.
A bunch of blocking things that could be used for wall-grief can now be destroyed.
Seeding carrots can now re-seed 7 rows instead of 10.
I spent way too much time on that desert ground texture.
| Update: Name that baby March 30, 2018
An update just went live on the client and the server that does several important things.
First of all, there is a new naming system. If you are Eve, you get to pick a last name (family name) that will be used by all of your future descendants. You can't pick your first name though---you're Eve. If you are a mother, you get to pick a first name for your baby.
Names are set by saying "I am _______" if you are Eve and "You are _______" if you are a mother, when you are holding your baby. You can only name your own baby, and you must be holding it.
For those of you with a mischievous twinkle in your eye, don't worry, I thought of that. The names that you pick are vetted on the server against a list of real first and last names, and the closest match is chosen if you don't pick a real name. You can check out the lists here (careful, they are huge lists):
https://raw.githubusercontent.com/jasonrohrer/OneLife/master/server/firstNames.txt https://raw.githubusercontent.com/jasonrohrer/OneLife/master/server/lastNames.txt
And once you set a name, that's it. It never changes. So chose wisely.
The names are being logged server-side too, and I will likely do something interesting with those logs in the future, like show the name chain in the longest family line, or generate family trees, etc.
Next, a few "bouncing forever" stalled action bugs have been fixed, and a work-around has been put in place so that you'll hopefully never be stuck and die from this bug in the future (a 4-second timeout has been added to the client). Also, extra server logging has been added so that I can catch and fix the remaining cause of this bug.
And one invisible-self-as-baby bug was fixed. There are still likely some invisible-person bugs lingering, however.
| Fan Art March 27, 2018
| RAM-based map caching to reduce server CPU usage March 27, 2018
Summary: It worked.
Profiling has long shown that map reads consume the majority of CPU resources on the server, especially in areas of the map that have a lot of full containers (each container acts as a multiplier on the amount of information that needs to be fetched for a given tile). As people walk around the map, they look at big chunks of the map all at once, and this produces dramatically more load than map writes (which only happen when a player does something). A player usually changes (writes) about one tile per second on average, but as they walk around, they might be looking at hundreds of tiles every few seconds.
I added a hash table for caching recently-read tiles from the map to make reads much less expensive. Since writes are way less frequent, they can still be expensive: changed tiles are both written to the hash table and instantly pushed into the disk-based database. Thus, the map on the disk never lags behind reality.
Additional profiling also found a few more places where I could squeeze out a few redundancies. For example, substantial load was coming from checking whether each item in a container had decayed. But most things in most containers currently don't decay at all. Might as well remember whether a container holds any decaying items or not, so we don't have to keep checking every item every time we look at the container.
The impact on CPU load can be seen above, with the whole graph representing 40 concurrent players on a cluttered map.
|
|
|