/**
* Copyright (c) 2005-2017, KoLmafia development team
* http://kolmafia.sourceforge.net/
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* [1] Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* [2] Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* [3] Neither the name "KoLmafia" nor the names of its contributors may
* be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package net.sourceforge.kolmafia.session;
import java.io.PrintStream;
import net.sourceforge.kolmafia.AdventureResult;
import net.sourceforge.kolmafia.KoLCharacter;
import net.sourceforge.kolmafia.KoLConstants;
import net.sourceforge.kolmafia.KoLmafia;
import net.sourceforge.kolmafia.KoLmafiaCLI;
import net.sourceforge.kolmafia.RequestLogger;
import net.sourceforge.kolmafia.RequestThread;
import net.sourceforge.kolmafia.chat.ChatManager;
import net.sourceforge.kolmafia.listener.PreferenceListenerRegistry;
import net.sourceforge.kolmafia.moods.MoodManager;
import net.sourceforge.kolmafia.objectpool.ItemPool;
import net.sourceforge.kolmafia.persistence.AdventureQueueDatabase;
import net.sourceforge.kolmafia.persistence.AdventureSpentDatabase;
import net.sourceforge.kolmafia.persistence.ConcoctionDatabase;
import net.sourceforge.kolmafia.persistence.ItemDatabase;
import net.sourceforge.kolmafia.persistence.QuestDatabase;
import net.sourceforge.kolmafia.preferences.Preferences;
import net.sourceforge.kolmafia.request.AutoSellRequest;
import net.sourceforge.kolmafia.request.CampgroundRequest;
import net.sourceforge.kolmafia.request.ChezSnooteeRequest;
import net.sourceforge.kolmafia.request.ClanLoungeRequest;
import net.sourceforge.kolmafia.request.CreateItemRequest;
import net.sourceforge.kolmafia.request.HellKitchenRequest;
import net.sourceforge.kolmafia.request.HermitRequest;
import net.sourceforge.kolmafia.request.MicroBreweryRequest;
import net.sourceforge.kolmafia.request.StorageRequest;
import net.sourceforge.kolmafia.request.UntinkerRequest;
import net.sourceforge.kolmafia.request.UseItemRequest;
import net.sourceforge.kolmafia.utilities.AdventureResultArray;
public class ValhallaManager
{
private static final AdventureResult [] USABLE = new AdventureResult []
{
ItemPool.get( ItemPool.GATES_SCROLL, 1 ),
ItemPool.get( ItemPool.FISHERMANS_SACK, 1 ),
ItemPool.get( ItemPool.BONERDAGON_CHEST, 1 ),
};
private static final AdventureResult [] AUTOSELLABLE = new AdventureResult []
{
ItemPool.get( ItemPool.SMALL_LAMINATED_CARD, 1 ),
ItemPool.get( ItemPool.LITTLE_LAMINATED_CARD, 1 ),
ItemPool.get( ItemPool.NOTBIG_LAMINATED_CARD, 1 ),
ItemPool.get( ItemPool.UNLARGE_LAMINATED_CARD, 1 ),
ItemPool.get( ItemPool.DWARVISH_DOCUMENT, 1 ),
ItemPool.get( ItemPool.DWARVISH_PAPER, 1 ),
ItemPool.get( ItemPool.DWARVISH_PARCHMENT, 1 ),
ItemPool.get( ItemPool.CULTIST_ROBE, 1 ),
ItemPool.get( ItemPool.CREASED_PAPER_STRIP, 1 ),
ItemPool.get( ItemPool.CRINKLED_PAPER_STRIP, 1 ),
ItemPool.get( ItemPool.CRUMPLED_PAPER_STRIP, 1 ),
ItemPool.get( ItemPool.FOLDED_PAPER_STRIP, 1 ),
ItemPool.get( ItemPool.RAGGED_PAPER_STRIP, 1 ),
ItemPool.get( ItemPool.RIPPED_PAPER_STRIP, 1 ),
ItemPool.get( ItemPool.RUMPLED_PAPER_STRIP, 1 ),
ItemPool.get( ItemPool.TORN_PAPER_STRIP, 1 ),
ItemPool.get( ItemPool.RAVE_VISOR, 1 ),
ItemPool.get( ItemPool.BAGGY_RAVE_PANTS, 1 ),
ItemPool.get( ItemPool.PACIFIER_NECKLACE, 1 ),
ItemPool.get( ItemPool.GLOWSTICK_ON_A_STRING, 1 ),
ItemPool.get( ItemPool.CANDY_NECKLACE, 1 ),
ItemPool.get( ItemPool.TEDDYBEAR_BACKPACK, 1 ),
ItemPool.get( ItemPool.VIAL_OF_RED_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_YELLOW_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_BLUE_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_ORANGE_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_GREEN_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_VIOLET_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_VERMILION_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_AMBER_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_CHARTREUSE_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_TEAL_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_INDIGO_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_PURPLE_SLIME, 1 ),
ItemPool.get( ItemPool.VIAL_OF_BROWN_SLIME, 1 ),
ItemPool.get( ItemPool.FISH_OIL_SMOKE_BOMB, 1 ),
ItemPool.get( ItemPool.VIAL_OF_SQUID_INK, 1 ),
ItemPool.get( ItemPool.POTION_OF_FISHY_SPEED, 1 ),
ItemPool.get( ItemPool.AUTOPSY_TWEEZERS, 1 ),
ItemPool.get( ItemPool.GNOMISH_EAR, 1 ),
ItemPool.get( ItemPool.GNOMISH_LUNG, 1 ),
ItemPool.get( ItemPool.GNOMISH_ELBOW, 1 ),
ItemPool.get( ItemPool.GNOMISH_KNEE, 1 ),
ItemPool.get( ItemPool.GNOMISH_FOOT, 1 ),
};
private static final AdventureResult[] FREEPULL = new AdventureResult[]
{
ClanLoungeRequest.VIP_KEY,
ItemPool.get( ItemPool.CURSED_KEG, 1 ),
ItemPool.get( ItemPool.CURSED_MICROWAVE, 1 ),
};
public static void preAscension()
{
// Create a badass belt
CreateItemRequest belt = CreateItemRequest.getInstance( ItemPool.BADASS_BELT );
if ( belt != null && belt.getQuantityPossible() > 0 )
{
belt.setQuantityNeeded( belt.getQuantityPossible() );
RequestThread.postRequest( belt );
}
// Trade in gunpowder.
if ( InventoryManager.hasItem( ItemPool.GUNPOWDER ) )
{
BreakfastManager.visitPyro();
}
// Use any usable quest items
for ( int i = 0; i < ValhallaManager.USABLE.length; ++i )
{
AdventureResult item = ValhallaManager.USABLE[i];
int count = item.getCount( KoLConstants.inventory );
if ( count > 0 )
{
RequestThread.postRequest( UseItemRequest.getInstance( item.getInstance( count ) ) );
}
}
// Sell autosellable quest items
AdventureResultArray items = new AdventureResultArray();
for ( int i = 0; i < ValhallaManager.AUTOSELLABLE.length; ++i )
{
AdventureResult item = ValhallaManager.AUTOSELLABLE[i];
int count = item.getCount( KoLConstants.inventory );
if ( count > 0 )
{
items.add( item.getInstance( count ) );
}
}
if ( items.size() > 0 )
{
AutoSellRequest request = new AutoSellRequest( items.toArray() );
RequestThread.postRequest( request );
}
// Harvest your garden
CampgroundRequest.harvestCrop();
// Repackage bear arms
AdventureResult leftArm = ItemPool.get( ItemPool.LEFT_BEAR_ARM, 1 );
AdventureResult rightArm = ItemPool.get( ItemPool.RIGHT_BEAR_ARM, 1 );
AdventureResult armBox = ItemPool.get( ItemPool.BOX_OF_BEAR_ARM, 1 );
if ( KoLConstants.inventory.contains( leftArm ) && KoLConstants.inventory.contains( rightArm )
&& !KoLConstants.inventory.contains( armBox ) )
{
UseItemRequest arm = UseItemRequest.getInstance( leftArm );
RequestThread.postRequest( arm );
}
// As the final action before we enter the gash, run a user supplied script
// If script aborts, we will not jump.
KoLmafiaCLI.DEFAULT_SHELL.executeLine( Preferences.getString( "preAscensionScript" ) );
}
public static void onAscension()
{
// Save and restore chat literacy, since you are allowed to chat while in Valhalla
boolean checkedLiteracy = ChatManager.checkedChatLiteracy();
boolean chatLiterate = ChatManager.getChatLiteracy();
KoLCharacter.reset( false );
if ( checkedLiteracy )
{
ChatManager.setChatLiteracy( chatLiterate );
}
try
{
PreferenceListenerRegistry.deferPreferenceListeners( true );
Preferences.increment( "knownAscensions", 1 );
Preferences.setInteger( "lastBreakfast", -1 );
KoLCharacter.setCurrentRun( 0 );
KoLmafia.resetCounters();
ValhallaManager.resetPerAscensionCounters();
UntinkerRequest.reset();
KoLCharacter.setGuildStoreOpen( false );
}
finally
{
PreferenceListenerRegistry.deferPreferenceListeners( false );
}
KoLmafia.resetSession();
}
public static void postAscension()
{
ItemDatabase.reset();
KoLmafia.refreshSession();
EquipmentManager.updateEquipmentLists();
ValhallaManager.resetMoonsignCafes();
ConcoctionDatabase.refreshConcoctions();
HermitRequest.initialize();
// Reset certain settings that the player almost certainly will
// use differently at the beginning of a run vs. at the end.
MoodManager.setMood( "apathetic" );
Preferences.setFloat( "hpAutoRecovery", -0.05f );
Preferences.setFloat( "mpAutoRecovery", -0.05f );
// Note the information in the session log
// for recording purposes.
ValhallaManager.logNewAscension();
// The semirare counter is set in Valhalla.
TurnCounter.startCounting( 70, "Semirare window begin", "lparen.gif" );
TurnCounter.startCounting( 80, "Semirare window end loc=*", "rparen.gif" );
// First Rain monster expected on turns 9-11
if ( KoLCharacter.inRaincore() )
{
TurnCounter.startCounting( 8, "Rain Monster window begin loc=*", "lparen.gif" );
TurnCounter.startCounting( 10, "Rain Monster window end loc=*", "rparen.gif" );
}
// First West of Loathing monster expected on turns 6-11
else if ( KoLCharacter.isWestOfLoathing() )
{
TurnCounter.startCounting( 5, "WoL Monster window begin loc=*", "lparen.gif" );
TurnCounter.startCounting( 10, "WoL Monster window end loc=*", "rparen.gif" );
}
// Starting Source Enlightenment depends on current Source Points
else if ( KoLCharacter.inTheSource() )
{
Preferences.setInteger( "sourceEnlightenment", Math.min( Preferences.getInteger( "sourcePoints" ), 11 ) );
}
// User-defined actions:
KoLmafiaCLI.DEFAULT_SHELL.executeLine( Preferences.getString( "postAscensionScript" ) );
ValhallaManager.pullFreeItems();
if ( Preferences.getBoolean( "autoQuest" ) )
{
RequestThread.postRequest( UseItemRequest.getInstance( ItemPool.get( ItemPool.SPOOKYRAVEN_TELEGRAM, 1 ) ) );
}
//force rebuild of daily deeds panel
PreferenceListenerRegistry.firePreferenceChanged( "dailyDeedsOptions" );
}
// Pull items that
private static void pullFreeItems()
{
for ( int i = 0; i < ValhallaManager.FREEPULL.length; ++i )
{
AdventureResult item = ValhallaManager.FREEPULL[i];
if ( item.getCount( KoLConstants.inventory ) > 0 )
{
continue;
}
if ( item.getCount( KoLConstants.freepulls ) > 0 )
{
RequestThread.postRequest( new StorageRequest( StorageRequest.STORAGE_TO_INVENTORY, item ) );
}
}
}
private static final void resetMoonsignCafes()
{
// Change available items if they've changed due to ascension.
if ( KoLCharacter.inBadMoon() && KoLConstants.kitchenItems.isEmpty() )
{
HellKitchenRequest.getMenu();
}
else if ( !KoLCharacter.inBadMoon() && !KoLConstants.kitchenItems.isEmpty() )
{
HellKitchenRequest.reset();
}
if ( KoLCharacter.canEat() && KoLCharacter.canadiaAvailable() && KoLConstants.restaurantItems.isEmpty() )
{
ChezSnooteeRequest.getMenu();
}
else if ( ( !KoLCharacter.canEat() || !KoLCharacter.canadiaAvailable() ) && !KoLConstants.restaurantItems.isEmpty() )
{
ChezSnooteeRequest.reset();
}
if ( KoLCharacter.canDrink() && KoLCharacter.gnomadsAvailable() && KoLConstants.microbreweryItems.isEmpty() )
{
MicroBreweryRequest.getMenu();
}
else if ( ( !KoLCharacter.canDrink() || !KoLCharacter.gnomadsAvailable() ) && !KoLConstants.microbreweryItems.isEmpty() )
{
MicroBreweryRequest.reset();
}
}
private static final void logNewAscension()
{
PrintStream sessionStream = RequestLogger.getSessionStream();
sessionStream.println();
sessionStream.println();
sessionStream.println( "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" );
sessionStream.println( " Beginning New Ascension " );
sessionStream.println( "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" );
sessionStream.println();
sessionStream.println( "Ascension #" + KoLCharacter.getAscensions() + ":" );
if ( KoLCharacter.isHardcore() )
{
sessionStream.print( "Hardcore " );
}
else
{
sessionStream.print( "Softcore " );
}
if ( KoLCharacter.inBeecore() )
{
sessionStream.print( "Bees Hate You " );
}
else if ( KoLCharacter.inFistcore() )
{
sessionStream.print( "Way of the Surprising Fist " );
}
else if ( KoLCharacter.isTrendy() )
{
sessionStream.print( "Trendy " );
}
else if ( KoLCharacter.inAxecore() )
{
sessionStream.print( "Avatar of Boris " );
}
else if ( KoLCharacter.inBugcore() )
{
sessionStream.print( "Bugbear Invasion " );
}
else if ( KoLCharacter.inZombiecore() )
{
sessionStream.print( "Zombie Slayer " );
}
else if ( KoLCharacter.inClasscore() )
{
sessionStream.print( "Class Act " );
}
else if ( KoLCharacter.isJarlsberg() )
{
sessionStream.print( "Avatar of Jarlsberg " );
}
else if ( KoLCharacter.inBigcore() )
{
sessionStream.print( "BIG! " );
}
else if ( KoLCharacter.inHighschool() )
{
sessionStream.print( "KOLHS " );
}
else if ( KoLCharacter.inClasscore2() )
{
sessionStream.print( "Class Act II: A Class For Pigs " );
}
else if ( KoLCharacter.isSneakyPete() )
{
sessionStream.print( "Avatar of Sneaky Pete " );
}
else if ( KoLCharacter.inSlowcore() )
{
sessionStream.print( "Slow and Steady " );
}
else if ( KoLCharacter.inRaincore() )
{
sessionStream.print( "Heavy Rains " );
}
else if ( KoLCharacter.isPicky() )
{
sessionStream.print( "Picky " );
}
else if ( KoLCharacter.isEd() )
{
sessionStream.print( "Actually Ed the Undying " );
}
else if ( KoLCharacter.isCrazyRandom() )
{
sessionStream.print( "One Crazy Random Summer " );
}
else if ( KoLCharacter.isCommunityService() )
{
sessionStream.print( "Community Service " );
}
else if ( KoLCharacter.isWestOfLoathing() )
{
sessionStream.print( "Avatar of West of Loathing " );
}
else if ( KoLCharacter.inTheSource() )
{
sessionStream.print( "The Source " );
}
else if ( KoLCharacter.inNuclearAutumn() )
{
sessionStream.print( "Nuclear Autumn " );
}
else if ( KoLCharacter.inNoobcore() )
{
sessionStream.print( "Gelatinous Noob " );
}
else if ( KoLCharacter.getRestricted() )
{
sessionStream.print( "Standard " );
}
else if ( KoLCharacter.canEat() && KoLCharacter.canDrink() )
{
sessionStream.print( "No-Path " );
}
else if ( KoLCharacter.canEat() )
{
sessionStream.print( "Teetotaler " );
}
else if ( KoLCharacter.canDrink() )
{
sessionStream.print( "Boozetafarian " );
}
else
{
sessionStream.print( "Oxygenarian " );
}
sessionStream.println( KoLCharacter.getClassType() );
sessionStream.println( KoLCharacter.getSign() );
sessionStream.println();
sessionStream.println();
RequestLogger.printList( KoLConstants.availableSkills, sessionStream );
sessionStream.println();
sessionStream.println( "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=" );
sessionStream.println();
sessionStream.println();
}
public static final void resetPerAscensionCounters()
{
Preferences.setString( "banishingShoutMonsters", "" );
Preferences.setFloat( "slimelingFullness", 0.0F );
Preferences.setInteger( "slimelingStacksDropped", 0 );
Preferences.setInteger( "slimelingStacksDue", 0 );
Preferences.setString( "crimbotChassis", "" );
Preferences.setString( "crimbotArm", "" );
Preferences.setString( "crimbotPropulsion", "" );
Preferences.setString( "currentEasyBountyItem", "" );
Preferences.setString( "currentHardBountyItem", "" );
Preferences.setString( "currentSpecialBountyItem", "" );
Preferences.setInteger( "crimboTreeDays", 7 );
Preferences.setString( "currentHippyStore", "none" );
Preferences.setString( "dnaSyringe", "" );
Preferences.setString( "edPiece", "" );
Preferences.setBoolean( "itemBoughtPerAscension637", false );
Preferences.setBoolean( "itemBoughtPerAscension8266", false );
Preferences.setString( "mayoInMouth", "" );
Preferences.setInteger( "mayoLevel", 0 );
Preferences.setString( "mayoMinderSetting", "" );
Preferences.setString( "snowsuit", "" );
Preferences.setInteger( "guyMadeOfBeesCount", 0 );
Preferences.setBoolean( "guyMadeOfBeesDefeated", false );
Preferences.setInteger( "guardTurtlesFreed", 0 );
Preferences.setInteger( "carboLoading", 0 );
Preferences.setBoolean( "popularTartUnlocked", false );
Preferences.setInteger( "smoresEaten", 0 );
Preferences.setInteger( "snojoMoxieWins", 0 );
Preferences.setInteger( "snojoMuscleWins", 0 );
Preferences.setInteger( "snojoMysticalityWins", 0 );
Preferences.setString( "snojoSetting", "NONE" );
Preferences.setInteger( "sugarCounter4178", 0 );
Preferences.setInteger( "sugarCounter4179", 0 );
Preferences.setInteger( "sugarCounter4180", 0 );
Preferences.setInteger( "sugarCounter4181", 0 );
Preferences.setInteger( "sugarCounter4182", 0 );
Preferences.setInteger( "sugarCounter4183", 0 );
Preferences.setInteger( "sugarCounter4191", 0 );
Preferences.setInteger( "cozyCounter6332", 0 );
Preferences.setInteger( "cozyCounter6333", 0 );
Preferences.setInteger( "cozyCounter6334", 0 );
Preferences.setInteger( "lastAnticheeseDay", -5 );
Preferences.setInteger( "nextParanormalActivity", 1 );
Preferences.setString( "nextSpookyravenElizabethRoom", "The Haunted Storage Room" );
Preferences.setString( "nextSpookyravenStephenRoom", "The Haunted Bedroom" );
Preferences.setInteger( "meansuckerPrice", 400 );
Preferences.setInteger( "mayflyExperience", 0 );
Preferences.setString( "trapperOre", "" );
Preferences.setInteger( "twinpeakProgress", 0 );
Preferences.setInteger( "gnasirProgress", 0 );
Preferences.setString( "louvreLayout", "" );
Preferences.setInteger( "pendingMapReflections", 0 );
Preferences.setString( "violetFogLayout", "" );
Preferences.setString( "dolphinItem", "" );
Preferences.setInteger( "parasolUsed", 0 );
Preferences.setInteger( "blankOutUsed", 0 );
Preferences.setString( "telescope1", "" );
Preferences.setString( "telescope2", "" );
Preferences.setString( "telescope3", "" );
Preferences.setString( "telescope4", "" );
Preferences.setString( "telescope5", "" );
Preferences.setString( "telescope6", "" );
Preferences.setString( "telescope7", "" );
Preferences.setInteger( "currentHedgeMazeRoom", 0 );
Preferences.setInteger( "singleFamiliarRun", 0 );
Preferences.setString( "plantingDate", "");
Preferences.setInteger( "plantingDay", -1);
Preferences.setInteger( "pyramidPosition", 1 );
Preferences.setBoolean( "pyramidBombUsed", false );
Preferences.setInteger( "jungCharge", 0 );
Preferences.setInteger( "grimstoneCharge", 0 );
Preferences.setInteger( "miniAdvClass", 0 );
Preferences.setInteger( "turtleBlessingTurns", 0 );
Preferences.setString( "testudinalTeachings", "" );
Preferences.setString( "yearbookCameraTarget", "" );
Preferences.setBoolean( "yearbookCameraPending", false );
Preferences.setInteger( "yearbookCameraUpgrades", Preferences.getInteger( "yearbookCameraAscensions" ) );
Preferences.setString( "pastaThrall1", "" );
Preferences.setString( "pastaThrall2", "" );
Preferences.setString( "pastaThrall3", "" );
Preferences.setString( "pastaThrall4", "" );
Preferences.setString( "pastaThrall5", "" );
Preferences.setString( "pastaThrall6", "" );
Preferences.setString( "pastaThrall7", "" );
Preferences.setString( "pastaThrall8", "" );
Preferences.setBoolean( "prayedForGlamour", false );
Preferences.setBoolean( "prayedForProtection", false );
Preferences.setBoolean( "prayedForVigor", false );
Preferences.setInteger( "rockinRobinProgress", 25 );
Preferences.setInteger( "optimisticCandleProgress", 25 );
Preferences.setString( "demonName12", "" );
Preferences.setString( "sourceTerminalEnquiry", "" );
Preferences.setString( "sourceTerminalEducate1", "" );
Preferences.setString( "sourceTerminalEducate2", "" );
// Copied monsters
Preferences.setString( "cameraMonster", "" );
Preferences.setString( "crappyCameraMonster", "" );
Preferences.setString( "crudeMonster", "" );
Preferences.setString( "envyfishMonster", "" );
Preferences.setString( "iceSculptureMonster", "" );
Preferences.setString( "photocopyMonster", "" );
Preferences.setString( "rainDohMonster", "" );
Preferences.setString( "screencappedMonster", "" );
Preferences.setString( "spookyPuttyMonster", "" );
Preferences.setString( "waxMonster", "" );
Preferences.setString( "nosyNoseMonster", "" );
// Way of the Surprising Fist
Preferences.setInteger( "charitableDonations", 0 );
Preferences.setInteger( "fistSkillsKnown", 0 );
Preferences.setBoolean( "fistTeachingsHaikuDungeon", false);
Preferences.setBoolean( "fistTeachingsPokerRoom", false);
Preferences.setBoolean( "fistTeachingsBarroomBrawl", false);
Preferences.setBoolean( "fistTeachingsConservatory", false);
Preferences.setBoolean( "fistTeachingsBatHole", false);
Preferences.setBoolean( "fistTeachingsFunHouse", false);
Preferences.setBoolean( "fistTeachingsMenagerie", false);
Preferences.setBoolean( "fistTeachingsSlums", false);
Preferences.setBoolean( "fistTeachingsFratHouse", false);
Preferences.setBoolean( "fistTeachingsRoad", false);
Preferences.setBoolean( "fistTeachingsNinjaSnowmen", false);
// The Sea
Preferences.setBoolean( "bigBrotherRescued", false );
Preferences.setBoolean( "dampOldBootPurchased", false );
Preferences.setInteger( "dreadScroll1", 0 );
Preferences.setInteger( "dreadScroll2", 0 );
Preferences.setInteger( "dreadScroll3", 0 );
Preferences.setInteger( "dreadScroll4", 0 );
Preferences.setInteger( "dreadScroll5", 0 );
Preferences.setInteger( "dreadScroll6", 0 );
Preferences.setInteger( "dreadScroll7", 0 );
Preferences.setInteger( "dreadScroll8", 0 );
Preferences.setInteger( "encountersUntilDMTChoice", 5 );
Preferences.setInteger( "gladiatorBallMovesKnown", 0 );
Preferences.setInteger( "gladiatorBladeMovesKnown", 0 );
Preferences.setInteger( "gladiatorNetMovesKnown", 0 );
Preferences.setInteger( "lastColosseumRoundWon", 0 );
Preferences.setInteger( "lastCouncilVisit", 0 );
Preferences.setInteger( "merkinVocabularyMastery", 0 );
Preferences.setString( "lassoTraining", "" );
Preferences.setBoolean( "mapToMadnessReefPurchased", false );
Preferences.setBoolean( "mapToTheMarinaraTrenchPurchased", false );
Preferences.setBoolean( "mapToAnemoneMinePurchased", false );
Preferences.setBoolean( "mapToTheDiveBarPurchased", false );
Preferences.setBoolean( "mapToTheSkateParkPurchased", false );
Preferences.setString( "merkinLockkeyMonster", "" );
Preferences.setString( "merkinQuestPath", "none" );
Preferences.setString( "seahorseName", "" );
Preferences.setString( "workteaClue", "" );
// Grimstone Mask trackers
Preferences.setInteger( "rumpelstiltskinTurnsUsed", 0 );
Preferences.setInteger( "rumpelstiltskinKidsRescued", 0 );
Preferences.setInteger( "cinderellaMinutesToMidnight", 0 );
Preferences.setInteger( "cinderellaScore", 0 );
Preferences.setString( "grimstoneMaskPath", "" );
// Gingerbread City
Preferences.setInteger( "gingerMuscleChoice", 0 );
Preferences.setBoolean( "gingerSubwayLineUnlocked", false );
Preferences.setBoolean( "gingerNegativesDropped", false );
Preferences.setBoolean( "gingerBlackmailAccomplished", false );
Preferences.setInteger( "gingerLawChoice", 0 );
Preferences.setInteger( "gingerDigCount", 0 );
// Spacegate
Preferences.setInteger( "procrastinatorLanguageFluency", 0 );
Preferences.setInteger( "spaceBabyLanguageFluency", 0 );
Preferences.setInteger( "spacePirateLanguageFluency", 0 );
// AWOL
Preferences.setInteger( "awolMedicine", 0 );
Preferences.setInteger( "awolVenom", 0 );
Preferences.increment( "awolPointsBeanslinger", Preferences.getInteger( "awolDeferredPointsBeanslinger" ) );
Preferences.increment( "awolPointsCowpuncher", Preferences.getInteger( "awolDeferredPointsCowpuncher" ) );
Preferences.increment( "awolPointsSnakeoiler", Preferences.getInteger( "awolDeferredPointsSnakeoiler" ) );
Preferences.setInteger( "awolDeferredPointsBeanslinger", 0 );
Preferences.setInteger( "awolDeferredPointsCowpuncher", 0 );
Preferences.setInteger( "awolDeferredPointsSnakeoiler", 0 );
// The Source trackers
Preferences.resetToDefault( "sourceAgentsDefeated" );
Preferences.resetToDefault( "sourceInterval" );
Preferences.resetToDefault( "sourceOracleTarget" );
Preferences.resetToDefault( "sourceEnlightenment" );
// Nuclear Autumn
Preferences.resetToDefault( "falloutShelterChronoUsed" );
Preferences.resetToDefault( "falloutShelterCoolingTankUsed" );
// Gelatinous Noob
Preferences.increment( "noobPoints", Preferences.getInteger( "noobDeferredPoints" ) );
// Campground resets
Preferences.setBoolean( "hasBartender", false );
Preferences.setBoolean( "hasChef", false );
Preferences.setBoolean( "hasCocktailKit", false );
Preferences.setBoolean( "hasOven", false );
Preferences.setBoolean( "hasRange", false );
Preferences.setBoolean( "hasShaker", false );
Preferences.setBoolean( "hasSushiMat", false );
QuestDatabase.resetQuests();
IslandManager.resetIsland();
BanishManager.resetAscension();
BugbearManager.resetStatus();
TurnCounter.clearCounters();
AdventureQueueDatabase.resetQueue();
AdventureSpentDatabase.resetTurns();
}
}