[New Sheet] Donjons Et Chatons

This commit is contained in:
Zakarik
2023-02-13 10:33:39 +01:00
parent e66b36196b
commit 23edbeea9f
26 changed files with 4796 additions and 0 deletions
File diff suppressed because it is too large Load Diff
+696
View File
@@ -0,0 +1,696 @@
<script type="text/worker">function setActiveCharacterId(charId){
var oldAcid=getActiveCharacterId();
var ev = new CustomEvent("message");
ev.data={"id":"0", "type":"setActiveCharacter", "data":charId};
self.dispatchEvent(ev);
return oldAcid;
}
var _sIn=setInterval;
setInterval=function(callback, timeout){
var acid=getActiveCharacterId();
_sIn(
function(){
var prevAcid=setActiveCharacterId(acid);
callback();
setActiveCharacterId(prevAcid);
}
,timeout);
}
var _sto=setTimeout
setTimeout=function(callback, timeout){
var acid=getActiveCharacterId();
_sto(
function(){
var prevAcid=setActiveCharacterId(acid);
callback();
setActiveCharacterId(prevAcid);
}
,timeout);
}
function getAttrsAsync(props){
var acid=getActiveCharacterId(); //save the current activeCharacterID in case it has changed when the promise runs
var prevAcid=null; //local variable defined here, because it needs to be shared across the promise callbacks defined below
return new Promise((resolve,reject)=>{
prevAcid=setActiveCharacterId(acid); //in case the activeCharacterId has changed, restore it to what we were expecting and save the current value to restore later
try{
getAttrs(props,(values)=>{ resolve(values); });
}
catch{ reject(); }
}).finally(()=>{
setActiveCharacterId(prevAcid); //restore activeCharcterId to what it was when the promise first ran
});
}
//use the same pattern for each of the following...
function setAttrsAsync(propObj, options){
var acid=getActiveCharacterId();
var prevAcid=null;
return new Promise((resolve,reject)=>{
prevAcid=setActiveCharacterId(acid);
try{
setAttrs(propObj,options,(values)=>{ resolve(values); });
}
catch{ reject(); }
}).finally(()=>{
setActiveCharacterId(prevAcid);
});
}on('clicked:menu', async (menu) => {
const data = menu.htmlAttributes.value;
await setAttrsAsync({ tab: data });
});
const qualite = ['costaud', 'malin', 'mignon'];
qualite.forEach(stat => {
on(`clicked:${stat}`, async (base) => {
const listAttrs = [
`character_name`,
stat,
`jets`
];
const attrs = await getAttrsAsync(listAttrs);
const name = attrs['character_name'];
const jet = attrs[`jets`];
const value = +attrs[stat];
let relance = '';
switch(stat) {
case 'costaud':
relance = 'relance_costaud';
break;
case 'malin':
relance = 'relance_malin';
break;
case 'mignon':
relance = 'relance_mignon';
break;
}
console.log(relance);
const finalRoll = await startRoll(`${jet} &{template:simple} {{name=${name}}} {{subname=${getTranslationByKey(stat)}}} {{type=[[?{Type ?|Jet Standard, 3|Jet avec Avantage, 4|Jet avec Désavantage, 2}]]}} {{roll=[[?{Type ?|Jet Standard, 3|Jet avec Avantage, 4|Jet avec Désavantage, 2}D6<${value}]]}} {{button=[${getTranslationByKey('relance')}](~${relance})}}`);
const computed = {};
finishRoll(finalRoll.rollId, computed);
});
});
const talents = [
'bougerpopotin', 'bricolertruc', 'connaitrelois', 'convaincrebaratiner', 'cueillirchasser', 'cuisiner', 'dessinerpeindre', 'fairemusique',
'fairepoches', 'feulermenacer', 'griffer', 'herboriser', 'lireecrire', 'lireciel', 'observerfouiller', 'restercalme',
'soccuperbetes', 'cacherombres', 'deplacerensilence', 'seduirecharmer', 'soignerblessures', 'trouverchemin', 'trouverinformation'
];
talents.forEach(talent => {
on(`clicked:${talent}`, async (base) => {
const listAttrs = [
`character_name`,
`${talent}_select`,
`jets`
];
const attrs = await getAttrsAsync(listAttrs);
const name = attrs['character_name'];
const attribut = attrs[`${talent}_select`];
const jet = attrs[`jets`];
const value = await getAttrsAsync([attribut]);
let relance = '';
switch(attribut) {
case 'costaud':
relance = 'relance_costaud';
break;
case 'malin':
relance = 'relance_malin';
break;
case 'mignon':
relance = 'relance_mignon';
break;
}
const finalRoll = await startRoll(`${jet} &{template:simple} {{name=${name}}} {{subname=${getTranslationByKey(talent)} - ${getTranslationByKey(attribut)}}} {{roll=[[4D6<${value[attribut]}]]}} {{button=[${getTranslationByKey('relance')}](~${relance})}}`);
const computed = {};
finishRoll(finalRoll.rollId, computed);
});
});
const score = [
'amitie',
'coeur'
];
score.forEach(valeur => {
on(`change:${valeur} change:costaud change:malin change:mignon sheet:opened`, async (base) => {
const listAttrs = [
`${valeur}`,
'costaud',
'malin',
'mignon'
];
const attrs = await getAttrsAsync(listAttrs);
const costaud = +attrs['costaud'];
const malin = +attrs['malin'];
const mignon = +attrs['mignon'];
const value = +attrs[`${valeur}`];
let max = 0;
switch(valeur) {
case 'amitie':
max = mignon;
break;
case 'coeur':
max = costaud+malin;
break;
}
const update = {};
update[`${valeur}_max`] = max;
if(value > max) update[`${valeur}`] = max;
await setAttrsAsync(update);
});
});</script>
<div class="content">
<button type="roll" style="display:none;" name="roll_relance_costaud" value="@{jets} &{template:simple} {{name=@{character_name} }} {{subname=^{relance} }} {{roll=[[1D6<@{costaud}]]}}" style="display:none;"/>
<button type="roll" style="display:none;" name="roll_relance_malin" value="@{jets} &{template:simple} {{name=@{character_name} }} {{subname=^{relance} }} {{roll=[[1D6<@{malin}]]}}" style="display:none;"/>
<button type="roll" style="display:none;" name="roll_relance_mignon" value="@{jets} &{template:simple} {{name=@{character_name} }} {{subname=^{relance} }} {{roll=[[1D6<@{mignon}]]}}" style="display:none;"/>
<div class="header">
<div class="col">
<label class="name">
<span data-i18n="chaton">Chaton</span>
<input type="text" name="attr_character_name">
</label>
<div class="identite">
<label>
<span data-i18n="enfance">Enfance</span>
<input type="text" name="attr_enfance">
</label>
<label>
<span data-i18n="caractere">Caractère</span>
<input type="text" name="attr_caractere">
</label>
</div>
</div>
<div class="col">
<label class="config">
<input type="checkbox" name="attr_options" value="1" />
<span></span>
</label>
<input type="hidden" name="attr_options" />
<div class="config">
<div class="full">
<label>
<span data-i18n="jets">Les jets sont</span>
<select name="attr_jets">
<option value="" data-i18n="public">public</option>
<option value="/w gm" data-i18n="prives">privés</option>
</select>
</label>
</div>
</div>
<div class="don">
<span data-i18n="donDeNaissance">Don de naissance</span>
<div class="autoex autoex22">
<textarea name="attr_dondenaissance"></textarea>
<span name="attr_dondenaissance"></span>
</div>
</div>
<div class="experience">
<span data-i18n="experience">Expérience</span>
<div class="double">
<input type="number" name="attr_experience" value="0" min="0" />
<span class="separateur">/</span>
<input type="number" name="attr_experience_totale" value="0" min="0" />
<span class="absoluteL" data-i18n="actuelle">Actuelle</span>
<span class="absoluteR" data-i18n="totale">Totale</span>
</div>
</div>
</div>
<div class="line">
<div class="qualites">
<h1 class="titre" data-i18n="qualites">Qualités</h1>
<div class="blockInput">
<div class="input">
<img src="https://zupimages.net/up/22/47/7avx.png">
<input type="number" name="attr_costaud" value="0" min="0">
</div>
<label>
<button type="action" name="act_costaud" value="" class="rollDice" />
<span class="subtitle costaud" data-i18n="costaud">Costaud</span>
</label>
</div>
<div class="blockInput">
<div class="input">
<img src="https://zupimages.net/up/22/47/y7vl.png">
<input type="number" name="attr_malin" value="0" min="0">
</div>
<label>
<button type="action" name="act_malin" value="" class="rollDice" />
<span class="subtitle malin" data-i18n="malin">Malin</span>
</label>
</div>
<div class="blockInput">
<div class="input">
<img src="https://zupimages.net/up/22/47/vwnf.png">
<input type="number" name="attr_mignon" value="0" min="0">
</div>
<label>
<button type="action" name="act_mignon" value="" class="rollDice" />
<span class="subtitle mignon" data-i18n="mignon">Mignon</span>
</label>
</div>
</div>
<div class="valeurs">
<div class="coeur">
<img src="https://zupimages.net/up/22/47/x9bl.png">
<div class="blockInput">
<input type="number" name="attr_coeur" value="0" min="0">
<span>/</span>
<input type="number" name="attr_coeur_max" value="0" min="0" readonly>
</div>
<span class="subtitle coeur" data-i18n="coeur">Coeur</span>
</div>
<div class="amitie">
<img src="https://zupimages.net/up/22/47/mw97.png">
<div class="blockInput">
<input type="number" name="attr_amitie" value="0" min="0">
<span>/</span>
<input type="number" name="attr_amitie_max" value="0" min="0" readonly>
</div>
<span class="subtitle amitie" data-i18n="amitie">Amitié</span>
</div>
</div>
</div>
</div><div class="menu">
<input class="menu" type="hidden" name="attr_tab" value="1" />
<button type="action" name="act_menu" value="1">
<span data-i18n="talents">Talents</span>
</button>
<button type="action" name="act_menu" value="2">
<span data-i18n="grimoire">Grimoire</span>
</button>
<button type="action" name="act_menu" value="3">
<span data-i18n="sacDeVoyage">Sac de voyage</span>
</button>
</div>
<input class="tabExtend" type="hidden" name="attr_tab" value="1"/><div class="body tab1">
<div class="col">
<div>
<label>
<input type="checkbox" name="attr_bougerpopotin" />
<span data-i18n="bougerpopotin">Bouger son popotin</span>
</label>
<input type="hidden" name="attr_bougerpopotin" />
<select name="attr_bougerpopotin_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_bougerpopotin" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_bricolertruc" />
<span data-i18n="bricolertruc">Bricoler des trucs et des machins</span>
</label>
<input type="hidden" name="attr_bricolertruc" />
<select name="attr_bricolertruc_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_bricolertruc" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_connaitrelois" />
<span data-i18n="connaitrelois">Connaître les lois et les légendes</span>
</label>
<input type="hidden" name="attr_connaitrelois" />
<select name="attr_connaitrelois_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_connaitrelois" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_convaincrebaratiner" />
<span data-i18n="convaincrebaratiner">Convaincre et baratiner</span>
</label>
<input type="hidden" name="attr_convaincrebaratiner" />
<select name="attr_convaincrebaratiner_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_convaincrebaratiner" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_cueillirchasser" />
<span data-i18n="cueillirchasser">Cueillir et chasser</span>
</label>
<input type="hidden" name="attr_cueillirchasser" />
<select name="attr_cueillirchasser_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_cueillirchasser" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_cuisiner" />
<span data-i18n="cuisiner">Cuisiner</span>
</label>
<input type="hidden" name="attr_cuisiner" />
<select name="attr_cuisiner_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_cuisiner" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_dessinerpeindre" />
<span data-i18n="dessinerpeindre">Dessiner et peindre</span>
</label>
<input type="hidden" name="attr_dessinerpeindre" />
<select name="attr_dessinerpeindre_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_dessinerpeindre" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_fairemusique" />
<span data-i18n="fairemusique">Faire de la musique</span>
</label>
<input type="hidden" name="attr_fairemusique" />
<select name="attr_fairemusique_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_fairemusique" value="" class="rollDice" />
</div>
</div>
<div class="col">
<div>
<label>
<input type="checkbox" name="attr_fairepoches" />
<span data-i18n="fairepoches">Faire les poches</span>
</label>
<input type="hidden" name="attr_fairepoches" />
<select name="attr_fairepoches_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_fairepoches" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_feulermenacer" />
<span data-i18n="feulermenacer">Feuler et menacer</span>
</label>
<input type="hidden" name="attr_feulermenacer" />
<select name="attr_feulermenacer_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_feulermenacer" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_griffer" />
<span data-i18n="griffer">Griffer</span>
</label>
<input type="hidden" name="attr_griffer" />
<select name="attr_griffer_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_griffer" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_herboriser" />
<span data-i18n="herboriser">Herboriser</span>
</label>
<input type="hidden" name="attr_herboriser" />
<select name="attr_herboriser_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_herboriser" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_lireecrire" />
<span data-i18n="lireecrire">Lire et écrire</span>
</label>
<input type="hidden" name="attr_lireecrire" />
<select name="attr_lireecrire_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_lireecrire" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_lireciel" />
<span data-i18n="lireciel">Lire le ciel et les étoiles</span>
</label>
<input type="hidden" name="attr_lireciel" />
<select name="attr_lireciel_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_lireciel" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_observerfouiller" />
<span data-i18n="observerfouiller">Observer et fouiller</span>
</label>
<input type="hidden" name="attr_observerfouiller" />
<select name="attr_observerfouiller_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_observerfouiller" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_restercalme" />
<span data-i18n="restercalme">Rester calme et impassible</span>
</label>
<input type="hidden" name="attr_restercalme" />
<select name="attr_restercalme_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_restercalme" value="" class="rollDice" />
</div>
</div>
<div class="col">
<div>
<label>
<input type="checkbox" name="attr_soccuperbetes" />
<span data-i18n="soccuperbetes">S'occuper des bêtes</span>
</label>
<input type="hidden" name="attr_soccuperbetes" />
<select name="attr_soccuperbetes_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_soccuperbetes" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_cacherombres" />
<span data-i18n="cacherombres">Se cacher dans les ombres</span>
</label>
<input type="hidden" name="attr_cacherombres" />
<select name="attr_cacherombres_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_cacherombres" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_deplacerensilence" />
<span data-i18n="deplacerensilence">Se déplacer en silence</span>
</label>
<input type="hidden" name="attr_deplacerensilence" />
<select name="attr_deplacerensilence_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_deplacerensilence" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_seduirecharmer" />
<span data-i18n="seduirecharmer">Séduire et charmer</span>
</label>
<input type="hidden" name="attr_seduirecharmer" />
<select name="attr_seduirecharmer_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_seduirecharmer" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_soignerblessures" />
<span data-i18n="soignerblessures">Soigner blessures et maladies</span>
</label>
<input type="hidden" name="attr_soignerblessures" />
<select name="attr_soignerblessures_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_soignerblessures" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_trouverchemin" />
<span data-i18n="trouverchemin">Trouver son chemin</span>
</label>
<input type="hidden" name="attr_trouverchemin" />
<select name="attr_trouverchemin_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_trouverchemin" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_trouverinformation" />
<span data-i18n="trouverinformation">Trouver une information</span>
</label>
<input type="hidden" name="attr_trouverinformation" />
<select name="attr_trouverinformation_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_trouverinformation" value="" class="rollDice" />
</div>
</div>
<div class="full">
<p><b data-i18n="agir">Agir :</b> <span data-i18n="agirdetail">lancer 3d6, chaque résultat inférieur ou égal au score de la Qualité est un succès.</span></p>
<p><b data-i18n="seuildifficulte">Seuil de difficulté :</b> <span data-i18n="seuildifficultedetail">facile 1, moyen 2, difficile 3, légendaire 4.</span></p>
<p><b data-i18n="talent">Talent :</b> <span data-i18n="talentdetail">Donne un Avantage.</span> <b data-i18n="avantage">Avantage :</b> <span data-i18n="avantagedetail">Lancer 4d6.</span> <b data-i18n="desavantage">Désavantage :</b> <span data-i18n="desavantagedetail">Lancer 2d6.</span></p>
<p><b data-i18n="objets">Objets :</b> <span data-i18n="objetsdetail">Si utile, relancer 1d6 dont le résultat ne convient pas.</span></p>
<p><b data-i18n="caracterest">Caractère :</b> <span data-i18n="caracteredetail">Si positif, gagner 1 Avantage / Si négatif, offrir un point d'Amitié.</span></p>
</div>
</div><div class="body tab2">
<fieldset class="repeating_grimoire">
<input type="text" name="attr_nom"/>
<div class="autoex autoex22">
<textarea name="attr_description"></textarea>
<span name="attr_description"></span>
</div>
</fieldset>
</div><div class="body tab3">
<fieldset class="repeating_sac">
<div class="autoex autoex22">
<textarea name="attr_description"></textarea>
<span name="attr_description"></span>
</div>
</fieldset>
<div class="full">
<p data-i18n="contenusac">Une couverture en laine, un couteau de poche, une cuillère en bois, un petit caquelon de fonte, une grande gourde en cuir, un briquet à amadou, des morceaux de chandelle, un morceau de savon, une brosse, un paquet de croquette de route.</p>
</div>
</div>
</div><rolltemplate class="sheet-rolltemplate-simple">
<h1>{{name}}</h1>
<h2>{{subname}}</h2>
{{#rollTotal() type 3}}
<h2>Jet Standard</h2>
{{/rollTotal() type 3}}
{{#rollTotal() type 2}}
<h2>Jet Avec Désavantage</h2>
{{/rollTotal() type 2}}
{{#rollTotal() type 4}}
<h2>Jet Avec Avantage</h2>
{{/rollTotal() type 4}}
<div class="container">
<span data-i18n="succes">Succès</span>
<span>{{roll}} {{button}}</span>
</div>
</rolltemplate>
Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

+21
View File
@@ -0,0 +1,21 @@
<script type="text/worker">
include js/_library.js
include js/base.js
</script>
div(class="content")
include html/header.html
include html/menu.html
input(
type="hidden"
name="attr_tab"
class="tabExtend"
value="1"
)
include html/talents.html
include html/grimoire.html
include html/sac.html
include templates/simple.html
+9
View File
@@ -0,0 +1,9 @@
<div class="body tab2">
<fieldset class="repeating_grimoire">
<input type="text" name="attr_nom"/>
<div class="autoex autoex22">
<textarea name="attr_description"></textarea>
<span name="attr_description"></span>
</div>
</fieldset>
</div>
+118
View File
@@ -0,0 +1,118 @@
<button type="roll" style="display:none;" name="roll_relance_costaud" value="@{jets} &{template:simple} {{name=@{character_name} }} {{subname=^{relance} }} {{roll=[[1D6<@{costaud}]]}}" style="display:none;"/>
<button type="roll" style="display:none;" name="roll_relance_malin" value="@{jets} &{template:simple} {{name=@{character_name} }} {{subname=^{relance} }} {{roll=[[1D6<@{malin}]]}}" style="display:none;"/>
<button type="roll" style="display:none;" name="roll_relance_mignon" value="@{jets} &{template:simple} {{name=@{character_name} }} {{subname=^{relance} }} {{roll=[[1D6<@{mignon}]]}}" style="display:none;"/>
<div class="header">
<div class="col">
<label class="name">
<span data-i18n="chaton">Chaton</span>
<input type="text" name="attr_character_name">
</label>
<div class="identite">
<label>
<span data-i18n="enfance">Enfance</span>
<input type="text" name="attr_enfance">
</label>
<label>
<span data-i18n="caractere">Caractère</span>
<input type="text" name="attr_caractere">
</label>
</div>
</div>
<div class="col">
<label class="config">
<input type="checkbox" name="attr_options" value="1" />
<span></span>
</label>
<input type="hidden" name="attr_options" />
<div class="config">
<div class="full">
<label>
<span data-i18n="jets">Les jets sont</span>
<select name="attr_jets">
<option value="" data-i18n="public">public</option>
<option value="/w gm" data-i18n="prives">privés</option>
</select>
</label>
</div>
</div>
<div class="don">
<span data-i18n="donDeNaissance">Don de naissance</span>
<div class="autoex autoex22">
<textarea name="attr_dondenaissance"></textarea>
<span name="attr_dondenaissance"></span>
</div>
</div>
<div class="experience">
<span data-i18n="experience">Expérience</span>
<div class="double">
<input type="number" name="attr_experience" value="0" min="0" />
<span class="separateur">/</span>
<input type="number" name="attr_experience_totale" value="0" min="0" />
<span class="absoluteL" data-i18n="actuelle">Actuelle</span>
<span class="absoluteR" data-i18n="totale">Totale</span>
</div>
</div>
</div>
<div class="line">
<div class="qualites">
<h1 class="titre" data-i18n="qualites">Qualités</h1>
<div class="blockInput">
<div class="input">
<img src="https://zupimages.net/up/22/47/7avx.png">
<input type="number" name="attr_costaud" value="0" min="0">
</div>
<label>
<button type="action" name="act_costaud" value="" class="rollDice" />
<span class="subtitle costaud" data-i18n="costaud">Costaud</span>
</label>
</div>
<div class="blockInput">
<div class="input">
<img src="https://zupimages.net/up/22/47/y7vl.png">
<input type="number" name="attr_malin" value="0" min="0">
</div>
<label>
<button type="action" name="act_malin" value="" class="rollDice" />
<span class="subtitle malin" data-i18n="malin">Malin</span>
</label>
</div>
<div class="blockInput">
<div class="input">
<img src="https://zupimages.net/up/22/47/vwnf.png">
<input type="number" name="attr_mignon" value="0" min="0">
</div>
<label>
<button type="action" name="act_mignon" value="" class="rollDice" />
<span class="subtitle mignon" data-i18n="mignon">Mignon</span>
</label>
</div>
</div>
<div class="valeurs">
<div class="coeur">
<img src="https://zupimages.net/up/22/47/x9bl.png">
<div class="blockInput">
<input type="number" name="attr_coeur" value="0" min="0">
<span>/</span>
<input type="number" name="attr_coeur_max" value="0" min="0" readonly>
</div>
<span class="subtitle coeur" data-i18n="coeur">Coeur</span>
</div>
<div class="amitie">
<img src="https://zupimages.net/up/22/47/mw97.png">
<div class="blockInput">
<input type="number" name="attr_amitie" value="0" min="0">
<span>/</span>
<input type="number" name="attr_amitie_max" value="0" min="0" readonly>
</div>
<span class="subtitle amitie" data-i18n="amitie">Amitié</span>
</div>
</div>
</div>
</div>
+13
View File
@@ -0,0 +1,13 @@
<div class="menu">
<input class="menu" type="hidden" name="attr_tab" value="1" />
<button type="action" name="act_menu" value="1">
<span data-i18n="talents">Talents</span>
</button>
<button type="action" name="act_menu" value="2">
<span data-i18n="grimoire">Grimoire</span>
</button>
<button type="action" name="act_menu" value="3">
<span data-i18n="sacDeVoyage">Sac de voyage</span>
</button>
</div>
+12
View File
@@ -0,0 +1,12 @@
<div class="body tab3">
<fieldset class="repeating_sac">
<div class="autoex autoex22">
<textarea name="attr_description"></textarea>
<span name="attr_description"></span>
</div>
</fieldset>
<div class="full">
<p data-i18n="contenusac">Une couverture en laine, un couteau de poche, une cuillère en bois, un petit caquelon de fonte, une grande gourde en cuir, un briquet à amadou, des morceaux de chandelle, un morceau de savon, une brosse, un paquet de croquette de route.</p>
</div>
</div>
+337
View File
@@ -0,0 +1,337 @@
<div class="body tab1">
<div class="col">
<div>
<label>
<input type="checkbox" name="attr_bougerpopotin" />
<span data-i18n="bougerpopotin">Bouger son popotin</span>
</label>
<input type="hidden" name="attr_bougerpopotin" />
<select name="attr_bougerpopotin_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_bougerpopotin" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_bricolertruc" />
<span data-i18n="bricolertruc">Bricoler des trucs et des machins</span>
</label>
<input type="hidden" name="attr_bricolertruc" />
<select name="attr_bricolertruc_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_bricolertruc" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_connaitrelois" />
<span data-i18n="connaitrelois">Connaître les lois et les légendes</span>
</label>
<input type="hidden" name="attr_connaitrelois" />
<select name="attr_connaitrelois_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_connaitrelois" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_convaincrebaratiner" />
<span data-i18n="convaincrebaratiner">Convaincre et baratiner</span>
</label>
<input type="hidden" name="attr_convaincrebaratiner" />
<select name="attr_convaincrebaratiner_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_convaincrebaratiner" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_cueillirchasser" />
<span data-i18n="cueillirchasser">Cueillir et chasser</span>
</label>
<input type="hidden" name="attr_cueillirchasser" />
<select name="attr_cueillirchasser_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_cueillirchasser" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_cuisiner" />
<span data-i18n="cuisiner">Cuisiner</span>
</label>
<input type="hidden" name="attr_cuisiner" />
<select name="attr_cuisiner_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_cuisiner" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_dessinerpeindre" />
<span data-i18n="dessinerpeindre">Dessiner et peindre</span>
</label>
<input type="hidden" name="attr_dessinerpeindre" />
<select name="attr_dessinerpeindre_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_dessinerpeindre" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_fairemusique" />
<span data-i18n="fairemusique">Faire de la musique</span>
</label>
<input type="hidden" name="attr_fairemusique" />
<select name="attr_fairemusique_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_fairemusique" value="" class="rollDice" />
</div>
</div>
<div class="col">
<div>
<label>
<input type="checkbox" name="attr_fairepoches" />
<span data-i18n="fairepoches">Faire les poches</span>
</label>
<input type="hidden" name="attr_fairepoches" />
<select name="attr_fairepoches_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_fairepoches" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_feulermenacer" />
<span data-i18n="feulermenacer">Feuler et menacer</span>
</label>
<input type="hidden" name="attr_feulermenacer" />
<select name="attr_feulermenacer_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_feulermenacer" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_griffer" />
<span data-i18n="griffer">Griffer</span>
</label>
<input type="hidden" name="attr_griffer" />
<select name="attr_griffer_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_griffer" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_herboriser" />
<span data-i18n="herboriser">Herboriser</span>
</label>
<input type="hidden" name="attr_herboriser" />
<select name="attr_herboriser_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_herboriser" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_lireecrire" />
<span data-i18n="lireecrire">Lire et écrire</span>
</label>
<input type="hidden" name="attr_lireecrire" />
<select name="attr_lireecrire_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_lireecrire" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_lireciel" />
<span data-i18n="lireciel">Lire le ciel et les étoiles</span>
</label>
<input type="hidden" name="attr_lireciel" />
<select name="attr_lireciel_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_lireciel" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_observerfouiller" />
<span data-i18n="observerfouiller">Observer et fouiller</span>
</label>
<input type="hidden" name="attr_observerfouiller" />
<select name="attr_observerfouiller_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_observerfouiller" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_restercalme" />
<span data-i18n="restercalme">Rester calme et impassible</span>
</label>
<input type="hidden" name="attr_restercalme" />
<select name="attr_restercalme_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_restercalme" value="" class="rollDice" />
</div>
</div>
<div class="col">
<div>
<label>
<input type="checkbox" name="attr_soccuperbetes" />
<span data-i18n="soccuperbetes">S'occuper des bêtes</span>
</label>
<input type="hidden" name="attr_soccuperbetes" />
<select name="attr_soccuperbetes_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_soccuperbetes" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_cacherombres" />
<span data-i18n="cacherombres">Se cacher dans les ombres</span>
</label>
<input type="hidden" name="attr_cacherombres" />
<select name="attr_cacherombres_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_cacherombres" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_deplacerensilence" />
<span data-i18n="deplacerensilence">Se déplacer en silence</span>
</label>
<input type="hidden" name="attr_deplacerensilence" />
<select name="attr_deplacerensilence_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_deplacerensilence" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_seduirecharmer" />
<span data-i18n="seduirecharmer">Séduire et charmer</span>
</label>
<input type="hidden" name="attr_seduirecharmer" />
<select name="attr_seduirecharmer_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_seduirecharmer" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_soignerblessures" />
<span data-i18n="soignerblessures">Soigner blessures et maladies</span>
</label>
<input type="hidden" name="attr_soignerblessures" />
<select name="attr_soignerblessures_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_soignerblessures" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_trouverchemin" />
<span data-i18n="trouverchemin">Trouver son chemin</span>
</label>
<input type="hidden" name="attr_trouverchemin" />
<select name="attr_trouverchemin_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_trouverchemin" value="" class="rollDice" />
</div>
<div>
<label>
<input type="checkbox" name="attr_trouverinformation" />
<span data-i18n="trouverinformation">Trouver une information</span>
</label>
<input type="hidden" name="attr_trouverinformation" />
<select name="attr_trouverinformation_select">
<option value=""></option>
<option value="costaud" data-i18n="costaud">Costaud</option>
<option value="malin" data-i18n="malin">Malin</option>
<option value="mignon" data-i18n="mignon">Mignon</option>
</select>
<button type="action" name="act_trouverinformation" value="" class="rollDice" />
</div>
</div>
<div class="full">
<p><b data-i18n="agir">Agir :</b> <span data-i18n="agirdetail">lancer 3d6, chaque résultat inférieur ou égal au score de la Qualité est un succès.</span></p>
<p><b data-i18n="seuildifficulte">Seuil de difficulté :</b> <span data-i18n="seuildifficultedetail">facile 1, moyen 2, difficile 3, légendaire 4.</span></p>
<p><b data-i18n="talent">Talent :</b> <span data-i18n="talentdetail">Donne un Avantage.</span> <b data-i18n="avantage">Avantage :</b> <span data-i18n="avantagedetail">Lancer 4d6.</span> <b data-i18n="desavantage">Désavantage :</b> <span data-i18n="desavantagedetail">Lancer 2d6.</span></p>
<p><b data-i18n="objets">Objets ou Don :</b> <span data-i18n="objetsdetail">Si utile, relancer 1d6 dont le résultat ne convient pas.</span></p>
<p><b data-i18n="caracterest">Caractère :</b> <span data-i18n="caracteredetail">Si positif, gagner 1 Avantage / Si négatif, offrir un point d'Amitié.</span></p>
</div>
</div>
+60
View File
@@ -0,0 +1,60 @@
function setActiveCharacterId(charId){
var oldAcid=getActiveCharacterId();
var ev = new CustomEvent("message");
ev.data={"id":"0", "type":"setActiveCharacter", "data":charId};
self.dispatchEvent(ev);
return oldAcid;
}
var _sIn=setInterval;
setInterval=function(callback, timeout){
var acid=getActiveCharacterId();
_sIn(
function(){
var prevAcid=setActiveCharacterId(acid);
callback();
setActiveCharacterId(prevAcid);
}
,timeout);
}
var _sto=setTimeout
setTimeout=function(callback, timeout){
var acid=getActiveCharacterId();
_sto(
function(){
var prevAcid=setActiveCharacterId(acid);
callback();
setActiveCharacterId(prevAcid);
}
,timeout);
}
function getAttrsAsync(props){
var acid=getActiveCharacterId(); //save the current activeCharacterID in case it has changed when the promise runs
var prevAcid=null; //local variable defined here, because it needs to be shared across the promise callbacks defined below
return new Promise((resolve,reject)=>{
prevAcid=setActiveCharacterId(acid); //in case the activeCharacterId has changed, restore it to what we were expecting and save the current value to restore later
try{
getAttrs(props,(values)=>{ resolve(values); });
}
catch{ reject(); }
}).finally(()=>{
setActiveCharacterId(prevAcid); //restore activeCharcterId to what it was when the promise first ran
});
}
//use the same pattern for each of the following...
function setAttrsAsync(propObj, options){
var acid=getActiveCharacterId();
var prevAcid=null;
return new Promise((resolve,reject)=>{
prevAcid=setActiveCharacterId(acid);
try{
setAttrs(propObj,options,(values)=>{ resolve(values); });
}
catch{ reject(); }
}).finally(()=>{
setActiveCharacterId(prevAcid);
});
}
+127
View File
@@ -0,0 +1,127 @@
on('clicked:menu', async (menu) => {
const data = menu.htmlAttributes.value;
await setAttrsAsync({ tab: data });
});
const qualite = ['costaud', 'malin', 'mignon'];
qualite.forEach(stat => {
on(`clicked:${stat}`, async (base) => {
const listAttrs = [
`character_name`,
stat,
`jets`
];
const attrs = await getAttrsAsync(listAttrs);
const name = attrs['character_name'];
const jet = attrs[`jets`];
const value = +attrs[stat];
let relance = '';
switch(stat) {
case 'costaud':
relance = 'relance_costaud';
break;
case 'malin':
relance = 'relance_malin';
break;
case 'mignon':
relance = 'relance_mignon';
break;
}
console.log(relance);
const finalRoll = await startRoll(`${jet} &{template:simple} {{name=${name}}} {{subname=${getTranslationByKey(stat)}}} {{type=[[?{Type ?|Jet Standard, 3|Jet avec Avantage, 4|Jet avec Désavantage, 2}]]}} {{roll=[[?{Type ?|Jet Standard, 3|Jet avec Avantage, 4|Jet avec Désavantage, 2}D6<${value}]]}} {{button=[${getTranslationByKey('relance')}](~${relance})}}`);
const computed = {};
finishRoll(finalRoll.rollId, computed);
});
});
const talents = [
'bougerpopotin', 'bricolertruc', 'connaitrelois', 'convaincrebaratiner', 'cueillirchasser', 'cuisiner', 'dessinerpeindre', 'fairemusique',
'fairepoches', 'feulermenacer', 'griffer', 'herboriser', 'lireecrire', 'lireciel', 'observerfouiller', 'restercalme',
'soccuperbetes', 'cacherombres', 'deplacerensilence', 'seduirecharmer', 'soignerblessures', 'trouverchemin', 'trouverinformation'
];
talents.forEach(talent => {
on(`clicked:${talent}`, async (base) => {
const listAttrs = [
`character_name`,
`${talent}_select`,
`jets`
];
const attrs = await getAttrsAsync(listAttrs);
const name = attrs['character_name'];
const attribut = attrs[`${talent}_select`];
const jet = attrs[`jets`];
const value = await getAttrsAsync([attribut]);
let relance = '';
switch(attribut) {
case 'costaud':
relance = 'relance_costaud';
break;
case 'malin':
relance = 'relance_malin';
break;
case 'mignon':
relance = 'relance_mignon';
break;
}
const finalRoll = await startRoll(`${jet} &{template:simple} {{name=${name}}} {{subname=${getTranslationByKey(talent)} - ${getTranslationByKey(attribut)}}} {{roll=[[4D6<${value[attribut]}]]}} {{button=[${getTranslationByKey('relance')}](~${relance})}}`);
const computed = {};
finishRoll(finalRoll.rollId, computed);
});
});
const score = [
'amitie',
'coeur'
];
score.forEach(valeur => {
on(`change:${valeur} change:costaud change:malin change:mignon sheet:opened`, async (base) => {
const listAttrs = [
`${valeur}`,
'costaud',
'malin',
'mignon'
];
const attrs = await getAttrsAsync(listAttrs);
const costaud = +attrs['costaud'];
const malin = +attrs['malin'];
const mignon = +attrs['mignon'];
const value = +attrs[`${valeur}`];
let max = 0;
switch(valeur) {
case 'amitie':
max = mignon;
break;
case 'coeur':
max = costaud+malin;
break;
}
const update = {};
update[`${valeur}_max`] = max;
if(value > max) update[`${valeur}`] = max;
await setAttrsAsync(update);
});
});
@@ -0,0 +1,22 @@
<rolltemplate class="sheet-rolltemplate-simple">
<h1>{{name}}</h1>
<h2>{{subname}}</h2>
{{#rollTotal() type 3}}
<h2>Jet Standard</h2>
{{/rollTotal() type 3}}
{{#rollTotal() type 2}}
<h2>Jet Avec Désavantage</h2>
{{/rollTotal() type 2}}
{{#rollTotal() type 4}}
<h2>Jet Avec Avantage</h2>
{{/rollTotal() type 4}}
<div class="container">
<span data-i18n="succes">Succès</span>
<span>{{roll}} {{button}}</span>
</div>
</rolltemplate>
+221
View File
@@ -0,0 +1,221 @@
$darkTemplate:var(--dark-surface2);
$black:black;
$white:white;
$costaud:RGB(242, 120, 102);
$malin:RGB(099, 142, 199);
$mignon:RGB(109, 192, 114);
$coeur:RGB(194, 138, 188);
$amitie:RGB(209, 156, 069);
$background:RGB(250, 247, 231);
$borderBrown:RGB(207, 161, 120);
$title-background:linear-gradient(to bottom, rgb(211, 229, 245, 1), rgb(255, 255, 255));
$dice:URL(https://imgsrv.roll20.net/?src=https%3A//cdn.pixabay.com/photo/2014/04/03/11/56/dice-312621_960_720.png);
$arcaneBubble:URL(https://zupimages.net/up/22/24/npp5.png);
$arcaneBubbleWhite:URL(https://zupimages.net/up/22/24/28bt.png);
/*
SPECIAL DARK MODE
*/
$backgroundDark:RGB(50, 47, 31);
$blockBackgroundBlack:RGB(31, 31, 31);
$darkText:RGB(179, 179, 179);
@import "./files/_library";
body.sheet-darkmode {
span,
h1,
h2,
h3,
b,
p {
color:$darkText !important;
letter-spacing: 1px !important;
}
input,
select,
textarea {
color:$darkText !important;
option {
background:$backgroundDark !important;
}
}
div {
&.charsheet {
background: $backgroundDark !important;
}
&.col {
label {
&.name {
background: $blockBackgroundBlack !important;
}
}
div {
&.identite,
&.don,
&.experience {
background: $blockBackgroundBlack !important;
}
}
}
&.qualites {
div {
&.input {
img {
filter: brightness(80%);
}
input {
color:$black !important;
}
}
}
}
&.valeurs {
div {
&.coeur,
&.amitie {
img {
filter: brightness(80%);
}
input {
color:$black !important;
}
}
}
}
&.config {
background:$blockBackgroundBlack !important;
border-color:$borderBrown !important;
}
&.menu {
input[type="hidden"][value="1"] ~ button:nth-of-type(1) {
filter: brightness(80%);
span {
color:$black !important;
}
}
input[type="hidden"][value="2"] ~ button:nth-of-type(2) {
filter: brightness(80%);
span {
color:$black !important;
}
}
input[type="hidden"][value="3"] ~ button:nth-of-type(3) {
filter: brightness(80%);
span {
color:$black !important;
}
}
}
&.tab2,
&.tab3 {
div.repitem {
background:$blockBackgroundBlack !important;
}
}
}
label {
&.config {
span::before {
color:$darkText !important;
}
}
}
}
div {
&.charsheet {
background:$background;
& > div.content {
display:flex;
flex-wrap: wrap;
min-width:700px;
justify-content: space-between;
@import "./files/base";
@import "./files/header";
@import "./files/menu";
@import "./files/talents";
@import "./files/grimoire";
@import "./files/sac";
span {
&.costaud {
color:$costaud;
}
&.malin {
color:$malin;
}
&.mignon {
color:$mignon;
}
&.coeur {
color:$coeur;
}
&.amitie {
color:$amitie;
}
}
}
}
}
@import "./files/templates";
.sheet-rolltemplate-darkmode {
background:$backgroundDark !important;
h1,
h2,
span {
letter-spacing: 1px !important;
color:$darkText !important;
}
a {
background-color:$blockBackgroundBlack !important;
color:$darkText !important;
&:hover {
filter: brightness(80%);
color:$black !important;
font-weight:bold !important;
}
}
.inlinerollresult,
.inlinerollresult.fullcrit,
.inlinerollresult.fullfail,
.inlinerollresult.importantroll {
display: flex;
background:0px;
padding:0px;
margin:0px;
align-items: center;
align-content: center;
background-color:transparent !important;
border:0px !important;
}
}
File diff suppressed because it is too large Load Diff
+163
View File
@@ -0,0 +1,163 @@
select
{
margin-bottom:0px;
border-radius:0px;
color:black;
}
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button
{
-webkit-appearance: none;
appearance: none;
margin: 0;
}
input[type=number],
input[type=text]
{
-moz-appearance:textfield;
appearance: textfield;
border-radius:0px;
color:black;
}
input[disabled]
{
background-color:transparent;
cursor:not-allowed;
}
input:focus-visible,
textarea:focus-visible {
z-index: 99;
}
textarea
{
border:none;
width:100%;
padding:0px;
text-align:justify;
border-radius:0px;
color:black;
margin:0px;
}
label
{
margin:0px;
padding:0px;
}
input,
select,
textarea {
background:transparent;
font-family: "patrick hand";
letter-spacing: 1px;
}
span {
font-family: "patrick hand";
}
/*
///////////////////
ZONES AUTOEXPENSIBLES
///////////////////
*/
div.autoex
{
line-height: 1.4em;
min-height: 1.4em;
cursor: text;
text-align: left;
position:relative;
width:100%;
font-family: "patrick hand";
letter-spacing: 1px;
}
div.autoex > span
{
visibility: hidden;
display: block;
font-family: inherit;
font-size: inherit;
line-height: inherit;
white-space: pre-wrap;
text-align: inherit;
min-height: inherit;
height:100%;
word-wrap:anywhere;
padding-left:2px;
}
div.autoex > textarea
{
display: block;
z-index: 1;
position: absolute;
top: 0;
left: 0;
height: 100%;
width: calc(100% - 4px);
overflow: hidden;
font-family: inherit;
font-size: inherit;
line-height: inherit;
white-space: pre-wrap;
text-align: inherit;
min-height: inherit;
resize: none;
padding-right:2px;
padding-left:2px;
}
div.autoex > textarea::placeholder
{
font-family:"Contrail One";
color: #575957da;
text-transform: capitalize;
font-style: italic;
text-align: center;
font-size: 95%;
font-weight:normal;
}
div.autoex22
{
min-height:22px;
}
div.autoex28
{
min-height:28px;
}
div.autoex40
{
min-height:40px;
}
div.autoex100
{
min-height:100px;
}
div.itemcontrol {
z-index:999;
}
/*CORPS GENERAL*/
div.body
{
display:none;
width:100%;
flex-wrap:wrap;
justify-content:space-between;
min-width:700px;
}
+53
View File
@@ -0,0 +1,53 @@
div.tab2 {
flex-wrap: wrap;
div {
&.repcontainer {
display:flex;
width:100%;
justify-content: space-between;
align-items: flex-start;
align-content: flex-start;
flex-wrap: wrap;
div {
&.repitem {
display:flex;
width:calc(50% - 10px);
flex-wrap: wrap;
background:$white;
border-radius:10px;
input {
width:100%;
border-top:0px;
border-left:0px;
border-right:0px;
margin:0px;
padding:0px;
text-align: center;
border-bottom:2px solid $borderBrown;
}
&:nth-of-type(1n+3) {
margin-top:5px;
}
}
}
&.editmode {
div.repitem {
width:100%;
&:nth-of-type(2) {
margin-top:5px;
}
}
}
}
&.repcontrol {
width:100%;
}
}
}
+345
View File
@@ -0,0 +1,345 @@
div.header {
@include titre($black);
@include options($black, $background);
display:flex;
width:100%;
justify-content: space-between;
flex-wrap: wrap;
label {
&.name {
display:flex;
align-content: center;
align-items: center;
width:100%;
background:$white;
border:2px solid $borderBrown;
border-radius:25px;
padding:5px;
padding-right:10px;
span {
width:max-content;
font-size: 16px;
font-family: "patrick hand";
}
input {
width:100%;
border:0px;
padding-left:5px;
font-size:16px;
font-family: "patrick hand";
}
}
}
div {
&.line {
display:flex;
width:100%;
justify-content: space-between;
}
&.col {
position: relative;
display:flex;
flex-wrap: wrap;
width:calc(50% - 10px);
align-items: flex-start;
align-content: flex-start;
}
&.identite {
display:flex;
width:100%;
justify-content: space-between;
flex-wrap: wrap;
background:$white;
padding:5px;
padding-right:10px;
border:2px solid $borderBrown;
border-radius:25px;
margin-top:5px;
label {
display:flex;
align-content: center;
align-items: center;
width:100%;
span {
width:max-content;
font-size: 16px;
}
input {
width:100%;
border:0px;
padding-left:5px;
font-size:16px;
}
}
}
&.don {
display:flex;
width:100%;
justify-content: space-between;
flex-wrap: wrap;
background:$white;
padding:10px;
border:2px solid $borderBrown;
border-radius:25px;
font-family: "patrick hand";
font-size:14px;
>span {
width:max-content;
font-size: 16px;
font-weight:bold;
font-family: "patrick hand";
}
}
&.experience {
display:flex;
width:100%;
justify-content: space-between;
background:$white;
padding:5px;
padding-right:10px;
border:2px solid $borderBrown;
border-radius:25px;
margin-top:5px;
margin-bottom:5px;
align-items: center;
align-content: center;
>span {
display:flex;
width: 75px;
font-size: 16px;
font-weight: bold;
font-family: "patrick hand";
text-align: center;
}
div {
&.double {
display:flex;
flex-wrap: wrap;
position:relative;
width:calc(100% - 75px);
align-items: center;
align-content: center;
position:relative;
input {
width:calc(50% - (15px / 2));
border:0px;
background:transparent;
text-align: center;
height: 49px;
font-size: 34px;
font-family: "Patrick Hand";
&:first-of-type {
text-align: right;
}
&:last-of-type {
text-align: left;
}
}
>span {
&.separateur {
display: block;
width: 15px;
text-align: center;
font-size: 33px;
font-weight: bold;
font-family: "patrick hand";
line-height: 30px;
color:$borderBrown;
}
&.absoluteL,
&.absoluteR {
width:50%;
position:absolute;
font-family: "patrick hand";
bottom:-3px;
}
&.absoluteL {
text-align: center;
}
&.absoluteR {
text-align: center;
right:0px;
}
}
}
}
}
&.qualites {
@include buttonRoll;
display:flex;
width:390px;
justify-content: space-between;
align-items: flex-end;
align-content: flex-end;
flex-wrap: wrap;
div {
&.blockInput {
display:flex;
flex-wrap: wrap;
position:relative;
height:157px;
width:125px;
label {
display: flex;
width: 100%;
justify-content: center;
cursor:pointer;
span {
display: block;
width: max-content;
margin-left:2px;
text-align: center;
font-size: 18px;
font-weight: bold;
font-family: "patrick hand";
line-height: 30px;
}
button.rollDice {
margin:0px;
border:1px solid $black;
}
}
}
&.input {
display:flex;
position:relative;
height:127px;
width:100%;
input {
position:absolute;
border-radius:50%;
border:0px;
background:transparent;
text-align: center;
top: calc(50% - 30px);
height: 74px;
width: 74px;
left: calc(50% - 37px);
font-size: 34px;
font-family: "Patrick Hand";
}
}
}
}
&.valeurs {
display:flex;
width:343px;
justify-content: space-between;
align-items: end;
flex-wrap: wrap;
div {
&.coeur {
display:flex;
flex-wrap: wrap;
position:relative;
height:175px;
width:164px;
div.blockInput {
position:absolute;
display:flex;
justify-content: center;
top:calc(50% - 45px);
width:100%;
}
>span {
display: block;
width: 100%;
text-align: center;
font-size: 18px;
font-weight: bold;
font-family: "patrick hand";
line-height: 30px;
}
}
&.amitie {
display:flex;
flex-wrap: wrap;
position:relative;
height:205px;
width:164px;
div.blockInput {
position:absolute;
display:flex;
justify-content: center;
top:calc(75% - 57px);
width:100%;
}
>span {
display: block;
width: 100%;
text-align: center;
font-size: 18px;
font-weight: bold;
font-family: "patrick hand";
line-height: 30px;
}
}
&.blockInput {
span {
height:49px;
width:15px;
font-size: 34px;
font-family: "Patrick Hand";
}
}
input {
border-radius:50%;
border:0px;
background:transparent;
text-align: center;
height: 49px;
width: 37px;
font-size: 34px;
font-family: "Patrick Hand";
&:first-of-type {
text-align: right;
}
&:last-of-type {
text-align: left;
}
}
}
}
}
}
+10
View File
@@ -0,0 +1,10 @@
/*MENU*/
@include menu(3, ("background":("1":$costaud, "2":$malin, "3":$mignon)));
input[type="hidden"].tabExtend[value="1"] ~ div.tab1,
input[type="hidden"].tabExtend[value="2"] ~ div.tab2,
input[type="hidden"].tabExtend[value="3"] ~ div.tab3 {
display:flex;
}
+59
View File
@@ -0,0 +1,59 @@
div.tab3 {
flex-wrap: wrap;
div {
&.repcontainer {
display:flex;
width:100%;
justify-content: space-between;
align-items: flex-start;
align-content: flex-start;
flex-wrap: wrap;
div {
&.repitem {
display:flex;
width:calc(50% - 10px);
flex-wrap: wrap;
background:$white;
border-radius:10px;
border:2px solid $borderBrown;
&:nth-of-type(1n+3) {
margin-top:5px;
}
}
&.itemcontrol {
button.btn,
a.btn {
padding-top:0px;
padding-bottom:2px;
}
}
}
&.editmode {
div.repitem {
width:100%;
&:nth-of-type(2) {
margin-top:5px;
}
}
}
}
&.repcontrol {
width:100%;
}
&.full {
p {
font-family: "patrick hand";
text-align: justify;
font-size:15px;
}
}
}
}
+112
View File
@@ -0,0 +1,112 @@
div.tab1 {
div {
&.col {
@include buttonRoll;
display:flex;
flex-wrap: wrap;
align-items: flex-start;
align-content: flex-start;
width:calc((100% / 3) - 10px);
div {
display:flex;
width:100%;
flex-wrap: wrap;
label {
display:flex;
width:100%;
margin-top:5px;
input[type="checkbox"] {
/* Add if not using autoprefixer */
-webkit-appearance: none;
appearance: none;
/* For iOS < 15 to remove gradient background */
background-color: #fff;
/* Not removed via appearance */
margin: 0;
font: inherit;
color: currentColor;
width: 1.15em;
height: 1.15em;
border: 0.15em solid currentColor;
border-radius: 0.15em;
transform: translateY(-0.075em);
display: grid;
place-content: center;
&::before {
content: "";
width: 0.65em;
height: 0.65em;
transform: scale(0);
transition: 120ms transform ease-in-out;
box-shadow: inset 1em 1em black;
transform-origin: bottom left;
clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
}
&:checked::before {
transform: scale(2);
margin-left: -6px;
}
}
span {
margin-left:5px;
}
}
select {
display:none;
width:calc(100% - 30px);
border:1px dashed;
margin:0px;
padding:0px;
padding-left:5px;
padding-right:5px;
font-size:14px;
height:30px;
line-height: 30px;
}
button[type="action"].rollDice {
display:none;
}
input[type="hidden"] {
&[value="on"] ~ select {
display:inline-block;
}
&[value="on"] ~ button[type="action"].rollDice {
display:inline-block;
border:1px solid $black;
}
}
}
}
&.full {
display:flex;
flex-wrap: wrap;
align-items: flex-start;
align-content: flex-start;
width:100%;
margin-top:5px;
p {
width:100%;
text-align: justify;
margin:0px;
font-family: "patrick hand";
font-size:15px;
}
}
}
}
@@ -0,0 +1,78 @@
.sheet-rolltemplate-simple {
display:flex;
flex-wrap: wrap;
width:100%;
background:$background;
border-radius:15px;
padding-top:10px;
padding-bottom:10px;
h1,
h2 {
width:100%;
font-family: "Patrick Hand";
margin:0px;
padding:0px;
text-align: center;
}
h2 {
font-size:14px;
line-height: 20px;
}
div {
&.sheet-container {
display:flex;
justify-content: space-between;
width:100%;
align-items: center;
align-content: center;
>span {
display:flex;
width:50%;
font-family: "Patrick Hand";
&:first-of-type {
padding-left:5px;
}
&:last-of-type {
justify-content: center;
}
}
}
}
.inlinerollresult,
.inlinerollresult.fullcrit,
.inlinerollresult.fullfail,
.inlinerollresult.importantroll {
display: flex;
border:0px;
background:0px;
padding:0px;
margin:0px;
align-items: center;
align-content: center;
}
a {
margin-left: auto !important;
margin-right: auto !important;
border: 2px solid black !important;
padding: 5px !important;
background: black !important;
color: white !important;
font-family: "Patrick Hand" !important;
letter-spacing: 1px !important;
border-radius: 15px !important;
&:hover {
text-decoration: none !important;
background:$costaud !important;
text-shadow: 2px 2px 2px #555555 !important;
}
}
}
+62
View File
@@ -0,0 +1,62 @@
{
"":"",
"chaton":"Chaton",
"enfance":"Enfance",
"caractere":"Caractère",
"donDeNaissance":"Don de naissance",
"experience":"Expérience",
"actuelle":"Actuelle",
"totale":"Totale",
"qualites":"Qualités",
"costaud":"Costaud",
"malin":"Malin",
"mignon":"Mignon",
"coeur":"Coeur",
"amitie":"Amitié",
"talents":"Talents",
"grimoire":"Grimoire",
"sacDeVoyage":"Sac de voyage",
"bougerpopotin":"Bouger son popotin",
"bricolertruc":"Bricoler des trucs et des machins",
"connaitrelois":"Connaître les lois et les légendes",
"convaincrebaratiner":"Convaincre et baratiner",
"cueillirchasser":"Cueillir et chasser",
"cuisiner":"Cuisiner",
"dessinerpeindre":"Dessiner et peindre",
"fairemusique":"Faire de la musique",
"fairepoches":"Faire les poches",
"feulermenacer":"Feuler et menacer",
"griffer":"Griffer",
"herboriser":"Herboriser",
"lireecrire":"Lire et écrire",
"lireciel":"Lire le ciel et les étoiles",
"observerfouiller":"Observer et fouiller",
"restercalme":"Rester calme et impassible",
"soccuperbetes":"S'occuper des bêtes",
"cacherombres":"Se cacher dans les ombres",
"deplacerensilence":"Se déplacer en silence",
"seduirecharmer":"Séduire et charmer",
"soignerblessures":"Soigner blessures et maladies",
"trouverchemin":"Trouver son chemin",
"trouverinformation":"Trouver une information",
"contenusac":"Une couverture en laine, un couteau de poche, une cuillère en bois, un petit caquelon de fonte, une grande gourde en cuir, un briquet à amadou, des morceaux de chandelle, un morceau de savon, une brosse, un paquet de croquette de route.",
"agir":"Agir :",
"agirdetail":"lancer 3d6, chaque résultat inférieur ou égal au score de la Qualité est un succès.",
"seuildifficulte":"Seuil de difficulté :",
"seuildifficultedetail":"facile 1, moyen 2, difficile 3, légendaire 4.",
"talent":"Talent :",
"talentdetail":"Donne un Avantage.",
"avantage":"Avantage :",
"avantagedetail":"Lancer 4d6.",
"desavantage":"Désavantage :",
"desavantagedetail":"Lancer 2d6.",
"objets":"Objets ou Don :",
"objetsdetail":"Si utile, relancer 1d6 dont le résultat ne convient pas.",
"caracterest":"Caractère :",
"caracteredetail":"Si positif, gagner 1 Avantage / Si négatif, offrir un point d'Amitié.",
"succes":"Succès",
"relance":"Relance",
"jets":"Les jets sont",
"public":"public",
"prives":"privés"
}