<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.kolmafia.us/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mcroft</id>
	<title>Kolmafia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kolmafia.us/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mcroft"/>
	<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Special:Contributions/Mcroft"/>
	<updated>2026-04-30T14:44:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=IntelliJ_Setup&amp;diff=9236</id>
		<title>IntelliJ Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=IntelliJ_Setup&amp;diff=9236"/>
		<updated>2023-12-05T01:09:20Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==== KoLmafia has migrated to the GitHub with gradle builds. ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.jetbrains.com/idea/ IntelliJ IDEA] is an IDE for developing Java applications. This guide assumes that you have a recent enough version of Java JDK, Ant, and IntelliJ IDEA. Completing [[Compiling from Source]] is a requirement for this guide, although experienced developers can skip to whatever step is appropriate.&lt;br /&gt;
&lt;br /&gt;
The following instructions are based on IntelliJ IDEA 2021.2 Community Edition. Instructions for other versions/editions of IntelliJ may be slightly different.  The latest version is recommended.&lt;br /&gt;
&lt;br /&gt;
== Create a Project ==&lt;br /&gt;
=== Create a new project ===&lt;br /&gt;
# Start IntelliJ IDEA. In the &#039;&#039;Welcome to IntelliJ IDEA&#039;&#039; dialog, click &#039;&#039;&#039;Get from VCS&#039;&#039;&#039;.&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-welcome.png|300px]]&lt;br /&gt;
# In the &#039;&#039;Get from Version Control&#039;&#039; dialog, select the &#039;&#039;&#039;Repository URL&#039;&#039;&#039; tab.&lt;br /&gt;
## In &#039;&#039;Version control&#039;&#039;, select &#039;&#039;&#039;GitHub&#039;&#039;&#039;.&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-get-from-vcs.png|300px]]&lt;br /&gt;
## Add a new repository location. To do so, click the &#039;&#039;&#039;+&#039;&#039;&#039; button next to &#039;&#039;Repositories&#039;&#039;.&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-get-from-vcs-subversion.png|300px]]&lt;br /&gt;
## In the &#039;&#039;New Repository Location&#039;&#039; popup, enter the URL to KoLmafia&#039;s GitHub repository. If you have a GitHub account and a Personal Access Token, use   git@github.com:kolmafia/kolmafia.git  If you do not have a GitHub account, use  https://github.com/kolmafia/kolmafia.git&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-new-repository-location.png|200px]]&lt;br /&gt;
## Click &#039;&#039;&#039;OK&#039;&#039;&#039; to close the popup.&lt;br /&gt;
## Once the repository has been added, &#039;&#039;&#039;click the repository URL to highlight it&#039;&#039;&#039;, then click &#039;&#039;&#039;Check Out&#039;&#039;&#039;.&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-get-from-vcs-check-out.png|300px]]&lt;br /&gt;
# If the &#039;&#039;Destination Directory&#039;&#039; popup appears, choose a directory to check out the working copy.&amp;lt;br&amp;gt;&#039;&#039;Caution&#039;&#039;: Don&#039;t choose a common directory like &amp;lt;samp&amp;gt;C:\Users\&amp;amp;lt;username&amp;amp;gt;\Documents&amp;lt;/samp&amp;gt;. Instead, create a new directory under it (by clicking the folder icon) and give it an appropriate name (e.g. &amp;lt;samp&amp;gt;kolmafia&amp;lt;/samp&amp;gt;).&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-choose-working-copy-dir.png|200px]]&amp;lt;br&amp;gt;Click &#039;&#039;&#039;OK&#039;&#039;&#039; to continue.&lt;br /&gt;
# IntelliJ will generate a new project. If it asks you whether to add &amp;lt;code&amp;gt;kolmafia.iml&amp;lt;/code&amp;gt; to Subversion, you may click &#039;&#039;&#039;Cancel&#039;&#039;&#039; to skip it&lt;br /&gt;
&lt;br /&gt;
=== Add the Gradle Build File ===&lt;br /&gt;
# Open the Gradle Toolbar Item (typically on the right side, and not very large)&lt;br /&gt;
# Click the &#039;&#039;&#039;+&#039;&#039;&#039; button to add a build file&lt;br /&gt;
# Choose build.gradle from the file selector and press Open&lt;br /&gt;
#Run Configurations should contain &amp;lt;code&amp;gt;kolmafia [runShadow]&amp;lt;/code&amp;gt;. If it does not, continue to the next steps.&lt;br /&gt;
#In the Gradle Toolbar click on the elephant to Execute Gradle Task&lt;br /&gt;
#A window titled &#039;&#039;Run Anything&#039;&#039; will popup. Search for &amp;lt;code&amp;gt;runShadow&amp;lt;/code&amp;gt; and select it&lt;br /&gt;
&lt;br /&gt;
===How to build and run/debug===&lt;br /&gt;
#Click the drop down in the top right and select the desired option&lt;br /&gt;
##&amp;lt;code&amp;gt;kolmafia [runShadow]&amp;lt;/code&amp;gt; is the application itself&lt;br /&gt;
##&amp;lt;code&amp;gt;Tests in &#039;KoLMafia&#039;&amp;lt;/code&amp;gt; are the unit tests&lt;br /&gt;
#Click the play button to build and run&lt;br /&gt;
#Or click the bug button to build and debug&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Development_Environment_Setup&amp;diff=9235</id>
		<title>Development Environment Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Development_Environment_Setup&amp;diff=9235"/>
		<updated>2023-12-05T01:08:01Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== KoLmafia has migrated to  GitHub with gradle builds. ==&lt;br /&gt;
Links below this section may be obsolete and should be verified before relying on them.&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier. The bad news is you&#039;ll need to take some steps to build anything. In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After succeeding at [[Compiling from Source]] for your platform, you can add set up your KoLMafia source in an Integrated Development Environment (IDE) of your choice.  It is entirely possible to build and change KoLMafia without and IDE and some of the developers do just that.&lt;br /&gt;
====Platform-specific Development Tools====&lt;br /&gt;
;&#039;&#039;Apple&#039;s OS X notes on development for Java, including the XCode Tools setup, can make command line work easier.&#039;&#039;&lt;br /&gt;
::[https://developer.apple.com/library/archive/documentation/Java/Conceptual/Java14Development/02-JavaDevTools/JavaDevTools.html Apple Developer Tools for Java]&lt;br /&gt;
====Developer Text Editors====&lt;br /&gt;
Choose your favorite, or add your favorite.&lt;br /&gt;
;[http://www.barebones.com BBEdit]&lt;br /&gt;
:: Mac OS X based text editor&lt;br /&gt;
;[https://macromates.com TextMate]&lt;br /&gt;
::Another Mac based editor&lt;br /&gt;
;[https://www.ultraedit.com Ultra Edit]&lt;br /&gt;
::cross-platform text editor&lt;br /&gt;
&lt;br /&gt;
====IDEs====&lt;br /&gt;
This list will be out of date shortly after it&#039;s written, but can be updated as newer tools and versions are released. &lt;br /&gt;
;[https://www.jetbrains.com/idea/download/ IntelliJ IDEA]&lt;br /&gt;
::[[IntelliJ Setup]]&lt;br /&gt;
;[http://www.eclipse.org Eclipse]&lt;br /&gt;
::[[eclipse Setup]]&lt;br /&gt;
;[https://code.visualstudio.com/ VS Code]&lt;br /&gt;
::[[VS Code Setup]]&lt;br /&gt;
;[https://www.jetbrains.com/idea/download/ NetBeans]&lt;br /&gt;
::[[NetBeans Setup]]&lt;br /&gt;
;[http://developer.apple.com/tools/xcode/) Xcode] (Mac only)&lt;br /&gt;
::[[XCode Setup]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Source Control Management tools====&lt;br /&gt;
;[http://path/to/something/ TortoiseSVN]&lt;br /&gt;
::[[Tortoise Setup]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9234</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9234"/>
		<updated>2023-12-05T01:00:28Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* Optional */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
&#039;&#039;Once great and big, now secondhand news...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===KoLmafia has migrated to the GitHub, GIT and gradle.===&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the [[Development Environment Setup|IDE setup]] is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  &lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the git repository, and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
====Windows====&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 17 or newer, available from [https://adoptium.net/temurin/releases/?version=17 Adoptium].  The minimum recommended version is Java 17, but check the *Recommended Java* version on the [https://kolmafia.us KoLmafia Forums] to be up to date].&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===== Optional =====&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
====Linux====&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. If your package manager does not contain a sufficiently up-to-date version of Java, the safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
# Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt; (Optionally, put this in your &#039;&#039;.profile&#039;&#039; or &#039;&#039;.bashrc&#039;&#039; if you want to set and forget.)&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;  If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Build the new jar: &amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
====macOS====&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 17...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your shell of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd ~/projects/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt; If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper: &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9233</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9233"/>
		<updated>2023-12-05T00:59:38Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: Organiazation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== News ==&lt;br /&gt;
&#039;&#039;Once great and big, now secondhand news...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===KoLmafia has migrated to the GitHub, GIT and gradle.===&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the [[Development Environment Setup|IDE setup]] is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  &lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the git repository, and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
====Windows====&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 17 or newer, available from [https://adoptium.net/temurin/releases/?version=17 Adoptium].  The minimum recommended version is Java 17, but check the *Recommended Java* version on the [https://kolmafia.us KoLmafia Forums] to be up to date].&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
====Linux====&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. If your package manager does not contain a sufficiently up-to-date version of Java, the safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
# Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt; (Optionally, put this in your &#039;&#039;.profile&#039;&#039; or &#039;&#039;.bashrc&#039;&#039; if you want to set and forget.)&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;  If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Build the new jar: &amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
====macOS====&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 17...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your shell of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd ~/projects/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt; If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper: &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9232</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9232"/>
		<updated>2023-12-05T00:57:23Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* News (once great and big, now secondhand news) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== News  ===&lt;br /&gt;
&#039;&#039;Once great and big, now secondhand news...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub, GIT and gradle.==&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the [[Development Environment Setup|IDE setup]] is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  &lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the git repository, and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 17 or newer, available from [https://adoptium.net/temurin/releases/?version=17 Adoptium].  The minimum recommended version is Java 17, but check the *Recommended Java* version on the [https://kolmafia.us KoLmafia Forums] to be up to date].&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. If your package manager does not contain a sufficiently up-to-date version of Java, the safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
# Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt; (Optionally, put this in your &#039;&#039;.profile&#039;&#039; or &#039;&#039;.bashrc&#039;&#039; if you want to set and forget.)&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;  If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Build the new jar: &amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==macOS==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 17...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your shell of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd ~/projects/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt; If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper: &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9231</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9231"/>
		<updated>2023-12-05T00:56:05Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== News (once great and big, now secondhand news) ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub, GIT and gradle.==&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the [[Development Environment Setup|IDE setup]] is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  &lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the git repository, and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 17 or newer, available from [https://adoptium.net/temurin/releases/?version=17 Adoptium].  The minimum recommended version is Java 17, but check the *Recommended Java* version on the [https://kolmafia.us KoLmafia Forums] to be up to date].&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. If your package manager does not contain a sufficiently up-to-date version of Java, the safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
# Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt; (Optionally, put this in your &#039;&#039;.profile&#039;&#039; or &#039;&#039;.bashrc&#039;&#039; if you want to set and forget.)&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;  If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Build the new jar: &amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==macOS==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 17...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your shell of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd ~/projects/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt; If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper: &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Talk:Data_Structures&amp;diff=9221</id>
		<title>Talk:Data Structures</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Talk:Data_Structures&amp;diff=9221"/>
		<updated>2023-07-04T21:40:24Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==To Do==&lt;br /&gt;
We really should consider moving things like Veracity&#039;s guide to Maps either to the wiki or to GitHub.&lt;br /&gt;
--[[User:Mcroft|Mcroft]] ([[User talk:Mcroft|talk]]) 21:40, 4 July 2023 (UTC)&lt;br /&gt;
==Records==&lt;br /&gt;
I thought that the Records section would&#039;ve been helpful in figuring out multidimensional maps -- maybe not; Veracity might&#039;ve gone a bit too far with that example (which I understand, as she was trying to cover all her bases with one single unifying example). --[[User:Heeheehee|Heeheehee]] 06:42, 10 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
==An attempt at explaining maps==&lt;br /&gt;
(by [[User:Grotfang|Grotfang]])&lt;br /&gt;
&lt;br /&gt;
A map consists of two types of component.&lt;br /&gt;
* The key&lt;br /&gt;
* The value&lt;br /&gt;
A normal map (without using a record) can have multiple keys, but only one value. A map is formed by specifying a normal datatype for the value and including a key, then giving the map a name:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;datatype [key] name;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eg.&lt;br /&gt;
&amp;lt;pre&amp;gt;string [int] message;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This in itself is a useful feature, but there are many situations where you may wish to associate two values. For example, in the message map above, I may wish to specify both a message and a name to send it to. There are two ways I could deal with this problem. The first would be to create a second map with a corresponding key. I could then assume that message[key] should be send to recipient[key]. While this works, it is inefficient and untidy, as well as inflexible.&lt;br /&gt;
&lt;br /&gt;
Mafia supports the ability to customise maps using record. Record tells mafia what each entry in a map means, thereby enabling us to have more than one value to the map. The best way to visualise maps is to see a row on a page:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key   value&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We can extend our keys already by specifying multiples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;value [key1 , key2] name;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Produces:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key1   key2   value&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What record lets us do is add more values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key   value1   value2&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each line in a record is the next value and has to include the datatype of that value. Before we specified the value&#039;s datatype when we named the map (since there was only one value to assign a datatype to). Now we have to make a record of ALL the datatypes that will come up, and then when we make our map we will use the record name in place of a single datatype:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;record kmailer{&lt;br /&gt;
   string message;&lt;br /&gt;
   string recipient;&lt;br /&gt;
}&lt;br /&gt;
kmailer [int] my_messages;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above creates the following map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key   value1    value2&lt;br /&gt;
int   message   recipient&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
So far, so simple. The next bit is where it gets interesting. We can no longer assign a value to the map as a whole. Without a record, we can do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;string [int] message;&lt;br /&gt;
message[1] = &amp;quot;Hi there!&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This makes the string &amp;quot;Hi there!&amp;quot; our value for key = 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key   value&lt;br /&gt;
1   Hi there!&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With a record, we can no longer assign a value to a key alone; we have more than one value and we need to specify which one it is we want to assign something to. So using the record above, to assign a message we would have to do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;record kmailer{&lt;br /&gt;
   string message;&lt;br /&gt;
   string recipient;&lt;br /&gt;
}&lt;br /&gt;
kmailer [int] my_messages;&lt;br /&gt;
my_messages[1].message = &amp;quot;Hi there!&amp;quot;;&lt;br /&gt;
my_messages[1].recipient = &amp;quot;Grotfang&amp;quot;;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both values are assigned to our &amp;quot;1&amp;quot; key, but we must specify the value we are assigning. The following details what is going on in the map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key   value1   value2&lt;br /&gt;
int   message   recipient&lt;br /&gt;
1   Hi there!   Grotfang&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Multiple Keys===&lt;br /&gt;
&lt;br /&gt;
This is more complex. Maps with single keys are easy to understand how they will return - specify the map and key and you return the value (you need to specify which value you want if you use a record, but the principle is the same).&lt;br /&gt;
&lt;br /&gt;
More than one key is where maps get truly interesting. To all extents and purposes, multiple keys tend to be a way to categorise data into groups and subgroups. The return values get more complicated, though.&lt;br /&gt;
&lt;br /&gt;
Whenever you add a value to a map, all keys MUST be specified. However, when you are retrieving data this is not the case. This works best with an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;string [string , string] my_map;&lt;br /&gt;
my_map[&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;] = &amp;quot;ab&amp;quot;;&lt;br /&gt;
print(my_map[&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;]);&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This returns:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The map setup is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key1   key2   value&lt;br /&gt;
a      b      ab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you might expect. Here we specified a map with two keys and one value. We assigned a value &amp;quot;ab&amp;quot; to the combination of key1 (&amp;quot;a&amp;quot;) and key2 (&amp;quot;b&amp;quot;). When we retrieved the value for that combination, we got &amp;quot;ab&amp;quot;. So far, so unsurprising.&lt;br /&gt;
&lt;br /&gt;
However, the natural question arises, what if we try to retrieve a value while only specifying one of the keys? The answer is that we need to change our perspective of the map to what I suggested earlier - that of groups and sub-groups.&lt;br /&gt;
&lt;br /&gt;
The way I visualise this is to imaging key1 represents a group and key2 is a subgroup. If two map entries have the same key1, then you should perceive them as having some commonality. What happens when you retrieve using key1 only is that you return a map of all the map entries that have the specified value of key1. This means (as you are returning an aggregate) you need to specify a new map for the values to be placed in. The following example illustrates this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;string [string , string] my_map;&lt;br /&gt;
my_map[&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;] = &amp;quot;ab&amp;quot;;&lt;br /&gt;
my_map[&amp;quot;b&amp;quot;,&amp;quot;c&amp;quot;] = &amp;quot;bc&amp;quot;;&lt;br /&gt;
my_map[&amp;quot;b&amp;quot;,&amp;quot;d&amp;quot;] = &amp;quot;bd&amp;quot;;&lt;br /&gt;
my_map[&amp;quot;c&amp;quot;,&amp;quot;d&amp;quot;] = &amp;quot;cd&amp;quot;;&lt;br /&gt;
my_map[&amp;quot;e&amp;quot;,&amp;quot;f&amp;quot;] = &amp;quot;ef&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
string [string] my_map2 = my_map[&amp;quot;b&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
foreach x in my_map2 {&lt;br /&gt;
   print( my_map2[x] );&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bc&lt;br /&gt;
bd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The setup for my_map is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key1   key2   value&lt;br /&gt;
a      b      ab&lt;br /&gt;
b      c      bc&lt;br /&gt;
b      d      bd&lt;br /&gt;
c      d      cd&lt;br /&gt;
e      f      ef&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The setup for my_map2 (containing only entries that have &amp;quot;b&amp;quot; as key1) is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;key   value&lt;br /&gt;
c      bc&lt;br /&gt;
d      bd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As you can see, my_map[&amp;quot;a&amp;quot;,&amp;quot;b&amp;quot;], which has &amp;quot;b&amp;quot; as key2 is NOT included in the aggregate return. The more keys, the more level of control you have, but you cannot return (I don&#039;t think) a map of key1 that shares key2. It&#039;s a one-way structure. Of course, you could work around this with a new map that had the keys in reverse.&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9213</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9213"/>
		<updated>2023-04-27T05:41:58Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
&lt;br /&gt;
The list is being updated to 27335!  I finished A-G...&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{Flink|boolean [monster]|absorbed_monsters}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_adventure|location}}&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|int|daycount}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|int|eight_bit_points|location}}&lt;br /&gt;
{{Flink|int|eight_bit_points |location,string,float}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|item|eudora_item}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|item [string]|expected_cold_medicine_cabinet}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|location[int]|get_autumnaton_locations}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|int|get_counter|string|int|int}}&lt;br /&gt;
{{Flink|string|get_counters|string}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|int [item]|get_display}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|location [string]|get_fishing_locations}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|boolean [monster]|get_locket_monsters}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|boolean [skill]|get_permed_skills}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|item|get_workshed}}&lt;br /&gt;
{{Flink|item|get_zap_wand}}&lt;br /&gt;
{{Flink|boolean|git_at_head|string}}&lt;br /&gt;
{{Flink|boolean|git_exists|string}}&lt;br /&gt;
{{Flink|string string string string string|git_info| string}}&lt;br /&gt;
{{Flink|string[0]|git_list}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9212</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9212"/>
		<updated>2023-04-27T05:39:26Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* g */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{Flink|boolean [monster]|absorbed_monsters}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_adventure|location}}&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|int|daycount}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|int|eight_bit_points|location}}&lt;br /&gt;
{{Flink|int|eight_bit_points |location,string,float}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|item|eudora_item}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|item [string]|expected_cold_medicine_cabinet}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|location[int]|get_autumnaton_locations}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|int|get_counter|string|int|int}}&lt;br /&gt;
{{Flink|string|get_counters|string}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|int [item]|get_display}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|location [string]|get_fishing_locations}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|boolean [monster]|get_locket_monsters}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|boolean [skill]|get_permed_skills}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|item|get_workshed}}&lt;br /&gt;
{{Flink|item|get_zap_wand}}&lt;br /&gt;
{{Flink|boolean|git_at_head|string}}&lt;br /&gt;
{{Flink|boolean|git_exists|string}}&lt;br /&gt;
{{Flink|string string string string string|git_info| string}}&lt;br /&gt;
{{Flink|string[0]|git_list}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9211</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9211"/>
		<updated>2023-04-27T05:33:41Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* g */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{Flink|boolean [monster]|absorbed_monsters}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_adventure|location}}&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|int|daycount}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|int|eight_bit_points|location}}&lt;br /&gt;
{{Flink|int|eight_bit_points |location,string,float}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|item|eudora_item}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|item [string]|expected_cold_medicine_cabinet}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|int|get_counter|string|int|int}}&lt;br /&gt;
{{Flink|string|get_counters|string}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|int [item]|get_display}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|boolean [monster]|get_locket_monsters}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|boolean [skill]|get_permed_skills}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|item|get_workshed}}&lt;br /&gt;
{{Flink|item|get_zap_wand}}&lt;br /&gt;
{{Flink|boolean|git_at_head|string}}&lt;br /&gt;
{{Flink|boolean|git_exists|string}}&lt;br /&gt;
{{Flink|string string string string string|git_info| string}}&lt;br /&gt;
{{Flink|string[0]|git_list}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9210</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9210"/>
		<updated>2023-04-27T05:01:25Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* g */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{Flink|boolean [monster]|absorbed_monsters}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_adventure|location}}&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|int|daycount}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|int|eight_bit_points|location}}&lt;br /&gt;
{{Flink|int|eight_bit_points |location,string,float}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|item|eudora_item}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|item [string]|expected_cold_medicine_cabinet}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|int|get_counter|string|int|int}}&lt;br /&gt;
{{Flink|string|get_counters|string}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|string|get_workshed}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9209</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9209"/>
		<updated>2023-04-27T04:59:00Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* e */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{Flink|boolean [monster]|absorbed_monsters}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_adventure|location}}&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|int|daycount}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|int|eight_bit_points|location}}&lt;br /&gt;
{{Flink|int|eight_bit_points |location,string,float}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|item|eudora_item}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|item [string]|expected_cold_medicine_cabinet}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|string|get_counters|string|int|int}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|string|get_workshed}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9208</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9208"/>
		<updated>2023-04-27T04:55:02Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* d */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{Flink|boolean [monster]|absorbed_monsters}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_adventure|location}}&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|int|daycount}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|string|get_counters|string|int|int}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|string|get_workshed}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9207</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9207"/>
		<updated>2023-04-27T04:53:41Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* c */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{Flink|boolean [monster]|absorbed_monsters}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_adventure|location}}&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|string|get_counters|string|int|int}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|string|get_workshed}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9206</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9206"/>
		<updated>2023-04-27T04:49:50Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* a */ updated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{Flink|boolean [monster]|absorbed_monsters}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|string|get_counters|string|int|int}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|string|get_workshed}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9205</id>
		<title>Ash Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Ash_Functions&amp;diff=9205"/>
		<updated>2023-04-27T04:37:43Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: adding zap...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
Master list of all ASH functions. All functions as of r20745 are listed; this list is intended to be kept current, but it is possible that some functions added since the above revision may be missing. (Please feel free to add in any you notice.)&lt;br /&gt;
The CLI command &amp;quot;[[ashref]]&amp;quot; shows every implemented ash function for your mafia version.&lt;br /&gt;
===a===&lt;br /&gt;
{{FunctionEmbed|abort|format=signature}}&lt;br /&gt;
{{FunctionEmbed|add_item_condition|format=signature}}&lt;br /&gt;
{{Flink|boolean|adv1|location|{{opt|int}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|int|adv_cost|skill}}&lt;br /&gt;
{{Flink|boolean|adventure|int|location|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|adventure|location|int|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|all_monsters_with_id|format=signature}}&lt;br /&gt;
{{Flink|string [int]|all_normal_outfits}}&lt;br /&gt;
{{Flink|float [monster]|appearance_rates|location|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|buffer|append|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_replacement|matcher|buffer|string}}&lt;br /&gt;
{{Flink|buffer|append_tail|matcher|buffer}}&lt;br /&gt;
{{Flink|buffer|attack}}&lt;br /&gt;
{{Flink|boolean|autosell|int|item}}&lt;br /&gt;
{{Flink|boolean|autosell|item|int}}&lt;br /&gt;
{{Flink|int|autosell_price|item}}&lt;br /&gt;
{{Flink|int|available_amount|item}}&lt;br /&gt;
{{FunctionEmbed|available_choice_options}}&lt;br /&gt;
{{FunctionEmbed|available_choice_select_inputs}}&lt;br /&gt;
{{Flink|string [string]|available_choice_text_inputs|int}}&lt;br /&gt;
{{Flink|int|available_pocket|monster}}&lt;br /&gt;
{{Flink|int|available_pocket|effect}}&lt;br /&gt;
{{Flink|int|available_pocket|item}}&lt;br /&gt;
{{Flink|int|available_pocket|stat}}&lt;br /&gt;
&lt;br /&gt;
===b===&lt;br /&gt;
{{Flink|boolean|batch_close}}&lt;br /&gt;
{{Flink|void|batch_open}}&lt;br /&gt;
{{Flink|boolean|bjornify_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|black_market_available}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|effect|string}}&lt;br /&gt;
{{Flink|boolean|boolean_modifier|item|string}}&lt;br /&gt;
{{Flink|int|buffed_hit_stat}}&lt;br /&gt;
{{FunctionEmbed|buffer_to_file|format=signature}}&lt;br /&gt;
{{Flink|boolean|buy|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy|{{opt|coinmaster}}|int|item}}&lt;br /&gt;
{{Flink|boolean|buy|item|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|buy|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|buy_using_storage|int|item}}&lt;br /&gt;
{{Flink|int|buy_using_storage|int|item|int}}&lt;br /&gt;
{{Flink|int|buy_using_storage|item|int|int}}&lt;br /&gt;
{{Flink|boolean|buys_item|coinmaster|item}}&lt;br /&gt;
&lt;br /&gt;
===c===&lt;br /&gt;
{{Flink|boolean|can_drink}}&lt;br /&gt;
{{Flink|boolean|can_eat}}&lt;br /&gt;
{{Flink|boolean|can_equip|familiar|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|can_equip|item}}&lt;br /&gt;
{{Flink|boolean|can_faxbot|monster}}&lt;br /&gt;
{{Flink|boolean|can_interact}}&lt;br /&gt;
{{Flink|boolean|can_still_steal}}&lt;br /&gt;
{{Flink|boolean|canadia_available}}&lt;br /&gt;
{{Flink|item [0]|candy_for_tier|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|ceil|float}}&lt;br /&gt;
{{Flink|boolean|change_mcd|int}}&lt;br /&gt;
{{Flink|string|char_at|string|int}}&lt;br /&gt;
{{Flink|void|chat_clan|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|chat_macro|string}}&lt;br /&gt;
{{Flink|void|chat_notify|string|string}}&lt;br /&gt;
{{Flink|void|chat_private|string|string}}&lt;br /&gt;
{{Flink|boolean|chew|int|item}}&lt;br /&gt;
{{Flink|boolean|chew|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|choice_follows_fight}}&lt;br /&gt;
{{Flink|class|class_modifier|string|string}}&lt;br /&gt;
{{Flink|class|class_modifier|item|string}}&lt;br /&gt;
{{Flink|void|clear|aggregate}}&lt;br /&gt;
{{FunctionEmbed|clear_booze_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|clear_food_helper|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute|format=signature}}&lt;br /&gt;
{{FunctionEmbed|cli_execute_output|format=signature}}&lt;br /&gt;
{{Flink|int|closet_amount|item}}&lt;br /&gt;
{{Flink|int|combat_mana_cost_modifier}}&lt;br /&gt;
{{Flink|float|combat_rate_modifier}}&lt;br /&gt;
{{FunctionEmbed|contains_text|format=signature}}&lt;br /&gt;
{{Flink|void|council}}&lt;br /&gt;
{{Flink|int|count|aggregate}}&lt;br /&gt;
{{Flink|int|craft|string|int|item|item}}&lt;br /&gt;
{{Flink|string|craft_type|item}}&lt;br /&gt;
{{Flink|int|creatable_amount|item}}&lt;br /&gt;
{{Flink|int|creatable_turns|item|{{opt|int}}|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|create|int|item}}&lt;br /&gt;
{{Flink|boolean|create|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|matcher|create_matcher|string|string}}&lt;br /&gt;
{{Flink|stat|current_hit_stat}}&lt;br /&gt;
{{Flink|int|current_mcd}}&lt;br /&gt;
{{Flink|int [string]|current_pvp_stances}}&lt;br /&gt;
{{Flink|int|current_rad_sickness}}&lt;br /&gt;
{{Flink|int|current_round}}&lt;br /&gt;
&lt;br /&gt;
===d===&lt;br /&gt;
{{Flink|element|dad_sea_monkee_weakness|int}}&lt;br /&gt;
{{Flink|item|daily_special}}&lt;br /&gt;
{{Flink|float|damage_absorption_percent}}&lt;br /&gt;
{{Flink|int|damage_reduction}}&lt;br /&gt;
{{Flink|int|date_to_timestamp|string|string}}&lt;br /&gt;
{{Flink|void|debugprint|string}}&lt;br /&gt;
{{Flink|buffer|delete|buffer|int|int}}&lt;br /&gt;
{{Flink|effect|desc_to_effect|string}}&lt;br /&gt;
{{Flink|item|desc_to_item|string}}&lt;br /&gt;
{{Flink|void|disable|string}}&lt;br /&gt;
{{Flink|boolean|dispensary_available}}&lt;br /&gt;
{{Flink|int|display_amount|item}}&lt;br /&gt;
{{FunctionEmbed|drink|format=signature}}&lt;br /&gt;
{{Flink|boolean|drinksilent|int|item}}&lt;br /&gt;
{{Flink|boolean|drinksilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|void|dump|any|{{opt|string}}}}&lt;br /&gt;
&lt;br /&gt;
===e===&lt;br /&gt;
{{FunctionEmbed|eat|format=signature}}&lt;br /&gt;
{{Flink|boolean|eatsilent|int|item}}&lt;br /&gt;
{{Flink|boolean|eatsilent|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|effect_modifier|string|string}}&lt;br /&gt;
{{Flink|effect|effect_modifier|item|string}}&lt;br /&gt;
{{Flink|boolean [int]|effect_pockets}}&lt;br /&gt;
{{Flink|float|elemental_resistance|{{opt|element}}}}&lt;br /&gt;
{{Flink|float|elemental_resistance|monster}}&lt;br /&gt;
{{Flink|boolean|empty_closet}}&lt;br /&gt;
{{Flink|void|enable|string}}&lt;br /&gt;
{{Flink|int|end|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|ends_with|format=signature}}&lt;br /&gt;
{{Flink|boolean|enthrone_familiar|familiar}}&lt;br /&gt;
{{Flink|string|entity_decode|string}}&lt;br /&gt;
{{Flink|string|entity_encode|string}}&lt;br /&gt;
{{Flink|boolean|equip|item|{{opt|slot}}}}&lt;br /&gt;
{{Flink|boolean|equip|slot|item}}&lt;br /&gt;
{{Flink|boolean|equip_all_familiars}}&lt;br /&gt;
{{Flink|int|equipped_amount|item}}&lt;br /&gt;
{{Flink|item|equipped_item|slot}}&lt;br /&gt;
{{Flink|string|eudora}}&lt;br /&gt;
{{Flink|boolean|eudora|string}}&lt;br /&gt;
{{Flink|string|every_card_name|strict_string}}&lt;br /&gt;
{{Flink|int|expected_damage|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|experience_bonus}}&lt;br /&gt;
{{Flink|float|expression_eval|string}}&lt;br /&gt;
{{Flink|int [item]|extract_items|string}}&lt;br /&gt;
{{Flink|int|extract_meat|string}}&lt;br /&gt;
&lt;br /&gt;
===f===&lt;br /&gt;
{{Flink|item|familiar_equipment|familiar}}&lt;br /&gt;
{{Flink|item|familiar_equipped_equipment|familiar}}&lt;br /&gt;
{{Flink|int|familiar_weight|familiar}}&lt;br /&gt;
{{Flink|boolean [familiar]|favorite_familiars|}}&lt;br /&gt;
{{Flink|boolean|faxbot|monster|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|fight_follows_choice}}&lt;br /&gt;
{{FunctionEmbed|file_to_array|format=signature}}&lt;br /&gt;
{{FunctionEmbed|file_to_buffer|format=signature}}&lt;br /&gt;
{{Flink|boolean|file_to_map|string|aggregate|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|boolean|find|matcher}}&lt;br /&gt;
{{Flink|int|floor|float}}&lt;br /&gt;
{{Flink|boolean|florist_available}}&lt;br /&gt;
{{Flink|boolean|flush_monster_manuel_cache}}&lt;br /&gt;
{{Flink|string|form_field|string}}&lt;br /&gt;
{{Flink|string [string]|form_fields}}&lt;br /&gt;
{{Flink|string|format_date_time|string|string|string}}&lt;br /&gt;
{{Flink|boolean|friars_available}}&lt;br /&gt;
{{Flink|int|fuel_cost|skill}}&lt;br /&gt;
{{Flink|int|fullness_limit}}&lt;br /&gt;
&lt;br /&gt;
===g===&lt;br /&gt;
{{Flink|int|gameday_to_int}}&lt;br /&gt;
{{Flink|string|gameday_to_string}}&lt;br /&gt;
{{Flink|int|gametime_to_int}}&lt;br /&gt;
{{Flink|boolean [string] |get_all_properties|string|boolean}}&lt;br /&gt;
{{Flink|int|get_auto_attack}}&lt;br /&gt;
{{Flink|int [item]|get_campground}}&lt;br /&gt;
{{Flink|string |get_ccs_action|int}}&lt;br /&gt;
{{Flink|int [item]|get_chateau}}&lt;br /&gt;
{{Flink|int|get_clan_id}}&lt;br /&gt;
{{Flink|int [item]|get_clan_lounge}}&lt;br /&gt;
{{Flink|string|get_clan_name}}&lt;br /&gt;
{{Flink|int [string]|get_clan_rumpus}}&lt;br /&gt;
{{Flink|int [item]|get_closet}}&lt;br /&gt;
{{Flink|string|get_counters|string|int|int}}&lt;br /&gt;
{{Flink|string [int]|get_custom_outfits}}&lt;br /&gt;
{{Flink|item|get_dwelling}}&lt;br /&gt;
{{Flink|string [location, 3]|get_florist_plants}}&lt;br /&gt;
{{Flink|int [item]|get_free_pulls}}&lt;br /&gt;
{{Flink|int|get_fuel}}&lt;br /&gt;
{{Flink|string [int]|get_goals}}&lt;br /&gt;
{{Flink|boolean|get_ignore_zone_warnings}}&lt;br /&gt;
{{Flink|int [item]|get_ingredients|item}}&lt;br /&gt;
{{Flink|int [item]|get_inventory}}&lt;br /&gt;
{{Flink|boolean [monster]|get_location_monsters|location}}&lt;br /&gt;
{{Flink|monster [monster]|get_monster_mapping|{{opt|string}}}}&lt;br /&gt;
{{Flink|monster [int]|get_monsters|location}}&lt;br /&gt;
{{Flink|string [int]|get_moods}}&lt;br /&gt;
{{Flink|string [int]|get_outfits}}&lt;br /&gt;
{{Flink|string|get_path}}&lt;br /&gt;
{{Flink|string|get_path_full}}&lt;br /&gt;
{{Flink|string|get_path_variables}}&lt;br /&gt;
{{Flink|string|get_player_id|string}}&lt;br /&gt;
{{Flink|string|get_player_name|int}}&lt;br /&gt;
{{Flink|int|get_power|item}}&lt;br /&gt;
{{Flink|string|get_property|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|int [item]|get_related|item|string}}&lt;br /&gt;
{{Flink|int|get_revision}}&lt;br /&gt;
{{Flink|int [item]|get_shop}}&lt;br /&gt;
{{Flink|string [0]|get_shop_log}}&lt;br /&gt;
{{Flink|string string int [0]|get_stack_trace}}&lt;br /&gt;
{{Flink|int [item]|get_stash}}&lt;br /&gt;
{{Flink|int [item]|get_storage}}&lt;br /&gt;
{{Flink|string|get_version}}&lt;br /&gt;
{{Flink|string|get_workshed}}&lt;br /&gt;
{{Flink|boolean|gnomads_available}}&lt;br /&gt;
{{Flink|boolean|goal_exists|string}}&lt;br /&gt;
{{Flink|string|group|matcher|{{opt|int}}}}&lt;br /&gt;
{{Flink|string|group|matcher|string}}&lt;br /&gt;
{{Flink|int|group_count|matcher}}&lt;br /&gt;
{{Flink|boolean [string]|group_names|matcher}}&lt;br /&gt;
{{Flink|string [int, int]|group_string|string|string}}&lt;br /&gt;
{{Flink|boolean|guild_available}}&lt;br /&gt;
{{Flink|boolean|guild_store_available}}&lt;br /&gt;
&lt;br /&gt;
===h===&lt;br /&gt;
{{Flink|boolean|handling_choice}}&lt;br /&gt;
{{Flink|boolean|have_bartender}}&lt;br /&gt;
{{Flink|boolean|have_chef}}&lt;br /&gt;
{{Flink|boolean|have_display}}&lt;br /&gt;
{{Flink|int|have_effect|effect}}&lt;br /&gt;
{{Flink|boolean|have_equipped|item}}&lt;br /&gt;
{{Flink|boolean|have_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|have_mushroom_plot}}&lt;br /&gt;
{{Flink|boolean|have_outfit|string}}&lt;br /&gt;
{{Flink|boolean|have_servant|servant}}&lt;br /&gt;
{{Flink|boolean|have_shop}}&lt;br /&gt;
{{Flink|boolean|have_skill|skill}}&lt;br /&gt;
{{Flink|boolean|hedge_maze|string}}&lt;br /&gt;
{{Flink|boolean|hermit|int|item}}&lt;br /&gt;
{{Flink|boolean|hermit|item|int}}&lt;br /&gt;
{{Flink|boolean|hidden_temple_unlocked}}&lt;br /&gt;
{{Flink|boolean|hippy_stone_broken}}&lt;br /&gt;
{{Flink|boolean|hippy_store_available}}&lt;br /&gt;
{{FunctionEmbed|historical_age}}&lt;br /&gt;
{{FunctionEmbed|historical_price}}&lt;br /&gt;
{{Flink|string|holiday}}&lt;br /&gt;
{{Flink|int|hp_cost|skill}}&lt;br /&gt;
&lt;br /&gt;
===i===&lt;br /&gt;
{{Flink|monster|image_to_monster|strict_string}}&lt;br /&gt;
{{Flink|boolean|in_bad_moon}}&lt;br /&gt;
{{Flink|boolean|in_hardcore}}&lt;br /&gt;
{{Flink|boolean|in_moxie_sign}}&lt;br /&gt;
{{Flink|boolean|in_multi_fight}}&lt;br /&gt;
{{Flink|boolean|in_muscle_sign}}&lt;br /&gt;
{{Flink|boolean|in_mysticality_sign}}&lt;br /&gt;
{{Flink|string|inaccessible_reason|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|index_of|format=signature}}&lt;br /&gt;
{{Flink|int|inebriety_limit}}&lt;br /&gt;
{{Flink|float|initiative_modifier}}&lt;br /&gt;
{{Flink|buffer|insert|buffer|int|string}}&lt;br /&gt;
{{Flink|boolean|is_accessible|coinmaster}}&lt;br /&gt;
{{Flink|boolean|is_banished|monster}}&lt;br /&gt;
{{Flink|boolean|is_coinmaster_item|item}}&lt;br /&gt;
{{FunctionEmbed|is_dark_mode}}&lt;br /&gt;
{{Flink|boolean|is_discardable|item}}&lt;br /&gt;
{{Flink|boolean|is_displayable|item}}&lt;br /&gt;
{{Flink|boolean|is_familiar_equipment_locked}}&lt;br /&gt;
{{Flink|boolean|is_giftable|item}}&lt;br /&gt;
{{Flink|boolean|is_goal|item}}&lt;br /&gt;
{{Flink|boolean|is_integer|string}}&lt;br /&gt;
{{Flink|boolean|is_npc_item|item}}&lt;br /&gt;
{{Flink|boolean|is_online|string}}&lt;br /&gt;
{{Flink|boolean|is_tradeable|item}}&lt;br /&gt;
{{Flink|boolean|is_trendy|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_unrestricted|item/familiar/skill/string}}&lt;br /&gt;
{{Flink|boolean|is_wearing_outfit|string}}&lt;br /&gt;
{{Flink|int|item_amount|item}}&lt;br /&gt;
{{Flink|float|item_drop_modifier}}&lt;br /&gt;
{{Flink|int [item]|item_drops|{{opt|monster}}}}&lt;br /&gt;
{{Flink|item int string [int]|item_drops_array|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|item_pockets}}&lt;br /&gt;
{{Flink|string|item_type|item}}&lt;br /&gt;
&lt;br /&gt;
===j===&lt;br /&gt;
{{Flink|boolean [int]|joke_pockets}}&lt;br /&gt;
{{Flink|int|jump_chance|{{opt|monster}}|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|int|jump_chance|location|{{opt|int}}|{{opt|int}}}}&lt;br /&gt;
&lt;br /&gt;
===k===&lt;br /&gt;
{{Flink|boolean|knoll_available}}&lt;br /&gt;
&lt;br /&gt;
===l===&lt;br /&gt;
{{Flink|int|last_choice}}&lt;br /&gt;
{{Flink|int|last_decision}}&lt;br /&gt;
{{FunctionEmbed|last_index_of|format=signature}}&lt;br /&gt;
{{Flink|string|last_item_message}}&lt;br /&gt;
{{Flink|monster|last_monster}}&lt;br /&gt;
{{Flink|string|last_skill_message}}&lt;br /&gt;
{{Flink|string|leetify|string}}&lt;br /&gt;
{{Flink|int|length|string}}&lt;br /&gt;
{{Flink|int|lightning_cost|skill}}&lt;br /&gt;
{{Flink|string|limit_mode}}&lt;br /&gt;
{{Flink|buffer|load_html|string}}&lt;br /&gt;
{{Flink|void|lock_familiar_equipment|boolean}}&lt;br /&gt;
{{Flink|float|log_n|float|{{opt|float}}}}&lt;br /&gt;
{{Flink|void|logprint|string}}&lt;br /&gt;
&lt;br /&gt;
===m===&lt;br /&gt;
{{Flink|string|make_url|string|boolean|boolean}}&lt;br /&gt;
{{FunctionEmbed|mall_price}}&lt;br /&gt;
{{FunctionEmbed|mall_prices}}&lt;br /&gt;
{{Flink|int|mana_cost_modifier}}&lt;br /&gt;
{{Flink|boolean|map_to_file|aggregate|string|{{opt|boolean}}}}&lt;br /&gt;
{{Flink|float|max|float ...}}&lt;br /&gt;
{{Flink|int|max|int ...}}&lt;br /&gt;
{{Flink|boolean|maximize|string|boolean}}&lt;br /&gt;
{{Flink|boolean|maximize|string|int|int|boolean}}&lt;br /&gt;
{{Flink|{string string float effect item skill} [int]|maximize|string|int|int|boolean|boolean}}&lt;br /&gt;
{{Flink|int|meat_drop|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|meat_drop_modifier}}&lt;br /&gt;
{{Flink|int [int]|meat_pockets}}&lt;br /&gt;
{{Flink|float|min|float ...}}&lt;br /&gt;
{{Flink|int|min|int ...}}&lt;br /&gt;
{{Flink|item|minstrel_instrument}}&lt;br /&gt;
{{Flink|int|minstrel_level}}&lt;br /&gt;
{{Flink|boolean|minstrel_quest}}&lt;br /&gt;
{{Flink|float|modifier_eval|string}}&lt;br /&gt;
{{Flink|int|monster_attack|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_defense|{{opt|monster}}}}&lt;br /&gt;
{{Flink|element|monster_element|{{opt|monster}}}}&lt;br /&gt;
{{Flink|float|monster_eval|string}}&lt;br /&gt;
{{Flink|int|monster_factoids_available|monster|boolean}}&lt;br /&gt;
{{Flink|int|monster_hp|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_initiative|{{opt|monster}}}}&lt;br /&gt;
{{Flink|int|monster_level_adjustment}}&lt;br /&gt;
{{Flink|string|monster_manuel_text|monster}}&lt;br /&gt;
{{Flink|phylum|monster_phylum|{{opt|monster}}}}&lt;br /&gt;
{{Flink|boolean [int]|monster_pockets}}&lt;br /&gt;
{{Flink|void|mood_execute|int}}&lt;br /&gt;
{{Flink|string [0]|mood_list}}&lt;br /&gt;
{{Flink|int|moon_light}}&lt;br /&gt;
{{Flink|int|moon_phase}}&lt;br /&gt;
{{Flink|int|mp_cost|skill}}&lt;br /&gt;
{{Flink|int|my_absorbs}}&lt;br /&gt;
{{Flink|int|my_adventures}}&lt;br /&gt;
{{Flink|int|my_ascensions}}&lt;br /&gt;
{{Flink|int|my_audience}}&lt;br /&gt;
{{Flink|int|my_basestat|stat}}&lt;br /&gt;
{{Flink|familiar|my_bjorned_familiar}}&lt;br /&gt;
{{Flink|int|my_buffedstat|stat}}&lt;br /&gt;
{{Flink|class|my_class}}&lt;br /&gt;
{{Flink|int|my_closet_meat}}&lt;br /&gt;
{{Flink|string|my_companion}}&lt;br /&gt;
{{Flink|int|my_daycount}}&lt;br /&gt;
{{Flink|int|my_discomomentum}}&lt;br /&gt;
{{Flink|familiar|my_effective_familiar}}&lt;br /&gt;
{{Flink|int [effect]|my_effects}}&lt;br /&gt;
{{Flink|familiar|my_enthroned_familiar}}&lt;br /&gt;
{{Flink|familiar|my_familiar}}&lt;br /&gt;
{{Flink|int|my_fullness}}&lt;br /&gt;
{{Flink|int|my_fury}}&lt;br /&gt;
{{Flink|string|my_garden_type}}&lt;br /&gt;
{{Flink|string|my_hash}}&lt;br /&gt;
{{Flink|int|my_hp}}&lt;br /&gt;
{{Flink|string|my_id}}&lt;br /&gt;
{{Flink|int|my_inebriety}}&lt;br /&gt;
{{Flink|int|my_level}}&lt;br /&gt;
{{Flink|int|my_lightning}}&lt;br /&gt;
{{Flink|location|my_location}}&lt;br /&gt;
{{Flink|string|my_mask}}&lt;br /&gt;
{{Flink|int|my_maxfury}}&lt;br /&gt;
{{Flink|int|my_maxhp}}&lt;br /&gt;
{{Flink|int|my_maxmp}}&lt;br /&gt;
{{Flink|int|my_maxpp}}&lt;br /&gt;
{{Flink|int|my_meat}}&lt;br /&gt;
{{Flink|int|my_mp}}&lt;br /&gt;
{{Flink|string|my_name}}&lt;br /&gt;
{{Flink|string|my_path}}&lt;br /&gt;
{{Flink|int|my_path_id}}&lt;br /&gt;
{{Flink|familiar|my_poke_fam|int}}&lt;br /&gt;
{{Flink|int|my_pp}}&lt;br /&gt;
{{Flink|stat|my_primestat}}&lt;br /&gt;
{{Flink|int|my_rain}}&lt;br /&gt;
{{Flink|int|my_robot_energy}}&lt;br /&gt;
{{Flink|int|my_robot_scraps}}&lt;br /&gt;
{{Flink|servant|my_servant}}&lt;br /&gt;
{{Flink|int|my_session_adv}}&lt;br /&gt;
{{Flink|int [item]|my_session_items}}&lt;br /&gt;
{{Flink|int|my_session_items|item}}&lt;br /&gt;
{{Flink|int|my_session_meat}}&lt;br /&gt;
{{Flink|string|my_sign}}&lt;br /&gt;
{{Flink|int|my_soulsauce}}&lt;br /&gt;
{{Flink|int|my_spleen_use}}&lt;br /&gt;
{{Flink|int|my_storage_meat}}&lt;br /&gt;
{{Flink|thrall|my_thrall}}&lt;br /&gt;
{{Flink|int|my_thunder}}&lt;br /&gt;
{{Flink|int|my_turncount}}&lt;br /&gt;
{{Flink|vykea|my_vykea_companion}}&lt;br /&gt;
&lt;br /&gt;
===n===&lt;br /&gt;
{{Flink|int|now_to_int}}&lt;br /&gt;
{{Flink|string|now_to_string|string}}&lt;br /&gt;
{{Flink|int|npc_price|item}}&lt;br /&gt;
{{Flink|string|numberology_prize|int}}&lt;br /&gt;
{{Flink|float|numeric_modifier|effect|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|familiar|string|int|item}}&lt;br /&gt;
{{Flink|float|numeric_modifier|item|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|skill|string}}&lt;br /&gt;
{{Flink|float|numeric_modifier|{{opt|string}}|string}}&lt;br /&gt;
&lt;br /&gt;
===o===&lt;br /&gt;
{{Flink|boolean|outfit|string}}&lt;br /&gt;
{{Flink|item [int]|outfit_pieces|string}}&lt;br /&gt;
{{Flink|string|outfit_tattoo|{{opt|string}}}}&lt;br /&gt;
{{FunctionEmbed|overdrink|format=signature}}&lt;br /&gt;
&lt;br /&gt;
===p===&lt;br /&gt;
{{Flink|string|path_id_to_name|int}}&lt;br /&gt;
{{Flink|int|path_name_to_id|string}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|monster}}&lt;br /&gt;
{{Flink|int [effect]|pick_pocket|effect}}&lt;br /&gt;
{{Flink|int [item]|pick_pocket|item}}&lt;br /&gt;
{{Flink|int [stat]|pick_pocket|stat}}&lt;br /&gt;
{{Flink|boolean|pick_pocket|int}}&lt;br /&gt;
{{Flink|boolean [int]|picked_pockets}}&lt;br /&gt;
{{Flink|boolean [int]|picked_scraps}}&lt;br /&gt;
{{Flink|int [effect]|pocket_effects|int}}&lt;br /&gt;
{{Flink|int [item]|pocket_items|int}}&lt;br /&gt;
{{Flink|string|pocket_joke|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_meat|int}}&lt;br /&gt;
{{Flink|monster|pocket_monster|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_poem|int}}&lt;br /&gt;
{{Flink|string [int]|pocket_scrap|int}}&lt;br /&gt;
{{Flink|int [stat]|pocket_stats|int}}&lt;br /&gt;
{{Flink|int [int]|poem_pockets}}&lt;br /&gt;
{{Flink|int [int]|potential_pockets|effect/item/monster/stat}}&lt;br /&gt;
{{Flink|void|print|{{opt|string}}|{{opt|string}}}}&lt;br /&gt;
{{Flink|void|print_html|string}}&lt;br /&gt;
{{FunctionEmbed|property_default_value|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_exists|format=signature}}&lt;br /&gt;
{{FunctionEmbed|property_has_default|format=signature}}&lt;br /&gt;
{{Flink|int|pulls_remaining}}&lt;br /&gt;
{{Flink|boolean|put_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|put_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|put_display|int|item}}&lt;br /&gt;
{{Flink|boolean|put_display|item|int}}&lt;br /&gt;
{{Flink|boolean|put_shop|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_shop_using_storage|int|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|put_stash|item|int}}&lt;br /&gt;
{{Flink|int|pvp_attacks_left}}&lt;br /&gt;
&lt;br /&gt;
===r===&lt;br /&gt;
{{Flink|int|rain_cost|skill}}&lt;br /&gt;
{{Flink|int|random|int}}&lt;br /&gt;
{{Flink|int|raw_damage_absorption}}&lt;br /&gt;
{{Flink|boolean|refresh_shop}}&lt;br /&gt;
{{Flink|boolean|refresh_stash}}&lt;br /&gt;
{{Flink|boolean|refresh_status}}&lt;br /&gt;
{{Flink|void|remove_item_condition|int|item}}&lt;br /&gt;
{{Flink|void|remove_item_condition|item|int}}&lt;br /&gt;
{{FunctionEmbed|remove_property|format=signature}}&lt;br /&gt;
{{FunctionEmbed|rename_property|format=signature}}&lt;br /&gt;
{{Flink|boolean|replace|buffer|int|int|string}}&lt;br /&gt;
{{Flink|string|replace_all|matcher|string}}&lt;br /&gt;
{{Flink|string|replace_first|matcher|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|buffer|string|string}}&lt;br /&gt;
{{Flink|buffer|replace_string|string|string|string}}&lt;br /&gt;
{{Flink|boolean|reprice_shop|int|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|matcher|reset|matcher|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean [int]|restoration_pockets}}&lt;br /&gt;
{{Flink|boolean|restore_hp|int}}&lt;br /&gt;
{{Flink|boolean|restore_mp|int}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|int|item}}&lt;br /&gt;
{{Flink|boolean|retrieve_item|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|int [int]|reverse_numberology|{{opt|int|int}}}}&lt;br /&gt;
{{Flink|int|rollover}}&lt;br /&gt;
{{Flink|int|round|float}}&lt;br /&gt;
{{FunctionEmbed|run_choice|format=signature}}&lt;br /&gt;
{{Flink|buffer|run_combat|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|run_turn}}&lt;br /&gt;
{{Flink|buffer|runaway}}&lt;br /&gt;
&lt;br /&gt;
===s===&lt;br /&gt;
{{Flink|int [int]|scrap_pockets}}&lt;br /&gt;
{{Flink|boolean|sell|coinmaster|int|item}}&lt;br /&gt;
{{Flink|int|sell_price|coinmaster|item}}&lt;br /&gt;
{{Flink|boolean|sells_item|coinmaster|item}}&lt;br /&gt;
{{Flink|string [int]|session_logs|{{opt|string}}|{{opt|string}}|int}}&lt;br /&gt;
{{Flink|void|set_auto_attack|int/string}}&lt;br /&gt;
{{Flink|void|set_length|buffer|int}}&lt;br /&gt;
{{Flink|void|set_location|location}}&lt;br /&gt;
{{Flink|void|set_property|string|string}}&lt;br /&gt;
{{Flink|int|shop_amount|item}}&lt;br /&gt;
{{Flink|int|shop_limit|item}}&lt;br /&gt;
{{Flink|int|shop_price|item}}&lt;br /&gt;
{{Flink|skill|skill_modifier|item|string}}&lt;br /&gt;
{{Flink|skill|skill_modifier|string|string}}&lt;br /&gt;
{{Flink|int|slash_count|item}}&lt;br /&gt;
{{Flink|int|soulsauce_cost|skill}}&lt;br /&gt;
{{Flink|int|spleen_limit}}&lt;br /&gt;
{{Flink|string [int]|split_string|string|{{opt|string}}}}&lt;br /&gt;
{{Flink|float|square_root|float}}&lt;br /&gt;
{{Flink|int|start|matcher|{{opt|int}}}}&lt;br /&gt;
{{FunctionEmbed|starts_with|format=signature}}&lt;br /&gt;
{{Flink|int|stash_amount|item}}&lt;br /&gt;
{{Flink|stat|stat_bonus_today}}&lt;br /&gt;
{{Flink|stat|stat_bonus_tomorrow}}&lt;br /&gt;
{{Flink|stat|stat_modifier|effect|string}}&lt;br /&gt;
{{Flink|buffer|steal}}&lt;br /&gt;
{{Flink|int|stills_available}}&lt;br /&gt;
{{Flink|void|stop_counter|string}}&lt;br /&gt;
{{Flink|int|storage_amount|item}}&lt;br /&gt;
{{Flink|string|string_modifier|{{opt|string}}|string}}&lt;br /&gt;
{{Flink|skill|stun_skill}}&lt;br /&gt;
{{Flink|string|substring|string|int|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|svn_at_head|string}}&lt;br /&gt;
{{Flink|boolean|svn_exists|string}}&lt;br /&gt;
{{Flink|{string int string int string}|svn_info|string}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|int|effect|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|sweet_synthesis|{{opt|int}}|item|item}}&lt;br /&gt;
{{Flink|item [0]|sweet_synthesis_pair|effect|{{opt|item}}|{{opt|int}}}}&lt;br /&gt;
{{Flink|effect|sweet_synthesis_result|item|item}}&lt;br /&gt;
&lt;br /&gt;
===t===&lt;br /&gt;
{{Flink|boolean|take_closet|int|{{opt|item}}}}&lt;br /&gt;
{{Flink|boolean|take_closet|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|take_display|int|item}}&lt;br /&gt;
{{Flink|boolean|take_display|item|int}}&lt;br /&gt;
{{Flink|boolean|take_shop|{{opt|int}}|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|int|item}}&lt;br /&gt;
{{Flink|boolean|take_stash|item|int}}&lt;br /&gt;
{{Flink|boolean|take_storage|int|item}}&lt;br /&gt;
{{Flink|boolean|take_storage|item|int}}&lt;br /&gt;
{{Flink|int|tavern|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|throw_item|item}}&lt;br /&gt;
{{Flink|buffer|throw_items|item|item}}&lt;br /&gt;
{{Flink|int|thunder_cost|skill}}&lt;br /&gt;
{{Flink|string|time_to_string}}&lt;br /&gt;
{{Flink|string|timestamp_to_date|int|string}}&lt;br /&gt;
{{Flink|boolean|to_boolean|any}}&lt;br /&gt;
{{Flink|bounty|to_bounty|strict_string}}&lt;br /&gt;
{{Flink|class|to_class|strict_string/int}}&lt;br /&gt;
{{Flink|coinmaster|to_coinmaster|strict_string}}&lt;br /&gt;
{{Flink|effect|to_effect|int/skill/strict_string}}&lt;br /&gt;
{{Flink|element|to_element|strict_string}}&lt;br /&gt;
{{Flink|familiar|to_familiar|int/strict_string}}&lt;br /&gt;
{{Flink|float|to_float|any}}&lt;br /&gt;
{{Flink|int|to_int|any}}&lt;br /&gt;
{{Flink|item|to_item|int/strict_string}}&lt;br /&gt;
{{Flink|item|to_item|string|int}}&lt;br /&gt;
{{Flink|string|to_json|aggregate}}&lt;br /&gt;
{{Flink|location|to_location|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_lower_case|string}}&lt;br /&gt;
{{Flink|monster|to_monster|int/strict_string}}&lt;br /&gt;
{{Flink|phylum|to_phylum|string}}&lt;br /&gt;
{{Flink|string|to_plural|item}}&lt;br /&gt;
{{Flink|servant|to_servant|int/strict_string}}&lt;br /&gt;
{{Flink|skill|to_skill|effect/int}}&lt;br /&gt;
{{Flink|skill|to_skill|strict_string|{{opt|strict_string}}}}&lt;br /&gt;
{{Flink|slot|to_slot|item/strict_string}}&lt;br /&gt;
{{Flink|stat|to_stat|strict_string}}&lt;br /&gt;
{{Flink|string|to_string|any}}&lt;br /&gt;
{{Flink|thrall|to_thrall|int/strict_string}}&lt;br /&gt;
{{Flink|string|to_upper_case|string}}&lt;br /&gt;
{{Flink|string|to_url|location}}&lt;br /&gt;
{{Flink|vykea|to_vykea|strict_string}}&lt;br /&gt;
{{Flink|string|today_to_string}}&lt;br /&gt;
{{Flink|int|total_free_rests}}&lt;br /&gt;
{{Flink|int|total_turns_played}}&lt;br /&gt;
{{Flink|boolean|tower_door}}&lt;br /&gt;
{{Flink|void|traceprint|string}}&lt;br /&gt;
{{Flink|int|truncate|float}}&lt;br /&gt;
{{Flink|int|turns_per_cast|skill}}&lt;br /&gt;
{{Flink|int|turns_played}}&lt;br /&gt;
{{Flink|buffer|twiddle}}&lt;br /&gt;
&lt;br /&gt;
===u===&lt;br /&gt;
{{Flink|item|unusual_construct_disc}}&lt;br /&gt;
{{Flink|void|update_candy_prices}}&lt;br /&gt;
{{Flink|string|url_decode|string}}&lt;br /&gt;
{{Flink|string|url_encode|string}}&lt;br /&gt;
{{Flink|boolean|use|int|item}}&lt;br /&gt;
{{Flink|boolean|use|item|{{opt|int}}}}&lt;br /&gt;
{{Flink|boolean|use_familiar|familiar}}&lt;br /&gt;
{{Flink|boolean|use_servant|servant}}&lt;br /&gt;
{{Flink|boolean|use_skill|int|skill|{{opt|string}}}}&lt;br /&gt;
{{Flink|boolean|use_skill|skill|int|{{opt|string}}}}&lt;br /&gt;
{{Flink|buffer|use_skill|skill}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string}}&lt;br /&gt;
{{Flink|boolean|user_confirm|string|int|boolean}}&lt;br /&gt;
&lt;br /&gt;
===v===&lt;br /&gt;
{{Flink|boolean|visit|coinmaster}}&lt;br /&gt;
{{FunctionEmbed|visit_url}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|class|int|int}}&lt;br /&gt;
{{Flink|boolean [string]|voting_booth_initiatives|int|int|int}}&lt;br /&gt;
&lt;br /&gt;
===w===&lt;br /&gt;
{{Flink|void|wait|int}}&lt;br /&gt;
{{Flink|void|waitq|int}}&lt;br /&gt;
{{Flink|int|weapon_hands|item}}&lt;br /&gt;
{{Flink|stat|weapon_type|item}}&lt;br /&gt;
{{Flink|int|weight_adjustment}}&lt;br /&gt;
{{Flink|boolean|white_citadel_available}}&lt;br /&gt;
{{Flink|boolean [string]|who_clan}}&lt;br /&gt;
{{Flink|boolean|will_usually_dodge}}&lt;br /&gt;
{{Flink|boolean|will_usually_miss}}&lt;br /&gt;
{{Flink|void|write|string}}&lt;br /&gt;
{{Flink|void|writeln|string}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{Flink|string[int]|xpath|string|string}}&lt;br /&gt;
===z===&lt;br /&gt;
{{Flink|item|zap|item}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Retrieve_price&amp;diff=9203</id>
		<title>Retrieve price</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Retrieve_price&amp;diff=9203"/>
		<updated>2023-04-25T04:07:29Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|retrieve_price}}{{&lt;br /&gt;
#vardefine:return_type|int}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|item|get}}|&lt;br /&gt;
p1desc={{Pspan|get}} is the item to acquire|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function2={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|item|get}}|&lt;br /&gt;
parameter2={{Param|int|qty}}|&lt;br /&gt;
p1desc={{Pspan|get}} is the item to acquire|&lt;br /&gt;
p2desc={{Pspan|qty}} is the quantity to acquire|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function3={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|qty}}|&lt;br /&gt;
parameter2={{Param|item|get}}|&lt;br /&gt;
p1desc={{Pspan|qty}} is the quantity to acquire|&lt;br /&gt;
p2desc={{Pspan|get}} is the item to acquire|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function4={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|item|get}}|&lt;br /&gt;
parameter2={{Param|int|qty}}|&lt;br /&gt;
parameter3={{Param|boolean|exact}}|&lt;br /&gt;
p1desc={{Pspan|get}} is the item to acquire|&lt;br /&gt;
p2desc={{Pspan|qty}} is the quantity to acquire|&lt;br /&gt;
p3desc={{Pspan|exact}} if true will perform new mallsearch to make sure the price is exact|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function5={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
parameter1={{Param|int|qty}}|&lt;br /&gt;
parameter2={{Param|item|get}}|&lt;br /&gt;
parameter3={{Param|boolean|exact}}|&lt;br /&gt;
p1desc={{Pspan|qty}} is the quantity to acquire|&lt;br /&gt;
p2desc={{Pspan|get}} is the item to acquire|&lt;br /&gt;
p3desc={{Pspan|exact}} if true will perform new mallsearch to make sure the price is exact|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=Returns the meat worth of item or items. This shares some code with [[retrieve_item]]. It does include the value of items you already own. To determine the value of items you own it uses valueOfInventory preference.&amp;lt;br&amp;gt;&lt;br /&gt;
0.0 - Items already in inventory are considered free.&amp;lt;br&amp;gt;&lt;br /&gt;
1.0 - Items are valued at their autosell price.&amp;lt;br&amp;gt;&lt;br /&gt;
2.0 - Items are valued at current Mall price, unless they are min-priced.&amp;lt;br&amp;gt;&lt;br /&gt;
3.0 - Items are always valued at Mall price (not really realistic).&amp;lt;br&amp;gt;&lt;br /&gt;
Values in between are interpolated. The default value is 1.8.&lt;br /&gt;
&lt;br /&gt;
If an item is not buyable, this function will return MAXINT, or 2^63-1.&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=This is an example of a very simple aftercore logout script.|&lt;br /&gt;
code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item nightcap = $item[ Mon Tiki ];&lt;br /&gt;
int price = retrieve_price(nightcap);&lt;br /&gt;
if(price &amp;gt; 30000)&lt;br /&gt;
  abort( nightcap+ &amp;quot; is unreasonably expensive, it will be a waste to use it. It is worth &amp;quot; +price );&lt;br /&gt;
if(my_inebriety() == inebriety_limit())&lt;br /&gt;
{&lt;br /&gt;
   if ( !retrieve_item( nightcap ) )&lt;br /&gt;
      abort( &amp;quot;Could not make/buy a &amp;quot; + nightcap + &amp;quot; for a nightcap.&amp;quot; );&lt;br /&gt;
   else&lt;br /&gt;
      overdrink( 1 , nightcap );&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
see_also={{SeeAlso|retrieve_item|buy}}|&lt;br /&gt;
cli_equiv=?|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Item Management]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Data_Types&amp;diff=9188</id>
		<title>Data Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Data_Types&amp;diff=9188"/>
		<updated>2023-03-02T03:15:45Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* float */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Primitive Datatypes==&lt;br /&gt;
&lt;br /&gt;
===void===&lt;br /&gt;
Can be thought of better as the absence of a datatype. No value can be assigned to &#039;&#039;&#039;void&#039;&#039;&#039; nor can a value be returned from a function of datatype &#039;&#039;&#039;void&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===boolean===&lt;br /&gt;
A boolean value is either &#039;&#039;&#039;true&#039;&#039;&#039; or &#039;&#039;&#039;false&#039;&#039;&#039;. By default, a boolean variable is set to false.&lt;br /&gt;
&lt;br /&gt;
===int===&lt;br /&gt;
&lt;br /&gt;
A whole number (short for &amp;quot;integer&amp;quot;), either positive or negative (or 0).  The int used by KoLmafia is a 64-bit signed int, meaning it has a maximum value of 9,223,372,036,854,775,807 and a minimum value of -9,223,372,036,854,775,808. The default value of a integer variable is 0.&lt;br /&gt;
&lt;br /&gt;
Be careful when doing math with integers! As with some other strongly-typed languages, numbers are converted to integers at every step of the operation when only integer types are used. For example:&lt;br /&gt;
{{&lt;br /&gt;
CodeSample|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
int a = 1;&lt;br /&gt;
int b = 2;&lt;br /&gt;
print( a / b * 2 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Will give the output &amp;quot;0,&amp;quot; not &amp;quot;1&amp;quot; as you may expect. Changing either variable to a float type will &amp;quot;correct&amp;quot; this.&lt;br /&gt;
&lt;br /&gt;
===float===&lt;br /&gt;
&lt;br /&gt;
The float data type is a double-precision 64-bit IEEE 754 floating point. Its range of values is beyond the scope of this discussion, but is specified in [hhttps://docs.oracle.com/javase/specs/jls/se17/html/jls-4.html#jls-4.2.3 section 4.2.3 of the Java Language Specification], and a tool to help understand / quickly see how/where imprecisions happen can be found [https://www.h-schmidt.net/FloatConverter/IEEE754.html here].&lt;br /&gt;
&lt;br /&gt;
When assigning to a variable of type float, one should be careful to always enter numbers in decimal form, as unwanted behavior can result from supplying a value that KoLmafia may interpret as an int type without the decimal point.&lt;br /&gt;
&lt;br /&gt;
Note that float is not infinitely precise; it intrinsically rounds off after a certain point. This loss of accuracy is for the sake of storage, but beware of the possibility of small errors compounding from multiple float types.&lt;br /&gt;
{{&lt;br /&gt;
CodeSample|&lt;br /&gt;
description=For instance, try the following code as an example of how rather long post-decimal portions are handled:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
float f;&lt;br /&gt;
f = 4.9999999;&lt;br /&gt;
print( f );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The default value of a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; variable is 0.0.&lt;br /&gt;
&lt;br /&gt;
===string===&lt;br /&gt;
&lt;br /&gt;
A group of characters including, but not limited to: lowercase letters, uppercase characters, numbers, and various control characters. When assigning a value to a string, enclose the desired value in either single quotes (&amp;lt;code&amp;gt;&#039;&amp;lt;/code&amp;gt;), double quotes (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) or backticks (&amp;lt;code&amp;gt;`&amp;lt;/code&amp;gt;) (note you must use the same quote type on both ends of the string assignment). If you need to include the same character inside of the string itself, you will need to escape it first with a backslash.&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
CodeSample&lt;br /&gt;
|description=For example:&lt;br /&gt;
|code=&amp;lt;syntaxhighlight&amp;gt;string s = &amp;quot;This is my \&amp;quot;friend\&amp;quot; Pete.&amp;quot;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|moreinfo=Will result in the following being stored to s:&amp;lt;pre&amp;gt;This is my &amp;quot;friend&amp;quot; Pete&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The default value of a string is an empty string, or literally &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using backticks, you can concatenate expressions into your string using curly braces.&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
CodeSample&lt;br /&gt;
|description=For example:&lt;br /&gt;
|code=&amp;lt;syntaxhighlight&amp;gt;string s = `Hello {my_name()}, you have {$item[lime].item_amount()} lime(s)!`;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===buffer===&lt;br /&gt;
&lt;br /&gt;
Similar to a string, but more efficient in certain operations, including concatenation and passing as function arguments. For the most part, you can interchange references to strings and buffers. However, you should test all such actions first, as a few functions require a specific datatype to be supplied as a parameter. (Most notably, those listed under [[String Handling Routines#Regular Expressions|Regular Expressions]].)&lt;br /&gt;
&lt;br /&gt;
==Special Datatypes==&lt;br /&gt;
&lt;br /&gt;
Several datatypes are included in KoLmafia to represent common categories within the KoL universe.&lt;br /&gt;
&lt;br /&gt;
Note that while variables of these types are declared in the same way as for Primitive Datatypes; assigning and referencing them is done differently.&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=For example, to declare an item datatype and assign it a value, you would use the following line of code:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item it = $item[ broken skull ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The default values of any variable of one of the following types is &amp;lt;code&amp;gt;$&#039;&#039;type&#039;&#039;[ none ]&amp;lt;/code&amp;gt;. For example, the default value of a &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; variable is &amp;lt;code&amp;gt;$item[ none ]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===bounty===&lt;br /&gt;
&lt;br /&gt;
([[Bounty#Related Functions|Related Functions]])  ([[Bounty#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
These are the non-items that the bounty hunter asks you to retrieve from monsters around the kingdom. There are quite a lot of them (42 in total) so I won&#039;t list them all here. You can find more about bounties at the {{kolwiki|The Bounty Hunter Hunter&#039;s Shack}}.&lt;br /&gt;
&lt;br /&gt;
===class===&lt;br /&gt;
&lt;br /&gt;
([[Class#Related Functions|Related Functions]])  ([[Class#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Besides $class[ none ], there are six possible values for this datatype:&lt;br /&gt;
&lt;br /&gt;
* Seal Clubber&lt;br /&gt;
* Turtle Tamer&lt;br /&gt;
* Pastamancer&lt;br /&gt;
* Sauceror&lt;br /&gt;
* Disco Bandit&lt;br /&gt;
* Accordion Thief&lt;br /&gt;
&lt;br /&gt;
===coinmaster===&lt;br /&gt;
&lt;br /&gt;
([[Coinmaster#Related Functions|Related Functions]])  ([[Coinmaster#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
All shops that deal with currency other than meat. Known values include:&lt;br /&gt;
&lt;br /&gt;
* {{kolwiki|The Bounty Hunter Hunter&#039;s Shack|Bounty Hunter Hunter}}&lt;br /&gt;
* {{kolwiki|Mr. Store}}&lt;br /&gt;
* {{kolwiki|Hermit}}&lt;br /&gt;
* {{kolwiki|The Shore, Inc. Gift Shop}}&lt;br /&gt;
* {{kolwiki|The Trapper&#039;s Cabin|The Trapper}}&lt;br /&gt;
* {{kolwiki|A Vending Machine|Vending Machine}}&lt;br /&gt;
* {{kolwiki|The Swagger Shop}}&lt;br /&gt;
* {{kolwiki|The Hippy Camp (Wartime)|Dimemaster}}&lt;br /&gt;
* {{kolwiki|The Orcish Frat House|Quartersmaster}}&lt;br /&gt;
* {{kolwiki|BURT|Bugbear Token}}&lt;br /&gt;
* {{kolwiki|Freshwater Fishbonery}}&lt;br /&gt;
* {{kolwiki|Big Brother}}&lt;br /&gt;
* {{kolwiki|The Terrified Eagle Inn}}&lt;br /&gt;
* {{kolwiki|Ticket Redemption Counter|Arcade Ticket Counter}}&lt;br /&gt;
* {{kolwiki|Cashier|Game Shoppe}}&lt;br /&gt;
* {{kolwiki|Cashier|Game Shoppe Snacks}}&lt;br /&gt;
* {{kolwiki|The Isotope Smithery|Isotope Smithery}}&lt;br /&gt;
* {{kolwiki|Dollhawker&#039;s Emporium}}&lt;br /&gt;
* {{kolwiki|The Lunar Lunch-o-Mat|Lunar Lunch-o-Mat}}&lt;br /&gt;
* {{kolwiki|Paul&#039;s Boutique}}&lt;br /&gt;
* {{kolwiki|The Frozen Brogurt Stand}}&lt;br /&gt;
* {{kolwiki|Buff Jimmy&#039;s Souvenir Shop}}&lt;br /&gt;
* {{kolwiki|Taco Dan&#039;s Taco Stand}}&lt;br /&gt;
* {{kolwiki|You&#039;re the Fudge Wizard Now, Dog|Fudge Wand}}&lt;br /&gt;
* {{kolwiki|The Neandermall}}&lt;br /&gt;
* {{kolwiki|Legitimate Shoe Repair, Inc.}}&lt;br /&gt;
* {{kolwiki|warbear black box|Warbear Black Box}}&lt;br /&gt;
* {{kolwiki|The Dinsey Company Store}}&lt;br /&gt;
* {{kolwiki|Internet Meme Shop}}&lt;br /&gt;
&lt;br /&gt;
===effect===&lt;br /&gt;
&lt;br /&gt;
([[Effect#Related Functions|Related Functions]])  ([[Effect#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any effect you can be under in KoL, whether from items, skills, or what-have-you, is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $effect[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Effects}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===element===&lt;br /&gt;
&lt;br /&gt;
([[Element#Related Functions|Related Functions]])  ([[Element#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Besides $element[ none ], there are seven possible values for this datatype. (Note that &amp;quot;Bad Spelling&amp;quot; is not considered a true element.)&lt;br /&gt;
Also note that these names are case-sensitive (referencing $element[ Spooky ] will generate an error).&lt;br /&gt;
&lt;br /&gt;
* cold&lt;br /&gt;
* hot&lt;br /&gt;
* sleaze&lt;br /&gt;
* spooky&lt;br /&gt;
* stench&lt;br /&gt;
* slime&lt;br /&gt;
* supercold&lt;br /&gt;
&lt;br /&gt;
===familiar===&lt;br /&gt;
&lt;br /&gt;
([[Familiar#Related Functions|Related Functions]])  ([[Familiar#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any familiar available in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $familiar[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Familiars}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===item===&lt;br /&gt;
&lt;br /&gt;
([[Item#Related Functions|Related Functions]])  ([[Item#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any item in all of KoL is valid for this datatype. Note that unlike most special datatypes, item references can make use of the item ID number.&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=For example, you could assign the item plexiglass pants as follows:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item it = $item[ 1234 ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The full range, besides $item[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Items}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===location===&lt;br /&gt;
&lt;br /&gt;
([[Location#Related Functions|Related Functions]])  ([[Location#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any location one can adventure at in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $location[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Locations}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===monster===&lt;br /&gt;
&lt;br /&gt;
([[Monster#Related Functions|Related Functions]])  ([[Monster#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any monster you can encounter in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $monster[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Monster Compendium}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===path===&lt;br /&gt;
&lt;br /&gt;
([[Path#Related Functions|Related Functions]]) ([[Path#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any ascension path you can choose in Valhalla is valid for this datatype. This includes all {{kolwiki|special challenge paths}}, as well as Standard and the dietary restriction paths (Boozetafarian, Teetotaler, Oxygenarian). The &amp;quot;Unrestricted&amp;quot; path and aftercore are represented as $path[ none ].&lt;br /&gt;
&lt;br /&gt;
The full range, besides $path[ none ], is too much to list and keep up with here. See {{kolwiki|Ascension#Paths}} for more information.&lt;br /&gt;
&lt;br /&gt;
===phylum===&lt;br /&gt;
&lt;br /&gt;
([[Phylum#Related Functions|Related Functions]])  ([[Phylum#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Each monster has a {{kolwiki|Phylum}}. Besides $phylum[none], the possible values for this datatype are:&lt;br /&gt;
&lt;br /&gt;
* beast&lt;br /&gt;
* bug&lt;br /&gt;
* constellation&lt;br /&gt;
* construct&lt;br /&gt;
* demon&lt;br /&gt;
* dude&lt;br /&gt;
* elemental&lt;br /&gt;
* elf&lt;br /&gt;
* fish&lt;br /&gt;
* goblin&lt;br /&gt;
* hippy&lt;br /&gt;
* hobo&lt;br /&gt;
* humanoid&lt;br /&gt;
* horror&lt;br /&gt;
* mer-kin&lt;br /&gt;
* orc&lt;br /&gt;
* penguin&lt;br /&gt;
* pirate&lt;br /&gt;
* plant&lt;br /&gt;
* slime&lt;br /&gt;
* undead&lt;br /&gt;
* weird&lt;br /&gt;
&lt;br /&gt;
===servant===&lt;br /&gt;
&lt;br /&gt;
([[Servant#Related Functions|Related Functions]])  ([[Servant#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Servants are unique to the {{kolwiki|Actually Ed the Undying}} path and located {{kolwiki|The Servants&#039; Quarters}}, replacing familiars.&lt;br /&gt;
&lt;br /&gt;
* Assassin&lt;br /&gt;
* Belly-Dancer&lt;br /&gt;
* Bodyguard&lt;br /&gt;
* Cat&lt;br /&gt;
* Maid&lt;br /&gt;
* Priest&lt;br /&gt;
* Scribe&lt;br /&gt;
&lt;br /&gt;
===skill===&lt;br /&gt;
&lt;br /&gt;
([[Skill#Related Functions|Related Functions]])  ([[Skill#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any skill you can have in KoL, whether permable or not, granted by items, &#039;&#039;etc&#039;&#039;., is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $skill[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Skills}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===slot===&lt;br /&gt;
&lt;br /&gt;
([[Slot#Related Functions|Related Functions]])  (slot has no proxy record fields)&lt;br /&gt;
&lt;br /&gt;
Besides $slot[ none ], there are 16 possible values for this datatype.&lt;br /&gt;
&lt;br /&gt;
* hat&lt;br /&gt;
* back&lt;br /&gt;
* weapon&lt;br /&gt;
* off-hand&lt;br /&gt;
* shirt&lt;br /&gt;
* pants&lt;br /&gt;
* acc1&lt;br /&gt;
* acc2&lt;br /&gt;
* acc3&lt;br /&gt;
* familiar&lt;br /&gt;
* sticker1&lt;br /&gt;
* sticker2&lt;br /&gt;
* sticker3&lt;br /&gt;
* fakehand&lt;br /&gt;
* bootspur&lt;br /&gt;
* bootskin&lt;br /&gt;
&lt;br /&gt;
===stat===&lt;br /&gt;
&lt;br /&gt;
([[Stat#Related Functions|Related Functions]])  (stat has no proxy record fields)&lt;br /&gt;
&lt;br /&gt;
Besides $stat[ none ], there are six possible values for this datatype (the last three are for referencing sub-stats).&lt;br /&gt;
&lt;br /&gt;
* muscle&lt;br /&gt;
* mysticality&lt;br /&gt;
* moxie&lt;br /&gt;
* submuscle&lt;br /&gt;
* submysticality&lt;br /&gt;
* submoxie&lt;br /&gt;
&lt;br /&gt;
===thrall===&lt;br /&gt;
&lt;br /&gt;
([[Thrall#Related Functions|Related Functions]])  ([[Thrall#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Pastamancers have the ability to summon {{kolwiki|Pasta Thralls}}. &lt;br /&gt;
&lt;br /&gt;
* Angel Hair Wisp&lt;br /&gt;
* Elbow Macaroni&lt;br /&gt;
* Lasagmbie&lt;br /&gt;
* Penne Dreadful&lt;br /&gt;
* Spaghetti Elemental&lt;br /&gt;
* Spice Ghost&lt;br /&gt;
* Vampieroghi&lt;br /&gt;
* Vermincelli&lt;br /&gt;
&lt;br /&gt;
==aggregate==&lt;br /&gt;
&lt;br /&gt;
An aggregate is a complex datatype composed of two or more primitive or special datatypes. For more information, see [[Data Structures]].&lt;br /&gt;
&lt;br /&gt;
==record==&lt;br /&gt;
&lt;br /&gt;
Records are user-defined datatypes that hold as many sub-datatypes as desired. For more information, see the page for [[Data Structures]].&lt;br /&gt;
&lt;br /&gt;
==Plural Typed Constants==&lt;br /&gt;
&lt;br /&gt;
(see http://kolmafia.us/showthread.php?p=15592, from which this section is reproduced)&lt;br /&gt;
&lt;br /&gt;
Plural typed constants allow you to easily do something with a list of specified objects, without having to replicate code or laboriously build up an array of the objects so that you can iterate over it. Here&#039;s a quick example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
foreach weapon in $items[star sword, star staff, star crossbow] {&lt;br /&gt;
   if (available_amount(weapon) &amp;gt; 0) {&lt;br /&gt;
      equip(weapon);&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The syntax is basically the same as the existing typed constant feature, but with an &amp;quot;s&amp;quot; or &amp;quot;es&amp;quot; after the type name. (The &amp;quot;es&amp;quot; case is there so that you can properly pluralize &amp;quot;class&amp;quot;.) The text between the square brackets is interpreted as a comma-separated list of elements, each of which is converted to the specified type as if it were an individual constant. More details:&lt;br /&gt;
* The list can span multiple lines.&lt;br /&gt;
* Whitespace before or after elements is ignored.&lt;br /&gt;
* Completely empty elements are ignored (so that you can leave a comma at the end of the list).&lt;br /&gt;
* You can include a comma or closing square bracket in an element by writing it as &amp;quot;\,&amp;quot; or &amp;quot;\]&amp;quot;.&lt;br /&gt;
* All the other escape sequences allowed in strings are possible, such as &amp;quot;\n&amp;quot; (newline), &amp;quot;\t&amp;quot; (tab), and &amp;quot;\uXXXX&amp;quot; (Unicode character value). To put an actual backslash in an element, you have to write it as &amp;quot;\\&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The value generated by a plural constant is of type boolean[type], with the keys being the specified elements, and the boolean value always being true - although you won&#039;t normally do anything with the boolean, you&#039;d use a foreach loop to iterate over the keys. You can assign a plural constant to a variable declared as that type, but note that the value differs from a normal map in three important respects:&lt;br /&gt;
* Since the expression that generates it is syntactically a constant, the value has to be immutable. If you were allowed to change it in any way, those changes would appear in every future use of the same constant.&lt;br /&gt;
* There can be multiple instances of the same key - $ints[1,1,2,3,5,8] is perfectly valid, and will result in the value 1 appearing twice in a foreach loop.&lt;br /&gt;
* The keys will appear in the order you wrote them, rather than being sorted alphanumerically as maps usually do.&lt;br /&gt;
&lt;br /&gt;
In addition to being used in a foreach loop, plural constants also efficiently support membership testing via the &#039;contains&#039; operator. Here&#039;s another example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for hour from 1 to 12 {&lt;br /&gt;
   print(&amp;quot;It&#039;s &amp;quot; + hour + &amp;quot; o&#039;clock.&amp;quot;);&lt;br /&gt;
   if ($ints[10, 2, 4] contains hour) {&lt;br /&gt;
      print(&amp;quot;Time to drink a Dr Pepper!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
(Yes, that example could just as easily have been done with a switch statement.)&lt;br /&gt;
&lt;br /&gt;
Iterating over an empty list is rather pointless, so plural constants with no elements are given a different meaning: they represent every value of the specified type, where this is practical. (The &#039;none&#039; value, if defined for a given type, is omitted.) The biggest benefit here is $items[], which lets you loop over every defined item, more efficiently than you could otherwise write in a script (since the list is generated once per session and then cached), and without having to hard-code a maximum item ID number in your script. Example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
foreach it in $items[] {&lt;br /&gt;
   if (autosell_price(it) == 42) print(it);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Enumeration of all possible values works with the following types:&lt;br /&gt;
* $booleans[] - false and true.&lt;br /&gt;
* $items[]&lt;br /&gt;
* $locations[]&lt;br /&gt;
* $classes[]&lt;br /&gt;
* $stats[] - Muscle, Mysticality, Moxie: the substat values are omitted.&lt;br /&gt;
* $skills[]&lt;br /&gt;
* $effects[]&lt;br /&gt;
* $familiars[]&lt;br /&gt;
* $slots[] - includes sticker slots and fake hands, which you might not want to consider as normal slots.&lt;br /&gt;
* $monsters[]&lt;br /&gt;
* $elements[] - includes slime now, and possibly other not-quite-elements like cute in the future.&lt;br /&gt;
&lt;br /&gt;
The remaining types that can be used in plural constants require an explicit list of elements, since there are too many possible values:&lt;br /&gt;
* $ints[] - you don&#039;t have enough RAM to store a list with 18 sextillion elements.&lt;br /&gt;
* $floats[] - ditto.&lt;br /&gt;
* $strings[] - nobody has that much RAM.&lt;br /&gt;
&lt;br /&gt;
==Custom==&lt;br /&gt;
&lt;br /&gt;
===matcher===&lt;br /&gt;
&lt;br /&gt;
A matcher isn&#039;t really a datatype so much as it&#039;s a class, but it is included here for reference, as it is used much as datatypes are in ASH. It can only be declared through the function {{f|create_matcher}}, using two strings. One is the string to find matches in, the other a regular expression to test against. For more information on using a matcher, see [[Regular Expressions]].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
Buffers, aggregates, records and matchers are [https://developer.mozilla.org/en-US/docs/Glossary/Mutable mutable]. All other datatypes are immutable.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Data_Types&amp;diff=9187</id>
		<title>Data Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Data_Types&amp;diff=9187"/>
		<updated>2023-03-02T03:13:23Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: size of int pool...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Primitive Datatypes==&lt;br /&gt;
&lt;br /&gt;
===void===&lt;br /&gt;
Can be thought of better as the absence of a datatype. No value can be assigned to &#039;&#039;&#039;void&#039;&#039;&#039; nor can a value be returned from a function of datatype &#039;&#039;&#039;void&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===boolean===&lt;br /&gt;
A boolean value is either &#039;&#039;&#039;true&#039;&#039;&#039; or &#039;&#039;&#039;false&#039;&#039;&#039;. By default, a boolean variable is set to false.&lt;br /&gt;
&lt;br /&gt;
===int===&lt;br /&gt;
&lt;br /&gt;
A whole number (short for &amp;quot;integer&amp;quot;), either positive or negative (or 0).  The int used by KoLmafia is a 64-bit signed int, meaning it has a maximum value of 9,223,372,036,854,775,807 and a minimum value of -9,223,372,036,854,775,808. The default value of a integer variable is 0.&lt;br /&gt;
&lt;br /&gt;
Be careful when doing math with integers! As with some other strongly-typed languages, numbers are converted to integers at every step of the operation when only integer types are used. For example:&lt;br /&gt;
{{&lt;br /&gt;
CodeSample|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
int a = 1;&lt;br /&gt;
int b = 2;&lt;br /&gt;
print( a / b * 2 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Will give the output &amp;quot;0,&amp;quot; not &amp;quot;1&amp;quot; as you may expect. Changing either variable to a float type will &amp;quot;correct&amp;quot; this.&lt;br /&gt;
&lt;br /&gt;
===float===&lt;br /&gt;
&lt;br /&gt;
The float data type is a double-precision 64-bit IEEE 754 floating point. Its range of values is beyond the scope of this discussion, but is specified in [http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3 section 4.2.3 of the Java Language Specification], and a tool to help understand / quickly see how/where imprecisions happen can be found [https://www.h-schmidt.net/FloatConverter/IEEE754.html here].&lt;br /&gt;
&lt;br /&gt;
When assigning to a variable of type float, one should be careful to always enter numbers in decimal form, as unwanted behavior can result from supplying a value that KoLmafia may interpret as an int type without the decimal point.&lt;br /&gt;
&lt;br /&gt;
Note that float is not infinitely precise; it intrinsically rounds off after a certain point. This loss of accuracy is for the sake of storage, but beware of the possibility of small errors compounding from multiple float types.&lt;br /&gt;
{{&lt;br /&gt;
CodeSample|&lt;br /&gt;
description=For instance, try the following code as an example of how rather long post-decimal portions are handled:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
float f;&lt;br /&gt;
f = 4.9999999;&lt;br /&gt;
print( f );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The default value of a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; variable is 0.0.&lt;br /&gt;
&lt;br /&gt;
===string===&lt;br /&gt;
&lt;br /&gt;
A group of characters including, but not limited to: lowercase letters, uppercase characters, numbers, and various control characters. When assigning a value to a string, enclose the desired value in either single quotes (&amp;lt;code&amp;gt;&#039;&amp;lt;/code&amp;gt;), double quotes (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) or backticks (&amp;lt;code&amp;gt;`&amp;lt;/code&amp;gt;) (note you must use the same quote type on both ends of the string assignment). If you need to include the same character inside of the string itself, you will need to escape it first with a backslash.&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
CodeSample&lt;br /&gt;
|description=For example:&lt;br /&gt;
|code=&amp;lt;syntaxhighlight&amp;gt;string s = &amp;quot;This is my \&amp;quot;friend\&amp;quot; Pete.&amp;quot;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|moreinfo=Will result in the following being stored to s:&amp;lt;pre&amp;gt;This is my &amp;quot;friend&amp;quot; Pete&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The default value of a string is an empty string, or literally &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using backticks, you can concatenate expressions into your string using curly braces.&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
CodeSample&lt;br /&gt;
|description=For example:&lt;br /&gt;
|code=&amp;lt;syntaxhighlight&amp;gt;string s = `Hello {my_name()}, you have {$item[lime].item_amount()} lime(s)!`;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===buffer===&lt;br /&gt;
&lt;br /&gt;
Similar to a string, but more efficient in certain operations, including concatenation and passing as function arguments. For the most part, you can interchange references to strings and buffers. However, you should test all such actions first, as a few functions require a specific datatype to be supplied as a parameter. (Most notably, those listed under [[String Handling Routines#Regular Expressions|Regular Expressions]].)&lt;br /&gt;
&lt;br /&gt;
==Special Datatypes==&lt;br /&gt;
&lt;br /&gt;
Several datatypes are included in KoLmafia to represent common categories within the KoL universe.&lt;br /&gt;
&lt;br /&gt;
Note that while variables of these types are declared in the same way as for Primitive Datatypes; assigning and referencing them is done differently.&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=For example, to declare an item datatype and assign it a value, you would use the following line of code:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item it = $item[ broken skull ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The default values of any variable of one of the following types is &amp;lt;code&amp;gt;$&#039;&#039;type&#039;&#039;[ none ]&amp;lt;/code&amp;gt;. For example, the default value of a &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; variable is &amp;lt;code&amp;gt;$item[ none ]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===bounty===&lt;br /&gt;
&lt;br /&gt;
([[Bounty#Related Functions|Related Functions]])  ([[Bounty#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
These are the non-items that the bounty hunter asks you to retrieve from monsters around the kingdom. There are quite a lot of them (42 in total) so I won&#039;t list them all here. You can find more about bounties at the {{kolwiki|The Bounty Hunter Hunter&#039;s Shack}}.&lt;br /&gt;
&lt;br /&gt;
===class===&lt;br /&gt;
&lt;br /&gt;
([[Class#Related Functions|Related Functions]])  ([[Class#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Besides $class[ none ], there are six possible values for this datatype:&lt;br /&gt;
&lt;br /&gt;
* Seal Clubber&lt;br /&gt;
* Turtle Tamer&lt;br /&gt;
* Pastamancer&lt;br /&gt;
* Sauceror&lt;br /&gt;
* Disco Bandit&lt;br /&gt;
* Accordion Thief&lt;br /&gt;
&lt;br /&gt;
===coinmaster===&lt;br /&gt;
&lt;br /&gt;
([[Coinmaster#Related Functions|Related Functions]])  ([[Coinmaster#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
All shops that deal with currency other than meat. Known values include:&lt;br /&gt;
&lt;br /&gt;
* {{kolwiki|The Bounty Hunter Hunter&#039;s Shack|Bounty Hunter Hunter}}&lt;br /&gt;
* {{kolwiki|Mr. Store}}&lt;br /&gt;
* {{kolwiki|Hermit}}&lt;br /&gt;
* {{kolwiki|The Shore, Inc. Gift Shop}}&lt;br /&gt;
* {{kolwiki|The Trapper&#039;s Cabin|The Trapper}}&lt;br /&gt;
* {{kolwiki|A Vending Machine|Vending Machine}}&lt;br /&gt;
* {{kolwiki|The Swagger Shop}}&lt;br /&gt;
* {{kolwiki|The Hippy Camp (Wartime)|Dimemaster}}&lt;br /&gt;
* {{kolwiki|The Orcish Frat House|Quartersmaster}}&lt;br /&gt;
* {{kolwiki|BURT|Bugbear Token}}&lt;br /&gt;
* {{kolwiki|Freshwater Fishbonery}}&lt;br /&gt;
* {{kolwiki|Big Brother}}&lt;br /&gt;
* {{kolwiki|The Terrified Eagle Inn}}&lt;br /&gt;
* {{kolwiki|Ticket Redemption Counter|Arcade Ticket Counter}}&lt;br /&gt;
* {{kolwiki|Cashier|Game Shoppe}}&lt;br /&gt;
* {{kolwiki|Cashier|Game Shoppe Snacks}}&lt;br /&gt;
* {{kolwiki|The Isotope Smithery|Isotope Smithery}}&lt;br /&gt;
* {{kolwiki|Dollhawker&#039;s Emporium}}&lt;br /&gt;
* {{kolwiki|The Lunar Lunch-o-Mat|Lunar Lunch-o-Mat}}&lt;br /&gt;
* {{kolwiki|Paul&#039;s Boutique}}&lt;br /&gt;
* {{kolwiki|The Frozen Brogurt Stand}}&lt;br /&gt;
* {{kolwiki|Buff Jimmy&#039;s Souvenir Shop}}&lt;br /&gt;
* {{kolwiki|Taco Dan&#039;s Taco Stand}}&lt;br /&gt;
* {{kolwiki|You&#039;re the Fudge Wizard Now, Dog|Fudge Wand}}&lt;br /&gt;
* {{kolwiki|The Neandermall}}&lt;br /&gt;
* {{kolwiki|Legitimate Shoe Repair, Inc.}}&lt;br /&gt;
* {{kolwiki|warbear black box|Warbear Black Box}}&lt;br /&gt;
* {{kolwiki|The Dinsey Company Store}}&lt;br /&gt;
* {{kolwiki|Internet Meme Shop}}&lt;br /&gt;
&lt;br /&gt;
===effect===&lt;br /&gt;
&lt;br /&gt;
([[Effect#Related Functions|Related Functions]])  ([[Effect#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any effect you can be under in KoL, whether from items, skills, or what-have-you, is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $effect[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Effects}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===element===&lt;br /&gt;
&lt;br /&gt;
([[Element#Related Functions|Related Functions]])  ([[Element#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Besides $element[ none ], there are seven possible values for this datatype. (Note that &amp;quot;Bad Spelling&amp;quot; is not considered a true element.)&lt;br /&gt;
Also note that these names are case-sensitive (referencing $element[ Spooky ] will generate an error).&lt;br /&gt;
&lt;br /&gt;
* cold&lt;br /&gt;
* hot&lt;br /&gt;
* sleaze&lt;br /&gt;
* spooky&lt;br /&gt;
* stench&lt;br /&gt;
* slime&lt;br /&gt;
* supercold&lt;br /&gt;
&lt;br /&gt;
===familiar===&lt;br /&gt;
&lt;br /&gt;
([[Familiar#Related Functions|Related Functions]])  ([[Familiar#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any familiar available in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $familiar[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Familiars}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===item===&lt;br /&gt;
&lt;br /&gt;
([[Item#Related Functions|Related Functions]])  ([[Item#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any item in all of KoL is valid for this datatype. Note that unlike most special datatypes, item references can make use of the item ID number.&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=For example, you could assign the item plexiglass pants as follows:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item it = $item[ 1234 ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The full range, besides $item[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Items}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===location===&lt;br /&gt;
&lt;br /&gt;
([[Location#Related Functions|Related Functions]])  ([[Location#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any location one can adventure at in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $location[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Locations}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===monster===&lt;br /&gt;
&lt;br /&gt;
([[Monster#Related Functions|Related Functions]])  ([[Monster#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any monster you can encounter in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $monster[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Monster Compendium}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===path===&lt;br /&gt;
&lt;br /&gt;
([[Path#Related Functions|Related Functions]]) ([[Path#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any ascension path you can choose in Valhalla is valid for this datatype. This includes all {{kolwiki|special challenge paths}}, as well as Standard and the dietary restriction paths (Boozetafarian, Teetotaler, Oxygenarian). The &amp;quot;Unrestricted&amp;quot; path and aftercore are represented as $path[ none ].&lt;br /&gt;
&lt;br /&gt;
The full range, besides $path[ none ], is too much to list and keep up with here. See {{kolwiki|Ascension#Paths}} for more information.&lt;br /&gt;
&lt;br /&gt;
===phylum===&lt;br /&gt;
&lt;br /&gt;
([[Phylum#Related Functions|Related Functions]])  ([[Phylum#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Each monster has a {{kolwiki|Phylum}}. Besides $phylum[none], the possible values for this datatype are:&lt;br /&gt;
&lt;br /&gt;
* beast&lt;br /&gt;
* bug&lt;br /&gt;
* constellation&lt;br /&gt;
* construct&lt;br /&gt;
* demon&lt;br /&gt;
* dude&lt;br /&gt;
* elemental&lt;br /&gt;
* elf&lt;br /&gt;
* fish&lt;br /&gt;
* goblin&lt;br /&gt;
* hippy&lt;br /&gt;
* hobo&lt;br /&gt;
* humanoid&lt;br /&gt;
* horror&lt;br /&gt;
* mer-kin&lt;br /&gt;
* orc&lt;br /&gt;
* penguin&lt;br /&gt;
* pirate&lt;br /&gt;
* plant&lt;br /&gt;
* slime&lt;br /&gt;
* undead&lt;br /&gt;
* weird&lt;br /&gt;
&lt;br /&gt;
===servant===&lt;br /&gt;
&lt;br /&gt;
([[Servant#Related Functions|Related Functions]])  ([[Servant#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Servants are unique to the {{kolwiki|Actually Ed the Undying}} path and located {{kolwiki|The Servants&#039; Quarters}}, replacing familiars.&lt;br /&gt;
&lt;br /&gt;
* Assassin&lt;br /&gt;
* Belly-Dancer&lt;br /&gt;
* Bodyguard&lt;br /&gt;
* Cat&lt;br /&gt;
* Maid&lt;br /&gt;
* Priest&lt;br /&gt;
* Scribe&lt;br /&gt;
&lt;br /&gt;
===skill===&lt;br /&gt;
&lt;br /&gt;
([[Skill#Related Functions|Related Functions]])  ([[Skill#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any skill you can have in KoL, whether permable or not, granted by items, &#039;&#039;etc&#039;&#039;., is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $skill[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Skills}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===slot===&lt;br /&gt;
&lt;br /&gt;
([[Slot#Related Functions|Related Functions]])  (slot has no proxy record fields)&lt;br /&gt;
&lt;br /&gt;
Besides $slot[ none ], there are 16 possible values for this datatype.&lt;br /&gt;
&lt;br /&gt;
* hat&lt;br /&gt;
* back&lt;br /&gt;
* weapon&lt;br /&gt;
* off-hand&lt;br /&gt;
* shirt&lt;br /&gt;
* pants&lt;br /&gt;
* acc1&lt;br /&gt;
* acc2&lt;br /&gt;
* acc3&lt;br /&gt;
* familiar&lt;br /&gt;
* sticker1&lt;br /&gt;
* sticker2&lt;br /&gt;
* sticker3&lt;br /&gt;
* fakehand&lt;br /&gt;
* bootspur&lt;br /&gt;
* bootskin&lt;br /&gt;
&lt;br /&gt;
===stat===&lt;br /&gt;
&lt;br /&gt;
([[Stat#Related Functions|Related Functions]])  (stat has no proxy record fields)&lt;br /&gt;
&lt;br /&gt;
Besides $stat[ none ], there are six possible values for this datatype (the last three are for referencing sub-stats).&lt;br /&gt;
&lt;br /&gt;
* muscle&lt;br /&gt;
* mysticality&lt;br /&gt;
* moxie&lt;br /&gt;
* submuscle&lt;br /&gt;
* submysticality&lt;br /&gt;
* submoxie&lt;br /&gt;
&lt;br /&gt;
===thrall===&lt;br /&gt;
&lt;br /&gt;
([[Thrall#Related Functions|Related Functions]])  ([[Thrall#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Pastamancers have the ability to summon {{kolwiki|Pasta Thralls}}. &lt;br /&gt;
&lt;br /&gt;
* Angel Hair Wisp&lt;br /&gt;
* Elbow Macaroni&lt;br /&gt;
* Lasagmbie&lt;br /&gt;
* Penne Dreadful&lt;br /&gt;
* Spaghetti Elemental&lt;br /&gt;
* Spice Ghost&lt;br /&gt;
* Vampieroghi&lt;br /&gt;
* Vermincelli&lt;br /&gt;
&lt;br /&gt;
==aggregate==&lt;br /&gt;
&lt;br /&gt;
An aggregate is a complex datatype composed of two or more primitive or special datatypes. For more information, see [[Data Structures]].&lt;br /&gt;
&lt;br /&gt;
==record==&lt;br /&gt;
&lt;br /&gt;
Records are user-defined datatypes that hold as many sub-datatypes as desired. For more information, see the page for [[Data Structures]].&lt;br /&gt;
&lt;br /&gt;
==Plural Typed Constants==&lt;br /&gt;
&lt;br /&gt;
(see http://kolmafia.us/showthread.php?p=15592, from which this section is reproduced)&lt;br /&gt;
&lt;br /&gt;
Plural typed constants allow you to easily do something with a list of specified objects, without having to replicate code or laboriously build up an array of the objects so that you can iterate over it. Here&#039;s a quick example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
foreach weapon in $items[star sword, star staff, star crossbow] {&lt;br /&gt;
   if (available_amount(weapon) &amp;gt; 0) {&lt;br /&gt;
      equip(weapon);&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The syntax is basically the same as the existing typed constant feature, but with an &amp;quot;s&amp;quot; or &amp;quot;es&amp;quot; after the type name. (The &amp;quot;es&amp;quot; case is there so that you can properly pluralize &amp;quot;class&amp;quot;.) The text between the square brackets is interpreted as a comma-separated list of elements, each of which is converted to the specified type as if it were an individual constant. More details:&lt;br /&gt;
* The list can span multiple lines.&lt;br /&gt;
* Whitespace before or after elements is ignored.&lt;br /&gt;
* Completely empty elements are ignored (so that you can leave a comma at the end of the list).&lt;br /&gt;
* You can include a comma or closing square bracket in an element by writing it as &amp;quot;\,&amp;quot; or &amp;quot;\]&amp;quot;.&lt;br /&gt;
* All the other escape sequences allowed in strings are possible, such as &amp;quot;\n&amp;quot; (newline), &amp;quot;\t&amp;quot; (tab), and &amp;quot;\uXXXX&amp;quot; (Unicode character value). To put an actual backslash in an element, you have to write it as &amp;quot;\\&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The value generated by a plural constant is of type boolean[type], with the keys being the specified elements, and the boolean value always being true - although you won&#039;t normally do anything with the boolean, you&#039;d use a foreach loop to iterate over the keys. You can assign a plural constant to a variable declared as that type, but note that the value differs from a normal map in three important respects:&lt;br /&gt;
* Since the expression that generates it is syntactically a constant, the value has to be immutable. If you were allowed to change it in any way, those changes would appear in every future use of the same constant.&lt;br /&gt;
* There can be multiple instances of the same key - $ints[1,1,2,3,5,8] is perfectly valid, and will result in the value 1 appearing twice in a foreach loop.&lt;br /&gt;
* The keys will appear in the order you wrote them, rather than being sorted alphanumerically as maps usually do.&lt;br /&gt;
&lt;br /&gt;
In addition to being used in a foreach loop, plural constants also efficiently support membership testing via the &#039;contains&#039; operator. Here&#039;s another example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for hour from 1 to 12 {&lt;br /&gt;
   print(&amp;quot;It&#039;s &amp;quot; + hour + &amp;quot; o&#039;clock.&amp;quot;);&lt;br /&gt;
   if ($ints[10, 2, 4] contains hour) {&lt;br /&gt;
      print(&amp;quot;Time to drink a Dr Pepper!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
(Yes, that example could just as easily have been done with a switch statement.)&lt;br /&gt;
&lt;br /&gt;
Iterating over an empty list is rather pointless, so plural constants with no elements are given a different meaning: they represent every value of the specified type, where this is practical. (The &#039;none&#039; value, if defined for a given type, is omitted.) The biggest benefit here is $items[], which lets you loop over every defined item, more efficiently than you could otherwise write in a script (since the list is generated once per session and then cached), and without having to hard-code a maximum item ID number in your script. Example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
foreach it in $items[] {&lt;br /&gt;
   if (autosell_price(it) == 42) print(it);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Enumeration of all possible values works with the following types:&lt;br /&gt;
* $booleans[] - false and true.&lt;br /&gt;
* $items[]&lt;br /&gt;
* $locations[]&lt;br /&gt;
* $classes[]&lt;br /&gt;
* $stats[] - Muscle, Mysticality, Moxie: the substat values are omitted.&lt;br /&gt;
* $skills[]&lt;br /&gt;
* $effects[]&lt;br /&gt;
* $familiars[]&lt;br /&gt;
* $slots[] - includes sticker slots and fake hands, which you might not want to consider as normal slots.&lt;br /&gt;
* $monsters[]&lt;br /&gt;
* $elements[] - includes slime now, and possibly other not-quite-elements like cute in the future.&lt;br /&gt;
&lt;br /&gt;
The remaining types that can be used in plural constants require an explicit list of elements, since there are too many possible values:&lt;br /&gt;
* $ints[] - you don&#039;t have enough RAM to store a list with 18 sextillion elements.&lt;br /&gt;
* $floats[] - ditto.&lt;br /&gt;
* $strings[] - nobody has that much RAM.&lt;br /&gt;
&lt;br /&gt;
==Custom==&lt;br /&gt;
&lt;br /&gt;
===matcher===&lt;br /&gt;
&lt;br /&gt;
A matcher isn&#039;t really a datatype so much as it&#039;s a class, but it is included here for reference, as it is used much as datatypes are in ASH. It can only be declared through the function {{f|create_matcher}}, using two strings. One is the string to find matches in, the other a regular expression to test against. For more information on using a matcher, see [[Regular Expressions]].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
Buffers, aggregates, records and matchers are [https://developer.mozilla.org/en-US/docs/Glossary/Mutable mutable]. All other datatypes are immutable.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Data_Types&amp;diff=9186</id>
		<title>Data Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Data_Types&amp;diff=9186"/>
		<updated>2023-03-02T03:08:27Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* float */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Primitive Datatypes==&lt;br /&gt;
&lt;br /&gt;
===void===&lt;br /&gt;
Can be thought of better as the absence of a datatype. No value can be assigned to &#039;&#039;&#039;void&#039;&#039;&#039; nor can a value be returned from a function of datatype &#039;&#039;&#039;void&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===boolean===&lt;br /&gt;
A boolean value is either &#039;&#039;&#039;true&#039;&#039;&#039; or &#039;&#039;&#039;false&#039;&#039;&#039;. By default, a boolean variable is set to false.&lt;br /&gt;
&lt;br /&gt;
===int===&lt;br /&gt;
&lt;br /&gt;
A whole number (short for &amp;quot;integer&amp;quot;), either positive or negative (or 0).  The int used by KoLmafia is a 64-bit signed int, meaning it has a maximum value of 9,223,372,036,854,775,807 and a minimum value of -9,223,372,036,854,775,808. The default value of a integer variable is 0.&lt;br /&gt;
&lt;br /&gt;
Be careful when doing math with integers! As with some other strongly-typed languages, numbers are converted to integers at every step of the operation when only integer types are used. For example:&lt;br /&gt;
{{&lt;br /&gt;
CodeSample|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
int a = 1;&lt;br /&gt;
int b = 2;&lt;br /&gt;
print( a / b * 2 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Will give the output &amp;quot;0,&amp;quot; not &amp;quot;1&amp;quot; as you may expect. Changing either variable to a float type will &amp;quot;correct&amp;quot; this.&lt;br /&gt;
&lt;br /&gt;
===float===&lt;br /&gt;
&lt;br /&gt;
The float data type is a double-precision 64-bit IEEE 754 floating point. Its range of values is beyond the scope of this discussion, but is specified in [http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3 section 4.2.3 of the Java Language Specification], and a tool to help understand / quickly see how/where imprecisions happen can be found [https://www.h-schmidt.net/FloatConverter/IEEE754.html here].&lt;br /&gt;
&lt;br /&gt;
When assigning to a variable of type float, one should be careful to always enter numbers in decimal form, as unwanted behavior can result from supplying a value that KoLmafia may interpret as an int type without the decimal point.&lt;br /&gt;
&lt;br /&gt;
Note that float is not infinitely precise; it intrinsically rounds off after a certain point. This loss of accuracy is for the sake of storage, but beware of the possibility of small errors compounding from multiple float types.&lt;br /&gt;
{{&lt;br /&gt;
CodeSample|&lt;br /&gt;
description=For instance, try the following code as an example of how rather long post-decimal portions are handled:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
float f;&lt;br /&gt;
f = 4.9999999;&lt;br /&gt;
print( f );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The default value of a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; variable is 0.0.&lt;br /&gt;
&lt;br /&gt;
===string===&lt;br /&gt;
&lt;br /&gt;
A group of characters including, but not limited to: lowercase letters, uppercase characters, numbers, and various control characters. When assigning a value to a string, enclose the desired value in either single quotes (&amp;lt;code&amp;gt;&#039;&amp;lt;/code&amp;gt;), double quotes (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) or backticks (&amp;lt;code&amp;gt;`&amp;lt;/code&amp;gt;) (note you must use the same quote type on both ends of the string assignment). If you need to include the same character inside of the string itself, you will need to escape it first with a backslash.&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
CodeSample&lt;br /&gt;
|description=For example:&lt;br /&gt;
|code=&amp;lt;syntaxhighlight&amp;gt;string s = &amp;quot;This is my \&amp;quot;friend\&amp;quot; Pete.&amp;quot;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|moreinfo=Will result in the following being stored to s:&amp;lt;pre&amp;gt;This is my &amp;quot;friend&amp;quot; Pete&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The default value of a string is an empty string, or literally &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using backticks, you can concatenate expressions into your string using curly braces.&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
CodeSample&lt;br /&gt;
|description=For example:&lt;br /&gt;
|code=&amp;lt;syntaxhighlight&amp;gt;string s = `Hello {my_name()}, you have {$item[lime].item_amount()} lime(s)!`;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===buffer===&lt;br /&gt;
&lt;br /&gt;
Similar to a string, but more efficient in certain operations, including concatenation and passing as function arguments. For the most part, you can interchange references to strings and buffers. However, you should test all such actions first, as a few functions require a specific datatype to be supplied as a parameter. (Most notably, those listed under [[String Handling Routines#Regular Expressions|Regular Expressions]].)&lt;br /&gt;
&lt;br /&gt;
==Special Datatypes==&lt;br /&gt;
&lt;br /&gt;
Several datatypes are included in KoLmafia to represent common categories within the KoL universe.&lt;br /&gt;
&lt;br /&gt;
Note that while variables of these types are declared in the same way as for Primitive Datatypes; assigning and referencing them is done differently.&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=For example, to declare an item datatype and assign it a value, you would use the following line of code:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item it = $item[ broken skull ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The default values of any variable of one of the following types is &amp;lt;code&amp;gt;$&#039;&#039;type&#039;&#039;[ none ]&amp;lt;/code&amp;gt;. For example, the default value of a &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; variable is &amp;lt;code&amp;gt;$item[ none ]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===bounty===&lt;br /&gt;
&lt;br /&gt;
([[Bounty#Related Functions|Related Functions]])  ([[Bounty#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
These are the non-items that the bounty hunter asks you to retrieve from monsters around the kingdom. There are quite a lot of them (42 in total) so I won&#039;t list them all here. You can find more about bounties at the {{kolwiki|The Bounty Hunter Hunter&#039;s Shack}}.&lt;br /&gt;
&lt;br /&gt;
===class===&lt;br /&gt;
&lt;br /&gt;
([[Class#Related Functions|Related Functions]])  ([[Class#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Besides $class[ none ], there are six possible values for this datatype:&lt;br /&gt;
&lt;br /&gt;
* Seal Clubber&lt;br /&gt;
* Turtle Tamer&lt;br /&gt;
* Pastamancer&lt;br /&gt;
* Sauceror&lt;br /&gt;
* Disco Bandit&lt;br /&gt;
* Accordion Thief&lt;br /&gt;
&lt;br /&gt;
===coinmaster===&lt;br /&gt;
&lt;br /&gt;
([[Coinmaster#Related Functions|Related Functions]])  ([[Coinmaster#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
All shops that deal with currency other than meat. Known values include:&lt;br /&gt;
&lt;br /&gt;
* {{kolwiki|The Bounty Hunter Hunter&#039;s Shack|Bounty Hunter Hunter}}&lt;br /&gt;
* {{kolwiki|Mr. Store}}&lt;br /&gt;
* {{kolwiki|Hermit}}&lt;br /&gt;
* {{kolwiki|The Shore, Inc. Gift Shop}}&lt;br /&gt;
* {{kolwiki|The Trapper&#039;s Cabin|The Trapper}}&lt;br /&gt;
* {{kolwiki|A Vending Machine|Vending Machine}}&lt;br /&gt;
* {{kolwiki|The Swagger Shop}}&lt;br /&gt;
* {{kolwiki|The Hippy Camp (Wartime)|Dimemaster}}&lt;br /&gt;
* {{kolwiki|The Orcish Frat House|Quartersmaster}}&lt;br /&gt;
* {{kolwiki|BURT|Bugbear Token}}&lt;br /&gt;
* {{kolwiki|Freshwater Fishbonery}}&lt;br /&gt;
* {{kolwiki|Big Brother}}&lt;br /&gt;
* {{kolwiki|The Terrified Eagle Inn}}&lt;br /&gt;
* {{kolwiki|Ticket Redemption Counter|Arcade Ticket Counter}}&lt;br /&gt;
* {{kolwiki|Cashier|Game Shoppe}}&lt;br /&gt;
* {{kolwiki|Cashier|Game Shoppe Snacks}}&lt;br /&gt;
* {{kolwiki|The Isotope Smithery|Isotope Smithery}}&lt;br /&gt;
* {{kolwiki|Dollhawker&#039;s Emporium}}&lt;br /&gt;
* {{kolwiki|The Lunar Lunch-o-Mat|Lunar Lunch-o-Mat}}&lt;br /&gt;
* {{kolwiki|Paul&#039;s Boutique}}&lt;br /&gt;
* {{kolwiki|The Frozen Brogurt Stand}}&lt;br /&gt;
* {{kolwiki|Buff Jimmy&#039;s Souvenir Shop}}&lt;br /&gt;
* {{kolwiki|Taco Dan&#039;s Taco Stand}}&lt;br /&gt;
* {{kolwiki|You&#039;re the Fudge Wizard Now, Dog|Fudge Wand}}&lt;br /&gt;
* {{kolwiki|The Neandermall}}&lt;br /&gt;
* {{kolwiki|Legitimate Shoe Repair, Inc.}}&lt;br /&gt;
* {{kolwiki|warbear black box|Warbear Black Box}}&lt;br /&gt;
* {{kolwiki|The Dinsey Company Store}}&lt;br /&gt;
* {{kolwiki|Internet Meme Shop}}&lt;br /&gt;
&lt;br /&gt;
===effect===&lt;br /&gt;
&lt;br /&gt;
([[Effect#Related Functions|Related Functions]])  ([[Effect#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any effect you can be under in KoL, whether from items, skills, or what-have-you, is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $effect[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Effects}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===element===&lt;br /&gt;
&lt;br /&gt;
([[Element#Related Functions|Related Functions]])  ([[Element#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Besides $element[ none ], there are seven possible values for this datatype. (Note that &amp;quot;Bad Spelling&amp;quot; is not considered a true element.)&lt;br /&gt;
Also note that these names are case-sensitive (referencing $element[ Spooky ] will generate an error).&lt;br /&gt;
&lt;br /&gt;
* cold&lt;br /&gt;
* hot&lt;br /&gt;
* sleaze&lt;br /&gt;
* spooky&lt;br /&gt;
* stench&lt;br /&gt;
* slime&lt;br /&gt;
* supercold&lt;br /&gt;
&lt;br /&gt;
===familiar===&lt;br /&gt;
&lt;br /&gt;
([[Familiar#Related Functions|Related Functions]])  ([[Familiar#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any familiar available in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $familiar[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Familiars}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===item===&lt;br /&gt;
&lt;br /&gt;
([[Item#Related Functions|Related Functions]])  ([[Item#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any item in all of KoL is valid for this datatype. Note that unlike most special datatypes, item references can make use of the item ID number.&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=For example, you could assign the item plexiglass pants as follows:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item it = $item[ 1234 ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The full range, besides $item[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Items}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===location===&lt;br /&gt;
&lt;br /&gt;
([[Location#Related Functions|Related Functions]])  ([[Location#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any location one can adventure at in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $location[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Locations}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===monster===&lt;br /&gt;
&lt;br /&gt;
([[Monster#Related Functions|Related Functions]])  ([[Monster#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any monster you can encounter in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $monster[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Monster Compendium}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===path===&lt;br /&gt;
&lt;br /&gt;
([[Path#Related Functions|Related Functions]]) ([[Path#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any ascension path you can choose in Valhalla is valid for this datatype. This includes all {{kolwiki|special challenge paths}}, as well as Standard and the dietary restriction paths (Boozetafarian, Teetotaler, Oxygenarian). The &amp;quot;Unrestricted&amp;quot; path and aftercore are represented as $path[ none ].&lt;br /&gt;
&lt;br /&gt;
The full range, besides $path[ none ], is too much to list and keep up with here. See {{kolwiki|Ascension#Paths}} for more information.&lt;br /&gt;
&lt;br /&gt;
===phylum===&lt;br /&gt;
&lt;br /&gt;
([[Phylum#Related Functions|Related Functions]])  ([[Phylum#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Each monster has a {{kolwiki|Phylum}}. Besides $phylum[none], the possible values for this datatype are:&lt;br /&gt;
&lt;br /&gt;
* beast&lt;br /&gt;
* bug&lt;br /&gt;
* constellation&lt;br /&gt;
* construct&lt;br /&gt;
* demon&lt;br /&gt;
* dude&lt;br /&gt;
* elemental&lt;br /&gt;
* elf&lt;br /&gt;
* fish&lt;br /&gt;
* goblin&lt;br /&gt;
* hippy&lt;br /&gt;
* hobo&lt;br /&gt;
* humanoid&lt;br /&gt;
* horror&lt;br /&gt;
* mer-kin&lt;br /&gt;
* orc&lt;br /&gt;
* penguin&lt;br /&gt;
* pirate&lt;br /&gt;
* plant&lt;br /&gt;
* slime&lt;br /&gt;
* undead&lt;br /&gt;
* weird&lt;br /&gt;
&lt;br /&gt;
===servant===&lt;br /&gt;
&lt;br /&gt;
([[Servant#Related Functions|Related Functions]])  ([[Servant#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Servants are unique to the {{kolwiki|Actually Ed the Undying}} path and located {{kolwiki|The Servants&#039; Quarters}}, replacing familiars.&lt;br /&gt;
&lt;br /&gt;
* Assassin&lt;br /&gt;
* Belly-Dancer&lt;br /&gt;
* Bodyguard&lt;br /&gt;
* Cat&lt;br /&gt;
* Maid&lt;br /&gt;
* Priest&lt;br /&gt;
* Scribe&lt;br /&gt;
&lt;br /&gt;
===skill===&lt;br /&gt;
&lt;br /&gt;
([[Skill#Related Functions|Related Functions]])  ([[Skill#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any skill you can have in KoL, whether permable or not, granted by items, &#039;&#039;etc&#039;&#039;., is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $skill[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Skills}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===slot===&lt;br /&gt;
&lt;br /&gt;
([[Slot#Related Functions|Related Functions]])  (slot has no proxy record fields)&lt;br /&gt;
&lt;br /&gt;
Besides $slot[ none ], there are 16 possible values for this datatype.&lt;br /&gt;
&lt;br /&gt;
* hat&lt;br /&gt;
* back&lt;br /&gt;
* weapon&lt;br /&gt;
* off-hand&lt;br /&gt;
* shirt&lt;br /&gt;
* pants&lt;br /&gt;
* acc1&lt;br /&gt;
* acc2&lt;br /&gt;
* acc3&lt;br /&gt;
* familiar&lt;br /&gt;
* sticker1&lt;br /&gt;
* sticker2&lt;br /&gt;
* sticker3&lt;br /&gt;
* fakehand&lt;br /&gt;
* bootspur&lt;br /&gt;
* bootskin&lt;br /&gt;
&lt;br /&gt;
===stat===&lt;br /&gt;
&lt;br /&gt;
([[Stat#Related Functions|Related Functions]])  (stat has no proxy record fields)&lt;br /&gt;
&lt;br /&gt;
Besides $stat[ none ], there are six possible values for this datatype (the last three are for referencing sub-stats).&lt;br /&gt;
&lt;br /&gt;
* muscle&lt;br /&gt;
* mysticality&lt;br /&gt;
* moxie&lt;br /&gt;
* submuscle&lt;br /&gt;
* submysticality&lt;br /&gt;
* submoxie&lt;br /&gt;
&lt;br /&gt;
===thrall===&lt;br /&gt;
&lt;br /&gt;
([[Thrall#Related Functions|Related Functions]])  ([[Thrall#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Pastamancers have the ability to summon {{kolwiki|Pasta Thralls}}. &lt;br /&gt;
&lt;br /&gt;
* Angel Hair Wisp&lt;br /&gt;
* Elbow Macaroni&lt;br /&gt;
* Lasagmbie&lt;br /&gt;
* Penne Dreadful&lt;br /&gt;
* Spaghetti Elemental&lt;br /&gt;
* Spice Ghost&lt;br /&gt;
* Vampieroghi&lt;br /&gt;
* Vermincelli&lt;br /&gt;
&lt;br /&gt;
==aggregate==&lt;br /&gt;
&lt;br /&gt;
An aggregate is a complex datatype composed of two or more primitive or special datatypes. For more information, see [[Data Structures]].&lt;br /&gt;
&lt;br /&gt;
==record==&lt;br /&gt;
&lt;br /&gt;
Records are user-defined datatypes that hold as many sub-datatypes as desired. For more information, see the page for [[Data Structures]].&lt;br /&gt;
&lt;br /&gt;
==Plural Typed Constants==&lt;br /&gt;
&lt;br /&gt;
(see http://kolmafia.us/showthread.php?p=15592, from which this section is reproduced)&lt;br /&gt;
&lt;br /&gt;
Plural typed constants allow you to easily do something with a list of specified objects, without having to replicate code or laboriously build up an array of the objects so that you can iterate over it. Here&#039;s a quick example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
foreach weapon in $items[star sword, star staff, star crossbow] {&lt;br /&gt;
   if (available_amount(weapon) &amp;gt; 0) {&lt;br /&gt;
      equip(weapon);&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The syntax is basically the same as the existing typed constant feature, but with an &amp;quot;s&amp;quot; or &amp;quot;es&amp;quot; after the type name. (The &amp;quot;es&amp;quot; case is there so that you can properly pluralize &amp;quot;class&amp;quot;.) The text between the square brackets is interpreted as a comma-separated list of elements, each of which is converted to the specified type as if it were an individual constant. More details:&lt;br /&gt;
* The list can span multiple lines.&lt;br /&gt;
* Whitespace before or after elements is ignored.&lt;br /&gt;
* Completely empty elements are ignored (so that you can leave a comma at the end of the list).&lt;br /&gt;
* You can include a comma or closing square bracket in an element by writing it as &amp;quot;\,&amp;quot; or &amp;quot;\]&amp;quot;.&lt;br /&gt;
* All the other escape sequences allowed in strings are possible, such as &amp;quot;\n&amp;quot; (newline), &amp;quot;\t&amp;quot; (tab), and &amp;quot;\uXXXX&amp;quot; (Unicode character value). To put an actual backslash in an element, you have to write it as &amp;quot;\\&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The value generated by a plural constant is of type boolean[type], with the keys being the specified elements, and the boolean value always being true - although you won&#039;t normally do anything with the boolean, you&#039;d use a foreach loop to iterate over the keys. You can assign a plural constant to a variable declared as that type, but note that the value differs from a normal map in three important respects:&lt;br /&gt;
* Since the expression that generates it is syntactically a constant, the value has to be immutable. If you were allowed to change it in any way, those changes would appear in every future use of the same constant.&lt;br /&gt;
* There can be multiple instances of the same key - $ints[1,1,2,3,5,8] is perfectly valid, and will result in the value 1 appearing twice in a foreach loop.&lt;br /&gt;
* The keys will appear in the order you wrote them, rather than being sorted alphanumerically as maps usually do.&lt;br /&gt;
&lt;br /&gt;
In addition to being used in a foreach loop, plural constants also efficiently support membership testing via the &#039;contains&#039; operator. Here&#039;s another example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for hour from 1 to 12 {&lt;br /&gt;
   print(&amp;quot;It&#039;s &amp;quot; + hour + &amp;quot; o&#039;clock.&amp;quot;);&lt;br /&gt;
   if ($ints[10, 2, 4] contains hour) {&lt;br /&gt;
      print(&amp;quot;Time to drink a Dr Pepper!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
(Yes, that example could just as easily have been done with a switch statement.)&lt;br /&gt;
&lt;br /&gt;
Iterating over an empty list is rather pointless, so plural constants with no elements are given a different meaning: they represent every value of the specified type, where this is practical. (The &#039;none&#039; value, if defined for a given type, is omitted.) The biggest benefit here is $items[], which lets you loop over every defined item, more efficiently than you could otherwise write in a script (since the list is generated once per session and then cached), and without having to hard-code a maximum item ID number in your script. Example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
foreach it in $items[] {&lt;br /&gt;
   if (autosell_price(it) == 42) print(it);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Enumeration of all possible values works with the following types:&lt;br /&gt;
* $booleans[] - false and true.&lt;br /&gt;
* $items[]&lt;br /&gt;
* $locations[]&lt;br /&gt;
* $classes[]&lt;br /&gt;
* $stats[] - Muscle, Mysticality, Moxie: the substat values are omitted.&lt;br /&gt;
* $skills[]&lt;br /&gt;
* $effects[]&lt;br /&gt;
* $familiars[]&lt;br /&gt;
* $slots[] - includes sticker slots and fake hands, which you might not want to consider as normal slots.&lt;br /&gt;
* $monsters[]&lt;br /&gt;
* $elements[] - includes slime now, and possibly other not-quite-elements like cute in the future.&lt;br /&gt;
&lt;br /&gt;
The remaining types that can be used in plural constants require an explicit list of elements, since there are too many possible values:&lt;br /&gt;
* $ints[] - you don&#039;t have enough RAM to store a list with 4 billion elements.&lt;br /&gt;
* $floats[] - ditto.&lt;br /&gt;
* $strings[] - nobody has that much RAM.&lt;br /&gt;
&lt;br /&gt;
==Custom==&lt;br /&gt;
&lt;br /&gt;
===matcher===&lt;br /&gt;
&lt;br /&gt;
A matcher isn&#039;t really a datatype so much as it&#039;s a class, but it is included here for reference, as it is used much as datatypes are in ASH. It can only be declared through the function {{f|create_matcher}}, using two strings. One is the string to find matches in, the other a regular expression to test against. For more information on using a matcher, see [[Regular Expressions]].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
Buffers, aggregates, records and matchers are [https://developer.mozilla.org/en-US/docs/Glossary/Mutable mutable]. All other datatypes are immutable.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Data_Types&amp;diff=9185</id>
		<title>Data Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Data_Types&amp;diff=9185"/>
		<updated>2023-03-02T03:07:06Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* int */  is 64 bit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
==Primitive Datatypes==&lt;br /&gt;
&lt;br /&gt;
===void===&lt;br /&gt;
Can be thought of better as the absence of a datatype. No value can be assigned to &#039;&#039;&#039;void&#039;&#039;&#039; nor can a value be returned from a function of datatype &#039;&#039;&#039;void&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===boolean===&lt;br /&gt;
A boolean value is either &#039;&#039;&#039;true&#039;&#039;&#039; or &#039;&#039;&#039;false&#039;&#039;&#039;. By default, a boolean variable is set to false.&lt;br /&gt;
&lt;br /&gt;
===int===&lt;br /&gt;
&lt;br /&gt;
A whole number (short for &amp;quot;integer&amp;quot;), either positive or negative (or 0).  The int used by KoLmafia is a 64-bit signed int, meaning it has a maximum value of 9,223,372,036,854,775,807 and a minimum value of -9,223,372,036,854,775,808. The default value of a integer variable is 0.&lt;br /&gt;
&lt;br /&gt;
Be careful when doing math with integers! As with some other strongly-typed languages, numbers are converted to integers at every step of the operation when only integer types are used. For example:&lt;br /&gt;
{{&lt;br /&gt;
CodeSample|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
int a = 1;&lt;br /&gt;
int b = 2;&lt;br /&gt;
print( a / b * 2 );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Will give the output &amp;quot;0,&amp;quot; not &amp;quot;1&amp;quot; as you may expect. Changing either variable to a float type will &amp;quot;correct&amp;quot; this.&lt;br /&gt;
&lt;br /&gt;
===float===&lt;br /&gt;
&lt;br /&gt;
The float data type is a single-precision 32-bit IEEE 754 floating point. Its range of values is beyond the scope of this discussion, but is specified in [http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3 section 4.2.3 of the Java Language Specification], and a tool to help understand / quickly see how/where imprecisions happen can be found [https://www.h-schmidt.net/FloatConverter/IEEE754.html here].&lt;br /&gt;
&lt;br /&gt;
When assigning to a variable of type float, one should be careful to always enter numbers in decimal form, as unwanted behavior can result from supplying a value that KoLmafia may interpret as an int type without the decimal point.&lt;br /&gt;
&lt;br /&gt;
Note that float is not infinitely precise; it intrinsically rounds off after a certain point. This loss of accuracy is for the sake of storage, but beware of the possibility of small errors compounding from multiple float types.&lt;br /&gt;
{{&lt;br /&gt;
CodeSample|&lt;br /&gt;
description=For instance, try the following code as an example of how rather long post-decimal portions are handled:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
float f;&lt;br /&gt;
f = 4.9999999;&lt;br /&gt;
print( f );&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The default value of a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; variable is 0.0.&lt;br /&gt;
&lt;br /&gt;
===string===&lt;br /&gt;
&lt;br /&gt;
A group of characters including, but not limited to: lowercase letters, uppercase characters, numbers, and various control characters. When assigning a value to a string, enclose the desired value in either single quotes (&amp;lt;code&amp;gt;&#039;&amp;lt;/code&amp;gt;), double quotes (&amp;lt;code&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;) or backticks (&amp;lt;code&amp;gt;`&amp;lt;/code&amp;gt;) (note you must use the same quote type on both ends of the string assignment). If you need to include the same character inside of the string itself, you will need to escape it first with a backslash.&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
CodeSample&lt;br /&gt;
|description=For example:&lt;br /&gt;
|code=&amp;lt;syntaxhighlight&amp;gt;string s = &amp;quot;This is my \&amp;quot;friend\&amp;quot; Pete.&amp;quot;;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|moreinfo=Will result in the following being stored to s:&amp;lt;pre&amp;gt;This is my &amp;quot;friend&amp;quot; Pete&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
The default value of a string is an empty string, or literally &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using backticks, you can concatenate expressions into your string using curly braces.&lt;br /&gt;
&lt;br /&gt;
{{&lt;br /&gt;
CodeSample&lt;br /&gt;
|description=For example:&lt;br /&gt;
|code=&amp;lt;syntaxhighlight&amp;gt;string s = `Hello {my_name()}, you have {$item[lime].item_amount()} lime(s)!`;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===buffer===&lt;br /&gt;
&lt;br /&gt;
Similar to a string, but more efficient in certain operations, including concatenation and passing as function arguments. For the most part, you can interchange references to strings and buffers. However, you should test all such actions first, as a few functions require a specific datatype to be supplied as a parameter. (Most notably, those listed under [[String Handling Routines#Regular Expressions|Regular Expressions]].)&lt;br /&gt;
&lt;br /&gt;
==Special Datatypes==&lt;br /&gt;
&lt;br /&gt;
Several datatypes are included in KoLmafia to represent common categories within the KoL universe.&lt;br /&gt;
&lt;br /&gt;
Note that while variables of these types are declared in the same way as for Primitive Datatypes; assigning and referencing them is done differently.&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=For example, to declare an item datatype and assign it a value, you would use the following line of code:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item it = $item[ broken skull ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The default values of any variable of one of the following types is &amp;lt;code&amp;gt;$&#039;&#039;type&#039;&#039;[ none ]&amp;lt;/code&amp;gt;. For example, the default value of a &amp;lt;code&amp;gt;item&amp;lt;/code&amp;gt; variable is &amp;lt;code&amp;gt;$item[ none ]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===bounty===&lt;br /&gt;
&lt;br /&gt;
([[Bounty#Related Functions|Related Functions]])  ([[Bounty#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
These are the non-items that the bounty hunter asks you to retrieve from monsters around the kingdom. There are quite a lot of them (42 in total) so I won&#039;t list them all here. You can find more about bounties at the {{kolwiki|The Bounty Hunter Hunter&#039;s Shack}}.&lt;br /&gt;
&lt;br /&gt;
===class===&lt;br /&gt;
&lt;br /&gt;
([[Class#Related Functions|Related Functions]])  ([[Class#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Besides $class[ none ], there are six possible values for this datatype:&lt;br /&gt;
&lt;br /&gt;
* Seal Clubber&lt;br /&gt;
* Turtle Tamer&lt;br /&gt;
* Pastamancer&lt;br /&gt;
* Sauceror&lt;br /&gt;
* Disco Bandit&lt;br /&gt;
* Accordion Thief&lt;br /&gt;
&lt;br /&gt;
===coinmaster===&lt;br /&gt;
&lt;br /&gt;
([[Coinmaster#Related Functions|Related Functions]])  ([[Coinmaster#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
All shops that deal with currency other than meat. Known values include:&lt;br /&gt;
&lt;br /&gt;
* {{kolwiki|The Bounty Hunter Hunter&#039;s Shack|Bounty Hunter Hunter}}&lt;br /&gt;
* {{kolwiki|Mr. Store}}&lt;br /&gt;
* {{kolwiki|Hermit}}&lt;br /&gt;
* {{kolwiki|The Shore, Inc. Gift Shop}}&lt;br /&gt;
* {{kolwiki|The Trapper&#039;s Cabin|The Trapper}}&lt;br /&gt;
* {{kolwiki|A Vending Machine|Vending Machine}}&lt;br /&gt;
* {{kolwiki|The Swagger Shop}}&lt;br /&gt;
* {{kolwiki|The Hippy Camp (Wartime)|Dimemaster}}&lt;br /&gt;
* {{kolwiki|The Orcish Frat House|Quartersmaster}}&lt;br /&gt;
* {{kolwiki|BURT|Bugbear Token}}&lt;br /&gt;
* {{kolwiki|Freshwater Fishbonery}}&lt;br /&gt;
* {{kolwiki|Big Brother}}&lt;br /&gt;
* {{kolwiki|The Terrified Eagle Inn}}&lt;br /&gt;
* {{kolwiki|Ticket Redemption Counter|Arcade Ticket Counter}}&lt;br /&gt;
* {{kolwiki|Cashier|Game Shoppe}}&lt;br /&gt;
* {{kolwiki|Cashier|Game Shoppe Snacks}}&lt;br /&gt;
* {{kolwiki|The Isotope Smithery|Isotope Smithery}}&lt;br /&gt;
* {{kolwiki|Dollhawker&#039;s Emporium}}&lt;br /&gt;
* {{kolwiki|The Lunar Lunch-o-Mat|Lunar Lunch-o-Mat}}&lt;br /&gt;
* {{kolwiki|Paul&#039;s Boutique}}&lt;br /&gt;
* {{kolwiki|The Frozen Brogurt Stand}}&lt;br /&gt;
* {{kolwiki|Buff Jimmy&#039;s Souvenir Shop}}&lt;br /&gt;
* {{kolwiki|Taco Dan&#039;s Taco Stand}}&lt;br /&gt;
* {{kolwiki|You&#039;re the Fudge Wizard Now, Dog|Fudge Wand}}&lt;br /&gt;
* {{kolwiki|The Neandermall}}&lt;br /&gt;
* {{kolwiki|Legitimate Shoe Repair, Inc.}}&lt;br /&gt;
* {{kolwiki|warbear black box|Warbear Black Box}}&lt;br /&gt;
* {{kolwiki|The Dinsey Company Store}}&lt;br /&gt;
* {{kolwiki|Internet Meme Shop}}&lt;br /&gt;
&lt;br /&gt;
===effect===&lt;br /&gt;
&lt;br /&gt;
([[Effect#Related Functions|Related Functions]])  ([[Effect#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any effect you can be under in KoL, whether from items, skills, or what-have-you, is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $effect[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Effects}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===element===&lt;br /&gt;
&lt;br /&gt;
([[Element#Related Functions|Related Functions]])  ([[Element#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Besides $element[ none ], there are seven possible values for this datatype. (Note that &amp;quot;Bad Spelling&amp;quot; is not considered a true element.)&lt;br /&gt;
Also note that these names are case-sensitive (referencing $element[ Spooky ] will generate an error).&lt;br /&gt;
&lt;br /&gt;
* cold&lt;br /&gt;
* hot&lt;br /&gt;
* sleaze&lt;br /&gt;
* spooky&lt;br /&gt;
* stench&lt;br /&gt;
* slime&lt;br /&gt;
* supercold&lt;br /&gt;
&lt;br /&gt;
===familiar===&lt;br /&gt;
&lt;br /&gt;
([[Familiar#Related Functions|Related Functions]])  ([[Familiar#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any familiar available in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $familiar[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Familiars}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===item===&lt;br /&gt;
&lt;br /&gt;
([[Item#Related Functions|Related Functions]])  ([[Item#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any item in all of KoL is valid for this datatype. Note that unlike most special datatypes, item references can make use of the item ID number.&lt;br /&gt;
{{CodeSample|&lt;br /&gt;
description=For example, you could assign the item plexiglass pants as follows:|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
item it = $item[ 1234 ];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The full range, besides $item[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Items}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===location===&lt;br /&gt;
&lt;br /&gt;
([[Location#Related Functions|Related Functions]])  ([[Location#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any location one can adventure at in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $location[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Locations}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===monster===&lt;br /&gt;
&lt;br /&gt;
([[Monster#Related Functions|Related Functions]])  ([[Monster#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any monster you can encounter in KoL is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $monster[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Monster Compendium}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===path===&lt;br /&gt;
&lt;br /&gt;
([[Path#Related Functions|Related Functions]]) ([[Path#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any ascension path you can choose in Valhalla is valid for this datatype. This includes all {{kolwiki|special challenge paths}}, as well as Standard and the dietary restriction paths (Boozetafarian, Teetotaler, Oxygenarian). The &amp;quot;Unrestricted&amp;quot; path and aftercore are represented as $path[ none ].&lt;br /&gt;
&lt;br /&gt;
The full range, besides $path[ none ], is too much to list and keep up with here. See {{kolwiki|Ascension#Paths}} for more information.&lt;br /&gt;
&lt;br /&gt;
===phylum===&lt;br /&gt;
&lt;br /&gt;
([[Phylum#Related Functions|Related Functions]])  ([[Phylum#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Each monster has a {{kolwiki|Phylum}}. Besides $phylum[none], the possible values for this datatype are:&lt;br /&gt;
&lt;br /&gt;
* beast&lt;br /&gt;
* bug&lt;br /&gt;
* constellation&lt;br /&gt;
* construct&lt;br /&gt;
* demon&lt;br /&gt;
* dude&lt;br /&gt;
* elemental&lt;br /&gt;
* elf&lt;br /&gt;
* fish&lt;br /&gt;
* goblin&lt;br /&gt;
* hippy&lt;br /&gt;
* hobo&lt;br /&gt;
* humanoid&lt;br /&gt;
* horror&lt;br /&gt;
* mer-kin&lt;br /&gt;
* orc&lt;br /&gt;
* penguin&lt;br /&gt;
* pirate&lt;br /&gt;
* plant&lt;br /&gt;
* slime&lt;br /&gt;
* undead&lt;br /&gt;
* weird&lt;br /&gt;
&lt;br /&gt;
===servant===&lt;br /&gt;
&lt;br /&gt;
([[Servant#Related Functions|Related Functions]])  ([[Servant#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Servants are unique to the {{kolwiki|Actually Ed the Undying}} path and located {{kolwiki|The Servants&#039; Quarters}}, replacing familiars.&lt;br /&gt;
&lt;br /&gt;
* Assassin&lt;br /&gt;
* Belly-Dancer&lt;br /&gt;
* Bodyguard&lt;br /&gt;
* Cat&lt;br /&gt;
* Maid&lt;br /&gt;
* Priest&lt;br /&gt;
* Scribe&lt;br /&gt;
&lt;br /&gt;
===skill===&lt;br /&gt;
&lt;br /&gt;
([[Skill#Related Functions|Related Functions]])  ([[Skill#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Any skill you can have in KoL, whether permable or not, granted by items, &#039;&#039;etc&#039;&#039;., is valid for this datatype.&lt;br /&gt;
&lt;br /&gt;
The full range, besides $skill[ none ], is too much to list and keep up with here: please see the Wiki {{kolwiki|Skills}} page for more information.&lt;br /&gt;
&lt;br /&gt;
===slot===&lt;br /&gt;
&lt;br /&gt;
([[Slot#Related Functions|Related Functions]])  (slot has no proxy record fields)&lt;br /&gt;
&lt;br /&gt;
Besides $slot[ none ], there are 16 possible values for this datatype.&lt;br /&gt;
&lt;br /&gt;
* hat&lt;br /&gt;
* back&lt;br /&gt;
* weapon&lt;br /&gt;
* off-hand&lt;br /&gt;
* shirt&lt;br /&gt;
* pants&lt;br /&gt;
* acc1&lt;br /&gt;
* acc2&lt;br /&gt;
* acc3&lt;br /&gt;
* familiar&lt;br /&gt;
* sticker1&lt;br /&gt;
* sticker2&lt;br /&gt;
* sticker3&lt;br /&gt;
* fakehand&lt;br /&gt;
* bootspur&lt;br /&gt;
* bootskin&lt;br /&gt;
&lt;br /&gt;
===stat===&lt;br /&gt;
&lt;br /&gt;
([[Stat#Related Functions|Related Functions]])  (stat has no proxy record fields)&lt;br /&gt;
&lt;br /&gt;
Besides $stat[ none ], there are six possible values for this datatype (the last three are for referencing sub-stats).&lt;br /&gt;
&lt;br /&gt;
* muscle&lt;br /&gt;
* mysticality&lt;br /&gt;
* moxie&lt;br /&gt;
* submuscle&lt;br /&gt;
* submysticality&lt;br /&gt;
* submoxie&lt;br /&gt;
&lt;br /&gt;
===thrall===&lt;br /&gt;
&lt;br /&gt;
([[Thrall#Related Functions|Related Functions]])  ([[Thrall#Proxy Record Fields|Proxy Record Fields]])&lt;br /&gt;
&lt;br /&gt;
Pastamancers have the ability to summon {{kolwiki|Pasta Thralls}}. &lt;br /&gt;
&lt;br /&gt;
* Angel Hair Wisp&lt;br /&gt;
* Elbow Macaroni&lt;br /&gt;
* Lasagmbie&lt;br /&gt;
* Penne Dreadful&lt;br /&gt;
* Spaghetti Elemental&lt;br /&gt;
* Spice Ghost&lt;br /&gt;
* Vampieroghi&lt;br /&gt;
* Vermincelli&lt;br /&gt;
&lt;br /&gt;
==aggregate==&lt;br /&gt;
&lt;br /&gt;
An aggregate is a complex datatype composed of two or more primitive or special datatypes. For more information, see [[Data Structures]].&lt;br /&gt;
&lt;br /&gt;
==record==&lt;br /&gt;
&lt;br /&gt;
Records are user-defined datatypes that hold as many sub-datatypes as desired. For more information, see the page for [[Data Structures]].&lt;br /&gt;
&lt;br /&gt;
==Plural Typed Constants==&lt;br /&gt;
&lt;br /&gt;
(see http://kolmafia.us/showthread.php?p=15592, from which this section is reproduced)&lt;br /&gt;
&lt;br /&gt;
Plural typed constants allow you to easily do something with a list of specified objects, without having to replicate code or laboriously build up an array of the objects so that you can iterate over it. Here&#039;s a quick example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
foreach weapon in $items[star sword, star staff, star crossbow] {&lt;br /&gt;
   if (available_amount(weapon) &amp;gt; 0) {&lt;br /&gt;
      equip(weapon);&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
The syntax is basically the same as the existing typed constant feature, but with an &amp;quot;s&amp;quot; or &amp;quot;es&amp;quot; after the type name. (The &amp;quot;es&amp;quot; case is there so that you can properly pluralize &amp;quot;class&amp;quot;.) The text between the square brackets is interpreted as a comma-separated list of elements, each of which is converted to the specified type as if it were an individual constant. More details:&lt;br /&gt;
* The list can span multiple lines.&lt;br /&gt;
* Whitespace before or after elements is ignored.&lt;br /&gt;
* Completely empty elements are ignored (so that you can leave a comma at the end of the list).&lt;br /&gt;
* You can include a comma or closing square bracket in an element by writing it as &amp;quot;\,&amp;quot; or &amp;quot;\]&amp;quot;.&lt;br /&gt;
* All the other escape sequences allowed in strings are possible, such as &amp;quot;\n&amp;quot; (newline), &amp;quot;\t&amp;quot; (tab), and &amp;quot;\uXXXX&amp;quot; (Unicode character value). To put an actual backslash in an element, you have to write it as &amp;quot;\\&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The value generated by a plural constant is of type boolean[type], with the keys being the specified elements, and the boolean value always being true - although you won&#039;t normally do anything with the boolean, you&#039;d use a foreach loop to iterate over the keys. You can assign a plural constant to a variable declared as that type, but note that the value differs from a normal map in three important respects:&lt;br /&gt;
* Since the expression that generates it is syntactically a constant, the value has to be immutable. If you were allowed to change it in any way, those changes would appear in every future use of the same constant.&lt;br /&gt;
* There can be multiple instances of the same key - $ints[1,1,2,3,5,8] is perfectly valid, and will result in the value 1 appearing twice in a foreach loop.&lt;br /&gt;
* The keys will appear in the order you wrote them, rather than being sorted alphanumerically as maps usually do.&lt;br /&gt;
&lt;br /&gt;
In addition to being used in a foreach loop, plural constants also efficiently support membership testing via the &#039;contains&#039; operator. Here&#039;s another example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
for hour from 1 to 12 {&lt;br /&gt;
   print(&amp;quot;It&#039;s &amp;quot; + hour + &amp;quot; o&#039;clock.&amp;quot;);&lt;br /&gt;
   if ($ints[10, 2, 4] contains hour) {&lt;br /&gt;
      print(&amp;quot;Time to drink a Dr Pepper!&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
(Yes, that example could just as easily have been done with a switch statement.)&lt;br /&gt;
&lt;br /&gt;
Iterating over an empty list is rather pointless, so plural constants with no elements are given a different meaning: they represent every value of the specified type, where this is practical. (The &#039;none&#039; value, if defined for a given type, is omitted.) The biggest benefit here is $items[], which lets you loop over every defined item, more efficiently than you could otherwise write in a script (since the list is generated once per session and then cached), and without having to hard-code a maximum item ID number in your script. Example:&lt;br /&gt;
{{CodeSample|code=&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
foreach it in $items[] {&lt;br /&gt;
   if (autosell_price(it) == 42) print(it);&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Enumeration of all possible values works with the following types:&lt;br /&gt;
* $booleans[] - false and true.&lt;br /&gt;
* $items[]&lt;br /&gt;
* $locations[]&lt;br /&gt;
* $classes[]&lt;br /&gt;
* $stats[] - Muscle, Mysticality, Moxie: the substat values are omitted.&lt;br /&gt;
* $skills[]&lt;br /&gt;
* $effects[]&lt;br /&gt;
* $familiars[]&lt;br /&gt;
* $slots[] - includes sticker slots and fake hands, which you might not want to consider as normal slots.&lt;br /&gt;
* $monsters[]&lt;br /&gt;
* $elements[] - includes slime now, and possibly other not-quite-elements like cute in the future.&lt;br /&gt;
&lt;br /&gt;
The remaining types that can be used in plural constants require an explicit list of elements, since there are too many possible values:&lt;br /&gt;
* $ints[] - you don&#039;t have enough RAM to store a list with 4 billion elements.&lt;br /&gt;
* $floats[] - ditto.&lt;br /&gt;
* $strings[] - nobody has that much RAM.&lt;br /&gt;
&lt;br /&gt;
==Custom==&lt;br /&gt;
&lt;br /&gt;
===matcher===&lt;br /&gt;
&lt;br /&gt;
A matcher isn&#039;t really a datatype so much as it&#039;s a class, but it is included here for reference, as it is used much as datatypes are in ASH. It can only be declared through the function {{f|create_matcher}}, using two strings. One is the string to find matches in, the other a regular expression to test against. For more information on using a matcher, see [[Regular Expressions]].&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&lt;br /&gt;
Buffers, aggregates, records and matchers are [https://developer.mozilla.org/en-US/docs/Glossary/Mutable mutable]. All other datatypes are immutable.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=User:Mcroft&amp;diff=9184</id>
		<title>User:Mcroft</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=User:Mcroft&amp;diff=9184"/>
		<updated>2023-02-25T03:59:04Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: Undo revision 9183 by Mcroft (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My KoL main character is &amp;quot;Darwinlet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In 2005, I was really active in early development of KoLmafia, but it&#039;s been a long time...&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=User:Mcroft&amp;diff=9183</id>
		<title>User:Mcroft</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=User:Mcroft&amp;diff=9183"/>
		<updated>2023-02-25T03:57:12Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My KoL main character is &amp;quot;Darwinlet&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In 2005, I was really active in early development of KoLmafia, but it&#039;s been a long time...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;details&amp;gt;&lt;br /&gt;
&amp;lt;summary&amp;gt;I am a closed section.&amp;lt;/summary&amp;gt;&lt;br /&gt;
This is the details of the closed section&amp;lt;/details&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Rollover&amp;diff=9182</id>
		<title>Rollover</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Rollover&amp;diff=9182"/>
		<updated>2023-01-31T05:49:29Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: added missing rollover function to wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&lt;br /&gt;
#vardefine:name|rollover}}{{&lt;br /&gt;
#vardefine:return_type|int}}{{&lt;br /&gt;
&lt;br /&gt;
FunctionPage|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
&lt;br /&gt;
function1={{Function|&lt;br /&gt;
name={{#var:name}}|&lt;br /&gt;
aggregate={{#var:aggregate}}|&lt;br /&gt;
return_type={{#var:return_type}}|&lt;br /&gt;
return_also={{#var:return_also}}|&lt;br /&gt;
}}|&lt;br /&gt;
&lt;br /&gt;
function_description=Returns the unix epoch time of the next rollover.|&lt;br /&gt;
&lt;br /&gt;
code1={{CodeSample|&lt;br /&gt;
title=Code Sample|&lt;br /&gt;
description=The following tells you how long until rollover.|&lt;br /&gt;
code=&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
if (rollover() - now_to_int() &amp;gt; 0) {&lt;br /&gt;
   print(&amp;quot;There are &amp;quot; + (rollover() - now_to_int()) + &amp;quot; seconds until rollover.&amp;quot;);&lt;br /&gt;
} else {&lt;br /&gt;
   print(&amp;quot;Rollover is now.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}|&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{SeeAlso|gameday_to_string|gameday_to_int|now_to_int|now_to_string|time_to_string|timestamp_to_date|date_to_timestamp}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Miscellaneous Functions]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Talk:Installation&amp;diff=9147</id>
		<title>Talk:Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Talk:Installation&amp;diff=9147"/>
		<updated>2021-12-30T20:45:15Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: removed note to update to current standards, which I did immediately after writing a note.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Preface&amp;diff=9146</id>
		<title>KoLmafia Guide: Preface</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Preface&amp;diff=9146"/>
		<updated>2021-12-28T18:23:17Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: remove SourceForge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How I Teach &amp;amp; Requirements ==&lt;br /&gt;
&lt;br /&gt;
I have only played KoL for 3 months. (well, more like 7 now!) I am hoping this means that I will not take stuff for-granted like year-long players. I can actually address more advanced stuff now that I know how clan dungeons work, the Sea, and so forth. ;-)&lt;br /&gt;
&lt;br /&gt;
I assume that you have played KoL for at least a few weeks before reading this guide. This is simply so I can reference examples while teaching. This is not a strict requirement though... it just means that you might not catch some of my examples.&lt;br /&gt;
&lt;br /&gt;
Finally, you need to be able to &#039;&#039;&#039;play&#039;&#039;&#039; while reading this guide! Learning while trying to break a speed ascension record or something is probably not the best way to go. 50 turns should be enough to get through most of the lessons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My main goal is to start out playing KoL using KoLmafia&#039;s &#039;Relay Browser&#039;, which is basically identical to normal browser play. Then, each short lesson will progressively give you a new &#039;trick&#039; that you can use. This lets you learn at your own pace.&lt;br /&gt;
&lt;br /&gt;
Continue working through the guide by doing &#039;Lessons&#039; until you have learned as much as you want. The lessons are roughly in the order of importance, or more honestly, the order in which I figured the stuff out. :-) There is tons of stuff that I probably won&#039;t cover, but by the time you are done with the lessons, you will have the hang of it.&lt;br /&gt;
&lt;br /&gt;
== What About Greasemonkey? ==&lt;br /&gt;
&lt;br /&gt;
Greasemonkey is another scripting tool that can be used for Kingdom of Loathing.  Please skip this section if you don&#039;t know or care about Greasemonkey.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I tried Greasemonkey scripts. They are nice, but have four major disadvantages:&lt;br /&gt;
&lt;br /&gt;
* CodeRot - Many scripts are outdated and their functionality continues to break due to new content, changes, etc.&lt;br /&gt;
&lt;br /&gt;
* Out of Date - A script is typically written by the author who uses it, posts it, then it is forgotten. People quit KoL all the time for varying reasons. Hence, scripts are very likely to be outdated by the time you find them.&lt;br /&gt;
&lt;br /&gt;
* Version Overload - On the other hand, there can be too many versions of a popular script, all written by different people who baselined off of someone else&#039;s version and so forth. Certain versions incorporate particular fixes and updates, but might be lacking updates and rewrites by someone else. It can be difficult to find the latest, most correct version of a particular script.&lt;br /&gt;
&lt;br /&gt;
* Security Issues - Greasemonkey by itself doesn&#039;t do anything. All functionality comes from the actual scripts, which coupled with many versions/updates and the fact that scripts are scattered all over the internet makes executing them more of a security risk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I decided to try KoLmafia which has these advantages:&lt;br /&gt;
&lt;br /&gt;
* More Secure - It comes from ONE open-source website and its base version includes plenty of functionality. This makes it much safer to use out of the box.&lt;br /&gt;
&lt;br /&gt;
* Easier to Install - No digging around and searching forums for hours to find the right script. (At least not until you have mastered Mafia and go looking for Mafia-specific scripts...)&lt;br /&gt;
&lt;br /&gt;
* Easier to Customize - Not much of an issue at first, but writing a new Greasemonkey script is relatively hard. Modifying KoLmafia behavior can be a lot easier for certain aspects.&lt;br /&gt;
&lt;br /&gt;
* Consolidated Updates - All KoLmafia work occurs at its GitHub website. Versions are numbered and under version-control. This means you can easily find the most up-to-date version and no intermediate fixes were skipped.&lt;br /&gt;
&lt;br /&gt;
* Easier to Figure Out - While the documentation for KoLmafia is not amazing, you will have a lot more luck finding help documents (like this one!) for Mafia, as opposed to documentation for random Greasemonkey scripts.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
You need to have this post handy, &#039;&#039;&#039;while playing&#039;&#039;&#039; I will guide you through each lesson, but you have to be reading it while using KoLmafia for it to really make any sense. Printing it or having it on a second monitor is helpful.&lt;br /&gt;
&lt;br /&gt;
First, here&#039;s a list of various websites that I may refer to during the guide. You do not need to worry about them now!&lt;br /&gt;
&lt;br /&gt;
*KoLmafia on GitHub: https://github.com/kolmafia/kolmafia&amp;lt;br /&amp;gt;&lt;br /&gt;
*KoLmafia forum: http://kolmafia.us/&amp;lt;br /&amp;gt;&lt;br /&gt;
*KolMafia Wiki: http://wiki.kolmafia.us/index.php?title=Main_Page&amp;lt;br /&amp;gt;&lt;br /&gt;
*A Previously Existing Guide: http://forums.kingdomofloathing.com/vb/showthread.php?t=140340&amp;lt;br /&amp;gt;&lt;br /&gt;
*List of CLI Commands http://kolmafia.sourceforge.net/scripting.html&amp;lt;br /&amp;gt;&lt;br /&gt;
*List of all KoLmafia global variables (more for scripting): http://wiki.kolmafia.us/index.php?title=List_of_KoLmafia_Properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
We are now officially starting your KoLmafia lessons!&lt;br /&gt;
&lt;br /&gt;
# Download the latest build from [https://ci.kolmafia.us KoLmafia&#039;s Build Server]&lt;br /&gt;
# By default it picks the appropriate package for you. All you need is &#039;&#039;&#039;your&#039;&#039;&#039; system&#039;s file. As a windows user, I download the 3 Meg executable. Mac users download theirs. Linux, etc. If all else fails, use the java Jar file.&lt;br /&gt;
# Move the file somewhere handy. Note that KoLmafia can be downloaded as an executable. However, it does &#039;&#039;&#039;not install&#039;&#039;&#039; per se.  Instead, I like to say that it &#039;roots&#039;.  When executed, &#039;&#039;&#039;will create quite a few subfolders&#039;&#039;&#039; to store its settings. Therefore, I extremely highly recommend placing it in its own folder. Once moved, make a link to it on your desktop so you can easily execute it. . You just run the file to run KoLmafia. No further setup is needed.&lt;br /&gt;
# If the file doesn&#039;t run, you need the 1.6 or better Java Runtime Environment. This is not particularly hard and many will likely already have it. The KoLmafia website given above, has a &#039;Getting Started&#039; section that you can refer to in case of such issues.&lt;br /&gt;
# When you first run it, &#039;&#039;&#039;two&#039;&#039;&#039; windows pop up. Ignore the complicated looking frame, and look at the one with the login fields. Type in your login info (make sure you don&#039;t have KoL running elsewhere obviously), then click the &#039;&#039;&#039;LOGIN&#039;&#039;&#039; button. Ignore the RELAY button for now. Keep the other options unchecked, including breakfast. We will discuss this stuff later.&lt;br /&gt;
# The Login frame goes away and now you have the main box, which I will call the KoLmafia Frame. I don&#039;t have a place to store an up to date picture, but the whole thing is kind-of intimidating. You are probably ready to quit, but &#039;&#039;stick in there!&#039;&#039;&#039; We will make this easy by doing things step-by-step. I&#039;m a noob, remember? I got your back! ;-)&lt;br /&gt;
# Note that is possible that KoLmafia &#039;&#039;&#039;may pop up an events logger window&#039;&#039;&#039;.  This occurrs if you were attacked, received a message, or whatever other event type stuff might happen.  Just close that small window if you encounter it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Continue&#039;&#039;&#039; to [[KoLmafia Guide: Basics (Relay Browser)|Lesson 1: Basics (Relay Browser)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:KoLmafia Guide]][[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Preface&amp;diff=9145</id>
		<title>KoLmafia Guide: Preface</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Preface&amp;diff=9145"/>
		<updated>2021-12-28T18:20:32Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* Links */ i don&amp;#039;t want to change this, but I don&amp;#039;t want anyone finding SourceForge...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How I Teach &amp;amp; Requirements ==&lt;br /&gt;
&lt;br /&gt;
I have only played KoL for 3 months. (well, more like 7 now!) I am hoping this means that I will not take stuff for-granted like year-long players. I can actually address more advanced stuff now that I know how clan dungeons work, the Sea, and so forth. ;-)&lt;br /&gt;
&lt;br /&gt;
I assume that you have played KoL for at least a few weeks before reading this guide. This is simply so I can reference examples while teaching. This is not a strict requirement though... it just means that you might not catch some of my examples.&lt;br /&gt;
&lt;br /&gt;
Finally, you need to be able to &#039;&#039;&#039;play&#039;&#039;&#039; while reading this guide! Learning while trying to break a speed ascension record or something is probably not the best way to go. 50 turns should be enough to get through most of the lessons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My main goal is to start out playing KoL using KoLmafia&#039;s &#039;Relay Browser&#039;, which is basically identical to normal browser play. Then, each short lesson will progressively give you a new &#039;trick&#039; that you can use. This lets you learn at your own pace.&lt;br /&gt;
&lt;br /&gt;
Continue working through the guide by doing &#039;Lessons&#039; until you have learned as much as you want. The lessons are roughly in the order of importance, or more honestly, the order in which I figured the stuff out. :-) There is tons of stuff that I probably won&#039;t cover, but by the time you are done with the lessons, you will have the hang of it.&lt;br /&gt;
&lt;br /&gt;
== What About Greasemonkey? ==&lt;br /&gt;
&lt;br /&gt;
Greasemonkey is another scripting tool that can be used for Kingdom of Loathing.  Please skip this section if you don&#039;t know or care about Greasemonkey.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I tried Greasemonkey scripts. They are nice, but have four major disadvantages:&lt;br /&gt;
&lt;br /&gt;
* CodeRot - Many scripts are outdated and their functionality continues to break due to new content, changes, etc.&lt;br /&gt;
&lt;br /&gt;
* Out of Date - A script is typically written by the author who uses it, posts it, then it is forgotten. People quit KoL all the time for varying reasons. Hence, scripts are very likely to be outdated by the time you find them.&lt;br /&gt;
&lt;br /&gt;
* Version Overload - On the other hand, there can be too many versions of a popular script, all written by different people who baselined off of someone else&#039;s version and so forth. Certain versions incorporate particular fixes and updates, but might be lacking updates and rewrites by someone else. It can be difficult to find the latest, most correct version of a particular script.&lt;br /&gt;
&lt;br /&gt;
* Security Issues - Greasemonkey by itself doesn&#039;t do anything. All functionality comes from the actual scripts, which coupled with many versions/updates and the fact that scripts are scattered all over the internet makes executing them more of a security risk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I decided to try KoLmafia which has these advantages:&lt;br /&gt;
&lt;br /&gt;
* More Secure - It comes from ONE open-source website and its base version includes plenty of functionality. This makes it much safer to use out of the box.&lt;br /&gt;
&lt;br /&gt;
* Easier to Install - No digging around and searching forums for hours to find the right script. (At least not until you have mastered Mafia and go looking for Mafia-specific scripts...)&lt;br /&gt;
&lt;br /&gt;
* Easier to Customize - Not much of an issue at first, but writing a new Greasemonkey script is relatively hard. Modifying KoLmafia behavior can be a lot easier for certain aspects.&lt;br /&gt;
&lt;br /&gt;
* Consolidated Updates - All KoLmafia work occurs at its sourceforge website. Versions are numbered and under version-control. This means you can easily find the most up-to-date version and no intermediate fixes were skipped.&lt;br /&gt;
&lt;br /&gt;
* Easier to Figure Out - While the documentation for KoLmafia is not amazing, you will have a lot more luck finding help documents (like this one!) for Mafia, as opposed to documentation for random Greasemonkey scripts.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
You need to have this post handy, &#039;&#039;&#039;while playing&#039;&#039;&#039; I will guide you through each lesson, but you have to be reading it while using KoLmafia for it to really make any sense. Printing it or having it on a second monitor is helpful.&lt;br /&gt;
&lt;br /&gt;
First, here&#039;s a list of various websites that I may refer to during the guide. You do not need to worry about them now!&lt;br /&gt;
&lt;br /&gt;
*KoLmafia on GitHub: https://github.com/kolmafia/kolmafia&amp;lt;br /&amp;gt;&lt;br /&gt;
*KoLmafia forum: http://kolmafia.us/&amp;lt;br /&amp;gt;&lt;br /&gt;
*KolMafia Wiki: http://wiki.kolmafia.us/index.php?title=Main_Page&amp;lt;br /&amp;gt;&lt;br /&gt;
*A Previously Existing Guide: http://forums.kingdomofloathing.com/vb/showthread.php?t=140340&amp;lt;br /&amp;gt;&lt;br /&gt;
*List of CLI Commands http://kolmafia.sourceforge.net/scripting.html&amp;lt;br /&amp;gt;&lt;br /&gt;
*List of all KoLmafia global variables (more for scripting): http://wiki.kolmafia.us/index.php?title=List_of_KoLmafia_Properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
We are now officially starting your KoLmafia lessons!&lt;br /&gt;
&lt;br /&gt;
# Download the latest build from [https://ci.kolmafia.us KoLmafia&#039;s Build Server]&lt;br /&gt;
# By default it picks the appropriate package for you. All you need is &#039;&#039;&#039;your&#039;&#039;&#039; system&#039;s file. As a windows user, I download the 3 Meg executable. Mac users download theirs. Linux, etc. If all else fails, use the java Jar file.&lt;br /&gt;
# Move the file somewhere handy. Note that KoLmafia can be downloaded as an executable. However, it does &#039;&#039;&#039;not install&#039;&#039;&#039; per se.  Instead, I like to say that it &#039;roots&#039;.  When executed, &#039;&#039;&#039;will create quite a few subfolders&#039;&#039;&#039; to store its settings. Therefore, I extremely highly recommend placing it in its own folder. Once moved, make a link to it on your desktop so you can easily execute it. . You just run the file to run KoLmafia. No further setup is needed.&lt;br /&gt;
# If the file doesn&#039;t run, you need the 1.6 or better Java Runtime Environment. This is not particularly hard and many will likely already have it. The KoLmafia website given above, has a &#039;Getting Started&#039; section that you can refer to in case of such issues.&lt;br /&gt;
# When you first run it, &#039;&#039;&#039;two&#039;&#039;&#039; windows pop up. Ignore the complicated looking frame, and look at the one with the login fields. Type in your login info (make sure you don&#039;t have KoL running elsewhere obviously), then click the &#039;&#039;&#039;LOGIN&#039;&#039;&#039; button. Ignore the RELAY button for now. Keep the other options unchecked, including breakfast. We will discuss this stuff later.&lt;br /&gt;
# The Login frame goes away and now you have the main box, which I will call the KoLmafia Frame. I don&#039;t have a place to store an up to date picture, but the whole thing is kind-of intimidating. You are probably ready to quit, but &#039;&#039;stick in there!&#039;&#039;&#039; We will make this easy by doing things step-by-step. I&#039;m a noob, remember? I got your back! ;-)&lt;br /&gt;
# Note that is possible that KoLmafia &#039;&#039;&#039;may pop up an events logger window&#039;&#039;&#039;.  This occurrs if you were attacked, received a message, or whatever other event type stuff might happen.  Just close that small window if you encounter it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Continue&#039;&#039;&#039; to [[KoLmafia Guide: Basics (Relay Browser)|Lesson 1: Basics (Relay Browser)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:KoLmafia Guide]][[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Preface&amp;diff=9144</id>
		<title>KoLmafia Guide: Preface</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=KoLmafia_Guide:_Preface&amp;diff=9144"/>
		<updated>2021-12-28T18:17:06Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: rooting out all &amp;quot;sourceforge&amp;quot; references...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== How I Teach &amp;amp; Requirements ==&lt;br /&gt;
&lt;br /&gt;
I have only played KoL for 3 months. (well, more like 7 now!) I am hoping this means that I will not take stuff for-granted like year-long players. I can actually address more advanced stuff now that I know how clan dungeons work, the Sea, and so forth. ;-)&lt;br /&gt;
&lt;br /&gt;
I assume that you have played KoL for at least a few weeks before reading this guide. This is simply so I can reference examples while teaching. This is not a strict requirement though... it just means that you might not catch some of my examples.&lt;br /&gt;
&lt;br /&gt;
Finally, you need to be able to &#039;&#039;&#039;play&#039;&#039;&#039; while reading this guide! Learning while trying to break a speed ascension record or something is probably not the best way to go. 50 turns should be enough to get through most of the lessons.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My main goal is to start out playing KoL using KoLmafia&#039;s &#039;Relay Browser&#039;, which is basically identical to normal browser play. Then, each short lesson will progressively give you a new &#039;trick&#039; that you can use. This lets you learn at your own pace.&lt;br /&gt;
&lt;br /&gt;
Continue working through the guide by doing &#039;Lessons&#039; until you have learned as much as you want. The lessons are roughly in the order of importance, or more honestly, the order in which I figured the stuff out. :-) There is tons of stuff that I probably won&#039;t cover, but by the time you are done with the lessons, you will have the hang of it.&lt;br /&gt;
&lt;br /&gt;
== What About Greasemonkey? ==&lt;br /&gt;
&lt;br /&gt;
Greasemonkey is another scripting tool that can be used for Kingdom of Loathing.  Please skip this section if you don&#039;t know or care about Greasemonkey.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I tried Greasemonkey scripts. They are nice, but have four major disadvantages:&lt;br /&gt;
&lt;br /&gt;
* CodeRot - Many scripts are outdated and their functionality continues to break due to new content, changes, etc.&lt;br /&gt;
&lt;br /&gt;
* Out of Date - A script is typically written by the author who uses it, posts it, then it is forgotten. People quit KoL all the time for varying reasons. Hence, scripts are very likely to be outdated by the time you find them.&lt;br /&gt;
&lt;br /&gt;
* Version Overload - On the other hand, there can be too many versions of a popular script, all written by different people who baselined off of someone else&#039;s version and so forth. Certain versions incorporate particular fixes and updates, but might be lacking updates and rewrites by someone else. It can be difficult to find the latest, most correct version of a particular script.&lt;br /&gt;
&lt;br /&gt;
* Security Issues - Greasemonkey by itself doesn&#039;t do anything. All functionality comes from the actual scripts, which coupled with many versions/updates and the fact that scripts are scattered all over the internet makes executing them more of a security risk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I decided to try KoLmafia which has these advantages:&lt;br /&gt;
&lt;br /&gt;
* More Secure - It comes from ONE open-source website and its base version includes plenty of functionality. This makes it much safer to use out of the box.&lt;br /&gt;
&lt;br /&gt;
* Easier to Install - No digging around and searching forums for hours to find the right script. (At least not until you have mastered Mafia and go looking for Mafia-specific scripts...)&lt;br /&gt;
&lt;br /&gt;
* Easier to Customize - Not much of an issue at first, but writing a new Greasemonkey script is relatively hard. Modifying KoLmafia behavior can be a lot easier for certain aspects.&lt;br /&gt;
&lt;br /&gt;
* Consolidated Updates - All KoLmafia work occurs at its sourceforge website. Versions are numbered and under version-control. This means you can easily find the most up-to-date version and no intermediate fixes were skipped.&lt;br /&gt;
&lt;br /&gt;
* Easier to Figure Out - While the documentation for KoLmafia is not amazing, you will have a lot more luck finding help documents (like this one!) for Mafia, as opposed to documentation for random Greasemonkey scripts.&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
You need to have this post handy, &#039;&#039;&#039;while playing&#039;&#039;&#039; I will guide you through each lesson, but you have to be reading it while using KoLmafia for it to really make any sense. Printing it or having it on a second monitor is helpful.&lt;br /&gt;
&lt;br /&gt;
First, here&#039;s a list of various websites that I may refer to during the guide. You do not need to worry about them now!&lt;br /&gt;
&lt;br /&gt;
*KoLmafia&#039;s website: http://kolmafia.sourceforge.net/&amp;lt;br /&amp;gt;&lt;br /&gt;
*KoLmafia forum: http://kolmafia.us/&amp;lt;br /&amp;gt;&lt;br /&gt;
*KolMafia Wiki: http://wiki.kolmafia.us/index.php?title=Main_Page&amp;lt;br /&amp;gt;&lt;br /&gt;
*A Previously Existing Guide: http://forums.kingdomofloathing.com/vb/showthread.php?t=140340&amp;lt;br /&amp;gt;&lt;br /&gt;
*List of CLI Commands http://kolmafia.sourceforge.net/scripting.html&amp;lt;br /&amp;gt;&lt;br /&gt;
*List of all KoLmafia global variables (more for scripting): http://wiki.kolmafia.us/index.php?title=List_of_KoLmafia_Properties&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
We are now officially starting your KoLmafia lessons!&lt;br /&gt;
&lt;br /&gt;
# Go to KoLmafia&#039;s website (listed above).  The download link is not really obvious; it&#039;s a small link at the top left somewhere. Click it to go here:  https://sourceforge.net/project/showfiles.php?group_id=126572&lt;br /&gt;
# By default it picks the appropriate package for you. All you need is &#039;&#039;&#039;your&#039;&#039;&#039; system&#039;s file. As a windows user, I download the 3 Meg executable. Mac users download theirs. Linux, etc. If all else fails, use the java Jar file.&lt;br /&gt;
# Move the file somewhere handy. Note that KoLmafia can be downloaded as an executable. However, it does &#039;&#039;&#039;not install&#039;&#039;&#039; per se.  Instead, I like to say that it &#039;roots&#039;.  When executed, &#039;&#039;&#039;will create quite a few subfolders&#039;&#039;&#039; to store its settings. Therefore, I extremely highly recommend placing it in its own folder. Once moved, make a link to it on your desktop so you can easily execute it. . You just run the file to run KoLmafia. No further setup is needed.&lt;br /&gt;
# If the file doesn&#039;t run, you need the 1.6 or better Java Runtime Environment. This is not particularly hard and many will likely already have it. The KoLmafia website given above, has a &#039;Getting Started&#039; section that you can refer to in case of such issues.&lt;br /&gt;
# When you first run it, &#039;&#039;&#039;two&#039;&#039;&#039; windows pop up. Ignore the complicated looking frame, and look at the one with the login fields. Type in your login info (make sure you don&#039;t have KoL running elsewhere obviously), then click the &#039;&#039;&#039;LOGIN&#039;&#039;&#039; button. Ignore the RELAY button for now. Keep the other options unchecked, including breakfast. We will discuss this stuff later.&lt;br /&gt;
# The Login frame goes away and now you have the main box, which I will call the KoLmafia Frame. I don&#039;t have a place to store an up to date picture, but the whole thing is kind-of intimidating. You are probably ready to quit, but &#039;&#039;stick in there!&#039;&#039;&#039; We will make this easy by doing things step-by-step. I&#039;m a noob, remember? I got your back! ;-)&lt;br /&gt;
# Note that is possible that KoLmafia &#039;&#039;&#039;may pop up an events logger window&#039;&#039;&#039;.  This occurrs if you were attacked, received a message, or whatever other event type stuff might happen.  Just close that small window if you encounter it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Continue&#039;&#039;&#039; to [[KoLmafia Guide: Basics (Relay Browser)|Lesson 1: Basics (Relay Browser)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:KoLmafia Guide]][[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Reporting_a_Bug/Requesting_a_Feature&amp;diff=9143</id>
		<title>Reporting a Bug/Requesting a Feature</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Reporting_a_Bug/Requesting_a_Feature&amp;diff=9143"/>
		<updated>2021-12-28T18:13:52Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;Bug Report&#039;&#039;&#039; is submitted when KoLmafia is doing the wrong thing because of a coding error, design flaw or some other oversight on the part of a developer.&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;&#039;Feature Request&#039;&#039;&#039; is submitted when KoLmafia is functioning as designed but a user would like it to so something different.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New Content&#039;&#039;&#039; is reported when something is added to or changed in KoL itself and KoLmafia could/should be changed to support that.&lt;br /&gt;
&lt;br /&gt;
A Bug Report, Feature Request or New Content notification can be made by starting a new thread at http://kolmafia.us/forumdisplay.php?24-Bug-Reports&lt;br /&gt;
&lt;br /&gt;
There are several prefixes appended to threads in that section.  Non-Moderators should only use Bug, Feature or New Content.  The Moderators will change the prefix to indicate status.&lt;br /&gt;
&lt;br /&gt;
*Bug - Confirmed indicates that someone other than the original reporter has been able to reproduce the bug.&lt;br /&gt;
&lt;br /&gt;
*Bug - Not a Bug indicates that the behavior described as a Bug is actually what KoLmafia is supposed to be doing.&lt;br /&gt;
&lt;br /&gt;
*Bug - Won&#039;t Fix indicates that bug exists but no changes will be made to fix it.&lt;br /&gt;
&lt;br /&gt;
*Bug - Fixed indicates that code to fix the bug has been written, checked in to GitHub and pulled to main, thus making it part of the next build.&lt;br /&gt;
&lt;br /&gt;
*Bug - Cannot Reproduce indicates that no one besides the original reporter knows how to make the bug happen.&lt;br /&gt;
&lt;br /&gt;
*Bug - Waiting for Info indicates that a developer has asked questions about the report and is waiting for the reporter to answer.&lt;br /&gt;
&lt;br /&gt;
For both Feature and New Content&lt;br /&gt;
&lt;br /&gt;
*Implemented means that KoLmafia has been changed in response.&lt;br /&gt;
&lt;br /&gt;
*Rejected means that no code has been changed and none is likely to do so.&lt;br /&gt;
&lt;br /&gt;
*Features are often rejected if it is something that can easily be done or has already been done, in a script.&lt;br /&gt;
&lt;br /&gt;
The prefixes and the implied workflow are sometimes to developer&#039;s looking for tasks and developers planning releases.&lt;br /&gt;
&lt;br /&gt;
It is worth reading http://kolmafia.us/showthread.php?5934-Bug-Report-Procedures-(please-read-me) before submitting reports.&lt;br /&gt;
&lt;br /&gt;
This thread http://kolmafia.us/showthread.php?4326-Show-Estimated-Damage contains some discussion which led to the creation of this page.&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9142</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9142"/>
		<updated>2021-12-28T18:05:41Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* Scaling support on HiDPI Monitors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== How to Download the latest version. ==&lt;br /&gt;
The latest source build can be downloaded from the following locations:&lt;br /&gt;
&lt;br /&gt;
# [http://builds.kolmafia.us/ builds.kolmafia.us] &lt;br /&gt;
# the [https://github.com/kolmafia/kolmafia/releases GitHub releases page].  &lt;br /&gt;
&lt;br /&gt;
Both of these sources have tested versions that are posted shortly after developers change code.&lt;br /&gt;
&lt;br /&gt;
The GitHub releases page contains both the KoLmafia-xxxxx.jar java binaries and installers for an experimental version that includes a bundled version of Java.  If you use the installers, they manage the Java dependency listed below, but it can be more difficult to troubleshoot issues.  &lt;br /&gt;
&lt;br /&gt;
== Dependencies==&lt;br /&gt;
&lt;br /&gt;
===Java 11 or better (Java 17 recommended)===&lt;br /&gt;
KoLmafia depends on finding Java 11 or better.  The recommended version is linked at the top of every page of kolmafia.us.  If you are executing KoLmafia from a jarfile, you will need to install Java first.  &lt;br /&gt;
&lt;br /&gt;
If you do not have a recent version of Java, the recommended version (as of this writing) is [https://adoptium.net/index.html Java 17].  &lt;br /&gt;
&lt;br /&gt;
====Testing your Java installation====&lt;br /&gt;
From a Command Prompt (or Terminal) window, enter &amp;lt;code&amp;gt;java -version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that returns something like this, you should be good to go.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Michaels-MBP:~ mcroft$ java -version&amp;lt;br /&amp;gt;openjdk version &amp;quot;16.0.1&amp;quot; 2021-04-20&amp;lt;br /&amp;gt;OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)&amp;lt;br /&amp;gt;OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9, mixed mode, sharing)&amp;lt;/code&amp;gt;&lt;br /&gt;
== Troubleshooting Runtime Issues==&lt;br /&gt;
=== Java Errors===&lt;br /&gt;
Please be aware that some older versions of Java do not get completely replaced when installing a newer version.  Usually this happens with Java 8 JRE and Java 11+ JDKs.  If that makes no sense, just delete Java 8.&lt;br /&gt;
&lt;br /&gt;
If you get a message like this:&amp;lt;code&amp;gt;Error: A JNI error has occurred, please check your installation and try again.&amp;lt;/code&amp;gt; Please [https://kolmafia.us/threads/java-11-now-required-for-kolmafia-java-17-recommended.26579/ read this announcement].&lt;br /&gt;
&lt;br /&gt;
===Scaling support on HiDPI Monitors===&lt;br /&gt;
&lt;br /&gt;
If the KoLmafia application is unexpectedly small on a [https://techterms.com/definition/hidpi HiDPI]/Retina Display monitor, then support for HiDPI should enabled.  This should only be required on Linux, since HiDPI support is enabled automatically on Windows and MacOS.&lt;br /&gt;
&lt;br /&gt;
On Linux, using HiDPI with a Java Swing application (such as KoLmafia) requires that you execute the &#039;.jar&#039; file with an option set as follows: &amp;lt;code&amp;gt;java -Dsun.java2d.uiScale=&amp;lt;multiplier&amp;gt; -jar &amp;lt;jarfile&amp;gt;&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Depending on the screen size, a multiplier of 1.6 or 2.0 may be appropriate.  You may need to experiment to find the ideal scaling multiplier for your screens.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tech Support]]&lt;br /&gt;
[[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9141</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9141"/>
		<updated>2021-12-28T17:44:52Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* KoLmafia has migrated to the GitHub, GIT and gradle. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub, GIT and gradle.==&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the [[Development Environment Setup|IDE setup]] is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the git repository, and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 11 or newer, available from [https://adoptium.net/installation.html Adoption].  The current recommended version is Java 17.&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. If your package manager does not contain a sufficiently up-to-date version of Java, the safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
# Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt; (Optionally, put this in your &#039;&#039;.profile&#039;&#039; or &#039;&#039;.bashrc&#039;&#039; if you want to set and forget.)&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;  If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Build the new jar: &amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==macOS==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your shell of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd ~/projects/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt; If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper: &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9140</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9140"/>
		<updated>2021-12-28T17:38:37Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* Scaling support on HiDPI Monitors */ removed outdated instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== How to Download the latest version. ==&lt;br /&gt;
The latest source build can be downloaded from the following locations:&lt;br /&gt;
&lt;br /&gt;
# [http://builds.kolmafia.us/ builds.kolmafia.us] &lt;br /&gt;
# the [https://github.com/kolmafia/kolmafia/releases GitHub releases page].  &lt;br /&gt;
&lt;br /&gt;
Both of these sources have tested versions that are posted shortly after developers change code.&lt;br /&gt;
&lt;br /&gt;
The GitHub releases page contains both the KoLmafia-xxxxx.jar java binaries and installers for an experimental version that includes a bundled version of Java.  If you use the installers, they manage the Java dependency listed below, but it can be more difficult to troubleshoot issues.  &lt;br /&gt;
&lt;br /&gt;
== Dependencies==&lt;br /&gt;
&lt;br /&gt;
===Java 11 or better (Java 17 recommended)===&lt;br /&gt;
KoLmafia depends on finding Java 11 or better.  The recommended version is linked at the top of every page of kolmafia.us.  If you are executing KoLmafia from a jarfile, you will need to install Java first.  &lt;br /&gt;
&lt;br /&gt;
If you do not have a recent version of Java, the recommended version (as of this writing) is [https://adoptium.net/index.html Java 17].  &lt;br /&gt;
&lt;br /&gt;
====Testing your Java installation====&lt;br /&gt;
From a Command Prompt (or Terminal) window, enter &amp;lt;code&amp;gt;java -version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that returns something like this, you should be good to go.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Michaels-MBP:~ mcroft$ java -version&amp;lt;br /&amp;gt;openjdk version &amp;quot;16.0.1&amp;quot; 2021-04-20&amp;lt;br /&amp;gt;OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)&amp;lt;br /&amp;gt;OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9, mixed mode, sharing)&amp;lt;/code&amp;gt;&lt;br /&gt;
== Troubleshooting Runtime Issues==&lt;br /&gt;
=== Java Errors===&lt;br /&gt;
Please be aware that some older versions of Java do not get completely replaced when installing a newer version.  Usually this happens with Java 8 JRE and Java 11+ JDKs.  If that makes no sense, just delete Java 8.&lt;br /&gt;
&lt;br /&gt;
If you get a message like this:&amp;lt;code&amp;gt;Error: A JNI error has occurred, please check your installation and try again.&amp;lt;/code&amp;gt; Please [https://kolmafia.us/threads/java-11-now-required-for-kolmafia-java-17-recommended.26579/ read this announcement].&lt;br /&gt;
&lt;br /&gt;
===Scaling support on HiDPI Monitors===&lt;br /&gt;
&lt;br /&gt;
The default builds target Java  and use Java Swing to provide its user interface. Java Swing support for HiDPI on Linux requires that you execute the &#039;.jar&#039; file with an option set as follows: &amp;lt;code&amp;gt;java -Dsun.java2d.uiScale=&amp;lt;multiplier&amp;gt; -jar &amp;lt;jarfile&amp;gt;&amp;lt;/code&amp;gt; ;e.g. in my case, &#039;&amp;lt;multiplier&amp;gt;&#039; should be &#039;2&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tech Support]]&lt;br /&gt;
[[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9139</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9139"/>
		<updated>2021-12-28T17:17:49Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: Restructured a bit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== How to Download the latest version. ==&lt;br /&gt;
The latest source build can be downloaded from the following locations:&lt;br /&gt;
&lt;br /&gt;
# [http://builds.kolmafia.us/ builds.kolmafia.us] &lt;br /&gt;
# the [https://github.com/kolmafia/kolmafia/releases GitHub releases page].  &lt;br /&gt;
&lt;br /&gt;
Both of these sources have tested versions that are posted shortly after developers change code.&lt;br /&gt;
&lt;br /&gt;
The GitHub releases page contains both the KoLmafia-xxxxx.jar java binaries and installers for an experimental version that includes a bundled version of Java.  If you use the installers, they manage the Java dependency listed below, but it can be more difficult to troubleshoot issues.  &lt;br /&gt;
&lt;br /&gt;
== Dependencies==&lt;br /&gt;
&lt;br /&gt;
===Java 11 or better (Java 17 recommended)===&lt;br /&gt;
KoLmafia depends on finding Java 11 or better.  The recommended version is linked at the top of every page of kolmafia.us.  If you are executing KoLmafia from a jarfile, you will need to install Java first.  &lt;br /&gt;
&lt;br /&gt;
If you do not have a recent version of Java, the recommended version (as of this writing) is [https://adoptium.net/index.html Java 17].  &lt;br /&gt;
&lt;br /&gt;
====Testing your Java installation====&lt;br /&gt;
From a Command Prompt (or Terminal) window, enter &amp;lt;code&amp;gt;java -version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that returns something like this, you should be good to go.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Michaels-MBP:~ mcroft$ java -version&amp;lt;br /&amp;gt;openjdk version &amp;quot;16.0.1&amp;quot; 2021-04-20&amp;lt;br /&amp;gt;OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)&amp;lt;br /&amp;gt;OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9, mixed mode, sharing)&amp;lt;/code&amp;gt;&lt;br /&gt;
== Troubleshooting Runtime Issues==&lt;br /&gt;
=== Java Errors===&lt;br /&gt;
Please be aware that some older versions of Java do not get completely replaced when installing a newer version.  Usually this happens with Java 8 JRE and Java 11+ JDKs.  If that makes no sense, just delete Java 8.&lt;br /&gt;
&lt;br /&gt;
If you get a message like this:&amp;lt;code&amp;gt;Error: A JNI error has occurred, please check your installation and try again.&amp;lt;/code&amp;gt; Please [https://kolmafia.us/threads/java-11-now-required-for-kolmafia-java-17-recommended.26579/ read this announcement].&lt;br /&gt;
&lt;br /&gt;
===Scaling support on HiDPI Monitors===&lt;br /&gt;
&lt;br /&gt;
The default builds target Java  and use Java Swing to provide its user interface. This means that Java Swing support for HiDPI on Linux is not present. Java 9&#039;s Swing includes support for HiDPI. Thus to have HiDPI support one needs to compile it targeting Java 9. To do so, checkout the source from the sourceforge repository using subversion. Ensure that you have some version of JDK 9 installed and configured on your computer as the default java compiler, and also an up-to-date version of Apache Ant. Change the line in &#039;build.properties&#039; from &#039;target=&amp;quot;1.6&amp;quot;&#039; to &#039;target=&amp;quot;1.9&amp;quot;&#039;. This compiles the source into a version that has support for HiDPI; the built jar will be located at the &#039;dist&#039; folder. Finally, execute the &#039;.jar&#039; file with an option set as follows: &amp;lt;code&amp;gt;java -Dsun.java2d.uiScale=&amp;lt;multiplier&amp;gt; -jar &amp;lt;jarfile&amp;gt;&amp;lt;/code&amp;gt; ;e.g. in my case, &#039;&amp;lt;multiplier&amp;gt;&#039; should be &#039;2&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tech Support]]&lt;br /&gt;
[[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9138</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9138"/>
		<updated>2021-12-28T17:14:59Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* Java 11 or better (Java 17 recommended) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== How to Download the latest version. ==&lt;br /&gt;
The latest source build can be downloaded from the following locations:&lt;br /&gt;
&lt;br /&gt;
# [http://builds.kolmafia.us/ builds.kolmafia.us] &lt;br /&gt;
# the [https://github.com/kolmafia/kolmafia/releases GitHub releases page].  &lt;br /&gt;
&lt;br /&gt;
Both of these sources have tested versions that are posted shortly after developers change code.&lt;br /&gt;
&lt;br /&gt;
The GitHub releases page contains both the KoLmafia-xxxxx.jar java binaries and installers for an experimental version that includes a bundled version of Java.  If you use the installers, they manage the Java dependency listed below, but it can be more difficult to troubleshoot issues.  &lt;br /&gt;
&lt;br /&gt;
== Dependencies==&lt;br /&gt;
&lt;br /&gt;
===Java 11 or better (Java 17 recommended)===&lt;br /&gt;
KoLmafia depends on finding Java 11 or better.  The recommended version is linked at the top of every page of kolmafia.us.  If you are executing KoLmafia from a jarfile, you will need to install Java first.  &lt;br /&gt;
&lt;br /&gt;
If you do not have a recent version of Java, the recommended version (as of this writing) is [https://adoptium.net/index.html Java 17].  &lt;br /&gt;
&lt;br /&gt;
====Testing your Java installation====&lt;br /&gt;
From a Command Prompt (or Terminal) window, enter &amp;lt;code&amp;gt;java -version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that returns something like this, you should be good to go.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Michaels-MBP:~ mcroft$ java -version&amp;lt;br /&amp;gt;openjdk version &amp;quot;16.0.1&amp;quot; 2021-04-20&amp;lt;br /&amp;gt;OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)&amp;lt;br /&amp;gt;OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9, mixed mode, sharing)&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Troubleshooting Java====&lt;br /&gt;
Please be aware that some older versions of Java do not get completely replaced when installing a newer version.  Usually this happens with Java 8 JRE and Java 11+ JDKs.  If that makes no sense, just delete Java 8.&lt;br /&gt;
&lt;br /&gt;
If you get a message like this:&amp;lt;code&amp;gt;Error: A JNI error has occurred, please check your installation and try again.&amp;lt;/code&amp;gt; Please [https://kolmafia.us/threads/java-11-now-required-for-kolmafia-java-17-recommended.26579/ read this announcement].&lt;br /&gt;
&lt;br /&gt;
===HiDPI Support===&lt;br /&gt;
&lt;br /&gt;
The default builds target Java  and use Java Swing to provide its user interface. This means that Java Swing support for HiDPI on Linux is not present. Java 9&#039;s Swing includes support for HiDPI. Thus to have HiDPI support one needs to compile it targeting Java 9. To do so, checkout the source from the sourceforge repository using subversion. Ensure that you have some version of JDK 9 installed and configured on your computer as the default java compiler, and also an up-to-date version of Apache Ant. Change the line in &#039;build.properties&#039; from &#039;target=&amp;quot;1.6&amp;quot;&#039; to &#039;target=&amp;quot;1.9&amp;quot;&#039;. This compiles the source into a version that has support for HiDPI; the built jar will be located at the &#039;dist&#039; folder. Finally, execute the &#039;.jar&#039; file with an option set as follows: &#039;java -Dsun.java2d.uiScale=&amp;lt;multiplier&amp;gt; -jar &amp;lt;jarfile&amp;gt;&#039;; e.g. in my case, &#039;&amp;lt;multiplier&amp;gt;&#039; should be &#039;2&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tech Support]]&lt;br /&gt;
[[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9137</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9137"/>
		<updated>2021-12-28T17:14:06Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
&lt;br /&gt;
== How to Download the latest version. ==&lt;br /&gt;
The latest source build can be downloaded from the following locations:&lt;br /&gt;
&lt;br /&gt;
# [http://builds.kolmafia.us/ builds.kolmafia.us] &lt;br /&gt;
# the [https://github.com/kolmafia/kolmafia/releases GitHub releases page].  &lt;br /&gt;
&lt;br /&gt;
Both of these sources have tested versions that are posted shortly after developers change code.&lt;br /&gt;
&lt;br /&gt;
The GitHub releases page contains both the KoLmafia-xxxxx.jar java binaries and installers for an experimental version that includes a bundled version of Java.  If you use the installers, they manage the Java dependency listed below, but it can be more difficult to troubleshoot issues.  &lt;br /&gt;
&lt;br /&gt;
== Dependencies==&lt;br /&gt;
&lt;br /&gt;
===Java 11 or better (Java 17 recommended)===&lt;br /&gt;
KoLmafia depends on finding Java 11 or better.  The recommended version is linked at the top of every page of kolmafia.us.  &lt;br /&gt;
&lt;br /&gt;
If you do not have a recent version of Java, the recommended version (as of this writing) is [https://adoptium.net/index.html Java 17].  &lt;br /&gt;
&lt;br /&gt;
====Testing your Java installation====&lt;br /&gt;
From a Command Prompt (or Terminal) window, enter &amp;lt;code&amp;gt;java -version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that returns something like this, you should be good to go.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Michaels-MBP:~ mcroft$ java -version&amp;lt;br /&amp;gt;openjdk version &amp;quot;16.0.1&amp;quot; 2021-04-20&amp;lt;br /&amp;gt;OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)&amp;lt;br /&amp;gt;OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9, mixed mode, sharing)&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Troubleshooting Java====&lt;br /&gt;
Please be aware that some older versions of Java do not get completely replaced when installing a newer version.  Usually this happens with Java 8 JRE and Java 11+ JDKs.  If that makes no sense, just delete Java 8.&lt;br /&gt;
&lt;br /&gt;
If you get a message like this:&amp;lt;code&amp;gt;Error: A JNI error has occurred, please check your installation and try again.&amp;lt;/code&amp;gt; Please [https://kolmafia.us/threads/java-11-now-required-for-kolmafia-java-17-recommended.26579/ read this announcement].&lt;br /&gt;
&lt;br /&gt;
===HiDPI Support===&lt;br /&gt;
&lt;br /&gt;
The default builds target Java  and use Java Swing to provide its user interface. This means that Java Swing support for HiDPI on Linux is not present. Java 9&#039;s Swing includes support for HiDPI. Thus to have HiDPI support one needs to compile it targeting Java 9. To do so, checkout the source from the sourceforge repository using subversion. Ensure that you have some version of JDK 9 installed and configured on your computer as the default java compiler, and also an up-to-date version of Apache Ant. Change the line in &#039;build.properties&#039; from &#039;target=&amp;quot;1.6&amp;quot;&#039; to &#039;target=&amp;quot;1.9&amp;quot;&#039;. This compiles the source into a version that has support for HiDPI; the built jar will be located at the &#039;dist&#039; folder. Finally, execute the &#039;.jar&#039; file with an option set as follows: &#039;java -Dsun.java2d.uiScale=&amp;lt;multiplier&amp;gt; -jar &amp;lt;jarfile&amp;gt;&#039;; e.g. in my case, &#039;&amp;lt;multiplier&amp;gt;&#039; should be &#039;2&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tech Support]]&lt;br /&gt;
[[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9136</id>
		<title>Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Installation&amp;diff=9136"/>
		<updated>2021-12-28T17:12:10Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: Total rewrite for Java 11+ codebase&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}}&lt;br /&gt;
The latest source build can be downloaded from [http://builds.kolmafia.us/ builds.kolmafia.us] or the [https://github.com/kolmafia/kolmafia/releases GitHub releases page].&lt;br /&gt;
&lt;br /&gt;
The GitHub releases page contains both the KoLmafia-xxxxx.jar java binaries and installers for an experimental version that includes a bundled version of Java.  If you use the installers, they manage the Java dependency listed below, but it can be more difficult to troubleshoot issues.  &lt;br /&gt;
&lt;br /&gt;
== Dependencies==&lt;br /&gt;
&lt;br /&gt;
===Java 11 or better (Java 17 recommended)===&lt;br /&gt;
KoLmafia depends on finding Java 11 or better.  The recommended version is linked at the top of every page of kolmafia.us.  &lt;br /&gt;
&lt;br /&gt;
If you do not have a recent version of Java, the recommended version (as of this writing) is [https://adoptium.net/index.html Java 17].  &lt;br /&gt;
&lt;br /&gt;
====Testing your Java installation====&lt;br /&gt;
From a Command Prompt (or Terminal) window, enter &amp;lt;code&amp;gt;java -version&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If that returns something like this, you should be good to go.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Michaels-MBP:~ mcroft$ java -version&amp;lt;br /&amp;gt;openjdk version &amp;quot;16.0.1&amp;quot; 2021-04-20&amp;lt;br /&amp;gt;OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)&amp;lt;br /&amp;gt;OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9, mixed mode, sharing)&amp;lt;/code&amp;gt;&lt;br /&gt;
==== Troubleshooting Java====&lt;br /&gt;
Please be aware that some older versions of Java do not get completely replaced when installing a newer version.  Usually this happens with Java 8 JRE and Java 11+ JDKs.  If that makes no sense, just delete Java 8.&lt;br /&gt;
&lt;br /&gt;
If you get a message like this:&amp;lt;code&amp;gt;Error: A JNI error has occurred, please check your installation and try again.&amp;lt;/code&amp;gt; Please [https://kolmafia.us/threads/java-11-now-required-for-kolmafia-java-17-recommended.26579/ read this announcement].&lt;br /&gt;
&lt;br /&gt;
===HiDPI Support===&lt;br /&gt;
&lt;br /&gt;
The default builds target Java  and use Java Swing to provide its user interface. This means that Java Swing support for HiDPI on Linux is not present. Java 9&#039;s Swing includes support for HiDPI. Thus to have HiDPI support one needs to compile it targeting Java 9. To do so, checkout the source from the sourceforge repository using subversion. Ensure that you have some version of JDK 9 installed and configured on your computer as the default java compiler, and also an up-to-date version of Apache Ant. Change the line in &#039;build.properties&#039; from &#039;target=&amp;quot;1.6&amp;quot;&#039; to &#039;target=&amp;quot;1.9&amp;quot;&#039;. This compiles the source into a version that has support for HiDPI; the built jar will be located at the &#039;dist&#039; folder. Finally, execute the &#039;.jar&#039; file with an option set as follows: &#039;java -Dsun.java2d.uiScale=&amp;lt;multiplier&amp;gt; -jar &amp;lt;jarfile&amp;gt;&#039;; e.g. in my case, &#039;&amp;lt;multiplier&amp;gt;&#039; should be &#039;2&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tech Support]]&lt;br /&gt;
[[Category:New User Help]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9135</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9135"/>
		<updated>2021-12-28T17:11:13Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds. */ --just fixing the ToC entry&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub, GIT and gradle.==&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the git repository, and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 11 or newer, available from [https://adoptium.net/installation.html Adoption].  The current recommended version is Java 17.&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. If your package manager does not contain a sufficiently up-to-date version of Java, the safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
# Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt; (Optionally, put this in your &#039;&#039;.profile&#039;&#039; or &#039;&#039;.bashrc&#039;&#039; if you want to set and forget.)&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;  If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Build the new jar: &amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==macOS==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your shell of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd ~/projects/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt; If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper: &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9134</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9134"/>
		<updated>2021-12-28T17:09:51Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* macOS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds.==&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the git repository, and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 11 or newer, available from [https://adoptium.net/installation.html Adoption].  The current recommended version is Java 17.&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. If your package manager does not contain a sufficiently up-to-date version of Java, the safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
# Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt; (Optionally, put this in your &#039;&#039;.profile&#039;&#039; or &#039;&#039;.bashrc&#039;&#039; if you want to set and forget.)&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;  If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Build the new jar: &amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==macOS==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your shell of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
&lt;br /&gt;
# Navigate to your cloned repository: &amp;lt;pre&amp;gt;cd ~/projects/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt; If you have local uncommitted changes, you may want to instead use &#039;&#039;git stash &amp;amp;&amp;amp; git pull &amp;amp;&amp;amp; git stash pop&#039;&#039;.&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper: &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Talk:Installation&amp;diff=9133</id>
		<title>Talk:Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Talk:Installation&amp;diff=9133"/>
		<updated>2021-12-28T16:39:45Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note to self: this is out of date.  Fix it.&lt;br /&gt;
&lt;br /&gt;
--[[User:Mcroft|Mcroft]] ([[User talk:Mcroft|talk]]) 16:39, 28 December 2021 (UTC)&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Talk:Installation&amp;diff=9132</id>
		<title>Talk:Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Talk:Installation&amp;diff=9132"/>
		<updated>2021-12-28T16:39:17Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: Created page with &amp;quot;Goodness, this is out of date.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Goodness, this is out of date.&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9128</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9128"/>
		<updated>2021-12-05T06:01:23Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* MacOSX (updated for Git/Gradle) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds.==&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the SVN and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 11 or newer, available from [https://adoptium.net/installation.html Adoption].  The current recommended version is Java 17.&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. The safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actually compile:&amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==MacOSX==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your terminal of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; ./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9127</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9127"/>
		<updated>2021-12-05T06:00:40Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* GREAT BIG NEWS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds.==&lt;br /&gt;
The Windows, Linux and macOS instructions have been updated, and might have been lightly tested&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the SVN and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 11 or newer, available from [https://adoptium.net/installation.html Adoption].  The current recommended version is Java 17.&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. The safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actually compile:&amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==MacOSX (updated for Git/Gradle)==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your terminal of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; ./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Talk:Compiling_from_Source&amp;diff=9126</id>
		<title>Talk:Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Talk:Compiling_from_Source&amp;diff=9126"/>
		<updated>2021-12-05T05:59:05Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;sun-java6-jdk is no longer available past squeeze and has been replaced by openjdk. Could someone test if the openjdk package can be used to compile kolmafia properly and replace the info in the page? Thanks - PASTA_KING99&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===TODO===&lt;br /&gt;
test and fix Windows instructions.&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9125</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9125"/>
		<updated>2021-12-05T05:58:38Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* Windows */  untested!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds.==&lt;br /&gt;
The Windows section of this page is currently out of date. The Linux and macOS ones have been updated.&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the SVN and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 11 or newer, available from [https://adoptium.net/installation.html Adoption].  The current recommended version is Java 17.&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Open a new Command Prompt (or Powershell) window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd %USERPROFILE%\projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; gradlew.bat runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
# Compiling creates a &amp;quot;build&amp;quot; and &amp;quot;dist&amp;quot; folder. The end program is in dist/Kolmafia.jar.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. The safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actually compile:&amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==MacOSX (updated for Git/Gradle)==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your terminal of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; ./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9124</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9124"/>
		<updated>2021-12-05T05:53:59Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* Windows */  draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds.==&lt;br /&gt;
The Windows section of this page is currently out of date. The Linux and macOS ones have been updated.&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the SVN and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 11 or newer, available from [https://adoptium.net/installation.html Adoption].  The current recommended version is Java 17.&lt;br /&gt;
## Download and install GIT following the instructions from [https://www.atlassian.com/git/tutorials/install-git#windows Atlassian&#039;s GIT install page.]&lt;br /&gt;
## Download and install Tortoise GIT (if needed) from https://tortoisegit.org&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If the JAVA installer has already set these variables, they can be updated or left alone.&lt;br /&gt;
# Get Source and Build&lt;br /&gt;
## Connect to the Gi server and download the source code for the Mafia Project. Using Tortoise SVN, you have to right-click on your desktop, select &amp;quot;SVN Checkout&amp;quot;, and put the URL of the repository as &amp;quot;svn://svn.code.sf.net/p/kolmafia/code/&amp;quot;. Leave all other settings as they are, and click OK.&lt;br /&gt;
## Copy %ANT_HOME%/bin/ant.bat to your Desktop/kolmafia/ folder. If you have set up ANT correctly (and it&#039;s hard not to - there aren&#039;t many options) then double clicking on this file should compile the program.&lt;br /&gt;
# Compiling creates a &amp;quot;build&amp;quot; and &amp;quot;dist&amp;quot; folder. The end program is in dist/Kolmafia.jar.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. The safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actually compile:&amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==MacOSX (updated for Git/Gradle)==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your terminal of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; ./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9123</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9123"/>
		<updated>2021-12-05T05:31:43Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: Copied git vs. http instructions from Linux section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds.==&lt;br /&gt;
The Windows section of this page is currently out of date. The Linux and macOS ones have been updated.&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the SVN and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 1.8 or newer, available from [https://www.oracle.com/java/technologies/javase-downloads.html Oracle] or [https://adoptopenjdk.net AdoptOpenJDK]&lt;br /&gt;
## Download and install Subversion, from [https://subversion.apache.org/packages.html apache.org]&lt;br /&gt;
## Download and install Tortoise SVN (or of course, another SVN program)from [https://tortoisesvn.net/downloads.html tortoisesvn]&lt;br /&gt;
## Download and install ANT, from [https://ant.apache.org/bindownload.cgi apache.org]&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit ANT_HOME, JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include ANT_HOME/bin and JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If ANT or JAVA installers have already set these variables, they can be updated or left alone.&lt;br /&gt;
# Get Source and Build&lt;br /&gt;
## Connect to the SVN server and download the source code for the Mafia Project. Using Tortoise SVN, you have to right-click on your desktop, select &amp;quot;SVN Checkout&amp;quot;, and put the URL of the repository as &amp;quot;svn://svn.code.sf.net/p/kolmafia/code/&amp;quot;. Leave all other settings as they are, and click OK.&lt;br /&gt;
## Copy %ANT_HOME%/bin/ant.bat to your Desktop/kolmafia/ folder. If you have set up ANT correctly (and it&#039;s hard not to - there aren&#039;t many options) then double clicking on this file should compile the program.&lt;br /&gt;
# Compiling creates a &amp;quot;build&amp;quot; and &amp;quot;dist&amp;quot; folder. The end program is in dist/Kolmafia.jar.&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
====Double-Clicking &#039;&#039;ant.bat&#039;&#039;====&lt;br /&gt;
Due to how bat files work when you double-click them, &#039;&#039;ant.bat&#039;&#039; will auto-close before you can read its output.&lt;br /&gt;
# ant assumes that builds are done from a command shell.  You&#039;ll need to run from the command shell to execute any ant target other than the default, such as &#039;&#039;ant.bat update exec&#039;&#039; or &#039;&#039;ant.bat daily&amp;lt;/br&amp;gt;ant -projecthelp&#039;&#039; will list all main targets&lt;br /&gt;
# An easy workaround is to add a &amp;quot;pause&amp;quot; near the bottom of the file before it has a chance to auto-close on you.&amp;lt;br&amp;gt;When you run it again, you&#039;ll be able to read its output and it will exit after you &#039;&#039;Press any key to continue...&#039;&#039;&lt;br /&gt;
# Alternatively, you can create a wrapper batch file that calls the existing &#039;&#039;ant.bat&#039;&#039; file and adds a pause after executing it.  This method allows you to set different ant targets and also prevents updates to ant from overwriting your modifications.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Example of a very simple MyWrapper.bat file&amp;lt;pre&amp;gt;&lt;br /&gt;
# This is a wrapper batch file&lt;br /&gt;
# First it runs ant&lt;br /&gt;
call ant.bat daily&lt;br /&gt;
# Then it pauses&lt;br /&gt;
pause&amp;lt;/pre&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;tools.jar&#039;&#039; not found====&lt;br /&gt;
If you get an error message about &amp;quot;tools.jar&amp;quot; not being found, this means you&#039;re trying to build with the JRE (which doesn&#039;t contain this file) rather than the JDK (which contains it).&amp;lt;br&amp;gt;&lt;br /&gt;
To fix this, right click on &#039;&#039;my computer&#039;&#039; -&amp;gt; &#039;&#039;properties&#039;&#039; -&amp;gt; &#039;&#039;advanced system settings&#039;&#039; -&amp;gt; &#039;&#039;Environment Variables...&#039;&#039; then make sure your PATH contains a reference to the location of your JDK directory.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
Do once:&lt;br /&gt;
# Install git - you probably already have this. If not, follow [https://www.atlassian.com/git/tutorials/install-git#linux this guide.]&lt;br /&gt;
# Get an appropriate JDK. The safest and easiest way to do this is with [https://adoptium.net/installation.html#x64_linux-jdk Adoptium].&lt;br /&gt;
# Clone the repo:&lt;br /&gt;
## If you have a github account:&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;If not:&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do every session:&lt;br /&gt;
Set up your environment to use that JDK you just downloaded&amp;lt;pre&amp;gt; export PATH=&amp;quot;/where/you/put/that/jdk/bin:${PATH}&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actually compile:&amp;lt;pre&amp;gt;cd /where/you/cloned/kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get new updates with &amp;lt;pre&amp;gt;git pull&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==MacOSX (updated for Git/Gradle)==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your terminal of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&lt;br /&gt;
##&#039;&#039;If you have a github account:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
##&#039;&#039;If not:&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cd kolmafia &amp;amp;&amp;amp; ./gradlew runShadow&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=IntelliJ_Setup&amp;diff=9118</id>
		<title>IntelliJ Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=IntelliJ_Setup&amp;diff=9118"/>
		<updated>2021-10-29T03:39:13Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* Updated for GitHub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==== KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds. ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://www.jetbrains.com/idea/ IntelliJ IDEA] is an IDE for developing Java applications. This guide assumes that you have a recent enough version of Java JDK, Ant, and IntelliJ IDEA. Completing [[Compiling from Source]] is a requirement for this guide, although experienced developers can skip to whatever step is appropriate.&lt;br /&gt;
&lt;br /&gt;
The following instructions are based on IntelliJ IDEA 2021.2 Community Edition. Instructions for other versions/editions of IntelliJ may be slightly different.&lt;br /&gt;
&lt;br /&gt;
== Create a Project ==&lt;br /&gt;
=== Create a new project ===&lt;br /&gt;
# Start IntelliJ IDEA. In the &#039;&#039;Welcome to IntelliJ IDEA&#039;&#039; dialog, click &#039;&#039;&#039;Get from VCS&#039;&#039;&#039;.&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-welcome.png|300px]]&lt;br /&gt;
# In the &#039;&#039;Get from Version Control&#039;&#039; dialog, select the &#039;&#039;&#039;Repository URL&#039;&#039;&#039; tab.&lt;br /&gt;
## In &#039;&#039;Version control&#039;&#039;, select &#039;&#039;&#039;GitHub&#039;&#039;&#039;.&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-get-from-vcs.png|300px]]&lt;br /&gt;
## Add a new repository location. To do so, click the &#039;&#039;&#039;+&#039;&#039;&#039; button next to &#039;&#039;Repositories&#039;&#039;.&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-get-from-vcs-subversion.png|300px]]&lt;br /&gt;
## In the &#039;&#039;New Repository Location&#039;&#039; popup, enter the URL to KoLmafia&#039;s GitHub repository. If you have a GitHub account and a Personal Access Token, use   git@github.com:kolmafia/kolmafia.git  If you do not have a GitHub account, use  https://github.com/kolmafia/kolmafia.git&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-new-repository-location.png|200px]]&lt;br /&gt;
## Click &#039;&#039;&#039;OK&#039;&#039;&#039; to close the popup.&lt;br /&gt;
## Once the repository has been added, &#039;&#039;&#039;click the repository URL to highlight it&#039;&#039;&#039;, then click &#039;&#039;&#039;Check Out&#039;&#039;&#039;.&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-get-from-vcs-check-out.png|300px]]&lt;br /&gt;
# If the &#039;&#039;Destination Directory&#039;&#039; popup appears, choose a directory to check out the working copy.&amp;lt;br&amp;gt;&#039;&#039;Caution&#039;&#039;: Don&#039;t choose a common directory like &amp;lt;samp&amp;gt;C:\Users\&amp;amp;lt;username&amp;amp;gt;\Documents&amp;lt;/samp&amp;gt;. Instead, create a new directory under it (by clicking the folder icon) and give it an appropriate name (e.g. &amp;lt;samp&amp;gt;kolmafia&amp;lt;/samp&amp;gt;).&amp;lt;br&amp;gt;[[File:Intellij-setup-c2021.2-choose-working-copy-dir.png|200px]]&amp;lt;br&amp;gt;Click &#039;&#039;&#039;OK&#039;&#039;&#039; to continue.&lt;br /&gt;
# IntelliJ will generate a new project. If it asks you whether to add &amp;lt;code&amp;gt;kolmafia.iml&amp;lt;/code&amp;gt; to Subversion, you may click &#039;&#039;&#039;Cancel&#039;&#039;&#039; to skip it&lt;br /&gt;
&lt;br /&gt;
=== Add the Gradle Build File ===&lt;br /&gt;
# Open the Gradle Toolbar Item (typically on the right side, and not very large)&lt;br /&gt;
# Click the &#039;&#039;&#039;+&#039;&#039;&#039; button to add a build file&lt;br /&gt;
# Choose build.gradle from the file selector and press Open&lt;br /&gt;
&lt;br /&gt;
=== From the Gradle Menu, select Applications&amp;gt;run ===&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Development_Environment_Setup&amp;diff=9117</id>
		<title>Development Environment Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Development_Environment_Setup&amp;diff=9117"/>
		<updated>2021-10-29T00:23:02Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds. ==&lt;br /&gt;
Links below this section may be obsolete and should be verified before relying on them.&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier. The bad news is you&#039;ll need to take some steps to build anything. In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After succeeding at [[Compiling from Source]] for your platform, you can add set up your KoLMafia source in an Integrated Development Environment (IDE) of your choice.  It is entirely possible to build and change KoLMafia without and IDE and some of the developers do just that.&lt;br /&gt;
====Platform-specific Development Tools====&lt;br /&gt;
;&#039;&#039;Apple&#039;s OS X notes on development for Java, including the XCode Tools setup, can make command line work easier.&#039;&#039;&lt;br /&gt;
::[https://developer.apple.com/library/archive/documentation/Java/Conceptual/Java14Development/02-JavaDevTools/JavaDevTools.html Apple Developer Tools for Java]&lt;br /&gt;
====Developer Text Editors====&lt;br /&gt;
Choose your favorite, or add your favorite.&lt;br /&gt;
;[http://www.barebones.com BBEdit]&lt;br /&gt;
:: Mac OS X based text editor&lt;br /&gt;
;[https://macromates.com TextMate]&lt;br /&gt;
::Another Mac based editor&lt;br /&gt;
;[https://www.ultraedit.com Ultra Edit]&lt;br /&gt;
::cross-platform text editor&lt;br /&gt;
&lt;br /&gt;
====IDEs====&lt;br /&gt;
This list will be out of date shortly after it&#039;s written, but can be updated as newer tools and versions are released. &lt;br /&gt;
;[https://www.jetbrains.com/idea/download/ IntelliJ IDEA]&lt;br /&gt;
::[[IntelliJ Setup]]&lt;br /&gt;
;[http://www.eclipse.org Eclipse]&lt;br /&gt;
::[[eclipse Setup]]&lt;br /&gt;
;[https://code.visualstudio.com/ VS Code]&lt;br /&gt;
::[[VS Code Setup]]&lt;br /&gt;
;[https://www.jetbrains.com/idea/download/ NetBeans]&lt;br /&gt;
::[[NetBeans Setup]]&lt;br /&gt;
;[http://developer.apple.com/tools/xcode/) Xcode] (Mac only)&lt;br /&gt;
::[[XCode Setup]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Source Control Management tools====&lt;br /&gt;
;[http://path/to/something/ TortoiseSVN]&lt;br /&gt;
::[[Tortoise Setup]]&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9116</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9116"/>
		<updated>2021-10-29T00:21:20Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* MacOSX (updated for GIT/Gradle) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds.==&lt;br /&gt;
Exactly nothing below here is accurate, and we&#039;ll need to do a thorough cleanup of this page and the IDE setup page.&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the SVN and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 1.8 or newer, available from [https://www.oracle.com/java/technologies/javase-downloads.html Oracle] or [https://adoptopenjdk.net AdoptOpenJDK]&lt;br /&gt;
## Download and install Subversion, from [https://subversion.apache.org/packages.html apache.org]&lt;br /&gt;
## Download and install Tortoise SVN (or of course, another SVN program)from [https://tortoisesvn.net/downloads.html tortoisesvn]&lt;br /&gt;
## Download and install ANT, from [https://ant.apache.org/bindownload.cgi apache.org]&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit ANT_HOME, JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include ANT_HOME/bin and JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If ANT or JAVA installers have already set these variables, they can be updated or left alone.&lt;br /&gt;
# Get Source and Build&lt;br /&gt;
## Connect to the SVN server and download the source code for the Mafia Project. Using Tortoise SVN, you have to right-click on your desktop, select &amp;quot;SVN Checkout&amp;quot;, and put the URL of the repository as &amp;quot;svn://svn.code.sf.net/p/kolmafia/code/&amp;quot;. Leave all other settings as they are, and click OK.&lt;br /&gt;
## Copy %ANT_HOME%/bin/ant.bat to your Desktop/kolmafia/ folder. If you have set up ANT correctly (and it&#039;s hard not to - there aren&#039;t many options) then double clicking on this file should compile the program.&lt;br /&gt;
# Compiling creates a &amp;quot;build&amp;quot; and &amp;quot;dist&amp;quot; folder. The end program is in dist/Kolmafia.jar.&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
====Double-Clicking &#039;&#039;ant.bat&#039;&#039;====&lt;br /&gt;
Due to how bat files work when you double-click them, &#039;&#039;ant.bat&#039;&#039; will auto-close before you can read its output.&lt;br /&gt;
# ant assumes that builds are done from a command shell.  You&#039;ll need to run from the command shell to execute any ant target other than the default, such as &#039;&#039;ant.bat update exec&#039;&#039; or &#039;&#039;ant.bat daily&amp;lt;/br&amp;gt;ant -projecthelp&#039;&#039; will list all main targets&lt;br /&gt;
# An easy workaround is to add a &amp;quot;pause&amp;quot; near the bottom of the file before it has a chance to auto-close on you.&amp;lt;br&amp;gt;When you run it again, you&#039;ll be able to read its output and it will exit after you &#039;&#039;Press any key to continue...&#039;&#039;&lt;br /&gt;
# Alternatively, you can create a wrapper batch file that calls the existing &#039;&#039;ant.bat&#039;&#039; file and adds a pause after executing it.  This method allows you to set different ant targets and also prevents updates to ant from overwriting your modifications.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Example of a very simple MyWrapper.bat file&amp;lt;pre&amp;gt;&lt;br /&gt;
# This is a wrapper batch file&lt;br /&gt;
# First it runs ant&lt;br /&gt;
call ant.bat daily&lt;br /&gt;
# Then it pauses&lt;br /&gt;
pause&amp;lt;/pre&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;tools.jar&#039;&#039; not found====&lt;br /&gt;
If you get an error message about &amp;quot;tools.jar&amp;quot; not being found, this means you&#039;re trying to build with the JRE (which doesn&#039;t contain this file) rather than the JDK (which contains it).&amp;lt;br&amp;gt;&lt;br /&gt;
To fix this, right click on &#039;&#039;my computer&#039;&#039; -&amp;gt; &#039;&#039;properties&#039;&#039; -&amp;gt; &#039;&#039;advanced system settings&#039;&#039; -&amp;gt; &#039;&#039;Environment Variables...&#039;&#039; then make sure your PATH contains a reference to the location of your JDK directory.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
# Install Sun Java Development Kit ( debian: apt-get install sun-java6-jdk )&lt;br /&gt;
# Install Subversion ( debian: apt-get install svn )&lt;br /&gt;
# Install Ant ( debian: apt-get install ant )&lt;br /&gt;
# Connect to the SVN server and download the source code for the Mafia Project. ( svn checkout svn://svn.code.sf.net/p/kolmafia/code/ kolmafia )&lt;br /&gt;
# Verify tou are using sun-java with ( debian: update-alternatives --all )&lt;br /&gt;
# I had to change $JAVA_HOME to compile ( export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.12 )&lt;br /&gt;
# Compile kolmafia with Ant ( debian: cd kolmafia &amp;amp;&amp;amp; ant debian )&lt;br /&gt;
# Install kolmafia ( debian: cd dist &amp;amp;&amp;amp; dpkg -i kolmafia*.deb )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Above may be out of date.&#039;&#039;&#039; As of the move to github the following commands were successful to build from source on Ubuntu 20.04.1 LTS. You will still have to have a jdk installed.&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&lt;br /&gt;
cd kolmafia&lt;br /&gt;
./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Fedora (or probably other RPM systems)===&lt;br /&gt;
&lt;br /&gt;
# Install Subversion: &amp;lt;pre&amp;gt;sudo yum install sqlite-devel subversion &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Install Java JDK: &amp;lt;pre&amp;gt;sudo yum install java-latest-openjdk-devel&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Install Ant: &amp;lt;pre&amp;gt;sudo yum install ant&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Checkout: &amp;lt;pre&amp;gt;svn checkout svn://svn.code.sf.net/p/kolmafia/code/ kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Build: &amp;lt;pre&amp;gt;cd kolmafia &amp;amp;&amp;amp; ant&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==MacOSX (updated for Git/Gradle)==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your terminal of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;code&amp;gt;cd kolmafia &amp;amp;&amp;amp; ./gradlew runShadow&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9115</id>
		<title>Compiling from Source</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmafia.us/index.php?title=Compiling_from_Source&amp;diff=9115"/>
		<updated>2021-10-29T00:20:58Z</updated>

		<summary type="html">&lt;p&gt;Mcroft: /* MacOSX */  update for Git and Gradle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GREAT BIG NEWS ===&lt;br /&gt;
&lt;br /&gt;
==KoLmafia has migrated to the GitHub repository and we are retooling for GIT and gradle builds.==&lt;br /&gt;
Exactly nothing below here is accurate, and we&#039;ll need to do a thorough cleanup of this page and the IDE setup page.&lt;br /&gt;
&lt;br /&gt;
The good news is that the IDE setup is a lot easier.  The bad news is you&#039;ll need to take some steps to build anything.  In addition, we are discussing changing to a newer required JDK, so even these instructions will not be permanent.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To contribute to the Mafia project, you&#039;ll need to be able to install the Java Development Kit, connect to the SVN and be comfortable writing Java Code. Instructions for the first two are included below:&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
# Download Tools&lt;br /&gt;
## Download and install Java Development Kit 1.8 or newer, available from [https://www.oracle.com/java/technologies/javase-downloads.html Oracle] or [https://adoptopenjdk.net AdoptOpenJDK]&lt;br /&gt;
## Download and install Subversion, from [https://subversion.apache.org/packages.html apache.org]&lt;br /&gt;
## Download and install Tortoise SVN (or of course, another SVN program)from [https://tortoisesvn.net/downloads.html tortoisesvn]&lt;br /&gt;
## Download and install ANT, from [https://ant.apache.org/bindownload.cgi apache.org]&lt;br /&gt;
# Configure Windows Environment Variables[[File:Environment vars.jpg|thumb|Win 10 Environment Variable Editor]]&lt;br /&gt;
## Windows 10&lt;br /&gt;
### Go to settings&lt;br /&gt;
### type &#039;enviro&#039; in the search&lt;br /&gt;
### click on the &#039;edit environment variables&#039; suggestion&lt;br /&gt;
### add or edit ANT_HOME, JAVA_HOME, and PATH variables&amp;lt;br&amp;gt;&#039;&#039;PATH should include ANT_HOME/bin and JAVA_HOME&#039;&#039;&amp;lt;/br&amp;gt;If ANT or JAVA installers have already set these variables, they can be updated or left alone.&lt;br /&gt;
# Get Source and Build&lt;br /&gt;
## Connect to the SVN server and download the source code for the Mafia Project. Using Tortoise SVN, you have to right-click on your desktop, select &amp;quot;SVN Checkout&amp;quot;, and put the URL of the repository as &amp;quot;svn://svn.code.sf.net/p/kolmafia/code/&amp;quot;. Leave all other settings as they are, and click OK.&lt;br /&gt;
## Copy %ANT_HOME%/bin/ant.bat to your Desktop/kolmafia/ folder. If you have set up ANT correctly (and it&#039;s hard not to - there aren&#039;t many options) then double clicking on this file should compile the program.&lt;br /&gt;
# Compiling creates a &amp;quot;build&amp;quot; and &amp;quot;dist&amp;quot; folder. The end program is in dist/Kolmafia.jar.&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
====Double-Clicking &#039;&#039;ant.bat&#039;&#039;====&lt;br /&gt;
Due to how bat files work when you double-click them, &#039;&#039;ant.bat&#039;&#039; will auto-close before you can read its output.&lt;br /&gt;
# ant assumes that builds are done from a command shell.  You&#039;ll need to run from the command shell to execute any ant target other than the default, such as &#039;&#039;ant.bat update exec&#039;&#039; or &#039;&#039;ant.bat daily&amp;lt;/br&amp;gt;ant -projecthelp&#039;&#039; will list all main targets&lt;br /&gt;
# An easy workaround is to add a &amp;quot;pause&amp;quot; near the bottom of the file before it has a chance to auto-close on you.&amp;lt;br&amp;gt;When you run it again, you&#039;ll be able to read its output and it will exit after you &#039;&#039;Press any key to continue...&#039;&#039;&lt;br /&gt;
# Alternatively, you can create a wrapper batch file that calls the existing &#039;&#039;ant.bat&#039;&#039; file and adds a pause after executing it.  This method allows you to set different ant targets and also prevents updates to ant from overwriting your modifications.&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Example of a very simple MyWrapper.bat file&amp;lt;pre&amp;gt;&lt;br /&gt;
# This is a wrapper batch file&lt;br /&gt;
# First it runs ant&lt;br /&gt;
call ant.bat daily&lt;br /&gt;
# Then it pauses&lt;br /&gt;
pause&amp;lt;/pre&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====&#039;&#039;tools.jar&#039;&#039; not found====&lt;br /&gt;
If you get an error message about &amp;quot;tools.jar&amp;quot; not being found, this means you&#039;re trying to build with the JRE (which doesn&#039;t contain this file) rather than the JDK (which contains it).&amp;lt;br&amp;gt;&lt;br /&gt;
To fix this, right click on &#039;&#039;my computer&#039;&#039; -&amp;gt; &#039;&#039;properties&#039;&#039; -&amp;gt; &#039;&#039;advanced system settings&#039;&#039; -&amp;gt; &#039;&#039;Environment Variables...&#039;&#039; then make sure your PATH contains a reference to the location of your JDK directory.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
&lt;br /&gt;
# Install Sun Java Development Kit ( debian: apt-get install sun-java6-jdk )&lt;br /&gt;
# Install Subversion ( debian: apt-get install svn )&lt;br /&gt;
# Install Ant ( debian: apt-get install ant )&lt;br /&gt;
# Connect to the SVN server and download the source code for the Mafia Project. ( svn checkout svn://svn.code.sf.net/p/kolmafia/code/ kolmafia )&lt;br /&gt;
# Verify tou are using sun-java with ( debian: update-alternatives --all )&lt;br /&gt;
# I had to change $JAVA_HOME to compile ( export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.12 )&lt;br /&gt;
# Compile kolmafia with Ant ( debian: cd kolmafia &amp;amp;&amp;amp; ant debian )&lt;br /&gt;
# Install kolmafia ( debian: cd dist &amp;amp;&amp;amp; dpkg -i kolmafia*.deb )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Above may be out of date.&#039;&#039;&#039; As of the move to github the following commands were successful to build from source on Ubuntu 20.04.1 LTS. You will still have to have a jdk installed.&amp;lt;pre&amp;gt;git clone https://github.com/kolmafia/kolmafia.git&lt;br /&gt;
cd kolmafia&lt;br /&gt;
./gradlew clean shadowJar&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Fedora (or probably other RPM systems)===&lt;br /&gt;
&lt;br /&gt;
# Install Subversion: &amp;lt;pre&amp;gt;sudo yum install sqlite-devel subversion &amp;lt;/pre&amp;gt;&lt;br /&gt;
# Install Java JDK: &amp;lt;pre&amp;gt;sudo yum install java-latest-openjdk-devel&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Install Ant: &amp;lt;pre&amp;gt;sudo yum install ant&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Checkout: &amp;lt;pre&amp;gt;svn checkout svn://svn.code.sf.net/p/kolmafia/code/ kolmafia&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Build: &amp;lt;pre&amp;gt;cd kolmafia &amp;amp;&amp;amp; ant&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You have a KoLmafia jar file that can be invoked with &amp;lt;pre&amp;gt;java -jar dist/KoLmafia-*.jar&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Do other installation steps as you wish.&lt;br /&gt;
&lt;br /&gt;
==MacOSX (updated for GIT/Gradle)==&lt;br /&gt;
# Verify required packages&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;java --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* if not found or less than Java 11...  Install Java Development Kit version 17 from [https://adoptium.net Adoptium Temurin]&lt;br /&gt;
## &amp;lt;code&amp;gt;&#039;&#039;git --version&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
##* If not found ...  Install git:  Atlassian has a great document on [https://www.atlassian.com/git/tutorials/install-git the various ways to install Git]&lt;br /&gt;
# Configure development environment&amp;lt;br&amp;gt;Most of these steps can be included in &#039;&#039;&amp;lt;code&amp;gt;.profile&amp;lt;/code&amp;gt;&#039;&#039; or the equivalent for your terminal of choice.&lt;br /&gt;
## In the terminal set JAVA_HOME to the java home directory. &amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;/usr/libexec/java_home -V&amp;lt;/code&amp;gt;&#039;&#039; will list all known values for java_home.&amp;lt;br&amp;gt;If you have multiple copies of java, choose the version you want to use&#039;&#039;.&#039;&#039; &amp;lt;code&amp;gt;&#039;&#039;export JAVA_HOME=`/usr/libexec/java_home -v17&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Open a new terminal window and navigate to the directory to which you wish to create kolmafia (e.g. &amp;lt;code&amp;gt;cd ~/projects&amp;lt;/code&amp;gt;, or some similar directory)&lt;br /&gt;
# Clone the source code for the KoLmafia Project.&amp;lt;br&amp;gt;&#039;&#039;&amp;lt;code&amp;gt;git clone git@github.com:kolmafia/kolmafia.git&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
# Compile KoLmafia with the Gradle wrapper &#039;&#039;&amp;lt;code&amp;gt;cd kolmafia &amp;amp;&amp;amp; ./gradlew runShadow&amp;lt;/code&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
If you intend to commit code to GitHub, you will need to follow GitHub&#039;s instructions for [https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token adding a Personal Access Token (PAT)]&lt;br /&gt;
&#039;&#039;[[Category:Tech Support]]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Mcroft</name></author>
	</entry>
</feed>