diff --git a/Dragon Warriors/untitled folder/.DS_Store b/Dragon Warriors/.DS_Store similarity index 100% rename from Dragon Warriors/untitled folder/.DS_Store rename to Dragon Warriors/.DS_Store diff --git a/Dragon Warriors/Dice_Warriors-removebg-preview.png b/Dragon Warriors/Dice Warriors.png similarity index 100% rename from Dragon Warriors/Dice_Warriors-removebg-preview.png rename to Dragon Warriors/Dice Warriors.png diff --git a/Dragon Warriors/DragWarsTest.js b/Dragon Warriors/DragWarsTest.js deleted file mode 100644 index 2344269549..0000000000 --- a/Dragon Warriors/DragWarsTest.js +++ /dev/null @@ -1,727 +0,0 @@ -const buttonlist = ["character","inventory","combat","magic","skills","languages","biographical","documentation"]; -buttonlist.forEach(button => { - on(`clicked:${button}`, function() { - setAttrs({ - sheetTab: button - }); - }); -}); - -const repeatingSum = (destinations, section, fields, ...extras) => { - const isNumber = value => parseFloat(value).toString() === value.toString(); - const isOption = value => [...checks.valid, ...checks.roundtypes].includes(value); - const isRounding = value => checks.roundtypes.includes(value); - const isFraction = value => value.includes('/') && !(value.includes(',') || value.includes('|')); - const getTrimmed = value => value.toLowerCase().replace(/\s/g, ''); - const getRounded = (type, value, pow) => (Math[type](value * Math.pow(10, pow)) / Math.pow(10, pow)).toFixed(Math.max(0, pow)); - const getFraction = (value) => /*{ console.log(`value: ${value}`); */ - parseInt(value.split('/')[0]) / parseInt(value.split('/')[1]); - const getMultiplier = (value, rounding = 1) => 'undefined' === typeof value ? (rounding ? 0: 1) : ( - isNumber(value) ? parseFloat(value) : (isFraction(value) ? getFraction(value) : value)); - if (!Array.isArray(destinations)) destinations = [getTrimmed(destinations)]; - if (!Array.isArray(fields)) fields = [getTrimmed(fields)]; - const fields_trimmed = fields.map(field => getTrimmed(field).split(':')[0]); - const subfields = fields_trimmed.slice(0,destinations.length); - const checks = { valid: ['multiplier'], roundtypes: ['ceil', 'round', 'floor'] }; - let properties = {attributes: {}, options: {}}; - extras.forEach(extra => { - const [prop, v] = getTrimmed(extra).split(':'); - const multiplier_maybe = getMultiplier(v, isRounding(prop)); - const obj = isNumber(multiplier_maybe) ? subfields.reduce((obj,field) => { - obj[field] = multiplier_maybe; - return obj; - },{}) : multiplier_maybe.split(',').reduce((obj, item) => { - const [stat, value] = item.split('|'); - const multiplier = getMultiplier(value, isRounding(prop)); - obj[stat] = multiplier; - return obj; - }, {}); - properties[isOption(prop) ? 'options' : 'attributes'][prop] = obj; - }); - getSectionIDs(`repeating_${section}`, idArray => { - const attrArray = idArray.reduce((m, id) => [...m, ...(fields_trimmed.map(field => `repeating_${section}_${id}_${field}`))], []); - getAttrs([...attrArray, ...Object.keys(properties.attributes)], v => { - const getValue = (section, id, field) => v[`repeating_${section}_${id}_${field}`] === 'on' ? 1 : parseFloat(v[`repeating_${section}_${id}_${field}`]) || 0; - const commonMultipliers = (fields.length <= destinations.length) ? [] : fields.splice(destinations.length, fields.length - destinations.length); - const output = destinations.reduce((obj, destination, index) => { - let sumTotal = idArray.reduce((total, id) => total + getValue(section, id, fields_trimmed[index]) * commonMultipliers.reduce((subtotal, mult) => subtotal * ((!mult.includes(':') || mult.split(':')[1].split(',').includes(fields_trimmed[index])) ? getValue(section, id, mult.split(':')[0]) : 1), 1), 0); - sumTotal *= (properties.options.hasOwnProperty('multiplier') && Object.keys(properties.options.multiplier).includes(fields_trimmed[index])) ? (parseFloat(properties.options.multiplier[fields_trimmed[index]]) || 0): 1; - sumTotal += Object.entries(properties.attributes).reduce((total, [key, value]) => - total += (value.hasOwnProperty(fields_trimmed[index]) ? parseFloat(v[key] || 0) * (parseFloat(value[fields_trimmed[index]]) || 1): 0) , 0); - checks.roundtypes.forEach(type => { - if (properties.options.hasOwnProperty(type)) { - if (Object.keys(properties.options[type]).includes(fields_trimmed[index])) { - sumTotal = getRounded(type, sumTotal, (+properties.options[type][fields_trimmed[index]] || 0)); - } else if (properties.options[type] == '0' || !isNaN(+properties.options[type] || 'x') ) { - sumTotal = getRounded(type, sumTotal, +properties.options[type]); - } - } - }); - obj[destination] = sumTotal; - return obj; - }, {}); - setAttrs(output); - }); - }); -}; - -on('change:repeating_meleeweapons', function(event) { - if (event.sourceType === 'sheetworker' ) return; - const playerclickedid = (event.sourceAttribute.split('_')[2] || '').toLowerCase(); - getSectionIDs('repeating_meleeweapons', function (ids) { - const fieldnames = []; - ids.forEach(id => fieldnames.push( - `repeating_meleeweapons_${id}_equippedmeleewep`, - `repeating_meleeweapons_${id}_magicmeleeweaponbonus`, - `repeating_meleeweapons_${id}_meleeweapon`, - `repeating_meleeweapons_${id}_meleeabr`, - `repeating_meleeweapons_${id}_meleedamage` - )); - getAttrs(fieldnames, values => { - const output = {}; - ids.forEach(id => { - const checkbox = parseInt(values[`repeating_meleeweapons_${id}_equippedmeleewep`]) || 0; - const magicbonus = parseInt(values[`repeating_meleeweapons_${id}_magicmeleeweaponbonus`]) || 0; - const meleeweaponname = (values[`repeating_meleeweapons_${id}_meleeweapon`]) || None; - const meleeweaponabr = (values[`repeating_meleeweapons_${id}_meleeabr`]) || None; - const meleeweapondam = (values[`repeating_meleeweapons_${id}_meleedamage`]) || None; - - if(id.toLowerCase() === playerclickedid) { - output.magicmeleeweaponbonus = checkbox ? magicbonus : 0; - output.meleeweapon = checkbox ? meleeweaponname : "None"; - output.meleeabr = checkbox ? meleeweaponabr : "0d0"; - output.meleedamage = checkbox ? meleeweapondam : "0d0"; - } - else if(checkbox) { - output[`repeating_meleeweapons_${id}_equippedmeleewep`] = 0; - } - setAttrs(output); - }); - }); - }); -}); - -on('change:repeating_rangedweapons', function(event) { - if (event.sourceType === 'sheetworker' ) return; - const playerclickedid = (event.sourceAttribute.split('_')[2] || '').toLowerCase(); - getSectionIDs('repeating_rangedweapons', function (ids) { - const fieldnames = []; - ids.forEach(id => fieldnames.push( - `repeating_rangedweapons_${id}_equippedrangedwep`, - `repeating_rangedweapons_${id}_magicrangedweaponbonus`, - `repeating_rangedweapons_${id}_rangedweapon`, - `repeating_rangedweapons_${id}_rangedabr`, - `repeating_rangedweapons_${id}_rangeddamage`, - `repeating_rangedweapons_${id}_weaponshortrange`, - `repeating_rangedweapons_${id}_weaponmediumrange`, - `repeating_rangedweapons_${id}_weaponlongrange` - - )); - getAttrs(fieldnames, values => { - const output = {}; - ids.forEach(id => { - const checkbox = parseInt(values[`repeating_rangedweapons_${id}_equippedrangedwep`]) || 0; - const magicbonus = parseInt(values[`repeating_rangedweapons_${id}_magicrangedweaponbonus`]) || 0; - const rangedweaponname = (values[`repeating_rangedweapons_${id}_rangedweapon`]) || None; - const rangedweaponabr = (values[`repeating_rangedweapons_${id}_rangedabr`]) || None; - const rangedweapondam = (values[`repeating_rangedweapons_${id}_rangeddamage`]) || None; - const shortrange = (values[`repeating_rangedweapons_${id}_weaponshortrange`]) || None; - const mediumrange = (values[`repeating_rangedweapons_${id}_weaponmediumrange`]) || None; - const longrange = (values[`repeating_rangedweapons_${id}_weaponlongrange`]) || None; - - if(id.toLowerCase() === playerclickedid) { - output.magicrangedweaponbonus = checkbox ? magicbonus : 0; - output.rangedweapon = checkbox ? rangedweaponname : "None"; - output.rangedabr = checkbox ? rangedweaponabr : "0d0"; - output.rangeddamage = checkbox ? rangedweapondam : "0d0"; - output.weaponshortrange = checkbox ? shortrange : 0; - output.weaponmediumrange = checkbox ? mediumrange : 0; - output.weaponlongrange = checkbox ? longrange : 0; - } - else if(checkbox) { - output[`repeating_rangedweapons_${id}_equippedrangedwep`] = 0; - } - setAttrs(output); - }); - }); - }); -}); - -on('change:repeating_ammo', function(event) { - if (event.sourceType === 'sheetworker' ) return; - const playerclickedid = (event.sourceAttribute.split('_')[2] || '').toLowerCase(); - getSectionIDs('repeating_ammo', function (ids) { - const fieldnames = []; - ids.forEach(id => fieldnames.push( - `repeating_ammo_${id}_equippedammo`, - `repeating_ammo_${id}_magicammobonus`, - `repeating_ammo_${id}_specialammomodifier`, - `repeating_ammo_${id}_specialammoabrmodifier`, - `repeating_ammo_${id}_specialammodmgmodifier`, - `repeating_ammo_${id}_ammotype` - )); - getAttrs(fieldnames, values => { - const output = {}; - ids.forEach(id => { - const checkbox = parseInt(values[`repeating_ammo_${id}_equippedammo`]) || 0; - const magicbonus = parseInt(values[`repeating_ammo_${id}_magicammobonus`]) || 0; - const specialammomodifier = parseInt(values[`repeating_ammo_${id}_specialammomodifier`]) || 0; - const specialammoabrmodifier = parseInt(values[`repeating_ammo_${id}_specialammoabrmodifier`]) || 0; - const specialammodmgmodifier = parseInt(values[`repeating_ammo_${id}_specialammodmgmodifier`]) || 0; - const ammo = (values[`repeating_ammo_${id}_ammotype`]) || 0; - - if(id.toLowerCase() === playerclickedid) { - output.magicammobonus = checkbox ? magicbonus : 0; - output.specialammomodifier = checkbox ? specialammomodifier : 0; - output.specialammoabrmodifier = checkbox ? specialammoabrmodifier : 0; - output.specialammodmgmodifier = checkbox ? specialammodmgmodifier : 0; - output.ammotype = checkbox ? ammo : "None"; - } - else if(checkbox) { - output[`repeating_ammo_${id}_equippedammo`] = 0; - } - setAttrs(output); - }); - }); - }); -}); - -on('change:specialammomodifier change:equippedammo change:equippedrangedwep change:equippedmeleewep change:shield change:attack change:defence change:magicammobonus change:magicrangedweaponbonus change:magicmeleeweaponbonus change:armourattackpenalty change:armourdefencepenalty change:magicshield sheet:opened', function() { - getAttrs(['specialammomodifier','shield','attack','defence','magicammobonus','magicrangedweaponbonus','magicmeleeweaponbonus','armourattackpenalty','armourdefencepenalty','magicshield'], function(v) { - let atk = parseInt(v.attack)||0; - let def = parseInt(v.defence)||0; - let ammo = parseInt(v.magicammobonus)||0; - let specialammo = parseInt(v.specialammomodifier)||0; - let ranged = parseInt(v.magicrangedweaponbonus)||0; - let melee = parseInt(v.magicmeleeweaponbonus)||0; - let armouratk = parseInt(v.armourattackpenalty)||0; - let armourdef = parseInt(v.armourdefencepenalty)||0; - let shieldequipped = parseInt(v.shield)||0; - if (shieldequipped === 1) { - shield = parseInt(v.magicshield)||0; - } - else { - shield = 0; - } - let basemeleeatk = (atk + melee - armouratk); - let basemeleedef = (def + melee - armourdef + shield); - let baserangedatk = (atk + ranged + ammo + specialammo - armouratk); - let baserangeddef= (def - armourdef + shield); - - setAttrs({ - baserangedattack: baserangedatk, - baserangeddefence: baserangeddef, - basemeleeattack: basemeleeatk, - basemeleedefence: basemeleedef - }); - }); -}); - -on('change:othermodifications change:armourpiercingselect change:masterbowmanselect change:penetratingshotmultiplier change:penetratingshotselect change:weaponskillselect change:shield change:expertparryselect change:guardcountered change:guardcurrent change:attack change:defence change:basemeleeattack change:basemeleedefence change:baserangedattack change:baserangeddefence change:evasion sheet:opened', function() { - getAttrs(['mattackmoda','mdefencemoda','rattackmoda','rdefencemoda','evasionmod','othermodifications','armourpiercingselect','armourpiercingmodifier','masterbowmanselect','masterbowmanmodifier','penetratingshotmultiplier','penetratingshotselect','weaponskillselect','weaponskillabrmodifier','guardabrmodifier','guarddamagemodifier','shield','expertparryselect','shieldsuccessvalue','shielddievalue','guardcountered','basemeleeattack','basemeleedefence','baserangedattack','baserangeddefence','evasion','guardcurrent'], function(value) { - - const forms = { - Hawk: {mattackmoda: 1, mattackmodded: 1, mdefencemoda: -2, mdefencemodded: -2, rattackmoda: 1, rattackmodded: 1, rdefencemoda: -2, rdefencemodded: -2, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "If wielding a two-handed weapon: -1 Evasion and +1 Armour Penetration (please adjust manually)"}, - Snake: {mattackmoda: 1, mattackmodded: 1, mdefencemoda: -3, mdefencemodded: -3, rattackmoda: 1, rattackmodded: 1, rdefencemoda: -3, rdefencemodded: -3, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "Critical Hits do +1 HP damage (please adjust manually)"}, - Wolf: {mattackmoda: 2, mattackmodded: 2, mdefencemoda: -3, mdefencemodded: -3, rattackmoda: 2, rattackmodded: 2, rdefencemoda: -3, rdefencemodded: -3, evasionmod: -1, evasionmodded: -1, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "None"}, - Bear: {mattackmoda: -2, mattackmodded: -2, mdefencemoda: 1, mdefencemodded: 1, rattackmoda: -2, rattackmodded: -2, rdefencemoda: 1, rdefencemodded: 1, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "+1 additional Defence for each opponent beyond the first (Please enter in the Miscelaneous Modifiers Section manually)"}, - Cat: {mattackmoda: -2, mattackmodded: -2, mdefencemoda: 1, mdefencemodded: 1, rattackmoda: -2, rattackmodded: -2, rdefencemoda: 1, rdefencemodded: 1, evasionmod: 1, evasionmodded: 1, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "If using a shield: an additional -1 Attack and Shields block on a roll of 1 on 1d4 (these adjustments have been made for you)"}, - Crab: {mattackmoda: -2, mattackmodded: -2, mdefencemoda: 2, mdefencemodded: 2, rattackmoda: -2, rattackmodded: -2, rdefencemoda: 2, rdefencemodded: 2, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "None"}, - Neutral: {mattackmoda: 0, mattackmodded: 0, mdefencemoda: 0, mdefencemodded: 0, rattackmoda: 0, rattackmodded: 0, rdefencemoda: 0, rdefencemodded: 0, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "None"}, - Defensive: {mattackmoda: -2, mattackmodded: -2, mdefencemoda: 1, mdefencemodded: 1, rattackmoda: -2, rattackmodded: -2, rdefencemoda: 1, rdefencemodded: 1, evasionmod: 1, evasionmodded: 1, guarddamagemodifier: -1, guardabrmodifier: -1, othermodifications: "-1 Damage and -1 Armour Penetration (these adjustments have been made for you)"}, - Offensive: {mattackmoda: 1, mattackmodded: 1, mdefencemoda: -2, mdefencemodded: -2, rattackmoda: 1, rattackmodded: 1, rdefencemoda: -2, rdefencemodded: -2, evasionmod: -1, evasionmodded: -1, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "None"} - }; - - let guac = parseInt(value.guardcountered)||0; - let gua = value.guardcurrent || 'Neutral'; - const output = forms[gua] || forms.Neutral; - - output.evasionmodded += parseInt(value.evasion) || 0; - output.evasionmod; - output.othermodifications == (value.othermodifications) || "None"; - - let shieldeq = parseInt(value.shield)||0; - let shielddie = (value.shielddievalue)||'1d6'; - let shieldsuccess = parseInt(value.shieldsuccessvalue)||1; - - let expertparry = parseInt(value.expertparryselect)||0; - let weaponskill = parseInt(value.weaponskillselect)||0; - let penetratingshot = parseInt(value.penetratingshotselect)||0; - let masterbowman = parseInt(value.masterbowmanselect)||0; - let armourpiercing = parseInt(value.armourpiercingselect)||0; - - if (masterbowman === 1) { - output.masterbowmanmodifier = 1 || 0; - } - else { - output.masterbowmanmodifier = 0 || 0; - } - - if (armourpiercing === 1) { - output.armourpiercingmodifier = 1 || 0; - } - else { - output.armourpiercingmodifier = 0; - } - - if (weaponskill === 1) { - output.weaponskillabrmodifier = 1 || 0; - } - else { - output.weaponskillabrmodifier = 0; - } - - if (penetratingshot === 1) { - output.penetratingshotabrmodifier = parseInt(value.penetratingshotmultiplier) || 0; - } - else { - output.penetratingshotabrmodifier = 0; - } - - if (gua === "Cat") { - shielddie = '1d4'; - shieldsuccess = 1; - } - else if (expertparry === 1) { - shielddie = '1d10'; - shieldsuccess = 2; - } - else { - shielddie = '1d6'; - shieldsuccess = 1; - } - output.shielddievalue = shielddie; - output.shieldsuccessvalue = shieldsuccess; - - if (guac === 1 && gua !== "Neutral") { - if (gua === "Hawk" || gua === "Snake" || gua === "Wolf") { - output.mattackmodded += (parseInt(value.basemeleeattack)-2) || 0; - output.mattackmoda-2; - output.mdefencemodded += parseInt(value.basemeleedefence) || 0; - output.mdefencemoda; - output.rattackmodded += (parseInt(value.baserangedattack)-2) || 0; - output.rattackmoda-2; - output.rdefencemodded += parseInt(value.baserangeddefence) || 0; - output.rdefencemoda; - } - else if (gua === "cat" && shieldeq === 1) { - output.mattackmodded += (parseInt(value.basemeleeattack)-1) || 0; - output.mattackmoda-1; - output.mdefencemodded += (parseInt(value.basemeleedefence)-2) || 0; - output.mdefencemoda-2; - output.rattackmodded += parseInt(value.baserangedattack)-1 || 0; - output.rattackmoda; - output.rdefencemodded += (parseInt(value.baserangeddefence)-2) || 0; - output.rdefencemoda-2; - } - else { - output.mattackmodded += parseInt(value.basemeleeattack) || 0; - output.mattackmoda; - output.mdefencemodded += (parseInt(value.basemeleedefence)-2) || 0; - output.mdefencemoda-2; - output.rattackmodded += parseInt(value.baserangedattack) || 0; - output.rattackmoda; - output.rdefencemodded += (parseInt(value.baserangeddefence)-2) || 0; - output.rdefencemoda-2; - - } - } - else if (gua === "Cat" && shieldeq === 1) { - output.mattackmodded += (parseInt(value.basemeleeattack)-1) || 0; - output.mattackmoda-1; - output.mdefencemodded += parseInt(value.basemeleedefence) || 0; - output.mdefencemoda; - output.rattackmodded += (parseInt(value.baserangedattack)-1) || 0; - output.rattackmoda-1; - output.rdefencemodded += parseInt(value.baserangeddefence) || 0; - output.rdefencemoda; - } - else { - output.mattackmodded += parseInt(value.basemeleeattack) || 0; - output.mattackmoda; - output.mdefencemodded += parseInt(value.basemeleedefence) || 0; - output.mdefencemoda; - output.rattackmodded += parseInt(value.baserangedattack) || 0; - output.rattackmoda; - output.rdefencemodded += parseInt(value.baserangeddefence) || 0; - output.rdefencemoda; - } - - setAttrs(output); - - }); - }); - - on('change:miscattackmelee change:miscdefencemelee change:miscattackranged change:miscdefenceranged change:mainguacheactive change:berserktoranged change:attack change:basemeleeattack change:basemeleedefence change:baserangedattack change:baserangeddefence change:defence change:rattackmodded change:rdefencemodded change:mattackmodded change:mdefencemodded change:berserkneg change:preciseneg change:stillnessneg change:bloodrageselect change:nonprofselect change:deathvowselect sheet:opened', function() { - getAttrs(['mainguachedefence','mainguacheactive','berserktoranged','finalattack','finaldefence','basemeleedefence','basemeleeattack','baserangedattack','baserangeddefence','mdefencemodded','rattackmodded','rdefencemodded','mattackmodded','berserkneg','berserkpos','preciseneg','precisepos','stillnessneg','bloodrageselect','nonprofselect','deathvowselect','miscattackmelee','miscdefencemelee','miscattackranged','miscdefenceranged'], function(v) { - let bloodrage = parseInt(v.bloodrageselect) || 0; - let berserkappliestoranged = parseInt(v.berserktoranged)||0; - let mainguache = parseInt(v.mainguacheactive)||0; - - if (bloodrage === 1) { - bloodragemod = parseInt(v.basemeleedefence) || 0; - bloodragedmgmod = 1; - berserkattack = 0; - berserkdefence = 0; - mainguachedefence = 0; - nonprofmod = 0; - deathvowmod = 0; - preciseattack = 0; - precisedefence = 0; - stillnessdefence = 0; - mattackmod = parseInt(v.basemeleeattack)||0; - mdefencemod= parseInt(v.basemeleedefence)||0; - rattackmod = parseInt(v.baserangedattack)||0; - rdefencemod = parseInt(v.baserangeddefence)||0; - } - else if (mainguache === 2) { - mainguachedefence = parseInt(v.basemeleedefence) || 0; - berserkattack = 0; - berserkdefence = 0; - mattackmod = parseInt(v.mattackmodded)||0; - mdefencemod= parseInt(v.basemeleedefence)||0; - rattackmod = parseInt(v.rattackmodded) || 0; - rdefencemod = parseInt(v.rdefencemodded) || 0; - nonprofmod = 0; - deathvowmod = 0; - preciseattack = 0; - precisedefence = 0; - stillnessdefence = 0; - } - else if (mainguache === 1) { - berserkattack = 0; - berserkdefence = 0; - rattackmod = parseInt(v.rattackmodded) || 0; - rdefencemod = parseInt(v.rdefencemodded) || 0; - mattackmod = parseInt(v.mattackmodded)||0; - mdefencemod = parseInt(v.mdefencemodded)||0; - nonprofmod = 0; - deathvowmod = 0; - preciseattack = 0; - precisedefence = 0; - stillnessdefence = 0; - mainguachedefence = -2; - } - else { - bloodragemod = 0; - bloodragedmgmod = 0; - berserkattack = parseInt(v.berserkpos) || 0; - berserkdefence = parseInt(v.berserkneg) || 0; - rattackmod = parseInt(v.rattackmodded) || 0; - rdefencemod = parseInt(v.rdefencemodded) || 0; - mattackmod = parseInt(v.mattackmodded)||0; - mdefencemod = parseInt(v.mdefencemodded)||0; - nonprofmod = parseInt(v.nonprofselect) || 0; - deathvowmod = parseInt(v.deathvowselect) || 0; - preciseattack = parseInt(v.precisepos) || 0; - precisedefence = parseInt(v.preciseneg) || 0; - stillnessdefence = parseInt(v.stillnessneg) || 0; - mainguachedefence = 0; - } - - let miscmeleea = parseInt(v.miscattackmelee)||0; - let miscmeleed = parseInt(v.miscdefencemelee)||0; - let miscrangeda = parseInt(v.miscattackranged)||0; - let miscrangedd = parseInt(v.miscdefenceranged)||0; - - let fmatk = (mattackmod + berserkattack - nonprofmod + deathvowmod + bloodragemod + miscmeleea); - let fmdef = (mdefencemod - berserkdefence - precisedefence - stillnessdefence - bloodragemod - mainguachedefence + miscmeleed); - - if (berserkappliestoranged === 1) { - fratk = (rattackmod + berserkattack - nonprofmod + deathvowmod + preciseattack + miscrangeda)||0; - frdef = (rdefencemod - berserkdefence - precisedefence - stillnessdefence + miscrangedd)||0; - } - else { - fratk = (rattackmod - nonprofmod + deathvowmod + preciseattack + miscrangeda)||0; - frdef = (rdefencemod - berserkdefence - precisedefence - stillnessdefence + miscrangedd)||0; - } - - setAttrs({ - bloodragedmgmod: bloodragedmgmod, - finalmeleeattack: parseInt(fmatk)||0, - finalmeleedefence: parseInt(fmdef)||0, - finalrangedattack: parseInt(fratk)||0, - finalrangeddefence: parseInt(frdef)||0 - }); - }); - }); - - on('change: miscabrmelee change:miscdamagemelee change:miscabrranged change:miscdamageranged change:meleeabrbonus change:magicmeleeweaponbonus change:weaponskillabrmodifier change:armourpiercingmodifier change:weaponskillabrmodifier change:guardabrmodifier change:guarddamagemodifier change:meleedmgbonus change:magicammobonus change:magicrangedweaponbonus change:specialammoabrmodifier change:specialammodmgmodifier change:penetratingshotabrmodifier change:armourpiercingmodifier change:masterbowmanmodifier change:bloodragedmgmod', function() { - getAttrs(['miscabrmelee','miscdamagemelee','miscabrranged','miscdamageranged','meleeabrbonus','magicmeleeweaponbonus','weaponskillabrmodifier','armourpiercingmodifier','weaponskillabrmodifier','guardabrmodifier','guarddamagemodifier','meleedmgbonus','magicammobonus','magicrangedweaponbonus','specialammoabrmodifier','specialammodmgmodifier','penetratingshotabrmodifier','armourpiercingmodifier','masterbowmanmodifier','bloodragedmgmod'], function(v) { - let meleeabrbonus = parseInt(v.meleeabrbonus)||0; - let magicmeleeweaponbonus = parseInt(v.magicmeleeweaponbonus)||0; - let weaponskillabrmodifier = parseInt(v.weaponskillabrmodifier)||0; - let armourpiercingmodifier = parseInt(v.armourpiercingmodifier)||0; - let guardabrmodifier = parseInt(v.guardabrmodifier)||0; - let meleedmgbonus = parseInt(v.meleedmgbonus)||0; - let guarddamagemodifier = parseInt(v.guarddamagemodifier)||0; - let magicammobonus = parseInt(v.magicammobonus)||0; - let magicrangedweaponbonus = parseInt(v.magicrangedweaponbonus)||0; - let specialammoabrmodifier = parseInt(v.specialammoabrmodifier)||0; - let penetratingshotabrmodifier = parseInt(v.penetratingshotabrmodifier)||0; - let masterbowmanmodifier = parseInt(v.masterbowmanmodifier)||0; - let specialammodmgmodifier = parseInt(v.specialammodmgmodifier)||0; - let bloodragedmgmod = parseInt(v.bloodragedmgmod)||0; - let miscabrmelee = parseInt(v.miscabrmelee)||0; - let miscdamagemelee = parseInt(v.miscdamagemelee)||0; - let miscabrranged = parseInt(v.miscabrranged)||0; - let miscdamageranged = parseInt(v.miscdamageranged)||0; - - let fmeleeabrbonus = (miscabrmelee + meleeabrbonus + magicmeleeweaponbonus + weaponskillabrmodifier + armourpiercingmodifier + guardabrmodifier); - let fmeleedmgbonus = (miscdamagemelee + magicmeleeweaponbonus + meleedmgbonus + guarddamagemodifier + bloodragedmgmod); - let frangedabrbonus = (miscabrranged + guardabrmodifier + magicammobonus + magicrangedweaponbonus + specialammoabrmodifier + penetratingshotabrmodifier + masterbowmanmodifier + armourpiercingmodifier); - let frangeddmgbonus = (miscdamageranged + guarddamagemodifier + magicammobonus + magicrangedweaponbonus + specialammodmgmodifier + bloodragedmgmod); - - setAttrs({ - finalmeleeabrbonus: parseInt(fmeleeabrbonus)||0, - finalmeleedmgbonus: parseInt(fmeleedmgbonus)||0, - finalrangedabrbonus: parseInt(frangedabrbonus)||0, - finalrangeddmgbonus: parseInt(frangeddmgbonus)||0 - }); - }); - }); - - on('change:finalstrength', function() { - getAttrs(['finalstrength','meleedmgbonus','meleeabrbonus'], function(value) { - - let str = parseInt(value.finalstrength)||0; - let maxenc = parseInt(value.maxenc)||0; - let meleeabrbonus = parseInt(value.meleeabrbonus)||0; - let meleedmgbonus = parseInt(value.meleeadmgbonus)||0; - - if (str <= 5) { - maxenc = 6; - meleeabrbonus = 0; - meleedmgbonus = 0; - } - else if (str <= 8) { - maxenc = 8; - meleeabrbonus = 0; - meleedmgbonus = 0; - } - else if (str <= 12) { - maxenc = 10; - meleeabrbonus = 0; - meleedmgbonus = 0; - } - else if (str <= 15) { - maxenc = 12; - meleeabrbonus = 0; - meleedmgbonus = 0; - } - else if (str <= 18) { - maxenc = 14; - meleeabrbonus = 1; - meleedmgbonus = 1; - } - else { - maxenc = 14; - meleeabrbonus = 2; - meleedmgbonus = 2; - } - - setAttrs({ - meleeabrbonus: meleeabrbonus, - meleedmgbonus: meleedmgbonus, - maxenc: maxenc - }); - }); - }); - -on('change:berserkneg ', () => { - getAttrs(['berserkneg', 'mdefencemodded', 'rdefencemodded'], v=> { - const stats = ['berserk']; - const output = {}; - const mdef = parseInt(v.mdefencemodded) || 0; - const rdef = parseInt(v.rdefencemodded) || 0; - stats.forEach(stat => { - let neg = parseInt(v[`${stat}neg`]) || 0; - let score = (neg > mdef || neg > rdef) ? Math.max(mdef, rdef) : (neg < 0 ? 0 : neg); - let factor = 3; - let pos = Math.floor(score / factor); - output[`${stat}neg`] = Math.floor(score/factor)*factor; - output[`${stat}pos`] = pos; - }); - setAttrs(output, {silent:true}); - }); -}); - -on('change:preciseneg change:stillnessneg', () => { - getAttrs(['preciseneg', 'stillnessneg','rdefencemodded'], v=> { - const stats = ['precise', 'stillness']; - const output = {}; - const mdef = parseInt(v.rdefencemodded) || 0; - stats.forEach(stat => { - let neg = parseInt(v[`${stat}neg`]) || 0; - let score = (neg > rdef) ? rdef : (neg < 0 ? 0 : neg); - let factor = (stat === 'stillness') ? 2 : 3; - let pos = Math.floor(score / factor); - output[`${stat}neg`] = Math.floor(score/factor)*factor; - output[`${stat}pos`] = pos; - }); - setAttrs(output, {silent:true}); - }); -}); - -on('change:magicalattack change:magicaldefence change:miscmagicattack change:miscmagicdefence change:stillnesspos change:evasionmodded change:evasion change:miscevasion change:stealth change:perception change:miscstealth change:miscperception change:af change:magicafbonus change:miscaf change:strength change:reflexes change:intelligence change:psychictalent change:looks change:miscstrength change:miscreflexes change:miscintelligence change:miscpsychictalent change:misclooks sheet:opened', function(event) { - getAttrs(['magicalattack','magicaldefence','miscmagicattack','miscmagicdefence','finalevasion','finalstealth','finalperception','stillnesspos','evasionmodded','evasion','miscevasion','stealth','perception','miscstealth','miscperception','finalstrength','finalreflexes','finalintelligence','finalpsychictalent','finallooks','totalaf','af','magicafbonus','miscaf','strength','reflexes','intelligence','psychictalent','looks','miscstrength','miscreflexes','miscintelligence','miscpsychictalent','misclooks'], function(v) { - let af = parseInt(v.af); - let magicaf = parseInt(v.magicafbonus); - let miscaf = parseInt(v.miscaf); - let str = parseInt(v.strength); - let ref = parseInt(v.reflexes); - let int = parseInt(v.intelligence); - let psy = parseInt(v.psychictalent); - let lks = parseInt(v.looks); - let mstr = parseInt(v.miscstrength); - let mref = parseInt(v.miscreflexes); - let mint = parseInt(v.miscintelligence); - let mpsy = parseInt(v.miscpsychictalent); - let mlks = parseInt(v.misclooks); - let bstl = parseInt(v.stealth); - let bper = parseInt(v.perception); - let mstl = parseInt(v.miscstealth); - let pstl = parseInt(v.stillnesspos)||0; - let mper = parseInt(v.miscperception); - let beva = parseInt(v.evasionmodded); - let meva = parseInt(v.miscevasion); - let maa = parseInt(v.magicalattack); - let mde = parseInt(v.magicaldefence); - let mmaa = parseInt(v.miscmagicattack); - let mmde = parseInt(v.miscmagicdefence); - - let fstr = str + mstr; - let fref = ref + mref; - let fint = int + mint; - let fpsy = psy + mpsy; - let flks = lks + mlks; - let faf = (af + magicaf + miscaf); - let fstl = (bstl + mstl + pstl); - let fper = bper + mper; - let feva = beva + meva; - let fmaa = maa + mmaa; - let fmde = mde + mmde; - - setAttrs({ - finalstrength: fstr, - finalreflexes: fref, - finalintelligence: fint, - finalpsychictalent: fpsy, - finallooks: flks, - totalaf: faf, - finalstealth: fstl, - finalperception: fper, - finalevasion: feva, - finalmagicalattack: fmaa, - finalmagicaldefence: fmde - }); - }); -}); - -const woundValues = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"]; - woundValues.forEach(function(value) { - on(`clicked:wound_${value}`, function() { - setAttrs({ - wtwound: 0, - wound: value - }); - }); -}); - -const wtwoundValues = ["0","1","2","3"]; -wtwoundValues.forEach(function(value) { - on(`clicked:wtwound_${value}`, function() { - getAttrs(["maxhp","wound"], function(v) { - let w1= parseInt(v.wound); - let m1= parseInt(v.maxhp); - if (w1 < m1) - wou = m1, - wtw = value; - else - wtw = value; - setAttrs({ - wtwound: wtw, - wound: wou -}); -}); -}); -}); - -const manausedValues = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"]; - manausedValues.forEach(function(value) { - on(`clicked:manaused_${value}`, function() { - setAttrs({ - manaused: value - }); - }); -}); - -const secmanausedValues = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"]; - secmanausedValues.forEach(function(value) { - on(`clicked:secmanaused_${value}`, function() { - setAttrs({ - secmanaused: value - }); - }); -}); - -const termanausedValues = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30"]; - termanausedValues.forEach(function(value) { - on(`clicked:termanaused_${value}`, function() { - setAttrs({ - termanaused: value - }); - }); -}); - -on("clicked:wound_reset", function() { - setAttrs({ - wound: 0, - wtwound: 0 - }); -}); - -on("clicked:mp_reset", function() { - setAttrs({ - manaused: 0 - }); -}); - -on("clicked:secmp_reset", function() { - setAttrs({ - secmanaused: 0 - }); -}); - -on("clicked:termp_reset", function() { - setAttrs({ - termanaused: 0 - }); -}); - -on('change:rank sheet:opened', function() { - getAttrs(['pfc','rank','espchance','premonitionchance'], function(value) { - let rank = parseInt(value.rank)||0; - let psycfatcheck = rank + 13; - let esp = 5 + rank * 3; - let prem = 35 + rank * 2; - setAttrs({ - pfc: psycfatcheck, - espchance: esp, - premonitionchance: prem - }); - }); - }); - - on("change:repeating_inventoryitems remove:repeating_inventoryitems change:gc change:sf change:cp change:repeating_meleeweapons remove:repeating_meleeweapons change:repeating_rangedweapons remove:repeating_rangedweapons change:repeating_ammo remove:repeating_ammo change:shield sheet:opened", function() { - repeatingSum("totalmeleeweaponweight", "meleeweapons", "meleeweaponweight"); - repeatingSum("totalrangedweaponweight", "rangedweapons", "rangedweaponweight"); - repeatingSum("ammoweight", "ammo", "ammoqty"); - getAttrs(["gc","sf", "cp"], function(value) { - let gc = parseFloat(value.GC)||0; - let sf = parseFloat(value.SF)||0; - let cp = parseFloat(value.CP)||0; - }); - - repeatingSum("totalencumbrance", "inventoryitems", ["inventoryqty", "encumbrancevalue"], "gc:1/150", "sf:1/150", "cp:1/150", "ammoweight:1/12", "totalmeleeweaponweight", "totalrangedweaponweight", "shield", "round"); - }); \ No newline at end of file diff --git a/Dragon Warriors/Dragon Warriors Revised HomeBrew.html b/Dragon Warriors/Dragon Warriors Revised HomeBrew.html deleted file mode 100644 index 23a705f846..0000000000 --- a/Dragon Warriors/Dragon Warriors Revised HomeBrew.html +++ /dev/null @@ -1,1765 +0,0 @@ -
-
- Dragon Warriors
- - - - - - - - -
- - - -
-
- Name - Profession - Rank - Experience -
-
- -
Strength
-
Reflexes
-
Intelligence
-
Psychic Talent
-
Looks
-
-
- -
Attack
-
Defence
-
-
- -
Base Evasion
-
-
- -
Magical Attack
-
Magical Defence
-
-
- -
Stealth

-
Perception
-
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - -
-
- Shield -
-
- - - - -
-
-
-
-
- - - - Equipped Weapon:
- ABR
- Damage
- Sword -
- - - - Equipped Weapon: -
- Ammunition Type: -
- ABR -
- Damage -
-
-
-
-
-
- Range:
Short
Medium
Long

-
-
- Bow -
-
- - Final Melee Attack -
- Final Melee Defence -
-

- - Final Ranged Attack -
- Final Ranged Defence -
-
- -
- -
- No Magic Attributes -
-
- - - Guard Taken - - - - - - - -
-
- -
- Direct Magical Attack
- Indirect Magical Attack
-
- -
- -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
- - -
-
- -
- - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - - - - - -
- -
-
-
-
- -
-
- -
- Item - Location - Quantity - Encumbrance Value -
-
-
-
- -
- - - -
-
- Coin Chest -
-
- - -
-
- - Type -
- Armour Factor           Magic Bonus -

- - Attack Penalty -
- Defence Penalty -
- Stealth Penalty -


-
-
- Helmed Skull -
-
- Shield Equipped? -
- Magic Bonus -
- Shield Die -
-
- -
- -
- -
-
-
- -
- -
- - Magic Bonus - Armour Bypass Roll - Damage - Equipped - -
- -
- - Magic Bonus - Armour Bypass Roll - Damage - Equipped -
- Short - Medium - Long - -
- -
- Ammunition Type - Quantity - Magic Bonus - Special Attack Modifier - Special ABR Modifier - Special Damage Modifier - Equipped - -
-
-
-
- -
- - -
-
- Encumbrance -
-
-
-
- -
-
- - - - - - - - -
-
- - - - - - - - -
-
- -
- - - - - - -
-
- - - -
- - - -
- - -
- -
- -
-
-
- -
- - Berserk Defence Penalty: Attack Bonus -
- - -
- -
-
- - Activated abilities apply without regard to rules restrictions, for example Weaponskill applies a bonus to all Armour Bypass rolls while active. Manual control is required. - Activate Expert Parry
- Activate Weaponskill
-
Activate Main Guache: Inactive Defensive Offensive

- Activate Master Bowman -
-
- - Activated abilities apply without regard to rules restrictions, the Non-Proficiency penalty applies all rolls while active. Manual control is required. - Activate Non-Proficient Weapon -
-
- - Activated abilities apply without regard to rules restrictions. Armour Piercing applies a bonus to all Armour Bypass rolls while active. Manual control is required. - Activate Armour Peircing - Activate Deathvow -
-
- - Activated abilities apply without regard to rules restrictions, for example Penetrating Shot applies a bonus to all Ranged Armour Bypass rolls while active. Manual control is required. - Precise Shot Defence Penalty Attack Bonus -
- Stillness Defence Penalty Stealth Bonus
-
Penetrating Shot Skill Level: None Once Twice

- Activate Penetrating Shot -
-
- No Magic Attributes -
- -
-
- - - Final Melee Attack - Final Melee Defence - -
- - Final Ranged Attack - Final Ranged Defence - -

- Equipped Melee Weapon: - ABR - Damage - -
- - Shield Equipped?       - Shield Die - - - -

- - Equipped Ranged Weapon: - ABR - Damage - -
- - Equipped Ammunition Type: -
- Special Ammunition Modifiers: Attack - Armour Bypass - Damage -
-
- - Ranges: Short - Medium - Long - -
-
-
-
- -
-
- -
- - The Elements: Earth, Air, Fire, Water, Darkness - -
- - - - -
-
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - -
- - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - - - - -
- -
-
- -
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
- -
- Name - Range - Duration
- Description
-
-
-
-
- -
-
- -
- Skill - Description
-
-
-
- -
- Skill - Level
- Description
-
-
-
- -
-
- -
- Language - Fluency Level - Literate? - Script -
-
-
- -
- Language - Fluency Level - Literate? - Script -
-
-
-
-
- - - - - - - - - - - -
-
- -
- This character sheet includes material based on the Dragon Warriors setting, as created by and copyright (c) Dave Morris and Oliver Johnson, and used according to the terms of the Serpent King Games Fan Policy. We are not permitted to charge you to use or access this content. This character sheet is not published, endorsed, or officially approved by Serpent King Games. For more information about Dragon Warriors products and Serpent King Games, please visit www.serpentking.com
- Serpent King Games expects you to use the Dragon Warriors setting responsibly and legally. That means avoiding associating the setting with extreme graphic violence, explicit sexual content, hate speech against any particular real-world segment of society, or anything else that does not present Dragon Warriors in a positive light.
- If you have any questions about Dragon Warriors, or the conditions of use of this character sheet, please email info@serpentking.com

- Most of the images used on the character sheet come directly from the Dragon Warriors books.

- The image used to represent Magic Points named "effect" and was created by ATOM and sourced from the Noun Project.

- A huge shoutout to Roll20 forums member GiGs, without whom this sheet would not have been built.

- - - Bug fixes and Sheet Roll updates

- - Encumberance was not calculating properly due to an old Sheet Worker, fixed.
- Sheet rolls were unprofessional looking, they have been updated to use roll templates. Thanks to @SouthernSkies on the Dragon Warriors Discord server for his assistance with this.
- PFC sheet roll was not working at all, fixed.
- ESP and Premonition checks were dependent on an API, this requirement has been removed for the published version. If you are a Pro Subscriber, I suggest that you install the "Blind Roll" API and create the following macros:
- ESP "!broll 1d100<@{espchance}"
- Premonition "!broll 1d100<@{premonitionchance}"
- - - Total Overhaul Update

- - Major changes to layout, and corrected font style for inputs
- Added artworks
- Corrected problems with Elementalist MP sections
- Fixed issues with Mystic's Psychic Fatigue field
- Added Combat page to track all changes to Attack and Defence scores through guards, profession abilities and equipment modifiers
- Changed the button image on wounds and mana points trackers
- Added wound counters to track Health Points down to -1, -2 and -3 (wounds tracker for Macros does not take these into account, but they are not relevant for KO/shock calculations anyway)
- Added a magic bonus section to weapons and shields for applying bonuses to combat attributes.
- Added 'equipped' value to weapons selection to ensure only a single weapon's magic bonuses applies at a time.
- Modified the Armour Factor area to be more specific.
- Added sheet rolls for attacks, attribute checks and other basic game roll functions
- Further code stream-lining.
-
- - - Missing Languages added and literacy checkbox default value fixed
- Slight remodel of the front page to incorporate new elements
- Sheet Worker now rounds off encumberance, and calculates total (including equipment, coins, weapons and shield) and maximum encumbrance values
- Added a quantity field for inventory items
- Added an ammunition section underneath the Weapons
- Wounds checkboxes have been updated, the number of radioboxes available is set to equal a character's max HP. The sheet can calculate remaining HP based on the wounds counter.
- Show/hide magic sections (front page and magic page) dependant on profession selected from the dropdown list
- Major code tidy up
-
- - None known, let me know if you see one so I can squash it!
-
- -
-
- - \ No newline at end of file diff --git a/Dragon Warriors/Dragon Warriors Revised.css b/Dragon Warriors/Dragon Warriors Revised.css index 27af8e7b86..cf8b9002a4 100644 --- a/Dragon Warriors/Dragon Warriors Revised.css +++ b/Dragon Warriors/Dragon Warriors Revised.css @@ -102,13 +102,17 @@ button[type="roll"].sheet-d20{ background-color: transparent; margin-left: 5px; } -button.sheet-d20{ +button.sheet-d20 { background-image: url(https://i.imgur.com/JQC7jDf.jpg); background-size: 30px 30px; background-repeat: no-repeat; width: 30px; height: 30px; } +button.sheet-update { + padding: 2px; + margin-top: 3px; +} img.sheet-headerimage { width: 100%; } @@ -124,6 +128,17 @@ img.sheet-imgchest { margin-right: auto; width: 50%; } +img.sheet-imghand { + display: inline-block; + width: 40px px; + height: 25px; +} +img.sheet-imghanda { + display: inline-block; + width: 40px px; + height: 25px; + transform: scaleX(-1); +} img.sheet-skullimg { display: block; margin-left: auto; @@ -1969,9 +1984,11 @@ input.sheet-shield-toggle[value="1"] ~ div.sheet-shieldhidden1 { border-width: 6px; justify-content: space-between; display: grid; - grid-template-areas: "magattribheader magattribheader" "mcf2 mcfmd" "magmod2 magbox2" "magfmod2 magfbox2"; + grid-template-areas: "mdheader mdheader" "mcf2 mcfmd" "magmod2 magbox2" "magfmod2 magfbox2"; +} +.sheet-mdheader { + grid-area: mdheader; } - .sheet-manabox { grid-area: manabox; border-style: double; @@ -1986,9 +2003,12 @@ input.sheet-shield-toggle[value="1"] ~ div.sheet-shieldhidden1 { border-style: double; border-width: 6px; justify-content: space-between; - display: grid; grid-template-areas: "magattribheader magattribheader" "mcf1 mcfma" "magmod1 magbox1" "magfmod1 magfbox1"; + display: grid; + grid-template-areas: "maheader maheader" "mcf1 mcfma" "magmod1 magbox1" "magfmod1 magfbox1"; +} +.sheet-maheader { + grid-area: maheader; } - /*define which elements should be shown, based on profession*/ .sheet-mana { display: none; @@ -2285,7 +2305,7 @@ input.sheet-profession-toggle[value="Demonologist"] ~ div.sheet-list { display: grid; border-style: double; border-width: 6px; - grid-template-areas: "finalsumheader finalsumheader finalsumheader finalsumheader" "finalsumcol1 finalsumboxes1 finalsumcol2 finalsumboxes2" + grid-template-areas: "finalsumheader finalsumheader finalsumheader finalsumheader" "finalsumcol1 finalsumboxes1 finalsumcol2 finalsumboxes2"; } .sheet-finalsumboxes1 { grid-area: finalsumboxes1; @@ -2308,7 +2328,7 @@ input.sheet-profession-toggle[value="Demonologist"] ~ div.sheet-list { border-style: double; border-width: 6px; grid-template-columns: 53% 47%; - grid-template-areas: "combatsumheader combatsumheader" "meleeattack1 meleeattack1" "equippedweaponlabel1 equippedweaponbox1" "abrlabel1 abrbox1" "mabrlabel1 mabrbox1" "damagelabel1 damagebox1" "mdamlabel1 mdambox1" "imgsworddiv imgsworddiv" "rangedattack1 rangedattack1" "equippedweaponlabel2 equippedweaponbox2" "equippedammolabel1 equippedammobox1" "abrlabel2 abrbox2" "rabrlabel1 rabrbox1" "damagelabel2 damagebox2" "rdamlabel1 rdambox1" "rangecols rangecols"; + grid-template-areas: "combatsumheader combatsumheader" "meleeattack1 meleeattack1" "equippedweaponlabel1 equippedweaponbox1" "abrlabel1 abrbox1" "mabrlabel1 mabrbox1" "damagelabel1 damagebox1" "mdamlabel1 mdambox1" "imgsworddiv imgsworddiv" "rangedattack1 rangedattack1" "equippedweaponlabel2 equippedweaponbox2" "equippedammolabel1 equippedammobox1" "abrlabel2 abrbox2" "rabrlabel1 rabrbox1" "damagelabel2 damagebox2" "rdamlabel1 rdambox1" "rangecols rangecols" "buttonfooter buttonfooter"; } .sheet-meleeattack1 { grid-area: meleeattack1 ; @@ -2390,7 +2410,6 @@ input.sheet-profession-toggle[value="Demonologist"] ~ div.sheet-list { } .sheet-combatsumheader { grid-area: combatsumheader; - text-align: center; } .sheet-imgsworddiv { grid-area: imgsworddiv; diff --git a/Dragon Warriors/Dragon Warriors Revised.html b/Dragon Warriors/Dragon Warriors Revised.html index 4336401b63..9e98ed97aa 100644 --- a/Dragon Warriors/Dragon Warriors Revised.html +++ b/Dragon Warriors/Dragon Warriors Revised.html @@ -9,6 +9,7 @@ +
@@ -220,7 +221,6 @@ - @@ -231,7 +231,7 @@
-
+
Poison Save
@@ -239,7 +239,7 @@
Shield
-


+


Roll
on
@@ -319,7 +319,7 @@
Ranged Attack:
Ranged Defence:
Evasion:
-
+
@@ -340,7 +340,7 @@
Ranged Attack:
Ranged Defence:
Evasion:
-
+
@@ -360,7 +360,7 @@
Ranged Attack:
Ranged Defence:
Evasion:
-
+
@@ -531,7 +531,7 @@
- +
Psychic Fatigue Check:
- spell level

@@ -539,10 +539,10 @@
Premonition
%
- +
- + @@ -694,11 +694,11 @@
- - + +
- + @@ -850,14 +850,14 @@
- +
- +
Magic Bonus @@ -866,7 +866,7 @@ Equipped
- +
Magic Bonus @@ -878,7 +878,7 @@ Long
- +
Ammunition Type Quantity @@ -886,7 +886,7 @@ Equipped
Special Ammunition Modifiers: Attack ABR - Damage + Damage
@@ -907,18 +907,20 @@
- Coin Chest + Coin Chest
-
+
+
+
Type
Armour Factor
Magic Bonus

-
Armour Factor
+
Miscellaneous Bonus
Non-Proficiency Penalties:
Attack
Defence
@@ -976,7 +978,9 @@
Evasion
-
+
+ +
Final Melee Attack
Final Melee Defence
@@ -1005,13 +1009,17 @@
- +
+ +
Base Score
Modifier
-
Final

+
Final
- +
+ +
Base Score
Modifier
Final
@@ -1060,482 +1068,12 @@
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-
+ + +

@@ -1747,13 +1285,29 @@ Most of the images used on the character sheet come directly from the Dragon Warriors books.

The image used to represent Magic Points named "effect" and was created by ATOM and sourced from the Noun Project.

A huge shoutout to Roll20 forums member GiGs, without whom this sheet would not have been built.

+ Thank you to DragonWarriors Discord user SouthernSkies for playtesting and issue reporting.

+ And most certainly not least, the brave group of adventurers who have been my primary playtesters: Gille, Hariot, Cador, Randos and Ulfthak.

+ + + Implemented new attributes: currenthp, currentmp currentmpelementtwo and currentmpelementthree.
+ These attributes are to be used with token bars to accurately represent wounds and magic points which count down properly.
+ In developing these attributes, I was able to correct a bug which was requiring players to double click on wound / mp radio buttons to function properly.
+ Layout changes:
+ Removed redundant magic point trackers from the magic page. Not only were they redundant, but they interferred with the function of the currentmp set of attributes.
+ + + Problem: +     "Need to streamline Sheet Workers in the code to reduce overall attribute calls (looking for experienced JS coders for some help here!)." + The sheet will no longer seek to automatically update scores after any changes, as users had reported significant performance issues due to too many attribute checks/calls.
+ I have added a button to the top-bar "Click to Apply Changes", which the user will need to click to apply any changes made to the sheet.
+ While this is not the ideal solution I would choose, I do not have enough coding experience to rebuild the Sheet Workers myself.
Layout fixes, Bug fixes Fixed error preventing Precise Shot modifiers from being applied to rolls. Spinners removed from read-only boxes to avoid confusion.
- Have moved base score inputs (all) to the renamed tab "Base Scores" (formerly Miscelaneous Modifiers).
+ Have moved base score inputs (all) to the renamed tab "Base Scores" (formerly Miscellaneous Modifiers).
Removed ABR / DMG bonus boxes from front sheet as unnecessary.
Moved AF misc bonus to the AF section of the Inventory page.
Opened up base Magic Stats on the Magic page for all classes.
@@ -1808,8 +1362,6 @@
Change Attribute names so that making custom Macro Calls for end users is easier to work.
- Change the way wound counts are processed to allow better token integration.
- Need to streamline Sheet Workers in the code to reduce overall attribute calls (looking for experience JS coders for some help here!).
@@ -2002,7 +1554,7 @@ }); }); - on('change:specialammomodifier change:equippedammo change:equippedrangedwep change:equippedmeleewep change:shield change:attack change:defence change:magicammobonus change:magicrangedweaponbonus change:magicmeleeweaponbonus change:armourattackpenalty change:armourdefencepenalty change:magicshield sheet:opened', function() { + on('clicked:update', function() { getAttrs(['specialammomodifier','shield','attack','defence','magicammobonus','magicrangedweaponbonus','magicmeleeweaponbonus','armourattackpenalty','armourdefencepenalty','magicshield'], function(v) { let atk = parseInt(v.attack)||0; let def = parseInt(v.defence)||0; @@ -2033,14 +1585,14 @@ }); }); - on('change:othermodifications change:armourpiercingselect change:masterbowmanselect change:penetratingshotmultiplier change:penetratingshotselect change:weaponskillselect change:shield change:expertparryselect change:guardcountered change:guardcurrent change:attack change:defence change:basemeleeattack change:basemeleedefence change:baserangedattack change:baserangeddefence change:evasion sheet:opened', function() { + on('clicked:update', function() { getAttrs(['mattackmoda','mdefencemoda','rattackmoda','rdefencemoda','evasionmod','othermodifications','armourpiercingselect','armourpiercingmodifier','masterbowmanselect','masterbowmanmodifier','penetratingshotmultiplier','penetratingshotselect','weaponskillselect','weaponskillabrmodifier','guardabrmodifier','guarddamagemodifier','shield','expertparryselect','shieldsuccessvalue','shielddievalue','guardcountered','basemeleeattack','basemeleedefence','baserangedattack','baserangeddefence','evasion','guardcurrent'], function(value) { const forms = { Hawk: {mattackmoda: 1, mattackmodded: 1, mdefencemoda: -2, mdefencemodded: -2, rattackmoda: 1, rattackmodded: 1, rdefencemoda: -2, rdefencemodded: -2, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "If wielding a two-handed weapon: -1 Evasion and +1 Armour Penetration (please adjust manually)"}, Snake: {mattackmoda: 1, mattackmodded: 1, mdefencemoda: -3, mdefencemodded: -3, rattackmoda: 1, rattackmodded: 1, rdefencemoda: -3, rdefencemodded: -3, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "Critical Hits do +1 HP damage (please adjust manually)"}, Wolf: {mattackmoda: 2, mattackmodded: 2, mdefencemoda: -3, mdefencemodded: -3, rattackmoda: 2, rattackmodded: 2, rdefencemoda: -3, rdefencemodded: -3, evasionmod: -1, evasionmodded: -1, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "None"}, - Bear: {mattackmoda: -2, mattackmodded: -2, mdefencemoda: 1, mdefencemodded: 1, rattackmoda: -2, rattackmodded: -2, rdefencemoda: 1, rdefencemodded: 1, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "+1 additional Defence for each opponent beyond the first (Please enter in the Miscelaneous Modifiers Section manually)"}, + Bear: {mattackmoda: -2, mattackmodded: -2, mdefencemoda: 1, mdefencemodded: 1, rattackmoda: -2, rattackmodded: -2, rdefencemoda: 1, rdefencemodded: 1, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "+1 additional Defence for each opponent beyond the first (Please enter in the Miscellaneous Modifiers Section manually)"}, Cat: {mattackmoda: -2, mattackmodded: -2, mdefencemoda: 1, mdefencemodded: 1, rattackmoda: -2, rattackmodded: -2, rdefencemoda: 1, rdefencemodded: 1, evasionmod: 1, evasionmodded: 1, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "If using a shield: an additional -1 Attack and Shields block on a roll of 1 on 1d4 (these adjustments have been made for you)"}, Crab: {mattackmoda: -2, mattackmodded: -2, mdefencemoda: 2, mdefencemodded: 2, rattackmoda: -2, rattackmodded: -2, rdefencemoda: 2, rdefencemodded: 2, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "None"}, Neutral: {mattackmoda: 0, mattackmodded: 0, mdefencemoda: 0, mdefencemodded: 0, rattackmoda: 0, rattackmodded: 0, rdefencemoda: 0, rdefencemodded: 0, evasionmod: 0, evasionmodded: 0, guarddamagemodifier: 0, guardabrmodifier: 0, othermodifications: "None"}, @@ -2166,7 +1718,7 @@ }); }); - on('change:miscattackmelee change:miscdefencemelee change:miscattackranged change:miscdefenceranged change:mainguacheactive change:berserktoranged change:attack change:basemeleeattack change:basemeleedefence change:baserangedattack change:baserangeddefence change:defence change:rattackmodded change:rdefencemodded change:mattackmodded change:mdefencemodded change:berserkneg change:preciseneg change:stillnessneg change:bloodrageselect change:nonprofselect change:deathvowselect sheet:opened', function() { + on('clicked:update', function() { getAttrs(['mainguachedefence','mainguacheactive','berserktoranged','finalattack','finaldefence','basemeleedefence','basemeleeattack','baserangedattack','baserangeddefence','mdefencemodded','rattackmodded','rdefencemodded','mattackmodded','berserkneg','berserkpos','preciseneg','precisepos','stillnessneg','bloodrageselect','nonprofselect','deathvowselect','miscattackmelee','miscdefencemelee','miscattackranged','miscdefenceranged'], function(v) { let bloodrage = parseInt(v.bloodrageselect) || 0; let berserkappliestoranged = parseInt(v.berserktoranged)||0; @@ -2260,7 +1812,7 @@ }); }); - on('change:miscabrmelee change:miscdamagemelee change:miscabrranged change:miscdamageranged change:meleeabrbonus change:magicmeleeweaponbonus change:weaponskillabrmodifier change:armourpiercingmodifier change:weaponskillabrmodifier change:guardabrmodifier change:guarddamagemodifier change:meleedmgbonus change:magicammobonus change:magicrangedweaponbonus change:specialammoabrmodifier change:specialammodmgmodifier change:penetratingshotabrmodifier change:armourpiercingmodifier change:masterbowmanmodifier change:bloodragedmgmod', function() { + on('clicked:update', function() { getAttrs(['miscabrmelee','miscdamagemelee','miscabrranged','miscdamageranged','meleeabrbonus','magicmeleeweaponbonus','weaponskillabrmodifier','armourpiercingmodifier','weaponskillabrmodifier','guardabrmodifier','guarddamagemodifier','meleedmgbonus','magicammobonus','magicrangedweaponbonus','specialammoabrmodifier','specialammodmgmodifier','penetratingshotabrmodifier','armourpiercingmodifier','masterbowmanmodifier','bloodragedmgmod'], function(v) { let meleeabrbonus = parseInt(v.meleeabrbonus)||0; let magicmeleeweaponbonus = parseInt(v.magicmeleeweaponbonus)||0; @@ -2295,7 +1847,7 @@ }); }); - on('change:finalstrength', function() { + on('clicked:update', function() { getAttrs(['finalstrength','meleedmgbonus','meleeabrbonus'], function(value) { let str = parseInt(value.finalstrength)||0; @@ -2378,7 +1930,7 @@ }); }); - on('change:magicalattack change:magicaldefence change:miscmagicattack change:miscmagicdefence change:stillnesspos change:evasionmodded change:evasion change:miscevasion change:stealth change:perception change:miscstealth change:miscperception change:af change:magicafbonus change:miscaf change:strength change:reflexes change:intelligence change:psychictalent change:looks change:miscstrength change:miscreflexes change:miscintelligence change:miscpsychictalent change:misclooks sheet:opened', function(event) { + on('clicked:update', function(event) { getAttrs(['magicalattack','magicaldefence','miscmagicattack','miscmagicdefence','finalevasion','finalstealth','finalperception','stillnesspos','evasionmodded','evasion','miscevasion','stealth','perception','miscstealth','miscperception','finalstrength','finalreflexes','finalintelligence','finalpsychictalent','finallooks','totalaf','af','magicafbonus','miscaf','strength','reflexes','intelligence','psychictalent','looks','miscstrength','miscreflexes','miscintelligence','miscpsychictalent','misclooks'], function(v) { let af = parseInt(v.af); let magicaf = parseInt(v.magicafbonus); @@ -2434,30 +1986,41 @@ }); const woundValues = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50"]; - woundValues.forEach(function(value) { - on(`clicked:wound_${value}`, function() { - setAttrs({ - wtwound: 0, - wound: value + woundValues.forEach(function(value) { + on(`clicked:wound_${value}`, function() { + getAttrs(["wtwound","wound","maxhp"], function(v) { + let wnd = parseInt(value); + let wtwnd = 0; + let chp = parseInt(v.maxhp) - wnd - wtwnd; + setAttrs({ + wtwound: wtwnd, + wound: wnd, + currenthp: chp, + currenthp_max: parseInt(v.maxhp) + }); }); - }); - }); + }); + }); const wtwoundValues = ["0","1","2","3"]; wtwoundValues.forEach(function(value) { on(`clicked:wtwound_${value}`, function() { - getAttrs(["maxhp","wound"], function(v) { - let w1= parseInt(v.wound); - let m1= parseInt(v.maxhp); - if (w1 < m1) - wou = m1, - wtw = value; - else - wtw = value; + getAttrs(["wtwound","maxhp","wound"], function(v) { + let w1= parseInt(v.wound); + let m1= parseInt(v.maxhp); + if (w1 < m1) { + wou = m1, + wtw = value; } + else { + wtw = value, + wou = w1; } + let chp = parseInt(v.maxhp) - wou - wtw; setAttrs({ wtwound: wtw, - wound: wou - }); + wound: wou, + currenthp: chp, + currenthp_max: parseInt(v.maxhp) + }); }); }); }); @@ -2465,53 +2028,87 @@ const manausedValues = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50"]; manausedValues.forEach(function(value) { on(`clicked:manaused_${value}`, function() { + getAttrs(['maxmp'], function(v) { + let muse = parseInt(value); + let mcmp = parseInt(v.maxmp); + let cmp = (mcmp - muse); setAttrs({ - manaused: value - }); + currentmp: cmp, + currentmp_max: mcmp, + manaused: value }); }); + }); + }); const secmanausedValues = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50"]; secmanausedValues.forEach(function(value) { on(`clicked:secmanaused_${value}`, function() { + getAttrs(['twomaxmp'], function(v) { + let secmu = parseInt(value); + let twomcmp = parseInt(v.twomaxmp); + let twocmp = (twomcmp - secmu); setAttrs({ - secmanaused: value - }); + currentmpelementtwo: twocmp, + currentmpelementtwo_max: twomcmp, + secmanaused: value }); }); + }); + }); const termanausedValues = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49","50"]; termanausedValues.forEach(function(value) { on(`clicked:termanaused_${value}`, function() { + getAttrs(['threemaxmp'], function(v) { + let termu = parseInt(value); + let threemcmp = parseInt(v.threemaxmp); + let threecmp = (threemcmp - termu); + setAttrs({ - termanaused: value - }); + currentmpelementthree: threecmp, + currentmpelementthree_max: threemcmp, + termanaused: value }); }); + }); + }); on("clicked:wound_reset", function() { + getAttrs(["maxhp"], function(v) { setAttrs({ wound: 0, - wtwound: 0 + wtwound: 0, + currenthp: parseInt(v.maxhp) }); }); + }); on("clicked:mp_reset", function() { + getAttrs(["maxmp"], function(v) { setAttrs({ - manaused: 0 + manaused: 0, + currentmp: parseInt(v.maxmp) }); }); + }); on("clicked:secmp_reset", function() { - setAttrs({ - secmanaused: 0 - }); + getAttrs(["twomaxmp"], function(v) { + setAttrs({ + secmanaused: 0, + currentmpelementtwo: parseInt(v.twomaxmp) + }); + }); }); on("clicked:termp_reset", function() { - setAttrs({ - termanaused: 0 - }); + getAttrs(["threemaxmp"], function(v) { + setAttrs({ + termanaused: 0, + currentmpelementthree: parseInt(v.threemaxmp) + }); + }); }); on('change:rank sheet:opened', function() { @@ -2540,4 +2137,4 @@ repeatingSum("totalencumbrance", "inventoryitems", ["inventoryqty", "encumbrancevalue"], "gc:1/150", "sf:1/150", "cp:1/150", "ammoweight:1/12", "totalmeleeweaponweight", "totalrangedweaponweight", "shield", "round"); }); - \ No newline at end of file + \ No newline at end of file diff --git a/Dragon Warriors/Hand.png b/Dragon Warriors/Hand.png new file mode 100644 index 0000000000..6f4b184632 Binary files /dev/null and b/Dragon Warriors/Hand.png differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.18.40 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.18.40 am.png deleted file mode 100644 index e7f18500e8..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.18.40 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.18.54 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.18.54 am.png deleted file mode 100644 index d7046ffebb..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.18.54 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.05 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.05 am.png deleted file mode 100644 index 9b7b2d7b76..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.05 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.13 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.13 am.png deleted file mode 100644 index 66c8a7673e..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.13 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.22 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.22 am.png deleted file mode 100644 index 757143431e..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.22 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.28 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.28 am.png deleted file mode 100644 index d82fdeb4ef..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.28 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.37 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.37 am.png deleted file mode 100644 index bd3668cc8c..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.37 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.56 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.56 am.png deleted file mode 100644 index e4712825f6..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.19.56 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.36 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.36 am.png deleted file mode 100644 index 336380a4c7..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.36 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.43 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.43 am.png deleted file mode 100644 index 9dbf48e92e..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.43 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.49 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.49 am.png deleted file mode 100644 index a3f16eebb1..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.49 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.57 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.57 am.png deleted file mode 100644 index 17a8ab18f2..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.20.57 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.05 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.05 am.png deleted file mode 100644 index 382d642408..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.05 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.12 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.12 am.png deleted file mode 100644 index cba4c946b8..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.12 am.png and /dev/null differ diff --git a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.29 am.png b/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.29 am.png deleted file mode 100644 index 8ca8f7847e..0000000000 Binary files a/Dragon Warriors/untitled folder/Screen Shot 2020-09-30 at 10.21.29 am.png and /dev/null differ