Compare commits

...

20 Commits

Author SHA1 Message Date
bf94dc30b8 Picture link 2023-08-22 08:35:02 +02:00
fc3b83cfc2 Picture link 2023-08-22 08:34:12 +02:00
19b88c3de9 Add changelog 2023-08-21 15:20:10 +02:00
d669059403 Corrections diverses 2023-08-17 08:31:22 +02:00
45d419115d Needs babele, fix translation, fix margine 2023-08-16 21:17:49 +02:00
b9e2a77e88 Needs babele, fix translation, fix margine 2023-08-16 21:17:34 +02:00
5dca748bf3 v11 ready 2023-08-16 20:52:48 +02:00
98f9e1e2a6 v11 ready 2023-08-16 20:49:26 +02:00
1a90be13be v11 ready 2023-08-16 20:45:23 +02:00
e2f97762b9 Add workflow 2023-08-14 17:39:39 +02:00
de11053a9a Add workflow 2023-08-14 17:02:40 +02:00
3f7ce9918e Add workflow 2023-08-14 16:59:00 +02:00
919147b4af Add workflow 2023-08-14 16:58:18 +02:00
22953744ba Add workflow 2023-08-14 16:55:43 +02:00
6aee41b817 Final import 2023-08-14 16:47:12 +02:00
e7268a1578 Fix NPC sheet 2023-08-09 20:44:25 +02:00
0d25bbe764 Ajout annence et NPC 2023-08-09 17:33:11 +02:00
554a1af531 Annence/Boheme 2023-08-08 18:05:10 +02:00
b2219c0f81 Annence/Boheme 2023-08-08 14:54:39 +02:00
61a1a4a904 Annence/Boheme 2023-08-08 09:08:11 +02:00
49 changed files with 1363 additions and 295 deletions

54
.gitea/workflows/main.yml Normal file
View File

@ -0,0 +1,54 @@
name: Release Creation
on:
release:
types: [published]
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "💡 The ${{ gitea.repository }} repository will cloned to the runner."
#- uses: actions/checkout@v3
- uses: RouxAntoine/checkout@v3.5.4
with:
ref: 'master'
# get part of the tag after the `v`
- name: Extract tag version number
id: get_version
uses: battila7/get-version-action@v2
# Substitute the Manifest and Download URLs in the module.json
- name: Substitute Manifest and Download Links For Versioned Ones
id: sub_manifest_link_version
uses: microsoft/variable-substitution@v1
with:
files: 'system.json'
env:
version: ${{steps.get_version.outputs.version-without-v}}
url: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme
manifest: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/releases/latest/module.json
download: https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/releases/download/${{github.event.release.tag_name}}/fvtt-ecryme.zip
# Create a zip file with all files required by the module to add to the release
- run: |
apt update -y
apt install -y zip
- run: zip -r ./fvtt-ecryme.zip system.json template.json README.md LICENSE.txt fonts/ images/ lang/ modules/ packs/ styles/ templates/ translated/
- name: setup go
uses: https://github.com/actions/setup-go@v4
with:
go-version: '>=1.20.1'
- name: Use Go Action
id: use-go-action
uses: https://gitea.com/actions/release-action@main
with:
files: |-
./fvtt-ecryme.zip
system.json
api_key: '${{secrets.RELEASE_TOKEN_UBERWALD}}'

7
LICENSE.txt Normal file
View File

@ -0,0 +1,7 @@
Copyright 2023 Open Sesame Games
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,6 +1,41 @@
# Système Foundry pour Ecryme v2 (French RPG, Open Sesam Games, Official)
# Ecryme v2 system for FoundryVTT (French RPG, Open Sesam Games, Official)
# Developmement
This is a base game system with functionnal character sheets for the game Ecryme, powered by the Engrenage system.
You can join the kickstarter and obtain the base books here : https://www.kickstarter.com/projects/osg-us/ecryme
Uberwald
# System overview
The game system in Foundry offers the following features :
- PC/NPC sheet
- Skill rolls
- Cephaly rolls (with Anency support)
- Confrontation management, with detailed result in the chat card
- Weapon rolls
- Trait management, with Spleen and Ideal also.
- Compendiums of items for the game
-
![System Snapshot](https://www.lahiette.com/leratierbretonnien/wp-content/uploads/2023/08/ecryme_snapshot_01.webp "System Snapshot")
# Contributions
- Original code realised by Uberwald (https://www.uberwald.me/)
# English translation
English translation by Conal Longden and Ian McClung
# Copyright mentions
Copyright 2023 Open Sesame Games
All rights reserved
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Ecryme is a game written by Alexandre Clavel and Samuel Metzener, in a universe created by Mathieu gaborit. All of the aforementionned authors retain there moral rights regarding this work in both print and digital formats.
# Requests or Problems
Please report any requests or problems you have at contact@open-sesame.games

7
changelog.md Normal file
View File

@ -0,0 +1,7 @@
v11.0.30
Snapshot and more detailed README
v11.0.28
Initial release

View File

@ -1,7 +1,9 @@
{
"TYPES": {
"Actor": {
"Personnage": "PC"
"pc": "Player Character",
"npc": "Non-Player Character",
"annency": "Annency"
},
"Item": {
"trait": "Trait",
@ -16,7 +18,8 @@
"cogs": "Cogs",
"cephaly": "Cephaly",
"boheme": "Boheme",
"amertume": "Amertume"
"amertume": "Amertume",
"gamelevel": "Game level"
},
"chat": {
"formula": "Formula",
@ -145,7 +148,19 @@
"psyche": "Psyche",
"scoria": "Scoria",
"cephalydifficulty": "Set Cephaly difficulty",
"maneuvers": "Maneuvers"
"maneuvers": "Maneuvers",
"annency": "Annency",
"iscollective": "Collective",
"ismultiple": "Multiple",
"description": "Description",
"location": "Location",
"characters": "Characters",
"enhancements": "Enhancements",
"oniricform": "Oniric shape (Boheme)",
"ideals": "Ideals",
"politic": "Political ideal",
"boheme": "Boheme",
"annencybonus": "Annency bonus"
}
}
}

View File

@ -1,7 +1,9 @@
{
"TYPES": {
"Actor":{
"Personnage": "PJ"
"pc": "Personnage Joueur",
"npc": "Personnage Non Joueur",
"annency": "Anence"
},
"Item": {
"trait": "Trait",
@ -16,7 +18,8 @@
"cogs": "Engrenages",
"cephaly": "Céphalie",
"boheme": "Bohême",
"amertume": "Amertume"
"amertume": "Amertume",
"gamelevel": "Niveau de jeu"
},
"chat": {
"formula": "Formule",
@ -34,10 +37,10 @@
},
"rule": {
"cephaly-success-12": "Durée : 1 scène - Impact : Superficiel - Bonus : 1 - Elegie : 1",
"cephaly-success-34": "Durée : 1 semaine - Impact : Léger - Bonus : 2 - Elegie : 2",
"cephaly-success-56": "Durée : 1 mois - Impact : Grave - Bonus : 3 - Elegie : 3",
"cephaly-success-78": "Durée : 1 année - Impact : Majeur - Bonus : 4 - Elegie : 4",
"cephaly-success-910": "Durée : Permanent - Impact : Mort - Bonus : 5 - Elegie : 5",
"cephaly-success-4": "Durée : 1 semaine - Impact : Léger - Bonus : 2 - Elegie : 2",
"cephaly-success-6": "Durée : 1 mois - Impact : Grave - Bonus : 3 - Elegie : 3",
"cephaly-success-8": "Durée : 1 année - Impact : Majeur - Bonus : 4 - Elegie : 4",
"cephaly-success-10": "Durée : Permanent - Impact : Mort - Bonus : 5 - Elegie : 5",
"cephaly-failure-2": "Durée : 1 scène - Impact : Superficiel - Malus : 1 - Symptôme non visible et sans gravité - Altération bégigne difficilement repérable",
"cephaly-failure-4": "Durée : 1 semaine - Impact : Léger - Malus : 2 - Symptôme visible non incapacitant - Altération repérable",
"cephaly-failure-6": "Durée : 1 mois - Impact : Grave - Malus : 3 - Symptôme incapacitant - Altération repérable et fâcheuse",
@ -146,7 +149,19 @@
"psyche": "Psyché",
"scoria": "Scorie",
"cephalydifficulty": "Difficulté de la Céphalie",
"maneuvers": "Manoeuvres"
"maneuvers": "Manoeuvres",
"annency": "Anence",
"iscollective": "Collective",
"ismultiple": "Multiple",
"description": "Description",
"location": "Lieu",
"characters": "Personnages",
"enhancements": "Améliorations",
"oniricform": "Forme Onorique (Bohême)",
"ideals": "Idéaux",
"politic": "Idéaux politiques",
"boheme": "Bohême",
"annencybonus": "Bonus d'Anence"
}
}
}

View File

@ -48,8 +48,11 @@ export class EcrymeActorSheet extends ActorSheet {
archetype: duplicate(this.actor.getArchetype()),
equipements: this.actor.getEquipments(),
hasCephaly: EcrymeUtility.hasCephaly(),
hasBoheme: EcrymeUtility.hasBoheme(),
hasAmertume: EcrymeUtility.hasAmertume(),
cephalySkills: this.actor.getCephalySkills(),
subActors: duplicate(this.actor.getSubActors()),
annency: this.actor.getAnnency(),
description: await TextEditor.enrichHTML(this.object.system.description, { async: true }),
notes: await TextEditor.enrichHTML(this.object.system.notes, { async: true }),
equipementlibre: await TextEditor.enrichHTML(this.object.system.equipementlibre, { async: true }),
@ -77,6 +80,12 @@ export class EcrymeActorSheet extends ActorSheet {
if (e.keyCode === 13) return false;
});
html.find('.open-annency').click(ev => {
let actorId = $(ev.currentTarget).data("annency-id")
const actor = game.actors.get(actorId)
actor.sheet.render(true)
})
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item")

View File

@ -54,6 +54,18 @@ export class EcrymeActor extends Actor {
super._preUpdate(changed, options, user);
}
/* -------------------------------------------- */
async _preCreate(data, options, user) {
await super._preCreate(data, options, user);
// Configure prototype token settings
const prototypeToken = {};
if (this.type === "pc") Object.assign(prototypeToken, {
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
});
this.updateSource({ prototypeToken });
}
/* -------------------------------------------- */
getMoneys() {
let comp = this.items.filter(item => item.type == 'money');
@ -68,6 +80,31 @@ export class EcrymeActor extends Actor {
return comp;
}
/* -------------------------------------------- */
buildAnnencyActorList() {
let membersFull = {}
for(let id of this.system.base.characters) {
let actor = game.actors.get(id)
membersFull[id] = { name: actor.name, id: actor.id, img: actor.img }
}
return membersFull
}
/* ----------------------- --------------------- */
addAnnencyActor(actorId) {
let members = duplicate(this.system.base.characters)
members.push(actorId)
this.update({ 'system.base.characters': members })
}
async removeAnnencyActor(actorId) {
let members = this.system.base.characters.filter(id => id != actorId)
this.update({ 'system.base.characters': members })
}
/* -------------------------------------------- */
getAnnency() {
return game.actors.find(a => a.type == 'annency' && a.system.base.characters.includes(this.id))
}
/* -------------------------------------------- */
getConfrontations() {
return this.items.filter(it => it.type == "confrontation")
@ -311,7 +348,7 @@ export class EcrymeActor extends Actor {
/* -------------------------------------------- */
modifyConfrontBonus( modifier ) {
let newBonus = this.system.internals.confrontbonus + bonus
let newBonus = this.system.internals.confrontbonus + modifier
this.update({'system.internals.confrontbonus': newBonus})
}
@ -391,6 +428,7 @@ export class EcrymeActor extends Actor {
let rollData = this.getCommonRollData()
rollData.mode = "cephaly"
rollData.skill = duplicate(this.system.cephaly.skilllist[skillKey])
rollData.annency = duplicate(this.getAnnency())
rollData.img = rollData.skill.img
rollData.skill.categKey = "cephaly"
rollData.skill.skillKey = skillKey
@ -419,6 +457,8 @@ export class EcrymeActor extends Actor {
rollData.title = game.i18n.localize("ECRY.ui.confrontation") + " : " + game.i18n.localize(rollData.skill.name)
rollData.executionTotal = rollData.skill.value
rollData.preservationTotal = rollData.skill.value
rollData.traitsBonus = duplicate(rollData.traits)
rollData.traitsMalus = duplicate(rollData.traits)
rollData.applyTranscendence = "execution"
let confrontStartDialog = await EcrymeConfrontStartDialog.create(this, rollData)
confrontStartDialog.render(true)

View File

@ -0,0 +1,143 @@
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
import { EcrymeUtility } from "../common/ecryme-utility.js";
/* -------------------------------------------- */
export class EcrymeAnnencySheet extends ActorSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
classes: ["fvtt-ecryme", "sheet", "actor"],
template: "systems/fvtt-ecryme/templates/actors/annency-sheet.hbs",
width: 640,
height: 600,
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "annency" }],
dragDrop: [{ dragSelector: ".item-list .item", dropSelector: null }],
editScore: true
});
}
/* -------------------------------------------- */
async getData() {
let formData = {
title: this.title,
id: this.actor.id,
type: this.actor.type,
img: this.actor.img,
name: this.actor.name,
editable: this.isEditable,
cssClass: this.isEditable ? "editable" : "locked",
system: duplicate(this.object.system),
limited: this.object.limited,
config: duplicate(game.system.ecryme.config),
hasCephaly: EcrymeUtility.hasCephaly(),
hasBoheme: EcrymeUtility.hasBoheme(),
hasAmertume: EcrymeUtility.hasAmertume(),
characters: this.actor.buildAnnencyActorList(),
options: this.options,
owner: this.document.isOwner,
editScore: this.options.editScore,
isGM: game.user.isGM
}
this.formData = formData;
console.log("Annency : ", formData, this.object);
return formData;
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
html.bind("keydown", function (e) { // Ignore Enter in actores sheet
if (e.keyCode === 13) return false;
});
html.find('.actor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let actorId = li.data("actor-id")
const actor = game.actors.get(actorId)
actor.sheet.render(true)
})
html.find('.actor-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let actorId = li.data("actor-id")
this.actor.removeAnnencyActor(actorId)
})
// Update Inventory Item
html.find('.item-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item")
let itemId = li.data("item-id")
const item = this.actor.items.get(itemId);
item.sheet.render(true);
});
// Delete Inventory Item
html.find('.item-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item")
EcrymeUtility.confirmDelete(this, li).catch("Error : No deletion confirmed")
})
html.find('.item-add').click(ev => {
let dataType = $(ev.currentTarget).data("type")
this.actor.createEmbeddedDocuments('Item', [{ name: "NewItem", type: dataType }], { renderSheet: true })
})
html.find('.subactor-edit').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id");
let actor = game.actors.get(actorId);
actor.sheet.render(true);
});
html.find('.subactor-delete').click(ev => {
const li = $(ev.currentTarget).parents(".item");
let actorId = li.data("actor-id");
this.actor.delSubActor(actorId);
});
html.find('.update-field').change(ev => {
const fieldName = $(ev.currentTarget).data("field-name");
let value = Number(ev.currentTarget.value);
this.actor.update({ [`${fieldName}`]: value });
});
}
/* -------------------------------------------- */
async _onDropActor(event, dragData) {
const actor = fromUuidSync(dragData.uuid)
if (actor) {
this.actor.addAnnencyActor(actor.id)
} else {
ui.notifications.warn("Actor not found")
}
super._onDropActor(event)
}
/* -------------------------------------------- */
/** @override */
setPosition(options = {}) {
const position = super.setPosition(options);
const sheetBody = this.element.find(".sheet-body");
const bodyHeight = position.height - 192;
sheetBody.css("height", bodyHeight);
return position;
}
/* -------------------------------------------- */
/** @override */
_updateObject(event, formData) {
// Update the Actor
return this.object.update(formData);
}
}

View File

@ -109,7 +109,17 @@ export class EcrymeUtility {
let level = game.settings.get("fvtt-ecryme", "ecryme-game-level")
return level != "level_e"
}
/*-------------------------------------------- */
static hasBoheme() {
let level = game.settings.get("fvtt-ecryme", "ecryme-game-level")
return level == "level_b" || level == "level_a"
}
/*-------------------------------------------- */
static hasAmertume() {
let level = game.settings.get("fvtt-ecryme", "ecryme-game-level")
return level == "level_a"
}
/*-------------------------------------------- */
static buildSkillConfig() {
game.system.ecryme.config.skills = {}
@ -211,7 +221,7 @@ export class EcrymeUtility {
let msg = await this.createChatWithRollMode(this.confrontData1.alias, {
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-confrontation-result.hbs`, confront)
})
msg.setFlag("world", "ecryme-rolldata", confront)
await msg.setFlag("world", "ecryme-rolldata", confront)
console.log("Confront result", confront)
this.lastConfront = confront
@ -482,7 +492,7 @@ export class EcrymeUtility {
rollData.margin = rollData.total - rollData.difficulty
if (rollData.total > rollData.difficulty) {
rollData.isSuccess = true
let maxMargin = rollData.skill.value + (rollData.spec) ? 2 : 0
let maxMargin = rollData.skill.value + ((rollData.spec) ? 2 : 0)
rollData.margin = Math.min(rollData.margin, maxMargin)
}
}
@ -529,6 +539,9 @@ export class EcrymeUtility {
diceFormula += "+" + rollData.bonusMalusTraits
diceFormula += "+" + rollData.bonusMalusPerso
diceFormula += "+" + rollData.impactMalus
if (rollData.annency) {
diceFormula += "+" + rollData.annencyBonus
}
rollData.diceFormula = diceFormula
return diceFormula
}
@ -557,7 +570,7 @@ export class EcrymeUtility {
let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-generic-result.hbs`, rollData)
})
msg.setFlag("world", "ecryme-rolldata", rollData)
await msg.setFlag("world", "ecryme-rolldata", rollData)
console.log("Rolldata result", rollData)
}
@ -574,7 +587,7 @@ export class EcrymeUtility {
let msg = await this.createChatWithRollMode(rollData.alias, {
content: await renderTemplate(`systems/fvtt-ecryme/templates/chat/chat-generic-result.hbs`, rollData)
})
msg.setFlag("world", "ecryme-rolldata", rollData)
await msg.setFlag("world", "ecryme-rolldata", rollData)
}
/* -------------------------------------------- */
@ -674,6 +687,7 @@ export class EcrymeUtility {
bonusMalusPerso: 0,
bonusMalusSituation: 0,
bonusMalusDef: 0,
annencyBonus: 0,
bonusMalusPortee: 0,
skillTranscendence: 0,
rollMode: game.settings.get("core", "rollMode"),

View File

@ -245,7 +245,9 @@ export class EcrymeConfrontDialog extends Dialog {
this.rollData.applyTranscendence = $('#roll-apply-transcendence').val()
this.computeTotals()
})
html.find('#annency-bonus').change((event) => {
this.rollData.annencyBonus = Number(event.currentTarget.value)
})
}
}

View File

@ -11,6 +11,7 @@
import { EcrymeActor } from "./actors/ecryme-actor.js";
import { EcrymeItemSheet } from "./items/ecryme-item-sheet.js";
import { EcrymeActorSheet } from "./actors/ecryme-actor-sheet.js";
import { EcrymeAnnencySheet } from "./actors/ecryme-annency-sheet.js";
import { EcrymeUtility } from "./common/ecryme-utility.js";
import { EcrymeCombat } from "./app/ecryme-combat.js";
import { EcrymeItem } from "./items/ecryme-item.js";
@ -58,7 +59,8 @@ Hooks.once("init", async function () {
// Register sheet application classes
Actors.unregisterSheet("core", ActorSheet);
Actors.registerSheet("fvtt-ecryme", EcrymeActorSheet, { types: ["pc"], makeDefault: true });
//Actors.registerSheet("fvtt-ecryme", EcrymeNPCSheet, { types: ["pnj"], makeDefault: false });
Actors.registerSheet("fvtt-ecryme", EcrymeActorSheet, { types: ["npc"], makeDefault: true });
Actors.registerSheet("fvtt-ecryme", EcrymeAnnencySheet, { types: ["annency"], makeDefault: false });
Items.unregisterSheet("core", ItemSheet);
Items.registerSheet("fvtt-ecryme", EcrymeItemSheet, { makeDefault: true });
@ -66,7 +68,7 @@ Hooks.once("init", async function () {
EcrymeUtility.init()
console.log("Babele INIT!")
Babele.get().setSystemTranslationsDir("translated");
Babele.get().setSystemTranslationsDir("translated")
});

View File

@ -1 +1 @@
MANIFEST-000010
MANIFEST-000070

View File

@ -1,3 +1,7 @@
2023/07/29-09:40:52.194999 7f95c2bff6c0 Recovering log #7
2023/07/29-09:40:52.214284 7f95c2bff6c0 Delete type=3 #4
2023/07/29-09:40:52.214320 7f95c2bff6c0 Delete type=0 #7
2023/08/22-08:18:29.415756 7f4f609fd6c0 Recovering log #68
2023/08/22-08:18:29.426603 7f4f609fd6c0 Delete type=3 #66
2023/08/22-08:18:29.426655 7f4f609fd6c0 Delete type=0 #68
2023/08/22-08:21:44.533362 7f4ccb7fe6c0 Level-0 table #73: started
2023/08/22-08:21:44.533404 7f4ccb7fe6c0 Level-0 table #73: 0 bytes OK
2023/08/22-08:21:44.540850 7f4ccb7fe6c0 Delete type=0 #71
2023/08/22-08:21:44.560122 7f4ccb7fe6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)

View File

@ -1,15 +1,7 @@
2023/07/29-09:21:50.805512 7f95c13fc6c0 Recovering log #3
2023/07/29-09:21:50.805734 7f95c13fc6c0 Level-0 table #5: started
2023/07/29-09:21:50.827401 7f95c13fc6c0 Level-0 table #5: 26243 bytes OK
2023/07/29-09:21:50.938004 7f95c13fc6c0 Delete type=0 #3
2023/07/29-09:21:50.938074 7f95c13fc6c0 Delete type=3 #2
2023/07/29-09:40:48.262273 7f95c0bfb6c0 Level-0 table #8: started
2023/07/29-09:40:48.262287 7f95c0bfb6c0 Level-0 table #8: 0 bytes OK
2023/07/29-09:40:48.269214 7f95c0bfb6c0 Delete type=0 #6
2023/07/29-09:40:48.279470 7f95c0bfb6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at '!items!zs7krgXhDRndtqbl' @ 127 : 1
2023/07/29-09:40:48.279481 7f95c0bfb6c0 Compacting 1@0 + 0@1 files
2023/07/29-09:40:48.283626 7f95c0bfb6c0 Generated table #9@0: 174 keys, 26243 bytes
2023/07/29-09:40:48.283652 7f95c0bfb6c0 Compacted 1@0 + 0@1 files => 26243 bytes
2023/07/29-09:40:48.289868 7f95c0bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2023/07/29-09:40:48.289934 7f95c0bfb6c0 Delete type=2 #5
2023/07/29-09:40:48.296265 7f95c0bfb6c0 Manual compaction at level-0 from '!items!zs7krgXhDRndtqbl' @ 127 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)
2023/08/17-08:30:06.224452 7fa0dcff96c0 Recovering log #64
2023/08/17-08:30:06.244297 7fa0dcff96c0 Delete type=3 #62
2023/08/17-08:30:06.244357 7fa0dcff96c0 Delete type=0 #64
2023/08/17-08:31:03.278842 7f9e3ffff6c0 Level-0 table #69: started
2023/08/17-08:31:03.278870 7f9e3ffff6c0 Level-0 table #69: 0 bytes OK
2023/08/17-08:31:03.285336 7f9e3ffff6c0 Delete type=0 #67
2023/08/17-08:31:03.285445 7f9e3ffff6c0 Manual compaction at level-0 from '!folders!1GrTlI1xWvaxdKRI' @ 72057594037927935 : 1 .. '!items!zs7krgXhDRndtqbl' @ 0 : 0; will stop at (end)

BIN
packs/help/000005.ldb Normal file

Binary file not shown.

1
packs/help/CURRENT Normal file
View File

@ -0,0 +1 @@
MANIFEST-000006

8
packs/help/LOG Normal file
View File

@ -0,0 +1,8 @@
2023/08/22-08:18:29.469195 7f4f611fe6c0 Recovering log #4
2023/08/22-08:18:29.483356 7f4f611fe6c0 Delete type=3 #2
2023/08/22-08:18:29.483413 7f4f611fe6c0 Delete type=0 #4
2023/08/22-08:21:44.524795 7f4ccb7fe6c0 Level-0 table #9: started
2023/08/22-08:21:44.524832 7f4ccb7fe6c0 Level-0 table #9: 0 bytes OK
2023/08/22-08:21:44.533220 7f4ccb7fe6c0 Delete type=0 #7
2023/08/22-08:21:44.560099 7f4ccb7fe6c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)
2023/08/22-08:21:44.560175 7f4ccb7fe6c0 Manual compaction at level-1 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

5
packs/help/LOG.old Normal file
View File

@ -0,0 +1,5 @@
2023/08/17-08:30:06.273842 7fa0dd7fa6c0 Delete type=3 #1
2023/08/17-08:31:03.298799 7f9e3ffff6c0 Level-0 table #5: started
2023/08/17-08:31:03.302135 7f9e3ffff6c0 Level-0 table #5: 2278 bytes OK
2023/08/17-08:31:03.309094 7f9e3ffff6c0 Delete type=0 #3
2023/08/17-08:31:03.309619 7f9e3ffff6c0 Manual compaction at level-0 from '!journal!N3XOO6dRLuKwQfp2' @ 72057594037927935 : 1 .. '!journal.pages!N3XOO6dRLuKwQfp2.xhc7hqoL8kdW6lrD' @ 0 : 0; will stop at (end)

BIN
packs/help/MANIFEST-000006 Normal file

Binary file not shown.

View File

@ -1 +1 @@
MANIFEST-000010
MANIFEST-000070

View File

@ -1,3 +1,7 @@
2023/07/29-09:40:52.216200 7f95c2bff6c0 Recovering log #7
2023/07/29-09:40:52.237129 7f95c2bff6c0 Delete type=3 #4
2023/07/29-09:40:52.237181 7f95c2bff6c0 Delete type=0 #7
2023/08/22-08:18:29.434436 7f4ccbfff6c0 Recovering log #68
2023/08/22-08:18:29.469056 7f4ccbfff6c0 Delete type=3 #66
2023/08/22-08:18:29.469125 7f4ccbfff6c0 Delete type=0 #68
2023/08/22-08:21:44.540974 7f4ccb7fe6c0 Level-0 table #73: started
2023/08/22-08:21:44.541011 7f4ccb7fe6c0 Level-0 table #73: 0 bytes OK
2023/08/22-08:21:44.552192 7f4ccb7fe6c0 Delete type=0 #71
2023/08/22-08:21:44.560142 7f4ccb7fe6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)

View File

@ -1,15 +1,7 @@
2023/07/29-09:21:50.959485 7f95c2bff6c0 Recovering log #3
2023/07/29-09:21:50.959571 7f95c2bff6c0 Level-0 table #5: started
2023/07/29-09:21:50.995185 7f95c2bff6c0 Level-0 table #5: 9793 bytes OK
2023/07/29-09:21:51.096415 7f95c2bff6c0 Delete type=0 #3
2023/07/29-09:21:51.096494 7f95c2bff6c0 Delete type=3 #2
2023/07/29-09:40:48.296275 7f95c0bfb6c0 Level-0 table #8: started
2023/07/29-09:40:48.296293 7f95c0bfb6c0 Level-0 table #8: 0 bytes OK
2023/07/29-09:40:48.302965 7f95c0bfb6c0 Delete type=0 #6
2023/07/29-09:40:48.312703 7f95c0bfb6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at '!items!oSutlbe9wyBZccmf' @ 15 : 1
2023/07/29-09:40:48.312718 7f95c0bfb6c0 Compacting 1@0 + 0@1 files
2023/07/29-09:40:48.316507 7f95c0bfb6c0 Generated table #9@0: 15 keys, 6584 bytes
2023/07/29-09:40:48.316535 7f95c0bfb6c0 Compacted 1@0 + 0@1 files => 6584 bytes
2023/07/29-09:40:48.323224 7f95c0bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2023/07/29-09:40:48.323333 7f95c0bfb6c0 Delete type=2 #5
2023/07/29-09:40:48.323429 7f95c0bfb6c0 Manual compaction at level-0 from '!items!oSutlbe9wyBZccmf' @ 15 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)
2023/08/17-08:30:06.246354 7fa0de7fc6c0 Recovering log #64
2023/08/17-08:30:06.257748 7fa0de7fc6c0 Delete type=3 #62
2023/08/17-08:30:06.257814 7fa0de7fc6c0 Delete type=0 #64
2023/08/17-08:31:03.285529 7f9e3ffff6c0 Level-0 table #69: started
2023/08/17-08:31:03.285609 7f9e3ffff6c0 Level-0 table #69: 0 bytes OK
2023/08/17-08:31:03.291891 7f9e3ffff6c0 Delete type=0 #67
2023/08/17-08:31:03.309552 7f9e3ffff6c0 Manual compaction at level-0 from '!items!13IYF6BPUTivFZzB' @ 72057594037927935 : 1 .. '!items!oSutlbe9wyBZccmf' @ 0 : 0; will stop at (end)

View File

View File

@ -1 +1 @@
MANIFEST-000010
MANIFEST-000070

View File

@ -1,3 +1,7 @@
2023/07/29-09:40:52.194936 7f95c1bfd6c0 Recovering log #7
2023/07/29-09:40:52.211393 7f95c1bfd6c0 Delete type=3 #4
2023/07/29-09:40:52.211511 7f95c1bfd6c0 Delete type=0 #7
2023/08/22-08:18:29.415768 7f4f619ff6c0 Recovering log #68
2023/08/22-08:18:29.430277 7f4f619ff6c0 Delete type=3 #66
2023/08/22-08:18:29.430403 7f4f619ff6c0 Delete type=0 #68
2023/08/22-08:21:44.516245 7f4ccb7fe6c0 Level-0 table #73: started
2023/08/22-08:21:44.516287 7f4ccb7fe6c0 Level-0 table #73: 0 bytes OK
2023/08/22-08:21:44.524497 7f4ccb7fe6c0 Delete type=0 #71
2023/08/22-08:21:44.524682 7f4ccb7fe6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)

View File

@ -1,15 +1,7 @@
2023/07/29-09:21:50.805563 7f95c2bff6c0 Recovering log #3
2023/07/29-09:21:50.805808 7f95c2bff6c0 Level-0 table #5: started
2023/07/29-09:21:50.843484 7f95c2bff6c0 Level-0 table #5: 14920 bytes OK
2023/07/29-09:21:50.957433 7f95c2bff6c0 Delete type=0 #3
2023/07/29-09:21:50.957497 7f95c2bff6c0 Delete type=3 #2
2023/07/29-09:40:48.256475 7f95c0bfb6c0 Level-0 table #8: started
2023/07/29-09:40:48.256500 7f95c0bfb6c0 Level-0 table #8: 0 bytes OK
2023/07/29-09:40:48.262226 7f95c0bfb6c0 Delete type=0 #6
2023/07/29-09:40:48.269398 7f95c0bfb6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at '!items!yozTUjNuc2rEGjFK' @ 55 : 1
2023/07/29-09:40:48.269412 7f95c0bfb6c0 Compacting 1@0 + 0@1 files
2023/07/29-09:40:48.273371 7f95c0bfb6c0 Generated table #9@0: 113 keys, 14920 bytes
2023/07/29-09:40:48.273390 7f95c0bfb6c0 Compacted 1@0 + 0@1 files => 14920 bytes
2023/07/29-09:40:48.279249 7f95c0bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2023/07/29-09:40:48.279362 7f95c0bfb6c0 Delete type=2 #5
2023/07/29-09:40:48.296255 7f95c0bfb6c0 Manual compaction at level-0 from '!items!yozTUjNuc2rEGjFK' @ 55 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)
2023/08/17-08:30:06.224380 7fa0dd7fa6c0 Recovering log #64
2023/08/17-08:30:06.241271 7fa0dd7fa6c0 Delete type=3 #62
2023/08/17-08:30:06.241353 7fa0dd7fa6c0 Delete type=0 #64
2023/08/17-08:31:03.262782 7f9e3ffff6c0 Level-0 table #69: started
2023/08/17-08:31:03.262832 7f9e3ffff6c0 Level-0 table #69: 0 bytes OK
2023/08/17-08:31:03.268889 7f9e3ffff6c0 Delete type=0 #67
2023/08/17-08:31:03.285415 7f9e3ffff6c0 Manual compaction at level-0 from '!folders!00Hn2nNarlL7b0DR' @ 72057594037927935 : 1 .. '!items!yozTUjNuc2rEGjFK' @ 0 : 0; will stop at (end)

0
packs/traits/000072.log Normal file
View File

View File

@ -1 +1 @@
MANIFEST-000010
MANIFEST-000070

View File

@ -1,3 +1,7 @@
2023/07/29-09:40:52.213843 7f95c1bfd6c0 Recovering log #7
2023/07/29-09:40:52.233833 7f95c1bfd6c0 Delete type=3 #4
2023/07/29-09:40:52.234058 7f95c1bfd6c0 Delete type=0 #7
2023/08/22-08:18:29.432772 7f4f609fd6c0 Recovering log #68
2023/08/22-08:18:29.459891 7f4f609fd6c0 Delete type=3 #66
2023/08/22-08:18:29.460035 7f4f609fd6c0 Delete type=0 #68
2023/08/22-08:21:44.552339 7f4ccb7fe6c0 Level-0 table #73: started
2023/08/22-08:21:44.552379 7f4ccb7fe6c0 Level-0 table #73: 0 bytes OK
2023/08/22-08:21:44.559932 7f4ccb7fe6c0 Delete type=0 #71
2023/08/22-08:21:44.560159 7f4ccb7fe6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)

View File

@ -1,15 +1,7 @@
2023/07/29-09:21:50.940886 7f95c13fc6c0 Recovering log #3
2023/07/29-09:21:50.940981 7f95c13fc6c0 Level-0 table #5: started
2023/07/29-09:21:50.975963 7f95c13fc6c0 Level-0 table #5: 7833 bytes OK
2023/07/29-09:21:51.079915 7f95c13fc6c0 Delete type=0 #3
2023/07/29-09:21:51.079983 7f95c13fc6c0 Delete type=3 #2
2023/07/29-09:40:48.290005 7f95c0bfb6c0 Level-0 table #8: started
2023/07/29-09:40:48.290023 7f95c0bfb6c0 Level-0 table #8: 0 bytes OK
2023/07/29-09:40:48.296185 7f95c0bfb6c0 Delete type=0 #6
2023/07/29-09:40:48.303065 7f95c0bfb6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at '!items!zgNI2haxhBxBDBdl' @ 24 : 1
2023/07/29-09:40:48.303074 7f95c0bfb6c0 Compacting 1@0 + 0@1 files
2023/07/29-09:40:48.306318 7f95c0bfb6c0 Generated table #9@0: 25 keys, 3580 bytes
2023/07/29-09:40:48.306337 7f95c0bfb6c0 Compacted 1@0 + 0@1 files => 3580 bytes
2023/07/29-09:40:48.312428 7f95c0bfb6c0 compacted to: files[ 0 1 0 0 0 0 0 ]
2023/07/29-09:40:48.312551 7f95c0bfb6c0 Delete type=2 #5
2023/07/29-09:40:48.323419 7f95c0bfb6c0 Manual compaction at level-0 from '!items!zgNI2haxhBxBDBdl' @ 24 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)
2023/08/17-08:30:06.243329 7fa0ddffb6c0 Recovering log #64
2023/08/17-08:30:06.257748 7fa0ddffb6c0 Delete type=3 #62
2023/08/17-08:30:06.257816 7fa0ddffb6c0 Delete type=0 #64
2023/08/17-08:31:03.292149 7f9e3ffff6c0 Level-0 table #69: started
2023/08/17-08:31:03.292214 7f9e3ffff6c0 Level-0 table #69: 0 bytes OK
2023/08/17-08:31:03.298635 7f9e3ffff6c0 Delete type=0 #67
2023/08/17-08:31:03.309589 7f9e3ffff6c0 Manual compaction at level-0 from '!folders!DiwHbtGAkTYxtshX' @ 72057594037927935 : 1 .. '!items!zgNI2haxhBxBDBdl' @ 0 : 0; will stop at (end)

View File

@ -73,6 +73,18 @@
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
},
{
"label": "Help/Aides",
"type": "JournalEntry",
"name": "help",
"path": "packs/help",
"system": "fvtt-ecryme",
"flags": {},
"ownership": {
"PLAYER": "OBSERVER",
"ASSISTANT": "OWNER"
}
}
],
"license": "LICENSE.txt",
@ -88,9 +100,18 @@
"styles": [
"styles/ecryme.css"
],
"relationships": {
"requires": [
{
"id": "babele",
"type": "module",
"compatibility": {}
}
]
},
"title": "Ecryme, le Jeu de Rôles",
"url": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme",
"version": "11.0.9",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/archive/fvtt-ecryme-v11.0.9.zip",
"version": "11.0.20",
"download": "https://www.uberwald.me/gitea/uberwald/fvtt-ecryme/archive/fvtt-ecryme-v11.0.20.zip",
"background": "systems/fvtt-ecryme/images/assets/ecryme_extract_panel_01.webp"
}

View File

@ -1,7 +1,7 @@
{
"Actor": {
"types": [
"pc"
"pc","annency", "npc"
],
"templates": {
"biodata": {
@ -173,8 +173,35 @@
"npccore": {
"npctype": "",
"description": ""
},
"annency": {
"base": {
"iscollective": false,
"ismultiple": false,
"characters": [],
"location": {"1": "", "2": "", "3":"", "4":"", "5":"" },
"description": "",
"enhancements": ""
},
"boheme": {
"name": "",
"ideals": "",
"politic": "",
"description": ""
}
}
},
"annency": {
"templates": [
"annency"
]
},
"npc": {
"templates": [
"biodata",
"core"
]
},
"pc": {
"templates": [
"biodata",
@ -188,9 +215,6 @@
"trait",
"weapon",
"specialization",
"annency",
"boheme",
"contact",
"maneuver"
],
"templates": {

View File

@ -125,8 +125,12 @@
{{#if hasCephaly}}
{{!-- Cephaly Tab --}}
<div class="tab cephaly" data-group="primary" data-tab="cephaly">
<div class="grid grid-2col">
<div>
<h3>{{localize "ECRY.ui.cephaly"}}</h3>
<ul class="stat-list alternate-list item-list">
{{#each cephalySkills as |skill skillkey|}}
<li class="item flexrow list-item">
@ -135,9 +139,8 @@
<i class="fa-solid fa-dice-d6"></i>
{{localize skill.name}}
</a></span>
<select class="item-field-label-short" type="text"
name="system.cephaly.skilllist.{{skillkey}}.value" value="{{skill.value}}"
data-dtype="Number">
<select class="item-field-label-short" type="text" name="system.cephaly.skilllist.{{skillkey}}.value"
value="{{skill.value}}" data-dtype="Number">
{{#select skill.value}}
{{#each @root.config.skillLevel as |level key| }}
<option value="{{level}}">{{level}}</option>
@ -147,7 +150,25 @@
</li>
{{/each}}
</ul>
</div>
<div>
{{#if annency}}
<h3>{{localize "ECRY.ui.annency"}} : <a class="open-annency" data-annency-id="{{annency.id}}">{{annency.name}}<i class="fas fa-edit"></i></a></h3>
<ul class="stat-list alternate-list item-list">
<li class="item flexrow list-item">
<span class="item-name-label-long">
{{annency.system.base.description}}
</span>
</li>
</ul>
{{/if}}
</div>
</div>
</div>
{{/if}}
@ -237,7 +258,7 @@
<a class="item-edit item-name-img" title="Edit Item"><img class="sheet-competence-img"
src="{{maneuver.img}}" /></a>
<span class="item-name-label-long2">
{{maneuver.name}}
{{maneuver.name}}
</span>
<div class="item-filler">&nbsp;</div>

View File

@ -0,0 +1,138 @@
<form class="{{cssClass}}" autocomplete="off">
{{!-- Sheet Header --}}
<header class="sheet-header">
<div class="header-fields">
<div class="flexrow">
<div class="profile-img-container">
<img class="profile-img" src="{{img}}" data-edit="img" title="{{name}}" />
</div>
<div class="flexcol">
<h1 class="charname margin-right"><input name="name" type="text" value="{{name}}" placeholder="Name" /></h1>
<div class="flexrow">
<ul>
<li class="flexrow item" data-item-id="{{spleen.id}}">
<label class="item-name-label-medium">Description :</label>
<textarea class="textarea-default" rows="3" name="system.base.description">{{system.base.description}}</textarea>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</header>
{{!-- Sheet Tab Navigation --}}
<nav class="sheet-tabs tabs" data-group="primary">
{{#if hasCephaly}}
<a class="item" data-tab="annency">{{localize "ECRY.ui.annency"}}</a>
{{/if}}
{{#if hasBoheme}}
<a class="item" data-tab="boheme">{{localize "ECRY.ui.boheme"}}</a>
{{/if}}
</nav>
{{!-- Sheet Body --}}
<section class="sheet-body">
{{#if hasCephaly}}
{{!-- Cephaly Tab --}}
<div class="tab annency" data-group="primary" data-tab="annency">
<div class="grid grid-2col">
<div>
<h3>{{localize "ECRY.ui.annency"}}</h3>
<ul class="stat-list alternate-list item-list">
<li class="item flexrow list-item">
<span class="item-name-label-short">
{{localize "ECRY.ui.iscollective"}}
</span>
<input type="checkbox" class="item-field-label-short" name="system.base.iscollective"
value="{{system.base.iscollective}}" {{checked system.base.iscollective}} />
<span class="item-name-label-short">
{{localize "ECRY.ui.ismultiple"}}
</span>
<input type="checkbox" class="item-field-label-short" name="system.base.ismultiple"
value="{{system.base.ismultiple}}" {{checked system.base.ismultiple}} />
</li>
</ul>
<h3>{{localize "ECRY.ui.characters"}}</h3>
<ul class="stat-list alternate-list item-list">
{{#each characters as |character id|}}
<li class="item flexrow " data-actor-id="{{character.id}}" >
<img class="item-name-img" src="{{character.img}}" />
<span class="item-name-label competence-name">{{character.name}}</span>
<div class="item-filler">&nbsp;</div>
<div class="item-controls item-controls-fixed">
<a class="item-control actor-edit" title="Edit Actor"><i class="fas fa-edit"></i></a>
<a class="item-control actor-delete" title="Delete Actor"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ul>
</div>
<div>
<h3>{{localize "ECRY.ui.location"}}</h3>
<ul class="stat-list alternate-list item-list">
{{#each system.base.location as |location index|}}
<li class="item flexrow list-item">
<span class="item-name-label-medium">
{{localize "ECRY.ui.location"}} {{index}}
</span>
<textarea class="textarea-default" rows="3" name="system.base.location.{{index}}">{{location}}</textarea>
</li>
{{/each}}
<li class="item flexrow list-item">
<span class="item-name-label-medium">
{{localize "ECRY.ui.enhancements"}}
</span>
<textarea class="textarea-default" rows="3" name="system.base.enhancements">{{system.base.enhancements}}</textarea>
</li>
</ul>
</div>
</div>
</div>
{{/if}}
{{#if hasBoheme}}
<div class="tab boheme" data-group="primary" data-tab="boheme">
<h3>{{localize "ECRY.ui.oniricform"}}</h3>
<ul class="stat-list alternate-list item-list">
<li class="item flexrow list-item">
<span class="item-name-label-medium">{{localize "ECRY.ui.name"}}</span>
<input type="text" class="item-field-label-long" name="system.boheme.name" value="{{system.boheme.name}}" data-dtype="String"/>
</li>
<li class="item flexrow list-item">
<span class="item-name-label-medium">{{localize "ECRY.ui.ideals"}}</span>
<input type="text" class="item-field-label-long" name="system.boheme.ideals" value="{{system.boheme.ideals}}" data-dtype="String"/>
</li>
<li class="item flexrow list-item">
<span class="item-name-label-medium">{{localize "ECRY.ui.politic"}}</span>
<input type="text" class="item-field-label-long" name="system.boheme.politic" value="{{system.boheme.politic}}" data-dtype="String"/>
</li>
<li class="item flexrow list-item">
<span class="item-name-label-medium">{{localize "ECRY.ui.description"}}</span>
<textarea class="textarea-default" rows="3" name="system.boheme.description">{{system.boheme.description}}</textarea>
</li>
</ul>
</div>
{{/if}}
</section>
</form>

View File

@ -16,14 +16,21 @@
<div>
<ul>
<li>{{localize "ECRY.ui.cephaly"}} : {{localize skill.name}}</li>
{{#if annency}}
<li>{{localize "ECRY.ui.annencybonus"}} {{annency.name}}: {{annencyBonus}}</li>
{{/if}}
{{#if (gt marginExecution 0)}}
<li>{{localize "ECRY.ui.execution"}} {{executionTotal}} vs {{difficulty}} : {{marginExecution}}</li>
<li>{{localize cephalySuccess}}</li>
{{/if}}
{{#if (gt marginPreservation 0)}}
<li>{{localize "ECRY.ui.preservation"}} {{preservationTotal}} vs {{difficulty}} : {{marginPreservation}}</li>
<li>{{localize cephalyFailure}}</li>
{{/if}}
</ul>
</div>

View File

@ -100,6 +100,24 @@
{{/each}}
</select>
</div>
{{#if annency}}
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.annency"}} : {{annency.name}}</span>
<span class="roll-dialog-label">{{annency.system.base.description}}</span>
</div>
<div class="flexrow">
<span class="roll-dialog-label">{{localize "ECRY.ui.annencybonus"}}</span>
<select class="" id="annency-bonus" name="annencyBonus" data-type="String">
<option value="0">0</option>
<option value="1">+1</option>
<option value="2">+2</option>
<option value="3">+3</option>
<option value="4">+4</option>
<option value="5">+5</option>
</select>
</div>
{{/if}}
<div class="flexrow">
<span class="roll-dialog-label">Bonus/Malus : </span>

View File

@ -1,20 +1,23 @@
{
"label": "Equipement",
"mapping": {
"description": "system.description"
},
"entries": {
"Absinthe": {
"name": "Absinthe",
"description": "<p>A 5 pence deposit is paid for bottles. This sum is paid back if the empty bottle is returned.</p>"
},
"Accordion": {
"name": "Accordion",
"name": "Accordéon",
"description": ""
},
"Airship": {
"name": "Airship",
"name": "Dirigeable",
"description": ""
},
"Animal skin parchment": {
"name": "Animal skin parchment",
"name": "Parchemin de peau",
"description": ""
},
"Automobile": {
@ -22,75 +25,75 @@
"description": ""
},
"Axe": {
"name": "Axe",
"name": "Hache",
"description": ""
},
"Bag": {
"name": "Bag",
"name": "Sac",
"description": ""
},
"Ball of string": {
"name": "Ball of string",
"name": "Pelote de ficelle",
"description": ""
},
"Bar of base metal (1 kg)": {
"name": "Bar of base metal (1 kg)",
"name": "Lingot de vil métal (1 kg)",
"description": ""
},
"Bare hand": {
"name": "Bare hand",
"name": "Mains nues",
"description": ""
},
"Barrel organ": {
"name": "Barrel organ",
"name": "Orgue",
"description": ""
},
"Battleaxe": {
"name": "Battleaxe",
"name": "Hache de bataille",
"description": ""
},
"Beer (1 glass)": {
"name": "Beer (1 glass)",
"name": "Bière (1 verre)",
"description": "<p>A 5 pence deposit is paid for bottles. This sum is paid back if the empty bottle is returned.</p>"
},
"Beet stein": {
"name": "Beet stein",
"name": "Chope (étain)",
"description": ""
},
"Bicycle": {
"name": "Bicycle",
"name": "Vélo",
"description": ""
},
"Blacksmith's toolkit": {
"name": "Blacksmith's toolkit",
"name": "Outils de forgeron",
"description": ""
},
"Blanket": {
"name": "Blanket",
"name": "Couverture",
"description": ""
},
"Blowpipe": {
"name": "Blowpipe",
"name": "Sarbacane",
"description": ""
},
"Blunderbuss": {
"name": "Blunderbuss",
"name": "Tromblon",
"description": ""
},
"Book (printed)": {
"name": "Book (printed)",
"name": "Livre (imprimé)",
"description": ""
},
"Bow": {
"name": "Bow",
"name": "Arc",
"description": ""
},
"Bower hat": {
"name": "Bower hat",
"name": "Chapeau melon",
"description": ""
},
"Box camera": {
"name": "Box camera",
"name": "Appareil photographique (boîtier)",
"description": ""
},
"Bracelet": {
@ -102,27 +105,27 @@
"description": "<p>A 5 pence deposit is paid for bottles. This sum is paid back if the empty bottle is returned.</p>"
},
"Brooch": {
"name": "Brooch",
"name": "Broche",
"description": ""
},
"Butter": {
"name": "Butter",
"name": "Beurre",
"description": ""
},
"Butterfly net": {
"name": "Butterfly net",
"name": "Filet à papillons",
"description": ""
},
"Cake": {
"name": "Cake",
"name": "Gâteau",
"description": ""
},
"Candle": {
"name": "Candle",
"name": "Bougie",
"description": ""
},
"Cane": {
"name": "Cane",
"name": "Canne",
"description": ""
},
"Cape": {
@ -130,23 +133,23 @@
"description": ""
},
"Carriage": {
"name": "Carriage",
"name": "Carriole",
"description": ""
},
"Cestus": {
"name": "Cestus",
"name": "Ceste",
"description": ""
},
"Chain": {
"name": "Chain",
"name": "Chaîne",
"description": ""
},
"Chain mail": {
"name": "Chain mail",
"name": "Chemise de maille",
"description": ""
},
"Chestpplate": {
"name": "Chestpplate",
"name": "Cuirasse",
"description": ""
},
"Cigarettes": {
@ -154,11 +157,11 @@
"description": ""
},
"Coffee, tea": {
"name": "Coffee, tea",
"name": "Café, t",
"description": ""
},
"Compass": {
"name": "Compass",
"name": "Boussole",
"description": ""
},
"Corset": {
@ -166,155 +169,155 @@
"description": ""
},
"Crowbar": {
"name": "Crowbar",
"name": "Pied de biche",
"description": ""
},
"Crude oil (1 l)": {
"name": "Crude oil (1 l)",
"name": "Huile lourde (1 l)",
"description": ""
},
"Cudgel": {
"name": "Cudgel",
"name": "Gourdin",
"description": ""
},
"Dagger": {
"name": "Dagger",
"name": "Dague",
"description": ""
},
"Dirk": {
"name": "Dirk",
"name": "Poignard",
"description": ""
},
"Disk": {
"name": "Disk",
"name": "Disque",
"description": ""
},
"Dissection kit": {
"name": "Dissection kit",
"name": "Nécessaire de dissection ",
"description": ""
},
"Dress, skirt": {
"name": "Dress, skirt",
"name": "Robe, jupe",
"description": ""
},
"Drum": {
"name": "Drum",
"name": "Tambour",
"description": ""
},
"Earrings (pair)": {
"name": "Earrings (pair)",
"name": "Boucles d'oreille (paire)",
"description": ""
},
"Egg": {
"name": "Egg",
"name": "Oeuf",
"description": ""
},
"Evening dress": {
"name": "Evening dress",
"name": "Robe de soirée",
"description": ""
},
"Evening shirt": {
"name": "Evening shirt",
"name": "Chemise de soirée",
"description": ""
},
"Film": {
"name": "Film",
"name": "Pellicule, développement et tirage",
"description": ""
},
"Flail": {
"name": "Flail",
"name": "Fléau",
"description": ""
},
"Flat cap": {
"name": "Flat cap",
"name": "Casquette gavroche",
"description": ""
},
"Glasses": {
"name": "Glasses",
"name": "Lunettes",
"description": ""
},
"Grappling hook": {
"name": "Grappling hook",
"name": "Grapin",
"description": ""
},
"Halberd": {
"name": "Halberd",
"name": "Hallebarde",
"description": ""
},
"Hammer and chisel": {
"name": "Hammer and chisel",
"name": "Marteau et burin",
"description": ""
},
"Handbag": {
"name": "Handbag",
"name": "Sac à main",
"description": ""
},
"Handheld crossbow": {
"name": "Handheld crossbow",
"name": "Arbalète de poing",
"description": ""
},
"Handheld lamp": {
"name": "Handheld lamp",
"name": "Lampe tempête",
"description": ""
},
"Harpsichord": {
"name": "Harpsichord",
"name": "Clavecin",
"description": ""
},
"High heels shoes": {
"name": "High heels shoes",
"name": "Escarpins",
"description": ""
},
"Horse-drawn cart": {
"name": "Horse-drawn cart",
"name": "Chariot",
"description": ""
},
"Hot air balloon": {
"name": "Hot air balloon",
"name": "Ballon",
"description": ""
},
"Illustrated manuscript (cheap)": {
"name": "Illustrated manuscript (cheap)",
"name": "Manuscrit enluminé (bon marché) ",
"description": ""
},
"Illustrated manuscript (rich)": {
"name": "Illustrated manuscript (rich)",
"name": "Manuscrit enluminé (cher)",
"description": ""
},
"Improvised weapon": {
"name": "Improvised weapon",
"name": "Armes improvisées",
"description": ""
},
"Inkpot": {
"name": "Inkpot",
"name": "Encrier",
"description": ""
},
"Iron flask": {
"name": "Iron flask",
"name": "Flasque de fer",
"description": ""
},
"Jar (glass)": {
"name": "Jar (glass)",
"name": "Conserve (verre)",
"description": ""
},
"Jaw harp": {
"name": "Jaw harp",
"name": "Guimbarde",
"description": ""
},
"Kettle": {
"name": "Kettle",
"name": "Bouilloire",
"description": ""
},
"Knife": {
"name": "Knife",
"name": "Couteau",
"description": ""
},
"Lamp oil": {
"name": "Lamp oil",
"name": "Huile (lamp)",
"description": ""
},
"Lantern": {
"name": "Lantern",
"name": "Lanterne",
"description": ""
},
"Leather boots (pair)": {
@ -322,27 +325,27 @@
"description": ""
},
"Leather chest piece": {
"name": "Leather chest piece",
"name": "Gilet de cuir",
"description": ""
},
"Leather overcoat": {
"name": "Leather overcoat",
"name": "Manteau de conduite en cuir ",
"description": ""
},
"Lighter": {
"name": "Lighter",
"name": "Briquet",
"description": ""
},
"Loaf of bread": {
"name": "Loaf of bread",
"name": "Miche de pain",
"description": ""
},
"Log": {
"name": "Log",
"name": "Bûche",
"description": ""
},
"Lute": {
"name": "Lute",
"name": "Luth",
"description": ""
},
"Lyre": {
@ -350,179 +353,179 @@
"description": ""
},
"Mace": {
"name": "Mace",
"name": "Masse d'armes",
"description": ""
},
"Magnifying glass": {
"name": "Magnifying glass",
"name": "Lunette, télescope",
"description": ""
},
"Mander parchment": {
"name": "Mander parchment",
"name": "Parchemin de mandre",
"description": ""
},
"Mandolin": {
"name": "Mandolin",
"name": "Mandoline",
"description": ""
},
"Meat (beef, horse, chicken)": {
"name": "Meat (beef, horse, chicken)",
"name": "Viande (boeuf, cheval, poulet)",
"description": ""
},
"Meat (fullige, snake, pigeon) (Copy)": {
"name": "Meat (fullige, snake, pigeon) (Copy)",
"name": "Viande (fulige, serpent, pigeon)",
"description": ""
},
"Meat (rat)": {
"name": "Meat (rat)",
"name": "Viande (rat)",
"description": ""
},
"Messenger bag": {
"name": "Messenger bag",
"name": "Besace",
"description": ""
},
"Metal crossbow": {
"name": "Metal crossbow",
"name": "Arbalète métallique",
"description": ""
},
"Metal cutlery": {
"name": "Metal cutlery",
"name": "Couverts en métal",
"description": ""
},
"Metal plaque": {
"name": "Metal plaque",
"description": "<p>+8 coins as deposit</p>"
"name": "Plaque de métal",
"description": "<p>(+8 de caution)</p>"
},
"Mushroom bread": {
"name": "Mushroom bread",
"name": "Pain de champignons",
"description": ""
},
"Mushroom spirit": {
"name": "Mushroom spirit",
"description": "<p>A 5 pence deposit is paid for bottles. This sum is paid back if the empty bottle is returned.</p>"
"name": "Eau-de-vie de champignons",
"description": "<p>Les bouteilles vides sont consignées, 5 sous par bouteille</p>"
},
"Musical saw": {
"name": "Musical saw",
"name": "Scie musicale",
"description": ""
},
"Musket": {
"name": "Musket",
"name": "Mousquet",
"description": ""
},
"Necklace": {
"name": "Necklace",
"name": "Collier",
"description": ""
},
"Organ": {
"name": "Organ",
"name": "Orgue",
"description": ""
},
"Overcoat": {
"name": "Overcoat",
"name": "Manteau",
"description": ""
},
"Pack of cards": {
"name": "Pack of cards",
"name": "Jeu de cartes",
"description": ""
},
"Petticoat": {
"name": "Petticoat",
"name": "Jupon",
"description": ""
},
"Phonographic recorder": {
"name": "Phonographic recorder",
"name": "phonoéditeur",
"description": ""
},
"Pike": {
"name": "Pike",
"name": "Pique",
"description": ""
},
"Pistol": {
"name": "Pistol",
"name": "Pistolet",
"description": ""
},
"Pocket watch": {
"name": "Pocket watch",
"name": "Montre à gousset",
"description": ""
},
"Poor quality stilts": {
"name": "Poor quality stilts",
"name": "Chaussures à talons-aiguille de basse qualité",
"description": ""
},
"Port, wine": {
"name": "Port, wine",
"description": "<p>A 5 pence deposit is paid for bottles. This sum is paid back if the empty bottle is returned.</p>"
"name": "Porto, vin",
"description": "<p>Les bouteilles vides sont consignées, 5 sous par bouteille</p>"
},
"Portable first aid kit": {
"name": "Portable first aid kit",
"name": "Trousse médicale de voyage ",
"description": ""
},
"Portable phonographic recorder": {
"name": "Portable phonographic recorder",
"name": "Phonoenregistreur de voyage",
"description": ""
},
"Portable stove": {
"name": "Portable stove",
"name": "Réchaud à alcool",
"description": ""
},
"Pot of jam": {
"name": "Pot of jam",
"name": "Pot de confiture",
"description": ""
},
"Quill": {
"name": "Quill",
"name": "Plume",
"description": ""
},
"Rapier": {
"name": "Rapier",
"name": "Rapière",
"description": ""
},
"Razor blade": {
"name": "Razor blade",
"name": "Lame de rasoir",
"description": ""
},
"Recorder": {
"name": "Recorder",
"name": "Flûte à bec",
"description": ""
},
"Revolver": {
"name": "Revolver",
"name": "Révolver",
"description": ""
},
"Riding boots (pair)": {
"name": "Riding boots (pair)",
"name": "Botte de cavalier (paire)",
"description": ""
},
"Ring": {
"name": "Ring",
"name": "Anneau",
"description": ""
},
"Rope (hemp)": {
"name": "Rope (hemp)",
"name": "Corde (chanvre)",
"description": ""
},
"Rum": {
"name": "Rum",
"description": "<p>A 5 pence deposit is paid for bottles. This sum is paid back if the empty bottle is returned.</p>"
"name": "Rhum",
"description": "<p>Les bouteilles vides sont consignées, 5 sous par bouteille</p>"
},
"Scarf, shawl": {
"name": "Scarf, shawl",
"name": "Echarpe, châle",
"description": ""
},
"Shoes": {
"name": "Shoes",
"name": "Chaussures",
"description": ""
},
"Sighted rifle": {
"name": "Sighted rifle",
"name": "Fusil à lunette",
"description": ""
},
"Silk stockings": {
"name": "Silk stockings",
"name": "Bas de soie",
"description": ""
},
"Silver bar": {
"name": "Silver bar",
"name": "Lingot dargent ",
"description": ""
},
"Skis": {
@ -530,59 +533,59 @@
"description": ""
},
"Sleeping bag": {
"name": "Sleeping bag",
"name": "Sac de couchage",
"description": ""
},
"Sling": {
"name": "Sling",
"name": "Fronde",
"description": ""
},
"Soft brimmed hat": {
"name": "Soft brimmed hat",
"name": "Chapeau mou",
"description": ""
},
"Spear": {
"name": "Spear",
"name": "Lance",
"description": ""
},
"Spirit": {
"name": "Spirit",
"description": "<p>A 5 pence deposit is paid for bottles. This sum is paid back if the empty bottle is returned.</p>"
"name": "Liqueur",
"description": "<p>Les bouteilles vides sont consignées, 5 sous par bouteille</p>"
},
"Staff": {
"name": "Staff",
"name": "Bâton",
"description": ""
},
"Stylus for wax plaque": {
"name": "Stylus for wax plaque",
"name": "Stylet pour plaque de cire",
"description": ""
},
"Sword": {
"name": "Sword",
"name": "Epée",
"description": ""
},
"Tambourine": {
"name": "Tambourine",
"name": "Tambourin",
"description": ""
},
"Telescope": {
"name": "Telescope",
"name": "Télescope",
"description": ""
},
"Telescopic stilts": {
"name": "Telescopic stilts",
"name": "Échasses télescopiques",
"description": ""
},
"Thief's toolkit": {
"name": "Thief's toolkit",
"name": "Outils de voleur",
"description": ""
},
"Top hat": {
"name": "Top hat",
"name": "Haut-de-forme",
"description": ""
},
"Torch": {
"name": "Torch",
"name": "Torche",
"description": ""
},
"Train (locomotive)": {
@ -594,67 +597,67 @@
"description": ""
},
"Trumpet": {
"name": "Trumpet",
"name": "Trompette",
"description": ""
},
"Truncheon": {
"name": "Truncheon",
"name": "Matraque",
"description": ""
},
"Underwear": {
"name": "Underwear",
"name": "Sous-vêtements",
"description": ""
},
"Uniform": {
"name": "Uniform",
"name": "Uniforme",
"description": ""
},
"Viol": {
"name": "Viol",
"name": "Viole",
"description": ""
},
"Violin": {
"name": "Violin",
"name": "Violon",
"description": ""
},
"Walking stick": {
"name": "Walking stick",
"name": "Bâton de marche",
"description": ""
},
"Watch": {
"name": "Watch",
"name": "Montre",
"description": ""
},
"Wax plaque": {
"name": "Wax plaque",
"description": "<p>+3 coins as deposit</p>"
"name": "Plaque de cire",
"description": "<p>+3 de caution</p>"
},
"Whiskey": {
"name": "Whiskey",
"description": "<p>A 5 pence deposit is paid for bottles. This sum is paid back if the empty bottle is returned.</p>"
"name": "Whisky",
"description": "<p>Les bouteilles vides sont consignées, 5 sous par bouteille</p>"
},
"Whistle": {
"name": "Whistle",
"name": "Sifflet",
"description": ""
},
"White shirt": {
"name": "White shirt",
"name": "Chemise blanche",
"description": ""
},
"Wooden crossbow": {
"name": "Wooden crossbow",
"name": "Arbalète en bois",
"description": ""
},
"Wooden sedan chair": {
"name": "Wooden sedan chair",
"name": "Chaise à porteurs (bois)",
"description": ""
},
"Wooden trunk": {
"name": "Wooden trunk",
"name": "Malle de bois",
"description": ""
},
"Writing material": {
"name": "Writing material",
"name": "Matériel décriture",
"description": ""
}
}

View File

@ -1,65 +1,68 @@
{
"label": "Manoeuvres",
"mapping": {
"description": "system.description"
},
"entries": {
"Coup de Jarnac": {
"name": "Coup de Jarnac",
"description": "<p>Execution Margin of 4</p>\n<p>This is a violent, treacherous, and wicked blow made famous by Guy Chabot de Jarnac, who used it for the first time in a judiciary duel in Aeolus in 954. It involves wounding the opponent&rsquo;s leg or Achilles tendon, which prevents them from being able to move normally. As well as the Impact, the victim also receives the Trait: <em>Lame -1</em>.</p>"
"description": "<p>Marge de 4 en Accomplissement </p>\n<p>Ce coup violent, déloyal et pernicieux, a été rendu célèbre par Guy Chabot de Jarnac, qui la porté pour la première fois lors dun duel judiciaire, à Éole, en 954. Il consiste à blesser la jambe ou le tendon dAchille de ladversaire, lempêchant de se déplacer normalement. En plus de lImpact, la victime se voit affublée du Trait <em>Estropié -1</em>.</p>"
},
"Doesnt even hurt": {
"name": "Doesnt even hurt",
"description": "<p>Through breathing control and unshakable willpower, the combatant learns to ignore their injuries. Not only do they not receive any penalty from Impacts inflicted upon them, but even better, those Impacts allow them to unlock their inner strength and become bonuses. Therefore, instead of suffering from a penalty of -4 for a major Impact, the character receives a bonus of +4. they may surpass the Margin limit set by their Skill level.</p>"
"name": "Même pas mal",
"description": "<p>Par le contrôle de sa respiration et une volonté inébranlable, le combattant apprend à faire fi de ses blessures. Non seulement il ne souffre daucun malus dû aux Impacts subis mais, mieux encore, ces derniers lui permettent de se surpasser et deviennent des bonus proportionnels. Ainsi, au lieu de subir un malus de -4 pour un Impact majeur, le personnage bénéficiera dun bonus de +4. Il peut dépasser la Marge autorisée par sa Compétence.</p>"
},
"Double impact": {
"name": "Double impact",
"description": "<p>Aggressive</p>\n<p>Two weapons needed</p>\n<p>This technique requires extreme speed on the user&rsquo;s part, increasing the number of attacks they can deliver. In a single exchange of blows, they can inflict an Impact twice (two serious Impacts rather than one for example). However, this can turn against them and be very dangerous, since due to their excessive aggressiveness, the character exposes themself. They also suffer from double Impacts.</p>"
"description": "<p>Aggressif</p>\n<p>deux armes sont nécessaires</p>\n<p>Cette botte demande une extrême célérité au maître darmes qui augmente sa cadence de frappe. Durant un même échange de coups, il est ainsi capable dinfliger son Impact deux fois (deux Impacts graves au lieu dun par exemple). Le retour de flamme est cependant périlleux, car, par son agressivité, le maître darmes se découvre. Lui aussi subit des Impacts doublés.</p>"
},
"It's the winning, not the taking part that counts": {
"name": "It's the winning, not the taking part that counts",
"description": "<p>Impossible to use this technique in a duel</p>\n<p>The sword fighter has learned to take advantage of all situations, by prioritizing efficiency over style. They use whatever they have at hand to gain an advantage. Any improvised weapon they use has an Effect of +3, but breaks after use.</p>"
"name": "Limportant nest pas de participer mais de gagner",
"description": "<p>impossibilité dutiliser cette botte en duel</p>\n<p>Lescrimeur a appris à tirer profit de toutes les occasions, privilégiant lefficacité au style. Il se sert de tout ce qui lui tombe sous la main pour en tirer avantage. Entre ses mains, un élément improvisé utilisé pour se battre est doté dune Incidence de +3, mais il se brise après usage.</p>"
},
"Perforation": {
"name": "Perforation",
"description": "<p>This maneuver is particularly favored on stitch estates where it is still common to wear armor. The sword fighter uses a precise blow to target the weak point of their opponent&rsquo;s protection and runs through it, discarding any bonus granted by the armor.</p>"
"description": "<p>Cette manœuvre est particulièrement usitée au sein des seigneuries traversières, où les armures demeurent courantes. Dun coup précis, le maître darmes cible le point faible de la protection de son opposant et sy engouffre, faisant fi du bonus de cette dernière.</p>"
},
"Point blank": {
"name": "Point blank",
"description": "<p>Requires <em>Musket</em> Specialization</p>\n<p>The combatant is a martial artist able to use their musket in close range combat. In a single exchange of blows, they can deliver a bayonet blow (Effect of a dagger) and fire with the musket (Effect of a firearm).</p>"
"name": "À bout portant",
"description": "<p>nécessite Spécialization <em>Mousquet</em></p>\n<p>Le maître darmes est un artiste martial, capable de faire feu avec son mousquet lors dun combat au corps à corps. Durant un même échange de coups, il peut porter un coup de baïonnette (Incidence du poignard) et faire feu avec le mousquet (Incidence darme à feu).</p>"
},
"Ribbon Dance": {
"name": "Ribbon Dance",
"description": "<p>Aggressive</p>\n<p>Requires a Specialization with a non rigid weapon (whip, chain, flail, ribbons lined with lead or metal blades), succeeding one&rsquo;s Preservation test, and enough space to fight&ndash;By spinning around with long, skilled movements, the combatant creates a deadly rotating sphere around themself. they can then add their Preservation Margin to their Execution Margin 2 points at a time. The Execution Margin then causes many superficial injuries (1 for each Margin of 2).</p>"
"name": "Danse des rubans",
"description": "<p>Agressif</p>\n<p>Par tranche de 2, nécessite une Spécialisation en arme articulée (fouet, chaînes, fléaux, rubans lestés de plomb ou lames métalliques), de réussir son test de Préservation et davoir suffisamment de place pour se battre En effectuant de longues et complexes arabesques, le maître darmes produit une sphère mortelle tournoyante autour de lui. Il peut alors ajouter sa Marge de Préservation, par tranche de 2, à sa Marge dAccomplissement. La Marge dAccomplissement produit alors de nombreuses blessures superficielles (1 par Marge de 2).</p>"
},
"The Chimeric Defense": {
"name": "The Chimeric Defense",
"description": "<p>&ldquo;Defensive moves only&rdquo;&ndash;by blocks of 2&ndash;</p>\n<p>To successfully carry out this maneuver, the character must obtain a Margin of at least 4 in both Execution and Preservation. If it succeeds, it allows the character to add all or part of their Preservation Margin to their Execution Margin in blocks of 2. while dodging or parrying the defender simultaneously lands a blow with a limb, an improvised weapon, or a shield etc. This requires tactical thinking, because using this technique weakens Preservation. The combattant may exceed the normal Margin limit set by Skill level.</p>"
"name": "Défense chimérique",
"description": "<p>&ldquo;Défensif uniquement&rdquo;&ndash;par tranches de 2&ndash;</p>\n<p>Pour réussir cette manœuvre, le personnage doit obtenir une Marge dau moins 4 en Accomplissement ET en Préservation. En cas de réussite, elle permet dajouter tout ou partie de sa Marge de Préservation, par tranches de 2, à sa Marge dAccomplissement. Alors quil esquive ou pare, le défenseur en profite pour porter un coup à laide dun membre, dun élément improvisé, dun bouclier, etc. Cela demande une réflexion tactique, car augmenter son Accomplissement en recourant à cette botte affaiblit sa Préservation. Le combattant peut dépasser la Marge autorisée par sa Compétence.</p>"
},
"The Dead mans Hold": {
"name": "The Dead mans Hold",
"description": "<p>The sword fighter allows themself to take attacks by opting for a low Preservation score. By accepting these Impacts, they can take advantage of their opponent&rsquo;s lowered guard to inflict identical damage on them, in addition to normal damage inflicted during that turn, for a total which can surpass the normal Margin limit set by their Skill level.</p>"
"name": "Létreinte de lhomme mort",
"description": "<p>Lescrimeur choisit de subir des blessures en optant pour un score de Préservation bas. En acceptant ces Impacts, il est en retour capable de déjouer la garde de son adversaire et lui fait subir en retour des dégâts identiques, en plus de ceux quil a infligés normalement durant cette passe darmes, pour un total pouvant dépasser sa Marge autorisée de Compétence.</p>"
},
"The jeering master": {
"name": "The jeering master",
"description": "<p>This technique can be used to provoke the opponent, and even humiliate them, before finishing them off. Using mockery, the combattant forces the opponent to use their highest score in Execution, which greatly reduces their Preservation (for minor characters, it becomes +4/-4 by default).</p>"
"name": "Maître persifleur",
"description": "<p>Cette technique permet de provoquer son adversaire, voire de lhumilier, avant de lachever. Par ses piques et ses railleries, le maître darmes impose à son adversaire de placer son plus haut score possible en Accomplissement, ce qui dégarnit grandement sa Préservation (pour les seconds rôles, faites +4/-4 par défaut). </p>"
},
"The Madmans step": {
"name": "The Madmans step",
"description": "<p>Rojo style is not taught in judi-duelist schools, but in traverser caravans. The sword fighter employs a style made up of erratic and unpredictable movements that disorient the opponent and make the user difficult to touch. The swordfighter adds +4 to their Preservation and can surpass the normal Margin limit set by their Skill level.</p>"
"name": "Le pas de lhomme fou",
"description": "<p>Le style Rojo nest pas enseigné par dans les écoles davocats-duellistes, mais dans les caravanes traversières. Lescrimeur adopte un style fait de mouvements erratiques et imprévisibles, désorientant son adversaire et le rendant plus difficile à toucher. Le bretteur ajoute +4 à sa Préservation et peut dépasser la Marge autorisée par sa Compétence.</p>"
},
"The Nevers Attack": {
"name": "The Nevers Attack",
"description": "<p>Execution Margin of 4 and the opponent&rsquo;s head must be unprotected</p>\n<p>Invented by Parisian swordfighter Philippe de Nevers, this attack requires extreme precision but is absolutely devastating. If it succeeds, the user eliminates their opponent instantly by inflicting an injury between their eyes (equivalent to a major Impact).</p>"
"name": "La botte de Nevers",
"description": "<p>Marge de 4 en Accomplissement et ladversaire ne doit pas posséder de protection à la tête</p>\n<p>Inventée par Philippe de Nevers, un sabreur parisien, cette botte exige une extrême précision mais se révèle dévastatrice. En cas de réussite, lépéiste élimine son adversaire sur le coup en lui infligeant une blessure entre les deux yeux (équivalent dun Impact majeur).</p>"
},
"The partner switch": {
"name": "The partner switch",
"description": "<p>This technique can be used by a sword fighter facing multiple opponents. The attacker can include an extra target at the last second (before Effects are calculated). They may ask the storyteller to direct the attack on a character within range of their blade or choose the opponent with the highest or lowest Preservation score. The swordfighter&rsquo;s own Preservation score applies to both of the targeted opponents.</p>"
"name": "Changement de partenaire",
"description": "<p>Cette botte peut être employée par un escrimeur confronté à plusieurs adversaires. Ce dernier a la possibilité dengager une cible supplémentaire au dernier moment (avant le calcul des Incidences). Il peut demander au conteur de lorienter vers un personnage à portée de fleuret ou de désigner son opposant avec le plus faible ou le plus fort score en Préservation. Le score de Préservation de lescrimeur sapplique aux deux adversaires désignés.</p>"
},
"The Scarlet Dance": {
"name": "The Scarlet Dance",
"description": "<p>This move was invented by the duelist Bramon of Aeolus. The nemesis of Marcel Rubempr&eacute;, and fencing instructor for the old nobility before they were chased out onto the traverses, Bramon&rsquo;s technique became legendary during the industrial revolution. It is a combination of dance steps, thrusts, and slashes. The swordfighter lets themself be taken away by their own inner music, and enters into a trance like state which allows them to add their <em>Athletics </em>score to the Effect. They can exceed the normal Margin limit set by their Skill level.</p>"
"name": "La danse écarlate",
"description": "<p>Cette botte est linvention de la duelliste Bramon dÉole. Véritable némésis de Marcel Rubempré, maître darmes des anciens nobles avant quils ne soient chassés sur les traverses, sa technique entra dans la légende lors de la révolution industrielle. Elle combine un mélange de pas de danse et de coups destoc et de taille. Se laissant aller au rythme de sa musique intérieure, lépéiste finit dans un état de transe lui permettant dajouter son score dAthlétisme à son Incidence. Il peut dépasser la Marge autorisée par sa Compétence.</p>"
},
"Two-handed attack": {
"name": "Two-handed attack",
"description": "<p>Blow delivered with both hands grasping the sword's hilt, Execution score higher than one&rsquo;s Preservation score required&ndash;The combatant &nbsp;strikes with all their strength to break through the opponent&rsquo;s defense. This move allows characters to replace the Effect with their <em>Athletics</em> score.</p>"
"name": "À deux mains",
"description": "<p>Porter le coup avec les deux mains sur le pommeau de larme, avoir un score dAccomplissement supérieur à celui de Préservation Le combattant frappe de toutes ses forces afin de percer la défense de son adversaire. Il peut remplacer lIncidence de son arme par son score en <em>Athlétisme</em>.</p>"
}
}
}

View File

@ -0,0 +1,388 @@
{
"label": "Spécialisation",
"mapping": {
"description": "system.description"
},
"entries": {
"Aircraft": {
"name": "brûleur daérostat",
"description": ""
},
"Airplane": {
"name": "Aéroplane",
"description": ""
},
"Airship": {
"name": "Dirigeable",
"description": ""
},
"Amputation": {
"name": "Amputation",
"description": ""
},
"Architecture": {
"name": "Architecture",
"description": ""
},
"Armlock": {
"name": "Clef de bras",
"description": ""
},
"Automobile": {
"name": "Automobile",
"description": ""
},
"Axe": {
"name": "Hache",
"description": ""
},
"Bartering": {
"name": "Marchander",
"description": ""
},
"Blowpipe": {
"name": "Sarbacane",
"description": ""
},
"Bow": {
"name": "Arc",
"description": ""
},
"Boxing": {
"name": "Boxe",
"description": ""
},
"Camouflage": {
"name": "Camouflage",
"description": ""
},
"Carriage": {
"name": "Calèche",
"description": ""
},
"Carrying": {
"name": "Porter",
"description": "<p>Le personnage a la force et l'habitude de porter des charges lourdes.</p>"
},
"Cavalry saber": {
"name": "Sabre de cavalerie",
"description": ""
},
"Charm": {
"name": "Charmer",
"description": ""
},
"Chemystry": {
"name": "Chimie",
"description": ""
},
"Clarinet": {
"name": "Clarinette",
"description": ""
},
"Climbing": {
"name": "Escalader",
"description": "<p>Le personnage a appris à escalader différents types de surfaces.</p>"
},
"Clocks": {
"name": "Horloges",
"description": ""
},
"Collecting gossip": {
"name": "Collecter des ragots",
"description": ""
},
"Communication": {
"name": "Communication",
"description": ""
},
"Dagger": {
"name": "Dague",
"description": ""
},
"Decoction": {
"name": "Décoction",
"description": ""
},
"Dosage of medicine": {
"name": "Posologie",
"description": ""
},
"Electric": {
"name": "Electric",
"description": ""
},
"Environment (Alley)": {
"name": "Environnement (ruelle)",
"description": ""
},
"Environment (traverse)": {
"name": "Environnement (traverse)",
"description": ""
},
"Escape": {
"name": "Filer",
"description": ""
},
"Foil": {
"name": "Fleuret",
"description": ""
},
"Giving commands": {
"name": "Commander",
"description": ""
},
"Glider": {
"name": "Cerf-volant",
"description": ""
},
"Halberd": {
"name": "Hallebarde",
"description": ""
},
"Herbalism": {
"name": "Herbalisme",
"description": ""
},
"History": {
"name": "Histoire",
"description": ""
},
"Horse": {
"name": "Cheval",
"description": ""
},
"Hot air balloon": {
"name": "Ballon",
"description": ""
},
"Hydrocryme production": {
"name": "Production d'hydrocryme",
"description": ""
},
"Hydropower": {
"name": "Hydraulique",
"description": ""
},
"Impressing people": {
"name": "Impressionner",
"description": ""
},
"Improvised combat": {
"name": "Combat improvisé",
"description": ""
},
"Interrogation": {
"name": "Interrogation",
"description": ""
},
"Intervention": {
"name": "Intervention",
"description": ""
},
"Intimidation": {
"name": "Intimidation",
"description": ""
},
"Investigation": {
"name": "Investigation",
"description": ""
},
"Iron work": {
"name": "Ferronnerie",
"description": ""
},
"Jumping": {
"name": "sauter",
"description": "<p>Le personnage a la dextérité et la coordination pour sauter loin, haut, et atterrir sur ses pieds.</p>"
},
"Kickboxing": {
"name": "Savate",
"description": ""
},
"Lock picking": {
"name": "Crocheter",
"description": ""
},
"Lock systems": {
"name": "Serrures",
"description": ""
},
"Locomotive": {
"name": "Locomotive",
"description": ""
},
"Locomotives": {
"name": "Locomotives",
"description": ""
},
"Lying": {
"name": "Mentir",
"description": ""
},
"Making a good impression": {
"name": "Faire une bonne impression",
"description": ""
},
"Making mushroom paper": {
"name": "Fabriquer du papier à base de champignons",
"description": ""
},
"Milieu knowledge": {
"name": "Connaissance du milieu (...)",
"description": ""
},
"Music": {
"name": "Musique",
"description": ""
},
"Musical composition": {
"name": "Composition musicale",
"description": ""
},
"Musket": {
"name": "Mousquet",
"description": ""
},
"Neighborhood knowledge": {
"name": "Connaissance du quartier",
"description": ""
},
"Opera": {
"name": "Opéra",
"description": ""
},
"Organ": {
"name": "Orgue",
"description": ""
},
"Painting": {
"name": "Peinture",
"description": ""
},
"Pharmacology": {
"name": "Pharmacologie",
"description": ""
},
"Playwriting": {
"name": "Ecriture théâtrale",
"description": ""
},
"Pottery": {
"name": "Poterie",
"description": ""
},
"Rapier": {
"name": "Rapière",
"description": ""
},
"Religion": {
"name": "Religion",
"description": ""
},
"Rhetoric": {
"name": "Rhétorique",
"description": ""
},
"Running": {
"name": "Courir",
"description": "<p>Le personnage peut courir vite et longtemps.</p>"
},
"Sculpture": {
"name": "Sculpture",
"description": ""
},
"Sleight of hand": {
"name": "Escamoter",
"description": ""
},
"Sling": {
"name": "Fronde",
"description": ""
},
"Spear": {
"name": "Lance",
"description": ""
},
"Spreading false information": {
"name": "Propager de fausses informations",
"description": ""
},
"Strangling": {
"name": "Etrangler",
"description": ""
},
"Streetcar": {
"name": "Tramway",
"description": ""
},
"Surgery": {
"name": "Chirurgie",
"description": ""
},
"Swordstick": {
"name": "Canne-épée",
"description": ""
},
"Theater": {
"name": "Théâtre",
"description": ""
},
"Thermal": {
"name": "Thermique",
"description": ""
},
"Threatening": {
"name": "Menacer",
"description": ""
},
"Throwing knife": {
"name": "Couteau de lancer",
"description": ""
},
"Traverse architecture": {
"name": "Architecture des traverses",
"description": ""
},
"Traverse geography": {
"name": "Géographie des traverses",
"description": ""
},
"Traverse History": {
"name": "Histoire des traverses",
"description": ""
},
"Traverse mapmaking": {
"name": "Cartographie des traverses",
"description": ""
},
"Traverse mythology": {
"name": "Mythologie des traverses",
"description": ""
},
"Traverse sociology": {
"name": "Socilogie des traverses",
"description": ""
},
"Traverser flute": {
"name": "Flute des traverses",
"description": ""
},
"Tripping": {
"name": "Croc-en-jambe",
"description": ""
},
"Wind power": {
"name": "Eolien",
"description": ""
},
"Wrestling": {
"name": "Lutte",
"description": ""
},
"Writing": {
"name": "Ecriture",
"description": ""
}
}
}

View File

@ -0,0 +1,104 @@
{
"label": "Traits",
"mapping": {
"description": "system.description"
},
"entries": {
"Ability to stay calm": {
"name": "Facilité à rester calme",
"description": ""
},
"Comfortable on airships": {
"name": "A l'aise en dirigeable",
"description": ""
},
"Comfortable using a mapmaker's helmet": {
"name": "Virtuose du casque de cartographe",
"description": ""
},
"Comfortable walking on stilts": {
"name": "A l'aise en échasses",
"description": ""
},
"Cultured": {
"name": "Cultivé",
"description": ""
},
"Deaf": {
"name": "Sourd",
"description": "<p>Le personnage a grandi dans une usine, et le vacarme permanent des machines l'a rendu sourd. (-3).</p>"
},
"Disregard for death": {
"name": "Ne craint pas la mort",
"description": ""
},
"Excellent glider pilot": {
"name": "Excellent pilote de cerf-volant",
"description": ""
},
"Extremely good eyesight": {
"name": "Excellente vue",
"description": "<p>La vue de ce personnage est si développée qu'elle lui permet de &ldquo;lire&rdquo; les disques&nbsp;</p>"
},
"Famous with (...)": {
"name": "Connu dans le milieu des (...)",
"description": ""
},
"Foremimes language": {
"name": "Connait le langage des contremimes",
"description": ""
},
"Guild member": {
"name": "Membre de la guilde (...)",
"description": ""
},
"Guild member (high rank)": {
"name": "Membre de haut rang de la guilde (...)",
"description": ""
},
"Intuitively feels the damage on their vehicle": {
"name": "Sent intuitivement les dommages sur son véhicule",
"description": ""
},
"Keen intellect": {
"name": "Intellect affûté",
"description": ""
},
"Knowledge of upper classes of their city": {
"name": "Connaissance des classes huppées de la ville (...)",
"description": ""
},
"Knows how to encircle a target": {
"name": "Sait encercler une cible",
"description": ""
},
"Lipreading": {
"name": "Lit sur les lèvres",
"description": ""
},
"Preacher": {
"name": "Prêcheur",
"description": ""
},
"Preacher (great)": {
"name": "Prêcheur (excellent)",
"description": ""
},
"Rational mind": {
"name": "Rationnel",
"description": ""
},
"Rich": {
"name": "Riche",
"description": ""
},
"Sharpshooter": {
"name": "Tireur d'élite",
"description": "<p>Le personnage sait tirer partie d'un fusil à lunette.</p>"
},
"Skilled with explosives": {
"name": "Manieur d'explosifs",
"description": ""
}
}
}