The 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: 15779
And I think that's all outstanding Food/Booze spading . . .

Revision: 15780
Fix directory traversal exploit

Revision: 15781
Now we can handle two effects with the same name, do so for Chocolate Reign.

Revision: 15782
DebugDatabase.checkModifiers only evaluates expressions for numeric modifiers

Revision: 15783
Remove goals/monster drops for old version of Galaktik quest.

Revision: 15784
If you have C<i>bzzt</i>er the Grisly Bear olfacted, the charpane decoration
should retain the italics rather than URL encoding the angle brackets

Revision: 15785

Revision: 15786
Essence of Bear

Revision: 15787
First stab at support for Clan Lounge Floor 2

Revision: 15788
Fix pattern to allow detecting swagger earned during "bear season"

Revision: 15789
Some Mayo Clinic support (parsing workshed, shop support).

Revision: 15790
Mayo Level affects Sphygmayomanometer stats. Using mayo increases Mayo Level. Handle some mayo helper messages. Handle inventory changes using Mayo Minder.

Revision: 15791
The "pvp" command with no arguments will list available stances and their
associated option number. You now can now specify a stance by either name or
number. The "pvp" command now requires you to choose a stance, since it can
no longer choose a reaosnable default based on your stats.

Revision: 15792
When parsing stances, allow for the fact that the last one you used is
selected in the dropdown.

Revision: 15793
Initial support for Map to Kokomo

Revision: 15794
The "attack" command now requires stance=<name or number> as the last part of the command

Revision: 15795
Do fuzzy matching of stance name for "pvp" and "attack" commands

Revision: 15796
Add ASH function: int [string] current_pvp_stances()

Revision: 15797
More Kokomo Resort stuff

Revision: 15798
Handle parsing of the miracle whip in the shop

Revision: 15799
Track defeat of Wart Dinsey, use of Hunger Sauce and Brain Preservation Fluid. Missing effects for Dinsey consumables.

Revision: 15800
You can walk away from configuring the Mayo Minder

Revision: 15801
Allow queuing of Mayo in Food Manager. Mayo de Mayo added. Mayo Minder now 99 meat.

Revision: 15802
Kokomo monsters and The Cocktail Shaker.

Revision: 15803
Fix my_basestat for high stats.

Revision: 15804
newly-hatched mayonnaise wasp and unappetizing mayolus

Revision: 15805

Revision: 15806
Add Mayo Pump

Revision: 15807
Morninja effect and plural of How to Avoid Scams

Revision: 15808
Hopefully fix detection of Mayo Clinic on startup by following redirect. Untested.

Revision: 15809
From podcast, Magical Battery is a 1% drop

Revision: 15810
Wild Seahorse rejection rate 80%.

Revision: 15811
Fix Rotten Memories data

Revision: 15812
Handle consumption helpers that are automatically consumed by Chez Snootee

Revision: 15813
Fix purchasing from Big Brother in the Relay Browser

Revision: 15814
Initial data for Baby Mayonnaise Wasp

Revision: 15815
Fix familiar id for that familiar

Revision: 15816
Don't take an NPE when registering an unknown familiar.

Revision: 15817
Bricks aren't gift items

Revision: 15818
Fix initial workshed parsing when Mayo Clinic installed.

Revision: 15819
Account for eating with Mayonex in mayoLevel.

Revision: 15820
Add a plural

Revision: 15821
Since faxbot hasn't logged in in a while, stop checking it for now

Revision: 15822
Track which Mayo you have in your mouth (preference mayoInMouth).

Revision: 15823
Mayo plurals

Revision: 15824
Revert FamiliarData.toString so the familiar (none) doesn't display a weight.
Add a couple of adventure failures

Revision: 15825
Refactor UseItemRequest.parseConsumption to only remove the item being used
after we know for sure it was consumed.

Revision: 15826
Delete empty method setFrame and thereby eliminate dependency between BuffBotHome and BuffBotFrame. On behalf of ajoshi @

Revision: 15827
With autoCraft disabled, do not automatically make a Wand of Nagamar

Revision: 15828
You can walk away from the Employee Assignment Kiosk

Revision: 15829
ConcoctionPool.nonitems must key on canonical name, since it is always given
such a name to find.

Revision: 15830
Ascension Path #24

Revision: 15831
Plurals for mayolus

Revision: 15832
Another plural

Revision: 15833
Recognize monsters in One Crazy Random Summer

Revision: 15834
Move monster name recognition so that semi-rare monsters will be recognized

Revision: 15835
Curse of Randomness

Revision: 15836
Remove debug text

Revision: 15837
Add a modifier

Revision: 15838
Simplify crazy summer parsing by mapping attributes via a HashMap

Revision: 15839
the Wand of Nagamar is no longer untinkerable

Revision: 15840
Provide StringUtilities.leetify method and ASH string leetify( string ) function
to garble strings.

Revision: 15841
modified stats can now be red or blue in the charpane

Revision: 15842
Add dice rewards

Revision: 15843
Recognize 1337 monsters

Revision: 15844
Strip crazy random monster attributes after we log the encounter.

Revision: 15845
powdered dice

Revision: 15846
Thwaitgold caterpillar statuette

Revision: 15847
Add "Random Monster Attributes" modifier as provided by dice items and the
Curse of Randomness status effect. Add random_attributes proxy field to ASH
$monster type. Munge random attributes from monster names is the Random Monster
Attribute modifier is > 0, not only if current path is One Crazy Random Summer.

Revision: 15848
Save random monster attributes. When we set the "last monster", clone the
MonsterData and insert the last attribute array and adjust attributes

Revision: 15849
The Cocktail Shaker is reusable

Revision: 15850
Munge monster elemental alignment appropriately given random attributes

Revision: 15851
Correctly log stance when you do a PVP attack

Revision: 15852
Fix monster image name typo

Revision: 15853
Add shield power for fake washboard. Add uninteresting mayolus to fullness.txt
When checking modifiers for items that grant an effect that requires the effect
id to disambiguate, compare only effect name. Using a Kokomo Resort Chip, not
the Golden Kokomo Resort Chip, will remove 100 of them at once

Revision: 15854
New crazy modifiers

Revision: 15855
Use untranslated random attribute names when munging MonsterData

Revision: 15856
DinseyLandfill Maintenance Tunnel unlock encounters are now autostops

Revision: 15857
FIx inventory when you fold Loathing Legion items

Revision: 15858
Fix recognition of morphing monsters

Revision: 15859
Refactor random monster attribute handling to put most code into MonsterData
Save user-visible attribute names in ASH-visible array of random attributes

Revision: 15860
When logging Effects that are gained or lost, print effect name (duration), as
we used to, rather than letting AdventureResult decide how to format it.
When removing random attributes from monster names, the the word "The " appears
in front of the random attributes, it is not part of the monster name. Remove it
so that we can de-leetify the real monster name, if necessary.

Revision: 15861
Prune out forms from HTML tree before processing fight.php HTML
When processing tables, process children, if necessary, before processing
embedded tables, not after processing such.
When logging the HTML tree of fights, omit scripts.

Revision: 15862
"tiny" divides a monster's HP by 10

Revision: 15863
Adjust a few more monster stats depending on random attributes

Revision: 15864
Fix data type of the .random_attributes monster proxy field

Revision: 15865
The Tasmanian Dervish is now just Tasmanian Dervish

Revision: 15866
Fix recognition of Spirit of New Wave. Brick Mulligan is Scale: 5. dancin'

Revision: 15867
Doc Galaktik's Invigorating Tonic is multiusable

Revision: 15868
If portable Mayo Clinic is in your workshed, add it to KoLConstants.campground

Revision: 15869
nasty gum

Revision: 15870
consult scripts now really do accept a "monster" value as the second parameter.
This will be the current monster you are fighting, as adjusted for random
attributes. Note that if your consult script says it wants a string for the
second parameter, you will get the monster name, just as before, and you'll
need to get the actual monster via last_monster().

Revision: 15871
Choice spoiler for the "search shelves" option of the Great Overlook Lodge
cannot include Item Drop from your familiar.

Revision: 15872
PeKaJe claims that when KoL sends crossorigin="Anonymous" down to the Relay
Browser with image tags, some browsers don't display the images right. I was
unable too verify this, but I see no harm in removing that directive, so, do so.
Provide dummy entries for "Ed the Undying" and all the variants of Your Shadow
in monsters.txt so that we will store 1337 versions of them all and can
unleetify them as needed.
Additionally, the Shadow variants start with "a ", which also screws things up.
Remove it.

Revision: 15873
Fix effect id (and spelling) of Cunctatitis

Revision: 15874
Add "test leet NAME" command to check if KoL monster names get translated
successfully from their 1337 versions.
For all remaining monsters disambiguated via consequences.txt that do not have
a KoLmafia monster with the identical name as the KoL name, add a dummy entry
to monsters.txt so that they can be detected when they are 1337

Revision: 15875
"ghostly" grants 90% physical resistance to a monster which is not already
physically resistant

Revision: 15876
New random modifiers

Revision: 15877
Sometimes KoL starts the 1337 monster name with an unnecessary "the"...

Revision: 15878
Don't take an NPE when getting health of an unknown monster. Add a couple of
monster IDs.

Revision: 15879
Physical resistances

Revision: 15880
KoL monsters that we always disambiguate via image but want to retain the
original name for, for 1337 purposes, are now marked DUMMY. ASH's monster
object now has a boolean "dummy" proxy field, although you will only rarely
see such a monster; they are no longer registered in the list of all
monsters - and hence do not appear in $monsters[]. However, if you meet an
invisible 1337 monster that we would normally disambiguate via image, the ASH
last_monster() will be a dummy monster.

Revision: 15881
When the mayo wasp deposits an egg in your abdomen, log to gCLI and session log

Revision: 15882
It is "the Spaghetti Elemental" in the monname span, so that is what we have to
match on in consequences.txt

Revision: 15883
"test load HTMLFILE" followed by "test aagain" will print the Adventure Again
URL from that page.

Revision: 15884
More physical resistance

Revision: 15885
Arena parameters for Baby Mayonnaise Wasp

Revision: 15886
Add wiki links to the function names in ashref output

Revision: 15887
Add cloned and unlucky monster modifiers

Revision: 15888
Add support for items that are "(automatically equipped)" in Spelunky.
DOn't give such items a use link.

Revision: 15889
New familiar

Revision: 15890
in consequences.txt, include pastamancer and disco bandit Nemesis variations
without the "the" so we can disambiguate versions of them with random modifiers

Revision: 15891
yellow puck with a bow on it, blue pumps, kill screen, Ms. Puck Man

Revision: 15892
Since KoL OCRS ascension rewards grant "+1 Random Monster Modifier", KoLmafia's
modifier is not called "Random Monster Modifiers" rather than "Random Monster
Add "ocrs" as a modifier shortcut for "Random Monster Modifers, -tie"

Revision: 15893
Location name changes

Revision: 15894
XXX Pasta of Peril -> XXX Pasta Spoon of Peril

Revision: 15895
Fixes to Epic Weapons. The Unknown Pastamancer.

Revision: 15896
Add The Unknown Seal Clubber

Revision: 15897
Add recipe for Golden Kokomo Resort Chip

Revision: 15898
Add plural. The Unknown Disco Bandit and The Unknown Accordion Thief.
The Unknown Tomb

Revision: 15899
Add Unknown Turtle Tamer & Unknown Sauceror

Revision: 15900
Fix location of Evilometer in Cyrpt in relay browser

Revision: 15901
Don't throw an error when checking turns_spent before logging in. Instead, return -1 since that can never be a valid value.

Revision: 15902
Add boolean [familiar] favorite_familiars(), which returns your favorite familiars and whether they are currently usable

Revision: 15903
The ASH steal() function will now always submit fight.php?action=steal, even if
KoLmafia knows you can not currently steal in this fight.

Revision: 15904
The black cloak has some power now

Revision: 15905
Don't require a Mace of the Tortoise in aftercore

Revision: 15906
When maximizing, if you have a card sleeve, consider currently inserted card.

Revision: 15907
Blood Sugar Sauce Magic has different effects depending on class, restrict obtaining effects based on class. Maximizer checks for current effect id rather than name. Check for constraints based on effect id rather than name.

Revision: 15908
Track consuming grains of salt as _saltGrainsConsumed.

Revision: 15909
In modifier_eval, allow skill() to accept a skillId in addition to a skill name

Revision: 15910
When you find a fat loot token, provide a navigation link to the vending machine

Revision: 15911
If a gladiator skill unlock hasn't been recognised, catch up by recognising it in fight skill dropdown. Untested.

Revision: 15912
After you have selected your new class after returning the MacGuffin in an
Ed run, call KoLCharacter.liberateKing to enter aftercore correctly, including
incrementing edPoints.
When Ed visits his book or his servants, see what we can deduce about your
current level of edPoints, in order to correct for not having set them
correctly previously.

Revision: 15913
Track kitchen contents in preferences (hasXXXX), rather than just from parsing kitchen each session. Should help in Ed where kitchen can't be parsed. Lightly tested.

Revision: 15914
Fix choice spoilers for A Wicked Web. Retrieving the lolmecidol counts as Gold

Revision: 15915
Make cellar.php?action=autofaucet log correctly. Use that action when automating
the Tavern Cellar, to eliminate unnecessary server hits & redirections.

Revision: 15916
Fix 15901 so that turns_spent actually works again

Revision: 15917
plurals of some dice items. deal with clingy rats in the Tavern Cellar

Revision: 15918
decode character entities before leetifying string

Revision: 15919
When "The ghost has arrived" in Spelunky, that is an adventure failure.
Correctly parse Turns out of the Spelunky charpane when joke book equipped
Log resting at Base Camp, fighting ghost, visiting Altar, and Exit
Ignore looking at boards.
Fix expected gold gain in a couple of noncombat choices

Revision: 15920
Fix a couple more Spelunky noncombat spoilers

Revision: 15921
Fix another Spelunky spoiler. Actually automate the multi-fight from a clingy
rat in the Tavern Quest script

Revision: 15922
Add Familiar Script. This script will run after changing familiars, before automatically changing familiar equipment. The script should have a boolean main() function. Returning true will cause normal familiar equipiment switching to be skipped, while false will lead to it running after the script returns.

Revision: 15923
Add familiarScript to defaults

Revision: 15924
When we timin after a GET request, replace the password hash with the new one.
Fix a Spelunky spoiler

Revision: 15925
Handle askew monsters. frozen monsters are cold aligned

Revision: 15926
When you choose a perk after a Spelunky game, resetAfterLimitmode.
When you are all done with a Spelunky game, provide a link to read another
Tales of Spelunking.

Revision: 15927
Don't give a "Read another Tales of Spelunking" link if you have none.
Fix some Spelunky spoilers

Revision: 15928
Add "test monster" command to parse the monster out of the saved HTML and
save it where ASH's last_monster() function will fetch it.

Revision: 15929
the crappy waiter disguise gives 5 turns of the crappy disguise, rather than 1

Revision: 15930
Stats for yellow pixel consumables (from wiki)

Revision: 15931
Add 27 avatar potions

Revision: 15932
Remove extra whitespace in test string for Stella, the Turtle Poacher

Revision: 15933
Scaling monster caps can now have expressions. Cap for Toxie Beastie is raised to 22222 when Safety Protocols are loose.

Revision: 15934
2 more avatar potions. DD monsters always drop an item.

Revision: 15935
Nemesis quest tracking, untested. Old steps 1 and later are now 4 higher.

Revision: 15936
Examine the choice buttons of the Tomb of the Unknown Your Class Here do
detrmine which is the correct answer to the riddle. Provide spoilers.

Revision: 15937
Add mayosoak command, which is also considered by Maximizer.

Revision: 15938
When quitting from KoLmafia, we do not need to construct a Login frame.
When logging out, dispose of GUI within Swing Event Thread

Revision: 15939
Add three more avatar potions

Revision: 15940
Can only queue one Mayo in a row. Account for Mayodiol in queued Fullness. Track Mayo Minder setting (mayoMinderSetting), but we don't do anything with it yet. Add autoFillMayoMinder setting, but we don't do anything with it yet.

Revision: 15941
Must return (empty) spoiler array for choice 1049, evn when it is not the riddle

Revision: 15942
Be defensive when retrieving spoilers to allow for there being none

Revision: 15943
Fix detection for step8 on Nemesis quest (untested), to stop it triggering on started text.

Revision: 15944
Fix standard check for mayosoak

Revision: 15945
More avatar potions

Revision: 15946
Clarify the choice adventure names and option description for various choices
in the Daily Dungeon

Revision: 15947
When we notice a new item on a user's profile - equipment or worn by familiar -
register it.

Revision: 15948
Use link for check to the meatsmith. Take two.

Revision: 15949
Support for jewelrycrafting changes

Revision: 15950
New yellow pixel items

Revision: 15951
If we are running with a GUI, always construct a LoginFrame when we exit, even
if we will not be allowing another Login

Revision: 15952
Rainbow pearl pulverization

Revision: 15953
Add a plural

Revision: 15954
When we look at a display case, register any unknown items we see.

Revision: 15955
More updates for jewelry changes

Revision: 15956
Arena parameters for Puck Man & Ms. Puck Man. Adventure failures for zones in
Dreadsylvania after the boss has been defeated.

Revision: 15957
Arena parameters for Miniature Sword & Martini Guy. Adv range for pixel daiquiri

Revision: 15958
Miniature power pill is now multi-usable

Revision: 15959
Add knowledge of familiar drop counters to FamiliarData, inspired by soolar.
New ASH proxy fields for $familiar data type:
drop_name = short name of the thing that drops
drop_item = if it is a single item, the $item. Otherwise, $item[none]
drops_today = how many things this familiar has dropped so far today
drops_limit = the maximum number of available drops from this familiar today

Revision: 15960
Miniature Sword & Martini Guy drops mini-martinis. Track in _miniMartiniDrops

Revision: 15961
Add _powerPillDrops. Slightly refactor familiar drop tracking since Puck Man limits vary.

Revision: 15962
When building daily deeds for drop familiars, if a familiar shares a tracking
setting with one one we've already shown (as in Puck Man and Ms. Puck Man),
don't show the duplicate.

Revision: 15963
Don't increment chessboardsCleared past 50

Revision: 15964
When we get an IOException retrieving server response, print the error message
using KoLmafia.updateDisplay, rather than RequestLogger.printLine, so that a
request sequence doesn't simply print "Requests Complete" and obscure the
message. This means that if you get a 504 Gateway Timeout while logging in,
KoLmafia will let you see that, like a browser, rather than mysteriously failing
to log in.

Revision: 15965
You cannot pickpocket in Spelunky. Once you've defeated Yomama, going to his
throne room is an adventure failure.

Revision: 15966
In Bee Hates You, maximizer shouldn't suggest familiars with a B in their race. Untested.

Revision: 15967
Once you have beaten LOLmec, his lair lies lempty.

Revision: 15968
Fix a few things revealed by checkitems

Revision: 15969
Update mallprices

Revision: 15970
Bump version to 17.0