Version 13.7

Veracity

Developer
Staff member
he following is an abbreviated version of the Subversion commit message logs. Please keep in mind that these messages are intended for other developers and they take the files which were modified into context in order to limit the amount of verbage. In general, they are not intended for general audiences and should not be treated as "official" documentation -- they are informal and abbreviated, at best.

If you do not understand what something says, try looking at the full version of the revision by following the accompanying link for the revision. The only difference is that the files which were modified will be listed, and sometimes, you can guess what happened from file names (though not always). If you still have no idea what happened, that's okay -- it probably doesn't relate to what you're doing with KoLmafia. ^_~

Furthermore, not everything marked as "fixed" is guaranteed to be fixed, not all changes are guaranteed to have a change. This is due the fact that both time and turns are finite and only a limited number of things can be tested. Some changes go in untested, assuming they would work, when they actually don't due to erroneous assumptions; alpha testers occasionally will be able to give feedback, but it's not always possible.

For example, if you read the revision logs for what changed between 10.2 and 10.3, the plus sign choice adventure was meant to get a use link. Something as seemingly insignificant as KoL using two spaces instead of one space in the sentence "It's actually a book. Read it." would mean the change didn't actually work -- anyone can verify that, in fact, the change didn't work for this very reason. If you ever encounter something like that, a non-accusatory mention of it (non-accusatory meaning anything that neither implies "ZOMG FALSE ADVERTISING" nor "You guys said this was fixed, but...") somewhere will usually result in the problem getting addressed.

Finally, if you've got a bug to report, make sure you read up on how to post a detailed bug report. While the rules outlined apply specifically to bugs related to scripting, many of them are applicable to KoLmafia bug reports in general. Most importantly, I hate the words "annoying" and "frustrating". Never use them when describing a bug/feature. Ever. Thanks. The abridged revision logs follow.

Revision: 7686
Update arena parameters for Squamous Gibberer

Revision: 7687
Download KoLConstants from SVN in order to check for new versions (since the RSS feed doesn't seem to get updated anymore)

Revision: 7688
The simplest support for the new choice adventure in the Haunted Bathroom: you
can select muscle, mysticality, or moxie substats. It would be nice to have a
pseudo-choice to "Boost Prime Stat" or something, but not yet.

Revision: 7689
Allow monster item drops to be specified by item id, for those items with () in
their name. In particular, the Tan Gnat drops filet of tangy gnat ("fotelif")

Revision: 7690
Recognize } being used to end a single-line ASH command (previously would cause an ambiguous script parse exception due to adding a semicolon, since ASH doesn't support empty statements)

Revision: 7691
Allow people to include the .ccs extension when setting their custom combat script (though we'll strip it when we set the property, this should fix bug reports from people using daily builds)

Revision: 7692
Fix monster item drops that include parenthesized numbers

Revision: 7693
With a non-zero pull budget set, allow Item Manager consumption lists to show
suitable items from storage even if they are not otherwise creatable (the
conditions were being checked in the wrong order).
Add [council] links for Boss Bat Bandana, Skull of the Bonerdagon.
In the Modifier Maximizer, don't show grayed-out consumables that you don't
have room for, if you don't actually have the items (another instance of
checking conditions in the wrong order).
Add Emblem of Ak'gyxoth to the list of MP cost reducing items (mafia was
replacing it with a navel ring, which is also -1 MP).

Revision: 7694
When you visit the daily dungeon and are told that you've already completed it,
set dailyDungeonDone to true.

Revision: 7695
Add choice.php as a possible URL that can generate clovers, since you can get a
clover from I Refuse!

Revision: 7696
If you've chosen to skip Under the Knife, do not autostop when it is encountered

Revision: 7697
When you obtain an effect which is also an item, unless there is already a
special navigation link (like Knob Goblin Perfume linking to the King's chamber)
ensure that you do not get a "use" link on the effect.

Revision: 7698
Adventuring the Farm sub-areas or the Themthar Hills after you've cleared them
out does not constitute an Encounter.

Revision: 7699
The "pulverize" button in the Pulverize helper can now be used to immediately
smash the selected items, without having to add them to the queue first. The
queue is still necessary for items to be sent to wadbot, to encourage
server-friendly behavior.
Various performance tweaks, based on a profiling run - in particular,
SortedListModel.indexOf() is no longer pointlessly recursive.

Revision: 7700
Recognize daily dungeon, orchard and farm's elemental zones "out of adventures" messages.

Revision: 7701
Restructure quest handler for fighting tower familiars. Don't loop forever if
you can't pick a different familiar to take into a chamber to see what's there.

Revision: 7702
Orchard failures put you into ERROR state, not PENDING state.
Remove redundant check for error message.

Revision: 7703
Don't blow up on empty mushroom planting scripts.

Revision: 7704
Hidden City improvements:
- detect failure to adventure in squares with defeated protector spirits, looted
archaeologist, completed altar or completed temple
- detect failure to adventure while drunk
- don't log simple visits to squares

Revision: 7705
Modifier Maximizer now permits the "min" and "max" keywords at the start of
the expression, in which case they apply to the total score, rather than a
particular modifier value. A global "max" will finish equipment maximization
immediately if achieved, without checking any more combinations, so this may
be useful on slower computers.
Added "elemental damage" keyword as a shortcut for specifying all five types
of elemental damage with the same weight - useful against physically
resistant monsters. This, and any other keyword ending in "damage", can be
abbreviated as "dmg".
Added [council] links for solid gold bowling ball, really dense meat stack.

Revision: 7706
Fix detection of the proper "adventure again" location after a noncombat - it
was picking up an HTML fragment from recently-added JavaScript code, so
search only within the body tag.
A couple more performance tweaks.

Revision: 7707
Adjust damage matching patterns to accomodate several messages from the Midget
Clownfish and the He-Boulder.

Revision: 7708
When you insert the digital key into the perplexing door in the Relay Browser,
pre-select all the controls to the correct sequence.

Revision: 7709
When you visit the light door, remember the door code. When you visit the heavy
door, prefill the text field with the correct code.

Revision: 7710
When an item usage from within mafia is limited in quantity for some reason,
that reason is now shown - "limited by fullness", for example.
Dance card usable quantity is now zero if an aborting counter will expire 3
turns from now, and the limit reason in this case will be the name of that
counter.

Revision: 7711
If multiple aborting counters expire on the same turn during automated
adventuring, the counterScript is now guaranteed to receive the Fortune
Cookie expiration, if there is one. Ordering is unpredictable for all other
counters. The other counters are simply discarded, as trying to deliver them
all can lead only to tears.
Added [fold] link for sugar sheets.
Also, SPOON! (missing drop from the Gnollish War Chef.)

Revision: 7712
Fuschia -> Fuchsia
Add Items and (some) status effects from the Skate Park

Revision: 7713
Fix pet anemone typo

Revision: 7714
Add arena parameters from Wiki for Urchin and Groupie.

Revision: 7715
Initial support for the Skate Park as an adventuring zone.

Revision: 7716
Mark sugar shard as hpmp, not simply as multiple

Revision: 7717
When you visit the Skate Park container document, deduce the state of the war.
Log visits to the various places that give you buffs in the Skate Park.
The above are Only tested for "peace", so far.

Revision: 7718
Pinkify item needed to defeat tower guardian.

Revision: 7719
Fixed level requirement for roc feathers.
Fixed logic of use link for the dinghy plans when you don't have the dingy
planks already: it would send you to the Hermit only if you didn't have any
worthless items, and would send you to the sewer if you did.
Fixed handling of multiple counters expiring on the same turn - it wasn't
always ignoring counters that had expired in the past.

Revision: 7720
Print blank line following table after each iteration of arena learning.
Urchin and Groupie have special "this familiar sucks in this contest" messages.

Revision: 7721
Added CLI "profile" command. If an ASH script is called with this command,
rather than any of the other synonyms of "call", then on exit a table will be
displayed with the counts and times of all function calls.
When an item that's going to result in an adventure being spent is used, by
any means, clear the autoattack first. This should reduce the chances of
losing a puttied monster to a one-hit kill.

Revision: 7722
When maximizing experience, add a tiny amount of weight to monster level, to
ensure that +ML gear gets considered for its indirect exp bonus.
Add a [re] link at the bottom right corner of the top menu, to refresh it.
This is useful if you visit the Council, or otherwise unlock a new zone from
the mafia UI, with the relay browser already open.

Revision: 7723
Add Finstrong status effect
Add "skate" CLI command. You can visit lutz, comet, the bandshell, the eclectic
eels, or the merry go round via, for example "skate merry"

Revision: 7724
Perform the 1-millisecond pause at the top of ASH code blocks at most 10
times per second. That should be enough to keep the UI responsive, without
making simple functions and loops take hundreds of times longer to run than
they should.

Revision: 7725
Added Daily Deeds for the available Skate Park buffs. Not tested.

Revision: 7726
Track item loss when you offer the correct items at doors in the Nemesis cave.

Revision: 7727
Fix typo: extra tab for Elvish delight

Revision: 7728
Making sushi with a topping but no filling sent incorrect URL. Fix it.

Revision: 7729
Fix parsing of Malus use with the "as many as possible" option checked.
Yet another time
Haiku Dungeon parsing fixed
Here, have a cheeto
Start of Player Status frame revamp - remove the redundant display of your
current stats, leaving just the till-next-point data which isn't shown
anywhere else.

Revision: 7730
Nemesis quest logging fixes:
- When you say the password to door #4, mention it in log.
- When you enter the inner sanctum and meet your nemesis, log the location and
the encounter.

Revision: 7731
Only log bets you successfully took in the MMG, rather than cluttering up your
session log with failed attempts to take bets.

Revision: 7732
Fix problem with Malus use other than "as many as possible", introduced in
Revision 7729.

Revision: 7733
Add two new FOTYs

Revision: 7734
Don't take an NPE when conditions list is empty.

Revision: 7735
The long-neglected Player Status frame now holds a third copy of the Overview
lists. You can use it to get a less-cramped view of Daily Deeds, for
example.
Added tooltips for several Daily Deeds that give effects.

Revision: 7736
When executing a command in the ASH namespace, only print the return value (and
thereby permit continuation) if the function succeed.

Revision: 7737
New version of sortable.js
Minor code clean up in stash request parsing.

Revision: 7738
When infiltrating the Orcish Frat House, only use up hot wings if you succeed.

Revision: 7739
Fix drop rate for lowercase N. Reduce static memory usage in Maximizer frame.

Revision: 7740
Fix tracking and logging of Hidden City squares.
Fix tracking of meat donations to clan when user uses commas in number.

Revision: 7741
Simply visiting the Hidden City map now validates the hidden city layout vars.

Revision: 7742
Sped up ASH parsing somewhat, based on profiling the loading of a large
script.
Fixed problem with special "castle map items" condition - it was always
reporting failure, causing adventuring to fail.
Added tophat zap group.

Revision: 7743
Remove 3 papayas, not 1

Revision: 7744
Set demonSummoned if an attempt failed due to a previous summoning that
mafia didn't know about.
Don't set friarsBlessingReceived if the attempt failed, for example if a
fight is in progress.

Revision: 7745
Recognize when The Road to the White Citadel has been cleared.

Revision: 7746
Modifier Maximizer now accepts Clownosity and all bitmap modifiers as
maximization requirements.

Revision: 7747
Don't binge familiars with memento items.

Revision: 7748
Added a couple of checks in SorceressLairManager to allow a clean abort after
a request generates an error (probably due to an expired counter), rather
than crashing when trying to access the nonexistent response text.
More modifier speedups.

Revision: 7749
Experimental support for Bad Moon special adventures.
- (Untested) Notice when we encounter one and record it in a setting
- "badmoon" command lists all the special Bad Moon adventures, tells you where
they are and what they do to you, and tells you whether you've seen each one.

Revision: 7750
Support ajax inventory management for mad hatrack and disembodied hand.
Add hatrack parameters for sugar chapeau.

Revision: 7751
Add two-argument versions of min( x, y ) and max( x, y) to ASH. x and y can
both be ints (in which case the return value is an int) or one or both can be
a float (in which case the return value is a float).

Revision: 7752
Don't equip already-equipped familiars when you Equip All Familiars in the
Familiar Training Frame.
Attempt to fix grappling hook not disappearing from inventory when you fight
the giant octopus.

Revision: 7753
Remove bogus iteration from MultiUseRequest, since superclass iterates.

Revision: 7754
Exposed the modifier expression evaluator in ASH:
float modifier_eval(string)
This may be useful as a simple & safe way of storing derived values in data
files - expressions are guaranteed to have no side-effects, unlike ASH
expressions.
The expression language doesn't support user-defined variables, so this
function will generally need to be wrapped in a function that substitutes
variable names in the expression with their values.

Revision: 7755
Reset loss count before entering training loop. Otherwise, once you get too many
consecutive losses, it never gets reset and you can never start a new loop.

Revision: 7756
Fix recognition of CLEESHing a plural monster.

Revision: 7757
fix consumption stats for elven moonshine. Tag Mr. Familiars as Free Pulls.

Revision: 7758
Increased the complexity limit of the modifier expression evaluator:
* Limit on numeric literals raised from 5 to 10, and a more meaningful
message is displayed when this limit is exceeded.
* Integer-valued literals, in the range -32512..32767, are now represented
directly in the bytecode and don't count towards that limit.
* Each expression is tested with a default evaluation stack size of 10; if
that fails, the stack size is doubled until it succeeds (up to a maximum size
of 160, which would be an unthinkably complex expression).

Revision: 7759
Fixed 'Keep One' protection when pulverizing:
* The quantity was reduced by 1, even if you weren't trying to smash your
entire supply of the item.
* The reduced quantity was being stored in the wrong form field, so the
protection didn't actually have any effect.
Also, smashing all of a particular item, when under hardcore/ronin
restrictions, no longer automatically adds it to your junk list.

Revision: 7760
Start of major concoctions overhaul:
The mixing type in concoctions.txt can now be a comma-separated list, rather
than just a single keyword: the basic creation method can be followed by any
number of flags expressing needed skills, other requirements, or information
about the creation. This allows all sorts of oddball special cases to be
explicitly handled:
* Skirts/kilts are now flagged as being creatable only by characters of the
appropriate gender.
* Potions can now indicate whether Saucerors make them 3 at a time.
* Green beer is mixable only on SSPD.
* The bad-ass club can now indicate that is requires Super-Advanced
Meatsmithing and a tenderizing hammer - even though it's created by item use,
not smithing.
(Internally, this change means that a mixingMethod value is now a bitfield,
and will need to be masked before most uses other than simply passing it to
isPermittedMethod().)
Multiple recipes per item are now allowed in the file. Mafia currently
ignores all but the first, but all alternate recipes that I'm aware of are
now included for the benefit of scripts that read the file directly.
Create vs. buy decisions now take into account some incidental costs:
* The cost of meat paste is considered if needed.
* Crafting using a box servant is valued at 1/90 of the Mall price of the
basic servant (the possibility of using a clockwork servant, and the value of
the items from an exploded servant, are not yet considered).
* Crafting without a servant, or that otherwise takes turns, uses preference
"valueOfAdventure" (default 500).
* Still upgrades use "valueOfStill" (default 0).

Revision: 7761
When a semirare is encountered, add "Semirare window begin" and "Semirare
window end" informational counters, 160 and 200 turns later (100/120 in Oxy).
These will be automatically cleared if a fortune cookie is eaten to get the
actual numbers.

Revision: 7762
Preliminary support for the dolphin whistle, including a cooldown counter.
[equip] links for dropped items now have a popup showing the exact effects of
equipping the item, as would be shown by the "whatif" command.

Revision: 7763
When Mall buying, allow purchase of a partial quantity if the player doesn't
have enough meat for the full requested quantity.

Revision: 7764
The name of the most recent item stolen by a dolphin is saved in preference
"dolphinItem" (for possible use by scripts), and cleared when a dolphin
whistle is used. It is also cleared (along with the current Spooky Putty and
4d camera monsters) upon ascension.
The saved item is shown as the item drop for the rotten dolphin thief.

Revision: 7765
If a 1-handed weapon drops, and you're already wielding a 1-handed weapon and
have DFSS, it will get an [offhand] link in addition to the normal [equip].
If an equipment drop can also be used on your familiar (which currently
implies a Hatrack or Hand), it gets a [familiar] link in addition to whatever
links it otherwise gets.
Both of these possibilities get the new "whatif" popup added to the link.

Revision: 7766
Modifier Maximizer can now recommend familiar items. This has turned up some
deficiencies elsewhere (for example, it has no basis for choosing between the
three Bandersnatch items), so please keep in mind that you can add
"-familiar" to the expression to get the previous behavior.

Revision: 7767
Added two new boolean modifiers: "Adventure Underwater" and "Underwater
Familiar", and added them to the relevant equipment, effects, familiar items,
and familiars.
Maximizer keyword "sea" can be used to require both of these modifiers to be
true. Note that you still need to have a Sea location selected in order to
account for the pressure penalities, and that this usage is currently very,
very slow.

Revision: 7768
Fixed some issues with experience modifiers that can no longer be ignored now
that the Maximizer deals with familiar items:
The "Experience" modifier now applies only to sources of substat points that
are subject to the normal 2:1:1 stat distribution. Three new numeric
modifiers ("Muscle Experience", etc.) have been added for sources of specific
substats. One of these new modifiers, corresponding to your mainstat, is
what mafia now considers to be your EXP bonus - as shown in the sidepane and
in Location Details, as returned by experience_bonus(), and as boosted by
"maximize exp". This value will be roughly half of what it was before, but
now it accurately represents the experience that actually counts towards
gaining levels.
Added two new string modifiers to describe nonstandard stat distributions:
"Stat Tuning" (for the Crimbo '06 offhands that give you a different class's
distribution) and "Familiar Tuning" (for the Bandersnatch's jub-jub birds).
The Maximizer no longer considers leaving a slot empty if it has anything at
all that appears useful for that slot. This greatly reduces the number of
combinations it has to check, but could conceivably cause problems in-run if
you have only poor choices for a given slot. Please report any anomalies.

Revision: 7769
When an item has limited uses, abide by that limit when queuing it on the Item
Manager. Set maximum use for Medicinal Herbs to 1. Initial support for the
Shivering Timbers.

Revision: 7770
Fix typos

Revision: 7771
Modifier Maximizer now has "equip" and "outfit" keywords to require or forbid
specific items or standard outfits.
Boolean constraints now work for effect boosts as well as equipment - for
example, "maximize sea" will now include the consumables that let you
adventure underwater without diving gear. Such items appear in front of all
other effects, since their score is probably going to be zero.
Maximizing item drops will now give a tiny amount of weight to all of the
specialized item drop modifiers (food drop, etc.), so that equipment with
such bonuses will be preferred, all other things being equal.

Revision: 7772
When you trick-or-treat with certain costumes, you lose them.
Alphebetize item drops for undead trees.

Revision: 7773
Whenever a piece of equipment is destroyed (such as single-use Halloween
masks), automatically remove it from all active checkpoints to prevent
inappropriate attempts at replacing it, rather than requiring a separate call
to forgetEquipment().

Revision: 7774
When eating a fortune cookie, use the semirare window counters (if present)
to do a better job of rejecting impossible numbers.

Revision: 7775
Underworld acorn is a free pull. Fix some consumption stats.

Revision: 7776
Fix logic of handling semirare window counters - they were being cleared
after processing the first fortune cookie number, so they weren't helping to
validate the 2nd and 3rd numbers.
Clear all turn counters on ascension.

Revision: 7777
bump version # of monsters.txt

Revision: 7778
Add item drop percentages for undead trees

Revision: 7779
ASH didn't used to allow functions to be overloaded. Therefore, when parsing
function calls, special code was included to generate useful error messages
for the case when a parameter had the incorrect type or there are too many or
too few parameters.
Those messages are no longer especially useful, given function overloading: we
can't tell if you are calling an existing function with incorrect parameters or
are attempting to call an overloaded (but undefined) function with the correct
parameters.
Therefore, remove special checks for bad argument types or bad argument counts
and give error messages that recognize the possibility of function overloading:
Function 'abc( int, string )' undefined
Function 'abc( int, string )' defined multiple times

Revision: 7780
More concoctions overhaul: All CreateItemRequests (including subclasses) are
now constructed from a Concoction, rather than an item ID or name, and
retrieve all needed details (such as the ingredient list) directly from that
Concoction, rather than doing global lookups. This allows the possibility of
multiple CIRs existing for the same item with entirely unrelated recipes,
although nothing like that is being done yet.
If one ingredient of a creation couldn't be acquired in sufficient quantity,
don't waste time (and possibly meat) trying to acquire the rest.
Added the effect of the Pork Elf Prizes outfit.

Revision: 7781
Add constructor for backwards compatibility.

Revision: 7782
Preliminary support for moveable feast.

Revision: 7783
Underworld items

Revision: 7784
If your familiar can breath underwater, the Coinmaster frame does not need to
equip it with das boot or the bathysphere before visiting Big Brother

Revision: 7785
Boozehounds anonymous tokens are not multi-usable

Revision: 7786
Use ajax support when requesting KoL to unequip all equipment or to put on an
outfit, obviating an extra page load of the equipment page.

Revision: 7787
Ajaxify NPC purchases, which will save a bit of bandwidth.
If a relay browser request has a path starting with two slashes, strip one
off - this happens after certain chat right-click commands, and was causing
page-specific processing to be skipped in some cases.

Revision: 7788
When displaying counters in the relay browser, handle any unexpected
formatting of the charpane without crashing.
Add usability of the moveable feast (although we're still not doing any
tracking whatsoever of the resulting buff).
Add modifiers for the Floaty Fatigues and Vestments of the Treeslayer.
Add the synergies between the six 'Secret from the Future' items. This is
partially speculative, as nobody seems to be actively spading these any more.

Revision: 7789
Fix triple reagent creation

Revision: 7790
Don't throw an exception if plural typed constants don't have a [ following

Revision: 7791
Added anniversary safety glass vest, and many recently-discovered plurals.
Added lots of missing monster elements.
The Battlefield heroes are now flagged as special encounters.

Revision: 7792
Updated some P/S spell costs.
Fixed spelling of figure-skating duck.

Revision: 7793
The [wormride] link will now avoid using the drum machine if anything went
wrong with equipping the hooks.

Revision: 7794
The He-Boulder ray recharge counters are now informational instead of
aborting, as originally intended.

Revision: 7795
The topmenu is malformed: it has <body><head>...</head><body ...
When you read the dinghy plans, a topmenu refresh is forced, but ends up in the
wrong font. I suspect this is because we find the incorrect innerHTML for the
pane because of the bogus <body> tage at the front.
Untested: find the <body> tage that follows the </head> tag.

Revision: 7796
When equipping an accessory via ajax without specifying the slot, pick the
first empty accessory slot, rather than assuming it went into acc1

Revision: 7797
When doing a Mall search, provide more of the possible form fields in order
to override any inappropriate default values left from a relay browser
search.
Corrected DR of Brimstone Bunker.

Revision: 7798
ASH to_string() now always creates an explicit string Value; the previous
behavior (which usually just returned the parameter) could cause problems if
the value was used as a key in a map, since other types do not necessarily
have the same comparison behavior as strings.

Revision: 7799
Bump version 13.7
 
Top