Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace hard-to-read Actions with CLC-like shorthand to ease priority experimentation for novices #2447

Open
navv1234 opened this issue Aug 13, 2015 · 16 comments

Comments

@navv1234
Copy link
Contributor

Originally reported on Google Code with ID 2448

The APL is a scary wall of text to new users. Deciphering Actions such as:

actions.single+=/judgment,if=talent.empowered_seals.enabled&((seal.truth&buff.maraads_truth.remains<cooldown.judgment.duration*2)|(seal.righteousness&buff.liadrins_righteousness.remains<cooldown.judgment.duration*2))


is a deal breaker for non-coders. How many potential users abandon SC because they
can't understand the syntax? 

Solution: 
1) Create Text Templates to convert the Actions to CLC-like abbreviations
2) Include, either in the APL or another tab the abbreviations and their meaning in
English, not code.
3) Toggle using either the abbreviations or their English description in the APL, not
code.

Bonus:
4) Provide a UI interface to quickly change action priority positions.
5) Provide a UI interface to toggle available actions.
5.1) Example: Toggle T17 2pc
5.2) Example: Toggle (Action) 
6) Provide a UI interface to import/export CLC priority strings that directly modify
the APL. 


Reported by Fogyreef on 2015-02-20 16:31:45

@navv1234
Copy link
Contributor Author

I'm not a coder. I can read it just fine, every condition is quite self explanatory.
& means "and", | means "or" and you evualate parenthesis first, like you would in math.

Reported by arexdramon on 2015-02-21 04:43:08

@navv1234
Copy link
Contributor Author

Chinese is self explanatory to those who can read it, and a mystery to those who can't.
There is a whole lot of people who have wonderfully analytical minds. Then there's
the rest of the world. Not everyone knows even the basic and/or symbology. I can read
assembly. Do I want to work in it? No. Does my wife. No^5.




Reported by Fogyreef on 2015-02-21 06:49:22

@navv1234
Copy link
Contributor Author

The Import-Automation tab covers part of what you want, it has a few pre-built lines
on a few classes (some are incomplete, The paladin one is probably one which will work
the best).

The main problem with going to a CLC style string, is that its very much simplified.
The big part of what makes the APL so powerful is the ability to create conditionals
for each and every ability based on buffs/cooldowns/resources/etc. By limiting yourself
to 1 shorthand per line you lock yourself out of adjusting any of those conditionals,
It often results in fairly substantial dps loss. For some classes where nothing is
ever on cooldown its just not an option.

Reported by nestar.simc on 2015-02-21 19:07:52

@navv1234
Copy link
Contributor Author

Also, with the example you gave at the top, That can be further split into two lines
for readability. 

actions.single+=/judgment,if=talent.empowered_seals.enabled&(seal.truth&buff.maraads_truth.remains<cooldown.judgment.duration*2)

actions.single+=/judgment,if=talent.empowered_seals.enabled&(seal.righteousness&buff.liadrins_righteousness.remains<cooldown.judgment.duration*2)

Reported by nestar.simc on 2015-02-21 19:10:33

@navv1234
Copy link
Contributor Author

Yeah, I try my best to keep the warrior action lists easy to read, but it's a tough
battle.

Reported by s.alexlowery on 2015-02-22 23:07:05

@navv1234
Copy link
Contributor Author

Thanks, Nestar. I may still not understand. Dividing a compound snippet of code into
two doesn't make my wife able, let alone willing, to digest a wall of code. She's not
Neo. :P

But, if you take:

/judgment,if=talent.empowered_seals.enabled&((seal.truth&buff.maraads_truth.remains<cooldown.judgment.duration*2)|(seal.righteousness&buff.liadrins_righteousness.remains<cooldown.judgment.duration*2))


and convert it to a Text Template that results in:

actions.single+=ES_Maraads_Judgement*2
actions.single+=ES_Liadrins_Judgement*2

Isn't that the same thing? Can't one build a library of high level templates that new
users can quickly understand? Adjusting a conditional? Add a template. 

Editing the template name:
actions.single+=ES_Maraads_Judgement*2
to
actions.single+=ES_Maraads_Judgement*3
calls the underlying APL code just as if you edited the APL directly, if I understand
text templates correctly.

It's why we work in interpreter languages instead of machine language.





Reported by Fogyreef on 2015-02-23 08:23:54

@navv1234
Copy link
Contributor Author

*whereas the template name is "ES_Maraads_Judgment*2"

Reported by Fogyreef on 2015-02-23 08:31:08

@navv1234
Copy link
Contributor Author

Personally I think an external solution would be a better option in this case.
Something that makes use of drop-down menu's for spell selection and you can add conditions
in the same way. Similar to what Weak Aura's/TellMeWhen do for GUI notifications.

As it is currently, sites like AskMrRobot export gear/talent setups, but leave the
APL blank/default. Having another site allow you to build a rotation to pair up with
that I think would do really well. That might even be something they would consider
doing.

Reported by nestar.simc on 2015-02-23 08:59:35

@navv1234
Copy link
Contributor Author

The right solution would be to have a visual representation of the conditions, so they
can be parsed and modified more easily, while keeping them in sync with the textual
representation. I could imagine several ways to do that, but they all involve a *lot*
of coding on our end. 
I will doodle some sketches and see whether I find something that works and is a feasible
amount of work.


Reported by dr.max.moellers on 2015-02-23 10:35:53

@navv1234
Copy link
Contributor Author

TLDR: I am really in favor of creating a human-readable version of the simc APLs, and
would be willing to contribute to the project.

Way before AskMrRobot was the site it is now, it started as a DK simulator (and we
added a couple other class/spec before we shifted to gear optimization). One of the
best things about our simulator was that we had an extremely intuitive and user-friendly
rotation editor that would just let people drag and drop abilities into an action priority
list and apply conditionals to those steps. It was graphical but also flexible enough
to make complicated priorities.

I would be willing to resurrect that UI on our website if there was someone who would
help create a way for us to convert that graphical priority into something that would
export to SimC. 

I understand that the current APLs can tweak out extra simulated DPS in many situations...
but they are certainly not human-readable by average folks. I am "sort of" a programmer
in that I do the html/css and some javascript for our site, and I even have a hard
time with some of the APL's. I looked at the shadow priest APL and just kinda laughed
and wrote it off as gaming a simulator with overly complicated actions that no human
would ever do. Then I looked up the priority on Icy-Veins where it described what to
do in English for dot-weaving and it was easy and very doable in raids. 

Reported by [email protected] on 2015-02-23 17:57:59

@navv1234
Copy link
Contributor Author

What exactly is CLC, and where can I find information about it? Can't find anything
on Wikipedia, and there's too much noise on google.

Reported by philoptik on 2015-02-23 18:15:03

  • Status changed: Accepted
  • Labels added: Type-Enhancement, Usability
  • Labels removed: Type-Defect

@navv1234
Copy link
Contributor Author

CLCInfo and it's close relative CLCRet display your next priority based on a priority
string you provide. 

http://wow.curseforge.com/addons/clctracker/

Reported by Fogyreef on 2015-02-23 18:27:29

@navv1234
Copy link
Contributor Author

This thread demonstrates the need for a bridge between the two systems:

http://www.mmo-champion.com/threads/1607924

Reported by Fogyreef on 2015-02-23 18:31:22

@navv1234
Copy link
Contributor Author

I would think one of the first steps for doing an UI for APLs would be to annotate all
action/expression construction in the simulationcraft source (with structured comments)
so that you can parse through it and collect the information automatically, instead
of manually doing all that work.

The initial annotation can be done by some enthusiastic person, but long term support
would ultimately fall to individual dev who actually add new actions / expressions.
That being said, they are not added that often so it should not be a problem.

Completely thinking out loud, for abilities you'd at least want the tokenised name
(so you can convert on the UI end to simc), a "harmful/helpful" flag, and probably
some ID to map it to an actual spell. Harmful/helpful can theoretically be parsed from
the actual c++ code with reasonable guarantee, but would be easier to have it in the
annotation. For expressions, you'd need a tokenised name, and potentially some sort
of info what it returns (0, 1 or some numeric range).

There are some additional issues such as class specific expressions, and in general
the way we construct expressions (there are .. shortcuts people can take), but that's
probably a worry for later times.

Reported by navv1234 on 2015-03-23 14:23:30

@navv1234
Copy link
Contributor Author

Or flip the cascading search for actions and expressions into a registration model.
 As part of sim and module (not player!) initialization, we register action/expr construction
objects.  This builds a database that can be queried for a variety of reasons, including
UI APL generation.

Similar things can be done for player (even sim) options.  Tag them appropriately,
and you can drop a ton of explicit setup from the gui... and perhaps the gui will not
lag the cli so often.

Reported by natehieter on 2015-03-23 14:57:13

@navv1234
Copy link
Contributor Author

Yes the register model would be a much better, but it requires some thought because
we have those shorthands in the expression system. Also needs a coder :)

Reported by navv1234 on 2015-03-23 15:03:11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants