Вы находитесь на странице: 1из 47

Ordo Dicenomicon

Being an account of the mystic order of dice


2 ORDO DICENOMICON
Ordo Dicenomicon
A True and Faithful Relation of the Diverse
Power of the Dicenomicon

The Dicenomicon

One of the most powerful and flexible iOS Role Playing aid application, The
Dicenomicon can seen challenging to master, but the rewards are well worth the
effort. Its secrets are unlocked in the Grimoires of the Ordo Dicenomicon,
revealed to the public here for the first time!

Originally encoded in a secret cypher language, they are painstakingly decoded


and translated by top scholars, these works will provide an invaluable aid to both
the novice and initiate user of The Dicenomicon.

Important Disclaimer: Neither the Author, nor Ordo Dicenomicon take any
responsibility for the effects of reading these documents upon the sanity of the
reader.

INTRODUCTION 3
Grimoires of the Ordo Dicenomicon
There are five key documents of the Ordo Dicenomicon:
Liber Tetrahastur, concerning dice formulas, and game room globals & functions,
and parameters
Liber Hexahedagon, concerning advanced dice formulas, data types, and
formatting
Liber Octazathoth, concerning custom dice, composite dice and roll macros
Liber Dodecthulhu, concerning character sheets
Liber Icosuggoth, concerning advanced character sheets
These documents are all in a constant state of revision and flux, perhaps to better
align with the current stars and obscure occult ley lines. There are also rumors of
other documents that may exists, perhaps as apocrypha.
A note on characters: The Dicenomicon uses certain uncommon Unicode characters in formulas,
which can be difficult to type on standard keyboards (The Dicenomicon includes custom keyboards
for text entry). There are "common" ASCII equivalents for all of these Unicode characters, for the
student of the art who finds themselves forced to use mundane keyboards. These equivalents are:
Unicode ASCII
x
/\ and
\/ or
<- :=
!=
<=
>=
>> otherwise

4 ORDO DICENOMICON
1/2 .5
+-
. .+-
//
...
""

These documents also contain text that specifies how to enter certain codes using the custom
keyboard. The nomenclature is the name of the keyboard (usually either "numbers" or "dice") to
indicate which keyboard to be in, a colon, what modifiers to tap ("opt" or "alt" or both) and the
label for the key as it appears in an unmodified state (enclosed in quotes if needed for clarity), and
then an optional "Hold" to indicate that this key needs to be held down until a row of alternate
keys appears. So, for example, "z" is [Numbers : opt +0] and "d0" is [Dice : d10 + Hold]

Number Keypad Dice Keypad

INTRODUCTION 5
Number Keypad + Opt Dice Keypad + Opt

Number Keypad + Alt Dice Keypad + Alt

Number Keypad + Opt + Alt Dice Keypad + Opt + Alt

6 ORDO DICENOMICON
Liber Tetrahastur
To truly master the dice, one must understand the language in which formulas is
written. While much of the scheme is simple and common to many schools of role
playing, at some point there is the need to go beyond the common and enter the
ram of the esoteric.

SIMPLE ROLLS AND EXPRESSIONS


At it's simplest, a formula describes what to roll (and then the results are summed).
Formulas such as these are easily understood by even the uninitiated. These
formulas, however can be expanded to not only specify what to roll (in the most
detailed specification), but also how to roll them, how to evaluate the results, and
what to do as a result of the various possible results.

Some simple examples include:

d20
2d6
d8+1
d%
These four examples, in order, roll a twenty sided die, two six sided dice (and the
total of the two results is added together), an eight sided die (to which one is added
to the result), and finally a "percent" die (which goes from 1 to 100). So the
primary component to a formula is an (optional, defaults to 1) number indicating
the number of dice to roll, the letter "d" and then an indicator of what kind of dice
to roll (usually a number, but can be other symbols, such as the "%", or possible a
name, as shall be seen later). The sum of the face up sides of the dice is calculated,
and that value is reported.

This value can have common math operations applied to it, including addition "+",
subtraction "-", multiplication "x" and division "/".

Note that division can be performed in several different ways to deal with fractional results. By
default, the "/" operator will truncate the result, while the "" [Number:/ + Hold] will round

LIBER TETRAHASTUR 1
(fractional values of one half or more will round up to the next higher integer, less than one half
will round down), and the "/+" [Number:/ + Hold] operator will round any fraction up. Thus:

3/4 0 3//4 1 3/+4 1


5/2 2 5//2 3 5/+2 3
6/5 1 6//5 1 6/+5 2

The Dicenomicon only supports integer values for calculations.

These expressions are evaluated following standard rules for mixing operations, so

2+3x4
is "14" and not "20" (since 3 and 4 are multiplied together first, and then 2 is added
to the results). Parenthesis can be uses to group expressions alter the order of
evaluation so that

(2 + 3) x 4
is "20". It is also important to note that the dice rolling part of the expression is
evaluated before any other math is performed, which is why

2d8+1
rolls two eight sided dice, takes the sum of those, and then adds one to the result,
instead of rolling two nine sided dice. Also note that

2d(8+1)
is not allowed (though can be simulated using more advanced techniques).

VARIABLES
It is extremely common to want to save the result of a complex expression or roll
and reuse it later. To do this, values can be stored in variables:

@X 2d8+1
This will bind the result of rolling two eight sided dice, totaling them, and then
adding one to the variable named @X. All variables have a @ before them, to
help to indicate to you that they are variables. Variables can have either a name or
a number:

2 ORDO DICENOMICON
@1 2d8+1
Variables with numbers are slightly easier to use for temporary variables (since
there are keys [Number: Opt+1] through [Number:Opt+6] to make it easy to
quickly enter them). Named variables are usually clearer to explain what they are
used for, but are entered in a two step process - first [Number:Opt+0] is tapped to
enter @X, and then double tapping that token will allow you to rename the
name of the variable. If a variable is entered via some other means (or using the a
BlueTooth keyboard and native keyboard support), named variables are just as
easy to use, and are generally preferred.

Note that assignment, like everything else in The Dicenomicon, results in an


expression (whose value is whatever the assigned value is).

These variables can be used in later expressions:

@X / 5
If a variable has not been set to any value, it will default to having a value of zero.

The use of a variable is the easiest way to reuse the result of a dice roll. So if you
wanted to roll a d6 and square the results:

d6 d6
will roll two dice.

@X d6.
@X @X
will do the trick. Notice that we are separating two expressions here...

MULTIPLE EXPRESSIONS AND THE PERIOD


OPERATOR
Once you have variables, you can split up an expression into multiple parts, storing
results into variables as you go, and later accessing them. This is done by using the
. (period) operator, which takes two expressions and ignores the result of the first.
So:

(2d8+1) / 5
is equivalent to:

LIBER TETRAHASTUR 3
@X 2d8+1.
@X / 5
It is important to remember that the . operator takes two expressions - there is no
period at the end of the second expression. And while these may look like
statements as found in other programming languages, they are not statements -
everything is an expression (statements do not have a value - expressions all have
values).

Since the period operator just ignores the value of the left hand operand, the
following is perfectly legal:

(1. 2. 3. 4. 5) 2
and has a value of ten (since the first four values are ignored).

d6.
3d10.
5
will roll four dice (one six sided, three ten sided) and ignore all their results, and
display the constant value five.

MORE COMPLEX ROLLS


The Dicenomicon is capable of specifying more complicated dice rolls, both in
terms of what is rolled, as well as how they are rolled.

Zero Based Dice


Besides rolling standard dice, The Dicenomicon support rolling "zero based" dice.
I.e., instead of being labelled from one to six, they are labelled zero to five. To
specify these zero based dice, use a "z" instead of a "d". So

z20
2z6
z8+1
z%
Are all zero based dice (the "z%" will produce values from zero to ninety nine).
The "z" is entered by selecting the die token and then tapping [Numbers : opt + 0].

4 ORDO DICENOMICON
Colored Dice
A more common extension to the dice roll specification is to be able to specify what
color the dice are that you want to roll. This is done by prefixing a single character
color code between the number of dice and the "d". This makes it easy to tell
which dice are used for what when rolling a larger group of dice.

Color Code Key


Red R Number:Opt+7
Green G Number:Opt+8
Blue B Number:Opt+9
Cyan C Number:Opt+4
Magenta M Number:Opt+5
Yellow Y Number:Opt+6
Black K Number:Opt+2
Brown N Number:Opt+Alt+7
Gray A Number:Opt+Alt+5
White W Number:Opt+Alt+2
Default Number:Opt+3
Open ended (aka exploding) dice
One popular dice rolling technique is to have what are termed "open" or
"exploding" dice. For example, you roll a d6 and if the result is a six

you re-roll that die and add that new die value to the result. This is then repeated
as long as sixes are rolled. This allows a single die to get potentially very high
results (albeit rarely). There are several variations on this scheme. Besides re-
rolling if the high value is show, the die can be re-rolled if the low value is shown
(but in this case, the additional values are subtracted). Similarly, a die roll can be

LIBER TETRAHASTUR 5
open ended on both ends. In a few games, rather than adding that new value, that
new value minus one is added (in our open ended d6 example, a value of six will
never be the final result, since if a six was rolled, the re-rolled value added to it
would be at least one, giving a total of seven - so trying to roll at least six is the
exact same as trying to roll at least seven - subtracting one smooths that out).

Finally, another option is to treat the re-roll as a new die (this is common in games
with dice pools where you try to see how many dice are at or above some threshold
- since the high value will already be above that threshold, it would be pointless to
add the re-roll to this value.

This open/exploding roll is indicated by special punctuation added after the "d" (or
"z").

Open Code Key


High + Number:Opt + "+"
Low - Number:Opt+ "-"
High and Low See Below
High (with -1 adjustment) .+ Number:Opt+Alt + "+"
Low (with -1 adjustment) .- Number:Opt+Alt+"-"
High and Low (with -1 . See Below
adjustment)
Roll Another * Number:Hi
High and Low open ended rolls can be specified by entering the high version and
then the low version (repeated entry of these code will result toggling the high and
low parts).

Roll Macros
Besides being able to handle open ended rolls, The Dicenomicon can handle many
arbitrary dice rolling systems. For example, there is a concept of "brutal" dice,
which, if they roll at or below a given threshold, will be re-rolled (and the old value

6 ORDO DICENOMICON
ignored). Another example would be a game where you roll a d% and if you get
"doubles" you can roll again (and add the value) - a variation on open ended dice
rolls. All roll macros can be found on the Dice keypad with opt key. Double
tapping on a dice specified token with a roll macro will allow you to pick a different
roll macro from a list of all available ones (including user entered and downloaded
macros).

Macro Code
Brutal BRU Re-roll any dice that are less than the target
number
Heavy Gear HGR Heavy Gear roll (where half dice are zero
dice)
Body Damage BOD Champions BODY damage (includes support
for half dice)
Target Number TN All dice equal or greater than target are treated
as +1, a one is treated as -1 (and marked as
botched)
Targeted, High= XX Same as TN but if the die shows its highest
+2 value, treat at +2
Re-roll Once REO If less than or equal to the target number, re-
roll the die (but only once)
DC Hero HER Handle DC Heros explode with doubles,
O using special dC die
Ars Magica ARS Ars Magica Stress Roll (reroll and double on a
1, test for botch on 0)
MEGS MEG Handle MEGS explode with doubles, using
S d% die
Minimum MIN Treat all dice as at least the target number
Maximum MAX Treat all dice as at most the target number

LIBER TETRAHASTUR 7
Extended Open OPN Target number is added to open (high or low)
thresholds, so d%OPN2 will be open low on
rolls of 1..7 and high on rolls of 94..100. NB:
You still need to specify the openness of the roll
(be it +, -, or )
Extend High OPH Like OPN, but the target is only added to the
Open high target (aka Lucky open dice). OPH can
be found as a hold alternate for OPN
[Dice:Opt+d18+Hold]
The Dicenomicon supports two kinds of roll macros - those that take a "target
number" (like the first example) and those that don't (the second example). These
macros are specified as (upper case) letters, followed by the target number (if any).
Roll macros are usually short three character abbreviations. There are a handful of
built in macros (each with their own key combination), additional ones can be
created or downloaded. Details on creating roll macros are given in Liber
Octazathoth.

Reducers
One important feature of The Dicenomicon formulas is the ability to specify how
to convert the results of a bunch of dice and convert them into a single value. This
task is done using a reducer. Unless otherwise specified the default reducer takes
a sum of all the dice results (after any actions via roll macros). So roll a six and a
five, and the result is eleven. There are a number of other possible ways to take
that set of values and reduce it to a single value (where N is a constant integer
value specified after the reducer):

Reducer Code
High H Sums the N highest dice, ignores the rest
Low L Sums the N lowest dice, ignores the rest
Nth # Takes the Nth highest die, ignores the rest

8 ORDO DICENOMICON
Count of =, , Counts the number of dice equal to, not equal
<, , to, less than, less than or equal to, greater than,
>, or greater than or equal to a given N.
Exulted vs Adds up all the dice greater than zero. If that
result is equal to or greater than N, that value is
used. Otherwise, if none of the dice are
greater than zero, the sum of the dice are used.
Otherwise zero will be used
As List @ Keep the results separate, and produce a list of
all the values (lists will be discussed in another
volume)

The Exulted roll seems complex, but is it useful when combined with the XX roll macro. For
example:

8d10XX7vs5
will roll eight ten sided dice. Any seven, eight, or nine shown will be worth one success, and a ten
will be worth two (thats the XX7 part). If the number of successes is five or more, that will be
the final result. If you had no successes, any one will count towards being a botch, and that value
will be displayed (as a negative number). This works because XX will evaluate as -1, and
only if no successes were shown (i.e., XX evaluated everything as either a 0 or -1) will
those botches be totaled together.

Another important part about reducers is that they are part of the dice specifier.
As such, that means that:

8d6h3+2
is evaluated as roll eight six sided dice, total the three highest, and then add two to
result and not roll eight six sided dice, total the (three plus two) five highest.
This is even more important with formulas like:

d6>3+1
which is count the number of dice that are greater than three from a single six
sided die and then add one to that result and not count the number of dice that
are greater than (three plus one) four from a single six sided die. This get even
more confusing when the > operator is used in expressions (which does not bind

LIBER TETRAHASTUR 9
as tight as the > reducer does - see below). As a result, the previous example is
significantly different from:

@TOTAL > 3 + 1
even though they look much the same (the @TOTAL is a named variable, which
will be discussed in below).

It is also important to note that spaces are only required when omitting them would
cause an ambiguous result, so that example could be written:

@TOTAL>3+1
and the earlier one could be written as:

d6 > 3 + 1
and the results would be unchanged.

MORE OPERATORS
Besides the standard addition "+", subtraction "-", multiplication "x" and division
"/", there are a number of other operators that are available, as shown in the table
below. Within the table, rows that are between sections with heavier dividing lines
are evaluated from left to right, with those in higher sections being evaluated before
those in lower sections.

Operator Explanation
Multiplication
/, , /+ Division
% Modulo (remainder after division)
+ Addition
- Subtraction
Range (make a list from the first value to the last,
inclusive)
=, , <, , >, Comparison

10 ORDO DICENOMICON
in Membership - is the left operands in the list or range on
the right operands
And, Take the minimum of the left and right operands
Or, Take the maximum of the left and right operands
Default value - if the left operand is non zero, use the left
operand, otherwise use the right operand
if then else end Condition
for in do end List iteration and comprehension
, List concatenation - produce a list by concatenating the
left operand with the right operand
. Expression separator - the left operand is ignored, and the
value is that of the right operand

Details on lists, and iteration/comprehension will be discussed in a Liber Hexahedagon.

Modulo
For those who havent seen the modulo operator, it is used to take the remainder
after dividing. So:

7%3
is one. since three goes into seven two times with one left over. A common use for
modulo is to determine if something is odd or even - by taking the value modulo
two, a one will mean that it was odd and zero will mean that it was even.

Logical/Magnitude
The and operators are both interesting, since they have dual functions (even
though they are actually the same function). They can be used for both boolean
style logic (and and or respectively), or they can be used to take a maximum or
minimum of two values. That they are the same can be seen in this simple truth
table:

LIBER TETRAHASTUR 11
X Y XY XY XY
0 0 0 0 0
1 0 0 1 1
0 1 0 1 1
1 1 1 1 1

So while and is true when both values are one and zero every where else, so too
does that mean that the result is the same as taking the minimum of the two values.
Likewise, or is true if one or the other is one, and only false if both are zero, as is
the maximum only zero if both are zero.

One trick to remember these operators is that the looks like the letter A in
And, and that takes the lower of the two values while takes the higher of
the two (which is reflected in which end of the symbol the two ends are - either the
lower or higher end).

Otherwise
The otherwise operator is useful to provide a default value in cases where a given
value may be zero. While it may appear that it is the same as the operator, this
is only true of cases where zero and one are the possible operand values. In other
cases, they would not be equivalent:

56
will be five (since five is non-zero, and so the six is ignored)

56
will be six (the larger of the two values).

Conditionals
One critical operation is to be able to perform operations based on some condition
(such as testing to see if a die value is greater than a given threshold). Conditionals
in The Dicenomicon are expressions just like everything else - effectively taking
three expressions, and based on the value of the first expression, it either results in

12 ORDO DICENOMICON
the second or third expression. Users of spreadsheets may be familiar with things
like =if(A1, B1 + 5, C2 - 3) but rather than using a function call, The
Dicenomicon uses the easier to read textual form:

if d20 > 15 then


Hit
else
Missed
end
Astute students will note that this example includes text enclosed in quotation
marks (discussed below), and that it looks like we are using a comparison operator
to test if the d20 was higher than fifteen.

NB: Careful study will reveal that this is actually using the > reducer, and so we
are actually counting the number of dice that are greater than fifteen. In this
example, the result is the exact same. However,:

if 3d6 > 15 then


Hit
else
Missed
end
is different from:

if (3d6) > 15 then


Hit
else
Missed
end
since the first one will count how many of the d6 are greater than fifteen (which,
barring tears in the fabric of reality, will always be none) while the second will
actually test to see if the sum of the three dice is greater than fifteen. This is a simple
mistake, made even by the most experienced, and will produce unfortunate results.

One must always remember that conditionals are expressions, and with appropriate
use of parenthesis, can be introduced in a number of location:

d10 + (if d20 > 13 then 5 else 0 end)

LIBER TETRAHASTUR 13
is an example of taking a d10 and d20, and if the d20 is greater than thirteen, add
5 to the result. This could also be written (though with less clarity) as:

d10 + d20>15 5
Such style is discouraged, especially since, due to the difference in precedence
between reducers and comparison, if different dice were used:

d10 + 3d6>15 5
would be incorrect, exactly as detailed above. Furthermore, if a variable (see
below) were used, this:

d10 + @X>15 5
would also produce incorrect results (since it would see if the variable @X were
greater than (15 5) 75, given that multiplication binds tighter than comparison)
and then add one if so. This would need to be written:

d10 + (@X>15) 5
Just as expressions can be nested with the use of other operators and parenthesis,
conditionals are no different:

if @X > 15 then
Hit
else
if @X = 1 then
Botch
else
Missed
end
end
One can see how this could, if there were many alternate tests, get ponderous. An
equivalent, but easier to enter and read, expression uses the elif operator, which
combines the else and if (and removes one level of end):

if @X > 15 then
Hit
elif @X = 1 then
Botch
else
Missed

14 ORDO DICENOMICON
end
No matter how many elif are used, there must still be an else expression and
end token at the end (i.e., any number of elif expression then expression can
be inserted between the if expression then expression and else expression end).

STRINGS
Besides being able to work with numeric values, The Dicenomicon also includes
the ability to have textual (aka string) values. These can store an arbitrary
number of Unicode character. Furthermore, strings are immutable - at no point
will a string every change what Unicode characters it contains (it is possible to
make a new string with characters from the old string and changes, but the old
string is never changed).

Strings are entered via the [Number:Alt+%] key, which will create an empty string.
Double tapping on that token will bring up a field editor to allow you to enter the
desired text. While strings are normally displayed with typographic smart curly
double quotes, straight double quotes (") may also be used.

Within a string, special characters and formatting may be specified using escape
codes, beginning with a backslash (\) and then one or more characters. More
details on these formatting codes can be found in Liber Hexahedagon).

String Expressions
Strings can be mixed with regular numbers in expressions, or expressions can be
formed with other strings. When mixed with expressions, in many cases the string
is treated as a number (or the number is treated as a string), so:

3 5
is the number 15. Note that the reverse is one of those exceptions:

5 3
is the string 555.

LIBER TETRAHASTUR 15
Operator Left op Right Result Example
+ String + String Concatenation, 3 + 5 3 5
with space
Number + String 3 + 5 3 5
String + Number 3 + 5 3 5
- String + String Concatenation, 3 + 5 35
with-out space
Number + String 3 + 5 35
String + Number 3 + 5 35
String Number Repeat the left 3 5 33333
string right times
/ String / String Left string will be 30 / 5 30
split into a list using
the right string as a abcdbe / b
delimiter (a, cd, e)

=, , <, , String op String The string or 5 > 3 1


>, number with be
Number op String converted to a abc10 > abc5
1
String op Number number or a string,
and sorted Food = fd
numerically and/or 1
alphabetically
(ignoring case and
diacriticals)
in String in String Will determine if Abc in
the left string is xyzabcdef 4
contained in the
right (ignoring case Abc in Food 0
and diacriticals),
returning the index
of the first
character that
matches, or 0

16 ORDO DICENOMICON
% String % any Special String Discussed in Liber
Formatting Hexahedagon

In all other cases, the result is treated by first converting the string to a number and perform regular
numeric operations

String Idioms
Since multiplication of Number String performs it as a numeric operations
(after converting the string to a number), one way to explicitly convert a string into
a number is:

1 String
This idiom works well for variables and parameters as well - if the value is already
numeric, multiplying it by one does nothing.

Similarly, to convert a number to a string, use the concatenation without a space


and an empty string:

- 5

IMPORTANT DESIGN DECISIONS


There are a number of important decisions made in the design of The
Dicenomicon that need to be taken to heart to best understand how formulas work
(and to avoid misconceptions on how they dont work).

All are Expressions


Contrary to what one finds in many computer languages, The Dicenomicon deals
entirely with expressions. As weve seen, conditionals actually generate a value, and
what look like statements are really just two expressions (with only the value of the
second expression used). It is always better to write:

@X (if d20 > 17 then Hit else Missed end)


than to write:

if d20 > 17 then


@X Hit

LIBER TETRAHASTUR 17
else
@X Missed
end
All Values are Immutable
All values are atomic, immutable objects that can not be changed or altered. Just
like the value 5 is always five, so too the string ABC is always three characters,
the first three letters of the alphabet. At no time can it be changed to ABCD or
XBC. Even if that value ABC is store somewhere or embedded into
something, there is no way to alter that value. This fact is of extra importance with
lists (which will be discussed in more detail in Liber Hexahedagon).

Similarly, variables are merely bound to a value - changing the value simply rebinds
it to a new value. So:

@X ABC.
@Y X.
@X 5
would leave @Y as ABC.

All Dice Must Roll


One important constraint of The Dicenomicon is that all the dice for a single given
formula must be determined before any of the dice are rolled, and then all of those
dice are rolled all at once. It is a common novice desire to make a formula that first
determines if you hit something, and then, if so, what the damage is, and they are
surprised that the damage dice roll regardless of the to-hit roll. In Liber Hexahedagon
we will examine how to break up a formula into multiple formulas and chain them
together.

This also helps to explain why:

(1d8)d6
isnt a valid formula (i.e., roll an eight sided die to determine how many six sided
dice to roll). This roll must also be broken up into two separate formulas.

18 ORDO DICENOMICON
DICE BAR
To make it easy to quickly access arbitrary dice (say you want to quick roll a d6)
The Dicenomicon comes configured with a dice bar at the bottom of the screen -
quick tap on the die, and it rolls. This die bar can be customized to provide quick
access to the dice that you want (and is automatically updated to reflect the current
dice texture, colors, etc..). However, it is not a replacement for formulas - and only
a limited subset of a formula can be entered into an entry in the die bar. Namely:
Only a single die (dice such as the d% which are made up of more than one die
are still treated as a single die)
The color of the die can be specified
A roll macro can be applied, with a constant target number (if needed)
There is not, however, the ability to:
Include operators and other parts of an expression
Specify any sort reducer (all the dice rolled have their sum taken)
Use any function, variable or parameter (functions and parameters to be
discussed in Liber Hexahedagon)

LIBER TETRAHASTUR 19
20 ORDO DICENOMICON
Liber Hexahedagon
Learning how to specify what to roll and making various mathematical expressions
out of the results is but the first step to mastery. One must also understand how to
work with more than numbers, and how to display the results using formatting
codes (a skill that will be used in many other places), and a wide range of built in
functions. Then, one should learn how to deal with global values and formulas to
allow for centralized access to various important values and calculations, as well as
game rooms to allow one to easily switch The Dicenomicon between different
games.

[ Additional translation pending sanity restoration of translator ]

LIBER HEXAHEDAGON 1
2 ORDO DICENOMICON
Liber Octazathoth
No matter how complex the formula, there are something things that can not be
expressed by the roll formula. These include things such as special dice and special
ways to deal with how to roll the dice.

[ Additional translation pending sanity restoration of translator ]

LIBER OCTAZATHOTH 1
2 ORDO DICENOMICON
Liber Dodecthulhu
True mastery of the Ordo Dicenomicon begins by tapping the powers of
"character sheets" - a way to organize information about a game and the character
specific information. Only through this true mastery is one able to apply the ways
of the Ordo Dicenomicon to role playing games beyond the most common, and
even extending into more exotic dice games. So powerful are character sheets, that
they are broken into two parts. The first, covered here, includes the basics of how
character sheets can encapsulate a game and display character information. The
second half covers more advanced usages, such as advanced display organization
and event handling.

CHARACTER SHEETS ARE XML


Character sheets are xml files that contain entries for both visual appearance,
underlying data, and supporting roll formulas.

The name of the file is of critical importance. Based on it, character sheets can
"inherit" from other character sheets. If the base of the file name (after removing
the ".xml" extension) has a "@" character, the last part of the file name after the
last "@" character is removed, and the shorter name is treated as the parent
character sheet to inherit from. A character sheet can also have a + character,
with the text after that indicating an optional extension (that can be enabled/
disabled from within the character sheet picking UI). Put all together, we get
something like:

Grandparent@Parent@Name+Extension.xml
would be an extension named Extension to the character sheet named
Name which inherits from Parent which inherits from Grandparent.

The full XML specification for character sheets is available in a separate document
(found in The Dicenomicon Spellbook, accessed from within The Dicenomicon
itself, or the Dicenomicon web site).

LIBER DODECTHULHU 1
[ Additional translation pending sanity restoration of translator ]

PROPS AND ACTIONS


Up until this point, character sheets are basically really smart front ends for global
variables and functions, plus providing an alternate way to display that
information. However, there are two very important parts to character sheets that
are designed to handle things such as gains +1 to hit when player reaches level 6,
or this race gets an automatic bonus of +1 reflexes. This is handled by two
features - props and actions. Actions actually are ways to organize a series of
commands into a single action, and can be used without props. Props are sort of a
cross between an array of records and a built in database, and can be used to keep
track of various properties, as well as specific items (not unlike, props on a movie
set).

For this introduction, we are going to use a library metaphor, where props will be
books in a large library. First, you need to find a book, and then well see what is in
the book. These books are sorted into different shelves (where each shelf contains
different topics), and some of the books have multiple volumes.

Props
Props are, at their core, composed of two or three bits of identifying data, as well as
several bits of content data. First, the identifying data:

category Defines the group that the prop belongs to, such as
Race, Spell, Feature, Feat, etc...
id Defines the name of the prop (unique within its
category), such as Dwarf , Magic Missile, Innate
Toughness, Endurance, etc...
variant (Optional) - Variant is used to differentiate between a
bunch of very similar props. For example, a
Knowledge prop might have different variants for
History, Geography, etc...

2 ORDO DICENOMICON
This information can be thought of as an address in our library, where the
category refers to which which book shelf to look on, the id is the name of the
book, and variant is like which volume in a multi-volume set of books (and, of
course, not all books have multiple volumes).

One important concept is that prop database can only contain one entry per
unique prop (where a prop is unique based on its identifying data). So the player
either has Race:Dwarf or they dont (what to do when the player adds
Race:Dwarf when theyve already got Race:Dwarf is detailed in the section on
Stacking below). So again, you either have the book Dwarf on the Race shelf,
or not, and you may have multiple volumes of Dwarf (Dwarf:Hill Dwarf and
Dwarf:Mountain Dwarf ) but only one copy of each books.

Now that we can find the book, what does it contain? As it turns out, each book
can have up to three chapters which can be edited (this will probably be expanded
in the future). The primary part is the value of the prop. In a simplest example,
this is going to be 1 by default. So when the player has a Race:Dwarf prop, its
value is going to be 1. However, for something like Class:Fighter this value is
going to reflect the how many levels the player has in the fighter class. Nothing,
however, prevents a category from having more complicated data stored as a record
- for example, a Feature:Rage prop may have a record such as PerDay=1|
Used=0 to track how many times per day it may be used, and how many times it
has been used so far today.

The next (optional) chapter in the book is the roll chapter. This is a formula
specifying how to use this prop in terms of some sort of roll. Obviously, some
things such as the characters race or class doesnt make much sense to have a roll
associated with it. Feats or Spells, on the other hand, make perfect sense.

Finally, the prop can have optional notes - these are just user editable text notes
with no specific meaning. For example, it could be a short summary of what a spell
does when cast.

Defining Props
All props must be defined in a character sheet - there is currently no way to create a
new prop at game time (though different variants can be specified). In order to

LIBER DODECTHULHU 3
be properly presented in the UI, props are grouped into a <propgroup> element.
The <propgroup> contains the category attribute which defines the category
for all the child attributes, as well as category attribute used to determine the
header in the UI.

Within the <propgroup> are individual <prop> elements. These would each
have an id attribute that gives the props id, as well as an optional variant
attribute. Obviously, unless differentiated by variant, no two props should have the
same id.

Props can also have an auto attribute (with the value of YES) to indicate that
this prop should automatically be added to the character when the character sheet
is selected, or the game room is reset.

Within the prop there are several possible (and all optional) elements:
<variable> which defines the default value for the prop. If not specified, the
value is 1. The most common use for this is when a props value is a record
(which can be defined in the <variable> element, or inherited from the
<prop> or <propgroup> element). Note that the record is solely used for
generating the UI to edit the value.
<notes> which has the default value for the props notes (using the text
contained within the <notes> element).
<roll> which gives the initial roll value for the prop, defined as any other
<roll> element in a character sheet is

<doc> contains a reference to documentation for that prop, usually in the form of
an href attribute that contains the URL (relative to the character sheets doc-
base attribute)

Note that much of this information is used only for the prop editing/displaying UI
(so there is no way to access/change the props documentation URL from within a
roll).

4 ORDO DICENOMICON
Stacking Props
As mentioned above, any given category:id or category:id:variant uniquely
refers to a single prop that is stored for the character. The question is, how does
one handled adding the same prop twice? This is handled by several attributes of
the <prop> (or inherited from the surrounding <propgroup>). These attribute
can have the following values:

Attribute Value Action


stacks YES The value of the prop is increased by
1. NB: This can wipe out the value of
the prop if a record is stored there
stack-field name of a The value of the specified field of the
record field value record is increased by 1
named YES The user will be prompted for a variant
name to use, and a new prop with that
variant will be added. NB: this
happens even if there is no pre-existing
prop with the same category:id

Note that stacks is redundant (and ignored) if stack-field is specified. If a


prop lacks any of these three attributes, it will not be presented to the user in the
UI if the corresponding category:id (or category:id:variant) is already present
for the character.

Props vs List of Records


Both props and lists of records can be used for similar things - i.e., keeping track of
a collection of information about something. Lists of records are easy to use but
props are more flexible.

List of Records Props


All elements must be the same, Values for each record can be
containing the same record different or the same

LIBER DODECTHULHU 5
Arbitrary elements can be created by Props are all fully defined in the
the user as needed character sheet (with the exception of
named variants)
Elements indexed via list operation, Props accessed via name, iterating
making it difficult to find a record through all props not practical
by name but easy to iterate over all
elements
No non-record informations can be Props also have arbitrary notes and
associated with an element - all data roll, independent of the data, as well
must be a field in the record as documentation that can be
specified in the character sheet

Actions
Actions are a way of grouping together a number of things that would normally be
done via the UI and allowing them to be performed as a side effect of something
else. For example, normally a global variable can be read by a roll, but not set by
it, except with special action related syntax.

Actions are defined in character sheets in an <action> element. That element


has an id attribute that gives the name of the action. This name determines if the
action is explicit (done explicitly via something like tapping on a button or an
:action:() function call in a script) or implicit (done as a side effect of something
else the user does, such as adding a prop). The explicit actions are pretty straight
forward, but it is the implicit actions that are interesting.

First, implicit actions all have names of the format:

on event-name:descriptor1:descriptor2:...

i.e, they all begin with on followed by some sort of event name (such as set
prop) and then a series of colon delimitated descriptors. For any of the given
descriptors, a * can be used to indicate a wildcard (which matches any
descriptor). For a simple example:

6 ORDO DICENOMICON
<action id="on set prop:Race:Human">
<set variable="SIZE" kind="string">M</set>
</action>
In this example, when the user sets the value of the given prop Race:Human it
will set the global variable SIZE to a specified value (M).

You might wonder why this sort of thing isnt associated with the prop itself ? Why
the need for a separate action item at all? By structuring actions separate from
props, this will allow character sheet extensions to add in actions that werent
originally thought of. For example a reputation system might want to set the base
reputation to be +1 for elves and -1 for dwarves.

What can be done in actions

Element Name Attributes Body Notes


Value to set it to,
variable - name of variable to set

<set>
evaluated as per
standard
evaluation
<code> Evaluated as per Should always set
standard the eval
evaluation (result attribute to
is discarded) expr, which
allows for
deferred actions
to be queued
<enable- id - name of
effect> effect to enable
<disable- id - name of
effect> effect to disable

LIBER DODECTHULHU 7
<add-effect> id - name of Value to set it to,
effect to add evaluated as per
standard
variable -
evaluation
name of variable
to add the effect
to
<toggle- id - name of
effect> effect to toggle
<add-prop> category - the Follows standard
category of the prop stacking
prop rules
name - name of
the prop
variant - the
variant of the
prop (optional)

8 ORDO DICENOMICON
<set-prop> category - the Value to set it to, Will not do
category of the evaluated as per anything if the
prop standard prop doesnt
evaluation already exist.
name - name of
the prop
variant - the
variant of the
prop (optional)
part - the part of
the prop to set
(optional). Can
be roll or
notes (will set
the value if
omitted)

<itemize> variable - Value to set it to,


name of variable evaluated as per
to itemize standard
evaluation
id - the name of
the itemization
line to add
If the variable is
a list of records:
where - the field
to search
is - the value to
search for
field - the field
to itemize

LIBER DODECTHULHU 9
<tell> title - Title of Message to
the dialog to display, evaluated
display (optional) as per standard
evaluation
button - text to
show on the
OK button
(optional)
<if> The conditional If body is true, all
to test, evaluated elements up to
as per standard next <else> or
evaluation <endif> element
are evaluated. If
not, they are
ignored
<else> If previous <if>
was true,
elements up to
next <endif> are
ignored,
otherwise they
are evaluated
<endif> Marks the end of
previous
matching <if>
or <else>

Note that the conditional actions can be nested. Since XML is a poor choice for
arbitrary programatic constructs, the body of the <if> clause contains the
condition - no XML nesting is used to indicate flow control.

Implicit Actions Events


There is a range of actions that happen implicitly (as a side effect of the users
interactions with the UI for the most part). Any implicit action can have any

10 ORDO DICENOMICON
component of its descriptor replaced with a wildcard * character, which will
match any descriptor.

Event Descriptors Happens When... Params/Var1


edit variable id : A global record #1 - Variable id
record3 name4 variable is edited
#2 - Name
#3 - Old Value
#4 - New Value
A record in a global #1 - Variable id
list variable is edited
#2 - Name
#3 - The index of
the record in the
list
#4 - Old Value
#5 - New Value
rename variable id : A global record #1 - Variable id
record original name : variable, with the
new name name field changed #2 - Original
Name
#3 - New Name
#4 - Old Value
#5 - New Value

LIBER DODECTHULHU 11
A record in a global #1 - Variable id
list variable is edited,
with the name field #2 - Original
changed Name
#3 - New Name
#4 - The index of
the record in the
list
#5 - Old Value
#6 - New Value
create variable id A record is added to #1/id - Variable id
record a list in the UI
#2/self - Record
value
delete variable id : name A record is removed #1/id - Variable id
record from a list
#2/name - The
name field of the
record
#3/index - the
index of record in
the list
#4/self2 - Record
value
load none When a game room #1 - Name of the
sheet is reset or a character sheet
character sheet is
first set for a game
room

12 ORDO DICENOMICON
add prop category : name : When a specific #1/category - the
variant5 prop is first added to prop category
the current
character #2/name - the
prop name
#36/variant - the
prop variant (if
any)
#4/self - the prop
value
#5/id7 - a record
containing the full
prop specifier
stack category : name : When the specific as above
prop variant prop is stacked onto
an existing prop (i.e.
the second or later
time it is added)
set prop category : name : Whenever the value #1 - the prop
variant of a prop is category
changed. NB: when
a prop is added/ #2- the prop name
stacked, this is also #36- the prop
invoked variant (if any)
#4/self - the prop
value
#5/oldself - the
original prop value
id7 - a record
containing the full
prop specifier

LIBER DODECTHULHU 13
delete category : name : #1 - the prop
prop variant category
#2- the prop name
#36- the prop
variant (if any)
#4/self - the prop
value
id7 - a record
containing the full
prop specifier
set variable id When a global #1/oldvalue -
variable is editing original value
#2/value - new
value
enable effect name When an effect is #1/effect - name
effect enabled of effect
disable effect name When an effect is #1/effect - name
effect disabled of effect
delete effect name When an effect is #1/effect - name
effect deleted of effect

Notes:

1. These are still in a state of flux - as originally designed, any additional


information about the event was passed as a parameter. However this became
unwieldily, and is be transitioned to be special variables. So use parameters
where you must, but variables where you can

2. Variable name usable in post 2.6.1

3. The various record related events are all invoked when a character sheet
contains a list of type record, such as could be used for inventory or
something else which is a homogenous lists of things. Edit and rename can also

14 ORDO DICENOMICON
be invoked when editing a single variable which is declared as a record (but it
will have different parameters)

4. name refers to a field within the record with the name Name, used by
default to indicate the user visible name of the record

5. All prop related actions will either have two or three descriptors, depending on
if the prop is a variant or not.

6. If no variant, subsequent parameters are shifted by one

7. The id variable in a prop related action is a record with fields for category,
name, and (optional) variant.

LIBER DODECTHULHU 15
16 ORDO DICENOMICON
Liber Icosuggoth
[ Additional translation pending sanity restoration of translator ]

LIBER DODECTHULHU 1

Вам также может понравиться