Version 21.9

Veracity

Developer
Staff member
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: 20276
Don't nag about Ode if you are in G-Lover with no access or desire to use buffbots

Revision: 20277
Move handling of consumable flags (like martini, pizza, lasagna etc) to inebriety.txt and fullness.txt

Revision: 20278
Fix consumable flag bug and add new flags for martinis and some missing pizzas

Revision: 20279
SpinMaster lathe

Revision: 20280
Probably fix the link provided when unpacking a lathe

Revision: 20281
WHen generating up arrow links in the charpane, do not do mall searches to decide if you can
acquire by creation the item that generates the effect.

Revision: 20282
If looking up shop.php ROWs, if there is a Results: section before the actual shop inventory,
do another find() to get the actual shop name.

Revision: 20283
Add more missing WINE, MARTINI and SAUCY tags. Create new SALAD, BEER and CANNED tags

Revision: 20284
Update OSXAdapter to use Desktop and Taskbar functions, if you are running at last Java 9, since come Java 14,
the old way of doing things is broken

Revision: 20285
Initial lathe woods and items

Revision: 20286
Your SpinMaster™ lathe is a coinmaster. Add ancient redwood. Add Lathed Livery.

Revision: 20287
Add three more items to the SpinMaster lathe coinmaster

Revision: 20288
bundles of lathing wood. Visit Your SpinMaster™ lathe at breakfast.

Revision: 20289
Only visit lathe at breakfast if you have one

Revision: 20290
Add _spinmasterLatheVisited. Only visit the lathe during breakfast if it hasn't already been visited.

Revision: 20291
Add purpleheart logs and purpleheart "pants".

Revision: 20292
You don't "unlock" items in YOur SpinMaster lathe; items are available only if you have the currency.
Therefore, continue to learn new items, if any, but simply add them to the coinmaster buyitems
(and purchase requests, etc.) when detected. Lathed Livery is a zapgroup. Equipment powers.
Guzzlr tablet is no longer a free pull

Revision: 20293
Expeirmental: If you have jython in your classpath, run python files from the commandline. Watch this space

Revision: 20294
Revert python stuff for now

Revision: 20295
Add TMate SVNKit license

Revision: 20296
Update SVNKit to 1.10.1. Updated required libraries.

Revision: 20297
Initial support for dripwood slab and drippy diadem. Remove zap group for Lated Livery items

Revision: 20298
Add boolean _redwoodRainStickUsed property to track/control the once-per-day usage of the redwood rain stick

Revision: 20299
Recognize Grey Goo

Revision: 20300
Modernize a lot of code to eliminate lots of unchecked references

Revision: 20301
Grey Goo locations, effect

Revision: 20302
eliminate deprecated explicit boxing

Revision: 20303
Clearer Neverending Party spoilers

Revision: 20304
Fix hundreds of compiler warnings. 2267 remain, using Java 14.

Revision: 20305
Add coinmaster entry for drippy diadem. giant turkey leg easier to equip.

Revision: 20306
Eliminate all [static] warnings - calling a static methid as if it is an instance method

Revision: 20307
Fix REVISION

Revision: 20308
Fix compiler warnings in most of ASH and some CLI commands

Revision: 20309
Resolve some compiler warnings.

Revision: 20310
Add log_n function. One argument for natural log, two arguments for log base n

Revision: 20311
Fight text is now required to contain a MONSTERID

Revision: 20312
fix a few food and booze entries

Revision: 20313
Fix many compiler warnings in Gear Change Frame. Render items names prettier.

Revision: 20314
Whack Gear Change Frame to update the equipment lists (the GUI models) in the Swing Event thread.

Revision: 20315
Don't update slot -1

Revision: 20316
Handle changing familiar equipment via inv_equip.php

Revision: 20317
Add shop_limit function to fetch the limit set for an item in your shop

Revision: 20318
Grey Goo monsters and items

Revision: 20319
Goocore Ronin lasts 10000 turns. Visiting the Goo Prism takes a turn.

Revision: 20320
ASH "new" constructor for a record is expected to coerce expressions into int, float, string, or boolean.
It did not do so. Make it corece as needed.

Revision: 20321
Log daycount when first got Shen Copperhead, Nightclub Owner. Thanks to fredg1 @ Kolmafia.us

Revision: 20322
goo monsters have multiple images

Revision: 20323
Use release="8" in the jvac ant task. WARNING: requires ant 1.9.8 or later

Revision: 20324
Add fistful of wood shavings. Don't show unavailable skills at the gash as "skills you have not learned".

Revision: 20325
plurak

Revision: 20326
Initialize KoLCharacter.currentModifiers early in class initialization,
before subsequent classes get initialized that want to refer to it.

Revision: 20327
Add zap group for rare oyster eggs

Revision: 20328
Passive skills without Gs are ineffective in G-Lover

Revision: 20329
minor item changes from latest KoL changelog

Revision: 20330
Do not try to calculate dwarf runes in the warehouse if KoL did not give you an item

Revision: 20331
Fix Meat drop for the ghost of Phil Bunion

Revision: 20332
Adjust monster appearance rates based on Red-Nosed Snapper tracking, thanks to fredg1

Revision: 20333
PVP Seasoning. gregooball. Item drop for dismal swamp b
ss" monsters.

Revision: 20334
New Lyle and IOTM stuff

Revision: 20335
More pocket drops from spreadsheet or mall

Revision: 20336
onyx, alabaster, muffins

Revision: 20337
More cargo shorts stuff

Revision: 20338
cargo shorts stuff

Revision: 20339
cargo short effects

Revision: 20340
More cargo short items

Revision: 20341
Start adding data for Cargo Cultist Shorts. This isn't used for anything yet.

Revision: 20342
6 cargo cultist shorts effects

Revision: 20343
two more items, 2 more effects

Revision: 20344
More items and effects

Revision: 20345
support for onyx and alabaster chess pieces and fancy chess set

Revision: 20346
Completely whack how the item lists that back up the models in the Gear Changer get updated.
Code is much simpler and should be much easier to maintain, but is it correct?

Revision: 20347
Recognize "You've already played today" message for the fancy chess bpard

Revision: 20348
Using a desk bell redirects to a fight.

Revision: 20349
Initial implemen tation of CargoCultistShortsRequest. Adds properties "cargoPocketsEmptied" (a comma-dlimited
list of pockets you have emptied this ascension) and "_cargoPocketEmptied" (a boolean denoting whether you have
picked a pocket yet today).

Revision: 20350
Add simple "cargo" command to manipulate your Cargo Cultist Shorts

Revision: 20351
Log an error when you've already picked a pocket in your Cargo Cultist Shorts today.

Revision: 20352
Cargo Cultist SHorts monsters

Revision: 20353
plurals. use links for Cargo Cultist SHorts

Revision: 20354
Soup up CargoCultistSHortsRequest to keep the set of picked pockets up to date.
Load from setting when you log in, update and save to setting when you pick a pocket.
"cargo" command with no arguments prints picked pockets without going to KoL.
"cargo inspect" goes to KoL to refresh setting and then prints picked pockets.

Revision: 20355
If your Cargo Cultist Shorts redirect to a fight, set _cargoPocketPicked property.

Revision: 20356
When a cargo pocket redirects to a fight, save the pocket to set of picked pockets

Revision: 20357
Yeg's Motel slippers

Revision: 20358
There are paths through a try block that do not set a variable referenced in the finally block. Guard

Revision: 20359
The Familiar Item slot in the Gear Changer is now managed by that class itself, rather than EquipmentManager

Revision: 20360
The CargoCultistPantsRequest will now perform HP/MP recovery before picking a pocket that leads to a free fight.

Revision: 20361
Cargo Cultist Shorts free fight map is now Integer => MonsterData

Revision: 20362
plural for Yeg's Motel stationery. Cargo Cultist Shorts are not a Free Pull.
Handle "That pocket is empty" when you try to pick a pocket you already used this ascension.

Revision: 20363
External requests do not interrupt (count as walking away from) a choice adventure
--Thi line, and those below, will be ignored--
M src/net/sourceforge/kolmafia/request/CargoCultistShortsRequest.java
M src/net/sourceforge/kolmafia/session/ChoiceManager.java

Revision: 20364
Experimental: look for (waterlogged) scraps of paper in Cargo Cultist Shorts pockets.
Save in cargoPocketScraps or cargoPocketWaterloggedScraps property, as appropriate.

Revision: 20365
Separate pocket scrap messages with "|", not ","

Revision: 20366
Plural for Yeg's Motel hand soap. Non-waterlogged scraps of paper give syllables of
a per-ascension demon name that grant's Yeg's Power. Waterlogged scraps give an encrypted
poem. Log those, but they do no vary per player, so don't save in a property.

Revision: 20367
Add Yeg's Blessing, thanks to Lacey Jones

Revision: 20368
Yeg's Motel plurals

Revision: 20369
desk bell monster item drops frpm spading spreadsheet

Revision: 20370
Log the message on notes that are wrapped around Meat, In case you want to solve the puzzle yourself.
Add "test pocket POCKET" command

Revision: 20371
Updates to Yeg items and effects

Revision: 20372
desk bell monsters scale at 15

Revision: 20373
Yeg's Keeping

Revision: 20374
Include a couple items in mafia's header to debug logs.

Revision: 20375
Familiars that carry equipment grant you skills provided by the equipment they are wearing.
Correctly add and remove such skills when you remove or change what such familiars are carrying.

Revision: 20376
When you change familiars, forget conditional skills from the previous familiar and gain conditional skills from the new one.

Revision: 20377
Handle conditional skills when equipping/unequipping current familiar via familiar.php

Revision: 20378
Use famid when unequipping familiars, rather than whichfam

Revision: 20379
Remove obsolete private methods. Dripping trees and hall are nowander

Revision: 20380
When "setting" your current familiar (as from api.php), do nothing if it is already your current familiar
All TransferItemRequests will now abort (with appropriate message) if you are in a fight or a choice.
ClanManager.getStash() will not even attept to retrieve (with no error) if you are in a fight or choice.

Revision: 20381
Add dump functionality to ASH, from fredg1

Revision: 20382

Revision: 20383
Add voting_booth_initiatives function to ASH to allow you to forecast initiatives for a the voting booth. This also includes Java ports of the seeded random functions KoL use on the server, so should be generally applicable when this sort of spading is done

Revision: 20384
voting_booth_initiatives function now returns boolean [string] because there are sometimes conflicting modifiers. Also added a format class-as-int format to theorize about nonexistent classes (perhaps in an avatar path)

Revision: 20385
Add "test take-choice CHOICE DECISION [FIELD=VALUE]...
FIx patter for detecting carg shorts pocket scraps: can be <B> as well as <b>

Revision: 20386
Add some secondary usages to test regex so test doesn't fail

Revision: 20387
Experimental - return a long for HP and MP values in table, not sometimes an Integer and sometimes a long. Rework the associated sort.

Revision: 20388
Correct/simplify cargoPocketScraps property to not include the encoded "number" part of the value,
since that does not vary from player to player. Convert previous format to new format, if required.

Revision: 20389
First pass of all 666 Cargo Cultist Shorts pockets

Revision: 20390
A lot of line/star pockets are really Unknown, since they were incorrectly implented originally
and have been repaired. FIx these when they have been spaded.

Revision: 20391
Reorganize pocket categories inpired by WIki

Revision: 20392
Expose internal method that updates candy prices in the Synthesis frame to ASH as void update_candy_prices()

Revision: 20393
Parse cultshorts.txt into Pocket objects. Add "cargo pocket N" comand to see what is a pocket.

Revision: 20394
Pretty up the display of items a bit

Revision: 20395
Allow "cargo pocket NNN" to be used not-logged-in, since it looks up the PocketDatabase,
rather than sending requests to KoL.
Remove temporary code from CargoCultistShortsRequest now that we have PocketDatabase
Remove debug printing when initializing the PocketDatabase.

Revision: 20396
Log unknown pockets when loading pocket data. Prettier "type" logging for effects.
Disambiguate effect names, if needed. Spreadsheet has data for two of the Unknown pockets.

Revision: 20397
When initializing PocketDatabase, create ArrayLists containg scrap syllables and poem half-verses in order

Revision: 20398
Do the same thing for Meat pocket clues

Revision: 20399
Rather than hardcoding pocket numbers when constructing demon name, let PocketDatabse
give the pockets in the order needed

Revision: 20400
cargo jokes, poem, scraps, and meat. Fix another Unknown pocket

Revision: 20401
More dealing with scrollbars. fred1

Revision: 20402
Improve demon name recognition. Fix previously Unknown pocket. "cargo demon" is a sunonym for "cargo scraps"

Revision: 20403
Handle not having any demon scraps known yet

Revision: 20404
When save scraps property, save the pockets in the order that they provide syllables for the demon name

Revision: 20405
Add "Restore" pocket type which grants a full HP/MP restoration and an effect.
Log Yeg demon name in gCLI and session log when found, as well as saving it in
the demon13 property

Revision: 20406
fruitfilm is classified by KoL as a potion but, strangely, it does not grant an effect.
Treat it as an Item in the PocketDatabase.

Revision: 20407
get rid of "Unknown" PocketType. Dramatically simply code for maintaining maps of
pockets by pocket type.

Revision: 20408
Add "cargo count type TYPE" command

Revision: 20409
Pockets with a "common" effect - multiple sources - are now type Comoon.
Add "cargo list type TYPE" to see all the pockets of a given type.

Revision: 20410
Use HashMaps rather than TreeMaps for Pocket maps. Eliminate redundata "cargo" subcommands.

Revision: 20411
Wiki now has duration for Cold Dead Hands effect. Reformat stream sorting for code clarity.

Revision: 20412
Add support for "cargo count effect EFFECT" and "cargo list effect EFFECT".

Revision: 20413
Add a spading hook to place.php

Revision: 20414
Further simply class structure of Pockets. Augment "caro" command:
cargo count item ITEM
cargo list item ITEM
cargo list monster MONSTER
Pockets that grant two effects now appear in the "list" of pockets for both effects. They will
sort lower than the single effect pockets, since those lists are sorted high to low by duration.

Revision: 20415
Add "checking" to cargo command: any command which would actually pick a pocket can be invoked with "cargo?",
which will tell you which pocket would be selected.
Add "cargo item", "cargo effect", and "cargo monster" commands to pick a pocket.

Revision: 20416
Add "cargo list stat STAT", "cargo stat STAT", and "cargo? stat STAT"

Revision: 20417
Add some familiar attributes to familiars.txt from Excavator (and from the wiki in a few places) and update Adventurous Spelunker to deal physical damage

Revision: 20418
cargo command allows monsters, effects, and items to be specified by id #, as well as by name.
When specified by name, use case-insensitive lookup but normalize names to agree with the actual
item, effect, or monster

Revision: 20419
Add "cargo effect XXX" as a source to all status effects that can be found in the cargo cultist shorts.

Revision: 20420
Use effect name rather than effect number in "cargo" commands in statuseffects.txt

Revision: 20421
The Tunnel of LOVE is accessible while faling down drunk

Revision: 20422
Fix NullPointerException when inspecting quality and attributes on effects that are not in the EffectsDatabase

Revision: 20423
Cartopgraphy book and skill

Revision: 20424
Initial ASH support for Cargo Cultist Shorts. NOTE: the whole API is here,
EXCEPT for pick_pocket() - the thing which actually goes to KoL to use the shorts.
Everything that is here queries the internal database and various properties.
Let's get feedback on whether this is what is needed, before (easily) finishing.

Revision: 20425
Add ASH functions: joke_pockets, pocket_joke, and pick_pocket

Revision: 20426
No navigation link to combine RGB picels in Kingdom of Exploathing.

Revision: 20427
Expand displayed text for "help cargo". Add ASH function: pocket_set restoration_pockets()

Revision: 20428
Add Cartographic status effects

Revision: 20429
consumption data for flask of moonshine and (blueberry/bran/chocolate chip) muffin

Revision: 20430
Teach the Maximizer about the Cargo Cultist Shorts

Revision: 20431
Log taking the Downtown Train. Property "muffinOnOrder" starts aas "none"
but can be "blueberry muffin", "bran muffin", or "chocolate chip muffin",
if KoLmafia observed you ordering a muffin.

Revision: 20432
When you are about to submit a request to buy a muffin, remove the earthenware muffin tin from inventory

Revision: 20433
Don't report "unhandled redirect" to place.php?whichplace=monorail
Add a pre-gash nag if you have an earthenware muffin tin and no muffin on order
Clear muffin on order if you visit the muffin counter and it offer to make you a muffin

Revision: 20434
"" -> "none" for muffinOnOrder

Revision: 20435
Also add a nag to eat your muffin and order another, if you have a muffin in inventory

Revision: 20436
CargoCultistShortsRequest can redirect to a fight. If it does, automate it, as we do
for genie fights, chateau fights, and many others.

Revision: 20437
Since the decisions for choice 1308 are variable, look at response text, rather than option to
decide whether you just ordered a muffin. Also remove ingredients when you buy a muffin tin.

Revision: 20438
Better processing of intrinsics gained (or lost) in battle

Revision: 20439
You can't look at the previous choice respopnse if there wasn't a previous choice

Revision: 20440
Teach UseLinkDecorator about intrinsics

Revision: 20441
Don't annotae monster in Realy Browser if you cannot find the 'monname' span

Revision: 20442
Add "pockets" link to Cargo Cultists Shorts AFTER adding regular use links for pants

Revision: 20443
Bad Moon adventure "Oil Be Seeing You" is now in Pandamonium Slums rather than Deep Fat Friars Gate

Revision: 20444
Gingerbread City tracking improvments, thanks to fredg1

Revision: 20445
Added can_equip(familiar, item) to check if a familiar is able to equip an item

Revision: 20446
Fix a couple of Stats pockets in the cult shorts

Revision: 20447
Cartographic effects are shruggable

Revision: 20448
Update TCRS seeds, much thanks to 3BH

Revision: 20449
Add Map the Monsters, track Map the Monsters (_monstersMapped), track if the charge is currently active (mappingMonsters)

Revision: 20450
Properly support the preferences that I just added

Revision: 20451
When you use a tiny bottle of absinthe, start the three Wormwood counters immediately.
Do NOT set them when the charpane (or api.php) says you are Absinthe-Minded.
Include fredg1's patch to allow "counters nowarn Wormwood" to work.

Revision: 20452
Add "counter stop LABEL" to clear only counters with specified LABEL.

Revision: 20453
Improved support for IntelliJ, thanks to MCroft.

Revision: 20454
Add simple "catch" statement to ASH:
string catch STATEMENT; or string catch { BLOCK } will execute the STATEMENT or BLOCK and capture an error value,
permitting the script to continue executing.

Revision: 20455
Fix cargo shorts pocket 12

Revision: 20456
Fix the "catch" keyword in ASH returning a value.

Revision: 20457
Comprehensive Cartographic Compendium choice adventure spoilers from 3BH @ Kolmfia.us

Revision: 20458
Possible fix for null pointer reported in maximization under some circumstances

Revision: 20459
Track daily Hippy Island Farm items collected (_hippyFarmItemsCollected), thanks mgreen52!

Revision: 20460
It's _farmerItemsCollected, not _hippyFarmItemsCollected

Revision: 20461
Replace monster names in the monster map adventure with their mafia names (to disambiguate between ninja snowmen, gremlins etc) when spoilers are enabled

Revision: 20462
Add "unpicked TYPE" to "cargo count" and "cargo list" commands

Revision: 20463
Fix usage string for cargo command

Revision: 20464
Whack usage of api.php (which doesn't work in Valhalla) to avoid issues in Valhalla

Revision: 20465
Handle redirects to login.php (timein) before checking redirects from afterlife.php

Revision: 20466
Fix spoilers for choice 1428, per landamus

Revision: 20467
Fix choice 1428 for real

Revision: 20468
Robustify code to make sure standard restrictions are read whenever you log in or ascend.

Revision: 20469
in postAscension, mark that we are no long in Valhalla before refreshing the session

Revision: 20470
Radio KoL is dead. Long live Radio KoL.

Revision: 20471
Fix pocket 603 per Wiki

Revision: 20472
Do not hardcode 1000 as the length of ROnin when checking "interaction" via the charpane.

Revision: 20473
Add "cargo pick #" command (synonym of "cargo #")

Revision: 20474
Add three new functions that provide timestamp support in ASH - int now_to_int(), int date_to_timestamp( string format, string date ) and int timestamp_to_date( int timestamp, string format )

Revision: 20475
Added some quality and attribute data to statuseffects from Excavator

Revision: 20476
Add note to debug lug thanks to MCroft @ KoLmafia.us
Add more info to interpreter exception (untested).

Revision: 20477
Add Interpreter.InterpreterState enum, rather than having final string constants for state.
Soup up catch to catch captured values, script errors, and java errors

Revision: 20478
Simplify Catch: only need a single ParseNode class to handle standalone and value versions

Revision: 20479
Fix parsing "catch as a value" with a block and with an expression.
All sorts of ASH Parser cleanups suggested by IntelliJ.

Revision: 20480
Get focus for last created window as per MCroft @ KoLmafia.us. Also some lint clean up while we're there.

Revision: 20481
Add svn.fail.on.error build property per Mcroft

Revision: 20482
Only recalculate COncoction stat gains if your class has changed since last time.

Revision: 20483
Simplify setting of classname/classtype. Recognize Plumber.

Revision: 20484
Dirty Pear doubles bonus sleaze damage

Revision: 20485
gCLI login command error handling

Revision: 20486
Close Hot Key for standard windows (ctrl/cmd-w)

Revision: 20487
OSX Badge Icon support check

Revision: 20488
Change Maxmimizer filters from radio buttons to checkboxes (multi-type filtering)

Revision: 20489
retro superhero cape

Revision: 20490
Added tracking for the retro cape configuration, added skills (only equipment-based skills are currently gated), added modifiers based on cape configuration

Revision: 20491
Macro followed by item not found not aborting as expected.

Revision: 20492
Added retrocape CLI command and fixed bug in cape config tracking

Revision: 20493
Added retrocape CLI command class

Revision: 20494
retrocape skills depend on preferences

Revision: 20495
Fixed potential security issue

Revision: 20496
Update Maximizer Equipment Scope in Preferences

Revision: 20497
Optional radio-button style functionality to maximizer filter checkboxes

Revision: 20498
Fix restricted access to some files since
Revision: 20495

Revision: 20499
The Knoll is not available in Gray Goo. Thanks to fredg1 @ kolmafia.us

Revision: 20500
Just as we no longer compare the displaed item name with the actual item name from items.txt when parsing results, do not compare parsed effect name with effect name in statuseffects.txt

Revision: 20501
Maximizer for CLI should not create things.

Revision: 20502
Need to sort scrap, meat, and poem pockets rather than return initial set since
they could have been filetered (unpicked, for example)

Revision: 20503
maximizer with createOnHand pref NPE fix

Revision: 20504
Added directory for external jars needed to build KoLmafia src, build file to include them and rhino jar in anticipation of other changes to come momentarily.

Revision: 20505
Support for KoLscripting in Javascript. Thanks to ikzann @ kolmafia.us

Revision: 20506
Better step3 detection for Spookyraven Manor thanks to fredg1 @ Kolmafia.us Untested (by me).

Revision: 20507
Added documentation to ItemProxy. Planning to add documentation like this to all of the ProxyRecordValue classes and use them to generate documentation for the wiki and for JS typing.

Revision: 20508
handle multiple loc= lines in the same counter when reading prefs.

Revision: 20509
ikzann's fix to allow certain scripts to work

Revision: 20510
Update .classpath for those environments that use it and the "new" build convention. ikzann @ kolmafia.us

Revision: 20511
Correctly convert anonymous RuntimeLibrary records to JavaScript POJOs

Revision: 20512
Fix ProxyRecords returned from other ProxyRecords in JS (this and the last commit by ikzann)

Revision: 20513
itemDrop

Revision: 20514
Adds "jsref" command, an analogue of "ashref" for the JavaScript integration
Also does some things IntelliJ suggested that seemed smart

Revision: 20515
Monorail spoilers. Lightly tested. Thanks fredg1 @ kolmafia.us

Revision: 20516
fixes the bad error message when using a nonexistent function in javascript ikzann @ kolmafia

Revision: 20517
Fix data errors detected by checkitems and checkeffects

Revision: 20518
Slay the Dead cleanses an additional evil in the Cyrpt.

Revision: 20519
added help target
updated notes target to pure ANT task

Revision: 20520
This is a big patch to set up consult scripts, "lifecycle" scripts (choiceAdventureScript, betweenBattleScript, etc.), and combat filter functions. I think this mostly completes the refactoring to pull all the non-ASH-specific stuff apart from the ASH code, but it's still a little bit messy. From ikzann

Revision: 20521
Implement `require` so that ash and other JS scripts can be imported in JavaScript. Thanks @ikzann.
Also I fixed a few minor IntelliJ code analysis issues

Revision: 20522
build.xml changes to support new src/jar model
fixed ant exec and ant javadoc targets
added ant test to dist target dependencies

Revision: 20523
This patch should handle relay scripts correctly, both override scripts and those from the menu. Notably, in order to avoid breaking backwards compatibility with e.g. Guide, I've added a new GET argument to the relay menu scripts that triggers execution of any relay_x.js script vs simply returning it as a JS file. Guide calls its main JS file "relay_Guide.js." Thanks @ikzann

Revision: 20524
Several fixes for require. Thanks @ikzann

Revision: 20525
Improve enumerated type equality in JS. Thanks @ikzann

Revision: 20526
fixed issue with maximizer equipment scope not applying

Revision: 20527
Update to SVNKit 1.10.2 by using their jars instead of compiling their source. Some lint in SVNManager and replace a deprecated SVNKit call.

Revision: 20528
Fixes some bugs with argument inversion on library functions, and some type conversion issues. It also reworks some of the proxy record code to work in a more consistent way. Thanks @ikzann

Revision: 20529
Moves the standard library onto require("kolmafia") instead of a global. It also fixes some of the interrupt problems. Thanks @ikzann

Revision: 20530
Reintroduce some missing imports that break the build

Revision: 20531
Oh it was just files missing. Whoops!

Revision: 20532
Fix NEP quest tracking spoiler

Revision: 20533
Better detection of multi-step crafting. Thanks to fredg1

Revision: 20534
Added FlatLaf Themes (17 Light Themes and 43 Dark Themes) to Look and Feel Dropdown
Updated several elements to support light and dark themes

Revision: 20535
Tweaked size of AdventureSelect countField

Revision: 20536
Update smoresEaten correctly (Xande1 @ kolmafia.us) and some lint.

Revision: 20537
Fix Javascript sandbox as per ikzann

Revision: 20538
Exclude Path of the Plumber from traincost (thanks Philmasterplus)

Revision: 20539
Added "sword" keyword to maximizer, equivalent to the "club" keyword, but for swords.

Revision: 20540
Add Ghost of Crimbo hatchlings and box o' ghosts items
Add familiars and make them updat eachothers' experience counters, ensure they cannot equip things
Add effects from Ghost of Crimbo Carols
Update Ghost Dog Chow to recognise not being consumed when used on a Ghost of Crimbo

Revision: 20541
Parse skills from the charpane by id first, name as a fallback. Thanks @philmasterplus

Revision: 20542
Add first three days of 2020 advent calendar items
Use the `event(December)` modifier expression in some places where `Various` was being used instead
Apply `event(December)` automatically to newly discovered items whose modifiers only apply in December (previously December was being picked up as a Class)
Fix missing tab in some of the items I added for the December IoTM in a previous revision

Revision: 20543
Delete htmlcleaner source and replace with htmlcleaner-2.24.jar

Revision: 20544
Make adventure count field wider, thanks to philmasterplus

Revision: 20545
Create and set _gingerbreadClockVisited - fredg1 - Untested by me :)

Revision: 20546
Use more soothing colors for sidebar in dark mode (tnx philmasterplus)

Revision: 20547
Provide nicer darkmode colors for Location Details panel. I didn't even know we had a location details panel. now I do, and it looks better in Darkmode.

Revision: 20548
Address some hiccups in parsing charsheet for skills as per philmasterplus.

Revision: 20549
Pixie charge does not increment when you have the absinthe-minded effect active

Revision: 20550
Fix JS-based relay scripts. Thanks @philmasterplus!

Revision: 20551
Fix bug so that Slay the Dead evilness effect is registered correctly

Revision: 20552
Update .classpath gfor htmlcleaner.

Revision: 20553
More skills from charsheet tweaks.

Revision: 20554
Disambiguate some same named skills.

Revision: 20555
* Support retrocape in the Maximizer. NOTE: the retrocape command now equips the cape as well as reconfiguring it, bringing it in line with other similar commands like snowsuit and edpiece.
* Reset the retrocape prefs on ascension
* Fix typo in the status of one of the Ghosts of Crimbo as a stat0 familiar
* Add throne info to the other Ghosts of Crimbo

Revision: 20556
This effectively reverts
Revision: 20458

Revision: 20557
Stdlib fuctions fix for JS from philmasterplus

Revision: 20558
Fix a JS problem with importing ASH scripts that overload functions - ikzann

Revision: 20559
Some items and effects, mostly Crimbo 2020

Revision: 20560
Scrollable Filtered Lists (like Maximizer Results and adventure select) now use a - sign in the first character as an indicator to omit the search term (like google search)

Revision: 20561
Fix for js access to proxy records - ikzann

Revision: 20562
Maximizer tweak to deal with reduced scores (and test that fails without the fix and works with it!) Ryo_Sangnoir

Revision: 20563
Recalculate adjustments at start of maximization and refactored tests - Ryo_Sangnoir

Revision: 20564
Categorize HP/MP restorers in the auto-restoration panel (thank you, philmasterplus)

Revision: 20565
Fix Text Colors panel in Options (thanks, philmasterplus)

Revision: 20566
new command is_dark_mode for Ash (philmasterplus)

Revision: 20567
jsref filter now case insensitive, like ashref.

Revision: 20568
soolar's Maximizer keyword bonus enhancement

Revision: 20569
monospaced font for mushroom plot - philmasterplus

Revision: 20570
Add thee drive buttons. They are a mutex group. Items for donated stuff. Government shipments
cannot have an inline use link. Spread Crimbo Cheer choice can be walked away from

Revision: 20571
Crimbo Town 2020

Revision: 20572
Re-added @Veracity's the mutex group for crimbo drive buttons

Revision: 20573
Forgot to add some files

Revision: 20574
plurals

Revision: 20575
Reintroduce familiar weight parsing for familiars you haven't used yet

Revision: 20576
Fix Bee capitalization

Revision: 20577
Show +candy next to +food and +booze in the sidepane hover popup. Thanks @kalaleq!

Revision: 20578
Correctly track ghost max base weight, and add a getMaxBaseWeight function to FamiliarData to do so

Revision: 20579
- New crimbo skillbooks (one has a typo which we can just update when they fix)
- Remaining crimbo coinmaster items
- Add overflowing gift basket to breakfast
- Add summon skills to breakfast skills
- Add free rest skill

Revision: 20580
updated subscription cocoa dispenser to tradeable per wiki and user requests

Revision: 20581
New type of lifecycle script that can run when you click a player in the Chat interface. The script takes playerName (string), playerId (string) and channel (string)

Revision: 20582
Fix coinmasters.txt for crimbo 2020 stores

Revision: 20583
added monsterid to predicates for Combat Macros (per kol wiki)

Revision: 20584
Fix data files and associated test thanks to Ryo Sangnoir

Revision: 20585
Crimbo stuff

Revision: 20586
A quick test that checks field counts in internal data files. Useful because it will catch space instead of tab errors faster than the various check commands.

Revision: 20587
Add some of the svn delete activity logging to the session log. Untested.

Revision: 20588
tiny plastic Penny

Revision: 20589
More logging for svn deletes.

Revision: 20590
bumped version for combat macro helper to 1.5

Revision: 20591
add CharSheetRequestTest and data files
add DebugDatabaseTest for tests that are working

Revision: 20592
overflowing gift basket is reusable

Revision: 20593
* Support coat of paint IotY
* Refactor the way we check items whose modifiers change from time to time which are, as a result, now updated when you visit the item description
* Add spading hook for when you visit an item description for an item that changes from time to time
* Minimal support for the crystal ball (no mechanics but they're in items.txt and stuff)

Revision: 20594
plurals

Revision: 20595
Fix afterlife.ash to get map friles from "data".

Revision: 20596
Support crystal ball predictions
Currently any existing prediction is invalidated when a new encounter is... encountered. Then if the end of that encounter results in a new prediction, we log it. If spading lets us hone this then the predictions will probably just get better while the API for users of scripters will remain the same.

Revision: 20597
Happy New Year!

Revision: 20598
Some code tidying
* Removed unused imports across codebase
* Fixed last dangling jsdocs and fixed a typoed copyright

Revision: 20599
More code tidying
* Remove unnecessary escapes in regexes
* Remove unnecessary type casting
* Remove unnecessary StringBuilding
* General semi-automated code deduplication and simplification

Revision: 20600
Yet more code tidying
* Private members need not be final (they cannot be overridden)
* Many members could be made final and so were
* Made some unnecessary arguments into local variables
* Simplified some unnecessary conversions of strings to strings
* Removed extra semicolons

Revision: 20601
Add some excavator data
* Mosquito is a bug
* Crimbo skillbook food/candy/booze effects are good and hookahable
* Chubby and Plump bean is worth a whole simple candy
* They fixed the spelling mistake in Twist and and Eye and so shall we

Revision: 20602
Apparently this doesn't work on CI even though it works on my PC

Revision: 20603
Adjust fortune teller Standard checking to match KoL's name

Revision: 20604
Added serialVersionUID. Might temporarily break adventure and queue persistance but that didn't happen in limited testing.

Revision: 20605
Some more InteliiJ lead improvements, this time taking advantage of all the most modern Java syntax up to Java 1.8

Revision: 20606
* Update the skill types for the crimbo summoners
* Track cocoa dispenser daily usage (_cocoaDispenserUsed) and add it to breakfast items
* Track universal seasoning daily usage (_universalSeasoningUsed) and current status (universalSeasoningActive)
* Some small changes based on IntelliJ analysis

Revision: 20607
Revert 20605

Revision: 20608
Added another serialVersionUID. Might temporarily break adventure and queue persistance but that didn't happen in limited testing.

Revision: 20609
Escape some text in JS error messages - philmasterplus

Revision: 20610
Adventure range for bowl full of jelly & eye with a twist, monsterid for Sssshhsssblllrrggghsssssggggrrgglsssshhssslblgl

Revision: 20611
Fix modifiers typo - Ryo_Sangnoir

Revision: 20612
Crimbo Town is gone

Revision: 20613
Added a test to maybe catch a static cause of a compareTo contract violation for Concoctions. Lint on anither test.

Revision: 20614
Started tracking daily limits for usable items in a data file instead of code. There's lots more work to do on this (support spells/food/booze/spleen, use this list to set the props on use too) but it should make adding daily use limits a lot easier! And now you can use maxdailyuses on usable items.
Also support holidays in modifier_eval (through `event`) though I didn't use this in the daily limit stuff in the end.

Revision: 20615
Daily Deeds patch (text bug plus refactoring)

Revision: 20616
Ascension Rewards - thanks to Ryo_Sangoir

Revision: 20617
Tweaked test but still doesn't run. 10K by 10K by 10K is too many combos for my system.

Revision: 20618
Crystal ball fixes
* Support crystal ball message now appearing at the beginning of combat
* Support bold tags around predicted monster name
* Support one missing prediction string

Revision: 20619
Commerce Ghost further support
* Track the item the ghost of commerce asks you for
* Track the commerce ghost item quest being completed
* Add a "from mall" modifier to the "buy" command to force buying from the mall if possible

Revision: 20620
Remove valueOf() as per philmasterplus

Revision: 20621
Mark some effects with "nopvp" that were missing it

Revision: 20622
* Add correct max for pump up high tops and add a key to the top of the dailylimits.txt file
* Add an increment function to DailyLimitDatabase - it would be great to eventually use it!

Revision: 20623
Rename crimbo20 cafe consumables & lower ranges, mark as Unspaded as wiki appears incorrect

Revision: 20624
* Recognise items, skills and effects from the new IotM
* Track daily use of every skill (int "_feel<emotion>Used")
* Track last monster that meets criteria for nostalgia

Revision: 20625
* Make the emotion skills actually available to cast
* Change the nostalgic monster prop from "feelsNostaligcMonster" to "feelNostalgicMonster" and reset it on ascension
* Remove some duplicated items in items.txt

Revision: 20626
More fixes for Emotionally Chipped
* Added the banisher for Feel Hatred
* Track the combat skills properly (previously were looking for them to be cast like regular skills!)
* Add default acquisition commands for the effects

Revision: 20627
Fix Item.seller and Item.buyer throwing errors in JavaScript (thanks @philmasterplus)

Revision: 20628
get_stash() no longer checks existence of a shop instead of clan stash (thanks @philmasterplus)

Revision: 20629
Special case bufferToFile so it works from JS (by converting the first string param to a buffer (thanks @philmasterplus)

Revision: 20630
Add spoilers for Decorate your Tent

Revision: 20631
Track multi-casting of emotion skills

Revision: 20632
ash put_shop() enhancement to allow the quantity param to take a float and convert it to an int instead of using the bitwise representation of a float as the quantity to put in the shop.

Revision: 20633
https fix for ircm_extend solves 2nd space in search element issue for inventory (h/t Philmasterplus

Revision: 20634
Recognise "You, Robot" and limit consumables accordingly (thanks @dark_adonis)

Revision: 20635
* Parse "You, Robot" scraps and energy, show them in the mafia UI
* Make them accessible via ash (my_robot_scraps(), my_robot_energy())
* Do not visit the campground when in "You, Robot"
* Define prefs for tracking body parts (coming soon!)

Revision: 20636
Add missing change for recognizing Robot (thanks @dark_adonis)

Revision: 20637
* Store the robot configuration as a number (except CPU upgrades)
* Apply modifiers from robot configuration
* Parse robot configuration from charpane, reassembly station and on session refresh
* Disallow potion taking, equips and familiars if player isn't configured for them

Revision: 20638
* "Energy" and "Scrap" modifiers for indicating how much energy and scrap is awarded at the end of each fight

Revision: 20639
Do not check the vote monster counter if the voting booth is not accessible (i.e. in standard 2021+)

Revision: 20640
Fix the CPU upgrade regex

Revision: 20641
Robocore needs to update status from the charpane (for now? I've put in a request)

Revision: 20642
No Guild in Robocore

Revision: 20643
Actually added the energy and scraps functions to the scripting runtime library, and added a function to let you know if you can access a guild in your current ascension.

Revision: 20644
Fix energy matcher

Revision: 20645
Moved robocore into if/else group for charpane to prevent DBs from failing having too many additional status labels and crashing.

Revision: 20646
Track `statbotUses`, `_chronolithActivations` and `_energyCollected`
At the moment we don't know a good way to correct your energy collected (it seems to be randomized?) so we just dumbly increment the existing value

Revision: 20647
Add robo-battery item

Revision: 20648
You, Robot skills. Thanks @Ryo_Sangnoir

Revision: 20649
Added council text (thanks @cat from Discord!)

Revision: 20650
Recognise that slots/familiar have been unequipped when you change robot configuration to one that does not support them

Revision: 20651
Fix Your Campfire requests not being processed from the relay browser

Revision: 20652
Add another overload to can_equip - can_equip(familiar) tells you if it is possible under your current restrictions to equip a given familiar. Note that it doesn't check if you actually have the familiar.

Revision: 20653
Torso Awaregness -> Torso Awareness

Revision: 20654
Decorating your tent consumed a burnt stick

Revision: 20655
Track questM05Toot having been finished by its absence from the quest log

Revision: 20656
Add a TutorialRequest to track the Toot quest without refreshing your questlog

Revision: 20657
Potted Power Plant Support
* Add items (+ recipes)
* Track stalk status ("_pottedPowerPlant")
* Add Shocking Lick skill, track charges ("shockingLickCharges") and uses (untested)
* Allow "notes" for non consumables to be displayed in the inventory list renderer
* Support path function in restore expressions
* Add item effects and restores
* Support harvesting batteries in breakfast ("harvestBatteries{Soft,Hard}core")

Revision: 20658
You, Robot fixes
* Add bosses to the monsters database
* Fix reading scraps > 1000
* Do not need a Wand of Nagamar
* Fix tracking hats and familiars
* Restore skills and campsite after freeing the king

Revision: 20659
Batteries are consumed on use

Revision: 20660
Added nosmash to some items that were missing it. Thanks @philmasterplus

Revision: 20661
Do not unescape JS scripts. Warning - this may break some js scripts, just use the &escapedform; instead. Thanks @philmasterplus.

Revision: 20662
Better tracking for slot to equip a Powerful Glove. THanks @dark_adonis, we'll see if this works.

Revision: 20663
macrame net -> hemp net

Revision: 20664
Track shocking licks even if they deal damage instead of instakilling

Revision: 20665
New content for St Yuley Tide's Day

Revision: 20666
Changes displayed memory label from KB to MB

Revision: 20667
Fix some tab vs space typos discovered by a ailing test :)

Revision: 20668
Fredg1's fix for some mistakenly labelled items.

Revision: 20669
fleetwood mac 'n' cheese doesn't take a turn to craft

Revision: 20670
Support for backup camera IotM

Revision: 20671
Spectral Pickle Factory -> The Spectral Pickle Factory

Revision: 20672
Update some code so that non-fancy Pastamastery recipes are supported

Revision: 20673
Prevent locations not present in combats.txt from causing an NPE when you try to read their native combat rate

Revision: 20674
Reset backup camera prefs on ascension

Revision: 20675
Fix some small robo bugs

Revision: 20676
When converting ash functions to camel case for JavaScript, better handling for unusual snake-casing (see https://kolmafia.us/threads/javascr...f-function-name-has-leading-underscore.25939/)

Revision: 20677
Warn the user if they try to grind more than 23 sausages in a day - this can be an expensive typo otherwise.

Revision: 20678
Added a get_workshed() function to the runtime library (thanks 3BH!)

Revision: 20679
Fix typo in Do You Crush What I Crush modifier string

Revision: 20680
Add my_session_results() function to the runtime library which you can use to see how many pirate insults, hobo parts, and other pseudo-items you have acquired this session

Revision: 20681
Fix swim laps and sprints for degenerate players with so many stats they break 1k laps

Revision: 20682
Track daily Poke-Grow Fertilizer drops (because there are max 3)

Revision: 20683
Default backupCameraMode is "meat" on ascension

Revision: 20684
Track yellow pixels dropped by the Puck Family when enthroned or enbjorned

Revision: 20685
Searching the mall for an item name that refers to multiple items one of which is untradeable resulted in a non-response. So, that's fixed!

Revision: 20686
Don't silence stdout as per Obeliks

Revision: 20687
cli color support as per Obeliks

Revision: 20688
Update jar file

Revision: 20689
Make HTTP request headers case insensitive -- thanks Fredg and Philmaster+

Revision: 20690
clipboardPatchFile

Revision: 20691
Use KoLAdventure.lastVisitedLocation() to check for Guzzlr progress instead of KoLAdventure.lastLocationName because the former will still match even if you're fighting an attunement tentacle

Revision: 20692
DMT choice counting is nothing to do with the monster that is being fought, its just basic delay on the zone (i.e. wanderers/tentacles do decrement it and copies of DMT monsters fought outsode of the zone do not)

Revision: 20693
Get the maximizer to consider changing mode on the backup camera

Revision: 20694
Fix typo in choice adventure 1433 spoiler

Revision: 20695
Use try-with-resource in Checkpoints. Thanks to @fredg1 for the initial work

Revision: 20696
Some changes to maximum item use data surfacing
* RestoresDatabase now uses UseItemRequest's maximumUses function for item restores
* $item dailyusesleft record now uses UseItemRequest's maximumUses function

Revision: 20697
Incorrect item id for the charged druidic orb. Thanks @fredg1

Revision: 20698
Added some additional static and non-interrupting request types (thanks @fredg1)

Revision: 20699
Correctly parse damage from an unusual spelunky shotgun hit message

Revision: 20700
Unversion ide specific files.

Revision: 20701
Handle single-cast skills that don't cost MP

Revision: 20702
Two small fixes from @fredg1. Something was probably broken with defeating lolmec before this patch.

Revision: 20703
Add try/catch around AnsiConsole.systemInstall().
I didn't add any tests for this, but I did check that it initializes
(falling back to default behavior with no colors) if I throw an
unconditional exception beforehand, and it continues to compile and
provide me with colors if I don't have that exception in place.

Revision: 20704
Catch LinkageErrors in KoLmafiaTUI.
Errors are not exceptions, and _usually_ should not be caught. This
case is recoverable.

Revision: 20705
Simplify G-Lover and Beecore checks, apply them to harvesting batteries

Revision: 20706
Revert to
Revision: 20704

Revision: 20707
* Do not try to use portable power plant in G-Lover
* Do not show sweet synthesis when "spleen" is filtered out of maximizer

Revision: 20708
Have a fresh perspective on price for each alternative effect source in the maximizer

Revision: 20709
Multi-using batteries gives a corresponding number of Shocking Lick charges

Revision: 20710
Handle modifiers that cannot be applied to Left-Hand Man or Disembodied Hand, do not apply them for the maximizer either

Revision: 20711
Initial support for the short order cook

Revision: 20712
Add scrolling to the Scripts menu

Revision: 20713
Add arena rank for short order chef
Harvest batteries in breakfast by default

Revision: 20714
Update some modifiers for the shorter-order chef

Revision: 20715
* Expand width of script scroller to match widest item
* Show 25 scripts at once not 15

Revision: 20716
Add madcarew to authors.txt (a little late!)

Revision: 20717
Green Rocket no longer available on Dependence Day

Revision: 20718
Allow deferred checks in Checkpoint.
I'm actually not sure if this is necessary, but it accurately replicates the behaviour we had before we moved to try-with-resources

Revision: 20719
Fix NPE in UseItemCommand

Revision: 20720
Fix breakable equipment breakage not registering on familiars
setEquipment needs to setItem on the KoLCharacter.currentFamiliar. It used to do this until it was accidentally removed ~10 months ago.

Revision: 20721
Support for Quantum Terrarium challenge path

Revision: 20722
Marked two items as simple candies

Revision: 20723
Restore the familiar popup menu and show favorite familiars as icon grid instead of giving them 1 row each

Revision: 20724
Fix 3 missing favourite familiars and tooltip remaining on no familiar

Revision: 20725
Allow relay requests to begin with https:// when validating the referer as the user could be reverse proxying the relay browser with ssl

Revision: 20726
Added path rewards for QT

Revision: 20727
Add snapper command and error out if you try to use it (or the Grim Brother command) in QT

Revision: 20728
Add plural to quantum of familiar item

Revision: 20729
Stop infinite loops on Quantum Terrarium requests

Revision: 20730
Fix snapper command for mer-kin

Revision: 20731
Grim Brother and Red-Nosed Snapper now usable in Quantum Terrarium

Revision: 20732
Refactor Phylum parser to accept doubles and allow the use of "merkin" without a hyphen

Revision: 20733
Add missing line from last commit

Revision: 20734
Use iterators when managing ScriptMRUList,

Revision: 20735
Fix have_familiar and other issues where maifa thinks you have a familiar in your terrarium because you saw it during QT

Revision: 20736
Aloow runtime library functions that are called with a named reference to another callback function (i.e. combat filters) to be supplied a function as an argument in JavaScript
e.g.
```js
adventure(1, Location.get("The Dire Warren"), (round, monster, page) => "attack");
```

Revision: 20737
stained glass shiv used to be a ranged weapon, now it's a melee weapon. updated req. stat to match current desc (and make it a meelee weapon).

Revision: 20738
JavaScript combat macros can now be executed with access to their parent scope
Tested against this bit of code working, which now does.
```js
const { print, adv1 } = require("kolmafia");
const runAdventure = (action) => {
let monster = null;
adv1(Location.get("The Dire Warren"), 1, (round, m, text) => {
monster = m;
return action;
});
print(monster);
};
function main() {
runAdventure("runaway");
}
module.exports.main = main;
```
ote that the macro is able to access `action`, and to change the value of `monster`.

Revision: 20739
Do not check Quantum Terrarium if player is in a fight or choice or other chained adventure that denies access to other pages

Revision: 20740
Add default params for adv1 such that, if omitted, the second parameter is -1 and the third is ""

Revision: 20741
Add spoilers for boxing day spa effects

Revision: 20742
Fixes issue where peeking at the choice adventure for abandoning a Guzzlr quest ruins platinum quest tracking

Revision: 20743
When considering overwrites triggered by SVN, match directory and file name, not just file name. Limit scope on some script searches.

Revision: 20744
Slime Hates It still applies in Noobcore

Revision: 20745
Make cultist shorts monsters as NOCOPY

Revision: 20746
Imported files added to Parser.imports too late to prevent circular reference - tnx Fredg

Revision: 20747
Some QT fixes

Revision: 20748
Support for familiar scrapbook

Revision: 20749
Fix Quantum Terrarium Request parsing breaking on melodramedary

Revision: 20750
Familiar scrapbook missing from equipment.txt

Revision: 20751
Consider experience percentage modifier when maximizing for experience, assuming that the monster's base exp will be the player's level * 2

Revision: 20752
Rename `feelNostalgicMonster` pref to be named `lastCopyableMonster` (remember, commit releases don't make any promises for consistency - change your scripts!)

Revision: 20753
Improve stat mod accuracy
* Make mafia's calculation for expected stat gain (e.g. from `numeric_modifier("Muscle Experience")`) much more accurate
* Make calculations for said modifiers consider mime army insignias
* Use same calculation for estimated base experience from a monster for maximizer and the idle modifier calculator
Next step is to consider stat-tuners in the maximizer!

Revision: 20754
Fix bonus ML being considered bad for stat gain
The function for calculating base exp sitting in KoLCharacter was subtracting instead of adding bonus ML and as such reusing it in the maximizer caused that issue to surface in a more well used area of the project.

Revision: 20755
More stat estimation fixes for the maximizer!

Revision: 20756
Track ensorcelee and its modifiers when in Dark Gyffte. Better late than never!

Revision: 20757
Clean up configurables in the maximizer

Revision: 20758
Apply vampyric cloake ensorcel bonus to character and in maximizer for Dark Gyffte

Revision: 20759
Show your boring familiar pictures is a 100 turn banish that is not reset on rollover

Revision: 20760
Catch familiar scrapbook activations in the correct place.
I had previously moved this in testing - I'm sure you can get it to show up outside of a familiar action, but maybe something changed, or maybe something else is going on

Revision: 20761
Remove both crop and seed of previous garden when using a new one

Revision: 20762
Add 'logPreferenceChangeFilter', which is a comma separated list of preferences to not log when logPreferenceChange is enabled

Revision: 20763
Only assess a request for whether we should check the next familiar in QT if it is not a redirect
Also fix flashing familiar icon after each turn

Revision: 20764
Define some extra non-interrupting requests. Thanks @fredg1

Revision: 20765
Make slots and stats into proper proxy records just to make JS casting easier

Revision: 20766
Clear familiars after a QT run (and keep track of quantumPoints for those interested)

Revision: 20767
I feel like I've earned this :)

Revision: 20768
Set "already used this today" Tunnel of LOVE decision to automatically be leave and stop accidentally getting locked in it

Revision: 20769
Add missing crystal ball prediction string

Revision: 20770
jsref recognises JS camel case functions

Revision: 20771
Refactor Eudora support, add new function `eudora_item` which gives you the item used to unlock the current eudora

Revision: 20772
Add underwater familiar support to the Robortender

Revision: 20773
Revert "Add underwater familiar support to the Robortender"
This reverts commit bb035b5ea9c336f4f7e10eec07dd75167aadcfe5.
The commit in question broke the build, as noted by several others.

Revision: 20774
Add underwater familiar support to the Robortender

Revision: 20775
Add three missing skills from 2021 standard reward items

Revision: 20776
Added some error handling for sweet synthesis if the inventory is out of sync

Revision: 20777
And now do the same without spelling and grammar errors :)

Revision: 20778
Add is_casual() function that returns value from api.php, untested

Revision: 20779
Fix misplaced space typo

Revision: 20780
JavaScript runtime no longer interrupts when library functions return false

Revision: 20781
Add more familiar types to shorter-order cook

Revision: 20782
Initial support for July IotM

Revision: 20783
Check for null ensorcel Modifiers in applyVampyricCloakeModifiers() to handle phylums not listed in modifiers.txt

Revision: 20784
Use correct firework price

Revision: 20785
Clan Fireworks Shop is not a coinmaster, so treat it more like the General Store and remove coinmaster handling

Revision: 20786
Fix nemesis quest "started" tracking. Thanks @philmasterplus

Revision: 20787
Check the correct floor of the VIP lounge for the fireworks shop

Revision: 20788
Add some substat ranges etc to previously "unspaded" consumables

Revision: 20789
Improve retrocape conditional skill handling

Revision: 20790
Chest X-Rays still expend a charge when used against a boss or special monster

Revision: 20791
Allow user to configure safety margin used in the basement overlay

Revision: 20792
Only check 1/day purchases on the actual fireworks shop page

Revision: 20793
Add explosive equipment to equipment.txt

Revision: 20794
Manually multicast Invisible Avatar

Revision: 20795
Improve fireworks shop handling
Visits the shop for you so that KoL recognises that you have one

Revision: 20796
Add runtime library functions `clear_food_helper()` and `clear_booze_helper()`

Revision: 20797
Add user_prompt command for asking for text input from the user at runtime
There are three functions currently:
* `string user_prompt(string message)`
* `string user_prompt(string message, int timeoutInMillis, string defaultValue)`
* `string user_prompt(string message, aggregate options)`
Note two things:
1. There is not currently a timeout-able option select function. It's harder to do so I've left it for now
2. Whatever type of aggregate you pass as options you will get a string in return. This could be changed in the future

Revision: 20798
Something broken in GN, now not broken. Thanks @Phillammon

Revision: 20799
Fix cancel button on user_prompt popups

Revision: 20800
Add meteorite fragment items pulverize data

Revision: 20801
`string_modifier`'s first arg can be an item. Always could have been.

Revision: 20802
Track whether KGB flywheel is charged (so we can be sure of the +11 clicks)

Revision: 20803
get_workshed() null check

Revision: 20804
Fix negative weight buddy-bjorn and crown-of-thrones in maximizer being ignored if those items aren't currently equipped. Add "bonus-carry" keyword which gives a bonus to that familiar being carried in crown or bjorn same as the bonus keyword for equipment

Revision: 20805
Backout 20804, more testing is required as it wasn't working consistently

Revision: 20806
Don't warn about buying a Red Zeppelin ticket in Way of the Surprising Fist

Revision: 20807
Support for Our Daily Candles

Revision: 20808
Consider Ew the Humanity and A Beastly Odor in combat data calculations
This is assuming it adds 2 copies of the phylum like the snapper. If that's wrong we just need to change the number

Revision: 20809
Handle queue tracking for crystal ball monsters better

Revision: 20810
Handle queue tracking and appearance_rates for saber forces

Revision: 20811
Make items.txt consistent with equipment.txt.
There were a few items that were incorrectly formatted, and one that
was missing outright (Abracandalabra).

Revision: 20812
Add actual power for Abracandalabra.
Thanks, Rinn!

Revision: 20813
Fix eudora matching in Valhalla decorator

Revision: 20814
Fix more nemesis quest tracking (thanks @philmasterplus)

Revision: 20815
Reverse Yoda-style comparisons in Parser.java.
Courtesy of fredg1 at kolmafia.us, as part of a broader refactor as
part of adding language server features for ASH.
In particular, this is useful in Java for null-safe comparisons, at
the expense of code that reads more awkwardly. (It's often widely used
to avoid accidentally performing an assignment instead of an equality
check.)
we've looked at the logic for Parser.currentToken() and concluded that
it can never return null; thus, this should be a safe change to make.
As an added bonus, fredg also fixed a potential NullPointerException
in Parser.parseJavaFor in making this change across the board.
This will be useful in simplifying a follow-up change that refactors
Parser to use Line and Token classes.

Revision: 20816
Add a rudimentary ParserTest.
This tests whether a provided script is well-formed, and if not, what
error message is raised.
This also disables a couple of very slow ConcoctionTest cases, and
upgrades JUnit to 4.13 for access to assertThrows.
(I have no objections to upgrading to JUnit 5, but my impression is
that we'll need to rewrite our tests for that. If we want to do it, we
should do it sooner rather than later.)

Revision: 20817
Add an ASH string template test.
Courtesy of fredg1 @ kolmafia.us.

Revision: 20818
Add coverage targets via OpenClover.
Some notes:
As commented in build.xml, invoke this via
ant -lib lib/testjar coverage clover.report
This will recompile all the files with coverage by adding
instrumentation after each statement, then generate a coverage report
that can be viewed at clover/clover_html/dashboard.html. You may need
to `ant clean` first to remove non-covered class files.
You must manually specify -lib to include clover.jar in Ant's
classpath, as was strongly recommended by OpenClover's installation
guide. (The alternatives were either "install clover manually into
Ant's default classpath" or "edit the build.xml to use a
less-comprehensive <clover-instr> command"; both of these seemed much
more intrusive than requiring an extra runtime flag.
Also as noted in comments: OpenClover is unable to perform
statement-level instrumentation for methods that are too large, due to
a JVM limitation (bytecode for methods must be <= 64K in size). This
applies to two classes, which incidentally don't have any test
coverage anyways.
I've attempted to separate out the coverage targets to minimize impact
on non-coverage builds, but please file a bug or otherwise let us know
if this is not the case.

Revision: 20819
Add some string parsing tests.
Courtesy of fredg1 @ kolmafia.us.
Note that plural typed constants as well as (singular?) typed
constants are also handled by Parser.parseString.

Revision: 20820
Clarify message when an effect does not have a specific method to uneffect.

Revision: 20821
Add Clover optimization.
This actually does two things to speed up coverage builds.
First, it tweaks the weird javac srcdir / destdir that I needed to set
up in order to get all the files to be properly instrumented, such
that Ant's heuristic for detecting whether files have changed
succeeds. As a result, for new coverage runs, we no longer need to
rebuild everything from scratch.
Second, this enables Clover's "test optimization" (which I maintain
would be better named "test caching") which caches test results and
skips any unchanged tests.
Anyone using the previous `ant coverage` command should get this for
free.
Note that if you get into a weird scenario where Clover is
consistently unable to optimize tests, you may need to delete
.clover/coverage.db.snapshot before rerunning.

Revision: 20822
Fix coverage issues with last commit.
The previous commit seems like it resulted in some backsliding in
behavior, namely we lost instrumentation of code files if we did a
clean recompilation of the source files.
I've checked multiple times that this continues to instrument the
files in question from a clean build as well as from an incremental
build.

Revision: 20823
Two tests because I wanted to. KoLDatabaseTest is in Google Java format if anyone is curious. The changes to KoLDatabase were suggested by a lint analysis and a null check was added because the absence broke the first iteration of testing. coverage++

Revision: 20824
Add more Parser tests, courtesy of fredg1.
This also adds some tests of `script` / `import` in ASH.

Revision: 20825
Add more string / typed constant parsing cases.
Again, courtesy of fredg1.
Note that a number of test cases are commented out, as we anticipate
their corresponding error messages will change (for the better, in
many cases) as a result of the upcoming Parser.java refactor(s).

Revision: 20826
coverage++ There are opportunities to make RollingLinkedList more robust but since KoLmafia seems to behave without them they were not done (yet).

Revision: 20827
Only coerce map keys for Javascript, not values.
JS object keys are only representable with certain types, but their
values are not.
There will continue to be some ASH types that can't be represented,
such as item[ item ]. This should be viable if we use JS Maps instead,
but I haven't tried that out..

Revision: 20828
coverage++

Revision: 20829
Fix the check for whether you can use experimental carbon fiber pasta additive

Revision: 20830
A bunch of support for the Wildfire path
All that is missing is the new shop (so you won't be able to use "buy" on them just for now) and some thorough testing.

Revision: 20831
Remove extra space in item data, discovered by running Tests! :)
 
Last edited:

Veracity

Developer
Staff member
Revision: 20832
Migrate away from JList.getSelectedValues().
This method has been deprecated since Java 7. The recommended
replacement is to use getSelectedValuesList(), which unsurprisingly
returns a List<Object> (as opposed to an Object[]), so I've also
additionally gone through and added a .toArray() call to each one to
limit impact to the call sites.
There's potentially some broader cleanup to use this properly and
actually take advantage of these generics, but that can happen on a
later date (when I tackle -Xlint:unchecked).

Revision: 20833
Migrate new Float(float) etc to valueOf().
valueOf has been available since Java 1.5, and new Float(float) and
friends have been deprecated since Java 9.
Per Oracle docs:
"It is rarely appropriate to use this constructor. The static factory
valueOf(float) is generally a better choice, as it is likely to yield
significantly better space and time performance."
(In general, valueOf performs caching as appropriate, thereby reducing
or eliminating the need for constructions like IntegerPool.)
(This is commit 2 of 2 of "fix -Xlint:deprecation" warnings.)

Revision: 20834
coverage++ and JavaDoc nit fixed

Revision: 20835
Add Line, Token to Parser.java.
This is (hopefully) the biggest refactor needed as part of fredg1's
Language Server work.
We recognize this is a big change to unpack.
Some notes:
- We read the entirety of the InputStream in the Parser() constructor,
parsing the input file into Line objects. We perform the parsing of
Lines into Tokens throughout Parser.parse(), which continues to
enforce many things ranging from variable typing to `since` version
checking.
- For a non-null Token, the class's constructor guarantees that its
String content is additionally non-null.
- Parser.currentToken() previously returned a non-null String. We now
amend that contract such that it now returns a non-null Token, and
as above, its content is also guaranteed to be non-null.
- Parser.nextToken() definitely does not provide these same guarantees
(and has not in the past). However, in a number of cases, we
observed that by making slight adjustments to when we read tokens,
we can replace a number of calls to nextToken() ... readToken() with
readToken() ... currentToken() without changing any underlying
parsing behavior, while also improving safety at the same time..
Many of the scattered changes relate to either modifying existing
method signatures to take a Token instead of a String, or using
Token.content where we previously directly read a String token.
We've added a number of tests to codify what we expect as the current
behavior, and updated ParserTest to specify the expected tokens
resulting from a successful parse. It's often easier to reason about
behavior with concrete examples for various edge cases, rather than
from reading thousands of lines of code (regardless of quality of code
comments / documentation).
There are still some more changes coming down the pipeline to improve
parse consistency, most notably as it pertains to tokenization of
typed constants (both singular and plural). We expect that future
changes will be more manageable; this change was especially
challenging to split further because of how central parsing logic is
to ASH scripting, and how fundamental Parser.currentToken() is.
For future work: there are some segments of code that are rarely (if ever)
exercised (e.g. parsing "123." is unreachable because we first try and
fail to parse it as a record). But, related to this effort and adding
various test cases, we now know about these, so we can either delete
or fix them in the future.

Revision: 20836
Move some repeated logic into clearCurrentToken().
This makes the code easier to read, as you don't have to stop and
think about why we're suddenly setting the current token to null.
On top of that, if we decide to change this implementation in the
future, we only have to touch one place.

Revision: 20837
Disallow comments broken by newlines.
Because of a quirk of how plural typed constants are parsed, the
following two snippets of code were equivalent:
$booleans[tr/
/ue];
$booleans[tr//ue];
and would yield a parse error for unexpected end-of-file.
Now, it still yields a parse error, except now it's that "tr//ue"
isn't a real boolean. Which is maybe less confusing?
Either way, courtesy of fredg1 (as was the last commit).

Revision: 20838
Add various safety checks to Parser.java.
This is yet another patch from fredg1 in a series that will eventually
culminate in language server support.
(I made some minor tweaks to wording of test case descriptions, but
otherwise accepted this as-is.)

Revision: 20839
Add more javac flags for tests.
I don't know if this will help with the problem frono reported, but it
can't hurt to consistently interpret source files as utf-8 and build
for a specific release version.
Tests still pass locally, anyhow.

Revision: 20840
Don't try to search the mall while you are adventuring

Revision: 20841
Set charset for getBytes() in ParserTest.
By default, getBytes() is platform-dependent.
Thanks frono + fredg1 for helping figure out why frono's tests were
failing.

Revision: 20842
Revert "Add more javac flags for tests."
This reverts commit 4fc6dd1038d827110abfc5995a7c1176d988b7dd.

Revision: 20843
yet more coverage++

Revision: 20844
Consistently use variables for referencing paths.
I guess we could change this directory setup at some point in the
future, or someone could have non-standard overrides. I guess.

Revision: 20845
coverage++

Revision: 20846
limitmode is an int in charpane, not a string. Treat it as such.

Revision: 20847
Revert JSON change until it won't break Batfellow etc.

Revision: 20848
Remove sequence jar which is only needed for run time and not compile.

Revision: 20849
coverage++
CharacterEntities had some null checks added and some "lint" addressed. The included test was passed both before and after these changes.

Revision: 20850
Remove third party source code for JSON and replace with newer jar file.
Change CharPaneRequest so that it does not assume limitmode will be an int and will parse either an int or a string without error. In theory this will not break Batfellow and Splunky...

Revision: 20851
The Nose Knows

Revision: 20852
Split parseString to split out functionality.
Courtesy of fredg1, as yet another change in the language server
series.
parseString historically handled both regular strings, template
strings, and plural typed constants. That last one led to some
tokenization quirks (namely, forcing the brackets to be tacked onto
existing tokens). As a result, this splits out parsePluralConstant
into a separate function (and removes the need for parseString to
think about types).
Since in both cases we still want to handle escape sequences, this
change also splits out parseEscapeSequence into a separate function
and makes handling of octal / hex / unicode escape sequences more
robust.
This also fixes a couple of extant NPEs, around escaping the
end-of-file. Hooray!

Revision: 20853
Mark Parser public static fields as final.
Courtesy of fredg1. Not that I expect anyone to change the definition
of POST_DECREMENT during runtime, but best not to tempt fate.

Revision: 20854
coverage++

Revision: 20855
"container" on api.php response can be null

Revision: 20856
Check wildfire fire levels on status refresh

Revision: 20857
Check wildfire fire levels on status refresh

Revision: 20858
Add some missing information to the consumables and skill databases

Revision: 20859
Add NPC store for wildfire

Revision: 20860
Last bit of implementation for Dead Nostrils ;)

Revision: 20861
Added monsters for Wildfires

Revision: 20862
Added council text for Wildfires

Revision: 20863
Fix some whitespace hiccups in data.

Revision: 20864
Fix some object mapping in ASH

Revision: 20865
coverage++ and cleaned up some lint in test files.

Revision: 20866
Experimental tracking for BALLS macro abort messages

Revision: 20867
Remove surprising Parser behavior.
Previously, it was possible to write int[int,] as shorthand for
int[int][]. This was an unintended result of allowing int[int,int] as
shorthand for int[int][int] as well as supporting arrays defined as
int[].
This was never documented, so if you were relying on it, why?? But
we're not reverting this change regardless; if you're willing to use
that weird syntax, you can figure out how to fix it.

Revision: 20868
Wrap a branch of parseAggregateType in an else.
Courtesy of fredg1, as part of preparing for convincing the Parser to
collect errors on its way to the end of the file, as yet another step
towards a language server for ASH.
I've also added a number of additional test cases for this function to
reach 100% branch coverage, and in the process of doing so, identified
a couple of weird edge cases in the parsing logic that we should also
forbid (namely: arrays with non-positive sizes, and typedef'ed
aggregate keys in maps).

Revision: 20869
Move the "Missing index token" check later.
Also courtesy of fredg1, also in the interest of creating a language
server for ASH.
This puts it into the same if / else if / else chain we've set up
earlier, toward the same goal outlined in the previous commit. One of
the error messages for one of the test cases changes, arguably for the
better.
(If you specify "int[, ...] you get "Missing index token" rather than
"Invalid type name ','".)

Revision: 20870
Check concoctions for row data as a fallback.
Requests through shop.php would defer to common logic in
NPCPurchaseRequest, even though that only recognizes ROWs present in
npcstores.txt. ROW data corresponding to special "creation" methods
(e.g. PIXEL or STILL) are only present in concoctions.txt.
As a result, we would not correctly update inventory to subtract the
corresponding ingredients.
Note that this solution isn't at all robust, and will probably lead to
more inventory desyncs if you try to, say, purchase white pixels at
the General Market.

Revision: 20871
Streamline parseAggregateType logic slightly.
Courtesy of fredg1, again with the eventual goal of language server
support for ASH.
This makes it easier to provide consistent errors (and in fact, this
resolves one such inconsistency) across different cases, and overall
simplifies the code while maintaining the same logic.

Revision: 20872
Store info about outift Trick-or-Treat treats in mafia database and make accessible via `float [ item ] outfit_treats( string outfit )`
For now, outfits that drop an item/items randomly from a set will return that they drop nothing at all. The plan eventually would be for the `float` value in the response map to be a probability of that item dropping. This of course is a bit broken when the outfit can drop more than one of a set, but it'll have to do.

Revision: 20873
Reuse existing ConcoctionPool.rowToId().
Turns out this already existed, if I just knew where to look.

Revision: 20874
Fix DataFileMechanicsTest for outfits.txt.
The version bump changed the number of expected fields.
This change also upgrades hamcrest, since I was annoyed that I didn't
have greaterThanOrEqualTo (which I switched to, for better error
messages).

Revision: 20875
lastVoteMonsterTurn should have 0 as a default value

Revision: 20876
Fire extinguisher IoTM support

Revision: 20877
Fix issues in chaining gnoob runs on multiple accounts, which surely no one would ever do and yet here we are fixing it

Revision: 20878
Order skills in SkillPool by id

Revision: 20879
Add missing props to defaults.txt, thanks fred

Revision: 20880
Fix SVN dialog in FlatLaf theme. Thanks @philmasterplus

Revision: 20881
Add clover.xml for creating an XML report.
Typical usage: `ant -lib lib/testjar coverage clover.xml`. Optionally,
add `clean` at the beginning of the list of tasks if you're coming
fresh off of a non-coverage build.

Revision: 20882
Build coverage targets in a separate directory.
I've been bitten a number of times by mixing coverage / non-coverage
runs, and then somehow corrupting my entire coverage database.
I think this should work generally, as it persists across `ant clean`
invocations, even when those clean out build/ and we need to re-make
build/clover.

Revision: 20883
Rewrite various conditionals in Parser.
Courtesy of fredg1, as yet another step on the road to language server
support for ASH -- the code is slowly moving toward a state where the
Parser will be able to collect all the parse errors in a file, as
opposed to terminating after the first one.
In particular, this patch refactors a number of instances of
if ( foo ) throw bar;
baz;
into
if ( !foo )
{
baz;
}
else
{
throw bar;
}
(There are some other minor changes, but per test coverage, I'm
reasonably sure that behavior hasn't changed meaningfully, other than
one error message changing for the better.)
This change also adds a _lot_ of test cases to cover the affected
branches (and in some cases, I went ahead and finished covering the
entire method). Parser.java coverage is now above 80%. Terrifying.

Revision: 20884
Move coverage snapshots to ${build}/.
Weird things happen if we keep the coverage snapshots for test
optimization around longer than the clover db.
Since we always run <clover-clean/> as part of `ant clean`, if we
clean before running tests (as is the case in Jenkins), coverage ends
up skipping code covered by tests that have been optimized away.
This is confusing behavior, so let's get rid of it.
(sorry fewyn, your server will have to do more work.)

Revision: 20885
Add get_counter for ASH.
I personally find this more ergonomic to work with than
get_counters(), since if I'm interested in a single deterministic
counter, I can more or less adventure(get_counter("foo"), loc) to
spend turns until that counter's up.
If anyone feels strongly about this, I posted a thread a couple weeks
ago requesting discussion, so please voice your complaints there.
(More than anything, I just want to get this out of my local copy so
tests don't fail if I `git stash`)

Revision: 20886
Add highly-experimental build.gradle.
This doesn't indicate that we're definitely moving away from Ant, but
several things are easier with Gradle, such as dependency management,
or support by newer libraries.
I'm committing this so others can play around with the setup I've been
tinkering with over the past few weeks. It seems to build reliably,
and coverage is now roughly on-par with the existing setup.
One caveat is that we still rely on the Ant `version` task for
detecting the revision of the current working copy, in part because I
didn't want to port the logic for detecting svn vs git-svn, and
running the appropriate commands in each case. Anyone else is more
than welcome to tackle that. We also rely on the version-name property
just to make sure the jars are consistently versioned.
Some other caveats: the generated HTML coverage reports live in
build/reports/clover-root. We don't actually use JUnit
platform... yet, since tests were failing when I last tried it out
(with the vintage engine).
`gradle jar`, `gradle run`, `gradle test`, `gradle
cloverGenerateReport`, `gradle clean` are the commands I use most
often. You can also chain the above, e.g `gradle clean test`.
There's also a `gradle download` if you want to add toCopy deps, which
I use for downloading fresh jars from the Maven repo.

Revision: 20887
Exclude Clover-generated inner classes from tests.
This shouldn't impact coverage, but it was making it so I couldn't
actually run this via the JUnit platform (which is a stepping stone to
being able to use JUnit 5 with Gradle).
Tests pass and all.

Revision: 20888
Add gradle wrappers.
This way, users don't need to rely on having the same version of
Gradle that I do...

Revision: 20889
Rewrite some more error conditionals.
Nothing too exciting, just another change in fredg's project to add
language server support for ASH.
Another commit, another couple dozen test cases to make sure there are
no meaningful differences in behavior. There was one change that I
noted ("variable" -> "parameter", which is more descriptive).

Revision: 20890
Downgrade gradle wrapper to 7.0.
7.1 introduced an internal method (getPreviousCompilationData) whose
implementation seems to interact poorly with our current project
setup. This often caused transient test build failures with the
unhelpful error message "Could not store compilation result".
7.0 seems stable enough.

Revision: 20891
write test & clover reports, add github CI

Revision: 20892
Github trigger pull_request_target so it can add comments ro PRs

Revision: 20893
Remove @Ignore for intermittent errors added with last commit

Revision: 20894
fetch-depth: 0 is necessary for tests on GitHub

Revision: 20895
Add some missing runtime deps (for look-and-feel).
This commit also reshuffles some deps to use implementation instead of
compileOnly (since we probably shouldn't rely on the user having an
appropriately populated classpath), and others to use runtimeOnly
instead of implementation because they're only used for runtime
feature detection.

Revision: 20896
Address gradle issues raised by MCroft.
lib/ shouldn't be part of the main sources; that was a hack to make
sure those files would be compiled. It turns out that we can specify
file dependencies built by a different sourceset, so do that
instead. This also simplifies some Clover configuration, since we now
no longer need to specify additionalSourceSets. (That in turn may
unblock proper incremental builds; I'll have to look into that again.)
Source files are ignored in the resources source sets, but Intellij
doesn't care and will complain anyways. So, add a manual exclusion for
all .java files in the resources directory.
Lastly, IntelliJ doesn't respect the clover source / target versions,
and we probably should be adding those for non-test builds
too. (Similarly, we should make sure that the source code is always
treated as UTF-8, in the name of portability.)

Revision: 20897
Set mtime for files copied to build/generated-src.
This helps Gradle know that files haven't changed since the last time
we copied them, and that it can therefore cache results of expensive
operations such as Clover instrumentation.

Revision: 20898
Remove unnecessary check in parseInvoke.
Courtesy of fredg1, as part of cleaning up this file while refactoring
it to add language server support for ASH.
We ought to be able to rely on parseVariableReference to, um, parse a
variable reference.

Revision: 20899
Add more tests for Parser, courtesy of fredg1.
This codifies most of the remaining untested behavior around what
should / shouldn't parse.

Revision: 20900
Philammon's patch to use the property forbiddenStore to prevent buying from certain stores. set property forbiddenStore = '<ShopID#1>,<ShipID#2>, etc' to use.

Revision: 20901
Phil's patch now with string cleanup

Revision: 20902
Read initial tokens in various parseFoo methods.
Courtesy of fredg1, as another entry in the effort to bring language
server support for ASH.
This combines two separate but logically similar patches, which affect
parseAggregateLiteral, parseNewRecord, and parseTypedConstant. In
these cases, we want to associate the initial token with the rest of
the language construct.
(We probably could make parseAggregateLiteral closer to these other
two methods, checking for the leading { and returning null if it
doesn't exist, but that's not so important to fix right now.)

Revision: 20903
You don't need a wand in Wildfire

Revision: 20904
Remove obsolete second parameter of parseType.
Courtesy of fredg1.
`boolean aggregates` is now always set to true, as the special case it
handled has been obviated by an earlier parsePluralConstant refactor.

Revision: 20905
Eliminate Scope(ParseTreeNode, BasicScope).
Courtesy of fredg1, as yet another patch for language server support for ASH.
We can accomplish the same thing by adding the command to the scope in the
process of parsing it. This patch further combines some of the logic so we don't
need to create a new Scope in several different locations.

Revision: 20906
Rearrange some more logic in Parser.
Courtesy of fredg1, again, as part of refactors preparing for language server
support for ASH.
This eliminates some early returns in parseCatch / parseStatic.
(We do incur some additional nesting, which is partially offset by improved
locality between checking for a token and reading it.)

Revision: 20907
Stop discarding InputStream in favor of File.
Courtesy of fredg1.
This will be relevant as part of ASH language server support, since we may want
to provide both a File (location) and an InputStream (modified contents).
This patch also fixes an issue with circular imports -- if the base file is
imported by one of its dependencies (including by itself), then it should not
re-execute all the top-level code (which could lead to function redefinitions,
leading to unhelpful error messages, or worse).

Revision: 20908
Rearrange more logic in Parser.java.
Courtesy of fredg1, as yet another installment moving us toward
language server support in ASH.
This shuffles around some more if-statements so when we remove these
early returns (esp. in the context of throwing exceptions), we can
continue parsing.
This patch focuses on cases where the interpreter parses tokens in a
loop, e.g. when parsing parameters for a function prototype, or
statements in a block.

Revision: 20909
Improve ASH for-loop error message.
Courtesy of fredg1.
In particular, if we type `for in arr`, that should yield "key variable name
expected", not "in is not a valid variable name".

Revision: 20910
Change parseVariableReference signature.
Courtesy of fredg1, as yet another patch moving us closer to language
server support for ASH.
In particular, this now takes a VariableReference, instead of a
Variable. This will be helpful for tracking the location of the
reference (as opposed to where the variable was first declared).

Revision: 20911
Deduplicate jar bundling logic.
In particular, as fredg1 points out, instead of having `daily` copy
the logic in `jar`, we can use antcall to set the only differing
parameter.
This also strips signatures from bundled jars to avoid breaking our
jar in the future. Apparently using a restrict stanza would have
increased runtime by something like 10x.
Instead, create a temporary jar that contains all the bundled
libraries, then manually bundle _that_ jar, which we can manually
specify via zipfileset, which in turn allows us to exclude all the RSA
signature files.

Revision: 20912
Forbid void record fields.
This change also reorders a bit of logic and makes error messages more
consistent, courtesy of fredg1, in preparation for language server
support in ASH.
This removes surprising + undocumented behavior in the form of
"skippable" record fields, wherein by simply omitting any text (and
immediately specifying the subsequent comma), script authors could
default-initialize a record field.

Revision: 20913
Clean up bundled-libs.jar.
As it stands, this breaks repeated invocations of `ant jar` with
something about a jar not allowed to include itself.

Revision: 20914
Add some missing modifier functions to ASH

Revision: 20915
Address binary size regression.
When I made a change to bundle all libraries ahead of time so we can
strip RSA signatures, I inadvertently ended up including all of the
dependencies twice.
The simplest workaround I managed was to manually add a couple of
excludes, so that's what I've done.

Revision: 20916
Set target java version consistently.
Now, to upgrade our source / target versions of Java, just edit
java.version in default.properties.
Note that beyond Java 8, the leading "1." is no longer necessary,
e.g. java.version=11. (If not for this quirk, I would have edited the
target= fields instead of outright deleting them.)
Further, note that javac requires that src <= target, so we can't
build Java 15 sources targeting the Java 8 JVM.

Revision: 20917
Fix deprecation warnings for Java 16.
There are plenty more in lib/, but a number of those may be obsolete.

Revision: 20918
Remove lib/org/jdesktop, merge {lib,src}/jar.
This change removes the manually-included swingx sources in favor of
bundling the jar directly, in part because there are a number of
deprecation warnings in whichever version we were using.
This leads to a slight increase in the jar size (a few hundred KB by
my measurement), since we're now pulling in everything from swingx,
rather than just what we need.
There are no longer any jars that are required just for lib/ sources
(swingx is now required for both), and the two remaining jars were
actually dependencies of existing jars in src/jar.

Revision: 20919
Revert "Remove lib/org/jdesktop, merge {lib,src}/jar."
This reverts
Revision: 20918
broke.
Revert now, fix later.

Revision: 20920
Re-migrate swingx to use the jar directly.
This is effectively a revert of
Revision: 20119
Instead of using swingx-1.6, instead use 1.0, which we had been using
previously.

Revision: 20921
Never optimize tests with data dependencies.
Clover's mechanism for detecting test changes relies on changes to
source files, then on changed lines. Data dependencies do not trigger
either of these.

Revision: 20922
Define datafile tests in one place.
This should be less error-prone, especially if we end up wanting to do
the same thing in other places.
gradle-clover-plugin doesn't seem to allow such fine-grained control
over test optimization, and I don't want to configure instrumentation
manually.

Revision: 20923
Generalize TrayIcon support.
As of Java 6, cross-platform tray icon support is part of the standard
library. Thus, we no longer need this special library that only worked
for 32-bit Windows anyways.
I tried this briefly on a Windows machine, and it's a little weird
(especially around clicking on it when not logged in), but it seems to
work.
Note that in order to use this, useSystemTrayIcon must be true.

Revision: 20924
Fix location for TrayIcon12.gif.
I had moved this after my initial experimentation, but didn't realize
that I needed to update where we were looking for the file.

Revision: 20925
get revision in gradle to fix unnecessary rebuilds

Revision: 20926
Run tests on all branches, others only on main repo

Revision: 20927
Strip all carriage returns.
Ran `perl -pi -e 's/\r//g' **/*.java`, then added all the modified files.
Almost all of the rest of our code uses Unix line endings (\n), not
DOS / Windows line endings (\r\n).
I'm doing this in one big change, so the next diff is easier to read,
since one of my precommits is failing due to non-Unix line endings.

Revision: 20928
Add generic types to LowerCaseEntry.
Courtesy of fredg1.
This improves type safety, and reduces the need for casting from
Object.

Revision: 20929
Add generic types to DebugModifiers.
Courtesy of fredg1. This generally reduces unchecked casts from
Object, which safeguards against future misuse of these shared maps by
inserting incorrectly typed objects.
This change also reduces DebugModifers.allModifiers()'s dependence on
mutable global state, which is generally a good thing.
To test this, we use the `modifies` CLI command, which fetches all
modifiers that match some filter string. We select "water level" as
something that was used in an old path (Heavy Rains), which we expect
is unlikely to be used by new content, or conflict with future
modifier names.

Revision: 20930
coverage++
Hopefully fixed the EOL issues with my commits.

Revision: 20931
Some more combat/choice redirection items that cause a fight in a particular zone

Revision: 20932
Return an empty string instead of null there converting an NPE to something processed by "file not found" code. No tests yet.

Revision: 20933
Bundle resources found in lib/, unbundle jars.
This fixes an issue with external licenses not working in the gradle
build, and also manages to reduce the jar size to be in line with
Ant's.

Revision: 20934
Fix "always be equipping" maximizer bug.
In particular, Maximizer would always prefer equipping something that
had no effect, over leaving nothing equipped.
This turned out to be two bugs:
1. We expected new CheckedItem( 0, ... ) to equal EquipmentRequest.UNEQUIP,
which is populated by ItemPool.get( "(none)", 1 ). This function creates an
object with item id -1 if no matches are found. Thus, we never considered
equipping nothing as "simpler" than equipping something.
2. We use InventoryManager.getCount() and getAccessibleCount() to determine how
many of the object we have on hand. This hurts us twice:
a. First, we fail the tiebreaker in MaximizerSpeculation.compareTo() -- we
don't have any copies of (none) on-hand, so we prefer anything else.
b. Second, Evaluator has some additional logic to make sure we don't try to
equip more copies than we can acquire. Since we claim we can acquire 0
copies...

Revision: 20935
Add is_headless, which returns if 'java.awt.headless' is true.

Revision: 20936
coverage++

Revision: 20937
Lint removal with passed tests before and after

Revision: 20938
coverage++
and in preparation for some changes in EquipmentDatabase

Revision: 20939
Consider CoT / Bjorn familiars even if not worn.
This was causing some incorrect maximizer behavior as reported by
phreddrickk. Thanks for the report!
It manifested in two ways:
First: If you only excluded one of the pseudo-slots crownofthrones / buddy-bjorn
but had both corresponding items in your inventory, then Maximizer would decide
that there's one familiar-carrier slot to maximize for, but not actually
remember which one. This would result in potentially swapping out the current
occupant for a different familiar.
Second: if you didn't have a CoT, if the current occupant didn't contribute to
the score, the code would always try to replace it (assuming that Maximizer
decides it wants to equip CoT / Bjorn) -- even if there are no familiars that
improve the score. In that case, the MaximizerSpeculation would leave the
corresponding field unspecified, get confused since there was no familiar to
bjornify, and just equip $item[none] to the back slot.
I don't think there's a good reason to keep this check.
This change also moves MaximizerTest into the maximizer package, since it just
makes more sense, even if we have no plans to rely on package-visible fields or
methods.

Revision: 20940
fixes from checkdata

Revision: 20941
Update mallprices

Revision: 20942
Bump version to 21.9
 

Veracity

Developer
Staff member
I went in and manually edited it -- [ item ] (sans spaces) doesn't like to display well.
Thanks! I also found out that "ant notes" was NOT broken: I had simply forgotten how we whacked it a year ago.

So, I regeberated the notes and whacked them to avoid the display glitch, and broke the notes into two parts (since they were more than 100,000 characters, and posted the whole thing.

This is still the final "official" point release on SOurceforge - since we are migrating away from Sourceforge, like, tomorrow or something.
 

MCroft

Developer
Staff member
Thanks! I also found out that "ant notes" was NOT broken: I had simply forgotten how we whacked it a year ago.
Did we change where it stuck the output? I remember we were trying to streamline the steps required to spin a release.
 
Last edited:

Veracity

Developer
Staff member
No, it was perfect. My personal process notes were not updated.
My fault, not yours.
The output was exactly what I needed. Once I remembered where it was.
 
Top