bumcheekcend.ash - A zero setup semi-automated ascension script!

Theraze

Active member
Or you could make a BBS to check if you're doing that. I mean, you're already saying that you don't trust the script to handle your equipment and that you'll handle it all yourself. Now you're saying that you don't trust the script to NOT handle your equipment and you want the script to handle it. There's a disconnect there. Either you want the script to handle it or you don't.

There may someday be an abort there. But really, if you tell the script that you want to handle the equipment 100% and that the script should just gets its grubby controlling hands off, expect things like the Knob King and Hidden Hospital to be endless turn sinks unless you do what you said you'd do and actually handle your equipment...
 

Ulti

Member
But really, if you tell the script that you want to handle the equipment 100% and that the script should just gets its grubby controlling hands off, expect things like the Knob King and Hidden Hospital to be endless turn sinks unless you do what you said you'd do and actually handle your equipment...
I have 3 smithsness-based outfits I use in hardcore:

my main outfit:
Hat: Hairpiece On Fire
Weapon: Saucepanic
Off-Hand: A Light that Never Goes Out
Pants: Vicar's Tutu
Accessory 1: Hand in Glove
Accessory 2: astral mask

my outfit for beefy bats and nuns:
Hat: Hairpiece On Fire
Weapon: Saucepanic
Off-Hand: Half a Purse
Pants: Vicar's Tutu
Accessory 1: Hand in Glove
Accessory 2: astral mask

my outfit for modern zombies:
Hat: Hairpiece On Fire
Weapon: Sheila Take a Crossbow
Off-Hand: Sheila Take a Crossbow
Pants: Vicar's Tutu
Accessory 1: Hand in Glove
Accessory 2: astral mask

I'd be happy if the script stuck with one of the above outfits, but instead the script's maximize logic doesn't use -tie properly and when swapping back and forth, I get stuck with stuff like fuzzy earmuffs or chopsticks which add +spell damage with no relevance to the maximized equipment logic due to buMax() not defaulting to -tie.
You'd think I'd run a "bumcheekascend" outfit, but the logic in the script doesn't even check for it if I'm in hardcore, thinking I don't have access to any mr store gear.
But smithsness gear is optimal for hardcore.

The main reason I run "dontTouchStuff" is because I have a favorite outfit setup, namely my main outfit as mentioned above with Saucepanic and A Light that Never Goes Out.
I'd be VERY happy if the script ran this outfit my entire hardcore ascension when it could, and swapped into others temporarily when required.
But the main concern for me is I don't want to be stuck wearing something like fuzzy earmuffs or chopsticks at any point due to failure to use -tie if I have smithsness gear available, you feel me?
 

Theraze

Active member
Yep. Sounds like a great time to use a before battle script to set your outfit based on next adventuring location.
 

Ulti

Member
Ah, score. ^_^
Odd, thought I had BBB installed before, must've forgot to run "set betweenBattleScript=BestBetweenBattle.ash".
I feel like an idiot now, thanks for the advice.
 

Theraze

Active member
Not a problem. :) I just like to know why I'm making edge stuff. If I'd be making something weird/custom when there's already a great way to let people handle it themselves, it seems less tempting. :)

For the record, if you're using BBB, I suggest importing it into a custom BB script. My 'beforeBattle.ash' script is this:
Code:
import <BestBetweenBattle.ash>;
import <flavourScript.ash>;

void main() {
	bbb(); 
	flavour();
}
You could make either a separate file for your customOutfits() function or just add it to the main script. I suggest not trying to merge it into BBB though because that makes it harder to merge changes in. Not that you can't. :)
 

Theraze

Active member
Post 4840, we still have a decision on autoselling. Won't make changes until people have decided, since it doesn't affect me and any changes are likely to make SOMEone unhappy.

Regarding something not related to that, do we still have a reason to unlock the DoD and get the wand or bangs? Since we need all 3 keys and can't reuse, are those just wasted turns or should we still get the wand?
 

Theraze

Active member
Makes sense. bcasc_getWand now controls unlocking the DoD and getting the wand. Defaults to not being set which makes the boolean false, since it's not strictly needed.
 

xKiv

Active member
I see two possible reasons to get a wand:
1) if you want to get keys by
- DoD for hero jewelry
- spookyraven mirror SR to make a copy of the jewelry (low chance of working, but it's a chance to daycount--)
- zap jewelry into keys
2) clovering and zapping ores for trapper (also not guaranteed to work)

!potions only make sense as a collateral to wands.
 

Theraze

Active member
Well, if you're just using BCA, you won't get either of those potential bonuses, so it makes sense to skip getWand. If you are blending BCA with manual actions or are planning on extended aftercore, you can always turn it on and it will unlock. It won't mark that section as done unless you actually unlock the DoD and get your wand, so...
 

Theraze

Active member
Okay, so we're ignoring level 12 for now, which is fine.

Moving on to level 13...
We can maximize for the 3 contests and select them individually, or we can just grab the 3 contests and burn some extra turns, which is good if you want factoids. If we don't go for bonus factoids, we'll probably maximize equipment, free casts, and MAYBE uneffects, but nothing purchased or from inventory items. There lie major dangers and problems.
For the hedge, we'll probably add a new preference, bcasc_hedgeChoice or something similar. If you set it to one of the six valid choices (traps, gopher, duck, chihuahua, kiwi, or nugglets) then it will use that one. If it isn't set, we'll just do nugglets for the guaranteed success.
We'll call the tower_door function directly. If it works, we move on. If it fails, we abort and let the user fix it.
If we don't have a beehive, we'll backfarm. Hopefully the user doesn't have an AA or BB script that will mess with our choices.
Maximize for meat, limiting the weapon to the right class-type (+melee +shield for muscle, -melee for moxie, no limits for myst), but not doing anything to make sure that the combat actually works. Use maximized Single combat call, abort if the adventure call fails (meaning that we got beaten up, whether or not our AA script cured it). Repeat combat as needed.
If we don't have an electric boning knife, we'll backfarm. Hopefully the user doesn't have an AA or BB script that will mess with our choices.
We now need to check for 4-6 cheap healing items (filthy poultice/gauze garter and red pixel potions) and the Wand. Probably put healing behind a preference which defaults to automation, something like bcasc_dontFightShadow.If we need more healing items, backfarm red pixel potions until we have a total of 5 of those available. If it's all RPP, we only need 4, but we may need 5 if war heals are involved. For the wand, simply try to acquire it. If we can't, abort so that the user can get it.
Normal buMax now. If the user's stats are below 230 or so, get confident. If they're high enough, save the adventure. Also, health needs to be above 200. If it's less than that, buMax and give health some more weight.
If the user hasn't elected to skip automation, fight the shadow using manual code for the fight. Use visit_url calls to throw the items so that we can avoid wasting restores if possible. If we're beaten up after, abort because something went wrong.
Fight the NS with three normal run_combats.
Shatter the prism.

Anything massively off on the planning?
 

fronobulax

Developer
Staff member
Have not absorbed it all, but in keeping with the one time goal of a fast moxie run, I would script something that won the tower contests ASAP and did not worry about factoids. Indeed there are characters running BCCA who don't even have a Manual :)

As for Maximization, the problem gets hard to script for a general audience if you allow for budgets and potions and such so I'd go a configuration option that means BCC will make the choices for you OR BCC will stop and make you do it your way. This, of course, applies to the Tower Contests.

Thanks for keeping this up, BTW.
 

Theraze

Active member
Well, for the tower contests, rather than having a hardcoded list, I'm planning on running against equipment and castable skills. If we do items, it would be items with a mall_price (or npc_price) above 0 and less than 1000. Haven't fully decided on that part though. We're going for 'expected' automation, not fully optimal. :) For fully optimal, it would need the hardcoded list, to parse through available Mr. A items to see which might potentially save multiple turns for a single turn, and to be updated or verified each time any new item was released. That's definitely outside my scope. Heh.
 

Theraze

Active member
So here is my current action-dump. Not in proper ash code, but should be readable. Ish.
maximize init, -tie
place.php?whichplace=nstower&action=ns_01_contestbooth
choice 1
choice 6
maximize pref("nsChallenge1"), -tie
place.php?whichplace=nstower&action=ns_01_contestbooth
choice 2
choice 6
maximize pref("nsChallenge2") damage, pref("nsChallenge2") spell damage, -tie
place.php?whichplace=nstower&action=ns_01_contestbooth
choice 3
choice 6
buMax
adventure pref("nsContestants1") Fastest Adventurer Contest
adventure pref("nsContestants2") A Crowd of (Stat) Adventurers
adventure pref("nsContestants3") A Crowd of (Element) Adventurers
if pref("nsContestants1")+pref("nsContestants2")+pref("nsContestants3") != 0 abort
place.php?whichplace=nstower&action=ns_01_contestbooth
choice 4
buMax
place.php?whichplace=nstower&action=ns_02_coronation
choice 1
hedge_maze pref("bcasc_mazePath") != "" ? pref("bcasc_mazePath") : "nugglets"
tower_door
if item_amount(electric boning knife) < 1 goals add elec knife; adventure * castle ground
if item_amount(beehive) < 1 goals add beehive; adventure * black forest
place.php?whichplace=nstower&action=ns_05_monster1
use_item beehive
buMax 100 meat
place.php?whichplace=nstower&action=ns_06_monster2
bumRunCombat until beaten up (abort) or repeat these two commands until questL13Final is no longer step7
place.php?whichplace=nstower&action=ns_07_monster3
use_item electric boning knife
retrieve_item wand of nagamar
int needed_healing_items=5
retrieve_item needed_healing_items filthy poultice
if item_amount(filthy poultice) < needed_healing_items
if item_amount(filthy poultice) == 0 needed_healing_items = 4
if !retrieve_item needed_healing_items-(item_amount(filthy poultice)) goals add remaining needed_healing_items red pixel potion; adventure * 8-bit
buMax hp
restore_hp
place.php?whichplace=nstower&action=ns_08_monster4
choice 1
place.php?whichplace=nstower&action=ns_09_monster5
use_item filthy poultice and then red pixel potion. Funksling if possible.
place.php?whichplace=nstower&action=ns_10_sorcfight
bumRunCombat
bumRunCombat
bumRunCombat
place.php?whichplace=nstower&action=ns_11_prism
Anything look bad before I actually make it work, run it a few times, and commit it?

Few notes regarding choices.
1) We always need to maximize init. Then that choice will have let us see the contests, and mafia will parse them, so it doesn't actually matter if the user has a telescope or not. It should maximize properly regardless.
2) If the user can't beat the combats, abort. Don't waste a bunch of turns because their CCS can't beat the triple-attacking tasmanian devil, for example.
3) We want guaranteed automation. So we got for the guaranteed throws of items and the nugglets.

If we wanted to do the Ed version, it's actually easier, though different urls. Basically:
visit the adventurer and win
Amun
goals add macguffin
adventure * secret warehouse
return macguffin
choice 1
 
Last edited:
Running r572 HEAD on KoLMafia-15707. There has been an issue where the script way over levels. On my last run and current run, when I hit level 8, it tries to level up to base moxie 156. I didn't notice until I was on level 12. I am currently at 154 moxie and had manually completely all main quests up to the MacGuffin, which I just started. As you can see from the output below, the script still wants to level.

Output from the console, snipped
Code:
Level 7 Starting
BCC: We have completed the stage [friarssteel].
BCC: We have completed the stage [cyrpt].
BCC: We have completed the stage [innaboxen].
BCC: We have completed the stage [manorbilliards].
BCC: We have completed the stage [manorlibrary].
BCC: We have completed the stage [manorbathroom].
BCC: We have completed the stage [manorbedroom].
BCC: We have completed the stage [manorgallery].
BCC: We have completed the stage [manorballroom].
BCC: levelMe(53, true) called.
Level 8 Starting
BCC: We have completed the stage Trapper
BCC: We have not completed the stage [piratefledges].
BCC: Maximizing '+outfit swashbuckling getup'
Maximizing (1st time may take a while)...
123 combinations checked, best score 234.17
Putting on eyepatch...
Equipment changed.
Putting on swashbuckling pants...
Equipment changed.
Putting on stuffed shoulder parrot...
Equipment changed.
BCC: levelMe(156, true) called.
Need to Level up a bit to get at least 156 base Primestat
BCC: Maximizing ''
Maximizing...
180 combinations checked, best score 240.17
Putting on fuzzy montera...
Equipment changed.
Putting on Boss Bat britches...
Equipment changed.
Putting on Codpiece of the Goblin King...
Equipment changed.
Conditions list cleared.
Condition added: Substats: 0 / 0 / 835
Cleared mood.
Set mood trigger: When I get Just the Best Anapests, uneffect just the best anapests
Set mood trigger: When I run low on Mariachi Mood, cast 1 Moxie of the Mariachi
Set mood trigger: When I run low on Disco State of Mind, cast 1 Disco Aerobics
Set mood trigger: When I run low on Butt-Rock Hair, use 5 hair spray
BCC: Need less combat, brave Sir Robin!
Set mood trigger: When I run low on Smooth Movements, cast 1 Smooth Movement
Set mood trigger: When I run low on The Sonata of Sneakiness, cast 1 The Sonata of Sneakiness
Set mood trigger: When I get Carlweather's Cantata of Confrontation, uneffect Carlweather's Cantata of Confrontation
BCC: Need items!
Set mood trigger: When I run low on Fat Leon's Phat Loot Lyric, cast 1 Fat Leon's Phat Loot Lyric
Set mood trigger: When I run low on The Ballad of Richie Thingfinder, cast 1 The Ballad of Richie Thingfinder
Set mood trigger: When I run low on Leash of Linguini, cast 1 Leash of Linguini
Set mood trigger: When I run low on Peeled Eyeballs, use 1 Knob Goblin eyedrops
BCC: Trying to check bcs_fam_itemsnc on the Bumcheekcity servers.
Checking for familiar 'Pair of Stomping Boots' where x=1
Checking for familiar 'slimeling' where x=2
I need 156 base moxie
BCC: Attempting to get clovers to level with. (Don't worry - if don't want to use them to level, we won't).
BCC: Getting Clovers
bcasc_lastHermitCloverGet => 20150405
BCC: We've already got Clovers Today
BCC: Going to use clovers to level.
BCC: We have 2 clovers and are using one to level.
Using 1 disassembled clover...
You acquire an item: ten-leaf clover
Finished using 1 disassembled clover.
Unknown Adventure #395 = adventure.php?snarfblat=395&confirm=on
Unknown Adventure #395 = adventure.php?snarfblat=395&confirm=on
Unknown Adventure #395 = adventure.php?snarfblat=395&confirm=on
 

Theraze

Active member
My guess is that you probably had a ML of 52, since at +40 ML I had a safemox of 144 at The F'C'le. If you're running high ML for whatever reason, you'll need to tell the script that you don't care about safe moxie, or it WILL keep trying to level you to where combat should be a cakewalk.
 

Theraze

Active member
At least my computer is currently having problems connecting to BCC's server to check aliases today. Kinda tempted to put the aliases as a data file in the script repository, which would both make things more self-contained as well as making it so that users could see more easily exactly what is getting pulled in. Any votes against?
 
My guess is that you probably had a ML of 52, since at +40 ML I had a safemox of 144 at The F'C'le. If you're running high ML for whatever reason, you'll need to tell the script that you don't care about safe moxie, or it WILL keep trying to level you to where combat should be a cakewalk.
Maybe, but the script had already leveled me to 12 without completing any quests above level 8. I did not manually do any adventuring before then.
 

Theraze

Active member
Yep. That's right if you have that level of +ML. Either do what I said and tell it you don't care about safe moxie or stop running that much +ML. Either way.
 
Yep. That's right if you have that level of +ML. Either do what I said and tell it you don't care about safe moxie or stop running that much +ML. Either way.
I think there is a misunderstanding. Maybe BumcheekAscendScript was running +10 from the radio, but I was not controlling my character. I am running the script's defaults. I was, therefore, not running "that much +ML." The script's defaults were controlling all aspects of the run, until I found myself at level 12 with 4 levels of quests uncompleted.

I thought that maybe the script had bugged out, so I restarted KoLmafia and re-ran the script. When it still went to the Ballroom to powerlevel instead of hitting the level 8 quest, I hit "stop" and posted the snippet since it did the same thing last run.

Here is the maximize snippet, which does not have +ML, but -ML
Code:
maximize 0 beeosity, mainstat 999999999 max, -melee -10 ml +moxie experience +0.5 mp regen min +0.5 mp regen max, .5 hp, -equip hilarious comedy prop
 
Top