mirror of
https://github.com/RussellChamp/GrimoireJS.git
synced 2026-10-27 22:42:32 +00:00
Revival of the GrimoireJS project
This commit is contained in:
1 parent
6845ce4a5f
commit
c190be3236
20 files changed
+3652
No files matched your search
+138
@@ -0,0 +1,138 @@
|
||||
//GrimoireJS v0.1
|
||||
//by Russell Champoux
|
||||
//Grimoire magic item generator for the Pathfinder roleplaying game
|
||||
/*global _:false, console:true */
|
||||
/*global Armors, Weapons, Potions, Rings, Rods, Scrolls, Shields, Staves, Wands, WondrousItems*/
|
||||
/*
|
||||
module Grimoire
|
||||
# A = Armor and shields
|
||||
# W = Weapons
|
||||
# P = Potions
|
||||
# R = Rings
|
||||
# O = rOds
|
||||
# C = sCrolls
|
||||
# T = sTaves
|
||||
# N = waNds
|
||||
# S = wondrouS items
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
var Grimoire = {};
|
||||
Grimoire.getItems = function(num_minor, num_medium, num_major, total_value) {
|
||||
var items = [];
|
||||
_(num_minor).times(function() {
|
||||
var roll = _.random(1,100);
|
||||
switch(true) {
|
||||
case (roll <= 4): items.push(Grimoire.getArmorOrShield('minor')); break;
|
||||
case (roll <= 9): items.push(Weapons.getWeapon('minor')); break;
|
||||
case (roll <= 44): items.push(Potions.getPotion('minor')); break;
|
||||
case (roll <= 46): items.push(Rings.getRing('minor')); break;
|
||||
case (roll <= 81): items.push(Scrolls.getScroll('minor')); break;
|
||||
case (roll <= 91): items.push(Wands.getWand('minor')); break;
|
||||
case (roll <= 100): items.push(WondrousItems.getItem('minior')); break;
|
||||
}
|
||||
});
|
||||
_(num_medium).times(function() {
|
||||
var roll = _.random(1,100);
|
||||
switch(true) {
|
||||
case (roll <= 10): items.push(Grimoire.getArmorOrShield('medium')); break;
|
||||
case (roll <= 20): items.push(Weapons.getWeapon('medium')); break;
|
||||
case (roll <= 30): items.push(Potions.getPotion('medium')); break;
|
||||
case (roll <= 40): items.push(Rings.getRing('medium')); break;
|
||||
case (roll <= 50): items.push(Rods.getRod('medium')); break;
|
||||
case (roll <= 65): items.push(Scrolls.getScroll('medium')); break;
|
||||
case (roll <= 68): items.push(Staves.getStaff('medium')); break;
|
||||
case (roll <= 83): items.push(Wands.getWand('medium')); break;
|
||||
case (roll <= 100): items.push(WondrousItems.getItem('medium')); break;
|
||||
}
|
||||
});
|
||||
_(num_major).times(function() {
|
||||
var roll = _.random(1,100);
|
||||
switch(true) {
|
||||
case (roll <= 10): items.push(Grimoire.getArmorOrShield('major')); break;
|
||||
case (roll <= 20): items.push(Weapons.getWeapon('major')); break;
|
||||
case (roll <= 25): items.push(Potions.getPotion('major')); break;
|
||||
case (roll <= 35): items.push(Rings.getRing('major')); break;
|
||||
case (roll <= 45): items.push(Rods.getRod('major')); break;
|
||||
case (roll <= 55): items.push(Scrolls.getScroll('major')); break;
|
||||
case (roll <= 75): items.push(Staves.getStaff('major')); break;
|
||||
case (roll <= 80): items.push(Wands.getWand('major')); break;
|
||||
case (roll <= 100): items.push(WondrousItems.getItem('major')); break;
|
||||
}
|
||||
});
|
||||
items.forEach(function(i) { console.log(i);});
|
||||
return items;
|
||||
|
||||
};
|
||||
|
||||
Grimoire.getArmorOrShield = function(type, final) {
|
||||
final = typeof final !== 'undefined' ? final : true; //set to false when we recursively call getArmorOrShield
|
||||
var roll = _.random(1,100);
|
||||
if(type === 'minor') {
|
||||
switch(true) {
|
||||
case (roll <= 60): return Shields.getShields()[0];
|
||||
case (roll <= 80): return Armors.getArmors()[0];
|
||||
case (roll <= 85): return Shields.getShields()[1];
|
||||
case (roll <= 87): return Armors.getArmors()[1];
|
||||
case (roll <= 89): return Armors.getSpecific('minor');
|
||||
case (roll <= 91): return Shields.getSpecific('minor');
|
||||
case (roll <= 100): /*add modifier*/ break;
|
||||
}
|
||||
}
|
||||
else if(type === 'medium') {
|
||||
switch(true) {
|
||||
case (roll <= 5): return Shields.getShields()[0];
|
||||
case (roll <= 10): return Armors.getArmors()[0];
|
||||
case (roll <= 20): return Shields.getShields()[1];
|
||||
case (roll <= 30): return Armors.getArmors()[1];
|
||||
case (roll <= 40): return Shields.getShields()[2];
|
||||
case (roll <= 50): return Armors.getArmors()[2];
|
||||
case (roll <= 55): return Shields.getShields()[3];
|
||||
case (roll <= 57): return Armors.getArmors()[3];
|
||||
case (roll <= 60): return Armors.getSpecific('medium');
|
||||
case (roll <= 63): return Shields.getSpecific('medium');
|
||||
case (roll <= 100): /*add modifier*/ break;
|
||||
}
|
||||
}
|
||||
else if(type === 'major') {
|
||||
switch(true) {
|
||||
case (roll <= 8): return Shields.getShields()[2];
|
||||
case (roll <= 16): return Armors.getArmors()[2];
|
||||
case (roll <= 27): return Shields.getShields()[3];
|
||||
case (roll <= 38): return Armors.getArmors()[3];
|
||||
case (roll <= 49): return Shields.getShields()[4];
|
||||
case (roll <= 57): return Armors.getArmors()[4];
|
||||
case (roll <= 60): return Armors.getSpecific('major');
|
||||
case (roll <= 63): return Shields.getSpecific('major');
|
||||
case (roll <= 100): /*add modifier*/ break;
|
||||
}
|
||||
}
|
||||
if(['minor','medium','major'].indexOf(type) >= 0) {
|
||||
//this means that we hit an 'add a special effect' in one of the above cases
|
||||
var item = Grimoire.getArmorOrShield(type, false);
|
||||
var special = {'name': '', 'bonus': 0, 'cost': 0};
|
||||
//in case we can't figure out if it's an armor or shield, we can use default values
|
||||
|
||||
if(item.name.search(/shield|buckler/) >= 0) {
|
||||
special = Shields.getSpecial(type);
|
||||
}
|
||||
else if (item.name.search(/armor|shirt|plate|chain|hide|mail/) >= 0) {
|
||||
special = Armors.getSpecial(type);
|
||||
}
|
||||
|
||||
if(item.bonus + special.bonus <= 10) { //not alowed to go over 10
|
||||
item = {
|
||||
'name': special.name + ' ' + item.name,
|
||||
'bonus': special.bonus + item.bonus,
|
||||
'cost': special.cost + item.cost +
|
||||
Armors.getArmors()[special.bonus+item.bonus].cost - Armors.getArmors()[item.bonus].cost
|
||||
};
|
||||
}
|
||||
var i = item.name.indexOf('+');
|
||||
if(i !== -1) {
|
||||
//move the '+X' to the front
|
||||
item.name = item.name.slice(i, i+3) + item.name.slice(0, i) + item.name.slice(i+3);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
};
|
||||
Reference in new issue
Block a user