├── .gitattributes ├── BUILD ├── settings_extra │ ├── sharing.dat │ ├── header.txt │ ├── pre.dat │ ├── action.dat │ ├── any.dat │ └── post.dat ├── phylums │ ├── header.txt │ └── banish.dat ├── restoration │ ├── clan.dat │ ├── header.txt │ ├── place.dat │ ├── skill.dat │ ├── dwelling.dat │ └── item.dat ├── monsters │ ├── header.txt │ ├── copy.dat │ ├── freerun.dat │ ├── banish.dat │ ├── replace.dat │ ├── yellowray.dat │ └── sniff.dat ├── settings │ ├── header.txt │ ├── pre.dat │ ├── sharing.dat │ ├── action.dat │ └── post.dat ├── familiars │ ├── boss.dat │ ├── gremlins.dat │ ├── yellowray.dat │ ├── init.dat │ ├── header.txt │ ├── stat.dat │ ├── meat.dat │ ├── regen.dat │ ├── item.dat │ └── drop.dat ├── task_order │ ├── header.txt │ ├── Avatar of Jarlsberg.dat │ ├── Zombie Slayer.dat │ ├── Quantum Terrarium.dat │ ├── Legacy of Loathing.dat │ ├── A Shrunken Adventurer am I.dat │ ├── default.dat │ ├── Avant Guard.dat │ └── WereProfessor.dat ├── items │ ├── header.txt │ └── reserve.dat └── assemble.sh ├── RELEASE ├── scripts │ └── autoscend │ │ ├── iotms │ │ ├── floristfriar.ash │ │ ├── mr2007.ash │ │ ├── eudora.ash │ │ ├── mr2012.ash │ │ ├── mr2011.ash │ │ ├── elementalPlanes.ash │ │ └── ttt.ash │ │ ├── ___auto_DO_NOT_RUN_FILES_IN_THIS_DIRECTORY │ │ ├── auto_c_DO_NOT_RUN_FILES_IN_THIS_DIRECTORY │ │ ├── paths │ │ ├── way_of_the_surprising_fist.ash │ │ ├── community_service.ash │ │ ├── disguises_delimit.ash │ │ ├── grey_goo.ash │ │ ├── one_crazy_random_summer.ash │ │ ├── two_crazy_random_summer.ash │ │ ├── fall_of_the_dinosaurs.ash │ │ ├── hattrick.ash │ │ ├── i_love_u_hate.ash │ │ ├── casual.ash │ │ ├── picky.ash │ │ ├── live_ascend_repeat.ash │ │ ├── pocket_familiars.ash │ │ ├── g_lover.ash │ │ ├── quantum_terrarium.ash │ │ ├── avatar_of_jarlsberg.ash │ │ ├── bees_hate_you.ash │ │ ├── small.ash │ │ └── license_to_adventure.ash │ │ ├── combat │ │ ├── auto_combat_gelatinous_noob.ash │ │ ├── auto_combat_awol.ash │ │ ├── auto_combat_bees_hate_you.ash │ │ ├── auto_combat_dark_gyffte.ash │ │ ├── auto_combat_pete.ash │ │ ├── auto_combat_license_to_adventure.ash │ │ ├── auto_combat_kingdom_of_exploathing.ash │ │ ├── auto_combat_plumber.ash │ │ ├── auto_combat_wildfire.ash │ │ ├── auto_combat_you_robot.ash │ │ ├── auto_combat_wereprofessor.ash │ │ ├── auto_combat_the_source.ash │ │ ├── auto_combat_mr2012.ash │ │ ├── auto_combat_ocrs.ash │ │ ├── auto_combat_fall_of_the_dinosaurs.ash │ │ └── auto_combat_disguises_delimit.ash │ │ ├── auto_test.ash │ │ ├── quests │ │ ├── level_01.ash │ │ ├── level_02.ash │ │ ├── level_05.ash │ │ └── level_06.ash │ │ ├── autoscend_record.ash │ │ ├── auto_zlib.ash │ │ └── auto_craft.ash ├── ccs │ └── autoscend_null.ccs ├── dependencies.txt ├── data │ ├── autoscend_negative_effects.txt │ ├── autoscend_phylums.txt │ ├── autoscend_items.txt │ └── autoscend_settings_extra.txt └── relay │ └── autoscend_settings_extra.ash ├── manifest.json ├── .gitignore ├── docs ├── PULL_REQUEST_TEMPLATE ├── ISSUE_TEMPLATE.md └── CONTRIBUTING.md └── .github └── workflows └── ci.yml /.gitattributes: -------------------------------------------------------------------------------- 1 | *.sh text eol=lf 2 | -------------------------------------------------------------------------------- /BUILD/settings_extra/sharing.dat: -------------------------------------------------------------------------------- 1 | # 2 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/iotms/floristfriar.ash: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "root_directory": "./RELEASE/" 3 | } -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/___auto_DO_NOT_RUN_FILES_IN_THIS_DIRECTORY: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/auto_c_DO_NOT_RUN_FILES_IN_THIS_DIRECTORY: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /RELEASE/ccs/autoscend_null.ccs: -------------------------------------------------------------------------------- 1 | [ default ] 2 | scrollwhendone 3 | 4 | -------------------------------------------------------------------------------- /BUILD/phylums/header.txt: -------------------------------------------------------------------------------- 1 | # See auto_check_conditions for conditional options -------------------------------------------------------------------------------- /BUILD/restoration/clan.dat: -------------------------------------------------------------------------------- 1 | A Relaxing Hot Tub ALL 0 5 2 All Negative none 2 | -------------------------------------------------------------------------------- /BUILD/monsters/header.txt: -------------------------------------------------------------------------------- 1 | # See auto_check_conditions for conditional options 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.bak 2 | *.sh 3 | .github/kolmafia.jar 4 | .vs* 5 | *.DS_Store 6 | *.swp 7 | -------------------------------------------------------------------------------- /BUILD/settings/header.txt: -------------------------------------------------------------------------------- 1 | # variable timing, number, variable name, variable type, description 2 | 3 | -------------------------------------------------------------------------------- /BUILD/settings_extra/header.txt: -------------------------------------------------------------------------------- 1 | # variable timing, number, variable name, variable type, description 2 | 3 | -------------------------------------------------------------------------------- /BUILD/settings/pre.dat: -------------------------------------------------------------------------------- 1 | auto_getSteelOrgan_initialize boolean When we initialize an ascension this will be copied to auto_getSteelOrgan 2 | -------------------------------------------------------------------------------- /BUILD/settings_extra/pre.dat: -------------------------------------------------------------------------------- 1 | auto_doGalaktik_initialize boolean When we initialize an ascension this will be copied to auto_doGalaktik 2 | -------------------------------------------------------------------------------- /BUILD/settings/sharing.dat: -------------------------------------------------------------------------------- 1 | auto_disableExcavator boolean When set to true will disable automatically sending spading data via the Extractor script 2 | -------------------------------------------------------------------------------- /BUILD/restoration/header.txt: -------------------------------------------------------------------------------- 1 | # type, idx, name, hp restored, mp restored, soft reserve limit, hard reserve limit, effects removed, effects gained 2 | 3 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/way_of_the_surprising_fist.ash: -------------------------------------------------------------------------------- 1 | boolean in_wotsf() 2 | { 3 | return my_path() == $path[Way of the Surprising Fist]; 4 | } 5 | -------------------------------------------------------------------------------- /BUILD/familiars/boss.dat: -------------------------------------------------------------------------------- 1 | Machine Elf 2 | Fist Turkey 3 | Shorter-Order Cook 4 | Mu 5 | Warbear Drone 6 | Vampire Vintner 7 | Jill-of-All-Trades 8 | Mosquito 9 | -------------------------------------------------------------------------------- /BUILD/restoration/place.dat: -------------------------------------------------------------------------------- 1 | # special handling in auto_restore.ash accounts for mp restore if completed as frat warrior 2 | the nunnery 1000 0 3 0 none none 3 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/community_service.ash: -------------------------------------------------------------------------------- 1 | # community service is no longer supported 2 | 3 | boolean in_community() 4 | { 5 | return my_path() == $path[Community Service]; 6 | } 7 | -------------------------------------------------------------------------------- /BUILD/familiars/gremlins.dat: -------------------------------------------------------------------------------- 1 | # We want to delevel, but don't want to deal damage 2 | Nosy Nose 3 | Plastic Pirate Skull 4 | Space Jellyfish 5 | Peace Turkey 6 | Gelatinous Cubeling 7 | Barrrnacle 8 | -------------------------------------------------------------------------------- /BUILD/task_order/header.txt: -------------------------------------------------------------------------------- 1 | # Task ordering. Functions must be: boolean func() 2 | # If path name does not exist in data file, 'default' will be used 3 | # path name, index, function, condition_function (optional) 4 | -------------------------------------------------------------------------------- /BUILD/familiars/yellowray.dat: -------------------------------------------------------------------------------- 1 | Crimbo Shrub 2 | # Nanorhino and He-Boulder would require a bit of extra doing to make work 3 | # Besides, with disentegrate available, why would you use a familiar based yellow ray anyway 4 | -------------------------------------------------------------------------------- /BUILD/familiars/init.dat: -------------------------------------------------------------------------------- 1 | Xiblaxian Holo-Companion 2 | Cute Meteor 3 | Oily Woim 4 | # Unfortunately Happy Medium is half as effective at boosting init 5 | # That and it's booze isn't terribly relevant nowadays, so it's been demoted 6 | Happy Medium 7 | -------------------------------------------------------------------------------- /RELEASE/dependencies.txt: -------------------------------------------------------------------------------- 1 | github Ezandora/Detective-Solver 2 | github Ezandora/Helix-Fossil 3 | github Ezandora/Far-Future 4 | github Ezandora/Voting-Booth 5 | github loathers/excavator release 6 | github loathers/combo release 7 | github C2Talon/c2t_apron master 8 | github C2Talon/c2t_megg master 9 | -------------------------------------------------------------------------------- /BUILD/restoration/skill.dat: -------------------------------------------------------------------------------- 1 | Tongue of the Walrus 35 0 0 0 Beaten Up none 2 | Cannelloni Cocoon 1000 0 0 0 none none 3 | Shake it Off ALL 0 0 0 All Negative none 4 | Gelatinous Reconstruction 13 0 0 0 Beaten Up none 5 | Disco Nap 20 0 0 0 none none 6 | Lasagna Bandages 20 0 0 0 none none 7 | Rest Upside Down 1000 1000 0 0 none none 8 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/disguises_delimit.ash: -------------------------------------------------------------------------------- 1 | boolean in_disguises() 2 | { 3 | return my_path() == $path[Disguises Delimit]; 4 | } 5 | 6 | void disguises_initializeSettings() 7 | { 8 | if(in_disguises()) 9 | { 10 | set_property("auto_getBeehive", true); 11 | set_property("auto_getBoningKnife", true); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /BUILD/settings_extra/action.dat: -------------------------------------------------------------------------------- 1 | auto_disableAdventureHandling boolean When true this prevents preadventure and postadventure scripts from running. resets every loop. 2 | auto_disableFamiliarChanging boolean When true this prevents familiar changes. resets every loop. 3 | auto_combatDirective string An action to execute at the start of next combat. resets every loop. 4 | -------------------------------------------------------------------------------- /BUILD/monsters/copy.dat: -------------------------------------------------------------------------------- 1 | Pygmy Bowler prop:hiddenBowlingAlleyProgress<4 2 | Bob Racecar 3 | Racecar Bob 4 | pygmy witch accountant loc:The Hidden Office Building 5 | pygmy witch accountant loc:The Hidden Apartment Building;effect:Thrice-Cursed 6 | Camel's Toe item:star<7;item:line<6 7 | Skinflute item:star<7;item:line<6 8 | Swarm of Ghuol Whelps prop:cyrptCrannyEvilness>17 9 | -------------------------------------------------------------------------------- /BUILD/items/header.txt: -------------------------------------------------------------------------------- 1 | # First column is what type of item 2 | # Second column is just a number needed to make this load nicely 3 | # Third column is what item, preceded by how many if necessary 4 | # Fourth column (optional) is conditions for that item to be considered 5 | # See auto_check_conditions for information on valid conditionals 6 | # An item can be listed multiple times (presumably with different conditionals) 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /BUILD/familiars/header.txt: -------------------------------------------------------------------------------- 1 | # First column is what type of familiar 2 | # Second column is priority number 3 | # Third column is what familiar 4 | # Fourth column (optional) is conditions for that item to be considered 5 | # See auto_check_conditions for information on valid conditionals 6 | # A familiar can be listed multiple times (presumably with different conditionals) 7 | # First familiar found that is available, can be used, and meets its conditions (if any) will be used 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/grey_goo.ash: -------------------------------------------------------------------------------- 1 | boolean in_ggoo() 2 | { 3 | return my_path() == $path[Grey Goo]; 4 | } 5 | 6 | boolean LA_grey_goo_tasks() 7 | { 8 | if(!in_ggoo()) 9 | { 10 | return false; 11 | } 12 | 13 | print("Adventuring in Grey Goo is not currently supported, or necessary. Have fun!"); 14 | if (my_daycount() >= 3) 15 | { 16 | print("You made it beyond the dawn of the third day and can now ascend. Congratulations!", "blue"); 17 | abort(); 18 | } 19 | abort("Please come back in " + (3 - my_daycount()) + " days."); 20 | return true; 21 | } 22 | -------------------------------------------------------------------------------- /BUILD/phylums/banish.dat: -------------------------------------------------------------------------------- 1 | dude loc:The Black Forest 2 | dude loc:Twin Peak 3 | dude loc:The Red Zeppelin;item:Glark Cable>2 4 | dude loc:Whitey's Grove;quest:questL11Palindome<=3 5 | beast loc:The Hidden Park 6 | beast loc:Inside the Palindome;quest:questL11Palindome<=3 7 | undead loc:The Haunted Library;item:Killing Jar>0;!prop_boolean:auto_famKill 8 | undead loc:The Unquiet Garves 9 | undead loc:The Haunted Boiler Room 10 | undead loc:The Middle Chamber 11 | penguin loc:The Copperhead Club 12 | goblin loc:Cobb's Knob Harem 13 | construct loc:Noob Cave;!prop_boolean:auto_nonAdvLoc 14 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_gelatinous_noob.ash: -------------------------------------------------------------------------------- 1 | string auto_combatGelatinousNoobStage5(int round, monster enemy, string text) 2 | { 3 | // stage 5 = kill 4 | if(!in_gnoob()) 5 | { 6 | return ""; 7 | } 8 | 9 | //3x elemental damage bonuses attack against duplicated [goat]. duplicated means double stats and double drops 10 | if(canUse($skill[Gelatinous Kick], false) && haveUsed($skill[Duplicate])) 11 | { 12 | if($monsters[Dairy Goat] contains enemy) 13 | { 14 | return useSkill($skill[Gelatinous Kick], false); 15 | } 16 | } 17 | 18 | return ""; 19 | } 20 | -------------------------------------------------------------------------------- /BUILD/settings_extra/any.dat: -------------------------------------------------------------------------------- 1 | auto_abooclover boolean Are we considering using a clover at A-Boo Peak? 2 | auto_aboopending integer The last turn of a pending A-Boo Clue. 0 if no clue active. 3 | auto_clanstuff string What was the last day we did 'end of day' clan stuff. 4 | auto_maxCandyPrice integer Max allowable price per candy for Rethinking Candy (default 2500) 5 | _auto_ignoreRestoreFailureToday boolean if true we will for today only ignore failure to restore MP or HP and just continue playing 6 | auto_aosol_dontUnCurse boolean Avatar of Shadows Over Loathing: if true will keep all cursed items. 7 | auto_debug_maximizer boolean Help debug maximizer issue where it is not equipping a weapon 8 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_awol.ash: -------------------------------------------------------------------------------- 1 | //Path specific combat handling functions for Avatar of West of Loathing 2 | 3 | void awol_combat_helper(string page) 4 | { 5 | //Let us self-contain this so it is quick to remove later. 6 | if((my_daycount() == 1) && (my_turncount() < 10)) 7 | { 8 | set_property("auto_noSnakeOil", 0); 9 | } 10 | 11 | if(contains_text(page, "Your oil extractor is completely clogged up at this point")) 12 | { 13 | set_property("auto_noSnakeOil", my_daycount()); 14 | } 15 | if(get_property("_oilExtracted").to_int() >= 100) 16 | { 17 | set_property("auto_noSnakeOil", my_daycount()); 18 | } 19 | 20 | if(!combat_status_check("extractSnakeOil") && (get_property("auto_noSnakeOil").to_int() == my_daycount())) 21 | { 22 | combat_status_add("extractSnakeOil"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /BUILD/assemble.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | HEADER="# THIS FILE IS GENERATED BY BUILD/assemble.sh 3 | # DO NOT EDIT THIS FILE DIRECTLY. EDIT THE .DAT FILES IN THE /BUILD/ FOLDER THEN RUN assemble.sh 4 | " 5 | 6 | for DIR in ./*/; do 7 | DIR_STRIP_LEAD=${DIR#*/} 8 | DIR_CLEAN=${DIR_STRIP_LEAD%/} 9 | OUT="../RELEASE/data/autoscend_${DIR_CLEAN}.txt" 10 | echo "$HEADER" > $OUT 11 | cat $DIR/header.txt >> $OUT 12 | SAVEIFS=$IFS 13 | IFS=$(echo -en "\n\b") 14 | for FILENAME in $(ls ${DIR}*.dat | sort -i); do 15 | SLOT=${FILENAME::-4} 16 | SLOT=${SLOT##*/} 17 | NUM=0 18 | cat $FILENAME | while read LINE; do 19 | if [[ $LINE == \#* ]]; then 20 | echo "$LINE" >> $OUT 21 | else 22 | echo "$SLOT $NUM $LINE" >> $OUT 23 | let "NUM += 1" 24 | fi 25 | done 26 | echo "" >> $OUT 27 | done 28 | IFS=$SAVEIFS 29 | done 30 | -------------------------------------------------------------------------------- /BUILD/settings/action.dat: -------------------------------------------------------------------------------- 1 | auto_interrupt boolean Script will abort after the next action is finished (instead of mid turn which can cause problems). Will be reset to false after every time it is used. 2 | auto_debugging boolean Every time you run the script it will perform one adventure and then stop by setting auto_interrupt = true 3 | auto_paranoia integer If quest tracking is broken enable this. It determines how often should we refresh quests. measured in adventures. -1 is never. 1 = every single adventure 4 | auto_inv_paranoia boolean If item drop tracking is broken enable this. It will refresh inventory every loop. 5 | auto_newbieOverride boolean If true will override newbie block once then set itself to false. Newbie block is enabled used when you fight a crate (please report crate fighting) or when you spent too many adventures in a zone 6 | -------------------------------------------------------------------------------- /RELEASE/data/autoscend_negative_effects.txt: -------------------------------------------------------------------------------- 1 | Beaten Up true 2 | Grilled true 3 | Corroded Weapon true 4 | Majorly Poisoned true 5 | Apathy true 6 | A Little Bit Poisoned true 7 | Hardly Poisoned at All true 8 | Really Quite Poisoned true 9 | Half-Eaten Brain true 10 | Socialismydia true 11 | Axe Wound true 12 | "The Disease" true 13 | Beer in Your Shoes true 14 | Tetanus true 15 | Temporary Blindness true 16 | Toad In The Hole true 17 | Light-Headed true 18 | The Colors... true 19 | Somewhat Poisoned true 20 | Confused true 21 | Konked on the Head true 22 | Flattened true 23 | Partially Paralyzed true 24 | Webbed true 25 | Strangulated true 26 | Cunctatitis true 27 | Temporary Amnesia true 28 | Tangled Up true 29 | Teleportitis true 30 | Skunkulated true 31 | Easily Embarrassed true 32 | All Covered In Whatsit true 33 | Flared Nostrils true 34 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_bees_hate_you.ash: -------------------------------------------------------------------------------- 1 | //Path specific combat handling for Bees Hate You 2 | 3 | string auto_combatBHYStage1(int round, monster enemy, string text) 4 | { 5 | // stage 1 = 1st round actions: puzzle boss, pickpocket, duplicate, things that are only allowed if they are the first action you take. 6 | 7 | //Bees Hate You path final boss instakill. 8 | //technically also a hidden boss in all paths but we never want to fight it in other paths 9 | if(enemy == $monster[Guy Made Of Bees]) 10 | { 11 | if(canUse($item[antique hand mirror])) 12 | { 13 | return useItem($item[antique hand mirror]); 14 | } 15 | else 16 | { 17 | abort("We attacked [Guy Made Of Bees] without an [antique hand mirror]. Report this then get the mirror before running autoscend again"); 18 | } 19 | } 20 | 21 | return ""; 22 | } 23 | -------------------------------------------------------------------------------- /BUILD/settings/post.dat: -------------------------------------------------------------------------------- 1 | auto_getSteelOrgan boolean Get Steel Organ in this ascension? 2 | auto_getBeehive boolean Get Beehive in this ascension? 3 | auto_getStarKey boolean Get Richard's Star Key in this ascension? 4 | auto_holeinthesky boolean Open the Hole in the Sky in this ascension? 5 | auto_hippyInstead boolean Fight on the side of the hippies instead of the Frat Warriors in this ascension? 6 | auto_ignoreFlyer boolean Do not do the flyer quest in this ascension? recommended to set true if fighting for the hippies. 7 | auto_wandOfNagamar boolean Do we need to get a Wand of Nagamar in this ascension? 8 | auto_dontPhylumBanish boolean If false will banish enemy phyla. Banishing should save some turns, but can interfere with the routing, and may mess up later banishes / tracks. 9 | auto_runDayCount integer How many days do you think your run will take? Defaults to 2. 10 | -------------------------------------------------------------------------------- /BUILD/restoration/dwelling.dat: -------------------------------------------------------------------------------- 1 | big rock 4 5 0 0 none none 2 | Newbiesport™ tent 9 10 0 0 none none 3 | Giant Pilgrim Hat 14 15 0 0 none Pyramid Power 4 | Barskin Tent 19 20 0 0 none none 5 | Cottage 29 30 0 0 none none 6 | BRICKO pyramid 34 35 0 0 none none 7 | Frobozz Real-Estate Company Instant House (TM) 39 40 0 0 none none 8 | Sandcastle 49 50 0 0 none none 9 | Ginormous Pumpkin 49 50 0 0 none Juiced and Jacked 10 | Giant Faraday Cage 49 50 0 0 none Uncaged Power 11 | Snow Fort 49 50 0 0 none Snow Fortified 12 | Elevent 49 50 0 0 none It's Ridiculous 13 | House of Twigs and Spit 59 60 0 0 none none 14 | Gingerbread House 69 70 0 0 none Holiday Bliss 15 | hobo fortress blueprints 84 85 0 0 none Hobonic 16 | Xiblaxian residence-cube 99 100 0 0 none Hypercubed 17 | Distant Woods Getaway Brochure 250 125 2 0 none none 18 | Chateau Mantegna room key 250 125 2 0 none none 19 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_dark_gyffte.ash: -------------------------------------------------------------------------------- 1 | //Path specific combat handling for dark gyffte 2 | 3 | string auto_combatDarkGyffteStage2(int round, monster enemy, string text) 4 | { 5 | // stage 2 = enders: escape, replace, instakill, yellowray and other actions that instantly end combat 6 | 7 | //Ensorcel is a Dark Gyffte specific skill that lets you mind control an enemy to becoming a minion 3/day. 8 | //mechanically it is a free runaway that also gives you a vampyre specific pet based on the phylum of the monster you are facing. 9 | if(bat_shouldEnsorcel(enemy) && canUse($skill[Ensorcel]) && get_property("auto_bat_ensorcels").to_int() < 3) 10 | { 11 | set_property("auto_bat_ensorcels", get_property("auto_bat_ensorcels").to_int() + 1); 12 | handleTracker(enemy, $skill[Ensorcel], "auto_otherstuff"); 13 | return useSkill($skill[Ensorcel]); 14 | } 15 | 16 | return ""; 17 | } 18 | -------------------------------------------------------------------------------- /RELEASE/data/autoscend_phylums.txt: -------------------------------------------------------------------------------- 1 | # THIS FILE IS GENERATED BY BUILD/assemble.sh 2 | # DO NOT EDIT THIS FILE DIRECTLY. EDIT THE .DAT FILES IN THE /BUILD/ FOLDER THEN RUN assemble.sh 3 | 4 | # See auto_check_conditions for conditional optionsbanish 0 dude loc:The Black Forest 5 | banish 1 dude loc:Twin Peak 6 | banish 2 dude loc:The Red Zeppelin;item:Glark Cable>2 7 | banish 3 dude loc:Whitey's Grove;quest:questL11Palindome<=3 8 | banish 4 beast loc:The Hidden Park 9 | banish 5 beast loc:Inside the Palindome;quest:questL11Palindome<=3 10 | banish 6 undead loc:The Haunted Library;item:Killing Jar>0;!prop_boolean:auto_famKill 11 | banish 7 undead loc:The Unquiet Garves 12 | banish 8 undead loc:The Haunted Boiler Room 13 | banish 9 undead loc:The Middle Chamber 14 | banish 10 penguin loc:The Copperhead Club 15 | banish 11 goblin loc:Cobb's Knob Harem 16 | banish 12 construct loc:Noob Cave;!prop_boolean:auto_nonAdvLoc 17 | 18 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/one_crazy_random_summer.ash: -------------------------------------------------------------------------------- 1 | boolean in_ocrs() 2 | { 3 | return my_path() == $path[One Crazy Random Summer]; 4 | } 5 | 6 | boolean ocrs_postHelper() 7 | { 8 | if(in_ocrs()) 9 | { 10 | return false; 11 | } 12 | 13 | set_property("auto_useCleesh", false); 14 | return true; 15 | } 16 | 17 | boolean ocrs_postCombatResolve() 18 | { 19 | if((have_effect($effect[Beaten Up]) > 0) && in_ocrs()) 20 | { 21 | if(contains_text(get_property("auto_funPrefix"), "annoying") || 22 | contains_text(get_property("auto_funPrefix"), "phase-shifting") || 23 | contains_text(get_property("auto_funPrefix"), "restless") || 24 | contains_text(get_property("auto_funPrefix"), "ticking")) 25 | { 26 | auto_log_warning("Probably beaten up by FUN! Trying to recover instead of aborting", "red"); 27 | handleTracker(last_monster(), get_property("auto_funPrefix"), "auto_funTracker"); 28 | acquireHP(); 29 | } 30 | } 31 | 32 | 33 | return false; 34 | } 35 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_pete.ash: -------------------------------------------------------------------------------- 1 | //Path specific combat handling for Avatar of Sneaky Pete 2 | 3 | string auto_combatPeteStage1(int round, monster enemy, string text) 4 | { 5 | // stage 1 = 1st round actions: puzzle boss, pickpocket, duplicate, things that are only allowed if they are the first action you take. 6 | 7 | //adjust audience love/hate. must be first action done in combat 8 | //TODO rush to max love, then max hate, then max love again for the consumables 9 | if(my_class() == $class[Avatar of Sneaky Pete] && canSurvive(3.0)) 10 | { 11 | int maxAudience = 30; 12 | if($items[Sneaky Pete\'s Leather Jacket, Sneaky Pete\'s Leather Jacket (Collar Popped)] contains equipped_item($slot[shirt])) 13 | { 14 | maxAudience = 50; 15 | } 16 | if(canUse($skill[Mug for the Audience]) && (my_audience() < maxAudience || disregardInstantKarma())) 17 | { 18 | return useSkill($skill[Mug for the Audience]); 19 | } 20 | } 21 | 22 | return ""; 23 | } 24 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/iotms/mr2007.ash: -------------------------------------------------------------------------------- 1 | # This is meant for items that have a date of 2007 2 | 3 | boolean auto_hasNavelRing() 4 | { 5 | // check for normal version 6 | static item navelRing = $item[Navel ring of navel gazing]; 7 | if(auto_is_valid(navelRing) && (item_amount(navelRing) > 0 || have_equipped(navelRing))) 8 | { 9 | return true; 10 | } 11 | 12 | // check for replica in LoL path 13 | static item replicaNavelRing = $item[replica Navel ring of navel gazing]; 14 | return auto_is_valid(replicaNavelRing) && (item_amount(replicaNavelRing) > 0 || have_equipped(replicaNavelRing)); 15 | } 16 | 17 | int auto_navelFreeRunChance() 18 | { 19 | // returns 0 - 100. 0 = 0% of a free run. 100 = 100% chance of a free run 20 | if(!auto_hasNavelRing()) 21 | { 22 | return 0; 23 | } 24 | 25 | // https://kol.coldfront.net/thekolwiki/index.php/Navel_ring_of_navel_gazing 26 | int navelRunAways = get_property("_navelRunaways").to_int(); 27 | if(navelRunAways < 3) return 100; 28 | if(navelRunAways < 6) return 80; 29 | if(navelRunAways < 9) return 50; 30 | return 20; 31 | } -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_license_to_adventure.ash: -------------------------------------------------------------------------------- 1 | //Path specific combat handling for license to adventure 2 | 3 | string auto_combatLicenseToAdventureStage4(int round, monster enemy, string text) 4 | { 5 | // stage 4 = prekill. copy, sing along, flyer and other things that need to be done after delevel but before killing 6 | 7 | //each of the 3 items reduces minion count by 3. does NOT auto defeat current minion you are fighting 8 | if((my_location() == $location[Super Villain\'s Lair]) && in_lta() && canSurvive(2.0) && (enemy == $monster[Villainous Minion])) 9 | { 10 | if(!get_property("_villainLairCanLidUsed").to_boolean() && (item_amount($item[Razor-Sharp Can Lid]) > 0)) 11 | { 12 | return "item " + $item[Razor-Sharp Can Lid]; 13 | } 14 | if(!get_property("_villainLairWebUsed").to_boolean() && (item_amount($item[Spider Web]) > 0)) 15 | { 16 | return "item " + $item[Spider Web]; 17 | } 18 | if(!get_property("_villainLairFirecrackerUsed").to_boolean() && (item_amount($item[Knob Goblin Firecracker]) > 0)) 19 | { 20 | return "item " + $item[Knob Goblin Firecracker]; 21 | } 22 | } 23 | 24 | return ""; 25 | } 26 | -------------------------------------------------------------------------------- /BUILD/items/reserve.dat: -------------------------------------------------------------------------------- 1 | # Save for Mr. Alarm 2 | 1 wet stew quest:questL11Palindome<5 3 | 1 stunt nuts quest:questL11Palindome<5 4 | # Save for milk of magnesium 5 | 3 glass of goat's milk skill:advanced saucecrafting;!path:Two Crazy Random Summer 6 | # Save for trapper 7 | 3 goat cheese quest:questL08Trapper<2 8 | # Save for galoshes 9 | 3 blackberry item:blackberry galoshes<1;quest:questL11Black<2 10 | # Save for beanstalk 11 | 1 enchanted bean quest:questL10Garbage<2 12 | # Save for jar of oil 13 | 12 bubblin' crude prop:twinPeakProgress<4;item:jar of oil<1 14 | # Save for jelly toast 15 | 11 toast havefamiliar:Space Jellyfish 16 | # You won't have more than 1000 clovers in run. 17 | 1000 11-leaf clover 18 | # Save for flamin' whatshisname 19 | # Technically could only save until the shen part is done, but eh, probably won't make a difference 20 | 11 unnamed cocktail quest:questL11Ron<2 21 | # Save for protesters 22 | 11 Flamin' Whatshisname quest:questL11Ron<2 23 | # Don't save, just keep dough from causing an infinite loop 24 | -1 wad of dough 25 | -1 flat dough 26 | # Don't auto-craft bounty-o's and such, yikes 27 | 9999999 filthy lucre 28 | # Don't save, just keep firewood from causing an infinite loop 29 | -1 bundle of firewood 30 | -------------------------------------------------------------------------------- /BUILD/task_order/Avatar of Jarlsberg.dat: -------------------------------------------------------------------------------- 1 | LM_jarlsberg 2 | LX_freeCombatsTask 3 | woods_questStart 4 | LX_unlockPirateRealm 5 | auto_breakfastCounterVisit 6 | chateauPainting 7 | LX_setWorkshed 8 | LX_galaktikSubQuest 9 | L9_leafletQuest 10 | L5_findKnob 11 | L12_sonofaPrefix 12 | LX_burnDelay 13 | LX_summonMonster 14 | L11_aridDesert L11_hasUltrahydrated 15 | handleRainDoh 16 | L11_shenStartQuest 17 | auto_earlyRoutingHandling 18 | LX_guildUnlock 19 | LX_unlockDesert 20 | LX_lockPicking 21 | LX_fatLootToken 22 | L5_getEncryptionKey 23 | L5_findKnob 24 | L2_mosquito 25 | LX_unlockHiddenTemple 26 | L6_dakotaFanning 27 | LX_steelOrgan 28 | L12_islandWar 29 | LX_spookyravenManorFirstFloor 30 | L11_blackMarket 31 | L11_forgedDocuments 32 | L11_mcmuffinDiary 33 | L11_getBeehive 34 | L11_unlockHiddenCity 35 | L11_hiddenCityZones 36 | L11_hiddenCity 37 | LX_spookyravenManorSecondFloor 38 | L11_mauriceSpookyraven 39 | L11_talismanOfNam 40 | L10_plantThatBean 41 | L10_rainOnThePlains 42 | L9_chasmBuild 43 | L9_highLandlord 44 | L8_trapperQuest 45 | L6_friarsGetParts 46 | L7_crypt 47 | L11_palindome 48 | L11_aridDesert 49 | L11_unlockPyramid 50 | L11_unlockEd 51 | L11_defeatEd 52 | L5_slayTheGoblinKing 53 | L4_batCave 54 | L3_tavern 55 | L13_towerAscent 56 | LX_lastChance 57 | auto_softBlockHandler 58 | LX_attemptPowerLevel 59 | -------------------------------------------------------------------------------- /BUILD/task_order/Zombie Slayer.dat: -------------------------------------------------------------------------------- 1 | LM_zombieSlayer 2 | woods_questStart 3 | LX_unlockPirateRealm 4 | LX_freeCombatsTask 5 | auto_breakfastCounterVisit 6 | chateauPainting 7 | LX_setWorkshed 8 | LX_galaktikSubQuest 9 | L9_leafletQuest 10 | L5_findKnob 11 | L12_sonofaPrefix 12 | LX_burnDelay 13 | LX_summonMonster 14 | L11_aridDesert L11_hasUltrahydrated 15 | handleRainDoh 16 | L11_shenStartQuest 17 | auto_earlyRoutingHandling 18 | LX_guildUnlock 19 | LX_unlockDesert 20 | LX_lockPicking 21 | LX_fatLootToken 22 | L5_getEncryptionKey 23 | L5_findKnob 24 | L2_mosquito 25 | LX_unlockHiddenTemple 26 | L6_dakotaFanning 27 | LX_steelOrgan 28 | L12_islandWar 29 | LX_spookyravenManorFirstFloor 30 | L11_blackMarket 31 | L11_forgedDocuments 32 | L11_mcmuffinDiary 33 | L11_getBeehive 34 | L11_unlockHiddenCity 35 | L11_hiddenCityZones 36 | L11_hiddenCity 37 | LX_spookyravenManorSecondFloor 38 | L11_mauriceSpookyraven 39 | L11_talismanOfNam 40 | L10_plantThatBean 41 | L10_rainOnThePlains 42 | L9_chasmBuild 43 | L9_highLandlord 44 | L8_trapperQuest 45 | L6_friarsGetParts 46 | L7_crypt 47 | L11_palindome 48 | L11_aridDesert 49 | L11_unlockPyramid 50 | L11_unlockEd 51 | L11_defeatEd 52 | L5_slayTheGoblinKing 53 | L4_batCave 54 | L3_tavern 55 | L13_towerAscent 56 | LX_lastChance 57 | auto_softBlockHandler 58 | LX_attemptPowerLevel 59 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/two_crazy_random_summer.ash: -------------------------------------------------------------------------------- 1 | boolean in_tcrs() 2 | { 3 | return my_path() == $path[Two Crazy Random Summer]; 4 | } 5 | 6 | float tcrs_expectedAdvPerFill(string quality) 7 | { 8 | switch(quality) 9 | { 10 | case "EPIC": return 5; 11 | case "awesome": return 4; 12 | case "good": return 3; 13 | case "decent": return 2; 14 | case "crappy": return 1; 15 | default: abort("could not calculate expected adventures for quality " + quality + " in 2CRS"); 16 | } 17 | return -1; // makes the compiler shut up 18 | } 19 | 20 | boolean tcrs_maximize_with_items(string maximizerString) 21 | { 22 | if(!in_tcrs()) 23 | { 24 | return false; 25 | } 26 | // in TCRS, items give random effects. Instead of hard-coding a list of effects for each path/class combination, we look at what we got. 27 | boolean used_anything = false; 28 | foreach i, rec in maximize(maximizerString, 300, 0, true, false) 29 | { 30 | if((rec.item != $item[none]) 31 | && (rec.item.fullness == 0) 32 | && (rec.item.inebriety == 0) 33 | && (0 == have_effect(rec.effect)) 34 | && (mall_price(rec.item) <= 300) 35 | && (rec.score > 0.1)) // sometimes maximizer gives spurious results 36 | { 37 | cli_execute(rec.command); 38 | used_anything = true; 39 | } 40 | } 41 | return used_anything; 42 | } 43 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/auto_test.ash: -------------------------------------------------------------------------------- 1 | import 2 | 3 | boolean passed; 4 | 5 | void assertTrue(boolean val, string message) 6 | { 7 | if (!val) 8 | { 9 | auto_log_warning("Assertion failed: " + message, "red"); 10 | } 11 | passed &= val; 12 | } 13 | 14 | void testLoadConsumables() 15 | { 16 | ConsumeAction[int] actions; 17 | loadConsumables("eat", actions); 18 | 19 | void assertContains(item searchFor, string message) 20 | { 21 | boolean found = false; 22 | foreach i, action in actions 23 | { 24 | if (action.it == searchFor) found = true; 25 | } 26 | assertTrue(found, message); 27 | } 28 | 29 | assertTrue(count(actions) > 0, "actions should be nonempty"); 30 | if (isHermitAvailable()) 31 | { 32 | assertContains($item[catsup], "hermit items should be present"); 33 | } 34 | } 35 | 36 | void testKnapsackAutoConsume() 37 | { 38 | auto_knapsackAutoConsume("eat", true); 39 | auto_knapsackAutoConsume("drink", true); 40 | } 41 | 42 | void main() 43 | { 44 | void runTest(string name) 45 | { 46 | passed = true; 47 | call void name(); 48 | string color = passed ? "green" : "red"; 49 | string sstatus = passed ? "PASS" : "FAIL"; 50 | auto_log_info(name + ": " + sstatus, color); 51 | } 52 | runTest("testLoadConsumables"); 53 | runTest("testKnapsackAutoConsume"); 54 | } 55 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/fall_of_the_dinosaurs.ash: -------------------------------------------------------------------------------- 1 | /* TODO - banishing chickens prior to Nuns 2 | - wearing chicken hat (and ensuring chickens arent banished) for tower 3 | - obtaining chicken hat and dino banishing items 4 | - pheromoning kachungasaurs for nuns 5 | */ 6 | 7 | 8 | boolean in_fotd() 9 | { 10 | return my_path() == $path[Fall of the Dinosaurs]; 11 | } 12 | 13 | void fotd_initializeSettings() 14 | { 15 | if(in_fotd()) 16 | { 17 | set_property("auto_getBeehive", false); // can birdseed hat the tower monsters 18 | set_property("auto_getBoningKnife", false); // can birdseed hat the tower monsters 19 | set_property("auto_wandOfNagamar", false); // naughty saursaurus does not need the wand 20 | } 21 | } 22 | 23 | boolean fotd_gameWarden() 24 | { 25 | if(!in_fotd()) 26 | { 27 | return false; 28 | } 29 | string warden = visit_url("place.php?whichplace=dinorf&action=dinorf_hunter"); 30 | matcher target = create_matcher("what I need is ([0-9])+ ([A-Za-z ])+\"", warden); // TODO add some logic meaning we only check at start of day and then once we know we have enough of the target item? 31 | matcher can_collect = create_matcher("Looks like you have [0-9]+\. Want", warden); 32 | 33 | while(can_collect.find()) 34 | { 35 | warden = run_choice(1); 36 | } 37 | 38 | run_choice(2); 39 | return true; 40 | } 41 | 42 | -------------------------------------------------------------------------------- /docs/PULL_REQUEST_TEMPLATE: -------------------------------------------------------------------------------- 1 | # Description 2 | 3 | Please include a summary of the change. Pull requests should always be against the [main branch](https://github.com/loathers/autoscend/tree/main). 4 | 5 | If it addresses a particular issue, please put the issue numbers below (see also [Closing Issues Using Keywords](https://help.github.com/en/articles/closing-issues-using-keywords)). 6 | 7 | Fixes # (issue) 8 | 9 | ## How Has This Been Tested? 10 | 11 | Testing ASH scripts is tricky and generally involves you doing multiple runs with a change to see how it performs. If you did any particular tests, or have particular tests you would like to do but cant (e.g. need to test with an expensive item you dont have access to) please mention that here. Relevant Mafia session logs may also be helpful. 12 | 13 | ## Checklist: 14 | 15 | - [ ] My code follows the style guidelines of this project. 16 | - [ ] I have performed a self-review of my own code. 17 | - [ ] I have commented my code, particularly in hard-to-understand areas. 18 | - [ ] I have based my pull request against the [main branch](https://github.com/loathers/autoscend/tree/main) or have a good reason not to. 19 | - [ ] I have updated the GitHub wiki [path](https://github.com/loathers/autoscend/wiki/Path-Support) or [IOTM](https://github.com/loathers/autoscend/wiki/IOTM-Support) support pages, as appropriate. 20 | -------------------------------------------------------------------------------- /BUILD/task_order/Quantum Terrarium.dat: -------------------------------------------------------------------------------- 1 | LX_freeCombatsTask 2 | woods_questStart 3 | LX_unlockPirateRealm 4 | catBurglarHeist 5 | auto_breakfastCounterVisit 6 | chateauPainting 7 | LX_setWorkshed 8 | LX_galaktikSubQuest 9 | L9_leafletQuest 10 | L5_findKnob 11 | L12_sonofaPrefix 12 | LX_burnDelay 13 | LX_summonMonster 14 | resolveSixthDMT 15 | L11_aridDesert L11_hasUltrahydrated 16 | handleRainDoh 17 | LX_quantumTerrarium 18 | fancyOilPainting 19 | LX_ornateDowsingRod 20 | L11_shenStartQuest 21 | auto_earlyRoutingHandling 22 | LX_guildUnlock 23 | LX_unlockDesert 24 | LX_lockPicking 25 | LX_fatLootToken 26 | L5_getEncryptionKey 27 | L5_findKnob 28 | L2_mosquito 29 | LX_unlockHiddenTemple 30 | L6_dakotaFanning 31 | LX_steelOrgan 32 | L12_islandWar 33 | LX_spookyravenManorFirstFloor 34 | L11_blackMarket 35 | L11_forgedDocuments 36 | L11_mcmuffinDiary 37 | L11_getBeehive 38 | L11_unlockHiddenCity 39 | L11_hiddenCityZones 40 | L11_hiddenCity 41 | LX_spookyravenManorSecondFloor 42 | L11_mauriceSpookyraven 43 | L11_talismanOfNam 44 | L10_plantThatBean 45 | L10_rainOnThePlains 46 | L9_chasmBuild 47 | L9_highLandlord 48 | L8_trapperQuest 49 | L6_friarsGetParts 50 | L7_crypt 51 | L11_palindome 52 | L11_aridDesert 53 | L11_unlockPyramid 54 | L11_unlockEd 55 | L11_defeatEd 56 | L5_slayTheGoblinKing 57 | L4_batCave 58 | L3_tavern 59 | L13_towerAscent 60 | LX_lastChance 61 | auto_softBlockHandler 62 | LX_attemptPowerLevel 63 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/quests/level_01.ash: -------------------------------------------------------------------------------- 1 | void tootOriole() 2 | { 3 | // Toot Oriole must be visited each ascension to unlock other quests from the council 4 | if(get_property("questM05Toot") == "finished") 5 | { 6 | return; 7 | } 8 | 9 | // do quest 10 | visit_url("tutorial.php?action=toot"); 11 | if(isActuallyEd()) 12 | { 13 | use(item_amount($item[Letter to Ed the Undying]), $item[Letter to Ed the Undying]); 14 | } 15 | else 16 | { 17 | use(item_amount($item[Letter From King Ralph XI]), $item[Letter From King Ralph XI]); 18 | } 19 | // finishing toot quest is not correctly noticed by mafia. r20655 has workaround of correcting this by refreshing quests 20 | cli_execute("refresh quests"); 21 | 22 | if(get_property("questM05Toot") == "finished") 23 | { 24 | use(item_amount($item[Pork Elf Goodies Sack]), $item[Pork Elf Goodies Sack]); 25 | council(); 26 | } 27 | else abort("Failed to finish the Toot Oriole quest. This prevents us from getting other quests from council"); 28 | } 29 | 30 | void tootGetMeat() 31 | { 32 | if(can_interact() || in_wotsf()) // avoid selling gems in casual and way of the surprising fist 33 | { 34 | return; 35 | } 36 | auto_autosell(min(5, item_amount($item[hamethyst])), $item[hamethyst]); 37 | auto_autosell(min(5, item_amount($item[baconstone])), $item[baconstone]); 38 | auto_autosell(min(5, item_amount($item[porquoise])), $item[porquoise]); 39 | } 40 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_kingdom_of_exploathing.ash: -------------------------------------------------------------------------------- 1 | //Path specific combat handling for Kingdom of Exploathing 2 | 3 | string auto_combatExploathingStage1(int round, monster enemy, string text) 4 | { 5 | ##stage1 = 1st round actions: puzzle boss, banish, escape, pickpocket, etc. things that need to be done before debuff 6 | 7 | if (enemy == $monster[The Invader] && canUse($skill[Lunging Thrust-Smack], false) && have_equipped($item[June Cleaver])) 8 | { 9 | return useSkill($skill[Lunging Thrust-Smack], false); 10 | } 11 | 12 | if (enemy == $monster[The Invader] && canUse($skill[Weapon of the Pastalord], false)) 13 | { 14 | return useSkill($skill[Weapon of the Pastalord], false); 15 | } 16 | 17 | if (enemy == $monster[Skeleton astronaut]) 18 | { 19 | if(my_daycount() == 1 && canUse($item[Exploding cigar], false)) 20 | { 21 | return useItem($item[Exploding cigar]); 22 | } 23 | int dmg = 0; 24 | foreach el in $elements[hot, cold, sleaze, spooky, stench] 25 | { 26 | dmg += min(10, numeric_modifier(el.to_string() + " Damage")); 27 | } 28 | // 10 physical + 10 prismatic is enough to be better than Saucestorm. 29 | // Otherwise, saucestorm deals 20 damage/round. 30 | if(dmg >= 10 && buffed_hit_stat() >= 120 + monster_level_adjustment()) 31 | { 32 | return "attack with weapon"; 33 | } 34 | else if(canUse($skill[Saucestorm], false)) 35 | { 36 | return useSkill($skill[Saucestorm], false); 37 | } 38 | } 39 | 40 | return ""; 41 | } 42 | -------------------------------------------------------------------------------- /BUILD/familiars/stat.dat: -------------------------------------------------------------------------------- 1 | # Sombrero is desirable with a decent amount of ML 2 | Galloping Grill ML:>=120 3 | Baby Sandworm ML:>=120 4 | God Lobster ML:>=120;item:God Lobster's Ring>0 5 | # Mini Kiwi for turn gen in 11 Things path 6 | Mini Kiwi path:11 Things I Hate About U;item:mini kiwi<=8 7 | # Volleyball or sombrero (whichever is best) with a multiplier 8 | Jill-of-All-Trades item:LED candle>0 9 | Patriotic Eagle ML:>=120 10 | Hovering Sombrero ML:>=120 11 | # Can be tuned to give pure mainstat, so it's better than other volleyballs 12 | Crimbo Shrub 13 | #Baby Mutant Rattlesnake grimdark:0 14 | #Baby Mutant Rattlesnake grimdark:1 15 | # Fairyeverything 16 | Jill-of-All-Trades 17 | # Fairyballs 18 | Elf Operative 19 | Optimistic Candle 20 | Rockin' Robin 21 | Hobo in Sheep's Clothing 22 | # Volleychauns 23 | Ghost of Crimbo Commerce 24 | Golden Monkey 25 | Bloovian Groose 26 | Unconscious Collective 27 | Grim Brother 28 | Mini Kiwi 29 | Dramatic Hedgehog 30 | Chauvinist Pig 31 | Uniclops 32 | Hunchbacked Minion 33 | Nervous Tick 34 | Cymbal-Playing Monkey 35 | Cheshire Bat 36 | # VolleyWhelps 37 | Melodramedary 38 | # Build up weight for free runs 39 | Frumious Bandersnatch 40 | # Slightly special volleyballs 41 | Ghost of Crimbo Cheer 42 | Reanimated Reanimator 43 | God Lobster 44 | Party Mouse 45 | Lil' Barrel Mimic 46 | Piranha Plant 47 | Antique Nutcracker 48 | Jill-O-Lantern 49 | # Fancy 50 | Miniature Sword & Martini Guy 51 | #Baby Mutant Rattlesnake grimdark:2 52 | # Turtles are cute 53 | Grinning Turtle 54 | # His winning smile 55 | Smiling Rat 56 | # The original 57 | Blood-Faced Volleyball 58 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/hattrick.ash: -------------------------------------------------------------------------------- 1 | boolean in_hattrick() 2 | { 3 | return my_path() == $path[Hat Trick]; 4 | } 5 | 6 | boolean ht_equip_hats() 7 | { 8 | if(!in_hattrick()) 9 | { 10 | return false; 11 | } 12 | int[item] availableHats = auto_getAllEquipabble($slot[hat]); 13 | foreach it, i in availableHats 14 | { 15 | boolean skip; 16 | //don't equip the following because they can mess us up later in the run or are useful for consumption (+/- combat and Thorns) 17 | foreach bl in $items[Mer-kin sneakmask, coconut shell] 18 | { 19 | if(it == bl) 20 | { 21 | skip = true; 22 | } 23 | } 24 | if(numeric_modifier(it, "Thorns") > 0) 25 | { 26 | skip = true; 27 | } 28 | if(numeric_modifier(it, "Combat Rate") != 0) 29 | { 30 | skip = true; 31 | } 32 | //Only check to not equip these if MLSafetyLimit is not set or is not set low (-ML hats) 33 | if(get_property("auto_MLSafetyLimit") == "" || get_property("auto_MLSafetyLimit").to_int() >= 25) 34 | { 35 | if(numeric_modifier(it, "Monster Level") < 0) 36 | { 37 | skip = true; 38 | } 39 | } 40 | //Only check to not equip these if MLSafetyLimit is set low (+ML hats) 41 | if(get_property("auto_MLSafetyLimit").to_int() < 25) 42 | { 43 | if(numeric_modifier(it, "Monster Level") > 0) 44 | { 45 | skip = true; 46 | } 47 | } 48 | if(equipped_amount(it) > 0) 49 | { 50 | skip = true; 51 | } 52 | if(!skip && auto_can_equip(it)) 53 | { 54 | equip(it); 55 | } 56 | } 57 | return false; 58 | } 59 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_plumber.ash: -------------------------------------------------------------------------------- 1 | //Path specific combat handling for path of the plumber 2 | 3 | string auto_combatPlumberStage5(int round, monster enemy, string text) 4 | { 5 | //stage 5 killing the enemy. plumber specific 6 | 7 | if(my_class() != $class[Plumber]) 8 | { 9 | return ""; 10 | } 11 | 12 | // note: Juggle Fireballs CAN be used multiple times, but it is only 13 | // useful if you have level 3 fire and therefore get healed 14 | 15 | if(my_pp() > 2 && canUse($skill[[7332]Juggle Fireballs], true)) 16 | { 17 | return useSkill($skill[[7332]Juggle Fireballs]); 18 | } 19 | 20 | if ((enemy.physical_resistance >= 80) || 21 | (my_location() == $location[The Smut Orc Logging Camp] && (0 < equipped_amount($item[frosty button])))) 22 | { 23 | if (canUse($skill[[7333]Fireball Barrage], false)) 24 | { 25 | return useSkill($skill[[7333]Fireball Barrage]); 26 | } 27 | //this skill comes from the IOTM Beach Comb 28 | if (canUse($skill[Beach Combo], true)) 29 | { 30 | return useSkill($skill[Beach Combo]); 31 | } 32 | if (canUse($skill[Fireball Toss], false)) 33 | { 34 | return useSkill($skill[Fireball Toss], false); 35 | } 36 | } 37 | 38 | if (canUse($skill[[7336]Multi-Bounce], false)) 39 | { 40 | return useSkill($skill[[7336]Multi-Bounce]); 41 | } 42 | //this skill comes from the IOTM Beach Comb 43 | if (canUse($skill[Beach Combo], true)) 44 | { 45 | return useSkill($skill[Beach Combo]); 46 | } 47 | if (canUse($skill[Jump Attack], false)) 48 | { 49 | return useSkill($skill[Jump Attack], false); 50 | } 51 | 52 | // Fallback, since maybe we only have fire flower equipped. 53 | if (canUse($skill[[7333]Fireball Barrage], false)) 54 | { 55 | { 56 | return useSkill($skill[[7333]Fireball Barrage]); 57 | } 58 | return useSkill($skill[Fireball Toss], false); 59 | } 60 | 61 | return ""; 62 | } 63 | -------------------------------------------------------------------------------- /docs/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | 3 | Please answer the following questions for yourself before submitting an issue. **YOU MAY DELETE THE PREREQUISITES SECTION.** 4 | 5 | - [ ] I have permed Saucestorm and Cannelloni Cocoon which autoscend rely heavily upon. 6 | - [ ] I checked to make sure that this issue has not already been filed 7 | - [ ] I checked the [list of common problems, solutions, and tips document](https://docs.google.com/document/d/1AfyKDHSDl-fogGSeNXTwbC6A06BG-gTkXUAdUta9_Ns) 8 | - [ ] I asked for help in the [autoscend channel on the Ascension Speed Society discord server](https://discord.gg/96xZxv3) 9 | - [ ] I have the KoLMafia session log to attach to this issue. 10 | 11 | # Context 12 | 13 | * KolMafia version: 14 | * Class: 15 | * Run type (Casual/Normal/Hardcore/Aftercore): 16 | * Challenge Path (Standard/Path Name/None): 17 | * Number of Ascensions: 18 | 19 | # Expected/Desired Behavior 20 | 21 | Please describe the behavior you are expecting. If the bug or feature involves a particular challenge path, item, quest, etc, please state that. 22 | 23 | # Current Behavior 24 | 25 | What is the current behavior? 26 | 27 | # Failure Information (for bugs) 28 | 29 | Please help provide information about the failure if this is a bug. 30 | 31 | If you are submitting a bug report we really need the KoLMafia session log attached to the issue or it will be harder to help you. If possible please set `printStackOnAbort` in KoLMafia preferences or run `set printStackOnAbort=true` in the Graphical CLI tab. autoscend should set this to true by default when you run it, but please be sure its set. This will provide extra information when an abort is triggered which may help identify the problem. 32 | 33 | If it is not a bug, please remove the rest of this template. 34 | 35 | ## Failure Logs 36 | 37 | Please include any relevant log snippets or files here. You should still attach the full KoLMafia session log if possible. 38 | -------------------------------------------------------------------------------- /RELEASE/data/autoscend_items.txt: -------------------------------------------------------------------------------- 1 | # THIS FILE IS GENERATED BY BUILD/assemble.sh 2 | # DO NOT EDIT THIS FILE DIRECTLY. EDIT THE .DAT FILES IN THE /BUILD/ FOLDER THEN RUN assemble.sh 3 | 4 | # First column is what type of item 5 | # Second column is just a number needed to make this load nicely 6 | # Third column is what item, preceded by how many if necessary 7 | # Fourth column (optional) is conditions for that item to be considered 8 | # See auto_check_conditions for information on valid conditionals 9 | # An item can be listed multiple times (presumably with different conditionals) 10 | 11 | 12 | 13 | # Save for Mr. Alarm 14 | reserve 0 1 wet stew quest:questL11Palindome<5 15 | reserve 1 1 stunt nuts quest:questL11Palindome<5 16 | # Save for milk of magnesium 17 | reserve 2 3 glass of goat's milk skill:advanced saucecrafting;!path:Two Crazy Random Summer 18 | # Save for trapper 19 | reserve 3 3 goat cheese quest:questL08Trapper<2 20 | # Save for galoshes 21 | reserve 4 3 blackberry item:blackberry galoshes<1;quest:questL11Black<2 22 | # Save for beanstalk 23 | reserve 5 1 enchanted bean quest:questL10Garbage<2 24 | # Save for jar of oil 25 | reserve 6 12 bubblin' crude prop:twinPeakProgress<4;item:jar of oil<1 26 | # Save for jelly toast 27 | reserve 7 11 toast havefamiliar:Space Jellyfish 28 | # You won't have more than 1000 clovers in run. 29 | reserve 8 1000 11-leaf clover 30 | # Save for flamin' whatshisname 31 | # Technically could only save until the shen part is done, but eh, probably won't make a difference 32 | reserve 9 11 unnamed cocktail quest:questL11Ron<2 33 | # Save for protesters 34 | reserve 10 11 Flamin' Whatshisname quest:questL11Ron<2 35 | # Don't save, just keep dough from causing an infinite loop 36 | reserve 11 -1 wad of dough 37 | reserve 12 -1 flat dough 38 | # Don't auto-craft bounty-o's and such, yikes 39 | reserve 13 9999999 filthy lucre 40 | # Don't save, just keep firewood from causing an infinite loop 41 | reserve 14 -1 bundle of firewood 42 | 43 | -------------------------------------------------------------------------------- /BUILD/familiars/meat.dat: -------------------------------------------------------------------------------- 1 | # Wanna get that jar 2 | Angry Jung Man prop:_jungDrops<1;day:1 3 | # Wanna get grimstone mask 4 | Grimstone Golem prop:_grimstoneMaskDrops<1;day:1 5 | # Wanna get yummy chewables 6 | Golden Monkey prop:_powderedGoldDrops<3 7 | Bloovian Groose prop:_grooseDrops<3 8 | Unconscious Collective prop:_dreamJarDrops<3 9 | Grim Brother prop:_grimFairyTaleDrops<3 10 | # Wanna build up heists 11 | Cat Burglar prop:_catBurglarCharge<30 12 | # Mini Kiwi for turn gen in 11 Things path 13 | Mini Kiwi path:11 Things I Hate About U;item:mini kiwi<=8 14 | # Wanna get booze ingredients 15 | Robortender 16 | # Might as well get tales of spelunking 17 | Adventurous Spelunker prop:_spelunkingTalesDrops<1 18 | # Might as well get devilish folios 19 | Blavious Kloop prop:_kloopDrops<3 20 | # Leprechauns with a >1 multiplier 21 | # 1.5x multiplier leprechaun 22 | Jill-of-All-Trades item:LED candle>0 23 | #Mutant Cactus Bud grimdark:0 24 | Hobo Monkey 25 | #Mutant Cactus Bud grimdark:1 26 | # Does everything 27 | Jill-of-All-Trades 28 | # Volleychauns 29 | Golden Monkey 30 | Bloovian Groose 31 | Unconscious Collective 32 | Grim Brother 33 | Mini Kiwi 34 | Dramatic Hedgehog 35 | Chauvinist Pig 36 | Uniclops 37 | Hunchbacked Minion 38 | Nervous Tick 39 | Cymbal-Playing Monkey 40 | Cheshire Bat 41 | # Fairychauns 42 | Chest Mimic 43 | Fist Turkey 44 | Cat Burglar 45 | Angry Jung Man 46 | Grimstone Golem 47 | Adventurous Spelunker 48 | Blavious Kloop 49 | Hippo Ballerina 50 | Dancing Frog 51 | Coffee Pixie 52 | Attention-Deficit Demon 53 | Jitterbug 54 | Casagnova Gnome 55 | Psychedelic Bear 56 | Piano Cat 57 | # Wowee 58 | Hand Turkey 59 | # Sorry, we don't use him for yellow rays but we can at least use him for meat I guess 60 | He-Boulder 61 | # Marginally special leprechauns 62 | Ghost of Crimbo Commerce 63 | Knob Goblin Organ Grinder 64 | #Mutant Cactus Bud grimdark:2 65 | Urchin Urchin 66 | # Memes, doesn't actually give substats apparently 67 | Cornbeefadon 68 | # The original 69 | Leprechaun 70 | -------------------------------------------------------------------------------- /BUILD/monsters/freerun.dat: -------------------------------------------------------------------------------- 1 | Foodie Giant 2 | Possibility Giant prop:auto_hippyInstead==false 3 | Procrastination Giant 4 | Renaissance Giant 5 | Punk Rock Giant 6 | Raver Giant 7 | Steampunk Giant 8 | Irritating Series of Random Encounters 9 | Protagonist !class:Ed the Undying 10 | bar 11 | spooky mummy 12 | spooky vampire 13 | triffid 14 | warwelf !class:Ed the Undying 15 | wolfman !class:Ed the Undying 16 | cubist bull 17 | empty suit of armor 18 | guy with a pitchfork, and his wife 19 | claw-foot bathtub 20 | malevolent hair clog 21 | toilet papergeist 22 | Iiti Kitty 23 | tomb bat 24 | tomb servant loc:The Upper Chamber 25 | Knob Goblin Assistant Chef 26 | sleeping Knob Goblin Guard 27 | Sub-Assistant Knob Mad Scientist 28 | animated mahogany nightstand 29 | animated ornate nightstand item:Disposable Instant Camera>0;item:Lord Spookyraven\'s Spectacles>0 30 | animated rustic nightstand 31 | Wardröb nightstand 32 | drunken rat 33 | bunch of drunken rats 34 | tapdancing skeleton 35 | floating platter of hors d\'oeuvres 36 | boaraffe 37 | pygmy assault squad 38 | pygmy blowgunner 39 | Copperhead Club bartender 40 | fan dancer 41 | Mob Penguin Capo 42 | ninja snowman (chopsticks) 43 | ninja snowman janitor 44 | ninja snowman weaponmaster 45 | # low key summer 46 | fluffy bunny 47 | factory-irregular skeleton 48 | novelty tropical skeleton 49 | remaindered skeleton 50 | swarm of skulls 51 | cooler wino 52 | dire pigeon 53 | malt liquor golem 54 | sewer snake with a sewer snake in it 55 | angry piñata 56 | handsome mariachi 57 | irate mariachi 58 | mariachi calavera 59 | raging bull 60 | Snow Queen 61 | upgraded ram 62 | baguette lady 63 | crêep 64 | dinner troll 65 | gingerbread murderer 66 | Carnivorous Moxie Weed 67 | Grass Elemental 68 | Weremoose 69 | anglerbush 70 | confused goth music student 71 | man-eating plant 72 | skeletal cat 73 | skeletal hamster 74 | skeletal monkey 75 | creepy doll 76 | possessed toy chest 77 | spooky music box 78 | 1335 HaXx0r 79 | Anime Smiley 80 | Flaming Troll 81 | Lamz0r N00b 82 | me4t begZ0r 83 | Spam Witch 84 | -------------------------------------------------------------------------------- /BUILD/monsters/banish.dat: -------------------------------------------------------------------------------- 1 | A.M.C. Gremlin 2 | Animated Mahogany Nightstand 3 | Animated Possessions 4 | Animated Rustic Nightstand !path:Bees Hate You 5 | Bubblemint Twins !class:Ed the Undying 6 | Burly Sidekick item:Mohawk Wig>0;!familiar:Red-Nosed Snapper 7 | Coaltergeist 8 | Drunk Goat 9 | Eagle class:Ed the Undying 10 | Evil Olive 11 | Empty suit of armor class:Ed the Undying 12 | Flock Of Stab-Bats 13 | Gluttonous Ghuol class:Vampyre 14 | Gluttonous Ghuol prop:auto_turbo==true 15 | Knob Goblin Harem Guard 16 | Knob Goblin Madam item:Knob Goblin Perfume>0 17 | Irritating Series of Random Encounters 18 | Mad Wino !class:Ed the Undying 19 | MagiMechTech MechaMech class:Ed the Undying 20 | Mob Penguin Capo class:Ed the Undying 21 | Mismatched Twins 22 | Natural Spider 23 | Plaid Ghost 24 | Possessed Laundry Press 25 | Procrastination Giant 26 | Protagonist !class:Ed the Undying;!familiar:Red-Nosed Snapper 27 | Pygmy Headhunter 28 | Pygmy Janitor tavern:true 29 | Pygmy Orderlies 30 | Pygmy Witch Lawyer 31 | Pygmy Witch Nurse 32 | Red Herring 33 | Red Snapper 34 | Sabre-Toothed Goat 35 | Senile Lihc loc:The Defiled Niche;prop:cyrptNicheEvilness>14 36 | Slick Lihc loc:The Defiled Niche;prop:cyrptNicheEvilness>14 37 | Skeletal Sommelier 38 | Spooky mummy class:Ed the Undying 39 | Spooky vampire class:Ed the Undying 40 | Steam Elemental 41 | Taco Cat 42 | Tan Gnat 43 | Tomb Asp 44 | Tomb Servant 45 | Triffid class:Ed the Undying 46 | Wardröb Nightstand 47 | Warehouse Janitor 48 | party skelteon loc:The Defiled Nook;prop:cyrptNookEvilness>14 49 | basic lihc loc:The Defiled Niche;prop:cyrptNicheEvilness>14 50 | # Bugbear Invasion Mothership 51 | scavenger bugbear path:Bugbear Invasion;loc:Waste Processing;!sniffed:scavenger bugbear 52 | bugaboo path:Bugbear Invasion;loc:Morgue;!sniffed:bugaboo 53 | Battlesuit Bugbear Type path:Bugbear Invasion:loc:Engineering;!sniffed:Battlesuit Bugbear Type 54 | ancient unspeakable bugbear path:Bugbear Invasion;loc:Navigation;!sniffed:ancient unspeakable bugbear 55 | trendy bugbear chef path:Bugbear Invasion;loc:Galley;loc:Gallery;!sniffed:trendy bugbear chef 56 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/combat/auto_combat_wildfire.ash: -------------------------------------------------------------------------------- 1 | //Path specific combat handling for wildfire 2 | 3 | string auto_combatWildfireStage1(int round, monster enemy, string text) 4 | { 5 | // stage 1 = 1st round actions: puzzle boss, pickpocket, duplicate, things that are only allowed if they are the first action you take. 6 | if(!in_wildfire()) 7 | { 8 | return ""; 9 | } 10 | 11 | //always 5 fire bosses. can not be reduced. 12 | if($monsters[Groar\, Except Hot, The Man on Fire, The Big Ignatowicz] contains enemy) 13 | { 14 | if(have_equipped($item[industrial fire extinguisher]) && canUse($skill[Curse of Weaksauce]) && have_skill($skill[Itchy Curse Finger]) && my_class() == $class[sauceror]) 15 | { 16 | //weaksauce will recover 50 MP. Only use it if you have industrial fire extinguisher equipped to prevent passive damage 17 | return useSkill($skill[Curse of Weaksauce]); 18 | } 19 | if(canUse($skill[Stuffed Mortar Shell])) //very cheap for massive damage. tuneable too for extra dmg. 20 | { 21 | return useSkill($skill[Stuffed Mortar Shell]); 22 | } 23 | if($elements[sleaze, stench] contains currentFlavour() && canUse($skill[Weapon of the Pastalord])) //extra dmg dealt 24 | { 25 | return useSkill($skill[Weapon of the Pastalord], false); 26 | } 27 | if(canUse($skill[Saucegeyser], false)) 28 | { 29 | return useSkill($skill[Saucegeyser], false); 30 | } 31 | abort("We do not know what to do next against [" +enemy+ "]."); 32 | } 33 | 34 | //always 5 fire. can not be reduced. Does not become hot aligned so there is no elemental dmg boost. 35 | if($monster[wall of meat] == enemy) 36 | { 37 | if(canUse($skill[Stuffed Mortar Shell])) 38 | { 39 | return useSkill($skill[Stuffed Mortar Shell]); 40 | } 41 | if(canUse($skill[Weapon of the Pastalord]) && mp_cost($skill[Weapon of the Pastalord]) < mp_cost($skill[Saucegeyser])) 42 | { 43 | return useSkill($skill[Weapon of the Pastalord], false); //pastamancers can make it cheaper than saucegeyser 44 | } 45 | if(canUse($skill[Saucegeyser], false)) 46 | { 47 | return useSkill($skill[Saucegeyser], false); 48 | } 49 | abort("We do not know what to do next against [" +enemy+ "]."); 50 | } 51 | 52 | return ""; 53 | } 54 | -------------------------------------------------------------------------------- /BUILD/familiars/regen.dat: -------------------------------------------------------------------------------- 1 | # Typical starfish are better than whelps 2 | # Whelps on average restore .375*(weight+5) 3 | # Superwhelps up this to 0.75*(weight+5) 4 | # But starfish restore roughly 0.25*weight PER TURN 5 | # and average combat length looks to be ~6 rounds in autoscend, so that's 1.5*weight on average 6 | # Not even bothering with cocoabos 7 | # starfish. drops 5 ash/day which makes +15 ML potion for 15 adv 8 | Galloping Grill prop:_hotAshesDrops<5 9 | # starfish that drops 5 tokens a day that can be exchanged for a spleen consumable that gives adv 10 | Rogue Program prop:_tokenDrops<5 11 | # Fairyeverything 12 | Jill-of-All-Trades 13 | # Fairywhelps. Weight is better used on these and 2 of them drop useful items. 14 | Pocket Professor 15 | Garbage Fire 16 | XO Skeleton 17 | # Drops assorted stuff, mostly junk. has some awesome food. requires familiar equip brass bung spigot to regen HP/MP 18 | Lil' Barrel Mimic item:brass bung spigot>0 19 | # It's a starfish with reduced activation rate, except it ALWAYS attacks on turn one, so that's probably more hits per battle on average in short battles? oh, and it's a sombrero too 20 | Galloping Grill 21 | Patriotic Eagle 22 | # A super starfish (50% activation instead of 33%) 23 | Sausage Golem 24 | # A slightly boosted starfish, for pastamancers 25 | Animated Macaroni Duck class:Pastamancer 26 | # Regular starfish 27 | Unspeakachu 28 | Twitching Space Critter 29 | Rock Lobster 30 | Animated Macaroni Duck 31 | Midget Clownfish 32 | Snow Angel 33 | Underworld Bonsai 34 | Star Starfish 35 | # Fairysuperwhelps 36 | Choctopus 37 | # Superwhelps 38 | Plastic Pirate Skull 39 | Trick-or-Treating Tot 40 | # Fairywhelps 41 | Dandy Lion 42 | # Special whelps 43 | Ms. Puck Man 44 | Puck Man 45 | Squamous Gibberer 46 | He-Boulder 47 | Cotton Candy Carnie 48 | # Slightly better whelp for saucerors 49 | Pet Cheezling class:Sauceror 50 | # Whelps with a multiplier, why not I guess 51 | Mini-Trainbot 52 | #Mutant Gila Monster grimdark:0 53 | #Mutant Gila Monster grimdark:1 54 | # Marginally special whelps 55 | #Mutant Gila Monster grimdark:2 56 | Pottery Barn Owl 57 | Peace Turkey 58 | # Regular old whelps 59 | Pet Cheezling 60 | Ghuol Whelp 61 | # The absolute default that everyone should have after their first run 62 | Mosquito 63 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/i_love_u_hate.ash: -------------------------------------------------------------------------------- 1 | boolean in_iluh() 2 | { 3 | return my_path() == $path[11 Things I Hate About U]; 4 | } 5 | 6 | boolean iluh_foodConsumable(string str) 7 | { 8 | if(!in_iluh()) 9 | { 10 | return true; 11 | } 12 | 13 | string foodConsume = str.to_lower_case(); 14 | 15 | //Not actually going to ever be consumed but need this exception to actually make it for the Palindome quest 16 | if(contains_text(foodConsume, "stunt nut") || contains_text(foodConsume, "wet stew") || contains_text(foodConsume, "wet stunt nut stew")) 17 | { 18 | return true; 19 | } 20 | 21 | //can't consume anything with a u in it. Must have an i in it 22 | if(contains_text(foodConsume, "u")) 23 | { 24 | return false; 25 | } 26 | if(contains_text(foodConsume, "i")) 27 | { 28 | return true; 29 | } 30 | 31 | return false; 32 | } 33 | 34 | boolean iluh_famAllowed(string fam) 35 | { 36 | if(!in_iluh()) 37 | { 38 | return true; 39 | } 40 | //Is there an acceptable number of u's? Familiars with u's in name deal 10-20 sleaze damage per U each round 41 | if(contains_text(fam.to_lower_case(), "u")) 42 | { 43 | return false; 44 | } 45 | return true; 46 | } 47 | 48 | void iluh_buyEquiq() 49 | { 50 | if(!in_iluh()) 51 | { 52 | return; 53 | } 54 | 55 | if(item_amount($item[mini kiwi]) >= 4 && !possessEquipment($item[mini kiwi whipping stick])) 56 | { 57 | create(1, $item[mini kiwi whipping stick]); 58 | } 59 | if(item_amount($item[mini kiwi]) >= 3 && !possessEquipment($item[mini kiwi invisible dirigible])) 60 | { 61 | create(1, $item[mini kiwi invisible dirigible]); 62 | } 63 | return; 64 | } 65 | 66 | void iluh_pulls() 67 | { 68 | if(!in_iluh()) 69 | { 70 | return; 71 | } 72 | 73 | if(storage_amount($item[mini kiwi whipping stick]) > 0 && auto_is_valid($item[mini kiwi whipping stick])) 74 | { 75 | pullXWhenHaveY($item[mini kiwi whipping stick], 1, 0); 76 | } 77 | if(storage_amount($item[mini kiwi bikini]) > 0 && auto_is_valid($item[mini kiwi bikini])) 78 | { 79 | pullXWhenHaveY($item[mini kiwi bikini], 1, 0); 80 | } 81 | if(storage_amount($item[mini kiwi invisible dirigible]) > 0 && auto_is_valid($item[mini kiwi invisible dirigible])) 82 | { 83 | pullXWhenHaveY($item[mini kiwi invisible dirigible], 1, 0); 84 | } 85 | } -------------------------------------------------------------------------------- /BUILD/monsters/replace.dat: -------------------------------------------------------------------------------- 1 | Banshee Librarian item:Killing Jar>0 2 | Beefy Bodyguard Bat loc:The Boss Bat's Lair;turnsspent:The Boss Bat's Lair>=4;!path:Heavy Rains;!path:Actually Ed the Undying;!path:Pocket Familiars;!path:Dark Gyffte;!path:Path of the Plumber;!pathid:41;!path:Wildfire;!path:Fall of the Dinosaurs;!path:Avatar of Shadows Over Loathing;!path:Legacy of Loathing;!path:WereProfessor 3 | Knob Goblin Madam item:Knob Goblin Perfume>0 4 | Bookbat 5 | Craven Carven Raven 6 | Drunk Goat 7 | Knight In White Satin 8 | Knob Goblin Harem Guard 9 | Mad Wino 10 | Plaid Ghost 11 | Possessed Laundry Press 12 | Sabre-Toothed Goat 13 | Senile Lihc loc:The Defiled Niche;prop:cyrptNicheEvilness>14 14 | Skeletal Sommelier 15 | Slick Lihc loc:The Defiled Niche;prop:cyrptNicheEvilness>14 16 | White Chocolate Golem 17 | Stone Temple Pirate item:Eyepatch>0 18 | Crusty Pirate 19 | Chatty Pirate 20 | party skelteon loc:The Defiled Nook;prop:cyrptNookEvilness>14 21 | basic lihc loc:The Defiled Niche;prop:cyrptNicheEvilness>14 22 | # lobsterfrogman (todo: add more wanderers) 23 | Government Agent loc:Sonofa Beach;item:barrel of gunpowder<5;prop:sidequestLighthouseCompleted=none 24 | Terrible Mutant loc:Sonofa Beach;item:barrel of gunpowder<5;prop:sidequestLighthouseCompleted=none 25 | Government Bureaucrat loc:Sonofa Beach;item:barrel of gunpowder<5;prop:sidequestLighthouseCompleted=none 26 | Slime Blob loc:Sonofa Beach;item:barrel of gunpowder<5;prop:sidequestLighthouseCompleted=none 27 | Angry Ghost loc:Sonofa Beach;item:barrel of gunpowder<5;prop:sidequestLighthouseCompleted=none 28 | Annoyed Snake loc:Sonofa Beach;item:barrel of gunpowder<5;prop:sidequestLighthouseCompleted=none 29 | Sausage Goblin loc:Sonofa Beach;item:barrel of gunpowder<5;prop:sidequestLighthouseCompleted=none 30 | # Bugbear Invasion Mothership 31 | scavenger bugbear path:Bugbear Invasion;loc:Waste Processing 32 | bugaboo path:Bugbear Invasion;loc:Morgue;item:bugbear autopsy tweezers<1 33 | bugbear scientist path:Bugbear Invasion;loc:Science Lab;item:quantum nanopolymer spider web<1 34 | liquid metal bugbear path:Bugbear Invasion:loc:Engineering;item:drone self-destruct chip<1 35 | Battlesuit Bugbear Type path:Bugbear Invasion:loc:Engineering 36 | ancient unspeakable bugbear path:Bugbear Invasion;loc:Navigation 37 | trendy bugbear chef path:Bugbear Invasion;loc:Galley 38 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/casual.ash: -------------------------------------------------------------------------------- 1 | boolean inAftercore() 2 | { 3 | return get_property("kingLiberated").to_boolean(); 4 | } 5 | 6 | boolean inPostRonin() 7 | { 8 | //can interact means you are not in ronin and not in hardcore. It returns true in casual, aftercore, and postronin 9 | if(can_interact() && !in_casual() && !inAftercore()) 10 | { 11 | return true; 12 | } 13 | return false; 14 | } 15 | 16 | void casualCheck() 17 | { 18 | if(!in_casual()) 19 | { 20 | return; 21 | } 22 | if(get_property("_casualAscension").to_int() != -1) 23 | { 24 | set_property("_casualAscension", my_ascensions()); 25 | auto_log_warning("I think I'm in a casual ascension and should not run. To override:", "red"); 26 | auto_log_warning("set _casualAscension = -1", "red"); 27 | abort(); 28 | } 29 | } 30 | 31 | boolean L8_slopeCasual() 32 | { 33 | //casual and postronin should mallbuy everything needed to skip this zone 34 | if(!can_interact()) 35 | { 36 | return false; //does not have unrestricted mall access. we are not in casual or postronin 37 | } 38 | foreach it in $items[eXtreme scarf, eXtreme mittens, snowboarder pants] //outfit ensures you can reach 5 cold res needed 39 | { 40 | if(!auto_buyUpTo(1, it)) //try to buy it or verify we already own it. if fails then do as below 41 | { 42 | if(my_meat() < mall_price(it)) 43 | { 44 | auto_log_info("Can not afford to buy [" +it+ "] to climb the slope. Go do something else", "red"); 45 | return false; 46 | } 47 | abort("Mysteriously failed to buy [" +it+ "]. Buy it manually and run me again"); 48 | } 49 | } 50 | if(L8_trapperPeak()) //try to unlock peak 51 | { 52 | return true; //successfully finished this part of the quest 53 | } 54 | abort("Mysteriously failed to unlock the mountain peak in trapper quest in casual or postronin. please unlock it and run me again"); 55 | return false; 56 | } 57 | 58 | boolean LM_canInteract() 59 | { 60 | //this function is called early once every loop of doTasks() in autoscend.ash to do things when we have unlimited mall access 61 | //which indicates postronin or casual or aftercore. currently won't get called in aftercore 62 | if(!can_interact()) 63 | { 64 | return false; 65 | } 66 | 67 | if(get_property("lastEmptiedStorage").to_int() != my_ascensions()) 68 | { 69 | cli_execute("pull all"); 70 | } 71 | return false; 72 | } 73 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/iotms/eudora.ash: -------------------------------------------------------------------------------- 1 | boolean eudora_available() 2 | { 3 | if(contains_text(visit_url("account.php"),"tab=correspondence")) 4 | { 5 | return true; 6 | } 7 | return false; 8 | } 9 | 10 | boolean[item] eudora_initializeSettings() 11 | { 12 | boolean[item] retval; 13 | if(eudora_available()) 14 | { 15 | string eudora = visit_url("account.php?tab=correspondence"); 16 | if((contains_text(eudora, "Pen Pal")) && is_unrestricted($item[My Own Pen Pal Kit])) 17 | { 18 | retval[$item[My Own Pen Pal Kit]] = true; 19 | } 20 | if((contains_text(eudora, "GameInformPowerDailyPro Magazine")) && is_unrestricted($item[GameInformPowerDailyPro Subscription Card])) 21 | { 22 | retval[$item[GameInformPowerDailyPro Subscription Card]] = true; 23 | } 24 | if((contains_text(eudora, "Xi Receiver Unit")) && is_unrestricted($item[Xi Receiver Unit])) 25 | { 26 | retval[$item[Xi Receiver Unit]] = true; 27 | } 28 | if((contains_text(eudora, "New-You Club")) && is_unrestricted($item[New-You Club Membership Form])) 29 | { 30 | retval[$item[New-You Club Membership Form]] = true; 31 | } 32 | if((contains_text(eudora, "Our Daily Candles")) && is_unrestricted($item[Our Daily Candles™ order form])) 33 | { 34 | retval[$item[Our Daily Candles™ order form]] = true; 35 | } 36 | } 37 | return retval; 38 | } 39 | 40 | item eudora_current() 41 | { 42 | if(eudora_available()) 43 | { 44 | string eudora = visit_url("account.php?tab=correspondence"); 45 | if((contains_text(eudora, "selected\' value=\"1")) && is_unrestricted($item[My Own Pen Pal kit])) 46 | { 47 | return $item[My Own Pen Pal kit]; 48 | } 49 | if((contains_text(eudora, "selected\' value=\"2")) && is_unrestricted($item[GameInformPowerDailyPro subscription card])) 50 | { 51 | return $item[GameInformPowerDailyPro subscription card]; 52 | } 53 | if((contains_text(eudora, "selected\' value=\"3")) && is_unrestricted($item[Xi Receiver Unit])) 54 | { 55 | return $item[Xi Receiver Unit]; 56 | } 57 | if((contains_text(eudora, "selected\' value=\"4")) && is_unrestricted($item[New-You Club Membership Form])) 58 | { 59 | return $item[New-You Club Membership Form]; 60 | } 61 | if((contains_text(eudora, "selected\' value=\"5")) && is_unrestricted($item[Our Daily Candles™ order form])) 62 | { 63 | return $item[Our Daily Candles™ order form]; 64 | } 65 | } 66 | return $item[none]; 67 | } 68 | -------------------------------------------------------------------------------- /RELEASE/scripts/autoscend/paths/picky.ash: -------------------------------------------------------------------------------- 1 | # Code here is supplementary handlers and specialized handlers 2 | 3 | boolean in_picky() 4 | { 5 | return my_path() == $path[Picky]; 6 | } 7 | 8 | void picky_pulls() 9 | { 10 | if(in_picky()) 11 | { 12 | if(my_daycount() == 3) 13 | { 14 | #pullXWhenHaveY($item[Wand of Nagamar], 1, 0); //Pull made obsolete by Questificaton 15 | #pullXWhenHaveY($item[Star Key Lime Pie], 3, 0); 16 | pullXWhenHaveY($item[Cold Hi Mein], 3, 0); 17 | } 18 | 19 | } 20 | } 21 | 22 | void picky_startAscension() 23 | { 24 | auto_log_info("In Being Picky Adventure", "blue"); 25 | if((my_class() == $class[Turtle Tamer]) || (my_class() == $class[Seal Clubber])) 26 | { 27 | auto_log_info("Selecting skills", "blue"); 28 | string page = visit_url("choice.php?pwd&whichchoice=995&pwd=&option=1&familiar=188", true); 29 | if(contains_text(page, "