Here is an idea for a QoL feature … or rather an improvement of an already existing one:
Make a loop of 2 or more different actions/blocks!
This could be an upgrade of the Shadow Slave.
Since it can be quite powerful in terms of automation, it should probably cost more than the Shadow Slave itself. At least if it is the advanced version (see (far) below) and not just the simple one.
Abbeviations:
[LMB], [MMB], [RMB] … left/middle/right mouse button
0. (Already existing) Basic Loops
This feature would be a generalisation of something that already exists:
[Shift] + [LMB] on an action to loop it (as part of the Shadow Slave's queue).
In pseudo code this simple loop would look something like this:
UNTIL <EXIT_CONDITION> is fulfilled do:
complete action once
With <EXIT_CONDITION> being something like:
- maximum completions reached
- OR requirement(s) not fulfilled
1. Simple Extended Loops
Based on the pseudo code above it would look something like this:
UNTIL <EXIT_CONDITION> is fulfilled do:
try to complete 1st action once
try to complete 2nd action once
try to complete 3rd action once
…
try to complete n-th action once
To find a useful <EXIT_CONDITION> let us first consider some applications of such a loop.
Possible use cases
- Gather resource(s) and then immediatly use it/them if possible. Otherwise gather more and try again.
Here this feature prevents wasting time on gathering more resources than needed without requiring you to think too much about how much exactly you will need. Well not in every case, but more on that later …
Examples:- Generate Mana + Buff Physical Strength 2
- Harness Crystal + Evolve
- Kill <someone> + Refine Dark Magic
- Dig + Absorb Mana + Raise <minion>
- A more complex example:
Learn Physical Buff Skill + all actions to its right
+ Devour Fairy + all actions to its right
- Split some already obtained resources (and your time) between several actions without using [RMB] a bunch. (If you don't have enough resources/time to max them all.)
- So far the only real example available would be to split Essence between Essence Conversion Rate and Accelerate World Time (if both work as intended … some comments imply they don't) since both have decreasing cost-benefit efficiency (due to linear growth) and since both effects are being multiplied (essence/run x runs/time) a somewhat balanced combination of both should yield more Essence per minute than putting all Essence into only one of them.
- In general actions with a multiplicative effect would benefit from being completed alternatingly like some action that increases a base Stat and another that increases a Multiplier of that same Stat. E.g. one increases Power and another increases Power Multiplier (which currently does not exist in the game).
Thoughts regarding <EXIT_CONDITION>
- With these use cases in mind the loop should obviously not just end as soon as one of the actions can't be completed because of unfulfilled requirements.
- But if during one cycle of the loop none of the actions could be completed, then this wouldn't change in the following cycles since no time has passed.
- While the loop could be paused to wait for the player to do something (e.g. gather some resources manually) it might be better to simply end it and let the Shadow Slave continue with its remaining queue.
- What about an action reaching maximum completions?
Since this feature is meant to actually be useful, the consequences should depend on the kind of action.- A maxed resource-gathering action should allow the rest of the loop to continue.
- The same should be true for actions without any resource change.
- In many cases actions that use resources could be considered the "actual goal" of loops containing them, so they should be treated differently. But what if the loop did not contain any of those at the start?
Trying to deal with every corner case is probably futile, so my suggestion is a compromise between usefulness and complexity:
- Loops without resource usage
If at the time of definition/marking the loop contains NO action that uses resources, then <EXIT_CONDITION> is:all actions have reached maximum completionsORduring the last cycle no action could be completed- [Edit: The condition on the first line is actually only a very special case of the one on the second line and therefore superfluous …]
- Loops with resource usage
If at the time of definition/marking the loop contained at least one action that uses resources, then <EXIT_CONDITION> is:- all actions that use resources have reached maximum completions
- OR during the last cycle no action could be completed
Controls
- To mark actions as being part of such a loop the player could use something like [MMB] while holding [Shift].
Using [LMB] or [RMB] on an action while holding [Shift] would then end the loop and mark the first action after the loop.
Letting go of [Shift] should probably also end the loop. - Being able to edit (or just expand) a loop after ending it would most likely entail too much work, but defining several separate loops as being part of the Shadow Slave's queue should be possible.
Limitations
While there are some use cases for this simple form of the QoL feature it is far from perfect.
- It would not even be able to adequately deal with something as simple as "Harness Crystal" + "Grow Fangs" since the resource gain per loop would be wasteful.
In general having more resource gain than use per cycle can lead to wasted time. - Putting "Talk to Villager" and "Invade Village" in such a Simple Extended Loop doesn't work properly either since the latter prevents more completions of the former.
2. Advanced Extended Loops
These examples hint at a useful generalisation of Simple Extended Loops:
The ability to let some actions be executed more than once per cycle of the loop. In some cases this might be a concrete number of executions, in others it might simply be "as often as possible".
So it would basically be nice to get the ordinary functionality of [LMB] and [RMB] inside of a loop, too …
Controls
The same button (e.g. [MMB]) could be used for both functionalities (number of clicks, long click or something like that) or two new buttons, but it would be more intuitive to use [LMB] and [RMB] directly.
This could be done by using a modifier key different from [Shift], e.g. [Ctrl]. This means:
- While [Shift] is pressed:
[LMB] and [RMB] add actions to the Shadow Slave's queue. - While [Ctrl] is pressed: A loop is defined.
- [LMB] and [RMB] add actions to the loop's body (one cycle). (Without starting them directly since that would mess things up …)
- When [Ctrl] is released the loop is added to the Shadow Slave's queue.
- While both [Shift] and [Ctrl] are pressed the loop mode should probably have precedence.
The pseudo code would look something like this:
UNTIL <EXIT_CONDITION> is fulfilled do:
try to complete 1st action X_1 times
try to complete 2nd action X_2 times
try to complete 3rd action X_3 times
…
try to complete n-th action X_n times
Where X_i is defined as number of [RMB] clicks on that action or infinity in case of [LMB] click.
The thoughts regarding <EXIT_CONDITION> for Simple Extended Loops should apply here, too.
Possible use cases
- All examples for Simple Extended Loops work just as well or even better.
- Splitting some already obtained resources (and your time) between several actions can now be tuned to achive different ratios between actions.
- E.g. define a loop with 2 x "Essence Conversion Rate" and 5 x "Accelerate World Time" to split the Essence (more) evenly.
- Harness Crystal (1 x [RMB]) + Grow Fangs ([LMB] or 5 x [RMB])
- A more complex example: Define one big loop! (and nothing else)
- Select all actions needed for the Evolve ending by using [LMB] for every action on the direct path to "Evolve" (mainly "Grow Fangs") and [RMB] for the rest.
- Then your Shadow Slave should do all the work in "finding" a valid order of actually completing the actions … most cycles will consist of only 1 or 2 actions being completed.
- Such a run should also get you close to a perfect time. (If you select the actions in the right order it might actually be the perfect time since no time is wasted on unnecessary resources.)
- Note: Maybe this could also be done with one Simple Extended Loop since the Crystals not needed for "Grow Fangs" would be used for "Evolve".
- The Dungeon ending can probably be reached with one big loop, too. But you would need to be very careful regarding the Village.
- Note: With one big Simple Extended Loop this is not possible. So Advanced Extended Loops are truly more powerful … probably.
Closing remarks
- The Simple Extended Loops would probably be a bit easier to implement (no additional modifier key), easier to understand/predict and less OP. But they also feel a bit too limiting compared to the Advanced Extended Loops.
I would really like to see the Advanced Extended Loops in action. :-)
Or maybe you could add SEL as an expensive upgrade and AEL as a much much more expensive one? (Then no [MMB] for SEL, though. Maybe only one mouse button works for simple adding/removing to/from loop until unlocking AEL, too?) - Regarding player interaction:
The loops should pause just like the current Shadow Slave's queue whenever the player clicks an action and continue the current cycle when that clicked action is completed or can no longer be completed.
(I didn't explicitly state it above since it seemed obvious …)