Beyond that, 1.41.837 is a substantial feature and bug fix release as well.
In terms of features/usability, this release pushes out support for permanent affinity controls on the Survivor Sheet, which is a pretty big come-up (especially for my People of the Sun). Certain Abilities and Impairments (e.g. the Savior ones) also automatically update survivor permanent affinities, so there is also some nice automation associated with the new controls.
Release 1.41.837 also overhauls the "World" panel of the Dashboard to include a.) a number of new facts/figures/stats about the Manager, b.) better, more precise stats/averages and c.) more usage/user-activity info.
As far as corrections and fixes go, the most notable updates have to do with the various problems pertaining to weapon mastery (and the auto-application of specializations): most of that should be smoothed out now, but, as usual, if you see something odd/weird/wrong/broken, please use the GitHub issues to report it.
Finally, this is also the first proper release in the new production environment, i.e. the first release pulled straight from Github to the Google Cloud Platform environment, and the whole release has literally nothing to do with any of the legacy configs on the Linode VPS. Which, to put it another way, is to confirm that the emergency migration started two weeks ago is now officially complete.
As usual, hit the jump for details!
Corrections and Fixes
- Monkey patched a bug where the word "None" appeared on the Survivor Sheets of survivors without avatars.
- The "Belt of Gender Swap" is now correctly classified as a "Promo" item and part of the "White Box" pseudo-expansion. Also, the normalization of the word "of" should function correctly.
- Cleaned up and re-organized world.py a bit (that's been a long time coming: shit's a mess)
- Fixed an issue where assets.Survivor.add_game_asset() wasn't actually adding "related" abilities and impairments (it was just kind of half-assing a key into the survivor's A&I list).
- Removed the bogus ability "Permanent Red Affinity" (from the Sunstalker event).
- Deprecated epithet styling (i.e. the savior hack that made a red square appear in epithets, which are an optional/preference feature now).
- Refactored assets.Survivor.modify_weapon_proficiency() to make a call to the new assets.Settlement.add_weapon_proficiency() method, rather than using custom code to randomly update settlement Innovations.
- Dead survivors no longer gain weapon specialization when living survivors become weapon masters.
- Corrected an issue where adding a weapon master using the "Abilities and Impairments" drop-down on the Survivor Sheet would NOT add the mastery to the settlement innovations (or auto-apply its specialization to other survivors in the settlement).
- Fixed a bug where adding custom items to Settlement Storage caused the item to be added twice.
- The Manager now recognizes the differences between "new" survivors (see "Graves" innovation for an example) and "newborn" survivors (see "Clan of Death" innovation for an example) and auto-applies buffs accordingly.
- Fixed an issue where the sign-in view said 'labels' where it should have printed the latest release date (d'oh!).
- Marking a survivor (and/or updating COD) now causes about half as many admin.valkyrie() runs, which should help Survivor Sheet and overall performance.
- Fixed an indentation issue in get_user that was throwing 502's
- Created assets.Settlement.update_settlement_name() to process and log (in the Settlement Event Log) settlement name changes.
- Completely rewrote (refactored with extreme prejudice?) world.get_average() so that it supports int/float returns and allows arbitrary rounding precision for float returns, etc. I also wrote a nice, long doc string that explains wtf is going on with the assumptions baked into the queries.
- Deprecated the world.get_survivor_average() method for DRYness.
- Refactored assets.User.html_world() for organization and to use new methods (above).
- Added world.survivor_html() helper function for "World" dashboard/panel HTML renders; added world.latest_survivor() method and refactored world.latest_fatality() to be a little DRYer/lazier.
- Overhauled organization/presentation of the "World" dashboard panel (again). Added user stats, wrote a couple of new modules in world.py to facilitate that.
- Created utils.admin_session dict for initializing assets without a real/user session. Refactored a number of methods in admin.py to use the dict.
- Settlement objects may now be initialized without a User object (this used to raise an exception automatically): we're going to log a 'warn' for now, and see if this doesn't break everything.
- Added latest settlement block to settlements stats.
- Added some new settlement averages, e.g. storage size, milestones, defeated monsters, etc.
- Added some additional user stats as well, e.g. users in the last 30, etc.
- Spent a lot of time with the dev wiki, clarifying the rules/methodology/goals of the project.
- Keyed in Flower Knight assets, including:
- Page references for six story events
- One innovation (updated "Forbidden Dance" consequences
- Three disorders
- One Fighting Art and three Secret Fighting Arts
- Three "Rare Gear" gear cards and six "Sense Memory" gear cards
- Campaign asset (e.g. milestones, principles, rules, etc.)
- One unique endeavor
- The generic timeline is now a first class citizen in game_assets.py (mostly so that campaign assets can reference it without duplicating it).
- assets.Settlement.new() now defaults certain attribs of new settlements and backs off to campaign-specific attribs, if they exist in the campaign asset's keys.
- Campaign assets, as defined in game_assets.py, have been refactored:
- Campaign milestones and principles have been abstracted into generic game assets that are now referenced by campaign assets (but may be overwritten/customized as necessary)
- Campaigns may now have endeavors, that work exactly like location endeavors (and show up on the campaign summary view)
- Campaigns may now have a "settlement_buff", just like an Innovation.
- Added "expansion" attribs to a lot of the epithets; implemented expansion-based filtering on the creation of the epithet drop-down. Updated a bunch of epithets to be expansion-specific.
- Reorganized game_assets.py (which, at 3464 lines, is getting...a little long in the tooth, frankly).
- Added a modal with permanent affinity controls to the Survivor Sheet and a modify() method to assets.Survivor()
- Savior abilities, as well as the pseudo ability, "Bloom People" have been updated to trigger automatic affinity updates when added to survivors.
- Manual CLI world.py requests now dump a duration (for R&D/performance purposes).
- Added a new assets.Settlement.add_weapon_proficiency() method.
- Added tooltip/title/description info to new survivor view.
- Refactored assets.Survivor.new() to support affinity adjustments as well as new/newborn distinction.
- Updating a survivor's cause of death now updates their death record, which changes their cause of death on the Dashboard "World" panel.
- Added assets.Survivor.update_email() method to apply business logic and normalization to survivor email/manager updates. Settlement event log now captures email updates for survivors.
- The Survivor Sheet email field is now an HTML5 "email" type input. So is the "new survivor" view.
- The button to remove a settlement is now only show if specified in user preferences.