Damage:
@@ -31958,8 +33728,8 @@ constitutionTable['conadj'] = ['Error','-3','-2','-2','-1','-1','-1','0','0','0'
constitutionTable['conshock'] = ['Error','25','30','35','40','45','50','55','60','65','70','75','80','85','88','90','95','97','99','99','99','99','99','99','99','100'];
constitutionTable['conres'] = ['Error','30','35','40','45','50','55','60','65','70','75','80','85','90','92','94','96','98','100','100','100','100','100','100','100','100'];
constitutionTable['conpoisonsave'] = ['Error','-2','-1','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','+1','+1','+2','+2','+3','+3','+4'];
-constitutionTable['conregen'] = ['Error','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','1/6','1/5','1/4','1/3','1/2','1/1'];
-constitutionTable['connotes'] = ['INVALID CONSTITUTION','','','','','','','','','','','','','','','','','','','','1 hp/6 turns - not acid/fire','1 hp/5 turns - not acid/fire','1 hp/4 turns - not acid/fire','1 hp/3 turns - not acid/fire','1 hp/2 turns - not acid/fire','1 hp/turn - not acid/fire'];
+constitutionTable['conregen'] = ['Error','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','Nil','1/6 turns','1/5 turns','1/4 turns','1/3 turns','1/2 turns','1/1 turn'];
+constitutionTable['connotes'] = ['INVALID CONSTITUTION','','','','','','','','','','','','','','','','','','','','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21','Fire and acid damage cannot be regenerated, PHB p. 21'];
constitutionTable['con2notes'] = ['INVALID CONSTITUTION','','','','','','','','','','','','','','','','','(+3) Warriors only','(+4) Warriors only','(+5) Warriors only','(+5) Warriors only','(+6) Warriors only','(+6) Warriors only','(+6) Warriors only','(+7) Warriors only','(+7) Warriors only'];
const intelligenceTable = {};
@@ -31975,15 +33745,15 @@ intelligenceTable['intimm5th'] = ['Error','','','','','','','','','','','','',''
intelligenceTable['intimm6th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','','6th-level','6th-level'];
intelligenceTable['intimm7th'] = ['Error','','','','','','','','','','','','','','','','','','','','','','','','','7th-level'];
intelligenceTable['intnotes'] = ['INVALID INTELLIGENCE','Communicate by Grunts & Gestures','','','','','','','','','','','','','','','','','','','','','','','','',''];
+intelligenceTable['spell-points-int'] = [0,0,0,0,0,0,0,0,0,2,2,2,3,3,4,4,5,6,7,8,9,9,9,9,9,9];
const wisdomTable = {};
wisdomTable['wisdef'] = ['Error','-6','-4','-3','-2','-1','-1','-1','0','0','0','0','0','0','0','+1','+2','+3','+4','+4','+4','+4','+4','+4','+4','+4'];
wisdomTable['wisbonus'] = ['Error','—','—','—','—','—','—','—','—','0','0','0','0','1st','1st','2nd','2nd','3rd','4th','1st,3rd','2nd,4th','3rd,5th','4th,5th','1st,6th','5th,6th','6th,7th'];
-wisdomTable['wisbonus-prime'] = ['Error','','','','','','','','','','','','','1st','2x1st','2x1st, 2nd','2x1st, 2x2nd','2x1st, 2x2nd, 3rd','2x1st, 2x2nd, 3rd, 4th','3x1st, 2x2nd, 2x3rd, 4th','3x1st, 3x2nd, 2x3rd, 2x4th','3x1st, 3x2nd, 3x3rd, 2x4th','3x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th','4x1st, 3x2nd, 3x3rd, 3x4th'];
-wisdomTable['wisbonus-extra'] = ['Error','','','','','','','','','','','','','','','','','','','','','5th','2x5th','2x5th, 6th','3x5th, 2x6th','3x5th, 3x6th, 7th'];
wisdomTable['wisfail'] = ['Error','80','60','50','45','40','35','30','25','20','15','10','5','0','0','0','0','0','0','0','0','0','0','0','0','0'];
wisdomTable['wisimmune'] = ['Error','','','','','','','','','','','','','','','','','','','cause fear, charm person, command, friends, hypnotism','forget, hold person, ray of enfeeblement, scare','fear','charm monster, confusion, emotion, fumble, suggestion','chaos, feeblemind, hold monster, magic jar, quest','geas, mass suggestion, rod of rulership','antipathy/sympathy, death spell, mass charm'];
wisdomTable['wisnotes'] = ['INVALID WISDOM','','','','','','','','','','','','','','','','','','','','','','','','','',''];
+wisdomTable['wisdom-wind'] = [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,2,3,4,5,6,7,8,9,10,11,12];
const charismaTable = {};
charismaTable['chamax'] = ['Error','0','1','1','1','2','2','3','3','4','4','4','5','5','6','7','8','10','15','20','25','30','35','40','45','50'];
@@ -66800,45 +68570,42 @@ const capitalizeFirst = function (s) {
}
const displaySize = function(size) {
- if (typeof size !== 'string')
+ if (typeof size !== 'string' || size.length === 0)
return '';
- size = size.toLowerCase();
- switch (size) {
- case 't':
- case 'tiny': return 'Tiny';
- case 's':
- case 'small': return 'Small';
- case 'm':
- case 'medium': return 'Medium';
- case 'l':
- case 'large': return 'Large';
- case 'h':
- case 'huge': return 'Huge';
- case 'g':
- case 'gargantuan': return 'Gargantuan';
+ let sizeLetter = size.charAt(0).toLowerCase();
+ switch (sizeLetter) {
+ case 't': return 'Tiny';
+ case 's': return 'Small';
+ case 'm': return 'Medium';
+ case 'l': return 'Large';
+ case 'h': return 'Huge';
+ case 'g': return 'Gargantuan';
default: return capitalizeFirst(size);
}
}
const sizeToInt = function(size) {
- size = displaySize(size);
- switch (size) {
- case 'Tiny': return 0;
- case 'Small': return 1;
- case 'Medium': return 2;
- case 'Large': return 3;
- case 'Huge': return 4;
- case 'Gargantuan': return 5;
+ if (typeof size !== 'string' || size.length === 0)
+ return '';
+
+ let sizeLetter = size.charAt(0).toLowerCase();
+ switch (sizeLetter) {
+ case 't': return 0;
+ case 's': return 1;
+ case 'm': return 2;
+ case 'l': return 3;
+ case 'h': return 4;
+ case 'g': return 5;
}
}
const displayWeaponType = function (type) {
- if (typeof type !== 'string')
+ if (typeof type !== 'string' || type.length === 0)
return '';
- type = type.toLowerCase();
- switch (type) {
+ let typeLetter = type.toLowerCase();
+ switch (typeLetter) {
case 's': return 'Slashing';
case 'p': return 'Piercing';
case 'b': return 'Bludgeoning';
@@ -67163,7 +68930,7 @@ on('clicked:hide-toast', function(eventInfo) {
//#region Ability Scores logic
// Ability Score Parser function
-const EXCEPTIONAL_STRENGHT_REGEX = /18[\[(]([0-9]{1,3})[\])]/; // Ie. 18[65], 18(65)
+const EXCEPTIONAL_STRENGTH_REGEX = /18[\[(]([0-9]{1,3})[\])]/; // Ie. 18[65], 18(65)
function getLookupValue(abilityScoreString, defaultValue, isStrength = false) {
if (abilityScoreString === '') {
return defaultValue;
@@ -67175,7 +68942,7 @@ function getLookupValue(abilityScoreString, defaultValue, isStrength = false) {
}
if (isStrength) {
- let exceptionalMatch = abilityScoreString.match(EXCEPTIONAL_STRENGHT_REGEX);
+ let exceptionalMatch = abilityScoreString.match(EXCEPTIONAL_STRENGTH_REGEX);
if (exceptionalMatch !== null) {
let exceptionalStrNumber = parseInt(exceptionalMatch[1]);
if (1 <= exceptionalStrNumber && exceptionalStrNumber <= 50) {
@@ -67400,20 +69167,28 @@ on('change:intelligence change:reason change:knowledge', function() {
});
// Set sub-attributes based on Wisdom, Intuition, and Willpower
-function parseWisBonus(abilityScore) {
- if (abilityScore < 13) {
- return {
- '1st': 0,
- '2nd': 0,
- '3rd': 0,
- '4th': 0,
- '5th': 0,
- '6th': 0,
- '7th': 0,
- 'wisbonus': wisdomTable['wisbonus'][abilityScore],
- 'wisbonus-prime': wisdomTable['wisbonus'][abilityScore],
- 'wisbonus-extra': wisdomTable['wisbonus'][abilityScore],
- };
+async function parseWisBonus(abilityScore, wisdom) {
+ let bonus = {
+ '1st': 0,
+ '2nd': 0,
+ '3rd': 0,
+ '4th': 0,
+ '5th': 0,
+ '6th': 0,
+ '7th': 0,
+ 'wind': 0,
+ 'wisbonus': '—',
+ 'wisbonus-prime': '—',
+ 'wisbonus-extra': '—',
+ };
+ if (abilityScore < 13 && wisdom < 13) {
+ await keepContextRoll();
+ return bonus;
+ }
+
+ let answer = await extractQueryResult('?{Priests get bonus spells from high Wisdom (but not Paladins and Rangers). Do you play a priest?|My character is a priest,true|My character is a different class,false}');
+ if (answer !== 'true') {
+ return bonus;
}
// Combine all spell levels into one string
@@ -67423,7 +69198,7 @@ function parseWisBonus(abilityScore) {
}
// Count instances of each spell level
- let bonus = {
+ bonus = {
'1st': (bonusString.match(/1st/g) || []).length,
'2nd': (bonusString.match(/2nd/g) || []).length,
'3rd': (bonusString.match(/3rd/g) || []).length,
@@ -67431,18 +69206,28 @@ function parseWisBonus(abilityScore) {
'5th': (bonusString.match(/5th/g) || []).length,
'6th': (bonusString.match(/6th/g) || []).length,
'7th': (bonusString.match(/7th/g) || []).length,
+ 'wind': wisdomTable['wisdom-wind'][wisdom],
};
// Generate bonus prime and bonus extra strings
- bonus['wisbonus-prime'] = wisdomTable['wisbonus-prime'][abilityScore];
- bonus['wisbonus-extra'] = wisdomTable['wisbonus-extra'][abilityScore];
+ function format(bonus, key) {
+ if (bonus[key] === 0) {
+ return '';
+ }
+ if (bonus[key] === 1) {
+ return key
+ }
+ return `${bonus[key]}x${key}`;
+ }
+ bonus['wisbonus-prime'] = [format(bonus, '1st'), format(bonus, '2nd'), format(bonus, '3rd'), format(bonus, '4th')].filter(Boolean).join(', ');
+ bonus['wisbonus-extra'] = [format(bonus, '5th'), format(bonus, '6th'), format(bonus, '7th')].filter(Boolean).join(', ');
bonus['wisbonus'] = [bonus['wisbonus-prime'], bonus['wisbonus-extra']].filter(Boolean).join(', ');
return bonus;
}
on('change:wisdom change:intuition change:willpower', function() {
- getAttrs(['wisdom','intuition','willpower'], function(values) {
+ getAttrs(['wisdom','intuition','willpower'], async function (values) {
let wisdomRaw = values.wisdom.replace(/\s+/g, '');
let intuitionRaw = values.intuition.replace(/\s+/g, '');
let willpowerRaw = values.willpower.replace(/\s+/g, '');
@@ -67454,7 +69239,7 @@ on('change:wisdom change:intuition change:willpower', function() {
let bonusSpells;
if (wisdom === 0) {
- bonusSpells = parseWisBonus(0);
+ bonusSpells = await parseWisBonus(0, 0);
assignAttributes(0, 0, 0, bonusSpells, wisdomTable['wisimmune'][0], wisdomTable['wisimmune'][0], wisdomTable['wisnotes'][0], wisdomTable['wisnotes'][0]);
return;
}
@@ -67482,34 +69267,35 @@ on('change:wisdom change:intuition change:willpower', function() {
for (let i = willpower; i > 18; i--) {
wisImmuneArray.push(wisdomTable['wisimmune'][i]);
}
- let slicePoint = Math.round(wisImmuneArray.length/2);
+ let slicePoint = Math.round(wisImmuneArray.length / 2);
wisimm1 = wisImmuneArray.slice(0, slicePoint).filter(Boolean).join(', ');
wisimm2 = wisImmuneArray.slice(slicePoint).filter(Boolean).join(', ');
}
- bonusSpells = parseWisBonus(willpower);
+ bonusSpells = await parseWisBonus(intuition, wisdom);
assignAttributes(wisdom, intuition, willpower, bonusSpells, wisimm1, wisimm2, wisnotes, wis2notes);
function assignAttributes(wisdom, intuition, willpower, bonusSpells, wisimm1, wisimm2, wisnotes, wis2notes) {
- setAttrs({
- wisdef: wisdomTable['wisdef'][willpower],
- wisbonus: bonusSpells['wisbonus'],
- 'wisbonus-prime': bonusSpells['wisbonus-prime'],
- 'wisbonus-extra': bonusSpells['wisbonus-extra'],
- wisfail: wisdomTable['wisfail'][intuition],
- wisimm: wisimm1,
- wisimm1: wisimm1,
- wisimm2: wisimm2,
- wisnotes: wisnotes,
- wis2notes: wis2notes,
- 'spell-priest-level1-wisdom': bonusSpells['1st'],
- 'spell-priest-level2-wisdom': bonusSpells['2nd'],
- 'spell-priest-level3-wisdom': bonusSpells['3rd'],
- 'spell-priest-level4-wisdom': bonusSpells['4th'],
- 'spell-priest-level5-wisdom': bonusSpells['5th'],
- 'spell-priest-level6-wisdom': bonusSpells['6th'],
- 'spell-priest-level7-wisdom': bonusSpells['7th'],
- });
+ let newValue = {};
+ newValue['wisdef'] = wisdomTable['wisdef'][willpower];
+ newValue['wisbonus'] = bonusSpells['wisbonus'];
+ newValue['wisbonus-prime'] = bonusSpells['wisbonus-prime'];
+ newValue['wisbonus-extra'] = bonusSpells['wisbonus-extra'];
+ newValue['wisfail'] = wisdomTable['wisfail'][intuition];
+ newValue['wisimm'] = wisimm1;
+ newValue['wisimm1'] = wisimm1;
+ newValue['wisimm2'] = wisimm2;
+ newValue['wisnotes'] = wisnotes;
+ newValue['wis2notes'] = wis2notes;
+ newValue['spell-priest-level1-wisdom'] = bonusSpells['1st'];
+ newValue['spell-priest-level2-wisdom'] = bonusSpells['2nd'];
+ newValue['spell-priest-level3-wisdom'] = bonusSpells['3rd'];
+ newValue['spell-priest-level4-wisdom'] = bonusSpells['4th'];
+ newValue['spell-priest-level5-wisdom'] = bonusSpells['5th'];
+ newValue['spell-priest-level6-wisdom'] = bonusSpells['6th'];
+ newValue['spell-priest-level7-wisdom'] = bonusSpells['7th'];
+ newValue['wisdom-wind'] = bonusSpells['wind'];
+ setAttrs(newValue);
}
});
});
@@ -67667,10 +69453,10 @@ function setupRepeatingSpellSumming(sections, oldField, newField, resultFieldNam
}
function setupCalculateRemaining(totalField, sumField, remainingField) {
- on(`change:${totalField} change:${sumField}`, function () {
+ on(`change:${totalField} change:${sumField}`, function (eventInfo) {
getAttrs([totalField, sumField], function (values) {
- let intTotal = parseInt(values[totalField]);
- let intSum = parseInt(values[sumField]);
+ let intTotal = parseInt(values[totalField]) || 0;
+ let intSum = parseInt(values[sumField]) || 0;
console.log(`Setting ${remainingField} with value from ${totalField}: ${intTotal} and ${sumField}: ${intSum}`);
@@ -67692,9 +69478,9 @@ const PRIEST_SPHERES = [
'Chaos','Law','Numbers','Thought','Time','Travelers','War','Wards'
];
-const primarySphereRegex = new RegExp(PRIEST_SPHERES.join('|'), 'gi');
-const noElementalRegex = new RegExp(PRIEST_SPHERES.filter(s => s !== ELEMENTAL).join('|'), 'gi');
-const elementalRegex = /Earth|Air|Fire|Water/gi
+const PRIMARY_SPHERE_REGEX = new RegExp(PRIEST_SPHERES.join('|'), 'gi');
+const NO_ELEMENTAL_REGEX = new RegExp(PRIEST_SPHERES.filter(s => s !== ELEMENTAL).join('|'), 'gi');
+const ELEMENTAL_REGEX = /Earth|Air|Fire|Water/gi
function parseSpheres(spheresStrings, regex) {
let spheres = new Set();
@@ -67728,7 +69514,7 @@ function isSpellAvailable(spellName, spell, availableSpheres, elementalSpheres,
let spheres = getSpellSpheres(spell, optionalSpheres);
- let primarySpellSpheres = spheres.match(noElementalRegex) || [];
+ let primarySpellSpheres = spheres.match(NO_ELEMENTAL_REGEX) || [];
let isAvailable = primarySpellSpheres.some(sphere => availableSpheres.has(sphere));
if (isAvailable)
return true;
@@ -67740,7 +69526,7 @@ function isSpellAvailable(spellName, spell, availableSpheres, elementalSpheres,
return false;
if (spheres.includes(`${ELEMENTAL} (`))
- return spheres.match(elementalRegex).some((element) => elementalSpheres.has(element))
+ return spheres.match(ELEMENTAL_REGEX).some((element) => elementalSpheres.has(element))
// The player and the spell has the elemental sphere (without any sub elements)
// Currently only 'Commune With Nature' in the revised Player's Handbook (1995) has this property
@@ -67765,8 +69551,8 @@ function setupAddPriestSpell(postfix) {
knownSpells.add(row.S[field]);
return knownSpells;
}, new Set(), function (knownSpells,_,attrSet){
- let primarySpheres = parseSpheres(sphereFields.map(aField => attrSet.S[aField]), primarySphereRegex);
- let elementalSpheres = parseSpheres(sphereFields.map(aField => attrSet.S[aField]), elementalRegex);
+ let primarySpheres = parseSpheres(sphereFields.map(aField => attrSet.S[aField]), PRIMARY_SPHERE_REGEX);
+ let elementalSpheres = parseSpheres(sphereFields.map(aField => attrSet.S[aField]), ELEMENTAL_REGEX);
if (primarySpheres.size < 1) {
showToast(WARNING, 'No spheres found', `No valid spheres found. Please write or select some spheres`);
@@ -67897,7 +69683,7 @@ function setupSpellSlotsReset(buttonName, tab, spellLevels, allSections) {
//#endregion
//#region Wizard and Priest spells and Powers setup
-function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFields) {
+function setupAutoFillSpellInfo(section, spellsTable, optionalRulesFields) {
if (!spellsTable[section])
return;
@@ -67916,7 +69702,7 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
let spellInfo = {
[`repeating_spells-${section}_spell-cast-time`] : spell['cast-time'],
- [`repeating_spells-${section}_spell-level`] : levelFunc(spell['level'], className),
+ [`repeating_spells-${section}_spell-level`] : displaySpellLevel(spell['level'], className),
[`repeating_spells-${section}_spell-school`] : getSpellSchools(spell, books),
[`repeating_spells-${section}_spell-components`] : spell['components'],
[`repeating_spells-${section}_spell-range`] : spell['range'],
@@ -67941,8 +69727,7 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
spellInfo[`repeating_spells-${section}_spell-sphere`] = getSpellSpheres(spell, sphereRules);
}
if (!books[levelField].trim()) {
- let classLevel = capitalizeFirst(levelField.replace('level-', ''));
- let toast = getToastObject(INFO, `Set ${classLevel} caster level`, 'Almost every spell requires a caster level to calculate its effect. Without it most spells will fail and show and error in the chat');
+ let toast = getToastObject(INFO, `Set ${className} caster level`, 'Almost every spell requires a caster level to calculate its effect. Without it most spells will fail and show and error in the chat');
Object.assign(spellInfo, toast);
}
@@ -67951,8 +69736,7 @@ function setupAutoFillSpellInfo(section, spellsTable, levelFunc, optionalRulesFi
});
}
-
-let wizardSpellLevelsSections = [
+const WIZARD_SPELL_LEVELS_SECTIONS = [
{level: '1', sections: ['', '2', '3', 'wiz1']},
{level: '2', sections: ['4', '5', '6', 'wiz2']},
{level: '3', sections: ['7', '8', '9', 'wiz3']},
@@ -67970,7 +69754,7 @@ let wizardSpellLevelsSections = [
{level: '15', sections: ['64', '65', '66', 'wiz15']},
];
-let priestSpellLevelsSections = [
+const PRIEST_SPELL_LEVELS_SECTIONS = [
{level: '1', sections: ['28', '29', '30', 'pri1']},
{level: '2', sections: ['31', '32', '33', 'pri2']},
{level: '3', sections: ['34', '35', '36', 'pri3']},
@@ -67988,7 +69772,7 @@ const displaySpellLevel = function(level, className) {
}
// --- Start setup Spell Slots --- //
-wizardSpellLevelsSections.forEach(spellLevel => {
+WIZARD_SPELL_LEVELS_SECTIONS.forEach(spellLevel => {
let prefix = `spell-level${spellLevel.level}`;
setupStaticCalculateTotal(`${prefix}-total`, [`${prefix}-castable`, `${prefix}-specialist`, `${prefix}-misc`]);
setupRepeatingSpellSumming(spellLevel.sections, 'cast-value', 'spell-cast-value', `${prefix}-cast-value-sum`);
@@ -67999,14 +69783,14 @@ wizardSpellLevelsSections.forEach(spellLevel => {
// Auto set spell info function
let lastSection = spellLevel.sections[spellLevel.sections.length - 1];
if (isNewSpellSection(lastSection)) {
- setupAutoFillSpellInfo(lastSection, wizardSpells, displaySpellLevel, SCHOOL_FIELDS);
+ setupAutoFillSpellInfo(lastSection, wizardSpells, SCHOOL_FIELDS);
setupSpellCrit(lastSection);
}
});
-setupAutoFillSpellInfo('wizmonster', wizardSpells, displaySpellLevel, SCHOOL_FIELDS);
+setupAutoFillSpellInfo('wizmonster', wizardSpells, SCHOOL_FIELDS);
setupSpellCrit('wizmonster');
-priestSpellLevelsSections.forEach(spellLevel => {
+PRIEST_SPELL_LEVELS_SECTIONS.forEach(spellLevel => {
let prefix = `spell-priest-level${spellLevel.level}`;
setupStaticCalculateTotal(`${prefix}-total`, [`${prefix}-castable`, `${prefix}-wisdom`, `${prefix}-misc`]);
setupRepeatingSpellSumming(spellLevel.sections, 'cast-value', 'spell-cast-value', `${prefix}-cast-value-sum`);
@@ -68017,43 +69801,125 @@ priestSpellLevelsSections.forEach(spellLevel => {
// Auto set spell info function
let lastSection = spellLevel.sections[spellLevel.sections.length - 1];
if (isNewSpellSection(lastSection)) {
- setupAutoFillSpellInfo(lastSection, priestSpells, displaySpellLevel, SPHERE_FIELDS);
+ setupAutoFillSpellInfo(lastSection, priestSpells, SPHERE_FIELDS);
setupSpellCrit(lastSection);
if (lastSection !== 'priq') {
setupAddPriestSpell(lastSection);
}
}
});
-setupAutoFillSpellInfo('primonster', priestSpells, displaySpellLevel, SPHERE_FIELDS);
+setupAutoFillSpellInfo('primonster', priestSpells, SPHERE_FIELDS);
setupSpellCrit('primonster');
// --- End setup Spell Slots --- //
// --- Start setup Spell Points, Arc, and Wind --- //
-let wizardSpellPoints = 'spell-points';
-let arc = 'total-arc';
-let allWizardSpellSections = wizardSpellLevelsSections.flatMap(sl => sl.sections);
-setupStaticCalculateTotal(`${wizardSpellPoints}-total`, [`${wizardSpellPoints}-lvl`, `${wizardSpellPoints}-spc`, `${wizardSpellPoints}-int`]);
-setupRepeatingSpellSumming(allWizardSpellSections, wizardSpellPoints, 'spell-points', `${wizardSpellPoints}-sum`, true);
-setupRepeatingSpellSumming(allWizardSpellSections, 'arc', 'spell-arc', `${arc}-sum`, true);
-setupCalculateRemaining(`${wizardSpellPoints}-total`, `${wizardSpellPoints}-sum`, `${wizardSpellPoints}-remaining`);
-setupCalculateRemaining(arc, `${arc}-sum`, `${arc}-remaining`);
+const WIZARD_SPELL_POINTS = 'spell-points';
+const TOTAL_ARC = 'total-arc';
+const ALL_WIZARD_SPELL_SECTIONS = WIZARD_SPELL_LEVELS_SECTIONS.flatMap(sl => sl.sections);
+setupStaticCalculateTotal(`${WIZARD_SPELL_POINTS}-total`, [`${WIZARD_SPELL_POINTS}-lvl`, `${WIZARD_SPELL_POINTS}-spc`, `${WIZARD_SPELL_POINTS}-int`]);
+setupRepeatingSpellSumming(ALL_WIZARD_SPELL_SECTIONS, WIZARD_SPELL_POINTS, 'spell-points', `${WIZARD_SPELL_POINTS}-sum`, true);
+setupRepeatingSpellSumming(ALL_WIZARD_SPELL_SECTIONS, 'arc', 'spell-arc', `${TOTAL_ARC}-sum`, true);
+setupCalculateRemaining(`${WIZARD_SPELL_POINTS}-total`, `${WIZARD_SPELL_POINTS}-sum`, `${WIZARD_SPELL_POINTS}-remaining`);
+setupCalculateRemaining(TOTAL_ARC, `${TOTAL_ARC}-sum`, `${TOTAL_ARC}-remaining`);
+on('change:spell-points-int-enabled change:intelligence', function (eventInfo) {
+ getAttrs(['spell-points-int-enabled', 'intelligence'], function (values) {
+ let newValue = {'spell-points-int': 0}
+ if (values['spell-points-int-enabled'] !== '1') {
+ return setAttrs(newValue);
+ }
+ let intelligence = getLookupValue(values['intelligence'], 0);
+ newValue['spell-points-int'] = intelligenceTable['spell-points-int'][intelligence];
+ setAttrs(newValue);
+ });
+});
-let priestSpellPoints = 'spell-points-priest';
-let wind = 'total-wind';
-let allPriestSpellSections = priestSpellLevelsSections.flatMap(sl => sl.sections);
-setupStaticCalculateTotal(`${priestSpellPoints}-total`, [`${priestSpellPoints}-lvl`, `${priestSpellPoints}-wis`]);
-setupRepeatingSpellSumming(allPriestSpellSections, priestSpellPoints, 'spell-points', `${priestSpellPoints}-sum`, true);
-setupRepeatingSpellSumming(allPriestSpellSections, 'wind', 'spell-wind', `${wind}-sum`, true);
-setupCalculateRemaining(`${priestSpellPoints}-total`, `${priestSpellPoints}-sum`, `${priestSpellPoints}-remaining`);
-setupCalculateRemaining(wind, `${wind}-sum`, `${wind}-remaining`);
+const PRIEST_SPELL_POINTS = 'spell-points-priest';
+const TOTAL_WIND = 'total-wind';
+const ALL_PRIEST_SPELL_SECTIONS = PRIEST_SPELL_LEVELS_SECTIONS.flatMap(sl => sl.sections);
+setupStaticCalculateTotal(`${PRIEST_SPELL_POINTS}-total`, [`${PRIEST_SPELL_POINTS}-lvl`, `${PRIEST_SPELL_POINTS}-wis`]);
+setupStaticCalculateTotal(TOTAL_WIND, ['level-wind', 'wisdom-wind']);
+setupRepeatingSpellSumming(ALL_PRIEST_SPELL_SECTIONS, PRIEST_SPELL_POINTS, 'spell-points', `${PRIEST_SPELL_POINTS}-sum`, true);
+setupRepeatingSpellSumming(ALL_PRIEST_SPELL_SECTIONS, 'wind', 'spell-wind', `${TOTAL_WIND}-sum`, true);
+setupCalculateRemaining(`${PRIEST_SPELL_POINTS}-total`, `${PRIEST_SPELL_POINTS}-sum`, `${PRIEST_SPELL_POINTS}-remaining`);
+setupCalculateRemaining(TOTAL_WIND, `${TOTAL_WIND}-sum`, `${TOTAL_WIND}-remaining`);
+let PRIEST_SPELL_POINTS_WIS = 'spell-points-priest-wis';
+on('change:spell-points-priest-wis-enabled change:wisdom change:level-priest', function (eventInfo) {
+ getAttrs(['spell-points-priest-wis-enabled', 'wisdom', 'level-priest'], async function (values) {
+ await keepContextRoll();
+ let newValue = {};
+ newValue[PRIEST_SPELL_POINTS_WIS] = 0;
+ if (values['spell-points-priest-wis-enabled'] !== '1') {
+ return setAttrs(newValue);
+ }
+ let wisdom = getLookupValue(values['wisdom'], 0);
+ if (wisdom < 13) {
+ return setAttrs(newValue);
+ }
+ if (wisdom === 13) {
+ newValue[PRIEST_SPELL_POINTS_WIS] = 4;
+ return setAttrs(newValue);
+ }
+ if (wisdom === 14) {
+ newValue[PRIEST_SPELL_POINTS_WIS] = 8;
+ return setAttrs(newValue);
+ }
+
+ let level = 1;
+ if (values['level-priest'] === '') {
+ return showToast(INFO, 'Set Priest caster level', 'The Priest\'s level is needed to calculate bonus Spell Points from high Wisdom.');
+ } else {
+ level = await extractRollResult(values['level-priest']);
+ }
+ if (isNaN(level) || level < 0) {
+ level = 1;
+ }
+ let spellPoints = 0;
+ if (wisdom === 15) {
+ spellPoints = level < 3 ? 8 : 15;
+ } else if (wisdom === 16) {
+ spellPoints = level < 3 ? 8 : 20;
+ } else if (wisdom === 17) {
+ if (1 <= level && level <= 2) {
+ spellPoints = 8;
+ } else if (3 <= level && level <= 4) {
+ spellPoints = 20;
+ } else {
+ spellPoints = 30;
+ }
+ } else if (wisdom === 18) {
+ if (1 <= level && level <= 2) {
+ spellPoints = 8;
+ } else if (3 <= level && level <= 4) {
+ spellPoints = 20;
+ } else if (5 <= level && level <= 6) {
+ spellPoints = 30;
+ } else {
+ spellPoints = 45;
+ }
+ } else if (wisdom >= 19) {
+ if (1 <= level && level <= 2) {
+ spellPoints = 12;
+ } else if (3 <= level && level <= 4) {
+ spellPoints = 25;
+ } else if (5 <= level && level <= 6) {
+ spellPoints = 45;
+ } else {
+ spellPoints = 60;
+ }
+ }
+
+ newValue[PRIEST_SPELL_POINTS_WIS] = spellPoints;
+ setAttrs(newValue);
+ });
+});
// --- End setup Spell Points, Arc, and Wind --- //
// --- Start setup reset buttons --- //
//tab6 = wizard levels
//tab7 = priest levels
-setupSpellSlotsReset('reset-spent-slots-wiz', 'tab6', wizardSpellLevelsSections, allWizardSpellSections);
-let allPriestSectionsExceptQuest = priestSpellLevelsSections.slice(0, -1).flatMap(sl => sl.sections);
-setupSpellSlotsReset('reset-spent-slots-pri', 'tab7', priestSpellLevelsSections, allPriestSectionsExceptQuest);
+setupSpellSlotsReset('reset-spent-slots-wiz', 'tab6', WIZARD_SPELL_LEVELS_SECTIONS, ALL_WIZARD_SPELL_SECTIONS);
+let allPriestSectionsExceptQuest = PRIEST_SPELL_LEVELS_SECTIONS.slice(0, -1).flatMap(sl => sl.sections);
+setupSpellSlotsReset('reset-spent-slots-pri', 'tab7', PRIEST_SPELL_LEVELS_SECTIONS, allPriestSectionsExceptQuest);
// --- End setup reset buttons --- //
// --- Start setup Granted Powers --- //
@@ -68119,19 +69985,14 @@ on('change:repeating_customrogue:crl remove:repeating_customrogue', function(){
//#endregion
//#region Weapons tab logic and autofil
-//Used in version.js
-const updateNonprofPenalty = function () {
- getAttrs(['nonprof-penalty'], function(values) {
- let nonprof = Math.abs(parseInt(values['nonprof-penalty'])) * -1;
- let famil = Math.floor(nonprof / 2)
- setAttrs({
- ['nonprof-penalty']: nonprof,
- ['famil-penalty']: famil
- },{silent:true});
- });
-}
on('change:nonprof-penalty', function (eventInfo){
- updateNonprofPenalty();
+ let nonprofRaw = parseInt(eventInfo.newValue) || 0;
+ let nonprof = Math.abs(nonprofRaw) * -1;
+ let famil = Math.floor(nonprof / 2)
+ setAttrs({
+ ['nonprof-penalty']: nonprof,
+ ['famil-penalty']: famil
+ },{silent:true});
});
on('change:thac0-base-calc', function(eventInfo) {
@@ -68162,7 +70023,7 @@ async function selectVersion(foundObjects, values, comparer, objectName) {
return;
}
- let isPlayersOption = values[PLAYERS_OPTION_FIELD] === '2';
+ let isPlayersOption = values[WEAPONS_PLAYERS_OPTION_FIELD] === '2';
let isAllEqual = activeObjects.every(o => comparer(o, activeObjects[0], isPlayersOption));
if (isAllEqual) {
await keepContextRoll();
@@ -68202,13 +70063,13 @@ function combineBooks(activeObjects, comparer, isPlayersOptions) {
}
//#region Weapons autofill
-const PLAYERS_OPTION_FIELD = 'tab81';
+const WEAPONS_PLAYERS_OPTION_FIELD = 'tab81';
function setWeaponWithBonus(weaponName, setWeaponFunc, comparer, thac0Field, category) {
if (!weaponName)
return;
weaponName = weaponName.toLowerCase();
- let fields = [...BOOK_FIELDS, PLAYERS_OPTION_FIELD, thac0Field].filter(Boolean);
+ let fields = [...BOOK_FIELDS, WEAPONS_PLAYERS_OPTION_FIELD, thac0Field].filter(Boolean);
getAttrs(fields, async function (values) {
let bonus = 0;
let baseWeapons = WEAPONS_TABLE[weaponName]
@@ -68286,13 +70147,13 @@ on('change:repeating_weapons:weaponname', function(eventInfo) {
//melee damage autofill
on('change:repeating_weapons-damage:weaponname1', function(eventInfo) {
let comparer = function (weapon1, weapon2, isPlayersOption) {
- let fisk = ['small-medium','large'];
+ let compareFields = ['small-medium','large'];
if (isPlayersOption) {
- fisk.push('size');
- fisk.push('type');
- fisk.push('knockdown');
+ compareFields.push('size');
+ compareFields.push('type');
+ compareFields.push('knockdown');
}
- return fisk.every(f => weapon1[f] === weapon2[f])
+ return compareFields.every(f => weapon1[f] === weapon2[f])
}
let rowId = parseSourceAttribute(eventInfo).rowId;
let setWeaponFunc = function (weapon) {
@@ -68396,7 +70257,7 @@ function setupFollowerWeaponsAutoFill(repeating, sections) {
});
}
-const followerWeapons = [
+const FOLLOWER_WEAPONS = [
{repeating: '', sections: ['', '001', '002']},
{repeating: 'hench', sections: ['003', '004', '005']},
{repeating: '', sections: ['006', '007', '008']},
@@ -68411,7 +70272,7 @@ const followerWeapons = [
{repeating: 'hench6', sections: ['033', '034', '035']},
];
-followerWeapons.forEach(fw => {
+FOLLOWER_WEAPONS.forEach(fw => {
setupFollowerWeaponsAutoFill(fw.repeating, fw.sections);
});
@@ -69040,11 +70901,10 @@ function weaponPoCritTemplate(prefix, fields, nameFunc, baseDamageFunc, damageAd
//#region Proficiencies
//Weapon proficiency slots
-const updateWeaponProfsRemaining = () => repeatingCalculateRemaining('weaponprofs', ['weapprofnum'], 'weapprof-slots-total-calc', 'weapprof-slots-remain');
on('change:repeating_weaponprofs:weapprofnum remove:repeating_weaponprofs change:weapprof-slots-total-calc', function(eventInfo) {
if (doEarlyReturn(eventInfo, ['weapprofnum']))
return;
- updateWeaponProfsRemaining();
+ repeatingCalculateRemaining('weaponprofs', ['weapprofnum'], 'weapprof-slots-total-calc', 'weapprof-slots-remain');
});
//Weapon proficiency autofill
on('change:repeating_weaponprofs:weapprofname', function(eventInfo) {
@@ -69371,12 +71231,14 @@ const setPsionicDisciplineVisibility = function(newValue) {
elements.removeClass('sheet-show');
}
}
-on('change:tab8 sheet:opened', function (eventInfo) {
+
+const PSIONIC_SKILLS_AND_POWERS_FIELD = 'tab8';
+on(`change:${PSIONIC_SKILLS_AND_POWERS_FIELD} sheet:opened`, function (eventInfo) {
if (eventInfo.newValue)
return setPsionicDisciplineVisibility(eventInfo.newValue);
- getAttrs(['tab8'], function (values) {
- setPsionicDisciplineVisibility(values['tab8']);
+ getAttrs([PSIONIC_SKILLS_AND_POWERS_FIELD], function (values) {
+ setPsionicDisciplineVisibility(values[PSIONIC_SKILLS_AND_POWERS_FIELD]);
})
});
@@ -69614,14 +71476,18 @@ PSIONIC_CORE_SECTIONS.forEach(({section, name, macro, number, cost_number, disci
//#endregion
// Show / Hide buttons for various repeating sections
-const REPEATING_SECTIONS = [
+const FOLDABLE_REPEATING_SECTIONS = [
+ ...WIZARD_SPELL_LEVELS_SECTIONS.map(e => e.sections[e.sections.length-1]).map(e => `spells-${e}`),
+ 'spells-wizmonster',
+ ...PRIEST_SPELL_LEVELS_SECTIONS.map(e => e.sections[e.sections.length-1]).map(e => `spells-${e}`),
+ 'spells-primonster',
...PSIONIC_CORE_SECTIONS.map(e => e.section),
'scrolls',
];
-REPEATING_SECTIONS.forEach(section => {
+FOLDABLE_REPEATING_SECTIONS.forEach(section => {
on(`clicked:repeating_${section}:show clicked:repeating_${section}:hide`, function (eventInfo) {
let parse = parseSourceAttribute(eventInfo);
- $20(`div[data-reprowid=${parse.rowId}] .sheet-hidden`).toggleClass('sheet-show');
+ $20(`div[data-reprowid=${parse.rowId}] .sheet-hidden.sheet-fold`).toggleClass('sheet-show');
});
});
@@ -69649,7 +71515,7 @@ on(BOOK_FIELDS.map(b => `change:${b}`).join(' '), function (eventInfo) {
// --- Version change start --- //
const SHEET_NAME = 'AD&D 2E Revised';
-const SHEET_VERSION = '4.14.2';
+const SHEET_VERSION = '4.15.0';
on('sheet:opened', function(){
getAttrs(['character_sheet'],function(attrs){
@@ -69676,9 +71542,6 @@ on('sheet:opened', function(){
if (oldSheetVersion.isBelowMigrate(3, 3, 2))
migrate3_3_2();
- if (oldSheetVersion.isBelowMigrate(3, 4, 0))
- migrate3_4_0();
-
if (oldSheetVersion.isBelowMigrate(4, 3, 0))
migrate4_3_0();
}
@@ -69835,13 +71698,6 @@ function migrateOtherValuables() {
}
//#endregion
-//#region version 3.4.0
-function migrate3_4_0() {
- console.log('Migrating to v3.4.0');
- updateNonprofPenalty();
-}
-//#endregion
-
//#region version 3.3.2
function migrate3_3_2() {
console.log('Migrating to v3.3.2');
diff --git a/ADnD_2E_Revised/2EStyle.css b/ADnD_2E_Revised/2EStyle.css
index a1ad9b7db1..0b305e9f23 100644
--- a/ADnD_2E_Revised/2EStyle.css
+++ b/ADnD_2E_Revised/2EStyle.css
@@ -1,10 +1,3 @@
-input,
-button,
-select,
-textarea {
- background-color: white;
-}
-
.charsheet input {
display: inline-block;
width: 165px;
@@ -52,12 +45,10 @@ textarea {
.charsheet input.sheet-madtext {
width: 79px;
}
-.charsheet select.sheet-spell-select,
.charsheet select.sheet-attr,
.charsheet input.sheet-attr {
width: 80px;
}
-.charsheet select.sheet-spell-select-min,
.charsheet select.sheet-attr-min,
.charsheet input.sheet-attr-min {
min-width: 80px;
@@ -155,10 +146,6 @@ textarea {
.charsheet input.sheet-nonweaponprof {
width: 260px;
}
-.charsheet select.sheet-spell-big,
-.charsheet input.sheet-spell-big {
- width: 295px;
-}
.charsheet select.sheet-long,
.charsheet input.sheet-long {
width: 400px;
@@ -201,10 +188,24 @@ textarea {
box-sizing: border-box;
}
+.charsheet select.sheet-table-dynamic {
+ margin: 0;
+}
+
.charsheet input.sheet-table-dynamic90 {
min-width: 90%;
}
+.charsheet th.sheet-td-dynamic20,
+.charsheet td.sheet-td-dynamic20 {
+ width: 20%;
+}
+
+.charsheet th.sheet-td-dynamic25,
+.charsheet td.sheet-td-dynamic25 {
+ width: 25%;
+}
+
.charsheet th.sheet-td-dynamic30,
.charsheet td.sheet-td-dynamic30 {
width: 30%;
@@ -215,6 +216,11 @@ textarea {
width: 50%;
}
+.charsheet th.sheet-td-dynamic60,
+.charsheet td.sheet-td-dynamic60 {
+ width: 60%;
+}
+
.charsheet th.sheet-td-dynamic70,
.charsheet td.sheet-td-dynamic70 {
width: 70%;
@@ -225,36 +231,6 @@ textarea {
width: 100%;
}
-.charsheet select.sheet-table-dynamic {
- margin: 0;
-}
-
-.charsheet input[type="number"].sheet-tiny {
- width: 23px;
-}
-input[type="number"].sheet-tiny::-webkit-inner-spin-button {
- -webkit-appearance: none;
-}
-input[type="number"].sheet-nobut::-webkit-inner-spin-button {
- -webkit-appearance: none;
-}
-
-input.sheet-arrow
-{
- float: left;
-}
-
-input.sheet-arrow:checked ~ div.sheet-body
-{
- display: none;
-}
-
-.charsheet input[type="checkbox"].left {
- float: left;
- margin: 5px 0;
- width: 2px;
-}
-
input.sheet-tab:not(:first-child)::before
{
border-left: none;
@@ -316,106 +292,103 @@ textarea.sheet-input-like {
content: "✓";
}
-div[class^="sheet-section"] {
+.charsheet input.sheet-tab1:checked ~ .sheet-section-character-page,
+.charsheet input.sheet-tab2:checked ~ .sheet-section-monster-page,
+.charsheet input.sheet-tab3:checked ~ .sheet-section-character-info,
+.charsheet input.sheet-tab4:checked ~ .sheet-section-attributes,
+.charsheet input.sheet-tab5:checked ~ .sheet-section-weapons,
+.charsheet input.sheet-tab6:checked ~ .sheet-section-rogue,
+.charsheet input.sheet-tab7:checked ~ .sheet-section-proficiencies,
+.charsheet input.sheet-tab8:checked ~ .sheet-section-spells,
+.charsheet input.sheet-tab9:checked ~ .sheet-section-psionics,
+.charsheet input.sheet-tab10:checked ~ .sheet-section-equipment,
+.charsheet input.sheet-tab11:checked ~ .sheet-section-currency,
+.charsheet input.sheet-tab12:checked ~ .sheet-section-followers,
+.charsheet input.sheet-tab14:checked ~ .sheet-section-ravenloft-saves,
+.charsheet input.sheet-tab15:checked ~ .sheet-section-movement-standard,
+.charsheet input.sheet-tab16:checked ~ .sheet-section-movement-advanced,
+.charsheet input.sheet-tab17:checked ~ .sheet-section-attributes-standard,
+.charsheet input.sheet-tab18:checked ~ .sheet-section-attributes-player-option,
+.charsheet input.sheet-tab19:checked ~ .sheet-section-wizard-spells,
+.charsheet input.sheet-tab20:checked ~ .sheet-section-priest-spells,
+.charsheet input.sheet-tab21:checked ~ .sheet-section-wizard-level-one,
+.charsheet input.sheet-tab22:checked ~ .sheet-section-wizard-level-two,
+.charsheet input.sheet-tab23:checked ~ .sheet-section-wizard-level-three,
+.charsheet input.sheet-tab24:checked ~ .sheet-section-wizard-level-four,
+.charsheet input.sheet-tab25:checked ~ .sheet-section-wizard-level-five,
+.charsheet input.sheet-tab26:checked ~ .sheet-section-wizard-level-six,
+.charsheet input.sheet-tab27:checked ~ .sheet-section-wizard-level-seven,
+.charsheet input.sheet-tab28:checked ~ .sheet-section-wizard-level-eight,
+.charsheet input.sheet-tab29:checked ~ .sheet-section-wizard-level-nine,
+.charsheet input.sheet-tab30:checked ~ .sheet-section-wizard-level-ten,
+.charsheet input.sheet-tab31:checked ~ .sheet-section-priest-level-one,
+.charsheet input.sheet-tab32:checked ~ .sheet-section-priest-level-two,
+.charsheet input.sheet-tab33:checked ~ .sheet-section-priest-level-three,
+.charsheet input.sheet-tab34:checked ~ .sheet-section-priest-level-four,
+.charsheet input.sheet-tab35:checked ~ .sheet-section-priest-level-five,
+.charsheet input.sheet-tab36:checked ~ .sheet-section-priest-level-six,
+.charsheet input.sheet-tab37:checked ~ .sheet-section-priest-level-seven,
+.charsheet input.sheet-tab31:checked ~ div .sheet-section-priest-level-one,
+.charsheet input.sheet-tab32:checked ~ div .sheet-section-priest-level-two,
+.charsheet input.sheet-tab33:checked ~ div .sheet-section-priest-level-three,
+.charsheet input.sheet-tab34:checked ~ div .sheet-section-priest-level-four,
+.charsheet input.sheet-tab35:checked ~ div .sheet-section-priest-level-five,
+.charsheet input.sheet-tab36:checked ~ div .sheet-section-priest-level-six,
+.charsheet input.sheet-tab37:checked ~ div .sheet-section-priest-level-seven,
+.charsheet input.sheet-tab38:checked ~ .sheet-section-priest-quest,
+.charsheet input.sheet-tab39:checked ~ .sheet-section-rogue-standard,
+.charsheet input.sheet-tab40:checked ~ .sheet-section-psionic-standard,
+.charsheet input.sheet-tab41:checked ~ .sheet-section-psionic-advanced,
+.charsheet input.sheet-tab42:checked ~ .sheet-section-currency-standard,
+.charsheet input.sheet-tab43:checked ~ .sheet-section-currency-dragonlance,
+.charsheet input.sheet-tab44:checked ~ .sheet-section-currency-dark-sun,
+.charsheet input.sheet-tab45:checked ~ .sheet-section-currency-ravenloft,
+.charsheet input.sheet-tab46:checked ~ .sheet-section-follower-warrior,
+.charsheet input.sheet-tab47:checked ~ .sheet-section-follower-wizard,
+.charsheet input.sheet-tab48:checked ~ .sheet-section-follower-priest,
+.charsheet input.sheet-tab49:checked ~ .sheet-section-follower-rogue,
+.charsheet input.sheet-tab50:checked ~ .sheet-section-follower-psion,
+.charsheet input.sheet-tab51:checked ~ .sheet-section-follower-animals,
+.charsheet input.sheet-tab52:checked ~ .sheet-section-priest-turn,
+.charsheet input.sheet-tab53:checked ~ .sheet-section-journal,
+.charsheet input.sheet-tab54:checked ~ .sheet-section-wizard-level-eleven,
+.charsheet input.sheet-tab55:checked ~ .sheet-section-wizard-level-twelve,
+.charsheet input.sheet-tab56:checked ~ .sheet-section-wizard-level-thirteen,
+.charsheet input.sheet-tab57:checked ~ .sheet-section-wizard-level-fourteen,
+.charsheet input.sheet-tab58:checked ~ .sheet-section-wizard-level-fifteen,
+.charsheet input.sheet-tab59:checked ~ .sheet-section-currency-maztica,
+.charsheet input.sheet-tab60:checked ~ .sheet-section-rogue-spds,
+.charsheet input.sheet-tab61:checked ~ .sheet-section-rogue-standard-hench,
+.charsheet input.sheet-tab62:checked ~ .sheet-section-rogue-spds-hench,
+.charsheet input.sheet-tab63:checked ~ .sheet-section-rogue-standard-repeat,
+.charsheet input.sheet-tab64:checked ~ .sheet-section-rogue-spds-repeat,
+.charsheet input.sheet-tab65:checked ~ .sheet-section-psionics-standard-hench,
+.charsheet input.sheet-tab66:checked ~ .sheet-section-psionics-advanced-hench,
+.charsheet input.sheet-tab67:checked ~ .sheet-section-psionics-standard-repeat,
+.charsheet input.sheet-tab68:checked ~ .sheet-section-psionics-advanced-repeat,
+.charsheet input.sheet-tab69:checked ~ .sheet-section-granted-powers,
+.charsheet input.sheet-tab70:checked ~ .sheet-section-weapon-standard-melee,
+.charsheet input.sheet-tab71:checked ~ .sheet-section-weapon-standard-ranged,
+.charsheet input.sheet-tab72:checked ~ .sheet-section-movement-mount,
+.charsheet input.sheet-tab73:checked ~ .sheet-section-character-info-details,
+.charsheet input.sheet-tab74:checked ~ .sheet-section-character-info-tracker,
+.charsheet input.sheet-tab75:checked ~ .sheet-section-currency-birthright,
+.charsheet input.sheet-tab76:checked ~ .sheet-section-birthright,
+.charsheet input.sheet-tab77:checked ~ .sheet-section-movement-barbarian,
+.charsheet input.sheet-tab79:checked ~ .sheet-section-movement-swimming,
+.charsheet input.sheet-tab80:checked ~ .sheet-section-movement-flying,
+.charsheet input.sheet-tab81:checked ~ .sheet-section-weapon-standard,
+.charsheet input.sheet-tab82:checked ~ .sheet-section-weapon-player-option,
+.charsheet input.sheet-tab83:checked ~ .sheet-section-weapon-player-option-melee,
+.charsheet input.sheet-tab84:checked ~ .sheet-section-weapon-player-option-ranged,
+.charsheet input.sheet-tab85:checked ~ .sheet-section-settings-page {
display: block;
}
-.charsheet input.sheet-tab1:checked ~ div.sheet-section-character-page,
-.charsheet input.sheet-tab2:checked ~ div.sheet-section-monster-page,
-.charsheet input.sheet-tab3:checked ~ div.sheet-section-character-info,
-.charsheet input.sheet-tab4:checked ~ div.sheet-section-attributes,
-.charsheet input.sheet-tab5:checked ~ div.sheet-section-weapons,
-.charsheet input.sheet-tab6:checked ~ div.sheet-section-rogue,
-.charsheet input.sheet-tab7:checked ~ div.sheet-section-proficiencies,
-.charsheet input.sheet-tab8:checked ~ div.sheet-section-spells,
-.charsheet input.sheet-tab9:checked ~ div.sheet-section-psionics,
-.charsheet input.sheet-tab10:checked ~ div.sheet-section-equipment,
-.charsheet input.sheet-tab11:checked ~ div.sheet-section-currency,
-.charsheet input.sheet-tab12:checked ~ div.sheet-section-followers,
-.charsheet input.sheet-tab13:checked ~ div.sheet-section-standard-saves,
-.charsheet input.sheet-tab14:checked ~ div.sheet-section-ravenloft-saves,
-.charsheet input.sheet-tab15:checked ~ div.sheet-section-movement-standard,
-.charsheet input.sheet-tab16:checked ~ div.sheet-section-movement-advanced,
-.charsheet input.sheet-tab17:checked ~ div.sheet-section-attributes-standard,
-.charsheet input.sheet-tab18:checked ~ div.sheet-section-attributes-player-option,
-.charsheet input.sheet-tab19:checked ~ div.sheet-section-wizard-spells,
-.charsheet input.sheet-tab20:checked ~ div.sheet-section-priest-spells,
-.charsheet input.sheet-tab21:checked ~ div.sheet-section-wizard-level-one,
-.charsheet input.sheet-tab22:checked ~ div.sheet-section-wizard-level-two,
-.charsheet input.sheet-tab23:checked ~ div.sheet-section-wizard-level-three,
-.charsheet input.sheet-tab24:checked ~ div.sheet-section-wizard-level-four,
-.charsheet input.sheet-tab25:checked ~ div.sheet-section-wizard-level-five,
-.charsheet input.sheet-tab26:checked ~ div.sheet-section-wizard-level-six,
-.charsheet input.sheet-tab27:checked ~ div.sheet-section-wizard-level-seven,
-.charsheet input.sheet-tab28:checked ~ div.sheet-section-wizard-level-eight,
-.charsheet input.sheet-tab29:checked ~ div.sheet-section-wizard-level-nine,
-.charsheet input.sheet-tab30:checked ~ div.sheet-section-wizard-level-ten,
-.charsheet input.sheet-tab31:checked ~ div.sheet-section-priest-level-one,
-.charsheet input.sheet-tab32:checked ~ div.sheet-section-priest-level-two,
-.charsheet input.sheet-tab33:checked ~ div.sheet-section-priest-level-three,
-.charsheet input.sheet-tab34:checked ~ div.sheet-section-priest-level-four,
-.charsheet input.sheet-tab35:checked ~ div.sheet-section-priest-level-five,
-.charsheet input.sheet-tab36:checked ~ div.sheet-section-priest-level-six,
-.charsheet input.sheet-tab37:checked ~ div.sheet-section-priest-level-seven,
-.charsheet input.sheet-tab38:checked ~ div.sheet-section-priest-quest,
-.charsheet input.sheet-tab39:checked ~ div.sheet-section-rogue-standard,
-.charsheet input.sheet-tab40:checked ~ div.sheet-section-psionic-standard,
-.charsheet input.sheet-tab41:checked ~ div.sheet-section-psionic-advanced,
-.charsheet input.sheet-tab42:checked ~ div.sheet-section-currency-standard,
-.charsheet input.sheet-tab43:checked ~ div.sheet-section-currency-dragonlance,
-.charsheet input.sheet-tab44:checked ~ div.sheet-section-currency-dark-sun,
-.charsheet input.sheet-tab45:checked ~ div.sheet-section-currency-ravenloft,
-.charsheet input.sheet-tab46:checked ~ div.sheet-section-follower-warrior,
-.charsheet input.sheet-tab47:checked ~ div.sheet-section-follower-wizard,
-.charsheet input.sheet-tab48:checked ~ div.sheet-section-follower-priest,
-.charsheet input.sheet-tab49:checked ~ div.sheet-section-follower-rogue,
-.charsheet input.sheet-tab50:checked ~ div.sheet-section-follower-psion,
-.charsheet input.sheet-tab51:checked ~ div.sheet-section-follower-animals,
-.charsheet input.sheet-tab52:checked ~ div.sheet-section-priest-turn,
-.charsheet input.sheet-tab53:checked ~ div.sheet-section-journal,
-.charsheet input.sheet-tab54:checked ~ div.sheet-section-wizard-level-eleven,
-.charsheet input.sheet-tab55:checked ~ div.sheet-section-wizard-level-twelve,
-.charsheet input.sheet-tab56:checked ~ div.sheet-section-wizard-level-thirteen,
-.charsheet input.sheet-tab57:checked ~ div.sheet-section-wizard-level-fourteen,
-.charsheet input.sheet-tab58:checked ~ div.sheet-section-wizard-level-fifteen,
-.charsheet input.sheet-tab59:checked ~ div.sheet-section-currency-maztica,
-.charsheet input.sheet-tab60:checked ~ div.sheet-section-rogue-spds,
-.charsheet input.sheet-tab61:checked ~ div.sheet-section-rogue-standard-hench,
-.charsheet input.sheet-tab62:checked ~ div.sheet-section-rogue-spds-hench,
-.charsheet input.sheet-tab63:checked ~ div.sheet-section-rogue-standard-repeat,
-.charsheet input.sheet-tab64:checked ~ div.sheet-section-rogue-spds-repeat,
-.charsheet input.sheet-tab65:checked ~ div.sheet-section-psionics-standard-hench,
-.charsheet input.sheet-tab66:checked ~ div.sheet-section-psionics-advanced-hench,
-.charsheet input.sheet-tab67:checked ~ div.sheet-section-psionics-standard-repeat,
-.charsheet input.sheet-tab68:checked ~ div.sheet-section-psionics-advanced-repeat,
-.charsheet input.sheet-tab69:checked ~ div.sheet-section-granted-powers,
-.charsheet input.sheet-tab70:checked ~ div.sheet-section-weapon-standard-melee,
-.charsheet input.sheet-tab71:checked ~ div.sheet-section-weapon-standard-ranged,
-.charsheet input.sheet-tab72:checked ~ div.sheet-section-movement-mount,
-.charsheet input.sheet-tab73:checked ~ div.sheet-section-character-info-details,
-.charsheet input.sheet-tab74:checked ~ div.sheet-section-character-info-tracker,
-.charsheet input.sheet-tab75:checked ~ div.sheet-section-currency-birthright,
-.charsheet input.sheet-tab76:checked ~ div.sheet-section-birthright,
-.charsheet input.sheet-tab77:checked ~ div.sheet-section-movement-barbarian,
-.charsheet input.sheet-tab78:checked ~ div.sheet-section-attributes-dream,
-.charsheet input.sheet-tab79:checked ~ div.sheet-section-movement-swimming,
-.charsheet input.sheet-tab80:checked ~ div.sheet-section-movement-flying,
-.charsheet input.sheet-tab81:checked ~ div.sheet-section-weapon-standard,
-.charsheet input.sheet-tab82:checked ~ div.sheet-section-weapon-player-option,
-.charsheet input.sheet-tab83:checked ~ div.sheet-section-weapon-player-option-melee,
-.charsheet input.sheet-tab84:checked ~ div.sheet-section-weapon-player-option-ranged,
-.charsheet input.sheet-tab85:checked ~ div.sheet-section-settings-page {
- display: block;
-}
-
-.charsheet input.sheet-tab99:checked ~ div[class^="sheet-section"] {
- display: block;
-}
-
.charsheet input.sheet-tab {
width: 120px;
height: inherit;
- cursor: pointer;
+ cursor: pointer;
position: relative;
opacity: 0;
z-index: 9999;
@@ -423,16 +396,16 @@ div[class^="sheet-section"] {
.charsheet span.sheet-tab {
text-align: center;
- display: inline-block;
- font-size: 14px;
- background: #800a0a;
+ display: inline-block;
+ font-size: 14px;
+ background: #800a0a;
color: white;
font-weight: bold;
border-radius: 4px;
width: 120px;
height: inherit;
- cursor: pointer;
+ cursor: pointer;
position: relative;
}
@@ -549,7 +522,6 @@ div[class^="sheet-section"] {
cursor: pointer;
z-index: 1;
}
-input.sheet-tab + span::before,
input.sheet-tab + span::before
{
margin-right: 4px;
@@ -580,11 +552,6 @@ input.sheet-tab + span::before
padding: 0 0 0 0;
}
-/* Dark Mode override */
-.sheet-darkmode .charsheet label {
- color: #333;
-}
-
.charsheet h1,
.charsheet h2,
.charsheet h3,
@@ -594,283 +561,364 @@ input.sheet-tab + span::before
font-weight: 800;
}
-/*h2,h3,h4,h5,h6 {*/
-/* line-height:1em;*/
-/* display:inline;*/
-/* font-family: Arial, sans-serif;*/
-/* font-size:.8125rem;*/
-/* color: #000;*/
-/*}*/
-
-
-/*h1 {*/
-/* width: 100%;*/
-/* background-color: #FFF;*/
-/* color: #000;*/
-/* padding:.2em 0 0 0;*/
-/* min-height: 1em;*/
-/* margin: 0 0 .5em 0;*/
-/* font-size:.8125rem;*/
-/* line-height:1.4em;*/
-/* display:block;*/
-/* text-align:center;*/
-/*}*/
-
-.sheet-small-label1 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 72px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label1 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label1 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label1 select {
- margin-top:-2px;
- width: 72px;
- border: .5px;
-}
-.sheet-small-label2 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 63px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label2 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label2 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label2 select {
- margin-top:-2px;
- width: 63px;
- border: .5px;
-}
-.sheet-small-label3 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 85px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label3 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label3 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label3 select {
- margin-top:-2px;
- width: 85px;
- border: .5px;
-}
-.sheet-small-label4 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 67px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label4 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label4 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label4 select {
- margin-top:-2px;
- width: 67px;
- border: .5px;
-}
-.sheet-small-label5 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 105px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label5 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label5 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label5 select {
- margin-top:-2px;
- width: 105px;
- border: .5px;
-}
-.sheet-small-label6 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 75px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label6 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label6 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label6 select {
- margin-top:-2px;
- width: 75px;
- border: .5px;
-}
-.sheet-small-label7 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 125px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label7 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label7 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label7 select {
- margin-top:-2px;
- width: 125px;
- border: .5px;
-}
-
-button {
- background-color: #7C0303;
-}
-
.charsheet,
.charsheet button:hover {
background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/background-parchment_paper_seamless_pattern.jpg");
}
+.sheet-inline,
+.sheet-inline-5 {
+ display: inline-block;
+}
+
+.sheet-inline-5 {
+ padding-right: 5px;
+}
+
+table.sheet-default-header-first-row tr:first-child,
+table.sheet-default-header-thead thead:first-child,
+table.sheet-default-header-even-row tr:nth-child(even),
+table.sheet-default-header-odd-row tr:nth-child(odd),
+table.sheet-default-header-every-third-row tr:nth-child(3n+1),
+table.sheet-default-header-first-column td:first-child,
+table.sheet-default-header-first-column th:first-child,
+table.sheet-default-header-even-column td:nth-child(even),
+table.sheet-default-header-even-column th:nth-child(even),
+table.sheet-default-header-odd-column td:nth-child(odd),
+table.sheet-default-header-odd-column th:nth-child(odd),
+table.sheet-default-header-every-third-column td:nth-child(3n+1),
+.sheet-default-header {
+ background-color: #7C0303;
+ color: #FFF;
+ font-family: Arial, sans-serif;
+ font-weight: bold;
+}
+
+table.sheet-background-gray-pair3 tr:nth-child(6n+5),
+table.sheet-background-gray-pair3 tr:nth-child(6n+6),
+table.sheet-background-gray-pair3 tr:nth-child(6n+7) {
+ background-color: rgb(0, 0, 0, 10%);
+}
+
+.sheet-centering,
+.sheet-centering-padding-2,
+.sheet-centering-padding-5,
+table.sheet-centering-column1 th:nth-child(1),
+table.sheet-centering-column1 td:nth-child(1),
+table.sheet-centering-column2 th:nth-child(2),
+table.sheet-centering-column2 td:nth-child(2),
+table.sheet-centering-column3 th:nth-child(3),
+table.sheet-centering-column3 td:nth-child(3),
+table.sheet-centering-column4 th:nth-child(4),
+table.sheet-centering-column4 td:nth-child(4),
+table.sheet-centering-padding-5-column2 th:nth-child(2),
+table.sheet-centering-padding-5-column2 td:nth-child(2),
+table.sheet-centering-padding-5-column3 th:nth-child(3),
+table.sheet-centering-padding-5-column3 td:nth-child(3),
+table.sheet-centering-padding-5-column4 th:nth-child(4),
+table.sheet-centering-padding-5-column4 td:nth-child(4),
+table.sheet-centering-padding-5-column5 th:nth-child(5),
+table.sheet-centering-padding-5-column5 td:nth-child(5) {
+ text-align: center;
+ vertical-align: middle;
+}
+
+.sheet-centering-horizontal {
+ text-align: center;
+}
+
+.sheet-centering-vertical {
+ vertical-align: middle;
+}
+
+.sheet-table-center {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.sheet-centering-padding-2 {
+ padding-left: 2px;
+ padding-right: 2px;
+}
+
+table.sheet-centering-padding-5-column2 th:nth-child(2),
+table.sheet-centering-padding-5-column2 td:nth-child(2),
+table.sheet-centering-padding-5-column3 th:nth-child(3),
+table.sheet-centering-padding-5-column3 td:nth-child(3),
+table.sheet-centering-padding-5-column4 th:nth-child(4),
+table.sheet-centering-padding-5-column4 td:nth-child(4),
+.sheet-centering-padding-5 {
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+.sheet-padding-right,
+table.sheet-padding-right-column1 th:nth-child(1),
+table.sheet-padding-right-column1 td:nth-child(1),
+table.sheet-padding-right-column2 th:nth-child(2),
+table.sheet-padding-right-column2 td:nth-child(2) {
+ padding-right: 5px;
+}
+
+.sheet-table-nowrap th,
+.sheet-table-nowrap td,
+.sheet-table-nowrap-column1 th:nth-child(1),
+.sheet-table-nowrap-column1 td:nth-child(1),
+.sheet-table-nowrap-column2 th:nth-child(2),
+.sheet-table-nowrap-column2 td:nth-child(2) {
+ white-space: nowrap;
+}
+
+.sheet-table-full-width-column1 th:nth-child(1),
+.sheet-table-full-width-column1 td:nth-child(1),
+.sheet-table-full-width-column2 th:nth-child(2),
+.sheet-table-full-width-column2 td:nth-child(2) {
+ width: 100%;
+}
+
+.sheet-table-white {
+ color: #FFF;
+ font-family: Arial, sans-serif;
+ font-weight: bold;
+}
+
+.sheet-table-slim-first-column td:first-child {
+ width: 1px;
+}
+
+.sheet-table-sub-ability-score tr:nth-child(3n) button:first-child,
+.sheet-table-sub-ability-score tr:nth-child(3n-1) button:first-child {
+ margin-left: 10px;
+}
+
+.sheet-note {
+ line-height:1em;
+ font-family: Arial, sans-serif;
+ font-size:.8125rem;
+ font-weight: bold;
+ color: #000;
+}
+
+.sheet-flex,
+.charsheet .sheet-body .sheet-flex {
+ display: flex;
+}
+
+.sheet-flex-column,
+.charsheet .sheet-body .sheet-flex-column {
+ display: flex;
+ flex-direction: column;
+}
+
+.sheet-spell-line {
+ display: flex;
+ align-items: flex-end;
+ justify-content: space-between;
+ column-gap: 5px;
+}
+
+.sheet-spell-fold {
+ display: flex;
+ justify-content: space-between;
+ column-gap: 10px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-left: 15px;
+}
+
+.charsheet .sheet-spell-effect {
+ height: unset;
+ resize: vertical;
+ margin-bottom: 0;
+}
+
+.charsheet label input[type="radio"],
+.charsheet label input[type="checkbox"] {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ opacity: 0;
+ left: 0;
+ top: 0;
+ margin: 0;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ text-align: inherit;
+ padding-left: inherit;
+}
+
+/* Show hide styling */
+.sheet-collapse {
+ visibility: collapse;
+}
+
+.sheet-hidden {
+ display: none;
+}
+
+.sheet-hidden.sheet-show,
+input.sheet-show-worn-equipment:checked ~ .sheet-hidden,
+input.sheet-show-spell-slots:checked ~ .sheet-tab-content .sheet-spell-slots.sheet-hidden,
+input.sheet-show-spell-points:checked ~ .sheet-tab-content .sheet-spell-points.sheet-hidden,
+input.sheet-show-spell-arcs-winds:checked ~ .sheet-tab-content .sheet-spell-arcs-winds.sheet-hidden,
+input.sheet-show-spell-spheres-pri:checked ~ .sheet-spell-sphere-pri.sheet-hidden {
+ display: revert;
+}
+
+.btn.sheet-hidden {
+ padding-top: 2px;
+ padding-left: 8px;
+ padding-right: 8px;
+}
+
+div.repcontainer div.repitem:first-child td.sheet-show-first,
+div.repcontainer div.repitem:first-child tr.sheet-show-first,
+div.repcontainer div.repitem:first-child th.sheet-show-first,
+div.repcontainer div.repitem:first-child thead.sheet-show-first {
+ visibility: visible;
+}
+
+.sheet-action-button,
+.sheet-action-button-roll {
+ height: 19px;
+ font-size: 1.3em;
+ padding: 2px 3px;
+ margin: 0 3px;
+}
+
+.sheet-action-button-roll:before {
+ font-family: "dicefontd20";
+ content: "t";
+}
+
+/*#region Announcement styling start */
+input.sheet-show-announcement:checked ~ .sheet-hidden {
+ display: revert;
+}
+
+div.sheet-announcement {
+ width: 95%;
+ margin: 5px;
+ border: 3px solid #ff0000;
+ border-radius: 8px;
+ padding: 8px;
+ background: #ababab;
+ box-sizing: border-box;
+}
+
+.sheet-selectable {
+ font-style: italic;
+ font-weight: bold;
+ color: #181E72;
+ -webkit-user-select: all; /* Chrome all / Safari all */
+ -moz-user-select: all; /* Firefox all */
+ -ms-user-select: all; /* IE 10+ */
+ user-select: all; /* Likely future */
+}
+
+img.expandable {
+ transition:transform 0.25s ease;
+}
+
+img.expandable:hover {
+ -webkit-transform:scale(3); /* or some other value */
+ transform:scale(3);
+}
+/*#endregion Announcement styling end */
+/*#region Toast styling*/
+input.sheet-show-toast:checked + .sheet-hidden {
+ display: revert;
+}
+.sheet-toast {
+ position: fixed;
+ right: 30px;
+ bottom: -13px;
+ text-align: center;
+ width: 300px;
+ height: 200px;
+}
+
+.sheet-toast div {
+ position: absolute;
+ top: 0;
+ right: 0;
+ border: 2px solid;
+ border-radius: 10px;
+ cursor: text;
+}
+
+input.sheet-toast-success:checked ~ .sheet-toast-content {
+ border-color: #badbcc;
+ background-color: #d1e7dd;
+}
+input.sheet-toast-info:checked ~ .sheet-toast-content {
+ border-color: #b6d4fe;
+ background-color: #cfe2ff;
+}
+input.sheet-toast-warning:checked ~ .sheet-toast-content {
+ border-color: #ffecb5;
+ background-color: #fff3cd;
+}
+input.sheet-toast-error:checked ~ .sheet-toast-content {
+ border-color: #f5c2c7;
+ background-color: #f8d7da;
+}
+
+.sheet-toast input {
+ text-align: center;
+ font-size: 18px;
+ font-weight: bold;
+ width: 100%;
+}
+
+.sheet-toast input,
+.sheet-toast textarea {
+ border: 0;
+ background-color: transparent;
+ cursor: text;
+ margin-bottom: 0;
+ resize: none;
+}
+
+.sheet-hide-toast {
+ position: absolute;
+ top: -10px;
+ right: -12px;
+ z-index: 1;
+ border-radius: 20px;
+ border-color: black;
+ background-color: white;
+ font-weight: bold;
+}
+/*#endregion Toast styling end*/
+/* Firefox styling */
+@supports (-moz-appearance:none) {
+ .charsheet .sheet-chrome {
+ display: none;
+ }
+
+ input[type="number"] {
+ -moz-appearance: textfield;
+ }
+ input[type="number"]:hover,
+ input[type="number"]:focus {
+ -moz-appearance: revert;
+ }
+}
+
+/* Not Firefox styling */
+@supports not (-moz-appearance:none) {
+ .charsheet .sheet-firefox {
+ display: none;
+ }
+}
/*/ Styles for 2ESheet rolltemplates /*/
.sheet-rolltemplate-darkmode .inlinerollresult {
color: rgb(255, 171, 0);
@@ -1566,367 +1614,26 @@ button {
}
/*#endregion*/
-
-.sheet-inline,
-.sheet-inline-5 {
- display: inline-block;
-}
-
-.sheet-inline-5 {
- padding-right: 5px;
-}
-
-table.sheet-default-header-first-row tr:first-child,
-table.sheet-default-header-thead thead:first-child,
-table.sheet-default-header-even-row tr:nth-child(even),
-table.sheet-default-header-odd-row tr:nth-child(odd),
-table.sheet-default-header-every-third-row tr:nth-child(3n+1),
-table.sheet-default-header-first-column td:first-child,
-table.sheet-default-header-first-column th:first-child,
-table.sheet-default-header-even-column td:nth-child(even),
-table.sheet-default-header-odd-column td:nth-child(odd),
-table.sheet-default-header-every-third-column td:nth-child(3n+1),
-.sheet-default-header {
- background-color: #7C0303;
- color: #FFF;
- font-family: Arial, sans-serif;
- font-weight: bold;
-}
-
-table.sheet-background-gray-pair3 tr:nth-child(6n+5),
-table.sheet-background-gray-pair3 tr:nth-child(6n+6),
-table.sheet-background-gray-pair3 tr:nth-child(6n+7) {
- background-color: rgb(0, 0, 0, 10%);
-}
-
-.sheet-centering,
-.sheet-centering-padding-2,
-.sheet-centering-padding-5,
-table.sheet-centering-column1 th:nth-child(1),
-table.sheet-centering-column1 td:nth-child(1),
-table.sheet-centering-column2 th:nth-child(2),
-table.sheet-centering-column2 td:nth-child(2),
-table.sheet-centering-column3 th:nth-child(3),
-table.sheet-centering-column3 td:nth-child(3),
-table.sheet-centering-column4 th:nth-child(4),
-table.sheet-centering-column4 td:nth-child(4),
-table.sheet-centering-padding-5-column2 th:nth-child(2),
-table.sheet-centering-padding-5-column2 td:nth-child(2),
-table.sheet-centering-padding-5-column3 th:nth-child(3),
-table.sheet-centering-padding-5-column3 td:nth-child(3),
-table.sheet-centering-padding-5-column4 th:nth-child(4),
-table.sheet-centering-padding-5-column4 td:nth-child(4),
-table.sheet-centering-padding-5-column5 th:nth-child(5),
-table.sheet-centering-padding-5-column5 td:nth-child(5) {
- text-align: center;
- vertical-align: middle;
-}
-
-.sheet-centering-horizontal {
- text-align: center;
-}
-
-.sheet-centering-vertical {
- vertical-align: middle;
-}
-
-.sheet-table-center {
- margin-left: auto;
- margin-right: auto;
-}
-
-.sheet-centering-padding-2 {
- padding-left: 2px;
- padding-right: 2px;
-}
-
-table.sheet-centering-padding-5-column2 th:nth-child(2),
-table.sheet-centering-padding-5-column2 td:nth-child(2),
-table.sheet-centering-padding-5-column3 th:nth-child(3),
-table.sheet-centering-padding-5-column3 td:nth-child(3),
-table.sheet-centering-padding-5-column4 th:nth-child(4),
-table.sheet-centering-padding-5-column4 td:nth-child(4),
-.sheet-centering-padding-5 {
- padding-left: 5px;
- padding-right: 5px;
-}
-
-.sheet-padding-right,
-table.sheet-padding-right-column1 th:nth-child(1),
-table.sheet-padding-right-column1 td:nth-child(1),
-table.sheet-padding-right-column2 th:nth-child(2),
-table.sheet-padding-right-column2 td:nth-child(2) {
- padding-right: 5px;
-}
-
-.sheet-table-white {
- color: #FFF;
- font-family: Arial, sans-serif;
- font-weight: bold;
-}
-
-.sheet-table-slim-first-column td:first-child {
- width: 1px;
-}
-
-.sheet-table-sub-ability-score tr:nth-child(3n) button:first-child,
-.sheet-table-sub-ability-score tr:nth-child(3n-1) button:first-child {
- margin-left: 10px;
-}
-
-.sheet-note {
- line-height:1em;
- font-family: Arial, sans-serif;
- font-size:.8125rem;
- font-weight: bold;
- color: #000;
-}
-
-.sheet-flex,
-.charsheet .sheet-body .sheet-flex {
- display: flex;
-}
-
-.sheet-flex-column,
-.charsheet .sheet-body .sheet-flex-column {
- display: flex;
- flex-direction: column;
-}
-
-.sheet-flex-wrap .repcontainer {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-around;
-}
-
-.charsheet label input[type="radio"],
-.charsheet label input[type="checkbox"] {
- position: absolute;
- width: 100%;
- height: 100%;
- opacity: 0;
- left: 0;
- top: 0;
- margin: 0;
-}
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- text-align: inherit;
- padding-left: inherit;
-}
-
-.sheet-collapse {
- visibility: collapse;
-}
-
-.sheet-hidden {
- display: none;
-}
-.sheet-hidden.sheet-show {
- display: revert;
-}
-.btn.sheet-hidden {
- padding-top: 2px;
- padding-left: 8px;
- padding-right: 8px;
-}
-
-div.repcontainer:not(.editmode) div.repitem td button[type="action"],
-div.repcontainer:not(.editmode) div.repitem th button[type="action"] {
- position: relative;
-}
-
-div.repcontainer div.repitem:first-child td.sheet-show-first,
-div.repcontainer div.repitem:first-child tr.sheet-show-first,
-div.repcontainer div.repitem:first-child th.sheet-show-first,
-div.repcontainer div.repitem:first-child thead.sheet-show-first {
- visibility: visible;
-}
-
-.sheet-show-spell-hack {
- position: relative;
- top: -11px;
-}
-
-.sheet-spell-effect {
- width: 100%;
- position: relative;
- top: -5px;
-}
-
-input.sheet-show-spell-details:checked ~ .sheet-spell-effect {
- top: 0;
-}
-
-table.sheet-spell-details {
- visibility: collapse;
-}
-input.sheet-show-spell-details:checked ~ table.sheet-spell-details {
- visibility: visible;
- margin-top: -5px;
-}
-
-div.sheet-spell-details {
- display: none;
-}
-input.sheet-show-spell-details:checked ~ div.sheet-spell-details {
- display: flex;
-}
-
-.sheet-underline {
- text-decoration: underline;
- font-weight: bolder;
-}
-
/* Overwrite Roll20 base styling */
details > summary:first-of-type {
display: list-item;
}
-/* Show hide styling */
-.sheet-worn-equipment,
-.sheet-spell-points-wiz,
-.sheet-spell-points-pri,
-.sheet-spell-sphere-pri,
-.sheet-announcement,
-.sheet-toast {
- display: none;
+/* Fix action buttons in repeating tables */
+div.repcontainer:not(.editmode) div.repitem td button[type="action"],
+div.repcontainer:not(.editmode) div.repitem th button[type="action"] {
+ position: relative;
}
-input.sheet-show-worn-equipment:checked ~ .sheet-worn-equipment,
-input.sheet-show-spell-points-wiz:checked ~ .sheet-spell-points-wiz,
-input.sheet-show-spell-points-pri:checked ~ .sheet-spell-points-pri,
-input.sheet-show-spell-spheres-pri:checked ~ .sheet-spell-sphere-pri,
-input.sheet-show-announcement:checked ~ .sheet-announcement,
-input.sheet-show-toast:checked ~ .sheet-toast
-{
- display: block;
+/* Dark Mode override */
+.sheet-darkmode .charsheet label {
+ color: #333;
}
-.sheet-action-button,
-.sheet-action-button-roll {
- height: 19px;
- font-size: 1.3em;
- padding: 2px 3px;
- margin: 0 3px;
-}
-
-.sheet-action-button-roll:before {
- font-family: "dicefontd20";
- content: "t";
-}
-
-/* Announcement styling start */
-div.sheet-announcement {
- width: 95%;
- margin: 5px;
- border: 3px solid #ff0000;
- border-radius: 8px;
- padding: 8px;
- background: #ababab;
- box-sizing: border-box;
-}
-
-.sheet-selectable {
- font-style: italic;
- font-weight: bold;
- color: #181E72;
- -webkit-user-select: all; /* Chrome all / Safari all */
- -moz-user-select: all; /* Firefox all */
- -ms-user-select: all; /* IE 10+ */
- user-select: all; /* Likely future */
-}
-
-img.expandable {
- transition:transform 0.25s ease;
-}
-
-img.expandable:hover {
- -webkit-transform:scale(3); /* or some other value */
- transform:scale(3);
-}
-/* Announcement styling end */
-
-/* Firefox styling */
-@supports (-moz-appearance:none) {
- .charsheet .sheet-chrome {
- display: none;
- }
-}
-
-/* Not Firefox styling */
-@supports not (-moz-appearance:none) {
- .charsheet .sheet-firefox {
- display: none;
- }
-}
-
-/*#region Toast styling*/
-.sheet-toast {
- position: fixed;
- right: 30px;
- bottom: -13px;
- text-align: center;
- width: 300px;
- height: 200px;
-}
-
-.sheet-toast div {
- position: absolute;
- top: 0;
- right: 0;
- border: 2px solid;
- border-radius: 10px;
- cursor: text;
-}
-
-input.sheet-toast-success:checked ~ .sheet-toast-content {
- border-color: #badbcc;
- background-color: #d1e7dd;
-}
-input.sheet-toast-info:checked ~ .sheet-toast-content {
- border-color: #b6d4fe;
- background-color: #cfe2ff;
-}
-input.sheet-toast-warning:checked ~ .sheet-toast-content {
- border-color: #ffecb5;
- background-color: #fff3cd;
-}
-input.sheet-toast-error:checked ~ .sheet-toast-content {
- border-color: #f5c2c7;
- background-color: #f8d7da;
-}
-
-.sheet-toast input {
- text-align: center;
- font-size: 18px;
- font-weight: bold;
- width: 100%;
-}
-
-.sheet-toast input,
-.sheet-toast textarea {
- border: 0;
- background-color: transparent;
- cursor: text;
- margin-bottom: 0;
- resize: none;
-}
-
-.sheet-hide-toast {
- position: absolute;
- top: -10px;
- right: -12px;
- z-index: 1;
- border-radius: 20px;
- border-color: black;
+/* Fix background color so active fields can be differentiated from read-only and disabled fields */
+input,
+button,
+select,
+textarea {
background-color: white;
- font-weight: bold;
}
-/*#endregion Toast styling end*/
diff --git a/ADnD_2E_Revised/build/buildPug.js b/ADnD_2E_Revised/build/buildPug.js
index 2a2762d63f..506864a11d 100644
--- a/ADnD_2E_Revised/build/buildPug.js
+++ b/ADnD_2E_Revised/build/buildPug.js
@@ -4,7 +4,7 @@ const path = require('path');
const sourceFolder = path.join(__dirname, '..');
const jsFolder = path.join(sourceFolder, 'javascript');
const pugFolder = path.join(sourceFolder, 'pug');
-const htmlFolder = path.join(sourceFolder, 'html', 'components');
+const htmlFolder = path.join(sourceFolder, 'html');
const miscFolder = path.join(sourceFolder, 'misc');
const booksPriority = [
{book: 'PHB', print: 'First Printing May 2013'},
@@ -65,6 +65,11 @@ spellsJs.forEach(jsFile => {
}
});
+let spellTemplate = pug.renderFile(path.join(pugFolder, 'spellTemplate.pug'), {pretty: true, isPriest: false});
+fs.writeFileSync(path.join(htmlFolder, 'shared', 'wizard-spell-template.html'), spellTemplate);
+spellTemplate = pug.renderFile(path.join(pugFolder, 'spellTemplate.pug'), {pretty: true, isPriest: true});
+fs.writeFileSync(path.join(htmlFolder, 'shared', 'priest-spell-template.html'), spellTemplate);
+
const wizardSpells = require(path.join(jsFolder, 'wizardSpells.js'));
const priestSpells = require(path.join(jsFolder, 'priestSpells.js'));
html += pug.renderFile(path.join(pugFolder, 'spellScrollsDatalists.pug'), {pretty: true, wizardSpells, priestSpells});
@@ -96,5 +101,5 @@ simpleDatalists.forEach(simpleDatalist => {
html += pug.renderFile(path.join(pugFolder, 'simpleDatalists.pug'), {pretty: true, data: data, id:simpleDatalist[1]})
});
-fs.writeFileSync(path.join(htmlFolder, 'dynamicDatalists.html'), html);
+fs.writeFileSync(path.join(htmlFolder, 'components', 'dynamicDatalists.html'), html);
console.log('');
\ No newline at end of file
diff --git a/ADnD_2E_Revised/css/2EStyle-base.css b/ADnD_2E_Revised/css/2EStyle-base.css
index 2c1a0a9221..9b827e7cb2 100644
--- a/ADnD_2E_Revised/css/2EStyle-base.css
+++ b/ADnD_2E_Revised/css/2EStyle-base.css
@@ -1,10 +1,3 @@
-input,
-button,
-select,
-textarea {
- background-color: white;
-}
-
.charsheet input {
display: inline-block;
width: 165px;
@@ -52,12 +45,10 @@ textarea {
.charsheet input.sheet-madtext {
width: 79px;
}
-.charsheet select.sheet-spell-select,
.charsheet select.sheet-attr,
.charsheet input.sheet-attr {
width: 80px;
}
-.charsheet select.sheet-spell-select-min,
.charsheet select.sheet-attr-min,
.charsheet input.sheet-attr-min {
min-width: 80px;
@@ -155,10 +146,6 @@ textarea {
.charsheet input.sheet-nonweaponprof {
width: 260px;
}
-.charsheet select.sheet-spell-big,
-.charsheet input.sheet-spell-big {
- width: 295px;
-}
.charsheet select.sheet-long,
.charsheet input.sheet-long {
width: 400px;
@@ -201,10 +188,24 @@ textarea {
box-sizing: border-box;
}
+.charsheet select.sheet-table-dynamic {
+ margin: 0;
+}
+
.charsheet input.sheet-table-dynamic90 {
min-width: 90%;
}
+.charsheet th.sheet-td-dynamic20,
+.charsheet td.sheet-td-dynamic20 {
+ width: 20%;
+}
+
+.charsheet th.sheet-td-dynamic25,
+.charsheet td.sheet-td-dynamic25 {
+ width: 25%;
+}
+
.charsheet th.sheet-td-dynamic30,
.charsheet td.sheet-td-dynamic30 {
width: 30%;
@@ -215,6 +216,11 @@ textarea {
width: 50%;
}
+.charsheet th.sheet-td-dynamic60,
+.charsheet td.sheet-td-dynamic60 {
+ width: 60%;
+}
+
.charsheet th.sheet-td-dynamic70,
.charsheet td.sheet-td-dynamic70 {
width: 70%;
@@ -225,36 +231,6 @@ textarea {
width: 100%;
}
-.charsheet select.sheet-table-dynamic {
- margin: 0;
-}
-
-.charsheet input[type="number"].sheet-tiny {
- width: 23px;
-}
-input[type="number"].sheet-tiny::-webkit-inner-spin-button {
- -webkit-appearance: none;
-}
-input[type="number"].sheet-nobut::-webkit-inner-spin-button {
- -webkit-appearance: none;
-}
-
-input.sheet-arrow
-{
- float: left;
-}
-
-input.sheet-arrow:checked ~ div.sheet-body
-{
- display: none;
-}
-
-.charsheet input[type="checkbox"].left {
- float: left;
- margin: 5px 0;
- width: 2px;
-}
-
input.sheet-tab:not(:first-child)::before
{
border-left: none;
@@ -316,106 +292,103 @@ textarea.sheet-input-like {
content: "✓";
}
-div[class^="sheet-section"] {
+.charsheet input.sheet-tab1:checked ~ .sheet-section-character-page,
+.charsheet input.sheet-tab2:checked ~ .sheet-section-monster-page,
+.charsheet input.sheet-tab3:checked ~ .sheet-section-character-info,
+.charsheet input.sheet-tab4:checked ~ .sheet-section-attributes,
+.charsheet input.sheet-tab5:checked ~ .sheet-section-weapons,
+.charsheet input.sheet-tab6:checked ~ .sheet-section-rogue,
+.charsheet input.sheet-tab7:checked ~ .sheet-section-proficiencies,
+.charsheet input.sheet-tab8:checked ~ .sheet-section-spells,
+.charsheet input.sheet-tab9:checked ~ .sheet-section-psionics,
+.charsheet input.sheet-tab10:checked ~ .sheet-section-equipment,
+.charsheet input.sheet-tab11:checked ~ .sheet-section-currency,
+.charsheet input.sheet-tab12:checked ~ .sheet-section-followers,
+.charsheet input.sheet-tab14:checked ~ .sheet-section-ravenloft-saves,
+.charsheet input.sheet-tab15:checked ~ .sheet-section-movement-standard,
+.charsheet input.sheet-tab16:checked ~ .sheet-section-movement-advanced,
+.charsheet input.sheet-tab17:checked ~ .sheet-section-attributes-standard,
+.charsheet input.sheet-tab18:checked ~ .sheet-section-attributes-player-option,
+.charsheet input.sheet-tab19:checked ~ .sheet-section-wizard-spells,
+.charsheet input.sheet-tab20:checked ~ .sheet-section-priest-spells,
+.charsheet input.sheet-tab21:checked ~ .sheet-section-wizard-level-one,
+.charsheet input.sheet-tab22:checked ~ .sheet-section-wizard-level-two,
+.charsheet input.sheet-tab23:checked ~ .sheet-section-wizard-level-three,
+.charsheet input.sheet-tab24:checked ~ .sheet-section-wizard-level-four,
+.charsheet input.sheet-tab25:checked ~ .sheet-section-wizard-level-five,
+.charsheet input.sheet-tab26:checked ~ .sheet-section-wizard-level-six,
+.charsheet input.sheet-tab27:checked ~ .sheet-section-wizard-level-seven,
+.charsheet input.sheet-tab28:checked ~ .sheet-section-wizard-level-eight,
+.charsheet input.sheet-tab29:checked ~ .sheet-section-wizard-level-nine,
+.charsheet input.sheet-tab30:checked ~ .sheet-section-wizard-level-ten,
+.charsheet input.sheet-tab31:checked ~ .sheet-section-priest-level-one,
+.charsheet input.sheet-tab32:checked ~ .sheet-section-priest-level-two,
+.charsheet input.sheet-tab33:checked ~ .sheet-section-priest-level-three,
+.charsheet input.sheet-tab34:checked ~ .sheet-section-priest-level-four,
+.charsheet input.sheet-tab35:checked ~ .sheet-section-priest-level-five,
+.charsheet input.sheet-tab36:checked ~ .sheet-section-priest-level-six,
+.charsheet input.sheet-tab37:checked ~ .sheet-section-priest-level-seven,
+.charsheet input.sheet-tab31:checked ~ div .sheet-section-priest-level-one,
+.charsheet input.sheet-tab32:checked ~ div .sheet-section-priest-level-two,
+.charsheet input.sheet-tab33:checked ~ div .sheet-section-priest-level-three,
+.charsheet input.sheet-tab34:checked ~ div .sheet-section-priest-level-four,
+.charsheet input.sheet-tab35:checked ~ div .sheet-section-priest-level-five,
+.charsheet input.sheet-tab36:checked ~ div .sheet-section-priest-level-six,
+.charsheet input.sheet-tab37:checked ~ div .sheet-section-priest-level-seven,
+.charsheet input.sheet-tab38:checked ~ .sheet-section-priest-quest,
+.charsheet input.sheet-tab39:checked ~ .sheet-section-rogue-standard,
+.charsheet input.sheet-tab40:checked ~ .sheet-section-psionic-standard,
+.charsheet input.sheet-tab41:checked ~ .sheet-section-psionic-advanced,
+.charsheet input.sheet-tab42:checked ~ .sheet-section-currency-standard,
+.charsheet input.sheet-tab43:checked ~ .sheet-section-currency-dragonlance,
+.charsheet input.sheet-tab44:checked ~ .sheet-section-currency-dark-sun,
+.charsheet input.sheet-tab45:checked ~ .sheet-section-currency-ravenloft,
+.charsheet input.sheet-tab46:checked ~ .sheet-section-follower-warrior,
+.charsheet input.sheet-tab47:checked ~ .sheet-section-follower-wizard,
+.charsheet input.sheet-tab48:checked ~ .sheet-section-follower-priest,
+.charsheet input.sheet-tab49:checked ~ .sheet-section-follower-rogue,
+.charsheet input.sheet-tab50:checked ~ .sheet-section-follower-psion,
+.charsheet input.sheet-tab51:checked ~ .sheet-section-follower-animals,
+.charsheet input.sheet-tab52:checked ~ .sheet-section-priest-turn,
+.charsheet input.sheet-tab53:checked ~ .sheet-section-journal,
+.charsheet input.sheet-tab54:checked ~ .sheet-section-wizard-level-eleven,
+.charsheet input.sheet-tab55:checked ~ .sheet-section-wizard-level-twelve,
+.charsheet input.sheet-tab56:checked ~ .sheet-section-wizard-level-thirteen,
+.charsheet input.sheet-tab57:checked ~ .sheet-section-wizard-level-fourteen,
+.charsheet input.sheet-tab58:checked ~ .sheet-section-wizard-level-fifteen,
+.charsheet input.sheet-tab59:checked ~ .sheet-section-currency-maztica,
+.charsheet input.sheet-tab60:checked ~ .sheet-section-rogue-spds,
+.charsheet input.sheet-tab61:checked ~ .sheet-section-rogue-standard-hench,
+.charsheet input.sheet-tab62:checked ~ .sheet-section-rogue-spds-hench,
+.charsheet input.sheet-tab63:checked ~ .sheet-section-rogue-standard-repeat,
+.charsheet input.sheet-tab64:checked ~ .sheet-section-rogue-spds-repeat,
+.charsheet input.sheet-tab65:checked ~ .sheet-section-psionics-standard-hench,
+.charsheet input.sheet-tab66:checked ~ .sheet-section-psionics-advanced-hench,
+.charsheet input.sheet-tab67:checked ~ .sheet-section-psionics-standard-repeat,
+.charsheet input.sheet-tab68:checked ~ .sheet-section-psionics-advanced-repeat,
+.charsheet input.sheet-tab69:checked ~ .sheet-section-granted-powers,
+.charsheet input.sheet-tab70:checked ~ .sheet-section-weapon-standard-melee,
+.charsheet input.sheet-tab71:checked ~ .sheet-section-weapon-standard-ranged,
+.charsheet input.sheet-tab72:checked ~ .sheet-section-movement-mount,
+.charsheet input.sheet-tab73:checked ~ .sheet-section-character-info-details,
+.charsheet input.sheet-tab74:checked ~ .sheet-section-character-info-tracker,
+.charsheet input.sheet-tab75:checked ~ .sheet-section-currency-birthright,
+.charsheet input.sheet-tab76:checked ~ .sheet-section-birthright,
+.charsheet input.sheet-tab77:checked ~ .sheet-section-movement-barbarian,
+.charsheet input.sheet-tab79:checked ~ .sheet-section-movement-swimming,
+.charsheet input.sheet-tab80:checked ~ .sheet-section-movement-flying,
+.charsheet input.sheet-tab81:checked ~ .sheet-section-weapon-standard,
+.charsheet input.sheet-tab82:checked ~ .sheet-section-weapon-player-option,
+.charsheet input.sheet-tab83:checked ~ .sheet-section-weapon-player-option-melee,
+.charsheet input.sheet-tab84:checked ~ .sheet-section-weapon-player-option-ranged,
+.charsheet input.sheet-tab85:checked ~ .sheet-section-settings-page {
display: block;
}
-.charsheet input.sheet-tab1:checked ~ div.sheet-section-character-page,
-.charsheet input.sheet-tab2:checked ~ div.sheet-section-monster-page,
-.charsheet input.sheet-tab3:checked ~ div.sheet-section-character-info,
-.charsheet input.sheet-tab4:checked ~ div.sheet-section-attributes,
-.charsheet input.sheet-tab5:checked ~ div.sheet-section-weapons,
-.charsheet input.sheet-tab6:checked ~ div.sheet-section-rogue,
-.charsheet input.sheet-tab7:checked ~ div.sheet-section-proficiencies,
-.charsheet input.sheet-tab8:checked ~ div.sheet-section-spells,
-.charsheet input.sheet-tab9:checked ~ div.sheet-section-psionics,
-.charsheet input.sheet-tab10:checked ~ div.sheet-section-equipment,
-.charsheet input.sheet-tab11:checked ~ div.sheet-section-currency,
-.charsheet input.sheet-tab12:checked ~ div.sheet-section-followers,
-.charsheet input.sheet-tab13:checked ~ div.sheet-section-standard-saves,
-.charsheet input.sheet-tab14:checked ~ div.sheet-section-ravenloft-saves,
-.charsheet input.sheet-tab15:checked ~ div.sheet-section-movement-standard,
-.charsheet input.sheet-tab16:checked ~ div.sheet-section-movement-advanced,
-.charsheet input.sheet-tab17:checked ~ div.sheet-section-attributes-standard,
-.charsheet input.sheet-tab18:checked ~ div.sheet-section-attributes-player-option,
-.charsheet input.sheet-tab19:checked ~ div.sheet-section-wizard-spells,
-.charsheet input.sheet-tab20:checked ~ div.sheet-section-priest-spells,
-.charsheet input.sheet-tab21:checked ~ div.sheet-section-wizard-level-one,
-.charsheet input.sheet-tab22:checked ~ div.sheet-section-wizard-level-two,
-.charsheet input.sheet-tab23:checked ~ div.sheet-section-wizard-level-three,
-.charsheet input.sheet-tab24:checked ~ div.sheet-section-wizard-level-four,
-.charsheet input.sheet-tab25:checked ~ div.sheet-section-wizard-level-five,
-.charsheet input.sheet-tab26:checked ~ div.sheet-section-wizard-level-six,
-.charsheet input.sheet-tab27:checked ~ div.sheet-section-wizard-level-seven,
-.charsheet input.sheet-tab28:checked ~ div.sheet-section-wizard-level-eight,
-.charsheet input.sheet-tab29:checked ~ div.sheet-section-wizard-level-nine,
-.charsheet input.sheet-tab30:checked ~ div.sheet-section-wizard-level-ten,
-.charsheet input.sheet-tab31:checked ~ div.sheet-section-priest-level-one,
-.charsheet input.sheet-tab32:checked ~ div.sheet-section-priest-level-two,
-.charsheet input.sheet-tab33:checked ~ div.sheet-section-priest-level-three,
-.charsheet input.sheet-tab34:checked ~ div.sheet-section-priest-level-four,
-.charsheet input.sheet-tab35:checked ~ div.sheet-section-priest-level-five,
-.charsheet input.sheet-tab36:checked ~ div.sheet-section-priest-level-six,
-.charsheet input.sheet-tab37:checked ~ div.sheet-section-priest-level-seven,
-.charsheet input.sheet-tab38:checked ~ div.sheet-section-priest-quest,
-.charsheet input.sheet-tab39:checked ~ div.sheet-section-rogue-standard,
-.charsheet input.sheet-tab40:checked ~ div.sheet-section-psionic-standard,
-.charsheet input.sheet-tab41:checked ~ div.sheet-section-psionic-advanced,
-.charsheet input.sheet-tab42:checked ~ div.sheet-section-currency-standard,
-.charsheet input.sheet-tab43:checked ~ div.sheet-section-currency-dragonlance,
-.charsheet input.sheet-tab44:checked ~ div.sheet-section-currency-dark-sun,
-.charsheet input.sheet-tab45:checked ~ div.sheet-section-currency-ravenloft,
-.charsheet input.sheet-tab46:checked ~ div.sheet-section-follower-warrior,
-.charsheet input.sheet-tab47:checked ~ div.sheet-section-follower-wizard,
-.charsheet input.sheet-tab48:checked ~ div.sheet-section-follower-priest,
-.charsheet input.sheet-tab49:checked ~ div.sheet-section-follower-rogue,
-.charsheet input.sheet-tab50:checked ~ div.sheet-section-follower-psion,
-.charsheet input.sheet-tab51:checked ~ div.sheet-section-follower-animals,
-.charsheet input.sheet-tab52:checked ~ div.sheet-section-priest-turn,
-.charsheet input.sheet-tab53:checked ~ div.sheet-section-journal,
-.charsheet input.sheet-tab54:checked ~ div.sheet-section-wizard-level-eleven,
-.charsheet input.sheet-tab55:checked ~ div.sheet-section-wizard-level-twelve,
-.charsheet input.sheet-tab56:checked ~ div.sheet-section-wizard-level-thirteen,
-.charsheet input.sheet-tab57:checked ~ div.sheet-section-wizard-level-fourteen,
-.charsheet input.sheet-tab58:checked ~ div.sheet-section-wizard-level-fifteen,
-.charsheet input.sheet-tab59:checked ~ div.sheet-section-currency-maztica,
-.charsheet input.sheet-tab60:checked ~ div.sheet-section-rogue-spds,
-.charsheet input.sheet-tab61:checked ~ div.sheet-section-rogue-standard-hench,
-.charsheet input.sheet-tab62:checked ~ div.sheet-section-rogue-spds-hench,
-.charsheet input.sheet-tab63:checked ~ div.sheet-section-rogue-standard-repeat,
-.charsheet input.sheet-tab64:checked ~ div.sheet-section-rogue-spds-repeat,
-.charsheet input.sheet-tab65:checked ~ div.sheet-section-psionics-standard-hench,
-.charsheet input.sheet-tab66:checked ~ div.sheet-section-psionics-advanced-hench,
-.charsheet input.sheet-tab67:checked ~ div.sheet-section-psionics-standard-repeat,
-.charsheet input.sheet-tab68:checked ~ div.sheet-section-psionics-advanced-repeat,
-.charsheet input.sheet-tab69:checked ~ div.sheet-section-granted-powers,
-.charsheet input.sheet-tab70:checked ~ div.sheet-section-weapon-standard-melee,
-.charsheet input.sheet-tab71:checked ~ div.sheet-section-weapon-standard-ranged,
-.charsheet input.sheet-tab72:checked ~ div.sheet-section-movement-mount,
-.charsheet input.sheet-tab73:checked ~ div.sheet-section-character-info-details,
-.charsheet input.sheet-tab74:checked ~ div.sheet-section-character-info-tracker,
-.charsheet input.sheet-tab75:checked ~ div.sheet-section-currency-birthright,
-.charsheet input.sheet-tab76:checked ~ div.sheet-section-birthright,
-.charsheet input.sheet-tab77:checked ~ div.sheet-section-movement-barbarian,
-.charsheet input.sheet-tab78:checked ~ div.sheet-section-attributes-dream,
-.charsheet input.sheet-tab79:checked ~ div.sheet-section-movement-swimming,
-.charsheet input.sheet-tab80:checked ~ div.sheet-section-movement-flying,
-.charsheet input.sheet-tab81:checked ~ div.sheet-section-weapon-standard,
-.charsheet input.sheet-tab82:checked ~ div.sheet-section-weapon-player-option,
-.charsheet input.sheet-tab83:checked ~ div.sheet-section-weapon-player-option-melee,
-.charsheet input.sheet-tab84:checked ~ div.sheet-section-weapon-player-option-ranged,
-.charsheet input.sheet-tab85:checked ~ div.sheet-section-settings-page {
- display: block;
-}
-
-.charsheet input.sheet-tab99:checked ~ div[class^="sheet-section"] {
- display: block;
-}
-
.charsheet input.sheet-tab {
width: 120px;
height: inherit;
- cursor: pointer;
+ cursor: pointer;
position: relative;
opacity: 0;
z-index: 9999;
@@ -423,16 +396,16 @@ div[class^="sheet-section"] {
.charsheet span.sheet-tab {
text-align: center;
- display: inline-block;
- font-size: 14px;
- background: #800a0a;
+ display: inline-block;
+ font-size: 14px;
+ background: #800a0a;
color: white;
font-weight: bold;
border-radius: 4px;
width: 120px;
height: inherit;
- cursor: pointer;
+ cursor: pointer;
position: relative;
}
@@ -549,7 +522,6 @@ div[class^="sheet-section"] {
cursor: pointer;
z-index: 1;
}
-input.sheet-tab + span::before,
input.sheet-tab + span::before
{
margin-right: 4px;
@@ -580,11 +552,6 @@ input.sheet-tab + span::before
padding: 0 0 0 0;
}
-/* Dark Mode override */
-.sheet-darkmode .charsheet label {
- color: #333;
-}
-
.charsheet h1,
.charsheet h2,
.charsheet h3,
@@ -594,285 +561,11 @@ input.sheet-tab + span::before
font-weight: 800;
}
-/*h2,h3,h4,h5,h6 {*/
-/* line-height:1em;*/
-/* display:inline;*/
-/* font-family: Arial, sans-serif;*/
-/* font-size:.8125rem;*/
-/* color: #000;*/
-/*}*/
-
-
-/*h1 {*/
-/* width: 100%;*/
-/* background-color: #FFF;*/
-/* color: #000;*/
-/* padding:.2em 0 0 0;*/
-/* min-height: 1em;*/
-/* margin: 0 0 .5em 0;*/
-/* font-size:.8125rem;*/
-/* line-height:1.4em;*/
-/* display:block;*/
-/* text-align:center;*/
-/*}*/
-
-.sheet-small-label1 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 72px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label1 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label1 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label1 select {
- margin-top:-2px;
- width: 72px;
- border: .5px;
-}
-.sheet-small-label2 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 63px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label2 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label2 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label2 select {
- margin-top:-2px;
- width: 63px;
- border: .5px;
-}
-.sheet-small-label3 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 85px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label3 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label3 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label3 select {
- margin-top:-2px;
- width: 85px;
- border: .5px;
-}
-.sheet-small-label4 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 67px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label4 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label4 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label4 select {
- margin-top:-2px;
- width: 67px;
- border: .5px;
-}
-.sheet-small-label5 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 105px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label5 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label5 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label5 select {
- margin-top:-2px;
- width: 105px;
- border: .5px;
-}
-.sheet-small-label6 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 75px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label6 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label6 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label6 select {
- margin-top:-2px;
- width: 75px;
- border: .5px;
-}
-.sheet-small-label7 {
- display: inline-block;
- padding: .5em .07em 0 .07em;
- margin: .75rem .4em 1.125rem .4em;
- height: 1.85em;
- width: 125px;
- vertical-align: middle;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-
-.sheet-small-label7 span {
- padding: .5em .07em 0 .07em;
- text-align:center;
- font-size: .85em;
- font-style: italic;
- font-weight: bold;
- float:left; /* floats but 100% wide. */
- /*firefox has to be squeezed */
- -moz-margin-start:-2px;
- -moz-margin-end:-2px;
-}
-.sheet-small-label7 input::-moz-focus-inner {
- padding: 0;
-}
-.sheet-small-label7 select {
- margin-top:-2px;
- width: 125px;
- border: .5px;
-}
-
-button {
- background-color: #7C0303;
-}
-
.charsheet,
.charsheet button:hover {
background-image: url("https://raw.githubusercontent.com/Roll20/roll20-character-sheets/master/ADnD_2E_Revised/img/background-parchment_paper_seamless_pattern.jpg");
}
-insert_rolltemplates.css
-
.sheet-inline,
.sheet-inline-5 {
display: inline-block;
@@ -890,7 +583,9 @@ table.sheet-default-header-every-third-row tr:nth-child(3n+1),
table.sheet-default-header-first-column td:first-child,
table.sheet-default-header-first-column th:first-child,
table.sheet-default-header-even-column td:nth-child(even),
+table.sheet-default-header-even-column th:nth-child(even),
table.sheet-default-header-odd-column td:nth-child(odd),
+table.sheet-default-header-odd-column th:nth-child(odd),
table.sheet-default-header-every-third-column td:nth-child(3n+1),
.sheet-default-header {
background-color: #7C0303;
@@ -965,6 +660,22 @@ table.sheet-padding-right-column2 td:nth-child(2) {
padding-right: 5px;
}
+.sheet-table-nowrap th,
+.sheet-table-nowrap td,
+.sheet-table-nowrap-column1 th:nth-child(1),
+.sheet-table-nowrap-column1 td:nth-child(1),
+.sheet-table-nowrap-column2 th:nth-child(2),
+.sheet-table-nowrap-column2 td:nth-child(2) {
+ white-space: nowrap;
+}
+
+.sheet-table-full-width-column1 th:nth-child(1),
+.sheet-table-full-width-column1 td:nth-child(1),
+.sheet-table-full-width-column2 th:nth-child(2),
+.sheet-table-full-width-column2 td:nth-child(2) {
+ width: 100%;
+}
+
.sheet-table-white {
color: #FFF;
font-family: Arial, sans-serif;
@@ -999,10 +710,26 @@ table.sheet-padding-right-column2 td:nth-child(2) {
flex-direction: column;
}
-.sheet-flex-wrap .repcontainer {
+.sheet-spell-line {
display: flex;
- flex-wrap: wrap;
- justify-content: space-around;
+ align-items: flex-end;
+ justify-content: space-between;
+ column-gap: 5px;
+}
+
+.sheet-spell-fold {
+ display: flex;
+ justify-content: space-between;
+ column-gap: 10px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ padding-left: 15px;
+}
+
+.charsheet .sheet-spell-effect {
+ height: unset;
+ resize: vertical;
+ margin-bottom: 0;
}
.charsheet label input[type="radio"],
@@ -1027,6 +754,7 @@ th {
padding-left: inherit;
}
+/* Show hide styling */
.sheet-collapse {
visibility: collapse;
}
@@ -1034,20 +762,22 @@ th {
.sheet-hidden {
display: none;
}
-.sheet-hidden.sheet-show {
+
+.sheet-hidden.sheet-show,
+input.sheet-show-worn-equipment:checked ~ .sheet-hidden,
+input.sheet-show-spell-slots:checked ~ .sheet-tab-content .sheet-spell-slots.sheet-hidden,
+input.sheet-show-spell-points:checked ~ .sheet-tab-content .sheet-spell-points.sheet-hidden,
+input.sheet-show-spell-arcs-winds:checked ~ .sheet-tab-content .sheet-spell-arcs-winds.sheet-hidden,
+input.sheet-show-spell-spheres-pri:checked ~ .sheet-spell-sphere-pri.sheet-hidden {
display: revert;
}
+
.btn.sheet-hidden {
padding-top: 2px;
padding-left: 8px;
padding-right: 8px;
}
-div.repcontainer:not(.editmode) div.repitem td button[type="action"],
-div.repcontainer:not(.editmode) div.repitem th button[type="action"] {
- position: relative;
-}
-
div.repcontainer div.repitem:first-child td.sheet-show-first,
div.repcontainer div.repitem:first-child tr.sheet-show-first,
div.repcontainer div.repitem:first-child th.sheet-show-first,
@@ -1055,66 +785,6 @@ div.repcontainer div.repitem:first-child thead.sheet-show-first {
visibility: visible;
}
-.sheet-show-spell-hack {
- position: relative;
- top: -11px;
-}
-
-.sheet-spell-effect {
- width: 100%;
- position: relative;
- top: -5px;
-}
-
-input.sheet-show-spell-details:checked ~ .sheet-spell-effect {
- top: 0;
-}
-
-table.sheet-spell-details {
- visibility: collapse;
-}
-input.sheet-show-spell-details:checked ~ table.sheet-spell-details {
- visibility: visible;
- margin-top: -5px;
-}
-
-div.sheet-spell-details {
- display: none;
-}
-input.sheet-show-spell-details:checked ~ div.sheet-spell-details {
- display: flex;
-}
-
-.sheet-underline {
- text-decoration: underline;
- font-weight: bolder;
-}
-
-/* Overwrite Roll20 base styling */
-details > summary:first-of-type {
- display: list-item;
-}
-
-/* Show hide styling */
-.sheet-worn-equipment,
-.sheet-spell-points-wiz,
-.sheet-spell-points-pri,
-.sheet-spell-sphere-pri,
-.sheet-announcement,
-.sheet-toast {
- display: none;
-}
-
-input.sheet-show-worn-equipment:checked ~ .sheet-worn-equipment,
-input.sheet-show-spell-points-wiz:checked ~ .sheet-spell-points-wiz,
-input.sheet-show-spell-points-pri:checked ~ .sheet-spell-points-pri,
-input.sheet-show-spell-spheres-pri:checked ~ .sheet-spell-sphere-pri,
-input.sheet-show-announcement:checked ~ .sheet-announcement,
-input.sheet-show-toast:checked ~ .sheet-toast
-{
- display: block;
-}
-
.sheet-action-button,
.sheet-action-button-roll {
height: 19px;
@@ -1128,49 +798,8 @@ input.sheet-show-toast:checked ~ .sheet-toast
content: "t";
}
-/* Announcement styling start */
-div.sheet-announcement {
- width: 95%;
- margin: 5px;
- border: 3px solid #ff0000;
- border-radius: 8px;
- padding: 8px;
- background: #ababab;
- box-sizing: border-box;
-}
-
-.sheet-selectable {
- font-style: italic;
- font-weight: bold;
- color: #181E72;
- -webkit-user-select: all; /* Chrome all / Safari all */
- -moz-user-select: all; /* Firefox all */
- -ms-user-select: all; /* IE 10+ */
- user-select: all; /* Likely future */
-}
-
-img.expandable {
- transition:transform 0.25s ease;
-}
-
-img.expandable:hover {
- -webkit-transform:scale(3); /* or some other value */
- transform:scale(3);
-}
-/* Announcement styling end */
-
-/* Firefox styling */
-@supports (-moz-appearance:none) {
- .charsheet .sheet-chrome {
- display: none;
- }
-}
-
-/* Not Firefox styling */
-@supports not (-moz-appearance:none) {
- .charsheet .sheet-firefox {
- display: none;
- }
-}
-
+insert_announcements.css
insert_toast.css
+insert_browser-support.css
+insert_rolltemplates.css
+insert_roll20-overrides.css
diff --git a/ADnD_2E_Revised/css/announcements.css b/ADnD_2E_Revised/css/announcements.css
new file mode 100644
index 0000000000..839684986d
--- /dev/null
+++ b/ADnD_2E_Revised/css/announcements.css
@@ -0,0 +1,34 @@
+/*#region Announcement styling start */
+input.sheet-show-announcement:checked ~ .sheet-hidden {
+ display: revert;
+}
+
+div.sheet-announcement {
+ width: 95%;
+ margin: 5px;
+ border: 3px solid #ff0000;
+ border-radius: 8px;
+ padding: 8px;
+ background: #ababab;
+ box-sizing: border-box;
+}
+
+.sheet-selectable {
+ font-style: italic;
+ font-weight: bold;
+ color: #181E72;
+ -webkit-user-select: all; /* Chrome all / Safari all */
+ -moz-user-select: all; /* Firefox all */
+ -ms-user-select: all; /* IE 10+ */
+ user-select: all; /* Likely future */
+}
+
+img.expandable {
+ transition:transform 0.25s ease;
+}
+
+img.expandable:hover {
+ -webkit-transform:scale(3); /* or some other value */
+ transform:scale(3);
+}
+/*#endregion Announcement styling end */
diff --git a/ADnD_2E_Revised/css/browser-support.css b/ADnD_2E_Revised/css/browser-support.css
new file mode 100644
index 0000000000..1fae634aed
--- /dev/null
+++ b/ADnD_2E_Revised/css/browser-support.css
@@ -0,0 +1,21 @@
+/* Firefox styling */
+@supports (-moz-appearance:none) {
+ .charsheet .sheet-chrome {
+ display: none;
+ }
+
+ input[type="number"] {
+ -moz-appearance: textfield;
+ }
+ input[type="number"]:hover,
+ input[type="number"]:focus {
+ -moz-appearance: revert;
+ }
+}
+
+/* Not Firefox styling */
+@supports not (-moz-appearance:none) {
+ .charsheet .sheet-firefox {
+ display: none;
+ }
+}
diff --git a/ADnD_2E_Revised/css/roll20-overrides.css b/ADnD_2E_Revised/css/roll20-overrides.css
new file mode 100644
index 0000000000..97e51c521f
--- /dev/null
+++ b/ADnD_2E_Revised/css/roll20-overrides.css
@@ -0,0 +1,23 @@
+/* Overwrite Roll20 base styling */
+details > summary:first-of-type {
+ display: list-item;
+}
+
+/* Fix action buttons in repeating tables */
+div.repcontainer:not(.editmode) div.repitem td button[type="action"],
+div.repcontainer:not(.editmode) div.repitem th button[type="action"] {
+ position: relative;
+}
+
+/* Dark Mode override */
+.sheet-darkmode .charsheet label {
+ color: #333;
+}
+
+/* Fix background color so active fields can be differentiated from read-only and disabled fields */
+input,
+button,
+select,
+textarea {
+ background-color: white;
+}
diff --git a/ADnD_2E_Revised/css/toast.css b/ADnD_2E_Revised/css/toast.css
index 23be582b90..437987d9b9 100644
--- a/ADnD_2E_Revised/css/toast.css
+++ b/ADnD_2E_Revised/css/toast.css
@@ -1,4 +1,7 @@
/*#region Toast styling*/
+input.sheet-show-toast:checked + .sheet-hidden {
+ display: revert;
+}
.sheet-toast {
position: fixed;
right: 30px;
diff --git a/ADnD_2E_Revised/futureIdeas.txt b/ADnD_2E_Revised/futureIdeas.txt
index 41292df675..fb12fc09c2 100644
--- a/ADnD_2E_Revised/futureIdeas.txt
+++ b/ADnD_2E_Revised/futureIdeas.txt
@@ -1,20 +1,4 @@
-Possible NPC sheet
-- Follower sheet
-- Add top level button to jump directly to the Follower sheet
-- More detailed weapons and such for npcs
-- Remove repeating NPC sections?
-
-- Structured spell book, which fields for total pages, pages used, and remaining pages.
--- Multiple spell books
--- A roll button for the number of pages needed
--- A roll button for the number of days to write it into the book
-
-- Armor Class detailed breakdown
-- Armor class Slashing/Piercing/Bludgeoning
-
-Follower classes
-
-AD&D 2E Book release order
+AD&D 2E Book release order
The Complete Fighter's Handbook 1989 December
The Complete Thief's Handbook 1989 December
The Complete Priest's Handbook 1990 May
@@ -271,4 +255,4 @@ http://www.wizards.com/dnd/DnDDMGErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowersErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowers2ndErrata.asp
http://www.wizards.com/dnd/DnDPlayersOptionSkillsPowers3rdErrata.asp
-http://www.wizards.com/dnd/DnDPlayersOptionCombatTacticsErrata.asp
\ No newline at end of file
+http://www.wizards.com/dnd/DnDPlayersOptionCombatTacticsErrata.asp
diff --git a/ADnD_2E_Revised/html/2ESheet-base.html b/ADnD_2E_Revised/html/2ESheet-base.html
index 8d0582f721..c804ae9533 100644
--- a/ADnD_2E_Revised/html/2ESheet-base.html
+++ b/ADnD_2E_Revised/html/2ESheet-base.html
@@ -12,9 +12,14 @@ insert_changelog.html
+
+
+
+
+
insert_character-tab.html
insert_monster-tab.html
-insert_sheet-settings.html
+insert_sheet-settings-tab.html
insert_toast.html
diff --git a/ADnD_2E_Revised/html/changelog.html b/ADnD_2E_Revised/html/changelog.html
index 137826fec8..39391556ec 100644
--- a/ADnD_2E_Revised/html/changelog.html
+++ b/ADnD_2E_Revised/html/changelog.html
@@ -1,17 +1,27 @@
Announcements
-
+
Changes in
- Fixed autofill for simple magic weapons where the bonus is inserted in a spot without a whitespace. Here are some examples that have been fixed:
+ Completely redesigned the new spell section, so each spell can be on a single line, showing Name, Range, and Area of Effect
- "Short bow, Flight Arrow" -> "Short bow +1, Flight Arrow"
- "Bastard sword, One-handed" -> "Bastard sword +2, One-handed"
- "Katana, One-handed (samurai long sword)" -> "Katana +1, One-handed (samurai long sword)"
- "Sling, Bullet" -> "Sling +1, Bullet"
+ Single line spells can be folded out to show additional information of the spells
+ Removed the "Roll Spell Effect" button as it caused more confusion than it helped
+ Added Spell tracking selection to the Sheet Settings Tab. Choices are: Spell Slots, Spell Points, Arcs / Winds
+ Redesigned the Spells tab to only show the spell tracking system that selected on the Sheet Settings Tab
+ High Wisdom now triggers a popup asking if you are a priest. Bonus spells are only added if you are a priest
+ High Wisdom now autofill bonus Winds for Priests for the Arcs/Winds spell tracking system, based on the same popup as stated above. If the PO: S&P sub ability scores are used, base Wisdom is still used for determining bonus winds
+ Added support for automatic Spell Points for Wizards with high Intelligence. This is a toggle as the bonus is optional.
+ Added support for automatic Spell Points for Priests with high Wisdom. This is a toggle as only priests gets this bonus, and not Paladins and Rangers. The Priest caster level is used to determine how many spell points should be given
+ Fixed bonus spells from high Intuition from PO: Skills & Powers. Willpower was incorrectly used
+ Regeneration from high Constitution now clarifies that it is per turn(s)
+ Only show up and down arrows on numeric input fields in Firefox on hover or focus
+ Styled Monster tab to have dynamically sized fields, and larger fields for Hit Dice, HP, and Max HP
+ Updated saving throws to tell how much the check was made or missed by
+ 2Espell - Sensory signature and Knockdown switched places to make them appear in the same order as in the PO: Spells & Magic book
diff --git a/ADnD_2E_Revised/html/components/fold-button.html b/ADnD_2E_Revised/html/components/fold-button.html
new file mode 100644
index 0000000000..2343a2cd89
--- /dev/null
+++ b/ADnD_2E_Revised/html/components/fold-button.html
@@ -0,0 +1 @@
+
▼ ▲
\ No newline at end of file
diff --git a/ADnD_2E_Revised/html/components/rolltemplates.html b/ADnD_2E_Revised/html/components/rolltemplates.html
index 129c3913a5..690ace0091 100644
--- a/ADnD_2E_Revised/html/components/rolltemplates.html
+++ b/ADnD_2E_Revised/html/components/rolltemplates.html
@@ -138,49 +138,49 @@
Saving Throw {{save}}
{{#subtlety}}
- {{#sensory}}
+ {{#knockdown}}