diff --git a/Shadowrun Sixth World/CHANGELOG.md b/Shadowrun Sixth World/CHANGELOG.md index 2b03d127d0..7425e012d8 100644 --- a/Shadowrun Sixth World/CHANGELOG.md +++ b/Shadowrun Sixth World/CHANGELOG.md @@ -1,11 +1,32 @@ Change Log ============================================== +**2021-03-22** v.24 Chuz (James Culp) + Beginning v.24 + Rearranged player/character names, toggles and navigation buttons in header - still tweaking layout + Fix to patreon and roll20userid fields in sheet.json, maybe I'll be listed as a sheet author now. + Finished adding Wild Die option to all dice rollers (I think) on PC sheet. + Matrix Tab layout more or less complete and ready for script magic + Settled on layout changes + Completed Sheetworker to tie ASDF device buttons together (only one selected at a time) + Completed Sheetworker to tie device primary checkboxes together (only one selected at a time) + Completed Sheetworker to update Matrix Attack Rating and Matrix Defense Rating when A/S/D/F are updated + Completed Sheetworker to update A/S/D/F to W/I/L/C when emergent checkbox is selected in options (making the character a technomancer) + Matrix Device Essence Cost is now included in Essence automatic calculations + Matrix Device Initiative Bonus is now included in Initiative automatic calculations + Made Technomancer attributes and Complex Forms sections hide for non-technomancers + Made device A/S/D/F assignment buttons and matrix condition monitor hide for technomancers + Removed empty buttons in skills when no specialization or expertise was set. + Linked primary device condition monitor to the condition monitor hexes in the Persona section + Fixed a bug related to sheet_type being misread and making some automatic calculations not fire right (initiative bugs anyone?) + Started in on Complex Forms + Updated Matrix -> Complex Forms section + **2021-03-15** v.23 Chuz (James Culp) - Made sheet work with current roll20 "enhanced" code that has been partially rolled back - Changed Condition Monitors -> Settings -> Pain Tolerance to a select so it's obvious whether pc is selecting Low, High or none - Added functionality to the ammo counter, now when primary ranged weapon firing mode is changed the number of rounds updates the the correct amount (1, 2, 4, 10) - Added Mod field for skills to allow skill rolls to have bonuses added. Does not add to the actual skill dicepool just affects the skill roller. - Fixed Initiatives (Meat, Astral, Matrix x3) to now apply mods, dice mods and Config->Temp mods correctly. + Made sheet work with current roll20 "enhanced" code that has been partially rolled back Changed + Condition Monitors -> Settings -> Pain Tolerance to a select so it's obvious whether pc is selecting Low, High or none + Added functionality to the ammo counter, now when primary ranged weapon firing mode is changed the number of rounds updates the the correct amount (1, 2, 4, 10) + Added Mod field for skills to allow skill rolls to have bonuses added. Does not add to the actual skill dicepool just affects the skill roller. + Fixed Initiatives (Meat, Astral, Matrix x3) to now apply mods, dice mods and Config->Temp mods correctly. Added Magic AR that auto calculates when logic/charisma, tradition or magic change to the Magic -> Meta box **2021-03-08** v.22 Chuz (James Culp) diff --git a/Shadowrun Sixth World/README.md b/Shadowrun Sixth World/README.md index 2fd36dc859..45f00c0025 100644 --- a/Shadowrun Sixth World/README.md +++ b/Shadowrun Sixth World/README.md @@ -13,8 +13,11 @@ Roll20 Forum Post: https://app.roll20.net/forum/post/9862344/shadowrun-sixth-wor TO DO = **`PC Sheet`** - - * Entire Matrix tab * Add Armor Social Ratings from Firing Squad pg50 + * Social / Vehicle repeating delete icon is on the left + * Ammo only has one input, there should be an input for per reload and max + * Arms -> Roll Buttons don't include "Notes" text, Dicepool attribute doesn't include bonus for spec/expert/attribute + * Arms -> Ranged Might need to add a "Gunnery" skill option and when selected change attribute to Logic **`Grunt Sheet`** * everything @@ -35,6 +38,13 @@ TO DO * Add Autosofts to Vehicles tab * Make Magic updated if Essence drops below it * Armor Social Ratings (Firing Squad p50) - + * Add Capacity to Armor? + * When selecting a skill, have the correct default attribute auto-selected + * Skills (Expertise and Specialization Buttons) colorize them ... maybe 2 light shades of purple one lighter than the other + * Sheetworker to uncheck speciallization if expertise is checked and vice versa for everywhere those occur (spells, arms) + * Have changes to primary ranged weapon firing mode update AR values and DV + * Add spot for augs/bioware grades (Standard/Beta/Delta/etc) + * Matrix -> Programs (checkboxes to indicate currently loaded) + * GOD character sheet (track OS score for multiple characters, npcs) diff --git a/Shadowrun Sixth World/Shadowrun6thEdition.css b/Shadowrun Sixth World/Shadowrun6thEdition.css index a07b2c2b73..5373644718 100644 --- a/Shadowrun Sixth World/Shadowrun6thEdition.css +++ b/Shadowrun Sixth World/Shadowrun6thEdition.css @@ -22,12 +22,13 @@ GLOBALS border-radius: 0.25em !important; border-right: 0.02em solid #333333 !important; border-style: outset !important; } - .charsheet button[name='roll_range_weapon'], button[name='roll_soak'], button[name='roll_defense'], button[name='roll_melee_weapon'], button[name='roll_spell'], button[name='roll_preparation'], button[name='roll_drain'], button[name='roll_ritual'], button[name='roll_conjuring'], button[name='roll_matrix_device_rating'], button[name='roll_matrix_attack'], button[name='roll_matrix_sleaze'], button[name='roll_matrix_data_processing'], button[name='roll_matrix_firewall'], button[name='roll_fade'] { - color: #ee99ff !important; } + .charsheet button[name='roll_range_weapon'], button[name='roll_soak'], button[name='roll_defense'], button[name='roll_melee_weapon'], button[name='roll_spell'], button[name='roll_preparation'], button[name='roll_drain'], button[name='roll_ritual'], button[name='roll_conjuring'], button[name='roll_matrix_attack_rating'], button[name='roll_matrix_defense_rating'], button[name='roll_matrix_device_rating'], button[name='roll_matrix_attack'], button[name='roll_matrix_sleaze'], button[name='roll_matrix_data_processing'], button[name='roll_matrix_firewall'], button[name='roll_fade'] { +/* color: #ee99ff !important; */ + color: #460141; } .charsheet button[specname=''] { display: none !important; } .charsheet button:before { - display: none !important; } + display: none; } .charsheet button:hover, button:focus, button:active { font-weight: bold !important; } .charsheet button > span { @@ -58,14 +59,14 @@ img.shadowrun-logo { width: auto !important; } .charsheet input { - background-color: #9a9a9a !important; - color: #040404 !important; - border: none !important; - cursor: auto !important; - font-weight: normal !important; - margin: 0px !important; - text-align: center !important; - vertical-align: middle !important; } + background-color: #9a9a9a; + color: #040404; + border: none; + cursor: auto; + font-weight: normal; + margin: 0px; + text-align: center; + vertical-align: middle; } .charsheet input[type='text'], input[type='number'] { border: 1px dotted #555 !important; height: 20px !important; } @@ -118,7 +119,7 @@ input[name='attr_stats_toggle'] { z-index: 2 !important; } /* SWITCHES - ============================= */ + ============================= */ /* The switch - the box around the slider */ .switch { position: relative !important; @@ -169,7 +170,7 @@ input:checked + .slider:before { transform: translateX(26px) !important; } /* MIXIN - ============================= */ + ============================= */ /***** TABS FOR SHEETS *****/ .tabs button[type='action'] { background-color: #333 !important; @@ -192,7 +193,7 @@ input:checked + .slider:before { color: #fff !important; font-family: 'dicefontd6' !important; font-size: 2.5em !important; - vertical-align: top !important; } + vertical-align: middle; } .tabs button[type='roll']:hover { text-shadow: 1px 1px 2px black, 0 0 25px #460141, 0 0 5px #460141 !important; } .tabs h2 { @@ -244,7 +245,7 @@ input.toggle { display: inline-grid !important; margin-bottom: 2% !important; } -.pc div.repeating-container div.repitem, .pc div.repeating-container div.repitem input[type='text'], .pc div.repeating-container div.repitem input[type='number'], .pc div.skill-box label > input, .pc div.skill-box input[name='attr_skill'], .pc div.matrix div.programs div.repitem { +.pc div.repeating-container div.repitem, .pc div.repeating-container div.repitem input[type='text'], .pc div.repeating-container div.repitem input[type='number'], .pc div.skill-box label > input, .pc div.skill-box input[name='attr_skill'], .pc div.matrix div.programs div.repitem, .pc div.matrix div.devices div.repitem { border-bottom: 1px solid #333 !important; } .center { @@ -282,7 +283,7 @@ div.matrix-device .matrixFirewall { box-shadow: 0px 0px 29px 8px #f88703 !important; } /***** GRID *****/ -.pc div.repeating-container div.repitem, .pc div.repeating-container div.repitem div.settings, .pc div.core div.quality-box div.quality div.headers, .pc div.core div.quality-box div.martial div.headers, .pc div.skill-box div.row-long, .pc div.arms div.headers, .pc div.magic div.headers, .pc div.matrix div.complex-forms div.headers { +.pc div.repeating-container div.repitem, .pc div.repeating-container div.repitem div.settings, .pc div.core div.quality-box div.quality div.headers, .pc div.core div.quality-box div.martial div.headers, .pc div.skill-box div.row-long, .pc div.arms div.headers, .pc div.magic div.headers, .pc div.matrix div.complex-forms div.headers, .pc div.matrix div.devices div.headers { grid-column-gap: 1% !important; grid-row-gap: 1% !important; } @@ -330,62 +331,130 @@ div.matrix-device .matrixFirewall { .pc input { border-radius: 0px !important; } /***** PLAYER DATA INPUTS *****/ - .pc .tabs { - grid-template-columns: 1fr 5em 1fr 5em 2.5em 5em 5em 5em 5em 5em 5em 5em !important; - grid-column-gap: 0.25% !important; - padding: 0px 1% 3% 1% !important; - margin-top: 1% !important; - grid-row-gap: 10% !important; } - .pc .tabs button[type='roll'] { - grid-area: 2 / 5 / 2 / 5 !important; } - .pc .tabs h1 { - background-color: transparent !important; - color: #fff !important; - display: inline-block !important; - font-size: 1em !important; - grid-column: 6 / 8 !important; - letter-spacing: 2px !important; - line-height: 20px !important; - margin-left: 5% !important; - text-align: right !important; - text-transform: uppercase !important; } - .pc .tabs h2[data-i18n-title='/w GM'] { - grid-area: 2 / 1 / 2 / 1 !important; } - .pc .tabs h2[data-i18n-title='wounds'] { - grid-area: 2 / 3 / 2 / 4 !important; } - .pc .tabs h2[data-i18n-title='modifiers'] { - grid-area: 3 / 1 / 3 / 1 !important; } - .pc .tabs h2[data-i18n-title='edge'] { - grid-area: 3 / 3 / 3 / 4 !important; } - .pc .tabs img { - grid-area: 1 / 1 / 2 / 6 !important; - height: 100% !important; - width: 100% !important; } - .pc .tabs h1[data-i18n='player'], .pc .tabs h1[data-i18n='character'] { - color: #000 !important; } - .pc .tabs label[data-i18n-title='character name'] > input[type='text'], .pc .tabs label[data-i18n-title='player name'] > input[type='text'] { - color: #000 !important; - font-weight: bolder !important; - background-color: #e7e6e5 !important; - border: none !important; - box-shadow: none !important; - border-bottom: 2px solid #fff !important; - border-radius: 0px !important; - height: 30px !important; - width: 100% !important; - grid-column: 4 !important; } - .pc .tabs label[data-i18n-title='character name'] { - grid-area: 1 / 8 / 1 / 14 !important; } - .pc .tabs label[data-i18n-title='player name'] { - grid-area: 2 / 8 / 2 / 14 !important; } - .pc .tabs label[data-i18n-title='whisper rolls to gm'] { - grid-area: 2 / 2 / 2 / 3 !important; } - .pc .tabs label[data-i18n-title='wounds'] { - grid-area: 2 / 4 / 2 / 5 !important; } - .pc .tabs label[data-i18n-title='modifiers'] { - grid-area: 3 / 2 / 3 / 3 !important; } - .pc .tabs label[data-i18n-title='edge'] { - grid-area: 3 / 4 / 3 / 5 !important; } +#SR6WE .pc .tabs { + grid-column-gap: 0.25% !important; + padding: 0px 1% 3% 1% !important; + margin-top: 1% !important; + grid-row-gap: 10% !important; } + +#SR6WE .pc div.tabs { + width: 100% !important; } + +#SR6WE .pc .tabs h1 { + background-color: transparent !important; + color: #000 !important; + display: inline-block !important; + font-size: 1em !important; + letter-spacing: 2px !important; + line-height: 20px !important; + margin-left: 5% !important; + text-align: right !important; + text-transform: uppercase !important; } + + +#SR6WE .pc .tabs .header-names { + display: grid !important; + grid-template-columns: 10em 1fr 10em 1fr !important; + width: 100% !important; + height: 30px !important; + align-items: center !important; } + +#SR6WE .pc .tabs h1[data-i18n='character'] { + margin-left: 0px !important; + text-align: left !important; + padding-left: 10px !important; } + } + +#SR6WE .pc .tabs h1[data-i18n='player'] { + margin-left: 0px !important; + text-align: right !important; + padding-right: 10px !important; } + +#SR6WE .pc .tabs label[data-i18n-title='character name'] > input[type='text'], #SR6WE .pc .tabs label[data-i18n-title='player name'] > input[type='text'] { + font-weight: bolder !important; + background-color: #e7e6e5 !important; + border: none !important; + box-shadow: none !important; + border-bottom: 2px solid #fff !important; + border-radius: 0px !important; + height: 30px !important; + width: 100% !important; } + +#SR6WE .pc .tabs label[data-i18n-title='character name'], #SR6WE .pc .tabs label[data-i18n-title='player name'] { +} + +#SR6WE .pc .tabs .header-toggles { + display: grid !important; + grid-template-columns: auto auto auto auto auto auto auto auto auto auto auto auto !important; + width: 100% !important; + height: 30px !important; } + + +#SR6WE .pc .tabs h2[data-i18n-title='whispergm'] { + width: 75px !important; + vertical-align: middle; + margin-right: 0px !important; } +#SR6WE .pc .tabs label[data-i18n-title='whispergm'] { + width: 50px !important; + vertical-align: middle; + margin-right: 0px !important; } + +#SR6WE .pc .tabs h2[data-i18n-title='wounds'] { + width: 75px !important; + vertical-align: middle; + margin-right: 0px !important; } +#SR6WE .pc .tabs label[data-i18n-title='wounds'] { + width: 50px !important; + vertical-align: middle; + margin-right: 0px !important; } + +#SR6WE .pc .tabs h2[data-i18n-title='dicepoolmodifiers'] { + width: 75px !important; + vertical-align: middle; + margin-right: 0px !important; } +#SR6WE .pc .tabs label[data-i18n-title='dicepoolmodifiers'] { + width: 50px !important; + vertical-align: middle; + margin-right: 0px !important; } + + +#SR6WE .pc .tabs h2[data-i18n-title='addedgetodicepool'] { + width: 75px !important; + vertical-align: middle; + margin-right: 0px !important; } +#SR6WE .pc .tabs label[data-i18n-title='addedgetodicepool'] { + width: 50px !important; + vertical-align: middle; + margin-right: 0px !important; } + +#SR6WE .pc .tabs h2[data-i18n-title='wilddie'] { + width: 75px !important; + vertical-align: middle; + margin-right: 0px !important; } +#SR6WE .pc .tabs label[data-i18n-title='wilddie'] { + width: 50px !important; + vertical-align: middle; + margin-right: 0px !important; } + + +#SR6WE .pc .tabs .header-navtabs { + display: grid !important; + grid-template-columns: 1fr 2.5em 2.5em repeat(8, 5em) !important; + vertical-align: middle; + width: 100% !important; + right: 0px !important; } + +#SR6WE .pc .tabs .header-navtabs button { + width: 5em !important; + position: relative !important; + right: 0px !important; } + +#SR6WE .pc .tabs .header-navtabs button[name='act_tab_options'], #SR6WE .pc .tabs .header-navtabs button[name='d6'] { + width: 32.5px !important; + position: relative !important; + right: 0px !important; } + + .pc input.settings-toggle + span, .pc input.settings-flag + span, .pc input.collapse-flag + span, @@ -434,7 +503,7 @@ div.matrix-device .matrixFirewall { .pc div.repeating-container div.repitem input:nth-of-type(1n+2) { text-align: center !important; } .pc div.repeating-container div.repitem input[type='text'], .pc div.repeating-container div.repitem input[type='number'] { - width: 100% !important; } + width: 100%; } .pc div.repeating-container div.repitem label { padding-right: 0px !important; } .pc div.repeating-container div.repitem label input[name='attr_name'], @@ -567,52 +636,52 @@ div.matrix-device .matrixFirewall { /***** SKILLS *****/ .pc div.skill-box h2:nth-of-type(1n+2) { - text-align: center !important; } + text-align: center; } .pc div.skill-box label { - display: inline-block !important; - font-size: 0.8em !important; - text-transform: capitalize !important; } + display: inline-block; + font-size: 0.8em; + text-transform: capitalize; } .pc div.skill-box label[data-i18n-title='ratingmodifier'] { - grid-area: 1 / 3 / 1 / 4 !important; - width: 100% !important; } + grid-area: 1 / 3 / 1 / 4; + width: 100%; } .pc div.skill-box label[data-i18n-title='ratingmodifier'] input[type='number'] { - width: 3em !important; } + width: 3em; } .pc div.skill-box label[data-i18n-title='specialization'] { - padding-left: 10px !important; - grid-area: 3 / 1 / 3 / 6 !important; } + padding-left: 10px; + grid-area: 3 / 1 / 3 / 6; } .pc div.skill-box label[data-i18n-title='expertise'] { - padding-left: 20px !important; - grid-area: 4 / 1 / 4 / 6 !important; } + padding-left: 20px; + grid-area: 4 / 1 / 4 / 6; } .pc div.skill-box label[data-i18n-title='notes'], .pc div.skill-box label textarea { - grid-area: 5 / 1 / 5 / 6 !important; } + grid-area: 5 / 1 / 5 / 6; } .pc div.skill-box label > input { - text-align: left !important; - border-radius: 0px !important; - width: 100% !important; } + text-align: left; + border-radius: 0px; + width: 100%; } .pc div.skill-box input[name='attr_rating_modifier'], .pc div.skill-box input[name='attr_unskilled_mod'] { - width: 3em !important; } + width: 3em; } .pc div.skill-box div.row-long { - grid-template-columns: 1fr 3em 3em 5em 1em 1em !important; - padding: 1% 0.5% !important; - width: 100% !important; } + grid-template-columns: 1fr 3em 3em 5em 1em 1em; + padding: 1% 0.5%; + width: 100%; } .pc div.skill-box div.row-long h3:nth-of-type(1n+2) { - text-align: center !important; } + text-align: center; } /*** Skills ***/ .pc div.skill-box div.skills-active div.repitem { - grid-template-columns: 1fr 3em 3em 5em 1em 1em !important; } + grid-template-columns: 1fr 3em 3em 5em 1em 1em; } .pc div.skill-box div.skills-active div.repitem label[data-i18n-title='notes'], .pc div.skill-box div.skills-active div.repitem h3[data-i18n='notes'], .pc div.skill-box div.skills-active div.repitem div.collapse { - grid-column: 1 / 7 !important; } + grid-column: 1 / 7; } .pc div.skill-box div.skills-active div.repitem input.collapse-flag { - grid-area: 1 / 5 / 1 / 6 !important; } + grid-area: 1 / 5 / 1 / 6; } .pc div.skill-box div.skills-active div.repitem input.collapse-flag + span.pictos, .pc div.skill-box div.skills-active div.repitem .settings-toggle input[type='checkbox'].collapse-flag + span, .settings-toggle .pc div.skill-box div.skills-active div.repitem input[type='checkbox'].collapse-flag + span, .pc div.skill-box div.skills-active div.repitem .settings-flag input[type='checkbox'].collapse-flag + span, .settings-flag .pc div.skill-box div.skills-active div.repitem input[type='checkbox'].collapse-flag + span, .pc div.skill-box div.skills-active div.repitem .flag-primary + div > input.collapse-flag + span, .pc div.skill-box div.skills-active div.repitem .repcontrol input.collapse-flag + span.repcontrol_edit:after, .repcontrol .pc div.skill-box div.skills-active div.repitem input.collapse-flag + span.repcontrol_edit:after, .pc div.skill-box div.skills-active div.repitem .repcontrol input.collapse-flag + span.repcontrol_add:after, .repcontrol .pc div.skill-box div.skills-active div.repitem input.collapse-flag + span.repcontrol_add:after, .pc div.skill-box div.skills-active div.repitem .itemcontrol input.collapse-flag + span.repcontrol_del, .itemcontrol .pc div.skill-box div.skills-active div.repitem input.collapse-flag + span.repcontrol_del { - grid-area: 1 / 5 / 1 / 6 !important; } + grid-area: 1 / 5 / 1 / 6; } .pc div.skill-box div.skills-active div.repitem input.settings-flag, .pc div.skill-box div.skills-active div.repitem input.settings-flag + span.pictos, .pc div.skill-box div.skills-active div.repitem .settings-toggle input[type='checkbox'].settings-flag + span, @@ -626,34 +695,44 @@ div.matrix-device .matrixFirewall { .repcontrol .pc div.skill-box div.skills-active div.repitem input.settings-flag + span.repcontrol_add:after, .pc div.skill-box div.skills-active div.repitem .itemcontrol input.settings-flag + span.repcontrol_del, .itemcontrol .pc div.skill-box div.skills-active div.repitem input.settings-flag + span.repcontrol_del { - grid-area: 1 / 6 / 1 / 7 !important; } + grid-area: 1 / 6 / 1 / 7; } .pc div.skill-box div.skills-active div.repitem input[name='attr_damage'], .pc div.skill-box div.skills-active div.repitem input[name='attr_dicepool_modifier'] { - width: 3em !important; } + width: 3em; } .pc div.skill-box div.skills-active div.repitem div.settings { - grid-column: 1 / 7 !important; - grid-template-columns: 1fr 3em 3em 5em 1em 1em !important; } + grid-column: 1 / 7; + grid-template-columns: 1fr 3em 3em 5em 1em 1em; } + /* hide the button hider */ + #SR6WE .pc div.skill-box div.skills-active div.repitem div.buttons span.skill-button-hider { + display: none; } + /* hide the button after the button hider if the hider has no content (empty attribute) */ + #SR6WE .pc div.skill-box div.skills-active div.repitem div.buttons span.skill-button-hider:empty + button[name='roll_skill'] { + display: none; } + #SR6WE .pc div.skill-box div.skills-active div.repitem div.buttons button.skill_spec { + } + #SR6WE .pc div.skill-box div.skills-active div.repitem div.buttons button.skill_expert { + } /*** Knowledges ***/ .pc div.skill-box div.skills-knowledge div.headers { - display: grid !important; - grid-template-columns: 1fr 6em 1em 1em !important; } + display: grid; + grid-template-columns: 1fr 6em 1em 1em; } .pc div.skill-box div.skills-knowledge div.repitem { - grid-template-columns: 1fr 6em 1em 1em !important; } + grid-template-columns: 1fr 6em 1em 1em; } .pc div.skill-box div.skills-knowledge div.repitem label[data-i18n-title='notes'], .pc div.skill-box div.skills-knowledge div.repitem h3[data-i18n='notes'], .pc div.skill-box div.skills-knowledge div.repitem div.collapse { - grid-column: 1 / 5 !important; } + grid-column: 1 / 5; } .pc div.skill-box div.skills-knowledge div.repitem input.collapse-flag { - grid-area: 1 / 3 / 1 / 3 !important; } + grid-area: 1 / 3 / 1 / 3; } .pc div.skill-box div.skills-knowledge div.repitem input.collapse-flag + span.pictos, .pc div.skill-box div.skills-knowledge div.repitem .settings-toggle input[type='checkbox'].collapse-flag + span, .settings-toggle .pc div.skill-box div.skills-knowledge div.repitem input[type='checkbox'].collapse-flag + span, .pc div.skill-box div.skills-knowledge div.repitem .settings-flag input[type='checkbox'].collapse-flag + span, .settings-flag .pc div.skill-box div.skills-knowledge div.repitem input[type='checkbox'].collapse-flag + span, .pc div.skill-box div.skills-knowledge div.repitem .flag-primary + div > input.collapse-flag + span, .pc div.skill-box div.skills-knowledge div.repitem .repcontrol input.collapse-flag + span.repcontrol_edit:after, .repcontrol .pc div.skill-box div.skills-knowledge div.repitem input.collapse-flag + span.repcontrol_edit:after, .pc div.skill-box div.skills-knowledge div.repitem .repcontrol input.collapse-flag + span.repcontrol_add:after, .repcontrol .pc div.skill-box div.skills-knowledge div.repitem input.collapse-flag + span.repcontrol_add:after, .pc div.skill-box div.skills-knowledge div.repitem .itemcontrol input.collapse-flag + span.repcontrol_del, .itemcontrol .pc div.skill-box div.skills-knowledge div.repitem input.collapse-flag + span.repcontrol_del { - grid-area: 1 / 3 / 1 / 3 !important; } + grid-area: 1 / 3 / 1 / 3; } .pc div.skill-box div.skills-knowledge div.repitem input.settings-flag, .pc div.skill-box div.skills-knowledge div.repitem input.settings-flag + span.pictos, .pc div.skill-box div.skills-knowledge div.repitem .settings-toggle input[type='checkbox'].settings-flag + span, @@ -667,10 +746,10 @@ div.matrix-device .matrixFirewall { .repcontrol .pc div.skill-box div.skills-knowledge div.repitem input.settings-flag + span.repcontrol_add:after, .pc div.skill-box div.skills-knowledge div.repitem .itemcontrol input.settings-flag + span.repcontrol_del, .itemcontrol .pc div.skill-box div.skills-knowledge div.repitem input.settings-flag + span.repcontrol_del { - grid-area: 1 / 4 / 1 / 4 !important; } + grid-area: 1 / 4 / 1 / 4; } .pc div.skill-box div.skills-knowledge div.repitem div.settings { - grid-column: 1 / 5 !important; - grid-template-columns: 1fr 6em 1em 1em !important; } + grid-column: 1 / 5; + grid-template-columns: 1fr 6em 1em 1em; } @@ -1189,8 +1268,233 @@ div.matrix-device .matrixFirewall { /*** MATRIX ****/ - .pc div.matrix h3 { + #SR6WE .pc div.matrix h3 { color: #040404 !important; } + + #SR6WE .pc div.matrix div.cyberdeck div.row-matrix-combat-stats { + margin: 0px 5px 5px 5px; + display: grid; + grid-template-columns: .5fr 1fr .5fr 1fr .5fr 1fr .5fr; } + + #SR6WE .pc div.matrix div.cyberdeck div.row-matrix-combat-stats label { + margin-top: 5px; + margin-bottom: 5px !important; } + #SR6WE .pc div.matrix div.cyberdeck div.row-matrix-combat-stats button, #SR6WE .pc div.matrix div.cyberdeck div.row-matrix-combat-stats button span { + padding-right: 3px; + display: inline !important; } + + #SR6WE .pc div.matrix div.cyberdeck div.technomancer-attributes { + padding: 0px 5px 5px 0px; + display: grid; + grid-template-columns: 1fr auto auto auto auto auto 1fr; } + #SR6WE .pc div.matrix div.cyberdeck div.technomancer-attributes input[type='number'] { + margin: 0px 3px 0px 3px; } + + +/*** Matrix Devices ***/ + /* headers */ + #SR6WE .pc div.matrix div.devices div.headers { + display: grid !important; + grid-template-columns: 1fr 4em 4em 1em 1em !important; } + + #SR6WE .pc div.matrix div.devices div.headers h2[data-i18n='device'] { + text-align: left; } + #SR6WE .pc div.matrix div.devices div.headers h2[data-i18n='rtg'] { + text-align: center; } + #SR6WE .pc div.matrix div.devices div.headers h2[data-i18n='primary'] { + text-align: center; } + + /* item name/rtg/primary always displayed */ + #SR6WE .pc div.matrix div.devices div.repitem { + display: grid !important; + grid-template-columns: 1fr 4em 4em 1em 1em !important; } + + #SR6WE .pc div.matrix div.devices div.repitem span[name='attr_device'] { + text-align: left; } + #SR6WE .pc div.matrix div.devices div.repitem span[name='attr_device_rating'] { + text-align: center; } + #SR6WE .pc div.matrix div.devices div.repitem span[name='attr_primary_device'] { + text-align: center; } + + /* persona attribute buttons */ + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons { + grid-column: 1 / 6 !important; } + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 { + margin: 0px 0px 5px 0px; + display: grid; + grid-template-columns: 1fr repeat(4, 6em) 1fr; + grid-column-gap: 5.25px; + text-align: left; + align-items: center; + vertical-align: middle; } + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 span, + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 label { + text-align: center !important; } + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='number'] { + width: 2em !important; } + /* device attribute buttons */ + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 span { + position: relative; + display: inline !important; } + /* hide the checkbox and make it fill the space */ + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='checkbox'] { + position: absolute; + top: 0; + left: 0; + z-index: 0; + height: 100%; + width: 100%; + opacity: 0; } + /* shape the button and make it fill the space */ + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='checkbox'] + button { + position: relative; + top: 0; + left: 0; + z-index: 2; + height: 100%; + width: 100%; + pointer-events: none; + font-weight: bold; + box-shadow: #460141 0px 1px 5px 2px inset; + white-space: nowrap; + color: #460141; } + /* button when checkbox NOT checked */ + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='checkbox']:not(:checked) + button { + border: 1px solid black; + border-radius: 10px; } + /* button when checkbox NOT */ + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='checkbox']:checked + button { + color: white; + border: 1px solid black; + border-radius: 10px; } + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='checkbox']:checked + button[name='attack'] { + color: white; + box-shadow: rgb(58, 0, 0) 0px 1px 5px 2px inset; + background-color: rgb(204, 7, 1); } + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='checkbox']:checked + button[name='sleaze'] { + color: white; + box-shadow: rgb(0, 14, 59) 0px 1px 5px 2px inset; + background-color: rgb(0, 123, 252); } + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='checkbox']:checked + button[name='dataproc'] { + box-shadow: rgb(7, 66, 2) 0px 1px 5px 2px inset; + background-color: rgb(136, 221,4); } + #SR6WE .pc div.matrix div.devices div.persona-attribute-buttons div.row3 input[type='checkbox']:checked + button[name='firewall'] { + box-shadow: rgb(71, 1, 1) 0px 1px 5px 2px inset; + background-color: rgb(248, 135, 3); } + + + + /* hideable settings fields */ + #SR6WE .pc div.matrix div.devices div.settings { + grid-column: 1 / 6 !important; } + + #SR6WE .pc div.matrix div.devices div.settings div.rows { + width: 100%; } + + + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row1{ + margin: 0px 15px 5px 0px; + display: grid; + grid-template-columns: 246px 4em 4em 1em 1em; + text-align: center !important; } + + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row1 label:first-child input { + text-align: left; } + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row1 label:not(:first-child) { + text-align: center; } + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row1 input { + width: 2em; } + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row1 input[name='attr_device'] { + width: 246px; } + + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row2{ + margin: 0px 20px 5px 0px; + display: grid; + grid-template-columns: .5em auto auto 1fr auto 2em .5em; + grid-column-gap: 5px; } + + + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row3 { + margin: 0px 15px 5px 0px; + display: grid; + grid-template-columns: 1fr repeat(4, 7em) 1fr; + grid-column-gap: 5.25px; + text-align: left; + vertical-align: middle; } + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row3 span, + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row3 label { + text-align: left !important; } + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row3 input[type='number'] { + width: 2em !important; } + + + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row4 { + margin: 0px 15px 5px 0px; + display: grid; + grid-column-gap: 5px; + grid-template-columns: 1fr auto 3em 1fr auto 3em 1fr; + vertical-align: middle; } + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row4 span, + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row4 label { + text-align: center !important; + vertical-align: middle; } + + + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row5 { + margin: 0px 30px 5px 0px; } + + + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row-condition-monitor { + margin-right: 20px; + display: grid; + grid-template-columns: 1fr auto 3em 1fr auto 3em 1fr; } + #SR6WE .pc div.matrix div.devices div.settings div.rows div.row-condition-monitor input[type='number'] { + width: 2em !important; + margin-left: 5px; } + + + #SR6WE .pc div.matrix div.devices div.repitem label[data-i18n-title='notes'], + #SR6WE .pc div.matrix div.devices div.repitem h3[data-i18n='notes'], + #SR6WE .pc div.matrix div.devices div.repitem label[data-i18n-title='modifiers'], + #SR6WE .pc div.matrix div.devices div.repitem h3[data-i18n='modifiers'], + #SR6WE .pc div.matrix div.devices div.repitem div.collapse { + width: 100% !important; } + #SR6WE .pc div.matrix div.devices div.repitem input.collapse-flag { + grid-area: 1 / 4 / 1 / 5 !important; + position: absolute !important; + width: 100% !important; } + #SR6WE .pc div.matrix div.devices div.repitem input.collapse-flag + span.pictos, #SR6WE .pc div.matrix div.devices div.repitem .settings-toggle input[type='checkbox'].collapse-flag + span, #SR6WE .settings-toggle .pc div.matrix div.devices div.repitem input[type='checkbox'].collapse-flag + span, + #SR6WE .pc div.matrix div.devices div.repitem .settings-flag input[type='checkbox'].collapse-flag + span, + #SR6WE .settings-flag .pc div.matrix div.devices div.repitem input[type='checkbox'].collapse-flag + span, #SR6WE .pc div.matrix div.devices div.repitem .flag-primary + div > input.collapse-flag + span, #SR6WE .pc div.matrix div.devices div.repitem .repcontrol input.collapse-flag + span.repcontrol_edit:after, #SR6WE .repcontrol .pc div.matrix div.devices div.repitem input.collapse-flag + span.repcontrol_edit:after, + #SR6WE .pc div.matrix div.devices div.repitem .repcontrol input.collapse-flag + span.repcontrol_add:after, + #SR6WE .repcontrol .pc div.matrix div.devices div.repitem input.collapse-flag + span.repcontrol_add:after, #SR6WE .pc div.matrix div.devices div.repitem .itemcontrol input.collapse-flag + span.repcontrol_del, #SR6WE .itemcontrol .pc div.matrix div.devices div.repitem input.collapse-flag + span.repcontrol_del { + grid-area: 1 / 4 / 1 / 5 !important; } + #SR6WE .pc div.matrix div.devices div.repitem input.settings-flag, + #SR6WE .pc div.matrix div.devices div.repitem input.settings-flag + span.pictos, + #SR6WE .pc div.matrix div.devices div.repitem .settings-toggle input[type='checkbox'].settings-flag + span, + #SR6WE .settings-toggle .pc div.matrix div.devices div.repitem input[type='checkbox'].settings-flag + span, + #SR6WE .pc div.matrix div.devices div.repitem .settings-flag input[type='checkbox'].settings-flag + span, + #SR6WE .settings-flag .pc div.matrix div.devices div.repitem input[type='checkbox'].settings-flag + span, + #SR6WE .pc div.matrix div.devices div.repitem .flag-primary + div > input.settings-flag + span, + #SR6WE .pc div.matrix div.devices div.repitem .repcontrol input.settings-flag + span.repcontrol_edit:after, + #SR6WE .repcontrol .pc div.matrix div.devices div.repitem input.settings-flag + span.repcontrol_edit:after, + #SR6WE .pc div.matrix div.devices div.repitem .repcontrol input.settings-flag + span.repcontrol_add:after, + #SR6WE .repcontrol .pc div.matrix div.devices div.repitem input.settings-flag + span.repcontrol_add:after, + #SR6WE .pc div.matrix div.devices div.repitem .itemcontrol input.settings-flag + span.repcontrol_del, + #SR6WE .itemcontrol .pc div.matrix div.devices div.repitem input.settings-flag + span.repcontrol_del { + grid-area: 1 / 5 / 1 / 6 !important; } + + + #SR6WE .character-type[type='hidden'][name='attr_flag_special'][value='resonance'] ~ .pc .techno-hide { + display: none; } + + #SR6WE input.character-type[name='attr_flag_special'][value='magic'] ~ .pc .techno-see, + #SR6WE input.character-type[name='attr_flag_special'][value='mundane'] ~ .pc .techno-see { + display: none !important; } + + + + /* Matrix Programs */ .pc div.matrix div.programs div.repitem { grid-template-columns: 1fr 1em 1em !important; } .pc div.matrix div.programs div.repitem label[data-i18n-title='notes'], @@ -1198,7 +1502,7 @@ div.matrix-device .matrixFirewall { .pc div.matrix div.programs div.repitem div.collapse { grid-column: 1 / 4 !important; } .pc div.matrix div.programs div.repitem input.collapse-flag { - grid-area: 1/1/1 / 3 !important; + grid-area: 1/ 1 / 1 / 3 !important; position: absolute !important; width: 100% !important; } .pc div.matrix div.programs div.repitem input.collapse-flag + span.pictos, .pc div.matrix div.programs div.repitem .settings-toggle input[type='checkbox'].collapse-flag + span, .settings-toggle .pc div.matrix div.programs div.repitem input[type='checkbox'].collapse-flag + span, @@ -1228,48 +1532,66 @@ div.matrix-device .matrixFirewall { text-align: left !important; } .pc div.matrix div.programs div.settings label { grid-column: 1 / 4 !important; } - .pc div.matrix div.complex-forms div.headers { - display: grid !important; - grid-template-columns: 30% 1fr 1fr 4em 1em 1em !important; } - .pc div.matrix div.complex-forms div.headers h2:nth-of-type(1n+2) { - text-align: center !important; } - .pc div.matrix div.complex-forms div.repitem { - grid-template-columns: 30% 1fr 1fr 4em 1em 1em !important; } - .pc div.matrix div.complex-forms div.repitem label[data-i18n-title='notes'], - .pc div.matrix div.complex-forms div.repitem h3[data-i18n='notes'], - .pc div.matrix div.complex-forms div.repitem div.collapse { - grid-column: 1 / 7 !important; } - .pc div.matrix div.complex-forms div.repitem input.collapse-flag { - grid-area: 1 / 5 / 1 / 6 !important; } - .pc div.matrix div.complex-forms div.repitem input.collapse-flag + span.pictos, .pc div.matrix div.complex-forms div.repitem .settings-toggle input[type='checkbox'].collapse-flag + span, .settings-toggle .pc div.matrix div.complex-forms div.repitem input[type='checkbox'].collapse-flag + span, - .pc div.matrix div.complex-forms div.repitem .settings-flag input[type='checkbox'].collapse-flag + span, - .settings-flag .pc div.matrix div.complex-forms div.repitem input[type='checkbox'].collapse-flag + span, .pc div.matrix div.complex-forms div.repitem .flag-primary + div > input.collapse-flag + span, .pc div.matrix div.complex-forms div.repitem .repcontrol input.collapse-flag + span.repcontrol_edit:after, .repcontrol .pc div.matrix div.complex-forms div.repitem input.collapse-flag + span.repcontrol_edit:after, - .pc div.matrix div.complex-forms div.repitem .repcontrol input.collapse-flag + span.repcontrol_add:after, - .repcontrol .pc div.matrix div.complex-forms div.repitem input.collapse-flag + span.repcontrol_add:after, .pc div.matrix div.complex-forms div.repitem .itemcontrol input.collapse-flag + span.repcontrol_del, .itemcontrol .pc div.matrix div.complex-forms div.repitem input.collapse-flag + span.repcontrol_del { - grid-area: 1 / 5 / 1 / 6 !important; } - .pc div.matrix div.complex-forms div.repitem input.settings-flag, - .pc div.matrix div.complex-forms div.repitem input.settings-flag + span.pictos, - .pc div.matrix div.complex-forms div.repitem .settings-toggle input[type='checkbox'].settings-flag + span, - .settings-toggle .pc div.matrix div.complex-forms div.repitem input[type='checkbox'].settings-flag + span, - .pc div.matrix div.complex-forms div.repitem .settings-flag input[type='checkbox'].settings-flag + span, - .settings-flag .pc div.matrix div.complex-forms div.repitem input[type='checkbox'].settings-flag + span, - .pc div.matrix div.complex-forms div.repitem .flag-primary + div > input.settings-flag + span, - .pc div.matrix div.complex-forms div.repitem .repcontrol input.settings-flag + span.repcontrol_edit:after, - .repcontrol .pc div.matrix div.complex-forms div.repitem input.settings-flag + span.repcontrol_edit:after, - .pc div.matrix div.complex-forms div.repitem .repcontrol input.settings-flag + span.repcontrol_add:after, - .repcontrol .pc div.matrix div.complex-forms div.repitem input.settings-flag + span.repcontrol_add:after, - .pc div.matrix div.complex-forms div.repitem .itemcontrol input.settings-flag + span.repcontrol_del, - .itemcontrol .pc div.matrix div.complex-forms div.repitem input.settings-flag + span.repcontrol_del { - grid-area: 1 / 6 / 1 / 7 !important; } - .pc div.matrix div.complex-forms div.repitem div.row { - grid-column: 1 / 7 !important; - margin-left: 0px !important; } - .pc div.matrix div.complex-forms div.repitem div.settings { - grid-column: 1 / 7 !important; - grid-template-columns: 30% 1fr 1fr 4em 1em 1em !important; } + + /* Matrix Complex Forms */ + #SR6WE .pc div.matrix div.complex-forms-rolls button, #SR6WE .pc div.matrix div.complex-forms-rolls button span { + padding-right: 3px; + display: inline !important; } + + #SR6WE .pc div.matrix div.complex-forms div.headers { + display: grid; + grid-template-columns: 1fr 7em 4em 1em 1em; } + #SR6WE .pc div.matrix div.complex-forms div.headers h2:nth-of-type(1n+2) { + text-align: center; } + #SR6WE .pc div.matrix div.complex-forms div.repitem { + grid-template-columns: 1fr 7em 4em 1em 1em; } + #SR6WE .pc div.matrix div.complex-forms div.repitem label[data-i18n-title='notes'], + #SR6WE .pc div.matrix div.complex-forms div.repitem h3[data-i18n='notes'], + #SR6WE .pc div.matrix div.complex-forms div.repitem div.collapse { + grid-column: 1 / 6; } + #SR6WE .pc div.matrix div.complex-forms div.repitem input.collapse-flag { + grid-area: 1 / 4 / 1 / 5; } + #SR6WE .pc div.matrix div.complex-forms div.repitem input.collapse-flag + span.pictos, #SR6WE .pc div.matrix div.complex-forms div.repitem .settings-toggle input[type='checkbox'].collapse-flag + span, #SR6WE .settings-toggle .pc div.matrix div.complex-forms div.repitem input[type='checkbox'].collapse-flag + span, + #SR6WE .pc div.matrix div.complex-forms div.repitem .settings-flag input[type='checkbox'].collapse-flag + span, + #SR6WE .settings-flag .pc div.matrix div.complex-forms div.repitem input[type='checkbox'].collapse-flag + span, #SR6WE .pc div.matrix div.complex-forms div.repitem .flag-primary + div > input.collapse-flag + span, #SR6WE .pc div.matrix div.complex-forms div.repitem .repcontrol input.collapse-flag + span.repcontrol_edit:after, #SR6WE .repcontrol .pc div.matrix div.complex-forms div.repitem input.collapse-flag + span.repcontrol_edit:after, + #SR6WE .pc div.matrix div.complex-forms div.repitem .repcontrol input.collapse-flag + span.repcontrol_add:after, + #SR6WE .repcontrol .pc div.matrix div.complex-forms div.repitem input.collapse-flag + span.repcontrol_add:after, #SR6WE .pc div.matrix div.complex-forms div.repitem .itemcontrol input.collapse-flag + span.repcontrol_del, #SR6WE .itemcontrol .pc div.matrix div.complex-forms div.repitem input.collapse-flag + span.repcontrol_del { + grid-area: 1 / 4 / 1 / 5; } + #SR6WE .pc div.matrix div.complex-forms div.repitem input.settings-flag, + #SR6WE .pc div.matrix div.complex-forms div.repitem input.settings-flag + span.pictos, + #SR6WE .pc div.matrix div.complex-forms div.repitem .settings-toggle input[type='checkbox'].settings-flag + span, + #SR6WE .settings-toggle .pc div.matrix div.complex-forms div.repitem input[type='checkbox'].settings-flag + span, + #SR6WE .pc div.matrix div.complex-forms div.repitem .settings-flag input[type='checkbox'].settings-flag + span, + #SR6WE .settings-flag .pc div.matrix div.complex-forms div.repitem input[type='checkbox'].settings-flag + span, + #SR6WE .pc div.matrix div.complex-forms div.repitem .flag-primary + div > input.settings-flag + span, + #SR6WE .pc div.matrix div.complex-forms div.repitem .repcontrol input.settings-flag + span.repcontrol_edit:after, + #SR6WE .repcontrol .pc div.matrix div.complex-forms div.repitem input.settings-flag + span.repcontrol_edit:after, + #SR6WE .pc div.matrix div.complex-forms div.repitem .repcontrol input.settings-flag + span.repcontrol_add:after, + #SR6WE .repcontrol .pc div.matrix div.complex-forms div.repitem input.settings-flag + span.repcontrol_add:after, + #SR6WE .pc div.matrix div.complex-forms div.repitem .itemcontrol input.settings-flag + span.repcontrol_del, + #SR6WE .itemcontrol .pc div.matrix div.complex-forms div.repitem input.settings-flag + span.repcontrol_del { + grid-area: 1 / 5 / 1 / 6; } + #SR6WE .pc div.matrix div.complex-forms div.repitem div.row { + grid-column: 1 / 6; + margin-left: 0px; } + #SR6WE .pc div.matrix div.complex-forms div.repitem div.settings { + grid-column: 1 / 6; + grid-template-columns: 1fr 7em 4em 1em 1em; } + + #SR6WE .pc div.matrix div.complex-forms div.repitem span.hide-roll-button { + display: none; } + #SR6WE .pc div.matrix div.complex-forms div.repitem span.show-name { + font-weight: bold; + display: none; } + #SR6WE .pc div.matrix div.complex-forms div.repitem span.hide-roll-button:empty ~ button[name='roll_complex_form'] { + display: none !important; } + #SR6WE .pc div.matrix div.complex-forms div.repitem span.hide-roll-button:empty ~ span.show-name { + display: inherit; } + + /***** PC ROWS & COLUMNS SETTINGS *****/ .pc-row { margin-bottom: 10px !important; } @@ -1520,8 +1842,8 @@ h2[data-i18n='nuyen'], h3[data-i18n='nuyen'] { width: 55% !important; } .attr-col-right .attr-und { width: 38% !important; } - .attr-und input[name="attr_move_speed"], attr-und input[name="attr_sprint_speed"] { - width: 3em; !important; } + .attr-und input[name="attr_move_speed"], attr-und input[name="attr_sprint_speed"] { + width: 3em; !important; } .settings-toggle:checked ~ .attr-col-right .attr-ini { width: 63% !important; } @@ -1656,7 +1978,7 @@ h2[data-i18n='nuyen'], h3[data-i18n='nuyen'] { .con-track input[type='hidden'][value='0'] ~ .squares span { background-color: transparent !important; } -/***** MAKE CONDTION SQUARES APPEAR & DISPPEAR *****/ +/***** MAKE CONDITION SQUARES APPEAR & DISPPEAR *****/ .hex-hider[value='8'] ~ input[type='radio']:nth-child(1n+19), .hex-hider[value='9'] ~ input[type='radio']:nth-child(1n+21), .hex-hider[value='10'] ~ input[type='radio']:nth-child(1n+24), @@ -1975,9 +2297,9 @@ input.skill-select[type='checkbox'] { padding-right: 0px !important; width: 15% !important; } -.cyberdeck .row-long span { - margin-left: 1% !important; - margin-right: 1% !important; } +#SR6WE .cyberdeck .row-long span { + margin-left: 1%; + margin-right: 1%; } /**** MATRIX BUBBLES ****/ .pc .device-attr { @@ -2656,7 +2978,7 @@ span.d6 { /***************** PC & NPC SHEET SHOW & HIDE SETTINGS *******************/ /************************************************************************/ /* DISPLAY SETTINGS - ============================= */ + ============================= */ .pc div.skill-box input[name='attr_display_specialization'][value=' '] ~ div.buttons button[name*='specialization'], .pc div.skill-box input[name='attr_display_specialization'][value=''] ~ div.buttons button[name*='specialization'], .pc div.magic input.magic-toggle[value='rituals'] ~ .headers h2:nth-of-type(1n+2), .collapsable .desc, .collapsable .desc-lifestyle, .matrix, .magic, @@ -2908,6 +3230,12 @@ div.footer img { background-color: transparent !important; border: none !important; } +.sheet-rolltemplate-rolls .sheet-template-row span.sheet-red { + -webkit-text-stroke: .25px red; } + +.sheet-rolltemplate-rolls .sheet-template-row span.sheet-green { + -webkit-text-stroke: .25px green; } + .sheet-rolltemplate-rolls .inlinerollresult.fullfail, .sheet-rolltemplate-rolls .inlinerollresult.fullcrit, .sheet-rolltemplate-rolls .inlinerollresult.importantroll { diff --git a/Shadowrun Sixth World/Shadowrun6thEdition.html b/Shadowrun Sixth World/Shadowrun6thEdition.html index f588de96b4..37cde4c773 100644 --- a/Shadowrun Sixth World/Shadowrun6thEdition.html +++ b/Shadowrun Sixth World/Shadowrun6thEdition.html @@ -1,47 +1,61 @@ - - +
-
-

Character

- -

Player

- -

/w GM

- -

wounds

- -

modifiers

- -

edge

- - - - - - - - - - - - +
+

Character

+ + +

Player

+ +
+
+   +

/w GM

+ +

Wounds

+ +

Modifiers

+ +

Edge

+ +

Wild Die

+ +   +
+
+ +

 

+ + + + + + + + + + +
+ +
@@ -49,7 +63,7 @@
-

NAME/PRIMARY ALIAS

+

NAME/PRIMARY ALIAS

Metatype

@@ -64,7 +78,7 @@

Reputation

Heat

-

¥

+

Â¥

Karma

@@ -76,6 +90,8 @@
+ +
@@ -86,7 +102,7 @@
- +
+ @@ -97,7 +113,7 @@
- +
+ @@ -108,7 +124,7 @@
- +
+ @@ -119,7 +135,7 @@
- +
+ @@ -130,7 +146,7 @@
- +
+ @@ -141,7 +157,7 @@
- +
+ @@ -152,7 +168,7 @@
- +
+ @@ -163,7 +179,7 @@
- +
+ @@ -173,7 +189,7 @@
- +
@@ -220,7 +236,7 @@ - +
+ @@ -239,7 +255,7 @@
- @@ -316,7 +332,7 @@
- +
= @@ -328,7 +344,7 @@
-
@@ -342,7 +358,7 @@
-
@@ -356,7 +372,7 @@
-
@@ -377,7 +393,7 @@
-
@@ -416,7 +432,7 @@
- -1 + -1
- - - + + hideme + hideme
@@ -561,15 +577,15 @@
-
 
-
 
-
 
@@ -597,7 +613,7 @@

E

- +   @@ -642,7 +658,7 @@

E

- +   @@ -673,7 +689,7 @@
@@ -860,7 +876,7 @@ - + @@ -975,7 +991,7 @@ - + @@ -1243,7 +1259,7 @@
- + - + @@ -1370,7 +1386,7 @@
- + @@ -1492,7 +1508,7 @@
- + i x @@ -1560,7 +1576,7 @@
- + @@ -1669,7 +1685,7 @@
- + i x @@ -1780,125 +1796,283 @@
-

Cyberdeck

+

Persona

-
- +
+ + + + + +   + +   + +   + +   +
+
+   + + + + + +   +
+
+

Total

+

Temp

+

modifier

+

Base

+

Base slider

+
+ +
= + + + + + +
+
+ + + + + + + + + + +
+
- - - - - - + +
= + + + + + +
+
+ + + + + + + + + + +
+
-

Total

Temp

modifier

Base

Base slider


- -
= - + - + - -
-
- - - - - - - - - - -
-
+ +
= + + + + + +
+
+ + + + + + + + + + +
+
- -
= - + - + - -
-
- - - - - - - - - - -
-
+ +
= + + + + + +
+
+ + + + + + + + + + +
+
-
- -
= - + - + - -
-
- - - - - - - - - - -
-
-
-
- -
= - + - + - -
-
- - - - - - - - - - -
-
-
-
-

Condition Monitor

- - - - - - - - - - - - +
+ + +

Condition Monitor

+ + + + + + + + + + + +
+ +
 
+ +
+
+

Device

+

RTG

+

Primary

+

 

+

 

+
+
+ + + + i + x +
+
+   + + + + + + + + + + + + + + + + + + + +   +
+
+
+ +
+
+
+
+ + + +
+
+   +

Device Type

+ +   +

Program Slots

+ +   +
+
+   + + + + +   +
+
+   +

Matrix Initiative Bonus

+ +   +

Essence Cost

+ +   +
+
+   +

Current Condition Monitor

+ +   +

Condition Monitor Max

+ +   +
+
+

notes

+ +
+
+

modifiers

+ +
+
+ +
+
+ +

Programs

@@ -1913,58 +2087,40 @@ +

modifiers

+
-
+ + + +
-

Complex Forms

+

Complex Forms

-
- - + - -

modifier

- +
+ + +

Complex Form

-

Target

Duration

Fade

- + + + i x
@@ -1972,21 +2128,11 @@ -
{{#dice}}
Hits: {{dice}}
{{/dice}} - {{#defenserating}}
DR: {{defenserating}}
{{/defenserating}} + {{#rollGreater() wilddie 0}} +
Wild Die Rolled! {{wilddie}}
+ {{#rollLess() wilddie 2}} +
Remove all 5s!
+ {{/rollLess() wilddie 2}} + {{#rollBetween() wilddie 2 4}} +
No Change!
+ {{/rollBetween() wilddie 2 4}} + {{#rollGreater() wilddie 4}} +
+3 Hits!
+ {{/rollGreater() wilddie 4}} +
+ {{/rollGreater() wilddie 0}} + {{#rating}}
{{rating}}
{{/rating}} {{#ampup}}{{#rollGreater() ampup 0}}
Amp Up: {{ampup}} @@ -3414,6 +3582,11 @@ Increase Area: {{increasearea}}m
{{/rollGreater() increasearea 0}}{{/increasearea}} + {{#fade}}{{#rollGreater() fade 0}} +
+ Fade: {{fade}} +
+ {{/rollGreater() fade 0}}{{/fade}} {{#desc}}
@@ -3570,8 +3743,12 @@ //Sheet workers on("sheet:opened", function() { - const version = '0.23'; + const version = '0.24'; console.log(`%c Shadowrun 6th World v`+version, "color: blue; font-weight:bold"); + + getAttrs(['sheet_type'], (v) => { + console.log(`%c Sheet Type: ${v['sheet_type']}`, "color: red; font-weight:bold"); + }); }); @@ -3783,17 +3960,19 @@ var update_essence = () => { }); }); - getAttrs(['essence_mod', 'magic'], (ess_mod) => { + getAttrs(['essence_mod', 'magic', 'matrix_device_essence_cost'], (a) => { var em = 0; - if(! isNaN(ess_mod['essence_mod']) && ess_mod['essence_mod'] !== '') { - em = ess_mod['essence_mod']; + if(! isNaN(a['essence_mod']) && a['essence_mod'] !== '') { + em = a['essence_mod']; } ess += parseFloat(em); + ess -= parseFloat(a['matrix_device_essence_cost']) || 0; + // Trying to update magic as essence drops but it's not a simple process will revisit later // var magic = 0; -// if(! isNaN(ess_mod['magic']) && ess_mod['magic'] !== '') { -// magic = ess_mod['magic']; +// if(! isNaN(a['magic']) && a['magic'] !== '') { +// magic = a['magic']; // } setAttrs({ @@ -3805,7 +3984,7 @@ var update_essence = () => { //This function watches for changes to augmentations and updates recalculates essence -on("change:essence_mod remove:repeating_augmentations change:repeating_augmentations:essence_cost", (eventInfo) => { +on("change:essence_mod remove:repeating_augmentations change:repeating_augmentations:essence_cost change:matrix_device_essence_cost", (eventInfo) => { update_essence(); }); @@ -3834,6 +4013,183 @@ on("change:magic change:tradition change:logic change: charisma", (eventinfo) => }); +/********************************************************/ +/* MATRIX TAB SHEET WORKERS */ +/********************************************************/ +//This function watches for changes to repeating_devices and updates the ASDF and Device Rating as needed +on("change:repeating_devices remove:repeating_devices", (eventInfo) => { + const source = eventInfo.sourceAttribute; + const newV = eventInfo.newValue; + + // sum repeating device matrix initiative bonuses and essence costs + getSectionIDs('devices', function(ids) { + var matrix_bonus = 0; + var essence_cost = 0; + + ids.forEach(id => { + getAttrs([`repeating_devices_${id}_matrix_initiative_bonus`, `repeating_devices_${id}_essence_cost`], (a) => { + matrix_bonus += parseInt(a[`repeating_devices_${id}_matrix_initiative_bonus`]) || 0; + essence_cost += parseFloat(a[`repeating_devices_${id}_essence_cost`]) || 0; + + setAttrs({ + matrix_device_initiative_bonus: matrix_bonus, + matrix_device_essence_cost: essence_cost + }); + }); + }); + + // If the device list is empty update these to 0 which triggers recalculations. + if(ids.length == 0) { + setAttrs({ + matrix_device_initiative_bonus: 0, + matrix_device_essence_cost: 0, + matrix_device_rating: 0 + }); + } + }); + + + // Get a bunch of attributes (device rating, primary, ASDF, condition monitor, condition monitor max) + getAttrs(['attr_matrix_con', 'attr_condition_monitor_link', 'repeating_device_device', 'repeating_device_device_rating', 'repeating_device_primary_device', 'repeating_device_attack', 'repeating_device_attack_primary', 'repeating_device_sleaze', 'repeating_device_sleaze_primary', 'repeating_device_data_processing', 'repeating_device_data_processing_primary', 'repeating_device_firewall', 'repeating_device_firewall_primary', 'repeating_device_condition_monitor', 'repeating_device_condition_monitor_max', 'repeating_device_matrix_initiative_bonus'], (v) => { + var toUpdate = {}; + + // Check if the event was related to the primary flag being turned on (we'll need to recalculate + if(source.includes('primary_device') && newV == '1') { + // Update the attr_matrix_device_rating + toUpdate['matrix_device_rating'] = v['repeating_device_device_rating'] || 0; + + // Update condition_monitor_link with the full id of this device + toUpdate['condition_monitor_link'] = eventInfo.triggerName; + + // Update matrix_hex with the new condition + toUpdate['matrix_hex'] = v['repeating_device_condition_monitor'] || 0; + + // Update matrix_hex with the new condition + toUpdate['matrix_hex_max'] = v['repeating_device_condition_monitor_max'] || 0; + + // Uncheck 'primary' from other devices + getSectionIDs('devices', function(ids) { + var updates = {}; + ids.forEach(id => { + if('repeating_devices_'+id != eventInfo.triggerName) { + updates[`repeating_devices_${id}_primary_device`] = 0; + } + }); + setAttrs(updates); + }); + } + + /* When the device rating changes so should the Condition Monitor Max ONLY IF they haven't entered something there already*/ + if(source.includes('device_rating')) { + if(! v['repeating_device_condition_monitor_max']) { + var device_condition_monitor_max = 8 + Math.ceil(v['repeating_device_device_rating'] / 2) + toUpdate[`${eventInfo.triggerName}_condition_monitor_max`] = device_condition_monitor_max; + + if(typeof(v['repeating_device_condition_monitor']) == 'undefined') { + toUpdate[`${eventInfo.triggerName}_condition_monitor`] = device_condition_monitor_max; + } + } + } + + /* If they changed the device's condition monitor update the hexes ONLY IF THIS IS THE PRIMARY DEVICE */ + if(source.includes('condition_monitor') && v['repeating_device_primary_device'] == '1') { + // Update matrix_hex with the new condition + toUpdate['matrix_hex'] = v['repeating_device_condition_monitor'] || 0; + } + + /* If they changed an attribute + If the attribute from this device is used by the persona + Update the persona attribute as well + */ + ['attack', 'sleaze', 'data_processing', 'firewall'].forEach(attr => { + if(source.includes(`${attr}`)) { + // one of the attrs changed, is it the primary for the persona? + if(v[`repeating_device_${attr}_primary`] == '1') { + toUpdate[`${attr}_base`] = v[`repeating_device_${attr}`] || 0; + } + + + if(source.includes(`${attr}_primary`) && newV == '1') { + // If they selected the button uncheck the attribute button from other devices + getSectionIDs('devices', function(ids) { + var updates = {}; + ids.forEach(id => { + if('repeating_devices_'+id != eventInfo.triggerName) { + updates[`repeating_devices_${id}_${attr}_primary`] = 0; + } + }); + setAttrs(updates); + }); + } + } + }); + + // update everything in toUpdate + setAttrs(toUpdate); + + }); +}); + +on("change:attack change:sleaze", (eventInfo) => { + getAttrs(['attack', 'sleaze'], (v) => { + const attack = v['attack'] || 0; + const sleaze = v['sleaze'] || 0; + setAttrs({ + matrix_attack_rating: parseInt(attack + sleaze) + }); + }); +}); + + +on("change:data_processing change:firewall", (eventInfo) => { + getAttrs(['data_processing', 'firewall'], (v) => { + const data_processing = v['data_processing'] || 0; + const firewall = v['firewall'] || 0; + setAttrs({ + matrix_defense_rating: parseInt(data_processing + firewall) + }); + }); +}); + + +on("change:willpower change:logic change:intuition change:charisma change:flag_special", (eventInfo) => { + getAttrs(['willpower', 'logic', 'intuition', 'charisma', 'flag_special'], (v) => { + if(v['flag_special'] == 'resonance') { + setAttrs({ + attack_base: v['charisma'], + sleaze_base: v['intuition'], + data_processing_base: v['logic'], + firewall_base: v['willpower'], + }); + } + }); +}); + +/* condition monitor hex change updates device condition monitor */ +on("change:matrix_hex", (eventInfo) => { + getAttrs(['matrix_hex', 'condition_monitor_link'], (v) => { + setAttrs({ + [`${v['condition_monitor_link']}_condition_monitor`]: v['matrix_hex'] + }); + }); +}); + + +/* Complex Forms Sheetworkers */ +on("change:electronics change:resonance", (eventinfo) => { +console.log(eventinfo); + getAttrs(['electronics', 'resonance'], (v) => { + var complex_forms_attack_rating = parseInt(v['electronics']) || 0; + complex_forms_attack_rating += parseInt(v['resonance']) || 0; + + setAttrs({ + 'complex_form_attack_rating': complex_forms_attack_rating + }); + }); +}); + + + //This function checks changes to repeating_armor and updates the Primary Armor if needed on("change:repeating_armor", (eventInfo) => { @@ -4126,16 +4482,19 @@ var update_astral_initiative = () => { //Calculate Matrix Initiatve. -on("change:host_rating change:data_processing change:pilot change:intuition change:reaction change:level change:matrix_initiative_mod change:matrix_initiative_dice_mod change:matrix_initiative_temp change:matrix_initiative_temp_flag change:matrix_initiative_dice_temp change:matrix_initiative_dice_temp_flag", () => { - getAttrs(["sheet_type", "data_processing", "pilot", "intuition", "reaction", "host_rating", "level", "matrix_initiative_mod", "matrix_initiative_dice_mod", "matrix_initiative_temp", "matrix_initiative_temp_flag", "matrix_initiative_dice_temp", "matrix_initiative_dice_temp_flag"], (v) => { +on("change:host_rating change:data_processing change:pilot change:intuition change:reaction change:level change:matrix_initiative_mod change:matrix_initiative_dice_mod change:matrix_initiative_temp change:matrix_initiative_temp_flag change:matrix_initiative_dice_temp change:matrix_initiative_dice_temp_flag change:matrix_device_initiative_bonus", () => { + getAttrs(["sheet_type", "data_processing", "pilot", "intuition", "reaction", "host_rating", "level", "matrix_initiative_mod", "matrix_initiative_dice_mod", "matrix_initiative_temp", "matrix_initiative_temp_flag", "matrix_initiative_dice_temp", "matrix_initiative_dice_temp_flag", "matrix_device_initiative_bonus"], (v) => { const dat = parseInt(v.data_processing) || 0; const pil = parseInt(v.pilot) || 0; const int = parseInt(v.intuition) || 0; const rea = parseInt(v.reaction) || 0; const hos = parseInt(v.host_rating) || 0; const lev = parseInt(v.level) || 0; + const dev = parseInt(v.matrix_device_initiative_bonus) || 0; + const init_mod = parseInt(v.matrix_initiative_mod) || 0; + + const mod = init_mod + dev; - const mod = parseInt(v.matrix_initiative_mod) || 0; const dice_mod = parseInt(v.matrix_initiative_dice_mod) || 0; const tmp = (v.matrix_initiative_temp_flag === "on") ? parseInt(v.matrix_initiative_temp) || 0 : 0; @@ -4812,4 +5171,5 @@ mylog = function(msg) { let lines = new Error().stack.split("\n"); log(d.toUTCString() + " " + lines[2].trim() + " " + msg); } - \ No newline at end of file + +
diff --git a/Shadowrun Sixth World/preview.png b/Shadowrun Sixth World/preview.png index ebd0b34454..8bcd8f8a5c 100644 Binary files a/Shadowrun Sixth World/preview.png and b/Shadowrun Sixth World/preview.png differ diff --git a/Shadowrun Sixth World/sheet.json b/Shadowrun Sixth World/sheet.json index 76375fbd5d..2c20889eb3 100644 --- a/Shadowrun Sixth World/sheet.json +++ b/Shadowrun Sixth World/sheet.json @@ -2,8 +2,8 @@ "html": "Shadowrun6thEdition.html", "css": "Shadowrun6thEdition.css", "authors": "James Culp (Chuz), Cassie Levett (Original Author)", - "roll20userid" : "4306461", - "patreon" : "https://www.patreon.com/ChuzGaming", + "roll20userid": "4306461", + "patreon": "https://www.patreon.com/ChuzGaming", "preview": "preview.png", "instructions": "This is a work in progress, once the PC part is mostly functional a thread will be started in the forums for feedback. *The Topps Company, Inc. has sole ownership of the names, logo, artwork, marks, photographs, sounds, audio, video and/or any proprietary material used in connection with the game Shadowrun. The Topps Company, Inc. has granted permission to use such names, logos, artwork, marks and/or any proprietary materials for promotional and informational purposes on its website but does not endorse, and is not affiliated with any official capacity whatsoever.*" } diff --git a/Shadowrun Sixth World/translation.json b/Shadowrun Sixth World/translation.json index 5c48e3b4d3..38e3b10919 100644 --- a/Shadowrun Sixth World/translation.json +++ b/Shadowrun Sixth World/translation.json @@ -7,6 +7,8 @@ "acidprotection": "Acid Protection", "act": "Act", "active": "Active", + "activeprogramslots": "Active Program Slots", + "addedgetodicepool": "Add Edge to dice pool and make 6's explode", "adept": "Adept", "adeptpowers": "Adept Powers", "age": "Age", @@ -24,6 +26,7 @@ "astral": "Astral", "athletics": "Athletics", "attack": "Attack", + "attackrating": "Attack Rating", "attribute": "Attribute", "attributearray": "Attribute Array", "attributes": "Attributes", @@ -57,12 +60,16 @@ "combat": "Combat", "combattype": "Combat Type", "command": "Command", + "commlink": "Commlink", + "commandconsole": "Command Console", "complexform": "Complex Form", + "complexforms": "Complex Forms", "composure": "Composure", "con": "Con", "conditionfooter": "For every 3 boxes of damage on any one damage track, the character takes a -1 Dice Pool modifier on tests; these modifiers are cumulative within and across damage tracks.", "conditionmonitor": "Condition Monitor", "conditionmonitorm": "Condition Monitor (M)", + "conditionmonitormax": "Condition Monitor Max", "conditionmonitormodifiers": "Condition Monitor Modifiers (P/S): ", "conditionmonitorpm": "Condition Monitor (P/M)", "conditionmonitorps": "Condition Monitor (P/S)", @@ -78,6 +85,7 @@ "currentessence": "Total", "cybercombat": "Cybercombat", "cyberdeck": "Cyberdeck", + "cyberjack": "Cyberjack", "d6": "d6", "dam": "Dam", "damage": "Damage", @@ -93,7 +101,9 @@ "detection": "Detection", "device": "Device", "devicerating": "Device Rating", + "devicetype": "Device Type", "dice": "Dice", + "dicepoolmodifiers": "Dice pool modifiers", "direct": "Direct", "directcombat": "Direct Combat", "directcombatarea": "Direct Combat, Area", @@ -117,6 +127,7 @@ "ess": "Ess", "esscost": "Ess Cost", "essence": "Essence", + "essencecost": "Essence Cost", "essencemodifier": "Mod", "ethnicity": "Ethnicity", "exoticmelee": "Exotic Melee", @@ -212,6 +223,7 @@ "matrixdevice": "Matrix Device", "matrixinit": "Matrix AR Init", "matrixinitiative": "Matrix AR Initiative", + "matrixinitiativebonus": "Matrix Initiative Bonus", "matrixinitiativedice": "Matrix AR Initiative Dice", "matrixsoak": "Matrix Soak", "mediumdrone": "Medium Drone", @@ -247,6 +259,7 @@ "nauticalmechanic": "Nautical Mechanic", "near": "Near", "non-aspected": "Non-Aspected", + "noroll": "No Roll", "none": "None", "notes": "Notes", "notoriety": "Notoriety", @@ -306,6 +319,7 @@ "recoil": "Recoil", "relatedlifestyle": "Related Lifestyles", "reputation": "Reputation", + "resistfade": "Resist Fade", "resists": "Resists", "resonance": "Resonance", "ritual": "Ritual", @@ -362,6 +376,7 @@ "target": "Target", "tasking": "Tasking", "technique": "Technique", + "technomancer": "Technomancer", "temp": "Temp", "temporarymodifiers": "Temporary Modifiers", "threshold": "Threshold", @@ -385,6 +400,8 @@ "weight": "Weight", "whisper": "Whisper", "whisperdescription": "Set the default for rolling in public or to gm.", + "whispergm": "Whisper rolls to GM", + "wilddie": "Roll a single wild die", "willpower": "Willpower", "wounds": "Wounds" } \ No newline at end of file