SmartStasis -- a complex script for a simple CCS

StDoodle

Minion
Heh, sorry about the confusion. To clarify, I was saying that it's possible to do such a thing, not necessarily that z's script will. Actually, that's one of the primary reasons I'm probably going to make my own fight script; I tend to cater more toward the high-end speed crowd, especially hardcore, and for those folks spending an extra 5mp per combat on a regular basis is a pretty big deal. ;)

I am still hoping for some collaboration, for two main reasons. 1) I don't want to do absolutely everything on my own, especially if the bulk of the work has already been done and 2) Ideally, both scripts could share certain info / settings / libraries.
 

Theraze

Active member
Hmm... on the relay script he released earlier, everything had a meat cost displayed... I'd expect BatMan to be that on steroids, especially from what he said.

Edit: Ahh! I wander back into it! So easily! :D
 

zarqon

Well-known member
I think some people are still misinterpreting the "profit-driven" approach, and assuming this means it's all about meat. That would be inaccurate. It's about profit -- that means HP, MP, meat, adventures, items; everything. These are all converted into meat values simply because that is the easiest available common conversion, but it is not all about meat. For example, getting Beaten Up costs you 4*valueOfAdventure, or just 1 if you have a means of removing it available (but + the cost of removing it).

StDoodle, I'm not exactly sure what you mean. Spending an extra 5MP per combat would only take place if that were the most profitable action. In other words, perhaps using a free attack would also kill the monster, but at greater HP cost to yourself, and depending on the efficiency of your restore options, that could make the 5MP skill either more or less expensive than the free action. I feel confident that BatMan, if I can get it working the way I'd envisioned it, will be the best CCS available, regardless of which crowd you're in. People who auto-macrofy will have to deal with the sub-optimalities introduced by variance in ranges (making this the best option for farmers/aftercore/semi-casual play), but people who don't auto-macrofy will always be optimal since the finishing strategy will be re-evaluated every round.

Although, for non-macrofied combat, I'm hoping to do a kind of hybrid macro/single action thing, to save server hits where I may. In other words, if the remaining actions are all the same, simply submit a macro that spams that action. If you are doing a DB combo, submit the whole combo as a macro, etc. (SS when followed by spamattack already does this now.)

I have two challenges at the moment: 1) incorporating funkslinging. I have two different algorithms in mind, and on any given day one seems better than the other. 2) How to incorporate FTF's actions now that they have been absorbed by SS. Some of them can be considered regular combat actions now, but others should remain specially handled. For some of them, it might be a good idea to consider using the item as being highly profitable, but this number would be arbitrary. None of the solutions I've come up with so far have seemed awesome yet.
 

StDoodle

Minion
z;

In hardcore speed, you often have to use auto-hit stuff, and shieldbutt is usually the best option. However, it doesn't do a static amount of damage; there's some random variance. You don't really know until the last round whether you need one more shieldbutt, or can get away with clobber / toss. That's what I was referring to; but to handle such a problem, you have to use a partial macro, followed by a last-round action.
 

Bale

Minion
If BatMan figures that it will take an entangling noodles and 2 shieldbutts plus or minus a toss to kill the monster, then it can just submit a macro that does that. The beauty of BatMan would be that it knows exactly how many shieldbutts to expect before there might or might-not be a little bit more. That means it can just add the toss as an extra on the end of the same macro even if it doesn't know if that toss will really be needed.

Or am I wrong in my expectations of BatMan and his BatBrain?
 

StDoodle

Minion
No, what I'm saying is there are a lot of times in speed play where you know it will take X uses of a combat skill, but the last may need to be shieldbutt, or may be ok as clobber / toss. Shieldbutt, and some spells in some situations, have quite the range.
 

Winterbay

Active member
I am going to assume that in that case the script will submit a macro assuming the least amount of casts to kill the monster and then reanalyse the situation afterwards. That sounds like the best solution to that problem to me (since we have no monster_hp predicate in BALLS).
 

zarqon

Well-known member
I already explained that predictively macrofied combat will be vulnerable to range variance, especially since the actual ranges of everything are not included in the data files. At least for starters, you'll want to use the per-round version during a speed run (which, ironically, will run slower).

Non-macrofied BatMan will predictively generate the entire combat, then execute only the first round on that list. Rinse and repeat.

I may delay the release of the new not-quite-shiny SS to coincide with the full unveiling of ^ as XOR in ASH. Annoy everyone once in the same day -- probably better than doing it over several days.
 
Last edited:

Bale

Minion
You're using XOR and it hasn't even been implemented yet? Wow. Count on zarqon to be ahead of the times.

(Yeah, I know you've got a function for XOR now which you'll be able to remove later. Don't bother pointing that out; it just sounds cooler the way I wrote it.)
 

StDoodle

Minion
I already explained that predictively macrofied combat will be vulnerable to range variance...

Sorry, I missed that, wasn't trying to upset anyone. I've just really wanted to get a consult script that reaches my target audience, and wanted to clarify whether or not yours could easily be made to meet those requirements.
 

zarqon

Well-known member
Wasn't upset, no worries. I'm pretty sure that with a little zlib BatMan_macrofy = false (which will be the default for starters), it will suit speed-HCers. That is, once all the kinks get worked out. And there are lots of kinks at the moment -- the data files are skeletal in places, and there are some things I haven't been able to inform the script about yet:

Other than TS, LTS, and MoxMan, which other skills have a hit/miss chance? And if so, is it the same as your regular melee hit/miss chance?

Which attack skills deal regular damage (including bonus melee / bonus elemental damage) as part of their damage?

"New" items/skills are missing from the data files. I just added the Rave skills today! I'm hoping to refactor DB combos into BatBrain as separate combat options before releasing SS, but at my present rate it's looking like that probably won't happen.

This echoes very strongly with me re: BatMan.
 

StDoodle

Minion
Wasn't upset, no worries.

Cool cool.

I'm pretty sure that with a little zlib BatMan_macrofy = false (which will be the default for starters), it will suit speed-HCers. That is, once all the kinks get worked out. And there are lots of kinks at the moment -- the data files are skeletal in places, and there are some things I haven't been able to inform the script about yet:

At present, there are still going to be a few fundamental things that make it less useful for the speeders. In talking with a couple of the regulars from that crowd, they'd really like a single-button solution that works 90%+ of the time, and describes what it will do. But things that may seem trivial to most people -- such as possibly casting a single extra shieldbutt more than necessary -- are a dealbreaker to this crowd. Most of these folks don't really need a script to figure out what the optimal options are; what they need is a way to not have to "click click click click click." Exactor it told me a while back that it's one of the major time-sinks in ascension; combat is too complicated to easily script using a CCS, but still simple enough that it becomes rather mindless to go through.

I realize this probably means that our two purposes are different enough that we can't expect one script to handle both target audiences. But I'd really like it if we didn't have two separate files for spell formulas, two library scripts that contain 70% of the same functions, etc. But my use case demands things such as the range of each possible action (min damage, max damage, avg. damage, sim. for stun, etc.).

Ideally, I'd like to come up with one format for a lot of these things, and each of our scripts could simply ignore the parts they didn't need. But I know only the little I've been able to reverse-engineer from your data files, currently.

Sorry for the threadjack. ;)

Other than TS, LTS, and MoxMan, which other skills have a hit/miss chance? And if so, is it the same as your regular melee hit/miss chance?

Can't think of any, and nothing popped out while browsing the wiki. Well, except for Lunge-Smack. :(

Which attack skills deal regular damage (including bonus melee / bonus elemental damage) as part of their damage?

Not sure what you mean by "regular." Does this mean "normal weapon attack damage" or "damage in addition to another effect" (like some disco delevelers) or ... ?


Heh, the "works, but spaghetti code" is very accurate for my daily deeds script. :)
 

Theraze

Active member
Except that what you describe is still what BatMan does... they click the "Script" button once, BatMan recalculates the outcome each round and decides which will be best. They just have to wait the extra 3-10 seconds for each round to load singly instead of having it all come through in a single macrofied rush.

If my dreams of BatMan hold true, every (non-macroed) combat is optimal. No question about it. No arguments that can't be mathed away. For HC, SC, casual... it's all in the calculations and worked out. :)
 

xKiv

Active member
Other than TS, LTS, and MoxMan, which other skills have a hit/miss chance? And if so, is it the same as your regular melee hit/miss chance?

Both shieldless butts (and all [1] buttcombos that don't include shieldbutt). According to wiki:
Kneebutt adds +20 to muscle for calculating to-hit (and has 50% chance of stunning)
Headbutt doesn't add anything.

[1] all 1 of them (head+knee)
 

StDoodle

Minion
Except that what you describe is still what BatMan does... they click the "Script" button once, BatMan recalculates the outcome each round and decides which will be best. They just have to wait the extra 3-10 seconds for each round to load singly instead of having it all come through in a single macrofied rush.

Except, like I said earlier, it's not making the decisions that presents a problem for this crowd... the time is a major factor. Also, to the best of my knowledge, zarqon's consult scripts won't olfact monsters for a player who isn't bhh'ing and doesn't use mafia's "goals" command. (Which pretty much never happens in a "serious" run.)

Also, I really don't want to encourage non-macroed combat; I like saving server hits. ;)

If my dreams of BatMan hold true, every (non-macroed) combat is optimal. No question about it. No arguments that can't be mathed away. For HC, SC, casual... it's all in the calculations and worked out. :)

I'm not sure whether to take this as zealot-level faith or whimsy; I'm gonna go with whimsy. ;) Look, I'll agree that from the looks of it, z's script will be ~95%* optimal; which is really damn heroic** for a script. But I'm aiming for something that can get towards the 99% needed for speeders in HC, which will obviously require sacrificing a lot of non-HC functionality, but will be useful to a certain segment of the playerbase. I plan to accomplish this by allowing the user to specify a couple of things in-combat (such as a checkbox for the one-off stuff like olfaction) but still run the actual combat with a single button press (that perhaps calls 2 macros).

Look, even supposing I'm wrong -- either zarqon's script ends up being more optimal than the current leaderboarders or mine ends up as trash or some combination of similar situations -- is there really anything inherently wrong about my desire to develop a common data file format that includes additional information? To develop separate library scripts that contain functions more than one consult script writer would desire? Pretty please? [there would be another smiley here, but apparently I'm over the limit...]

* to be fair, most high-end play is around 98-99%; please don't interpret 95% as in insult
** sorry, just re-watched Firefly for the umpteenth time :cool:
 

slyz

Developer
For a speedrun, I would love to have a relay override that presents the various combat strategies with a "Do It!" button.

You cited Olfaction as an example of something that shouldn't be handled automatically. It always happens after noodleing, at the beginning of the fight. I can start the fight, noodle/olfact on my own if I want, then look at what the script is proposing. If I need MP for olfaction, I can just ignore BatMan and stasis or use restore items until I can cast olfaction. Then hit the "Finish Him!" button.

There are different informations that would very useful to have displayed on each round: the number of rounds I can still survive, the cheapest combat strategy, the amount of MP I can expect from my familiar for each combat strategy...

There is something else that seems to have been overlooked - the combat strategy is mainly decided before entering combat. If I'm adventuring with Rage, Snarl, +weapon damage equipment and a shield, I'm pretty much going to shieldbutt. If I tune my spells to the zone's element, and have +spell damage buffs and equipment, I already decided that I want to spellsling. A relay script that compares different possible combat strategies depending on equipment and buffs available would be great :D
 

Bale

Minion
** sorry, just re-watched Firefly for the umpteenth time :cool:

That's something you should never apologize for, unless it's your birthday.

Also, I really don't want to encourage non-macroed combat; I like saving server hits. ;)

Agree. Macrofied should be the default. Leave non-macrofied for speedruns. Saving server hits makes you a big damn hero.


There is something else that seems to have been overlooked - the combat strategy is mainly decided before entering combat. If I'm adventuring with Rage, Snarl, +weapon damage equipment and a shield, I'm pretty much going to shieldbutt. If I tune my spells to the zone's element, and have +spell damage buffs and equipment, I already decided that I want to spellsling. A relay script that compares different possible combat strategies depending on equipment and buffs available would be great :D

True I suppose, but such a script would only be duplicating maximizer functionality. The maximizer works just fine to help me remember every possible buff for a combat strategy. I just want BatMan to see the possibilities inherent in the set of buffs I have active for it to use.
 
Last edited:

slyz

Developer
This conversation definitively doesn't belong in the SS thread anymore ^^

I don't think a script that compares available combat strategies would duplicate Maximizer functionality - it would of course need to go through your stuff to find out what equipment you could use for one strategy or the other to be precise, but the Maximizer doesn't tell me if it's cheaper in terms of MP to buff myself and kill monsters with shieldbutting vs spellslinging.

@Zarqon: do you think BatBrain could be used as a combat simulator? Given a zone (or a specific monster) and a whatif command, would it be easy to have it return the cheapest course of action? This way, we could write something that compares the cost of combat for different sets of buffs.
 

zarqon

Well-known member
@xKiv: Thanks! Will add this info into the script. Somehow.

@StDoodle: I agree that the current data files have a few things I'd like to change now to make them more accurate. (Notably, describe damage differently for unevenly weighted damage elements and account for attack and defense deleveling being separate now.) Adding damage ranges would allow for greater optimizing of the action sorter, but is not something I want to mess with yet.

A bit more patience please, everyone. It seems like now you are not only talking about BatMan, you are talking about relay version of BatMan, which will come even later. I'd rather show than tell, so rest assured, all your questions will be answered by the product. Until then, speculation is not nearly as useful as helping with any of the numerous remaining problems.

But to put some of the speculation to rest, the eventual relay script, in addition to adding more useful information about the combat, will include two tables:

1) the predicted optimal combat, as plotted by BatMan, with a button to execute all, and individual options by each action to either a) execute the combat up till that point, or b) execute only that action.

2) The table of all available options known to BatMan, sortable by damage, profit, HP, MP, stun, delevel. This was already kind of in the previously released relay script. Each action will be clickable to perform the action, with another option to spam that action (if it makes any sense). I already have this table generating, but for some reason can't get tablesorter to work on it. There are no warnings/errors showing in the console, and yet it does nothing.

Of course currently, for relay play everything about the monster is irrelevant in the first round, since last_monster() and all other monster functions do not refer to the monster you're about to fight yet.
 
I did a search for this and didn't find it, so please excuse me if this has been asked already.

Is there a way to configure which stasis maneuver you do in the script? For example, if I'm a DB wouldn't it be infinitely better to sucker punch my opponent than to use a seal tooth, turtle totem, etc?

Even when wielding stuff that adds damage to DB skills, I haven't noticed one that adds to sucker punch damage and the lowering of the monster's attack and defense will make it easier to last longer and kill it when you're done with stasis.
 
Top