A downloadable tool for Windows

Download NowName your own price

McDie is a node-based visual tool for developing models of dice probabilities. The results are shown in graphs, and the underlying data can be exported in CSV format for further analysis in other 

It is designed to help game developers speedily analyze various types of dice mechanisms and understand the probabilities of different outcomes.

This is an early release. Certain features have not been implemented yet. Use CHECK FOR UPDATES function in the Help menu to download the latest.

McDie is PAY WHAT YOU WANT. However, 100% of payments will be donated to New Voices In Gaming, a charity which provides scholarships and support to game designers from underrepresented groups. There is also a link to donate to NVIG within McDie is you'd prefer to try it out first and donate later.

StatusIn development
CategoryTool
PlatformsWindows
Rating
Rated 5.0 out of 5 stars
(5 total ratings)
Authorgengelstein
TagsDice, Game Design, probability

Download

Download NowName your own price

Click download now to get access to the following files:

McDie Setup.zip 2 MB
McDie User Guide.pdf 828 kB

Development log

Comments

Log in with itch.io to leave a comment.

Just wanted to write up some UI/useability ideas I had. Many of these are inspired by how unreal's blueprint editor works:

1. Right click anywhere to bring up a list of all nodes with a text input at the top that filters the list as you type. Makes adding the node you want very quick

2. Drag an input/output into empty space to bring up a list of nodes that could be connected to that input/output, again with a progressive filter input.

3. The ability to rename nodes is cool, but the fact that you then lose visibility of what type of node it actually is worries me - maybe there should be a separate 'label' field for the user to enter info rather than replacing the name of the node type. Or at least put the node type in the tooltip.

Anyway, with or without these it's a great tool, nice work!

I'm taking the pool span of 2d6 and plugging it into a histogram and getting an output of 100% zero. Is this a bug or am I misunderstanding how some of the nodes work? I would expect a distribution of values between 0 and 5.

Can you post/send me a screen shot of your network? I should be able to debug it from there.

OK - I figured out what's going on. There's a bug in the Pool Span node, where it requires 3 or more dice to work instead of two.

I've fixed it, but in the meantime you can just use the SPAN node which takes two numeric inputs. Here are two examples with the fixed POOL SPAN node on top, and the SPAN node on two dice on the bottom. Both histograms are the same.

Thanks for the quick reply! Also just wanted to say, if you're ever looking for contributions on the programming side I would be interested - I'm guessing it might be C#, which I'm familiar with?

It is c#, with WPF on the front-end. I may take you up on that :)

It seems that if you try to connect multiple pools to something taking a pool as input, it just silently ignores one of the pools.  I was wondering for a long time what was going wrong for a more complicated setup.  I can't seem to be post a picture.

It would also be nice if I could see the numbers at each node to figure out where things are going wrong

Deleted 1 year ago

If you hover over a node after a run it will show you the value at that node. Clicking the single run button is a good way to get to this quickly.

Sorry for the long delay in responding!

I really would enjoy using this but its sad that its only made to run on windoz. A javascript or Unity-based, even online and open to contributions (trough GitHub) version would kick ass! Anyway, thanks for making such a tool available, even if I can not use it.

(1 edit)

Hoping some intrepid McDie master can help me with this. I've tried, but I'm really stuck with a few aspects of this. I can write it out logically, but I can't figure out how to spit out the histogram I want and don't know where else to ask.

The basic idea for the combat system I'm working on is that an attack die pool is rolled against the highest die of the defense pool aiming to meet or exceed it, the color of the attack die (green / yellow / red) determines how many successes the attack die scores (1 / 2 / 3 respectively), and doubles / triples / quads rolled that are successes add 2 / 4 / 6 hits respectively. In detail:

  1. An attack die pool is made of xd6 + xd8 + xd10 (each die can be green, yellow, or red)
  2. A defense die pool is made of 1-3 d6's
  3. Both pools are rolled. The defense value is the highest defense die rolled.
  4. Each [green / yellow / red] attack die scores [1 / 2 / 3] hits if it is equal to or greater than the defense value.
  5. Additionally, each set of [doubles / triples / quads] among attack die that hit score an additional [2 / 4 / 6] hits.
  6. Histogram: average hits scored by a given attack / defense dice pool.

This is the .mcd file for what I have so far, I have no clue how to incorporate the different die types, nor the additional hits for rolling sets. Any help at all would be hugely appreciated!

(1 edit)

I need to think about this, but I don't believe McDie can handle dice having another attribute besides different #'s of sides and faces (e.g. color in your case).

It's possible this might be handled by the new card/cube/tile system I'm working on adding, which let's you add arbitrary 'attributes' (like color) to elements.

Since each die size can be any color, how did you want the model to set that up? Are there certain configurations? Is it random? Are there always one of of each type on a pool?

So I basically just wanted to be able to, via integer, determine how many of each die are in the attack pool. We have 9 die total (d6/8/10 in green/yellow/red), so the pool would be made up of some number of these. Just being able to output histograms from various pools would be helpful enough. Being able to compare, say, the number of successes of 

[2 green d8s + 1 green d10 vs 1 defense die] 

against 

[3 red d6's vs 2 defense die] 

would be *super* helpful.

OK - As noted I don't think McDie can do this now. But let me think about if/how this could be accommodated.

Question - Is the "defense value" the sum of the defense dice? Or the highest defense die?

The highest of the rolled die. (That part I figured out at least.)

Thanks so much for looking into this Geoff, longtime listener of Ludology btw, always impressed by your thoughts on design.

(1 edit)

Thanks for the kind words! To encourage this kind of behavior, here's a file that should get you most of what you want. You can specify any number of red D6, D8, D10, yellow D6, D8, D10, green D6, D8, D10, and defense D6's. It does NOT do the bonus stuff. 

I didn't 100% vet this, but I think it should be right. 

https://drive.google.com/file/d/1_HQRUsq72dFo_BHu3_ZbfhlbSB0xQkoe/view?usp=shari...

Please let me know how it looks!

EDIT: Quick note - I just looked at your original post and see that ties should go to the attacker. Here they go to the defender. To fix that just take out the +1 I add to the Defender highest die.

(+1)

Great program, thank you! I'm less than an hour into it, but it seems like just what I need for some board game design analysis. I was going to create my own simulation in Google Sheets, but this is definitely more fun! I haven't donated yet, but I will.

One minor request - "A > B" and "A < B" would be useful nodes. I know I can simulate "A > B" with "A <= B"-->"Not", but it's a little clunky.

(+1)

Good ideas! I will look to add those in the next release.

(+1)

Awesome, many thanks!

Hey Geoff, I love this program and have been using it a lot recently! Super intuitive and well put together. Thank you for making it :)

One feature request I have is the ability to lock the scale on histograms so that they match each other. I want to compare bell curves with quite different ranges but keep them to scale with each other to help visualise the difference.

(+1)

Oh - interesting idea! I will take a look at how to do that. I guess people would need to pick and choose which ones they want linked.

I see a lot of value in this. Is there any way to do an `If T/F then #P1\X2 else #P2\X2`? I feel like this would simplify some processes I'm trying to model. A case switch would be even better!

there are SWITCH nodes that should do what you want. Let me know if that helps!

Ooooh, RTFM, amirite? I swear I read through all the nodes in the quick start guide. Thanks, I'll have a tinker!

Yeah, that's what I needed! Managed to get Pathfinder 2e and Pokemon Tabletop United damage modelled pretty easy. Thanks for the help!

This is an amazing tool!

However, I'm having a little problem.

I'm trying to model a sort of an inverted bell curve distribution by using a die pool and a coin flip (basically, I want to set up a die pool, separately roll a single die, and if it comes out even, send the highest roll from the pool to the histogram, otherwise send the lowest roll from the pool). I think I need to use a "Switch Integers" node for this, but while this node is mentiones in the user manual, I can't find it in the actual program. I've tried using the search function and no nodes with the name "switch" come up. 

Weird. They should be there.

Maybe you're not running the latest version? Try running the Updater (under the Help Menu). The latest is 2021.061

Hi Geoff.  Nice tool, I'm enjoying some discovery sessions with it.  Couple of requests:


1. The A modulo B node always comues up as A multiply B instead.  Bug? I was trying to explore some digital root probability - can't get anywhere without a working Modulo, I think.

2. Can you add a general loop function so we can do non-pool stuff?  Not sure exactly how you'd indicate which nodes are to be repeated though...

1. Yup - just checked and it is bugged. It's been corrected and will be in the next release (hopefully this week or early next).

2. I'm having difficulty envisioning what you want to do. Can you give an example?

Thanks Geoff.   I was actually planning to use a general loop for calculation of digital root.  I got intrigued by one of the entries in Buttonshy's latest 18-card game submission contest.

do {X = INT(A/10) + A%10} while X > 9

So it would take in an integer and output an integer? That wouldn't be too hard to do.

Well... It would take the integer and the condition and would somehow have to link to the operations that get repeated.

And do...while is different to while...do, you might want to implement both.

Apologies for coming at this as a programmer used to working with single values - I think the tools is meant more as mathematical operations on sets.  I have never really learned that.

just downloaded, thanks for making this. Heads up that the first thing I did was create an integer node and hit f4 to duplicated it, and the program crashes. This is reproducible. Win 10.

I can't duplicate this. Can you confirm the version you are running?

0.1.2021.224

Just tried again and same behavior. Open program, f3 for new integer node, select it and f4 to duplicate, ~1s pause and closes program.

The latest version is 404, not 224. Those bugs were fixed in the later version.

Something got screwed up in the versions on itch. The version that was posted was an older version. It definitely was 404 at some point - not sure how it got screwed up. But however it happened, I'm sure it's my fault.

You should be able to update from the internal update (Help/Check for Updates). If that doesn't work for some reason, just download it again. Latest should be up here now. Sorry for the inconvenience.

Thanks much!

SUGGESTION (UX): the App should prompt to save if the file is dirty. Currently, I can add a Node, quit the App and I don't get prompted to save. (Yikes!)

I've got a new version must about ready to go with some new features, primarily loops. Would you be interested in doing some testing on it before it goes live?

Absolutely! I'd be glad to help.

Build 310: Cut/Copy/Paste only pastes one time. I can't copy a Node and paste it 5 times so that I have 6 copies.

(On the plus side, SPLIT looks cool, though I don't have a Use Case for it just yet, and the undo/redo works as expected, though without a visible history it gets a little "hit and miss" 😉)

(1 edit) (+1)

Actually it will paste repeatedly. The issue is that it pastes repeatedly at the same location, so it's not obvious. You can drag the nodes to new locations. I'll add this to the fix list.

LOL! So it does! I saw the first copy was offset and assumed that as the others weren't, that they were not present. TIL!

(1 edit)

Careful for users: ctrl+s does not save anything. Also if you select "save as" to overwrite a previous file it does not work either.

Both of the above happen with no error messages so you think you saved something you spent the last 20 minutes creating but no!

If you do "save as" and then create a new file it works by the way. It just doesn't allow itself to overwrite.

I'll take a look at this immediately. Obviously this should not be happening.

OK, I checked and cannot duplicate this error. Can you give more details about the steps you take to create this problem?

Sorry, didn't get a notification for this message. Let me check with the new version...

Doesn't seem to be a problem - likely it was user error since my columns included "date" and not "date modified".

(5 edits)

My D&D stat rolling involves dropping low but if there's a tie for the lowest die and the lows are below 3, drop one and reroll the others until they're any higher number on the die. (so a 4d6 roll of 6,1,1,1 would drop a single 1 and reroll the other two 1s until they're anything higher, such as 2,4) Is it possible to model that in McDie?  It sounds like I'd need to break apart the "remove lowest" node in McDie into its separate logic and reconstruct it to work in a different way.

I plan on adding  "Extract" nodes that I think will do what you want. So you can extract certain dice, reroll them, and then merge them back into the main pool.

One simple thing that's missing is double-clicking .mcd files should open in the program. Right now I could associate the file to the .exe and it'll open the program but I'm then forced to ctrl+O to the .mcd file anyway.

Great point! I completely forgot about that. I’ll add it in. 

Great idea (and great job actually developing it and not just stopping at the idea). With so many questions about probabilities, this is bound to help a ton of people.

There seems to be some rounding mistakes, at least in the video.
First example:
Two dice,
41% chance first is higher
16% change they are equal
41% chance second is higher

They add to 98% (not necessarily a problem), it seems that you rounded each one down, but for example 1/6 is closer to 17% than 16%, similarly 15/36 is closer to 42% than 41%.

At 7:58 you discuss the probability of getting no 6s with 4 exploding dice.
The program says 47.98%

However, (5/6)^4=0.482, which I believe should be the probability (four dice not rolling 6, no explosion).


Another suggestion, making the y-axis start from 0. I think images such as this


makes it seem like B is several times larger than A, when it is not the case.

Is there a wiki/documentation for this anywhere? Some of the node types are not entirely clear what they are for and what they do.

I am working on node documentation as we speak. Agree that it is sorely needed!

Impressive! :)


On a side note out of curiosity since I am also a VS C# developer. What control are you using for the flowchart? DLL snooping suggests this: https://www.codeproject.com/Articles/182683/NetworkView-A-WPF-custom-control-for...

(1 edit)

Yup! Good sleuthing. I learned a lot about WPF by figuring out what made that tick and changing it for my own purposes - and I’ve been using WPF for years. 

cool stuff! seems pretty robust

FEATURE REQUEST: any chance that the stats (average etc) can be added to the CSV export of the histograms?

(+1)

I figured it would be easy to just add those as a calc from inside Excel or wherever you are bringing into. And in general I want to keep the CSV files just the rows, rather than have 'special' rows.

fair enough! I'll consider that "declined" 😉

FEATURE REQUEST: I have a need to exclude a specific value from my Pool results. In my case, I want to filter out the 0 results from a pool (they are results that equate to FAIL/MISS) so that I can report the average result of SUCCEED/HIT, rather than the average result across all HIT/MISS outcomes. 

This is similar, but not the same as, a model that allows rerolls of "result X", which also might prove useful to some models.

(+1)

I am planning on adding "Extract" nodes, which will create a new pool based on some criteria. This should do what you want.

Excellent! That's really good news, thanks 👍

BUG: VISUAL/UI

The A≤B and A≥B Logical Nodes have the same label on the Node in the model (they are both labelled "A≥B")

General Issue: Nodes that take two Nodes as inputs work only on two nodes. Not 1 node, not 3 nodes, two nodes. The UI for linking nodes is not similarly constrained. I found this out because my model (for Oathsworn: Into the Deepwood see here) uses a pool of any number of dice from any combination of 4 different custom dice pools. 

In my model, I not only need to merge 4 pools, but I need to generate a "Fail/Miss" outcome when 2 or more dice in the merged pool come up 0. I thought a Switch Pool would work, but I had to create a dice pool that always generated a 0 result because the Switch wouldn't work without a 2nd pool input. I had thought I'd be OK because I use the output of several of the model's nodes as input to multiple other nodes. It turns out that multiple outgoing links from a connection point are not handled the same way as multiple incoming links to a connection point. It makes sense, now I understand the model, but the UI isn't constrained to fit that model.

exploding pool doesn't appear to work with custom dice. The sum looks to be the face number instead of the face value.

Thanks - I will look into this. 

Thanks for making this.

Any chance of a Linux version?

Unlikely. My hope is to get a browser-based version going, but my skills in that area are basically non-existent. So either I need to educate myself or find someone interested in porting it.

I do plan to open source the current codebase at some point, but I need to educate myself more about that process as well.

Quick question and note:
1. Any plans for making the code available? 

2. The discord link in the readme gave an "expired invite note"

Thanks!

(+2)

I do ultimately plan on making it open source, but I need to research that a little bit.


Working on the discord issue - sorry!

Try this link: https://discord.gg/Z2g6GZyZYR

Sorry about that!

(1 edit)

Hmmm... I was just working on a model for use with Oathsworn: Into the Deepwood and I hit a problem. The game uses 4 types of die

White: 0,0,1,1,2,2*

Yellow: 0,0,1,2,3,3*

Red: 0,0,2,3,3,4*

Black: 0,0,3,3,4,5*

The "*" results explode. One may roll a mixture of any number of any combination of colours of dice. So the Black and Red dice are easier to model, because they explode on a single, non-duplicated value. But the White and Yellow dice are a bit of a problem because they have two faces with the maximum value, but only one face "explodes". To complicate matters, any time two or more dice roll a 0, the result is a "fail" (call it 0). Any suggestions on how to model this? Frankly, I'm stumped (though I'm not very smart either 😉

Hmm... not sure how I could make a node that would make that intuitive. I do plan to add Symbol Explosion, but you can't currently combine numbers and symbols on a single die. And that's what you really need.

I'll ponder.

(1 edit)

Thanks Geoff! I did model it over on anydice.com, but that hurt quite a lot too! The combination of 2+ zeroes resulting in an outcome of zero, with only one face of duplicated numbers being exploding, just blew my mind (though it's part of why I backed the KS - I'm a sucker for mechanisms that I find interesting)

OK! I just posted a new update which includes a new node called EXPLODE DICE BY SIDE. You can choose one or more die faces to explode on, rather than values. Just type the side numbers into the box, separated by a comma. For example, if you want to explode on sides 5 and 6, enter "5, 6". 

This will also take symbol dice, and explode those based on the side.

You could model the two faces with maximum value but only one explodes by running another die only on those values and those dies that essentially flips a coin to see whether to explode or not.

Awesome tool! I was wondering whether it would be possible to have a Explosion Depth limiter. I know the point of exploding dice is the fun of having them explode to the infinite degree, but sometimes it might be useful to be able to limit the number of times a die can explode.

Expolosion depth is actually capped internally at 20, to make sure we don't hang. I can look at a way to expose that.

Cool, thanks

Yes please, a configurable explosion depth would be nice. It was exactly the scenario I was looking to explore with this program.