if (!window.Sinfar) {window.Sinfar = {}; }
Sinfar.Effect = function (effect, cost, pp) {
this.effect = effect;
this.cost = cost;
this.pp = pp;
}
Sinfar.Effect.prototype.asTableCells = function () {
var tooltip = (this.effect ? this.effect + ' ' : '') + this.enchantment.name
+ ' = ' + this.cost + 'x ' + this.enchantment.component
+ ' and ' + this.pp + ' powerpoint' + (parseInt(this.pp) == 1 ? '' : 's');
return '
' + this.effect + ' | '
+ '' + this.cost + ' | '
+ '' + this.pp + ' | '
}
Sinfar.Enchantment = function (name, component, effects, note) {
this.name = name;
this.component = component;
var me = this;
this.effects = effects.forEach(function (x) { x.enchantment = me; });
this.note = note;
};
Sinfar.Enchantment.prototype.createCheckboxCell = function (equipment, checked, rowspan) {
return ''
+ ''
+ ' | ';
};
Sinfar.Enchantment.prototype.asTableRows = function (allOptionsAndCosts) {
var rowspan = (allOptionsAndCosts && this.effects.length > 1) ? ' rowspan="' + this.effects.length + '"' : '';
var html = ''
+ ''
+ this.name
+ (this.note ? ' (' + this.note + ')' : '')
+ ' | '
+ '' + this.type + ' | '
+ '' + this.component + ' | '
+ this.effects[0].asTableCells()
+ this.createCheckboxCell("armor", this.isArmor, rowspan)
+ this.createCheckboxCell("melee weapons", this.isMelee, rowspan)
+ this.createCheckboxCell("launchers", this.isLauncher, rowspan)
+ this.createCheckboxCell("ammo", this.isAmmo, rowspan)
+ this.createCheckboxCell("thrown weapons", this.isThrown, rowspan)
+ this.createCheckboxCell("gauntlets", this.isGauntlet, rowspan)
+ this.createCheckboxCell("staves", this.isStaff, rowspan)
+ '
';
if (allOptionsAndCosts) {
this.effects.slice(1).forEach(function (x) {
html += ''
+ x.asTableCells()
+ '
'
});
}
return html;
};
Sinfar.enchantments = []
.concat(
[
new Sinfar.Enchantment('Strength', 'Dragon Blood', [
new Sinfar.Effect('+3', 3, 1),
new Sinfar.Effect('+6', 6, 2),
new Sinfar.Effect('+9', 9, 3),
new Sinfar.Effect('+12', 12, 4)
]),
new Sinfar.Enchantment('Dexterity', 'Harpy Vertebrae', [
new Sinfar.Effect('+3', 6, 1),
new Sinfar.Effect('+6', 12, 2),
new Sinfar.Effect('+9', 18, 3),
new Sinfar.Effect('+12', 24, 4)
]),
new Sinfar.Enchantment('Constitution', 'Giant Heart', [
new Sinfar.Effect('+3', 6, 1),
new Sinfar.Effect('+6', 12, 2),
new Sinfar.Effect('+9', 18, 3),
new Sinfar.Effect('+12', 24, 4)
]),
new Sinfar.Enchantment('Intelligence', 'Mind Flayer Brain', [
new Sinfar.Effect('+3', 3, 1),
new Sinfar.Effect('+6', 6, 2),
new Sinfar.Effect('+9', 9, 3),
new Sinfar.Effect('+12', 12, 4)
]),
new Sinfar.Enchantment('Wisdom', 'Imp Ear', [
new Sinfar.Effect('+3', '21', 1),
new Sinfar.Effect('+6', '42', 2),
new Sinfar.Effect('+9', '63', 3),
new Sinfar.Effect('+12', '84', 4)
]),
new Sinfar.Enchantment('Charisma', 'Succubus Eye', [
new Sinfar.Effect('+3', 6, 1),
new Sinfar.Effect('+6', 12, 2),
new Sinfar.Effect('+9', 18, 3),
new Sinfar.Effect('+12', 24, 4)
])
].forEach(function (x) {
x.isArmor = true;
x.type = 'Ability';
})
)
.concat(
[
new Sinfar.Enchantment('Armor Class', 'Monster Scale', [
new Sinfar.Effect('+1', 1, 0),
new Sinfar.Effect('+2', 2, 0),
new Sinfar.Effect('+3', 4, 0),
new Sinfar.Effect('+4', 8, 1),
new Sinfar.Effect('+5', 12, 1),
])
].forEach(function (x) {
x.isArmor = true;
x.type = 'Enhancement';
})
)
.concat(
[
new Sinfar.Enchantment('Concentration', 'Humanoid Skull', [
new Sinfar.Effect('+6', 12, 1),
new Sinfar.Effect('+12', 24, 2),
new Sinfar.Effect('+18', 36, 3),
new Sinfar.Effect('+24', 48, 4),
new Sinfar.Effect('+30', 60, 5),
new Sinfar.Effect('+36', 72, 6),
new Sinfar.Effect('+42', 84, 7),
new Sinfar.Effect('+48', 96, 8),
]),
new Sinfar.Enchantment('Discipline', 'Orc Head', [
new Sinfar.Effect('+6', 12, 1),
new Sinfar.Effect('+12', 24, 2),
new Sinfar.Effect('+18', 36, 3),
new Sinfar.Effect('+24', 48, 4),
new Sinfar.Effect('+30', 60, 5),
new Sinfar.Effect('+36', 72, 6),
new Sinfar.Effect('+42', 84, 7),
new Sinfar.Effect('+48', 96, 8),
])
].forEach(function (x) {
x.isArmor = true;
x.type = 'Skills';
})
)
.concat(
[
new Sinfar.Enchantment('Haste', 'Animal Heart', [new Sinfar.Effect('', 30, 2)]),
new Sinfar.Enchantment('Knockdown Immunity', 'Mechanical Leg', [new Sinfar.Effect('', 2, 5)]),
new Sinfar.Enchantment('Regeneration', 'Troll Head', [
new Sinfar.Effect('+1', 8, 1),
new Sinfar.Effect('+2', 15, 2),
new Sinfar.Effect('+3', 23, 3),
new Sinfar.Effect('+4', 30, 4),
new Sinfar.Effect('+5', 38, 5),
new Sinfar.Effect('+6', 45, 6),
new Sinfar.Effect('+7', 53, 7),
new Sinfar.Effect('+8', 60, 8)
])
].forEach(function (x) {
x.isArmor = true;
x.type = 'General';
})
)
.concat(
[
new Sinfar.Enchantment('Damage Reduction', 'Golem Hand', [
new Sinfar.Effect('5/+7', 12, 3),
new Sinfar.Effect('10/+7', 23, 6)
]),
new Sinfar.Enchantment('Damage Resistance', 'Beetle Belly', [
new Sinfar.Effect('5', 3, 1),
new Sinfar.Effect('10', 5, 2),
new Sinfar.Effect('15', 8, 3),
new Sinfar.Effect('20', 10, 4),
new Sinfar.Effect('25', 13, 5),
new Sinfar.Effect('30', 15, 6),
new Sinfar.Effect('35', 18, 7),
new Sinfar.Effect('40', 20, 8)
],
'acid, cold, fire, electricity or sonic'
),
new Sinfar.Enchantment('Spell Resistance', 'Spider Hair', [
new Sinfar.Effect('10', 10, 0),
new Sinfar.Effect('14', 20, 1),
new Sinfar.Effect('18', 30, 2),
new Sinfar.Effect('22', 40, 3),
new Sinfar.Effect('26', 50, 4),
new Sinfar.Effect('30', 60, 5),
])
].forEach(function (x) {
x.isArmor = true;
x.type = 'Resistances';
})
)
.concat(
[
new Sinfar.Enchantment('Fortitude Save', 'Soul Gem', [
new Sinfar.Effect('+4', 8, 1),
new Sinfar.Effect('+8', 16, 2),
new Sinfar.Effect('+12', 24, 3),
new Sinfar.Effect('+16', 32, 4),
new Sinfar.Effect('+20', 40, 5),
]),
new Sinfar.Enchantment('Reflex Save', 'Spider Hair', [
new Sinfar.Effect('+4', 20, 1),
new Sinfar.Effect('+8', 40, 2),
new Sinfar.Effect('+12', 60, 3),
new Sinfar.Effect('+16', 80, 4),
new Sinfar.Effect('+20', 100, 5)
]),
new Sinfar.Enchantment('Will Save', 'Spider Hair', [
new Sinfar.Effect('+4', 20, 1),
new Sinfar.Effect('+8', 40, 2),
new Sinfar.Effect('+12', 60, 3),
new Sinfar.Effect('+16', 80, 4),
new Sinfar.Effect('+20', 100, 5)
])
].forEach(function (x) {
x.isArmor = true;
x.type = 'Saves';
})
)
.concat(
[
new Sinfar.Enchantment('Attack Bonus', 'Demonic Hand', [
new Sinfar.Effect('+4', 1, 0),
new Sinfar.Effect('+5', 1, 1),
new Sinfar.Effect('+6', 2, 2),
])
].forEach(function (x) {
x.isMelee = true;
x.isLauncher = true;
x.isThrown = true;
x.isGauntlet = true;
x.type = 'Enhancement';
})
)
.concat(
[
new Sinfar.Enchantment('Enhancement Bonus', 'Demonic Hand', [
new Sinfar.Effect('+4', 1, 0),
new Sinfar.Effect('+5', 2, 1),
new Sinfar.Effect('+6', 4, 2),
])
].forEach(function (x) {
x.isMelee = true;
x.isThrown = true;
x.type = 'Enhancement';
})
)
.concat(
[
new Sinfar.Enchantment('Damage Bonus - Acid', 'Emerald', [
new Sinfar.Effect('1d4', 6, 1),
new Sinfar.Effect('1d8', 11, 2),
new Sinfar.Effect('1d12', 16, 3),
]),
new Sinfar.Enchantment('Damage Bonus - Cold', 'Sapphire', [
new Sinfar.Effect('1d4', 6, 1),
new Sinfar.Effect('1d8', 11, 2),
new Sinfar.Effect('1d12', 16, 3),
]),
new Sinfar.Enchantment('Damage Bonus - Electrical', 'Topaz', [
new Sinfar.Effect('1d4', 6, 1),
new Sinfar.Effect('1d8', 11, 2),
new Sinfar.Effect('1d12', 16, 3),
]),
new Sinfar.Enchantment('Damage Bonus - Fire', 'Ruby', [
new Sinfar.Effect('1d4', 6, 1),
new Sinfar.Effect('1d8', 11, 2),
new Sinfar.Effect('1d12', 16, 3),
]),
new Sinfar.Enchantment('Damage Bonus - Sonic', 'Slaad Tongue', [
new Sinfar.Effect('1d4', 6, 1),
new Sinfar.Effect('1d8', 11, 2),
new Sinfar.Effect('1d12', 16, 3),
]),
new Sinfar.Enchantment('Damage Bonus - Physical', 'Steel Ingot', [
new Sinfar.Effect('3', 10, 2),
new Sinfar.Effect('1d8', 15, 3),
new Sinfar.Effect('6', 20, 4),
new Sinfar.Effect('2d8', 29, 6)
], 'bludgeoning, piercing or slashing'),
new Sinfar.Enchantment('Damage Bonus - Positive', 'Mysterious Stick', [
new Sinfar.Effect('1', 1, 1),
new Sinfar.Effect('2', 2, 2),
new Sinfar.Effect('3', 3, 3),
new Sinfar.Effect('4', 4, 4),
new Sinfar.Effect('2d4', 5, 5),
new Sinfar.Effect('6', 6, 6)
])
].forEach(function (x) {
x.isMelee = true;
x.isAmmo = true;
x.isThrown = true;
x.isGauntlet = true;
x.type = 'Enhancement';
})
)
.concat(
[
new Sinfar.Enchantment('Keen', 'Erected Humanoid Cock', [new Sinfar.Effect('', 15, 2)])
].forEach(function (x) {
x.isMelee = true;
x.type = 'General';
})
)
.concat(
[
new Sinfar.Enchantment('Massive Critical', 'Bodak Tooth', [
new Sinfar.Effect('2d6', 4, 1),
new Sinfar.Effect('2d12', 7, 2)
])
].forEach(function (x) {
x.isMelee = true;
x.isLauncher = true;
x.isThrown = true;
x.type = 'General';
})
)
.concat(
[
new Sinfar.Enchantment('Vampiric Regeneration', 'Vampire Tooth', [
new Sinfar.Effect('1', 3, 1),
new Sinfar.Effect('2', 6, 2),
new Sinfar.Effect('3', 9, 3),
new Sinfar.Effect('4', 12, 4),
new Sinfar.Effect('5', 15, 5),
new Sinfar.Effect('6', 18, 6)
])
].forEach(function (x) {
x.isMelee = true;
x.isAmmo = true;
x.isThrown = true;
x.type = 'General';
})
)
.concat(
[
new Sinfar.Enchantment('Mighty', 'Skeleton Knuckle', [
new Sinfar.Effect('+3', 30, 0),
new Sinfar.Effect('+5', 50, 0),
new Sinfar.Effect('+10', 100, 0),
new Sinfar.Effect('+20', 200, 0)
],
'Beware of Skeleton\'s Knuckle!'
)
].forEach(function (x) {
x.isLauncher = true;
x.isThrown = true;
x.type = 'General';
})
)
.concat(
[
new Sinfar.Enchantment('Bonus Feat - Spell Focus', 'Human Head', [new Sinfar.Effect('', 20, 1)], 'choose a spell school'),
new Sinfar.Enchantment('Bonus Spell Slot', 'Fairy Dust', [
new Sinfar.Effect('lvl 0', 2, 1),
new Sinfar.Effect('lvl 1', 4, 1),
new Sinfar.Effect('lvl 2', 6, 1),
new Sinfar.Effect('lvl 3', 8, 2),
new Sinfar.Effect('lvl 4', 10, 2),
new Sinfar.Effect('lvl 5', 12, 2),
new Sinfar.Effect('lvl 6', 14, 2),
new Sinfar.Effect('lvl 7', 16, 2),
new Sinfar.Effect('lvl 8', 18, 2),
new Sinfar.Effect('lvl 9', 20, 2),
], 'Wizard'),
new Sinfar.Enchantment('Bonus Spell Slot', 'Fairy Dust', [
new Sinfar.Effect('lvl 0', 2, 1),
new Sinfar.Effect('lvl 1', 4, 1),
new Sinfar.Effect('lvl 2', 6, 1),
new Sinfar.Effect('lvl 3', 8, 2),
new Sinfar.Effect('lvl 4', 10, 2),
new Sinfar.Effect('lvl 5', 12, 2),
new Sinfar.Effect('lvl 6', 14, 3),
new Sinfar.Effect('lvl 7', 16, 3),
new Sinfar.Effect('lvl 8', 18, 3),
new Sinfar.Effect('lvl 9', 20, 4),
], 'Cleric, Druid, Sorcerer')
].forEach(function (x) {
x.isStaff = true;
x.type = 'Magic';
})
)
;