How about this, don't mark up the dice and do the following.
Need three colors for dice.
Cautious dice: Plus = 1/2, Minus = -1/2 (Round down after all dice added)
Standard dice: Read these as normal
Wild Dice: Plus = 2, Minus = -2, Blank = -1
Let the player decide which dice to use for each throw.
For instance they can use 3 standard and 1 wild, or 2 cautious and 2 standard. What ever they feel like and have them roll the dice.
Ranges:
All Cautious: +2 to -2
Standard: Normal +4 to -4
All Wild: +8 to -8
That way you can use the system with anyone's dice (I don't like the idea of marking up my Fudge dice).
BTW the math of this is not my forte so I wrote a little program to sort this all out (spent too much time on this.. must sleep)
If anyone wants to tinker with this idea and wants a quick and dirty little java tool with no UI here it is.
Bottom line, is that wild in this incarnation, will likely hurt you more than help, but it can pay off big if you are praying to the gods of chaos to save you.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
public class test {
/**
* @param args
*/
protected static HashMap<Integer, Integer> theMap = new HashMap<Integer, Integer>();
static Random randomGen = new Random();
public static void main(String[] args) {
// TODO Auto-generated method stub
double result = 0.0;
String dieUsed = "WWWW";
for(int i=0;i<100000;i++){
int dieResult =getResult(dieUsed);
// Check if word is in HashMap
if (theMap.containsKey(dieResult)) {
// get number of occurrences for this word
// increment it
// and put back again
theMap.put(dieResult, theMap.get(dieResult) + 1);
} else {
// this is first time we see this word, set value '1'
theMap.put(dieResult, 1);
}
}
ArrayList<Integer> values = new ArrayList<Integer>();
values.addAll(theMap.values());
int last_i = -1;
for (Integer i : values) {
if (last_i == i)
continue;
last_i = i;
for (Integer s : theMap.keySet()) {
if (theMap.get(s) == i)
System.out.println(s + ":" + i);
}
}
System.out.println("Done");
}
protected static int getResult(String dieUsed){
int result = 0;
double temp = 0.0;
for(int i=0;i<dieUsed.length();++i){
if( dieUsed.substring(i, i+1).contains("S")){
temp += (double)getStandardFudge();
}else if( dieUsed.substring(i, i+1).contains("C")){
temp += (double)getCautousFudge();
}else if( dieUsed.substring(i, i+1).contains("W")){
temp += (double)getWildFudge();
}
}
result = (int)temp;
return result;
}
protected static int getStandardFudge(){
double next = Math.random();
int intResult = (int) (next*3)-1;
return intResult;
}
protected static double getCautousFudge(){
return getStandardFudge()/2.0;
}
protected static int getWildFudge(){
int standard = getStandardFudge();
if( standard == 0){
standard = -1;
}else if( standard == 1){
standard =2;
}else{
standard = -2;
}
return standard;
}
}