Fetching contributors…
Cannot retrieve contributors at this time
2864 lines (1703 sloc) 103 KB
This file only list changes to game code. Changes to content can be found here:
Server Fixes
--Default bare-hand action doesn't apply when holding something if the target
object is a container (we want to insert item into container in that case).
Fixes #64
--Use-on-bare-ground action automatically applies when swapping held with item
on ground, inserting held into container, or swapping held with container.
Bare-hand pickup-style action automatically applies when removing item from a
container or obtaining something new as the result of a swap. This means
that wild piglets and goose, which are containable, but still supposed to go
through a transition when picked up or set down, do not get stuck in their
held state when swapped or put in a container. Fixes #66
--Whoops... fix for multiple sounds playing failed to check for case when
target object doesn't change (exmaple: cooking over hot coals).
Fixes #67, Fixes #68
--Fixed so that client EMOT requests are processed (just like SAY requests)
while a player is moving or while held as a baby.
Fixes jasonrohrer/OneLifeData7#23
Version 153 2018-October-12
--FINALLY found an additional cause of the bouncing-forever bug (stale MOVE
messages from client that arrive at server after a forced-position PU has
been sent to the client). Added a new FORCE ack protocol, where client
responds to the position forced by the server, and any intervening messages
received by the server are ignored. This allows the client and the server
to get back in sync position-wise.
NOTE: Rolling this out will require a special update process.
1. Update servers to latest code, including the current
requireClientForceAck.ini '0' setting.
2. Update client.
3. Check in requireClientForceAck.ini '1' setting for server.
4 Run
--Scene editor allows bigger jumps when paging through scenes.
--Fixed another source of the bouncing-forever bug. PU messages that end moves
weren't move-specific, so several moves that criss-crossed the same point
could all have ending PUs that end at the same spot. With network latency,
an earlier PU could be misinterpreted as ending a later move, thus allowing a
post-move action to be sent to the server and ignored (because for the
server, the later move is still in-progress). Fixed by adding a move
sequence number to the protocol, so we know which move a given PU is ending.
--Related messages sent by server are now grouped by a FRAME message, so that
they can be held by client and played together. So, for example, in cases of
packet delay, a pick up player result will not be displayed before the
corresponding map change client-side. Testing with artificial variable
packet latency was showing all kinds of weird behavior client-side, and all
of this is fixed now.
--Added reportWildBugToUser setting, so we can disable that easily for the
Steam release.
--Wild bug, if there are any remaining causes of it, is now caught and cleared
(or reported) in 5 seconds (10 was a long time to bounce).
--Fixed bug that was causing double-sound play when both target and held
Server Fixes
--The bit of code that was enabling teleporters was dealing with a very narrow
edge case (completely surrounded by blocking objects in all eight
directions), and it threw the item from your hand in order to free you up to
potentially open a door. However, this code did not help at all in larger
rooms with full floors (you'd still get trapped, unable to open the door),
and teleportation was an unintended consequence of this code. Fixed by
allowing held-objects to trigger bare-hand transitions if no other transition
applies. This means you can now open a door when your hands are full, which
means that we don't need to worry about you getting trapped in a room by a
closed door when your hands are full, which means that the code that caused
teleporation can be removed entirely. Sorry Tarr. Fixes #58
--Fixed so that default use-on-bare-ground action for a permanent held object
(example: horse cart), when attempted on a tile that has a swappable object
in it, only is triggered with an explicit DROP action (right-click on
swappable object). Last fix (so that you weren't trapped by objects that
fell out of your tipped horse cart) was triggered even by regular-click on
the swappable object, which resulted in you getting off the horse
unintentionally whenever you clicked on a swappable object. Now you have to
--Fixed leak of absolute birth location through invalid held origin coordinates.
--Got rid of deprecated MOVE-to-jump-out-of-arms semantics. Now only a real
JUMP message will cause a baby to jump out, clearing up an ambiguity with
wayward MOVE messages while held, which caused a bouncing-forever bug.
--When a map container shrinks and contents needs to be scattered, a search is
conducted in an infinite square spiral until an empty spot is found for each
previously-contained item. This new scanning code is also much more efficent
(minimum number of map look-ups) compared to old expanding-radius code (which
stopped after radius 2, causing remaining items to vanish). Fixes #62
--findClosestEmptyMapSpot now uses same centralized spiral code. Got rid of
code that merges graves (if someone standing on an existing grave when they
die). Now a dead person always makes a new grave (if there is an empty spot
in a 100-step spiral around the place where they died).
Version 151 2018-October-8
--Loading Map process used to stall if a needed file was missing. Now it
displays an error message to the user. This will hopefully help with the
behavior described in jasonrohrer/OneLifeData7#22
Server Fixes
--New constant heat-map computing code was causing high CPU. We were
recomputing heat maps for 10 players per steps, but a quick sample of
server1's logs showed 30 server steps per second with an 80-player load.
Thus, we were recomputing heat maps for 300 players per second, which is way
too frequently. Turned setting down to 2 players updated per step, or 30 per
second (all 80 players updated over the course of three seconds, which is
fine). Also eliminated extra heat map recomputation for players that are
receiving a player update message.
--Held baby's temp matches position of moving holding adult.
--Pattern code now applies to transitions that have only one pattern object, as
long as it's an actor or target in the transition. The dog/puppy decay
patterns now work correctly. Fixes jasonrohrer/OneLifeData7#20
--Server setting forceAllPlayersEve.ini for improved control when testing.
--Fixed bug where partially used objects would get flaged as writable
(allowing you to leave written messages on them).
--Fixed case of being trapped while holding a permanent object (like a tipped
horse cart) and surrounded. Any permanent held object that has a use-on-
bare-ground transition defined for dropping it can now be swapped with a
non-permanent object on the ground.
Version 149 2018-October-5
--Scene editor supports emotion displays.
--Fixed so that clothing doesn't blush.
--Fixed so that clicking face never accidently puts food in pocket of clothing,
even if clothing extends up under face. Clicking face makes you eat (this
interaction was potentially very frustrating before, especially when young
and wearing an apron).
--Major improvements to the heat system. Now the heat simulation computes the
heat of the environment around you periodically, whether or not you are
walking around, and your personal temperature slowly advances toward this
environmental heat value. No more sudden jumps in temperature. It should
generally feel more intuitive than it used to.
--Only past 20 recorded game files are kept by default, and rest are deleted,
freeing up disk space (put -1 in settings/keepPastRecordings.ini to keep them
all and override this new behavior).
Server Fixes
--Fixed glitch in long-line-position saving at server shutdown, where tutorial
players could potentially be treated as the longest line (thus putting the
next Eve spawn location way out by the tutorial). Thanks Christoffer Baar.
--Fixed server crash when player joins tutorial while there are no fertile
mothers around but young babies around.
Version 147 2018-September-28
--Moving categories up and down on a member object (to alter which category
takes precedence) was suppored in the editor, but not being saved to disk in
category bank. Disabled this editor functionality for now (eventually, may
implement saving reverse category maps, with order, in the category bank, but
it's pretty complicated, and hasn't been needed so far.
--Moving member objects up and down in a category IS actually useful (for
pattern categories, where order of members matter), and it's possible to save
this to disk in current category bank file structure, so added this
functionality to editor.
--Finally fixed the root cause of the goose-stump and bear cave bug. NSEW
moves used to be fixed distance (instead of variable, looking for a possible
space to land). This is necessary for carts and other fixed-movment things.
However, all of those things move a single step NSEW. So, in that case, we
shouldn't try moving farther if our move is blocked. However, we can make
the goose and bear move 2 steps south, and then the code can treat them
differently (searching for a free space for them to move to).
--More fixes for stump/cave bug. Now any applicable transition is applied for
an object that is stuck and can't move, but was supposed to leave something
behind (bear-on-cave transition, or goose-on-stump transtion). No more
disappearing stump or cave no matter what.
--Support for new emot protocol and emotion display in client.
Server Fixes
--Fixed grave detection code so that Murder Grave is counted as a grave, so
you can't insert things into it.
--Centralized curse-tracking server shared by all servers. Getting cursed on
one server means you are cursed on all servers.
--Fixed a potential crash if numContained in map set > 0, but contained ID is 0.
--Fixed so that red-head race isn't a attractor point. Any race with less than
four members automatically has babies in a neighboring race. For now, until
there are more red-heads, the red-head will not have red-headded babies.
--Old code that checked for whether you were surrouned by blocking objects
while holding something, which threw the object from your hand to give you a
chance to untrap yourself, did not handle permanent held objects, nor did it
account for diagonal walking when checking for surrounded status (only NSEW).
This is what enabled teleporters, and also a murder-weapon-dropping exploit.
This has all been fixed. Teleportation will still happen, but only if you
are truly surrounded and not holding something permanent.
Version 140 2018-September-17
--Fixed bug in transition editor that was labeling produces trans as from
pattern by mistake.
--Added second object picker to transition editor for convenience (can
juggle more than one search).
--Patterns no longer can replace explicitly-authored transitions.
Server Fixes
--Fixed curse-note exploit (reading a written phrase aloud no longer has same
effect as speaking it yourself directly, for naming or cursing).
Version 138 2018-September-14
--Fixed bug in pattern transition generation. Pattern should only apply if one
of actor or target have pattern apply (not in case where only newActor or
newTarget have pattern apply). Example: last puppy taken from German
Shepherd with Puppies makes a German Shepherd. German Shepherd is a pattern,
but German Shepherd with Puppies is not. Thus, we shouldn't generate a
[German Shepherd with Puppies] -> [Adult Dog] transition for each adult dog
in the German Shepherd pattern (the result is a single transition to an
adult Chihuaha, the last adult dog on the pattern list).
Server Fixes
--Fixed a potential server crash when triplets or quadruplets start the
tutorial together.
--Improved click UI when holding food. Right-click on backpack swaps food
with bottom item in backpack. Left-click puts food into backpack.
Left-click self (not backpack) to consume food. Same for other clothing
(like apron) with container slots. This might make eating a bit harder in
some cases (when clothing with container slots covers most of your
character's body).
--Curse timeout (when record discarded) increased from 48 to 96 hours.
--Curse threshold (when you are born marked) lowered to 8 points.
--Curse-marked players are now born into a distant location as an Eve or as the
baby of another curse-marked player. Curse-marked players are exiled
together until they live-off their curse points.
Version 137 2018-September-8
--Fixed a new double-free bug that causes a potential crash on chat. Thanks
Sophie Van L.
Version 136 2018-September-7
--Fixed scene editor animation speed of people holding speedMult objects.
--Fixed handling of leading/trailing spaces when typing spoken text. A hidden
leading space could spoil your baby naming phrase. Thanks Jacek T.
--Fixed a bouncing-forever bug that was caused by ambiguity of jump-out-of-arms
MOVE message (if messages are interleaved just right, the server can
interpret this MOVE as a real move instead of a jump-out-of-arms action).
Added new JUMP message to eliminate this ambiguity. Thanks Jacek T.
--Fixed a few major glitches in hold-mouse-to-keep-moving. Thanks Jacek T.
--Bouncing forever bug catcher now asks users to send recorded game file too.
--Fixed invalid memory read when generating hint for use-on-bare-ground
--Fixed spelling of eighth cousin. Thanks Trick.
--Flying object on pick-up now snaps into hand when you turn to walk away
(instead of floating behind you magically, trying to catch up with you).
Server Fixes
--Holding age restrictions now correctly apply to what you end up holding after
healing someone (babies can no longer remove arrows from wounded people).
--Support for writing attached to objects through new map metadata database.
--Fixed a bunch of server cases that weren't calling hideIDForClient before
sending object ID to client, which was causing a client-side crash when
metadata IDs were not being stripped out.
--Say limit based on age only enforced when reading if you are < 10 years old.
--Fixed bug in dataBundle script that caused old scenes to be deleted every
--Server now closes server socket immediately at start of shutdown process.
Before, it would accept connections from clients and the reflector and then
just hang there. Now these connections are insta-rejected if server is in
the process of shutting down.
--Fixed so that right-clicking worn backpack swaps held with bottom item in
pack. Works the same when worn or on the ground now.
--Can no longer dress or swap clothing on elderly (was allowing theft of
elderly backpacks).
Version 130 2018-August-17
--Fixed GUI layout spacing in scene editor.
--Fixed glitch in moving objects that consume destination object (visual
duplication of objects) if client falls behind server moves.
--Editor support for inverting scanned sprites (for making white smoke).
--Support for certain sprite layers being drawn behind player (example:
tracks under cart).
--Floors can have speed modifiers (roads make you move faster, for example),
but they are only applied by client and server if entire path is on the same
--Auto-follow rideable floors (aka roads).
Server Fixes
--Added a few more MySQL indexes to speed up front page queries in lineage
server. One of these queries used to take 1.2 seconds, and now takes
0.00079350 seconds, or a 1500x speedup. Front page of family tree browser
now loads quickly.
--Support for skipping look-time based cleanup for profiling purposes.
--Support for skipping removed object cleanup and use dummy cleanup (to speed
up profiling cycle).
--Profiler found that looking up container cells in map, when doing
lookAtRegion operation, was a huge hotspot. All we needed was a count of
how many contained items are present. We don't need a db lookup for that.
Now storing these in a hash table. This results in a 91x speedup for the
lookAtMapRegion call.
--We can safely assume ID=0 tiles never decay, greatly improving performcance
of checkDecayObject, which is called a lot when people are moving around the
--Profiler found that tokenizeString, which is used to parse client messages,
consumes a resonable amount of CPU. Wrote optimzed version for 2x speedup.
--Switched to a 7x faster in-place tokenizeString implementation for parsing
MOVE messages.
--Profiler found sscanf hotspot in message parsing code. Replaced with own
task-specific implementation for a 4x speedup.
--Next profiler hotspot is dbLookTimePut, which is being called in every dbGet
call, even if dbGet result is cached in RAM. We're constantly touching the
lookTime database. But look times don't need to be so fine-grained. +/- 1
hour precision is fine. Changed lookTime db coordinates to be x/100,y/100
(one time for every chunk of 100x100 tiles), and changed to register new look
times only when map chunks are fetched (registering the four corners of the
chunk only).
--Next profiler hotspot: RAM caching around time.db.
--Next profiler hotspot: isMapSpotBlocking, which is called for each spot on
each move path submitted. RAM caching results, and clearing cache record
when map cell changes.
--Profiler found that printf was actually using quite a bit of CPU. Removed
all printf statements from MOVE message processing. This is the most common
message type, and processing it involved the most print statements.
--Support for flushing look times on first server startup to avoid mismatch
errors between old look time format, which was indexed as x,y, and new
format, which is indexed as x/100, y/100. On first startup after this
change, we treat all map cells as not stale.
--Profiler hotspot: getChunkMessage is checking for contained items even for
empty map cells or cells that have no container slots.
--Profiler hotspot: the existence of tutorial maps in biome database causes
biome to be looked up elsewhere on map. We can track max/min x,y locations
where biomes exist before looking in the biome database.
--Switched over to new, custom-coded linearDB as a replacement for stackDB.
Huge performance gains.
--Disabled nightly server map backup operation. Map databases have gotten so
big that this operation, which must interrupt server activity for safety, now
takes 10 seconds on server1. These map backups have never been needed and
take up substantial disk space.
--LinearDB3 is in place. Inserts are much faster. Other operations are faster
than any previous database engine.
--Profiler found 5M+ vector operations happening for each tutorial map insert
(because we're checking for map changes). Disabled map change tracking
during tutorial map insert. This could cause some strange behavior if an
escaped tutorial player walks into a new player's tutorial area at the moment
of loading, but there's going to be strange behavior there no matter what.
--Split tutorial map loading up into 5-ms steps that are interleaved with other
server processing steps. Server no longer stalls for 1+ second while a
tutorial map loads into a full database. Tutorial players may have to wait
a tiny bit longer, but that's okay.
--Index added to name colum of lineage server lives database to make name
searches faster.
--Lineage server now only supports name prefixes in character name searches
(so 'Jon' matches 'Jonathan Lucky' but 'Lucky' does not match it). Turned
out that full wildcard searches involved a full table scan and had gotten
intolerably slow, even after the index for names was added.
--Player cap up to 200 on all servers, preparing to roll out new lineardb3 to
--Fixed major high CPU spike issue due to uninitialized variable.
Thanks Jincheng L.
--Fixed server crash due to a typo.
--Fixed bug in adding transitions with a move distance.
--Objects that move N/S/E/W keep moving even when out of view, permitting
long-distance rails to function.
--Fixed potential c-standard violation in having same file fopen-ed multiple
times in parallel during tutorial map loading.
--Fixed handling of transitions where object moves onto bare ground.
--Apply bare ground transition, if any, when object blocked from moving.
--NSEW moves never move farther than specified, even if ground object present.
--Fixed a bug in the loop over possible spots to move to (don't need i=0).
--Eve placement adjusted to bring Eves twice as close together as before.
Version 126 2018-July-18
--Trim whitespace from start and end of twin codes entered by user.
Hidden whitespace could cause a mismatch.
--Wow. Twin implementation in client is totally broken, and not sending twin
code to reflector at all. Anyone who successfully played with twins so far
was just lucky (both got sent to the same server by random chance).
--MENU button on rebirth choice page to return to login screen.
--Borderless mode on settings page.
--More info in fps mismatch error message.
--Custom server can now be configured on SETTINGS page.
--Fixed wayward KEEP_ALIVE message from client if player waits a while before
pressing LOGIN button. Fixed lots of other little connection glitches, and
made the connection phases more clear (connecting vs waiting to be born vs
loading map).
--Custom server status shown on connection page if set. No more forgetting
that it's set and wondering why you can't connect with a friend.
--Fixed bug in reopening connection after signal set to leave LivingLifePage.
This was causing a bad socket to remain open, which could cause subsequent
logins to fail (usually after pressing x to leave twin waiting screen).
Server Fixes
--Eve location reususe after server restart upped to 10 chances instead of 3.
Also made it a setting that can be changed at runtime.
--Proper formatting of roman numeral suffixes in family tree browser.
--Added tracking of which names have suffix already in server to avoid
mistakenly treating suffix like a last name.
Version 125 2018-July-13
--Added client source code version match check in platform build scripts
(to prevent problem that happened during release of v123).
--Fixed invisible babies, bouncing forever, duplicated objects, and all sorts
of other problems caused when a player carries a baby out of range (so that
updates aren't received about them anymore), and then a different player
carries the same baby back into range. Messages about the held baby were
being queued by the client, since the client was still waiting for the first
player to drop the baby, but the drop happened out of range.
--Fixed so that mouse-over works correctly for moving people (you used to have
to mouse over the next tile on their path, but now you can mouse over their
exact position mid-move). This also makes it much easier to kill a moving
player that is crossing over thing on the ground.
--Added player ID parameter to KILL, BABY, and UBABY client messages to specify
a specific player that the client clicked on (no more killing a bystander who
was standing in the same tile as the person you actually clicked on, and no
more grabbing the wrong baby).
--Players have always been drawn in age order (youngest in front), so now
mouse-over works the same way. This worked by accident most of the time,
because most people enter the game in age order, but was broken for an Eve
that entered later than a baby (she would capture mouse clicks of the baby
she was standing visually behind).
--TEMP LOGIN was a confusing feature. Added CLEAR ACCOUNT button instead.
--Twin system. Players can share a code friends and get born as identical
twins, triplets, or quadruplets.
Server Fixes
--Server logs curses cast and curse score changes. These logs are backed up
along with lifeLogs.
--Web export of curse logs along with life logs.
--Curse system saves state between runs of given server. Thus, cursed status
isn't reset when server restarts (no more free pass to griefers right before
an update).
Version 123 2018-July-10
--Fixed memory leak and uninitialized variable.
--Fixed bad memory access in audio callback when shutting down.
--Fixed memory leak in update process.
Windows base update: Version 65c 2018-July-10
--Fixed slow newline replacement code (as part of update process) that was
getting bogged down when processing text files with many lines.
Server Fixes
--Anyone can name a held baby, even adoptive parents. They get the last name
of their adoptive parent. An unnamed person who is older than baby age can
be named by anyone nearby, but they will never have a last name.
--If a name isn't unique as far as the curse system is concerned, a roman
numeral suffix (II, III, IV, V, etc.) is automatically added.
--Data-only diff bundle generation script now skips scenes. They never should
have been included, and the tutorial map scene was BIG (26,000 lines).
Version 122 2018-July-6
--Back to updating hard-coded version number with every client update. Not
sure what I was thinking there. Saw a version mismatched and found the
wrong reason for it.
Version 121 2018-July-6
--Fixed newly introduced bug in sound volumes for positioned sound source when
far enough away that volume equation becomes negative (was causing all kinds
of sound glitches).
--Responds to new SD (FORCED_SHUTDOWN) message from server.
--Fixed bug that prevented body clothing from being removed.
Thanks Midget Maker.
Server Fixes
--Added new forcedShutdown trigger for server, to cleanly shut down server,
and send notice to connected clients, without waiting for everyone to live
out their lives. Need this for emergencies sometimes, and sending SIGSTP to
the server, unlike ctrl-z, wasn't working.
Version 119 2018-July-6
--Fixed glitch when picked up and put down by an adult who still has messages
pending (thanks Jacek T). Also handled case where two adults are passing
baby back and forth. It's still a little jumpy if the baby's client has
delay, but at least the end result is correct now.
--Fixed bug where player can still try to click on baby's old ground location
while the baby is held by someone else.
--NONE RELEVANT if the filter matches, but no transitions are relevant, but
NO MATCH if the filter simply doesn't match anything.
--Fixed so that you can't click on arm by accident when trying to click on
tunic, bottom, or backpack clothing. Arm should be unclickable if you are
wearing clothes.
--Curse system. Everyone starts with one curse token and zero curse points.
CURSE JANE SMITH curses Jane Smith, giving her one curse point, and consuming
the sayer's curse token. Sayer gets new curse token after two hours of play.
One curse point removed after each hour of play. A baby with ten or more
curse points is born marked. A marked person cannot be cursed further until
they are born unmarked later. Curse token displayed near temp meter.
--Fixed several bugs in UI paper slip animations and clearing when not
operating at full frame rate.
--Home arrow shows tile distance if target is more than 1000 tiles away.
Useful for judging whether distant monuments are worth the trip.
Server Fixes
--Fixed typo in computation of stagger time for player who is wounded multiple
times. Fixes #41. Thanks UncleGus.
--Added YOU'RE and YOURE and I'M and IM as naming phrases, after seeing that in
the Life of Bumpy video.
--Fixed so that grave doesn't disappear if you are standing on a cross of
permanent objects when you die. Server now searches in a spiral of 100
tiles around your current location to find an empty spot for your grave.
--Max players back down to 140 from 200, so load balancing kicks in at 70
players instead of at 100 players.
--Fixed some crashes when baby marked as held by player that is gone.
--Fixed order of naming phrases so that prefixes of other phrases come last.
Version 118 2018-June-29
--Support for masked speech output in client (useful for making gifs).
--Support for tutorial trigger on client login, and server loading a tutorial
map out in the unused wilderness and placing player at start of the tutorial.
--Scene editor support for copy/paste of 6x6 area. Fixed memory leak.
--New crafting hint filter system. Say /hatchet to show only hints relevant to
making a hatchet. Say / by itself to clear the filter.
--Time played in other lines before returning to a line pushed up to 1.5 hours.
--People who kill, regardless of their time in a line (even less than a half
hour) are given the full lineage ban, just like murder victims. Killing
counts as fully participating in a line. This prevents grief-killers from
suiciding before 30 minutes and coming right back.
--TEMP LOGIN button hidden along with login button when checking for FPS
mismatch (otherwise, someone might press TEMP LOGIN upon not seeing LOGIN at
--Typo in objectBank. Fixes #39. Good catch UncleGus.
--Fixed so that you can never click on a held baby by clicking its last ground
position (could kill a held baby by accident when trying to set a weapon
down where they were standing before pick-up).
Version 115 2018-June-22
--Babies now carry their wounds with them when they are picked up, instead of
discarding them.
Server Fixes:
--Deadly map spots (attacking animals) put on cooldown for 10 seconds after an
attack to prevent multiple repeat attacks on the same person before they
realize what has happened.
--Fixed glitch in generation of transitions that apply to every use dummy of
an actor.
--Fixed glitch in biome database at position 0,0.
Version 112 2018-June-21
--Fixed category editor to let a category be picked on the parent side that is
also a child of another category (pattern categories can be part of other
categories now, like pink rose seeds, which are a pattern for other rose
seeds, but also in the small trash category).
--Fixed search for limbs in objects that have no hands or feet.
--Fixed so that you can mouse-over and click on a person standing behind a tree.
--Hunger slips (and chimes) shown at 8 and 4 instead of 6 and 3 food remaining.
--Mousing over wounded self now describes the wound.
--Support for clicking on a player with a curing object to heal a wound.
Server Fixes:
--Keeping server database backups 7 days instead of 14.
--Fixed bug in setting decay ETA for newly held object.
--Rework lineage ban. Now it kicks in after you've lived 30 minutes total in a
given family line, and gets cleared when you've lived at least 60 minutes
total in other family lines. Instantly kicks in if you get murdered,
regardless of how long you lived in that line so far. Has very little
impact on dying babies, because they clock so little time before dying.
Thus, new players who die young a lot, and players who are abandonned as
babies, are not blocked from getting reborn in the same village.
--Animal attacks now can set a wound on a player and put them into a dying
stagger just like murder. No more instant death (except from hunger and old
--Getting attacked again while still wounded causes remaining stagger time to
be cut in half.
--With new healing in place, no longer need to delay hunger when wounded.
Version 110 2018-June-14
--Transition editor now includes category transitions in list of 'uses'
transitions at the bottom of the screen (for example, looking at a leaf shows
transitions that use a leaf and transitions for the small trash category).
--Fixed animation glitches when a moving object transitions from ground to
moving. Was preserving frozenRotFrameCount, and setting ground frame count
back to 0 each time, even when we didn't need to be (when moving object had
no rotating parts). (Example: blood squirting from goose neck.)
--Fixed so that d1 use dummy keeps its creation sound even if creation sound
marked initial only. This sound will play during reverse use (example:
adding a burrito to an empty plate).
--Transition editor shows color-coded transitions from categories and patterns
in both produced by and produces list.
--New yummy food multiplier system. After eating two different foods, you get
a yum bonus of 1 food and your yum multiplier goes up to 1. With each unique
food that you eat, your yum multiplier goes up by one, and this multiplier is
added to your yum bonus. When you finally repeat a food, your yum multiplier
goes back to 0. Yum bonus functions as extra food units above and beyond
your normal food bar. By chaining many unique foods, the yum multiplier and
resulting yum bonuses can be very large. Holding a food in your hand tells
you whether it is yummy or meh. Sorry about the word 'yum', but there really
isn't any other short word for that concept except for nom, which is way too
internet. And meh? I don't think there's any other word for that. It's
kinda meh, though. And yes, Jere, you'll still get the bonus if you save
your buttered roll for last.
Server Fixes:
--Added work-around for non-clean shutdown that can leave dummy objects in map
that may be interpreted as new category objects after restart. Category
objects removed from map during map cleaning process.
--Added cron job for game servers that clears bug log files older than four
days to conserve disk space.
--Death stagger time up to 40 seconds instead of 20.
--Food decrement no longer happens during death stagger. You won't starve to
death after being mortally wounded.
--Fixed server crash when held tattered backpack decays to nothing.
Version 107 2018-June-8
--No longer using ancestor test to determine if creation sound should play for
objects marked with creationSoundInitialOnly. Exclusively using sprite
subset test.
--Was waiting 166ms for bouncing animation to start a bit before sending our
action message. This prevents weird insta-response on fast connections
(where we get the grabbed item in our hand even before really moving toward
it). However, on slow connections, this 166ms adds to perceived latency,
because we still need to wait for the message round trip after that. Now we
measure most recent round trip time and use it to decrease this bouncing
start time before sending our action message. If round trip is slow enough
(>166ms), we don't need to wait at all before sending our action message to
the server. If round trip time is 80 ms, for example, we'd only wait/bounce
for 86ms before sending our message.
--Added support for rotated sprites when baking in object editor.
Server Fixes:
--Fixed so that useChance applies in last transition back to parent object
(example: refilling last step of pond should have 1/5 chance of taking pond
to full state, when before it had 1/1 chance, allowing for an infinite water
exploit). Thanks Eve, YAHG, and Rebel.
--Support for NOT dying when riding over a deadly object (like a rattlesnake)
on a vehicle (like a horse), but support for transitions to the ridden object
(dead horse or tipped horse cart).
--Fixed so that creation sound not played for items dropped on the ground when
held container shrinks.
--Fixed heldTransitionSourceID after use-on-ground transitions.
Version 105 2018-June-1
--Fixed crash in transition bank pattern code. Thanks Enforcerke and Jookia.
--Fixed spurious client BUG reports by resetting timer when we receive a
move-done message in the middle of waiting for a move-and-do cycle to
complete. Thanks Sarah V.
--Fixed bouncing-forever bug caused by path truncation. Thanks Malo T.
Version 102 2018-May-31
--Fixed scene editor to display behind floor hugging objects correctly.
--Fixed bug in client sending multiple jump-out-of-arms move messages due to
rapid clickly by held-baby-player, resulting in the server registering false
moves after the jump-out-of-arms, and a bouncing-forever bug as a result.
Thanks Gabriel G.
--Fixed overlap of foot bar with gui in object editor.
--Widget for Using Sound visible for all objects in object editor.
--Fixed sound-doubling issues (dumping water into empty pond, grabbing
second-to-last stone from stone pile).
--Fixed so that comment (after # text) is hidden from eaten food description.
--Fixed code for generic transition filling to handle case where an object has
both regular and last use generic transition defined.
Server Fixes:
--Fixed one source of bouncing-forever bug where baby move arrives in same
server step as parent's pick-up action. Thanks Lynne C.
Version 100 2018-May-25
--Support for marking categories as patterns.
--Support for auto-generated transitions based on new pattern categories.
Example: define transition web for pink roses, and then set the pink rose
objects as the pattern for all white and red rose objects (seeds, sprouts,
etc.) Wherever a transition involves at least two objects that are both part
of a pattern of the same size, the transition is replicated for all the other
members of that pattern. Unlike other categories, which never appear in the
game and are just abstract placeholders to be filled in by member objects,
pattern categories have a real object as their parent (example: pink rose
seed, with children red and white rose seeds).
Version 99 2018-May-24
--Label for a grave of a known person now moves with bone pile.
--Fixed editor use chance and sim GUI elements disappearing with object picker
--Fixed so that non-permanent objects on ground are drawn in front of permanent
objects. Thus, hand cart handle sticks out in front of well.
--Fixed so that walls drawn in front of other tiles in row, improving overlaps
for trees, carts, and other overhanging objects.
--Client detects largest message time gaps between server messages to prevent
it from sending BUG report messages to server during true network outages.
--Fixed wayward chat sheet pop-up. Thanks Yuyu.
--Client now informs player when BUG report sent to server, and asks them to
email stdout.txt, if stdout.txt exists.
--Face portrait output in editor fixed to clear picked layer first (or else
picked layer appears in every age portrait).
Server Fixes:
--Bug reports off again until better client-side differentiation in place.
--log.txt backed up and cleared every 24 hours instead of 48 to save disk space.
--Fixed bugs in lineage server triggered by playerIDs that are the same between
--Fixed player invisibility bug. Thanks Yuyu.
--Fixed various edge cases in random family member picking code.
Version 97 2018-May-18
--Adding missing case to used object transition generation. Thank Fernando GBR.
--Fixed bug in the way time values were recorded in recordedGames.
--Fixed bugs in wall hugging code for floors that was screwing up multi-layer
floors that used multiplicative blending (ancient floors).
--Undisturbed grave now marked with known person's name and relationship.
Server Fixes:
--Fixed bug in lineage server that caused death to not get logged if last words
contained a single quote mark.
--Added Daily and Weekly long lines to family tree browser.
--Family tree view now shows most ancient ancestor at top.
--More efficient relation computation for shallow relations in deep trees.
Cut-off of 25 generations when computing relations in deep trees (beyond
that, people become Distant Relatives) because it was getting too slow to
--Fixed family tree to show '1 second' instead of '1 seconds'.
--Fixed so that murdered person's last words shown correctly in family tree,
and so that a murdered person who starves to death before dying isn't logged
--Server now sends non-human death-source ID to lineage server (snake, etc).
--Lineage server displays a variety of death reasons.
--Lineage server tracks and displays deepest descendant generation at bottom
of family tree display.
--Added character_dump api call to lineage server.
--Fixed lineage server behavior on IDs that don't exist.
--Turned on bug reporting again, trying to catch bouncing lag bug.
--Fixed bug in out-of-range player PO message.
--Added extra server logging about player update messages to catch bouncing
lag bug.
--Clicking on killer's name shows their relationship to you in family tree.
--Family tree Email search now only matches exact email addresses, to thwart
brute-force email harvesting through trial and error. Thanks Brian R.
Version 95 2018-May-11
--Fixed some transition hints. New transition system leaves some lastUse
transtions in place that aren't used by server. Client shouldn't show these
as redundant hints. Client was showing NOTHING as result in case where actor
was used up and target stayed the same (adding stone to a pile). Now shows
same target as result instead of NOTHING.
--Added display of current slot position in object editor.
--Fixed so that arrow keys in text field do not change rotation anchor in
animation editor.
--Editor saving face portaits throughout life for use in family tree viewer.
--Client now displays Big and Little words for siblings, and also detects twin
status (including identical).
--Client shows A,B,C,...AA, AB,... labels for varible objects and ? label for
base object (like for locks after restart).
Server Fixes:
--Whoops, forgot to commit/push changes to transition bank. Bug city on live
--Back to registering lookTime whenever non-zero map or floor values are gotten
from database, instead of just registering lookTimes on map changes. Only
looking on map change was an optimization that was necessary with the old
database engine, but hopefully the new engine can handle it. Also, we are no
longer tracking look times for bare ground, so that should help a lot too.
This will prevent walls and other untouched but seen-in-the-last-24-hours
objects from disappeariing on server restart.
--Temporarily pushed no-look cull time on server restart up to 1 week to work
around the lookTime issue in the next restart (which will be needed to make
the above fix to lookTimes live). I.e., if it was added to the map in the
last week, it will not be culled in the next server restart.
--Fixed generation of transitions with a minUseFractions (a well can only be
built from a full stone pile, for example).
--Server filters SAY messages according to allowed character list.
--On server shutdown, variable objects (keys and locks) now revert to their
parent form instead of being cleared. All keys open all locks after server
restart. Combined with new transitions that allow door locks to be removed
and turned back into lock blanks, this allows all doors to be re-keyed after
a server reset, meaning that new family lines are not locked out.
--Server now adjusts all client-sent coordinates relative to player's birth
position in world. No more absolute coordinates.
--Fixed bug that caused some initial new-baby PLAYER_UPDATE (PU) messages to
not be sent, causing the following lineage message for that new baby to be
ignored by client (leading to NO RELATION for some actually-related babies).
--Added same-lineage-birth blocking for a time that is based on the size of the
server population. Below 10 players, there is no same-lineage blocking.
From 11 to 50 players, it rises linearly up to the full cooldown time, which
is currently 3 hours, and may increase in the future.
--Server now sends lineage info to lineageServer upon player death.
--Baby inherits the last-heard monument call from parent at 0.5 years old.
Thus, trips to a monument can be trans-generational (parent can die along
the way and baby can continue).
--Support for categories in cross-transitions (where actor ends up on ground as
newTarget or target ends up in hand as newActor).
--Server now hides ID of locked objects from the client by replacing it with
the parent ID for that variable object.
Version 90 2018-May-3
--Fixed scene editor to allow replacement of shoes.
--Fixed so that empty slots don't capture mouse-over.
--Fixed stuck hint sheet from last object when you pick up an object that has
no transitions.
Server Fixes:
--Fixed server crash when worn clothing decays down to nothing.
--Fixed server launch script to use login shell. Core dumps for crashes.
--Fixed getRandomDeathMarker so that it's actually random and doesn't walk
through the full object list each call (thanks TyrantNomad).
--Fixed memory leak when held contained items decay to leave an empty container.
--Fixed server crash when a held container decays to have fewer slots, but the
container wasn't full.
--If a held object changes into something that would decay in the same time to
the same target, the decay ETA is preserved (example: filling backpack with
soil does not reset decay time to tattered backpack, because both regular and
soil-filled backpack decay to tattered in the same time).
--New sprial Eve placement algorithm.
--Fixed generation of transitions that contain two useCount objects by
iterating through list twice to generate all possible combinations.
--Slot size and containable size now specified as a float instead of an int.
We can have things smaller than slot size 1 now (for signs).
--Fixed generation of reverse-use transitions (fixes last stone in stone pile
and empty berry bush regrowing).
--Fixed so that shrinking clothing container (like backpack) results in items
falling on the ground instead of disappearing.
--Support for useChance in objects that have multiple uses. This is the chance
that using the object will take it to its next use state. A tool that has 4
uses, and 0.1 useChance, will be used 40 times on average, but a bare minimum
of 4 times in the worst case. This allows for tools that have 100s of uses,
on average, without straining the underlying implementation.
--Fixed mapping of uses through target when actor experiences last use, and
through actor when target experiences last use.
--Fixed incorrect handling of last reverse use transitions. Fixed variable
transitions to work with new tool use system.
--Fixed server crash when held container decays down to nothing.
--No need for constant PO messages about all out-of-range players. Instead,
only send POs for players that are between 32 and 64 away.
--Support for noUse flag on transitions for actor and target, indicating that
this target shouldn't cause use count to decrement (example: picking feather
from pond shouldn't cause pond to drain).
--Fixed transitions where actor and target are same category so that any pair
of objects from that category work on eachother. Also fixed to preserve
actor/target use chance through category transitions and generic use
transitions. Fixes jasonrohrer/OneLifeData7#7
--Support for containers with locked slots (nothing can be added or removed).
--Server log.txt backup cycle two days instead of three. Logs were too big.
Version 78 2018-April-20
--Fixed spread of appearing use sprites by rounding instead of flooring. If
there was only one sprite, it would appear at 7/8 uses. Now it appears at
4/8 uses.
--Allow creation sound to play for held item when it changes even if the
on-ground target object changes too (example: tool breaking when chopping
--Fixed so that usingSound will play correctly when an on-the-ground object
changes (example: dumping water into goose pond). This was broken in v66
with the fix to sound for swapping contained items (thanks Uncle Gus).
--Fixed remap random source to seed with playerID.
--Auto-generation of variable objects triggered by $N in description, which
generates N versions of that object and its transitions automatically.
Example: Key $10 generates 10 types of keys and Locked Door $10 generates
matching doors.
Server Fixes:
--Fixed to handle dropping of contained objects when held container shrinks.
--Force drop when non-permanent held object decays into a permanent.
--Fixed bug in decaying, shrinking sub container.
--If numUses of actor and newTarget matches, and newActor doesn't have uses,
then the used status of the actor is preserved in the newTarget.
--If numUses of target and newActor matches, and actor doesn't have uses, then
the used status of the target is preserved in the newActor and decremented
(counts as a use of the actor).
--Substitution of last-use of actor when used target produces an over-used
--Uses left can be decremente if actor and new actor have the same number of
uses (example: dumping shovel of dung uses shovel once). Fixed some
rounding errors in use transfer.
--Can no longer feed other people remap-trigger foods.
--Easier to kill a moving player. Spots before and after them on their
current path are considered as valid targets.
--New baby distribution algorithm. Possible mothers are weighted by how close
they are to ideal temperature instead of how full their food bars are.
Version 77 2018-April-17
--Added skipFPSMeasure.ini setting that can be used to disable FPS check on
login screen.
--Fixed so that monumentCall sound is always loaded, even if monument is far
away, so that it can play when monumentCall is triggered. People weren't
actually hearing it from far away. Oops.
--Fixed speed calculation for various paper slide-in animations when target
frame rate not 60.
--On version mismatch, a button to disable custom server is shown.
--Client now counts any later server version as a mismatch, but allows earlier
server versions if that version matches our client data version (to allow
client binary updates to fix bugs without restarting the servers).
--Fixed several bugs in TextArea code that could lead to crashes on Review page.
--Fixed zombie player that could be discovered radius of 32 if a player walked
out of range and then you walked over to their last-known spot later.
Server Fixes:
--Wound object no longer dropped if player wounded more than once.
--Fixed so that deathETA not reset if player wounded a second time, also
blocked their death being logged twice.
--Turned off badMotherLimit. With birth cooldown, it really isn't needed, and
a mother can be punished by suicidal babies and become infertile.
--Fixed occurence of ~ for home directory inside quotes in various BASH scripts.
--Instead of using last Eve location before shutdown as new Eve location on
next server startup, server remembers death location of longest lineage
person who died during the shutdown process and uses that as the new Eve
location on next startup. That location is still used for the next three
Eves post-startup, to give people three chances to get the pre-shutdown
civilization up and running. As a fall-back, if no shutdown death location
has been saved, server looks for tallest, most-recenly-built monument
location and uses that for the new Eve location.
--Added timestamp per monument step in monument logs.
--Changed monument tracking to only log monuments when second layer is built,
and cleared old monument logs containing only one line.
--Main server backup script backs up monument logs.
--Monument reports for website.
--Fixed redundant if statement in transition bank (thanks UncleGus).
--Eves are now spread in a circle around the server-startup-Eve-origin point
with a radius of 1000. They won't keep random-walking further and further
--Mr. Still-Pretty-Nice-Guy. Eating bonus 2, down from 3.
--Animals now stay in their spawning biome if moving radomly or fleeing. Can
still leave their biome in chase or fixed cardinal direction moves.
Rattlesnakes stay in the desert, pengins stay in the snow. Except for the
rare borderlands rattlesnake or penguin who spawns off the edge. They will
also stay in their biome forever (a swamp penguin will always stay in the
swamp if it spawns there). But in general, you can travel in non-desert
areas without much snake danger.
Version 74 2018-April-13
--Fixed editor to allow smaller map chances.
--Fixed editor to NOT apply < 1.0 speed multiplier on ground animations, to
match client behavior. Thanks TyrantNomad.
--Fixed update process to NOT rewrite a lingering .bak file that failed to be
deleted. On Windows, we must move our EXE out of the way, but on a
multi-part update, this results in trying to move it to the .bak file
multiple times, with later moves failing.
--Fixed postUpdate process to remove any lingering .bak files.
--Client displays red speech for staggering murder victims before death, and
shows bloody GUI overlay to victim.
--Fixed three bugs in copying map animation data when a new chunk arrives
(thanks Christoffer Baar).
--Added support for sprite remapping.
--Support for monument call.
Server Fixes:
--Bug reporting back on in server.
--Apocalypse off again for now.
--Fixed various scripts to handle git tag changes.
--Fixed so that server checks apocalypsePermitted setting live, when about to
trigger an apocalypse.
--After a family line dies out, next Eve is spawned in a random direction 2000
tiles away. After a server restart, the next three Eves are spawned around
the last Eve location before restart, and then the random-2000 jumping starts
for the fourth and subsequent Eves.
--Held baby was killed if dangerous animal walked over its last ground
position. Fixed.
--Fixed website stats generation.
--Bug reporting back off. I think it may be causing a CPU vicious cycle.
--Disabled biome database to memorize proc-genned biome map. This helped
preserve seen map areas when a new biome was added, but it consumed gobs of
RAM and CPU resources as players and Eve spreading explores huge areas of
wilderness. New biomes aren't added that often, and it's okay for them to
shift under existing villages for now. No longer saving look time for every
single map cell that is seen, only for modified cells.
--Switched to a stack implementation of a hash table database to improve
performance on the most recent items. Thus, performance won't degrade as
much as more and more areas of the map are explored.
--Further improved performance of stack-based database implementation,
especially on case of repeated misses. Individual operations are between 3x
and 10x faster than old kissDB engine, with 7x average speed improvement over
a whole range of operations on test data. StackDB also uses 6% less disk
space for this test data, and 13,000x less RAM (plus, RAM usage is constant
regardless of data size, where kissDB RAM usage grows over time as data
grows). The only place where stackDB is slightly slower is iterating through
all database items, but this only happens when rebuilding a database to cull
at startup, and we make up for it with the dramtically faster insertion
performance of the stack.
--Server now makes use of high-performance STACKDB_put_new when rebuilding
databases during the map cull after restart. Shrank table in eve location
database to save disk space given long email key.
--Added 20 seconds of 'stagger around' time after you are murdered. Server
sends clients a DY message to indicate that a player has entered this state.
--Optimization: Valgrind profiler found 40% of CPU on a live 20-player server
spent on computeMapBiomeIndex. Caching this in a RAM-based hash table.
--Fixed so that if we're holding something permanent that can only be dropped
with a use-on-bare-ground action, we drop the result of that use-on-bare-
ground action when we die (instead of leaving permanent version of the held
object on the ground after death).
--Support for monument logging and monument call to client.
Version 72 2018-April-5
--Server now reports its version number in its first SN number, and client
displays error on version mismatch.
--Fixed incorrect CONNECTION LOST message in client when death reason known
but user is clicking after death, when server socket has already been closed.
Now clicks immediately after death are prevented client-side.
--Fixed editor bug where sound paste button not visible after recording.
--Fixed bug in clothing click detection if clothing contains rotated sprites
that are further roted by the worn (held) animation along with custom
rotation offsets (example: seal skin coat).
--A lot of client BUG reports seem to be due to simple networking lag. Maybe
some clients really are seeing server responses that take more than 4
seconds. Updating BUG threshold to 10 seconds.
--Mac fullscreen mode fixed (using borderless window AND hiding menu/dock).
Thanks Chard.
--Support in client and server for The Apocalypse, and propagation of
apocalypse wave through all official servers via the reflector.
--Client now sends server KA keep-alive message every 15 seconds of player
idleness to make sure a NAT or other router doesn't drop the connection if
--Fixed so that speech isn't drawn off top of the screen for a character that
is nearby.
Server Fixes:
--Containment can transfer from actor to target through a transition. For
example, adding a full cart to a horse keeps what was contained in the cart
in the new horse-drawn cart.
--Fixed server crash (and possible client crash) caused by improper clearing of
removed sub-contained objects (post-data-update) if entire sub-container
needed to be cleared out (if it contained nothing by now-removed objects).
Someone had a basket in a cart containing nothing by domestic carrot seed
--Forgot to include lookTime.db in server backups.
--Fixed initialization of look times if lookTimes.db empty. All map cells are
set to have look times of NOW. This prevents them from being cleared if the
server restarts again in less than 24 hours.
--Fixed a memory leak in naming phrases init.
--Removed duplicates from firstNames list (thanks Chard).
Version 70 2018-March-16
--Fixed a crash when setting down a baby just as someone feeds you.
--Fixed a crash when mousing over someone as they die.
Version 69 2018-March-16
--Scene editor now has 'V' fill function for repeating objects (useful to make
stress-test maps).
--Fixed an invisible-self-as-baby bug when baby-self set down during map load.
--Fixed another baby bouncing-forever bug (if baby's clothing state changes
while held, this causes a PU message about the baby, which the client was
interpreting as a baby-drop, even though the server saw the baby as still
--Some bouncing-forever bugs seem to be caused by server missing or ignoring
one of our MOVE messages, meaning that it never tells us we arrived, so our
next action is pending forever. I'm still working on figuring out what's
going wrong in the server MOVE handling code. In the mean time, I've added
a work-around client-side that detects >4 seconds of bouncing and jumps back
to the last known server position.
--Client using BUG protocol to report 4-second bouncing.
--Client support for NM names message and displaying names.
--Now showing YOUR in front of relation names.
--Client and server now differentiate between baby-drop PU messages and other
PU messages about a held baby with done_moving field (only done_moving if
baby no longer held).
--Fixed glitches in animation when dropping a baby. On dropping player's
client, the doing animation would run forever. On witnessing players'
clients, the doing animation wouldn't be triggered.
Server Fixes:
--Fixed comma int printing in stats at top of home page.
--Added hash table RAM caching of object database.
--Eliminated repeated calls to getTrans for same id in checkDecayContained.
--Eliminated expensive calls to checkDecayContained by tracking which cells on
map have no decaying contained items.
--Fixed map file bloat by culling map of cells that haven't been looked at in
24 hours and re-inserting remaining cells whenever a server restarts.
Culled cells go back to their natural, procedurally-generated state.
--Server was setting timeout when polling for socket activity even when more
buffered messages were potentially available, allowing messages to pile up.
Fixed so that we don't sleep at all when polling sockets if we received at
least one client message in the last loop.
--Support for BUG protocol to allow client to report bugs and trigger log
--Support for baby and family naming phrases in SAY messages, and reporting
names to client with NM messages.
--Eve say limit never below 30 characters to allow saying long family names.
--Fixed crash on server exit caused by lookTime db being closed first.
--Fixed mistaken sending of additional PU updates for a player after death if
what they're holding or wearing decays.
Version 68 2018-March-16
--Fixed login FPS checking to wait 0.1 seconds for things to settle after load.
--Fixed so that murder weapon creation sound plays even if something is left
in grave by murder transition.
--Fixed object bank bug that wasn't saving slotVert setting correctly.
--Fixed sound played when swapping one container with another.
--Fixed so that there's no generic pickup sound played when what you're holding
changes as the result of a player-caused transition that results in an
on-the-ground creation sound.
--Fixed so that isSpriteSubset doesn't consider color (damp adobe wall is
subset of adobe wall).
--Fixed hint result to prefer showing actor or target that becomes deeper (we
don't want to see empty bucket as the result of pooring water on a wall).
--Mousing over a person shows their relationship to you, if any.
Server Fixes:
--Fixed bad PU message sent by server, causing client crash, if player spawns
on top of something deadly and dies immediately. I think this only caused a
crash in solo-player servers, but might also have screwed other stuff up in
multi-player servers.
--Can no longer eat when full.
--Murder weapon changes: last use transition target can specify a custom grave
marker for murder victim (separate from what is left on ground or in grave if
attack misses, which is specified by non-last-use transtion), and this can
also specify a special state that the murder weapon goes into if the attack
is successful (bloody knife on hit vs regular knife on miss). Permanent
objects, if held, cannot be dropped. Thus, a murder weapon can become
undroppable for a period of time post-murder.
--Can now swap one container with another on right click.
--Server support for LI lineage message about all players alive when you are
born and about new babies that are born.
Version 66 2018-March-14
--Pushed address space of temporary useDummy objects up to start at value
in nextObjectNumber.txt to deal with case of largest-ID object getting
removed. useDummy IDs used to be based on maxID in bank, which would shrink
when largest-ID object is removed.
--Got pick-up sound playing correctly when a container swap happens.
--Client plays held object creation sound when heldTransitionSourceID is 0
(for scream sound when a bloody knife is created after killing).
Server Fixes:
--Added work-around for basket-full-of-zeros bug that causes a client crash.
Not sure how a container could ever have 0-IDs in it. Code is in place to
clean this up whenever the server encounters it in the future (and not send it
on to the client).
--Improved behavior of container swap action (right click while holding
something). It now swaps with the bottom-most item in the container that is
different from what you're holding. If all items in the container are
identical to what you're holding, it acts like a normal container add action.
--Server sets 0 for heldTransitionSourceID as a result of killing.
--Reflector full threshold reduced from 95% to 90% to reduce chance of SERVER
FULL errors when a player is assigned a server by the reflector.
Version 65 2018-March-13
--Fixed a crash if held baby disconnects while we're walking with it.
--Fixed a few uninitialized values found with Valgrind.
--Detecting when vsync settings have changed.
--Fixed bug causing other person to mysteriously walk long distance through
center of chunk when they were last seen on one side of map chunk but appear
later on other side.
--Fixed math of path length measuring for partial paths (length is
currentPathStep + 1, not currentPathStep).
--Client handles negative, zero, or tiny move ETAs without computing negative,
infinite, or huge move speeds. This is the source of the map desync bugs.
--After temp login, blank fields are show to avoid confusion.
--Fixed so that our own eating sound isn't played until we hear from server
that we actually ate.
--Update process now detects write permission errors, rolls back, and displays
an error message.
--Game no longer pauses when minimized (clearing paused screen was annoying).
--Fullscreen borderless mode available (change with borderless.ini in
settings folder---be careful, it's experimental).
--Fixed the baby-bouncing-forever bug, finally.
Server Fixes:
--With the server load fixes, seems safe to push population cap up to 60.
--Back down to 40.
--Server wasn't setting responsible player for container-remove action, causing
container to appear emptied before responsible player finished walking there.
--Temporarily rolled back partial-map-chunk server load fix while I fix the
client/server map sync bug.
--Server log.txt getting big. Changed to make backup and rotate every 3 days.
--Saved serverOut.txt getting big, added a log rotator.
--Server now gives current mid-path possition in first playerUpdate for moving
players instead of starting them at their start location along their paths.
--Server should never send negative values for move time remaining.
--Partial-map-chunk sending turned back on, given other fixes.
--Right-click to now puts held at top of container's stack and grabs bottom
item. Useful for cycling through what's in a container.
Version 64 2018-March-9
--Improved display of error message if game folder is read-only.
--Buttons no longer clicked if we drag into them (if press starts elsewhere).
--Fixed Editor pickers not to register clicks for presses that start elsewhere.
--Fixed double-sound play when use-dummy object with using sound transitions
into something else (example: shallow well into deep well).
--Fixed so that floor hugging code only duplicates botttom layer of neighboring
floor (so that bear skin rug isn't duplicated oddly against a wall).
--Fixed ground tile cache to put unknown tile at 99999 instead of numbering
them after the last known biome (when future biomes added, the old numbering
causes collisions).
--Fixed bug in copying old chunk contained and subcontained over when a new
map chunk is received by client.
Source Fixes:
--Fixed to flush caches after data update in live source distribution.
Server Fixes:
--Now support emails that use the + character.
--URL encoding fixed so that 0-9 and ~ are not encoded characters.
--Server update scripts now interleave updates in batches of servers, even
first, then odd. This keeps half the servers online throughout most of the
update process.
--Chasing animals now attempt exact distance to closest target instead of
--Max players per server 60 instead of 200 just to be safe. Saw some lag.
--Reflector report now shows totals at bottom.
--Improved the compile notes with more details.
--Launch is over. No more Mr. Nice Guy. Eating bonus dropping to 2 (was 3).
--Thermal model improved. Heat around you is computed from scratch each time
you stop moving, instead of building up incrementally with memory of previous
heat maps from previous moves. This fixes the "walking back and forth on a
floor" heat explosion bug. The heat map around a player was reduced from
16x16 to 10x10, and the simulation is run for 2x more cycles. This is
slightly more efficient, and it also allows for more heat build-up, given
that the heat system no longer has memory.
--Support for biomes with positive or negative heat values.
--Max players down to 40 per server until I fix lag.
--Mr. Nice Guy is back. Eating bonus back to 3.
--Fixed so that carried-baby speech is delivered correctly after long parent
--Implemented map chunk overlap detection. When sending a new map chunk to the
client, we avoid re-sending (or looking up) the tiles that overlap with the
previous chunk that we sent that client. This results in a 46% reduction in
dbGet calls, a 65% performance increase for the map chunk lookup code, and a
53% reduction in map message size, when walking back and forth on a
container-filled test map.
--Server now skips check for heat-producing contained items around player when
computing player's thermal map. This was consuming substantial server
--Reflector now uses read timeout with each server to avoid hanging
indefinitely if a server answers but does not send data.
--Server now handles unexpected responses from ticket server (like 504 Gateway
errors) without keeping a new connection in the loop forever.
Version 60 2018-February-28
--Fixed cannot-move-after-speaking bug on Mac by making E-click
right-mouse-click alternative off by default (there's now a settings file).
--Replaced AppleScript System Events with Finder for MacOS find-the-folder
work-around at first start-up (because System Events stops running on
certain recent versions of MacOS).
--Changed Mac App bundle name to include version number as a work-around for
failed updates on the Mac.
Server Fixes:
--Added commas to big numbers in homepage life stats.
Version 59 2018-February-27
--Fixed a crash when holding a baby and you get fed by someone else, and a few
other situations when holding a baby.
Server Fixes:
--Nursing cost now 1 instead of (was 2 + floor(babyAge) ).
--Baby birth cost now 0 (was 10).
--Plus 2 food bonus on all food eaten (everything provides 2 more food).
--Several server settings are now reloaded each time a new player joins instead
of only at server restart.
--Added script for cloning live settings to all servers from git repo.
--Food bonus up to 3 for now.
--Fixed a server crash when a moving object moves away just as a user action
--Changed server update script to shut down servers one at a time so that
people can keep playing during the update.
Version 58 2018-February-26
--Hiding email and account key after first successful login (to protect privacy
of streamers).
Version 53 2018-February-25
--Fixed layer order changes in object editor to work with extra animations.
--Added support for sprite layers that pop into existence during animation
transitions. If the fade for the layer is marked as fully hard, a visibility
pop will happen. Otherwise, the visibility fades like it used to.
--Import editor always shows crosshairs, even during select.
--Added control over phase of animation pauses with animation start pause time.
Now possible to make pistons that pump one at a time, down the line.
--Fixed behavior of value sliders in editor when held mouse moves in and out of
slider bar.
--Support for forcing number of significant figures on value sliders, and using
extra digits for animation pause times.
--Added display of current sprite position in editor.
--Support for animations that always start at frame zero after transition,
instead of continuing from frame where previous object, pre-transition, left
--Scene editor now displays object ID of current cell.
--Fixed bug in animation speed for moving objects.
--Fixed quit confirmation box to no longer be titled with PAUSED.
--Fixed editor so that containable containers have slot demo button visible.
--Fixed bug in hint system that was showing hints for generic one-time-use
transtions as bare ground tranitions.
Server Fixes:
--Added transition failure log.
--Fixed server scripts that loop over remote servers with ssh in the loop
(ssh was breaking the loop's file read operation, ssh -n fixes it).
Version 51 2018-February-8
--Added EQ to cut extreme low end and high end from recorded sound effects.
--Fixed hint system's handling of default transitions. For example, goose pond
now shows proper hint list, even though touching the pond with most objects
causes the pond to temporarily transition (goose jumps in).
--Object editor shows F label when current sprite layer is flipped.
--Baking an object can now handle sprite flips properly.
--Fixed default object values when trimming a large sprite.
--Support for an extra x,y offset animation parameter per layer.
--Enabled 45-degree and zero buttons for vertical slot rotation in editor.
--Fixed with a hack so that clothing that has a held animation that includes
rotation (which is applied when worn too) is more clickable (the click area
used to be based on its un-rotated location, which didn't match its visual
location). The hack is not perfect and doesn't account for sprite parent
relationships or x/y animation offsets, but it can be improved later if
--Added support in editor for object layer moves that ignore parent links and
copy/paste of difference from saved for a given layer.
Server Fixes:
--Fixed so that multi-use food sources (bites of pie) make it into food log
properly. Thanks Yvanhooe.
Version 48 2018-January-26
--Fixed log error message when downloading updates.
--Fixed randomization of client choice of multiple download update mirrors.
--Fixed crash in editor when loading an manipulating a transition with a
negative actor.
--No longer playing using sound when a target object with no creation sound
goes through a use-dummy transition. Still playing the using sound if the
held tool changes with no creation sound (example: bowl of water filled at
pond plays only water bowl creation sound, while dumping bowl back into pond
plays pond using sound).
--Hint for eventual outcome now shown when holding a partially-used object
(example: eating a pie gives you a plate eventually). Hints for partially
used object in general were disabled by mistake before.
Server Fixes:
--Old bad mother limit started at 2 and grew with population. New limit
started at 1 and grew with pop/3. Fixed it to start at 2.
Version 47 2018-January-22
--Auto-inherit closest on-screen home marker location when entering the world.
Thus, babies can have a home, even though they aren't old enough to set one.
--0-y-old babies now revert to crying every time they speak.
Version 44 2018-January-19
--Sounds no longer play with slight random pitch variations. This was causing
an unpleasant phaser-ish sound quality.
--Scene editor now allows automated time/age playing.
--Scene editor now allows starting and stopping of recording frames.
--Fixed baby held animation in scene editor.
--Fixed invisible baby bug.
--Fixed baby bad pathfinding bug after jumping out of arms.
Server Fixes:
--Bad mother limit now grows with population at 1/3 the old rate.
--New child-spacing algorithm based on a randomly chosen birth cooldown time
for each mother.
--Babies born with 4 hunger bars instead of 2, but start out with only 2 full.
--Only females of fertile age can nurse babies.
--No more 1:1 food transfer from mother to baby when nursing. Instead, there
is a one-time pick-up cost of (baby's age + 2), and keeping baby fed is free
after that, until baby is put back down. Before, a nursing woman consumed
food twice as fast while holding a baby (feeding two people with one hunger
bar), which was too frantic.
--No longer giving baby to most well-fed eligible woman on server. Instead,
picking a woman from a weighted distribution of all eligible women othe
server based on how well-fed they are. Thus, a hungry woman can have a baby
sometimes. Thanks Jared J.
--Fixed so that reverse use transition, that happen on a timer, can un-use
object step by step instead of all the way back to parent object (example:
berries on bush can grow back one berry at a time instead of all at once).
Version 42 2018-January-9
--Fixed game playback issue with aysnchronous file reads.
--Fixed the way that auto-generated code dependency files are handled.
--Support for floor usage sounds that override footstep sounds when an object
is over a floor tile (wood floors can now have wooden footstep sounds that
override default footstep sounds).
--Support for sounds that have multiple sub-sounds that are picked from at
random whenever the sound plays. For example, footstep variation (so
footsteps aren't soo repetative sounding).
--Fixed so that moving animation sounds played for moving objects.
--Fixed movement glitch when holding down mouse outside a completely enclosed
area with no path out.
--Pasting animation sounds from person onto non-person now correctly clears
sound age range.
--Sound reverbs no longer play in editor. Better to hear raw sounds.
--Fixed client base move speed to compensate for new server 3.75 speed.
--Fixed bug in sound Paste All in animation editor.
--Animation editor can now copy/paste sounds from all animation types at once.
--Holding mouse to keep moving now treats mouse release as one final click.
You walk to where you finally release the mouse.
--Fixed hold-to-move so that it works even when mouse is close to player.
It does this by automatically extending the chosen path in the same
direction. This prevents a bunch of very short paths from being sent to the
--Fixed so that clicking on an unreachable object walks you as close as
possible to it. Before, it would result in no motion at all.
--Fixed autologin crash when email and account key not set. Thanks tomberek.
--Editor and transition bank can now specify decays that are multiple epochs
--Fixed glitch in arm position when non-handheld object used on another object
and no transition applies.
--Mousing over items in a container now changes tool tip text (to show you what
item will be removed on right-click).
--Mousing over clothing, or items contained in clothing, now changes tool tip.
--Mousing over bare skin while holding edible now shows EAT tooltip.
--Fixed so that invisible-when-worn parts of clothing don't get moused-over
when clothing is worn.
--Frame rate measuring and vsync detection/warning only happens on first run
now, with results saved to settings folder.
--Display target frame rate and vsync mode on Settings screen, with button to
--Fixed so that player death handled instantly even when game is paused. Fixed
so that final displayed age is age provided by server, not age updated with
local clock (so if player dies while machine is asleep and receives death
message later, proper death age will be displayed). Also fixes problem with
59-year rounding issue. Thanks tomberek.
--Improved efficiency of message input buffers.
--Fixed broken game state on next life when player dies while pending messages
are still in the queue.
--Added compression of all large message to protocol with new CM (compressed
message) wrapper message type.
--Finally fixed the frozen baby after drop bug.
--Fixed bug in mid-path-step calculation when in-progress move for another
player is almost done when we first learn about it.
Server Fixes:
--Base movement speed is now 3.75 tiles per second instead of 4 tiles per
second to ensure that client camera moves at a whole number of pixels (8) per
frame at 60 fps. Modified speeds (due to age or carrying things) are also
rounded to ensure a whole number of pixels per frame, or in the case of very
slow speeds, a whole number of frames per pixel.
--Fixed so that in-progress player moves are no longer reported to client when
a new map chunk is sent to the client. We're reporting moves with a radius
of 32, and our chunks have a radius of 16, so the client has already heard
about any moves starting around the map chunk. This fixes a glitch in other
player movement when their move ends in a new chunk as the observing player
moves along.
--Fixed bug in life stats processing across multiple game servers.
--Fixed so that all crontab scripts run with bash. FoodStats update was
broken otherwise.
--Distroying a container now causes the contents to be scattered on the ground
around where the container used to be (they used to just disappear).
Example: picking up a grave with a basket to make a basket of bones no
longer makes the contents of the grave disappear.
--Fixed map generation so that fractals are centered around 0,0 to make testing
scale factor easier.
--Shrunk map scale by a factor of 3 and cut map scale increase factor
associated with additional biomes in half. Local biome areas are now
smaller, and you have to walk less far to find a biome boundary. This makes
the landscape generally more interesting.
--Shrunk map density variation scale by a factor of 4. The empty regions of
the map are now much smaller.
--Support for sped up and frozen map transition times for testing.
--Can no longer close a vertically-oriented door on top of someone who is
standing still in that spot.
--Fixed so that non-moving player is still killed by old age. We check all
ages every server step. Age-death time is more accurate now, because server
sleep is shortened if an age-related death is near.
--Fixed crash when newly connected player errors before first PU message is
sent to them.
--Improved efficiency of message input buffers.
--Stress testing server revealed that fractal map algorithm was producing the
most CPU load. Added caching of the fractal map (with a memory cost of 768
KiB), reducing this load by 10x. Now database queries are the primary load,
as they should be.
--Fixed to close client connection if writing to their socket ever fails (for
example, if their write buffer is full). Before, there was undefined
behavior client-side when partial protocol messages came through if the
server was under heave load and its write buffers were full.
--Fixed child race selection to not wrap around.
--Reflector now seeds random generator with player's email instead of IP.
--Moved main server to separate Linode. Reflector now handles all game servers
as remote servers.
--Backup script now includes remote server lifeLogs and also foodLogs.
Version 40 2017-December-1
--Old object's using sound now played when a player causes an object on the
ground to change, and the new object has no creation sound (example: digging
up a home marker produces a skewer, which has no creation sound, so the home
marking using sound is played).
--Fixed death marker checkbox in editor to not hide a few other checkboxes,
simplifying the widget visibility calculation in the editor.
--Replaced finicky auto-HOME system with player-settable homeMarker objects.
Thanks Paul V.
--hardToQuit mode now hides buttons on rebirth choice page. autoLogin support.
Preparing game for being show in public.
Version 39 2017-November-29
--Fixed git handling of .txt line endings on Windows.
--Fixed unix2dos conversion program behavior on Windows.
--Back to old camera movement. It's jumpier, but doesn't let you get so
annoyingly close to the edge of the screen. Thanks Casey C. and Jared J.
--Replaced piano hunger sound with ukulele A-minor chord so that it stands out
from the piano music.
Version 37 2017-November-28
--Windows can't handle pointers larger than 32x32, which caused a crash in
bigPointer support on large displays when we tried to load a 40x40 cursor.
Thanks Erik O.
--Fixed login error if you hit ENTER to leave the email field. Thanks Erik O.
--Click-to-drop now highlights target square of drop. Thanks Casey C.
--Fixed OGG player to handle mono OGG files (was only playing in L channel).
--Added an automatic HOME compass (based on area where you conducted the most
activity). Thanks Paul V.
--Improved camera to not move at all if player is moving around center of
screen. Thanks Bennett F.
--Spell check of object descriptions in editor.
Server Fixes:
--Food capacity decays down to 4 at old age instead of 2.
--Clothing speed multiplier applies when clothing is worn (but not when riding
something else).
--Each character now has their own speed multiplier (some people can be faster
or slower). Thanks Mez.
--Improved bad mother detection in low-population situations. A lone Eve now
only needs to have two babies die before a new Eve is spawned. The bad
mother threashold increases from 2 up to 10 dead babies as the server
population increases.
Version 35 2017-November-15
--Sub-containers, one-level deep (basket in a cart) now supported.
--Creation sound no longer played with an object moves.
--Fixed so that not just short human-made objects are mouse-through-able, but
all short objects. So if you build a wall in front of a rock, you can still
mouse through to the rock.
--Fixed arm position when other players pick something up.
--Fixed stutter-step of other players during long, continuous movements.
--Optimized sprite drawing code with profiler to increase maximum number of
sprites that can be drawn per frame.
--More improvements to the way object center offsets are computed to be used
for held positions. Now true visible sprite width (instead of total image
width) is used, and 90 degree rotations are accounted for. This fixes the
held position of the basket of bones, for example, which contains a wide
sprite that is rotated vertically.
--Fixed pickers in editor to not need to reset results page number when some
results potentially deleted on another editor screen. All editor screens
now hold their picker pages when flipping back and forth between screens.
Pickers now automatically rewind back past empty results pages.
--Temperature arrow positions now rounded to whole pixels.
--Fixed bug in way objectHeight calculation made use of sprite anchor offsets.
--Fixed so that target fps is chosen from list of possible fps in settings file,
even if vsync isn't enforcing that fps.
--Pathfinding fixed to prevent walking through a door in your grid square after
it has been closed in front of you.
--Fixed to prevent click-through of short objects behind short objects
(example: open door that partially overlaps nearby wall, wall should not be
able to click through door to hit wall).
--Fixed so that camera-settle speed takes FPS into account (before, it took too
long to settle at lower fps after the player stops moving).
--Fixed so that only one sound plays during a transition, even if something new
is created in the player's hand and on the ground. The ground object's
creation sound takes priority.
--Fixed to avoid clicking on objects during continued, mouse-held-down walking.
--Fixed misclick issue when clicking on objects near the edge of the screen.
--Fixed case where continous walking mode cancelled after mousing over a clump
of blocking objects.
--Fixed so that held object can produce heat. Contained and sub-contained
objects now can produce heat as well, shielded by the r-value of their
container. Items contained in clothing can produce heat, shielded by
clothing r-value.
--Support for floors.
--Support for extra animation slots (for use in trailer animations).
--Support for live animation triggers in game client (for trailer).
--Fixed other player wiggle direction on first action caused by uninitialized
--Fixed so that newly-added player doesn't get drawn until all their sprites
are loaded.
--Eve's camp location only remembered if Eve dies of old age (for that same
player to spawn there the next time they play Eve). If Eve dies younger than
that, that player will respawn in a random location in their next Eve life.
Repeat suicide is no longer a viable solo player strategy.
--Fixed animation blending when a moving object comes to rest.
--Fixed frozen rotation frame count use in animation editor.
--Drawing grid square highlights when holding something (to show you where it
will be put down).
--Fixed youth body position on rideable objects.
--Fixed poor cornering and endless circling at high movement speeds.
--Fixed overshooting at very high movement speeds. Speed multiplier of 10 is
now useable, and 20 is borderline useable.
--Support for container slots having a parent sprite so that they move and
rotate with that parent sprite.
--Fixed creation-sound-playing code that checks if newly created object is a
sprite-sub-set of the source object so that it allows for global
transpositions of the sub-sprites (example: picking up froe from pile of
boards should not play froe creation sound).
--Fixed display of animation for held object in animation editor.
--Added scene editor and support for test maps on server.
--Anim editor now shows test ground sprite when showing a still person with a
held object.
--Fixed so that arrow keys have no effect on invisible cursor position when
typing a chat message on note paper.
--Fixed glitch in pasting from clipboard on Linux. Now uses xclip to avoid
X Windows event issues.
--Support for editing and submitting game reviews from inside game client.
Server fixes:
--Food log now outputs every hour regardless of whether players are eating at
the turn of the hour.
--Server can now load a test map from a file that overrides the proc-gen map.
--New Eve placement that tracks most recent camp separately for each player.
New solo players are placed randomly in the wilderness. Repeat solo Eves
are returned to their last camp.
--Food log report includes past month.
--Fixed so that Eve placement radii don't grow beyond 1024 if a player
continues to die young repeatedly. They used to double until 32-bit overflow.
Version 32 2017-August-15
--Fixed assumption that time() returns 32-bit int values (see server fixes
for details).
--On screens larger than 1920x1080, or if settings/forceBigPointer.ini set,
double-sized mouse pointer is used.
--New death reason: Nursing Starvation.
--New noise graphic to draw outside of known map regions during server lag.
--Now all short human-made or human-moveable objects are mouse-able when they
are covered up by a foreground object.
--Fixed vertical cross-over point for player feet when walking between cells
to reduce the appearance of objects passing through their legs.
--Added foot-cross-over guide mark in object editor.
--Added edit-time computation of object pixel heights. Using this in server
natural map generation to avoid placing short objects behind tall objects.
--Fixed animation editor glitches when speed mult < 1.0
--Moving animals.
--Fixed overlap issues for people moving in same cell.
--You can now feed anyone, regardless of age.
--Eating animation and eating sound played when someone is fed.
--Fixed glitches when a moving parent dies while carrying you.
--Support for using non-human-deadly objects at a distance (e.g., for hunting
--Fixed editor crash when testing clothing position.
--Parent/Child buttons in animation editor to make limb animation easier.
--Copy All in animation editor now makes sure destination sprites match source
sprites during paste.
--Clothing now goes into its held animation instead of ground animation when
wearer stops moving.
--Support for demo scenery in animation editor so we can test moving object
foot visibility behind non-blocking objects.
--Added horizontal swap buttons in transition editor.
Server fixes:
--Fixed a typo that was causing a crash.
--Fixed assumption that time() returns 32-bit int values. In fact, the C
standard says nothing about the time_t type. It is not even safe to
subtract one time() value from another. Completely overhauled my time
implementation to assume nothing beyond what is specified in the C standard,
now measuring time as a double-precision floating point number of seconds
from my own epoch, which fixes the year 2038 problem in a standards-compliant
way for 285 million years into the future.
(Note: the year 2038 problem is only fixed on platforms where the
time.h time() function works beyond year 2038... for example NOT 32-bit
Linux. On broken platforms, there is no way to measure time beyond 2038.)
--Storing time values in database as 64-bit floats (doubles). Added a new
mapTime.db database to support this without doubling the rest of the
database size (time values are stored in a separate, double-wide database).
--New baby is given to the most well-fed fertile woman on the server (still
observing the 2-living-child-max rule and bad mother rule).
--Giving birth now takes 10 out of mother's food supply, with a min remaining
food of 4.
--Nursing a baby now transfers food from the mother's store to the baby's
store. This adds a new death reason: Nursing Starvation. Picking up a
baby always consumes at least one food, so a good baby will wait until they
need food before asking. Nursing is still more efficient than hand-feeding
because the food transfer fits the baby perfectly (where as a berry has a
tendency to over-feed, beyond the size of the baby's stomach, thus wasting
--Fixed bug that could cause a walking player who dies to appear at their
destination after death.
--Life stats script now works incrementally only on latest log files.
--Server life log now records parent chain length for each birth.
--Fixed bug in server life log that caused log file to be reopened repeatedly.
--Added hourly food logging support to server.
--Food stats report for website.
--Fixed server-side bug that was causing object creation sounds to sometimes
play when they are removed from a container.
Version 30 2017-July-28
--Fixed UnixSource build process to not overwrite user's custom settings.
--Fixed socket handling to detect send errors.
--Recording window minimized status (to handle alt-tabbing in recordings).
--LOGIN message is now a fixed length regardless of email address so that
playback of recordings works on machines with a different email.ini setting.
--Fixed hint-related crash when picking up a baby.
--Added info about what you just ate when you drank breast milk.
--Fixed editor crash when editing an empty category.
--Fixed so that measured, set frame rate is included in recording header
(recording doesn't start until after frame rate is measured). This ensures
proper playback of games recorded at non-60fps frame rates.
--Fixed two memory leaks.
--When mousing over something dropped behind another object, highlight now
shows through the blocking object.
--Drop-behind mousability now applies to objects dropped by other players in
your vacinity, as well as objects changed (but not dropped). It is limited
to objects that are less than one tile tall (to prevent annoying click-
through on trees that are behind other trees).
--Fixed to play useDummy using target sounds (even though target changes).
--Support for reverse-use transitions (example: putting clay back in clay pit).
--Distinction between lastUse transition for actor and target.
--Support for use-appear sprites in addition to use-vanish sprites (example:
wear marks on axe).
--Fixed so that mouse highlighting works for objects that are three tiles
below mouse instead of just two.
--Fixed so that music doesn't drop out for sake of hunger sounds at very end
of old age life. There are no audible hunger sounds to interrupt the music
at that point.
--You can now feed/cloth the elderly (over age 55) just like you can for a
baby (under age 5).
Server fixes:
--Fixed glitch in reported baby food capacity when baby is fed.
--Changed so that Eve radius only expanded if 10 Eves die under age 16 with no
Eve living past 20 in the process.
--Eve placement based on previous object placements now weights objects based
on their depth in the tech tree. So more advanced objects count more when
finding a camp to put Eve into.
--Shrunk default Eve placement radius from 20 down to 2 so finding the camp is
--Bad mother problem solved by not giving a mother more babies if they have
already had more than 10 babies and all of them are already dead.
--Support for server-wide epoch time that can be specified in auto-decay
transitions with an auto-decay value of -1. Thus, the epoch time can be
adjusted with a server setting globally instead of needing to edit all the
transition times.
--Fixed to avoid randomizing decay time of map objects that are set by players.
Naturally-occurring objects still have their decay times set randomly the
first time they are seen (to avoid lock-step with identical objects in the
same area). Now fires burn the same duration every time, and ember-making
isn't so time-finicky.
--Fixed so you cannot put things back into a grave.
--Fixed so that we stop polling a socket once a player dies, even though we
keep the socket open to allow them to receive their death message, to avoid
poll busy-looping on a closed socket in the event of a disconnection.
--Fixed a memory leak if server is quit before connection is closed to a dead
--Server now has all players look at the map around them periodically to keep
decaying objects in a live state (so that we keep decay cycling them).
Before, objects with longer decays would stop transitioning on the player's
screen while the player was statnding still.
Version 28 2017-July-21
--Other player action animations no longer interrupt their walking if the
action message arrives before we see them finish their walk locally.
--Improved sprite trimming algorithm (used to tile large sprites to reduce
pixel fill) to eliminate visible seams along tile boundaries by cross-fading
--Changed the way that actions of other players are handled, greatly increasing
the smoothness of other player's motions and actions. We now play other
player's walking paths at our own rate and defer actions that should
happen at the end of their walk (like picking something up) until after
our local version of their walk has completed. This means that the
truth as it exists on the server can play back with a time delay locally,
but it will mesh up better with the walking actions we've received
from the server (why show them pick something up if we haven't even
shown them get there yet? It looks weird, even if it's closer to the truth.
This means that slightly more often, we'll go to grab an object that
another player has already grabbed, and our client will know that it has
been grabbed but won't show it yet because the other player isn't finished
walking yet. We'll be surprised when we fail to pick up the object and
the other player gets it instead. But this was possible before too,
due to network latency. Now we have an additional opportunity for it
caused by local animation consistency latency.
--Fixed "forever flying" object pick-ups when we walk away after pick-up by
gradually speeding the object up the longer it has been in the air, so
it quickly catches up to us as we walk away.
--Fixed potential crash when the player holding you dies.
--Fixed circling forever at end of short paths by going directly toward final
spot if we detect that too many steps have occurred.
--Pathmarking code now accounts for diagonal path steps.
--Support for making objects that are permanent and drawn behind player without
blocking walking (e.g., roads).
--Fixed visual round-off errors at high coordinate values by offsetting all
coordinates from our starting location before using them as to-draw positions
(32 bit floats cannot represent large coordinates with enough precision).
--Map pull mode now auto-logs-in.
--Death screen now shows age and cause of death.
--Category system in editor to make abstract transitions that apply to a class
of objects.
--Unix Source bundle now ships as a script that pulls from live source
--Permanent, non-holdable objects can be food, allowing you to eat from them
without setting down the tool in your hand.
--Eating food now stacks instead of filling you to a pre-defined per-food
maximum. Eating one berry might fill you up to 4, but eating two in a row
would fill you up to 8.
--Split ground overlay into 4 1024x1024 tiles to deal with bug in larger mipmap
generation on some graphics cards.
--NumUses system for objects that auto-generates intermediary objects and
transitions. Example: a berry bush can have a berry picked from it 10
times before becoming empty, and berry sprites can disappear from it along
the way. The intermediary objects are replaced with unused versions of the
main object at server shutdown.
--Fixed way object ancestor cycle is detected so that kindling creation sound
plays when long shaft is chopped into kinding.
--Support for generic use transitions. Full water bottle can become an empty
water bottle whenever it is successfully used (no longer have to define
that it becomes empty in each and every situation).
--Fixed bug in min priority heap implementation that was resulting in
badly ordered priorities.
--Music fades so that hungry sound can be heard.
--Using sound for target, unchanged object played in case where our held
object changes (example: putting clay back into deposit, dumping water back
in pond).
Server fixes:
--Fixed hiccup in parent animation when we're being carried long distances due
to unneeded player updates mid-move when we reach a new map chunk.
--Fixed disappearing baby when you click on your clothes when holding a baby.
(You now cannot remove your clothes while holding a baby.) Thanks Josh C.
--Reflector now seeds random number generator with your IP address. Repeat
suicide and reconnection won't send you to different servers.
--Added sane behavior at actual edges of world instead of letting player walk
off edge and cause a crash.
Version 27 2017-July-1
--Content update.
Version 26 2017-July-1
--Fixed server crash when baby jumps out of arms.
--Fixed bug in logging age at time of death.L
--Better logging of failed client connections.
--Piano note sound to indicate start of starvation, repeats on last hunger bar.
--Highlighting object under mouse.
--Fixed crash when pathfinding or clicking off edge of known map (in case of
server lag).
--Fixed a few uninitialized values found with Valgrind.
--New Eve placement method (random within radius around largest old camp).
--Clicking on empty ground cell containing a blocking object no longer counts
as a click on that object. Reduces surprise tree clicks.
--Dropped items that you're standing in front of are no longer clickable
through your body.
--Right clicking a holdable object while holding another object causes them
to swap. Can easily swap what you're holding with something else.
--Other player's eating sounds now play.
--After dying, upon getting reborn, whole connection process started from
scratch. This insures that you will find out about a backup server if
the main server has crashed (which may have caused your death).
--Time no longer halts during pause (server messages used to pile up during
pause and play back all at once with wild results).
--Improved the way clothing R-values are summed, adding a weight for each body
part. A hat is now more important than a shoe, and a really insulating shoe
cannot make you overheat.
--Changed heat propagation to use eight weighted neighbor cells.
--Reduced number of heat propagation simulation cycles to slow heat changes.
--Mac build now defaults to windowed mode.
--Added code to tell Windows that we are handling our own scaling.
--Fixed game recording on Windows.
--Switched to GL_GENERATE_MIPMAP instead of gluBuild2DMipmaps on platforms
that support it (gluBuild2DMipmaps was crashing on one particular mac).