This file only list changes to game code.  Changes to content can be found here:

http://onehouronelife.com/updateLog.php



Server Fixes:

--Friends coordinate picking now uses a server-side secret, to make offline
  guess-and-test brute force impossible.

--Removing life/curse and food logs from public data for friends server.




Version 436   2026-May-9

--Support for twin_count 0 to specify same family on friends-only-mode servers,
  where twin_code is used to pick a deterministic, unguessable location on the
  map for Eve spawns, and non-Eves are born only to people with their same twin
  code.

--Friends-only-mode servers disable expert waystones.

--Fixed wall-hugging floor glitch that affected certain graphics cards.
  Thanks to Twisted for discovering, and AdamCoulterOz for fixing.





Server Fixes:

--Fixed so that periodic placements only go in empty spots and never replace an
  existing map object.

--Support for object that can +giveClue when it is created by a player through
  a transition (instead of just if the player is holding it and causing a
  victim emote in someone else).

--Fixed so that ghosts are ignored for nearPop stuff, periodic placements, and
  Eve placements.

--Fixed so that decay is set correctly for obeject that eveStartsHolding.
  Fixes #1230

--Fixed so that tapout triggers set decay on objects changed by tapout.
  Fixes #1228

--Untrusted accounts with less than 20 total lived hours cannot curse, and have
  their fitness scores set to 0 internally on the server (not on the
  leaderboard), so they are last picked to inherit things.

--Untrusted accounts cannot be followed.

--Untrusted accounts cannot join posses.






Version 434    2025-November-11

--Whoops.  Obliterated the GRAVE_OLD case in LivingLifePage when I created the
  new STATUE_INFO case.  Restored that GRAVE_OLD code.




Version 432    2025-November-11

--Added better message after hitting the AHAP VOTE button.  Vote isn't
  submitted until you log in to the game.

--Fixed binFolderCache to use dataVersionNumber in cache file name instead of
  overall version number, which fixes a state binCache issue on AHAP.  AHAP was
  stuck at bin caches with the name bin_v430_cache.fcz.  Now they are correctly
  named bin_v59_cache.fcz, matching the dataVersionNumber.  Also, this improves
  behavior for OHOL, which doesn't need to rebuild the bin caches when only the
  client binary version number changes.  Fixes #1122

--Updated to latest stb_vorbis code to fix some bugs and vulnerabilities.
  Thanks npt-1707.  Fixes #1175 Fixes #1177

--Life token message hidden from login screen as long as user has 5 or more
  lives left.  Don't bother them with this info, because life token limit
  usually has no impact these days (limit is so high at 48).  Thanks Twisted.
  Part of #1121

--Added tooltip for SERVICES button on login screen.  Part of #1121

--Made LOGIN button yellow to make it stand out more.  Part of #1121

--Fixed so that animations with forceZeroStart set for moving objects force the
  animation to start at the beginning each time the object starts or stops
  moving.  This also allows a sound to play when the object starts or stops
  moving.  To have a sound play ONLY when an object starts or stops moving,
  give that sound a repeat frequency of 0 Hz and a phase of 0.  Note that in
  the previous codebase, sounds with 0 Hz repeat frequencies would never play.
  Now 0 Hz as a setting has a purpose (to have the sound play exactly once,
  at the start of the animation).  Thanks DopiePanda.  Part of #1127

--Fixed Animation Editor to correctly set ForceZeroStart and RandomStartPhase
  checkboxes when switching back and forth between different animation slots
  for a give object (moving, ground, etc.).  Before, these boxes were only
  being correctly set when switching objects with the object picker.

--Blacklisted !WORD now handles repeated last letters correctly, when before
  they would slip through.  WORDDD now maps to XXXXXX where it used to 
  incorrectly map to XXXXDD.  Fixes #1144

--Fixed case where swapping an object with another on a table causes the
  now-held object to go through a transiton (like the pickup transition for a
  goose or rubber ball).  Before, this caused the creation sound of the
  now-on-the-table object to get played (like the creation sound of a knife or
  a pie that is now swapped onto the table).  Thanks QuirkySmirkyIan
  Fixes #1162

--The client auto-applies a global map offset if the first map chunk's
  coordinates sent by the server are > 16536, to avoid floating point rounding
  errors in coordinates on GPUs that use 32-bit floats.  There were several 
  places client-side where this offset was not being correctly applied.  The 
  first map chunk is relative to a player's birth location, so it will only 
  have large coordinates if the player reconnects mid-life after travelling a 
  great distance before reconnecting.  In this case, a bunch of things (like 
  maps, owner positions, baby positions, etc.) were off.  Usually only ghosts 
  travel very far before dying, but this bug actually affected anyone who made 
  a long trip and then disconnected and reconnected.  Note that if you're
  taking VERY long trips in one lifetime, you may start to see GPU sprite 
  positioning glitches, as the rounding errors creep in.  If you're a ghost, 
  and this is bothering you, reconnecting should fix it now.  But the bugs that
  occurred in coordinates after reconnecting at a great distance are fixed now.
  Note that GPU rounding issues are already handled by long-distance flights,
  which update your birth position, making all future coordinates sent by the
  server relative to where you land.  Fixes #1166

--Changed default log file name from log.txt to gameLog.txt.  This avoids
  conflicting with the OHOL server, which outputs log.txt, and might be running
  in the same folder.  Part of #1180

--Build scripts for Windows and Mac now copy server settings into 
  serverSettings and also copy several server .txt files.  Fixes #1181

--regenerateCaches fixed to use a real dataVersionNumber.

--Using %lf format specifier for a double in vsnprintf was producing crashes
  and other undefined behavior Windows via the MinGW gcc implementation, which
  perhaps does not support C99's introduction of %lf for printf-family
  functions.  Replaced all of thse with %f for both client and server code.
  %lf is for scanf-family functions only.  Seems to be the cause of #1182.




Server Fixes:

--Lineage server only keeps most recent 10,000 log entries.

--Logging all slow queries in lineage server.

--Anti-DOS script running on lineage server to block IP addresses making more
  than 2000 requests per day (several bots were making 50,000 requests per
  day).  OHOL game servers are whitelisted.

--No longer allowing vague lineage name searches that match 30,000 lives,
  since this was too slow. Limiting name searches to specific names that
  don't match more than 1000 lives.  

--Fixed a major slowdown bug when vague name search matches too many lineage
  server entries (custom filter was set, preventing generation=1 for the deep
  roots lists).

--Sever no longer accepts LOGIN messages with twin_counts of 0 or 1, and
  instead counts these as ordinary non-twin logins.  This was a bug in the
  server code being used by modded clients to force-end adult lives and get
  reborn.

--Fixed so that parallel lineage server requests (logging deaths) for the same
  email address force incremental sequence numbers as each request is resolved
  and finally goes through (before, parallel requests could end up using the
  same sequence number, causing the later requests to be rejected).

--Added function in back-end admin interface for re-computing lineage depth for
  a given life (up and down) in lineage server.  Will let me patch up the depth
  of the Cat family.

--Fixed behavior of sub-containers when something in the main container decays
  away to nothing, leaving a gap.  Before, the sub-container filling the gap
  (sliding into place) would forget its sub-items but those items would still
  be stuck in the database for that slot. A new sub-container inserted into
  that slot would pick up those items.  This could be repeated to eventually
  get a container with an arbitrary number of items, way over its specified
  capacity.  Fixes #1170

--Added lineage server index on ( eve_life_id, death_time ) to make finding old
  lives that don't match one of the record-breaking eve lines faster.

--New server at oldlineage.onehouronelife.com which has a historical archive of
  the 11 million lives that were lived during the first 7 years of OHOL.  The
  main family tree server now maintains only the last 365 days of lives, plus
  all lives from the top-ten longest-line families.  This speeds up the family
  tree server dramatically, which was so bogged by 4+ GB of data that it was
  sometimes timing out when game servers tried to add new lives.  An hourly
  cron job now purges lives that are more than a year old that aren't part of a
  top-ten family.

--Fixed a new bug with decaying items in sub-containers, caused by the previous
  fix.  An item in a sub container that decays was causing all items in the
  other sub-containers in the same super-container to disappear.

--Fixed bug where etaDecay time of held object wasn't update if object does a
  self-to-self moving transition while held.  This resulted in the same
  transititon being triggered over and over endlessly every server frame,
  freezing the player and spamming updates to all other players on the server.
  Part of #1124

--Fixed so that removing object contained in worn clothing correctly applies
  bare-hand transition (pick up transition), and inserting held object into
  worn clothing correctly applies use-on-ground transition (put down
  transition).  Part of #1124

--Fixed Unix pull-and-build script to link contentSettings.  Thanks 
  InTheMorning.  Fixes #1163 Fixes #1164

--Killer ID and email now included in lifeLog for whoever exorcises a ghost.
  Fixes #1165

--Max radio distance is now 10M (was 100K).  Still too far for spam from 
  Donkeytown, which is 200M away.  Fixes #1172

--HungryWork now correctly applies to floor objects.

--Periodic Placements now support randomization intervals (like every 5 hours,
  +/- 1 hour).  Part of #1174

--Support for Eve to start her life holding an object with new contentSetting
  eveStartsHolding.ini.  Allows AHAP Eve to start game flying around in a
  rocket ship to pick place to land.  Fixes #1179

--Server now uses serverSettings folder (instead of settings) if it exists, but
  defaults to using settings if serverSettings does not exist.  Part of #1181

--DING message now sent to players within radius of 100 when one player wounds
  another player, giving the name of the killer, the victim, and the murder
  weapon.  Fixes #1183

--Fixed so that you can't feed drugs to anyone, since it's too confusing
  (before, there was a missed case where you could feed drugs to the elderly).
  Part of #1185

--Got rid of weird case in server code that allowed UBABY when holding non-food
  (or empty handed) on elderly to put clothing on them or swap their clothing,
  since this wasn't working in the vanilla client anyway, and it could be used
  to steal backpacks, etc.  Part of #1185

--Fixed missing check that player actually has another player cursed before
  carrying out the FORGIVE action sever-side, which returns their curse name.
  This allowed people to spam FORGIVE actions for everyone to determine to
  curse name for everyone, even for people that they had never cursed.  Curses
  are supposed to be limited and used only when necessary.  Other players who
  are not cursed are supposed to be anonymous.  Fixes #1185

--During shutdown, when considering position of longest lineage for Eve
  location at next server startup, we no longer consider ghost players, who
  can walk very far afield.  Fixes #1188

--Fixed to require a space after a naming phrase, to avoid bad case of
  I AM EVERHARD matching the I AM EVE naming phrase, making the last name
  RHARD.  Fixes #1194

--ahapGate now keeps same content leader as before in the event of a tie vote.
  Fixes #1196

--Fixed a missing parameter bug in ahapGate.

--maxFlightDistance pushed from 10,000 up to 500,000.  Tutorials are put
  1,000,000 away, and Donkeytown is 200,000,000 away, so this allows much
  longer-distance flight without allowing flilghts into tutorial or d-town.

--Fixed so that we don't ignore landing pads closer than 250 manhattan distance
  if there are no pads further out.  Before, if the only pads were closer than
  250, you'd annoyingly land at the pad closest to you, regardless of flight
  direction.  Now, if all pads are closer than 250, you will land at the
  closest one in the flight direction.  Fixes #1198

--Ghosts are now ignored when finding closest expert for waystone.  Fixes #1199

--Ghosts are now ignored when picking heir for property.  Part of #1201

--Ghosts now stop being leaders when they become ghosts.  Ghosts are no longer
  considered to inherit leadership.  Final part of #1201

--Ghosts no longer counted in countLivingPlayers(), and countLivingPlayers()
  used to toggle special biomes instead of just raw player count.  Some other
  things (like Languages), still depend on raw player count.  Fixes #1202

--forceSpawnAccounts.ini now supports 2 switch for forcing player to be born as
  baby with specific displayID.  Forced-spawn players now have their forced
  name transmitted correctly upon spawning.

--Ghosts no longer earn curse tokens.  Fixes #1210




Version 430    2025-January-13

--Button on AHAP Voting Page now says VOTE (used to say POST).  Part of #1107

--Fixed client to parse arbitrary number of underscore-delimited curse words in
  a CU message, instead of just two.  Old client will display the extra
  underscores in the spoken curse words, which looks ugly, but still works for
  now until next client build is pushed out.  Part of #1119

--Fixed mod exporter code to avoid duplicating author=author= in .txt files
  for sound files included in export.  Part of #1114

--copyChangesToRepo.bat utility script now copies txt files from sounds
  folder.  Part of #1114

--Support for settings/wordBlacklist.ini file. which lets you list words you no
  longer want to see in other players' speech.  These words will be replaced
  with XXXX when spoken by anyone.

--Fixed a memory leak in minorGems/util/SettingsManager.cpp

--Support for /BLACKLIST WORD1 WORD2 WORD3 chat slash command, to add words
  to your personal blacklist.

--Fixed a memory leak if you die with the typing-speech notepad open.

--Fixed so that if you type a really long word with no spaces in the
  typing-speech notepad, it doesn't overflow the notepad line (the long word is
  broken up to fit).  This also fixes very long words in speech bubbles (which
  used to make very long speech bubbles that would go off screen).

--Word blacklist now applies to DING message too (but not tutorial messages).

--No longer have a short limit on /COMMAND slash command length (was 23, now
  200) so that a long list of /BLACKLIST words can by added in one go.

--/BLACKLIST !WORD now matches TESTWORDBLAH and W O RD and W...O?RD

--The exclaimation point version of blacklist now also blocks WWWOOORRDD
  (and other spaced-out forms) with repeated letters.

--OneLifeSever now has a command-line argument 'rebuild' which forces it to
  clear its cache files and rebuild them.  Fixes #1123

--New client setting:  ahapSkipDataUpdate.ini   When set to 1, this blocks the
  client from fetching the lastest AHAP game data from the content server.  If
  you're working on making content, this prevents what you're working on from
  getting overwritten by accident by new content when you launch the client to
  test it.  Fixes #1125




Server Fixes:

--Fixed so that shutdownLongLineagePos.txt is cleared during apocalypse, so
  that Eve location is fully reset to 0.  Fixes #1103

--Fixed crash when rocket ride is interrupted by rider disconnecting and then
  re-connecting as a twin.  Fixes #1110

--Now counts AHAP votes over 30 day window.  Also shows candidate github
  usernames on vote stats page.  Part of #1107

--AHAP vote stats page now shows full list of registered github names (who you
  can vote for).

--Support for forceBoyAccounts.ini list in server settings, preventing those
  accounts from being born as girls (if not Eve).  Useful for bots, to make
  sure bots are never mothers.

--Fixed so that AHAP leader votes are tracked internally by github account
  name, and not by email.  This fixes the problem where one user specifies
  someone else's github as their own to falsely receive votes for themselves.
  Part of #1112

--Server now uses 3 curse words per player, instead of two.  Since there are
  201 useable curse words, this takes the number of combinations up from
  40,401 up to over 8 million, which reduces the chances of a duplicate
  combination being used.  Fixes #1119

--pullAndBuildTestSystem.sh script now links contentSettings correctly for
  both client and server.  Fixes #1117

--updateGate now gives the content leader power to trigger an AHAP map wipe.
  Part of #1116

--Fixed so that if Eve (or another family member) creates their first well
  outside the birthland band, it doesn't unlock iron.  Only wells dug inside
  the birthland band can be primary homelands and unlock iron.  Fixes #1120

--Fixed typo in generateDataOnlyDiffBundleAHAP.sh script.

--CoordinateTimeTracking now manually requests fast vector methods, making it
  2x faster. 

--Max flight distance back to 10,000, to prevent d-town apocalylpse.

--New pullAndBuilTestSystemAHAP.sh script.  Fixes #1142

--VOG now has a TP speech command to teleport the underlying character after
  VOG mode ends.

--Extensive persistent logging around Eve placement to see if we can figure out
  why Eve spawn locations aren't resetting after the apocalypse.  Part of #1135

--Finally found cause of persistent Eve location after apocalypse (we were
  bootstrapping even location, as a last-ditch effort, basted on monument
  logs).  Part of #1135

--Fixed two bugs in tallying content leader votes.

--Fixed fitness server to allow relation names longer than 254 characters (for
  long chains of great great greats when families survive for a long time).

--Fixed so that we only check if a player becomes a ghost ONCE after age 60.
  Old code would re-check with every computeAge call after age 60, assuming
  that only one such call would occur.  But there are lots of places that can
  trigger checkAge to be called again, which was resulting in a greater-than-
  desired frequency of players becoming ghosts (and opening up an exploit
  where modded clients could spam actions that trigger checkAge right around
  age 60 to increase their ghost chance).  Thanks selb.

--Added new DISTRUST command to remove TRUST.  Invoked with I DISTRUST YOU, to
  target the closest person, or I DISTRUST EVE JONES to target by name.
  Before, you had to curse someone to remove trust.

--When a force-drop happens (like when player is wounded), if entire radius-10
  area around player is full of stuff, the thing they were holding used to
  disappear.  Now, after finding a spot in radius 10 fails, we keep searching
  in a randomly-chosen direction, in a randomized, drunken-walk zig-zag, for up
  to 2000 steps, until we find a spot (if there's no empty spot after that, the
  item still disappears, since we can't keep searching forever).  This entire
  process, until we ultimately give up, was clocked at taking 3ms on a slow
  laptop.  Searching until failure like this should be very rare, generally.





Version 428    2024-July-11

--Added more logging around cases where startUpdate in diffBundleClient fails.
  Part of jasonrohrer/OneLife#1082

--Fixed crash when viewing email on SERVICES page if email blank.  Fixes #1085

--Fixed so that authorship hash is NOT overwritten when editing an object.
  Original authorship of an object is preserved, even if the object is
  modified later by someone else.  Fixes #1093




Server Fixes:

--Fixed AHAPGate to handle names with apostrophes.  Thanks Aaron O.

--Fixed so that Rocket Ride animation is not shown to tutorial players, which
  might confuse them (unless the tutorial player themself is riding the
  rocket).  Part of #1080

--Fixed to not send Monument Call (MN) messages to tutorial players, which can
  be confusing.  Thus, tutorial players no longer get arrows to the rocket,
  bell, or endtower.  Fixes #1080




Version 427   2024-May-31

--Apocalypse jumps everyone back to (0,0).  Part of #1069

--When Apocalypse jumps everyone back to (0,0), it now preserves relative
  positioning amoung clusters of nearby people.  This means people aren't all
  slammed together right on the (0,0) mark, but people who were working
  together pre-apocalypse can easily find each other post.  For example, a
  mother standing near her baby will still be standing near her baby post.
  Part of #1069

--Apocalypse now clears Eve location and several other things.  Fixes #1077

--During soft-shutdown, if all players die of old age, and the only players
  left are ghosts, the ghosts are now force-killed.  Otherwise, remaining
  ghosts could delay server shutdown indefinitely.  Fixes #1030

--Fixed crash when adding an object to liveObjectSet when it references
  non-existent sounds that are bigger than the sound set array size.
  Fixed a similar bug for non-existent sprites, etc.

--Fixed bug in importer where it forgot to fclose after fopen on an imported
  file to peek at the header information.  This prevented the remove call on
  Windows, leaving the file behind in the import_add or import_replace folder
  after it was copied over to the imported folder.  Fixes #1079

--Game no longer crashes on Windows and Linux if it's launched from outside of
  its game folder.



Server Fixes:

--Fixed protocol document to specify zlib and not zip compression for map
  chunks and CM messages.  Fixes #1032

--Fixed server crash if twin clients specify a tutorial number > 0 when
  tutorial is disabled.

--Crontab to delete old log files (foodLog, foodLogDetail, failureLog), since
  they were taking up a lot of disk space over the years.  Now deleting logs
  over 60 days on all servers.

--Fixed remote server update scripts to do reset to origin/master --hard so
  that we roll-back to early commit if repo has been force-pushed to remove
  something.

--Data diff bundle generation scripts now remove any wayward 'settings' folder
  from content before making bundle.  A user's settings folder can't be pushed
  out to other users by accident in the future.

--Fixed generateDataOnlyDiffBundle scripts to do reset to origin/master --hard
  so that we roll-back to early commit if repo has been force-pushed to remove
  something.

--Fixed a bunch of scripts that pull from data repos to delete local tags and
  re-pull tags, so that tags that are deleted remotely are deleted locally.
  Did this with a centralized gitPullComplete.sh script, which all the other
  scripts can call when they need to run a git pull.

--Fixed linode web server setup script to make /home/jcr13 dir readable by
  all so that www user can access it.









Version 425   2024-May-10

--PLANET settings page now allows you to specify your PayPal email address,
  which will be used for delivering your revshare for content you contribute
  to AHAP.

--ahapTechTreeURL changed to ahap.info    Fixes #1065

--Ctrl-c in-game now copies recent speech log, from past 30 seconds, to system
  clipboard.  This will help non-English-speaking users who are trying to paste
  speech into translation services.  Fixes #1029

--Added a lot more logging around required version numbers when PLEASE UPGRADE
  error pages are shown.

--Fixed so that Object Editor doesn't allow baking of non-90 rotated sprites
  (which were being rounded, by surprise, to closest 90-degree rotation).
  It now shows a message explaining why the bake cannot occur.  Fixes #1070

--Slider for simulating uses in Object Editor now works the same way as slider
  in Scene editor.  Fixes #1073

--Fixed bug that was causing author= line in transition files to get
  interpreted as comment if transition had no comment, resulting in
  duplication of author= line when transition was saved again.  Fixes #1071

--When using import_replace folder, if an object ID doesn't exist, the next
  object ID is used instead of inflating the local object ID space by
  force-inserting an ID.  Fixes #1072

--Fixed glitch in rolling back object ID and sprite ID when deleting last item
  in bank (to prevent ID inflation).





Server Fixes:

--Fixed typo in protocol.txt for server.  Fixes #1066  Thanks 4ferrocyanide  

--ahapGate now has show_vote_stats call.  Part of #1064

--Life Log stats (public data) now include status=N for normal player or
  status=D for d-town player.  Fixes #1041

--Fixed major bug when maxFlightDistanced.ini is 0 (current setting), which was
  preventing planes from landing anywhere but closest landing pad.
  Part of #1040

--Server now saves known landing positions to landingLocations.txt to re-load
  after next server startup, so landing pads aren't forgotten across server
  restarts.  Part of #1040

--Improved messaging to player when building something fails due to nearPop
  restrictions.  If the required distance is short (less than 200), then we
  tell them specifically how many people need to be nearby.  This is in
  preparation for using this feature for rocket pads, which will need to be
  built in villages with lots of people very close by.





Version 423    2024-May-3

--Fixed so that aging-triggered music is delayed while rocket animation is
  playing (since aging is paused during the animation).

--Fixed so that sound/music demos for sliders on Settings page continue to
  work when revisiting Settings page after living a life.

--Support for playing Tom's music_99.ogg during YOU WON page.



Server Fixes:

--Support for periodic placements, to allow AHAP orbital locations to spawn
  every eleven hours.

--Fixed server crash when connecting to ahapGate fails (like when operating as
  a local test server).

--Blocked reflector log messages about individual server spreading and
  stop-spreading, since individual server spreading code no longer used, and
   that logging was misleading.




Version 419   2024-April-26

--Client displays current leader, and accepts leader vote, as github account
  name instead of email.

--tutorialEnabled setting now in contentSettings, and obeyed by client too.

--Windows client bundles now include OneLifeServer.

--Windows client bundles now included helper BAT scripts for AHAP Content
  Leader.

--Fixed frame-rate re-detect butto to actually show quit screen (when relaunch
  fails) on platforms like Windows that don't support auto-relaunch.

--Whoops, rogue countingOnVsync and targetFrameRate settings files were getting
  included in windows client builds by accident.  Build scripts now make sure
  those settings get removed.

--Fixed so that parts of rocket can be drawn behind player during take-off.




Server Fixes:

--ahapGate now receives leader votes, and returns current leader, using
  leader's Github account name instead of email.  Game server does the same.




Version 418   2024-April-22

--Fixed player swap in rocket animation that was being caused by passing
  pointer to an item in a mutable vector of players (so that if a player dies
  or joins and changes the vector, the player being pointed to would change).

--Added support for paste into fields in AHAP Settings (PLANET) screen.




Server Fixes:

--New tutorialEnabled setting for server, so AHAP servers can skip tutorial.

--Added rocketEnable server setting, to ensure that rockets can only take off
  from bigserver2.

--Fixed updateGate so that error message doesn't divulge content leader email.

--Support for Rode Rocket as cause of death in family tree server.




Version 416   2024-April-21

--Fixed a memory leak in transitionBank.

--Fixed crash if a soundBank sound is not mono and thus fails to load.

--Support for stereo OGG files in soundBank.

--Support for suppressing music when a longer (usually OGG) soundBank sound
  plays.  Hunger chime music suppression also uses this same new supression
  system now.

--Added support for LNCH arrow to rocket site.  Fixed so that monument arrows
  are displayed even if player is too close to the monument to hear the distant
  sound (before, if they were too close to hear the distant sound, no arrow
  would be added for them, even if they walked away later).

--Support for showing rocket launch scene to all players, server-wide.

--Support in client for displaying AHAP Grant result to player who rode rocket.

--Support for AHAP settings in client (so that player can specify their github
  account name and vote for content leader).

--Support in client/server protocol for all these things.




Server Fixes:

--AHAP Steam Build script now includes snapshot of most recent AHAP content
  data, so that new users on Steam don't face a huge content download as their
  initial experience.  Note that as AHAP development progresses, binary updates
  will be infrequent, so the content included with the Steam binary bundle will
  lag behind over time.  But at least they won't have to download absolutely
  every bit of content from scratch (there's already about 50MB of it, just in
  the starter content alone).

--New script for bundling latest AHAP data with most recent base Windows and
  Linux binary distributions (what people first download to play AHAP
  off-Steam).

--New ahapGate web service for granting AHAP to people, passing out Steam keys,
  and tracking content leader votes.

--Support for server triggering rocket ride, and stalling all hunger and aging
  while players watch the animation server-wide.

--Support for updating AHAP servers too in postPlatformDiffBundle script.




Version 415   2024-March-15

--Moving bulk download portion of a web request into a separate thread for
  maximum throughput while still updating GUI with progress.  Old thread-free
  method, using non-blocking IO, would not achieve maximum download speeds on
  fast connections because OS receive buffer would fill up when we're waiting
  for vsync.



Version 414   2024-March-12

--Actually, we can't load mods into RAM only in an active Editor, since they
  pollute the object, sprite, and sound ID space.  If the Editor ever creates
  a new object, sprite, or sound while the RAM-only mod is loaded, it will
  either need to leave a gap in the ID space on disk, or overwrite the mod
  data.  Fixed the Editor to only IMPORT ADD and IMPORT REPLACE, and not load
  anything from the mods folder.  Only the game client can load mods.

--Each sound in the soundBank folder now has a .txt file tracking authorship.

--OXZ export/import files now track authorship tags for sounds.

--Fixed so that when importing authorless sprites from OXZ files, we don't
  auto-tag sprites with our authorship tag (falsely taking credit).

--Fixed sprite import so that TGA files saved to disk are file-identical with
  what was exported.  Before, we were loading the image data from the TGA data
  in the import and then saving a new TGA file, which might not result in
  file-identical TGAs (especially for TGA files made with another tool, or
  generated by older Editor code).

--Fixed so that we have separate AHAP URL settings files for all of our
  auxillary servers, as accessed by the client.

--Updated rootAddNewDownloadServer.sh to handle AHAP downloads.

--postPlatformDiffBundle.sh now updates required binary version number on AHAP
  refelctor also.

--steamGateClient now looks for server url in file steamGateServerURL.txt
  instead of having it hard-coded.

--Scripts and VDFs in place for generating/posting AHAP-specific windows Steam
  build.

--Script for making linux binary build for AHAP using OHOL build as a basis.

--Game recording (recordGame.ini setting) is now off by default.  To correctly
  play back a game, all network traffic has to be recorded.  I found that for
  the AHAP client, which downloads a big content bundle the first time it
  starts, there's a huge lag at the end of the update download as this network
  data is hex-encoded and written into the game recording text file.  I haven't
  actively reviewed a user-submitted game recording in many years.  This is
  good to have on in early development, when tracking lots of mystery bugs, but
  it generates extra disk traffic (and lags in certain situtations) that isn't
  worth it now.  If someone needs to capture a bug in the future, they can
  temporarily turn game recording back on.

--Fixed so that after AHAP content-only update (which happens before loading),
  we don't re-launch the client, but instead go right into loading the newly-
  downloaded content.

--No more auto-relaunch on Windows, since it doesn't always work correctly.
  To be safe, let user manually relaunch on Windows.

--Windows steam depot build script now sets isAHAP.txt to 0 and
  steamGateServerURL.txt for OHOL build.





Server Fixes:

--Changed curse radius formula to start much smaller when there are only a few
  living people cursing you, but then go up on a parabolic curve from there.
  Old formula started larger and then went up linearly.  The old formula
  allowed one mega-curser to effectively block lots of players from being born
  in a given town.  Fixes #1034

--Re-directing stderr when launching headless server, which prevents
  invocations over ssh by scripts from stalling.

--AHAP versions of status report and update posts scripts.

--Scripts in place for generating AHAP content diff bundles.

--Script for Live_UnixSource distribution for AHAP.

--Remote server update scripts now --force when pulling tags, to overwrite
  tags if tags have changed remotely.

--Added updateGate web service to allow content leader to push updates.

--Scheduled data update scripts now make home path explicit instead of using ~




Version 412   2024-February-16

--Support for AHAP differentiation with a text file in the game folder.  AHAP
  clients skip universal _all.dbz content diff bundles.

--AHAP clients now check online ahapVersion.txt and download content update
  diff bundles from a separate AHAP update server.  They also use a separate
  AHAP reflector when connecting.  Client and server, if isAHAP.txt is set to
  1, track binary version number separate from data version number.
  AutoUpdatePage messaging is different for AHAP clients when downloading diff
  bundles.

--Importer, when adding new objects (instead of replacing old), prints out
  object ID remapping.

--Fixed objectBank and spriteBank to roll back nextObject/SpriteNumber value
  whenever last object/sprite in bank is deleted, to avoid id inflation.
  soundBank was already doing this.

--Whoops... major bug when importing new sprites.  fillSprite can actually
  modify sprite data (to expand edges of sprites for seamless tiling), so we
  can't do that before saving the sprite data to disk.

--Authorship tagging (with hmac of email) in object text files.

--Authorship tagging in animation text files.

--Authorship tagging in transition text files.

--Authorship tagging for sprite files.  Also special handling of sprite
  author=tag in export/import headers for sprites.




Server Fixes:

--maxFlightDistanced upped to 700,000, maybe temporarily.  Currently, tutorials
  are placed out at 400,000, so there's a chance of some tutorial horseplay.
  But now it's possible to one-hop fly out to the map origin.

--tutorialOffsetX is now a live setting (was hardcoded).  Live setting now
  pushed to 1,000,000 (was 400,000).

--protocol.txt has note abut ** for newlines in MS global messages.  Fixes #1023

--Fixed bug in map-generation code that was preventing the Edge object from
  being placed, since it counts as a short object.

--Max flight distance disabled for now.  It's not so bad to have occasional
  flights to the Tutorial area or Donkeytown.

--Added isAHAP.txt installation in remoteServerUpdate script.




Version 409   2024-January-13

--Editor now supports import_add and import_replace folders, for loading
  exported OXZ files permanently into the local content data on disk.
  Collaborators can now share content that they are working on with each other.

--Editor pickers now accept raw ID numbers in search boxes, pulling up
  object/sprite that matches that ID.

--Editor pickers NEXT/PREV buttons now jump 25 on CTRL, 125 on SHIFT, and 625
  on CTRL+SHIFT.  You can now page through all official OHOL items in 7 clicks,
  where it used to be 35 clicks.  Part of #998

--Editor Object pickers now allow you to search for field<=>value, like MapP>0
  or person=1 or food>16.  Most of the fields and checkboxes from the Object
  editor are supported by name.  Part of #998

--Refactored Pickable.h code to use inItem instead of inObject to avoid
  confusion (because Objects are only one type of pickable).

--Editor Sprite pickers now allow field<=>value search, like solid=0 or
  visibleW>200.  Part of #998

--Tutorial text now explains forgiving instead of expiring curses.  Thanks
  Spoonwood.  Fixes #1003

--Moved a bunch of content-related settings from both client and server into
  contentSettings, as to be distributed with platform-independent content
  update bundles.  Thus, these content-related settings chan be changed without
  posting platform-specific binary builds.  This will also allow future content
  editors to tweak these content settings (like number of biomes, etc.) without
  pushing binary builds.  Special cases in client/server code switch the
  SettingsManager temporarily to the contentSettings folder when loading these
  settings.  

--Fixed to escape # signs in sprite tags when exporting sprites, and de-escape
  them on import.  The # sign is the termination character of a data block in
  the OXZ file format.  Fixes #1020



Server Fixes:

--Added new minActivePlayersForNearPop setting (defaults to 15) so that
  nearPop-limited actions, like endtower base, can only happen on servers with
  at least 15 players, preventing players from preparing an apocalypse on an
  empty server, only to trigger it (which was already limited to a min of 15
  players) during a population boom.  Fixes #1017

--Added logging of server populations at moment where we decide to start
  spreading or stop spreading.  Part of #1018

--Reflector now re-reads current and max pop from a server's file after trying
  to connect again to an offline server and succeeding.  This doesn't seem like
  it will actually fix the problem described in #1018, but it's the correct
  thing to do anyway.






Version 406   2023-December-23

--steamGateClient now handles uploading mods to Steam Workshop and
  downloading/installing subscribed mods.

--Whoops... EditorExportPage was allowing _ in export tag names.




Version 405   2023-December-15

--Fixed fprintf type warning found with old Mac compiler.

--Added missing DLLs for editor on Windows.




Version 404   2023-December-15

--Fixed so that BELL and HELL arrow labels are in English.txt translation file
  instead of hard-coded.

--Fixed loads of places in both client and server that would cause a crash if
  content data set wasn't sufficiently fleshed out (at least one person object,
  at least one natural object, at least one food object, etc.).  Now both
  client and server are stable regardless of state of content set.

--Fixed memory leak when objects folder contains object .txt files with
  duplicate IDs.  Previously they were overwritten in the id map without
  freeing the previous object.  Now, only the first object scanned is kept,
  and any additional ones are freed correctly.

--Game now supports loading mods from mods folder.

--Windows build scripts now include building editor.

--Public release of EditOneLife binary on Windows and Steam.




Editor Fixes:

--Fixed soundBank to roll back nextSoundNumber value whenever last sound in
  bank is deleted, to avoid sound id inflation.

--Fixed SoundWidget to uncount live use of old sound before saving new sound
  when recording over a sound.  This further reduces sound id inflation.  Now,
  if you record a bunch of sounds, with multiple overwriting takes for each
  one, and then delete them all, the nextSoundNumber won't increase at all.

--Key legends now have dark backgrounds behind them so they are more legible
  when large objects underhang them.

--Gigantic speed up (over 10x) of Editor load time when running with
  LeakTracer.  Allocating a 400x90 scene to init the SceneEditor was too slow,
  given all the deep copying of SimpleVectors for each cell.  Scene Editor now
  detects LeakTracer and allocates a smaller scene.

--Fixed a bunch of bad memory accesses in EditorAnimationPage when current
  animation has fewer sounds than mCurrentSound.

--Fixed potentially incorrect assumption with extra animation slot indexing
  (where we were assuming that the list of extra animations for an object is
   in-order and doesn't skip any extra slots.  This might actually be enforced
   by the editor, but it's not enforced by the animation bank (you can insert
   extra animations with any extra slot ids and in any order, not just
   sequentially increasing from zero).  In various spots in the code, we were
   walking through every extra animation for an object, assuming we could index
   them using extra slot ids 0...n where we determined that there were n+1
   extra animations defined for the object.

--Editor now supports exporting resource bundles into exports folder.  These
  can be loaded by game client as mods from the mods folder.

--Editor supports loading mods from mods folder.  Note that just like with
  game client, these are loaded into RAM only, and do not change any disk
  content.  However, if you Save an object inside the Editor, the disk content
  will get changed, which may save moded content over the baseline content.
  This allows people to load mods created by others, add to them and work on
  them, and then re-export an object bundle as a new mod.





Server Fixes:

--Clearing new emotes list immediately after composing new emotes message,
  instead of much later, so that emotes don't get added later, before clearing,
  and then missed.  Fixes bug where some GH players don't get their permanent
  emote assigned and sent properly.  Fixes #972

--Fixed a busy-wait 100% cpu server bug caused by ghosts tripping the old age
  timer and setting our poll timeout (via minMoveTime) to 0.

--Slim chance of GH players.

--Before, only a player's last SIDS-death mother would be remembered and
  avoided.  If the player did /DIE repeatedly, this last SIDS mother would be
  replaced, allowing them to revisit the same mother repeatedly over time,
  which was annoying.  Now we maintin a full list of every mother for which a
  given baby player has done /DIE, and we avoid those mothers as long as they
  remain alive.  If the baby player runs out of mothers, they go to Donkeytown.
  This will reduce the occurrence of SIDS generally, since players that are
  doing this will skip mothers that they want to avoid after only one visit.
  But also, it forces baby players to have some skin in the game.  If they SIDS
  too much, they will run out of mothers and go to Donkeytown (temporarily,
  until more mothers become available) instead of cycling through mothers
  forever and annoying people.  Fixes #983

--After using /DIE to cycle through mothers, and ending up in Donkeytown, your
  SIDS list is cleared.  So your stay in Donkeytown is only temporary, and
  after you die in Donkeytown, you can use /DIE to cycle back through mothers
  again.  Fixes #985
 
--On low-pop (< 8 players), /DIE-cycling players that run out of moms no longer
  go to Donkeytown.  Their SIDS list is preserved, and they cycle through and
  become Eve.  This permits classic solo play on low-pop servers.  Fixes #990

--Fixed so that we force a girl baby if a family has no girl children currently
  (in addition to the case where they have < 4 fertile/potential-fertile
  females).  Fixes #991

--Polylingual race now has no homeland, and can give birth in any homeland
  band, though they must remain inside the bands (and still can't give birth in
  the outlands to the far north or south).

--New foodLogDetail, which gives time, player id, and object id for each food
  eaten on the server.




Version 399     2023-October-28

--Support for new GH message.

--Support for destroyed GH cause of death.

--Was depending on headIndex=-1 to detect person for headless/bodyless check,
  but getHeadIndex never returns -1.  Check if object is a person instead.




Server Fixes:

--Fixed bug that wasn't actually setting cursed status of players that were
  sent to Donkeytown.  This was causing all kinds of issues (non-Donkeytown
  players could be born to them as mothers, they were being pointed toward as
  experts, etc.)  This was apparently covered up for a long time while birth
  cooldowns were mistakenly set to zero.  Related to #967

--Support for new GH message and sending associated emote.

--Support for GH destroy phrases.





Version 397    2023-October-20

--Fixed ambiguity in English.txt file with two orderCommand values defined.
  Fixes #950

--Gesture maintained when flipping left/right due to mouse movement.
  Part of #953

--Fixed so that gestures from players don't overwrite each other (which was
  causing a player's gestures to switch randomly as other players gesture on
  the same sever).  Fixes #953





Editor Fixes:

--Pickers now show 4 lines of text per item until mouse-over, when text of
  moused item is expanded.  No more overlapping text in pickers, for items
  with long descriptions.

--Description field in Object Editor automatically rewinds to start of field
  when a new object is loaded (it used to auto-position at the end of the text
  description).




Server Fixes:

--Fixed so that if you disconnect and re-join the game, you always rejoin an
  existing life if you're still alive, even if you request twin status during
  the re-join.  Before, a request for twin status during rejoin would result in
  your previous life suddenly ending.  Fixes #934

--When top leader uses the /LEADER command, it now tells them that they are the
  leader, and tells them their title.  It used to say +NO LEADER+, which was
  confusing, since that is what is also shown for players who are leaderless.
  Fixes #936

--Fixed so that when picking female character for Eve, when all races are
  already evenly represented, with pick a race at random first, and then pick a
  female character from that race.  Before, we just picked a random female
  character, but that means that some races get picked more than others
  (because some races have more female characters than others).  Fixes #938

--Message flood detection improved by not waiting for the full batch time (5
  seconds) to elapse before checking how many messages have been received
  during the current time batch.  I.e., if they send more than 40 messages in
  the first second, we don't wait 4 more seconds before cutting them off.
  Fixes #939

--Fixed a crash caused by code changes for #938, when picking a new Eve.

--Fixed so that giver gets notice when their gift of property works (or doesn't
   work).  Before, only receiver got notice.  Fixes #963

--Whoops!  A forced birth cooldown of 0 seconds got pushed back in July 2023.
  I sometimes do this during local testing, but I forgot to revert it before
  committing back in July.  Fixed.

--Players who have played less than 25 lives are not given special roles based
  on their fitness scores.  Fixes #966






Version 394    2023-October-6

--New /MOTHER command to locate your mother (sometimes she's not your leader,
  so the /LEADER command doesn't always work to find her).  Fixes #926

--Support for using extra animation slots in emotes.




Editor Fixes:

--Made animation freeze slider in scene editor cover more time range, to be
  able to feeze action later in an animation.

--Sound widget now has text field for volume instead of just a slider, making
  even quieter volumes settable.

--Animation editor can now clone extras animations from one person to all other
  people, with intelligent matching of sprites (with same position and age
  range).

--Animation editor can now clone extras from one person object to another.

--Scene editor can now display gesture emotes.




Server Fixes:

--Touching your own race's waystone now always points you to a language expert,
  even if population falls below special biome threshold.  Expert waystones
  always work, regardless of population size.  Fixes #924

--Support for new wound-on-player generic transition that specifies what a
  partly-healed wound would leave embedded in grave if person dies with that
  wound.  For example, if you pull the arrow out, and leave the head embedded
  in, they can now have the head left in their grave when they die. Part of
  jasonrohrer/OneLifeData7#1047

--Fixed so server looks for camera-on-camera transition when taking photo,
  instead of player-on-camera transition, so the player can't interrupt the
  process by clicking on the camera again mid-photo.  Part of
  jasonrohrer/OneLifeData7#1060

--Fixed content build scripts and Steam VDF file to not try to push build live
  to the public branch automatically (which now gets Access Denied based on new
  Steam security settings released in Sept 2023).  Instead the build script now
  pauses and waits for the user to use the Steamworks website to manually make
  the build live.





Version 391    2023-September-15

--Fixed visual glitch when paved road hugged nearby walls.  Fixes #921

--Sprite layers that are marked as drawn behind player are now drawn as a
  separate layer scene-wide (above biome and floor, behind everything else).
  This allows thing to be drawn under overhanging open doors in layer to north.
  I'm pretty sure that every sprite layer marked as drawn behind is a flat
  layer that lays on the ground, and that this won't cause any other visual
  problems.  Part of jasonrohrer/OneLifeData7#1038

--Fixed photoCache compiling on mac.




Editor Fixes:

--Fixed bug in held-position view in EditObjectPage due to failure to
  initialize +containOffsets in local copy of object.

--Fixed bug in mCellSpriteVarSlider visibility in Scene Editor that was
  making mCellSpriteVanishSlider invisible too.  Can now correctly pick
  various use states for objects in scenes again.

--Fixed scene editor to allow variable uses displayed in contained objects (but
  not in sub-contained objects, for now).  This is correctly saved into the
  scene file format (but the code can still read the older style that doesn't
  have these extra fields).

--Fixed bug in maintaining producesMap in transition bank that was causing
  duplicate transitions to appear in transition editor searches.



Server Fixes

--New +containOffset tags were being treated like +contFoodDish tags and
  blocking containment.  Fixes #913

--Twins that follow the lead twin to the tutorial area no longer have their
  births logged (their deaths were already not being logged).  Fixes #914

--Fixed so that building components that appear on an auto-extended half-floor
  in a bad biome are accessible to non-biome specialists.  If a door looks like
  there's a floor under it, you can open it now.  This also applies to
  horizontal walls that have completed floors in the tile below them, but no
  hidden floors directly in the same tile as the wall.  Before, you could be
  standing in a building and be unable to access a wall shelf clearly in the
  building.  This applies to all objects that have the floor-hugging property
  set.  Fixes #920

--Player no longer phases through wall to left of landing strip upon landing.
  Empty (or non-blocking) spot to W, E, S, N selected, and if none found, then
  player is left standing on landing pad behind plane.  Fixes #922




Version 387    2023-August-18

--Added support for +containOffsetX/Y and +containOffsetBottomX/Y to micro-
  adjust the automatic container position of an object.  Needed for how empty
  glass bottles position on the table.  Part of jasonrohrer/OneLifeData7#1066




Server Fixes

--Fixed bug that was preventing cursing living players by name.  Fixes #909

--Fixed to send an intermediary PU message whenver a MOVE chain takes the
  player more than 16 tiles away from where their last PU message occured.
  This prevents out-of-date player status (like what they are holding/riding/
  wearing) from being presented to other players when they move back into range
  using a long move chain after being out of range, when their status changed
  while they were out of range.  Before, no PU message would be sent until the
  very end of a long move chain.  No more players zipping onto the screen and
  suddenly having their delivery truck appear around them.  No more players
  squeaking into view with a hand cart that they are no longer actually
  holding, and then suddenly seeing the hand cart disappear when they stop
  moving.  This still might be an issue on modded clients with a zoomed out
  view, because the threshold is only 16 tiles, but it seems to work fine in
  all cases on the official client.  Fixes #906

--Fixed bug that sent metadata over radios.  Fixes #907




Version 385    2023-July-11

--Added new SWAP protocol message to differentiate between right-clicking on
  the bare ground around an object and right-clicking the object itself.  This
  allows right-clicking the ground around a container to swap the held item
  with the container itself, instead of putting/swapping held object into the
  container.  You now have to right-click directly on a container to put/swap
  held item into container.  This also fixes weird behavior when right-clicking
  the ground around a blocking container, like a wooden box (it would swap held
  item with a nearby item or even put held item into a nearby non-blocking
  container).  Now right-clicking the ground always puts held object on the
  ground (and may cause you to pick up something else in its place, depending
  on the situation).  Fixes #896

--Avoid downloading updates if there's a minorGems hg/git checkout present,
  since that means we're compiling from source.  Part of jasonrohrer/OneLife#899

--Fixed display of numbers of years above 1000, which didn't zero-pad
  correctly, and displayed 1,054 as 1,54.  Fixes #904

--New +nearPop_30_10000 tag, which prevents an object from being created if
  less than 30% of the active player population is within a 10000 tile radius
  of the creation location.  Part of #905




Server Fixes

--Saying GOODBYE FOREVER as part of your final utterance when dying of old age
  blocks you from getting reborn to your descendants.  Fixes #892

--Donkeytown players get a DING message explaining their situation.  Fixes #893

--Life logs now include race label for each birth.  Fixes #897

--Fixed an obscure bug that allowed an EVE last name to be reused within 5
  minutes of the death of a previous EVE that used that same last name, if no
  other living players were using that last name, which blocked the ability to
  curse the previous EVE during the 5-minute window after her death.

--Fixed so that we track separate death position for each name that player had,
  instead of just their most recent death position, when deciding whether a
  curse is close enough during the 5-minute post-death cursing window.  Before,
  their next death position would override their last, and if they were reborn
  and still alive, the curse would land regardless of the curser's distance
  from the death position associated with the name they cursed.  This fixes
  several bugs in behavior during post-death cursing.  Fixes #902
  



Version 383    2023-July-28

--Moved [@] button down to avoid overlap with genetic fitness.  Part of #885

--You can now process photograph negatives into positives and view both
  photograph positives and negatives inside the game (before, you had to go
  out to the website to see photographs... now they can exist in the world to
  be treasured and discovered by future generations).  Fixes #888

--Fixed bug that was causing abstract pattern objects to appear in crafting
  hints.

--Fixed so that blue crafting hint arrow doesn't point to a partially-used
  object if the current crafting hint only applies to a fully-unused version
  of that object.  For example, you can only dump full bowls into bottles, but
  before, the blue arrow would point to a partially-empty bowl if you were
  looking at a hint about how to fill the bottle.





Server Fixes

--Added missing fflush for name logging in lifeLog.  Fixes #880

--Deciding to spawn new Eves to create special biome families now correctly
  observes the 10-player buffer implemented in the fix for #878.  Fixes #887

--Life log now correctly records cause of death.  Fixes #891




Version 381    2023-July-21

--Moved tool tip and status message up slightly, and split warning about
  editing a Steam account onto two lines (to avoid overlapping with Tutorial
  and Services buttons).  Fixes #870

--Fixed typo in name of setStatusPosition.

--Category editor now allows copying a category list to clipboard as CSV
  (for examining pattern-based transitions in a spreadsheet).

--When a useable object has vanishing sprites (as object gets used up), we now
  make sure full object and one-less-than-full object have a different number
  of vanishing sprites (so object changes visually when it goes from full to
  one less than full).  Fixes jasonrohrer/OneLifeData7#869

--Can now toggle vsync from Settings screen.  Part of #875

--Can now manually type in a custom frame rate on Settings screen when vsync
  is disabled.  Fixes #875

--New /ORDER command that allows you to review the most recent oder received
  from your leader, in case you missed it or what to re-read it.  Fixes #881



Server Fixes

--New maxRadioDistance setting, set to 100,000 tiles.  Fixes #871

--Donkeytown players are never sent CU status messages (CURSES), so they can't
  identfy each other using globally-assigned curse status words.  Fixes #873

--No genetic fitness information logged for Donkeytown players.  Fixes #874

--Server now re-sends BAD_BIOMES (BB) message whenever bad biomes are turned on
  or off (due to player count changes).  This causes client-side tool tips to
  match the current biome status (only displaying the bad biome name, like
  FRIGID ARCTIC, when it's actually inhospitable).  Before, if player count
  dropped during your life, the inhospitable tool-tips would still be
  displayed.  Fixes #876

--No longer consider Donkeytown or tutorial players as possible experts when
  someone touches a speciatly biome expert waystone.  Part of #877

--Biome expert waystones now function the same way whether specialty biomes
  are active or not.  For one thing, the active player threshold for languages
  and specilty biomes is different (15 and 30), so there was a gap in which
  you still might need a language expert, but the waystones wouldn't help you
  find one.  But also, waystone behavior might as well be consistent.
  Fixes #877
 
--When we drop down below 30 players and make specialty biomes inactive, we
  now wait until we rise back up to 40 players before making them active again.
  This 10-player buffer prevents flip-flopping between active and inactive
  specialty biomes when the player population hovers around 30 in the wee
  hours.  Fixes #878






Version 379    2023-July-14

--Editor now supports importing temporary test map (so you can work on and
  tweak a test map without actually saving a scene into the scene folder).

--Finally found source of disconnect-on-death bug.  When client receives its
  own X X death message, it instantly closes the socket to the server.
  However, later code in the remainder of that client step sometimes sends
  messages to the server (in the case of FLIP, for example).  When this
  happens, the send was failing, and the disconnection signal was being raised,
  overriding the you-died signal.  Fixed by simply not sending a message
  through the socket if it's already closed.  Thanks Agne for sending a log
  catching the problem.  Fixes #852

--New Services screen accessible from login screen, which provides a
  Challenge/Hash interface for verifying your account with external services.
  External services can verify these hashes with
  http://onehouronelife.com/ticketServer/server.php?action=check_ticket_hash
  Fixes #860

--Fixed so that creation sound's initalOnly is respected for floor objects.

--Fixed bad pointer access in editor after transition deleted. 

--Fixed From Pattern and From Category labels in Transition Editor that were
  overlapping with the new transition comment field.




Server Fixes    (2023-July-14)

--Whoops, never followed up after d7e614bcf699c27aaf6526e8a360ae95023305d4 back
  in 2020.  That setting that cleared curse counts on server startup was
  supposed to be a temporary thing for one startup only.  Set it to 0 now.
  Part of #857

--Forgiveness now logged in curseLog with F.  Fixes #857

--We now push Donkeytown players out by 200M tiles in X only, instead of 20K
  tiles in both X and Y.  This puts them far enough away that they will never
  be able to travel to interact with other players, nor will they be able to
  screw up the land ahead of other player's westward progress.  Also, by
  pushing them in the X direction only, we allow Y-placement of Donkeytown Eves
  to still land in their home biome bands.  Fixes #856

--New FORGIVE EVERYONE command (which undoes all curses that you've ever
  issued).  CurseLog now includes lines for expiring curses (E) and forgiving
  everyone (A).  CurseDB code no longer worries about old key format (which
  changed more than 90 days ago).  Fixes #858

--Server now rebuilds curse count for each player from curse database on every
  startup (the curse counts were being cleared at every server startup for
  everyone by accident, so these counts are way below the true counts for most
  accounts).  Fixes #861

--There were thousands of old-key-style (from three years ago) entries in the
  curse database.  They were never marked as 0-time for culling.  Server now
  auto-culls these at startup.



Server Fixes  (2023-July-7)

--Respawning Eves (that return to their own camps) on low-pop servers now crave
  all foods for their second craving and beyond.  Their first craving is still
  limited to low-tier foods.  Thanks Slinky.  Fixes #842

--Fixed counting of mothers, grandmothers, etc. in fitness.  Fixes #846

--Makefile now includes -auto-orient option to imagemagick convert command, as
  a work-around for a bug in certain versions of convert that flips images
  upside-down when converting to TGA.  Fixes jasonrohrer/OneLife#848

--Fixed so that heir that inherits property is fittest offspring or relative
  within 200 tiles of property itself (used to be fittest one that is within
  200 tiles of where the owner died, even if the owner was far away from the
  property in question).  Note that if none is found within 200 tiles of
  property, we still consider offspring (or relatives) at any distance as a
  fall-back.

--Fixed bug in code that searched for physically-distant relatives to inherit
  your property (if you had no offspring or physically-close relatives).
  Fixes #850

--Fixed a weird typo/bug in curseDB where we check for stale records by looking
  for ones that are older than curseDuration * curseCount, when it should just
  be older than curseDuration.  This may be left over from back when curse
  blocking got longer as the count grew.

--Changed block duration of personal curses (how long someone can't be born
  near you after you curse them) from 90 days to 50 years.  Fixes #851

--Changed curse-offline-count exponent from 2 to 1.5.  Thus, if 50 people total
  have curses against you, your block radius will be increased by 353 instead
  of 2500.  Note that someone who has cursed you still need to be online for
  you to be blocked at all.  Part of #855
 
--Added server setting allowBabyCurses (which toggles whether CURSE MY BABY is
  allowed), and turned it off for now (so CURSE MY BABY is disabled).
  Part of #855

--Added utility program for printing curseCount db stats.  Part of #855

--Changed block duration of personal curses (how long someone can't be born
  near you after you curse them) from 50 years to 5 years.  97% of players earn
  1 or less curses in 90 days, so this means than we can expect those players
  to have less than 20 curses after 5 years, when their curses start expiring.
  Part of #855

--The exponent applied to the total number of players who have cursed you
  (including offline players) restored to 2.0 (was reduced to 1.5).  This
  factor gives a boost to your curse block radius, and if 97% of players never
  get more than 20 curses total (in 5 years before they start expiring), we
  expect their radius boost to be 400, which is fine (this is also assuming
  that one of the 20 people who have them cursed is actually online).  The
  worst player in the database currently has 24 curses (with our expiry time
  of 90 days), so we don't want to reduce the exponent (24 ^ 2 is 576, which is
  already pretty small).  Part of #855




Server Fixes  (2023-June-30)

--Gene score effects used to only be bi-directional for mother, grandma, etc
  that died before you died (their age at death would affect your gene score).
  Now bi-directionality works for childless aunts, uncles, and older siblings.
  If any of these people die before you do, they affect your gene score.
  Fixes #833

--Now counting aunts with children for gene score (used to only count childless
  aunts).  Also, fixed a potential bug where a childless grandmother (if your
  mother had died) could be double-counted as an aunt for gene score.

--Before, all Donkeytown residents were spawned as Eve, instead of being born
  as a baby to a Donkeytown mother, which was an unintended side-effect of
  switching over to the new personal curse system.  Now a fertile mother in
  Donkeytown is chosen, and you're born as a Donkeytown baby whenever possible.
  This does not try to balance families or races in Donkeytown, nor does it
  observe birth cooldowns for Donkeytown mothers.  Donkeytown births will be
  completely random for now, and everyone will be in one big family out there.
  Due to biome race specialization, this means that Donkeytown civilization
  will be somewhat limited, but that's okay for now.  The assumption is that
  Donkeytown will be rather small (so balancing families and races there
  wouldn't be practical, and shouldn't generally be as interesting as the main
  game anyway.  Fixes #835

--Fleeing and random-moving objects can now cross biome boundaries if they
  don't have a biome number set.  So, for example, an escaped riding horse is
  no longer biome-bound, while rattle snakes and other animals native to
  specific biomes will still stay in their biome.  Fixes #836

--Turns out that trying to cast an unsigned 64-bit int x to a signed 64-bit int
  by doing (signed)x doesn't work, since 'signed' is shorthand for 'int' and
  thus you cast to 32-bit (on most platforms) in the process.  Fixed by casting
  to (off_t) instead, which is the type returned by ftello.  This is likely
  the cause of #838 , but I'm still testing it.

--New personal trust system.  By saying 'I TRUST SALLY SMITH' or 'I TRUST YOU'
  to the closest person, that player is added to your trust list.  Whenver that
  player speaks in the future, you will see '+' signs around what they say.
  This persists across lives.  Cursing someone removes them from your trust
  list.




Server Fixes   (2023-June-23)

--Fixed so that if you destroy a property gate, ownership is removed correctly.
  Before, the ownership record for that x,y location would linger, breaking
  "you own this" as well as construction of new owned gates at that same spot.
  Fixes #831

--You have to be closer than 20 tiles away from a gate to assign ownership of
  it to someone else.  Part of #832

--You can't name a person to give property (with BOB SMITH OWNS THIS) if the
  target person is more than 200 tiles away.  Also, the target person, if they
  are successfully given property, gets a speech-bubble message about it.  This
  message does not include a map pointer, so it won't disrupt their current
  pointer, but they can always ask for a pointer to their new property with the
  /PROPERTY command.  Fixes #832

--Fitness server backend now allows admin to search by leaderboard name.

--Support for tapoutTriggers clearing ownership.
  Part of jasonrohrer/OneLifeData7#1011







Version 374    2023-June-9

--Fixed photo aiming/placement on screen resolutions other than 1280x720.
  Thanks Twisted.  Fixes #827

--Transitions that require unsed items now show (FRESH) or (FULL) in crafting
  hints.  For example, you can see that a pie requires a full bowl of berries,
  and you can see that a diesel mining pick requires a fresh chisel.




Server Fixes

--Now re-sends curse token status upon reconnection.  Thanks Cordy.  Fixes #821

--When the container that we're holding changes size suddenly (like when riding
  over something deadly that tips the horse cart), we temporarily throw the
  thing on the ground before shrinking it, so that it can empty/scatter its
  contents around, before deleting it from the ground.  Old code made a
  sometimes-incorrect assumption about where the item will be temporarily
  dropped (since handleDrop respects biome boundaries), which means that
  sometimes we'd go to delete this temporary object in the wrong spot, leaving
  it behind in its actual spot.  This is the source of the horse-cart
  duplication bug.  handleDrop has been changed to return the actual location
  where the drop lands, and thus we can delete the temporarily-dropped horse
  cart where it actually is.  Thanks Doug L. and many others.  Fixes #814

--Items can now have multiple +cont tags which limit them to being contained
  only in particular containers.  For example, the bowl of water now has both
  +contFoodDish and +contLabDish, allowing it to go on both the food table and
  the lab table.



Version 372    2023-May-24

--Fixed so that LivingLifePage uses visibleViewWidth for all calculations (like
  player position) instead of viewWidth.  This fixes issues with camera
  position relative to player on ultrawide monitors.  Related to #782

--Fixed calling convention for two windows callbacks.  Thanks Justin L.

--New /PROPERTY command that cycles through your owned property and gives you a
  temporary map arrow to each one in turn.  Each property location has a unique
  two-word name assigned so that you can keep track of which property you're
  trying to move toward.  Upon inheriting a property, this same name is also
  displayed.  Thanks Cordy.  Fixes #800

--Unique two-word name is displayed when you finish constructing a property
  fence.




Server Fixes

--Photo server web UI now lets you page through older photos.  Thanks Cordy.
  Fixes #802

--Photo server provides width/height html hints for photos, to smooth page
  loading.

--Fixed spelling error in family tree server (Eighth).  Thanks Cordy.
  Fixes #805

--Moved curse logging calls into setDBCurse to log all cases of cursing, and
  removed them from to mostly redundant cursePlayer call.  CURSE MY BABY, CURSE
  YOU, and several other variants are now logged correctly.  Thanks Cordy.
  Fixes #809

--Removed use of 1000-character static buffer when loading map files, instead
  measuring length of object/slots string before scanning it into a
  dynamically-allocated buffer.  Complex containers were already running
  aground on 500-character static buffers (fixed elsewhere).  We might hit the
  1000-character limit eventually.  Fixes #810





Version 371    2023-May-19

--Fixed so that actor-to-newTarget numUses pass-through only happens if they
  have the same numUses AND the same useChance.  This was causing a bug when
  partially-used skewer (with 4 uses) was producing less rubber dough in the
  resulting bucket (4 uses) than expected.  Also fixed the same issue with
  target-to-newActor numUses pass-through, though it wasn't currently
  affecting any transitions.  Fixes #746  Fixes jasonrohrer/OneLifeData7#874

--165 added to list of possible monitor refresh rates.  Fixes #771

--Fixed so that there's no longer a 500-character limit to the idString when
  parsing a MAP_CHANGE (MX) message in the client.  A delivery truck full of
  backpacks full of bananas was surpassing this limit, causing glitches.
  Part of #784

--Fixed so that there's no longer a 499-character limit on the holdingIDString
  and the clothingString when parsing a PLAYER_UPDATE (PU) message in the
  client.  If the player picked up a delivery truck full of backpacks full of
  bananas, the 499-character limit was surpassed, causing glitches that led to
  a disconnect.  We never had any examples of the clothingString limit being a
  problem, but I fixed that in the same way.  Thanks D-rey-a.  Fixes #784

--Fixed so that client parsing of global server messages (MS) aren't limited
  to 199 characters in length.



Server Fixes

--Indoor bonus fades over 10 seconds (instead of instantly) when door is opened
  or player otherwise leaves indoors.  Thanks Arcurus.  Fixes #729

--Fixed so that disabled tool slot feature doesn't suddenly come into play
  after apocalypse.  Fixes #741

--Specialty biomes disabled below 30 players, but languages still enabled at 15
  players or above.  Fixed so that language specialist race keeps polylingual
  abilities between 15 and 30 player population.  Fixes #753

--When finding heir for property, we first search for fittest offspring within
  200 tile radius.  If not found, we then look for fittest offspring at any
  distance.  If not found, we then search for fittest relative within 200 tile
  radius.  If not found, we then finally look at fittest relative at any
  distance.  Distant folks no longer inherit property unless there's no closer
  choice.  Thanks Doug L.  Part of #765

--When finding follower to inherit dead leader's position, we first search for
  fittest non-exiled follower within 200 tile radius.  If not found, we then
  look for fittest non-exiled follower at any distance.  If not found, we then
  search for fittest exiled follower within 200 tile radius.  If not found, we
  then searh for fittest exiled follower at any distance.  Distant folks no
  longer inherit leadership unless there's no closer choice.  Thanks Doug L.
  Fixes #765

--Added missing stuff to protocol.txt doc about *map and player pointers in
  player speech PS messages.  Thanks Arcurus.  Fixes #770




Version 369    2023-May-12

--Added comment field to transitions (in editor), for leaving notes about
  complex, special-purpose transitions.

--Fixed windows script for makeRegenerateCaches to handle ogg.cpp building.




Server Fixes

--Fixed so that +giveClue only works if victim is given a new permanent emot
  that they don't already have.

--Fixed twin-caused crash due to ipAddress memory leak fix.

--Wildcard support on vog allow list.

--Fixed VOGP crash, if player count shrinks between invocations.

--Fixed so you can't FOLLOW someone from more than 5000 tiles away.
  People in donkeytown were spam follow/unfollowing to annoy people.

--Fixed so you can't FOLLOW someone from more than 200 tiles away, since
  long-distance follow was allowing people to locate Eve and grief her.
  Thanks Astral W.

--Added forced disconnection for clients that are spamming too many messages
  per second.  Thanks QuirkySmirkyIan.

--Rolled back the forced disconnection for now.  Considering a new way to deal
  with clients that spam messages without waiting for server response.

--New force-disconnect code that pinpoints only macro/bot-based exploit, with a
  limit of 40 action messages per 5 seconds, or 80 move messages per 5 seconds.




Version 365    2021-October-28

--Sound effects can now be OGG files (in sounds folder) to deal with longer
  sounds, like snippets of music, without wasting disk space.

--Emotes can now +hideHead of emoting person.

--Support for rideable objects that +hideRider.

--More robust implementation of +neverDrop, so that object isn't manually
  dropable or swappable even if use-on-bare-ground transition defined (that
  transition only applies when object force-dropped, like when holder is
  wounded).

--Support for HELL arrow.

--Fixed a memory leak in server newConnection ipAddress tracking.

--Added support for +giveClue



Server Fixes

--Web bots hammering the server will no longer fill up possible player slots,
  since we notice that they aren't sending OHOL protocol messages and
  disconnect them immediately (before, we gave them a 10-second grace period to
  send a valid message, which consumed a connection slot).  They will also not
  prevent the server from shutting down gracefully, since we now only wait
  until 0 active players (and no 0 active players and 0 new connections) before
  shutting down.

--Added an ipBanList, for IP addresses that make 10 bad connections to a server
  in a row (badly formatted messages, failure to login in a timely manner, 
  etc.).  After 10 bad connections, that IP is insta-rejected for 5 minutes
  before it can try making another connection.  If a bot is hammering the
  server long-term, that cool-down time for the IP will grow over time, beyond
  5 minutes.

--All server outbound web requests (to various utility servers, like stats 
  server, ticket server, etc.) now have a timeout of 10 seconds each.  A
  firewall bug was causing some of these to never finish, leaving a bunch of
  clients hanging in an unfinished login limbo state.  Now the login process is
  more robust, and will always finish, even in the face of unresponsive utility
  servers.

--Another fix to Eve placement to prevent eastward jump-backs:  we now use
  west-of-homeland Eve placements to keep pushing the last-eve position further
  west, so if we ever have to default to the walking grid later (because there
  are no first homelands left), then the new walking grid will start to the
  west of the last non-grid Eve spawn.  Thanks Teliot.





Version 364    2021-May-26

--Network stats command is now /NETWORK to avoid blocking crafting filter
  for /NET.  Fixes #692

--Tweaked hint sheet paper sprite position to keep text from getting too close
  to edge.

--Merged pull requiest #665, fixing out of range sound bug.  Thanks Justin L.





Server Fixes

--Expert waystones no longer point you to an expert in a low population
  situation where specialist biomes are disabled.  Fixes #695

--Fixed so that non-follower gates don't accidentally work like follower gates.
  Forgot to check a separate case when testing for gate ownership.  Fixes #689

--Fixed so that shaky gates can be destroyed by non-owners (whoops) and so that
  follower gates can be opened by followers, but can only be destroyed by the
  actual owners.  Fixes #688

--Apocalypse is impossible if there are less than 15 players on server.
  Fixes #693

--Fixed so that deadly animal passing over an empty tile (in a 2 or more tile
  jump) can still attack you if you're standing there (before, it could only
  attack you if the tile was non-empty).  Fixes #690

--Fixed so that you can't set a blocking object down in a sliver of good biome,
  surrounded by bad biome, in such a way that you are blocked from reaching it
  to pick it back up again.  Fixes #694

--Special biomes now occur in horizontal bands, 200 tiles thick, with snow to
  the north, then mountain, then jungle, and then desert to the south, and
  mountain outside of those bands farther north and south.

--Homelands for birth now coincide with the special biome bands.  Outside of
  your home band, you can't have babies.
 
--Eve Y location shifted up into center of her homeland biome band.

--When an outsider (non family member) follows you, who you haven't exiled yet,
  you get a notice about it and an arrow pointing toward them.  A visitor to
  your follower gate can see your name and follow you to come through your
  gate, so now you get a notice that they've done this, and you can go to deal
  with them if needed.

--Fixed crash when informing a leader about a new follower and there's a
  leadership loop.

--New player food decrement bonus 18 seconds (was 12).

--New system that allows you to get reborn to your descendants in your next
  life if you live to old age.  For women, descendants are children,
  grandchildren, etc.  For men, descendants are nieces, grand-nieces, etc.,
  and in rare cases, much-younger sisters.  Descendants are tracked for 1024 
  generations (10 days).  This means that if you die of old age in your last
  life today, and come back to play again a few days later, you will be born to
  your descendants if they're still alive.  This preference for getting born to
  descendants will override Eve placement and mother birth cooldowns, but not
  curses.  Dying even slightly younger than 60 will break you out of getting
  born to your descendants again.

--Fixed special biome band placement so that boundary does not line up with
  natural spring lines.  Shifted all bands north by 20.  Fixes #709

--You can now exile, redeem, forgive, give ownership to, etc. someone using
  just their first name, and it will find the closest person with that first
  name.  This works for anything but curses, which still require you to say
  their full name, to curse them by name.  Fixes #710

--When a leaderless leader dies, and we pick their fittest follower to take
  over as leader, we now ignore exiled followers (unless we have no choice, and
  all followers are exiled).  Fixes #708

--If multiple DING messages would be sent to client at same time, making them
  pass by instantly and be unreadable, the server queues them up instead and
  sends one to the client every 7 seconds.  Fixes #723

--Server now keeps client connection open longer (10 seconds, was 5 seconds)
  after sending death message to client.  This should reduce the chance that
  the connection is closed before the client receives and processes the
  message.  Fixes #726

--Fixed so that victim or terrified emote does not stop incorrect after victim
  steps out of a bad biome (biome relief emote code was interfering with it).

--Fixed detection of out-of-band situation so that language-specialist family
  isn't fertile out of band to far north of far south. Fixes #725

--Moved south-most desert band 2 tiles further south, to leave a gap between
  jungle and desert, so that folks who get sick in both biomes don't face an
  uncrossable boundary between jungle and desert (crossing code assumes there
  is a grey biome gap between specialty biomes).

--Fixed server crash when a leader dies who is still following a stale,
  dead-and-removed leader.

--Fixed a few instances of char to signed char, because on Rasberry Pi, char
  defaults to unsigned.

--Fixed so that extreme homeland outliers can't shift average unilaterally and
  screw up placement of future Eves.  We now discard the largest outliers one
  by one until all considered homelands are 1500 from the remaining average x
  position.

--Reduced outlier radius to 500 (was 1500) when computing cluster of existing
  homelands for next Eve placement.

--Tutorial lives don't count toward last-life-was-short trigger for
  posse-joining restrictions.

--Fixed so that when we're tracking a window of the ten highest-fitness recent
  players, to judge the fitness level for the next Eve player, we don't count
  players that aren't Eve eligible for other reasons (tutorial players, d-town
  players, or players that are cycling back to the same family again).

--Unblocked twins/trips/quads from earning curse tokens.

--Unblocked twins/trips/quads from cursing other players.

--Only considering primary homelands when looking at homeland cluster for Eve
  placement, so one family can't spam wells to swamp the cluster average
  location.

--Min active players for specialty biomes increased to 30 (was 15).

--Male override support.

--Special logging of eve placement relative to non-outlier homelands.

--Realized that many families don't have primary homelands, since they resettle
  old villages and don't necessarily tap out new iron.  Thus, for detecting
  homeland cluster for future Eve placement, we now use each family's first
  homeland instead of only their primary one.




Version 361    2020-September-25

NOTE:  Must update server and data this week before client.

--New second phase of tutorial, which is a solo wilderness survival challenge.
  Gives new players a chance to learn the ropes of survival without the
  pressure and chaos of village life.  Solo challenge can be bypassed easily
  by those who want to skip it.

--Fixed so that requesting a leader arrow with /LEADER takes priority over
  other arrows (before, an EXPT arrow had priority over all other arrows).  OWN
  (when you touch a locked gate), LEAD (if you requested it manually), and EXPT
  now have the same priority.  An automatic LEAD arrow (when you receive an
  order) still has lower priority.  Fixes #681

--New ally gates display the colored badge of the gate-owning leader.

--Fixed so that car numeral not incremented when hitting roadkill.  Fixes #683

--Fixed 2-digit, 0-padded formatting of car serial number in description.



Server Fixes

--Disabled tool slots (minActivePlayersForToolSlots 100000).

--Touching your own expert waystone (e.g., desert stone if you are a desert
  expert yourself) now points you toward the closest language expert.
  Fixes #680

--Support for special gates that only block non-allies passing through.
  Part of #682

--New players start with fitness scores of 0, so helping a new player, even if
  they die young, is always beneficial to the fitness scores of expert players.

--Curse names no longer use sender email in randomization, meaning that all
  players see the same curse name on the same individual.  Thus, players can
  compare notes about the behavior of a given cursed individual.

--Personal curses now last 90 days (was 30 days).







Version 358    2020-September-21

--Fixed so that filtering for /DIESEL ENGINE doesn't cause you to /DIE.
  Fixes #667

--Improved tutorial by NOT locking hint hallway for 20 minutes, and adding a
  new tutorial stone explaining where the hints are.





Server Fixes

--New food settings to ease new players into the difficulty of the game.  New
  players get slower food decrement time.  This bonus has a half life of 
  10 hours of playtime.  Does not affect tutorial players, who still get the 
  same "hard" food timing that the tutorial was designed for.

--Fixed so that wide objects (like parked truck) can't be accessed on their
  extended side if that side extends over a blocking object (like a truck
  parked at the edge of a fence, overhanging the fence, can't be stolen through
  the fence).  Fixes #669.





Version 356    2020-September-18

--Support for variable dummy objects that have numeral sprites which count up.

--Support for serial numbered variable dummy objects, where the next variable
  object is substituted for each new object created in the world.  (Example:
  sports cars with unique numbers on the side.)





Version 354    2020-September-11

--Support for containers with invisible contained items.

--Support for sprites (like words) that never flip when object flips in world.
 




Server Fixes

--Fixed crash when client sends chat string containing only invalid characters.



Version 352    2020-July-24

--Support for paging through items in Editor pickers with [ and ] keys.

--Shaved 13% off loading time by reducing repeat memory allocations when
  expanding transition bank and object bank with runtime-generated elements. 
  Also optimized a few other loading hotspots.  Fixes #661

--Shaved another 10% off loading time by optimizing inner loop of kerning
  calculation during font loading.

--Fixed appearance of certain held objects, and arm position, after flipping
  character to left or right with mouse movement.  Fixes #657

--Fixed endless looping behavior if custom server address includes a bad
  hostname that gets looked up as invalid instantly.  Fixes #662

--CTRL-right-click on object picker in object editor inserts other object above
  current sprite layer.

--Can now paste email into login form.  Fixes #649



Server Fixes

--Server converts all incoming client emails to lower case.  Fixes #659

--Fixed rounding errors in computing fitness ranking.  Fixes #660

--Homelands expire immediately when last member of family dies (before, it
  would wait until no baby was born in homeland for 60 minutes).  Fixes #658

--Fixed a case of transforming an empty basket that is on a table (by adding
  grapes, for example).  Before, this was blocked because the basket was
  potentially a sub-container.

--Server cleans up long runs of spaces between words after removing forbidden
  characters in SAY.  Fixes #653

--DING messages explaining why you're blocked from joining a posse.  Fixes #663

--Can solo kill any person who landed a kill themselves in last 60 seconds.
  Fixes #648




Version 350    2020-July-16

--Support for +causeAutoOrientV tag (opposite of +causeAutoOrientH).

--Fixed color of background box in category editor to not interfere with long
  text.

--Support for -wall tag in object description, to push what would otherwise be
  drawn in the wall layer into the non-wall layer (so that pipes through fences
  can visually connect properly, and not overlap other pipes in a weird way).

--Fixed case where you drop object on floor at edge of bad biome.  Fixes #654





Server Fixes

--Fixed rare crash when client sends an illegal chat character (impossible with
  official client) when character is drunk.



Version 348    2020-July-10

--Support for moving objects that leave floors behind, or land on and change
  an existing floor.

--Support for road classes, so that logical road can continue across road
  variations (corners, t-junctions, etc.).

--Fixed crash when loading an empty category.

--Fixed biome ground tile glitch when floor doesn't completely cover tile
  square.




Version 346   2020-July-3

--Forbid backslash and quotes in login email address in client.

--Forbid player flipping when a 0-speed object is held (like cast fishing
  pole).  Fixes #644

--Object editor preserves use vanish when inserting an object.

--Category editor preserves index, if possible, when switching categories.

--Tech tree button (to open Onetech in browser) on login screen.  Better tool
  tips for several buttons.  Fixes #647





Server Fixes

--Fixed crash when someone right-clicks a full basket on a table.

--Fixed glitch where you get stuck unable to satisfy a craving if the craved
  item has a YUM parent (example:  bowl of gooseberries).  Fixes #641

--Fitness server admin interface now has links to other players on details page.

--Two bugs in genetic fitness tracking.  First, if your mother is childless,
  she was being considered as your aunt in the ancestor tracking.  Second, if
  an email has a wayward backslash character (which the client should forbid,
  but does not), it breaks the SQL statement, preventing fitness from being
  logged.  Both issues were causing lives to be ignored or mis-recorded by the
  fitness server.  Fixes #642.  Fixes #643.

--Pagination of fitness server logs.




Version 344   2020-June-26

--Cravings implemented.

--Can use a tool on objects in certain specially-marked (+useOnContained)
  containers.  For example, can use a knife to slice a loaf of bread that is
  sitting on a table.  Before, you had to remove the bread from the table to
  slice it, and then put it back on the table.

--Hunger slips now account for stored YUM bonus, so they don't show hungry or
  starving, when you're actually not due to your bonus.

--Fixed glitch in lingering eating state after eating a food that leaves
  nothing in your hand.

--Support for emote decay sounds, so that satisfaction sound can play at the
  end of satisfied emote and not overlap with food's custom chewing sound.




Server Fixes

--Fixed family tree server to accept longer last words.

--Fixed bug that caused Eve spawn to jump to the west of a donkeytown homeland.
  Fixes #633.

--New method for putting Eve to west of homelands.  Completely ignore any
  d-town or tutorial homelands, and compute the average location of the rest.
  Place Eve to the west of the furthest-west homeland that is not > 1500 to the
  west of this average.

--forceEveAfterGenerationNumber pushed up to 100 (about 1 new town a day).
  Was 40 (about 1 new town every 9 hours).

--New live server setting:  maxLivingChildrenPerMother, set to 4.  Mothers that
  have 4 living children are on infinite birth cooldown, unless other factors
  force them to have another baby.

--Fixed server crash upon receiving a malformed MOVE message
  (thanks Tru Custom).

--When solo killing is possible (due to enemies of target swamping allies), no
  explanation was given.  Now a DING message explains this to the killer, so
  they know they don't still need to form a posse.

--When someone is exiled after a posse is already formed, the min required
  posse size shrinks accordingly.  Before, the previously-established min posse
  size would prevail, even after someone was exiled.  This might allow one
  griefer to protect another by maintaining a posse against their comrad so
  that exile wouldn't shrink the posse size.  Fixes #638

--Fixed lingering ownership that could occur if your heir died a few seconds
  before you did (UNKNOWN PERSON as owner of a gate, forever).  Fixes #636

--Childless women are treated like men in terms of who counts as genetic
  offspring (nieces and nephews who are born while they are childless).  This
  closes an exploit where a woman runs away from her homeland to avoid having
  kids.  Fixes #635



Version 342    2020-May-30

NOTE:  must update server first this week.
NOTE:  must disable clearCurseCountsOnStartup after servers restart this week.

--Player character now flips facing direction as mouse moves to left and right.
  Fixes #623

--Object editor page shows current object ID.

--Fixed crash in Animation editor when right-click dragging with empty object.

--I FORGIVE YOU (or I FORGIVE JOHN SMITH) to forgive a personal curse.



Server Fixes

--Server no longer disconnects client when it sends an unknown message type.
  For future protocol updates, this allows client to be updated before server.

--Picking up a 3+ child to nurse them clears their starving emote.  Fixes #626

--CurseDB key format now has comma between emails.  Should have done this a
  long time ago.  Temporary code in place for fall-back to old no-comma key if
  entry for new comma-key not found.

--Eve is pushed to the west of farthest-west active homeland, not including
  d-town homelands.  More chance for her to find an area to settle.  Fixes #624

--Support for diagonal tap-out gradients (sw, ne, etc).

--To prevent build up of stale curse counts, we now gradually iterate through
  curse database (10 iterations per step) and check for stale curse times.
  This keeps our curse count per player accurate over time, and fixes a glitch
  that mistakenly sent some redeemed players to d-town due to inflated total
  curse counts.

--Added a clearCurseCountsOnStartup setting, and enabled it, to clear stale
  curse counts on next startup (without removing live personal curses that
  haven't expired yet).





Version 340    2020-May-22

--New speech length limit curve that rises rapidly between ages 8 and 16, so
  that adults aren't so limited in what they can say.  Babies still gain one
  letter per year up to age 8, but by age 16, the limit is 66 characters. 
  After that, you gain one character per two years, and can say 88 characters
  by old age.

--/LEADER command now gives you an arrow to your top leader.  Fixes #615

--New /UNFOLLOW command that can be used by the youngest baby.

--Non-baby players that will starve to death in less than 20 seconds display
  starving emot, complete with off-screen H sound.  You can now easily notice
  people who need help.  Fixes #614

--Support for +yumID tag to group different foods into the same YUM category.
  Part of jasonrohrer/OneLifeData7#799




Server Fixes

--Truncating said text to avoid overflowing metadata limit when writing
  (client and server should enforcing good limits anyway, but added more checks
  just in case those numbers change in the future).

--Fixed bug in DING redeem message sent to redeemed player (was being sent to
  everyone by accident).

--I FOLLOW YOU and other non-name phrases must not have other strings in front
  of them (so SAY I FOLLOW YOU won't follow someone by accident).  Fixes #620





Version 337    2020-May-15

--Fixed glitch in VOG mode that left distant players invisible (marked out of
  range) when we jumped to them.

--New /LEADER /FOLLOWER and /ALLY command to show labels above the heads of
  people.  Part of #610

--DING messages showing follower and ally count when you use the new commands.
  Part of #610

--Help screen shows I FOLLOW MYSELF.  Part of #610





Server Fixes

--You get informed when you target a top leader to kill (instead of an arrow
  pointing toward that leader as a possible exiler).

--Fixed posse size system glitch when posse started with NoWaitWeapon.
  Thanks Wondible.

--Fixed so that there's no victim emote when targetting with NoWaitWeapon
  (snowball, tatoo needle).  Before, emote was getting stuck after dropping
  weapon.

--DING message upon issuing an order now shows you your follower count.

--When pointing you toward closest follower after issuing an order, don't
  consider followers you see as exiled.

--Last heard monument call is passed from mother to baby, but only perpetuated
  one generation (inherited calls are not passed to next generation after
  that).  No more perpetual stale monument calls.

--Support for +causeAutoOrientH, which triggers E/W neighbors to auto-orient,
  but not N/S neighbors.  When an object goes from auto-orienting to not, other
  auto-orienting objects around it now un-react to it.  This allows, for
  example, corner fences to go back to being horizontal when the fence to the
  north or south is removed.  Part of jasonrohrer/OneLifeData7#787

--Fixed case of stale object left in movement record overriding an object that
  changed mid-move (allowing a 3-arrow bear to go back to being a 2-arrow bear
  and attack mid-move, if shot with the third arrow mid-move).  Fixes #608

--Changed movement code so that track carts that pile up against obstacles
  (something beyond the end of a disconnnected track or another cart in the
  way) don't derail, but instead pile up.  Part of jasonrohrer/OneLifeData7#790

--DING message when your leader exiles or redeems you, showing you your new
  ally count after this action.  Part of #610

--Property inherited by fittest close relative, instead of oldest close
  relative.  Part of #610

--Leadership inherited by fittest follower, instead of oldest.  Part of #610





Version 336    2020-May-8

--Fixed disappearing adult glitch when an adult carries you far away from your
  pick-up location.






Server Fixes

--Fixed leader auto-heir code to pick the oldest direct follower instead of the
  oldest follower overall.  Old code resulted in loops in the leadership tree 
  that caused the client to get stuck in an infinite loop.




Version 334    2020-May-7

--When the last owner dies, property is automatically inherited by the oldest
  direct offspring of the owner, and if none exist, then the closest, oldest
  relative of the the owner.




Server Fixes

--Max baby/mom ratio 1.0 (was 2.0) and baby/adult ratio 1.0 (was 2.0).  When
  these ratios are met or surpassed, a new Eve is inserted.  During normal
  times, the ratios are more like 0.5 and 0.125, so the ratios only come into
  effect during server restart.  There have been too few Eves and baby overload
  after recent restarts, so these new settings should give us 2x more Eves.

--Min posse size cap 5 (was 3), which means that in places with 10 or more
  people, you need a posse of 5 to kill, and in places with 8 or 9 people, you
  need a posse of 4 to kill.  (Min posse fraction is 0.5 of the local
  population.)  This makes it harder for small groups to wage campaigns of
  terror.

--Only people old enough to join a posse (age 9, when they can say I JOIN YOU)
  are counted when computing min posse size.

--When a leader dies who is following no one, their oldest follower inherits
  their position.

--When counting area population to determine necessary posse size, we now count
  people in radius around victim, not around killer.  This closes a potential
  exploit where the killer wanders out into the wilderness and issues a verbal
  kill command from just in radius in a way that reduces the population around
  the killer.

--Fixed so that instant-apply of 1-second transition to target object doesn't
  happen if that transition is a moving transition.  This fixes glitches where
  clicking on a moving cart causes it to crash.  Fixes #607

--MinPosseFraction now 0.66 (was 0.5), which means you need a super-majority to
  agree before you land a kill.  The cap has been pushed up to 99 (was 5),
  which is effectively unlimited, which means that a rogue posse cannot
  slaughter a village unless the non-posse members are in the super-minority.

--New alternative mechanism for measuring consensus to kill:  how many nearby
  allies do you have (people who share the same top leader as you) vs how many
  nearby enemies do you have (people who see you as exiled through leadership
  mechanics).  If you have more enemies than allies, you can be solo killed. 
  If you have as many or more allies than enemies, minPosseFraction applies as
  before.  In other words, the posse size requirements, which are currently
  exreme, are bypassed if the majority of people around you see you as exiled.

--Force-drop code for target player terrified by posse was dropping a 0 item
  (if holding nothing) by accident, deleting whatever was on the ground.

--When you try to solo kill someone, and can't because they have too many
  allies, you get an arrow pointing back to their top leader, who has the power
  to exile them.




Version 332    2020-May-1

--Fixed a rare bug where a player standing still and not changing while you
  move out of range of them will still have emote and animation sounds
  displayed for them (because you never get a PO message for them).  Their
  distances is now measured and they are marked outOfRange client-side, even if
  no PO message arrives for them.

--Fence and wall making now much less fiddly, because you auto-move to a
  neighboring tile if you try to build a fence or wall where you're currently
  standing (before, the build action was blocked by you standing there).

--Fixed tutorial wording to match how YUM currently works.  Fixes #604




Server Fixes

--If player had short last life or is twin, we don't even let them join a
  posse, to avoid confusion.  Otherwise, a seeminly large-enough posse might be
  ineffective.  A short life or twin player can still lead a posse or complete
  a solo kill in a low-pop area (but they don't count toward the population of
  the posse that they lead).

--Being part of a full-sized posse prevents biome sickness while chasing
  victim (victim can't hide in bad biome to make you drop your weapons).

--VictimTerrifiedEmote (where they whimper repeatedly) now triggered by kill
  posse being big enough.  Thus, you can tell whether you're in real danger of
  being killed by whether you are whimpering.  The posse can also know whether
  it is big enough by whether you are whimpering or not.

--When targeted by a full-sized posse for killing, where the posse has more
  than one member (not in case of wilderness solo posse), you drop what you are
  holding, and can't pick anything up.  This happens while whimpering in
  terror, so you're too scared to hold anything.  This prevents victim from
  escaping on a horse.

--If you start in a bad biome holding something, you don't get sick and drop it
  while continuing to move in that bad biome.  Thus, if you enter a bad biome
  while in a posse, but that posse disbands, you don't drop what you're holding
  in the bad biome.  It's only crossing into a bad biome that makes you sick
  (when you're not in a posse or in some other situation that protects you from
  sickness).

--You don't get NEW OFFSPRING BABY notifications when you're too young to help.

--Donkey and tutorial players can't manipulate end tower or ring bell.
  Part of #603

--Fixed case where newly spawned d-town player's personal curse tags don't show
  up to the people who cursed them.

--Gate owner only gets VISITOR notice and arrow if they are out of range (which
  makes them harder for the visitor to find), and at most one notice per 
  minute, so visitors can't spam them with repeat notices.

--New Baby notifications are throttled so you don't receive more than one per
  minute.




Version 330     2020-April-23

--Support for +becomeUseX tags, for non-use objects that should turn into a
  specific use count in the newTarget after a transition.  This allows (for
  example), the same scrap box to result from scrapping different objects with
  differing amounts of resultings scrap metal.  A nozzle is +becomeUse2, while
  a full piston head is +becomeUse6.




Version 328     2020-April-17

--Don't interrupt character's speech with automatic +FAMILY+ marker above their
  head.  Fixes #588

--Whenever you get an arrow pointing toward a person (baby, expert, leader,
  owner, visitor, etc), once that person is close, you see a label above their
  head.  Otherwise, they can be hard to locate in a crowd.





Server Fixes

--There are still food surpluses everywhere.  Food scale factor floor 0.5
  (was 1.0), eating bonus left alone. This increases food pressure long-term,
  but not too hard for Eve starts (b/c food scale factor still starts at 1.0).

--Food scaled on a gamma curve instead of linearly, allowing us to reduce
  effectiveness of small foods without affecting large-valued foods so much.
  Gamma starts at 1.0 and eventually reaches 1.5, with a half-life of 4
  generations.  By gen 20, a berry only provides 1 food, but a feast plate
  still provides 40.  Linear food scale factor can still apply on top of gamma
  (to scale all foods uniformly), but turning it off for now (setting floor
  back to 1.0).

--When triggering unlock of iron veins due to a primary homeland, we only count
  it as a primary homeland if it taps out at least one iron vein.  Thus, if a
  family makes a bad choice for their first well in an area with no iron veins,
  they can move later to a spot with iron veins and unlock them with a new well
  site.  Fixes #590

--Applied YUM bonus no longer scaled by food scaling factor (too confusing).
  Fixes #592

--Another fail-safe, at beginning of handleDrop, to prevent dropping in a bad
  biome if we're on the edge of a good biome.  Before, the only fail-safe was
  in findDropSpot, which is only invoked if the first prefered spot already has
  an object in it.  Fixes #593

--If your last life was a short life (currently under 10 years, a live server
  setting), then you are not counted toward posse size when you join a posse.
  This prevents people from die-cycling to find their friends and then gang up
  on people to kill them.  You earn the right to join a posse by surviving
  through childhood in your previous life.  This is similar to the twin
  restriction on being counted toward a posse.  People who are die-cycling to
  find each other are essentially non-identical twins.

--Experimenting with unbreakable YUM chains.  Each new food in your life both
  earns the current bonus and increases the bonus.  Repeat foods don't earn the
  bonus, but don't reset the bonus back to 0.

--Live server setting for a YUM bonus cap.  Currently -1 (off), but can be
  turned on in future to limit how big a YUM bonus can grow.

--Better than food-scale gamma:  Subtract a constant value from all foods, and
  bottom-cap the result at 1.  This reduces the value of small foods a lot
  without affecting high-value foods too much, relatively speaking.  This is
  better than a linear scale factor, which takes the same relative chunk out of
  all foods, and simpler and easier to control compared to a gamma curve.  This
  constant, which is the eatCost (opposite of eatBonus) kicks in over time as
  the generations pass, currently topping out at 5.  The old gamma and linear
  scale factors are still in place, and can be turned on as-needed, in
  conjuction with this new eatCost.  But they are both off for now.  The
  eatCost currently goes to 1 at generation 7, 2 at generation 14, 3 at gen 21,
  4 at gen 29, and 5 at get 42.

--When a non-primary homeland (outpost) expires (no baby born there in past
  hour), any primitive well there (pre-newc pump) collapses into a well site
  (9 stones) and dry springs in the area become wet again, and sunken iron
  veins in the area resurface and become muddy veins again.  If someone else
  makes a well in the area, the springs dry up again.  If someone else
  establishes a primary homeland there, they can unlock iron veins again.
  So you can't run around making spruious outposts to perma-block iron in a
  large area.

--When someone touches your gate and is blocked by it, you get a low-priority
  VSTR arrow pointing toward them.




Version 326     2020-April-9

--Editor search boxes now allow -term to avoid objects with term in the name.




Server Fixes

--When adding an Eve due to a race dying out or all families being too
  high-generation, we wait for a player with a fitness score equal to or
  greater than the last 10 unique players that were born.  This window size is
  a live server setting.  You can no longer spam /DIE when you know a new Eve
  is about to be placed to give yourself a high chance of being Eve, nor can
  you hold and daisy-chain Eve by blocking your own fertility as Eve and 
  killing yourself at 40 to jump right back in to Eve in the same race.
  Fixes #581

--Now that towns are closer together, base curseBlockRadius reduced to 50
  (was 100).  Fixes #705

--Fixed so that players sent to donkeytown don't get a curse token to spend.
  Fixes #587




Version 324     2020-April-2

--Arrow to biome expert lasts 3 minutes (was 1 minute).

--Touching an expert waystone points you to a very close expert (<32 away), if
  a close one exists, OR to the well site in a populated expert homeland.  No
  more wild goose chase for a lone expert out in the wilderness who will
  probably be gone by the time you get there (or who may be walking away from
  you as you try to approach them).




Server Fixes

--Max baby/adult and baby/mom ratio, which trigger force Eve spawns, are now
  live server settings.  Trying max baby/mom of 2 (was 3) to reduce baby
  overload after server restart.

--Fixed drop-in-bad-biome trick with vehicles.  Fixes #694

--Added support for transitions that end with a floor in hand, meaning that
  floor is put UNDER target object.  This allows a snow floor to be installed
  under an ice hole, for example, without making a special ice-hole-floor
  object, in turn making such an ice hole work for all families (because it
  now has a floor, protecting them from the arctic).

--Reduced Eve placement grid jump size to 50 (was 200), because only 1/4 Eves
  placed is actually surviving, and we've been walking 1000 to the west every
  day.  Now we expect to walk 250 to the west every day.

--Chasing (and fleeing) animals now react to nearby players as far as 10 away
  (was 7).





Version 320     2020-March-28

--Finally figured out a way to make deadly moving objects (like bears) attack
  in passing, when they cross your position while you're standing on a
  non-blocking object.  Server checks their rounded intermediary position, when
  checking whether you're standing on a deadly object, if you're standing on a
  non-empty tile.  Animal turns into attack state immediately, mid-move, and
  client has been fixed to allow moving objects to transition in-motion
  (before, they would snap to their destination instantly if a transition
  happened in-motion).  This will also fix a few other snap-to-destination
  glitches.

--Whoops... switch to STARVING slip was not working for elderly people who were
  listinging to their final music (final music blocks starving chime, but was
  also blocking slip change).

--Helpless babies (under age 3) now flip between FULL or STARVING, with no
  HUNGRY state in between.  They can only nurse or be fed food while STARVING.
  A mother picking up a non-starving baby still burns one of her food pips, and
  holds the baby at the current food level for the duration of the holding, but
  won't top up the baby.  The only way to top up a baby is to feed them when
  STARVING.  Baby communication to care-givers is now much more crucial.

--Touching a property gate that you don't own now gives you an arrow pointing
  to the closest owner.

--Fixed a glitch in populating use dummy transitions with no use pass-through,
  where we weren't populating the case for the unused actor or target with the
  used target or actor.

--Support for transitions where lastUseActor AND lastUseTarget is flagged at
  same time.  This has never been needed before, but was needed for mining pick
  used on mine, since both can be exhausted.




Server Fixes

--Nurse cost back to 1 (was 2).

--Optional code for counting visually unique objects.

--Fixed glitch where you could transform worn clothing into some other clothing
  type (cloak into ghost costume whith knife).  Fixes #575

--Fixed bug in way held object was being set after SELF action to transform
  clothing (eta decay for held wasn't being set).  Fixed to handle instant-
  decay (1-second auto-decay) when processing SELF action to use object on
  clothing.

--Max flight distance 10,000 tiles.  No more flights to tutorial or d-town.

--Support for +primaryHomeland tag, which limits creation through tap-out to a
  family's first homeland.




Version 318    2020-March-19

--Fixed misspelling of ABANDONED for wells.

--Added a priority ranking for temporary home arrows (EXPT/MAP is top,
  LEAD/SUPP is middle, and BABY is low priority).  This prevents less-important
  home arrows from interrupting your more intentional and directed home arrows.
  If you're out actively searching for an expert, you don't need constant
  arrows pointing back to new babies at home.  Fixes #570

--Fixed so that 1-second "instant" transtions can go through instantly if they
  would otherwise block a player action.  1-second transitions are used for
  lots of temporary objects that are used to play a special creation sound
  (example:  cleaning a dirty pad plays a different sound than making a pad
  from scratch).  Fixes #571



Server Fixes

--Fixed to send homeland info for your spawn position.  Fixes #567

--You get +MORE FOOD+ above your head when an action fails due to hungry work.
  Fixes #568

--Nomad Eves (with no well and no homeland) no longer lose their reproduction
  capabilities permanently when they enter other homelands.  They still need to
  leave the other homeland to have babies (but get +FREE REIN+ status when they
  leave).

--Fixed glitch with swapping a sub-container into a super-container that is
  already filled with identical sub-containers (before, you could store a
  hidden extra sub-container in there).  Fixes #572

--Nurse cost is now a live server setting.  Pushed up to 2 (was 1).




Version 316    2020-March-12

--100-radius homelands around wells, where family that built well feels
  comfortable enough to have babies.  Leaving this area makes you homesick.

--Expert-finder way stones occure along ley lines in specialist biomes.
  Touching one points you toward the nearest expert for that biome.

--Fixed issue with some partially-used objects not being containable on table
  (use dummies have # appended to name, which was interfering with the end of
  +cont tags).  Fixes #560
 
--Fixed baby bones (SIDS) grave identity tracking.  Fixes #559

--Hunger chimes can now play right up until when final music starts
  (previously, there was a 23-second gap where music hadn't started playing
  yet, but hunger chimes were still muted).

--Support for forcing USE when trying to DROP an object into an empty
  container where a consuming transition applies (so instead of containing the
  held item, it is used on the empty container).  Example:  stacking grapes in
  an empty basket, even though grapes would otherwise be containable in the
  basket.  But if something else is already in the basket, the grapes go in
  next to it, like an ordinary containable item.
  Part of jasonrohrer/OneLifeData7#663 

--Maps and waystones now show the age of the destination point when you read
  them.  Fixes #562

--New *spicyFood forced emote for hot pepper eating.

--Client correctly routes you to front of noBackAccess objects (like wall
  shelf).  Fixes #563

--Phantom baby position (for held baby) no longer counted when looking for
  closest player (like for bear to chase).  Fixes #564




Server Fixes

--Fixed so that +vertical tag can't match a prefix of another tag by accident
  +verticalD from a property fence was matching +vertialDoorSnow, causing the
  snow door to be the vertical auto-orient version of the property fence). 
  Fixes #557

--Added live server setting for toggling propUpWeakestRace and
  propUpWeakestFamily (force-sending babies to bolster the race or family with
  the lowest potentially-fertile female count).

--Boiling the frog:  eatBonus now starts at 2 for Eve and decays to 0 (was 1)
  with a half life of 4 generations.

--To keep things fresh, we force-spawn a new Eve when everyone on the server is
  part of a family that is over generation 40 (every family at least roughly 10
  hours old).




Version 314   2020-March-5

--Container objects that have no sprites in front of contained (like table) now
  use the lowest-Y sprite in each contained object as the object's center point
  (other containers use the center of the widest sprite).  This allows objects
  to "sit" on the table, centered on their visual bases.  Turkeys and other
  larger plated objects used to overlap weirdly with other plated objects on
  tables.

--Improved messaging when reconnecting to last life fails (used to say LOGIN
  FAILED, which was confusing).  Also, clearing stale error messages upon
  returning to menu screen.

--Object editor now shows sprite ID for currently selected sprite.




Server Fixes

--Fixed server crash in new lastSidsBabyEmail code.

--Boiling the frog:  eatBonus now starts at 3 (was 4) for Eve and decays to 2
  (was 3) with a half life of 4 generations.

--If target not transformed, tool still used if newActor stuck in hand.  Fixes
  case of tool use for net and fishing pole, which don't transform target.
  Fixes #553

--Touching a ground tool that you don't know how to use, or executing your free
  trial use of it, show (+) above heads of nearby experts (before, you actually
  had to be out of tool slots to see other experts for an unlearned ground
  tool).  Part of jasonrohrer/OneLifeData7#624

--Boiling the frog:  eatBonus now starts at 2 (was 3) for Eve and decays to 1
  (was 2) with a half life of 4 generations.

--Support for +contTAG fine-grained containment restrictions.  This allows us
  to limit certain items (like plates of food) to being contained only in
  certain containers (like on a table).  Part of jasonrohrer/OneLifeData7#650



Version 312   2020-February-28

--Mousing over an unlearned tool now shows you how many tool learning slots
  remain.  Fixes #522

--Reconnect now uses new RLOGIN command, which will only succeed if an existing
  life for you is still in progress (login fails otherwise).  Thus, you can
  never start a new life by accident when trying to reconnect to a life that
  has already expired.  Fixes #531

--Fixed potential server-side crash in atoi by using safer strtol instead.

--Fixed server-side crash when VOGM coordinates out of bounds.

--foodScaleFactor applied with ceil (instead of lrint) so that a food never
  rounds to 0 (like foodScaleFactor of 0.35 applied to popcorn).

--eatBonus and foodScaleFactor now decline over the generations from Eve.
  eatBonus starts at 4 and eventually reaches 3, with a half-life of 4
  generations.  foodScaleFactor starts at 1.0 and eventually reaches 1.0, with
  a half-life of 4 generations (i.e, foodScaleFactor currently doesn't change).

--Fixed HUGE bug in ancestor assignment for genetic scores of older siblings.
  When walking through the list of living players, to find older sibs that
  count as ancestors, only the first one encountered was added to the ancestor
  list.  break in code should have been continue.  This was most obvious with 
  twins, where only the first twin in the set would receive a pointer to a new
  baby.  Thanks Twisted.

--Healing steps were not counting as tool use.  Part of
  jasonrohrer/OneLifeData7#638

--Transformative steps (like sterilizing knife) no longer count as tool use of
  the original item (you transformed it into a different tool).  Part of
  jasonrohrer/OneLifeData7#638

--Switched order of testing weapon useability so that otherFamilyOnly is tested
  before tool learning.  Thus, you don't learn the sword by accident if you
  shift-click on a family member.  Part of jasonrohrer/OneLifeData7#638

--If target isn't transformed, held tool isn't actually used or learned.
  Fixes case where recycling sword in roller causes you to learn the sword.
  Part of jasonrohrer/OneLifeData7#638

--All tool groups avoid THE in learning message (not just those ending in ING).
  Example:  YOU LEARNED ARCHERY.

--Send food update immediately after reconnecting.  Fixes #547

--You now get one free warning use of each unlearned tool for free, with a
  message letting you know that using it again will learn the tool and use a
  slot.  No more wasting tool slots by accident on things you didn't mean to
  learn.

--After /DIE, the last mother who had you is blocked for you, ensuring that you
  don't /DIE-cycle back to the same mother again and again (not even in
  lowpop).  If there's only ONE mother available, doing /DIE one time will
  cause you to spawn as Eve.  Note that if there is more than one mother, you
  will cycle between them with /DIE.  The only change here is that you will
  never return to the same mother over and over, without other mothers being
  tried in between.  Fixes #549

--Added support for same-color verification when checking for sprite-subset for
  single-sprite objects.  This allows dyed objects to count as NOT the same
  object for initial-only creation sounds.

--Fixed case where car runs out of gas in a bad biome and drops a biome
  sickness object on the ground.

--Fixed case where all same-biome (or floor) drop spots are full, causing
  object to strangely drop in a distant spot.  The reason for prefering
  same-biome or floor for drops was to avoid dropping into a bad biome.
  Might as well just check that the drop spot is not a bad biome directly (and
  allow other types of cross-boundary drops).  Fixes #550

--Player message DROP is a synonym for USE when DROP can't apply.  However,
  the implementation of the USE behavior for DROP was a very simple piece of
  code that missed a bunch of cases handled by the real USE action.  Now
  handling DROP-as-USE with the real USE code (using a goto, yee-haw).  This
  fixes a bug where you could DROP a pie onto a non-empty table, starting the 
  construction of the feast table (which is supposed to require an empty table,
  according to the real USE code) and hiding the items contained by the table.
  Fixes #551.

--Fixed so that painting walls makes correct sound (plays initial-only
  creation sound because color of sprites changes).

--Dug rabbits that had very few move options were sometimes still settling and
  digging new holes on roads and floors.  Now they avoid floors at all costs,
  re-settling in their original location if necessary.  Fixes #552





Server Fixes

--CURSE MY BABY now always targets most-recent baby, whether dead or alive
  (code has been simplified).  Fixes #546

--Fixed a bug where server sent curse status of an incoming player before
  sending the first PU telling you about that player's existence, causing your
  client to ignore their curse status.

--When mother becomes a default leader, her leadership color is assigned
  correctly (was left blank and white).  Fixes #544

--Min posse size requirements don't apply for snowballs and tattoos.  Fixes #543




Version 311   2020-February-13

--Fixed so that offspring baby arrow adjusts to point toward carried baby.




Server Fixes

--Fixed baby and leader arrows and messages to make the coordinates birth-pos
  relative (no more new babies born 7000 meters away).

--Fixed getLeadershipName server-side to correctly explore full depth of tree
  and not count levels incorrectly (before, a single leader with lots of
  followers would be described by the server as a supreme empress mistakenly).
  Thanks Twisted and Tipy.

--Sick, wounded, and murder-weapon-holding people can no longer join posses.
  Fixes #539

--Added a daily killHitLog, tracking kill hits landed by solo players or
  posses, and healing done to cancel kill hits.

--Fixed case of force-drop causing item to disappear if all matching floor or
  biome tiles are full.  Now searches for a drop spot off-floor and then
  off-biome.

--Added fail-safe case to prevent dropping an item in a bad biome at the edge
  of the bad biome no matter what.  Should correct for any remaining client
  pathfinding glitches that result in dropping stuff in a bad biome.  Fixes #541

--Trying one curse token every 15 minutes instead of every 30 minutes.

--Can't remove floor in bad biome.

--Active curses from offline players count as an additional factor in
  determining your curse blocked radius.  If T is the total number of curses
  (online players and offline players) against you, then T^2 is added to your
  blocked radius.  Note that the top player has 103 people with active curses
  against them.

--No more solo kills in populated areas.  Min posse size for landing a kill is
  now 50% of the non-baby population in a 30-tile raidius, capped at 3.  So in
  a city, you need 2 other people to agree with you before killing, but out in
  the wilderness, 1v1 killing is still possible.  These are live server
  settings that can be adjusted later.

--Fixed so that mortal wounds that automatically go through transitions
  (like gushing wounds) aren't mistakenly seen as temporary sickensses.




Version 309   2020-February-8

--Fixed incorrect path start when path finding fails and retries.  Fixes #525

--When a new offspring baby is born (other than your own), your character
  exclaims the situation verbally (only you can see the exclamation) and a
  60-second map-style pointer is created to the offspring baby.  Part of #523

--When a new offspring baby is born, all of your existing family members have
  +FAMILY+ above their heads as a reminder of who affects your gene score.
  Part of #523

--Saying /FAM command produces +FAMILY+ reminders above the heads of genetic
  family members.  Part of #523

--Pause screen (hit ESC) has full list of chat commands.

--Support for ~~ to indicate half-line skip in multi-line on-screen messages.
  Using this for command list spacing.

--When a follower receives an order, they get a temporary LEAD arrow back to
  the leader who issued the order.

--Trying to fix baby overload after server restart.  Max ratio of baby to
  adults now >= 2.0 (was > 2.0).  Max ratio of baby to fertile moms now >= 3.0
  (was > 4.0).

--When a leader issues an order, they get a temporary SUPP arrow back to their
  closest follower.

--When issuing an order, the leader sees +FOLLOWER+ markers above the heads of
  nearby followers.

--If your mother has no leader, you automatically follow her at birth to
  bootstrap leadership.  Part of #532

--CURSE MY BABY now works forever, until you have another baby.  Part of #529

--In a low-pop case (one fertile mom), avoid getting born to mothers that you
  have cursed, and don't go to d-town if that lone mother has you cursed.
  Spawn as a normal Eve instead.  This makes the 1-v-1 situation on a low-pop
  server more sane, in the case where both people have each other cursed, and
  prevents a lone griefer from monopolizing the whole server by killing or
  cursing all incoming babies.  However, in the N=3 case, where two mothers
  agree about one griefer, that griefer will still go two d-town.  Also, in all
  cases, if we have a choice between mothers, avoid those that we have
  curse-blocked, if possible.  The 'if possible' part prevents us from cursing
  everyone in hopes of being Eve.  Fixes #529.

--When one of your leaders dies, you get a DING message informing you and
  telling you who took over for them.  Part of #532

--When one of your leaders dies, you get a LEAD arrow pointing you to the
  leader who took over for them.  Final part of #532.  Fixes #532

--Adjustment to tool slot curve.  Top real-world score of 52 now maps to 9
  slots (was 8).  This is 3 extra beyond starting slots of 6, with 3 more as
  headroom for when scores improve further.  Part of #533

--Your twin sibs no longer count toward your genetic score.  Fixes #530

--Waiting period for single-player killer now 12 seconds (was 6).

--Posse kill waiting period shorter with each new member (2 wait 6 seconds,
  3 wait 3 seconds, 4 wait 1.5 seconds, etc.)

--Non-deadly weapons (+noWait) like snowballs and tattoo needles can be used to
  start a posse (others can't join you).

--Posse of 3+ causes target to repeatedly gasp and show 'T' off-screen sound.

--Verbal kill targetting now works at range 20 for I WILL KILL YOU, bringing it
  in line with other YOU targetting (like YOU OWN THIS).  Kill targetting by
  name now also works at range 20 (I WILL KILL EVE SMITH).  Both were mistakenly
  limited to a range of 8 before, which is the limit for direct-click kill
  targetting.

--Fixed case of blocking by wide extension of a wide blocking object in a way
  that prevents you from manipulating the wide object.  In this case, we allow
  action diagonally.  Example:  newcomen tower blocking your exit from a
  property gate.  If it sticks out enough to block you from walking, it stick
  out enough for you to touch it (to take it down, for example).  Thanks Tarr.

--When you issue a personal curse against someone, you see them as having black
  speech bubbles for 30 days.

--When you issue a personal curse against someone, they babel a unique 2-word
  phrase to you after everything they say, and once every 15 seconds if they
  are not speaking.

--Twins don't count toward posse size for the posses that they join.




Version 307   2020-January-30

--Fixed PGUP/PGDOWN in category editor when pattern has same object repeated.

--Fixed removal in category editor when pattern has same object repeated.

--Added d/D key to category editor for duplicating object in a pattern.

--Made playback of recorded web events more robust in the face of (admitedly
  mysterious) playback timing variations.

--Finally fixed client-side cause of dropping stuff in a bad biome.  Fixes #479

--Support for +blocksMoving tag to prevent animals from walking through
  auto-open doors.  Part of #504

--Improved spacing of speech bubbles (no more extra space at end of string).

--Grabbing an unlearned tool (or trying to use an unlearned ground tool) puts a
  + speech bubble above the heads of nearby people who already know that tool.
  Fixes #517

--Fixed case of usingSound for target not playing if actor object also has uses.

--Holding SHIFT in freehand Sprite Trim Editor makes cut out area more visible.




Server Fixes

--Keeping diffWorking directory around after content build for forensic
  purposes (in case the weird Steam build bug happens again).

--Cursing by name radius is now 200 (was 32), and is a live server setting.
  Part of #496

--Server name at bottom of character detail page in family tree.

--Data-only diff bundle script has optional pause to check Steam build.

--Curse DB dump utility program prints date stamp for each entry.

--Fixed glitch in names timing out for curse purposes after someone dies.
  Fixes #511

--Fixed spurious creation of new family population logs when tutorial or cursed
  Eve picks a name.
 
--Improved reflector split/unsplit behavior in case where servers are spuriously
  offline.

--New format for links to Wondible full family tree viewer.  Fixes #509

--Added more logging around decision of when to spawn a new Eve.  Related to
  #510

--Server notifies leader when they correctly issue an order.  Thanks David J.




Version 304   2020-January-17

--No longer playing eating animation when sticking food in clothing container.
  Fixes #490

--Fix overlap of hidden email/SteamID with GENETIC FITNESS label.  Fixes #491



Server Fixes

--Rewrote baby placement code, removing a bunch of deprecated cases.  When
  placing a player, we first find all non-curse-blocked, non-cooldown, 
  non-lineage-limit mothers, expanding to include cooldown mothers if we can't
  find any, and then expanding to include lineage limit mothers if we still 
  can't find any.  Then, from those available, we pick the mothers from the
  weakest race, and then, from those, we pick the mothers from the weakest
  family.  From those, we send the baby to one of those mothers at random, 
  weighted by Yum and warmth.  If there exist some fertile mothers, but all of
  them are curse-blocked, the player goes to d-town.  If there are absolutely
  no fertile mothers, or if > 2/3 of the player population are helpless babies,
  or if there are > 4 babies per mother on the server, we spawn an Eve of the 
  weakest race.  We also force-spawn an Eve for any non-existant race if 
  specialty biomes are in effect (when we have >= 15 players).  Fixes #493

--Fitness leaderboard now has clickable detail links.

--New fitness score update formula (thanks wondible).  Scores return again to
  being capped at 60, and update based on how long you live relative to your
  own score, or how long your offspring live relative to their score.  Help
  them to live longer than their current score, and your score will go up.
  Hurt them so that they live shorter than their current score, and your score
  will go down.  This also ends the exploit where you push your own average
  down to farm score boosts from long lives later.

--New tool slot formula based on new 0-60 capped fitness scores.




Version 302    2020-January-9

--Fixed editor skipping gaps in numbering in sprite import cache.

--Support for same object occurring multiple times in one pattern.  So these
  bottles can empty as powder bottles, and these other bottles can empty as
  liquid bottles, but the powder and liquid bottles don't need to be duplicated.



Server Fixes

--Fixed to pull Eve grid back on track if it starts way out of bounds.
  Fixes #486

--Support for moving animals that can avoid landing on floors.
  Part of jasonrohrer/OneLifeData7#559



Version 300    2020-January-3

--Fixed another possible cause of the bouncing forever bug (wild bug):  don't
  ever set inMotion to true unless we actually send a MOVE message to the
  server.




Server Fixes

--Fixed blank tool learning message for partially-used tools.  Fixes #475

--Fixed so that dismounting at the edge of a bad biome, where you drop your
  horse into a good biome, makes you instantly sick.  Before, you weren't sick
  until moving, allowing you to pull items from your nearby horse cart into the
  bad biome and trap them there.  Fixes #477

--Eating bonus not applied to alcohol drinks.  Trying to get drunk no longer
  fills up your stomach so quickly.  Part of #481

--Halved rate that drunkenness wears off.  Part of #481

--Support for emotEat_ tag on objects to define a forced emot when eaten (used
  to make people blush when getting drunk).  Part of #481

--Fixed photo links on family tree server (removing join with server table
  broke it, from commit 0788e818548de469688f816b5c81c3a8).  Fixes #482

--Fixed so that murder victims that die of starvation before dying from their
  wound are still logged as murdered in lifeLog.  Fixes #483

--Fixed another case of spurious tool learning (when taking apart the knife or
  any tool that results in a permanent stack of parts).  Check that there's no
  bare-hand action possible on the permanent result (so pounding stakes still
  counts as a tool use).  Fixes #485




Version 298    2019-December-20

--Fixed so you can TAB to show blue hint arrows for single-recipe objects.
  Related to #418

--Fixed so that holding a use dummy that is both an ingredient and a target of
  a recipe doesn't block hint arrows.  Fixes #418



Server Fixes

--Fixed potential gene score exploit of tutorial lives being factored into your
  own average lifespan.  Lives that don't affect your score are no longer
  counted in your own average.  Fixes #473

--Fixed float precision errors in random animation movement that made it
  unlikely for them to move in certain non-diagonal directions.




Version 297    2019-December-18

--Fixed crash when mousing over at the moment they die.  Fixes #470

--Entering kill mode with shift-right-click no longer causes you to move toward
  the kill target.  Since there is a waiting period now, moving there right
  away doesn't make sense anymore.  Fixes #430

--Fixed so that when contents of a held container go through transition, the
  generic pickup sound is correctly played (was playing container creation
  sound by accident).  Fixes #431




Server Fixes

--Fixed crash when sending follow and exile messages to disconnected player.

--Fixed so that we don't burn lives when reconnecting, even if server sees us
  as still connected when we reconnect.  Fixes #443



Version 296    2019-December-14

--Moved badges to be drawn over top of backpack strap (so not covered by strap).



Server Fixes

--Leaders can now issue orders that are passed through their follower tree
  whenever followers are within 10 tiles.  You only receive such orders from
  your own personal leader, but the orders might be passed down from higher up.
  Leaders issue orders by saying ORDER, COME TO THE TOWN CENTER.  Orders appear
  to followers as DING messages.



Version 294     2019-December-13

--Moved Bell home arrow to bottom of screen, by scooting other paper elements
  down there closer together.  Looked out of place on top.  Added BELL word to
  it to make it clear.  Thanks Twisted.

--Support for voluntary hierarchical leadership.  Each player can chose a 
  single leader by saying I FOLLOW YOU, or I FOLLOW JANE SMITH.  Go back to no
  leader with I FOLLOW MYSELF.  You inherit your mother's leader at birth.
  Each player can also exile other people by saying I EXILE YOU or I EXILE JANE
  SMITH.  Your exiled players are seen as marked for you and any of the 
  followers below you in the leadership tree.  People who are still following
  exiled leaders are marked as dubious.  When a leader dies, they pass their
  immediate followers up to the leader above them, if any, and their exile list
  is passed down.  Rank and ally status is shown via colored badges on worn
  chest clothing.



Server Fixes

--Can initiate murder mouth by holding weapon near somone and saying I WILL 
  KILL YOU, or I WILL KILL EVE SMITH while holding a weapon from far away (and
  a whole bunch of variations on these phrases, like DIE, EVE SMITH, EVE SMITH 
  IS GONNA DIE, etc.).  If you know someone's name, you can resume your chase
  after setting down your weapon to eat, or if you can't click on them because
  they are too fast on a horse.



Version 292     2019-December-6

--Finally found a work-around for the Steam lingering process bug (when the
  game launches a web browser to view family trees, and the user leaves the
  browser open after they quit the game).

--Object editor allows shift-right-click to insert other object with sprites
  interleaved with existing.  Useful for making a feasting table that gets
  emptied evenly across the different foods in parallel.

--Fixed DRINK translation.  Fixes #457

--Fixed remaining inconsistencies with biome-crossing sicknesses.  You now lose
  you sickness as soon as your move ends outside a bad biome (before, unless
  you stepped out directly from edge, sickness would linger until your next
  move).  You now correctly change sicknesses when crossing between two bad
  biomes (your character forces you to stop in the separating good biome before
  entering the second bad biome).  Fixes #449

--Fixed a bug with lingering home positions in next life.  Related to #455
  
--Bell tower directional arrow now show separately at top of screen.
  Fixes #455 

--Fixed a memory leak.



Server Fixes

--Right-click-on-ground-around-permanent, which is mapped to USE, no longer
  bypasses biome lock (example:  planting rubber cutting).  Fixes #458

--Fixed so that donkeytown Eve placement, tutorial twin placement, and flight
  crash landing placement don't advance Eve placement grid.  This will prevent
  Eves from getting more spread out than they need to be.  Fixes #442.  Similar
  to pull request #459

--Fixed so that when growing, any bonus food is used to fill empty food bars
  that are added.  This prevents building up an unnaturally huge food bonus
  when growing.  Fixes #440.  Similar to pull request #461

--Fixed so that putting a tool in a container that it could be used on doesn't
  count as using a tool slot (like putting the saw in a box).  Fixed so that
  tool usage that's blocked due to hungryWork doesn't use a tool slot (like
  failing to chop a tree, which used to make you learn the axe).  Similar to
  pull request #462

--Fixed calculation of average lifespan on genetic fitness server.  Before, we
  were averaging past 10 lives, and padding that average with 30-year lives if
  we didn't have 10 lives for that player.  However, we were also discarding
  too many lives from the history buffer, generally not having 10 lives stored
  for each player.  So most player's averages were getting padded.  Fixed by
  keeping at least 10 lives for each player in the history buffer.  Fixes #463




Version 290     2019-November-26


--Added support for +frontWall object tag, to fix glitch with open door behind
  wall shelf.  Don't decide whether a wall should be drawn in front of other
  walls based on whether the wall has slots.  This was the old test put in
  place to detect wall signs, but really, slots isn't the thing... sticking out
  beyond the normal wall boundaries is the thing.

--Support for +drink tag in objects, showing DRANK instead of ATE and DRINK
  instead of ATE and EAT for tool tips in client.




Server Fixes

--Not stuck dropping immobile horse after snake encounter in bad biome.  If the
  object you're holding is permanent and has a speed multiplier of 0, you're
  allowed to drop it in an otherwise bad biome.  Fixes #453

--Support for drunkenness, which slurs and confuses speech, but also reduces
  the language barrier.  The speech of a more and more drunk person is easier
  and easier to understand for a foreigner.

--Fixed so you can't drop a biome sickness object on the ground.  Fixes #456




Version 288     2019-November-23

--Fixed bug in temp meter tool tip text.

--When reading a map or way stone, you speak a distance estimate along with
  the map name.

--Fixed kerning on _ character in Futura font.
  
--Fixed glitch preventing intentionally entering bad biome from left side.

--Client no longer makes you pause before entering bad biome when riding.




Server Fixes

--Support for negative scores in offspring table.  Fixes #447

--Eve injection baby/mother ratio is 1.0 (was 2.0).  Reduce the number of
  babies per mother to lighten the load of new players coming in.

--Eating bonus 4 (was 2.0), to help out all the new players.

--Min food decrement time 4 (was 2.0), to help out all the new players.

--Suddenly some lineage server queries were using the wrong index and taking
  600+ seconds to execute, bringing the whole lineage server down.  Something
  about the influx of new users caused this, tipping MySQL's query execution
  strategy toward the wrong index.  Fixed this by only joining on users table
  if we need to.

--Added a (user_id,death_time) index to speed up lineage server queries for
  users that have a lot of lives.

--Got rid of unnecessary server table joins in lineage server.

--Indoor bonus no longer a fixed value, but instead based on the average
  R-value of the surrounding walls for the room that you're in.  Better walls
  (and doors and floors) mean a bigger indoor bonus.

--New foodScaleFactor server setting, allowing all food values to be scaled up
  or down.

--Support for written metadata on an object that can be duplicated through a
  transition (for copying maps onto way stones).  Support for reading
  permanent objects by touching them.

--Whoops, low pop servers now have tool learning slots disabled.
  Thanks Spoonwood.

--Support for objects that affect auto-orientation of other objects without 
  having multiple orientations themselves (example:  wall shelves).

--For tool groups, like +toolSewing, the group tag is used in the YOU LEARNED
  message to avoid confusion (YOU LEARNED SEWING.).  Fixed article use (THE) in
  messaging when tool group ends in ING.  YOU LEARNED THE BOW DRILL vs YOU
  LEARNED SEWING.

--Riding something (horse, car) prevents you from getting sick in a bad biome.
  You cannot dismount in there, however.

--Support for +autoDefaultTrans tag on objects, which means that default
  transition is triggered when player path will cross that object.  For
  spring-loaded doors that auto-open.

--Closed the exploit where you suicide as a baby to reap your mother and
  grandmother's long life genetic score.  Now your mother and grandmother
  (etc.) only count toward your genetic score if you survive past age 3 and they
  die while you are still alive.  Dying early on purpose won't let you reap the
  benefit of their long lives.

--Fixed so that a tool laying on the ground that is not permanent counts as a
  used tool if it becomes permanent.  Now building stakes count as a tool
  properly.

--Personal curses now last 30 days (was 7 days).

--Changed tool slot formula (based on fitness) to use a sigmoid curve and avoid
  infinite tool slots for high scores.  Now slot range is between 5 and 19 for
  positive scores, or between 4 and 3 for negative scores.

--Support for +noBackAccess tag to prevent wall shelf access through back wall.

--Fitness server now supports manual, global score reset.




Version 286    2019-November-18

--Fixed client to not hang on loading if an expected sound file is missing.

--Fixed crash if server sends an emot index that we don't have.

--Fixed mouse-over tips when mousing over floor-protected bad biome.

--Character will now pathfind around bad biomes (even along roads and floors)
  whenever possible.  The only way to enter a bad biome is to stand right at
  the edge and click into the bad biome directly.

--Scene editor supports multiple emot layers.




Server Fixes

--Support for +neverDrop object tag for murder weapons, which prevents them
  from being dropped in bad biomes.  Fixes #444

--Fixed new bug that was preventing animals from spawning.

--Wait per mom before sending another baby to the weakest family made a live
  setting and set to 4 minutes (was 1.5 minutes).  Further reducing Eve getting
  hammered with too many babies.

--Made Y placement gap between tutorials larger to make room for skip-tutorial
  hallway.  Fixes jasonrohrer/OneLifeData7#507

--No more arc messages when Eve injection on.  Fixes #441

--Fixed default object behavior of force-spawn clothing.

--Fixed so that a long path through a bad biome that ends outside of it still
  makes you sick.  Can no longer "skip across" a bad biome with a long path.

--New genetic score forumula based on offspring's lifespan compared to their
  average lifespan.  Helping any player live longer than their normal will
  boost your score.  Reduces randomness.  Scores no longer bounded in [0-60]
  range.  New players start with an assumed score of 30.

--New Eves always spawn in least-represented skin tones.  Fixes #446





Version 283   2019-November-15

--Fixed crash when sprite .tga file exists but .txt file doesn't (either in
  folder or in stale caches).

--Sane behavior in unexpected situation:  clear sprite .txt file cache.fcz
  whenver we rebuild .tga file bin_cache.fcz  There's a chance that Steam
  doesn't properly update cache.fcz, leaving it outdated.

--More graceful handling of objects that refer to sprites that don't exist.
  Draw them without that sprite.  Used to wait forever for that sprite to load.

--Making sure cache.fcz has exactly same list of files as corresponding folder.
  Checks file names only, not contents.  On mismatch, cache.fcz is rebuilt.

--No more crash if server sends us an unknown object ID.  Instead, we show a
  MISSING OBJECT placeholder in client.  This is an extremely unlikely case,
  but could happen if there's some error in the update process.

--Support for permanent emots, for things like tatoos, piercings, makeup, etc.



Server Fixes

--Fixed so that one weak family isn't hammered with too many incoming babies.
  Let 1.5 minutes pass bewteen each baby per mother.  Otherwise, Eve, who is
  always the weakest family, gets hammered with incoming babies.

--Max baby/mom ratio before eve injection now 2 (was 3).

--Max player/fam ratio pushed up to 13 (was 9), meaning fewer, bigger families.

--Map change log now includes playerID responsible for each change.

--Biome placement on map now uses a 64-bit seed (was 32-bits) to make brute-
  force seed guessing, based on map samples, impractical.

--Fixed a memory leak in map reseeding.

--Map change logs now roll over every 24 hours and don't include biome seed.

--Fixed cache size inconsistency.

--Map biome seed now logged in separate file along with map change logs, but
  that seed file is only published after the map is reseeded (if it ever is,
  due to a wipe or player-triggered apocalypse).

--Min fertile females per family (when girl babies are forces) is 4 (was 6).

--Eve moving grid jump is now 200 (was 320), making it a perfect tight fit with
  well tap-out of 160.

--Specialty biomes limited to specific skin tones.  Other skin tones get sick 
  there.

--Language learning change:  instead of busy-work with a baby (blabbering lots
  of phrases to cover different phonemes), each generation that is around a
  language learns it at a fixed rate (10% of remaning phoneme clusters by
  frequency weight).  After roughly 10 generations of coexistence, full
  language learning will be realized.

--Disabled second-place-biome object placement along biome boundaries (though
  looking at parameters in code for ring biomes, it looks like this was
  impossible anyway).

--Support for +biomeReq and +biomeBlock in object descriptions, only allowing
  an object to be made in specific biomes or blocking it from specific biomes.

--Support for +noWait tag on 'weapons' like snowballs and tatoo needles.  No 
  murder mouth, and no waiting period before execution.  Target still gasps.

--Support for polylingual skin tones.




Version 280   2019-November-8

--Fixed crash when person making an off-screen sound dies.

--Fixed so that filtering for /HUBBARD SQUASH doesn't trigger /HUBBA emote.

--Handling probability sets in object depth measurement and produces map so
  that /HUBBARD SQUASH and /PUMPKIN filters work (and other objects that pass
  through a probability set along the way).

--Fixed off-position emotes for babies that are lying down.

--Finally fixed main cause of moon-walking glitch.  Fixes #309

--New indoor food drain bonus (currently +20 seconds per pip).  Only affects
  people over 3 years old.  Mousing over your temp meter explains your current
  food drain rate.




Server Fixes

--Fixed bug in tapout triggers that were counting uses (of shallow well, for
  example) as tapouts.

--Welcome message now shows total tool slots along with bonus slots.

--Force-spawns can speak to everyone in shared language.

--Fixed failed insert condition on fitness server when a life is both your
  daughter (from your previous life) and your mother (from this life).
  Double-counting is now correctly prevented without a fatal insert error that
  blocks the rest of the (non-double) life scoring from happening for that
  life.  This clears up a major cause of the skipped-scoring bug.

--Support for northward and southward gradient markers in same column as tapout.

--Excess from eating a big food item now goes into bonus overflow food points
  (same bin as Yum bonus points, with +13 or whatever next to food meter).
  Overflow capacity starts at 1 and goes up non-linearly to 91.6, based on base
  stomach size.  So newborn babies and unfit elderly have 1 overflow capacity,
  and adults have 90.6 overflow capacity (and more fit elderly have more
  overflow capacity than 1).  This increases the potential beneficial size
  range of large foods, like feasts.  The non-linear formula, based on Miska's
  suggestion, is 1 + pow( inBaseCapacity, 8 ) * 0.0000000035.

--End of posse/kill joining spam.  You must end your current targeting (by
  dropping your weapon) in order to start another target-ting.  You can't keep
  spam-target-ting the same person, nor can you spam toggle back and forth
  between target-ting two people, unless you drop and re-grab your weapon.
  Fixes #439

--Boundless world:  barrier off.

--Boundless world:  Eve window set to 1 second.

--Boundless world:  We inject a new Eve if a new baby would be born pushing the
  baby-to-mother ratio above 3.0.  We also inject a new Eve if the player-to-
  family ratio ever exceeds 9.0, but in that case, since it's not an emergency,
  we wait for a player who has a fitness score matching or exceeding the
  highest fitness score seen for the 10 most-recently-joined living players.

--Boundless world:  Eves placed on a persistent, moving, zig-zag grid.  Each
  grid point is 320 tiles away from other grid points to NSEW.  Grid columns
  are 5 points tall, with new columns distributed further to the west.  Thus,
  Eves are placed in a horizontal band that grows toward the west.  Walk east
  to find older parts of civilization.  Walk north or south to find endless
  wilderness.

--Reading a map within 30 seconds before taking off in a plane causes you to
  land at the closest landing strip to the map's destination.  This makes plane
  flights much more reliable and much less griefable with cargo-cult trap
  strips.  Poor five oz. of vodka on the sidewalk for our fallen comrade Tarr.

--Getting yellow fever clears yummy bonus food store.

--Boundless world:  turned min family limit off, so that arc messages don't
  mention it.




Version 278   2019-October-31

--Added an early exit hallway to make the tutorial optional.

--Off-screen speech now drawn on left, right, and bottom of screen (before, was
  top of screen only).  Server sends speech in radius of 16 to facilitate this
  (was 10).

--Now off-screen sounds for posse targetting you show double exclamation marks,
  where off-screen sounds that aren't for your posse show the normal single
  exclamation mark.  Facilitated by the new PJ (POSSE_JOIN) protocol message.
  Fixes #433

--Head emots (like heart for /LOVE) are shown above hat layer (were covered by
  hat).

--Apocalypse clears your tool learning slots.

--Babies can't move at all for first 12 seconds of life, and lay on the ground,
  but react to mouse clicks by wiggling.

--Spring tapouts now leave E or W gradient dry springs along ley line to W or E
  of well.  You can follow these gradients to find the well.





Server Fixes

--Boiling the frog:  6-12 tool slots (was 8-16).

--Boiling the frog:  5-10 tool slots (was 6-12).

--Min fertile girls per fam 6 (was 3).  This should help to prop up struggling
  families and prolong the arc.

--Fixed kill-target swapping bug.  Fixes #420.  Delay before landing kill is
  now 6 seconds (was 3).

--Holding a baby now cancels any kill target actions against it.  Fixes #421

--Changed definition of hand tool use to require something left in the hand
  after the action.  So putting a sterile pad back in a bowl doesn't count.
  Fixes #435

--New map change log is started correctly when a biome reseed happens.
  Fixes #434

--Server forces player to say [GASP] when they are targetted by a killer.
  Along with the shocked face, this makes it harder to ignore the fact that you
  are targetted.  Related to #433

--Message on birth explaining your bonus tool slots due to your fitness score.
  Message is skipped if your fitness score is too low to grant you any bonus
  tool slots.

--Support for forced spawns for specific accounts.

--Everyone with fitness score over 0 gets one bonus slot, so genetic fitness
  message on birth can be shown to almost everyone.

--Fixed a sign issue in fitness server in the case of even R parameter.

--K parameter for genetic fitness score is now 46.5 (was 10).  This value was
  discovered empirically through simulation of 100 births with various infant
  death rates to find a K-value that balanced fast convergence with low score
  range overlap between player skill tiers.  This means that scores go up and
  down 4.65x slower than before.

--New hints to find wells:  when well taps out area, it leaves thoroughly dry
  springs in same row as well, and regular dry springs elswhere.  So if you
  ever find a thoroughly dry spring, you know you can find a well by walking E
  or W.

--Mothers and Gmas and GGmas now count toward your genetic fitness score,
  assuming that you are at least 3 years old (or would have been) at their time
  of their death.  This closes the 'kill your mom to prevent younger sibs'
  exploit.
 



Version 276   2019-October-25

--/FPS graph in client now shows frame timing breakdown.

--Holding 'x' key lets you click through people.  Allows you
  to interact with objects behind self and others.

--Showing explicit hint for [SHIFT]-[TAB] on hint sheets (paging backwards).

--Fixed stuck murder mouth after apocalypse.

--Shift-right-clicking an animal with a valid weapon no longer puts you into
  kill mode against closest person.  A lot of new players were confused by this.

--Implementation of limited number of tool learning slots per player, complete
  with messaging about how many slots are left and backwards holding of
  unlearned tools.

--Support for bigger jumps in picker paging.




Server Fixes

--Support for upper limit on number of tapout triggers that can be built
  followed by a larger tapout radius.  Example:  first 5 shallow wells built
  tap out springs in an 80-radius area.  6th+ shallow well taps out springs in
  an 800-radius area.

--Fixed bug in replacing oil wells with tarry spots on server restart, and also
  no longer using same random seed for placement of tarry spots in each arc.

--If you are < 3 years old when one of your descendants die, they will not
  count toward your genetic score (because you were helpless yourself).

--Reseeding map now depends on map being inited, so switched order in
  apocalypse step.

--Fixed so that curse radius is correctly limited to 32 tiles.

--Fixed so that saying I AM EVE SMITH doesn't result in redundant name
  insertion in broadcast speech of I AM EVE EVE SMITH.

--Client tag as part of protocol, along with server-side logging.

--Fixed some grave-tracking inconsistencies.

--Limit on well placements wasn't resetting with apocalypse, causing limit of
  only one well in next run.




Version 272    2019-October-19

--Fixed crash when switching hint target object with a non-matching filter.

--Fixed when hint filter string doesn't match anything, so that non-matching
  filter doesn't interfere with normal hint behavior.

--Fixed missing links in crafting hints due to not handling probabalistic
  transitions when fleshing out producesMap.  Example:  Lock and Key Parts
  with Chisel is only made sometimes, only if the use state transition isn't
  triggered to make Lock and Key Parts with Chisel# use 4 (the state where the
  chisel has become partially used).  Before, there was no complete crafting
  process hinted for Lock and Key Parts because of this.

--Fixed a crash when server (mistakenly) tells us we're responsible for an
  object change happening off of our known map area.

--Map implementation.  Holding a blank map and charcoal and speaking a map name
  creates a marked map to your current location.  Picking up a marked map
  causes you to speak the map name and set your home arrow to the map's
  destination for the next 60 seconds, or as long as you continue to hold the
  map.

--VOG text at same location replaces previous text instead of overlapping.

--Improved frame rate in cities by reducing overdraw.  Biome tiles that are
  compltely covered by floors don't need to be drawn.

--Editor obeys alpha channel when baking a multiplicative layer to mask the
  affected area (some multiplicative sprites had invisible black areas---not
  sure why).




Server Fixes

--Added utility program for dumping map value at coordinates at a given
  location on a live server.

--Tapout trigger implementation.  Upon construction, a given object can tapout
  nearby objects on a grid pattern with a given radius.  Used for shallow wells
  that tapout all spring heads in an 80-tile radius.

--Can't join posse targeting yourself.  Related to #426

--Fixed so that leaving a posse clears your speed boost.  Fixes #426

--Fixed so that endtower apocalypse trigger restarts eve window and does other
  necessary bookkeeping steps.  Fixes #428





Version 270    2019-October-12

--Editor can copy slot movements relative to saved position.

--New hint filter system.  When you target an object to make (like /HATCHET),
  you see an reverse-ordered list of steps, starting with the target and going
  simpler, as you TAB.  Each step shows you hint arrows for nearby ingredients,
  and when you pick up an ingredient object, the list automatically jumps to
  the most relevant hint for that ingredient.




Server Fixes

--Saying I JOIN YOU near a posse member with something in your hand causes you 
 to join that posse, even if you're not holding a weapon and haven't managed to
 shift-right-click on the target person yourself.  You can do this while
 holding a branch or whatever, and though you can't kill with a non-weapon,
 your posse membership can help to speed up the posse.  This makes groups much
 more powerful against hit-and-run griefers, who are difficult for the whole
 group to target.

--Blocked births outside of rift barrier (before, was only blocking outside
  births during Eve window).

--Rift barrier no longer blocks plane flights, and this setting is configurable
  live, without restarting the server.

--Fixed another cause of out-of-range ghost players.  Updates for midrange
  players weren't getting PO messages correctly, nor were global updates for
  new players.  These players were seen as in-range, which triggered (!) emote
  notifications and a ghost player standing there if you ever travelled to
  their original location.  Fixes #410

--Support for fixed-count, randomly placed biome objects.  Used for tarry
  spots, to ensure that there are exactly 5 of them inside the rift barrier in
  snowy biomes only.

--EVE was on list of female and last names.  Whoops.




Version 268    2019-October-3

--Fixed so that off-screen sounds generated by your own character are never
  drawn.  Fixes #409

--Fixed so that we don't play emote sounds (or show their off-screen icons) for
  out-of-range players.  Fixes #410

--Tutorial wording reflects latest curse changes.  Fixes #407

--When computing object center, don't consider worn-only sprites, since
  centering is used for containment.  This fixes the weird containment position
  for long dress and skirt.

--Hint arrow shows nearby objects that are relevant to current tip (activate by
  actively tabbing through hints, or having a hint filter set).



Server Fixes

--Max speech radius is now 10.  No more spying on distant speech with a zoom
  mod.  Fixes #408

--values.h should be replaced with limits.h  Fixes #411

--Fixed grave duplication caused by swapping grave baskets with objects on the
  ground.  Fixes #402  There is still a possible case of grave mix-up if three
  people are moving graves around in the same area at the same time (which is
  unlikely), but no grave duplication that I could produce even in that edge
  case.

--Blocked twins/trips/quads from cursing (before, just blocked them from
  earning tokens, but if they already had a token, they could spend it).

--Expanded the list of possible last names to the full list of 151,000 provided
  by the US Census 2000.  Was using a trimmed list of 86,000 last names (from
  the same source, but only counting names that occurred 200 or more times in
  the year 2000).  The source list includes names that occurred 100 or more
  times in the year 2000.

--Fixed glitch in lineage_depth calculation on family tree server when
  generation is not known yet.

--Fixed major infinite loop in server name picking code.  Not sure how this was
  never triggered, but a new name list, with a different length, triggered it.

--Full list of all US first names since 1880, for roughly 100K names (was 30K),
  and split into male and female names (for names that were always > 80% one 
  gender in every year) and unisex names (for names that were > 20% the 
  minority gender in some year).  Gender is enforced in baby name filtering.  
  No more girls named Robert or boys named Mary, but both boys and girls can be
  named Charlie.  Hello Helga!

--When you name your baby, the closest matching name is replaced in your said
  text as it is displayed.  YOU ARE ROBERT for a girl is heard as YOU ARE
  ROBERTA.  You don't need to mouse over the baby to find out what name
  actually stuck, and there's no mismatch between what your baby hears and what
  their name is.




Version 266    2019-September-27

--Extra ID param in USE message to differentiate between click on ground and
  click on target object (to fix case where target animal moves out of the way
  before server gets our message, making it look like we clicked on the ground,
  thus mistakenly executing a use-on-ground action, like dismounting our
  horse).  Fixes #400

--Right-click on empty ground around an object with empty hand will pick it up.
  Makes it easier to pick up tiny objects.

--Support for offScreenSound tag on emotes (like murder mouth and yoohoo).
  Support for pulsing off-screen notification if an offScreenSound object emits
  sounds during its animation (like murder mouth does).  Fixes #406

--Editor supports flipping whole object.



Server Fixes

--Fixed so that long paths that go near edge of client's known map chunk cause
  new chunks to be sent (so client doesn't see unknown map area when walking
  near edge of mapt chunk).

--Fixed a movement bug that caused jump-back when rapidly clickly to extend a
  path (a timing bug).  This jump-back would also cause a carried child's view
  to scroll way off into the unknown map area and then slide back.

--If a new player has played less than 5 lives or less than 2 hours total (not
  including their time in the tutorial), their mother gets a message when they
  are born.

--Personal curses now block someone from being born near you for 7 days (was 2
  days).  Fixes #384

--Fixed major bug in personal curse implementation.  When checking if birth
  location blocked, was only checking first player on the list.  This meant
  that personal curses didn't work correctly most of the time.

--During Eve window, if all fertile mothers have a player curse-blocked, they
  go to donkeytown (they used to spawn as Eve inside the rift barrier).

--Simplified mother picking code (without changing behavior) in anticipation of
  some additional fixes.

--Fixed twin loophole in personal curse implementation.  If your twin is
  blocked from being born in a given area because of curses, so are you, and
  you all go to donkeytown if there's no area for one of you.

--Twins sent to donkeytown based on personal curses all have black speech.

--Fixed a jump-back movement glitch when a slow client tries to interrupt a
  move that the server thinks is already done.

--Fixed so that you can't add things to slots in DIE-baby graves.

--Player counted as new if <4 hours lived in game (was 2).

--Fixed case where force-drop happens (during death or wounding) when no direct
  bare-ground transition applies to the permanent held object (example:  cast
  fishing pole).  In this case, we check for a timed transition first, and then
  look for a bare-ground transition after that timed transition is applied.
  Also, in case where bare ground transition leaves something in hand (example:
  pole with old boot), we toss both things (before, the pole would disappear,
  leaving only the boot).  Fixes #388

--Better logging of too many babies per mother apocalypse trigger.

--Player counted as new if < 8 hours lived in game (was 4).

--Fixed stacked basket flinging glitch.  Fixes #391

--Blocked all container object from flinging stuff.  To target a container
  object (like a grave full of belongings) in a way that would reduce the
  number of slots in the container (like picking up the grave into a basket),
  you must empty it first.

--Changed max baby/mother after Eve to 20 (to essentially disable that
  apocalypse condition).  Added a new condition:  apocalypse after Eve window
  if our player population inside the rift is ever > 33% helpless babies.

--Increased death stagger time by 20 seconds (+50%) up to 60 seconds (was 40),
  allowing more time for wounded players to be healed.

--Fixed glitch in naming an unnamed Eve so that she doesn't get your family
  name.

--Was not accounting for yum bonus when deciding whether we had enough food for
  hungry work.  Also brought safe buffer down to 4 pips (was 5).
  Related to #392

--If family has < 3 potentially fertile females left (fertile females and girl
  children), we force that family to have girl babies when it is their turn for
  babies.

--findDropSpot code now respects rift barrier.  Flinging stuff across the
  barrier should never be possible (last case was picking up a toddler who was
  holding something).

--Food log now includes eating bonus.  Fixes #393

--Fixed frozen full horse cart bug.

--Baby ratio to trigger apocalypse is now 0.66 (was 0.33).  If we get to the
  point where there are 2 babies for every non-baby player, things have gotten
  really bad, right?

--Fixed potential (though unlikely) overflow issue for long emails in local
  curse database.

--Over past 21 hours, only three spawns were sent to donkeytown, and all three
  of them were for the single player with the most curses in the game.  No one
  else went to donkeytown.  It seems like the blocking radius for curses is
  simply too small.  Increasing it up to 200 (was 50).

--Your younger sibs now count toward your genetic score, closing the 'avoid 
  having kids yourself and try to live until 60' path to a high genetic score.

--Tutorial lives no longer count toward genetic fitness.

--Rollback:  back to reporting tutorial lives to fitness server (all Eve lives
  were already not affecting the score, according to the fitness server code).

--Fix for getting back on the leaderboard (after expiring) by playing the
  tutorial:  lives that don't affect score (all Eve lives) don't update
  last_action_time.

--One more basket-stacking fling case fixed.  Fixes #404

--Curse radius grows as your total curse count grows.  Starts at 200 (you must 
  be born 200 tiles away from any living player that cursed you in the past 7
  days), and grows by 200 with each curse you receive.  At 4 curses, your
  curse block radius is 1000, which means you cannot be born inside the rift
  if anyone who cursed you is currently alive.  Your total curse count goes
  down by 1 point every 7 days.  Cursing still works effectively as a 'get
  away from me' gesture (you'll be very unlikely to encounter this player again
  in the next 7 days), but starts functioning more and more like a global block
  as your curse count grows.  Even then, though, it only blocks you if the
  people who don't like your behavior are currently playing.  As opposed to a
  fixed-length punishment, this is more like, 'you've bugged these people
  enough, try playing again later.'  Fixes #403

--Grave placement now respects rift barrier.

--Target player of murder-mouth kill targeting shows SHOCK emotion to indicate
  that they are being targeted.  Related to #401

--3-second delay between when murder-mouth sound/anim starts and when the kill
  window actually opens, to give the target some warning.  No more surprise
  insta-kill when you're standing next to someone.  Fixes #401

--Better wording so that people know what the arc name is.

--Your curse block radius depends on number of living players who have you
  cursed, not total number.  Starting radius is 100, when one living player has
  you cursed, and it goes up by 100 for each additional living player that has
  you cursed.  Once 5 living players have you cursed, one of them standing at
  the center of the rift will bock you from being born and send you to
  donkeytown.  Once 10 living players have you cursed, one of them standing at
  the corner of the rift will block the entire rift, sending you to donkeytown
  always, as long as those players continue living.  The worst offender
  currently has 104 curses, and in a recent sample, 13 living players had that
  offender cursed.

--Twins/trips/quads don't get curse tokens to spend.

--How fast you run while chasing someone in the kill state now depends on the
  size of your posse.  If you are by yourself, you run slow (0.75x speed).  A
  posse of 2 runs at 1.25x speed.  A posse of 3 runs at 1.5x speed.  A posse
  of 4+ runs at 2x speed.  This makes it more difficult for a lone griefer to
  kill someone, while also making it more difficult for a lone griefer to
  escape the will of a determined group.  This only affects chasing speed, so a
  lone player can still easily guard a choke point (with a short-range weapon)
  or an area (with a bow).

--Improved fence auto-orientation code so that different types of fences
  (rickety, proposed, etc.) can react to each other and auto-orient.  No more
  out-of-whack fences caused by them being out-of-sync when placed.

--New baby distribution method, after Eve window closes:  Instead of
  round-robin, we pick the family with the fewest potentially fertile females
  (fertile moms and girl children) left and send the next incoming baby there.

--Twins always run at posse-1 speed (0.75x) when trying to kill, no matter what
  size of a posse they're part of.  Thus, twins can't form their own posse made
  up just of their twin set to get a kill speedup.




Version 262    2019-September-12

--Incorporated PAX West hotfixes to kiosk mode.

--Fixed so that hitched horse cart doesn't cross objects to the left in a
  glitchy way.  Fixes #358

--Support for ctrl-v paste of text into object description in editor.

--Auto-walking around all kinds of road branches (diagonals, etc.) now works
  flawlessly.  Fixes #360

--Fixed so that you can walk to and set down or swap an object on an empty
  surrounded tile with one click.  Fixes #361

--Removed lingering home markers after apocalypse.  Related to #363

--Can now CTRL-V to paste clipboard text into chat.  Fixes #367

--Added some safeguards to make sure drawn cursor size never jumps to 0. 
  Fixes jasonrohrer/OneLife#379

--Mousing over someone from another family shows their WAR or PEACE status with
  your family (no label if neutral).  A new WAR_REPORT message from the server
  makes this possible.

--If you spam more than 10 emotes in a single minute, you're put on emote
  cooldown for two minutes.  Based on the simplistic implementation, worst
  case, you can trigger 20 emotes in a row (if you trigger 10 at the end of a
  minute window and 10 at the beginning of the next minute window).  Fixes #396




Server Fixes

--Fixed crash when moveTotalSeconds is negative.

--Whoops.  For the past two months, no new players were having reviews, lives 
  lived, or time lived logged by the review server (due to a bug in the insert 
  query after polls were added).

--Special announcement to let players know they have a PAX Expo baby.

--Current move truncated when you land a kill, to prevent a long move from
  continuing at full speed with a slow-down bloody weapon in your hand.
  Fixes #362

--Fixed so that we clear remembered monomument positions after apocalypse so
  that we don't keep passing them on to future generations (babies hear about
  the monument that their mothers know about at age 0.5).  Fixes #363

--Added sanity check so that no Eves are born outside barrier, no matter what.
  Fixes #377

--Check min pickup age before swapping a held object (with a ground transition)
  with another object on the ground.  A child can no longer swap a clean pad
  with a sword, car, bow, etc.  Fixes #378

--Fixed memory leak.






Version 260    2019-August-28

--Fixed bug in murder weapon change not showing up on perpetrator until perp
  stops moving (in other clients other than the perp's client).

--Fixed digit in sqrt(2) constant.  Fixes #372

--Editor now highlights naturally-occuring objects and deadly objects in
  picker, so no more mistakes making something natural during object
  duplication.

--More kiosk mode features.  Instructions on RebirthChoice page, friends button
  there, and blocking various things that would return you to the login screen.




Server Fixes

--Family limit failure condition set to 35 (was 23).

--Fixed bug that caused stuck murder mouth emote if you target someone from
  more than 8 tiles away.

--Support for custom global messages.

--Support for maxPickupAge on objects (so elders cannot use swords).

--Local personal curses replaces centralized curse server.  Each player on a
  server gets one token per 30 minutes (was 1 per 2 hours) to curse another
  player.  That marks the player for 48 hours, preventing them from getting
  born within 50 tiles of the cursing player.  If a cursed player runs out of
  mothers inside the Eve window, they become an Eve.  If a cursed player runs
  out of mothers outside of the Eve window, they go to donkeytown.

--Cross-family cursing can now be done without speaking the curse in their
  language (local personal curses are fine across families).

--Shortcuts for cursing:  CURSE YOU (closest other player) and CURSE MY BABY
  (your youngest baby, even if recently died).

--Change to baby last name:  now comes from biological family name, if set,
  even if baby is adopted and named by someone else.  Much less confusion about
  who is in which family line (for war and peace purposes).

--Families start out in neutral state and cannot use swords against each other.
  Unilateral war is possible when elders speak WAR in the target family's
  language (and then both sides are at war).  Peace can be set by elders from
  both families saying PEACE in the target language, and then that PEACE treaty
  can only be broken by elders from both families saying WAR.  So, unilateral
  war is possible at first, but after peace is established bilaterally, it must
  be broken bilaterally.

--Support for force-matched vertical, horizontal, and corner fences.  No more
  manually rotating them.

--Wildcard shortcuts for giving gate ownership to all living children (MY
  OFFSPRING OWN THIS) or all living family members (MY FAMILY OWNS THIS).

--New arc failure condition:  After Eve Window closes, there are no new Eves,
  and arc ends when there are fewer than 5 living families.

--Arc milestone message now includes info about min family end condition.

--Global announcement whenever a family dies out after the Eve window closes.

--Link from Eve on family tree server to full tree on Wondible viewer.

--Fixed rounding errors in move timing that could cause micro-managed moves to
  be faster than long paths (WASD movment catching up to mouse movement).

--Fixed apocalypse frozen-whiteout bug caused by server waiting for
  disconnected players to have been sent the map update (they are disconnected,
  so this is never going to happen).  When this bug was triggered (by a player
  in the disconnected state during the apocalypse), the apocalypse whiteout
  would last until that disconnected player died.

--Fixed to no longer send out arc-family death announcements for Tutorial and
  Donkeytown players.  Fixes #375.

--Can spend YUM bonus to do hungry work.  Hungry worked blocked if it would
  take you down below 5 food (to give you a safe buffer at the end).  Thus, you
  need at least 15 food (including food and YUM) to do 10-cost hungry work.

--After Eve window closes, babies are distributed between remaining families
  round-robin.  Within each family, when it's their turn to get a baby, heat
  an yum fertility bonuses still affect which mother in the family is chosen.
  Note that area/lineage bans, birth cooldowns, and other factors still apply.
  We only send a baby to the next family, round-robin, if we can according to
  these other factors.

--For analysis:  after Eve window, each family population is tracked separately
  in a log over time (so we can make graphs showing family fractions of total
  population, etc).

--Support in lifeTokenServer for manually changing an account's token count
  (for PAX booth use).




Version 256    2019-August-2

--Support for offScreenSound_red tag (other offScreenSounds are white).

--Support for global messages broadcast from server to all connected clients
  not in tutorial.  Using it to announce war/peace status.




Server Fixes

--Fixed baby teleportation glitch.  Now if there's no place to drop a baby, 
  they go where you are standing instead of being thrown.

--Babies born outside rift area don't count toward survival requirement for
  determining group failure.

--Fixed offspring selection code to balance male and female babies, even for
  races that have different numbers of male and female characters (before,
  redhead and black mothers had 75% boy babies, now they have 50% like they
  should).

--Added support for an Eve window of time at the beginning of an arc.  Eves can
  only spawn during that time.

--Disabling baby-survivial-age based apocalypse trigger, and replacing it with
  a no-fertile-mothers-left (inside the barrier) trigger.

--Outside the Eve window, incoming babies will be born to SOME fertile mother,
  no matter what (despite lineage bans, birth cooldowns, etc.)

--Barrier radius 354, for roughly half a million tiles (tried 1/4 million
  which was too small, and 1 million, which was too big).

--Forcing all girls to be born if we're outside Eve window and number of
  fertile mothers inside the barrier falls below a threshold (1/15 of the
  population, or 2, whichever is larger).

--Fixed so that donkeytown can spawn Eves even after the Eve window closes.

--Fixed so that suiciding as a baby counts against your own genetic fitness
  score (a bug was preventing it from counting).

--Made fitness leaderboard window a setting, and set it to 24 hours (was 48
  hours before).  This is the recent-play window for displaying names on the
  leaderboard and computing rankings.

--Global failure condition is now baby/mother ratio of 6 or higher (counting
  helpless, < 3-year babies and fertile mothers).  So no more baby overload at
  very end.
 
--Support for new +hungryWork object tag, which requires and consumes a certain
  amount of food when the object is produced.  Applying this to chopping down
  most kinds of useful trees (at least ones that are sensibly hardwood, like
  maple, poplar, and rubber).

--Server biomes random generator reseeds itself after every map wipe.  A
  different map every time, with one of 4 billion possible seeds.

--Made server wait 8 seconds after signalling apocalypse, to give clients
  plenty of time to white-out.

--Fixed so that non-cursed babies don't get born to cursed mothers after Eve
  window closes.

--Fixed so that during 2-hour eve window at start of arc, players outside
  barrier cannot have babies (so that they have to escape fresh during each
  new arc).

--You can now curse people in other families, but only if you utter the curse
  in their language.  This means that over multiple generations of
  co-existence, where subsequent generations of babies learn more and more of
  the language, you can curse that family in plain English, eventually, because
  they can understand your plain English.  But before that, you can utter the
  curse in their language directly (or join in a curse that they are carrying
  out by repeating what they said in their language.  For example, DANCH LEASIE
  STEADGED was one translation that I saw for CURSE TOBY JONES.)

--Server logs every player-caused change to map, for wondible's potential use
  in time-lapses.

--If server starts up and finds that it's map seed file has been wiped, it
  assumes this is a manually-started fresh arc, and reports the end of the
  previous arc to the arc-tracking server.

--Server map-change-log includes floors.

--Biome map gen code overhaul.  Testing new topographical placement.  Swamps
  surrounded by grass surrounded by prairie.  Snow surrounded by mountain
  surrounded by desert surrounded by jungle.  Every grassy area is a good
  settlement spot, because it's always next to a swamp.

--Disabled plane flying over rift.  People escaping early makes it impossible
  to test properly.

--Baby mother ratio (failure condition) reduced from 6 to 4.

--New patch-based layout of special biomes (desert, snow, jungle) on
  topographical peaks.  Regular biomes (swap, grass, prairie, mountain) are
  still played in topographical rings.  This prevents the biomes that we need
  less of from ending up in weird-feeling, thin topo rings.  It also adds
  large-scale variation to the map.  This region has snowy peaks.  This other
  region has desert peaks.

--Saying PEACE in a way that another family can understand (in their language,
  or in English if you are bilingual), with one of their family members in
  earshot, establishes a peace treaty between families, blocking the use of the
  war sword between them.  Only works if said in both directions, by elders
  over age 55.  If elders say WAR bidirectionally later, the families are no
  longer at peace and can use war swords again.

--Testing new arc failure condition:  We allow a normal Eve spiral always, but
  after the initial Eve window time (currently 2 hours), we start counting
  families.  The arc ends if we ever have too many families (more than 15),
  because this means that the successful families have all started to fail,
  and there aren't enough fertile mothers left, and we're getting a lot of Eves
  that can't survive.

--Cronjob to sync map change logs to public data server every 5 minutes.

--Support for special map placements.

--Can only enter the kill state against a player that is no further than 8
  tiles away.

--Family data log, tracking player population stats over time.

--Server sends global message with arc stats every 100 years.




Version 251    2019-July-25

--Fixed weird initialization of OwnerInfo structure.

--Support for +noHighlight tag on objects (blocking mouse-over highlights,
  which look weird on the rift object).



Server Fixes

--Another work-around for the Steam bug.  Manually verify that the latest
  steam build ID is correct before building.

--Long term non-look map culling (live reclamation by nature) disabled.

--Added an impassible barrier at a adjustable square radius.

--Eve spiral resets to 0,0 when it gets too close to the barrier.

--Adjusted Eve spiral jump to 50 (from 250) and set barrier radius at 250
  (500x500 square).  The smaller spiral fits nicely in the barrier square.

--If no baby lives to age 15 for 60 straight minutes (on a server with at least
  15 active players), then an apocalypse is auto-triggered.  This means the
  barrier square is out of resources necessary for survival.




Version 248    2019-July-18

--Fixed crash in crafting hints if an object is picked up that has no 
  transitions.

--Support for adjusting ground tile edge blur at runtime in settings folder.

--Fixed rapid character flipping glitch when walking on a road with a
  wide-blocking object on it.  Fixes #352

--Fixed crash when specified emotion object ID does not exist.




Server Fixes

--Server now allows authenticated re-connect through no matter what,
  force-disconnecting the existing connection if its still seen as connected.
  This will eliminate LOGIN FAILED when trying to reconnect quickly (before the
  server has seen the connection break), BUT it will also allow someone else
  with the same login credentials (like a friend you gave your account key to)
  to login and hijack your game (and force you to disconnect).  This is an edge
  case that will almost never happen, so it's best to honor all connection 
  requests and assume they came from the legit account owner.  Fixes #345

--Fixed implementation of Bresenham's Line Algorithm to handle cases where y
  changes faster than x (vertically-oriented lines).  This fixes blocked kill
  shots and long-distance item uses from tight vertical angles.  Fixes #350

--Fixed rounding issues that could affect fitness ranking.  Fixes #351

--Fixed so that you can swap held items into full clothing containers.
  Fixes #353

--Getting fed by someone else can never break your YUM chain.  Getting fed a
  yummy food by someone else will increase your chain and give you the normal
  bonus.  Getting fed a MEH food will not affect your chain, but you won't get
  the bonus.  This means you can't grief someone's YUM chain, and through
  collaboration, you can preserve each other's YUM chains while waiting for
  more yummy foods to be available.  Fixes #354

--Fixed so that baby carried away from AM transmitter doesn't still transmit
  voice.  Fixes #355



Version 246    2019-July-5

--Fixed crash if email blank on login screen when score fetch attempted.

--Fixed suffix for 11th, 12th, and 13th rankings.  Thanks Twisted.

--Fixed client ignoring DENIED from fitness server.

--Can now swap items in a full container.  Related to #340

--Right-clicking bare ground near an object while on a horse now swaps the
  horse with that object, making it consistent with other swapping behavior.
  Related to #340

--Fixed character getting stuck in eating animation when double-clicking to
  eat.  This potentially also fixes moonwalking, but I haven't confirmed that.
  Related to #309

--Fixed so that new graves correctly replace vanished graves at same location.
  Fixes #343  Thanks Twisted.

--Added additional movement fix to Justin L's previous pull request.

--Fixed double sound playing (2x as loud, with phase interference) when putting
  on clothing that contains something.

--Added support for red ! speech balloon to accompany certain important off
  screen sounds (like murder scream).  Fixes #349




Server Fixes

--DIE babies don't affect genetic score of their ancestors (but affect
  themselves).

--Fixed bug in interleaving of requests to genetic fitness server, resulting in
  stale sequence numbers (and thus offspring not getting logged properly).

--Eves and tutorial players no longer contribute to a player's genetic score.

--Fitness server now discards old offspring records and lives that have fallen
  off the end of client's display lists anyway.

--Fixed rare case of visually changing biome.  Fixes #341  Thanks Alec Y.

--Blocked default transitions from happening at a distance, to prevent modded
  clients from using distant-use objects (like bows and arrows) to open doors
  at a distance.  Fixes #342

--Fixed objects getting stuck between decay transitions when you walk away and
  come back (before, touching the object would finally trigger the pending
  transition).  Fixes #337

--Handle a special clothing removal case more intelligently.  If left-click
  does a special clothing action (like remove sword), then it used to be
  impossible to take off the clothing (without doing the special action first),
  because right-click was reserved for removing stuff from clothing.  Now, if
  clothing slots are empty, and left-click maps to a special clothing action,
  right-click will remove the clothing.  Note that it's still impossible to
  remove clothing with full slots that also has a special bare-hand action
  (because right and left click both do something already).

--Fixed row index in lineage server.  Fixes #348



Version 245    2019-June-28

--Support for new genetic fitness score across lives, ranking, leaderboard, 
  and genetic history display inside client.




Server Fixes

--Whoops... totally forgot to update killEmotionIndex.ini server setting.
  Murder Mouth should work now.





Version 243    2019-June-21

--Better randomization (less repetative) of multi-sound sets by shuffling
  sounds, playing them in that order, and then reshuffling (instead of picking
  a different random sound each time, which can lead to lots of repeats).

--Support in editor for pasting a single sound onto the end of a sound set
  without replacing it.

--Client can now play animation sounds from a character's emote.

--8/12 display for lives remaining (suggested by Dodge).

--Finally fixed lurking wrong-grave-info bug (triggered when you swap a bone
  basket with something that's on the ground where an old grave has already
  decayed away).  Fixes #338




Server Fixes

--Fixed issues with other forced-emots (like snowball splats) interruping the
  KILL-state angry face.  Now the angry face comes back when the snowball splat
  melts.

--Admin funciton for restoring all tokens back to starting level (useful before
  servers restart).




Version 242    2019-June-19

--Client support for in-game poll feature.




Server Fixes

--Fixed a crash when a baby tries to take a sword out of a backpack they are
  wearing.




Version 240    2019-June-14

--Fixed so that lives-left text never overlaps with re-detect or custom-server-
  disable buttons on login page.  Fixed so that re-dectect button doesn't
  linger after visiting settings page triggers a re-measure of FPS.

--There are now both Retry and Re-detect buttons when FPS mismatch occurs,
  allowing you to re-measure right then and there without restarting the game.
  We don't keep re-measuring every time we return to this screen, speeding up
  player login.  We wait to fetch life token data from the server until after
  the first FPS measurement is over, to avoid networking hiccups messing up the
  measurment.  Fixes #330

--Fixed memory leak.  Fixes #322

--Fixed so that if you click on an object that is surrounded NSEW but still
  accessible, you walk there, to that object's spot, and interact with it,
  instead of just walking there.  Fixes #318

--Protocol now includes lineageEveID with lineage and grave messages so that
  client can show DISTANT RELATIVE for relatives and graves that are further
  away than the 20 generation cuttoff.  Fixes #317

--Fixed memory leak in killMessage.  Fixes #311

--New /DISCONNECT command in client for testing.

--Added support for sprites that disappear when an object is contained.
  Fixes #282



Server Fixes

--Fixed so that empty tiles that used to contain a natural object are restored
  when map is culled back to natural state.  Thanks Alec.  Fixes #332

--Reduced map database pollution with unecessary 0-values (before, we would 
  clear a tile's contained items, setting its num-contained to 0 in the db,
  every time an item was picked up from that tile, even if the item that was
  picked up contained nothing---now, we check that there are contained items
  there to clear before clearing them and inserting a 0 for num contained in
  the database).  This cuts the number of database entries in half in many
  situations (thus reducing the disk size of the database dramatically).
 
--If you disconnect and reconnect when you have 0 lives left, you are no longer
  blocked from logging in to resume your last life.

--Fixed bug where you could enter the kill-intent state against family members
  when holding the sword, and if you ever got close enough, the server would
  generate an endless flood of update messages for the failed kill action,
  overload network connections, and leading to disconnects.  Now you can't even
  enter the kill-intent state if the weapon you are holding is not applicable
  to your target.  Thanks Laccy.  Fixes #320

--Can no longer trigger a transition for warn clothing that takes it to an
  unwearable state (for example, hitting crown with hammer to turn it back into
  an ingot while you're still wearing it).  Fixes #310

--No more tutorial players in name logs.  Fixes  #333

--Fixed typo in square root of two in server code.  Fixes #325

--Fixed disappearing springs caused by map cache not being aware of grid
  placement status.  Fixes #319

--Trees and other permanent objects regrowing destroy sections of underlying
  roads in natural reclamation.  However, surface non-permanent natural objects
  (stones, iron, etc.) will re-occur on top of the road.  Fixes #334

--No language barriers on low-pop servers.  Fixes #314

--Making sure REMV action is grid adjacent.  Fixes #312 

--Monument stats include year now.  Fixes #307

--Fixed calculation of distance for fleeing/chasing animal movement.  Fixes #306

--If you quit the client to disconnect and then reconnect as a twin, it will
  now kill your old self to make room for your twin (it used to confusingly
  reconnect you to your old life, and let your partner through as a lone twin).
  Fixes #305

--Fixed cause of ghost players who just stand there but aren't really there.
  Fixes #299

--Smarter code when swapping shoes.  Swaps held shoe with non-matching shoe
  first, and if both shoes are non-matching, pays attention to which shoe you
  clicked on.  Fixes #297

--If name of Eve or baby not unique within past two hours on server, closest
  unique name chosen instead.  No more roman numeral suffixes.  Fixes #283



Version 238    2019-June-8

--Support for limited number of life tokens per player, with more tokens
  earned every hour that passes.




Server Fixes

--We now add a new Eve whenever existing families have more than 15 players
  each on average.

--Lineage server trims newlines from death cause description.

--People without last names can be cursed.  Fixes #302

--Fixed a memory leak in murderPerpEmail.

--Support for 'kill' result emots that are non-lethal and don't make you drop
  what you are holding through new no_replace tag.  Snowball splats now work
  this way.

--Stone road not culled (allong with stone walls) during map reclamation by
  nature.

--Rolled back change 7292535f9fca5333bff52f3ba9038b530ea77273, so max birth
  cooldown is 5 minutes again.

--Rolled back changes 10e9b49dca89cd9e50895a883a0e98c9ab9e0f89 and
  b33eae6c249103b32b4c0163bb5fe1e57c1d3a35, so mother's birth cooldown only
  resets if she picked up a SIDS baby, and doesn't reset if most recent baby
  died due to neglect.

--Partially rolled back change 2419cdf75a3d64d2c637851434763c84efdd7649 so that
  suicide triggers area ban like it did before, but family skip list is still
  functioning too.  Thus, suicide has a compound effect of making you skip the
  family until you run out of families AND ban yourself from that area.
  Figured leaving skip list code in place for now is fine, instead of tearing
  it out completely.

--Disabled latest Eve spring grid placement close to civ, and re-enabled old
  Eve spiral.

--New Eve spiral behavior:  If center of spiral hasn't been seen in a long
  enough time that it has likely been culled, we restart the spiral again from
  the center.  This prevents the spiral from getting endlessly bigger, and
  brings Eves closer together again periodically, as the center of the map gets
  culled.





Version 235    2019-May-29

--Fixed one cause of rubber-banding player movement in client.  No need to
  navigate all the way back to start of a new path sent by server if we're
  closer to a spot in the middle of the path.

--Fixed so that other players never slow down in their movement to match
  server timing, but still speed up if necessary.  (It's always okay for
  another player to arrive at their destination early, client-side.)



Server Fixes

--Changes to function of /DIE.  Can no longer use it to cycle through all
  families and force yourself to be an unecessary Eve.  Eve only spawns if
  there are really no available motehrs for an incoming baby.  /DIE adds this
  family to your family skip list.  If you eventually cycle through all
  families, so that you've skipped them all, and none are left, your skip list
  is cleared.

--When the server has 15 or more simultaneous players, 200 map database entries
  are examined every periodic server step (4x per second), and any entries in
  regions that have not been seen by players in 8 hours are set back to their
  natural state.  Depending on the size of the database, walking through all
  entries can take quite a while (the current bigserver2 database has 25
  million entries, so that would take 8 hours at the current rate).  Thus, the
  actual decay-back-to-nature time will be at least 8 hours, due to the time it
  takes to walk through all database entries.  Also, a group of tiles will
  potentially clear in an uneven sequence, based on their order in the
  database.  Thus, partial ruins are possible.

--Don't spawn non-cursed Eve near donkey town.

--Always reset mother's birth cool down if baby does /DIE, whether ever held
  or not.

--Mother's birth cool-down instantly resets when her most-recent baby dies of
  any cause.

--Max birth cool-down for mother is 3 minutes instead of 5 (mean 1.2 minutes
  instead of 2 minutes).

--Ancient stone walls are left standing during 8-hour-no-look map culling.




Version 234    2019-May-25

--Fixed long-standing bug when something decays in the hand of a moving player,
  causing a bad player update message to get sent, making their position revert
  on other clients.

--On SHIFT-click to kill, allow missing by up to four tiles (finding closest
  person and calling them the target) to avoid the annoying "drop your weapon
  by accident" game when you're trying to click on a moving target.

--Fixed long-standing bug that would defer mid-move player change until after
  their move completed.



Server Fixes:

--Query times listed on front page of family tree server.

--Reduced server step time to 1/10 sec max if there are active kill requests
  pending, so that even on servers with very few players, kills happen
  instantly when players cross paths.

--Added a work-around for a bug in move path validation that was causing valid
  moves to get rejected by server.  Fixed check for diagonal adjacent.



Version 231    2019-May-23

--Tiles that are drawn as non-flipped remember their non-flipped status, even
  if they change to flippable tiles later (so they don't flip back and forth
  in an unappealing way).

--Client supports new KILL message semantics.

--Fixed a glitch where other players showed doing animation when their held
  object passively changed.

--Fixed glitch on auto-click at the end of very short paths.

--Applied fixes for various movement glitches.  Thanks Justin L.

--KILL action now requires SHIFT key held.  Instruction image updated.




Server Fixes:

--Fixed bug in deletion of underlying object if grave marker has no slots.

--Increased name match limit in family tree search to 30,000, and ensuring
  performance by forcing use of name column as index in all name queries.

--Code that accepts KILL command is more liberal in case of a moving target.
  Now it's very hard to miss with the bow, assuming that the target is within
  range and you actually click on them client-side.

--Fixed so that use-on-bare-ground objects that are groundOnly can't be used on
  floors.

--Added a script to automate end-user installation of a private server on Linux.

--Fixed so that Eves don't spawn near tutorial town.

--Fixed so that VOG doesn't see language-mapped phrases.

--Fixed so that spring placement not blocked by objects to the south.

--Improved thermal model for buildings.  Now using a 13x13 heat grid instead of
  8x8, to support larger buildings.  We now detect a binary indoor/outdoor
  property for each player, based on being completely surrounded by walls,
  floors, and closed doors.  If indoors, the effect of a cold environment is
  halved, and the effect of clothing to protect from cold environments is
  doubled.

--Changed semantics of player KILL action server-side.  Instead of an
  instantaneous action based on player proximity that either succeeds or fails,
  the server remembers that the player is trying to kill that other player and
  forces an angry emote for their face.  If they ever get within range of the
  target player, the kill action is executed.  The kill state will get canceled
  if they drop their weapon, target someone else, or if their target dies of
  other causes.  Essentially, once you set a quest for blood on another player,
  if you ever cross paths with them, it will happen.  This dramatically reduces
  the effectiveness of dancing around, but doesn't undercut the advantage of
  range weapons (you can still run away from an attacker).  If two players
  attempt to kill each other simultaneously, the player that was put into the
  kill state first will succeed, if the players ever cross paths.

--Fixed missing fseek between fread and fwrite calls.  Thanks Justin L.
  Related to pull request #268

--Fixed bug in param order in call to getClosestOtherPlayer.

--If you didn't inherit a family name at birth, you get the family name of
  whoever is holding you when they name you.  Related to #227

--Standardized other-person-naming code, whether for held baby, or non-held,
  currently-nameless adult.  Baby inherits the family name of their mother at
  birth, or the family name of their namer otherwise.  Family name can differ
  from last name, depending on who named you, but your family name will
  resurface later down the line as a last name if your last name is lost. 
  Fixes #277




Version 228    2019-May-16

--Abbreviating more than 4 GREATS in grave names as 5X GREAT so that it doesn't
  go off the edge of the screen.

--Eve placed in random location at radius around spring, with home arrow
  pointing back to spring.  Client searches for initial home arrow further
  away, maybe way off screen, than before.




Server Fixes:

--Timeout to re-use previously-used Eve spring locations is 1 hour instead of 3.

--New map, with bug fix, too dense.  Restored old map spacing.

--Fixed bug in Eve grid placement that caused resorting to old spriral.
  Fixes #303

--Fixed so that trying to add food to a full backpack doesn't make you eat
  it by accident.  Fixes #304

--Support for on-worn-clothing transitions and bare-hand-on-worn-clothing
  transitions to allow sword to be added and removed from backpack in a more
  visible spot (not contained).

--Fixed rare server crash when a player connection breaks in middle of a
  multi-speech message server frame.  All speech messages from the frame
  should be sent in one message.

--Lineage server catches character name searches that match too many names, to
  avoid overly long query times.

--Map wiping script now checks ~/skipMapWipe.txt file, so certain servers can
  be flagged as never wiping.

--More dense Eve packing by instant-reusing spring sites for dead Eve lineages.

--Lineage ban now lasts 1.5 hours of living in game, or 3 hours max, even if
  not living in game (used to be 24 hours if not living in game).

--Fixed major array-bounds bug if you die and drop something in a crowded area.

--Babies can now learn other languages that are spoken around them before age 3.

--Babies inherit whatever portion of another language their mother learned
  while she was a baby.  Thus, accents disappear trans-generationally,
  assuming that each new baby is exposed to even more of the language before
  age 3.

--Upped the learning window to age 6.  Three years with mom, three years 
  wandering the village to hear others speaking.

--Fixed bug that prevented eating when clicking on clothing with no slots.

--Support for special DIE baby grave, on ground or held, that can decay faster.

--If you put a sword-backpack on a baby, they can no longer draw the sword.

--Eve grid search centered around some living person, chosen at random.
  Becasue big towns have more people, they will end up with more Eves around
  them.





Version 223    2019-May-10

--Fixed bug that was causing inherited home marker position (closest marker
  visible on screen during spawn) to get deleted.




Server Fixes:

--Manually-triggered server object survey (objects around living players).

--Handled case where ticket server check not required, and thus curse status of
  player might be unknown (birth of a baby was blocked in that case, forcing
  all players to be Eve).

--Fixed bug in unblocked path detection that was allowing arrows to shoot
  through walls on diagonals.  Thanks Tarr.

--Different Eve lines speak different languages with bi-directional filter.

--New Eve placement on natural spring grid, with auto-home-marker for Eve.

--childSameRaceLikelihood now 100%.  Races with 3 members are not forced to
  have children of the neighboring race.

--Support for deadly objects that work on other family only.




Version 221    2019-May-5

--Server now reports death-age in GRAVE_OLD message, and client now displays
  how long person has been dead on grave mouse-over.

--Temporarily disable mushroom sprite remap effect when taking photos.

--PaperThreshold slider in import editor allows better control of feathering on
  transparent sprite edges.

--New protocol for server to tell client about valley spacing.



Server Fixes:

--Daily mass disconnect issue:  rolling the servers log.txt over was using a
  copy operation, and for a 2.9 GB log file, this was stalling the server for
  20 seconds.  Switched to a move operation instead, which is instantaneous.

--Fixed a bunch of bugs in way old graves and moving graves are tracked.

--Map pull mode now deals in absolute coordinates.

--Map pull mode now prevents player starvation.

--Fixed bug in removing owners that was causing the OW message detailing
  ownership change to be sent over and over (every server frame, which can be
  hundreds of times per second) during the 5-second grace period before we
  disconnect the dead player.  This overloaded the socket buffer for clients,
  causing them to disconnect.  Fixes #286

--Support for gridPlacement objects that are spread evenly on map (ponds).

--Fixed RIDICULOUS bug in map placement algorithm (that was mis-measuring tall
  objects to the south that would block placement of short objects, effectively
  blocking placement of short objects in the two tiles to the north of any
  object that sticks up above the tile center).  Map is now much fuller than it
  used to be.




Version 219    2019-April-27

--Fixed bug that cause chat sheet to not appear if another field was focused.
  Was caused by VOG code.

--Copying an off-screen player's flip orientation when insta-dropping an 
  object.

--Copying a player's flip orientation when use-on-bare-ground with a non-
  permanent result.




Server Fixes:

--You can no longer curses someone by name after they've been dead for 5 
  minutes.

--You can only curse your own family members, not people from other lines.

--Fixed coordinate leak in initial PM message.




Version 216    2019-April-19

--Fixed long-standing bug in transition generation when both actor and target
  have uses but one of them is marked as noUse (example:  digging potatoes
  without using shovel).

--Server and client support for owned property gates, and assigning ownership
  verbally to other players by name or by YOU for nearby players.  Mouse over
  gate for name of closest owner.




Server Fixes:

--Bare-hand actions no longer reset decay time if new object decays in same
  amount of time as old object (even if they decay into different things).



Version 215    2019-April-5

--Object editor supports pasting color over all sprites in object.

--Fixed bug causing some category-based transitions to not show up in editor.

--Sprite Trim Editor no longer clears trim when subsprites saved.

--Fixed client-side bug when two graves are "in the air" simultaneously and
  swap positions on the ground, which resulted in one of the grave's info being
  lost.

--Support for mousing over old graves from people who died before your birth.




Server Fixes:

--Fixed bug that skipped heat map recomputation if number of players on server
  shrank.

--Lineage server shows tables of deep roots.

--Family name sticks with you even if your mother is nameless or doesn't name
  you.





Version 212    2019-March-29

--Fixed bug in regular-click on permanent containers mapping to REMV always,
  even if container has a bare-hand action (like horse cart).  Fixes #261

--Client provides account key hmac in lineage server URL.

--Special case of object sprite subset detection (where sub object has a single
  sprite, it is a subset even if there are rotations, flips, or translations in
  the super-object).  Example:  removing onion from plate.




Server Fixes:

--Temporarily taking public life log data offline.  Will move it to a separate 
  server when I return from GDC.

--Temporary fix server-side for client basket and horse cart bug.

--Rolled back server-side temp fix, now that client-side fix is in place.

--Animals no longer spawn outside of their target biomes (along biome
  boundaries).  No more mosquitos in desert, seals in jungle.  Fixes #260

--Lineage server now requires account key hmac along with email search to
  verify email ownership and protect privacy.  (Disabled for now until client
  update.)

--Default server setting (settings/remoteReport.ini  = 0) now avoids reporting
  to central curse, lineage, and review servers.  This one setting overrides
  all others that control reporting.  People who are running vanilla server
  code will no longer be hammering my servers with bad requests.




Version 211     2019-March-16

--Fixed overlay negative scaling check in EditorImportPage.  Thanks Chard.
  Fixes #243

--scanf calls in soundBank and spriteBank were using .txt file extensions.

--Added work-around for corrupted bin_cache files instead of crashing.

--100 Hz added to possible frame rates.

--Left or right click now works to remove specific item from permanent
  container.  Fixes #257

--Support for sounds in emot objects.




Server Fixes:

--Fixed crash when player clicks to remove default object from container.

--No babies born to vog player.  Fixes #244

--Fixed so that lastCheckedBiome is correct, in certain cases where we call
  getBaseMap for neighboring cells too.  Thanks Chard.  Fixes #245.  Fixes #246

--Fixed so that on-chunk vog players do not become visible when walking onto a
   map chunk.

--Min rebirth distance reduced from 2000 down to 200.  Eve spiral jump radius
  is currently 250, so as the eve spiral passed near established towns, that
  Eve would be blocked from giving birth to players who lived recently in the
  nearby town.  2000 was too large.  200 is large enough to prevent you from
  being in born in the same specific town over and over, even if there are
  multiple family lines in that town.

--Clothing thermal model reworked to make it more intuitive.  Before, because
  clothing held in body heat, which was added each sim step, additional
  clothing had a non-linear effect on your steady-state temperature.  Adding or
  removing one shoe could dramatically change your temperature.  Now, no body
  heat is added each sim step.  Instead, the R-value of your clothing outfit
  closes the gap between your environment's temperature and your ideal
  temperature, but only in cold environments.  A perfect set of clothing with
  an R-value of 1.0 would bring a cold environment twice as close to perfect as
  it would be without clothing.  In other words, clothing alone gets you 
  half-way to perfect now in cold environments.  This effect is additve and
  linear, so in a cold environment, each piece of clothing that you add makes
  you a little bit warmer.  Also, the clothing R value still slows your
  temperature change, but only if your environment is further from perfect than
  your current temperature.  If you move into a more perfect environment (like 
  standing by a fire), your clothing will not slow down your temperature change
  to more perfect.  But when you move to a less perfect environment, it will
  slow down your temperature change.

--Prevented relative position leaking for far-away player in initial player
  update message.  Also fixed for far-away grave messages.  Fixes #251

--Support for forbidden emot indices right in middle of list instead of just at
  end of list.




Version 206    2019-March-1

--Game client now prints version number on startup.

--Client and editor no longer fight each other over bin_cache version numbers.

--Fixed so client left/right mouse differentation for pick-up vs. modify (like
  for stacks of bowls) only kicks in if the modify transition is a true
  modification, leaving something on the ground, and not just a pick-up change.
  This, in turn, fixes picking up piglets so that they go into their held
  state.  Fixes #240

--Made walking-on-road behavior consistent if blocking object intersects.  Now
  you always stop, instead of routing around in a poorly defined way and
  changing speed.  Fixes #242

--VOG.




Server Fixes:

--Fixed server crash due to not checking player disconnected status in one spot
  before sending a message to their socket.

--Lineage limit now applies to birth location instead of family line, to deal
  with multi-family towns (or twin-Eve founded towns).  After living a
  substantial life, cannot be born within 2000 tiles of that birth location
  until enough time has been spent living in other areas.  Fixes #222

--Removed some redundant code triggered when a permanent held object is swapped
  with something on the ground.  This code was causing an extra transition step
  to happen, making a horse's lasso disappear, for example.  Fixes #233

--Fixed incorrect variable declaration location in lineage server.

--Compounded snowball splats are no longer deadly.  Fixes #235

--Container removes and swaps now skips any item that player is not old enough
  to hold (knife on top of backpack no longer blocks access to other items).
  Fixes #238

--Now you don't die until your food goes negative, making empty-hunger-bar
  behavior consistent when you starve down to 0 or nurse down to 0.  When your
  hunger bar shows 0, you still have one pip's worth of time before death.  You
  only die when it is decremented FROM 0.  This also gives you a bit of extra
  warning time, generally.  Fixes #241




Version 204    2019-February-22

--Oh jeez... gotta fopen files in binary mode on Windows.

--Old bin_cache files need to be cleared after each update.  New implementation
  that uses latest version number in file name.



Version 202    2019-February-22

--Client prints stat about fraction of total sprites loaded.

--Dramatic speed up to client load time.  Pre-loading all sprites before LOGIN
  screen shown from a single compressed cache file (used to load sprites from
  separate files as-needed at map load time).  Now map loads almost instantly.

--Same compressed cache file technique for sounds and reverbs before LOGIN.
  Now the map loads instantly, since all assets are pre-loaded.

--Hid LOADING MAP progress bar screen in client, since it's no longer needed.

--Fix so that starting to cry again does not clear yellow color from yellow
  fever on baby (emotes in general are fine when crying, becasue crying baby
  doesn't have offical mouth or eyes that facial emots can hook onto, but
  blushing can still work).  Fixes #231




Server Fixes

--Fixed crash caused by wayward deletion of new sequence number string in twin
  code.

--Fixed clothing biome boundary dancing exploit (crossing boundary between
  hot/cold biome will never make you more comfortable (closer to target middle
  temp) than you were before crossing).  Clothing still reduces thermal shock
  from crossing biome boundaries, but only if you are already closer to target
  temp than thermal shock on other side of temp meter.  So if you are close to
  perfect, wearing clothing will help a lot when you cross a biome boundary
  from cold to hot.  If you are currently freezing (and in clothes), the
  clothing won't help much when you cross into a hot biome to reduce shock.

--Body heat now only applies in cold environments, so it won't cause
  overheating when wearing clothes in hot environments (clothes slow how fast
  you heat up in the hot environment, but don't hurt you by making you even
  hotter after you acclimate).

--If client sends malformed message, we now disconnect them instead of killing
  them.  Related to #194.

--If client sends more than 200 character without sending a message terminator,
  we treat this as a malformed message (to prevent a rogue client from filling
  up the buffer on the server).

--/DIE command now works even if you're not held, and clears mother's birth
  cooldown if she ever picked up up at least once.  Fixes #194

--/DIE command now works up to age 2, to compensate for slow map load times on
  some machines.

--Donkeytown threshold (which was fixed at a current curse score of 8 before)
  now goes down as a player's total curse score rises.  Once they hit 25 total
  points, it goes down to 7.  At 55, it goes down to 6.  At 65 down to 4.  And
  75 down to 3.  Note that there are only 27 people in the game with a total
  curse score of 55 or more.  A very tiny sliver of the total player
  population.  So, we now wait for the worst players to anger fewer people
  before sending them to Donkeytown.  Fixes #204

--Age rate (secondsPerYear) is now an adjustable server setting.

--Simplified thermal shock code in a way that reduces its impact.  Now when
  crossing from a too-cool to a too-hot biome (or vice versa), you shock to the
  mirror-image position on the temperature meter.  Clothing no longer affects
  this.  After flip-flopping on the temperature meter, you then gradually go up
  (or down) towards the biome's target temperature.  This gradual change is
  slowed by clothing, as usual.  This means that crossing a biome boundary will
  never cause a sudden increase in your hunger rate.

--Lineage bans now affect all twins.  If one twin cannot be born in this line,
  then none of them can.  Fixes #221

--Snowballs in backpack no longer push body temp off the negative end of the
  scale.  Clothing heat and held-item heat now handled in a more sensible way.
  Fixes #226




Version 199     2019-February-15

--Scene editor allows copy/paste of area containing floor and people.

--Updated tutorial to explain new heat system.




Version 198     2019-February-9

--Client preparing for furture protocol change where SN message contains an
  opaque string (including a random nonce) instead of a number.

--Home markers, which are invalid after flight, are cleared.

--/NET command to display network load stats in client.

--/FPS and /NET commands now show history graphs (last 100 seconds).

--FINALLY fixed a lurking source of client network lag, caused by the way that
  message frame batches were processed (while processing messages that are part
  of a frame, no message was processed, even if the entire frame was available,
  meaning that the number of display frames spent processing a message frame
  grows relative to the number of messages in the frame.  As frame rate drops
  on slower computers, this causes a message backlog to build up, especially in
  busy areas where there are lots of things happening every message frame.  We
  now process all available messages while we're waiting for the end of a frame
  to arrive.  Thanks to jrudolf for pinpointing the cause of this issue.
  Fixes #125





Server Fixes

--Paginated lineage server log listing.

--Lineage log has index for faster display.  Better logging.

--Whoops!  New server setup script was not putting serverID in right location.

--Download page lets you change your own email.

--Min-distance-at-speed for takeoff reduced to 2 (was 4) to make take-off
  easier.

--Made take-off at end of road explicit, so that you always go all the way to
  the end in one direction before taking off.

--Basket swap in a larger container wasn't working if both baskets contained
  same number of items.  Fixes #217

--Reflector fixed to update OFFLINE status of servers every 20 seconds, even
  when report isn't being loaded (before, only report would trigger an update
  to OFFLINE status of a server).

--Nearby landing pads no longer block eachother.  Instead, when taking off, we
  search for some pad in the chosen direction that is at least 250 away in
  either x or y.

--Partially-used objects are not restored to stale parts of map.  Fixes #206

--Server must update birth location of flying player to ensure that coordinates
  remain in low range to avoid GPU rounding errors (i.e., in case where player
  flies out to tutorial at coordinate x=10M).

--Players that were out of range before flight may come in range after flight.
  Server now sends a complete server-wide PU to flying player (the same as when
  player first connects), updated with new birth location (landing location).

--Calculating distance-squared when finding closest flight landing position now
  double precision (using ints isn't going to work for distances above about
  50K.

--Better logging of maxPlacementX and flights.

--Heat overhaul:  R values stack multiplicatively, not additively.

--Heat overhaul:  Separate fixed heat map produced by underlying biome
  (biomes no longer generate or absorb heat each step).

--Heat overhaul:  Biome temperature serves as starting air heat value for each
  cell in the simulation grid.

--Heat overhaul:  Floor insulates between air and underlying biome.

--Heat overhaul:  Air itself has a small R value to slow base propagation
  per sim step.

--Heat overhaul:  Biome temperature fixed at edge of simulation grid, instead
  of having a fixed 0.00 temperature sink at edge.

--Heat overhaul:  Heat produced by clothing (not currently used) summed as a
  separate step at the end, and doesn't count as a heat source in the 
  environmental simulation grid.

--Heat overhaul:  Player clothing simulated as separate step at the end, after
  simulating environmental propagation grid.

--Problem:  if tutorial is always placed at 2x max birth location, then if
  people fly to the tutorial and have a baby there repeatedly, the tutorial
  location grows exponentially.  Saw 10M, 20M, 40M, 80M, 160M, 320M in server
  log as people continued flying to tutorial and having babies there.  It will
  quickly overflow.  Now it is max birth location +400,000, so it grows
  linearly if people fly there and have babies there.  People can "chase" the
  tutorial area 5000 times before we need to worry about overflow.

--Fixed additional int overflows in server distance functions by switching to
  double precision.  This was potentially causing distant map changes to be
  sent to a player unecessarily, eating up bandwidth.

--Heat overhaul:  Player clothing now modulates how fast player body
  temperature moves toward surrounding temperature.

--Server implementation of SN protocol change, where we have a non-repeating
  nonce based on a server-side secret, instead of a simple sequence number.
  This fixes a potential security hole where private servers can harvest
  sequence-number/hash pairs and replay them to log into the real server as
  that player.

--Heat overhaul:  replaced simulation of cellular atomata heat grid with even
  heat spreading over enclosed airspace via convection and direct radiant heat
  based on distance from each heat source in airspace.  Still using 8x8 grid to
  measure airspace, which might fall short in larger buildings, but still feels
  much more intuitive than old system.  Biome heat contribution is also added
  int from player's position as a final step, so there's no biome boundary
  blending. 

--Heat overhaul:  moving to a temperature-affecting biome that is on the
  opposite side of "perfect" from you results in an instantaneous temperature
  shock, jumping to that side of the temp meter instead of tweening there
  through perfect.  This makes biome-boundary-dancing ineffective.  This
  effect is modulated by clothing though (it reduces the shock of stepping
  into the arctic or desert).

--Heat overhaul:  changed the mechanisms of fever.  Instead of heat produced by
  a held object (same as holding a hot coal or whatever), where it would be
  modulated by clothing R value (or in the old system, contained by it), heat
  from fever is a separate quantity that gets added in after all head
  computations for player.  Thermal shock reduction, based on clothing, is
  also disabled when you have a fever (so there's no punishment for wearing
  clothes when you head to the snow to cool the fever off).





Version 195     2019-January-31

--Changed projection for drawn mouse pointer (to further fix behavior on
  ultrawidescreen).

--Tutorial draws attention to vertical doors, which are hard to see.  Tutorial
  intro explains time commitment and gives death warning.  More explanation of
  YUM and MEH.

--Editor supports baking sprites that include color-adjusted sprite layers.

--Support for long-distance flying.



Server Fixes

--Reflector changed so that server assignment is not sticky for a given email
  address.  Each new life is a random re-roll among available servers.

--Added birth location offsets to AM receiver message positions.

--Reflector fixed so that offline servers aren't counted when summing current
  active server totals.

--Reflector now picks from weighted distribution of actually-alive set of
  servers, if some of the servers in the active set are offline.  Last-ditch
  effort code added to find SOME server for the player, if the weighted picking
  fails for whatever reason.

--Optimization: Don't need to do select at all on receive if timeout 0
  (using MSG_DONTWAIT anyway).  select was found to be a hotspot with profiler.

--Optimization: Profiler found 26% of non-idle time spent recomputing heat
  maps.  We were taking another step through list of players each time new
  messages arrived, meaning that we were looping through them faster and faster
  during busy times (in one estimate, processing heat maps for 130 players
  every second).  Now we process them at a fixed max rate, regardless of
  incoming message rate, of 2 players every 0.1 seconds (20 players per second
  during active times).

--Optimization: Exposed getMapObjectRaw externally so recomputeHeatMap can use
   it to avoid wasting cycles checking for decaying objects.

--Optimization: We were checking what each player was crossing every server
  step (and server steps happen faster and faster as the inbound message rate
  increases).  Fixed to only check what a player is crossing every 0.25 seconds.

--Removed a wayward continue.

--Optimization:  Don't check curse settings every stepCurses call.

--Optimization:  Only execute certain non-reactive parts of server step loop
  once every 0.25 seconds at most, not every loop (loop can run very fast when
  a lot of messages are coming in.

--Check in server code and cron job for read-only file system.

--Recomputing heat map for 20 players per second was a little slow.  With 200
  players, that means each player only gets their heat map updated every 10
  seconds.  Upped it to 80 players per second (each player gets updated every
  2.5 seconds when there are 200 players).  Also shrunk dimensions of heat map
  from 10x10 down to 8x8 (64% of original size, thus lowering computation load).

--A bunch of places in code were calling computePartialMoveSpot without
  checking whether player is moving first.  This allows a stale move path to
  get queried when player no longer moving (example:  flight destination
  reached).




Version 193     2019-January-17

--Code for transmission of speech through speech pipe objects.




Version 190     2019-January-11

--Fixed so that client sends correct number of tokens for LOGIN with blank
  email.  Thanks Andrew K.

--Added support for global triggers (for radio transmission).




Server Fixes

--Whoops... new reflector code was still using 50/50 coin flips for spreading
  servers, causing some players to fall of the end of the list and find no
  server to connect to.  Fixes #191



Version 188     2019-January-4

--Fixed swap of baskets with different numbers of items in a larger container.
  Fixes #184

--Fixed tutorial wording to avoid confusion about Eve.  Fixes #185

--Min age for default actions (open door, rouse bear) now 3.  Fixes #186

--On reconnect, don't clear home markers unless we see a new player ID.
  Fixes #188

--/DIE command no longer blocks crafting hints for DIE when older than 2.
  Fixes #189

--Tutorial button on main menu page (appears after you beat tutorial).
  Fixes #190




Version 187     2019-January-3

--Snowball splat face emote fixed.  Forgot to commit the emotionObjects.ini
  settings file.  Fixes #177

--No more jaundice glitch on hat or apron.  Fixes #172




Server Fixes

--Improved reflector code to spread players evenly amoung active servers
  (thanks CrazyEddie).  Fixes #171

--Wounds, like animal bites, can now replace sickness (though effects of
  sickness are not eliminated until wound is fully healed).  Fixes #162

--Missing global variable in curse server.

--Fixed so that forced-drop when moving (when attacked by animal) drops
  relative to current position and not destination.  Fixes #165

--Fixed so that locks/keys don't revert to ? state when they reside in a
  container during server shutdown.  Fixes #180




Version 185     2018-December-27

--Survivable apocalypse (full map wipe while players are still alive) that
  doesn't spread to other servers.

--Eve old-age death-location respawn blocked if there are 4 or more fertile
  females on server.  That is supposed to be a solo-play mechanic.

--Whoa!  Huge bug in Eve death location for Eve respawn.  Was not actually
  using her death location, but instead the weighted average of recent
  placements on the map.  This would make her respawn in some other
  more-developed village later, which is why there was so much player
  confusion around this mechanic.

--Again, whoa!  Huge bug in temperature-based weighting for mother fertility.
  Was using abs instead of fabs in formula, resulting in all mothers having the
  same weight, regardless of temperature.

--Added yum-multiplier component to fertility weighting (having the highest yum
  multiplier on the server is equivalent in weight to having a perfect-middle
  temperature, and having both results in double weight---warm mothers who are
  eating a variety of foods will be much more likely to have babies than cold
  mono-diet mothers).

--Fixed other places in code where abs was used instead of fabs.  These were
  likely not causing bugs.

--Fixed bug in server code where apocalypse setting blocked monument triggers.





Version 183     2018-December-20

--Whoops... various headless helper apps failed to compile.  Fixed.

--Added /FPS command in client to toggle FPS display while living a life.

--Added /PING command in client for measuring round-trip latency to server.

--Support for additive blend on sprite layers (candle glow).

--When searching for a matching body part, now search top-down instead of
  bottom-up (one new character has two sets of eyes in old age, and we want to
  find the top ones).

--On inserting one object into another in editor, default to bottom layer of
  inserted object as picked layer.

--Support for head layer of emote (on top of everything, like a hat).

--Copy Child Chain in animation editor now copies entire child tree.

--Added version of child tree copy button that randomizes phases.

--More improvements to crafting hint filters.  Don't show transition matches
  that produce a precursor as an unlisted side-effect (for example, making a
  shoe leaves a needle in your hand, but this is irrelevant if you're trying to
  craft something that has a needle as a precursor).  Don't limit shown
  transition based on depth of current object.  Instead, cut off precursor
  chain search from filter target if chain passes through current object.
  This allows us to see that we need to put two pieces of cut rabbit fur
  together to make four in order to make bellows (even though four pieces is
  shallower in the crafting tree than two pieces).





Server Fixes

--AllowedEmotRange server-side to block clients from manually requesting
  jaundice emot.  Related to #170.

--Fixed bug in computing decay time for wound.

--Improved semantics of wound-and-weapon transitions in terms of how they
  affect what's left in the hand of the perpetrator (wound transition can now
  specify a held-weapon change if no other trans is present).




Version 181     2018-December-13

--noFlip object property now affects object drawing deeply, even when object is
  contained in a flipped container.

--Fixed so that face portion of emot (e.g., yellow fever face) can be drawn
  even if player doesn't currently have a sprite called Eyes (e.g., when they
  are a crying baby).  Fixes #145

--Mouse-over highlights now shown when mousing over worn clothing.  Fixes #146

--Animation editor allows fade osc of 8 hz max (was 6).

--Animation editor can now copy animation from one object to another with
  right-click even if they are not exact sprite matches, as long as the source
  object is a subset of the target object.

--Animation editor allows all osc of 8 hz max (was 6).

--Added field that allows applying speed multiplier to entire animation.

--Rideable objects can have sprites layers that are drawn behind player.

--Fixed so that objects that are drawn in separate layers are not time updated
  twice per frame.

--Fixed issue with game waiting for newly-launched web browser on Linux.




Server Fixes

--randSource for probability transitions (fishing and oil) now seeded with time
  instead of fixed seed, so that repeated short-run server testing allows me to
  get a feel for a given probability distribution.



Version 177     2018-November-30

--Better client behavior in case of real, 2-way connection break with server.
  If we haven't heard anything from server for 10+ seconds, and our action has
  been pending for 5+ seconds (bouncing), then declare connection broken.  Old
  behavior caused it to wait until receiving some kind of message from server
  before attempting PING/PONG, so it would wait forever if connection was truly
  broken.  Note that a truly, truly broken connection would eventually be
  detected in the network layer, but this can take a long time.  We still need
  to deal with 'soft breaks' in a sensible way.

--Improved a bunch of little rough edges in the tutorial.  The camera-freezing
  section is now much more clear and fool-proof.  There are multiple warnings
  about the last optional area NOT helping you to pass the tutorial (at least
  two recent Steam reviewers got stuck trying to forge an axe, thinking that
  was required).

--Finally fixed glitch that causes other player's head to be behind the object
  in the tile to the north of them (move truncation bug).
 



Server Fixes

--Server now clears any objects with names that start with @ at startup
  (hotfix for wayward pile category objects in map).

--Fixed so that items contained in baby clothing aren't lost when baby /DIEs.
  Fixes #141




Version 174     2018-November-29

--Fixed overlaps in UI of scene editor.

--Scene editor move timing now based on frame count instead of wall-clock time,
  so move timing is perfect even when running slower (like when outputting
  frames).

--SpriteTrim editor now supports freehand trim.

--Huge improvement to mouse interface:  when clicking a non-permanent object
  (that can be picked up), where a bare-hand action also applies, left/right
  buttons now differentiate.  Left to pick up, and right to execute the
  bare-hand action.  This allows single-object stacks (like tortillas, sliced
  bread, plates) to be be picked up (left click) or have the top item removed
  (right click). Fixes jasonrohrer/OneLifeData7#53

--Fixed edge case of sprite subset detection when zero layers don't match
  (fixes shaft creation sound playing when two long shafts are pulled apart).



Server Fixes

--Shrank next Eve jump to 250, down from 500.  Smaller Eve spiral, more likely
  to be interaction between villages.

--Server skips sending apocalypse check to reflector if apocalypse disabled
  locally.

--Fixed so that yellow fever doesn't heal wounds (nor does one kind of animal
  wound replace another).  Fixes #142.



Version 172     2018-November-22

--Client version checking logic fixed to handle case where server binary
  version is behind our binary version, but ahead of our data version number.

--Support for drawn (emulated) mouse pointer on ultrawide displays to overcome
  mouse coordinate skew.  Drawn cursors can also be scaled by end-user, to
  further help people in high-res or low-vision situations where the native
  SDL pointer (even the 32x32 bigPointer) is too small.  See SETTINGS screen.

--FAMILY TREE button on Menu screen that launches a browser to show your
  personal recent lives.




Server Fixes

--Reduced timeouts in reflector from 6 seconds total down to 0.25 seconds total
 (24x shorter) to reduce the likelihood of 504 gateway meltdown when one server
 stops responding.

--Don't live track decays for objects added via mapDummyRecall tracking on
  startup.  There were close to 200,000 moving animals on the map that were
  getting tracked when server1 and server2 started up.

--Skip tracking map changes during initial map cleaning.  Avoids activating
  motion on escaped horse carts (when they get cleaned as containers).

--Avoid re-adding contained and sub-contained objects if nothing has changed
  during map cleaning.

--Fixed busy wait on server when a ticket server request fails but doesn't
  close properly.

--Lineage server now supports filtering by email hash (so we can trigger
  searches by straight GET to a URL without revealing the user's email in the
  address bar).

--Diseases like Yellow Fever no longer compound to shorten death-stagger-time
  from a multi-bite.  Instead, there is no death stagger time for a disease,
  and if you recover before dying from the side effects, you always survive. 
  However, getting bitten again while sick will still extend your sickness time.




Steam Depot Hotfix

--Gave a bunch of settings files the userconfig Steam attribute.  Should fix
  the bug where some people need to redo the tutorial after every Steam update.




Version 169    2018-November-18

--Emergency hotfix.  We need to be able to update the client ahead of the
  server without version mismatch.




Version 168    2018-November-18

--Fixed bug that could result in spurious, false wild bug reports.  After
  pinging once, and getting a PONG back, we could mistakenly believe that we
  had received PONGs to future PINGs.

--Fixed glitch in radio button set (example:  twin count selection) where
  dragging could select more than one choice or no choices.

--Fixed memory leak when filtering crafting hints.

--Huge improvement to behavior of / crafting filters.  Hides all hints when
  none relevant, to avoid confusion.  Avoids showing recipes that use the
  desired object as an ingredient.  A bunch of other tweaks that just make the
  results more sensible and better.

--Hunger and tutorial chimes now obey SETTINGS sound volume slider.

--Fixed editor to handle baking of rotated non-square sprites correctly.

--Support for emots that have a face and body component.

--Emot protocol supports server setting optional emot ttl.

--Dying protocol supports optional sick flag (so blood not displayed on client).

--Highlight square a bit larger to contain top of rubber tree.




Server Fixes

--Fixed a memory leak when MOVE received while waiting for FORCE-ACK.

--Fixed a memory leak when swapping clothing.

--Fixed server crash when tutorial-twin players reconnect.

--checkIfServerRunning cronjob also makes sure server has sufficient disk
  space, and shuts it down gracefully if not.

--Caching of generated PHP from index.php for 2 minutes to reduce CPU load on
  web server.

--Hourly generation of failure report was a huge CPU hog (100% CPU for 5
  minutes straight).  No longer computing entire month (just past two days).

--Fixed server crash from held baby/adult mismatch.

--Server can read emot and food tags from wound description to trigger side
  effects of wound (an emot that goes along with it, or a modification to food
  capacity).



Version 167    2018-November-9

--Whoops... Game-breaking windows networking bug.




Version 166    2018-November-9

--Made it harder for Steam users to edit their account details by accident.




Server Fixes

--Improved robustness of networking code.  Have seen two server crashes due to
  corrupted socket handles being passed into FD_SET.  Not sure where the
  corruption is coming from, but added a check to ensure handle passed into
  FD_SET is well-formed, and bug report outputting code when it's not.  No
  longer storing socket handles on the heap, which should also help.



----
Steam Release     2018-November-8
----




Version 165    2018-November-8

--Tore out the code that always shows the dotted line when held-mouse journey
  pathing.  Not satisfied with how it looks, and hopefully other solutions will
  emerge.

--Releasing mouse on held-mouse journey now makes you stop exactly where your
  character is standing upon release.

--Fixed the way other clients handle PU that is not at end of current path.
  Now correctly truncates current path so that character walks to that point.




Version 163    2018-November-7

--Holding SPACE freezes camera on the current map area.  Useful when moving
  back and forth between a small group of nearby objects (like when forging) so
  that you can click things more quickly and precisely (camera movement
  interferes with your efforts to position the mouse).

--Now showing dotted lines and X on path destination any time we're in
  held-mouse long-travel mode, even if the path is in a straight line with no
  detours.  This allows the user to predict and understand the behavior.

--Fixed issue with auto-clicking during held-mouse travel when auto-click lands
  on top of a tall object (was finding closest cell at base of tall object,
  causing path to veer off course).

--Moved biome tiles down and over by 32 pixels so that they line up with
  actual tile boundaries.

--Added special case logic that makes you stand behind a berry bush (or other
  permanent, non-blocking food source) when you walk to it from far away.  This
  makes clicking and eating multiple berries easier, becasue your character is
  closer.

--We only ignore clicks when holding speed-0 object if there's no bare-ground
  transition (fixes getting stuck with horsebitten snake).
  Fixes #117,  Fixes #102

--Support for forced creation sounds that always play, even if other
  same-trigger sounds are going to play in parallel (tipped horse cart sound
  can play at same time as biting snake sound).

--Allow baby to send JUMP messages every five seconds, instead of just once.
  Fixes #112.  Fixed baby wiggle direction when mother facing left.

--Don't use DROP message when clicking on self unless actually clicked on
  clothing.  Fixes #98

--Fixed shoes of rider appearing at (0,0) in world.
  Fixes jasonrohrer/OneLifeData7#50

--Moved some overlapping text up in transition editor.




Server Fixes

--Bring center of Eve spiral back to 0,0 whenver either x or y exceeds 100,000.
  Thus, coordinates won't keep growing boundlessly.

--Fixed an invalid read when generating death update for player who died of old
  age.

--Right-clicking an empty basket (or other non-permanent container) now picks
  it up (to make it consistent with loose right-click semantics for other
  objects).

--Right-clicking object on its potential stack-mate (e.g., stone on stone) now
  starts a new stack.  Feels like a "drop".

--Right clicking on a basket stack with a basket adds the basket to the stack
  (feels like a drop).

--Right clicking basket stack with bare hand removes basket.

--Fixed disappearing ground object when baby issues /die command.  Fixes #121

--Change to deadly on-ground object wasn't happening when riding over (example:
  snake goes into attacking posture).

--Fixed wound-healing exploit where stab wound would replace snake bite.  Now
  your first wound is the one that sticks with you and must be healed to save
  you.  Each additional wound still halves your death stagger time, though.
  Fixes #104.

--Support for groundOnly tag in object description to prevent object from being
  created on a floor.

--Fixed case where non-permanent held object (like goose) force-dropped
  (through death/wounding), where a ground transition applies.  No more stuck
  goose or piglet after a force-drop.






Version 161    2018-November-2

--New PING message that client can use to verify server is receiving messages.
  Sent before deciding whether to report a bouncing-forever bug.  At least some
  of these are spuriously caused by connections that break in one direction
  only.  It is only a true bug if we're receiving server responses to our
  messages, but the expected response to our action was not received. 
  PING/PONG lets us test this.

--Scene Editor now displays saved scene number.

--NO MATCH might be confusing.  Changed to NO FILTER MATCH.

--Limited filter string to 23 characters to avoid going off end of notepad.

--Support for new probability set cateogries, which allow transitions to
  produce a weighted set of random outcome objects.

--Fixed lack of sound played when use-on-bare-ground produces something on
  ground that shouldn't make a sound, but what's left in hand should make a
  sound (example:  tongs setting down ore should play tong creation sound).

--Multiplicative sprite layers now supported when baking object down into one
  sprite.  Only works if multiplicative layer does not overhang past edge of
  opaque areas of object.

--Was blindly using a returned internal vector while calling addTrans, which
  meant that the internal vector would become invalidated due to expansion.
  Unbelievable that this never caused a crash before now.

--Client ignores mouse clicks if you are holding a 0-speed object.  Currently,
  this is only used for fishing, while the line is in the water waiting.

--Support for objects that are side-access only.  Made ice-hold side-access so
  that fishing looks okay.




Server Fixes

--Server reports player's own id as killer id to lineage server in case of
  /die, and lineage server displays Sudden Infant Death as cause of death.

--Fixed lineage ban calcuation for /die babies and killers/victims.  Was
  living extra time in other lines by accident.

--Curse server now keeps people in Donkey Town for a fixed amount of time based
  on the total number of curse points that they've earned in their lifetime as
  a player.  First-time offenders are only kept there for 30 minutes.  The
  worst repeat offenders will eventually be kept there for five hours every
  time.

--Fixed bug in way curse token status was being updated.

--Finally fixed replacement of used objects and variable objects on server
  restart.  Server now saves a mapDummyRecall file, and uses that to restore
  the objects.  After server restart, partial stacks no longer become full,
  berry bushes no longer replentish, and locks no longer become generic locks.

--FINALLY fixed the sliding-penguin ice-hole proliferation bug.  Turns out that
  it was triggered by a biome boundary.  The penguin would find the ice hole,
  start transitioning to go into it, but then notice that it was across a biome
  bondary, and thus forbidden, but still keep the 'in ice-hole' transition.

--Fixed a bouncing-forever bug after reconnect.  If player is force-updated
  while disconnected (like set down as a baby), then when they reconnect, the
  server ignores their moves because they never sent their FORCE-ACK message.
  Fixed this by no requiring FORCE-ACK for disconnected players.




Version 160    2018-October-29

--/die command to trigger sudden infant death.  Triggered by baby player, but
  only when under 1 year old and currently held by mother.  Causes a lineage
  ban for the baby and instant reset of birth cooldown for the mother.

--Baby bones left in mother's arms after sudden infant death.

--Pre-loading of all direct-from-death grave objects to avoid partial-sprite
  pop-in.  Marked them all with fromDeath in description.

--Fixed so that when trying to reconnect, client stops using twin code (was
  already born as a twin before, so want to reconnect to that life).

--Fixed display of incorrect pattern-based transitions in transition editor.



Server Fixes

--Fixed busy-wait server-side, due to instant SocketPoll response on
  disconnected sockets, by removing them from Poll as soon as they disconnect.
  This was causing 100% CPU.

--Mother can only force-hold baby until age 1.

--Fixed server crash when player reconnects but tries to join a twin game.




Version 157    2018-October-26

--Client handles disconnection with better messaging (no longer describes it as
  death), and attempts reconnection when the user is ready.

--Instant local response to jump-out-of-arms attempt (baby wiggles a bit).
  This makes it feel much more responsive when you are perma-held by your own
  mother and click.

--Import editor now allows shift and ctrl for bigger jumps when paging through
  past imports.  Line layer accumulation is no longer the default (rarely used,
  and it was a pain to delete line layers when trying to page through).
  Instead, holding A key triggers adding a line layer, but replace is default
  when importing or paging through old imports.

--Dramatic speed up in object bank load by not counting live sound uses and
  expanding animation bank in batches of 100 instead of 1.  Result is 3.4x
  overall speed up in object bank loading, and 16x speed up for used object
  generation, and 2x speed up for variable object generation.  Was wondering
  why server startup was so much faster than client startup---it was because it
  has no animation bank, so dynamic object generation didn't require
  duplication of animation bank records.



Server Fixes

--Server now keeps disconnected players alive instead of killing them, allowing
  them to reconnect later and resume their life, assuming that they don't die
  of in-game causes first.

--Babies blocked from wiggling out of own mothers's arms until age 3.





Steam-specific updates

--Hide Post Review buttons on Steam version of client.

--Shift-Tab to go back through hints doesn't work on Steam (shows overlay).
  Z-tab instead.

--steamGateClient now waits for game to exit (fixes Steam playtime tracking).



Version 155    2018-October-19

--Scene editor now displays behind-player sprite layers correctly.

--Walls with container slots (sign walls) now drawn in front of other walls,
  so signs not covered up.  Fixes #74

--Lowered the minimum height for objects that are mouse-through-able (that
  allow hidden objects behind to be clicked).  Fixes #82

--Fixed double sound play when use-on-bare-ground produces something new in
  hand and on ground (example:  unroping calf).

--Support for displaying cursed player's excess curse score to them.

--If we have a newer data version than the official servers, assume that
  servers are in the process of updating, and display that message instead of
  a confusing version missmatch message (Steam data update is pushed out before
  the old-version Odd servers are shut down).

--useSteamUpdate setting bypasses internal updater and displays QUIT message to
  user with instructions.

--Back to 10 seconds for wild bug reports.  5 is too short (sometimes there are
  5+ second network delays).

--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



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

--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 

--Held baby can now be used to open doors, trigger carts, etc.  Fixes #75

--Improved logging around FORCE ack message failure.

--Players born cursed in Donkey Town no longer get a cursed token to spend.



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 remoteServerGitPull.sh
--SPECIAL UPDATE PROCESS COMPLETE--
****

--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
  changed.




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
  right-click.

--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
  transition.

--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
  update.

--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).

--Fixed so that nextID in metaData ID space is preserved across server
  restarts.  Was overwiting existing written notes after restart.  Fixes #118.





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
  floor.

--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
  map.

--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
  all.

--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 assigns a unique 2-word name to each personally-cursed player.





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
  first).

--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
  age).

--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
  cleared.

--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
  servers.

--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
  compute.

--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
  twice.

--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
  servers.

--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
  wood).

--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
  newActor.

--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
  away.

--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
  idle.

--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
  heads.

--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
  held).

--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
  snapshots.

--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.
  https://github.com/jasonrohrer/OneLife/pull/14

--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.  https://github.com/jasonrohrer/OneLife/issues/12

--Can no longer eat when full.  https://github.com/jasonrohrer/OneLife/pull/11

--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
  overshooting.

--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
  walks.

--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
  resources.

--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
  happens.

--Changed server update script to shut down servers one at a time so that
  people can keep playing during the update.





----
Off-Steam Release     2018-February-27
----




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
  off.

--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
  needed.

--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
  server.

--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
  long.

--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
  re-detect.

--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
  value.

--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 
  animals).

--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 
  food).

--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
  easier.

--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
  player.

--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
  tiles.

--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 
  repositories.

--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).
