Compare commits

..

15 Commits

Author SHA1 Message Date
Vlyan
dc00657f84 Release 1.9.6 2023-05-14 14:52:17 +02:00
Vlyan
503e4e365f Merge branch 'fix-character-sheet-header' into 'dev'
Fix character sheet header

See merge request teaml5r/l5r5e!27
2023-05-04 14:02:04 +00:00
Bragma
69e08b6a33 Fix character sheet header 2023-05-04 14:02:03 +00:00
Vlyan
723e7cd934 added changelog for 1.9.6 2023-04-05 14:30:52 +02:00
Vlyan
2cefd42c28 Merge branch 'conditions' into 'dev'
Added effects panel to both pc and npc.

See merge request teaml5r/l5r5e!26
2023-04-05 12:10:39 +00:00
Bragma
04bfe38136 Added effects panel to both pc and npc. 2023-04-05 12:10:39 +00:00
Vlyan
20d2137a15 Merge branch 'current-stance' into 'dev'
Show current stance on rings panel

See merge request teaml5r/l5r5e!25
2023-03-30 07:06:05 +00:00
Bragma
0916dab259 Show current stance on rings panel 2023-03-30 07:06:05 +00:00
Vlyan
8132a0b459 Journal articles : more subtle article layer (0.5 -> 0.25) 2023-03-26 11:01:38 +02:00
Vlyan
1afa5d151d fix #44 Lists not showing correctly in journal 2023-03-22 08:57:34 +01:00
Vlyan
242d31438b fix #44 Lists not showing correctly in journal 2023-03-22 08:56:26 +01:00
Vlyan
b5def3fb93 added wiki page "Using CUB for Modifiers" 2023-01-13 09:47:03 +01:00
Vlyan
71c03b8a5d Characters can now have bonus endurance/composure/focus/vigilance from conditions (thx to Perkuns). 2023-01-11 10:18:04 +01:00
Vlyan
d6ba994ae6 Merge branch 'bonusAttributesFromConditions' into 'dev'
Actors can now have bonus endurance/composure/focus/vigilance from conditions

See merge request teaml5r/l5r5e!24
2023-01-09 21:21:20 +00:00
Perkuns
cab98451cd Actors can now have bonus endurance/composure/focus/vigilance from conditions 2023-01-09 21:21:20 +00:00
18 changed files with 8974 additions and 77 deletions

View File

@@ -1,6 +1,15 @@
# Changelog
Date format : day/month/year
## 1.9.6 - 14/05/2023 - Bragma's QoL
All these changes are thanks to Bragma.
- Added effects panel to both pc and npc (!26).
- Added a underline on rings to show current stance (!25).
- Fix Lists not showing correctly in journal (#44).
## 1.9.5 - 11/01/2023 - Adding Modifiers
- Characters can now have bonus endurance/composure/focus/vigilance from conditions (thx to Perkuns).
## 1.9.4 - 31/12/2022 - Last bugfixes of the Year !
- Fix prepared settings bugs (trackers icons sometimes disappears).
- GM Toolbox : Left clic do only actors with an active player as owner.

8771
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -162,6 +162,13 @@ export class ActorL5r5e extends Actor {
system.composure = (Number(system.rings.earth) + Number(system.rings.water)) * 2;
system.focus = Number(system.rings.air) + Number(system.rings.fire);
system.vigilance = Math.ceil((Number(system.rings.air) + Number(system.rings.water)) / 2);
// Modifiers from conditions
const modifiers = system.modifiers?.character;
system.endurance = system.endurance + (Number(modifiers?.endurance) || 0);
system.composure = system.composure + (Number(modifiers?.composure) || 0);
system.focus = system.focus + (Number(modifiers?.focus) || 0);
system.vigilance = system.vigilance + (Number(modifiers?.vigilance) || 0);
}
/**

View File

@@ -3,16 +3,16 @@
* @extends {JournalSheet}
*/
export class BaseJournalSheetL5r5e extends JournalSheet {
// /** @override */
// static get defaultOptions() {
// return foundry.utils.mergeObject(super.defaultOptions, {
// classes: ["l5r5e", "sheet", "journal"], // app window-app sheet journal-sheet
// template: CONFIG.l5r5e.paths.templates + "journal/journal-sheet.html",
// width: 520,
// height: 480,
// tabs: [{ navSelector: ".journal-tabs", contentSelector: ".journal-body", initial: "description" }],
// });
// }
/** @override */
static get defaultOptions() {
return foundry.utils.mergeObject(super.defaultOptions, {
classes: ["sheet", "journal-sheet", "journal-entry", "l5r5e", "sheet", "journal"], // sheet journal-sheet journal-entry
// template: CONFIG.l5r5e.paths.templates + "journal/journal-sheet.html",
// width: 520,
// height: 480,
// tabs: [{ navSelector: ".journal-tabs", contentSelector: ".journal-body", initial: "description" }],
});
}
/**
* Add the SendToChat button on top of sheet

View File

@@ -13,6 +13,7 @@ export const PreloadTemplates = async function () {
`${tpl}actors/character/inventory.html`,
`${tpl}actors/character/narrative.html`,
`${tpl}actors/character/rings.html`,
`${tpl}actors/character/effects.html`,
`${tpl}actors/character/skill.html`,
`${tpl}actors/character/social.html`,
`${tpl}actors/character/stance.html`,
@@ -25,6 +26,7 @@ export const PreloadTemplates = async function () {
`${tpl}actors/npc/inventory.html`,
`${tpl}actors/npc/narrative.html`,
`${tpl}actors/npc/rings.html`,
`${tpl}actors/npc/effects.html`,
`${tpl}actors/npc/social.html`,
`${tpl}actors/npc/skill.html`,
`${tpl}actors/npc/techniques.html`,

File diff suppressed because one or more lines are too long

View File

@@ -96,7 +96,7 @@
width: 100%;
line-height: 2rem;
font-size: 0.75rem;
margin: 0 0 0.5rem;
margin: 0.5rem 0;
text-align: center;
li {
flex: 1;

View File

@@ -29,7 +29,9 @@
line-height: 0;
float: right;
}
label.stance-active strong {
text-decoration: underline 2px;
}
input {
position: absolute;
height: 2rem;

View File

@@ -23,7 +23,6 @@
}
&.actor {
.sheet-header {
height: 26rem;
h1 {
flex: auto;
margin: 0 0 0.25rem 0.5rem;
@@ -53,6 +52,37 @@
.sheet-body {
flex: 0 0 100%;
align-items: flex-start;
.effects {
clear: both;
display: flex;
flex-wrap: wrap;
gap: 2px 4px;
.effect-container {
border: 1px solid #5a6e5a;
border-radius: 4px;
background-color: rgba(0, 0, 0, 0.4);
padding: 3px;
}
.effect-icon {
width: 16px;
height: 16px;
background-repeat: no-repeat;
background-size: contain;
float: left;
}
.effect-name {
vertical-align: top;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: $white;
float: right;
margin-left: 4px;
font-size: 14px;
line-height: 16px;
max-width: 140px;
}
}
}
section,
article {
@@ -127,13 +157,9 @@
}
}
.header-fields {
position: relative;
flex: 0 0 100%;
h2 {
font-family: $font-secondary;
font-size: 1rem;
float: left;
width: 30%;
padding: 0.25rem 0.25rem 0;
margin: 1rem 20% 0 0;
text-align: center;
@@ -234,18 +260,22 @@
}
}
}
.rings {
float: left;
.mid-wrapper {
display: flex;
}
.side-col {
width: 30%;
}
.central-col {
width: 40%;
}
.rings {
padding: 0;
position: relative;
top: -1.5rem;
margin-top: 1rem;
}
.social-content,
.attributes-wrapper {
flex: none;
float: left;
width: 30%;
flex-wrap: wrap;
display: flex;
padding: 0.5rem 0 0 0.25rem;
@@ -546,7 +576,7 @@
}
}
article {
background: $l5r5e-white;
background: $l5r5e-white-light;
padding: 0.5rem;
flex-wrap: wrap;
min-height: calc(100% - 3.25rem);
@@ -893,6 +923,18 @@
flex: 100%;
}
}
// Restore list style
&.journal .journal-page-content {
ul {
margin: 0.5rem 0;
}
li {
list-style-type: initial;
margin: 0.5rem 0 0.5rem 1.5rem;
padding: 0;
}
}
}
// Lang Adjust.
&.sheet {

View File

@@ -7,8 +7,8 @@
"changelog": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md",
"license": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/LICENSE.md",
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.9.4/raw/l5r5e.zip?job=build",
"version": "1.9.4",
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.9.6/raw/l5r5e.zip?job=build",
"version": "1.9.6",
"compatibility": {
"minimum": 10,
"verified": "10.291"

View File

@@ -1,27 +1,39 @@
<form class="{{cssClass}}" data-lang="{{localize 'I18N.Language'}}" autocomplete="off">
{{!-- L5R Button bar --}}
<div class="l5r-buttons-bar">
{{#each l5rHeaderButtons}}
{{#each l5rHeaderButtons}}
<a class="l5r-header-button {{this.class}}"><i class="{{this.icon}}"></i>{{localize this.label}}</a>
{{/each}}
{{/each}}
</div>
{{!-- Sheet Header --}}
<header class="sheet-header">
<img class="profile-img dragndrop-actor-uuid pointer" src="{{data.img}}" {{#if data.editable_not_soft_locked}}data-edit="img"{{/if}} data-actor-uuid="{{actor.uuid}}" draggable="true" title="{{data.name}}"/>
<img class="profile-img dragndrop-actor-uuid pointer" src="{{data.img}}" {{#if
data.editable_not_soft_locked}}data-edit="img" {{/if}} data-actor-uuid="{{actor.uuid}}" draggable="true"
title="{{data.name}}" />
<div class="header-fields identity-wrapper">
<h1 class="charname"><input name="name" type="text" value="{{data.name}}" placeholder="Name" {{^if data.editable_not_soft_locked}}disabled{{/if}}/></h1>
<h1 class="charname">
<input name="name" type="text" value="{{data.name}}" placeholder="Name" {{^if
data.editable_not_soft_locked}}disabled{{/if}} />
</h1>
{{> 'systems/l5r5e/templates/actors/character/identity.html'}}
</div>
<div class="header-fields">
<h2>{{localize 'l5r5e.social.title'}}</h2>
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/character/social.html'}}
{{> 'systems/l5r5e/templates/actors/character/rings.html'}}
{{> 'systems/l5r5e/templates/actors/character/attributes.html'}}
<div class="header-fields mid-wrapper">
<div class="side-col">
<h2>{{localize 'l5r5e.social.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/character/social.html'}}
</div>
<div class="central-col">{{> 'systems/l5r5e/templates/actors/character/rings.html'}}</div>
<div class="side-col">
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/character/attributes.html'}}
</div>
</div>
</header>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Active effects --}}
{{> 'systems/l5r5e/templates/actors/character/effects.html'}}
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
<a class="item" data-tab="skills">{{localize 'l5r5e.skills.title'}}</a>
@@ -34,8 +46,8 @@
{{!-- Skills Tab --}}
<article class="tab skills" data-group="primary" data-tab="skills">
<ul class="skills-wrapper">
{{#each data.system.skills as |category id|}}
{{> 'systems/l5r5e/templates/actors/character/category.html' category=category categoryId=id data=../data}}
{{#each data.system.skills as |category id|}} {{>
'systems/l5r5e/templates/actors/character/category.html' category=category categoryId=id data=../data}}
{{/each}}
</ul>
{{> 'systems/l5r5e/templates/actors/character/techniques.html'}}
@@ -61,4 +73,4 @@
{{> 'systems/l5r5e/templates/actors/character/experience.html'}}
</article>
</section>
</form>
</form>

View File

@@ -0,0 +1,8 @@
<ul class="effects">
{{#each actor.effects as |effect|}}
<li class="effect-container" title="{{label}}">
<div class="effect-icon" style="background-image: url({{effect.icon}})"></div>
<div class="effect-name"><label>{{label}}</label></div>
</li>
{{/each}}
</ul>

View File

@@ -1,34 +1,34 @@
<ul class="rings">
<li id="earth">
<label class="earth">
<label class="earth {{#ifCond 'earth' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_earth dice-picker rollable" data-ring="earth"></i>
<strong>{{localizeRing 'earth'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.earth" value="{{data.system.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="air">
<label class="air">
<label class="air {{#ifCond 'air' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_air dice-picker rollable" data-ring="air"></i>
<strong>{{localizeRing 'air'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.air" value="{{data.system.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="water">
<label class="water">
<label class="water {{#ifCond 'water' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_water dice-picker rollable" data-ring="water"></i>
<strong>{{localizeRing 'water'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.water" value="{{data.system.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="fire">
<label class="fire">
<label class="fire {{#ifCond 'fire' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_fire dice-picker rollable" data-ring="fire"></i>
<strong>{{localizeRing 'fire'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.fire" value="{{data.system.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="void">
<label class="void">
<label class="void {{#ifCond 'void' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_void dice-picker rollable" data-ring="void"></i>
<strong>{{localizeRing 'void'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.void" value="{{data.system.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>

View File

@@ -1,27 +1,39 @@
<form class="{{cssClass}}" data-lang="{{localize 'I18N.Language'}}" autocomplete="off">
{{!-- L5R Button bar --}}
<div class="l5r-buttons-bar">
{{#each l5rHeaderButtons}}
{{#each l5rHeaderButtons}}
<a class="l5r-header-button {{this.class}}"><i class="{{this.icon}}"></i>{{localize this.label}}</a>
{{/each}}
{{/each}}
</div>
{{!-- Sheet Header --}}
<header class="sheet-header">
<div class="header-fields identity-wrapper">
<img class="profile-img dragndrop-actor-uuid pointer" src="{{data.img}}" {{#if data.editable_not_soft_locked}}data-edit="img"{{/if}} data-actor-uuid="{{actor.uuid}}" draggable="true" title="{{data.name}}"/>
<h1 class="charname"><input name="name" type="text" value="{{data.name}}" placeholder="Name" {{^if data.editable_not_soft_locked}}disabled{{/if}}/></h1>
<img class="profile-img dragndrop-actor-uuid pointer" src="{{data.img}}" {{#if
data.editable_not_soft_locked}}data-edit="img" {{/if}} data-actor-uuid="{{actor.uuid}}" draggable="true"
title="{{data.name}}" />
<h1 class="charname">
<input name="name" type="text" value="{{data.name}}" placeholder="Name" {{^if
data.editable_not_soft_locked}}disabled{{/if}} />
</h1>
{{> 'systems/l5r5e/templates/actors/npc/identity.html'}}
</div>
<div class="header-fields">
<h2>{{localize 'l5r5e.social.title'}}</h2>
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/npc/social.html'}}
{{> 'systems/l5r5e/templates/actors/npc/rings.html'}}
{{> 'systems/l5r5e/templates/actors/npc/attributes.html'}}
<div class="header-fields mid-wrapper">
<div class="side-col">
<h2>{{localize 'l5r5e.social.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/npc/social.html'}}
</div>
<div class="central-col">{{> 'systems/l5r5e/templates/actors/npc/rings.html'}}</div>
<div class="side-col">
<h2 class="right">{{localize 'l5r5e.attributes.title'}}</h2>
{{> 'systems/l5r5e/templates/actors/npc/attributes.html'}}
</div>
</div>
</header>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{!-- Active effects --}}
{{> 'systems/l5r5e/templates/actors/npc/effects.html'}}
{{!-- Skills No Tab --}}
{{> 'systems/l5r5e/templates/actors/npc/skill.html'}}
@@ -45,9 +57,9 @@
{{!-- Conflict Tab --}}
<article class="tab conflict" data-group="primary" data-tab="conflict">
{{> 'systems/l5r5e/templates/actors/npc/conflict.html'}}
{{> 'systems/l5r5e/templates/items/weapon/weapons.html'}}
{{> 'systems/l5r5e/templates/items/armor/armors.html'}}
{{> 'systems/l5r5e/templates/actors/npc/conflict.html'}} {{>
'systems/l5r5e/templates/items/weapon/weapons.html'}} {{>
'systems/l5r5e/templates/items/armor/armors.html'}}
</article>
{{!-- Inventory Tab --}}
@@ -55,4 +67,4 @@
{{> 'systems/l5r5e/templates/actors/npc/inventory.html'}}
</article>
</section>
</form>
</form>

View File

@@ -0,0 +1,8 @@
<ul class="effects">
{{#each actor.effects as |effect|}}
<li class="effect-container" title="{{label}}">
<div class="effect-icon" style="background-image: url({{effect.icon}})"></div>
<div class="effect-name"><label>{{label}}</label></div>
</li>
{{/each}}
</ul>

View File

@@ -1,34 +1,34 @@
<ul class="rings">
<li id="earth">
<label class="earth">
<label class="earth {{#ifCond 'earth' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_earth dice-picker rollable" data-ring="earth"></i>
<strong>{{localizeRing 'earth'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.earth" value="{{data.system.rings.earth}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="air">
<label class="air">
<label class="air {{#ifCond 'air' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_air dice-picker rollable" data-ring="air"></i>
<strong>{{localizeRing 'air'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.air" value="{{data.system.rings.air}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="water">
<label class="water">
<label class="water {{#ifCond 'water' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_water dice-picker rollable" data-ring="water"></i>
<strong>{{localizeRing 'water'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.water" value="{{data.system.rings.water}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="fire">
<label class="fire">
<label class="fire {{#ifCond 'fire' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_fire dice-picker rollable" data-ring="fire"></i>
<strong>{{localizeRing 'fire'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.fire" value="{{data.system.rings.fire}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>
</label>
</li>
<li id="void">
<label class="void">
<label class="void {{#ifCond 'void' '==' data.system.stance}}stance-active{{/ifCond}}">
<i class="i_void dice-picker rollable" data-ring="void"></i>
<strong>{{localizeRing 'void'}}</strong>
<input class="centered-input select-on-focus" type="number" name="system.rings.void" value="{{data.system.rings.void}}" data-dtype="Number" min="1" max="9" placeholder="0" {{^if data.editable_not_soft_locked}}disabled{{/if}}/>

View File

@@ -8,6 +8,7 @@
- [Symbols replacement list](users/symbols.md)
- [Advanced : Techniques skill and difficulty syntaxe](users/techniques-syntaxe.md)
- [Advanced : Custom Compendiums](users/custom-compendiums.md)
- [Advanced : Using CUB for modifiers](users/cub-modifiers.md)
## For developers
- [System helping (Contribute)](dev/system-helping.md)

View File

@@ -0,0 +1,49 @@
# Using CUB for Modifiers
> ⚠ The module [Combat Utility Belt](https://foundryvtt.com/packages/combat-utility-belt) is required.
## Attributes modifiers
Replace `<attribute>` with actual attribute (i.e. `endurance`, `vigilance`, `focus`, `composure`) and `<number>` with actual number to be added.
When setup in CUB this would modify PC derived attributes to increase or reduce them by the number given.
Allows automating certain invocations and item effects (such as the cursed Kama from Sins of Regret supplement).
### For `character` type
Syntaxe:
> system.modifiers.character.`<attribute>` += `<number>`
Examples:
> system.modifiers.character.endurance += 1 // add 1
> <br>system.modifiers.character.focus += -2 // remove 2
### For `adversary` or `minion` types
Syntaxe:
> system.`<attribute>` += `<number>`
Exemples:
> system.vigilance += 1 // add 1
> <br>system.composure += -2 // remove 2
## Rings/Skills modifiers
Both PCs and NPCs can have their skills and rings increased as well by conditions (should you wish to ignore some of the RAW).
Syntaxe:
> system.rings.`<ring>` += `<number>`
> <br>system.skills.`<skillGroup>`.`<skill>` += `<number>` // for PCs
> <br>system.skills.`<skillGroup>` += `<number>` // for NPCs
Exemples:
> system.rings.earth += 1
> <br>system.skills.artisan.aesthetics += 1 // for PCs
> <br>system.skills.martial += -1 // for NPCs
The above need to be setup as conditions using CUB at the moment so that they can be added/removed as required.
Regarding skills and rings modifiers, I believe you would need to remove them temporarily for advancements as it might cause extra XP to be spent, but yet to test it fully.