Humblemonk / DiceMaiden

Dice bot for Discord
Apache License 2.0
125 stars 56 forks source link

Game System Specific Roll for The Dark Eye #139

Open nice-dice opened 3 years ago

nice-dice commented 3 years ago

First of all: DiceMaiden is really cool! 🥇

I love to play "The Dark Eye". Within the game you often have to roll three 20-sided dice that have to be over individual thresholds. Actual I have to sent three commands to do it, for example: !roll 1D20 t12 !roll 1D20 t10 !roll 1D20 t14

It would be really great, if I could do it in one command, such as: !roll 3D20 [t12, t10, t14] So it has to be an unsorted tally, where the first die has to match t12, the second t10 and the third t14 And it would be perfect, if it would give me three results (as if I sent the three single commands above)

ThatGuyWhatsMadeofCheese commented 3 years ago

!roll 1d20 t12 + 1d20 t10 + 1d20 t14 seems to be what you want. If the Result is 3, it means all three passed their individual checks. So the only thing it doesn't do is tell you which rolls passed/failed, just how many of them passed. I'm not familiar with the dark eye, but do you need to know which one(s) pass?

nice-dice commented 3 years ago

Thanks for the fast response and the advice!

But I didn't explain it exactly. In the game the maximum is called, not the minimum! We use the upper commands, because it matches best what we need. But a positive Result means you missed the challenge.

What we need is indeed the differences to the thresholds (and a little bit more ... )

To explain the game background: Your gaming char has abilities that have scores,

Those abilities are scored with numbers (usually between -20 and 20). The major case is an ability with a not negative number. At first let's restrict on this. (negative is special)

Abilities always base on three basic properties. Basic properties are scored with numbers from 1 to 20.

So if the gamer likes his char to save a moose from drowning in a torrential river, (yes - they do strange things :D ) the master of the game may say: "Prove it!" Then the gamer has to roll the dice, one 20 sided die for each basic property. The die must show at most the score in the basic poperty, but you could use the ability score to save it, for example:

Agility(12) die=13 -> missed (1 over) -> save it with 1 swim-ability point. 5 left -> Result so far: 5 Fitness(10) die=14 -> missed (4 over) -> save it with 4 swim-ability points. 1 left -> Result so far: 1 Physical Strength(14) die=8 -> matched -> Result so far: 1

Result: 1 So the char could save the moose - even faster than expected. (Maybe the start of a love story ;) )

But things could go worse, for example:

Agility(12) die=15 -> missed (3 over) -> save it with 3 swim-ability point. 3 left -> Result so far: 3 Fitness(10) die=17 -> missed (7 over) -> coudn't save it -> -4 left -> Result so far: -4 Physical Strength(14) die=8 -> matched -> Result so far: -4

Result: -4 if even the Physical Strength die would have missed, the Result get's more negative, e.g.: Physical Strength(14) die=19 -> missed (5 over) -> Result so far: -9 Result: -9

The char will drown, if nobody else could help. (maybe the moose lends him a helping hoof ... ;) )

That's the major case and it would be great, if you could implement it! A command could be (DSA is the german abbreviation for the dark eye - das schwarze Auge):

!roll dsa 12 10 14 tal6

For an ability test with an ability score (talent) of 6 and basic properties with scores of 12, 10 and 14. Zero or a positiv result is a success and an negative result is a failure.


The minor and rarely used case is with negative ability scores.

A negative swimming-ability score means your char isn't really able to swim. So a gamer that hasn't lost his sanity (er, well ... rofl) wouln't sent his char swimming.

But he may be forced to do so. Let's say he has a swimming-ability score of -2. Then EVERY die has to absorb -2, e.g.

Agility(12) die=9 -> matched (three under, only two under needed) -> Result so far: 0 Fitness(10) die=8 -> matched (two under, two needed) -> Result so far: 0 Physical Strength (14) die=11 (three under, only two under needed) -> Result so far: 0 Result: 0

If you are inable to swim, this is the best result you could achieve. You stay at the surface.

But things can go worse, e.g. Agility(12) die=13 -> missed (maximum was 12-2=10) -> Result so far: -3 Fitness(10) die=9 -> missed (maximum was 10-2=8) -> Result so far: -4 Physical Strength (14) die=17 (maximum was 14-2=12) -> Result so far: -9 Result: -9

The char will drown like a stone.

A command could be:

!roll dsa 12 10 14 tal-2

ThatGuyWhatsMadeofCheese commented 3 years ago

I actually quite like that as a way to incorporate multiple stats into a single check! Every now and then me, or someone I play with will try to come up with a way to do that in D&D, and this is the best idea for it I've seen. I guess having the whole system built around it helps.

As for doing this in DiceMaiden, right now you could do the roll in one command, (although you'd still have to do the math yourself,) by typing:

!roll ul 3d20 !Agility 12, Fitness 10, PS 14, Swimming 5

Which would produce something like:

nice-dice Roll: [1, 14, 11] Result: 16 Reason: Agility 12, Fitness 10, PS 14, Swimming 5

The ul stands for unsorted list, and does what it says. Everything after the ! is optional, just to show which roll is for which stat.

That being said, I'll try to get around to making an alias for it when I have time, unless someone else wants to tackle this one. Considering the fact that the wiki for the game includes the sentence, "It is the most successful role-playing game on the German market, outselling Dungeons & Dragons," I figure it should get added.

nice-dice commented 3 years ago

Great, that you like to do it!

Indeed DSA is very successful and is growing on the global market!

But I don't understand your example: nice-dice Roll: [1, 14, 11] Result: 16 Reason: Agility 12, Fitness 10, PS 14, Swimming 5

Why is the Result 16? (Agility) 12-1 = 11 (Fitness) 10-14 =-4 (PS) 14-11 = 3 so 11-4+3 = 10 10+5 (Swimming) = 15 Shouldn't the Result be: 15?

ThatGuyWhatsMadeofCheese commented 3 years ago

Sorry for the confusion!

This wasn't an example of how the alias would work, but rather, something DiceMaiden can do already, just to not have to make three separate commands. So it doesn't check for the differences at all, but at least the three rolls are right in one place, and quicker to send.

When the alias for The Dark Eye is done, it'll do all the checking for you, but I don't know when it'll be implemented, so I wanted to give you something that you could use now, even if it's only a little better than what you were doing already.

As for why the result wasn't just the total, like normal, after I copy/pasted it, I noticed the roll had been [5, 5, 6], which wouldn't show well that it was unsorted, so I rerolled and just changed the tally, but forgot to change the result for the new roll. The result of that roll would have been 26, but you can just ignore it anyway.

I hope that made sense, I just woke up~

nice-dice commented 3 years ago

Ah, now I got it.

When you really do the alias for The Dark Eye, it would be cool, if you implement a second very often used command.

Fights in the game really last long. First you try to attack somebody, so you have to roll a 20-sided die and stay within your attack-ability (e.g. 12). The one attacked tries to parry, so he has to roll a 20-sided die within his parry-ability (e.g. 10). If the attacker succeeds and the defender fails, the attacker rolls some 6-sided dice (e.g. 2) maybe with some extra points (e.g. +3) to know what damage he achieves.

To be able to handle it in one command would really speed up the game. Something like !roll dsa at12 pa10 2D6 +3

And the result could be: Roll [10, 12, 4, 5] Result: 12 The first die is 10 <= 12 so the attack succeeded. The second die is 12 > 10 so the parry failed. The two six sided dice show 4 and 5 so the damage is 4+5+3=12

Or perhaps: Roll [15, 12, 4, 5] Result: 0 The first die is 15 >12 so the attack failed. The second die is 12 > 10 so the parry failed - but it doesn't care because the attack already failed. The two six sided dice also don't care, they will do no harm.

And the last: Roll [10, 9, 4, 5] Result: 0 The first die is 10 <= 12 so the attack succeeded. The first die is 9 <= 10 so the parry also succeeded and repelled the attacker. So the two six sided dice don't care, they will do no harm.

ThatGuyWhatsMadeofCheese commented 3 years ago

Update: I've been too busy to think about doing more code. Don't know when I'll have time again, sorry.