Spam attack and save servers

Theraze

Active member
Might be ceil/floor rounding fun or something similar. But yeah, should be able to remove those checks now, simplify things a bit.

Only skills I'm having issues with on my testing with the SpamAttack is the turtle combos... If it's going to do 3 headbutts and a toss, it's easier/safer to just do a single full combo and finish it like that. Among other things, because combining shieldbutt into the combo means it's not going to miss, which is good for the top tier bees when you're a muscle class. :) The problem is that the combos aren't directly skills, per se... Need to see if I can figure out a good way to parse the entire skill-options list in SpamAttack directly. Might be able to just mangle the get_action slightly... Hmm...
 

Winterbay

Active member
They aren't? They are listed in batfactors with skill-IDs at least...
Code:
skill	2003	Headbutt	{0.1,0.15,0.2}*helmetpower	physical	regular
skill	2005	Shieldbutt	{0.1,0.15,0.2}*shieldpower	physical	att -5, regular
skill	2015	Kneebutt	{0.1,0.15,0.2}*pantspower	physical	stun 0.45, regular
skill	2103	Head + Knee Combo	{0.1,0.15,0.2}*(helmetpower+pantspower)	physical	stun 0.45, regular
skill	2105	Head + Shield Combo	{0.1,0.15,0.2}*(helmetpower+shieldpower)	physical	att -5, regular
skill	2106	Knee + Shield Combo	{0.1,0.15,0.2}*(pantspower+shieldpower)	physical	stun 0.45, att -5, regular
skill	2107	Head + Knee + Shield Combo	0.15*(helmetpower+pantspower+shieldpower)	physical	stun 0.45, att -5, regular
 

Theraze

Active member
Well, they weren't being picked. Possibly because it wasn't considering hit chance, but... eh.

I've tweaked how my system works now though... it only goes through your actual options instead of parsing all possible skills. Most awesome recent fight, against a Queen Bee.
SpamAttack: We are going to 5-shot with Offensive Joke, Lunging Thrust-Smack, Lunging Thrust-Smack, Lunging Thrust-Smack and Clobber.
Clobber wasn't actually needed because the third LTS killed it, but... sweet success. :) I'm using the following to parse combat skills:
Code:
 foreach i,opt in opts
  if (contains_text(opt.id,"skill "))
   allmyskills[count(allmyskills)] = to_skill(to_int(excise(opt.id,"skill ","")));

Reuploading. This is a modified version of the one you posted ~9 hours ago that should be more class-agnostic.
 

Attachments

  • spamattack.ash
    24 KB · Views: 115

Winterbay

Active member
Man that generated a lot of options... Even with my limited skillset I got 4723 possible combinations :)
In my latest battle against a bat it decided that number 4721 was the correct one (3 salsaballs) which I would agree was the correct choice.
Seems like a good change which I'll integrate.
 

Rinn

Developer
I've been having pretty good luck with this, but I just noticed it was causing me to get beaten up in the haunted bedroom during a pasta bm run

Code:
[1098] Haunted Bedroom
Encounter: One Nightstand
choice.php?pwd&whichchoice=83&option=2
Encounter: animated nightstand
Round 0: Epicgamer wins initiative!
> You will die in 2 rounds.
> Your attack will kill the monster in 12 rounds.
 > Running out of adventures to use your summons.  Summoning...
Round 1: Epicgamer executes a macro!
Round 1: Epicgamer casts ENTANGLING NOODLES!
Round 2: Epicgamer summons Ponpan the Spice Ghost!
Round 3: You conjure up a swirling cloud of spicy dried couscous, and there is a crackle of psychokinetic energy as Ponpan possesses it.
Round 3: Ponpan shakes some of the spice into your opponent's eyes as he gets accustomed to his new body.
Round 3: animated nightstand (mahogany) drops 5 attack power.
Round 3: animated nightstand (mahogany) drops 5 defense.
Round 3: Ponpan engulfs your opponent's head, raising a choking cloud of spice.
Round 3: animated nightstand (mahogany) drops 2 attack power.
Round 3: animated nightstand (mahogany) drops 4 defense.
 > SpamAttack: Monster HP is 170.0.
 > SpamAttack: We are going to 3-shot with Weapon of the Pastalord, Cannelloni Cannon and Cannelloni Cannon.
Round 3: Epicgamer executes a macro!
Round 3: Epicgamer casts WEAPON OF THE PASTALORD!
Round 4: animated nightstand (mahogany) takes 103 damage.
Round 4: Ponpan raises his power bands and fires a cloud of confusing spice at your opponent.
Round 4: animated nightstand (mahogany) drops 7 attack power.
Round 4: animated nightstand (mahogany) drops 4 defense.
Round 4: Epicgamer casts CANNELLONI CANNON!
Round 5: animated nightstand (mahogany) takes 27 damage.
Round 5: Ponpan engulfs your opponent's head, raising a choking cloud of spice.
Round 5: animated nightstand (mahogany) drops 8 attack power.
Round 5: animated nightstand (mahogany) drops 6 defense.
You lose 57 hit points
Round 5: Epicgamer casts CANNELLONI CANNON!
Round 6: animated nightstand (mahogany) takes 32 damage.
Round 6: Ponpan asks your opponent if it is getting enough oxygen, which is pretty much guaranteed to be "no," because of the choking cloud of spice around its head.
Round 6: animated nightstand (mahogany) drops 7 attack power.
Round 6: animated nightstand (mahogany) drops 7 defense.
You lose 50 hit points
 > You've had the crap beaten out of you... attempting to find some more crap.
In this case two weapons and a cannon would have safely killed the monster, this happened a few times. I'm using the version Theraze just attached, my ccs is just smartstasis then spamattack.

Edit also this:
Code:
[1159] Hidden City (Square 9)
Encounter: ancient protector spirit
Round 0: Epicgamer wins initiative!
> You will die in 3 rounds.
> Your attack will kill the monster in 85 rounds.
Round 1: Epicgamer executes a macro!
Round 1: Epicgamer casts ENTANGLING NOODLES!
 > SpamAttack: Monster HP is 85.0.
 > SpamAttack: We are going to 2-shot with Weapon of the Pastalord and Ravioli Shurikens.
Round 2: Epicgamer executes a macro!
Round 2: Epicgamer casts WEAPON OF THE PASTALORD!
Round 3: ancient protector spirit takes 1 damage.
Round 3: Epicgamer casts RAVIOLI SHURIKENS!
Round 4: ancient protector spirit takes 14 damage.
 > SpamAttack: We are going to 1-shot with Weapon of the Pastalord.
Round 4: Epicgamer executes a macro!
Round 4: Epicgamer casts WEAPON OF THE PASTALORD!
Round 5: ancient protector spirit takes 1 damage.
 > SpamAttack: We are going to 1-shot with Weapon of the Pastalord.
Round 5: Epicgamer executes a macro!
Round 5: Epicgamer casts WEAPON OF THE PASTALORD!
Round 6: ancient protector spirit takes 1 damage.
You lose 41 hit points

I was probably going to lose this fight regardless, but it shouldn't have considered weapon against a physically resistant monster, that might be an issue with batbrain.
 
Last edited:

Theraze

Active member
Probably was BatBrain thinking it would work... mine just went through the Hidden City successfully yesterday. In my current-tweak copy, I'm trying to see if there's a way to make it able to schedule out more than 5 steps easily/programically instead of manually recursing, as well as having it only schedule as many steps out as are actually safe... so if it thinks you'll die in 3 rounds, it needs to 2 shot. If it thinks you'll die and there's nothing safe that will likely succeed, abort and let you either run or try to out-think BatBrain.
 

Winterbay

Active member
The enqueue feature in batbrain should allow you to test for if you die or not, but I've not managed to perfect a system where it reverts the queue yet even though I have some small ideas on how to do it.

Also, the problem here is trying to be cost efficient versus spamming high level attacks to kill something, the earlier version I had was likely to go Weapon of the Pastalord as soon as you couldn't kill it with 2 Salsaballs if you had those two as your only options even though a third Salsaball would kill it without any problems. I guess a setting for "overkill" could be useful where if you set it to say 10 it would try to go for monster_hp+10 rather than monster_hp and thus possibly adding one more highlevel skill.

Protector spirit could be a problem with batbrain somehow thinking you got falvour of magic on and thus pastalord would work.

Edit: This version should not do things that will kill you. I will not take into account that you might be using noodles yet, since without my modification to SmartStasis that I run myself casting of it beforehand is not really detectable in an easy way (the support for that edit si still in there, but shouldn't affect anything for those that don't run my version anyway).
 
Last edited:

Theraze

Active member
So, here's my current version. It also has death-round detection, though it uses BatBrain's die_rounds instead of trying to guess itself. This does have the benefit of actually working based on stuns such as having Entangling Noodles pre-cast by SmartStasis.

Another tweak... variable max-rounds, depending on how long you'd like it to calculate it all out. Adds a zlib variable named spamattack_rounds that defaults to 5. This will automatically increment if it can't find anything that will kill the monster in your max rounds, but you won't die in another round... so if you'll die in 9 rounds, and you have your spamattack_rounds set to 5, it might increase it up to 9, but not 10. Note that if your spamattack_rounds gets set too high, you're looking at a LONG calculation time, since the amount of options increases exponentially, but this should provide for easy safe-automation.

This is what it does if you can't safely kill a monster:
SpamAttack: Monster HP is 150.0.
Macro called on empty queue!
SpamAttack: We would die in 2 and have 0 0 28 374 1460 0 0 0 0 0 as our options
You're on your own, partner.
So for 1 and 2 shots, I have no options. There are 28 3-shot options, 374 4-shot, and 1460 5-shot options. As my calculation is still set to 5 max-rounds, 6-10 have no options.

The main flaw it currently has is not considering hit-chance or adding in new stuns very well. Otherwise, it's been working fairly well for me.
 

Attachments

  • spamattack.ash
    34.8 KB · Views: 132

Rinn

Developer
I think one of the problems might be related to batbrain not using a range for the damage a spell is going to do. In cases where it's very likely you're going to die if you don't cast spells in the right order you'd probably want to assume the worse case damage instead of the average damage.
 

Theraze

Active member
Actually, I've survived usually longer than die_rounds() has guessed. Especially since I'm mostly using cuttlefish this ascension series. But it's when I'm fighting the upper tier bees that it gets to be a problem... I miss them enough that I lose a fair amount of battles.
 

Rinn

Developer
Here's another combat that went unexpectedly

Code:
[1421] Frat House
Encounter: War Pledge
Round 0: Epicgamer wins initiative!
> You will die in 3 rounds.
> Your attack will kill the monster in 8 rounds.
Round 1: Epicgamer executes a macro!
Round 1: Epicgamer summons Ponpan the Spice Ghost!
Round 2: You conjure up a swirling cloud of spicy dried couscous, and there is a crackle of psychokinetic energy as Ponpan possesses it.
Round 2: Ponpan shakes some of the spice into your opponent's eyes as he gets accustomed to his new body.
Round 2: war pledge drops 5 attack power.
Round 2: war pledge drops 5 defense.
Round 2: Ponpan asks your opponent if he is getting enough oxygen, which is pretty much guaranteed to be "no," because of the choking cloud of spice around his head.
Round 2: war pledge drops 8 attack power.
Round 2: war pledge drops 1 defense.
You lose 43 hit points
Round 2: Epicgamer executes a macro!
Round 2: Epicgamer casts ENTANGLING NOODLES!
Round 3: Ponpan engulfs your opponent's head, raising a choking cloud of spice.
Round 3: war pledge drops 7 attack power.
Round 3: war pledge drops 8 defense.
 > SpamAttack: Monster HP is 180.0.
 > SpamAttack: We are going to 1-shot with Weapon of the Pastalord.
Round 3: Epicgamer executes a macro!
Round 3: Epicgamer casts WEAPON OF THE PASTALORD!
Round 4: war pledge takes 87 damage.
Round 4: Ponpan raises his power bands and fires a cloud of confusing spice at your opponent.
Round 4: war pledge drops 6 attack power.
Round 4: war pledge drops 5 defense.
 > SpamAttack: We are going to 3-shot with Cannelloni Cannon, Cannelloni Cannon and Ravioli Shurikens.
Round 4: Epicgamer executes a macro!
Round 4: Epicgamer casts CANNELLONI CANNON!
Round 5: war pledge takes 28 damage.
Round 5: Ponpan engulfs your opponent's head, raising a choking cloud of spice.
Round 5: war pledge drops 1 attack power.
Round 5: war pledge drops 9 defense.
You lose 32 hit points
 > SpamAttack: We are going to 2-shot with Cannelloni Cannon and Cannelloni Cannon.
Round 5: Epicgamer executes a macro!
Round 5: Epicgamer casts CANNELLONI CANNON!
Round 6: war pledge takes 64 damage.
Round 6: Ponpan raises his power bands and fires a cloud of confusing spice at your opponent.
Round 6: war pledge drops 5 attack power.
Round 6: war pledge drops 3 defense.
You lose 29 hit points
 > You've had the crap beaten out of you... attempting to find some more crap.
 

Winterbay

Active member
Code:
 > SpamAttack: Monster HP is 180.0.
 > SpamAttack: We are going to 1-shot with Weapon of the Pastalord.
Round 3: Epicgamer executes a macro!
Round 3: Epicgamer casts WEAPON OF THE PASTALORD!
Round 4: war pledge takes 87 damage.

That is... quite a discrepancy in the damage expected and the damage given...
Does War pledges have spell resistance?
What are your:
spell damage percent, buffed mys, spell damage and spell damage elemental bonuses (boni?)?
 

slyz

Developer
I'm not sure how BatBrain handles Weapon of the Pastalord when you have Flavour running. If you had the wrong Flavor (the sleaze one), half of the WoP damage would be turned to sleaze damage and reduced to one.
 

Winterbay

Active member
I'll test that in a few minutes when my multi is done farming and I can log in on a character that has mp and skills :)

Edit:
Tested and it appears to be factoring that in correctly. Running with spirit of garlic:
Code:
SpamAttack: Weapon of the Pastalord 190.0 potential damage.

With Spirit of Bacon Grease:
Code:
SpamAttack: Weapon of the Pastalord 102.745 potential damage.

So it most defintely lowers the expected damage against the sleaze monster with that effect on.
 
Last edited:

Theraze

Active member
The problem is if you aren't tuning your damage, then it works based on average damage... Also, "spell resistance" is just when the spell misses, so that didn't happen...

Since Canelloni Cannon varied from 28 to 64, we can make a very strong assumption that Epicgamer was just running untuned in this battle. And while we can hope really hard in those cases, we can't always make guarantees.
 

Winterbay

Active member
I'm unsure of the KoL terms but the high level bees have a 50% damage reduction from spells, which is what I would define as spell resistance, making me miss more is not what I would put under spell resistance...

Also, seeing as I am guessing this is the same run as the previous strangeness then we can be pretty sure that Epicgamer is running unattuned since it's in a BM run. The randomness of pastaspells are why I like saucespells so much better :)
 

Rinn

Developer
Maybe if I wasn't already hemorrhaging meat from restoring mp, honestly I'd rather just make the run take a few days longer and powerlevel moxie then deal with the restore issues since it's already entirely not fun.
 

Winterbay

Active member
True, I seem to remember that I actually went out of my way to build myself a chef staff to help with the MP issues. But since it already seems to be using Weapon of the Pastalord I think it might actually be cheaper to use Fearful since that is likely to hit for more in average while costing the same to cast (and nothing to get, apart from the turns to find it).
 
Top