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: 15971
Add a new avatar potion

Revision: 15972
Decorate Spelunky monsters with experimental damage calculator.

Revision: 15973
Fix Spelunky monster annotations to recognize that neither you nor the monster
can ever fumble or miss

Revision: 15974
Since we have not yet left the Spelunky limitmode when we close the book and
end the game, don't check if inventory contains a Tales of Spelunking before
adding a "Use another Tales of Spelunking" link.

Revision: 15975
Suggest using a miniature power pill in addition to a regular one for Pill Power

Revision: 15976
Lots of Madness Bakery stuff

Revision: 15977
Create combat/CombatUtilities package and move hitchance calculation to there

Revision: 15978
The yellow submarine unlocks the island, not the desert

Revision: 15979
A few recipes require Really Expensive Jewelrycrafting

Revision: 15980
rainbow pearl jewelry is expensive

Revision: 15981
In Spelunky, apparently damage from a ranged weapon applies the 3/4 factor for
bonus damage to the difference between your moxie and the monster's defense.
Improve Spelunky logging of player hits, monster hits, and attack/defense loss

Revision: 15982
When logging Spelunky combat, monsters have attack/defense, but spelunkers have
muscle/moxie or moxie/moxie

Revision: 15983
Add a few Madness Bakery recipes. Add a recipe-learning pattern which should
match recipes learned in that venue.

Revision: 15984
Various Spelunky items provide Damage Reduction, so take that into account in
the damage calculator

Revision: 15985
Monster Manuel shows you the monster attack/defense/HP as they are at the end of
everything that happened on combat round currently displayed, not as they were
at the beginning. Therefore, we can use that data to adjust monster stats after
we are done processing the page, but it they are not useful while we are
processing the fight text.
Minimum monster damage in Spelunky is 1, not maximum.
Getting gold at idolotry without appropriate gear makes you lose 50 hp

Revision: 15986
Log various Spelunky actions: things that cause damage without the player using
an action, things that prevent the monster from attacking, and so on.

Revision: 15987
Don;t bother updating stats from Manueal after the battle is over

Revision: 15988
Nothing needs to be parsed from static.php

Revision: 15989
Fix niche case in command line item parsing

Revision: 15990
Revert 15989

Revision: 15991
Remove a discovery pattern

Revision: 15992
If you learn a recipe and we do not know the item ID, assume it because the
discovery pattern matched "Adventure Again", or something, and do not log it.
Add new Madness Bakery items, concoctions, and choice adventure

Revision: 15993
choice adventures 1082 and 1083 have only a single choice

Revision: 15994
Add Luck as a modifier. Dislay Luck and DR in compact sidepane for Spelunky.
Log a few more special Spelunky messages.

Revision: 15995
Allow autoQuest to disable more cases of automatically using quest items

Revision: 15996
KoLmafia.makePurchases can be handed a list of purchaseRequests for multiple
different items. Therefore, do no assume you are only getting one ind of item

Revision: 15997
The ghost does not increment the Spelunky win counter. The spelunky win counter
can exceed 3, and when you take a non-combat, it goes down by 3, rather than
resetting to 0.

Revision: 15998
When gain gold, rope, or bomb in Spelunky, log it in appropriate place.
Remove thrown Spelunky offhand items in the canonical way

Revision: 15999
INT_PATTERN (and SPACE_INT_PATTERN) now allows commas as well as decimal digits

Revision: 16000
Refine those two patterns a little bit

Revision: 16001
Add spelunkyHints setting (default false, in Preferences/Relay Browser) to
control whether we provide hints for the Spelunky game.
Provide a noncombat warning if a noncombat is available and you are about to
adventure. So far, it just says that a phase X noncombat is available and asks
if you want to adventure in (the location you clicked on).

Revision: 16002
Phase 1 of Spelunky Choice helper: when the ghost is waving and you click on an
adventuring area, you are given the option to click on an icon to go where you
initially clicked. You are also given images of the three main adventuring
areas and a description of what options are currently available (given items
in inventory and/or equipped) if you go there. You can click on the area image
to go to that location instead.
Note: side areas noncombats are not yet present (although they will be easy
enough to add), so if you want to go to one of those, for now, it has to be
the one you initially clicked, so you can click on the top icon to go there.

Revision: 16003
Add spoilers for Spider Hole, Snake Pit, Ancient Burial Ground, Beehive, Crashed
U.F.O., and City of Goooold to noncombat warning screen. Untested.

Revision: 16004
The Spelunky noncombat warning screen now uses the image of the zone you are
attempting to go to as the image at the top of the pane.
Add Yomama's Throne as a zone that you can unlock.

Revision: 16005
lead pipe -> oversized pipe

Revision: 16006
Create InternalChatRequest for making requests of KoL via chat (rather than
actually chatting, per se). Use it for KoLmafia.isPlayerOnline and for ASH's
who_clan() function

Revision: 16007
Custom Outfits don't work in Spelunky limitmode

Revision: 16008

Revision: 16009
Don't take choice option to get electric boning knife unless KoL offers it

Revision: 16010
Pack of Every Card

Revision: 16011
When building an ASH plural constant containing all the objects in the datatype,
we ask the appropriate data type to give us an Entry set of mappings. If the
key is an Integer, we now look up the object by that id, rather than by the
string value. This allows for data types with duplicate names - like
effects, in particular.

Revision: 16012
More data for emperor clothing

Revision: 16013
Track power pill uses in combat

Revision: 16014
When you explore the Wumpus cave, in addition to the exits, log the sounds you
hear from (some) adjacent rooms.
Add "wumpus replay FILE" command to process the session log of a wumpus
exploration and make deductions, etc.
Improve deductions such that if you DON'T hear a sound in adjacent rooms, we
know that the specified hazard cannot be in those rooms.

Revision: 16015
Add "wumpus reset" CLI command to clear in-memory Wumpus cave state

Revision: 16016
Raconteur Elf and Knob Goblin Elite Guardsman stats

Revision: 16017
Track glark cable uses in combat

Revision: 16018
Track how many cards have been drawn from the Deck of Every Card in _deckCardsDrawn

Revision: 16019
Remove debugging text

Revision: 16020
plural for cubic zirconia

Revision: 16021
Topiary plurals. 4 more Deck of Every Card status effects

Revision: 16022
Create DeckOfEveryCardRequest and the CLI "play" command. The actual interaction
with KoL is not there yet; the run() method is a stub.

Revision: 16023
Add legal alien and The Emperor

Revision: 16024
Add missing file

Revision: 16025
Improve logging for drawing cards from the Deck of Every Card

Revision: 16026
Deck of Every Card is reusable. gift card needs item redirection. Mob Penguin
Goon. Associate some cards with stats and some with buffs, although the "play"
command doesn't yet have syntax to request cards via such things.

Revision: 16027
Add Fortune of the Wheel status effect. Fix logging for drawing from the Deck
of Every Card.

Revision: 16028
The Wok has been removed

Revision: 16029
Add Mob Penguin Kneecapper. If you are carrying two familiars - on in the Crown
of Thrones and one in the Buddy Bjorn, sometimes at the beginning of a fight,
they will interact with each other - talk, play a game, what have you. If you
are logging familiar actions in your session log, log this interaction. Fun!
Add a run() method to DeckOfEveryCardRequest to handle drawing a card or
cheating. If it results in a fight, automate it.

Revision: 16030
savory dry noodles. Fix recipe for Staff of the Well-Tempered Cauldron

Revision: 16031
bubblegum heart is now multiusable

Revision: 16032
pixel coin is now multiusable

Revision: 16033
Some old monster stats (and move Deck of Every Card monsters to IotM section)

Revision: 16034
Recognize message when you don't have enough draws left to cheat today

Revision: 16035
chow meins no longer have a zap group. Don't throw an exception reading
zaplist.txt if an unknown item is found. Remove duplicate keywords from a
couple of monsters

Revision: 16036
Track mini-martini consumption

Revision: 16037
Register Fortune of the Wheel as a buff available from the Deck of Every Card
Fix a typo in an error message

Revision: 16038
Maximizer doesn't suggest summoning if you don't have 3 black candles available. Untested.

Revision: 16039
Maximizer only shows Deck of Every Card buffs when you have 5 draws or more left and you have the Deck. Untested.

Revision: 16040
Add modifiers for candlestick, knife, and revolver

Revision: 16041
Remove mana when casting Ancestral Recall and Dark Ritual. Ancestral Recall is limited to 10 casts per day, tracked in _ancestralRecallCasts.

Revision: 16042
The Hermit

Revision: 16043
Fix typo

Revision: 16044
The "cheat" command is a synonym for the "play" command. options:
play random - play a random card (1 draw)
cheat phylum PHYLUM - cheat (5 draws) a fight with specified phylum
cheat stat STAT - cheat (5 draws) 500 substats of specified stat
cheat buff BUFF - cheat (5 draws) 20 turns of the specified buff, either by name
or by effect: muscle, mysticality, moxie, item drop (or items), initiative
cheat CARD - cheat (5 draws) the specified card name.
PHYLUM, STAT, BUFF, and CARD all use fuzzy matching.

Revision: 16045
If the card you want from the Deck of Every Card is not in the available cards,
submit choice 1086/2 to reject the cheat, since you cannot walk away from that

Revision: 16046
When executing foreach over an aggregate with multiple levels, break needs to
break all the way out of the foreach, not just the innermost slice.

Revision: 16047
Track Armorer quest (Madness Bakery) as questM25Armorer. Some consumable spading (and mark unspaded items unspaded). Madness Bakery drops. Link no-handed pie to Armorer. Remove used items when you make Popular Tart/Plain Bagels.

Revision: 16048
Some missing monster information from Yendor

Revision: 16049
Ignore burn command set as lastChanceBurn to prevent infinite loop, as suggested by Veracity. Afternoon Delight spading.

Revision: 16050
Madeline's Bakery. Should shop there in preference to Bugbear Bakery (it's cheaper with the same items) if you've completed the quest.

Revision: 16051
Madness Bakery choise spoilers

Revision: 16052
New maximizer option, +effective. If present and muscle higher than moxie, only melee weapons are considered. Otherwise, only ranged weapons (and knives with Tricky Knifework known) are considered.

Revision: 16053
Apply caps and floors to Bees Hate You Bees, untested.

Revision: 16054
KoL caps Libram summons at 200 at a time. Don't try to summon more than 200. Untested.

Revision: 16055
Handle detecting free crafts using multi-stage crafting.

Revision: 16056
Account for Mayo and other Food helpers when using Cafes and Clan Lounge.

Revision: 16057
Jick's autograph

Revision: 16058
Remove starter weapons when getting epic weapon. Untested.

Revision: 16059
Saucemaven is less effective now

Revision: 16060
Make fixed list of modifier maximizer strings configurable. On behalf of PeKaJe @

Revision: 16061
Typo fix

Revision: 16062
Mayolus spading

Revision: 16063
Since KoL now auto-pulls the VIP key, remove the code for handling that

Revision: 16064
Fix some monster ids, a few modifiers, and add talking spade

Revision: 16065
Handle native inline description popups

Revision: 16066
Fix 11 monster ids, as reported by Manuel, thanks to ckb.
Add four (obsolete) monsters that have returned from the dead via the DoEC.
Change checkitems to check quality and size of consumables as well as
whether an item is a Fancy cooking or cocktailcrafting ingredient.
Fix several items that are fancy ingredients but were not so-marked
Add new foods resulting from the Pastapocalypse and fix size, quality,
and level requirement of existing foods that changed.
Detect when a new item is a fancy ingredient and mark it as such.
When we generate the consumables line while registering a new
consumable, the note is "Unspaded"
Add a new status effect and fix effect granted by antique bottle of cough syrup.
Unidentified items in storage cannot be discovered via api.php
When you tell KoLmafia to pull N of an item, pull exactly N, not all available
Look for "Desert exploration" to decide if you've successfully explored, rather
than assuming every fight in the desert counts; clingy follow-on fights don't.
lost's regexp changes to keep native inline item descriptions from screwing up
our model of equipment
Handle variable priced conditional Swagger Shop items
Handle alternative event format from main.php and only process old-style events
for now - ones that have a time stamp and are not in an HTML table

Revision: 16067
Use a typed Iterator to avoid a cast

Revision: 16068
Override getBuyPrice for the Swagger Shop CoinmasterData object to get the
current price of the seasonal rewards from settings

Revision: 16069
Be defensive and avoid a dive by zero error if somebody screws up the value of
their settings that specify the cost of seasonal Swagger Shop items

Revision: 16070
Fix monster ID for junksprite sharpener

Revision: 16071
Convert CR/LF to LF, again.

Revision: 16072
Upgrade SVNKit to latest version; update bundled libraries as part of this

Revision: 16073
Add support for checking out SVN repositories via old formats.

Revision: 16074
Update licenses for SVNKit and sequence libraries. ssh2 license seems to be

Revision: 16075
Monster drops and some consumable spading

Revision: 16076
Add monster stats for mutant rattlesnake. Add "drops" familiar category in
the compact side pane

Revision: 16077
Add a plural

Revision: 16078
Some pasta recipes, saucemaven support for new reagent pasta recipes, somewhat speculative stats for some new pasta recipes.

Revision: 16079
monster data for swarm of mutant fire ants.
Categorize familiar combat abilities as follows:
combat0 - does physical damage to foe
combat1 - does elemental damage to foe - Elemental Fairy or Starfish
block - Levitating Potato
delevel - Barrrnacle
hp0 - restore HP in combat - Mosquito
hp1 - restore HP after combat - Ghuol Whelp
mp0 - restore MP in combat - Starfish
mp1 - restore MP after combat - Ghuol Whelp
The familiar popup on the compact sidepane now adds sumenus to the "combat"
menu corresponding to each of the above categories.

Revision: 16080
Educated guesses for fettucini Inconnu and ghuol guolash adventures and stats.

Revision: 16081
fix capitalization for toy-making creature from the Gray Lagoon

Revision: 16082
Add monster id for toy-making creature from the Gray Lagoon. Fix a monster image

Revision: 16083
SwaggerShopRequest was missing a constructor and, therefore, you couldn't
actually buy anything from it via the CoinmasterFrame. Supply the constructor.

Revision: 16084
Snow Angel does elemental damage, not physical damage. Adjust compact side pane
combat familiar categories to include "physical only", "elemental only", and
"physical and elemental" to further shrink the size of the physical submenu.
Add $familiar proxy fields for the new familiar type categories:
physical_damage, elemental_damage, block, delevel, hp_during_combat,
hp_after_combat, mp_during_combat, mp_after_combat

Revision: 16085
Update some more jars that didn't cause compile-time errors.
Evidently in some scenarios, with the old versions, the library would raise
exceptions that generated debug logs.

Revision: 16086
Add "variable" familiar type for familiars that are configurable
Add variable menu to compact sidepane and .variable $familiar proxy field.
Move "restore HP after combat" and "restore MP after combat" to a new "after
combat" menu in the compact side pane.

Revision: 16087
Add new familiar types: otheRevision 0 = other actions during combat, otheRevision 1 = other
actions after combat, passive = passive boost to initiative, resistances, ML,
variable = configurable behavior via equipment (or it is a doppelshifter),
underwater = can breath underwater.
All of the above categories appear in the familiar picker in the Compact Side
Pane, and all have $familiar proxy fields.

Revision: 16088
Initial support for new saucy pasta dishes (L6/10).

Revision: 16089
Hell ramen seems to now be "good", not "awesome". Remove consumption data
and mark as unspaded.

Revision: 16090
Attempt to lose class starter weapon when you acquire your class epic weapon

Revision: 16091
Fix recognition of the darkness (blind). Fix recognition of wumpus when you
are blind.

Revision: 16092
Fix capitalization of some monsters

Revision: 16093
Fix some pasta recipes

Revision: 16094
Some more food spading

Revision: 16095
Some more fullness spading, somewhat speculative.

Revision: 16096
Track S'Mores eaten (if you have already eaten some this season, can correct it with set eatenSmores = X, where X is the number you have eaten). Update Smores size and adventure gain based on S'Mores eaten. Lightly tested. Some other old unspaded entries in fullness.txt updated from Wiki.

Revision: 16097
Address issues with improper setting of s'more fullness.
The Item Manager sorts based on Concoctions that have their sizes
(fullness, inebriety, spleen) populated when the program is initialized,
presumably as a performance optimization. Because other variable
consumables (notably, astral consumables) have fixed size but variable
adventure gain, this was a nonissue in the past.
The solution here, therefore, is to re-evaluate the size of the s'more
Concoction (which in fact does vary) when setting its yields.
It is interesting to note that stat gains were not subject to these issues,
since those were re-evaluated in the Concoction comparator. Along the same
lines as that initial performance optimization, it may be sensible to also
store this information in the Concoction, and instead put the call to
objectpool.Concoction.setConsumptionData() in
persistence.ConsumablesDatabase.setConsumptionData (). I will not do that at
this time.
Miscellaneous changes that seem pointless are a result of running
M-x delete-trailing-whitespace on

Revision: 16098
More pasta spading.

Revision: 16099
Fix Slime Tube monster disambiguation broken by Revision 15486.

Revision: 16100
plural of salacious crumbs. Remove empty block.

Revision: 16101
Queue s'more's individually. Handle queued fullness when multiple S'mores queued. Stats on the currently queued s'mores is inaccurate, this will probably not be fixed.

Revision: 16102
Check purchase limits for buying npc items in Maximizer. Stops issue where it suggests too many mayo items.

Revision: 16103
Set hotAirportAlways when using the hot charter

Revision: 16104
Add a bunch of items, effects, concoctions, adventure areas, coinmaster items
from the new hot airplane charter. Recognize when you have one-day access to the
area, the same way we recognize one-day access to the other charter areas

Revision: 16105
Fix cut/paste/fail-to-change error.

Revision: 16106
More 70s Volcano items

Revision: 16107
more items, effects, recipes, etc. for the 70s Volcano

Revision: 16108
Travoltron drops. The One Mood Ring. SMOOCH Bottlecap

Revision: 16109
Update location name

Revision: 16110
When use machines on LavaCo Lamp Factory floor, remove consumed ingredients.

Revision: 16111
Fix logging when you visit various airplane charter area zones that dump you
into choice.php

Revision: 16112
Add love, cortesy of Crowther. When you gain superheated or superduperheated
metal in combat, you lose heat-resistant sheet metal.
Add Disco GiftCo coinmaster

Revision: 16113
decode character entities before passing 1337 monster name to MonsterDatabase.

Revision: 16114
Add 20 monsters from That 70s Volcano

Revision: 16115
Add fused fuse.

Revision: 16116
Update monsters.txt with additional spading results.
Specifically, SMOOCH monsters have a cap of 12345 and scale as stats +
1/15/30; lava golem and healing crystal golem both have physical (but not
elemental) resistance.

Revision: 16117
Volcano items, monsters, effects

Revision: 16118
When comparing ASH objects whose data type has an id associated with it, use the
id, rather than the name, to determine equality. This includes monsters, except
that monster id 0 means we don't know the id, so use the name for such.

Revision: 16119
Add Raul Stemley. Change alt text of SMOOCH doors to be band member name.
Fix capitlization of mutant elves. Remove duplicate item id

Revision: 16120
Add bosses to Volcano areas. Fix monster compareTo in Value

Revision: 16121
For some reason, we connot use monster ID for ASH Value comparison. Disable.

Revision: 16122
Check for duplicate monster IDs when loading monster.txt.
When comparing MONSTER_TYPE Values, only need to compare names if both
monster IDs are 0; otherwise an ID compare will suffice.

Revision: 16123
Update Travoltron, as well.

Revision: 16124
Volcano skills

Revision: 16125
Rename White Wednesday aftermath zones to agree with what KoL called them.
Populate them with the monsters that used to be there.

Revision: 16126
Fix errors revealed by checkitems and checkpowers. Initial item drops for
Volcano monsters. Stats and drops for zombie Gnollish crossdresser.

Revision: 16127
Handle being unable to afford visiting Speakeasy.

Revision: 16128
Recipe for lava cake

Revision: 16129
stinky fannypack works on the Volcano

Revision: 16130
Attempt to identify which items are needed in the WLF bunker by parsing the
item descids on the page. set _volcanoItem1, _volcanoItem2, and _volcanoItem3
to the item ids of the corresponding items. When you redeem an item, based on
the option you selected, remove the appropriate item from inventory and set
_volcanoItemRedeemed to true.
Update mall prices

Revision: 16131
Bump version to 17.1