NEWS

6E - "Reverse" character creation software?

  • 13 Replies
  • 3942 Views

skalchemist

  • *
  • Omae
  • ***
  • Posts: 258
« on: <10-07-19/1427:46> »
I have played around with the Excel Character generator: https://forums.shadowruntabletop.com/index.php?topic=29982.0  I think it is great!  I haven't been able to get the Java character creator working on my PC yet because I discovered I still had Java 8 on my system, far behind the Java 11 required.  https://forums.shadowruntabletop.com/index.php?topic=30296.0
 Downloaded that last night, I hope to get that working and play around with it tonight.  It seems really cool.

Something occurred to me while I was downloading Java though.  There could be another way to structure software such as this; conceivably an added feature to the Genesis software (I think it would be much more difficult in the Excel sheet).  You could set it up to conduct character creation in a kind of reverse order. 

In this framework, the user sets attributes, skill values, buys equipment, take qualities, etc., however they wish, ignoring the priority pick and karma costs.  The software then works "behind the scenes" to determine the optimal priority pick allocation plus karma spend to achieve that desired goal character.  Some (many/most?) characters will be impossible; the software would then generate an error message or similar indicating that no possible set of priority picks + karma can achieve that goal, essentially saying "character is legal/character is illegal".   

In a more fully featured version, the software would also provide messages/feedback indicating when the "optimal" choice for the goal had "space" in it left given the necessary priority pick selection plus Karma spend.  It seems certain that in many cases there will be more than one way to achieve a particular goal, so the feedback would look something like, "you can either spend 1 more adjustment point or 10,000 more nuyen".  It could also provide feedback in the opposite direction, as in "your character is currently illegal, you need to spend 1 fewer Adjustment point or 10,000 less nuyen".

There are 120 possible priority pick arrays, and 70 net points of Karma that can be spent, so the search space to determine the optimal choices would seem to be on the order of 70*120 = 8400 possible configurations.  That should be a fairly trivial search space for most modern computers, but I might be missing something there in terms of complexity. 

I could see the software working in an iterative fashion.  You make a bunch of choices then click the big "CHECK" button.  The software runs through the algorithm and then reports back on where you stand.   Or, depending on the efficiency of the algorithm and the computing power available it could running the algorithm after every choice, constantly updating the "background" priority picks and karma costs.

Questions:

* Has this ever been done before in previous editions? (since I have yet to run Genesis, its possible it already is available)
* Is this even a good idea? 
* Would you want to use it?
* Do you think it would be legal according to the RAW? 
* Does it violate the spirit of the RAW?

I accept that this idea would turn every player, in essence, into a "min-maxer".  All characters would be optimized given the character concept goals the player had in mind.  If a character is in any way "sub-optimal" (by some definition) it would be because the player for some reason made "sub-optimal" decisions in conceiving of the character.  No character would ever be "sub-optimal" just because the player was unable or unwilling to play around with the choices to find a more efficient way to achieve the same goal  I can see that this, in and of itself, could be a bad thing for many game groups.

skalchemist

  • *
  • Omae
  • ***
  • Posts: 258
« Reply #1 on: <10-07-19/1741:24> »
Having loaded up the Genesis software, I see that it goes partway to doing what I described.  You do set your Priority Picks up front, but once they are picked it does optimize points and karma to ensure you aren't spending things in an inefficient way.

taranion

  • *
  • Newb
  • *
  • Posts: 89
« Reply #2 on: <10-09-19/0306:29> »
Funny, one of the first issues reported for Genesis was the exactly what you described: https://bitbucket.org/rpgframework/shadowrun-6/issues/30/reverse-mode

In theory, this could be done. Genesis works by recalculating necessary investments every time you change something in your character. At the moment it does that by assuming your choice on priorities and karma converted to nuyen to be fixed. SInce we already have the basis of necessary investments being calculated, one could think of a mechanism that tests multiple combinations for the optimum of remaining karma and nuyen.

It would be necessary to implement this as an extra creation mode. The calculations will take a lot longer, so you wouldn't want this to happen as soon as you just e.g. raise an attribute. It would be more a kind of "I'm done - please check my character'. It also would need to take multiple systems (e.h. Sum-To-Ten, Point-Buy ...) into account, when they are published. All in all, this would be a great feature - but still a very complex and time consuming one.

skalchemist

  • *
  • Omae
  • ***
  • Posts: 258
« Reply #3 on: <10-09-19/1056:24> »
Funny, one of the first issues reported for Genesis was the exactly what you described: https://bitbucket.org/rpgframework/shadowrun-6/issues/30/reverse-mode

In theory, this could be done. Genesis works by recalculating necessary investments every time you change something in your character. At the moment it does that by assuming your choice on priorities and karma converted to nuyen to be fixed. SInce we already have the basis of necessary investments being calculated, one could think of a mechanism that tests multiple combinations for the optimum of remaining karma and nuyen.

It would be necessary to implement this as an extra creation mode. The calculations will take a lot longer, so you wouldn't want this to happen as soon as you just e.g. raise an attribute. It would be more a kind of "I'm done - please check my character'. It also would need to take multiple systems (e.h. Sum-To-Ten, Point-Buy ...) into account, when they are published. All in all, this would be a great feature - but still a very complex and time consuming one.
Taranion, thanks for the reply!  (BTW, your software is excellent, I was finally able to get the right version of Java on my PC and use it, very impressive!)

I've been thinking about algorithms that could do this work. On reflection, I don't think it would be that computationally intensive; I think it could be done after each change to the character (although I freely admit I am no expert on Java code efficiency).  Let me know what you think. 
-------------------------------------------------
Minimal priority pick/spend Karma first algorithm

With this algorithm, a few things are necessary in the app interface:

1) you have to be able to tab back and forth freely between the different screens (attributes, skills, qualities, magic, equipment, etc.)
2) there needs to be a "Priority" display at the top/bottom/side of the interface.  This would display the current set of priority picks and the leftover "space" in each category, as well as the current unspent Karma.

The algorithm initializes the character as if the player has chosen Priority E for all categories. 

The algorithm updates after every change to the character.  Each update involves three steps.

Karma step - the app spends as much Karma as possible (up to 50 points) in the following fashion:
1) buy any selected qualities (this may end up with a net positive amount of Karma)
2) buy all specializations with Karma
3) starting with the lowest valued skill/attribute, buy it with Karma instead of points

Adjustment/Attribute optimization step - this is what you are currently doing in your system, minimizing the total adjustment/attribute points spent.  I'm assuming this spends adjustment points first on this adjustment points can be spent on, then spends the attribute points.

Minimal Priority Pick step - the app then checks the totals spent so far in each category against the cut offs in the priority table, and displays the minimum priority pick necessary to get that total and updates the remaining "space" for that category.  For example, if the current character requires (based on the first two steps) 3 adjustment points, then the app interface would show the minimum Metatype Pick as D, with 1 adjustment point remaining.  If there are still at least two categories with the same pick, the warning message is displayed.

As the player adds stuff to their character (increasing attributes and skills, buying qualities, getting spells/adept powers, etc.) the app would update the Priority display.

The algorithm generates these messages (based on the current rules, a future system might require different messages):
* as long as any two priority picks are the same, a message like "Unbalanced Priorities" or similar is generated. 
* if at any point there is no E minimal pick left (i.e. all priority picks are D or greater), a message like "Overpowered, cut back on something" is generated.
* if ABCDE picks have been achieved, but there is still "space" in that category (e.g. some unspent skill points), a "Balanced Priorities, Incomplete" message is generated.
* if ABCDE picks have been achieved and all points/money have been spent (except for the allowed 5000 nuyen), then a "CHARACTER COMPLETE!" message is generated.
----------------------------------------------------------
As I said, this does not seem very computationally intensive.  It doesn't actually "optimize" the character priority picks, per se, but it does allow a player to much more easily optimize the picks for themselves by seeing, at a glance, how their choices matter in terms of necessary priorities. 

Character creation would proceed, I think, in one of two manners:
* Back off from target - the player goes crazy and makes their "Perfect" character.  Then they start taking things away until the get the "CHARACTER COMPLETE!" message.
* Start from scratch - the player incrementally adds things to the character, building the character up to "CHARACTER COMPLETE!"

taranion

  • *
  • Newb
  • *
  • Posts: 89
« Reply #4 on: <10-09-19/1457:47> »
Wow, what a detailed idea, thanks. But I admit, after I spent several hours today to find a problem in my attribute optimizer that failed to detect the optimum under certain circumstances, it looks too simplistic to me. Still, I get where you are heading.
Have you tried your algorithm idea on the archetypes?

skalchemist

  • *
  • Omae
  • ***
  • Posts: 258
« Reply #5 on: <10-09-19/1655:10> »
Wow, what a detailed idea, thanks. But I admit, after I spent several hours today to find a problem in my attribute optimizer that failed to detect the optimum under certain circumstances, it looks too simplistic to me. Still, I get where you are heading.
Have you tried your algorithm idea on the archetypes?
I'm not exactly sure what you mean by "tried on the archetypes".  What would I be trying? 

I have set up a Google Sheet that does vaguely what I am describing above, I'll send you a link by PM.

skalchemist

  • *
  • Omae
  • ***
  • Posts: 258
« Reply #6 on: <10-09-19/1701:11> »
Also, to be clear, I don't think the algorithm truly "optimizes" character creation.  It would still be possible to make bone-headed choices that the algorithm couldn't help you avoid. 

What I do think is:

* characters would be more optimal than a user would create naively using the priority pick system with guesses about about they care about most, and...

* characters would be at least as optimal, with less time spent, as those created in, for example, the Excel Generator by fiddling back and forth with priority picks and point spending.

EDIT: I am NOT a professional coder, barely an amateur, and have no experience with Java.  I am confident I could code this algorithm in Visual Basic (say, in Excel) given some time, but translating that into your app would be far beyond my skills.  So if you say "it won't work, no way"  I will believe you 100%. 
« Last Edit: <10-09-19/1704:21> by skalchemist »

taranion

  • *
  • Newb
  • *
  • Posts: 89
« Reply #7 on: <10-09-19/1719:57> »
I'm not exactly sure what you mean by "tried on the archetypes".  What would I be trying? 

I meant if you have tried to use your algorithm on the example characters from the CRB. Trying to find out possible combinations or priorities that might have lead to that character.

Regarding your PM: I got it and had a very short look at the sheet, but I will have a closer look at it the next day.

I also understood "optimize" as "cost-efficient", not in a way to decide if something makes sense.

And you don't have to be a coder to think of an algorithm, so I don't doubt you there. I guess your idea would lead to a suitable priority combination, but I am not yet convinced that it would find the most cost-efficient combination. But without trying to walk it through a few examples or start coding it, I could not tell.

adzling

  • *
  • Guest
« Reply #8 on: <10-09-19/1729:40> »
Having loaded up the Genesis software, I see that it goes partway to doing what I described.  You do set your Priority Picks up front, but once they are picked it does optimize points and karma to ensure you aren't spending things in an inefficient way.

hero lab does this as well

skalchemist

  • *
  • Omae
  • ***
  • Posts: 258
« Reply #9 on: <10-09-19/1824:27> »
I'm not exactly sure what you mean by "tried on the archetypes".  What would I be trying? 

I meant if you have tried to use your algorithm on the example characters from the CRB. Trying to find out possible combinations or priorities that might have lead to that character.
Well, on that front, I designed that Google Sheet I sent you for exactly that purpose at first; trying to figure out what priorities the archetype characters used.  I did it on a few of them, and was able to figure out which priorities were used in the few cases I tried.  The thing that is missing from that sheet is the "Karma First" aspect of the algorithm, which would have made it a lot easier.  But it was useful for that purpose.  Also, I only used the archetypes that had the least amount of gear, because I had to add up the value by hand.

gargaM0NK

  • *
  • Newb
  • *
  • Posts: 90
« Reply #10 on: <10-09-19/1914:15> »
In this framework, the user sets attributes, skill values, buys equipment, take qualities, etc., however they wish, ignoring the priority pick and karma costs.  The software then works "behind the scenes" to determine the optimal priority pick allocation plus karma spend to achieve that desired goal character.  Some (many/most?) characters will be impossible; the software would then generate an error message or similar indicating that no possible set of priority picks + karma can achieve that goal, essentially saying "character is legal/character is illegal"

I've calculated the minimum bonus karma spent for whatever Skills, Specializations, and Attributes (which Adjustment Points made slightly more complicated from prior editions) the user selects in my character sheet, but not the Priorities themselves.

I'd be curious to see how you calculated optimal Priorities in your sheet.

skalchemist

  • *
  • Omae
  • ***
  • Posts: 258
« Reply #11 on: <10-10-19/1009:01> »
In this framework, the user sets attributes, skill values, buys equipment, take qualities, etc., however they wish, ignoring the priority pick and karma costs.  The software then works "behind the scenes" to determine the optimal priority pick allocation plus karma spend to achieve that desired goal character.  Some (many/most?) characters will be impossible; the software would then generate an error message or similar indicating that no possible set of priority picks + karma can achieve that goal, essentially saying "character is legal/character is illegal"

I've calculated the minimum bonus karma spent for whatever Skills, Specializations, and Attributes (which Adjustment Points made slightly more complicated from prior editions) the user selects in my character sheet, but not the Priorities themselves.

I'd be curious to see how you calculated optimal Priorities in your sheet.

Ah, why not, here is the link to the google sheet: https://docs.google.com/spreadsheets/d/1-gQqHIIIqrHQIZJe-isCiUr9l6qGDwOUkeufvJin0YI/edit?usp=sharing

I only hesitated to share it publicly because its clearly only designed for my personal use at the moment, more an exploration of a concept than a truly functional thing.  You'll have to make a copy before you can play with it.

Also, as I mentioned above, I don't think the algorithm above truly "optimizes" priority pick selection, in the sense of true mathematical optimization.  But I think it would allow for a player to more naturally arrive at more optimal choices given some target character concept (that is, a set of desired attributes/skills/gear/magic/etc.) in less time.

gargaM0NK

  • *
  • Newb
  • *
  • Posts: 90
« Reply #12 on: <10-10-19/1924:29> »
Also, as I mentioned above, I don't think the algorithm above truly "optimizes" priority pick selection, in the sense of true mathematical optimization.  But I think it would allow for a player to more naturally arrive at more optimal choices given some target character concept (that is, a set of desired attributes/skills/gear/magic/etc.) in less time.

Thanks for sharing! I think I see now. The goal is to let players pick Attributes, Skills, etc, and then have the tool generate a Priority that fits those requirements, right?
Closer to the 4A generation, where you buy what you want until you run out of points.

skalchemist

  • *
  • Omae
  • ***
  • Posts: 258
« Reply #13 on: <10-12-19/1207:04> »
Also, as I mentioned above, I don't think the algorithm above truly "optimizes" priority pick selection, in the sense of true mathematical optimization.  But I think it would allow for a player to more naturally arrive at more optimal choices given some target character concept (that is, a set of desired attributes/skills/gear/magic/etc.) in less time.

Thanks for sharing! I think I see now. The goal is to let players pick Attributes, Skills, etc, and then have the tool generate a Priority that fits those requirements, right?
Closer to the 4A generation, where you buy what you want until you run out of points.
That sums it up.