Skip to content

Instantly share code, notes, and snippets.

@BaldarSilveraxe
Created November 27, 2013 10:48
Show Gist options
  • Save BaldarSilveraxe/7673795 to your computer and use it in GitHub Desktop.
Save BaldarSilveraxe/7673795 to your computer and use it in GitHub Desktop.
Roll20 API code for critical hits and misses. Creates two handouts for the GM and updates them when called.
//API:Events:ChatMessage:processAPIswitch:common:critical**********************************************
roll20API.processAPIcritical = function() {
var MeleeArmed = new Array();
MeleeArmed[0] = {Code: "FGM", Text: "Lost Footing"};
MeleeArmed[1] = {Code: "DPM", Text: "Drop Weapon"};
MeleeArmed[2] = {Code: "SIM", Text: "Self Injury"};
MeleeArmed[3] = {Code: "EGA", Text: "Entangle With Foe"};
MeleeArmed[4] = {Code: "TWM", Text: "Twist Muscle"};
MeleeArmed[5] = {Code: "SDM", Text: "Scenery Disadvantage"};
MeleeArmed[6] = {Code: "WMM", Text: "Wardrobe Malfunction"};
MeleeArmed[7] = {Code: "WBM", Text: "Weapon Break"};
MeleeArmed[8] = {Code: "FFM", Text: "Friendly Fire"};
var MeleeUnarmed = new Array();
MeleeUnarmed[0] = {Code: "FGM", Text: "Lost Footing"};
MeleeUnarmed[1] = {Code: "SIM", Text: "Self Injury"};
MeleeUnarmed[2] = {Code: "EGU", Text: "Entangle With Foe"};
MeleeUnarmed[3] = {Code: "TWM", Text: "Twist Muscle"};
MeleeUnarmed[4] = {Code: "SDM", Text: "Scenery Disadvantage"};
MeleeUnarmed[5] = {Code: "WMM", Text: "Wardrobe Malfunction"};
MeleeUnarmed[6] = {Code: "FFM", Text: "Friendly Fire"};
var RangedWeapon = new Array();
RangedWeapon[0] = {Code: "FGR", Text: "Lost Footing"};
RangedWeapon[1] = {Code: "DPR", Text: "Drop Weapon"};
RangedWeapon[2] = {Code: "TWR", Text: "Twist Muscle"};
RangedWeapon[3] = {Code: "SDR", Text: "Scenery Disadvantage"};
RangedWeapon[4] = {Code: "WMR", Text: "Wardrobe Malfunction"};
RangedWeapon[5] = {Code: "WBR", Text: "Weapon Break"};
RangedWeapon[6] = {Code: "FFR", Text: "Friendly Fire"};
var RangedThrown = new Array();
RangedThrown[0] = {Code: "FGR", Text: "Lost Footing"};
RangedThrown[1] = {Code: "DPR", Text: "Drop Weapon"};
RangedThrown[2] = {Code: "TWR", Text: "Twist Muscle"};
RangedThrown[3] = {Code: "SDR", Text: "Scenery Disadvantage"};
RangedThrown[4] = {Code: "WMR", Text: "Wardrobe Malfunction"};
RangedThrown[4] = {Code: "LWF", Text: "Lost Weapon To Foe"};
RangedThrown[5] = {Code: "FFR", Text: "Friendly Fire"};
var StealthArmed = new Array();
StealthArmed[0] = {Code: "FGS", Text: "Lost Footing"};
StealthArmed[1] = {Code: "DPS", Text: "Drop Weapon"};
StealthArmed[2] = {Code: "TWS", Text: "Twist Muscle"};
StealthArmed[3] = {Code: "SDS", Text: "Scenery Disadvantage"};
StealthArmed[4] = {Code: "WMS", Text: "Wardrobe Malfunction"};
StealthArmed[5] = {Code: "DTS", Text: "Detected By Foe"};
var StealthUnarmed = new Array();
StealthUnarmed[0] = {Code: "FGS", Text: "Lost Footing"};
StealthUnarmed[1] = {Code: "TWS", Text: "Twist Muscle"};
StealthUnarmed[2] = {Code: "SDS", Text: "Scenery Disadvantage"};
StealthUnarmed[3] = {Code: "WMS", Text: "Wardrobe Malfunction"};
StealthUnarmed[4] = {Code: "DTS", Text: "Detected By Foe"};
var rndMeleeArmedFF = Math.floor(Math.random() * MeleeArmed.length);
var rndMeleeUnarmedFF = Math.floor(Math.random() * MeleeUnarmed.length);
var rndRangedWeaponFF = Math.floor(Math.random() * RangedWeapon.length);
var rndRangedThrownFF = Math.floor(Math.random() * RangedThrown.length);
var rndMeleeArmed = Math.floor(Math.random() * (MeleeArmed.length - 1));
var rndMeleeUnarmed = Math.floor(Math.random() * (MeleeUnarmed.length - 1));
var rndRangedWeapon = Math.floor(Math.random() * (RangedWeapon.length - 1));
var rndRangedThrown = Math.floor(Math.random() * (RangedThrown.length - 1));
var rndStealthArmed = Math.floor(Math.random() * StealthArmed.length);
var rndStealthUnarmed = Math.floor(Math.random() * StealthUnarmed.length);
var resultArray = new Array();
resultArray[0] = { Category: "Melee Armed | ",
Family: MeleeArmed[rndMeleeArmed].Text,
Code: MeleeArmed[rndMeleeArmed].Code,
Result: ""};
resultArray[1] = { Category: "Melee Unarmed | ",
Family: MeleeUnarmed[rndMeleeUnarmed].Text,
Code: MeleeUnarmed[rndMeleeUnarmed].Code,
Result: ""};
resultArray[2] = { Category: "Ranged Weapon | ",
Family: RangedWeapon[rndRangedWeapon].Text,
Code: RangedWeapon[rndRangedWeapon].Code,
Result: ""};
resultArray[3] = { Category: "RangedThrown | ",
Family: RangedThrown[rndRangedThrown].Text,
Code: RangedThrown[rndRangedThrown].Code,
Result: ""};
resultArray[4] = { Category: "Stealth Armed | ",
Family: StealthArmed[rndStealthArmed].Text,
Code: StealthArmed[rndStealthArmed].Code,
Result: ""};
resultArray[5] = { Category: "Stealth Unarmed | ",
Family: StealthUnarmed[rndStealthUnarmed].Text,
Code: StealthUnarmed[rndStealthUnarmed].Code,
Result: ""};
resultArray[6] = { Category: "Melee Armed | ",
Family: MeleeArmed[rndMeleeArmedFF].Text,
Code: MeleeArmed[rndMeleeArmedFF].Code,
Result: ""};
resultArray[7] = { Category: "Melee Unarmed | ",
Family: MeleeUnarmed[rndMeleeUnarmedFF].Text,
Code: MeleeUnarmed[rndMeleeUnarmedFF].Code,
Result: ""};
resultArray[8] = { Category: "Ranged Weapon | ",
Family: RangedWeapon[rndRangedWeaponFF].Text,
Code: RangedWeapon[rndRangedWeaponFF].Code,
Result: ""};
resultArray[9] = { Category: "RangedThrown | ",
Family: RangedThrown[rndRangedThrownFF].Text,
Code: RangedThrown[rndRangedThrownFF].Code,
Result: ""};
roll20API.fumbleResultTemp = "Lost Footing (Melee)";
for (var fumbleGroup=0;fumbleGroup<resultArray.length;fumbleGroup++){
switch (resultArray[fumbleGroup].Code){
case "FGM":
roll20API.processAPI_FGM();
break;
case "FGR":
roll20API.processAPI_FGR();
break;
case "FGS":
roll20API.processAPI_FGS();
break;
case "DPM":
roll20API.processAPI_DPM();
break;
case "DPR":
roll20API.processAPI_DPR();
break;
case "DPS":
roll20API.processAPI_DPS();
break;
case "SIM":
roll20API.processAPI_SIM();
break;
case "EGA":
roll20API.processAPI_EGA();
break;
case "EGU":
roll20API.processAPI_EGU();
break;
case "TWM":
roll20API.processAPI_TWM();
break;
case "TWR":
roll20API.processAPI_TWR();
break;
case "TWS":
roll20API.processAPI_TWS();
break;
case "SDM":
roll20API.processAPI_SDM();
break;
case "SDR":
roll20API.processAPI_SDR();
break;
case "SDS":
roll20API.processAPI_SDS();
break;
case "WMM":
roll20API.processAPI_WMM();
break;
case "WMR":
roll20API.processAPI_WMR();
break;
case "WMS":
roll20API.processAPI_WMS();
break;
case "LWF":
roll20API.processAPI_LWF();
break;
case "FFM":
roll20API.processAPI_FFM();
break;
case "FFR":
roll20API.processAPI_FFR();
break;
case "DTS":
roll20API.processAPI_DTS();
break;
case "WBM":
roll20API.processAPI_WBM();
break;
case "WBR":
roll20API.processAPI_WBR();
break;
default:
roll20API.processAPI_FGM();
break;
};
resultArray[fumbleGroup].Result = roll20API.fumbleResultTemp
};
roll20API.edgedWeaponResult = "DEFAULT Double Damage";
roll20API.piercingWeaponResult = "DEFAULT Double Damage";
roll20API.bluntWeaponResult = "DEFAULT Double Damage";
roll20API.versusAnimalResult = "DEFAULT Double Damage";
roll20API.processAPI_Crit();
var percentRoll = Math.floor(Math.random() * 100) + 1;
var CriticalHitText = "<h4>Critical Hit Results</h4><hr>";
CriticalHitText = CriticalHitText + "1) Player Level + 1d00 must be greater than 20% to <b><i>ACHIEVE</i></b> the results below:<br>";
CriticalHitText = CriticalHitText + "2) This random result of <b><u>" + percentRoll + "</u></b> can be used or have the player roll.<br>";
CriticalHitText = CriticalHitText + "<hr>";
CriticalHitText = CriticalHitText + "<b>Edged Weapon Result: </b><i>" + roll20API.edgedWeaponResult + "</i><br>";
CriticalHitText = CriticalHitText + "<b>Piercing Weapon Result: </b><i>" + roll20API.piercingWeaponResult + "</i><br>";
CriticalHitText = CriticalHitText + "<b>Blunt Weapon Result: </b><i>" + roll20API.bluntWeaponResult + "</i><br>";
CriticalHitText = CriticalHitText + "<b>Versus Animal Result: </b><i>" + roll20API.versusAnimalResult + "</i><br>";
var CriticalFumbleText = "<h4>Fumble Results</h4><hr>";
CriticalFumbleText = CriticalFumbleText + "1) Player Level + 1d00 must be greater than 80% to <b><i>AVOID</i></b> the results below:<br>";
CriticalFumbleText = CriticalFumbleText + "2) This random result of <b><u>" + percentRoll + "</u></b> can be used or have the player roll.<br>";
CriticalFumbleText = CriticalFumbleText + "3) Fumble results with a chance of 'Friendly Fire' should be used if possible."
CriticalFumbleText = CriticalFumbleText + "<hr>";
CriticalFumbleText = CriticalFumbleText + "<b>Friendly Fire Possble</b>"
CriticalFumbleText = CriticalFumbleText + "<hr>";
CriticalFumbleText = CriticalFumbleText + "<b>a) " + resultArray[6].Category + resultArray[6].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[6].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<b>b) " + resultArray[7].Category + resultArray[7].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[7].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<b>c) " + resultArray[8].Category + resultArray[8].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[8].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<b>d) " + resultArray[9].Category + resultArray[9].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[9].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<hr>";
CriticalFumbleText = CriticalFumbleText + "4) Fumble results with NO a chance of 'Friendly Fire' should be used as needed."
CriticalFumbleText = CriticalFumbleText + "<hr>";
CriticalFumbleText = CriticalFumbleText + "<b>Friendly Fire NOT Possble</b>"
CriticalFumbleText = CriticalFumbleText + "<hr>";
CriticalFumbleText = CriticalFumbleText + "<b>e) " + resultArray[0].Category + resultArray[0].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[0].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<b>f) " + resultArray[1].Category + resultArray[1].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[1].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<b>g) " + resultArray[2].Category + resultArray[2].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[2].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<b>h) " + resultArray[3].Category + resultArray[3].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[3].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<b>i) " + resultArray[4].Category + resultArray[4].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[4].Result + "</i><br>";
CriticalFumbleText = CriticalFumbleText + "<b>j) " + resultArray[5].Category + resultArray[5].Family + " </b>";
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[5].Result + "</i><br>";
//Check for CriticalFumble Handout
var CriticalFumble = findObjs({ _type: "handout", name: "GM_Fumble" }).length
var CriticalFumbleExist = false;
if(CriticalFumble !== 0){
CriticalFumbleExist = true;
}else{
CriticalFumbleExist = false;
};
if(CriticalFumbleExist == false){
createObj("handout", {
name: "GM_Fumble",
});
};
CriticalFumble = findObjs({ _type: "handout", name: "GM_Fumble" })
CriticalFumble[0].set("notes", CriticalFumbleText);
//Check for CriticalHit Handout
var CriticalHit = findObjs({ _type: "handout", name: "GM_CriticalHit" }).length
var CriticalHitExist = false;
if(CriticalHit !== 0){
CriticalHitExist = true;
}else{
CriticalHiteExist = false;
};
if(CriticalHitExist == false){
createObj("handout", {
name: "GM_CriticalHit",
});
};
CriticalHit = findObjs({ _type: "handout", name: "GM_CriticalHit" })
CriticalHit[0].set("notes", CriticalHitText);
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment