Compare commits

..

20 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
Vlyan
ac43982f24 Release v1.9.4 2022-12-31 13:58:07 +01:00
Vlyan
c5c5d173db Fix prepared settings bugs ("null" -> "actor") 2022-12-31 13:56:19 +01:00
Vlyan
9446e08433 Compendiums : Added Celestial Realms missing Titles : Bond with a spirit and Moon cultist. 2022-12-31 13:26:13 +01:00
Vlyan
14e18fdc8e updated package and glup file with newser version of sass 2022-12-09 16:19:39 +01:00
Vlyan
b219f4aee6 GM Toolbox : Left clic do only actors with an active player as owner. 2022-10-11 14:36:34 +02:00
32 changed files with 9988 additions and 2355 deletions

View File

@@ -1,6 +1,20 @@
# 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.
- Compendiums : Added Celestial Realms missing Titles : `Bond with a spirit` and `Moon cultist`.
## 1.9.3 - 29/09/2022 - Combat Tracker
- Fix for L5R combat tracker bar who have disappeared.

View File

@@ -1,7 +1,7 @@
// Requires
const gulp = require("gulp");
const prefix = require("gulp-autoprefixer");
const sass = require("gulp-sass");
const sass = require("gulp-sass")(require('sass'));
const browserSync = require("browser-sync");
/* ----------------------------------------- */

11930
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -20,22 +20,16 @@
"homepage": "https://gitlab.com/teaml5r/l5r5e#readme",
"devDependencies": {
"babel-eslint": "^10.1.0",
"browser-sync": "^2.23.7",
"eslint": "^7.15.0",
"eslint-config-prettier": "^6.15.0",
"eslint-plugin-prettier": "^3.1.4",
"browser-sync": "^2.27.10",
"eslint": "^8.27.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
"gulp": "^4.0.2",
"gulp-autoprefixer": "^7.0.1",
"gulp-sass": "^4.1.0",
"husky": "^4.3.0",
"gulp-autoprefixer": "^8.0.0",
"gulp-sass": "^5.1.0",
"lint-staged": "^10.5.1",
"node-sass": "^4.14.1",
"prettier": "^2.1.2"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
"sass": "^1.56.1",
"prettier": "^2.7.1"
},
"lint-staged": {
"*.js": "eslint --cache --fix",

View File

@@ -274,6 +274,18 @@
"name": "Yōkai Hunter (WIP)",
"description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Compétences Martiales</td><td>Grp. de comp.</td></tr><tr><td>Commandement</td><td>Compétence</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Survie</td><td>Compétence</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000030\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000030\">(kiho) Blistering Retribution (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000070\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000070\">(kata) Swallows Dart Style (WIP)</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000071\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000071\">(kata) Tigers Lunge Style (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
"book_reference": "Décret de la nature"
},
{
"id": "Bond with a spirit",
"name": "Bond with a spirit (WIP)",
"description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Esthétique</td><td>Compétence</td></tr><tr><td>Jeux</td><td>Compétence</td></tr><tr><td>Méditation</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Invocations (Eléments de l'esprit) de rang 1</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000002\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000002\">(ritual) Communier avec les esprits</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000022\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000022\">(ritual) Blessing of Fertile Fields (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
"book_reference": "Les Royaumes Célestes"
},
{
"id": "Moon cultist",
"name": "Moon cultist (WIP)",
"description": "<h2>Cursus</h2><table><tr><td>Compétences Savantes</td><td>Grp. de comp.</td></tr><tr><td>Composition</td><td>Compétence</td></tr><tr><td>Courtoisie</td><td>Compétence</td></tr><tr><td>Forme</td><td>Compétence</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Invocations de lEau de rang 1-2</a></td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-invocations.L5RCoreInv000052\" data-pack=\"l5r5e.core-techniques-invocations\" data-id=\"L5RCoreInv000052\">(invocation) Mains des marées</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000010\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000010\">(ritual) Whispers to the Moon (Moon Cultist) (WIP)</a> (prereq)</td><td>Technique</td></tr></table>",
"book_reference": "Les Royaumes Célestes"
}
]
}

View File

@@ -374,7 +374,7 @@
"mass_battle": "Mass Battle",
"prepared_true": "Prepared",
"prepared_false": "Surprised",
"prepared_null": "Defined in the character sheet (default)",
"prepared_actor": "Defined in the character sheet (default)",
"already_set": "Your initiative has already been determined"
}
},

View File

@@ -374,7 +374,7 @@
"mass_battle": "Batalla a gran escala",
"prepared_true": "Preparado",
"prepared_false": "Sorprendido",
"prepared_null": "Definido en la hoja de personaje (por defecto)",
"prepared_actor": "Definido en la hoja de personaje (por defecto)",
"already_set": "Tu iniciativa ya ha sido establecida."
}
},

View File

@@ -374,7 +374,7 @@
"mass_battle": "Bataille rangée",
"prepared_true": "Prêt(e)",
"prepared_false": "Surpris(e)",
"prepared_null": "Défini par la fiche de personnage (défaut)",
"prepared_actor": "Défini par la fiche de personnage (défaut)",
"already_set": "Votre initiative a déjà été tirée"
}
},

View File

@@ -374,7 +374,7 @@
"mass_battle": "Battaglia Campale",
"prepared_true": "Preparato",
"prepared_false": "Sorpreso",
"prepared_null": "Definito nella scheda del personaggio (default)",
"prepared_actor": "Definito nella scheda del personaggio (default)",
"already_set": "La tua Iniziativa è già stata determinata."
}
},

View File

@@ -43,3 +43,5 @@
{"_id":"L5RCoreTit000043","name":"Forester","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"24","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Sentiment</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1-2 Earth & Water Invocations</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-shuji\">(shuji) Rank 1-3 Shūji</a> (prereq)</td><td>Tech. Grp.</td></tr></table>","book_reference":"Writ of the Wild p.142"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
{"_id":"L5RCoreTit000044","name":"Temple Abbot","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"36","description":"<h2>Curriculum</h2><table><tr><td>Social Skills</td><td>Skill Group</td></tr><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Culture</td><td>Skill</td></tr><tr><td>Meditation</td><td>Skill</td></tr><tr><td>Theology</td><td>Skill</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000004\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000004\">(ritual) Cleansing Rite</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000025\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000025\">(kiho) Rejuvenating Breath</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-shuji.L5RCoreShu000011\" data-pack=\"l5r5e.core-techniques-shuji\" data-id=\"L5RCoreShu000011\">(shuji) Touchstone of Courage</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Writ of the Wild p.143"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
{"_id":"L5RCoreTit000045","name":"Yōkai Hunter","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"36","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Martial Skills</td><td>Skill Group</td></tr><tr><td>Command</td><td>Skill</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Survival</td><td>Skill</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kiho.L5RCoreKih000030\" data-pack=\"l5r5e.core-techniques-kiho\" data-id=\"L5RCoreKih000030\">(kiho) Blistering Retribution</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000070\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000070\">(kata) Swallows Dart Style</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-kata.L5RCoreKat000071\" data-pack=\"l5r5e.core-techniques-kata\" data-id=\"L5RCoreKat000071\">(kata) Tigers Lunge Style</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Writ of the Wild p.143"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
{"_id":"L5RCoreTit000046","name":"Bond with a spirit","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"25","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Aesthetics</td><td>Skill</td></tr><tr><td>Games</td><td>Skill</td></tr><tr><td>Meditation</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1 Spirit's Elements Invocations</a> (prereq)</td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000002\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000002\">(ritual) Commune with the Spirits</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000022\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000022\">(ritual) Blessing of Fertile Fields</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Celestial Realms p.140"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}
{"_id":"L5RCoreTit000047","name":"Moon cultist","permission":{"default":0},"type":"title","data":{"in_curriculum":false,"xp_used":0,"rank":1,"bought_at_rank":0,"ring":"void","xp_cost":"30","description":"<h2>Curriculum</h2><table><tr><td>Scholar Skills</td><td>Skill Group</td></tr><tr><td>Composition</td><td>Skill</td></tr><tr><td>Courtesy</td><td>Skill</td></tr><tr><td>Fitness</td><td>Skill</td></tr><tr><td><a class=\"compendium-link\" data-pack=\"l5r5e.core-techniques-invocations\">(invocation) Rank 1-2 Water Invocations</a></td><td>Tech. Grp.</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-invocations.L5RCoreInv000052\" data-pack=\"l5r5e.core-techniques-invocations\" data-id=\"L5RCoreInv000052\">(invocation) Hands of the Tides</a> (prereq)</td><td>Technique</td></tr><tr><td><a class=\"entity-link content-link\" draggable=\"true\" data-uuid=\"Compendium.l5r5e.core-techniques-rituals.L5RCoreRit000010\" data-pack=\"l5r5e.core-techniques-rituals\" data-id=\"L5RCoreRit000010\">(ritual) Whispers to the Moon (Moon Cultist)</a> (prereq)</td><td>Technique</td></tr></table>","book_reference":"Celestial Realms p.140"},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/title.svg","effects":[]}

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);
}
/**
@@ -278,6 +285,14 @@ export class ActorL5r5e extends Actor {
return this.type === "army";
}
/**
* Return true if this actor have an active player as owner
* @returns {boolean}
*/
get hasPlayerOwnerActive() {
return game.users.find((u) => !!u.active && u.character?.id === this.id);
}
/**
* Return true if this actor can do a initiative roll
* @returns {boolean}
@@ -329,7 +344,7 @@ export class ActorL5r5e extends Actor {
// Prepared is a boolean or if null we get the info in the actor
let isPrepared = this.isCharacter ? cfg.character : cfg[this.system.type];
if (isPrepared === "null") {
if (isPrepared === "actor") {
isPrepared = this.system.prepared ? "true" : "false";
}

View File

@@ -1,31 +1,27 @@
export const L5R5E = {};
L5R5E.paths = {
assets: `systems/l5r5e/assets/`,
templates: `systems/l5r5e/templates/`,
};
L5R5E.money = [50, 10];
L5R5E.stances = ["earth", "air", "water", "fire", "void"];
L5R5E.roles = ["artisan", "bushi", "courtier", "monk", "sage", "shinobi", "shugenja"];
L5R5E.xp = {
costPerRank: [0, 20, 24, 32, 44, 60],
bondCostPerRank: [0, 3, 4, 6, 8, 10],
ringCostMultiplier: 3,
skillCostMultiplier: 2,
techniqueCost: 3,
};
L5R5E.regex = {
techniqueDifficulty: /^@([TS]):([^|]+?)(?:\|(min|max)(?:\(([^)]+?)\))?)?$/,
};
L5R5E.initiativeSkills = {
intrigue: "sentiment",
duel: "meditation",
skirmish: "tactics",
mass_battle: "command",
export const L5R5E = {
paths: {
assets: `systems/l5r5e/assets/`,
templates: `systems/l5r5e/templates/`,
},
money: [50, 10],
stances: ["earth", "air", "water", "fire", "void"],
roles: ["artisan", "bushi", "courtier", "monk", "sage", "shinobi", "shugenja"],
xp: {
costPerRank: [0, 20, 24, 32, 44, 60],
bondCostPerRank: [0, 3, 4, 6, 8, 10],
ringCostMultiplier: 3,
skillCostMultiplier: 2,
techniqueCost: 3,
},
regex: {
techniqueDifficulty: /^@([TS]):([^|]+?)(?:\|(min|max)(?:\(([^)]+?)\))?)?$/,
},
initiativeSkills: {
intrigue: "sentiment",
duel: "meditation",
skirmish: "tactics",
mass_battle: "command",
},
};
// *** Techniques ***

View File

@@ -91,7 +91,7 @@ export class GmMonitor extends FormApplication {
actors = game.actors.filter((e) => ids.includes(e.id));
} else {
// If empty add pc with owner
actors = game.actors.filter((actor) => actor.type === "character" && actor.hasPlayerOwner);
actors = game.actors.filter((actor) => actor.type === "character" && actor.hasPlayerOwnerActive);
this._saveActorsIds();
}

View File

@@ -202,7 +202,7 @@ export class GmToolbox extends FormApplication {
}
// Manage left/right button
if (!isAll && (!actor.isCharacter || !actor.hasPlayerOwner)) {
if (!isAll && (!actor.isCharacter || !actor.hasPlayerOwnerActive)) {
continue;
}

View File

@@ -198,9 +198,9 @@ export default class HooksL5r5e {
}
const rev = event.which === 3;
const nextValue = {
false: rev ? "true" : "null",
true: rev ? "null" : "false",
null: rev ? "false" : "true",
false: rev ? "true" : "actor",
true: rev ? "actor" : "false",
actor: rev ? "false" : "true",
};
game.settings.set("l5r5e", `initiative-prepared-${preparedId}`, nextValue[prepared[preparedId]]);
});

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`,

View File

@@ -85,7 +85,7 @@ export const RegisterSettings = function () {
scope: "world",
config: false,
type: String,
default: "null",
default: "actor",
onChange: () => {
game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor");
ui.combat.render(true);
@@ -96,7 +96,7 @@ export const RegisterSettings = function () {
scope: "world",
config: false,
type: String,
default: "null",
default: "actor",
onChange: () => {
game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor");
ui.combat.render(true);
@@ -107,7 +107,7 @@ export const RegisterSettings = function () {
scope: "world",
config: false,
type: String,
default: "null",
default: "actor",
onChange: () => {
game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor");
ui.combat.render(true);

File diff suppressed because one or more lines are too long

View File

@@ -323,7 +323,7 @@ sup {
&-false:before {
content: "\f070";
}
&-null:before {
&-actor:before {
content: "\f2a8";
}
}

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,11 +7,11 @@
"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.3/raw/l5r5e.zip?job=build",
"version": "1.9.3",
"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.286"
"verified": "10.291"
},
"manifestPlusVersion": "1.2.0",
"socket": true,

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.