OK, I'll say at the outset that this might be a bit of setup, but once it is done, you can Character Vault the character and/or Transmogrify this setup into any game where you need these tables.
Context
You should be familiar with these concepts and syntax structures so that the rest of the instructions will make sense:
- Muler lets you set up "mules" which are nothing more than character abilities you will use as a tables of variables.
- You make a mule available to a command line with the {& mule ... } syntax, naming the mule you want to load
- You retrieve a variable with the get.variable/get syntax (there is also syntax to set a variable, but you won't need that just to accomplish what you're looking to do)
Setup
Just as a preliminary guess, you will need Muler, ZeroFrame, SelectManger, and Fetch. These are all metascripts and all available in the 1-click.
Create a character named "TableMule," and give control rights to any player who might need to access the mules.
I will imagine creating the Slash Critical table as a series of mules. This same process can be applied to other crit tables.
Create an ability on the character named SlashCritA. This will represent the "A" column of the table. Enter the information from that column into the mule following this pattern:
<=5=Zip.
6-10=+1 hit.
11-15=You receive initiative next round. +1 hit.
16-20=Foe must parry next round. + 1 hit.
21-35=Foe must parry next round. +2 hits. Add +10 to next swing.
36-45=Minor calf wound. Foe receives 1 hit per round.
...
...etc...
...
96-99=Slash foe's nose. Minor wound. +2 hits and a permanent scar. Foe takes 2 hits a round and is at -30. Foe stunned 6 rounds.
>=100=Neck strike severs carotid artery and jugular vein. Foe's neck is broken. Foe dies in 1 round of intense agony.
(Notice that I turned the first and last entries into less/greater than statements, in case you have exploding results that go beyond the chart.)
Basic Retrieval
To retrieve a value from this table, you will need the {& mule ... } statement and a get statement in your command line. The following example just uses meta constructs to get the value, then outputs a simple message:
!The critical from the SlashCritA table at $[[0]] is: get.[[1d100]].value/get {&mule TableMule.SlashCritA}{&simple}
Expanding
You would obviously need to enter the data from the B, C, D, and E columns of the crit table into their own mules (SlashCritB, SlashCritC, etc.). Multiple mules can be loaded into a single message using a single {& mule ... } statement:
{& mule TableMule.SlashCritA, TableMule.SlashCritB, TableMule.SlashCritC, TableMule.SlashCritD, TableMule.SlashCritE}
Since the variables are going to be named the same across the mules (they are all numbers), you will need to differentiate which mule to access for your result (i.e., is it an A crit, or a B crit?).
get.SlashCritA.[[1d100]].value/get
Actual Usage
You will not always know which crit mule to get the value from until after the roll is made... that is, you don't know if you've generated an A, B, C, D, or E crit until after the attack roll. There are ways to flow from one mule to another... here is an example from a 2-table setup, where the value from one result translated into a look up against the other table. For Rolemaster, that might be the initial roll against the proper attack table driving whether you earned a critical (and looking up against that table/mule). However the Rolemaster attack tables are so extensive and so numerous that this would be a TON of work just to get the data entry input. I'm going to assume that is beyond what you were looking for, but if you wanted to apply it to a limited subset of tables (for instance, just those required for your character), post back and I can help with that.
For now, lets assume that you've made the attack roll, and you know what crit you should roll. For that, you can put a roll query into your command line to know what kind of crit to request. To make it work, create another mule on the TableMule character called GetCrit. Enter the following lines:
None={&stop}
SlashA=get.SlashCritA.[[1d100]].value/get {&mule SlashCritA}
SlashB=get.SlashCritB.[[1d100]].value/get {&mule SlashCritB}
SlashC=get.SlashCritD.[[1d100]].value/get {&mule SlashCritC}
SlashD=get.SlashCritD.[[1d100]].value/get {&mule SlashCritD}
SlashE=get.SlashCritE.[[1d100]].value/get {&mule SlashCritE}
Basically, we are saying that when we retrieve a value (like "SlashA") from this table, we want a get statement that will let us look against another table, and also make sure that that table (mule) is loaded. (Note that the "None" variable has a {& stop} construction... that comes from ZeroFrame and basically says to not output anything; this is helpful if you inadvertently ran the command line and you didn't actually want a critical to register to the chat.)
Now that that is in place, you can use the following to output the result to chat:
!?{What critical to retrieve?|A,get.SlashA/get|B,get.SlashB/get|C,get.SlashC/get|D,get.SlashD/get|E,get.SlashE/get}{& mule TableMule.GetCrit}{&simple}
Of course, you can put that in a template, too, to have prettier output:
!&{template:default}{{name=Critical Scored}}{{Result $[[0]]=<above roll query here>}}{& mule TableMule.GetCrit}{&simple}
You can expand the GetCrit mule to include any critical tables you want to add to it, pointing to the individual A-E mules you create to allow you to reference/retrieve the values... allowing you to retrieve Slash, Puncture, Krush, etc.
Ideally, you might put the above command line in its own macro, then you could create a chat button for it. You would roll your first attack roll that output the result of the roll in one line of a roll template, and included the chat button in a second line. If the results pointed to a critical, you click on the button, select your crit table, and get your result.