Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account

Can it be done? API to create automated table lookup

To start, I'm afraid I know nothing at all about Javascript, so this is officially Dumb Question territory. That said, the DC Heroes / Blood of Heroes system requires the use of the tables below, which I find prohibitively cumbersome in the course of play. I wondered: would it be possible to create an API script to allow one to enter in the appropriate values from the charts below, then return the value from where they intersect? I have coded this before in a very different style of scripting, but it doesn't translate at all into JS.
1582470136
GiGs
Pro
Sheet Author
API Scripter
I've answered a question a lot like this before and the answer is yes. I dont have time to code it right now, but feel free to poke this thread to remind me if I dont in the next couple of days. How do the values get used from the table get used? I'm wondering what happens when you get an N or A result in the second table. Are the results just printed out to chat or used in another calculation?
Thanks for the reply! Ideally, the results from the action table would be fed as a modifier to values from the character sheet into the result table. The values from the result table just need to display in chat. If the first part isn't possible (or convenient), then it would still be pretty helpful even if it just output the numbers to chat. 
In case this is helpful... Action Table data values:  6 11 13 15 18 21 24 28 32 36 40 45 50 55 60 65 70 75 80   5  9 11 13 15 18 21 24 28 32 36 40 45 50 55 60 65 70 75   4  7  9 11 13 15 18 21 24 28 32 36 40 45 50 55 60 65 70   4  5  7  9 11 13 15 18 21 24 28 32 36 40 45 50 55 60 65   3  4  5  7  9 11 13 15 18 21 24 28 32 36 40 45 50 55 60   3  3  4  5  7  9 11 13 15 18 21 24 28 32 36 40 45 50 55   3  3  3  4  5  7  9 11 13 15 18 21 24 28 32 36 40 45 50   3  3  3  3  4  5  7  9 11 13 15 18 21 24 28 32 36 40 45   3  3  3  3  3  4  5  7  9 11 13 15 18 21 24 28 32 36 40   3  3  3  3  3  3  4  5  7  9 11 13 15 18 21 24 28 32 36   3  3  3  3  3  3  3  4  5  7  9 11 13 15 18 21 24 28 32   3  3  3  3  3  3  3  3  4  5  7  9 11 13 15 18 21 24 28   3  3  3  3  3  3  3  3  3  4  5  7  9 11 13 15 18 21 24   3  3  3  3  3  3  3  3  3  3  4  5  7  9 11 13 15 18 21   3  3  3  3  3  3  3  3  3  3  3  4  5  7  9 11 13 15 18   3  3  3  3  3  3  3  3  3  3  3  3  4  5  7  9 11 13 15   3  3  3  3  3  3  3  3  3  3  3  3  3  4  5  7  9 11 13   3  3  3  3  3  3  3  3  3  3  3  3  3  3  4  5  7  9 11 Result Table data values: +1  A  1  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  +1  A  2  1  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  +1  A  3  2  1  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  +1  A  5  4  3  2  N  N  N  N  N  N  N  N  N  N  N  N  N  N  +1  A  8  6  4  3  2  N  N  N  N  N  N  N  N  N  N  N  N  N  +1  A 10  9  7  6  4  3  N  N  N  N  N  N  N  N  N  N  N  N  +1  A 12 11  9  8  7  5  3  N  N  N  N  N  N  N  N  N  N  N  +1  A 14 13 11 10  9  8  6  4  N  N  N  N  N  N  N  N  N  N  +1  A 18 17 16 14 12 10  8  6  4  N  N  N  N  N  N  N  N  N  +1  A 21 20 19 17 15 13 11  9  7  5  N  N  N  N  N  N  N  N  +1  A 24 23 22 20 18 16 14 12 10  8  6  N  N  N  N  N  N  N  +1  A 27 26 25 23 21 19 17 15 13 11  9  7  N  N  N  N  N  N  +1  A 30 29 28 26 24 22 20 18 16 14 12 10  8  N  N  N  N  N  +1  A 35 34 33 31 29 27 25 23 21 19 17 14 12  9  N  N  N  N  +1  A 40 38 36 34 32 30 28 26 24 22 20 18 16 13 10  N  N  N  +1  A 45 43 41 40 38 36 34 31 28 26 24 22 20 17 14 11  N  N  +1  A 50 48 46 44 42 40 38 36 34 32 30 27 24 21 18 15 12  N  +1  A 55 53 51 49 47 45 43 41 39 36 33 30 27 24 21 18 15 13
1582545922

Edited 1582589118
GiGs
Pro
Sheet Author
API Scripter
Making those into text I can copy is very helpful, thanks. Dave said: Thanks for the reply! Ideally, the results from the action table would be fed as a modifier to values from the character sheet into the result table. The values from the result table just need to display in chat. If the first part isn't possible (or convenient), then it would still be pretty helpful even if it just output the numbers to chat.  I'm sure its possible but I'm unclear on the flow and how the values are used. That might not matter, but if you can tell me more about what the values represent and how they are determined and used (just the basic roll system for the game described) it might help. Do you need both action value and resistance value calculated in the same step, or do you do them as separate operations?
First of all YAY for DC Heroes. It's such a fun system. I've only played the pared down Batman RPG version, but have the Blood of Heroes book as well. The first table, the Action Table, is used to determine if there is a sucess or not. It has an acting value and and opposing value. A roll above the target value is a success.  Example: The Batman attacks The Joker. Batman has a Dex of 10 and The Joker has a Dex of 4. Batman needs 5 or more on 2d10 to hit. However if the result is a) more than the target value and b) more than 11 the roll can affect the result on the result table. If the roll is both a hit and above 11 you look right on the column and note how many columns you move until you get the number you rolled. Example: The Batman rolled a 12. Looking at the table we see that we shift three columns left and get to 11. The fourth number is 13. Then you look at the Result Table. Now we use an Effect Value vs a Resistance Value and locate the value. This is the result unless there were any column shifts from the Action Table roll, in which case we move left the same number of shifts. A = All, the full Effect Value and each shift left of A is another +1. Example: The Batman has a Strength of 5 wich is his Effect Value and The Joker has a Body of 3 wich is his Resistance Value. The result table gives us 2. However since Batman had three column shifts the result is +1. Meaning the end result is 6 (5+1) and the Joker is knocked out, since his Body is only 3. Not the easiest of systems, but a lof of fun. Anytime you get the same number of both dice you reroll and add to the total, so with a bith of luck you can get very high totals.
1582633767
GiGs
Pro
Sheet Author
API Scripter
Thanks for that description. That's very helpful. Though I had to reread several times to figure how how those A and +1 results work. :) Do you get an extra +1 for each extra shift? The extra information on rolling up if you get a double is handy too. I'm pretty sure you can't handle that with a standard dice macro (normal exploding rules only look at single dice, and you cant compare one die to another and also  add them together). But you can implement it in a script.
You get an extra +1 each time you shift past the A column yes. In the example above a roll of 13 on the Action Table would give a result of 7 RAPS. There is alwasy a bit of head scratching involved when playing DC Heroes :) The original game had a wheel you could use to quickly find the values you need, but an API would be even better :)
Marius has done a better job describing it than I likely would have! (Thank you!)
I just thought I'd check in on this once more to see if anyone had figured out if it could be done. If not, then hey, at least I gave it a shot. Thanks everyone for your replies!
1584133090
GiGs
Pro
Sheet Author
API Scripter
I have this partly done, but my spare time has been invested on a big project (the Torg Eternity sheet in another thread). i should (hopefully) have some free time to finish this up next week.
I really appreciate the help!
I'm definitely interested in see how this turns out! 
1586160814
GiGs
Pro
Sheet Author
API Scripter
Thanks for the reminder. A roll20 bug got in the way ( this one ), and i forgot about it while waiting for a response. I guess that bug is not going to be fixed, like a few others. I wanted to use that technique to handle the needed dice rolls (since exploding dice on matches isnt possible in normal dice rolls). There is another way to do this, actually simpler coding, but I dont get to roll dice in chat. I have to handle it within the script. I'll see about getting time to finish up this script.
1586168541
GiGs
Pro
Sheet Author
API Scripter
On the attacking row, the lowest attribute score is 1. On the defence column the lowest score is 0. Why the difference?
On the Action table, one cannot take an action (attack) with a value of 0 because that means one has no ability to act. However, an opposing value (defense) can be zero because it is possible that no defense can be offered. For example, a brick wall has an opposing value of 0 because it cannot dodge. On the the Result table, the 0 or "A" (meaning All of the effect possible is applied) column can be reached if the result on the first table is sufficient to cause a "Column Shift," which increases the effectiveness of the action/attack. If it reaches 0 ("A"), then the entire effect is applied without any mitigation from the target's Resistance Value. My best understanding is that they will need to be two different functions (one per table), and the degree of success of the first result would then indicate the CS number. I'm realizing that if you aren't familiar with MEGS, this may be a little confusing. I can try to explain in more detail if that's helpful?
1586174865

Edited 1586175129
Dave
Pro
The relevant inputs are Action Value, Effect Value, Opposing Value, Resistance Value, and the result of the dice roll. In effect, the Action Table tells you the Target Number for the roll. If the value of the dice roll is greater than the TN, the roll succeeds. The degree of success is measured in what is called "Column Shifts." The Column Shifts are the number of columns to the right of the 11 or the Target Number on the table (whichever is greater) that one must count over to reach the result of the roll. So, if the TN is 15 and the roll is 18, that is one CS. However, if the TN is 7 and the roll is 9, there are 0 CS because the roll was not greater than 11. If the TN is 13 and the roll is 14, 14 still falls into the same column as 13, so there are no CS. So, what is most important that the first table gives as a result is A) was there success (Y/N) and B) how many CS were achieved. The result (success + number of CS) is used to read the Result table. If success is achieved, one looks up the intersection of the Effect Value and the Resistance Value on the Restult Table. If there are no CS, then that is the final result (which can be 0, represented by "N" on the result table*). If there are CS, then one shifts that many columns to the left from the intersecting EV and RV. * A result of 0 indicates a successful hit but no damage dealt; for instance, if Jimmy Olsen punches a brick wall, it cannot dodge, but it most likely takes no damage from his punch. It really is complex, I realize. Thus, honestly, my desire to automate it. I understand the algorithm, but I just don't know the syntax.
1586207619

Edited 1586208352
Boz
Pro
Hey, man. I read your table lookups problem just now, and admittedly, I have no idea of the system, but if these are just lookups, you can do that without any coding - I think. I'm no developer, and have no knowledge of coding, but if you already know value X and value Y, and all you're looking for is value Z where they meet, then you can do that through chat with something like a rolling series of embedded power cards. If you're talking about making the rolls and the lookup all in one then yeah, this extremely simplistic approach won't work. But if you're happy to make the roll, and enter that result into a power card, you can have it return the required intersecting value. You'd have to break it up into a bunch of ranged value cards. There's a couple of hundred possible results on each table there and from what I've found, power cards don't like more than about a 100 conditions per script. But you can embed them so you're only seeing the next card you need for the next lookup each time. That may be a really stupid idea. I'm not the deepest thinker on earth. And it doesn't automate the entire process. But if all you're trying to do is remove the need to look up the result on physical tables - you can almost certainly do that.
Interesting idea. I'm not familiar with Power Cards. Is that a script?
1586235312

Edited 1586235380
Boz
Pro
Dave said: Interesting idea. I'm not familiar with Power Cards. Is that a script? Yeah, it's in the Roll20 API Script Library. Made by some very clever cats. I run my entire campaign with Powercards, ChatSetAttr, and Token-Mod. My players don't even use character sheets anymore. For a lookup - and someone like Keith or The Aaron would be able to give you a much savvier method I'm sure - all you'd be doing is setting conditions in your script to give you answers based on the combinations. So for your table, when you activate the macro you'd be asking ?{Acting Value|} and ?{Opposing Value|}, and with that you get back the intersecting value. Because you would have written conditions in there such as: -- ?? ?{Acting Value|} == 11 OR ?{Acting Value|} == 12 AND ?{Opposing Value|} <= 2 ?? (whatever your intersecting value is) And obviously you'd need line for each variation. So it'd take some time. But with a decent text editor you'd probably whip through. Plus, there are limits. Dunno what they are but after about a hundred conditions the scripts start freaking out and triggering your API to shut down. No big deal. Mine's shut down half the week with the rubbish I try to force through it. You look like you have about 200 outcomes on each chart, so you'd want 2 scripts I reckon. But that's cool since you already know what your inputs are for the lookup and aren't relying on random rolls, So you might have a [Acting Values 1-30], and [Acting Values 31-60] as scripts and just fire off the one you need any given time.I won't crap on about the rest. If you don't get any useful automation ideas from anyone and want to have a look into it, let me know and I'll throw some ideas at you and see if anything sticks. 
1586236971
GiGs
Pro
Sheet Author
API Scripter
It's funny you should make that suggestion Boz. I decided after my post yesterday when looking over the script again that I would work on two modes: 1) to just display the result of the table comparisons, 2) to do the whole roll from start to finish. I'd started on doing #2 then realised that wasnt what was originally asked for and I might be going too far.
Hey, don't get me wrong, being able to do the whole shebang as a single operation would be absolutely amazing . XD
I clearly did not understand PowerCards when I looked at it. I do use the other two in every game I run, though. Boz said: Dave said: Interesting idea. I'm not familiar with Power Cards. Is that a script? Yeah, it's in the Roll20 API Script Library. Made by some very clever cats. I run my entire campaign with Powercards, ChatSetAttr, and Token-Mod. My players don't even use character sheets anymore. For a lookup - and someone like Keith or The Aaron would be able to give you a much savvier method I'm sure - all you'd be doing is setting conditions in your script to give you answers based on the combinations. So for your table, when you activate the macro you'd be asking ?{Acting Value|} and ?{Opposing Value|}, and with that you get back the intersecting value. Because you would have written conditions in there such as: -- ?? ?{Acting Value|} == 11 OR ?{Acting Value|} == 12 AND ?{Opposing Value|} <= 2 ?? (whatever your intersecting value is) And obviously you'd need line for each variation. So it'd take some time. But with a decent text editor you'd probably whip through. Plus, there are limits. Dunno what they are but after about a hundred conditions the scripts start freaking out and triggering your API to shut down. No big deal. Mine's shut down half the week with the rubbish I try to force through it. You look like you have about 200 outcomes on each chart, so you'd want 2 scripts I reckon. But that's cool since you already know what your inputs are for the lookup and aren't relying on random rolls, So you might have a [Acting Values 1-30], and [Acting Values 31-60] as scripts and just fire off the one you need any given time.I won't crap on about the rest. If you don't get any useful automation ideas from anyone and want to have a look into it, let me know and I'll throw some ideas at you and see if anything sticks. 
GiGs said: It's funny you should make that suggestion Boz. I decided after my post yesterday when looking over the script again that I would work on two modes: 1) to just display the result of the table comparisons, 2) to do the whole roll from start to finish. I'd started on doing #2 then realised that wasnt what was originally asked for and I might be going too far. Now YOU are someone who can clearly create stuff. I hope you can get it working. That's good for everyone! I'm more of smash things until they break or bend to my will type of guy. I have manipulated virtually everything that needs to be done mechanically in an RPG into some form of chatset tokenmod or powercard script. I love them! 
1586241397
GiGs
Pro
Sheet Author
API Scripter
Boz said: Yeah, it's in the Roll20 API Script Library. Made by some very clever cats. I run my entire campaign with Powercards, ChatSetAttr, and Token-Mod. My players don't even use character sheets anymore. For a lookup - and someone like Keith or The Aaron would be able to give you a much savvier method I'm sure - all you'd be doing is setting conditions in your script to give you answers based on the combinations. So for your table, when you activate the macro you'd be asking ?{Acting Value|} and ?{Opposing Value|}, and with that you get back the intersecting value. Because you would have written conditions in there such as: -- ?? ?{Acting Value|} == 11 OR ?{Acting Value|} == 12 AND ?{Opposing Value|} <= 2 ?? (whatever your intersecting value is) And obviously you'd need line for each variation. So it'd take some time. But with a decent text editor you'd probably whip through. Plus, there are limits. Dunno what they are but after about a hundred conditions the scripts start freaking out and triggering your API to shut down. No big deal. Mine's shut down half the week with the rubbish I try to force through it. You look like you have about 200 outcomes on each chart, so you'd want 2 scripts I reckon. But that's cool since you already know what your inputs are for the lookup and aren't relying on random rolls, So you might have a [Acting Values 1-30], and [Acting Values 31-60] as scripts and just fire off the one you need any given time.I won't crap on about the rest. If you don't get any useful automation ideas from anyone and want to have a look into it, let me know and I'll throw some ideas at you and see if anything sticks.  That's a  pretty nutty approach, but I guess it is do-able. By my count you'd need 325-ish rows for each table, if you did every matching separately, which is bonkers. But you could massively reduce it if you built it cleverly: Look at each final result, and build in all the comparisons that result in that in a single row. For instance, in the first table, look at how many times, say, the number 11 is an end result. Now build all the matches that result in an 11 total, using extensive logic (lots of ORs). If power cards supports that you could do it in about 25 lines for the first table. But some of those lines would be seriously long and complex, and have ti be built very carefully - very easy to get the logic wrong. The javascript approach will be a touch more practical, and now that I've set aside some proper time to do it, I should have something soon.
Yes! This is my specialty - saying dumb things that inspire smart people to make smart things. My work is complete. GiGs said: That's a  pretty nutty approach, but I guess it is do-able. By my
1586261772

Edited 1586262572
GiGs
Pro
Sheet Author
API Scripter
I have at the attack / defend part working, including the rolls, except for the extreme values. I;m not completely clear what happens when you go off the edges of the table. Looking at this chart: If you have a 68 attack, i guess you reduce the defenders column by 1, and if you have a 68 defence you reduce the attacker's column. But that made me look at the table closer. If you have a 60 attack, and roll an 11 when attacking someone with 10 defence, how many shifts is that? Also if you have a 60 attack vs a 60 defence, it seems like you can never get any bonus shifts But if you have a 2 attack vs 2 defence, you need the same 11+ to hit, but you could roll 20 and get 3 bonus shifts (or roll 60 and get a lot more). Is this right, or do you start going up the table to count bonus shifts when you reach the right edge?
1586278979
GiGs
Pro
Sheet Author
API Scripter
I made some headway today. Got the action rolls done, I think, will work on effect rolls tomorrow, then sort out a prettier printout than my test run. Here's a few sample printouts - I stress this is not what the final version will look like, it's just so i have a printout and can see its working. This shows the AV, OV, the total roll made (with actual rolls in brackets in case you rolled doubles), the target number, and whether you hit and if so whether you gained effect shifts. I repeat, this is prototype printout, but here's a few sample rolls:
GiGs said: If you have a 68 attack, i guess you reduce the defenders column by 1, and if you have a 68 defence you reduce the attacker's column. But that made me look at the table closer. If you have a 60 attack, and roll an 11 when attacking someone with 10 defence, how many shifts is that? Also if you have a 60 attack vs a 60 defence, it seems like you can never get any bonus shifts But if you have a 2 attack vs 2 defence, you need the same 11+ to hit, but you could roll 20 and get 3 bonus shifts (or roll 60 and get a lot more). Is this right, or do you start going up the table to count bonus shifts when you reach the right edge? To be perfectly honest, I can't imagine any circumstance when we'd really need the chart to go beyond 60, anyway. For a comic book reference, the strongest any version of Superman ever got, when he was able to practically juggle planets and such, was a value of 50. Most characters won't ever get above a 30 in anything, and even with special bonuses they can't more than double a value, so 60 makes a very solid theoretical upper limit for our purposes. (I've always found it a bit tricky to read the chart past the edges, anyway, but since I've never seen powers that high, I've never had to worry about it.) As for rolling: The roll, for reference, is always 2d10 (rerolling on doubles except snake eyes), so barring rolling a lot of doubles, it's very unlikely one will roll much above a 20 most of the time, but in theory if one rolled a 60 then yes, one could have up to 13 Column Shifts. You don't necessarily need 11 to hit unless that's the Target Number. To hit, you just need to beat the Target Number based on the defender's Opposing Value (defense). However, you do not gain column shifts unless your roll was above the 11 column, so you gain CS at 13, then 15, etc. (based on the chart). A 60 attack vs. a 60 defense means you need to roll 11 to hit. If you roll 11 or higher, then you hit. If you roll 13, you gain +1 CS. The progression for Column Shifts for rolls above 11 is the same for every subsequent row as it is for row 1: +1 CS at 13, +2 CS at 15, +3 CS at 18, etc.
1586349960

Edited 1586350511
GiGs
Pro
Sheet Author
API Scripter
I have it working, I think. Now to find time to prepare a sensible layout for the printout. Here are 3 sample rolls (the first was before i included EV and RV on the printout for easier checking):
Does the RAP number includes the col. Shifts?
1586377044
GiGs
Pro
Sheet Author
API Scripter
It does-  you can see in the last pic with 3 rolls, the av/ov/ev/rv are the same for all 3 rolls - the only difference in raps is caused by shifts. You can compare to the tables at the top to see they are correct. In the 5 shifts one, it causes damage equal to the full effect value - 17 - plus 1, because it goes 1 column off the left of the table.
This is amazing! Wonderfully done!
1586440191

Edited 1647755855
GiGs
Pro
Sheet Author
API Scripter
Here's the first version to test:&nbsp; I've used a simple default template for printout, so I could get a version out for you to play with. If I have time, I'll make a prettier printout. You call it with (for example) !megs --av:7 -- ev:3 &nbsp;-- ov:12 &nbsp;-- rv:10 You can replace the numbers with queries or attribute calls as with any normal macro. !megs --av:@{target|batman|martialarts} -- ev:@{target|batman|strength} &nbsp;-- ov:@{target|joker|dodge} &nbsp;-- rv:@ {target|joker|toughness} !megs --av:?{AV|1} --ev:?{EV|1} --ov:?{OV|1} --rv:?{RV|1} You must (for now) include at least those four elements, and notice that " --" (a space followed by two dashes) is necessary to divide them up. You can also include some extra elements:&nbsp; --title: this is what goes in the top of the printout. If you have attacker and defender name, they'll be included or can be used instead. eg: --attacker:Batman --defender:Joker You can also include --description: some text that will appear directly below the header --note: a footnote that will appear at the bottom after everything else Finally you can include weapon/defence names. Normally you'd use --av:7 but you can use --av:Martial Arts:7 and the middle will be printed instead of AV. You can do this for each of AV, EV, OV, and RV. Here's an example (with made up AV/EV/etc ): The RAPs line only appears if a hit is scored, and description and note only appear if they exist. A thing to note about the roll: It shows the dice rolled, then an =&gt; then the total. A possible point of confusion is it shows the actual dice - the 79 above is 2d10, one rolled 7 the other rolled 9. Added together = 16. I did it this way because i plan to replace them later with dice images, to make it a bit prettier. It is also easy to see when you roll doubles. Here's the code&nbsp; <a href="https://gist.github.com/birdbrainiac/4a18d202ef43ab5fee938facecedb09e" rel="nofollow">https://gist.github.com/birdbrainiac/4a18d202ef43ab5fee938facecedb09e</a> There might be bugs, and I havent put in any proper error testing or input validation, so it will probably be easy to break at this point. Feel free to test it and report back when things break or things dont add up correctly :)
In Vizzini's word : Inconceivable!! I can't wait to try this out
That is a thing of beauty! Wonderfully done, and thank you so much! I can't wait to show my players. :)
1586506925
GiGs
Pro
Sheet Author
API Scripter
Remember you dont have to wait till you have a game to try it. It's a good idea to test it a bit first, to make sure it's working! I cant test it with actual characters because I don't have any, but it worked for all the values i tried.
1586519004
GiGs
Pro
Sheet Author
API Scripter
I posted a minor update to the script so download it again from the gist. It now shows the character or player that triggered the script as the chat's 'speaker', including their avatar icon - instead of just showing 'script'.
1586524972
GiGs
Pro
Sheet Author
API Scripter
And added rudimentary dice images Doubles show in green, double 1 in red
1586534673
Dumbhuman
Pro
Marketplace Creator
That's some great-looking work, GiGs!&nbsp; I don't play DC Heroes, but you're kind of making me wish I did just so I could get some use out of what you made.
1586535102
GiGs
Pro
Sheet Author
API Scripter
Thanks! I'm wishing I played, for the same reason haha.
1586545278

Edited 1647755821
GiGs
Pro
Sheet Author
API Scripter
One last tweak for the day. Reading some forum pages about the game made me realise its possible to get modifiers to the action table, and the effect table. The way they apply i think is to move the result on the table left or right by the size of the modifier. So, the script now supports this. When such modifiers are supplied, an o-mod (action table) and r-mod (effect table) will appear on the printout. You enter them with the same syntax as av, ev, ov, and rv, but they are called omod and remod, like so --omod:-1 --omod:dodging:1 --rmod:1 --rmod:using car as weapon:-3 They can be positive (0, 1, 2, etc) or negative (-1, -2, -3, etc.). If you have multiple modifiers, put the combination in the one entry. The gist link again:&nbsp;<a href="https://gist.github.com/birdbrainiac/4a18d202ef43ab5fee938facecedb09e" rel="nofollow">https://gist.github.com/birdbrainiac/4a18d202ef43ab5fee938facecedb09e</a> Thats a lot of printout, but most attacks wont have anywhere near all these lines. I'll come up with a more compact and efficient design at a later date, if I have time.
I like the extra mile you went for dice visualisation. Next paycheck I'll upgrade to Pro just for that script :)