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

Exalted system logic roll - possible API enhancement #198

Open
Kilitar opened this issue Oct 19, 2020 · 8 comments
Open

Exalted system logic roll - possible API enhancement #198

Kilitar opened this issue Oct 19, 2020 · 8 comments
Labels

Comments

@Kilitar
Copy link

Kilitar commented Oct 19, 2020

Hello,
My RPG use similar system like games based on Exalted RPG system rolls.

The core of this system is standard "D10 dice pool" against target number
Something what can be flawlessly done using your api with syntax "5d10>5".

Only difference is - if you roll 10, you get 2 sucsess points instead of 1.

Rolls using 5d10>5: 3-7*-6*-10*-1 = 3 sucssesses
Result I am looking for: 3-7*-6*-10**-1 = 4 sucssesses

Any chance to expand your system to cover Exalted RPG engines in the future?

Thank you.

@GreenImp
Copy link
Collaborator

Hi @Kilitar thanks for the suggestion!

I had a similar request a few years ago, #22. From that, success pools were implemented, but the double 10 wasn't, as it seemed a bit tricky to do. The library has advanced a lot since, so it should be easier to do now.

I've been trying to find some good information on the Exalted rules around the "10 counts as double", to see if it could also apply to other dice rolls, but it's proven difficult to find much. I have seen hints that it can sometimes apply to 7, 8, and 9 as well.
Do you have any references that you could link to / share with me?

What I'm trying to figure out is what exact functionality is required.
My current thoughts are that it should allow a compare point to be specified, so it's not restricted to the number 10 (Or max value of the die).
I'm not sure if it should allow specifying the value to increase by, or whether it should always be double.

Some thoughts:

A specific "double" modifier (dbl / dbl{cp})

// greater than 5 is success (`>5`), max roll (10) is double (`dbl`)
5d10>5dbl: [3, 7*, 6*, 10*dbl, 1] = 4

// greater than 5 is success (`>5`), greater than or equal to 7 is double (`dbl>=7`)
5d10>5dbl>=7: [3, 7*dbl, 6*, 10*dbl, 1] = 5

A generic "adjust" (Or similar name) modifier
Not sure of a good syntax for this, so this wouldn't be final.
Maybe something like adj{cp}:{operation}, where the operation is the equation to change the value by.

// greater than 5 is success (`>5`), multiply values of 10 by 2
5d10>5adj=10:*2: [3, 7*, 6*, 10*, 1] = 4

// greater than 5 is success (`>5`), multiply values greater than or equal to 7 by 2
5d10>5adj>=7:*2: [3, 7*, 6*, 10*, 1] = 5

The benefit of the second method is that it's a lot more flexible (Although I'm not sure what the output should look like).
The downside is that it's quite long and could be confusing.

If you're able to provide any more information on the exact rules, then I can try and figure out exactly how it will need to work.

@GreenImp
Copy link
Collaborator

Just thought of another option for possible notation.
It could be a multiply modifier, where you specify the amount to multiply by, and an optional compare point.

Multiply modifier (mul{n} / mul{n}{cp})

// greater than 5 is success (`>5`), max roll (10) is multiplied by 2
5d10>5mul2: [3, 7*, 6*, 10*mul2, 1] = 4

// greater than 5 is success (`>5`), greater than or equal to 7 is multiplied by 2
5d10>5mul2>=7: [3, 7*dbl, 6*, 10*mul2, 1] = 5

I'm not overly happy with the suggested output in any of the options; 10*mul2, 10*dbl both seem a bit verbose.

@Kilitar
Copy link
Author

Kilitar commented Oct 27, 2020

Yeah, you are right, I did not want to overwhelm the suggestion with all available options of Exalted rules and other similar systems and rules expansions. There are systems (like we used) which use only basic rules and do not implement anything "extended. Like in my case double for 10's is just what I need.

Basic:
D10 dice pool agains target number(TN). Everything above TN count as 1, but 10 count as 2 succsesses.

Extensions (for some Exalted-clone systems)
Lucky numbers: (for example 7) might count as double too, like if it was 10. Or like you pointed above (double everything above 7)
To not be so easy, the sucssess multiplier might be more than *2, it might be *3, *4 etc.
Another "tricky" point is - if lucky number is BELOW TN, it does not count at all.
(So if you roll 3D10 against TN 8 and have lucky number 7(*3), it does not matter. As in this case - 7 is bellow TN, it is allwayz fail and you get 0 from it).

Unlucky numbers:
Works very similar (and usually is applied to roll 1). Effect is, it deduct -1 (or multiplier) from total sucssesses.

To cover such complex "mismatch" like: 10d10 vs TN5, with 1 as umlucky -1, 10 as double, and 7 as lucky*3 would be something like : 10d10>5{1=-1;7=3;10=2}

I think optimal solution to cover all possibilities is just above. Allow to specify "dataset" of how to multiply each result. But it is long and might be confusing :( and in extreme case it may end like this: :P
10d10>5{1mul-3;2mul-2;3mul-1;4mul-1;7mul3;10mul2}
Which should result as rolls:
1 = -3
2 = -2
3,4 = -1
5 = 0
6,8,9 = +1
7 = +3
10 = +2

Or just stick with very basics (which should cover most of cases, in system used by me all of them) - double for top roll (6 for d6, 10 for d10), and consider add option to deduct -1 for 1 roll (fail)
5d10>5d 10=double sucs
5d10>5f 1 =fail (-1) sucs
5d10>5df (both above apply 10 for double, 1 for fail-1)

@GreenImp
Copy link
Collaborator

Hey, thanks for the feedback.

The Unlucky numbers are already possible with success / failure modifiers.

So using your example above:

10d10 vs TN5, with 1 as unlucky -1, 10 as double, and 7 as lucky*3 would be something like : 10d10>5{1=-1;7=3;10=2}

// anything greater than 5 is a success (+1), equal to 1 is failure (-1), everything else is zero
// Rolls; 1 = -1, 10 = 1, 2 = 0, 7 = 1, 9 = 1
10d10>5f=1: [1_, 10*, 2, 7*, 9*, 5, 3, 8*, 1_, 4] = 2

Just need to figure out the best way of handling the multiplication of numbers.

A multiplication modifier could work. Something like:

// max roll on die is multiplied by 2
10d10mul2

// equal to 10 is multiplied by 3
10d10mul3=10

// equal or greater than 7 is multiplied by 2
10d10mul2>=7

It could be tricky to get it to work with when using success modifiers, and without (So it works with normal rolls as well), but it should be possible.

I'm thinking of changing the notation output for success / failure modifiers, so instead of * for success, and _ for failure, it would be +, and -.
That way, the notation for the multiplication modifier could be something like *2. e.g.:

5d10>=7f=1mul2: [4, 8+, 1-, 10+*2, 2] = 2

Does that seem sensible, and cover the basics?

@Kilitar
Copy link
Author

Kilitar commented Oct 28, 2020

Yep, that covers the basics and yes, use + for success, - for failure and * for multiply looks like a good idea :).

@GreenImp
Copy link
Collaborator

GreenImp commented Nov 1, 2020

Okay, thanks for the feedback. I'll look at implementing something like this when I can.

PRs are always welcome as well :)

@GreenImp
Copy link
Collaborator

GreenImp commented Jan 31, 2021

Sorry for the delay. I've added a Multiply modifier, which is curently in the develop branch. I think it does what you need.

I'll be looking at getting it out in v5.0.0 soon.

@GreenImp GreenImp mentioned this issue Feb 3, 2021
2 tasks
@GreenImp
Copy link
Collaborator

I've had to remove this from the develop branch because it's having some conflicts with other notations, in terms of the visual flags it adds to the results.

The functionality is working though. I'm going to have a think about how best to handle the conflicts.

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

No branches or pull requests

2 participants