diff --git a/ChroniquesOublieesFantasy2/README.md b/ChroniquesOublieesFantasy2/README.md new file mode 100644 index 000000000000..1d31d626cf24 --- /dev/null +++ b/ChroniquesOublieesFantasy2/README.md @@ -0,0 +1,15 @@ +# COF 2ème édition + +## Utilisation + +Consultez la [documentation](https://stephaned68.github.io/COF2e/) + +## Version courante + +v1.0.0 [Screenshot](cof2e.png) + +## Notes de version + +### Version 1.0.0 (2024-12-02) + +Version initiale diff --git a/ChroniquesOublieesFantasy2/cof2e.css b/ChroniquesOublieesFantasy2/cof2e.css new file mode 100644 index 000000000000..93584836cd97 --- /dev/null +++ b/ChroniquesOublieesFantasy2/cof2e.css @@ -0,0 +1,961 @@ +/* COF2e v1.0.0 */ + +@import url('https://fonts.googleapis.com/css?family=Merriweather+Sans&display=swap'); + +/* Declarations */ +* { + font-size: 1.3rem; +} + +div, +span, +input, +select, +textarea, +button +{ + box-sizing: border-box; + font-family: var(--cof-font); +} + +.cofmain input[type="text"] { + width: 100%; +} + +.cofmain .pc-gears input[type="text"], +.cofmain input[type="text"].w-auto { + width: auto; + flex-grow: 1; + margin: 2px; +} + +.cofmain .heading input[type='number'], +.cofmain .cofsheet input[type='number'] { + width: 3rem; + text-align: right; +} + +.cofmain .cofsheet input[type='number'].two-digits { + width: 4rem; + text-align: right; +} + +summary { + display: list-item; +} + +.cofmain textarea { + height: 12rem; +} + +.cofmain textarea.medium { + height: 9rem; +} + +.cofmain textarea.small { + height: 6rem; +} + +.cofmain hr { + margin-top: 10px; + margin-bottom: 10px; + border: 1px solid gray; +} + +/* Redefine Roll20 repeating sections buttons */ +.charsheet .repcontrol button.repcontrol_edit, +.charsheet .repcontrol button.repcontrol_add { + border-radius: 5px; + margin: 5px; + padding-top: 0px; + padding-bottom: 0px; + font-size: small; +} + +button[type="roll"] { + box-shadow: none; +} + +button[type="roll"]:hover { + font-weight: bold; + background-color: none; +} + +option.optgroup { + background: var(--cof-hilite); + font-weight: bold; + color: white; +} + +/* Main div */ +.cofmain { + + /* CSS Vars */ + --cof-font: "Merriweather Sans"; + --cof-color: burlywood; + --cof-dark: #3d3121; + --cof-hilite: #6f5b41; + + /* General Styles */ + width: 100%; + min-width: 850px; + background-color: whitesmoke; + border: 1px solid black; + border-radius: 10px; + margin: 5px; + padding: 5px; +} + +.bordered { + border: 1px solid gray; + padding: 2px; +} + +.border-rounded { + border-radius: 5px; +} + +input, +select { + border: none; + padding: 0px; + margin: 2px; + max-height: 20px; +} + +select.select-lg { + width: 16rem; +} + +select.select-md { + width: 9rem; +} + +select.select-sm { + width: 5rem; +} + +select.select-xs { + width: 2.5rem; + appearance: none; +} + +select.select-xxs { + font-size: smaller; + width: 1.3rem; + appearance: none; +} + +select.select-xxs option { + font-size: small; +} + +/* Icon buttons & images */ +button.flat-btn { + border: 0px; + background-color: transparent; + background-image: none; +} + +span.img-btn { + font-family: pictos; + font-variant: normal; +} + +span.img-btn-lg { + font-size: large; +} + +.img-btn:hover { + color: tomato; +} + +img.bubble-img { + width: 18px; +} + +img.bubble-img:hover { + width: 20px; + background-color: tomato; + border-radius: 100%; +} + +/* Action button as Roll button */ +span.d20-btn { + font-family: dicefontd20; + font-size: large; + vertical-align: middle; +} + +span.d20-btn:hover { + font-weight: bold; +} + +button[type='action'].block-title { + padding: 1px; + border: none; + border-radius: 3px; +} + +button[type='action'].block-title:hover { + background-color: gray; +} + +/* General Layout */ + +div.block-title, +button.block-title { + background-color: var(--cof-color); + color: var(--cof-dark); + text-align: center; + padding-top: 2px; + padding-bottom: 2px; +} + +div.block-header { + font-size: large; + font-variant: small-caps; +} + +div.path div.block-title { + font-size: medium; +} + +.visible { + display: block; +} + +.hidden { + display: none; +} + +.d-flex { + display: flex; +} + +.d-inline { + display: inline-block; +} + +.d-flex-between { + justify-content: space-between; + /*align-content: space-between;*/ +} + +.d-flex-middle { + vertical-align: middle; +} + +.align-self-center { + align-self: center; +} + +.align-right { + text-align: right; +} + +.float-right { + float: right; +} + +/* Identity layout */ + +.cofmain .heading { + display: grid; + grid-template-columns: 4fr 1.2fr 6fr; + gap: 5px; +} + +.cofmain .heading .logo, +.cofmain .heading .token { + width: 100%; +} + +.identity input[type="text"] { + border-bottom: dashed 1px; +} + +.identity-pc .identity-row { + display: grid; + grid-template-columns: 2fr 4fr 1fr 1fr; + gap: 5px; + margin: 2px; +} + +.identity-npc .identity-row { + display: grid; + grid-template-columns: 1fr 4fr 3fr; + gap: 5px; + margin: 2px; +} + +.identity .level-type { + display: grid; + grid-template-columns: 1fr 1fr 3fr 1fr 3fr; + gap: 5px; + margin: 2px; +} + +/* Sheet types */ +.identity-pc, +.identity-npc, +.cof-pc, +.cof-npc, +.weapon-opt { + display: none; +} + +.cof-head-toggle[value="pc"] ~ div.identity-pc, +.cof-head-toggle[value="npc"] ~ div.identity-npc, +.cof-type-toggle[value="pc"] ~ div.cof-pc, +.cof-type-toggle[value="npc"] ~ div.cof-npc, +.cof-wopt-toggle[value="1"] ~ div.weapon-opt { + display: block; +} + +/* Sheet tabs & sub-tabs */ +.tab-btn { + border: none; + margin-top: 5px; +} + +.main-tab { + font-size: medium; +} + +.sub-tab { + margin-top: 10px; + font-size: small; +} + +input[value="0"].pc-skills-btn ~ button.pc-skills-btn { + display: none; +} + +/* Hide all tabs */ +.pc-main-tab, +.pc-abilities-tab, +.pc-gears-tab, +.pc-config-tab, +.pc-script-tab, +.pc-version-tab, +.pc-rolls-subtab, +.pc-skills-subtab, +.pc-buffs-subtab, +.npc-main-tab, +.npc-config-tab { + display: none; +} + +/* Style the active (sub-)tab button */ +.tabs-toggle[value="main"] ~ div .pc-main-btn, +.tabs-toggle[value="abilities"] ~ div .pc-abilities-btn, +.tabs-toggle[value="gears"] ~ div .pc-gears-btn, +.tabs-toggle[value="config"] ~ div .pc-config-btn, +.tabs-toggle[value="script"] ~ div .pc-script-btn, +.tabs-toggle[value="version"] ~ div .pc-version-btn, +.tabs-toggle[value="main"] ~ div .npc-main-btn, +.tabs-toggle[value="config"] ~ div .npc-config-btn, +.tabs-toggle[value="rolls"] ~ div .pc-rolls-btn, +.tabs-toggle[value="skills"] ~ div .pc-skills-btn, +.tabs-toggle[value="buffs"] ~ div .pc-buffs-btn { + color: white; + background-color: var(--cof-hilite); +} + +/* Show the selected tab */ +.tabs-toggle[value="main"] ~ div.pc-main-tab, +.tabs-toggle[value="abilities"] ~ div.pc-abilities-tab, +.tabs-toggle[value="gears"] ~ div.pc-gears-tab, +.tabs-toggle[value="config"] ~ div.pc-config-tab, +.tabs-toggle[value="script"] ~ div.pc-script-tab, +.tabs-toggle[value="version"] ~ div.pc-version-tab, +.tabs-toggle[value="rolls"] ~ div.pc-rolls-subtab, +.tabs-toggle[value="skills"] ~ div.pc-skills-subtab, +.tabs-toggle[value="buffs"] ~ div.pc-buffs-subtab, +.tabs-toggle[value="main"] ~ div.npc-main-tab, +.tabs-toggle[value="config"] ~ div.npc-config-tab { + display: block; +} + +/* Show/Hide areas */ +input.block-switch { + display: none; +} + +.abilities-view, +.block-switch:checked ~ .abilities-edit, +input[value="1"].show-script ~ div.show-script { + display: block; +} + +.abilities-edit, +.block-switch:checked ~ .abilities-view, +input[value="0"].show-script ~ div.show-script { + display: none; +} + +input[value="0"].init-agi ~ div.init-agi { + display: none; +} + +input[value="1"].init-agi ~ div.init-agi { + display: inline; +} + +div.change-view { + width: 100%; + text-align: right; + margin-bottom: 5px; +} + +/* PC sheet layout */ +.pc-main-tab .pc-attributes { + display: grid; + grid-template-columns: 2fr 3fr 1.5fr; +} + +.pc-attributes .traits, +.pc-attributes .attacks, +.pc-attributes .vitality, +.pc-cond-def .conditions, +.pc-cond-def .defenses, +.pc-luck-rd .luck, +.pc-luck-rd .dmred { + margin: 5px; +} + +.pc-attributes .trait { + display: grid; + grid-template-columns: 2fr 0.5fr 1fr 1fr 1fr; + gap: 2px; + padding: 2px; +} + +.pc-attributes .attack { + display: grid; + grid-template-columns: 3fr 1fr 2.5fr 1fr 1fr; + gap: 2px; + padding: 2px; +} + +.pc-attributes .hits { + display: grid; + grid-template-columns: 3fr 5fr; + gap: 2px; + padding: 2px; +} + +.pc-attributes .hit, +.pc-cond-def .defense { + margin-top: 2px; +} + +.centered, +.pc-attributes .trait h4, +.pc-attributes .attack h4, +.pc-attacks .weapon h4, +.pc-buffs h4, +.pc-roll-r1 h4, +.npc-attacks .weapon h4, +.npc-abilities .npc-ability h4 { + text-align: center; +} + +.pc-attributes .attack input[type="number"], +.pc-attributes .hits input[type="number"] { + width: 3rem; +} + +.pc-main-tab .pc-cond-def, +.pc-main-tab .pc-luck-rd { + display: grid; + grid-template-columns: 2fr 5fr; +} + +.pc-cond-def .defense { + display: grid; + grid-template-columns: 2fr 1fr 2fr 2fr 1fr 1fr 3fr 1fr; + gap: 2px; +} + +.conditions input[value="1"].condition-affaibli ~ button img.condition-affaibli, +.conditions input[value="1"].condition-aveugle ~ button img.condition-aveugle, +.conditions input[value="1"].condition-essoufle ~ button img.condition-essoufle, +.conditions input[value="1"].condition-etourdi ~ button img.condition-etourdi, +.conditions input[value="1"].condition-immobilise ~ button img.condition-immobilise, +.conditions input[value="1"].condition-invalide ~ button img.condition-invalide, +.conditions input[value="1"].condition-paralyse ~ button img.condition-paralyse, +.conditions input[value="1"].condition-ralenti ~ button img.condition-ralenti, +.conditions input[value="1"].condition-renverse ~ button img.condition-renverse, +.conditions input[value="1"].condition-surpris ~ button img.condition-surpris { + width: 22px; + border-radius: 100%; + background-color: tan; +} + +.pc-luck-rd .luck { + display: grid; + grid-template-columns: 1fr 3fr; + gap: 2px; +} + +.pc-luck-rd .luck input[type="number"] { + width: 2.5rem; +} + +.pc-luck-rd .luck span { + vertical-align: middle; +} + +.pc-luck-rd .dmred { + display: grid; + grid-template-columns: 2fr 11fr; + gap: 2px; +} + +.dmred input { + width: 100%; +} + +.pc-attacks .weapon { + display: grid; + grid-template-columns: 25px 3fr 3fr 1fr 4.5fr 1fr 3.5fr; + gap: 2px; + margin-bottom: 2px; +} + +.pc-attacks .weapon div, +.pc-attacks .weapon input, +.pc-attacks .weapon select, +.npc-attacks .weapon div, +.npc-attacks .weapon input, +.npc-attacks .weapon select { + padding: 0; + margin: 2px; +} + +.pc-attacks .weapon-option { + display: grid; + grid-template-columns: 25px 4fr 6fr 6fr; + gap: 2px; + margin-bottom: 2px; +} + +.pc-attacks .weapon-option div { + display: flex; + flex-direction: row; + gap: 2px; +} + +.pc-attacks .pc-tactic { + display: grid; + grid-template-columns: 40% 60%; + gap: 2px; + margin-top: 2px; +} + +.pc-abilities-tab .abilities { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 1px; +} + +.abilities .rank { + border-top: 1px solid gray; + display: flex; + flex-direction: column; + gap: 2px; +} + +.abilities .rank .rank-summary { + display: inline-flex; + vertical-align: middle; + gap: 5px; +} + +.abilities .rank .rank-summary span.rank-title { + display: block; + width: 21rem; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.abilities .rank textarea { + height: 4rem; + overflow: hidden; + resize: vertical; +} + +input[value="0"].show-paths-789 ~ div.abilities { + display: none; +} + +.pc-rolls-subtab .pc-roll-r1 { + display: grid; + grid-template-columns: 25px 4fr 6.5fr 6.5fr; + gap: 2px; + margin-bottom: 2px; +} + +.pc-rolls-subtab .pc-roll-r2 { + display: grid; + grid-template-columns: 2.4rem 5fr 15fr; + gap: 2px; + margin-bottom: 2px; +} + +.pc-buffs-subtab div.buff-detail { + display: grid; + grid-template-columns: 5% auto 5%; + gap: 5px; + margin: 2px; +} + +.pc-rolls-subtab .buff-list { + width: auto; +} + +.pc-buffs-subtab .pc-buffs { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 2px; +} + +.pc-gears-tab .pc-gears { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 5px; +} + +.pc-gears .gears, +.pc-gears .resources, +.pc-gears .misc-gears, +.pc-gears .notes { + margin-top: 10px; +} + +.pc-config-tab li { + margin-top: 2px; +} +.pc-config-tab li.config-check { + list-style: none; +} + + +.pc-config-tab .pc-configs { + display: grid; + grid-template-columns: 60% 40%; + gap: 2px; +} + +/* NPC LAYOUT */ + +.cof-npc .npc-main { + display: grid; + grid-template-columns: 1.25fr 0.75fr; + gap: 5px; + margin-top: 10px; + margin-bottom: 10px; +} + +.cof-npc .npc-4colrow { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + gap: 2px; + margin-top: 10px; + margin-bottom: 10px; +} + +.cof-npc .npc-2colrow { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2px; + margin-top: 10px; + margin-bottom: 10px; +} + +.cof-npc .npc-row { + display: grid; + grid-template-columns: 1fr; + gap: 2px; + margin-top: 10px; + margin-bottom: 10px; +} + +.cof-npc .npc-trait { + display: grid; + grid-template-columns: 1fr 1fr; +} + +.npc-attacks .weapon { + display: grid; + grid-template-columns: 25px 3.5fr 2fr 1fr 4fr 1fr 4fr; + gap: 2px; + margin-bottom: 2px; +} + +.npc-abilities .npc-ability { + display: grid; + grid-template-columns: 25px 4fr 8fr; + gap: 2px; + margin-bottom: 2px; +} + +textarea.stat-block { + border: 1px dashed; + height: 12em; + word-break: break-all; +} + +textarea.import-result { + border: none; + background-color: transparent; + height: 10em; + resize: none; +} + +/* ROLL TEMPLATES */ + +.sheet-rolltemplate-cof2 { + border: 1px solid gray; + border-radius: 5px; + background-color: whitesmoke; + margin-left: -37px; +} + +.withoutavatars .sheet-rolltemplate-cof2 { + margin-left: -7px; +} + +.sheet-rolltemplate-cof2 .sheet-rt { + font-family: "Merriweather Sans"; +} + +.sheet-rolltemplate-cof2 .sheet-rt-header { + background-color: burlywood; + padding: 5px; +} + +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-blue { + background-color: #0d6efd; + color: #fff; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-indigo { + background-color: #6610f2; + color: #fff; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-purple { + background-color: #6f42c1; + color: #fff; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-pink { + background-color: #d63384; + color: #fff; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-red { + background-color: #dc3545; + color: #fff; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-orange { + background-color: #fd7e14; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-yellow { + background-color: #ffc107; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-green { + background-color: #198754; + color: #fff; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-teal { + background-color: #20c997; + color: #fff; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-cyan { + background-color: #0dcaf0; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-gray { + background-color: #6c757d; + color: #fff; +} +.sheet-rolltemplate-cof2 .sheet-rt-header.sheet-color-dark { + background-color: #343a40; + color: #fff; +} + +.sheet-rolltemplate-cof2 .sheet-rt-title { + font-size: large; +} + +.sheet-rolltemplate-cof2 .sheet-rt-2cols { + display: grid; + grid-template-columns: 40% 60%; + gap: 2px; + padding: 5px; +} + +.sheet-rolltemplate-cof2 .sheet-rt-token { + width: 48px; + height: 48px; +} + +.sheet-rolltemplate-cof2 .sheet-rt-roll { + text-align: center; + font-size: large; + padding: 5px; + margin: 5px; +} + +.sheet-rolltemplate-cof2 .sheet-rt-text { + font-size: small; + padding: 5px; +} + +.sheet-rolltemplate-cof2 .inlinerollresult { + background-color: white; + border: 2px burlywood solid; + border-radius: 25%; + font-weight: bold; +} + +.sheet-rolltemplate-cof2 .sheet-rt-hidden { + display: none; +} + +.sheet-rolltemplate-cof2 .sheet-rt-critical { + color: green; + font-weight: bold; +} + +.sheet-rolltemplate-cof2 .sheet-rt-fumble { + color: red; + font-weight: bold; +} + +.sheet-rolltemplate-cof2 .sheet-rt-secondary { + color: steelblue; +} + +/* Jakob's better default roll template for Roll20 */ +/* https://gist.github.com/joesinghaus/28173990b3235365f6e13fb9f834aa5d */ +/* Changed default font and background color to match sheet look-and-feel */ + +/* Smaller margins - remove these if you want the huge default left margin */ +.sheet-rolltemplate-custom { + margin-left: -37px; + font-family: "Merriweather Sans"; +} +.withoutavatars .sheet-rolltemplate-custom { + margin-left: -7px; +} +.sheet-rolltemplate-custom .sheet-container { + border: 1px solid; + /* by default, the border is the same color as the header. You can change this here, e.g. to black */ + border-color: var(--header-bg-color); +} + +/* Header formatting - title and subtitle */ +.sheet-rolltemplate-custom .sheet-header { + background-color: var(--header-bg-color); + /* change text-align to center to center the header text */ + text-align: center; + color: var(--header-text-color); + padding: 5px; +} +.sheet-rolltemplate-custom .sheet-title { + font-size:1.1em; +} +.sheet-rolltemplate-custom .sheet-subtitle { + font-size:.9em; +} + +/* example colors */ +.sheet-rolltemplate-custom .sheet-container { + /* this is the default color */ + --header-bg-color: burlywood; + --header-text-color: #000; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-blue { + --header-bg-color: #0d6efd; + --header-text-color: #fff; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-indigo { + --header-bg-color: #6610f2; + --header-text-color: #fff; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-purple { + --header-bg-color: #6f42c1; + --header-text-color: #fff; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-pink { + --header-bg-color: #d63384; + --header-text-color: #fff; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-red { + --header-bg-color: #dc3545; + --header-text-color: #fff; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-orange { + --header-bg-color: #fd7e14; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-yellow { + --header-bg-color: #ffc107; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-green { + --header-bg-color: #198754; + --header-text-color: #fff; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-teal { + --header-bg-color: #20c997; + --header-text-color: #fff; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-cyan { + --header-bg-color: #0dcaf0; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-gray { + --header-bg-color: #6c757d; + --header-text-color: #fff; +} +.sheet-rolltemplate-custom .sheet-container.sheet-color-dark { + --header-bg-color: #343a40; + --header-text-color: #fff; +} + +/* All props part */ +.sheet-rolltemplate-custom .sheet-content { + display: grid; + background: #FFF; + /* Header formatting - modify the column layout below */ + grid-template-columns: auto auto; + /* Line height to match default roll template */ + line-height:1.4em; +} +.sheet-rolltemplate-custom .sheet-content > div { + padding: 5px; +} + +/* Left column */ +.sheet-rolltemplate-custom .sheet-content .sheet-key { + font-weight: bold; + padding-right: 10px; + text-align: right; +} + +/* Empty rule, use this if you want to change the right column +.sheet-rolltemplate-custom .sheet-value { +} +*/ + +/* Make even-numbered rows grey */ +.sheet-rolltemplate-custom .sheet-content :nth-child(4n+3), +.sheet-rolltemplate-custom .sheet-content :nth-child(4n) { + background:#EEE; +} + +/* Description field */ +.sheet-rolltemplate-custom .sheet-desc { + grid-column: span 2; + padding: 5px; + text-align: center; +} \ No newline at end of file diff --git a/ChroniquesOublieesFantasy2/cof2e.html b/ChroniquesOublieesFantasy2/cof2e.html new file mode 100644 index 000000000000..106e43b99845 --- /dev/null +++ b/ChroniquesOublieesFantasy2/cof2e.html @@ -0,0 +1,7908 @@ +