Author Topic: Suggestion: Allow movement of powers and slots between levels for planning  (Read 4694 times)

mykos1

  • Underling
  • *
  • Posts: 6
First off, thanks for a remarkable utility -- implementation of the following suggestion would probably require a lot of work (depending on the software design) and I would certainly understand if the developers or the majority of the forum team did not feel that it was "cost" effective.

When I am designing a character, I like to first select the powers I want then to select how many slots each power should have then decide at what level I what to acquire each power and same for each slot. 

To facilate this approach, I would like to request that functionality be implemented which allows powers to be cut from its current location (leaving a hole or shifting all following powers) and inserted before another power (shifting all following powers down) or replacing a given power which would then be considered cut to be dropped in elsewhere.  Such cutting and pasting should include all slots and enhancements already assigned to the power.  Any violations of level restrictions (moving a power before it is available or such that its has slots which have levels that are lower than the level at which the power is selected should be indicated (color?) but not prevented (I am a fan of showing validation errors so that the user can correct them rather than preventing them since preventions often requires undoing and redoing things to get past the validation).

Also, I would like to recomment that it be possible to add slots to powers without specifying the level and then selecting the levels of the slots at a later time so that the user can first figure out where he wants to go then how to get there.  Further, even when the slot levels are assigned, it should be possible to remove the level from one slot and move it to another.

Thanks for your consideration.

DeProgrammer

  • Titan Staff
  • Elite Boss
  • ****
  • Posts: 350
    • DePro Depot
Note: I'm kinda keeping Mids' internal design in mind while choosing what I think is the best approach for these items.

To facilate this approach, I would like to request that functionality be implemented which allows powers to be cut from its current location (leaving a hole or shifting all following powers) and inserted before another power (shifting all following powers down) or replacing a given power which would then be considered cut to be dropped in elsewhere.  Such cutting and pasting should include all slots and enhancements already assigned to the power.

I'm thinking both the option to swap the two powers and the option to shift powers.

Any violations of level restrictions (moving a power before it is available or such that its has slots which have levels that are lower than the level at which the power is selected should be indicated (color?) but not prevented (I am a fan of showing validation errors so that the user can correct them rather than preventing them since preventions often requires undoing and redoing things to get past the validation).

When a user attempts to put a power at a level that isn't possible, I would handle it by asking if they'd like to act as though they had put it at its lowest possible level instead, or if they'd rather cancel the action. Asking can get annoying, so I would like to put the ability to select those options automatically via the Configuration.

Anyway, I'll see what I can do with this tomorrow, and I hope I'll be thinking more clearly and come up with a better approach than what I've got here.

mykos1

  • Underling
  • *
  • Posts: 6
Wow -- thanks for the quick turn around -- I wasn't really expecting it.

I kind of figured that the approach you mentioned would be more likely than the one I proposed -- large internal software changes require lots of regression testing which is no fun. 

Would it be possible to also exchange the levels of two slots without losing their contents (enhancements), if allocated?  i.e. your response mentioned swapping powers but not whether you would consider swapping the level of slots.  This would allow me to just click on the number of slots I want for each power (even choosing enhancements), then rearranging the slot levels to a more realistic progression for leveling up (i.e. I might know that i want to 5 slot a power at max level so I would give it the next 4 slots available -- then later I would decide that I might only need 1 acc and 2 endrdx as soon as possible and the other 2 slots could be assigned in the 30's and 40's so I could swap these two slots with ones which need to have slots before the 30's and 40's).

NOTE:  it is entirely possible that I am the only one who thinks this way; if you find that you don't understand why I am asking for this then it is likely you should ignore this aspect of the request.

DeProgrammer

  • Titan Staff
  • Elite Boss
  • ****
  • Posts: 350
    • DePro Depot
Swapping slots' levels would probably be trivial. Reorganizing all slots' levels the way Titan Sentinel does, in fact, is a part of the solution I have in mind.

Well, here are the possible situations I'm looking at here, for dragging-and-dropping powers. Have I missed any?

Definitions and generic notes:
Swap = two powers are swapped. The powers in between are unaffected by the transition.
Move = one power is moved to the position of another. The power being replaced, as well as all powers in between, are shifted in the direction of the power being moved.
Shift = cascading swaps. Shifting down means powers are moved to a lower level, starting with the lowest. Shifting up means powers are moved to a higher level, starting with the highest.
"Cancel" is always a possible action, so it is not listed below.

Power is moved or swapped too low
Example: swap a travel power with a power taken at level 2
Possible actions: move/swap power to its lowest possible level.

Power is moved too high (some powers will no longer fit)
Example: move a Primary power from level 35 into the level 44 slot of a character with 4 epic powers
Possible actions: search backwards from 41 until you find a power not at its min. level, then move in place of that one
Note: the case of swapping a power too high is ignored because the power being replaced is being swapped too low

Power is moved or swapped too high for slots (slots are for lower levels)
Example: power taken at level 2 with two level 3 slots is swapped with level 4, where there is a power with one slot
Possible actions: remove slots, rearrange all slots in build

Power is moved too high for slots (impossible to have enough slots at that level)
Example: 6-slotted power at level 41 is moved to level 49
Possible actions: remove slots

Power being replaced is swapped too low
Example: power taken at level 4 is swapped with power taken at level 14, which is a travel power
Possible actions: remove the power being replaced (overwrite rather than swap)

Power being replaced is swapped too high for slots (slots are for lower levels)
Example: power taken at level 8 is swapped with power taken at level 2, when the level 2 power has level 3 slots
Possible actions: remove slots, rearrange all slots in build

Power being replaced is swapped too high for slots (impossible to have enough slots at that level)
Example: pool power taken at level 49 is swapped with a 6-slotted power at level 41
Possible actions: remove slots



When powers are shifting down:

Power being shifted down is at its minimum level
Example: power taken at level 4 is moved to level 8 when the power taken at level 6 is a pool power
Possible actions: lock its position and shift other powers around it

All powers being shifted down are at their minimum levels (or otherwise cannot be shifted as low as requested)
Example: move a Primary power from level 35 to level 44, when the level 38, 41, and 44 powers are at their minimum levels
Possible actions: remove the power in the destination slot (overwrite rather than move)



When powers are shifting up:

Power being shifted up has slots from lower levels
Example: power taken at level 8 has level 9 slots, and a power is being moved from level 12 to level 6, so the 8 power is shifting to 10.
Possible actions: remove slots, rearrange all slots in build

Power being shifted up has impossible slots (impossible to have enough slots at that level)
Example: power taken at level 47 has 6 slots, and a power is being moved from level 49 to level 44, so the 47 power is shifting to 49.
Possible actions: remove slots

mykos1

  • Underling
  • *
  • Posts: 6
I think you got most of them, though I think of them a bit differently:

[1] Swap - as you said
[2] Insert - insert an "blank" power cascading down all subsequent powers in the manner you stated.  This would be a Shift down in your terms but I think that, from a user point of view, Insert is more clear.
[3] Cut or Delete - remove a power cascading up all subsequent powers - Shift up in your terms.
[4] Paste/insert - as insert, but replace the blank power with a copy of the most recently cut power if it has not already been pasted.   

What you call Move is what I call cut follow by a paste/insert as a single operation (given the complexity of adjusting slot levels and the fact that you would never want to paste a single power twice, it will probably be better to implement it as a single integrated operation rather than as a cut follow by a paste/insert).

[5] Paste/replace - paste a cut power on top of an existing power replace the previous power (for the same reasons as [4], cut and paste/place should probably be a single operation). This is the case that I am not sure you covered.

Net resuilt - I think the operations needed are:  Swap, Move, Insert, Delete (with no paste), and Replace.

I think you have all of the problem cases covered though I have been awake for too long and can't really contribute anything regarding resolutions at this time -- more later.

NOTE:  I have only recently become aware of Sentinel (another cool application, BTW) so I am not sure how it reorganizes slots.  I know that I have to create a spreadsheet with the powers down the side and the levels at which slots are acquired across the top so that I can adeuately tweak the levels at which slots are assigned to powers.  I almost never assign consecutive slots to the same power except for certain powers that need to be slotted ASAP.

PS - one thought that did occur to me was that you might want to allow users to lock some powers so that they will be immune to shifting.  You could then automatically lock powers that can not be promoted or demoted because of limits and prevent users from unlocking them if they can not be moved because the power level would violate some restriction but they could unlock them if the slot levels violated a restriction but they were willing to lose slots in this case.

DeProgrammer

  • Titan Staff
  • Elite Boss
  • ****
  • Posts: 350
    • DePro Depot
I'm not sure about the necessity of cut-and-paste abilities, but if it's really necessary, I would treat it as a Swap, basically using an invisible power slot (let's say it'll be level 1) as the destination. Actually, I think it should be a visible extra power slot, so you can actually see what you've got on the "clipboard". Either way, I like the idea of clicking-and-dragging the power somewhere else in order to put it on the "clipboard".

Having an Insert separate from the Move doesn't seem too important--if you're going to put another power in a build, you need to have space for it, which means you'll have (or can create with one click) a blank power slot, which you could then Move where you want the pasted power to be, which would cause the powers to Shift. But if I went about creating cut-and-paste via drag-and-drop, it would use the same functions as Swap and Move. This adds at least one situation to my list. (Also, the Move from the clipboard would require detecting whether to shift up or down by searching for a blank power slot in the build.)

Sentinel essentially assigns slot levels starting with the lowest power and working up to the highest and starting with the lowest level of slot and working up to the highest. This provides the most downward mobility for slots when working in Mids'.

Allowing the user to lock powers' places might be a lot of extra work (eww, more GUI cramming and yet MORE button combinations). As an easy way out, I could avoid Shifting a power up if it's at its minimum level, because that sort of placement would lead me to assume that it's extra-important to the user. That ought to handle most cases.



Additional situation for copy-and-paste as described above:
Moving power from clipboard would require a power to be deleted
Example: after moving the level 18 power to the clipboard, you add a pool power in its place, then you try to
Possible actions: move last power in build onto the clipboard (so they can decide afterward which power they really wanted to get rid of)

Other coding notes:
Must never Swap/Move/Shift the secondary power that you're forced to take at level 1, even though it would internally appear that the second primary power could go there.
Should not allow the user to add slots that the clipboard is using, but if it's on a visible clipboard, they could remove them from there.

I'm thinking let's not plan on the copy-paste functionality at this point.  :P
« Last Edit: January 15, 2011, 04:37:06 PM by DeProgrammer »

mykos1

  • Underling
  • *
  • Posts: 6
My point about cut and paste was that was the way I would have aproached it initially (cut and paste being standard editing features and familiar to most users).  Your proposal is perferable since you won't want to paste multiple times and you will want to keep the operations as tight as possible to avoid losing the initial slot information  i.e. you want to know where things are going before you actually remove anything so as to minimize the number of powers actually impacted -- a "pure" cut/paste/insert would, by default, impact all of the following powers which would be overkill in almost all cases.

The idea of a clipboard slot where you can move something temporarily seems good to me.  You may want to limit this to swap only though to avoid the extra shifting that would result from Moving something to/from the clipboard -- the "detecting whether to shift up or down" that you mention seems complex but I am not sure I understand your concept exactly but clipboard moves would see to me to reintroduce cut/paste problems I mention above.

The point you make about Insert v. Move is also good.  

While the automatic slot number assignment algorithm you mention would not be optimum from my perspective, I would be hardpressed to come up with anything better and the ability for the user to swap slots allows for correction.

As far as locking powers and the UI changes involved, I was thinking of having a "power movement mode" and using color to indicate which powers can't be moved at all, which can't be moved up, which can't be moved down, and which can be moved freely.  Similarly, color could be used to indicate which slots might have problems, if desired.  Probably still too much trouble.

Germ of an idea for power slot level assignment (brainstorming here -- not thoroughly thought out):

[1] Record the relative levels of each slot to its power before moving (i.e. if it is taken at the first opportunity after aquiring the power, then that is +1, if after the next power, then +2 and so on).

[2] Make a list the slot numbers which are currently in use by powers to be impacted or which are currently unused by any power.

[3] Use the relative levels as a priority in assigning the available slot levels:  first assign all +1's that can be satisfied by +1's, then assign any +1's that couldn't be assigned (probably because the power was shifted up and moved into a region where fewer slots were available between power selections) then assign +2's which can be assigned to +2's, then the remaining +2's, then +3's and so on.

*edit*
Note that a slot having priority means that it gets the first available slot level from the list made in [2] which is of a level that could legitimately be assigned to it.
*/edit*

The idea is that it isn't the lowest number power that gets its slots assigned first.  Rather, the priority is based on how soon after the power was selected that the slot was assigned.  

Just a thought.
« Last Edit: January 15, 2011, 11:20:08 PM by mykos1 »

DeProgrammer

  • Titan Staff
  • Elite Boss
  • ****
  • Posts: 350
    • DePro Depot
A little update:

Power swapping was surprisingly really easy to do, and since moving is comprised of swapping, that should be pretty easy, too. While coding the power swapping, however, I realized that there's actually a really simple (partial) solution to invalid slot levels.

If you are swapping two powers (assuming their slot levels are valid in the first place), you can swap the levels of their slots as well. Example:
Power A, placed at level 41, has 3 slots (41, 42, 42). Power B, placed at level 44, has 2 slots (44, 45). If you swap these powers, each first slot's level is automatically changed because it must match the level of the power's placement. That changes the slot levels to (41, 45) and (44, 42, 42). Then, since 42 is an invalid slot level for a level 44 power, and there is a matching slot in the other power (guaranteed to be valid for this level, since it CAME from this level), you can swap the first 42 with the 45, making the slot levels (41, 42) and (44, 45, 42). The remaining slot doesn't have a matching slot, so it must remain 42 or be removed.

Thus, this solution works completely for any movement of a power with X slots to a higher level where a power has X or more slots, which is the same as moving a power with X slots to a lower level where a power has X or fewer slots. The solution only works partially in the given example because the lower power has more slots (and these extra slots are not valid at both levels), and this must be handled separately: by removing the slot, notifying the user, or rearranging all slots in the build. (While it is surely possible to automatically rearrange only as many slots as necessary, it seems like a lot of work to save a small audience from needing to manually move a small number of slots.)

mykos1

  • Underling
  • *
  • Posts: 6
You know your users better than I do so I would have to yield to your experience in the matter.  Out of curiousity, in what language is Hero Desiger written?

DeProgrammer

  • Titan Staff
  • Elite Boss
  • ****
  • Posts: 350
    • DePro Depot
It was written in Visual Basic .NET, although a portion of it has been ported to C# recently.

mykos1

  • Underling
  • *
  • Posts: 6
Re: Suggestion: Allow movement of powers and slots between levels for planning
« Reply #10 on: January 18, 2011, 07:55:44 PM »
While I'm sure that you have other problems/features to address, if you still find the slot numbering question interesting, another possible approach would be to introduce a phantom max level (say 1000) which has an infinite number of slots and then use the approach that you mentioned 2 posts back using this max level if you find that you need a level and don't have one.  Then you can assign available slots to anything which still has max level or allow the user to do it or use the fixed renumbering technique you propose.  If this method is implemented, then max level should probably be displayed as "TBD" or "?" or ...